bitgo-client 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9610d4a33a131c5f89c0ee714e6bdf422365c9a224c6063c3922f6e32e45c4f0
4
- data.tar.gz: 83ce8d9a85b9fb38ed6c8a3acfe92e2dbb4fc3b2e181737c02d55731b1345ae2
3
+ metadata.gz: 57af0878ee90b927392baf669b14d0bf19a8888b3a9112bc668610ef457b68f9
4
+ data.tar.gz: 39ff3bf596bfa1b69273c139e5c5b8fa04e53a777a087e537619c7e3d752069e
5
5
  SHA512:
6
- metadata.gz: 8f95003126d309b29bf611eeb372ca8ec0e956cc4c3bd0bb0eda15803a84044ad0cb5788f28480912f095b21391024a00bb595b6b0947296b0cb40229106b514
7
- data.tar.gz: 7457a9d64a4b7070496597fa57a40899adc04daf9f3a681c13f79b4b9cd73a0ffe0d1cb5bd7d18f6df415bed64ed8c3cbcc92aa16f1b4c2d853bf676baff1a26
6
+ metadata.gz: e8a668e9de0c91f5ac90844c77e91a6f9588cf3707115ecda832f320e6f7cad69af6f940530ad8481913a20021d2f89d5ad83e29f9865aa11ad2d5460a42b4ca
7
+ data.tar.gz: ecd0e52a04f3992275a8d499b6140572e45e9389d4a9bf83a95f1d8c6f283449c19ba4825ba1861f8a7bb7c64b9965e74c40a6e26d2139c0acdd18162afd3eef
@@ -1,14 +1,38 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "logger"
4
+
3
5
  module BitgoClient
4
6
  class Client
7
+ SENSITIVE_KEYS = [
8
+ :backupXpub,
9
+ :keychain,
10
+ :newWalletPassphrase,
11
+ :otp,
12
+ :overrideEncryptedPrv,
13
+ :passcodeEncryptionCode,
14
+ :passphrase,
15
+ :password,
16
+ :prv,
17
+ :pub,
18
+ :userKey,
19
+ :userPassword,
20
+ :walletPassphrase,
21
+ :xprv,
22
+ ]
23
+
5
24
  attr_reader :access_token
6
25
 
7
26
  def initialize(access_token)
8
27
  @access_token = access_token
9
28
  end
10
29
 
11
- def request(url, payload = nil, method: :get)
30
+ def request(url, payload = nil, method: :get, logger: nil)
31
+ body = payload.to_json if payload
32
+
33
+ log logger, "Request url: #{url}, method: #{method}, body:"
34
+ log logger, payload
35
+
12
36
  request = Typhoeus::Request.new(
13
37
  url,
14
38
  method: method,
@@ -16,16 +40,42 @@ module BitgoClient
16
40
  "Authorization" => "Bearer #{access_token}",
17
41
  "Content-Type" => "application/json"
18
42
  },
19
- body: (payload ? payload.to_json : nil)
43
+ body: body
20
44
  )
21
45
 
22
46
  request.run
23
47
 
24
48
  response = request.response
25
49
 
26
- raise BitgoClient::Errors::RequestError.new("BitGo API response error.", response) if response.failure?
50
+ code = response.code
51
+ body = response.body
52
+
53
+ log logger, "Response code: '#{code}', body: '#{body}'"
54
+
55
+ if response.failure? || !code.between?(200, 300)
56
+ raise BitgoClient::Errors::RequestError.new("BitGo API response error.", response)
57
+ end
58
+
59
+ JSON.parse(body)
60
+ end
61
+
62
+ private
63
+
64
+ def log(logger, message)
65
+ return if logger.nil?
66
+
67
+ if message.is_a?(Hash)
68
+ SENSITIVE_KEYS.each { |key| message[key] = "[FILTERED]" if message.key?(key) }
69
+ message = message.to_json
70
+ end
71
+
72
+ tag = "#{self.class}/request"
27
73
 
