max_exchange_api 1.3.0 → 1.4.0

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.
@@ -1,52 +1,52 @@
1
- # frozen_string_literal: true
2
-
3
- require 'httparty'
4
- require 'max_exchange_api/helper'
5
-
6
- module MaxExchangeApi
7
- class BaseApi
8
- include HTTParty
9
-
10
- attr_reader :config
11
-
12
- def initialize(config: nil)
13
- @config = Config.new(config)
14
- @config.reverse_merge!(MaxExchangeApi.default_config)
15
- end
16
-
17
- protected
18
-
19
- def send_request(method, path, headers, query)
20
- uuid = SecureRandom.uuid
21
- print_log(:info, "[API] #{uuid} #{method.upcase} '#{path}' query = #{query}")
22
-
23
- body_or_query = method == :get ? :query : :body
24
-
25
- begin
26
- response = self.class.send(
27
- method,
28
- path,
29
- headers: headers.merge(
30
- 'Accept' => 'application/json',
31
- 'User-Agent' => "max_exchange_api (#{MaxExchangeApi::VERSION})",
32
- ),
33
- timeout: @config.timeout,
34
- body_or_query => query,
35
- ).parsed_response
36
-
37
- print_log(:info, "[API] #{uuid} response #{response}")
38
- return response
39
- rescue => error
40
- print_log(:error, "[API] #{uuid} raise exception #{error.message}")
41
- raise error
42
- end
43
- end
44
-
45
- private
46
-
47
- def print_log(method, message)
48
- logger = @config.logger
49
- logger.send(method, message) if logger
50
- end
51
- end
52
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'httparty'
4
+ require 'max_exchange_api/helper'
5
+
6
+ module MaxExchangeApi
7
+ class BaseApi
8
+ include HTTParty
9
+
10
+ attr_reader :config
11
+
12
+ def initialize(config: nil)
13
+ @config = Config.new(config)
14
+ @config.reverse_merge!(MaxExchangeApi.default_config)
15
+ end
16
+
17
+ protected
18
+
19
+ def send_request(method, path, headers, query)
20
+ uuid = SecureRandom.uuid
21
+ print_log(:info, "[API] #{uuid} #{method.upcase} '#{path}' query = #{query}")
22
+
23
+ body_or_query = method == :get ? :query : :body
24
+
25
+ begin
26
+ response = self.class.send(
27
+ method,
28
+ path,
29
+ headers: headers.merge(
30
+ 'Accept' => 'application/json',
31
+ 'User-Agent' => "max_exchange_api (#{MaxExchangeApi::VERSION})",
32
+ ),
33
+ timeout: @config.timeout,
34
+ body_or_query => query,
35
+ ).parsed_response
36
+
37
+ print_log(:info, "[API] #{uuid} response #{response}")
38
+ return response
39
+ rescue => error
40
+ print_log(:error, "[API] #{uuid} raise exception #{error.message}")
41
+ raise error
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def print_log(method, message)
48
+ logger = @config.logger
49
+ logger.send(method, message) if logger
50
+ end
51
+ end
52
+ end
@@ -1,26 +1,26 @@
1
- # frozen_string_literal: true
2
-
3
- module MaxExchangeApi
4
- class Config
5
- attr_accessor :timeout
6
- attr_accessor :logger
7
-
8
- def initialize(data = nil)
9
- data ||= {}
10
- @timeout = data[:timeout]
11
- @logger = data[:logger]
12
- end
13
-
14
- def reverse_merge!(other)
15
- @timeout ||= other.timeout
16
- @logger ||= other.logger
17
- end
18
- end
19
-
20
- @default_config = Config.new
21
- @default_config.timeout = 3
22
-
23
- class << self
24
- attr_reader :default_config
25
- end
26
- end
1
+ # frozen_string_literal: true
2
+
3
+ module MaxExchangeApi
4
+ class Config
5
+ attr_accessor :timeout
6
+ attr_accessor :logger
7
+
8
+ def initialize(data = nil)
9
+ data ||= {}
10
+ @timeout = data[:timeout]
11
+ @logger = data[:logger]
12
+ end
13
+
14
+ def reverse_merge!(other)
15
+ @timeout ||= other.timeout
16
+ @logger ||= other.logger
17
+ end
18
+ end
19
+
20
+ @default_config = Config.new
21
+ @default_config.timeout = 3
22
+
23
+ class << self
24
+ attr_reader :default_config
25
+ end
26
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'base64'
4
+
3
5
  module MaxExchangeApi
