binance-ruby 1.2.1 → 1.2.9

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: 124f7e539a6f6e6003bf7c2619ba039a6a930037976815729398e34adb4686a1
4
- data.tar.gz: a6dc10be4aa7629143663260ce33111b96b8a2f50b64ffef88bd219ed282ca12
3
+ metadata.gz: c692f93f4037603a5ccdeacd096c7f83f7c3b4c212555e62a30b7ac8ba0f8245
4
+ data.tar.gz: 75cbbf7c87f7557ff078e29ae479b28530f50b3d26c22baa75ed69d99c5c1d72
5
5
  SHA512:
6
- metadata.gz: 649dd4131cc420ae5b179616fdc4bc8d5b75e96ff864075c07ad47279b5a0819557f4f246a47a07e9367e1430fb8b48d063aa54ec7474397c065772be49d9481
7
- data.tar.gz: 68c57f977409d0756df3a982c7a1c92a5b0af26b7c3c1fb3468bba855ac5057f9e0d925e5a81025edc1f78cdb27ac05df2b3d6a08d716e7f42d313014e5fb3db
6
+ metadata.gz: bb3354015ac4a66d64c334e7a64b2e86885f0b8bfbe3ee527f5a6059f882dae6e5b4adc729da862d71f6ce12ffa696cb769ea6414938c29f7c0ed390216f0312
7
+ data.tar.gz: efcdd0c9c5d5c0e411fbd04de3a87dce49b047b6cb633c3f8af4a7becbeede5bda76a8a244d2e94ca2980a9c3e97f0601973c10401aa0f0d69cfa71359e7a6f8
data/lib/binance-ruby.rb CHANGED
@@ -6,12 +6,13 @@ require "faye/websocket"
6
6
  require "binance/api"
7
7
  require "binance/api/account"
8
8
  require "binance/api/configuration"
9
- require "binance/api/data_stream"
10
9
  require "binance/api/error"
11
10
  require "binance/api/margin"
12
11
  require "binance/api/margin/account"
13
12
  require "binance/api/margin/order"
14
13
  require "binance/api/order"
15
14
  require "binance/api/request"
15
+ require "binance/api/trade"
16
+ require "binance/api/user_data_stream"
16
17
  require "binance/api/version"
17
18
  require "binance/websocket"
@@ -27,6 +27,23 @@ module Binance
27
27
  params: params.delete_if { |key, value| value.nil? },
28
28
  security_type: :user_data, api_key: api_key, api_secret_key: api_secret_key)
29
29
  end
30
+
31
+ # @note have not tested this for binance.us yet.
32
+ def withdraw!(coin: nil, withdrawOrderId: nil, network: nil, address: nil, addressTag: nil, amount: nil,
33
+ transactionFeeFlag: false, name: nil, recvWindow: nil, api_key: nil, api_secret_key: nil)
34
+ raise Error.new(message: "amount is required") if amount.nil?
35
+ raise Error.new(message: "coin is required") if coin.nil?
36
+ raise Error.new(message: "address is required") if address.nil?
37
+ timestamp = Configuration.timestamp
38
+ params = {
39
+ coin: coin, withdrawOrderId: withdrawOrderId, network: network, address: address, timestamp: timestamp,
40
+ addressTag: addressTag, amount: amount, transactionFeeFlag: transactionFeeFlag,
41
+ name: name, recvWindow: recvWindow,
42
+ }
43
+ Request.send!(api_key_type: :withdrawals, path: "/sapi/v1/capital/withdraw/apply",
44
+ params: params.delete_if { |key, value| value.nil? }, method: :post,
45
+ security_type: :user_data, api_key: api_key, api_secret_key: api_secret_key)
46
+ end
30
47
  end
31
48
  end
32
49
  end
@@ -10,18 +10,20 @@ module Binance
10
10
  raise Error.new(message: "invalid security type #{security_type}") unless security_types.include?(security_type)
11
11
  all_headers = default_headers(api_key_type: api_key_type, security_type: security_type, api_key: api_key)
12
12
  params.delete_if { |k, v| v.nil? }
