ftx-api 0.2.2 → 0.2.6

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: 9a784067dd3e47ef2bd471c6c1fc0d845d951b5edb22d21ae4c48b8c20adccd4
4
- data.tar.gz: 3d0774d855a762302badd622ef8ae9a5caed5310bab5202e4b6d9f101ee71c0c
3
+ metadata.gz: 7845a00bf3bf2a3ad58c8ee65a131008f2bf456683674dd2a664db57f6be89e4
4
+ data.tar.gz: 0fe0ccbe9faab912eee3250e6610abb499944716a52727e1dbec00d2c2f8a6a9
5
5
  SHA512:
6
- metadata.gz: b7842c31f3023590ec2d7abaef9d89d6488480ff33a4a2fb1bf62c511cff973f3ea73766c3aae57b83a018b6583985c8b67c2facb3d8cf421dcf8357e296a8e4
7
- data.tar.gz: b7fb5e6c9bbfad18542194900112ff20fded0c7b493052193070928067345d1871b834af67b410e17d54c4f0dc75fe9d698c315b9576342cf1d363c364e0881a
6
+ metadata.gz: 533647fc948c9b1d9f5c0f331b6c58954c566d6a00bd5d1f6e181eecefcef868e444afc0ba223b3131eb87ae428927642e34a68c2f03dbc700f93f2ecaf301c3
7
+ data.tar.gz: 18c12550f422a555b90bfecf648a75883e777cc0c033653bbc77ca8543d02cc16188381d937b7d967773c9bd5b503ab39b6cfbc1a5ce1c8e31e560a4d3a24392
data/CHANGELOG.md CHANGED
@@ -4,4 +4,22 @@
4
4
  - Initial release
5
5
 
6
6
  ## [0.2.0] - 2021-09-23
7
- - Implement public API covering Markets and Futures only
7
+ - Implement public API covering Markets and Futures only
8
+
9
+ ## [0.2.1] - 2021-09-23
10
+ - Empty
11
+
12
+ ## [0.2.2] - 2021-10-05
13
+ - Include private API endpoints with tests
14
+
15
+ ## [0.2.3] - 2021-10-05
16
+ - Include private API endpoints with tests - further updates
17
+
18
+ ## [0.2.4] - 2021-10-05
19
+ - Fix error compact_blank creates for rails db:migrate
20
+
21
+ ## [0.2.5] - 2021-10-06
22
+ - Fix issues with post methods and add Convert endpoint
23
+
24
+ ## [0.2.6] - 2021-10-06
25
+ - Implement Fills endpoint including tests
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ftx-api (0.2.2)
4
+ ftx-api (0.2.6)
5
5
  httparty (~> 0.19)
6
6
  openssl (~> 2.2)
7
7
 
data/README.md CHANGED
@@ -4,8 +4,6 @@ This gem is a ruby SDK for the FTX crypto exchange REST API.
4
4
 