4
6
  module Helper
5
7
  class << self
@@ -4,235 +4,19 @@ require 'max_exchange_api/base_api'
4
4
 
5
5
  module MaxExchangeApi
6
6
  class PrivateApi < BaseApi
7
- base_uri 'https://max-api.maicoin.com/api/v2'
8
-
9
7
  def initialize(access_key, secret_key, config: nil)
10
8
  super(config: config)
11
9
 
12
10
  @access_key = access_key
13
11
  @secret_key = secret_key
14
- end
15
-
16
- def my_trades_of_order(order_id, use_client_id: false)
17
- id_params_key = use_client_id ? :client_oid : :id
18
- send_request(:get, '/trades/my/of_order', id_params_key => order_id)
19
- end
20
-
21
- def my_trades(market, timestamp: nil, from: nil, to: nil, order_by: 'desc', pagination: true, page: 1, limit: 50,
22
- offset: 0)
23
- send_request(
24
- :get,
25
- '/trades/my',
26
- market: market,
27
- timestamp: timestamp,
28
- from: from,
29
- to: to,
30
- order_by: order_by,
31
- pagination: pagination,
32
- page: page,
33
- limit: limit,
34
- offset: offset,
35
- )
36
- end
37
-
38
- def member_profile
39
- send_request(:get, '/members/profile', {})
40
- end
41
-
42
- def me
43
- send_request(:get, '/members/me', {})
44
- end
45
-
46
- def vip_level
47
- send_request(:get, '/members/vip_level', {})
48
- end
49
-
50
- def accounts
51
- send_request(:get, '/members/accounts', {})
52
- end
53
-
54
- def account(currency)
55
- send_request(:get, "/members/accounts/#{currency}", {})
56
- end
57
-
58
- def deposits(currency, from: nil, to: nil, state: nil, pagination: nil, page: 1, limit: 50,
59
- offset: 0)
60
- send_request(
61
- :get,
62
- '/deposits',
63
- currency: currency,
64
- from: from,
65
- to: to,
66
- state: state,
67
- pagination: pagination,
68
- page: page,
69
- limit: limit,
70
- offset: offset,
71
- )
72
- end
73
-
74
- def deposit(transaction_id)
75
- send_request(:get, '/deposit', txid: transaction_id)
76
- end
77
-
78
- def deposit_addresses(currency: nil, pagination: nil, page: 1, limit: 50, offset: 0)
79
- send_request(
80
- :get,
81
- '/deposit_addresses',
82
- currency: currency,
83
- pagination: pagination,
84
- page: page,
85
- limit: limit,
86
- offset: offset,
87
- )
88
- end
89
-
90
- def create_deposit_addresses!(currency)
91
- send_request(:post, '/deposit_addresses', currency: currency)
92
- end
93
-
94
- def withdraw_addresses(currency, pagination: nil, page: 1, limit: 50, offset: 0)
95
- send_request(
96
- :get,
97
- '/withdraw_addresses',
98
- currency: currency,
99
- pagination: pagination,
100
- page: page,
101
- limit: limit,
102
- offset: offset,
103
- )
104
- end
105
-
106
- def withdrawal(withdraw_id)
107
- send_request(:get, '/withdrawal', uuid: withdraw_id)
108
- end
109
-
110
- def withdrawals(currency, from: nil, to: nil, state: nil, pagination: nil, page: 1, limit: 50,
111
- offset: 0)
112
- send_request(
113
- :get,
114
- '/withdrawals',
115
- currency: currency,
116
- from: from,
117
- to: to,
118
- state: state,
119
- pagination: pagination,
120
- page: page,
121
- limit: limit,
122
- offset: offset,
123
- )
124
- end
125
-
126
- def create_withdrawal!(currency, withdraw_address_id, amount)
127
- send_request(:post, '/withdrawal', currency: currency, withdraw_address_uuid: withdraw_address_id, amount: amount)
128
- end
129
-
130
- def internal_transfers(currency: nil, side: 'in', from: nil, to: nil, pagination: nil, page: 1, limit: 50,
131
- offset: 0)
132
- send_request(
133
- :get,
134
- '/internal_transfers',
135
- currency: currency,
136
- side: side,
137
- from: from,
138
- to: to,
139
- pagination: pagination,
140
- page: page,
141
- limit: limit,
142
- offset: offset,
143
- )
144
- end
145
-
146
- def internal_transfer(internal_transfer_id)
147
- send_request(:get, '/internal_transfer', uuid: internal_transfer_id)
148
- end
149
-
150
- def rewards(reward_type: nil, currency: nil, from: nil, to: nil, pagination: nil, page: 1, limit: 50, offset: 0)
151
- path = reward_type ? "/rewards/#{reward_type}" : '/rewards'
152
- send_request(
153
- :get,
154
- path,
155
- currency: currency,
156
- from: from,
157
- to: to,
158
- pagination: pagination,
159
- page: page,
160
- limit: limit,
161
- offset: offset,
162
- )
163
- end
164
-
165
- def yields(currency: nil, from: nil, to: nil, pagination: nil, page: 1, limit: 50, offset: 0)
166
- send_request(
167
- :get,
168
- '/yields',
169
- currency: currency,
170
- from: from,
171
- to: to,
172
- pagination: pagination,
173
- page: page,
174
- limit: limit,
175
- offset: offset,
176
- )
177
- end
178
-
179
- def max_rewards_yesterday
180
- send_request(:get, '/max_rewards/yesterday', {})
181
- end
182
-
183
- def orders(market, state: nil, order_by: 'asc', group_id: nil, pagination: nil, page: 1, limit: 50, offset: 0)
184
- send_request(
185
- :get,
186
- '/orders',
187
- market: market,
188
- state: state,
189
- order_by: order_by,
190
- group_id: group_id,
191
- pagination: pagination,
192
- page: page,
193
- limit: limit,
194
- offset: offset,
195
- )
196
- end
197
-
198
- def order(order_id, use_client_id: false)
199
- id_params_key = use_client_id ? :client_oid : :id
200
- send_request(:get, '/order', id_params_key => order_id)
201
- end
202
-
203
- def cancel_orders!(market: nil, side: nil, group_id: nil)
204
- send_request(:post, '/orders/clear', market: market, side: side, group_id: group_id)
205
- end
206
-
207
- def cancel_order!(order_id, use_client_id: false)
208
- id_params_key = use_client_id ? :client_oid : :id
209
- send_request(:post, '/order/delete', id_params_key => order_id)
210
- end
211
-
212
- def create_order!(market, side, volume, price: nil, client_oid: nil, stop_price: nil, ord_type: nil, group_id: nil)
213
- send_request(
214
- :post,
215
- '/orders',
216
- market: market,
217
- side: side,
218
- volume: volume,
219
- price: price,
220
- client_oid: client_oid,
221
- stop_price: stop_price,
222
- ord_type: ord_type,
223
- group_id: group_id,
224
- )
225
- end
226
-
227
- def create_orders!(market, orders, group_id: nil)
228
- send_request(:post, '/orders/multi/onebyone', market: market, orders: orders, group_id: group_id)
12
+ @base_path = URI.parse(self.class.base_uri).path
229
13
  end
