hexsafe 0.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 +7 -0
- data/lib/hexsafe.rb +7 -0
- data/lib/hexsafe/api.rb +167 -0
- metadata +172 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 67c619cf134e56baf443d7ce5589e9b3aea49bd6b99761245a7935cd60ff4a41
|
4
|
+
data.tar.gz: 7046c524cb47ee23551bd5f99f0401963ed49d0de0b6776fe7be4122d3d94863
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e382ee7a548b1f77ae48d1ad229815cf7a88e79c22bcd82a5a9b97619edd3a48962d6db81f5470dfdd6494822668c794a0d2fc88b69385e4909ab40cf2ef6bdf
|
7
|
+
data.tar.gz: 509c7baaf43e422689b4b5d8255f519dbeb3efcc32ffe30f10c28360f60edcc98ee7d687125502a89bb9fea9fe3f27154d3977ecefd8ccebf214c251a048ea26
|
data/lib/hexsafe.rb
ADDED
data/lib/hexsafe/api.rb
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
module Hexsafe
|
2
|
+
class Api
|
3
|
+
|
4
|
+
class Error < RuntimeError; end
|
5
|
+
|
6
|
+
def initialize options = {}
|
7
|
+
@mode = options[:env].upcase rescue nil
|
8
|
+
@key = options[:key] rescue nil
|
9
|
+
@secret = options[:secret] rescue nil
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_accounts
|
13
|
+
response = rest_api("GET", "account", {})
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_account account_id
|
17
|
+
response = rest_api("GET", "account/#{account_id}", {})
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_balance account_id
|
21
|
+
response = rest_api("GET", "balance/#{account_id}", {})
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_txn ticker, tx_hash
|
25
|
+
response = rest_api("GET", "transaction/asset_ticker/#{ticker}/hash/#{tx_hash}", {})
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_txn_ac account_id, start_time, end_time
|
29
|
+
response = rest_api("GET", "transaction/account_id/#{account_id}/start_time/#{start_time}/end_time/#{end_time}", {})
|
30
|
+
end
|
31
|
+
|
32
|
+
def create_deposit body
|
33
|
+
response = rest_api("post", "deposit", body)
|
34
|
+
end
|
35
|
+
|
36
|
+
def cancel_deposit request_id
|
37
|
+
response = rest_api("DELETE", "deposit/#{request_id}", {})
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_deposit request_id
|
41
|
+
response = rest_api("GET", "deposit/#{request_id}", {})
|
42
|
+
end
|
43
|
+
|
44
|
+
def create_withdraw body
|
45
|
+
response = rest_api("post", "withdraw", body)
|
46
|
+
end
|
47
|
+
|
48
|
+
def cancel_withdraw request_id
|
49
|
+
response = rest_api("DELETE", "withdraw/#{request_id}", {})
|
50
|
+
end
|
51
|
+
|
52
|
+
def get_withdraw request_id
|
53
|
+
response = rest_api("GET", "withdraw/#{request_id}", {})
|
54
|
+
end
|
55
|
+
|
56
|
+
def subscribe_webhook
|
57
|
+
response = rest_api("post", "webhook", body)
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_subscriptions account_id
|
61
|
+
response = rest_api("GET", "webhook/#{account_id}", {})
|
62
|
+
end
|
63
|
+
|
64
|
+
def delete_subscription uuid
|
65
|
+
response = rest_api("DELETE", "webhook/#{uuid}", {})
|
66
|
+
end
|
67
|
+
|
68
|
+
protected
|
69
|
+
|
70
|
+
def rest_api(verb, path, body = nil)
|
71
|
+
verb = verb.upcase
|
72
|
+
body_digest = nil
|
73
|
+
puts "\n\n\n#{new_timestamp}\n\n"
|
74
|
+
timestamp = new_timestamp.to_s + "0000"
|
75
|
+
request_line = verb + ' ' + base_url+path + ' HTTP/1.1'
|
76
|
+
if body
|
77
|
+
if non_get_verb? verb
|
78
|
+
body_digest = Base64.strict_encode64(digest(JSON.generate(body)))
|
79
|
+
end
|
80
|
+
end
|
81
|
+
signature = encode_hmac_512(timestamp, host, request_line, body_digest)
|
82
|
+
url = host+base_url+path
|
83
|
+
|
84
|
+
if ['POST', 'PUT', 'PATCH', 'DELETE'].include?(verb)
|
85
|
+
authorization = "hmac username=\"" + key + "\", algorithm=\"hmac-sha512\", headers=\"nonce host digest request-line\", signature=\"" + signature + "\""
|
86
|
+
else
|
87
|
+
authorization = "hmac username=\"" + key + "\", algorithm=\"hmac-sha512\", headers=\"nonce host request-line\", signature=\"" + signature + "\"";
|
88
|
+
end
|
89
|
+
if is_get? verb
|
90
|
+
response = Faraday.get(url) do |req|
|
91
|
+
req.headers['nonce'] = timestamp.to_s
|
92
|
+
req.headers['authorization'] = authorization
|
93
|
+
req.headers['Date'] = http_format_date
|
94
|
+
req.headers['Content-Type'] = 'application/json'
|
95
|
+
req.headers['Accept'] = 'application/json'
|
96
|
+
end
|
97
|
+
elsif non_get_verb? verb
|
98
|
+
response = Faraday.post(url) do |req|
|
99
|
+
req.body = body.compact.to_json
|
100
|
+
req.headers['nonce'] = timestamp.to_s
|
101
|
+
req.headers['digest'] = "SHA-256="+body_digest
|
102
|
+
req.headers['authorization'] = authorization
|
103
|
+
req.headers['Date'] = http_format_date
|
104
|
+
req.headers['Content-Type'] = 'application/json'
|
105
|
+
end
|
106
|
+
end
|
107
|
+
# Rails.logger { response.describe }
|
108
|
+
# response.assert_success!
|
109
|
+
JSON.parse(response.body)
|
110
|
+
end
|
111
|
+
|
112
|
+
private
|
113
|
+
|
114
|
+
def base_url
|
115
|
+
return "/hexsafe/api/v4/"
|
116
|
+
end
|
117
|
+
|
118
|
+
def host
|
119
|
+
return "Invalid Environment" unless %w(TEST MAIN).include?(@mode)
|
120
|
+
@mode == "TEST" ? "https://api-test.hexsafe.io" : "https://api.hexsafe.io"
|
121
|
+
end
|
122
|
+
|
123
|
+
def key
|
124
|
+
@key ||= @key
|
125
|
+
end
|
126
|
+
|
127
|
+
def secret
|
128
|
+
@secret ||= @secret
|
129
|
+
end
|
130
|
+
|
131
|
+
def digest(data)
|
132
|
+
sha256 = OpenSSL::Digest::SHA256.new()
|
133
|
+
sha256.digest(data.encode('utf-8'))
|
134
|
+
end
|
135
|
+
|
136
|
+
def hmac_512 (secret, data)
|
137
|
+
OpenSSL::HMAC.digest('sha512',secret, data)
|
138
|
+
end
|
139
|
+
|
140
|
+
def encode_hmac_512(timestamp, host, request_line, body_digest = nil)
|
141
|
+
data = ''
|
142
|
+
data << 'nonce: ' + timestamp.to_s + "\n"
|
143
|
+
data << 'host: ' + URI.parse(host).host + "\n"
|
144
|
+
if body_digest
|
145
|
+
data << 'digest: SHA-256=' + body_digest + "\n"
|
146
|
+
end
|
147
|
+
data << request_line
|
148
|
+
Base64.strict_encode64(hmac_512(secret,data))
|
149
|
+
end
|
150
|
+
|
151
|
+
def http_format_date
|
152
|
+
Time.now.httpdate
|
153
|
+
end
|
154
|
+
|
155
|
+
def new_timestamp
|
156
|
+
(Time.now.to_f*1000).to_i.to_s
|
157
|
+
end
|
158
|
+
|
159
|
+
def is_get? verb
|
160
|
+
return ['GET'].include?(verb)
|
161
|
+
end
|
162
|
+
|
163
|
+
def non_get_verb? verb
|
164
|
+
return ['POST', 'PUT', 'PATCH', 'DELETE'].include?(verb)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
metadata
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hexsafe
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- imrahulprajapat
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-02-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.14.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.14.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: openssl
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: uri
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: base64
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.6'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.6'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rspec
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: A Ruby library to help you to integrate Hexsafe Wallet Management into
|
140
|
+
your rails application
|
141
|
+
email: hashtagrahulprajapat@gmail.com
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- lib/hexsafe.rb
|
147
|
+
- lib/hexsafe/api.rb
|
148
|
+
homepage: http://www.hypertechblog.com
|
149
|
+
licenses:
|
150
|
+
- MIT
|
151
|
+
metadata: {}
|
152
|
+
post_install_message:
|
153
|
+
rdoc_options: []
|
154
|
+
require_paths:
|
155
|
+
- lib
|
156
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
requirements: []
|
167
|
+
rubygems_version: 3.0.6
|
168
|
+
signing_key:
|
169
|
+
specification_version: 4
|
170
|
+
summary: A Ruby library to help you to integrate Hexsafe Wallet Management into your
|
171
|
+
rails application
|
172
|
+
test_files: []
|