bybit-api 2.1.8 → 2.2.0-beta.1
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.
- package/lib/constants/enum.d.ts +40 -0
- package/lib/constants/enum.js +44 -0
- package/lib/constants/enum.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/inverse-client.d.ts +69 -58
- package/lib/inverse-client.js +109 -71
- package/lib/inverse-client.js.map +1 -1
- package/lib/inverse-futures-client.d.ts +85 -50
- package/lib/inverse-futures-client.js +124 -50
- package/lib/inverse-futures-client.js.map +1 -1
- package/lib/linear-client.d.ts +97 -49
- package/lib/linear-client.js +129 -44
- package/lib/linear-client.js.map +1 -1
- package/lib/logger.js +1 -1
- package/lib/spot-client.d.ts +22 -23
- package/lib/spot-client.js +15 -16
- package/lib/spot-client.js.map +1 -1
- package/lib/types/shared.d.ts +7 -3
- package/lib/types/spot.d.ts +15 -0
- package/lib/util/BaseRestClient.d.ts +13 -9
- package/lib/util/BaseRestClient.js +63 -26
- package/lib/util/BaseRestClient.js.map +1 -1
- package/lib/util/WsStore.d.ts +2 -3
- package/lib/util/WsStore.js +3 -3
- package/lib/util/WsStore.js.map +1 -1
- package/lib/util/browser-support.js +3 -2
- package/lib/util/browser-support.js.map +1 -1
- package/lib/util/node-support.js +1 -4
- package/lib/util/node-support.js.map +1 -1
- package/lib/util/requestUtils.d.ts +8 -1
- package/lib/util/requestUtils.js +22 -10
- package/lib/util/requestUtils.js.map +1 -1
- package/lib/websocket-client.js +54 -36
- package/lib/websocket-client.js.map +1 -1
- package/package.json +1 -1
- package/lib/shared-endpoints.d.ts +0 -48
- package/lib/shared-endpoints.js +0 -91
- package/lib/shared-endpoints.js.map +0 -1
- package/lib/util/requestWrapper.d.ts +0 -37
- package/lib/util/requestWrapper.js +0 -154
- package/lib/util/requestWrapper.js.map +0 -1
package/lib/spot-client.js
CHANGED
|
@@ -26,33 +26,30 @@ class SpotClient extends BaseRestClient_1.default {
|
|
|
26
26
|
* @param {AxiosRequestConfig} [requestOptions={}] HTTP networking options for axios
|
|
27
27
|
*/
|
|
28
28
|
constructor(key, secret, useLivenet = false, restClientOptions = {}, requestOptions = {}) {
|
|
29
|
-
super(key, secret, requestUtils_1.getRestBaseUrl(useLivenet, restClientOptions), restClientOptions, requestOptions);
|
|
30
|
-
// this.requestWrapper = new RequestWrapper(
|
|
31
|
-
// key,
|
|
32
|
-
// secret,
|
|
33
|
-
// getRestBaseUrl(useLivenet, restClientOptions),
|
|
34
|
-
// restClientOptions,
|
|
35
|
-
// requestOptions
|
|
36
|
-
// );
|
|
29
|
+
super(key, secret, requestUtils_1.getRestBaseUrl(useLivenet, restClientOptions), restClientOptions, requestOptions, requestUtils_1.REST_CLIENT_TYPE_ENUM.spot);
|
|
37
30
|
return this;
|
|
38
31
|
}
|
|
39
|
-
|
|
32
|
+
fetchServerTime() {
|
|
33
|
+
return this.getServerTime();
|
|
34
|
+
}
|
|
35
|
+
getServerTime() {
|
|
40
36
|
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
-
const
|
|
42
|
-
return result.serverTime;
|
|
37
|
+
const res = yield this.get('/spot/v1/time');
|
|
38
|
+
return res.result.serverTime;
|
|
43
39
|
});
|
|
44
40
|
}
|
|
45
41
|
/**
|
|
46
42
|
*
|
|
47
43
|
* Market Data Endpoints
|
|
48
44
|
*
|
|
49
|
-
|
|
45
|
+
**/
|
|
50
46
|
getSymbols() {
|
|
51
47
|
return this.get('/spot/v1/symbols');
|
|
52
48
|
}
|
|
53
49
|
getOrderBook(symbol, limit) {
|
|
54
50
|
return this.get('/spot/quote/v1/depth', {
|
|
55
|
-
symbol,
|
|
51
|
+
symbol,
|
|
52
|
+
limit,
|
|
56
53
|
});
|
|
57
54
|
}
|
|
58
55
|
getMergedOrderBook(symbol, scale, limit) {
|
|
@@ -63,7 +60,7 @@ class SpotClient extends BaseRestClient_1.default {
|
|
|
63
60
|
});
|
|
64
61
|
}
|
|
65
62
|
getTrades(symbol, limit) {
|
|
66
|
-
return this.get('/spot/v1/trades', {
|
|
63
|
+
return this.get('/spot/quote/v1/trades', {
|
|
67
64
|
symbol,
|
|
68
65
|
limit,
|
|
69
66
|
});
|
|
@@ -90,7 +87,7 @@ class SpotClient extends BaseRestClient_1.default {
|
|
|
90
87
|
* Account Data Endpoints
|
|
91
88
|
*/
|
|
92
89
|
submitOrder(params) {
|
|
93
|
-
return this.postPrivate('/spot/v1/order', params);
|
|
90
|
+
return this.postPrivate('/spot/v1/order', Object.assign(Object.assign({}, params), { agentSource: requestUtils_1.agentSource }));
|
|
94
91
|
}
|
|
95
92
|
getOrder(params) {
|
|
96
93
|
return this.getPrivate('/spot/v1/order', params);
|
|
@@ -99,7 +96,9 @@ class SpotClient extends BaseRestClient_1.default {
|
|
|
99
96
|
return this.deletePrivate('/spot/v1/order', params);
|
|
100
97
|
}
|
|
101
98
|
cancelOrderBatch(params) {
|
|
102
|
-
const orderTypes = params.orderTypes
|
|
99
|
+
const orderTypes = params.orderTypes
|
|
100
|
+
? params.orderTypes.join(',')
|
|
101
|
+
: undefined;
|
|
103
102
|
return this.deletePrivate('/spot/order/batch-cancel', Object.assign(Object.assign({}, params), { orderTypes }));
|
|
104
103
|
}
|
|
105
104
|
getOpenOrders(symbol, orderId, limit) {
|
package/lib/spot-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spot-client.js","sourceRoot":"","sources":["../src/spot-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"spot-client.js","sourceRoot":"","sources":["../src/spot-client.ts"],"names":[],"mappings":"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"}
|
package/lib/types/shared.d.ts
CHANGED
|
@@ -2,11 +2,15 @@ export declare type KlineInterval = '1m' | '3m' | '5m' | '15m' | '30m' | '1h' |
|
|
|
2
2
|
export declare type numberInString = string;
|
|
3
3
|
export interface APIResponse<T> {
|
|
4
4
|
ret_code: number;
|
|
5
|
-
ret_msg:
|
|
6
|
-
ext_code: string;
|
|
7
|
-
ext_info: string;
|
|
5
|
+
ret_msg: 'OK' | string;
|
|
6
|
+
ext_code: string | null;
|
|
7
|
+
ext_info: string | null;
|
|
8
8
|
result: T;
|
|
9
9
|
}
|
|
10
|
+
export interface APIResponseWithTime<T> extends APIResponse<T> {
|
|
11
|
+
/** UTC timestamp */
|
|
12
|
+
time_now: numberInString;
|
|
13
|
+
}
|
|
10
14
|
/**
|
|
11
15
|
* Request Parameter Types
|
|
12
16
|
*/
|
package/lib/types/spot.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { numberInString } from './shared';
|
|
1
2
|
export declare type OrderSide = 'Buy' | 'Sell';
|
|
2
3
|
export declare type OrderTypeSpot = 'LIMIT' | 'MARKET' | 'LIMIT_MAKER';
|
|
3
4
|
export declare type OrderTimeInForce = 'GTC' | 'FOK' | 'IOC';
|
|
@@ -14,3 +15,17 @@ export interface SpotOrderQueryById {
|
|
|
14
15
|
orderId?: string;
|
|
15
16
|
orderLinkId?: string;
|
|
16
17
|
}
|
|
18
|
+
export interface SpotSymbolInfo {
|
|
19
|
+
name: string;
|
|
20
|
+
alias: string;
|
|
21
|
+
baseCurrency: string;
|
|
22
|
+
quoteCurrency: string;
|
|
23
|
+
basePrecision: numberInString;
|
|
24
|
+
quotePrecision: numberInString;
|
|
25
|
+
minTradeQuantity: numberInString;
|
|
26
|
+
minTradeAmount: numberInString;
|
|
27
|
+
minPricePrecision: numberInString;
|
|
28
|
+
maxTradeQuantity: numberInString;
|
|
29
|
+
maxTradeAmount: numberInString;
|
|
30
|
+
category: numberInString;
|
|
31
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AxiosRequestConfig } from 'axios';
|
|
2
|
-
import { RestClientOptions,
|
|
2
|
+
import { RestClientOptions, RestClientType } from './requestUtils';
|
|
3
3
|
export default abstract class BaseRestClient {
|
|
4
4
|
private timeOffset;
|
|
5
5
|
private syncTimePromise;
|
|
@@ -8,12 +8,17 @@ export default abstract class BaseRestClient {
|
|
|
8
8
|
private globalRequestOptions;
|
|
9
9
|
private key;
|
|
10
10
|
private secret;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
private clientType;
|
|
12
|
+
/** Function that calls exchange API to query & resolve server time, used by time sync */
|
|
13
|
+
abstract fetchServerTime(): Promise<number>;
|
|
14
|
+
constructor(key: string | undefined, secret: string | undefined, baseUrl: string, options: RestClientOptions | undefined, requestOptions: AxiosRequestConfig | undefined, clientType: RestClientType);
|
|
15
|
+
private isSpotClient;
|
|
16
|
+
get(endpoint: string, params?: any): Promise<any>;
|
|
17
|
+
post(endpoint: string, params?: any): Promise<any>;
|
|
18
|
+
getPrivate(endpoint: string, params?: any): Promise<any>;
|
|
19
|
+
postPrivate(endpoint: string, params?: any): Promise<any>;
|
|
20
|
+
deletePrivate(endpoint: string, params?: any): Promise<any>;
|
|
21
|
+
private prepareSignParams;
|
|
17
22
|
/**
|
|
18
23
|
* @private Make a HTTP request to a specific endpoint. Private endpoints are automatically signed.
|
|
19
24
|
*/
|
|
@@ -25,12 +30,11 @@ export default abstract class BaseRestClient {
|
|
|
25
30
|
/**
|
|
26
31
|
* @private sign request and set recv window
|
|
27
32
|
*/
|
|
28
|
-
signRequest
|
|
33
|
+
private signRequest;
|
|
29
34
|
/**
|
|
30
35
|
* Trigger time sync and store promise
|
|
31
36
|
*/
|
|
32
37
|
private syncTime;
|
|
33
|
-
abstract getServerTime(baseUrlKeyOverride?: string): Promise<number>;
|
|
34
38
|
/**
|
|
35
39
|
* Estimate drift based on client<->server latency
|
|
36
40
|
*/
|
|
@@ -16,9 +16,10 @@ const axios_1 = __importDefault(require("axios"));
|
|
|
16
16
|
const node_support_1 = require("./node-support");
|
|
17
17
|
const requestUtils_1 = require("./requestUtils");
|
|
18
18
|
class BaseRestClient {
|
|
19
|
-
constructor(key, secret, baseUrl, options = {}, requestOptions = {}) {
|
|
19
|
+
constructor(key, secret, baseUrl, options = {}, requestOptions = {}, clientType) {
|
|
20
20
|
this.timeOffset = null;
|
|
21
21
|
this.syncTimePromise = null;
|
|
22
|
+
this.clientType = clientType;
|
|
22
23
|
this.options = Object.assign({ recv_window: 5000,
|
|
23
24
|
// how often to sync time drift with bybit servers
|
|
24
25
|
sync_interval_ms: 3600000,
|
|
@@ -27,7 +28,7 @@ class BaseRestClient {
|
|
|
27
28
|
this.globalRequestOptions = Object.assign(Object.assign({
|
|
28
29
|
// in ms == 5 minutes by default
|
|
29
30
|
timeout: 1000 * 60 * 5 }, requestOptions), { headers: {
|
|
30
|
-
'x-referer': 'bybitapinode'
|
|
31
|
+
'x-referer': 'bybitapinode',
|
|
31
32
|
} });
|
|
32
33
|
this.baseUrl = baseUrl;
|
|
33
34
|
if (key && !secret) {
|
|
@@ -40,6 +41,9 @@ class BaseRestClient {
|
|
|
40
41
|
this.key = key;
|
|
41
42
|
this.secret = secret;
|
|
42
43
|
}
|
|
44
|
+
isSpotClient() {
|
|
45
|
+
return this.clientType === requestUtils_1.REST_CLIENT_TYPE_ENUM.spot;
|
|
46
|
+
}
|
|
43
47
|
get(endpoint, params) {
|
|
44
48
|
return this._call('GET', endpoint, params, true);
|
|
45
49
|
}
|
|
@@ -55,33 +59,55 @@ class BaseRestClient {
|
|
|
55
59
|
deletePrivate(endpoint, params) {
|
|
56
60
|
return this._call('DELETE', endpoint, params, false);
|
|
57
61
|
}
|
|
62
|
+
prepareSignParams(params, isPublicApi) {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
if (isPublicApi) {
|
|
65
|
+
return {
|
|
66
|
+
originalParams: params,
|
|
67
|
+
paramsWithSign: params,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (!this.key || !this.secret) {
|
|
71
|
+
throw new Error('Private endpoints require api and private keys set');
|
|
72
|
+
}
|
|
73
|
+
if (this.timeOffset === null) {
|
|
74
|
+
yield this.syncTime();
|
|
75
|
+
}
|
|
76
|
+
return this.signRequest(params);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
58
79
|
/**
|
|
59
80
|
* @private Make a HTTP request to a specific endpoint. Private endpoints are automatically signed.
|
|
60
81
|
*/
|
|
61
82
|
_call(method, endpoint, params, isPublicApi) {
|
|
83
|
+
var _a;
|
|
62
84
|
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (this.timeOffset === null) {
|
|
68
|
-
yield this.syncTime();
|
|
85
|
+
const options = Object.assign(Object.assign({}, this.globalRequestOptions), { url: [this.baseUrl, endpoint].join(endpoint.startsWith('/') ? '' : '/'), method: method, json: true });
|
|
86
|
+
for (const key in params) {
|
|
87
|
+
if (typeof params[key] === 'undefined') {
|
|
88
|
+
delete params[key];
|
|
69
89
|
}
|
|
70
|
-
params = yield this.signRequest(params);
|
|
71
90
|
}
|
|
72
|
-
const
|
|
73
|
-
if (method === 'GET') {
|
|
74
|
-
options.params =
|
|
91
|
+
const signResult = yield this.prepareSignParams(params, isPublicApi);
|
|
92
|
+
if (method === 'GET' || this.isSpotClient()) {
|
|
93
|
+
options.params = signResult.paramsWithSign;
|
|
94
|
+
if ((_a = options.params) === null || _a === void 0 ? void 0 : _a.agentSource) {
|
|
95
|
+
options.data = {
|
|
96
|
+
agentSource: requestUtils_1.agentSource,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
75
99
|
}
|
|
76
100
|
else {
|
|
77
|
-
options.data =
|
|
101
|
+
options.data = signResult.paramsWithSign;
|
|
78
102
|
}
|
|
79
|
-
return axios_1.default(options)
|
|
103
|
+
return axios_1.default(options)
|
|
104
|
+
.then((response) => {
|
|
80
105
|
if (response.status == 200) {
|
|
81
106
|
return response.data;
|
|
82
107
|
}
|
|
83
108
|
throw response;
|
|
84
|
-
})
|
|
109
|
+
})
|
|
110
|
+
.catch((e) => this.parseException(e));
|
|
85
111
|
});
|
|
86
112
|
}
|
|
87
113
|
/**
|
|
@@ -107,7 +133,7 @@ class BaseRestClient {
|
|
|
107
133
|
message: response.statusText,
|
|
108
134
|
body: response.data,
|
|
109
135
|
headers: response.headers,
|
|
110
|
-
requestOptions: this.options
|
|
136
|
+
requestOptions: this.options,
|
|
111
137
|
};
|
|
112
138
|
}
|
|
113
139
|
/**
|
|
@@ -115,16 +141,25 @@ class BaseRestClient {
|
|
|
115
141
|
*/
|
|
116
142
|
signRequest(data) {
|
|
117
143
|
return __awaiter(this, void 0, void 0, function* () {
|
|
118
|
-
const
|
|
144
|
+
const res = {
|
|
145
|
+
originalParams: Object.assign(Object.assign({}, data), { api_key: this.key, timestamp: Date.now() + (this.timeOffset || 0) }),
|
|
146
|
+
sign: '',
|
|
147
|
+
};
|
|
119
148
|
// Optional, set to 5000 by default. Increase if timestamp/recv_window errors are seen.
|
|
120
|
-
if (this.options.recv_window && !
|
|
121
|
-
|
|
149
|
+
if (this.options.recv_window && !res.originalParams.recv_window) {
|
|
150
|
+
if (this.isSpotClient()) {
|
|
151
|
+
res.originalParams.recvWindow = this.options.recv_window;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
res.originalParams.recv_window = this.options.recv_window;
|
|
155
|
+
}
|
|
122
156
|
}
|
|
123
157
|
if (this.key && this.secret) {
|
|
124
|
-
const serializedParams = requestUtils_1.serializeParams(
|
|
125
|
-
|
|
158
|
+
const serializedParams = requestUtils_1.serializeParams(res.originalParams, this.options.strict_param_validation);
|
|
159
|
+
res.sign = yield node_support_1.signMessage(serializedParams, this.secret);
|
|
160
|
+
res.paramsWithSign = Object.assign(Object.assign({}, res.originalParams), { sign: res.sign });
|
|
126
161
|
}
|
|
127
|
-
return
|
|
162
|
+
return res;
|
|
128
163
|
});
|
|
129
164
|
}
|
|
130
165
|
/**
|
|
@@ -137,7 +172,7 @@ class BaseRestClient {
|
|
|
137
172
|
if (this.syncTimePromise !== null) {
|
|
138
173
|
return this.syncTimePromise;
|
|
139
174
|
}
|
|
140
|
-
this.syncTimePromise = this.fetchTimeOffset().then(offset => {
|
|
175
|
+
this.syncTimePromise = this.fetchTimeOffset().then((offset) => {
|
|
141
176
|
this.timeOffset = offset;
|
|
142
177
|
this.syncTimePromise = null;
|
|
143
178
|
});
|
|
@@ -150,9 +185,12 @@ class BaseRestClient {
|
|
|
150
185
|
return __awaiter(this, void 0, void 0, function* () {
|
|
151
186
|
try {
|
|
152
187
|
const start = Date.now();
|
|
153
|
-
const serverTime = yield this.
|
|
188
|
+
const serverTime = yield this.fetchServerTime();
|
|
189
|
+
if (!serverTime || isNaN(serverTime)) {
|
|
190
|
+
throw new Error(`fetchServerTime() returned non-number: "${serverTime}" typeof(${typeof serverTime})`);
|
|
191
|
+
}
|
|
154
192
|
const end = Date.now();
|
|
155
|
-
const avgDrift = (
|
|
193
|
+
const avgDrift = (end - start) / 2;
|
|
156
194
|
return Math.ceil(serverTime - end + avgDrift);
|
|
157
195
|
}
|
|
158
196
|
catch (e) {
|
|
@@ -163,5 +201,4 @@ class BaseRestClient {
|
|
|
163
201
|
}
|
|
164
202
|
}
|
|
165
203
|
exports.default = BaseRestClient;
|
|
166
|
-
;
|
|
167
204
|
//# sourceMappingURL=BaseRestClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseRestClient.js","sourceRoot":"","sources":["../../src/util/BaseRestClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"BaseRestClient.js","sourceRoot":"","sources":["../../src/util/BaseRestClient.ts"],"names":[],"mappings":"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"}
|
package/lib/util/WsStore.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { WsConnectionState } from '../websocket-client';
|
|
3
2
|
import { DefaultLogger } from '../logger';
|
|
4
3
|
import WebSocket from 'isomorphic-ws';
|
|
@@ -7,8 +6,8 @@ declare type WsTopicList = Set<WsTopic>;
|
|
|
7
6
|
interface WsStoredState {
|
|
8
7
|
ws?: WebSocket;
|
|
9
8
|
connectionState?: WsConnectionState;
|
|
10
|
-
activePingTimer?:
|
|
11
|
-
activePongTimer?:
|
|
9
|
+
activePingTimer?: ReturnType<typeof setTimeout> | undefined;
|
|
10
|
+
activePongTimer?: ReturnType<typeof setTimeout> | undefined;
|
|
12
11
|
subscribedTopics: WsTopicList;
|
|
13
12
|
}
|
|
14
13
|
export default class WsStore {
|
package/lib/util/WsStore.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const websocket_client_1 = require("../websocket-client");
|
|
4
4
|
const logger_1 = require("../logger");
|
|
5
|
-
;
|
|
6
5
|
class WsStore {
|
|
7
6
|
constructor(logger) {
|
|
8
7
|
this.logger = logger || logger_1.DefaultLogger;
|
|
@@ -25,7 +24,7 @@ class WsStore {
|
|
|
25
24
|
}
|
|
26
25
|
this.wsState[key] = {
|
|
27
26
|
subscribedTopics: new Set(),
|
|
28
|
-
connectionState: websocket_client_1.WsConnectionState.READY_STATE_INITIAL
|
|
27
|
+
connectionState: websocket_client_1.WsConnectionState.READY_STATE_INITIAL,
|
|
29
28
|
};
|
|
30
29
|
return this.get(key);
|
|
31
30
|
}
|
|
@@ -55,7 +54,8 @@ class WsStore {
|
|
|
55
54
|
/* connection state */
|
|
56
55
|
isWsOpen(key) {
|
|
57
56
|
const existingConnection = this.getWs(key);
|
|
58
|
-
return !!existingConnection &&
|
|
57
|
+
return (!!existingConnection &&
|
|
58
|
+
existingConnection.readyState === existingConnection.OPEN);
|
|
59
59
|
}
|
|
60
60
|
getConnectionState(key) {
|
|
61
61
|
return this.get(key, true).connectionState;
|
package/lib/util/WsStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WsStore.js","sourceRoot":"","sources":["../../src/util/WsStore.ts"],"names":[],"mappings":";;AAAA,0DAAwD;AACxD,sCAA0C;
|
|
1
|
+
{"version":3,"file":"WsStore.js","sourceRoot":"","sources":["../../src/util/WsStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,9 +15,10 @@ function signMessage(message, secret) {
|
|
|
15
15
|
const encoder = new TextEncoder();
|
|
16
16
|
const key = yield window.crypto.subtle.importKey('raw', encoder.encode(secret), { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);
|
|
17
17
|
const signature = yield window.crypto.subtle.sign('HMAC', key, encoder.encode(message));
|
|
18
|
-
return Array.prototype.map
|
|
18
|
+
return Array.prototype.map
|
|
19
|
+
.call(new Uint8Array(signature), (x) => ('00' + x.toString(16)).slice(-2))
|
|
20
|
+
.join('');
|
|
19
21
|
});
|
|
20
22
|
}
|
|
21
23
|
exports.signMessage = signMessage;
|
|
22
|
-
;
|
|
23
24
|
//# sourceMappingURL=browser-support.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-support.js","sourceRoot":"","sources":["../../src/util/browser-support.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"browser-support.js","sourceRoot":"","sources":["../../src/util/browser-support.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,SAAsB,WAAW,CAC/B,OAAe,EACf,MAAc;;QAEd,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAC9C,KAAK,EACL,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EACtB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAC3C,KAAK,EACL,CAAC,MAAM,CAAC,CACT,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAC/C,MAAM,EACN,GAAG,EACH,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CACxB,CAAC;QAEF,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG;aACvB,IAAI,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAM,EAAE,EAAE,CAC1C,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAClC;aACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;CAAA;AAxBD,kCAwBC"}
|
package/lib/util/node-support.js
CHANGED
|
@@ -13,11 +13,8 @@ exports.signMessage = void 0;
|
|
|
13
13
|
const crypto_1 = require("crypto");
|
|
14
14
|
function signMessage(message, secret) {
|
|
15
15
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16
|
-
return crypto_1.createHmac('sha256', secret)
|
|
17
|
-
.update(message)
|
|
18
|
-
.digest('hex');
|
|
16
|
+
return crypto_1.createHmac('sha256', secret).update(message).digest('hex');
|
|
19
17
|
});
|
|
20
18
|
}
|
|
21
19
|
exports.signMessage = signMessage;
|
|
22
|
-
;
|
|
23
20
|
//# sourceMappingURL=node-support.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-support.js","sourceRoot":"","sources":["../../src/util/node-support.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAoC;AAEpC,SAAsB,WAAW,
|
|
1
|
+
{"version":3,"file":"node-support.js","sourceRoot":"","sources":["../../src/util/node-support.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAoC;AAEpC,SAAsB,WAAW,CAC/B,OAAe,EACf,MAAc;;QAEd,OAAO,mBAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;CAAA;AALD,kCAKC"}
|
|
@@ -6,8 +6,15 @@ export interface RestClientOptions {
|
|
|
6
6
|
baseUrl?: string;
|
|
7
7
|
parse_exceptions?: boolean;
|
|
8
8
|
}
|
|
9
|
-
export declare type GenericAPIResponse = Promise<any>;
|
|
10
9
|
export declare function serializeParams(params?: object, strict_validation?: boolean): string;
|
|
11
10
|
export declare function getRestBaseUrl(useLivenet: boolean, restInverseOptions: RestClientOptions): string;
|
|
12
11
|
export declare function isPublicEndpoint(endpoint: string): boolean;
|
|
13
12
|
export declare function isWsPong(response: any): any;
|
|
13
|
+
export declare const agentSource = "bybitapinode";
|
|
14
|
+
export declare const REST_CLIENT_TYPE_ENUM: {
|
|
15
|
+
readonly inverse: "inverse";
|
|
16
|
+
readonly inverseFutures: "inverseFutures";
|
|
17
|
+
readonly linear: "linear";
|
|
18
|
+
readonly spot: "spot";
|
|
19
|
+
};
|
|
20
|
+
export declare type RestClientType = typeof REST_CLIENT_TYPE_ENUM[keyof typeof REST_CLIENT_TYPE_ENUM];
|
package/lib/util/requestUtils.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isWsPong = exports.isPublicEndpoint = exports.getRestBaseUrl = exports.serializeParams = void 0;
|
|
3
|
+
exports.REST_CLIENT_TYPE_ENUM = exports.agentSource = exports.isWsPong = exports.isPublicEndpoint = exports.getRestBaseUrl = exports.serializeParams = void 0;
|
|
4
4
|
function serializeParams(params = {}, strict_validation = false) {
|
|
5
5
|
return Object.keys(params)
|
|
6
6
|
.sort()
|
|
7
|
-
.map(key => {
|
|
7
|
+
.map((key) => {
|
|
8
8
|
const value = params[key];
|
|
9
9
|
if (strict_validation === true && typeof value === 'undefined') {
|
|
10
10
|
throw new Error('Failed to sign API request due to undefined parameter');
|
|
@@ -14,11 +14,10 @@ function serializeParams(params = {}, strict_validation = false) {
|
|
|
14
14
|
.join('&');
|
|
15
15
|
}
|
|
16
16
|
exports.serializeParams = serializeParams;
|
|
17
|
-
;
|
|
18
17
|
function getRestBaseUrl(useLivenet, restInverseOptions) {
|
|
19
18
|
const baseUrlsInverse = {
|
|
20
19
|
livenet: 'https://api.bybit.com',
|
|
21
|
-
testnet: 'https://api-testnet.bybit.com'
|
|
20
|
+
testnet: 'https://api-testnet.bybit.com',
|
|
22
21
|
};
|
|
23
22
|
if (restInverseOptions.baseUrl) {
|
|
24
23
|
return restInverseOptions.baseUrl;
|
|
@@ -30,17 +29,23 @@ function getRestBaseUrl(useLivenet, restInverseOptions) {
|
|
|
30
29
|
}
|
|
31
30
|
exports.getRestBaseUrl = getRestBaseUrl;
|
|
32
31
|
function isPublicEndpoint(endpoint) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
const publicPrefixes = [
|
|
33
|
+
'v2/public',
|
|
34
|
+
'public/linear',
|
|
35
|
+
'spot/quote/v1',
|
|
36
|
+
'spot/v1/symbols',
|
|
37
|
+
'spot/v1/time',
|
|
38
|
+
];
|
|
39
|
+
for (const prefix of publicPrefixes) {
|
|
40
|
+
if (endpoint.startsWith(prefix)) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
38
43
|
}
|
|
39
44
|
return false;
|
|
40
45
|
}
|
|
41
46
|
exports.isPublicEndpoint = isPublicEndpoint;
|
|
42
47
|
function isWsPong(response) {
|
|
43
|
-
if (response.pong) {
|
|
48
|
+
if (response.pong || response.ping) {
|
|
44
49
|
return true;
|
|
45
50
|
}
|
|
46
51
|
return (response.request &&
|
|
@@ -49,4 +54,11 @@ function isWsPong(response) {
|
|
|
49
54
|
response.success === true);
|
|
50
55
|
}
|
|
51
56
|
exports.isWsPong = isWsPong;
|
|
57
|
+
exports.agentSource = 'bybitapinode';
|
|
58
|
+
exports.REST_CLIENT_TYPE_ENUM = {
|
|
59
|
+
inverse: 'inverse',
|
|
60
|
+
inverseFutures: 'inverseFutures',
|
|
61
|
+
linear: 'linear',
|
|
62
|
+
spot: 'spot',
|
|
63
|
+
};
|
|
52
64
|
//# sourceMappingURL=requestUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestUtils.js","sourceRoot":"","sources":["../../src/util/requestUtils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"requestUtils.js","sourceRoot":"","sources":["../../src/util/requestUtils.ts"],"names":[],"mappings":";;;AAqBA,SAAgB,eAAe,CAC7B,SAAiB,EAAE,EACnB,iBAAiB,GAAG,KAAK;IAEzB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SACvB,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,iBAAiB,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;YAC9D,MAAM,IAAI,KAAK,CACb,uDAAuD,CACxD,CAAC;SACH;QACD,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IAC3B,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAhBD,0CAgBC;AAED,SAAgB,cAAc,CAC5B,UAAmB,EACnB,kBAAqC;IAErC,MAAM,eAAe,GAAG;QACtB,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE,+BAA+B;KACzC,CAAC;IAEF,IAAI,kBAAkB,CAAC,OAAO,EAAE;QAC9B,OAAO,kBAAkB,CAAC,OAAO,CAAC;KACnC;IAED,IAAI,UAAU,KAAK,IAAI,EAAE;QACvB,OAAO,eAAe,CAAC,OAAO,CAAC;KAChC;IACD,OAAO,eAAe,CAAC,OAAO,CAAC;AACjC,CAAC;AAjBD,wCAiBC;AAED,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,cAAc,GAAG;QACrB,WAAW;QACX,eAAe;QACf,eAAe;QACf,iBAAiB;QACjB,cAAc;KACf,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;QACnC,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAfD,4CAeC;AAED,SAAgB,QAAQ,CAAC,QAAa;IACpC,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE;QAClC,OAAO,IAAI,CAAC;KACb;IACD,OAAO,CACL,QAAQ,CAAC,OAAO;QAChB,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,MAAM;QAC9B,QAAQ,CAAC,OAAO,KAAK,MAAM;QAC3B,QAAQ,CAAC,OAAO,KAAK,IAAI,CAC1B,CAAC;AACJ,CAAC;AAVD,4BAUC;AAEY,QAAA,WAAW,GAAG,cAAc,CAAC;AAE7B,QAAA,qBAAqB,GAAG;IACnC,OAAO,EAAE,SAAS;IAClB,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;CACJ,CAAC"}
|