class Lndhub attr_accessor :auth_token def initialize @base_url = ENV["LNDHUB_API_URL"] end def post(endpoint, payload) headers = { "Content-Type" => "application/json" } if auth_token headers.merge!({ "Authorization" => "Bearer #{auth_token}" }) end res = Faraday.post "#{@base_url}/#{endpoint}", payload.to_json, headers log_error(res) if res.status != 200 JSON.parse(res.body) end def get(endpoint, auth_token) res = Faraday.get("#{@base_url}/#{endpoint}", {}, { "Content-Type" => "application/json", "Accept" => "application/json", "Authorization" => "Bearer #{auth_token}" }) data = JSON.parse(res.body) if data.is_a?(Hash) && data["error"] && data["message"] == "bad auth" raise AuthError else data end end def create(payload) post "create", payload end def authenticate(user) credentials = post "auth?type=auth", { login: user.ln_account, password: user.ln_password } self.auth_token = credentials["access_token"] self.auth_token end def balance(user_token=nil) get "balance", user_token || auth_token end def gettxs(user_token=nil) get "gettxs", user_token || auth_token end def getuserinvoices(user_token=nil) get "getuserinvoices", user_token || auth_token end def addinvoice(payload) invoice = post "addinvoice", { amt: payload[:amount], memo: payload[:memo], description_hash: payload[:description_hash] } invoice["payment_request"] end def log_error(res) Rails.logger.error "[lndhub] API request failed:" Rails.logger.error res.body if Setting.sentry_enabled? Sentry.capture_message("Lndhub API request failed: #{res.body}") end end end