5
5
  API docs can be found on the [FTX developer site](https://docs.ftx.com/)
6
6
 
7
- It is still under development and currently only covers the markets and futures endpoints.
8
-
9
7
 
10
8
  ## Installation
11
9
 
@@ -154,9 +152,65 @@ Note: the create order method is not included as a test, because I have not been
154
152
 
155
153
  *Check the [FTX API docs](https://docs.ftx.com/#orders) for all parameters*
156
154
 
155
+ ### Fills
156
+
157
+ Initialize an fills session:
158
+ ```ruby
159
+ fills = FXT::API::Orders.new(key: 'YOUR FTX KEY', secret: 'YOUR FTX SECRET')
160
+ ```
161
+
162
+ Query for all fills:
163
+ ```ruby
164
+ fills.list
165
+ ```
166
+ or
167
+
168
+ ```ruby
169
+ fills.list(market: 'BTC/USD')
170
+ ```
171
+
172
+ Note: market is optional
173
+
174
+ ### Convert Coins
175
+
176
+ Initialize an convert session:
177
+ ```ruby
178
+ convert = FXT::API::Convert.new(key: 'YOUR FTX KEY', secret: 'YOUR FTX SECRET')
179
+ ```
180
+
181
+ Create a new quote:
182
+ ```ruby
183
+ args = {
184
+ size: 0.01, # 0.01 is the smallest increment
185
+ fromCoin: "USD",
186
+ toCoin: "BTC",
187
+ }
188
+
189
+ convert.new_quote(args)
190
+ ```
191
+
192
+ Response:
193
+ ```ruby
194
+ {:quoteId=>2*******3}
195
+ ```
196
+
197
+ Fetch a quote:
198
+ ```ruby
199
+ convert.get_quote('quoteId')
200
+ ```
201
+
202
+ Accept a quote:
203
+ ```ruby
204
+ convert.accept_quote('quoteId')
205
+ ```
206
+
157
207
  ## Development
158
208
 
159
- After checking out the repo, run `bin/setup` to install dependencies. You'll need to add environment variables ENV['FTX_KEY'] and ENV['FTX_SECRET']. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
209
+ After checking out the repo, run `bin/setup` to install dependencies.
210
+
211
+ You'll then need to add environment variables `ENV['FTX_KEY']` and `ENV['FTX_SECRET']`. API keys can be created in your [FTX settings page](https://ftx.com/profile).
212
+
213
+ Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
160
214
 
161
215
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
162
216
 
data/ftx-api.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = "Ruby gem for the FTX Exchange API"
13
13
  spec.homepage = "https://github.com/benrs44/ftx-api"
14
14
  spec.license = "MIT"
15
- spec.required_ruby_version = ">= 3.0.0"
15
+ spec.required_ruby_version = ">= 3.0.1"
16
16
 
17
17
  # spec.metadata["allowed_push_host"] = "TODO: Set to 'https://mygemserver.com'"
18
18
 
data/lib/ext/array.rb CHANGED
@@ -4,7 +4,7 @@ class Array
4
4
  map(&:symbolize_keys)
5
5
  end
6
6
 
7
- def compact_blank
7
+ def compact_empty
8
8
  delete_if {|i| i.respond_to?(:empty?) ? !!i.empty? : !i }
9
9
  end
10
10
 
data/lib/ftx/api/base.rb CHANGED
@@ -4,11 +4,11 @@ require 'httparty'
4
4
 
5
5
  class FTX::API::Base
6
6
 
7
+ attr_reader :config, :key, :secret
8
+
7
9
  include HTTParty
8
10
  base_uri 'https://ftx.com/api'
9
11
 
10
- attr_reader :config, :key, :secret
11
-
12
12
  def initialize(args = {})
13
13
  @config = FTX::API::Config.new(args.dig(:config))
14
14
  @key = args.dig(:key)
@@ -21,16 +21,21 @@ class FTX::API::Base
21
21
  uuid = SecureRandom.uuid
22
22
  print_log(:info, "[API] #{uuid} #{method.upcase} '#{path}' query = #{query}")
23
23
 
24
- body_or_query = method == :get ? :query : :body
24
+ if method == :get
25
+ body_or_query = :query
26
+ else
27
+ body_or_query = :body
28
+ query = query.to_json
29
+ end
25
30
 
26
31
  begin
27
32
  response = self.class.send(
28
- method,
29
- path,
33
+ method,
34
+ path,
30
35
  headers: headers,
31
36
  timeout: @config.timeout,
32
- body_or_query => query,
33
- ).parsed_response
37
+ body_or_query.to_sym => query
38
+ )
34
39
 
35
40
  print_log(:info, "[API] #{uuid} response #{response}")
36
41
  return parse_response(response)
@@ -43,6 +48,7 @@ class FTX::API::Base
43
48
  private
44
49
 
45
50
  def parse_response(response)
51
+ response = response.parsed_response
46
52
  if response.dig("success")
47
53
  response.dig("result").symbolize_keys
48
54
  else
@@ -54,7 +60,6 @@ class FTX::API::Base
54
60
  logger = @config.logger
55
61
  if logger
56
62
  puts "#{method}: #{message}"
57
- # logger[method] = message
58
63
  end
59
64
  end
60
65
 
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'private'
4
+
5
+ class FTX::API::Convert < FTX::API::Private
6
+
7
+ def new_quote(query = {})
8
+ raise ArgumentError.new(
9
+ "Size, fromCoin, toCoin params required"
10
+ ) unless [:fromCoin, :toCoin, :size].all? { |i| query.include? i }
11
+
12
+ send_request(:post, "/otc/quotes", query)
13
+ end
14
+
15
+ def get_quote(quote_id)
16
+ send_request(:get, "/otc/quotes/#{quote_id}", {})
17
+ end
18
+
19
+ def accept_quote(quote_id)
20
+ send_request(:post, "/otc/quotes/#{quote_id}/accept", {})
21
+ end
22
+
23
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'private'
4
+
5
+ class FTX::API::Fills < FTX::API::Private
6
+
7
+ def list(query = {})
8
+ send_request(:get, "/fills", query)
9
+ end
10
+
11
+ end
@@ -15,6 +15,8 @@ class FTX::API::Private < FTX::API::Base
15
15
  'FTX-KEY' => key,
16
16
  'FTX-SIGN' => signature(*args),
17
17
  'FTX-TS' => ts.to_s,
18
+ 'Content-Type' => 'application/json',
19
+ 'Accepts' => 'application/json',
18
20
  }
