cryptomarket-sdk 1.0.0 → 1.0.1

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: 56104f24b0cf0227d1b07b004a96a0c7bb12f6c0144683fe5286ecf605e229e9
4
- data.tar.gz: 1bdebf110497fc4c99fa768ad5f01c4d5d7811f48b90c739b677e84b90d720fd
3
+ metadata.gz: 62756eac34a0cac0bff07eb60b27f57d35688de29c77db8b9c395bb00d48af2b
4
+ data.tar.gz: c6326c7df54dbc1069fec07be675f06fc95e8aafa71ac5ed47b6e9a1b97236f4
5
5
  SHA512:
6
- metadata.gz: b8db890022384ea30bfaf012af54b37e06eb2951874246aa7b363c603a3672a5d35f5a44b2ad6d02f006247818f04283b1327db62573c7374c3e7f6fdf054af5
7
- data.tar.gz: 467cd155cee84cb5e67dd57859eb3c1b5227f9549420d4c7e073e815355ce0842fd5b56d5dfb983f16f4c944b4adcc69aea302f923be3c4dc29126fa43681691
6
+ metadata.gz: d64312e26d144291661b081b8dfde90ea2d65d909392bafc310a4fc3720e8f21a356f47521a70e274ad515558a2c41b75f8a2bcad86d4540f2bb163ece8fb016
7
+ data.tar.gz: cf5e559cdf9bd29fc578c04387ae837a4fb3f46c15eb5bf502ded24f2f2c41461ee7beceeda536ba03dc9a4a92737147106a717df319da1cb8fd5375c470b164
data/README.md CHANGED
@@ -5,14 +5,12 @@
5
5
  [sign up in CryptoMarket](https://www.cryptomkt.com/account/register).
6
6
 
7
7
  # Installation
8
- To install Cryptomarket use pip
8
+ To install Cryptomarket use gem
9
9
  ```
10
- gem install cryptomarket
10
+ gem install cryptomarket-sdk
11
11
  ```
12
12
  # Documentation
13
-
14
- [The api documentation](https://api.exchange.cryptomkt.com/)
15
-
13
+ This sdk makes use of the [api version 2](https://api.exchange.cryptomkt.com/v2) of cryptomarket
16
14
 
17
15
  # Quick Start
18
16
 
@@ -166,12 +164,11 @@ wsclient.connect
166
164
 
167
165
  ```
168
166
  # Checkout our other SDKs
169
- <!-- agregar links -->
170
167
 
171
- python sdk
168
+ [node sdk](https://github.com/cryptomkt/cryptomkt-node)
172
169
 
173
- node sdk
170
+ [java sdk](https://github.com/cryptomkt/cryptomkt-java)
174
171
 
175
- java sdk
172
+ [go sdk](https://github.com/cryptomkt/cryptomkt-go)
176
173
 
177
- go sdk
174
+ [python sdk](https://github.com/cryptomkt/cryptomkt-python)
@@ -3,6 +3,7 @@ require 'uri'
3
3
  require 'json'
4
4
  require 'base64'
5
5
  require 'rest-client'
6
+ require_relative 'exceptions'
6
7
 
7
8
  module Cryptomarket
8
9
  class HttpManager
@@ -19,7 +20,7 @@ module Cryptomarket
19
20
  timestamp = Time.now.to_i.to_s
20
21
  msg = httpMethod + timestamp + @@apiVersion + method
21
22
  if not params.nil? and params.keys.any?
22
- if httpMethod == 'GET'
23
+ if httpMethod.upcase == 'GET' or httpMethod.upcase == 'PUT'
23
24
  msg += '?'
24
25
  end
25
26
  msg += URI.encode_www_form params
@@ -32,11 +33,14 @@ module Cryptomarket
32
33
 
33
34
  def makeRequest(method:, endpoint:, params:nil, public:false)
34
35
  uri = URI(@@apiUrl + @@apiVersion + endpoint)
36
+ if not params.nil?
37
+ params = Hash[params.sort_by {|key, val| key.to_s }]
38
+ end
35
39
  headers = Hash.new
36
40
  if not public
37
41
  headers['Authorization'] = getCredential(method.upcase, endpoint, params)
38
42
  end
39
- if method.upcase == 'GET' and not params.nil?
43
+ if (method.upcase == 'GET' or method.upcase =='PUT') and not params.nil?
40
44
  uri.query = URI.encode_www_form params
41
45
  params = nil
42
46
  end
@@ -68,4 +72,4 @@ module Cryptomarket
68
72
  return parsed_result
69
73
  end
70
74
  end
71
- end
75
+ end
@@ -630,8 +630,8 @@ module Cryptomarket
630
630
  # +String+ +currency+:: the currency code for withdraw
631
631
  # +Integer+ +amount+:: the expected withdraw amount
632
632
 
633
- def getEstimatesWithdrawFee(currency, amount)
634
- params = {currency:currency, amount:amount}
633
+ def getEstimateWithdrawFee(currency, amount)
634
+ params = {amount:amount, currency:currency}
635
635
  return get('account/crypto/estimate-withdraw', params)
636
636
  end
637
637
 
@@ -3,7 +3,7 @@ require_relative"../utils"
3
3
 
4
4
  module Cryptomarket
5
5
  module Websocket
6
-
6
+
7
7
  # AccountClient connects via websocket to cryptomarket to get account information of the user. uses SHA256 as auth method and authenticates automatically.
8
8
  #
9
9
  # +string+ +apiKey+:: the user api key
@@ -12,9 +12,24 @@ module Cryptomarket
12
12
 
13
13
  class AccountClient < AuthClient
14
14
  include Utils
15
+
15
16
  # Creates a new client and authenticates it to the server
16
17
  def initialize(apiKey:, apiSecret:)
17
- super(url:"wss://api.exchange.cryptomkt.com/api/2/ws/account", apiKey:apiKey, apiSecret:apiSecret)
18
+ transaction = "transaction"
19
+ balance = "balance"
20
+ super(
21
+ url:"wss://api.exchange.cryptomkt.com/api/2/ws/account",
22
+ apiKey:apiKey,
23
+ apiSecret:apiSecret,
24
+ subscriptionKeys:{
25
+ "unsubscribeTransactions" => transaction,
26
+ "subscribeTransactions" => transaction,
27
+ "updateTransaction" => transaction,
28
+
29
+ "unsubscribeBalance" => balance,
30
+ "subscribeBalance" => balance,
31
+ "balance" => balance,
32
+ })
18
33
  end
19
34
 
20
35
  # get the account balance as a list of balances. non-zero balances only
@@ -105,6 +120,31 @@ module Cryptomarket
105
120
  def unsubscribeToTransactions(callback:nil)
106
121
  sendUnsubscription('unsubscribeTransactions', callback, {})
107
122
  end
123
+
124
+ # subscribes to a feed of balances
125
+ #
126
+ # This subscription aims to provide an easy way to be informed of the current balance state.
127
+ # If the state has been changed or potentially changed the "balance" event will come with the actual state.
128
+ # Please be aware that only non-zero values present.
129
+ #
130
+ # https://api.exchange.cryptomkt.com/#subscription-to-the-balance
131
+ #
132
+ # +Proc+ +callback+:: A +Proc+ to call with the result data. It takes one argument. a feed of balances
133
+ # +Proc+ +resultCallback+:: Optional. A +Proc+ to call with the result data. It takes two arguments, err and result. err is None for successful calls, result is None for calls with error: Proc.new {|err, result| ...}
134
+
135
+ def subscribeToBalance(callback, resultCallback:nil)
136
+ sendSubscription('subscribeBalance', callback, {}, resultCallback)
137
+ end
138
+
139
+ # unsubscribe to the balance feed.
140
+ #
141
+ # https://api.exchange.cryptomkt.com/#subscription-to-the-balance
142
+ #
143
+ # +Proc+ +callback+:: Optional. A +Proc+ to call with the result data. It takes two arguments, err and result. err is None for successful calls, result is None for calls with error: Proc.new {|err, result| ...}
144
+
145
+ def unsubscribeToBalance(callback:nil)
146
+ sendUnsubscription('unsubscribeBalance', callback, {})
147
+ end
108
148
  end
109
149
  end
110
150
  end
@@ -5,10 +5,10 @@ module Cryptomarket
5
5
  module Websocket
6
6
  class AuthClient < ClientBase
7
7
  # Creates a new client
8
- def initialize(url:, apiKey:, apiSecret:)
8
+ def initialize(url:, apiKey:, apiSecret:, subscriptionKeys:)
9
9
  @apiKey = apiKey
10
10
  @apiSecret = apiSecret
11
- super url:url
11
+ super url:url, subscriptionKeys:subscriptionKeys
12
12
  @authed = false
13
13
  end
14
14
 
@@ -2,7 +2,6 @@ require "securerandom"
2
2
 
3
3
  require_relative "wsClientBase"
4
4
  require_relative"../utils"
5
- require_relative "methods"
6
5
 
7
6
 
8
7
 
@@ -15,11 +14,35 @@ module Cryptomarket
15
14
 
16
15
  class PublicClient < ClientBase
17
16
  include Utils
18
- include Methods
19
17
 
20
18
  def initialize()
19
+ orderbook = "orderbook"
20
+ tickers = "tickers"
21
+ trades = "trades"
22
+ candles = "candles"
23
+ super(
24
+ url:"wss://api.exchange.cryptomkt.com/api/2/ws/public",
25
+ subscriptionKeys:{
26
+ "subscribeTicker" => tickers,
27
+ "unsubscribeTicker" => tickers,
28
+ "ticker" => tickers,
29
+
30
+ "subscribeOrderbook" => orderbook,
31
+ "unsubscribeOrderbook" => orderbook,
32
+ "snapshotOrderbook" => orderbook,
33
+ "updateOrderbook" => orderbook,
34
+
35
+ "subscribeTrades" => trades,
36
+ "unsubscribeTrades" => trades,
37
+ "snapshotTrades" => trades,
38
+ "updateTrades" => trades,
39
+
40
+ "subscribeCandles" => candles,
41
+ "unsubscribeCandles" => candles,
42
+ "snapshotCandles" => candles,
43
+ "updateCandles" => candles
44
+ })
21
45
  @OBCache = OrderbookCache.new
22
- super url:"wss://api.exchange.cryptomkt.com/api/2/ws/public"
23
46
  end
24
47
 
25
48
  def handleNotification(notification)
@@ -49,7 +72,7 @@ module Cryptomarket
49
72
  end
50
73
 
51
74
  def buildKey(method, params)
52
- methodKey = mapping(method)
75
+ methodKey = @subscriptionKeys[method]
53
76
 
54
77
  symbol = ''
55
78
  if params.has_key? 'symbol'
@@ -63,6 +86,19 @@ module Cryptomarket
63
86
  return key.upcase
64
87
  end
65
88
 
89
+ def orderbookFeed(method)
90
+ return @subscriptionKeys[method] == "orderbook"
91
+ end
92
+
93
+ def tradesFeed(method)
94
+ return @subscriptionKeys[method] == "trades"
95
+ end
96
+
97
+ def candlesFeed(method)
98
+ return @subscriptionKeys[method] == "candles"
99
+ end
100
+
101
+
66
102
  # Get a list all available currencies on the exchange
67
103
  #
68
104
  # https://api.exchange.cryptomkt.com/#get-currencies
@@ -13,8 +13,19 @@ module Cryptomarket
13
13
  class TradingClient < AuthClient
14
14
  include Utils
15
15
  # Creates a new client
16
+
16
17
  def initialize(apiKey:, apiSecret:)
17
- super(url:"wss://api.exchange.cryptomkt.com/api/2/ws/trading", apiKey:apiKey, apiSecret:apiSecret)
18
+ reports = "reports"
19
+ super(
20
+ url:"wss://api.exchange.cryptomkt.com/api/2/ws/trading",
21
+ apiKey:apiKey,
22
+ apiSecret:apiSecret,
23
+ subscriptionKeys:{
24
+ "subscribeReports" => reports,
25
+ "unsubscribeReports" => reports,
26
+ "activeOrders" => reports,
27
+ "report" => reports,
28
+ })
18
29
  end
19
30
 
20
31
  # Subscribe to a feed of trading events of the account
@@ -1,5 +1,4 @@
1
1
  require_relative "callbackCache"
2
- require_relative "methods"
3
2
  require_relative "orderbookCache"
4
3
  require_relative "wsManager"
5
4
  require_relative '../exceptions'
@@ -7,9 +6,8 @@ require_relative '../exceptions'
7
6
  module Cryptomarket
8
7
  module Websocket
9
8
  class ClientBase
10
- include Methods
11
-
12
- def initialize(url:)
9
+ def initialize(url:, subscriptionKeys:)
10
+ @subscriptionKeys = subscriptionKeys
13
11
  @callbackCache = CallbackCache.new
14
12
  @wsmanager = WSManager.new self, url:url
15
13
  @onconnect = ->{}
@@ -98,7 +96,7 @@ module Cryptomarket
98
96
  end
99
97
 
100
98
  def handleNotification(notification)
101
- key = "subscription"
99
+ key = buildKey(notification["method"])
102
100
  callback = @callbackCache.getSubscriptionCallback(key)
103
101
  if callback.nil?
104
102
  return
@@ -107,6 +105,9 @@ module Cryptomarket
107
105
  end
108
106
 
109
107
  def buildKey(method=nil, params=nil)
108
+ if @subscriptionKeys.key? method
109
+ return @subscriptionKeys[method]
110
+ end
110
111
  return "subscription"
111
112
  end
112
113
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cryptomarket-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - T. Ismael Verdugo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-09 00:00:00.000000000 Z
11
+ date: 2021-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client