max_exchange_api 0.1.0 → 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 71535a1c969d383e36c7af1860aeab28c78f55fb62d0e2ef4cb05c9fe8d0df27
4
- data.tar.gz: c132f2796b57303bfd288a64f0b14cf966d4117568dadb02b606270c316d08c7
3
+ metadata.gz: 29e67831c545b85f3e39db7cdab7dcbf293c8d2958a5fed7affa29b2617d4a79
4
+ data.tar.gz: '08ba7fe4b157b1abcd9611e47c170c406975dcea7497cc9be6490ec7bd3985f3'
5
5
  SHA512:
6
- metadata.gz: f51b1539a5cbc487c325fec8b46e5ef38b6c12f4fd909631769fba2e2d82bdbe8dba39ae0130919ca6951aed220e677ec07f64e5d465907fdb0d4cae7224080d
7
- data.tar.gz: 2afa7b1325fe0756f92416b33e762b9fd264abb6ff4615d6495c4e1d92e8c265b92f680ce8ede43c4e408503cacd15f8b0d9adf84ce31799ca2d25a4aa360e1c
6
+ metadata.gz: c10c08e3462a21a8ea9cb5be83327d06bdc8e406757895004ef31ed38df4606903337edbf7c07e0c5944ca88f8817c203abd7319369cbe763fed74785d3a788a
7
+ data.tar.gz: dd2bc0c74f8ae55bb1df54cfed702c6c908678ebca08f10c4181adc26162b23401ecaaddbbe9ff2698a9a96fb0662a041431044b2f6327d26285dba12b62c10a
data/CHANGELOG.md CHANGED
@@ -1,4 +1,8 @@
1
1
  ## Change Log
2
2
 