230
14
 
231
15
  protected
232
16
 
233
17
  def send_request(method, path, query)
234
18
  query = query.compact
235
- query.merge!(path: "/api/v2#{path}", nonce: (Time.now.to_f * 1000).to_i)
19
+ query.merge!(path: "#{@base_path}#{path}", nonce: (Time.now.to_f * 1000).to_i)
236
20
  return super(method, path, Helper.gen_headers(query, @access_key, @secret_key), query)
237
21
  end
238
22
  end
@@ -0,0 +1,224 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'max_exchange_api/private_api'
4
+
5
+ module MaxExchangeApi
6
+ class PrivateV2Api < PrivateApi
7
+ base_uri 'https://max-api.maicoin.com/api/v2'
8
+
9
+ def my_trades_of_order(order_id, use_client_id: false)
10
+ id_params_key = use_client_id ? :client_oid : :id
11
+ send_request(:get, '/trades/my/of_order', id_params_key => order_id)
12
+ end
13
+
14
+ def my_trades(market, timestamp: nil, from: nil, to: nil, order_by: 'desc', pagination: true, page: 1, limit: 50,
15
+ offset: 0)
16
+ send_request(
17
+ :get,
18
+ '/trades/my',
19
+ market: market,
20
+ timestamp: timestamp,
21
+ from: from,
22
+ to: to,
23
+ order_by: order_by,
24
+ pagination: pagination,
25
+ page: page,
26
+ limit: limit,
27
+ offset: offset,
28
+ )
29
+ end
30
+
31
+ def member_profile
32
+ send_request(:get, '/members/profile', {})
33
+ end
34
+
35
+ def me
36
+ send_request(:get, '/members/me', {})
37
+ end
38
+
39
+ def vip_level
40
+ send_request(:get, '/members/vip_level', {})
41
+ end
42
+
43
+ def accounts
44
+ send_request(:get, '/members/accounts', {})
45
+ end
46
+
47
+ def account(currency)
48
+ send_request(:get, "/members/accounts/#{currency}", {})
49
+ end
50
+
51
+ def deposits(currency, from: nil, to: nil, state: nil, pagination: nil, page: 1, limit: 50,
52
+ offset: 0)
53
+ send_request(
54
+ :get,
55
+ '/deposits',
56
+ currency: currency,
57
+ from: from,
58
+ to: to,
59
+ state: state,
60
+ pagination: pagination,
61
+ page: page,
62
+ limit: limit,
63
+ offset: offset,
64
+ )
65
+ end
66
+
67
+ def deposit(transaction_id)
68
+ send_request(:get, '/deposit', txid: transaction_id)
69
+ end
70
+
71
+ def deposit_addresses(currency: nil, pagination: nil, page: 1, limit: 50, offset: 0)
72
+ send_request(
73
+ :get,
74
+ '/deposit_addresses',
75
+ currency: currency,
76
+ pagination: pagination,
77
+ page: page,
78
+ limit: limit,
79
+ offset: offset,
80
+ )
81
+ end
82
+
83
+ def create_deposit_addresses!(currency)
84
+ send_request(:post, '/deposit_addresses', currency: currency)
85
+ end
86
+
87
+ def withdraw_addresses(currency, pagination: nil, page: 1, limit: 50, offset: 0)
88
+ send_request(
89
+ :get,
90
+ '/withdraw_addresses',
91
+ currency: currency,
92
+ pagination: pagination,
93
+ page: page,
94
+ limit: limit,
95
+ offset: offset,
96
+ )
97
+ end
98
+
99
+ def withdrawal(withdraw_id)
100
+ send_request(:get, '/withdrawal', uuid: withdraw_id)
101
+ end
102
+
103
+ def withdrawals(currency, from: nil, to: nil, state: nil, pagination: nil, page: 1, limit: 50,
104
+ offset: 0)
105
+ send_request(
106
+ :get,
107
+ '/withdrawals',
108
+ currency: currency,
109
+ from: from,
110
+ to: to,
111
+ state: state,
112
+ pagination: pagination,
113
+ page: page,
114
+ limit: limit,
115
+ offset: offset,
116
+ )
117
+ end
118
+
119
+ def create_withdrawal!(currency, withdraw_address_id, amount)
120
+ send_request(:post, '/withdrawal', currency: currency, withdraw_address_uuid: withdraw_address_id, amount: amount)
121
+ end
122
+
123
+ def internal_transfers(currency: nil, side: 'in', from: nil, to: nil, pagination: nil, page: 1, limit: 50,
124
+ offset: 0)
125
+ send_request(
126
+ :get,
127
+ '/internal_transfers',
128
+ currency: currency,
129
+ side: side,
130
+ from: from,
131
+ to: to,
132
+ pagination: pagination,
133
+ page: page,
134
+ limit: limit,
135
+ offset: offset,
136
+ )
137
+ end
138
+
139
+ def internal_transfer(internal_transfer_id)
140
+ send_request(:get, '/internal_transfer', uuid: internal_transfer_id)
141
+ end
142
+
143
+ def rewards(reward_type: nil, currency: nil, from: nil, to: nil, pagination: nil, page: 1, limit: 50, offset: 0)
144
+ path = reward_type ? "/rewards/#{reward_type}" : '/rewards'
145
+ send_request(
146
+ :get,
147
+ path,
148
+ currency: currency,
149
+ from: from,
150
+ to: to,
151
+ pagination: pagination,
152
+ page: page,
153
+ limit: limit,
154
+ offset: offset,
155
+ )
156
+ end
157
+
158
+ def yields(currency: nil, from: nil, to: nil, pagination: nil, page: 1, limit: 50, offset: 0)
159
+ send_request(
160
+ :get,
161
+ '/yields',
162
+ currency: currency,
163
+ from: from,
164
+ to: to,
165
+ pagination: pagination,
166
+ page: page,
167
+ limit: limit,
168
+ offset: offset,
169
+ )
170
+ end
171
+
172
+ def max_rewards_yesterday
173
+ send_request(:get, '/max_rewards/yesterday', {})
174
+ end
175
+
176
+ def orders(market, state: nil, order_by: 'asc', group_id: nil, pagination: nil, page: 1, limit: 50, offset: 0)
177
+ send_request(
178
+ :get,
179
+ '/orders',
180
+ market: market,
181
+ state: state,
182
+ order_by: order_by,
183
+ group_id: group_id,
184
+ pagination: pagination,
185
+ page: page,
186
+ limit: limit,
187
+ offset: offset,
188
+ )
189
+ end
190
+
191
+ def order(order_id, use_client_id: false)
192
+ id_params_key = use_client_id ? :client_oid : :id
193
+ send_request(:get, '/order', id_params_key => order_id)
194
+ end
195
+
196
+ def cancel_orders!(market: nil, side: nil, group_id: nil)
197
+ send_request(:post, '/orders/clear', market: market, side: side, group_id: group_id)
198
+ end
199
+
200
+ def cancel_order!(order_id, use_client_id: false)
201
+ id_params_key = use_client_id ? :client_oid : :id
202
+ send_request(:post, '/order/delete', id_params_key => order_id)
203
+ end
204
+
205
+ def create_order!(market, side, volume, price: nil, client_oid: nil, stop_price: nil, ord_type: nil, group_id: nil)
206
+ send_request(
207
+ :post,
208
+ '/orders',
209
+ market: market,
210
+ side: side,
211
+ volume: volume,
212
+ price: price,
213
+ client_oid: client_oid,
214
+ stop_price: stop_price,
215
+ ord_type: ord_type,
216
+ group_id: group_id,
217
+ )
218
+ end
219
+
220
+ def create_orders!(market, orders, group_id: nil)
221
+ send_request(:post, '/orders/multi/onebyone', market: market, orders: orders, group_id: group_id)
222
+ end
223
+ end
224
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'max_exchange_api/private_api'
4
+
5
+ module MaxExchangeApi
6
+ class PrivateV3Api < PrivateApi
7
+ base_uri 'https://max-api.maicoin.com/api/v3'
8
+ end
9
+ end
@@ -4,64 +4,6 @@ require 'max_exchange_api/base_api'
4
4
 