13
- signature = signed_request_signature(params: params, api_secret_key: api_secret_key)
14
- params.merge!(signature: signature) if [:trade, :user_data].include?(security_type)
13
+ if %w(trade user_data).include?(security_type&.to_s)
14
+ signature = signed_request_signature(params: params, api_secret_key: api_secret_key)
15
+ params.merge!(signature: signature)
16
+ end
15
17
  # send() is insecure so don't use it.
16
18
  case method
17
19
  when :get
18
20
  response = get(path, headers: all_headers, query: params)
19
21
  when :post
20
- response = post(path, body: params, headers: all_headers)
22
+ response = post(path, query: params, headers: all_headers)
21
23
  when :put
22
- response = put(path, body: params, headers: all_headers)
24
+ response = put(path, query: params, headers: all_headers)
23
25
  when :delete
24
- response = delete(path, body: params, headers: all_headers)
26
+ response = delete(path, query: params, headers: all_headers)
25
27
  else
26
28
  raise Error.new(message: "invalid http method used: #{method}")
27
29
  end
@@ -0,0 +1,27 @@
1
+ module Binance
2
+ module Api
3
+ class Trade
4
+ class << self
5
+ def get_bnb_burn_status!(recvWindow: nil, api_key: nil, api_secret_key: nil)
6
+ timestamp = Configuration.timestamp
7
+ params = { recvWindow: recvWindow, timestamp: timestamp }
8
+ Request.send!(api_key_type: :read_info, path: "/sapi/v1/bnbBurn",
9
+ params: params.delete_if { |key, value| value.nil? },
10
+ security_type: :user_data, tld: Configuration.tld, api_key: api_key,
11
+ api_secret_key: api_secret_key)
12
+ end
13
+
14
+ def toggle_bnb_burn!(spot_bnb_burn: true, interest_bnb_burn: false, recvWindow: nil, api_key: nil,
15
+ api_secret_key: nil)
16
+ timestamp = Configuration.timestamp
17
+ params = { spotBNBBurn: spot_bnb_burn, interestBNBBurn: interest_bnb_burn,
18
+ recvWindow: recvWindow, timestamp: timestamp }
19
+ Request.send!(api_key_type: :read_info, path: "/sapi/v1/bnbBurn", method: :post,
20
+ params: params.delete_if { |key, value| value.nil? },
21
+ security_type: :user_data, tld: Configuration.tld, api_key: api_key,
22
+ api_secret_key: api_secret_key)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,17 +1,18 @@
1
1
  module Binance
2
2
  module Api
3
- class DataStream
3
+ class UserDataStream
4
4
  class << self
5
5
  # It's recommended to send a ping about every 30 minutes.
6
6
  def keepalive!(listen_key: nil, api_key: nil, api_secret_key: nil)
7
7
  raise Error.new(message: "listen_key is required") if listen_key.nil?
8
8
  Request.send!(api_key_type: :none, method: :put, path: "/api/v1/userDataStream",
9
- params: { listenKey: listen_key }, security_type: :user_stream)
9
+ params: { listenKey: listen_key }, security_type: :user_stream,
10
+ api_key: api_key, api_secret_key: api_secret_key)
10
11
  end
11
12
 
12
13
  def start!(api_key: nil, api_secret_key: nil)
13
14
  Request.send!(api_key_type: :none, method: :post, path: "/api/v1/userDataStream",
14
- security_type: :user_stream, api_key: api_key, api_secret_key: api_secret_key)
15
+ security_type: :user_stream, api_key: api_key, api_secret_key: api_secret_key)[:listenKey]
15
16
  end
16
17
 
17
18
  def stop!(listen_key: nil, api_key: nil, api_secret_key: nil)
@@ -1,5 +1,5 @@
1
1
  module Binance
2
2
  module Api
3
- VERSION = "1.2.1"
3
+ VERSION = "1.2.9"
4
4
  end
5
5
  end
@@ -1,9 +1,12 @@
1
1
  module Binance
2
2
  class WebSocket < Faye::WebSocket::Client
