forked from bitfinexcom/bitfinex-api-node
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrest2.js
140 lines (131 loc) · 3.49 KB
/
rest2.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
const request = require('request')
class Rest2 {
constructor(key, secret, nonceGenerator) {
this.url = "https://api.bitfinex.com"
this.version = 'v2'
this.key = key
this.secret = secret
this.nonce = new Date().getTime()
this._nonce = typeof nonceGenerator === "function" ? nonceGenerator : function() {
//noinspection JSPotentiallyInvalidUsageOfThis
return ++this.nonce
}
}
generic_callback(err, result) {
console.log(err, result)
}
make_request(sub_path, params, cb) {
if (cb == null) {
cb = this.generic_callback
}
var headers, key, nonce, path, payload, signature, url, value
if (!this.key || !this.secret) {
return cb(new Error("missing api key or secret"))
}
path = '/' + this.version + '/' + sub_path
url = this.url + path
nonce = JSON.stringify(this._nonce())
payload = {
request: path,
nonce: nonce
}
for (key in params) {
value = params[key]
payload[key] = value
}
payload = new Buffer(JSON.stringify(payload)).toString('base64')
signature = crypto.createHmac("sha384", this.secret).update(payload).digest('hex')
headers = {
'X-BFX-APIKEY': this.key,
'X-BFX-PAYLOAD': payload,
'X-BFX-SIGNATURE': signature
}
return request({
url: url,
method: "POST",
headers: headers,
timeout: 15000
}, function(err, response, body) {
var error, error1, result
if (err || (response.statusCode !== 200 && response.statusCode !== 400)) {
return cb(new Error(err != null ? err : response.statusCode))
}
try {
result = JSON.parse(body)
} catch (error1) {
error = error1
return cb(null, {
message: body.toString()
})
}
if (result.message != null) {
return cb(new Error(result.message))
}
return cb(null, result)
})
}
make_public_request(sub_path, cb) {
if (cb == null) {
cb = this.generic_callback
}
let url
let path = '/' + this.version + '/' + sub_path
url = this.url + path
return request({
url: url,
method: "GET",
timeout: 15000
}, function(err, response, body) {
var error, error1, result
if (err || (response.statusCode !== 200 && response.statusCode !== 400)) {
return cb(new Error(err != null ? err : response.statusCode))
}
try {
result = JSON.parse(body)
} catch (error1) {
error = error1
return cb(null, {
message: body.toString()
})
}
if (result.message != null) {
return cb(new Error(result.message))
}
return cb(null, result)
})
}
ticker(symbol, cb) {
if (symbol == null || typeof symbol === 'function') {
symbol = "tBTCUSD"
}
if (cb == null) {
cb = this.generic_callback
}
return this.make_public_request('ticker/' + symbol, cb)
}
stats(key, context, cb) {
if (key == null) {
key = "pos.size:1m:tBTCUSD:long"
}
if (context == null) {
context = 'hist'
}
if (cb == null) {
cb = this.generic_callback
}
return this.make_public_request('stats1/' + key + '/' + context, cb)
}
candles(key, context, cb) {
if (key == null) {
key = "trades:1m:tBTCUSD"
}
if (context == null) {
context = 'hist'
}
if (cb == null) {
cb = this.generic_callback
}
return this.make_public_request('stats1/' + key + '/' + context, cb)
}
}
module.exports = Rest2