5
5
  module MaxExchangeApi
6
6
  class PublicApi < BaseApi
7
- base_uri 'https://max-api.maicoin.com/api/v2'
8
-
9
- def vip_levels(level = nil)
10
- if level
11
- send_request(:get, "/vip_levels/#{level}", {})
12
- else
13
- send_request(:get, '/vip_levels', {})
14
- end
15
- end
16
-
17
- def currencies
18
- send_request(:get, '/currencies', {})
19
- end
20
-
21
- def k(market, limit: 30, period: 1, timestamp: nil)
22
- send_request(:get, '/k', market: market, limit: limit, period: period, timestamp: timestamp)
23
- end
24
-
25
- def depth(market, limit: 10, sort_by_price: true)
26
- send_request(:get, '/depth', market: market, limit: limit, sort_by_price: sort_by_price)
27
- end
28
-
29
- def trades(market, timestamp: nil, from: nil, to: nil, order_by: 'desc', pagination: true, page: 1, limit: 50,
30
- offset: 0)
31
- send_request(
32
- :get,
33
- '/trades',
34
- market: market,
35
- timestamp: timestamp,
36
- from: from,
37
- to: to,
38
- order_by: order_by,
39
- pagination: pagination,
40
- page: page,
41
- limit: limit,
42
- offset: offset,
43
- )
44
- end
45
-
46
- def markets
47
- send_request(:get, '/markets', {})
48
- end
49
-
50
- def summary
51
- send_request(:get, '/summary', {})
52
- end
53
-
54
- def tickers(market = nil)
55
- if market
56
- send_request(:get, "/tickers/#{market}", {})
57
- else
58
- send_request(:get, '/tickers', {})
59
- end
60
- end
61
-
62
- def timestamp
63
- send_request(:get, '/timestamp', {})
64
- end
65
7
 
66
8
  protected
67
9