28
- JSON.parse(response.body)
74
+ if logger.respond_to?(:tagged)
75
+ logger.tagged(tag) { logger.debug(message) }
76
+ else
77
+ logger.debug(tag) { message }
78
+ end
29
79
  end
30
80
  end
31
81
  end
@@ -25,34 +25,39 @@ module BitgoClient
25
25
  BitgoClient::Client.new(access_token)
26
26
  end
27
27
 
28
- def wallet(wallet_id, coin_code: :tbtc)
29
- client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}")
28
+ def wallet(wallet_id, coin_code: :tbtc, logger: nil)
29
+ client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}", logger: logger)
30
30
  end
31
31
 
32
- def create_address(wallet_id, coin_code: :tbtc)
33
- client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/address", method: :post)
32
+ def create_address(wallet_id, coin_code: :tbtc, logger: nil)
33
+ client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/address", method: :post, logger: logger)
34
34
  end
35
35
 
36
- def address(wallet_id, address, coin_code: :tbtc)
37
- client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/address/#{address}")
36
+ def address(wallet_id, address, coin_code: :tbtc, logger: nil)
37
+ client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/address/#{address}", logger: logger)
38
38
  end
39
39
 
40
- def send_transaction(wallet_id, payload, coin_code: :tbtc)
41
- client.request("#{express_path}/api/v2/#{coin_code}/wallet/#{wallet_id}/sendcoins", payload, method: :post)
40
+ def send_transaction(wallet_id, payload, coin_code: :tbtc, logger: nil)
41
+ client.request(
42
+ "#{express_path}/api/v2/#{coin_code}/wallet/#{wallet_id}/sendcoins",
43
+ payload,
44
+ method: :post,
45
+ logger: logger
46
+ )
42
47
  end
43
48
 
44
- def transactions(wallet_id, coin_code: :tbtc, limit: 25, prev_id: nil, all_tokens: nil)
49
+ def transactions(wallet_id, coin_code: :tbtc, logger: nil, limit: 25, prev_id: nil, all_tokens: nil)
45
50
  query_string = build_query_string(
46
51
  limit: limit,
47
52
  prevId: prev_id,
48
53
  allTokens: all_tokens
49
54
  )
50
55
 
51
- client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/tx?#{query_string}")
56
+ client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/tx?#{query_string}", logger: logger)
52
57
  end
53
58
 
54
- def transaction(wallet_id, transaction_id, coin_code: :tbtc)
55
- client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/tx/#{transaction_id}")
59
+ def transaction(wallet_id, transaction_id, coin_code: :tbtc, logger: nil)
60
+ client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/tx/#{transaction_id}", logger: logger)
56
61
  end
57
62
 
58
63
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BitgoClient
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitgo-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Soares
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-24 00:00:00.000000000 Z
11
+ date: 2019-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.5'
19
+ version: '2.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.5'
26
+ version: '2.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: typhoeus
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -53,17 +53,31 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.16'
55
55
  - !ruby/object:Gem::Dependency
56
- name: pry-byebug
56
+ name: byebug
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.6'
61
+ version: '10.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "<="
74
+ - !ruby/object:Gem::Version
75
+ version: '3.6'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "<="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '3.6'
69
83
  - !ruby/object:Gem::Dependency
@@ -86,14 +100,14 @@ dependencies:
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '3.0'
103
+ version: '3.8'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '3.0'
110
+ version: '3.8'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rubocop
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +156,14 @@ dependencies:
142
156
  requirements:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
- version: '3.3'
159
+ version: '3.5'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: '3.3'
166
+ version: '3.5'
153
167
  description: A Ruby client to BitGo's API and Express API.
154
168
  email:
155
169
  - bruno@bsoares.com
@@ -182,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
196
  version: '0'
183
197
  requirements: []
184
198
  rubyforge_project:
185
- rubygems_version: 2.7.6
199
+ rubygems_version: 2.7.6.2
186
200
  signing_key:
187
201
  specification_version: 4
188
202
  summary: BitGo's API Client.