class LndhubV2 attr_accessor :auth_token def initialize @base_url = ENV["LNDHUB_API_URL"] end def post(endpoint, payload, options={}) headers = { "Content-Type" => "application/json" } if auth_token headers.merge!({ "Authorization" => "Bearer #{auth_token}" }) elsif options[:admin_token] headers.merge!({ "Authorization" => "Bearer #{options[:admin_token]}" }) end res = Faraday.post "#{@base_url}/#{endpoint}", payload.to_json, headers if res.status != 200 Rails.logger.error "[lndhub] API request failed:" Rails.logger.error res.body #TODO add some kind of exception tracking/notifications end 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}" }) JSON.parse(res.body) 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) get "gettxs", user_token || auth_token end def getuserinvoices(user_token) 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 # # V2 # def create_account(payload={}) post "v2/users", payload, admin_token: Rails.application.credentials.lndhub[:admin_token] end def create_invoice(payload) # Payload: { amount: 1000, description: "", description_hash: "" } post "v2/invoices", payload end end