@yuants/vendor-huobi 0.18.2 → 0.18.4
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/dist/api/private-api.js +50 -25
- package/dist/api/private-api.js.map +1 -1
- package/dist/api/public-api.js +86 -16
- package/dist/api/public-api.js.map +1 -1
- package/dist/services/accounts/swap.js +3 -3
- package/dist/services/accounts/swap.js.map +1 -1
- package/dist/services/orders/submitOrder.js +2 -2
- package/dist/services/orders/submitOrder.js.map +1 -1
- package/lib/api/private-api.d.ts +1 -1
- package/lib/api/private-api.d.ts.map +1 -1
- package/lib/api/private-api.js +50 -26
- package/lib/api/private-api.js.map +1 -1
- package/lib/api/public-api.d.ts +1 -1
- package/lib/api/public-api.d.ts.map +1 -1
- package/lib/api/public-api.js +85 -15
- package/lib/api/public-api.js.map +1 -1
- package/lib/services/accounts/swap.js +3 -3
- package/lib/services/accounts/swap.js.map +1 -1
- package/lib/services/orders/submitOrder.js +2 -2
- package/lib/services/orders/submitOrder.js.map +1 -1
- package/package.json +15 -15
- package/temp/package-deps.json +21 -21
package/dist/api/private-api.js
CHANGED
|
@@ -1,11 +1,32 @@
|
|
|
1
|
-
import { encodeBase64, formatTime, HmacSHA256 } from '@yuants/utils';
|
|
1
|
+
import { encodeBase64, formatTime, HmacSHA256, scopeError, tokenBucket } from '@yuants/utils';
|
|
2
|
+
const SPOT_API_ROOT = 'api.huobi.pro';
|
|
3
|
+
const LINEAR_SWAP_API_ROOT = 'api.hbdm.com';
|
|
2
4
|
export const getDefaultCredential = () => {
|
|
3
5
|
return {
|
|
4
6
|
access_key: process.env.ACCESS_KEY,
|
|
5
7
|
secret_key: process.env.SECRET_KEY,
|
|
6
8
|
};
|
|
7
9
|
};
|
|
8
|
-
|
|
10
|
+
const createdBuckets = new Set();
|
|
11
|
+
const getOrCreatePrivateBucket = (bucketId) => {
|
|
12
|
+
if (!createdBuckets.has(bucketId)) {
|
|
13
|
+
createdBuckets.add(bucketId);
|
|
14
|
+
tokenBucket(bucketId, { capacity: 36, refillAmount: 36, refillInterval: 3000 });
|
|
15
|
+
}
|
|
16
|
+
return tokenBucket(bucketId);
|
|
17
|
+
};
|
|
18
|
+
const acquirePrivate = (bucketId, meta) => {
|
|
19
|
+
const bucket = getOrCreatePrivateBucket(bucketId);
|
|
20
|
+
scopeError('HUOBI_API_RATE_LIMIT', Object.assign(Object.assign({}, meta), { bucketId }), () => bucket.acquireSync(1));
|
|
21
|
+
};
|
|
22
|
+
const privateRequestWithRateLimit = async (credential, interfaceType, business, method, path, api_root, params) => {
|
|
23
|
+
const meta = { method, api_root, path, business, interfaceType, access_key: credential.access_key };
|
|
24
|
+
const interfaceTypeUpper = interfaceType.toUpperCase();
|
|
25
|
+
const businessUpper = business.toUpperCase();
|
|
26
|
+
const globalBucketId = `HUOBI_PRIVATE_${interfaceTypeUpper}_UID_3S_ALL:${credential.access_key}`;
|
|
27
|
+
const businessBucketId = `HUOBI_PRIVATE_${interfaceTypeUpper}_UID_3S_${businessUpper}:${credential.access_key}`;
|
|
28
|
+
acquirePrivate(globalBucketId, meta);
|
|
29
|
+
acquirePrivate(businessBucketId, meta);
|
|
9
30
|
const requestParams = `AccessKeyId=${credential.access_key}&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=${encodeURIComponent(new Date().toISOString().split('.')[0])}${method === 'GET' && params !== undefined
|
|
10
31
|
? `&${Object.entries(params)
|
|
11
32
|
.filter(([, v]) => v !== undefined)
|
|
@@ -34,13 +55,17 @@ export const privateRequest = async (credential, method, path, api_root, params)
|
|
|
34
55
|
throw e;
|
|
35
56
|
}
|
|
36
57
|
};
|
|
58
|
+
const spotPrivateQueryRequest = (credential, method, path, params) => privateRequestWithRateLimit(credential, 'query', 'spot', method, path, SPOT_API_ROOT, params);
|
|
59
|
+
const spotPrivateTradeRequest = (credential, method, path, params) => privateRequestWithRateLimit(credential, 'trade', 'spot', method, path, SPOT_API_ROOT, params);
|
|
60
|
+
const linearSwapPrivateQueryRequest = (credential, method, path, params) => privateRequestWithRateLimit(credential, 'query', 'linear-swap', method, path, LINEAR_SWAP_API_ROOT, params);
|
|
61
|
+
const linearSwapPrivateTradeRequest = (credential, method, path, params) => privateRequestWithRateLimit(credential, 'trade', 'linear-swap', method, path, LINEAR_SWAP_API_ROOT, params);
|
|
37
62
|
/**
|
|
38
63
|
* 获取账户信息
|
|
39
64
|
*
|
|
40
65
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec40743-7773-11ed-9966-0242ac110003
|
|
41
66
|
*/
|
|
42
67
|
export const getAccount = (credential) => {
|
|
43
|
-
return
|
|
68
|
+
return spotPrivateQueryRequest(credential, 'GET', '/v1/account/accounts');
|
|
44
69
|
};
|
|
45
70
|
/**
|
|
46
71
|
* 获取用户ID
|
|
@@ -48,7 +73,7 @@ export const getAccount = (credential) => {
|
|
|
48
73
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec491c9-7773-11ed-9966-0242ac110003
|
|
49
74
|
*/
|
|
50
75
|
export const getUid = (credential) => {
|
|
51
|
-
return
|
|
76
|
+
return spotPrivateQueryRequest(credential, 'GET', '/v2/user/uid');
|
|
52
77
|
};
|
|
53
78
|
/**
|
|
54
79
|
* 获取统一账户信息
|
|
@@ -56,7 +81,7 @@ export const getUid = (credential) => {
|
|
|
56
81
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=10000073-77b7-11ed-9966-0242ac110003
|
|
57
82
|
*/
|
|
58
83
|
export const getUnifiedAccountInfo = (credential) => {
|
|
59
|
-
return
|
|
84
|
+
return linearSwapPrivateQueryRequest(credential, 'GET', '/linear-swap-api/v3/unified_account_info');
|
|
60
85
|
};
|
|
61
86
|
/**
|
|
62
87
|
* 获取合约持仓信息
|
|
@@ -64,7 +89,7 @@ export const getUnifiedAccountInfo = (credential) => {
|
|
|
64
89
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb74963-77b5-11ed-9966-0242ac110003
|
|
65
90
|
*/
|
|
66
91
|
export const getSwapCrossPositionInfo = (credential, params) => {
|
|
67
|
-
return
|
|
92
|
+
return linearSwapPrivateQueryRequest(credential, 'POST', '/linear-swap-api/v1/swap_cross_position_info', params);
|
|
68
93
|
};
|
|
69
94
|
/**
|
|
70
95
|
* 获取合约挂单
|
|
@@ -72,7 +97,7 @@ export const getSwapCrossPositionInfo = (credential, params) => {
|
|
|
72
97
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb784d4-77b5-11ed-9966-0242ac110003
|
|
73
98
|
*/
|
|
74
99
|
export const getSwapOpenOrders = (credential, params) => {
|
|
75
|
-
return
|
|
100
|
+
return linearSwapPrivateQueryRequest(credential, 'POST', '/linear-swap-api/v1/swap_cross_openorders', params);
|
|
76
101
|
};
|
|
77
102
|
/**
|
|
78
103
|
* 获取现货账户余额
|
|
@@ -80,7 +105,7 @@ export const getSwapOpenOrders = (credential, params) => {
|
|
|
80
105
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec40922-7773-11ed-9966-0242ac110003
|
|
81
106
|
*/
|
|
82
107
|
export const getSpotAccountBalance = (credential, account_uid) => {
|
|
83
|
-
return
|
|
108
|
+
return spotPrivateQueryRequest(credential, 'GET', `/v1/account/accounts/${account_uid}/balance`);
|
|
84
109
|
};
|
|
85
110
|
/**
|
|
86
111
|
* 获取杠杆借贷信息
|
|
@@ -88,7 +113,7 @@ export const getSpotAccountBalance = (credential, account_uid) => {
|
|
|
88
113
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41863-7773-11ed-9966-0242ac110003
|
|
89
114
|
*/
|
|
90
115
|
export const getCrossMarginLoanInfo = (credential) => {
|
|
91
|
-
return
|
|
116
|
+
return spotPrivateQueryRequest(credential, 'GET', '/v1/cross-margin/loan-info');
|
|
92
117
|
};
|
|
93
118
|
/**
|
|
94
119
|
* 现货下单
|
|
@@ -96,7 +121,7 @@ export const getCrossMarginLoanInfo = (credential) => {
|
|
|
96
121
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=10000065-77b7-11ed-9966-0242ac110003
|
|
97
122
|
*/
|
|
98
123
|
export const postSpotOrder = (credential, params) => {
|
|
99
|
-
return
|
|
124
|
+
return spotPrivateTradeRequest(credential, 'POST', `/v1/order/auto/place`, params);
|
|
100
125
|
};
|
|
101
126
|
/**
|
|
102
127
|
* 合约下单
|
|
@@ -104,7 +129,7 @@ export const postSpotOrder = (credential, params) => {
|
|
|
104
129
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb77159-77b5-11ed-9966-0242ac110003
|
|
105
130
|
*/
|
|
106
131
|
export const postSwapOrder = (credential, params) => {
|
|
107
|
-
return
|
|
132
|
+
return linearSwapPrivateTradeRequest(credential, 'POST', '/linear-swap-api/v1/swap_cross_order', params);
|
|
108
133
|
};
|
|
109
134
|
/**
|
|
110
135
|
* 获取现货存款地址
|
|
@@ -112,7 +137,7 @@ export const postSwapOrder = (credential, params) => {
|
|
|
112
137
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec45fb7-7773-11ed-9966-0242ac110003
|
|
113
138
|
*/
|
|
114
139
|
export const getSpotAccountDepositAddresses = (credential, params) => {
|
|
115
|
-
return
|
|
140
|
+
return spotPrivateQueryRequest(credential, 'GET', `/v2/account/deposit/address`, params);
|
|
116
141
|
};
|
|
117
142
|
/**
|
|
118
143
|
* 获取账户流水
|
|
@@ -120,7 +145,7 @@ export const getSpotAccountDepositAddresses = (credential, params) => {
|
|
|
120
145
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec4610b-7773-11ed-9966-0242ac110003
|
|
121
146
|
*/
|
|
122
147
|
export const getAccountLedger = (credential, params) => {
|
|
123
|
-
return
|
|
148
|
+
return spotPrivateQueryRequest(credential, 'GET', `/v2/account/ledger`, params);
|
|
124
149
|
};
|
|
125
150
|
/**
|
|
126
151
|
* 超级杠杆转出
|
|
@@ -128,7 +153,7 @@ export const getAccountLedger = (credential, params) => {
|
|
|
128
153
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41ff0-7773-11ed-9966-0242ac110003
|
|
129
154
|
*/
|
|
130
155
|
export const postSuperMarginAccountTransferOut = (credential, params) => {
|
|
131
|
-
return
|
|
156
|
+
return spotPrivateTradeRequest(credential, 'POST', `/v1/cross-margin/transfer-out`, params);
|
|
132
157
|
};
|
|
133
158
|
/**
|
|
134
159
|
* 超级杠杆转入
|
|
@@ -136,7 +161,7 @@ export const postSuperMarginAccountTransferOut = (credential, params) => {
|
|
|
136
161
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41f0e-7773-11ed-9966-0242ac110003
|
|
137
162
|
*/
|
|
138
163
|
export const postSuperMarginAccountTransferIn = (credential, params) => {
|
|
139
|
-
return
|
|
164
|
+
return spotPrivateTradeRequest(credential, 'POST', `/v1/cross-margin/transfer-in`, params);
|
|
140
165
|
};
|
|
141
166
|
/**
|
|
142
167
|
* 现货账户转账
|
|
@@ -144,7 +169,7 @@ export const postSuperMarginAccountTransferIn = (credential, params) => {
|
|
|
144
169
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=10000095-77b7-11ed-9966-0242ac110003
|
|
145
170
|
*/
|
|
146
171
|
export const postSpotAccountTransfer = (credential, params) => {
|
|
147
|
-
return
|
|
172
|
+
return spotPrivateTradeRequest(credential, 'POST', `/v2/account/transfer`, params);
|
|
148
173
|
};
|
|
149
174
|
/**
|
|
150
175
|
* 借贷
|
|
@@ -152,7 +177,7 @@ export const postSpotAccountTransfer = (credential, params) => {
|
|
|
152
177
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41b5d-7773-11ed-9966-0242ac110003
|
|
153
178
|
*/
|
|
154
179
|
export const postBorrow = (credential, params) => {
|
|
155
|
-
return
|
|
180
|
+
return spotPrivateTradeRequest(credential, 'POST', `/v1/cross-margin/orders`, params);
|
|
156
181
|
};
|
|
157
182
|
/**
|
|
158
183
|
* 提现
|
|
@@ -160,7 +185,7 @@ export const postBorrow = (credential, params) => {
|
|
|
160
185
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec42cfd-7773-11ed-9966-0242ac110003
|
|
161
186
|
*/
|
|
162
187
|
export const postWithdraw = (credential, params) => {
|
|
163
|
-
return
|
|
188
|
+
return spotPrivateTradeRequest(credential, 'POST', `/v1/dw/withdraw/api/create`, params);
|
|
164
189
|
};
|
|
165
190
|
/**
|
|
166
191
|
* 获取充提历史
|
|
@@ -168,7 +193,7 @@ export const postWithdraw = (credential, params) => {
|
|
|
168
193
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec44f99-7773-11ed-9966-0242ac110003
|
|
169
194
|
*/
|
|
170
195
|
export const getDepositWithdrawHistory = (credential, params) => {
|
|
171
|
-
return
|
|
196
|
+
return spotPrivateQueryRequest(credential, 'GET', `/v1/query/deposit-withdraw`, params);
|
|
172
197
|
};
|
|
173
198
|
/**
|
|
174
199
|
* 资产划转(母子用户之间)
|
|
@@ -180,7 +205,7 @@ export const getDepositWithdrawHistory = (credential, params) => {
|
|
|
180
205
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec45d8e-7773-11ed-9966-0242ac110003
|
|
181
206
|
*/
|
|
182
207
|
export const postSubUserTransfer = (credential, params) => {
|
|
183
|
-
return
|
|
208
|
+
return spotPrivateTradeRequest(credential, 'POST', '/v1/subuser/transfer', params);
|
|
184
209
|
};
|
|
185
210
|
/**
|
|
186
211
|
* 获取子用户列表
|
|
@@ -190,7 +215,7 @@ export const postSubUserTransfer = (credential, params) => {
|
|
|
190
215
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec48f09-7773-11ed-9966-0242ac110003
|
|
191
216
|
*/
|
|
192
217
|
export const getSubUserList = (credential, params) => {
|
|
193
|
-
return
|
|
218
|
+
return spotPrivateQueryRequest(credential, 'GET', `/v2/sub-user/user-list`, params);
|
|
194
219
|
};
|
|
195
220
|
/**
|
|
196
221
|
* 账户类型查询
|
|
@@ -207,7 +232,7 @@ export const getSubUserList = (credential, params) => {
|
|
|
207
232
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb71825-77b5-11ed-9966-0242ac110003
|
|
208
233
|
*/
|
|
209
234
|
export const getSwapUnifiedAccountType = (credential) => {
|
|
210
|
-
return
|
|
235
|
+
return linearSwapPrivateQueryRequest(credential, 'GET', '/linear-swap-api/v3/swap_unified_account_type');
|
|
211
236
|
};
|
|
212
237
|
/**
|
|
213
238
|
* 账户类型更改接口
|
|
@@ -223,7 +248,7 @@ export const getSwapUnifiedAccountType = (credential) => {
|
|
|
223
248
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb7196b-77b5-11ed-9966-0242ac110003
|
|
224
249
|
*/
|
|
225
250
|
export const postSwapSwitchAccountType = (credential, params) => {
|
|
226
|
-
return
|
|
251
|
+
return linearSwapPrivateTradeRequest(credential, 'POST', '/linear-swap-api/v3/swap_switch_account_type', params);
|
|
227
252
|
};
|
|
228
253
|
/**
|
|
229
254
|
* APIv2币链参考信息
|
|
@@ -231,7 +256,7 @@ export const postSwapSwitchAccountType = (credential, params) => {
|
|
|
231
256
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec478f0-7773-11ed-9966-0242ac110003
|
|
232
257
|
*/
|
|
233
258
|
export const getV2ReferenceCurrencies = (credential, params) => {
|
|
234
|
-
return
|
|
259
|
+
return spotPrivateQueryRequest(credential, 'GET', '/v2/reference/currencies', params);
|
|
235
260
|
};
|
|
236
261
|
/**
|
|
237
262
|
* 获取账户历史
|
|
@@ -239,6 +264,6 @@ export const getV2ReferenceCurrencies = (credential, params) => {
|
|
|
239
264
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41049-7773-11ed-9966-0242ac110003
|
|
240
265
|
*/
|
|
241
266
|
export const getAccountHistory = (credential, params) => {
|
|
242
|
-
return
|
|
267
|
+
return spotPrivateQueryRequest(credential, 'GET', '/v1/account/history', params);
|
|
243
268
|
};
|
|
244
269
|
//# sourceMappingURL=private-api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private-api.js","sourceRoot":"","sources":["../../src/api/private-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAOrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAgB,EAAE;IACpD,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAW;QACnC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAW;KACpC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,UAAuB,EACvB,MAAc,EACd,IAAY,EACZ,QAAgB,EAChB,MAAY,EACZ,EAAE;IACF,MAAM,aAAa,GAAG,eACpB,UAAU,CAAC,UACb,4DAA4D,kBAAkB,CAC5E,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACvC,GACC,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,SAAS;QACtC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;aAClC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5B,IAAI,CAAC,GAAG,CAAC,EAAE;QAChB,CAAC,CAAC,EACN,EAAE,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE5D,MAAM,aAAa,GAAG,GAAG,MAAM,KAAK,QAAQ,KAAK,IAAI,KAAK,aAAa,EAAE,CAAC;IAE1E,MAAM,GAAG,GAAG,YAAY,CACtB,MAAM,UAAU,CACd,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EACvC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAChD,CACF,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,QAAQ,GAAG,IAAI,IAAI,aAAa,cAAc,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxG,2BAA2B;IAC3B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;QAChC,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,IAAI,SAAS;KACxB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,iBAAiB,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpF,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC3B;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;QAClG,MAAM,CAAC,CAAC;KACT;AACH,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,UAAuB,EAStB,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,sBAAsB,EAAE,eAAe,CAAC,CAAC;AACpF,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAuB,EAA2C,EAAE;IACzF,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,UAAuB,EAYtB,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,0CAA0C,EAAE,cAAc,CAAC,CAAC;AACvG,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,UAAuB,EACvB,MAIC,EA6BA,EAAE;IACH,OAAO,cAAc,CACnB,UAAU,EACV,MAAM,EACN,8CAA8C,EAC9C,cAAc,EACd,MAAM,CACP,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,UAAuB,EACvB,MAOC,EAgBA,EAAE;IACH,OAAO,cAAc,CACnB,UAAU,EACV,MAAM,EACN,2CAA2C,EAC3C,cAAc,EACd,MAAM,CACP,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,UAAuB,EACvB,WAAmB,EAUlB,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,wBAAwB,WAAW,UAAU,EAAE,eAAe,CAAC,CAAC;AAC3G,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,UAAuB,EAQtB,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,4BAA4B,EAAE,eAAe,CAAC,CAAC;AAC1F,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,UAAuB,EACvB,MAWC,EACwF,EAAE;IAC3F,OAAO,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AAC7F,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,UAAuB,EACvB,MAUC,EAC0F,EAAE;IAC7F,OAAO,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,sCAAsC,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;AAC5G,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,UAAuB,EACvB,MAA4B,EAS3B,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,6BAA6B,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AACnG,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,UAAuB,EACvB,MAA+C,EAO9C,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AAC1F,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC/C,UAAuB,EACvB,MAGC,EAC0C,EAAE;IAC7C,OAAO,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,+BAA+B,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AACtG,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,UAAuB,EACvB,MAGC,EAC0C,EAAE;IAC7C,OAAO,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,8BAA8B,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AACrG,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,UAAuB,EACvB,MAMC,EAC2E,EAAE;IAC9E,OAAO,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AAC7F,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,UAAuB,EACvB,MAA4C,EAI3C,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AAChG,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,UAAuB,EACvB,MAMC,EAIA,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AACnG,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,UAAuB,EACvB,MAMC,EAmBA,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AAClG,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAAuB,EACvB,MAMC,EAIA,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AAC7F,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,UAAuB,EACvB,MAA4B,EAY3B,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AAC9F,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,UAAuB,EAQtB,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,+CAA+C,EAAE,cAAc,CAAC,CAAC;AAC5G,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,UAAuB,EACvB,MAAgC,EAQ/B,EAAE;IACH,OAAO,cAAc,CACnB,UAAU,EACV,MAAM,EACN,8CAA8C,EAC9C,cAAc,EACd,MAAM,CACP,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,UAAuB,EACvB,MAGC,EAkCA,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AAChG,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,UAAuB,EACvB,MASC,EAmBA,EAAE;IACH,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AAC3F,CAAC,CAAC","sourcesContent":["import { encodeBase64, formatTime, HmacSHA256 } from '@yuants/utils';\n\nexport interface ICredential {\n access_key: string;\n secret_key: string;\n}\n\nexport const getDefaultCredential = (): ICredential => {\n return {\n access_key: process.env.ACCESS_KEY!,\n secret_key: process.env.SECRET_KEY!,\n };\n};\n\nexport const privateRequest = async (\n credential: ICredential,\n method: string,\n path: string,\n api_root: string,\n params?: any,\n) => {\n const requestParams = `AccessKeyId=${\n credential.access_key\n }&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=${encodeURIComponent(\n new Date().toISOString().split('.')[0],\n )}${\n method === 'GET' && params !== undefined\n ? `&${Object.entries(params)\n .filter(([, v]) => v !== undefined)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${v}`)\n .join('&')}`\n : ''\n }`;\n\n const body = method === 'GET' ? '' : JSON.stringify(params);\n\n const requestString = `${method}\\n${api_root}\\n${path}\\n${requestParams}`;\n\n const str = encodeBase64(\n await HmacSHA256(\n new TextEncoder().encode(requestString),\n new TextEncoder().encode(credential.secret_key),\n ),\n );\n\n const url = new URL(`https://${api_root}${path}?${requestParams}&Signature=${encodeURIComponent(str)}`);\n // url.searchParams.sort();\n console.info(formatTime(Date.now()), method, url.href, body);\n const res = await fetch(url.href, {\n method,\n headers: { 'Content-Type': 'application/json' },\n body: body || undefined,\n });\n\n const retStr = await res.text();\n console.info(formatTime(Date.now()), 'PrivateResponse', url.toString(), res.status);\n try {\n return JSON.parse(retStr);\n } catch (e) {\n console.error(formatTime(Date.now()), 'huobiRequestFailed', path, JSON.stringify(params), retStr);\n throw e;\n }\n};\n\n/**\n * 获取账户信息\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec40743-7773-11ed-9966-0242ac110003\n */\nexport const getAccount = (\n credential: ICredential,\n): Promise<{\n status: string;\n data: {\n id: number;\n type: string;\n state: string;\n subtype: string;\n }[];\n}> => {\n return privateRequest(credential, 'GET', '/v1/account/accounts', 'api.huobi.pro');\n};\n\n/**\n * 获取用户ID\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec491c9-7773-11ed-9966-0242ac110003\n */\nexport const getUid = (credential: ICredential): Promise<{ data: number; code: number }> => {\n return privateRequest(credential, 'GET', '/v2/user/uid', 'api.huobi.pro');\n};\n\n/**\n * 获取统一账户信息\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=10000073-77b7-11ed-9966-0242ac110003\n */\nexport const getUnifiedAccountInfo = (\n credential: ICredential,\n): Promise<{\n status: string;\n code: number;\n msg: string;\n data: {\n margin_asset: string;\n margin_balance: number;\n cross_margin_static: number;\n cross_profit_unreal: number;\n withdraw_available: number;\n }[];\n}> => {\n return privateRequest(credential, 'GET', '/linear-swap-api/v3/unified_account_info', 'api.hbdm.com');\n};\n\n/**\n * 获取合约持仓信息\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb74963-77b5-11ed-9966-0242ac110003\n */\nexport const getSwapCrossPositionInfo = (\n credential: ICredential,\n params?: {\n contract_code?: string;\n pair?: string;\n contract_type: string;\n },\n): Promise<{\n status: string;\n ts: number;\n data: {\n symbol: string;\n contract_code: string;\n volume: number;\n available: number;\n frozen: number;\n cost_open: number;\n cost_hold: number;\n profit_unreal: number;\n profit_rate: number;\n lever_rate: number;\n position_margin: number;\n direction: string;\n profit: number;\n last_price: number;\n margin_asset: string;\n margin_mode: string;\n margin_account: string;\n contract_type: string;\n pair: string;\n business_type: string;\n position_mode: string;\n adl_risk_percent: string;\n liquidation_price?: number;\n }[];\n}> => {\n return privateRequest(\n credential,\n 'POST',\n '/linear-swap-api/v1/swap_cross_position_info',\n 'api.hbdm.com',\n params,\n );\n};\n\n/**\n * 获取合约挂单\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb784d4-77b5-11ed-9966-0242ac110003\n */\nexport const getSwapOpenOrders = (\n credential: ICredential,\n params?: {\n contract_code?: string;\n pair?: string;\n page_index?: number;\n page_size?: number;\n sort_by?: string;\n trade_type?: string;\n },\n): Promise<{\n status: string;\n data: {\n orders: {\n order_id_str: string;\n contract_code: string;\n order_price_type: string;\n direction: string;\n offset: string;\n volume: number;\n created_at: number;\n price: number;\n trade_volume: number;\n }[];\n };\n}> => {\n return privateRequest(\n credential,\n 'POST',\n '/linear-swap-api/v1/swap_cross_openorders',\n 'api.hbdm.com',\n params,\n );\n};\n\n/**\n * 获取现货账户余额\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec40922-7773-11ed-9966-0242ac110003\n */\nexport const getSpotAccountBalance = (\n credential: ICredential,\n account_uid: number,\n): Promise<{\n status: string;\n data: {\n list: {\n currency: string;\n balance: string;\n type: string;\n }[];\n };\n}> => {\n return privateRequest(credential, 'GET', `/v1/account/accounts/${account_uid}/balance`, 'api.huobi.pro');\n};\n\n/**\n * 获取杠杆借贷信息\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41863-7773-11ed-9966-0242ac110003\n */\nexport const getCrossMarginLoanInfo = (\n credential: ICredential,\n): Promise<{\n status: string;\n code: number;\n data: {\n currency: string;\n 'loanable-amt': string;\n }[];\n}> => {\n return privateRequest(credential, 'GET', '/v1/cross-margin/loan-info', 'api.huobi.pro');\n};\n\n/**\n * 现货下单\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=10000065-77b7-11ed-9966-0242ac110003\n */\nexport const postSpotOrder = (\n credential: ICredential,\n params: {\n symbol: string;\n 'account-id': string;\n amount: string;\n market_amount?: string;\n 'borrow-amount'?: string;\n type: string;\n 'trade-purpose': string;\n price?: string;\n source: string;\n 'client-order-id'?: string;\n },\n): Promise<{ success: boolean; code: number; message: string; data: { orderId: number } }> => {\n return privateRequest(credential, 'POST', `/v1/order/auto/place`, 'api.huobi.pro', params);\n};\n\n/**\n * 合约下单\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb77159-77b5-11ed-9966-0242ac110003\n */\nexport const postSwapOrder = (\n credential: ICredential,\n params: {\n contract_code: string;\n contract_type: string;\n price?: number;\n volume: number;\n offset: string;\n direction: string;\n lever_rate: number;\n order_price_type: string;\n channel_code?: string;\n },\n): Promise<{ status: string; ts: number; data: { order_id: number; order_id_str: string } }> => {\n return privateRequest(credential, 'POST', '/linear-swap-api/v1/swap_cross_order', 'api.hbdm.com', params);\n};\n\n/**\n * 获取现货存款地址\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec45fb7-7773-11ed-9966-0242ac110003\n */\nexport const getSpotAccountDepositAddresses = (\n credential: ICredential,\n params: { currency: string },\n): Promise<{\n code: number;\n message: string;\n data: {\n currency: string;\n chain: string;\n address: string;\n }[];\n}> => {\n return privateRequest(credential, 'GET', `/v2/account/deposit/address`, 'api.huobi.pro', params);\n};\n\n/**\n * 获取账户流水\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec4610b-7773-11ed-9966-0242ac110003\n */\nexport const getAccountLedger = (\n credential: ICredential,\n params: { accountId: string; currency: string },\n): Promise<{\n status: string;\n data: {\n transactTime: number;\n transactAmt: number;\n }[];\n}> => {\n return privateRequest(credential, 'GET', `/v2/account/ledger`, 'api.huobi.pro', params);\n};\n\n/**\n * 超级杠杆转出\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41ff0-7773-11ed-9966-0242ac110003\n */\nexport const postSuperMarginAccountTransferOut = (\n credential: ICredential,\n params: {\n currency: string;\n amount: string;\n },\n): Promise<{ status: string; data: number }> => {\n return privateRequest(credential, 'POST', `/v1/cross-margin/transfer-out`, 'api.huobi.pro', params);\n};\n\n/**\n * 超级杠杆转入\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41f0e-7773-11ed-9966-0242ac110003\n */\nexport const postSuperMarginAccountTransferIn = (\n credential: ICredential,\n params: {\n currency: string;\n amount: string;\n },\n): Promise<{ status: string; data: number }> => {\n return privateRequest(credential, 'POST', `/v1/cross-margin/transfer-in`, 'api.huobi.pro', params);\n};\n\n/**\n * 现货账户转账\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=10000095-77b7-11ed-9966-0242ac110003\n */\nexport const postSpotAccountTransfer = (\n credential: ICredential,\n params: {\n from: string;\n to: string;\n currency: string;\n amount: number;\n 'margin-account': string;\n },\n): Promise<{ success: boolean; data: number; code: number; message: string }> => {\n return privateRequest(credential, 'POST', `/v2/account/transfer`, 'api.huobi.pro', params);\n};\n\n/**\n * 借贷\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41b5d-7773-11ed-9966-0242ac110003\n */\nexport const postBorrow = (\n credential: ICredential,\n params: { currency: string; amount: string },\n): Promise<{\n status: string;\n data: number;\n}> => {\n return privateRequest(credential, 'POST', `/v1/cross-margin/orders`, 'api.huobi.pro', params);\n};\n\n/**\n * 提现\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec42cfd-7773-11ed-9966-0242ac110003\n */\nexport const postWithdraw = (\n credential: ICredential,\n params: {\n address: string;\n amount: string;\n currency: string;\n fee: string;\n chain: string;\n },\n): Promise<{\n status: string;\n data: number;\n}> => {\n return privateRequest(credential, 'POST', `/v1/dw/withdraw/api/create`, 'api.huobi.pro', params);\n};\n\n/**\n * 获取充提历史\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec44f99-7773-11ed-9966-0242ac110003\n */\nexport const getDepositWithdrawHistory = (\n credential: ICredential,\n params: {\n currency: string;\n type: string;\n from?: string;\n size?: string;\n direct?: string;\n },\n): Promise<{\n status: string;\n 'error-code': string;\n 'error-msg': string;\n data: {\n id: number;\n type: string;\n currency: string;\n 'tx-hash': string;\n chain: string;\n amount: string;\n address: string;\n 'address-tag': string;\n fee: string;\n state: string;\n 'create-at': number;\n 'update-at': number;\n }[];\n}> => {\n return privateRequest(credential, 'GET', `/v1/query/deposit-withdraw`, 'api.huobi.pro', params);\n};\n\n/**\n * 资产划转(母子用户之间)\n *\n * 接口权限: 交易\n *\n * 限频: 2次/2s\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec45d8e-7773-11ed-9966-0242ac110003\n */\nexport const postSubUserTransfer = (\n credential: ICredential,\n params: {\n 'sub-uid': number;\n currency: string;\n amount: number;\n 'client-order-id'?: string;\n type: string;\n },\n): Promise<{\n data: number;\n status: string;\n}> => {\n return privateRequest(credential, 'POST', '/v1/subuser/transfer', 'api.huobi.pro', params);\n};\n\n/**\n * 获取子用户列表\n *\n * 接口权限: 读取\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec48f09-7773-11ed-9966-0242ac110003\n */\nexport const getSubUserList = (\n credential: ICredential,\n params?: { fromId?: number },\n): Promise<{\n code: number;\n message?: string;\n data: {\n uid: number;\n userState: string;\n subUserName: string;\n note: string;\n }[];\n nextId?: number;\n ok: boolean;\n}> => {\n return privateRequest(credential, 'GET', `/v2/sub-user/user-list`, 'api.huobi.pro', params);\n};\n\n/**\n * 账户类型查询\n *\n * 是否验签: 是\n *\n * 接口权限: 读取\n *\n * 限频: 每个UID 3秒最多 144 次请求(交易接口3秒最多 72 次请求,查询接口3秒最多 72 次请求) (该UID的所有币种和不同到期日的合约的所有私有接口共享该限制) 。\n *\n * 接口描述: 此接口用于客户查询的账号类型,当前U本位合约有统一账户和非统一账户(全仓逐仓账户)类型。统一账户类型资产放在USDT一个账户上,全仓逐仓账户类型资产放在不同的币对。\n * 统一账户类型为最新升级的,当前不支持API下单。若需要用用API下单请切换账户类型为非统一账户。\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb71825-77b5-11ed-9966-0242ac110003\n */\nexport const getSwapUnifiedAccountType = (\n credential: ICredential,\n): Promise<{\n code: number;\n msg: string;\n ts: number;\n data: {\n account_type: number;\n };\n}> => {\n return privateRequest(credential, 'GET', '/linear-swap-api/v3/swap_unified_account_type', 'api.hbdm.com');\n};\n\n/**\n * 账户类型更改接口\n *\n * 是否验签: 是\n *\n * 接口权限: 交易\n *\n * 限频: 每个UID 3秒最多 144 次请求(交易接口3秒最多 72 次请求,查询接口3秒最多 72 次请求) (该UID的所有币种和不同到期日的合约的所有私有接口共享该限制) 。\n *\n * 接口描述: 调用该接口前需要保证U本位合约无持仓和挂单,当由非统一账户(全仓逐仓账户)变为统一账户还需将资产从逐仓账户划转到全仓账户。\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb7196b-77b5-11ed-9966-0242ac110003\n */\nexport const postSwapSwitchAccountType = (\n credential: ICredential,\n params: { account_type: number },\n): Promise<{\n code: number;\n msg: string;\n ts: number;\n data: {\n account_type: number;\n };\n}> => {\n return privateRequest(\n credential,\n 'POST',\n '/linear-swap-api/v3/swap_switch_account_type',\n 'api.hbdm.com',\n params,\n );\n};\n\n/**\n * APIv2币链参考信息\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec478f0-7773-11ed-9966-0242ac110003\n */\nexport const getV2ReferenceCurrencies = (\n credential: ICredential,\n params: {\n currency?: string;\n authorizedUser?: string;\n },\n): Promise<{\n code: number;\n data: {\n currency: string;\n assetType: number;\n chains: {\n chain: string;\n displayName: string;\n fullName: string;\n baseChain?: string;\n baseChainProtocol?: string;\n isDynamic?: boolean;\n numOfConfirmations: number;\n numOfFastConfirmations: number;\n depositStatus: string;\n minDepositAmt: string;\n withdrawStatus: string;\n minWithdrawAmt: string;\n withdrawPrecision: number;\n maxWithdrawAmt: string;\n withdrawQuotaPerDay: string;\n withdrawQuotaPerYear: null;\n withdrawQuotaTotal: null;\n withdrawFeeType: string;\n transactFeeWithdraw?: string;\n addrWithTag: boolean;\n addrDepositTag: boolean;\n minTransactFeeWithdraw?: string;\n transactFeeRateWithdraw?: string;\n maxTransactFeeWithdraw?: string;\n }[];\n instStatus: string;\n }[];\n}> => {\n return privateRequest(credential, 'GET', '/v2/reference/currencies', 'api.huobi.pro', params);\n};\n\n/**\n * 获取账户历史\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41049-7773-11ed-9966-0242ac110003\n */\nexport const getAccountHistory = (\n credential: ICredential,\n params: {\n 'account-id': string;\n currency?: string;\n 'transact-types'?: number;\n 'start-time'?: number;\n 'end-time'?: number;\n sort?: 'asc' | 'desc';\n size?: number;\n 'from-id'?: number;\n },\n): Promise<{\n // code: number;\n 'transact-amt': string;\n 'avail-balance': string;\n 'acct-balance': string;\n 'transact-time': string;\n 'record-id': string;\n status: string;\n data: {\n 'account-id': string;\n currency: string;\n 'record-id': string;\n 'transact-amt': string;\n 'transact-type': string;\n 'avail-balance': string;\n 'acct-balance': string;\n 'transact-time': string;\n }[];\n}> => {\n return privateRequest(credential, 'GET', '/v1/account/history', 'api.huobi.pro', params);\n};\n"]}
|
|
1
|
+
{"version":3,"file":"private-api.js","sourceRoot":"","sources":["../../src/api/private-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { encodeBase64, formatTime, HmacSHA256, scopeError, tokenBucket } from '@yuants/utils';\n\nconst SPOT_API_ROOT = 'api.huobi.pro';\nconst LINEAR_SWAP_API_ROOT = 'api.hbdm.com';\n\nexport interface ICredential {\n access_key: string;\n secret_key: string;\n}\n\nexport const getDefaultCredential = (): ICredential => {\n return {\n access_key: process.env.ACCESS_KEY!,\n secret_key: process.env.SECRET_KEY!,\n };\n};\n\n// https://www.htx.com/zh-cn/opend/newApiPages/?id=474\ntype HuobiBusiness = 'spot' | 'linear-swap';\ntype HuobiPrivateInterfaceType = 'trade' | 'query';\n\nconst createdBuckets = new Set<string>();\nconst getOrCreatePrivateBucket = (bucketId: string) => {\n if (!createdBuckets.has(bucketId)) {\n createdBuckets.add(bucketId);\n tokenBucket(bucketId, { capacity: 36, refillAmount: 36, refillInterval: 3000 });\n }\n return tokenBucket(bucketId);\n};\n\nconst acquirePrivate = (bucketId: string, meta: Record<string, unknown>) => {\n const bucket = getOrCreatePrivateBucket(bucketId);\n scopeError('HUOBI_API_RATE_LIMIT', { ...meta, bucketId }, () => bucket.acquireSync(1));\n};\n\nconst privateRequestWithRateLimit = async (\n credential: ICredential,\n interfaceType: HuobiPrivateInterfaceType,\n business: HuobiBusiness,\n method: string,\n path: string,\n api_root: string,\n params?: any,\n) => {\n const meta = { method, api_root, path, business, interfaceType, access_key: credential.access_key };\n\n const interfaceTypeUpper = interfaceType.toUpperCase();\n const businessUpper = business.toUpperCase();\n const globalBucketId = `HUOBI_PRIVATE_${interfaceTypeUpper}_UID_3S_ALL:${credential.access_key}`;\n const businessBucketId = `HUOBI_PRIVATE_${interfaceTypeUpper}_UID_3S_${businessUpper}:${credential.access_key}`;\n acquirePrivate(globalBucketId, meta);\n acquirePrivate(businessBucketId, meta);\n\n const requestParams = `AccessKeyId=${\n credential.access_key\n }&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=${encodeURIComponent(\n new Date().toISOString().split('.')[0],\n )}${\n method === 'GET' && params !== undefined\n ? `&${Object.entries(params)\n .filter(([, v]) => v !== undefined)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${v}`)\n .join('&')}`\n : ''\n }`;\n\n const body = method === 'GET' ? '' : JSON.stringify(params);\n\n const requestString = `${method}\\n${api_root}\\n${path}\\n${requestParams}`;\n\n const str = encodeBase64(\n await HmacSHA256(\n new TextEncoder().encode(requestString),\n new TextEncoder().encode(credential.secret_key),\n ),\n );\n\n const url = new URL(`https://${api_root}${path}?${requestParams}&Signature=${encodeURIComponent(str)}`);\n // url.searchParams.sort();\n console.info(formatTime(Date.now()), method, url.href, body);\n const res = await fetch(url.href, {\n method,\n headers: { 'Content-Type': 'application/json' },\n body: body || undefined,\n });\n\n const retStr = await res.text();\n console.info(formatTime(Date.now()), 'PrivateResponse', url.toString(), res.status);\n try {\n return JSON.parse(retStr);\n } catch (e) {\n console.error(formatTime(Date.now()), 'huobiRequestFailed', path, JSON.stringify(params), retStr);\n throw e;\n }\n};\n\nconst spotPrivateQueryRequest = (credential: ICredential, method: string, path: string, params?: any) =>\n privateRequestWithRateLimit(credential, 'query', 'spot', method, path, SPOT_API_ROOT, params);\n\nconst spotPrivateTradeRequest = (credential: ICredential, method: string, path: string, params?: any) =>\n privateRequestWithRateLimit(credential, 'trade', 'spot', method, path, SPOT_API_ROOT, params);\n\nconst linearSwapPrivateQueryRequest = (credential: ICredential, method: string, path: string, params?: any) =>\n privateRequestWithRateLimit(credential, 'query', 'linear-swap', method, path, LINEAR_SWAP_API_ROOT, params);\n\nconst linearSwapPrivateTradeRequest = (credential: ICredential, method: string, path: string, params?: any) =>\n privateRequestWithRateLimit(credential, 'trade', 'linear-swap', method, path, LINEAR_SWAP_API_ROOT, params);\n\n/**\n * 获取账户信息\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec40743-7773-11ed-9966-0242ac110003\n */\nexport const getAccount = (\n credential: ICredential,\n): Promise<{\n status: string;\n data: {\n id: number;\n type: string;\n state: string;\n subtype: string;\n }[];\n}> => {\n return spotPrivateQueryRequest(credential, 'GET', '/v1/account/accounts');\n};\n\n/**\n * 获取用户ID\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec491c9-7773-11ed-9966-0242ac110003\n */\nexport const getUid = (credential: ICredential): Promise<{ data: number; code: number }> => {\n return spotPrivateQueryRequest(credential, 'GET', '/v2/user/uid');\n};\n\n/**\n * 获取统一账户信息\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=10000073-77b7-11ed-9966-0242ac110003\n */\nexport const getUnifiedAccountInfo = (\n credential: ICredential,\n): Promise<{\n status: string;\n code: number;\n msg: string;\n data: {\n margin_asset: string;\n margin_balance: number;\n margin_static: number;\n cross_margin_static: number;\n cross_profit_unreal: number;\n withdraw_available: number;\n }[];\n}> => {\n return linearSwapPrivateQueryRequest(credential, 'GET', '/linear-swap-api/v3/unified_account_info');\n};\n\n/**\n * 获取合约持仓信息\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb74963-77b5-11ed-9966-0242ac110003\n */\nexport const getSwapCrossPositionInfo = (\n credential: ICredential,\n params?: {\n contract_code?: string;\n pair?: string;\n contract_type: string;\n },\n): Promise<{\n status: string;\n ts: number;\n data: {\n symbol: string;\n contract_code: string;\n volume: number;\n available: number;\n frozen: number;\n cost_open: number;\n cost_hold: number;\n profit_unreal: number;\n profit_rate: number;\n lever_rate: number;\n position_margin: number;\n direction: string;\n profit: number;\n last_price: number;\n margin_asset: string;\n margin_mode: string;\n margin_account: string;\n contract_type: string;\n pair: string;\n business_type: string;\n position_mode: string;\n adl_risk_percent: string;\n liquidation_price?: number;\n }[];\n}> => {\n return linearSwapPrivateQueryRequest(\n credential,\n 'POST',\n '/linear-swap-api/v1/swap_cross_position_info',\n params,\n );\n};\n\n/**\n * 获取合约挂单\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb784d4-77b5-11ed-9966-0242ac110003\n */\nexport const getSwapOpenOrders = (\n credential: ICredential,\n params?: {\n contract_code?: string;\n pair?: string;\n page_index?: number;\n page_size?: number;\n sort_by?: string;\n trade_type?: string;\n },\n): Promise<{\n status: string;\n data: {\n orders: {\n order_id_str: string;\n contract_code: string;\n order_price_type: string;\n direction: string;\n offset: string;\n volume: number;\n created_at: number;\n price: number;\n trade_volume: number;\n }[];\n };\n}> => {\n return linearSwapPrivateQueryRequest(\n credential,\n 'POST',\n '/linear-swap-api/v1/swap_cross_openorders',\n params,\n );\n};\n\n/**\n * 获取现货账户余额\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec40922-7773-11ed-9966-0242ac110003\n */\nexport const getSpotAccountBalance = (\n credential: ICredential,\n account_uid: number,\n): Promise<{\n status: string;\n data: {\n list: {\n currency: string;\n balance: string;\n type: string;\n }[];\n };\n}> => {\n return spotPrivateQueryRequest(credential, 'GET', `/v1/account/accounts/${account_uid}/balance`);\n};\n\n/**\n * 获取杠杆借贷信息\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41863-7773-11ed-9966-0242ac110003\n */\nexport const getCrossMarginLoanInfo = (\n credential: ICredential,\n): Promise<{\n status: string;\n code: number;\n data: {\n currency: string;\n 'loanable-amt': string;\n }[];\n}> => {\n return spotPrivateQueryRequest(credential, 'GET', '/v1/cross-margin/loan-info');\n};\n\n/**\n * 现货下单\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=10000065-77b7-11ed-9966-0242ac110003\n */\nexport const postSpotOrder = (\n credential: ICredential,\n params: {\n symbol: string;\n 'account-id': string;\n amount: string;\n market_amount?: string;\n 'borrow-amount'?: string;\n type: string;\n 'trade-purpose': string;\n price?: string;\n source: string;\n 'client-order-id'?: string;\n },\n): Promise<{ success: boolean; code: number; message: string; data: { orderId: number } }> => {\n return spotPrivateTradeRequest(credential, 'POST', `/v1/order/auto/place`, params);\n};\n\n/**\n * 合约下单\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb77159-77b5-11ed-9966-0242ac110003\n */\nexport const postSwapOrder = (\n credential: ICredential,\n params: {\n contract_code: string;\n contract_type: string;\n price?: number;\n volume: number;\n offset: string;\n direction: string;\n lever_rate: number;\n order_price_type: string;\n channel_code?: string;\n },\n): Promise<{ status: string; ts: number; data: { order_id: number; order_id_str: string } }> => {\n return linearSwapPrivateTradeRequest(credential, 'POST', '/linear-swap-api/v1/swap_cross_order', params);\n};\n\n/**\n * 获取现货存款地址\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec45fb7-7773-11ed-9966-0242ac110003\n */\nexport const getSpotAccountDepositAddresses = (\n credential: ICredential,\n params: { currency: string },\n): Promise<{\n code: number;\n message: string;\n data: {\n currency: string;\n chain: string;\n address: string;\n }[];\n}> => {\n return spotPrivateQueryRequest(credential, 'GET', `/v2/account/deposit/address`, params);\n};\n\n/**\n * 获取账户流水\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec4610b-7773-11ed-9966-0242ac110003\n */\nexport const getAccountLedger = (\n credential: ICredential,\n params: { accountId: string; currency: string },\n): Promise<{\n status: string;\n data: {\n transactTime: number;\n transactAmt: number;\n }[];\n}> => {\n return spotPrivateQueryRequest(credential, 'GET', `/v2/account/ledger`, params);\n};\n\n/**\n * 超级杠杆转出\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41ff0-7773-11ed-9966-0242ac110003\n */\nexport const postSuperMarginAccountTransferOut = (\n credential: ICredential,\n params: {\n currency: string;\n amount: string;\n },\n): Promise<{ status: string; data: number }> => {\n return spotPrivateTradeRequest(credential, 'POST', `/v1/cross-margin/transfer-out`, params);\n};\n\n/**\n * 超级杠杆转入\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41f0e-7773-11ed-9966-0242ac110003\n */\nexport const postSuperMarginAccountTransferIn = (\n credential: ICredential,\n params: {\n currency: string;\n amount: string;\n },\n): Promise<{ status: string; data: number }> => {\n return spotPrivateTradeRequest(credential, 'POST', `/v1/cross-margin/transfer-in`, params);\n};\n\n/**\n * 现货账户转账\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=10000095-77b7-11ed-9966-0242ac110003\n */\nexport const postSpotAccountTransfer = (\n credential: ICredential,\n params: {\n from: string;\n to: string;\n currency: string;\n amount: number;\n 'margin-account': string;\n },\n): Promise<{ success: boolean; data: number; code: number; message: string }> => {\n return spotPrivateTradeRequest(credential, 'POST', `/v2/account/transfer`, params);\n};\n\n/**\n * 借贷\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41b5d-7773-11ed-9966-0242ac110003\n */\nexport const postBorrow = (\n credential: ICredential,\n params: { currency: string; amount: string },\n): Promise<{\n status: string;\n data: number;\n}> => {\n return spotPrivateTradeRequest(credential, 'POST', `/v1/cross-margin/orders`, params);\n};\n\n/**\n * 提现\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec42cfd-7773-11ed-9966-0242ac110003\n */\nexport const postWithdraw = (\n credential: ICredential,\n params: {\n address: string;\n amount: string;\n currency: string;\n fee: string;\n chain: string;\n },\n): Promise<{\n status: string;\n data: number;\n}> => {\n return spotPrivateTradeRequest(credential, 'POST', `/v1/dw/withdraw/api/create`, params);\n};\n\n/**\n * 获取充提历史\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec44f99-7773-11ed-9966-0242ac110003\n */\nexport const getDepositWithdrawHistory = (\n credential: ICredential,\n params: {\n currency: string;\n type: string;\n from?: string;\n size?: string;\n direct?: string;\n },\n): Promise<{\n status: string;\n 'error-code': string;\n 'error-msg': string;\n data: {\n id: number;\n type: string;\n currency: string;\n 'tx-hash': string;\n chain: string;\n amount: string;\n address: string;\n 'address-tag': string;\n fee: string;\n state: string;\n 'create-at': number;\n 'update-at': number;\n }[];\n}> => {\n return spotPrivateQueryRequest(credential, 'GET', `/v1/query/deposit-withdraw`, params);\n};\n\n/**\n * 资产划转(母子用户之间)\n *\n * 接口权限: 交易\n *\n * 限频: 2次/2s\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec45d8e-7773-11ed-9966-0242ac110003\n */\nexport const postSubUserTransfer = (\n credential: ICredential,\n params: {\n 'sub-uid': number;\n currency: string;\n amount: number;\n 'client-order-id'?: string;\n type: string;\n },\n): Promise<{\n data: number;\n status: string;\n}> => {\n return spotPrivateTradeRequest(credential, 'POST', '/v1/subuser/transfer', params);\n};\n\n/**\n * 获取子用户列表\n *\n * 接口权限: 读取\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec48f09-7773-11ed-9966-0242ac110003\n */\nexport const getSubUserList = (\n credential: ICredential,\n params?: { fromId?: number },\n): Promise<{\n code: number;\n message?: string;\n data: {\n uid: number;\n userState: string;\n subUserName: string;\n note: string;\n }[];\n nextId?: number;\n ok: boolean;\n}> => {\n return spotPrivateQueryRequest(credential, 'GET', `/v2/sub-user/user-list`, params);\n};\n\n/**\n * 账户类型查询\n *\n * 是否验签: 是\n *\n * 接口权限: 读取\n *\n * 限频: 每个UID 3秒最多 144 次请求(交易接口3秒最多 72 次请求,查询接口3秒最多 72 次请求) (该UID的所有币种和不同到期日的合约的所有私有接口共享该限制) 。\n *\n * 接口描述: 此接口用于客户查询的账号类型,当前U本位合约有统一账户和非统一账户(全仓逐仓账户)类型。统一账户类型资产放在USDT一个账户上,全仓逐仓账户类型资产放在不同的币对。\n * 统一账户类型为最新升级的,当前不支持API下单。若需要用用API下单请切换账户类型为非统一账户。\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb71825-77b5-11ed-9966-0242ac110003\n */\nexport const getSwapUnifiedAccountType = (\n credential: ICredential,\n): Promise<{\n code: number;\n msg: string;\n ts: number;\n data: {\n account_type: number;\n };\n}> => {\n return linearSwapPrivateQueryRequest(credential, 'GET', '/linear-swap-api/v3/swap_unified_account_type');\n};\n\n/**\n * 账户类型更改接口\n *\n * 是否验签: 是\n *\n * 接口权限: 交易\n *\n * 限频: 每个UID 3秒最多 144 次请求(交易接口3秒最多 72 次请求,查询接口3秒最多 72 次请求) (该UID的所有币种和不同到期日的合约的所有私有接口共享该限制) 。\n *\n * 接口描述: 调用该接口前需要保证U本位合约无持仓和挂单,当由非统一账户(全仓逐仓账户)变为统一账户还需将资产从逐仓账户划转到全仓账户。\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb7196b-77b5-11ed-9966-0242ac110003\n */\nexport const postSwapSwitchAccountType = (\n credential: ICredential,\n params: { account_type: number },\n): Promise<{\n code: number;\n msg: string;\n ts: number;\n data: {\n account_type: number;\n };\n}> => {\n return linearSwapPrivateTradeRequest(\n credential,\n 'POST',\n '/linear-swap-api/v3/swap_switch_account_type',\n params,\n );\n};\n\n/**\n * APIv2币链参考信息\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec478f0-7773-11ed-9966-0242ac110003\n */\nexport const getV2ReferenceCurrencies = (\n credential: ICredential,\n params: {\n currency?: string;\n authorizedUser?: string;\n },\n): Promise<{\n code: number;\n data: {\n currency: string;\n assetType: number;\n chains: {\n chain: string;\n displayName: string;\n fullName: string;\n baseChain?: string;\n baseChainProtocol?: string;\n isDynamic?: boolean;\n numOfConfirmations: number;\n numOfFastConfirmations: number;\n depositStatus: string;\n minDepositAmt: string;\n withdrawStatus: string;\n minWithdrawAmt: string;\n withdrawPrecision: number;\n maxWithdrawAmt: string;\n withdrawQuotaPerDay: string;\n withdrawQuotaPerYear: null;\n withdrawQuotaTotal: null;\n withdrawFeeType: string;\n transactFeeWithdraw?: string;\n addrWithTag: boolean;\n addrDepositTag: boolean;\n minTransactFeeWithdraw?: string;\n transactFeeRateWithdraw?: string;\n maxTransactFeeWithdraw?: string;\n }[];\n instStatus: string;\n }[];\n}> => {\n return spotPrivateQueryRequest(credential, 'GET', '/v2/reference/currencies', params);\n};\n\n/**\n * 获取账户历史\n *\n * https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec41049-7773-11ed-9966-0242ac110003\n */\nexport const getAccountHistory = (\n credential: ICredential,\n params: {\n 'account-id': string;\n currency?: string;\n 'transact-types'?: number;\n 'start-time'?: number;\n 'end-time'?: number;\n sort?: 'asc' | 'desc';\n size?: number;\n 'from-id'?: number;\n },\n): Promise<{\n // code: number;\n 'transact-amt': string;\n 'avail-balance': string;\n 'acct-balance': string;\n 'transact-time': string;\n 'record-id': string;\n status: string;\n data: {\n 'account-id': string;\n currency: string;\n 'record-id': string;\n 'transact-amt': string;\n 'transact-type': string;\n 'avail-balance': string;\n 'acct-balance': string;\n 'transact-time': string;\n }[];\n}> => {\n return spotPrivateQueryRequest(credential, 'GET', '/v1/account/history', params);\n};\n"]}
|
package/dist/api/public-api.js
CHANGED
|
@@ -1,9 +1,33 @@
|
|
|
1
|
-
import { formatTime } from '@yuants/utils';
|
|
1
|
+
import { formatTime, scopeError, tokenBucket } from '@yuants/utils';
|
|
2
2
|
// Huobi API 根域名
|
|
3
3
|
const SWAP_API_ROOT = 'api.hbdm.com';
|
|
4
4
|
const SPOT_API_ROOT = 'api.huobi.pro';
|
|
5
|
+
const acquire = (bucketId, meta) => {
|
|
6
|
+
const bucket = tokenBucket(bucketId);
|
|
7
|
+
scopeError('HUOBI_API_RATE_LIMIT', Object.assign(Object.assign({}, meta), { bucketId }), () => bucket.acquireSync(1));
|
|
8
|
+
};
|
|
9
|
+
// https://www.htx.com/zh-cn/opend/newApiPages/?id=474
|
|
10
|
+
// 行情类:同一个 IP,总共 1s 最多 800 个请求(合约业务共享总额度)
|
|
11
|
+
const marketDataIPAllBucketId = 'HUOBI_PUBLIC_MARKET_IP_1S_ALL';
|
|
12
|
+
tokenBucket(marketDataIPAllBucketId, {
|
|
13
|
+
capacity: 800,
|
|
14
|
+
refillInterval: 1000,
|
|
15
|
+
refillAmount: 800,
|
|
16
|
+
});
|
|
17
|
+
// 行情类:按业务线拆分(用于交割/币本位永续/U本位分开限频)
|
|
18
|
+
const marketDataSpotBucketId = 'HUOBI_PUBLIC_MARKET_IP_1S_SPOT';
|
|
19
|
+
tokenBucket(marketDataSpotBucketId, { capacity: 800, refillInterval: 1000, refillAmount: 800 });
|
|
20
|
+
const marketDataLinearSwapBucketId = 'HUOBI_PUBLIC_MARKET_IP_1S_LINEAR_SWAP';
|
|
21
|
+
tokenBucket(marketDataLinearSwapBucketId, { capacity: 800, refillInterval: 1000, refillAmount: 800 });
|
|
22
|
+
// 非行情类公开接口:同一个 IP,3s 最多 120 次请求
|
|
23
|
+
const nonMarketDataIPBucketId = 'HUOBI_PUBLIC_NON_MARKET_IP_3S_ALL';
|
|
24
|
+
tokenBucket(nonMarketDataIPBucketId, {
|
|
25
|
+
capacity: 120,
|
|
26
|
+
refillInterval: 3000,
|
|
27
|
+
refillAmount: 120,
|
|
28
|
+
});
|
|
5
29
|
/**
|
|
6
|
-
* 公共 API
|
|
30
|
+
* 公共 API 请求方法(不负责限流;限流由调用点选择对应 helper)
|
|
7
31
|
*/
|
|
8
32
|
async function publicRequest(method, path, api_root, params) {
|
|
9
33
|
const url = new URL(`https://${api_root}${path}`);
|
|
@@ -29,6 +53,52 @@ async function publicRequest(method, path, api_root, params) {
|
|
|
29
53
|
throw e;
|
|
30
54
|
}
|
|
31
55
|
}
|
|
56
|
+
const spotMarketRequest = async (method, path, params) => {
|
|
57
|
+
const meta = {
|
|
58
|
+
method,
|
|
59
|
+
api_root: SPOT_API_ROOT,
|
|
60
|
+
path,
|
|
61
|
+
business: 'spot',
|
|
62
|
+
interfaceType: 'market',
|
|
63
|
+
};
|
|
64
|
+
acquire(marketDataIPAllBucketId, meta);
|
|
65
|
+
acquire(marketDataSpotBucketId, meta);
|
|
66
|
+
return publicRequest(method, path, SPOT_API_ROOT, params);
|
|
67
|
+
};
|
|
68
|
+
const spotNonMarketRequest = async (method, path, params) => {
|
|
69
|
+
const meta = {
|
|
70
|
+
method,
|
|
71
|
+
api_root: SPOT_API_ROOT,
|
|
72
|
+
path,
|
|
73
|
+
business: 'spot',
|
|
74
|
+
interfaceType: 'non-market',
|
|
75
|
+
};
|
|
76
|
+
acquire(nonMarketDataIPBucketId, meta);
|
|
77
|
+
return publicRequest(method, path, SPOT_API_ROOT, params);
|
|
78
|
+
};
|
|
79
|
+
const linearSwapMarketRequest = async (method, path, params) => {
|
|
80
|
+
const meta = {
|
|
81
|
+
method,
|
|
82
|
+
api_root: SWAP_API_ROOT,
|
|
83
|
+
path,
|
|
84
|
+
business: 'linear-swap',
|
|
85
|
+
interfaceType: 'market',
|
|
86
|
+
};
|
|
87
|
+
acquire(marketDataIPAllBucketId, meta);
|
|
88
|
+
acquire(marketDataLinearSwapBucketId, meta);
|
|
89
|
+
return publicRequest(method, path, SWAP_API_ROOT, params);
|
|
90
|
+
};
|
|
91
|
+
const linearSwapNonMarketRequest = async (method, path, params) => {
|
|
92
|
+
const meta = {
|
|
93
|
+
method,
|
|
94
|
+
api_root: SWAP_API_ROOT,
|
|
95
|
+
path,
|
|
96
|
+
business: 'linear-swap',
|
|
97
|
+
interfaceType: 'non-market',
|
|
98
|
+
};
|
|
99
|
+
acquire(nonMarketDataIPBucketId, meta);
|
|
100
|
+
return publicRequest(method, path, SWAP_API_ROOT, params);
|
|
101
|
+
};
|
|
32
102
|
// ==================== 公共 API 方法 ====================
|
|
33
103
|
/**
|
|
34
104
|
* 获取永续合约产品信息
|
|
@@ -36,7 +106,7 @@ async function publicRequest(method, path, api_root, params) {
|
|
|
36
106
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb72f34-77b5-11ed-9966-0242ac110003
|
|
37
107
|
*/
|
|
38
108
|
export function getPerpetualContractSymbols(params) {
|
|
39
|
-
return
|
|
109
|
+
return linearSwapNonMarketRequest('GET', '/linear-swap-api/v1/swap_contract_info', params);
|
|
40
110
|
}
|
|
41
111
|
/**
|
|
42
112
|
* 获取现货产品信息
|
|
@@ -44,7 +114,7 @@ export function getPerpetualContractSymbols(params) {
|
|
|
44
114
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec47f16-7773-11ed-9966-0242ac110003
|
|
45
115
|
*/
|
|
46
116
|
export function getSpotSymbols() {
|
|
47
|
-
return
|
|
117
|
+
return spotNonMarketRequest('GET', '/v2/settings/common/symbols');
|
|
48
118
|
}
|
|
49
119
|
/**
|
|
50
120
|
* 获取现货行情
|
|
@@ -52,7 +122,7 @@ export function getSpotSymbols() {
|
|
|
52
122
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec3fc25-7773-11ed-9966-0242ac110003
|
|
53
123
|
*/
|
|
54
124
|
export function getSpotTick(params) {
|
|
55
|
-
return
|
|
125
|
+
return spotMarketRequest('GET', `/market/detail/merged`, params);
|
|
56
126
|
}
|
|
57
127
|
/**
|
|
58
128
|
* 【现货】获取K线数据
|
|
@@ -62,21 +132,21 @@ export function getSpotTick(params) {
|
|
|
62
132
|
* Note: HTX spot KLine uses unix seconds in `data[].id`
|
|
63
133
|
*/
|
|
64
134
|
export function getSpotHistoryKline(params) {
|
|
65
|
-
return
|
|
135
|
+
return spotMarketRequest('GET', `/market/history/kline`, params);
|
|
66
136
|
}
|
|
67
137
|
/**
|
|
68
138
|
* 【通用】批量获取合约资金费率
|
|
69
139
|
*
|
|
70
140
|
* 接口权限: 读取
|
|
71
141
|
*
|
|
72
|
-
* 限频: 其他非行情类的公开接口,比如获取指数信息,限价信息,交割结算、平台持仓信息等,所有用户都是每个IP3秒最多
|
|
142
|
+
* 限频: 其他非行情类的公开接口,比如获取指数信息,限价信息,交割结算、平台持仓信息等,所有用户都是每个IP3秒最多120次请求(所有该IP的非行情类的公开接口请求共享3秒120次的额度)
|
|
73
143
|
*
|
|
74
144
|
* 接口描述: 该接口支持全仓模式和逐仓模式
|
|
75
145
|
*
|
|
76
146
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb71b45-77b5-11ed-9966-0242ac110003
|
|
77
147
|
*/
|
|
78
148
|
export function getSwapBatchFundingRate(params) {
|
|
79
|
-
return
|
|
149
|
+
return linearSwapNonMarketRequest('GET', `/linear-swap-api/v1/swap_batch_funding_rate`, params);
|
|
80
150
|
}
|
|
81
151
|
/**
|
|
82
152
|
* 【通用】获取市场最近成交记录
|
|
@@ -96,7 +166,7 @@ export function getSwapBatchFundingRate(params) {
|
|
|
96
166
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb73c34-77b5-11ed-9966-0242ac110003
|
|
97
167
|
*/
|
|
98
168
|
export function getSwapMarketTrade(params) {
|
|
99
|
-
return
|
|
169
|
+
return linearSwapMarketRequest('GET', `/linear-swap-ex/market/trade`, params);
|
|
100
170
|
}
|
|
101
171
|
/**
|
|
102
172
|
* 获得当前合约的总持仓量
|
|
@@ -104,7 +174,7 @@ export function getSwapMarketTrade(params) {
|
|
|
104
174
|
* https://huobiapi.github.io/docs/usdt_swap/v1/cn/#3218e7531a
|
|
105
175
|
*/
|
|
106
176
|
export function getSwapOpenInterest(params) {
|
|
107
|
-
return
|
|
177
|
+
return linearSwapMarketRequest('GET', '/linear-swap-api/v1/swap_open_interest', params);
|
|
108
178
|
}
|
|
109
179
|
/**
|
|
110
180
|
* 【通用】获取市场最优挂单
|
|
@@ -124,7 +194,7 @@ export function getSwapOpenInterest(params) {
|
|
|
124
194
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb735e0-77b5-11ed-9966-0242ac110003
|
|
125
195
|
*/
|
|
126
196
|
export function getSwapMarketBbo(params) {
|
|
127
|
-
return
|
|
197
|
+
return linearSwapMarketRequest('GET', `/linear-swap-ex/market/bbo`, params);
|
|
128
198
|
}
|
|
129
199
|
/**
|
|
130
200
|
* 获取合约的历史资金费率
|
|
@@ -134,7 +204,7 @@ export function getSwapMarketBbo(params) {
|
|
|
134
204
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=5d51f1f9-77b6-11ed-9966-0242ac110003
|
|
135
205
|
*/
|
|
136
206
|
export function getSwapHistoricalFundingRate(params) {
|
|
137
|
-
return
|
|
207
|
+
return linearSwapNonMarketRequest('GET', `/linear-swap-api/v1/swap_historical_funding_rate`, params);
|
|
138
208
|
}
|
|
139
209
|
/**
|
|
140
210
|
* 【通用】获取K线数据
|
|
@@ -142,7 +212,7 @@ export function getSwapHistoricalFundingRate(params) {
|
|
|
142
212
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb73746-77b5-11ed-9966-0242ac110003
|
|
143
213
|
*/
|
|
144
214
|
export function getSwapHistoryKline(params) {
|
|
145
|
-
return
|
|
215
|
+
return linearSwapMarketRequest('GET', `/linear-swap-ex/market/history/kline`, params);
|
|
146
216
|
}
|
|
147
217
|
/**
|
|
148
218
|
* 【全仓】获取平台阶梯保证金
|
|
@@ -150,7 +220,7 @@ export function getSwapHistoryKline(params) {
|
|
|
150
220
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=8cb72290-77b5-11ed-9966-0242ac110003
|
|
151
221
|
*/
|
|
152
222
|
export function getSwapCrossLadderMargin(params) {
|
|
153
|
-
return
|
|
223
|
+
return linearSwapNonMarketRequest('GET', '/linear-swap-api/v1/swap_cross_ladder_margin', params);
|
|
154
224
|
}
|
|
155
225
|
/**
|
|
156
226
|
* APIv2币链参考信息
|
|
@@ -158,7 +228,7 @@ export function getSwapCrossLadderMargin(params) {
|
|
|
158
228
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec478f0-7773-11ed-9966-0242ac110003
|
|
159
229
|
*/
|
|
160
230
|
export function getV2ReferenceCurrencies(params) {
|
|
161
|
-
return
|
|
231
|
+
return spotNonMarketRequest('GET', '/v2/reference/currencies', params);
|
|
162
232
|
}
|
|
163
233
|
/**
|
|
164
234
|
* 【现货】获取市场所有交易对的最新行情
|
|
@@ -166,5 +236,5 @@ export function getV2ReferenceCurrencies(params) {
|
|
|
166
236
|
* https://www.htx.com/zh-cn/opend/newApiPages/?id=7ec40374-7773-11ed-9966-0242ac110003
|
|
167
237
|
*
|
|
168
238
|
*/
|
|
169
|
-
export const getSpotMarketTickers = () =>
|
|
239
|
+
export const getSpotMarketTickers = () => spotMarketRequest('GET', '/market/tickers');
|
|
170
240
|
//# sourceMappingURL=public-api.js.map
|