class BtcPay::Client::Base

Constants

API_PATH
DEFAULT_TIMEOUT

Attributes

config[R]
logger[R]

Public Class Methods

new(config:, logger: Logger.new(STDOUT), timeout: DEFAULT_TIMEOUT, **_kwargs) click to toggle source

@param config [BtcPay::Client::Config] @param logger [Logger] @param timeout [Integer] Defaults to DEFAULT_TIMEOUT

# File lib/btcpay/client/base.rb, line 28
def initialize(config:, logger: Logger.new(STDOUT), timeout: DEFAULT_TIMEOUT, **_kwargs)
  @config = config
  @logger = logger
  @timeout = timeout
end

Public Instance Methods

api_keys() click to toggle source
# File lib/btcpay/client/base.rb, line 78
def api_keys
  @api_keys ||= Api::ApiKeys.new(client: self)
end
api_keys_helper() click to toggle source
# File lib/btcpay/client/base.rb, line 82
def api_keys_helper
  @api_keys_helper ||= Helpers::ApiKeys.new(client: self)
end
delete(uri, options: {}, headers: {}) click to toggle source

DELETE request

@param uri [String] @param options [Hash] @param headers [Hash] @return [Result]

# File lib/btcpay/client/base.rb, line 74
def delete(uri, options: {}, headers: {})
  request(uri, method: :delete, options: options, headers: headers)
end
get(uri, options: {}, headers: {}, **kwargs) click to toggle source

GET request

@param uri [String] @param options [Hash] @param headers [Hash] @return [Result]

# File lib/btcpay/client/base.rb, line 40
def get(uri, options: {}, headers: {}, **kwargs)
  request(uri, method: :get, options: options, headers: headers, **kwargs)
end
health() click to toggle source
# File lib/btcpay/client/base.rb, line 86
def health
  @health ||= Api::Health.new(client: self)
end
lightning() click to toggle source
# File lib/btcpay/client/base.rb, line 90
def lightning
  @lightning ||= OpenStruct.new(node: Api::LightningNode.new(client: self))
end
payments()
Alias for: pull_payments
post(uri, payload: {}, options: {}, headers: {}) click to toggle source

POST request

@param uri [String] @param payload [Hash] @param options [Hash] @param headers [Hash] @return [Result]

# File lib/btcpay/client/base.rb, line 51
def post(uri, payload: {}, options: {}, headers: {})
  data = payload.is_a?(Hash) ? payload.to_json : payload
  request(uri, method: :post, payload: data, options: options, headers: headers)
end
pull_payments() click to toggle source
# File lib/btcpay/client/base.rb, line 94
def pull_payments
  @pull_payments ||= Api::PullPayments.new(client: self)
end
Also aliased as: payments
put(uri, payload:, options: {}, headers: {}) click to toggle source

PUT request

@param uri [String] @param payload [Hash] @param options [Hash] @param headers [Hash] @return [Result]

# File lib/btcpay/client/base.rb, line 63
def put(uri, payload:, options: {}, headers: {})
  data = payload.is_a?(Hash) ? payload.to_json : payload
  request(uri, method: :put, payload: data, options: options, headers: headers)
end
server() click to toggle source
# File lib/btcpay/client/base.rb, line 100
def server
  @server ||= Api::Server.new(client: self)
end
store() click to toggle source
# File lib/btcpay/client/base.rb, line 104
def store
  @store ||= Api::Store.new(client: self)
end
users() click to toggle source
# File lib/btcpay/client/base.rb, line 108
def users
  @users ||= Api::Users.new(client: self)
end

Private Instance Methods

default_headers() click to toggle source

@return [Hash]

# File lib/btcpay/client/base.rb, line 117
def default_headers
  {
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'User-Agent' => config.user_agent,
    'Accept-Encoding' => 'deflate, gzip',
    'Authorization' => config.authorization
  }
end
handle_error(error) click to toggle source

Handle errors @param error [Error] @return [Result]

# File lib/btcpay/client/base.rb, line 171
def handle_error(error)
  logger.error(error: 'Request Exception', code: error.response.code, message: error.message)

  Result.failed(error.response)
end
open_timeout() click to toggle source

@return [Integer]

# File lib/btcpay/client/base.rb, line 178
def open_timeout
  @open_timeout || DEFAULT_TIMEOUT
end
request(uri, **kwargs) click to toggle source

@yield [Result]

# File lib/btcpay/client/base.rb, line 128
def request(uri, **kwargs)
  params = request_builder(uri, **kwargs)
  return params if kwargs[:skip_request]

  response = RestClient::Request.execute(params)
  logger.debug(message: 'GET Request', url: params[:url], options: kwargs[:options], status: response.code)
  result = success?(response.code) ? Result.success(response) : Result.failed(response)

  logger.warn(error: 'Request Error', code: result.code, body: result.raw) if result.failure?
  result
rescue ::RestClient::GatewayTimeout
  raise Error.new('Gateway timeout')
rescue ::RestClient::RequestTimeout
  raise Error.new('Request timeout')
rescue ::RestClient::Exception => e
  handle_error(e)
end
request_builder(uri, **kwargs) click to toggle source

@param uri @option

# File lib/btcpay/client/base.rb, line 148
def request_builder(uri, **kwargs)
  options = kwargs[:options] ||= {}
  headers = kwargs[:headers] ||= {}

  url = URI(config.base_url)
  url.path = kwargs[:skip_api_path] ? uri : API_PATH + uri
  url.query = CGI.unescape(options.to_query).presence

  return url.to_s if kwargs[:skip_request]

  {
    method: kwargs[:method],
    url: url.to_s,
    payload: kwargs[:payload].presence,
    headers: default_headers.merge(headers),
    open_timeout: open_timeout,
    timeout: timeout
  }.compact
end
success?(response_code) click to toggle source
# File lib/btcpay/client/base.rb, line 187
def success?(response_code)
  response_code.in?(200..299)
end
timeout() click to toggle source

@return [Integer]

# File lib/btcpay/client/base.rb, line 183
def timeout
  @timeout || DEFAULT_TIMEOUT
end