19
21
  end
20
22
 
@@ -23,15 +25,15 @@ class FTX::API::Private < FTX::API::Base
23
25
  end
24
26
 
25
27
  def signature_payload(method, path, query)
26
- payload = [ts, method.to_s.upcase, "/api", path].compact_blank
28
+ payload = [ts, method.to_s.upcase, "/api", path].compact_empty
27
29
 
28
30
  if method==:post
29
- payload.push(query.to_json)
31
+ payload << query.to_json
30
32
  elsif method==:get
31
- payload.push("?" + URI.encode_www_form(query))
33
+ payload << ("?" + URI.encode_www_form(query))
32
34
  end unless query.empty?
33
35
 
34
- "#{payload.join}".encode("UTF-8")
36
+ payload.join.encode("UTF-8")
35
37
  end
36
38
 
37
39
  def ts
@@ -2,6 +2,6 @@
2
2
 
3
3
  module FTX
4
4
  module API
5
- VERSION = "0.2.2"
5
+ VERSION = "0.2.6"
6
6
  end
7
7
  end
data/lib/ftx/api.rb CHANGED
@@ -3,7 +3,9 @@ require_relative "../ext/base"
3
3
  require_relative "api/version"
4
4
  require_relative "api/config"
5
5
  require_relative "api/markets"
6
+ require_relative "api/futures"
6
7
  require_relative "api/account"
7
8
  require_relative "api/wallet"
8
9
  require_relative "api/orders"
9
- require_relative "api/futures"
10
+ require_relative "api/fills"
11
+ require_relative "api/convert"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ftx-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - benrs44
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-05 00:00:00.000000000 Z
11
+ date: 2021-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -63,6 +63,8 @@ files:
63
63
  - lib/ftx/api/account.rb
64
64
  - lib/ftx/api/base.rb
65
65
  - lib/ftx/api/config.rb
66
+ - lib/ftx/api/convert.rb
67
+ - lib/ftx/api/fills.rb
66
68
  - lib/ftx/api/futures.rb
67
69
  - lib/ftx/api/markets.rb
68
70
  - lib/ftx/api/orders.rb
@@ -85,7 +87,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
87
  requirements:
86
88
  - - ">="
87
89
  - !ruby/object:Gem::Version
88
- version: 3.0.0
90
+ version: 3.0.1
89
91
  required_rubygems_version: !ruby/object:Gem::Requirement
90
92
  requirements:
91
93
  - - ">="