3
+ ### [v0.1.0](https://github.com/khiav223577/max_exchange_api/compare/v0.0.1...v0.1.0) 2021/06/26
4
+ - [#3](https://github.com/khiav223577/max_exchange_api/pull/3) Add default_timeout config (@khiav223577)
5
+ - [#2](https://github.com/khiav223577/max_exchange_api/pull/2) Implement all v2 public APIs (@khiav223577)
6
+
3
7
  ### v0.0.1 2021/06/23
4
8
  - [#1](https://github.com/khiav223577/max_exchange_api/pull/1) Implement `/depth` API (@khiav223577)
data/README.md CHANGED
@@ -35,12 +35,21 @@ Or install it yourself as:
35
35
 
36
36
  $ gem install max_exchange_api
37
37
 
38
- ## Default config
38
+ ## Configuration
39
39
 
40
- Change default api timeout time (in seconds)
40
+ ### Api timeout time
41
41
 
42
42
  ```rb
43
- MaxExchangeApi.config.default_timeout = 3
43
+ MaxExchangeApi.default_config.timeout = 3 # seconds
44
+ ```
45
+
46
+ ### Api logging
47
+
48
+ ```rb
49
+ require 'logger'
50
+
51
+ MaxExchangeApi.default_config.logger = Logger.new(STDOUT) # print log to stdand output
52
+ MaxExchangeApi.default_config.logger = Logger.new('log/api.log')
44
53
  ```
45
54
 
46
55
  ## Usage
@@ -205,6 +214,476 @@ MaxExchangeApi.config.default_timeout = 3
205
214
  ```
206
215
  </details>
207
216
 
217
+ ### Private Api Examples
218
+
219
+ ```rb
220
+ access_key = 'YOUR_ACCESS_KEY'
221
+ secret_key = 'YOUR_SECRET_KEY'
222
+
223
+ @api = MaxExchangeApi::PrivateApi.new(access_key, secret_key)
224
+ ```
225
+
226
+ ### Trade
227
+ #### [GET /api/v2/trades/my/of_order](https://max.maicoin.com/documents/api_list#!/private/getApiV2TradesMyOfOrder)
228
+
229
+ > get your executed trades related to a order
230
+
231
+ <details>
232
+ <summary>Show code</summary>
233
+
234
+ ```rb
235
+ # use max unique order id
236
+ @api.my_trades_of_order(123456)
237
+
238
+ # use user specified order id
239
+ @api.my_trades_of_order('MY_ORDER_123456', use_client_id: true)
240
+ ```
241
+ </details>
242
+
243
+ #### [GET /api/v2/trades/my](https://max.maicoin.com/documents/api_list#!/private/getApiV2TradesMy)
244
+
245
+ > get your executed trades, sorted in reverse creation order
246
+
247
+ <details>
248
+ <summary>Show code</summary>
249
+
250
+ ```rb
251
+ # use default parameters
252
+ @api.my_trades('btctwd')
253
+
254
+ # provide all possible parameters
255
+ @api.my_trades(
256
+ 'maxtwd',
257
+ timestamp: 1624705402,
258
+ from: 68444,
259
+ to: 69444,
260
+ order_by: 'asc',
261
+ pagination: true,
262
+ page: 3,
263
+ limit: 15,
264
+ offset: 5,
265
+ )
266
+ ```
267
+ </details>
268
+
269
+ ### Withdrawal
270
+ #### [GET /api/v2/withdrawals](https://max.maicoin.com/documents/api_list#!/private/getApiV2Withdrawals)
271
+
272
+ > get your external withdrawals history
273
+
274
+ <details>
275
+ <summary>Show code</summary>
276
+
277
+ ```rb
278
+ # use default parameters
279
+ @api.withdrawals('max')
280
+
281
+ # provide all possible parameters
282
+ @api.withdrawals(
283
+ 'max',
284
+ 'confirmed',
285
+ from: 68444,
286
+ to: 69444,
287
+ state: 'confirmed',
288
+ pagination: true,
289
+ page: 3,
290
+ limit: 15,
291
+ offset: 5,
292
+ )
293
+ ```
294
+ </details>
295
+
296
+ #### [GET /api/v2/withdrawal](https://max.maicoin.com/documents/api_list#!/private/getApiV2Withdrawal)
297
+
298
+ > get details of a specific external withdraw
299
+
300
+ <details>
301
+ <summary>Show code</summary>
302
+
303
+ ```rb
304
+ @api.withdrawal('withdraw_id')
305
+ ```
306
+ </details>
307
+
308
+ #### [POST /api/v2/withdrawal](https://max.maicoin.com/documents/api_list#!/private/postApiV2Withdrawal)
309
+
310
+ > submit a withdrawal. IP whitelist for api token is required.
311
+
312
+ <details>
313
+ <summary>Show code</summary>
314
+
315
+ ```rb
316
+ @api.create_withdrawal!('twd', 'withdraw_address_id', 100000)
317
+ ```
318
+ </details>
319
+
320
+ ### Profile
321
+ #### [GET /api/v2/members/profile](https://max.maicoin.com/documents/api_list#!/private/getApiV2MembersProfile)
322
+
323
+ > get personal profile information
324
+
325
+ <details>
326
+ <summary>Show code</summary>
327
+
328
+ ```rb
329
+ @api.member_profile
330
+ ```
331
+ </details>
332
+
333
+ #### [GET /api/v2/members/me](https://max.maicoin.com/documents/api_list#!/private/getApiV2MembersMe)
334
+
335
+ > get your profile and accounts information
336
+
337
+ <details>
338
+ <summary>Show code</summary>
339
+
340
+ ```rb
341
+ @api.me
342
+ ```
343
+ </details>
344
+
345
+ #### [GET /api/v2/members/vip_level](https://max.maicoin.com/documents/api_list#!/private/getApiV2MembersVipLevel)
346
+
347
+ > get VIP level info
348
+
349
+ <details>
350
+ <summary>Show code</summary>
351
+
352
+ ```rb
353
+ @api.vip_level
354
+ ```
355
+ </details>
356
+
357
+ ### Account
358
+ #### [GET /api/v2/members/accounts](https://max.maicoin.com/documents/api_list#!/private/getApiV2MembersAccounts)
359
+
360
+ > get personal accounts information
361
+
362
+ <details>
363
+ <summary>Show code</summary>
364
+
365
+ ```rb
366
+ @api.accounts
367
+ ```
368
+ </details>
369
+
370
+ #### [GET /api/v2/members/accounts/{path_currency}](https://max.maicoin.com/documents/api_list#!/private/getApiV2MembersAccountsPathCurrency)
371
+
372
+ > get personal accounts information of a currency
373
+
374
+ <details>
375
+ <summary>Show code</summary>
376
+
377
+ ```rb
378
+ @api.account(currnecy)
379
+ ```
380
+ </details>
381
+
382
+ ### Deposit
383
+ #### [GET /api/v2/deposits](https://max.maicoin.com/documents/api_list#!/private/getApiV2Deposits)
384
+
385
+ > get your deposits history
386
+
387
+ <details>
388
+ <summary>Show code</summary>
389
+
390
+ ```rb
391
+ # use default parameters
392
+ @api.deposits('max')
393
+
394
+ # provide all possible parameters
395
+ @api.deposits(
396
+ 'max',
397
+ 'confirmed',
398
+ from: 68444,
399
+ to: 69444,
400
+ state: 'accepted',
401
+ pagination: true,
402
+ page: 3,
403
+ limit: 15,
404
+ offset: 5,
405
+ )
406
+ ```
407
+ </details>
408
+
409
+ #### [GET /api/v2/deposit](https://max.maicoin.com/documents/api_list#!/private/getApiV2Deposit)
410
+
411
+ > get details of a specific deposit
412
+
413
+ <details>
414
+ <summary>Show code</summary>
415
+
416
+ ```rb
417
+ @api.deposit('transaction_id')
418
+ ```
419
+ </details>
420
+
421
+ ### Address
422
+ #### [GET /api/v2/deposit_addresses](https://max.maicoin.com/documents/api_list#!/private/getApiV2DepositAddresses)
423
+
424
+ > The addresses could be empty before generated, please call POST /deposit_addresses in that case
425
+
426
+ <details>
427
+ <summary>Show code</summary>
428
+
429
+ ```rb
430
+ # use default parameters
431
+ @api.deposit_addresses
432
+
433
+ # provide all possible parameters
434
+ @api.deposit_addresses(currency: 'twd', pagination: true, page: 3, limit: 15, offset: 5)
435
+ ```
436
+ </details>
437
+
438
+ #### [POST /api/v2/deposit_addresses](https://max.maicoin.com/documents/api_list#!/private/postApiV2DepositAddresses)
439
+
440
+ > Address creation is asynchronous, please call GET /deposit_addresses later to get generated addresses
441
+
442
+ <details>
443
+ <summary>Show code</summary>
444
+
445
+ ```rb
446
+ @api.create_deposit_addresses!('twd')
447
+ ```
448
+ </details>
449
+
450
+ #### [GET /api/v2/withdraw_addresses](https://max.maicoin.com/documents/api_list#!/private/getApiV2WithdrawAddresses)
451
+
452
+ > get withdraw addresses
453
+
454
+ <details>
455
+ <summary>Show code</summary>
456
+
457
+ ```rb
458
+ # use default parameters
459
+ @api.withdraw_addresses('twd')
460
+
461
+ # provide all possible parameters
462
+ @api.withdraw_addresses('usdt', pagination: true, page: 3, limit: 15, offset: 5)
463
+ ```
464
+ </details>
465
+
466
+ ### Internal Transfer
467
+ #### [GET /api/v2/internal_transfers](https://max.maicoin.com/documents/api_list#!/private/getApiV2InternalTransfers)
468
+
469
+ > get internal transfers history
470
+
471
+ <details>
472
+ <summary>Show code</summary>
473
+
474
+ ```rb
475
+ # use default parameters
476
+ @api.internal_transfers
477
+
478
+ # provide all possible parameters
479
+ @api.internal_transfers(
480
+ currency: 'btc',
481
+ side: 'in',
482
+ from: 68444,
483
+ to: 69444,
484
+ pagination: true,
485
+ page: 3,
486
+ limit: 15,
487
+ offset: 5,
488
+ )
489
+ ```
490
+ </details>
491
+
492
+ #### [GET /api/v2/internal_transfer](https://max.maicoin.com/documents/api_list#!/private/getApiV2InternalTransfer)
493
+
494
+ > get details of a specific internal transfer
495
+
496
+ <details>
497
+ <summary>Show code</summary>
498
+
499
+ ```rb
500
+ @api.internal_transfer('internal_transfer_id')
501
+ ```
502
+ </details>
503
+
504
+ ### Reward
505
+ #### [GET /api/v2/rewards](https://max.maicoin.com/documents/api_list#!/private/getApiV2Rewards)
506
+
507
+ > get rewards history
508
+
509
+ <details>
510
+ <summary>Show code</summary>
511
+
512
+ ```rb
513
+ # use default parameters
514
+ @api.rewards
515
+
516
+ # provide all possible parameters
517
+ @api.rewards(
518
+ currency: 'btc',
519
+ from: 68444,
520
+ to: 69444,
521
+ pagination: true,
522
+ page: 3,
523
+ limit: 15,
524
+ offset: 5,
525
+ )
526
+ ```
527
+ </details>
528
+
529
+ #### [GET /api/v2/rewards/{path_reward_type}](https://max.maicoin.com/documents/api_list#!/private/getApiV2RewardsPathRewardType)
530
+
531
+ > get specific rewards history
532
+
533
+ <details>
534
+ <summary>Show code</summary>
535
+
536
+ ```rb
537
+ # use default parameters
538
+ @api.rewards(reward_type: 'airdrop_rewards')
539
+
540
+ # provide all possible parameters
541
+ @api.rewards(
542
+ reward_type: 'airdrop_rewards',
543
+ currency: 'btc',
544
+ from: 68444,
545
+ to: 69444,
546
+ pagination: true,
547
+ page: 3,
548
+ limit: 15,
549
+ offset: 5,
550
+ )
551
+ ```
552
+ </details>
553
+
554
+ #### [GET /api/v2/max_rewards/yesterday](https://max.maicoin.com/documents/api_list#!/private/getApiV2MaxRewardsYesterday)
555
+
556
+ > get max rewards yesterday
557
+
558
+ <details>
559
+ <summary>Show code</summary>
560
+
561
+ ```rb
562
+ @api.max_rewards_yesterday
563
+ ```
564
+ </details>
565
+
566
+ ### Order
567
+ #### [GET /api/v2/orders](https://max.maicoin.com/documents/api_list#!/private/getApiV2Orders)
568
+
569
+ > get your orders, results is paginated.
570
+
571
+ <details>
572
+ <summary>Show code</summary>
573
+
574
+ ```rb
575
+ # use default parameters
576
+ @api.orders('maxtwd')
577
+
578
+ # provide all possible parameters
579
+ @api.orders(
580
+ 'maxtwd',
581
+ state: 'done',
582
+ order_by: 'desc',
583
+ group_id: 12345,
584
+ pagination: true,
585
+ page: 3,
586
+ limit: 15,
587
+ offset: 5,
588
+ )
589
+ ```
590
+ </details>
591
+
592
+ #### [GET /api/v2/order](https://max.maicoin.com/documents/api_list#!/private/getApiV2Order)
593
+
594
+ > get a specific order.
595
+
596
+ <details>
597
+ <summary>Show code</summary>
598
+
599
+ ```rb
600
+ # use max unique order id
601
+ @api.order(123456)
602
+
603
+ # use user specified order id
604
+ @api.order('MY_ORDER_123456', use_client_id: true)
605
+ ```
606
+ </details>
607
+
608
+ #### [POST /api/v2/orders/clear](https://max.maicoin.com/documents/api_list#!/private/postApiV2OrdersClear)
609
+
610
+ > cancel all your orders with given market and side
611
+
612
+ <details>
613
+ <summary>Show code</summary>
614
+
615
+ ```rb
616
+ # use default parameters
617
+ @api.cancel_orders!
618
+
619
+ # provide all possible parameters
620
+ @api.cancel_orders!(market: 'maxtwd', side: 'sell', group_id: '123456')
621
+ ```
622
+ </details>
623
+
624
+ #### [POST /api/v2/order/delete](https://max.maicoin.com/documents/api_list#!/private/postApiV2OrderDelete)
625
+
626
+ > cancel an order
627
+
628
+ <details>
629
+ <summary>Show code</summary>
630
+
631
+ ```rb
632
+ # use max unique order id
633
+ @api.cancel_order!(123456)
634
+
635
+ # use user specified order id
636
+ @api.cancel_order!('MY_ORDER_123456', use_client_id: true)
637
+ ```
638
+ </details>
639
+
640
+ #### [POST /api/v2/orders](https://max.maicoin.com/documents/api_list#!/private/postApiV2Orders)
641
+
642
+ > create a sell/buy order
643
+
644
+ <details>
645
+ <summary>Show code</summary>
646
+
647
+ ```rb
648
+ # use default parameters
649
+ @api.create_order!('maxtwd', 'buy', 1000, price: 7.5)
650
+
651
+ # provide all possible parameters
652
+ @api.create_order!(
653
+ 'maxtwd',
654
+ 'buy',
655
+ 1000,
656
+ price: 7.5,
657
+ client_oid: 'MY_ORDER_ID_12345',
658
+ stop_price: 8,
659
+ ord_type: 'limit',
660
+ group_id: 12345678,
661
+ )
662
+ ```
663
+ </details>
664
+
665
+ #### [POST /api/v2/orders/multi/onebyone](https://max.maicoin.com/documents/api_list#!/private/postApiV2OrdersMultiOnebyone)
666
+
667
+ > Create multiple sell/buy orders, orders may be partially accepted, please put your orders as an array in json body.
668
+
669
+ <details>
670
+ <summary>Show code</summary>
671
+
672
+ ```rb
673
+ # use default parameters
674
+ @api.create_orders!('maxtwd', [
675
+ { side: 'buy', volume: '1000', price: 7.5 },
676
+ { side: 'buy', volume: '1500', price: 7.2 },
677
+ ])
678
+
679
+ # provide all possible parameters
680
+ @api.create_orders!('maxtwd', [
681
+ { side: 'buy', volume: '1000', price: 7.5, client_oid: 'MY_ORDER_ID_12345', stop_price: 8, ord_type: 'limit' },
682
+ { side: 'buy', volume: '1500', price: 7.2, client_oid: 'MY_ORDER_ID_12346', stop_price: 8, ord_type: 'limit' },
683
+ ], group_id: 12345)
684
+ ```
685
+ </details>
686
+
208
687
  ## Development
209
688
 
210
689
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -1,3 +1,4 @@
1
1
  require 'max_exchange_api/version'
2
2
  require 'max_exchange_api/config'
3
3
  require 'max_exchange_api/public_api'
4
+ require 'max_exchange_api/private_api'
@@ -19,7 +19,7 @@ module MaxExchangeApi
19
19
  path,
20
20
  headers: headers,
21
21
  query: query,
22
- timeout: MaxExchangeApi.config.default_timeout,
22
+ timeout: MaxExchangeApi.default_config.timeout,
23
23
  ).parsed_response
24
24
 
25
25
  print_log(:info, "[API] #{uuid} response #{response}")
@@ -32,8 +32,9 @@ module MaxExchangeApi
32
32
 
33
33
  private
34
34
 
35
- def print_log(_method, message)
36
- puts message
35
+ def print_log(method, message)
36
+ logger = MaxExchangeApi.default_config.logger
37
+ logger.send(method, message) if logger
37
38
  end
38
39
  end
39
40
  end
@@ -2,16 +2,18 @@
2
2
 
3
3
  module MaxExchangeApi
4
4
  class Config
5
- attr_accessor :default_timeout
5
+ attr_accessor :timeout
6
+ attr_accessor :logger
6
7
 
7
8
  def initialize
8
- @default_timeout = 3
9
+ @timeout = 3
10
+ @logger = nil
9
11
  end
10
12
  end
11
13
 
12
- @config = Config.new
14
+ @default_config = Config.new
13
15
 
14
16
  class << self
15
- attr_reader :config
17
+ attr_reader :default_config
16
18
  end
17
19
  end
@@ -2,5 +2,26 @@
2
2
 
3
3
  module MaxExchangeApi
4
4
  module Helper
5
+ class << self
6
+ def gen_headers(payload, access_key, secret_key)
7
+ encoded_payload = encode(payload)
8
+
9
+ return {
10
+ 'X-MAX-ACCESSKEY' => access_key,
11
+ 'X-MAX-PAYLOAD' => encoded_payload,
12
+ 'X-MAX-SIGNATURE' => encrypt(encoded_payload, secret_key),
13
+ }
14
+ end
15
+
16
+ private
17
+
18
+ def encode(data)
19
+ Base64.strict_encode64(data.to_json)
20
+ end
21
+
22
+ def encrypt(data, key)
23
+ OpenSSL::HMAC.digest('sha256', key, data).unpack('H*')[0]
24
+ end
25
+ end
5
26
  end
6
27
  end
@@ -0,0 +1,225 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'max_exchange_api/base_api'
4
+
5
+ module MaxExchangeApi
6
+ class PrivateApi < BaseApi
7
+ base_uri 'https://max-api.maicoin.com/api/v2'
8
+
9
+ def initialize(access_key, secret_key)
10
+ super()
11
+
12
+ @access_key = access_key
13
+ @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' : "/rewards/#{reward_type}"
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 max_rewards_yesterday
166
+ send_request(:get, '/max_rewards/yesterday', {})
167
+ end
168
+
169
+ def orders(market, state: nil, order_by: 'asc', group_id: nil, pagination: nil, page: 1, limit: 50, offset: 0)
170
+ send_request(
171
+ :get,
172
+ '/orders',
173
+ market: market,
174
+ state: state,
175
+ order_by: order_by,
176
+ group_id: group_id,
177
+ pagination: pagination,
178
+ page: page,
179
+ limit: limit,
180
+ offset: offset,
181
+ )
182
+ end
183
+
184
+ def order(order_id, use_client_id: false)
185
+ id_params_key = use_client_id ? :client_oid : :id
186
+ send_request(:get, '/order', id_params_key => order_id)
187
+ end
188
+
189
+ def cancel_orders!(market: nil, side: nil, group_id: nil)
190
+ send_request(:post, '/orders/clear', market: market, side: side, group_id: group_id)
191
+ end
192
+
193
+ def cancel_order!(order_id, use_client_id: false)
194
+ id_params_key = use_client_id ? :client_oid : :id
195
+ send_request(:post, '/order/delete', id_params_key => order_id)
196
+ end
197
+
198
+ def create_order!(market, side, volume, price: nil, client_oid: nil, stop_price: nil, ord_type: nil, group_id: nil)
199
+ send_request(
200
+ :post,
201
+ '/orders',
202
+ market: market,
203
+ side: side,
204
+ volume: volume,
205
+ price: price,
206
+ client_oid: client_oid,
207
+ stop_price: stop_price,
208
+ ord_type: ord_type,
209
+ group_id: group_id,
210
+ )
211
+ end
212
+
213
+ def create_orders!(market, orders, group_id: nil)
214
+ send_request(:post, '/orders/multi/onebyone', market: market, orders: orders, group_id: group_id)
215
+ end
216
+
217
+ protected
218
+
219
+ def send_request(method, path, query)
220
+ query = query.compact
221
+ query.merge!(path: "/api/v2#{path}", nonce: (Time.now.to_f * 1000).to_i)
222
+ return super(method, path, Helper.gen_headers(query, @access_key, @secret_key), query)
223
+ end
224
+ end
225
+ end
@@ -1,3 +1,3 @@
1
1
  module MaxExchangeApi
2
- VERSION = '0.1.0'
2
+ VERSION = '1.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: max_exchange_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - khiav reoy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-26 00:00:00.000000000 Z
11
+ date: 2021-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,7 @@ files:
108
108
  - lib/max_exchange_api/base_api.rb
109
109
  - lib/max_exchange_api/config.rb
110
110
  - lib/max_exchange_api/helper.rb
111
+ - lib/max_exchange_api/private_api.rb
111
112
  - lib/max_exchange_api/public_api.rb
112
113
  - lib/max_exchange_api/version.rb
113
114
  - max_exchange_api.gemspec