binance-ruby 1.2.1 → 1.2.2

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: f18e787ac97c75b40133c007e5e984c0406311b2194517ce069efe2a847f65cb
4
+ data.tar.gz: c18b5a8826485459a1039fd4b6ee3298ce93cae8afc274f146bb0cb656554401
5
5
  SHA512:
6
- metadata.gz: 649dd4131cc420ae5b179616fdc4bc8d5b75e96ff864075c07ad47279b5a0819557f4f246a47a07e9367e1430fb8b48d063aa54ec7474397c065772be49d9481
7
- data.tar.gz: 68c57f977409d0756df3a982c7a1c92a5b0af26b7c3c1fb3468bba855ac5057f9e0d925e5a81025edc1f78cdb27ac05df2b3d6a08d716e7f42d313014e5fb3db
6
+ metadata.gz: 5d47d23c9002fb4a8bc5621ca5d4d0928403c5eac520c180958c28039a9aec6eafc4b819a69293ab33b268c4564ff215a966f37bc400061bc52bff4b7a43fc3a
7
+ data.tar.gz: b97db7627730811f224f3363ee6fda51ed8fccfd840010f0c591e9553bfab940b2cb8dd7935cbacbed43a732b0b5924d34eee6750866aceaec0b7aa296c79171
data/lib/binance-ruby.rb CHANGED
@@ -6,12 +6,12 @@ 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/user_data_stream"
16
16
  require "binance/api/version"
17
17
  require "binance/websocket"
@@ -10,8 +10,10 @@ 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
@@ -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.2"
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.2
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-05-09 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,26 @@ 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'
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: 5.1.0
191
+ type: :runtime
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - "~>"
196
+ - !ruby/object:Gem::Version
197
+ version: '5.1'
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: 5.1.0
195
201
  description: Ruby wrapper for the Binance API.
196
202
  email:
197
203
  - hello@jakenberg.io
@@ -203,7 +209,6 @@ files:
203
209
  - lib/binance/api.rb
204
210
  - lib/binance/api/account.rb
205
211
  - lib/binance/api/configuration.rb
206
- - lib/binance/api/data_stream.rb
207
212
  - lib/binance/api/error.rb
208
213
  - lib/binance/api/margin.rb
209
214
  - lib/binance/api/margin/account.rb
@@ -211,6 +216,7 @@ files:
211
216
  - lib/binance/api/market_stream.rb
212
217
  - lib/binance/api/order.rb
213
218
  - lib/binance/api/request.rb
219
+ - lib/binance/api/user_data_stream.rb
214
220
  - lib/binance/api/version.rb
215
221
  - lib/binance/websocket.rb
216
222
  homepage: https://github.com/jakenberg/binance-ruby
@@ -236,5 +242,5 @@ requirements: []
236
242
  rubygems_version: 3.1.6
237
243
  signing_key:
238
244
  specification_version: 4
239
- summary: binance-ruby-1.2.1
245
+ summary: binance-ruby-1.2.2
240
246
  test_files: []