3
+ class Error < StandardError; end
4
+
3
5
  def initialize(on_open: nil, on_close: nil)
4
6
  super "wss://stream.binance.com:9443/stream", nil, ping: 180
5
7
 
6
8
  @request_id_inc = 0
9
+ @user_stream_handlers = {}
7
10
 
8
11
  on :open do |event|
9
12
  on_open&.call(event)
@@ -50,6 +53,11 @@ module Binance
50
53
  subscribe(symbols_fmt.map { |s| "#{s.downcase}@kline_#{interval}" })
51
54
  end
52
55
 
56
+ def user_data_stream!(listen_key, &on_receive)
57
+ @user_stream_handlers[listen_key] = on_receive
58
+ subscribe([listen_key])
59
+ end
60
+
53
61
  private
54
62
 
55
63
  def process_data(data)
@@ -62,6 +70,11 @@ module Binance
62
70
  case json[:data][:e]&.to_sym
63
71
  when :kline
64
72
  @candlesticks_handler&.call(json[:stream], json[:data])
73
+ when :outboundAccountPosition
74
+ when :balanceUpdate
75
+ when :executionReport # order update
76
+ listen_key = json[:stream]
77
+ @user_stream_handlers[listen_key]&.call(listen_key, json[:data])
65
78
  end
66
79
  end
67
80
  end
@@ -78,12 +91,15 @@ module Binance
78
91
  }.to_json)
79
92
  end
80
93
 
81
- def unsubscribe(streams)
82
- send({
83
- method: "UNSUBSCRIBE",
84
- params: streams,
85
- id: request_id,
86
- }.to_json)
87
- end
94
+ # Terminating socket connection achieves the same result.
95
+ # If you have a use-case for this, please create a GitHub issue.
96
+ #
97
+ # def unsubscribe(streams)
98
+ # send({
99
+ # method: "UNSUBSCRIBE",
100
+ # params: streams,
101
+ # id: request_id,
102
+ # }.to_json)
103
+ # end
88
104
  end
89
105
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: binance-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Peterson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-04 00:00:00.000000000 Z
11
+ date: 2021-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: codecov
@@ -95,19 +95,19 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '12.0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: pry
98
+ name: byebug
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.11.3
103
+ version: 11.1.3
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.11.3
110
+ version: 11.1.3
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: simplecov
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -122,20 +122,6 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 0.20.0
125
- - !ruby/object:Gem::Dependency
126
- name: activesupport
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: 5.1.0
132
- type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: 5.1.0
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: awrence
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +178,20 @@ dependencies:
192
178
  - - "~>"
193
179
  - !ruby/object:Gem::Version
194
180
  version: '1.2'
181
+ - !ruby/object:Gem::Dependency
182
+ name: activesupport
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: 5.1.0
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: 5.1.0
195
195
  description: Ruby wrapper for the Binance API.
196
196
  email:
197
197
  - hello@jakenberg.io
@@ -203,7 +203,6 @@ files:
203
203
  - lib/binance/api.rb
204
204
  - lib/binance/api/account.rb
205
205
  - lib/binance/api/configuration.rb
206
- - lib/binance/api/data_stream.rb
207
206
  - lib/binance/api/error.rb
208
207
  - lib/binance/api/margin.rb
209
208
  - lib/binance/api/margin/account.rb
@@ -211,6 +210,8 @@ files:
211
210
  - lib/binance/api/market_stream.rb
212
211
  - lib/binance/api/order.rb
213
212
  - lib/binance/api/request.rb
213
+ - lib/binance/api/trade.rb
214
+ - lib/binance/api/user_data_stream.rb
214
215
  - lib/binance/api/version.rb
215
216
  - lib/binance/websocket.rb
216
217
  homepage: https://github.com/jakenberg/binance-ruby
@@ -236,5 +237,5 @@ requirements: []
236
237
  rubygems_version: 3.1.6
237
238
  signing_key:
238
239
  specification_version: 4
239
- summary: binance-ruby-1.2.1
240
+ summary: binance-ruby-1.2.9
240
241
  test_files: []