class BitgoClient::Client

Constants

SENSITIVE_KEYS

Attributes

access_token[R]

Public Class Methods

new(access_token) click to toggle source
# File lib/bitgo_client/client.rb, line 26
def initialize(access_token)
  @access_token = access_token
end

Public Instance Methods

request(url, payload = nil, method: :get, logger: nil) click to toggle source
# File lib/bitgo_client/client.rb, line 30
def request(url, payload = nil, method: :get, logger: nil)
  body = payload.to_json if payload

  log logger, "Request url: #{url}, method: #{method}, body:"
  log logger, payload

  request = Typhoeus::Request.new(
    url,
    method: method,
    headers: {
      "Authorization" => "Bearer #{access_token}",
      "Content-Type"  => "application/json"
    },
    body: body
  )

  request.run

  response = request.response

  code = response.code
  body = response.body

  log logger, "Response code: '#{code}', body: '#{body}'"

  if [408, 504, 524].include?(code)
    raise BitgoClient::Errors::RequestError.new("[BitGo API Error] Timeout (code: #{code}).", response)
  elsif response.failure?
    raise BitgoClient::Errors::RequestError.new("[BitGo API Error] code: #{code}.", response)
  elsif body.nil? || body == ""
    {}
  elsif valid_json?(body)
    JSON.parse(body)
  else
    raise BitgoClient::Errors::RequestError.new("[BitGo API Error] Invalid JSON (code: #{code}).", response)
  end
end

Private Instance Methods

log(logger, message) click to toggle source
# File lib/bitgo_client/client.rb, line 70
def log(logger, message)
  return if logger.nil?

  if message.is_a?(Hash)
    SENSITIVE_KEYS.each { |key| message[key] = "[FILTERED]" if message.key?(key) }
    message = message.to_json
  end

  tag = "#{self.class}/request"

  if logger.respond_to?(:tagged)
    logger.tagged(tag) { logger.debug(message) }
  else
    logger.debug(tag) { message }
  end
end
valid_json?(json) click to toggle source
# File lib/bitgo_client/client.rb, line 87
def valid_json?(json)
  JSON.parse(json)
  return true
rescue JSON::ParserError => e
  return false
end