bitgo-client 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 24cc2f80ac8c502ed8b077ed0688d36f8b0c98161591fc265b4f625e54d62c5e
4
+ data.tar.gz: 957b3dc332cad62e5c2d0a2c06f8275e50dbbcf665de76ab0fb745294d381561
5
+ SHA512:
6
+ metadata.gz: '0629b581c3632c2b50da5b43d27e43d614a878fe323fa8394b41814a0d0aab909465a3e207b86da2c72dea7f63d8418d914e52267dfab34105e69cf068fc61c5'
7
+ data.tar.gz: 7fd15112a9bf0dafe1af854bce140560681167a5f7290860f93742aa8092695244783cbfb0d224fac9869518449af4599b15f7538e289fa199d247fc725bb1db
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Dependencies
4
+ require "json"
5
+ require "typhoeus"
6
+
7
+ # Source
8
+ require "bitgo_client/version"
9
+ require "bitgo_client/errors/request_error"
10
+ require "bitgo_client/client"
11
+ require "bitgo_client/v2"
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BitgoClient
4
+ class Client
5
+ attr_reader :access_token
6
+
7
+ def initialize(access_token)
8
+ @access_token = access_token
9
+ end
10
+
11
+ def request(url, payload = nil, method: :get)
12
+ request = Typhoeus::Request.new(
13
+ url,
14
+ method: method,
15
+ headers: {
16
+ "Authorization" => "Bearer #{access_token}",
17
+ "Content-Type" => "application/json"
18
+ },
19
+ body: (payload ? payload.to_json : nil)
20
+ )
21
+
22
+ request.run
23
+
24
+ response = request.response
25
+
26
+ raise BitgoClient::Errors::RequestError.new("BitGo API response error.", response) if response.failure?
27
+
28
+ JSON.parse(response.body)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BitgoClient
4
+ module Errors
5
+ class RequestError < StandardError
6
+ attr_reader :response
7
+
8
+ def initialize(message, response)
9
+ super message
10
+
11
+ @response = response
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "addressable/uri"
4
+
5
+ module BitgoClient
6
+ class V2
7
+ ENV_PROD = "prod"
8
+ ENV_TEST = "test"
9
+ PATH_PROD = "https://www.bitgo.com/api/v2"
10
+ PATH_TEST = "https://test.bitgo.com/api/v2"
11
+
12
+ attr_reader :access_token, :env, :express_path
13
+
14
+ def initialize(access_token, env: ENV_TEST, express_path: "http://localhost:3080")
15
+ @access_token = access_token
16
+ @env = env
17
+ @express_path = express_path
18
+ end
19
+
20
+ def base_path
21
+ env == ENV_PROD ? PATH_PROD : PATH_TEST
22
+ end
23
+
24
+ def client
25
+ BitgoClient::Client.new(access_token)
26
+ end
27
+
28
+ def wallet(wallet_id, coin_code: :tbtc)
29
+ client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}")
30
+ end
31
+
32
+ def create_address(wallet_id, coin_code: :tbtc)
33
+ client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/address", method: :post)
34
+ end
35
+
36
+ def address(wallet_id, address, coin_code: :tbtc)
37
+ client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/address/#{address}")
38
+ end
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)
42
+ end
43
+
44
+ def transactions(wallet_id, coin_code: :tbtc, limit: 25, prev_id: nil, all_tokens: nil)
45
+ query_string = build_query_string(
46
+ limit: limit,
47
+ prevId: prev_id,
48
+ allTokens: all_tokens
49
+ )
50
+
51
+ client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/tx?#{query_string}")
52
+ end
53
+
54
+ def transaction(wallet_id, transaction_id, coin_code: :tbtc)
55
+ client.request("#{base_path}/#{coin_code}/wallet/#{wallet_id}/tx/#{transaction_id}")
56
+ end
57
+
58
+ private
59
+
60
+ def build_query_string(hash)
61
+ uri = Addressable::URI.new
62
+ uri.query_values = hash.delete_if { |k, v| v.nil? }
63
+ uri.query
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BitgoClient
4
+ VERSION = "0.1.0"
5
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bitgo-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Bruno Soares
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-04-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: typhoeus
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.16'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.16'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry-byebug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.6'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.53'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.53'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-github
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.10'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.10'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.24'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.24'
125
+ - !ruby/object:Gem::Dependency
126
+ name: webmock
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.3'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.3'
139
+ description: A Ruby client to BitGo's API and Express API.
140
+ email:
141
+ - bruno@bsoares.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - lib/bitgo_client.rb
147
+ - lib/bitgo_client/client.rb
148
+ - lib/bitgo_client/errors/request_error.rb
149
+ - lib/bitgo_client/v2.rb
150
+ - lib/bitgo_client/version.rb
151
+ homepage: https://bitbucket.org/modiaxtech/bitgo-client
152
+ licenses:
153
+ - MIT
154
+ metadata: {}
155
+ post_install_message:
156
+ rdoc_options: []
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ requirements: []
170
+ rubyforge_project:
171
+ rubygems_version: 2.7.6
172
+ signing_key:
173
+ specification_version: 4
174
+ summary: BitGo's API Client.
175
+ test_files: []