@yuants/vendor-binance 0.4.49 → 0.5.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.
Files changed (54) hide show
  1. package/dist/api.js +249 -0
  2. package/dist/api.js.map +1 -0
  3. package/dist/cli.js +3 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/extension.js +90 -0
  6. package/dist/extension.js.map +1 -0
  7. package/dist/index.js +4 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/interest_rate.js +54 -0
  10. package/dist/interest_rate.js.map +1 -0
  11. package/dist/legacy_index.js +323 -0
  12. package/dist/legacy_index.js.map +1 -0
  13. package/dist/product.js +40 -0
  14. package/dist/product.js.map +1 -0
  15. package/dist/terminal.js +7 -0
  16. package/dist/terminal.js.map +1 -0
  17. package/dist/vendor-binance.d.ts +1 -0
  18. package/lib/api.d.ts +555 -0
  19. package/lib/api.d.ts.map +1 -0
  20. package/lib/api.js +257 -0
  21. package/lib/api.js.map +1 -0
  22. package/lib/cli.d.ts +3 -0
  23. package/lib/cli.d.ts.map +1 -0
  24. package/lib/cli.js +5 -0
  25. package/lib/cli.js.map +1 -0
  26. package/lib/extension.d.ts +4 -0
  27. package/lib/extension.d.ts.map +1 -0
  28. package/lib/extension.js +92 -0
  29. package/lib/extension.js.map +1 -0
  30. package/lib/index.d.ts +4 -0
  31. package/lib/index.d.ts.map +1 -0
  32. package/lib/index.js +6 -0
  33. package/lib/index.js.map +1 -0
  34. package/lib/interest_rate.d.ts +2 -0
  35. package/lib/interest_rate.d.ts.map +1 -0
  36. package/lib/interest_rate.js +56 -0
  37. package/lib/interest_rate.js.map +1 -0
  38. package/lib/legacy_index.d.ts +2 -0
  39. package/lib/legacy_index.d.ts.map +1 -0
  40. package/lib/legacy_index.js +325 -0
  41. package/lib/legacy_index.js.map +1 -0
  42. package/lib/product.d.ts +2 -0
  43. package/lib/product.d.ts.map +1 -0
  44. package/lib/product.js +42 -0
  45. package/lib/product.js.map +1 -0
  46. package/lib/terminal.d.ts +3 -0
  47. package/lib/terminal.d.ts.map +1 -0
  48. package/lib/terminal.js +10 -0
  49. package/lib/terminal.js.map +1 -0
  50. package/package.json +6 -3
  51. package/temp/image-tag +1 -0
  52. package/temp/package-deps.json +33 -0
  53. package/temp/vendor-binance.api.json +177 -0
  54. package/temp/vendor-binance.api.md +9 -0
@@ -0,0 +1,325 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const data_account_1 = require("@yuants/data-account");
4
+ const transfer_1 = require("@yuants/transfer");
5
+ const utils_1 = require("@yuants/utils");
6
+ const rxjs_1 = require("rxjs");
7
+ const api_1 = require("./api");
8
+ const terminal_1 = require("./terminal");
9
+ const memoizeMap = (fn) => {
10
+ const cache = {};
11
+ return ((...params) => { var _a; var _b; return ((_a = cache[_b = (0, utils_1.encodePath)(params)]) !== null && _a !== void 0 ? _a : (cache[_b] = fn(...params))); });
12
+ };
13
+ const mapSymbolToFuturePremiumIndex$ = (0, rxjs_1.defer)(() => api_1.client.getFuturePremiumIndex({})).pipe((0, rxjs_1.repeat)({ delay: 1000 }), (0, rxjs_1.retry)({ delay: 30000 }), (0, rxjs_1.mergeMap)((x) => (0, rxjs_1.from)(x).pipe((0, rxjs_1.map)((v) => [v.symbol, v]), (0, rxjs_1.toArray)(), (0, rxjs_1.map)((v) => new Map(v)))), (0, rxjs_1.shareReplay)(1));
14
+ const mapSymbolToFutureBookTicker$ = (0, rxjs_1.defer)(() => api_1.client.getFutureBookTicker({})).pipe((0, rxjs_1.repeat)({ delay: 1000 }), (0, rxjs_1.retry)({ delay: 30000 }), (0, rxjs_1.mergeMap)((x) => (0, rxjs_1.from)(x).pipe((0, rxjs_1.map)((v) => [v.symbol, v]), (0, rxjs_1.toArray)(), (0, rxjs_1.map)((v) => new Map(v)))), (0, rxjs_1.shareReplay)(1));
15
+ const _mapSymbolToOpenInterest = {};
16
+ const getOpenInterest = async (symbol) => {
17
+ const expired_at = Date.now() - 600000; // 10min expired
18
+ const cache = _mapSymbolToOpenInterest[symbol];
19
+ if (cache) {
20
+ if (cache.updated_at > expired_at) {
21
+ return cache.value;
22
+ }
23
+ }
24
+ const data = await api_1.client.getFutureOpenInterest({ symbol });
25
+ const value = +data.openInterest || 0;
26
+ _mapSymbolToOpenInterest[symbol] = { value, updated_at: Date.now() };
27
+ return value;
28
+ };
29
+ // provideTicks(terminal, 'binance', (product_id) => {
30
+ // const [instType, symbol] = decodePath(product_id);
31
+ // if (instType === 'usdt-future') {
32
+ // return combineLatest([mapSymbolToFuturePremiumIndex$, mapSymbolToFutureBookTicker$]).pipe(
33
+ // combineLatestWith(defer(() => getOpenInterest(symbol))),
34
+ // map(([[mapSymbolToFuturePremiumIndex, mapSymbolToFutureBookTicker], openInterestVolume]): ITick => {
35
+ // const premiumIndex = mapSymbolToFuturePremiumIndex.get(symbol);
36
+ // const bookTicker = mapSymbolToFutureBookTicker.get(symbol);
37
+ // if (!premiumIndex) {
38
+ // throw new Error(`Premium Index Not Found: ${symbol}`);
39
+ // }
40
+ // if (!bookTicker) {
41
+ // throw new Error(`Book Ticker Not Found: ${symbol}`);
42
+ // }
43
+ // return {
44
+ // datasource_id: 'binance',
45
+ // product_id,
46
+ // updated_at: Date.now(),
47
+ // price: +premiumIndex.markPrice,
48
+ // ask: +bookTicker.askPrice,
49
+ // bid: +bookTicker.bidPrice,
50
+ // interest_rate_for_long: -+premiumIndex.lastFundingRate,
51
+ // interest_rate_for_short: +premiumIndex.lastFundingRate,
52
+ // settlement_scheduled_at: premiumIndex.nextFundingTime,
53
+ // open_interest: openInterestVolume,
54
+ // };
55
+ // }),
56
+ // );
57
+ // }
58
+ // return EMPTY;
59
+ // });
60
+ (async () => {
61
+ const spotAccountInfo = await api_1.client.getSpotAccountInfo();
62
+ if ((0, api_1.isError)(spotAccountInfo)) {
63
+ throw new Error(spotAccountInfo.msg);
64
+ }
65
+ const uid = spotAccountInfo.uid;
66
+ const SPOT_ACCOUNT_ID = `binance/${uid}/spot/usdt`;
67
+ const UNIFIED_ACCOUNT_ID = `binance/${uid}/unified/usdt`;
68
+ {
69
+ // unified accountInfo
70
+ const unifiedAccountInfo$ = (0, rxjs_1.defer)(async () => {
71
+ const accountResult = await api_1.client.getUnifiedAccountBalance();
72
+ if ((0, api_1.isError)(accountResult)) {
73
+ throw new Error(accountResult.msg);
74
+ }
75
+ const usdtAssets = accountResult.find((v) => v.asset === 'USDT');
76
+ if (!usdtAssets) {
77
+ throw new Error('USDT not found');
78
+ }
79
+ const umAccountResult = await api_1.client.getUnifiedUmAccount();
80
+ if ((0, api_1.isError)(umAccountResult)) {
81
+ throw new Error(umAccountResult.msg);
82
+ }
83
+ const usdtUmAssets = umAccountResult.assets.find((v) => v.asset === 'USDT');
84
+ if (!usdtUmAssets) {
85
+ throw new Error('um USDT not found');
86
+ }
87
+ const money = {
88
+ currency: 'USDT',
89
+ leverage: 1,
90
+ equity: +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL,
91
+ balance: +usdtAssets.totalWalletBalance,
92
+ profit: +usdtAssets.umUnrealizedPNL,
93
+ used: +usdtUmAssets.initialMargin,
94
+ free: +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL - +usdtUmAssets.initialMargin,
95
+ };
96
+ const positions = umAccountResult.positions
97
+ .filter((v) => +v.positionAmt !== 0)
98
+ .map((v) => {
99
+ return {
100
+ position_id: `${v.symbol}/${v.positionSide}`,
101
+ datasource_id: 'BINANCE',
102
+ product_id: (0, utils_1.encodePath)('usdt-future', v.symbol),
103
+ direction: v.positionSide,
104
+ volume: +v.positionAmt,
105
+ free_volume: +v.positionAmt,
106
+ position_price: +v.entryPrice,
107
+ closable_price: +v.entryPrice + +v.unrealizedProfit / +v.positionAmt,
108
+ floating_profit: +v.unrealizedProfit,
109
+ valuation: +v.positionAmt * (+v.entryPrice + +v.unrealizedProfit / +v.positionAmt),
110
+ };
111
+ });
112
+ return {
113
+ updated_at: Date.now(),
114
+ account_id: UNIFIED_ACCOUNT_ID,
115
+ money,
116
+ positions,
117
+ };
118
+ }).pipe((0, rxjs_1.tap)({
119
+ error: (err) => {
120
+ console.error((0, utils_1.formatTime)(Date.now()), 'unifiedAccountInfo$', err);
121
+ },
122
+ }), (0, rxjs_1.retry)({ delay: 5000 }), (0, rxjs_1.repeat)({ delay: 1000 }));
123
+ (0, data_account_1.publishAccountInfo)(terminal_1.terminal, UNIFIED_ACCOUNT_ID, unifiedAccountInfo$);
124
+ (0, data_account_1.addAccountMarket)(terminal_1.terminal, { account_id: UNIFIED_ACCOUNT_ID, market_id: 'BINANCE/UNIFIED' });
125
+ }
126
+ {
127
+ // spot account info
128
+ const spotAccountInfo$ = (0, rxjs_1.defer)(async () => {
129
+ const spotAccountResult = await api_1.client.getSpotAccountInfo({ omitZeroBalances: true });
130
+ if ((0, api_1.isError)(spotAccountResult)) {
131
+ throw new Error(spotAccountResult.msg);
132
+ }
133
+ const usdtAssets = spotAccountResult.balances.find((v) => v.asset === 'USDT');
134
+ const money = {
135
+ currency: 'USDT',
136
+ leverage: 1,
137
+ equity: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
138
+ balance: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
139
+ profit: 0,
140
+ used: 0,
141
+ free: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
142
+ };
143
+ return {
144
+ updated_at: Date.now(),
145
+ account_id: SPOT_ACCOUNT_ID,
146
+ money,
147
+ positions: [],
148
+ };
149
+ }).pipe((0, rxjs_1.tap)({
150
+ error: (err) => {
151
+ console.error((0, utils_1.formatTime)(Date.now()), 'unifiedAccountInfo$', err);
152
+ },
153
+ }), (0, rxjs_1.retry)({ delay: 5000 }), (0, rxjs_1.repeat)({ delay: 1000 }));
154
+ (0, data_account_1.publishAccountInfo)(terminal_1.terminal, SPOT_ACCOUNT_ID, spotAccountInfo$);
155
+ (0, data_account_1.addAccountMarket)(terminal_1.terminal, { account_id: SPOT_ACCOUNT_ID, market_id: 'BINANCE/SPOT' });
156
+ }
157
+ // transfer
158
+ {
159
+ // spot -> unified
160
+ const SPOT_UNIFIED_NETWORK_ID = `binance/${uid}/spot/unified`;
161
+ (0, transfer_1.addAccountTransferAddress)({
162
+ terminal: terminal_1.terminal,
163
+ account_id: SPOT_ACCOUNT_ID,
164
+ network_id: SPOT_UNIFIED_NETWORK_ID,
165
+ currency: 'USDT',
166
+ address: `unified`,
167
+ onApply: {
168
+ INIT: async (order) => {
169
+ const transferResult = await api_1.client.postAssetTransfer({
170
+ type: 'MAIN_PORTFOLIO_MARGIN',
171
+ asset: 'USDT',
172
+ amount: order.current_amount,
173
+ });
174
+ if ((0, api_1.isError)(transferResult)) {
175
+ return { state: 'INIT', message: transferResult.msg };
176
+ }
177
+ return { state: 'COMPLETE', transaction_id: '' + transferResult.tranId };
178
+ },
179
+ },
180
+ onEval: async (order) => {
181
+ return { state: 'COMPLETE', received_amount: order.current_amount };
182
+ },
183
+ });
184
+ // unified -> spot
185
+ (0, transfer_1.addAccountTransferAddress)({
186
+ terminal: terminal_1.terminal,
187
+ account_id: UNIFIED_ACCOUNT_ID,
188
+ network_id: SPOT_UNIFIED_NETWORK_ID,
189
+ currency: 'USDT',
190
+ address: `spot`,
191
+ onApply: {
192
+ INIT: async (order) => {
193
+ const transferResult = await api_1.client.postAssetTransfer({
194
+ type: 'PORTFOLIO_MARGIN_MAIN',
195
+ asset: 'USDT',
196
+ amount: order.current_amount,
197
+ });
198
+ if ((0, api_1.isError)(transferResult)) {
199
+ return { state: 'INIT', message: transferResult.msg };
200
+ }
201
+ return { state: 'COMPLETE', transaction_id: '' + transferResult.tranId };
202
+ },
203
+ },
204
+ onEval: async (order) => {
205
+ return { state: 'COMPLETE', received_amount: order.current_amount };
206
+ },
207
+ });
208
+ const subAccountsResult = await api_1.client.getSubAccountList();
209
+ const isMain = !(0, api_1.isError)(subAccountsResult);
210
+ // main -> sub
211
+ // TODO...
212
+ // blockchain
213
+ if (isMain) {
214
+ const depositAddressResult = await api_1.client.getDepositAddress({ coin: 'USDT', network: 'TRX' });
215
+ (0, transfer_1.addAccountTransferAddress)({
216
+ terminal: terminal_1.terminal,
217
+ account_id: SPOT_ACCOUNT_ID,
218
+ network_id: 'TRC20',
219
+ currency: 'USDT',
220
+ address: depositAddressResult.address,
221
+ onApply: {
222
+ INIT: async (order) => {
223
+ const transferResult = await api_1.client.postWithdraw({
224
+ coin: 'USDT',
225
+ network: 'TRX',
226
+ address: order.current_rx_address,
227
+ amount: order.current_amount,
228
+ });
229
+ if ((0, api_1.isError)(transferResult)) {
230
+ return { state: 'ERROR', message: transferResult.msg };
231
+ }
232
+ const wdId = transferResult.id;
233
+ return { state: 'PENDING', context: wdId };
234
+ },
235
+ PENDING: async (order) => {
236
+ const wdId = order.current_tx_context;
237
+ const withdrawResult = await api_1.client.getWithdrawHistory({ coin: 'USDT' });
238
+ const record = withdrawResult === null || withdrawResult === void 0 ? void 0 : withdrawResult.find((v) => v.id === wdId);
239
+ const txId = record === null || record === void 0 ? void 0 : record.txId;
240
+ if (!txId) {
241
+ return { state: 'PENDING', context: wdId };
242
+ }
243
+ return { state: 'COMPLETE', transaction_id: txId };
244
+ },
245
+ },
246
+ onEval: async (order) => {
247
+ var _a;
248
+ const checkResult = await api_1.client.getDepositHistory({
249
+ coin: 'USDT',
250
+ txId: order.current_transaction_id,
251
+ });
252
+ if (((_a = checkResult === null || checkResult === void 0 ? void 0 : checkResult[0]) === null || _a === void 0 ? void 0 : _a.status) !== 1) {
253
+ return { state: 'PENDING' };
254
+ }
255
+ const received_amount = +checkResult[0].amount;
256
+ return { state: 'COMPLETE', received_amount };
257
+ },
258
+ });
259
+ }
260
+ }
261
+ // order related
262
+ {
263
+ terminal_1.terminal.provideService('SubmitOrder', {
264
+ required: ['account_id'],
265
+ properties: {
266
+ account_id: { const: UNIFIED_ACCOUNT_ID },
267
+ },
268
+ }, async (msg) => {
269
+ console.info((0, utils_1.formatTime)(Date.now()), 'SubmitOrder', msg.req);
270
+ const order = msg.req;
271
+ const [instType, symbol] = (0, utils_1.decodePath)(order.product_id);
272
+ if (instType === 'usdt-future') {
273
+ const mapOrderDirectionToSide = (direction) => {
274
+ switch (direction) {
275
+ case 'OPEN_LONG':
276
+ case 'CLOSE_SHORT':
277
+ return 'BUY';
278
+ case 'OPEN_SHORT':
279
+ case 'CLOSE_LONG':
280
+ return 'SELL';
281
+ }
282
+ throw new Error(`Unknown direction: ${direction}`);
283
+ };
284
+ const mapOrderDirectionToPosSide = (direction) => {
285
+ switch (direction) {
286
+ case 'OPEN_LONG':
287
+ case 'CLOSE_LONG':
288
+ return 'LONG';
289
+ case 'CLOSE_SHORT':
290
+ case 'OPEN_SHORT':
291
+ return 'SHORT';
292
+ }
293
+ throw new Error(`Unknown direction: ${direction}`);
294
+ };
295
+ const mapOrderTypeToOrdType = (order_type) => {
296
+ switch (order_type) {
297
+ case 'LIMIT':
298
+ return 'LIMIT';
299
+ case 'MARKET':
300
+ return 'MARKET';
301
+ }
302
+ throw new Error(`Unknown order type: ${order_type}`);
303
+ };
304
+ // return
305
+ const params = {
306
+ symbol,
307
+ side: mapOrderDirectionToSide(order.order_direction),
308
+ positionSide: mapOrderDirectionToPosSide(order.order_direction),
309
+ type: mapOrderTypeToOrdType(order.order_type),
310
+ timeInForce: order.order_type === 'LIMIT' ? 'GTC' : undefined,
311
+ quantity: order.volume,
312
+ price: order.price,
313
+ };
314
+ console.info((0, utils_1.formatTime)(Date.now()), 'SubmitOrder', 'params', JSON.stringify(params));
315
+ const orderResult = await api_1.client.postUmOrder(params);
316
+ if ((0, api_1.isError)(orderResult)) {
317
+ return { res: { code: orderResult.code, message: orderResult.msg } };
318
+ }
319
+ return { res: { code: 0, message: 'OK', order_id: orderResult.orderId } };
320
+ }
321
+ return { res: { code: 400, message: `unsupported type: ${instType}` } };
322
+ });
323
+ }
324
+ })();
325
+ //# sourceMappingURL=legacy_index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy_index.js","sourceRoot":"","sources":["../src/legacy_index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addAccountMarket,\n IAccountInfo,\n IAccountMoney,\n IPosition,\n publishAccountInfo,\n} from '@yuants/data-account';\nimport { addAccountTransferAddress } from '@yuants/transfer';\nimport { decodePath, encodePath, formatTime } from '@yuants/utils';\nimport { defer, from, map, mergeMap, repeat, retry, shareReplay, tap, toArray } from 'rxjs';\nimport { client, isError } from './api';\nimport { terminal } from './terminal';\n\nconst memoizeMap = <T extends (...params: any[]) => any>(fn: T): T => {\n const cache: Record<string, any> = {};\n return ((...params: any[]) => (cache[encodePath(params)] ??= fn(...params))) as T;\n};\n\nconst mapSymbolToFuturePremiumIndex$ = defer(() => client.getFuturePremiumIndex({})).pipe(\n repeat({ delay: 1_000 }),\n retry({ delay: 30_000 }),\n mergeMap((x) =>\n from(x).pipe(\n map((v) => [v.symbol, v] as const),\n toArray(),\n map((v) => new Map(v)),\n ),\n ),\n shareReplay(1),\n);\n\nconst mapSymbolToFutureBookTicker$ = defer(() => client.getFutureBookTicker({})).pipe(\n repeat({ delay: 1_000 }),\n retry({ delay: 30_000 }),\n mergeMap((x) =>\n from(x).pipe(\n map((v) => [v.symbol, v] as const),\n toArray(),\n map((v) => new Map(v)),\n ),\n ),\n shareReplay(1),\n);\n\nconst _mapSymbolToOpenInterest: Record<string, { value: number; updated_at: number }> = {};\nconst getOpenInterest = async (symbol: string) => {\n const expired_at = Date.now() - 600_000; // 10min expired\n const cache = _mapSymbolToOpenInterest[symbol];\n if (cache) {\n if (cache.updated_at > expired_at) {\n return cache.value;\n }\n }\n const data = await client.getFutureOpenInterest({ symbol });\n const value = +data.openInterest || 0;\n _mapSymbolToOpenInterest[symbol] = { value, updated_at: Date.now() };\n return value;\n};\n\n// provideTicks(terminal, 'binance', (product_id) => {\n// const [instType, symbol] = decodePath(product_id);\n// if (instType === 'usdt-future') {\n// return combineLatest([mapSymbolToFuturePremiumIndex$, mapSymbolToFutureBookTicker$]).pipe(\n// combineLatestWith(defer(() => getOpenInterest(symbol))),\n// map(([[mapSymbolToFuturePremiumIndex, mapSymbolToFutureBookTicker], openInterestVolume]): ITick => {\n// const premiumIndex = mapSymbolToFuturePremiumIndex.get(symbol);\n// const bookTicker = mapSymbolToFutureBookTicker.get(symbol);\n// if (!premiumIndex) {\n// throw new Error(`Premium Index Not Found: ${symbol}`);\n// }\n// if (!bookTicker) {\n// throw new Error(`Book Ticker Not Found: ${symbol}`);\n// }\n// return {\n// datasource_id: 'binance',\n// product_id,\n// updated_at: Date.now(),\n// price: +premiumIndex.markPrice,\n// ask: +bookTicker.askPrice,\n// bid: +bookTicker.bidPrice,\n// interest_rate_for_long: -+premiumIndex.lastFundingRate,\n// interest_rate_for_short: +premiumIndex.lastFundingRate,\n// settlement_scheduled_at: premiumIndex.nextFundingTime,\n// open_interest: openInterestVolume,\n// };\n// }),\n// );\n// }\n// return EMPTY;\n// });\n\n(async () => {\n const spotAccountInfo = await client.getSpotAccountInfo();\n if (isError(spotAccountInfo)) {\n throw new Error(spotAccountInfo.msg);\n }\n const uid = spotAccountInfo.uid;\n\n const SPOT_ACCOUNT_ID = `binance/${uid}/spot/usdt`;\n const UNIFIED_ACCOUNT_ID = `binance/${uid}/unified/usdt`;\n\n {\n // unified accountInfo\n const unifiedAccountInfo$ = defer(async (): Promise<IAccountInfo> => {\n const accountResult = await client.getUnifiedAccountBalance();\n if (isError(accountResult)) {\n throw new Error(accountResult.msg);\n }\n const usdtAssets = accountResult.find((v) => v.asset === 'USDT');\n if (!usdtAssets) {\n throw new Error('USDT not found');\n }\n const umAccountResult = await client.getUnifiedUmAccount();\n if (isError(umAccountResult)) {\n throw new Error(umAccountResult.msg);\n }\n const usdtUmAssets = umAccountResult.assets.find((v) => v.asset === 'USDT');\n if (!usdtUmAssets) {\n throw new Error('um USDT not found');\n }\n const money: IAccountMoney = {\n currency: 'USDT',\n leverage: 1,\n equity: +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL,\n balance: +usdtAssets.totalWalletBalance,\n profit: +usdtAssets.umUnrealizedPNL,\n used: +usdtUmAssets.initialMargin,\n free: +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL - +usdtUmAssets.initialMargin,\n };\n\n const positions = umAccountResult.positions\n .filter((v) => +v.positionAmt !== 0)\n .map((v): IPosition => {\n return {\n position_id: `${v.symbol}/${v.positionSide}`,\n datasource_id: 'BINANCE',\n product_id: encodePath('usdt-future', v.symbol),\n direction: v.positionSide,\n volume: +v.positionAmt,\n free_volume: +v.positionAmt,\n position_price: +v.entryPrice,\n closable_price: +v.entryPrice + +v.unrealizedProfit / +v.positionAmt,\n floating_profit: +v.unrealizedProfit,\n valuation: +v.positionAmt * (+v.entryPrice + +v.unrealizedProfit / +v.positionAmt),\n };\n });\n\n return {\n updated_at: Date.now(),\n account_id: UNIFIED_ACCOUNT_ID,\n money,\n positions,\n };\n }).pipe(\n tap({\n error: (err) => {\n console.error(formatTime(Date.now()), 'unifiedAccountInfo$', err);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 1000 }),\n );\n publishAccountInfo(terminal, UNIFIED_ACCOUNT_ID, unifiedAccountInfo$);\n addAccountMarket(terminal, { account_id: UNIFIED_ACCOUNT_ID, market_id: 'BINANCE/UNIFIED' });\n }\n\n {\n // spot account info\n const spotAccountInfo$ = defer(async (): Promise<IAccountInfo> => {\n const spotAccountResult = await client.getSpotAccountInfo({ omitZeroBalances: true });\n if (isError(spotAccountResult)) {\n throw new Error(spotAccountResult.msg);\n }\n const usdtAssets = spotAccountResult.balances.find((v) => v.asset === 'USDT');\n const money: IAccountMoney = {\n currency: 'USDT',\n leverage: 1,\n equity: +(usdtAssets?.free || 0),\n balance: +(usdtAssets?.free || 0),\n profit: 0,\n used: 0,\n free: +(usdtAssets?.free || 0),\n };\n\n return {\n updated_at: Date.now(),\n account_id: SPOT_ACCOUNT_ID,\n money,\n positions: [],\n };\n }).pipe(\n tap({\n error: (err) => {\n console.error(formatTime(Date.now()), 'unifiedAccountInfo$', err);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 1000 }),\n );\n\n publishAccountInfo(terminal, SPOT_ACCOUNT_ID, spotAccountInfo$);\n addAccountMarket(terminal, { account_id: SPOT_ACCOUNT_ID, market_id: 'BINANCE/SPOT' });\n }\n\n // transfer\n {\n // spot -> unified\n const SPOT_UNIFIED_NETWORK_ID = `binance/${uid}/spot/unified`;\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n network_id: SPOT_UNIFIED_NETWORK_ID,\n currency: 'USDT',\n address: `unified`,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postAssetTransfer({\n type: 'MAIN_PORTFOLIO_MARGIN',\n asset: 'USDT',\n amount: order.current_amount!,\n });\n if (isError(transferResult)) {\n return { state: 'INIT', message: transferResult.msg };\n }\n return { state: 'COMPLETE', transaction_id: '' + transferResult.tranId };\n },\n },\n onEval: async (order) => {\n return { state: 'COMPLETE', received_amount: order.current_amount };\n },\n });\n\n // unified -> spot\n addAccountTransferAddress({\n terminal,\n account_id: UNIFIED_ACCOUNT_ID,\n network_id: SPOT_UNIFIED_NETWORK_ID,\n currency: 'USDT',\n address: `spot`,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postAssetTransfer({\n type: 'PORTFOLIO_MARGIN_MAIN',\n asset: 'USDT',\n amount: order.current_amount!,\n });\n if (isError(transferResult)) {\n return { state: 'INIT', message: transferResult.msg };\n }\n return { state: 'COMPLETE', transaction_id: '' + transferResult.tranId };\n },\n },\n onEval: async (order) => {\n return { state: 'COMPLETE', received_amount: order.current_amount };\n },\n });\n\n const subAccountsResult = await client.getSubAccountList();\n const isMain = !isError(subAccountsResult);\n // main -> sub\n // TODO...\n\n // blockchain\n if (isMain) {\n const depositAddressResult = await client.getDepositAddress({ coin: 'USDT', network: 'TRX' });\n addAccountTransferAddress({\n terminal,\n account_id: SPOT_ACCOUNT_ID,\n network_id: 'TRC20',\n currency: 'USDT',\n address: depositAddressResult.address,\n onApply: {\n INIT: async (order) => {\n const transferResult = await client.postWithdraw({\n coin: 'USDT',\n network: 'TRX',\n address: order.current_rx_address!,\n amount: order.current_amount!,\n });\n if (isError(transferResult)) {\n return { state: 'ERROR', message: transferResult.msg };\n }\n const wdId = transferResult.id;\n return { state: 'PENDING', context: wdId };\n },\n PENDING: async (order) => {\n const wdId = order.current_tx_context;\n const withdrawResult = await client.getWithdrawHistory({ coin: 'USDT' });\n const record = withdrawResult?.find((v) => v.id === wdId);\n const txId = record?.txId;\n if (!txId) {\n return { state: 'PENDING', context: wdId };\n }\n return { state: 'COMPLETE', transaction_id: txId };\n },\n },\n onEval: async (order) => {\n const checkResult = await client.getDepositHistory({\n coin: 'USDT',\n txId: order.current_transaction_id,\n });\n if (checkResult?.[0]?.status !== 1) {\n return { state: 'PENDING' };\n }\n const received_amount = +checkResult[0].amount;\n return { state: 'COMPLETE', received_amount };\n },\n });\n }\n }\n\n // order related\n {\n terminal.provideService(\n 'SubmitOrder',\n {\n required: ['account_id'],\n properties: {\n account_id: { const: UNIFIED_ACCOUNT_ID },\n },\n },\n async (msg) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', msg.req);\n const order = msg.req;\n const [instType, symbol] = decodePath(order.product_id);\n if (instType === 'usdt-future') {\n const mapOrderDirectionToSide = (direction?: string) => {\n switch (direction) {\n case 'OPEN_LONG':\n case 'CLOSE_SHORT':\n return 'BUY';\n case 'OPEN_SHORT':\n case 'CLOSE_LONG':\n return 'SELL';\n }\n throw new Error(`Unknown direction: ${direction}`);\n };\n const mapOrderDirectionToPosSide = (direction?: string) => {\n switch (direction) {\n case 'OPEN_LONG':\n case 'CLOSE_LONG':\n return 'LONG';\n case 'CLOSE_SHORT':\n case 'OPEN_SHORT':\n return 'SHORT';\n }\n throw new Error(`Unknown direction: ${direction}`);\n };\n const mapOrderTypeToOrdType = (order_type?: string) => {\n switch (order_type) {\n case 'LIMIT':\n return 'LIMIT';\n case 'MARKET':\n return 'MARKET';\n }\n throw new Error(`Unknown order type: ${order_type}`);\n };\n // return\n const params = {\n symbol,\n side: mapOrderDirectionToSide(order.order_direction),\n positionSide: mapOrderDirectionToPosSide(order.order_direction),\n type: mapOrderTypeToOrdType(order.order_type),\n timeInForce: order.order_type === 'LIMIT' ? 'GTC' : undefined,\n quantity: order.volume,\n price: order.price,\n };\n\n console.info(formatTime(Date.now()), 'SubmitOrder', 'params', JSON.stringify(params));\n const orderResult = await client.postUmOrder(params);\n if (isError(orderResult)) {\n return { res: { code: orderResult.code, message: orderResult.msg } };\n }\n return { res: { code: 0, message: 'OK', order_id: orderResult.orderId } };\n }\n return { res: { code: 400, message: `unsupported type: ${instType}` } };\n },\n );\n }\n})();\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=product.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":""}
package/lib/product.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@yuants/utils");
4
+ const sql_1 = require("@yuants/sql");
5
+ const rxjs_1 = require("rxjs");
6
+ const api_1 = require("./api");
7
+ const terminal_1 = require("./terminal");
8
+ const product$ = new rxjs_1.Subject();
9
+ const futureExchangeInfo$ = (0, rxjs_1.defer)(() => api_1.client.getFutureExchangeInfo()).pipe((0, rxjs_1.repeat)({ delay: 3600000 }), (0, rxjs_1.retry)({ delay: 60000 }), (0, rxjs_1.shareReplay)(1));
10
+ const futureProducts$ = futureExchangeInfo$.pipe((0, rxjs_1.mergeMap)((x) => (0, rxjs_1.from)(x.symbols).pipe(
11
+ //
12
+ (0, rxjs_1.map)((symbol) => {
13
+ return {
14
+ datasource_id: 'BINANCE',
15
+ product_id: (0, utils_1.encodePath)('usdt-future', symbol.symbol),
16
+ base_currency: symbol.baseAsset,
17
+ quote_currency: symbol.quoteAsset,
18
+ price_step: +`1e-${symbol.pricePrecision}`,
19
+ value_scale: 1,
20
+ volume_step: +`1e-${symbol.quantityPrecision}`,
21
+ name: `${symbol.baseAsset}/${symbol.quoteAsset} PERP`,
22
+ value_scale_unit: '',
23
+ margin_rate: +symbol.requiredMarginPercent / 100,
24
+ value_based_cost: 0,
25
+ volume_based_cost: 0,
26
+ max_position: 0,
27
+ max_volume: 0,
28
+ allow_long: true,
29
+ allow_short: true,
30
+ market_id: 'BINANCE/USDT-FUTURE',
31
+ no_interest_rate: false,
32
+ };
33
+ }), (0, rxjs_1.tap)((v) => product$.next(v)), (0, rxjs_1.toArray)())), (0, rxjs_1.shareReplay)(1));
34
+ futureProducts$.subscribe();
35
+ (0, sql_1.createSQLWriter)(terminal_1.terminal, {
36
+ data$: product$,
37
+ tableName: 'product',
38
+ keyFn: (x) => (0, utils_1.encodePath)(x.datasource_id, x.product_id),
39
+ conflictKeys: ['datasource_id', 'product_id'],
40
+ writeInterval: 1000,
41
+ });
42
+ //# sourceMappingURL=product.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.js","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":";;AAAA,yCAA2C;AAE3C,qCAA8C;AAC9C,+BAAqG;AACrG,+BAA+B;AAC/B,yCAAsC;AAEtC,MAAM,QAAQ,GAAG,IAAI,cAAO,EAAY,CAAC;AAEzC,MAAM,mBAAmB,GAAG,IAAA,YAAK,EAAC,GAAG,EAAE,CAAC,YAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAC1E,IAAA,aAAM,EAAC,EAAE,KAAK,EAAE,OAAQ,EAAE,CAAC,EAC3B,IAAA,YAAK,EAAC,EAAE,KAAK,EAAE,KAAM,EAAE,CAAC,EACxB,IAAA,kBAAW,EAAC,CAAC,CAAC,CACf,CAAC;AAEF,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAC9C,IAAA,eAAQ,EAAC,CAAC,CAAC,EAAE,EAAE,CACb,IAAA,WAAI,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI;AAClB,EAAE;AACF,IAAA,UAAG,EAAC,CAAC,MAAM,EAAY,EAAE;IACvB,OAAO;QACL,aAAa,EAAE,SAAS;QACxB,UAAU,EAAE,IAAA,kBAAU,EAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC;QACpD,aAAa,EAAE,MAAM,CAAC,SAAS;QAC/B,cAAc,EAAE,MAAM,CAAC,UAAU;QACjC,UAAU,EAAE,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE;QAC1C,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC,MAAM,MAAM,CAAC,iBAAiB,EAAE;QAC9C,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,OAAO;QACrD,gBAAgB,EAAE,EAAE;QACpB,WAAW,EAAE,CAAC,MAAM,CAAC,qBAAqB,GAAG,GAAG;QAChD,gBAAgB,EAAE,CAAC;QACnB,iBAAiB,EAAE,CAAC;QACpB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,qBAAqB;QAChC,gBAAgB,EAAE,KAAK;KACxB,CAAC;AACJ,CAAC,CAAC,EACF,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC5B,IAAA,cAAO,GAAE,CACV,CACF,EACD,IAAA,kBAAW,EAAC,CAAC,CAAC,CACf,CAAC;AAEF,eAAe,CAAC,SAAS,EAAE,CAAC;AAE5B,IAAA,qBAAe,EAAW,mBAAQ,EAAE;IAClC,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,SAAS;IACpB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,kBAAU,EAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,UAAU,CAAC;IACvD,YAAY,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC;IAC7C,aAAa,EAAE,IAAI;CACpB,CAAC,CAAC","sourcesContent":["import { encodePath } from '@yuants/utils';\nimport { IProduct } from '@yuants/data-product';\nimport { createSQLWriter } from '@yuants/sql';\nimport { Subject, defer, from, map, mergeMap, repeat, retry, shareReplay, tap, toArray } from 'rxjs';\nimport { client } from './api';\nimport { terminal } from './terminal';\n\nconst product$ = new Subject<IProduct>();\n\nconst futureExchangeInfo$ = defer(() => client.getFutureExchangeInfo()).pipe(\n repeat({ delay: 3600_000 }),\n retry({ delay: 60_000 }),\n shareReplay(1),\n);\n\nconst futureProducts$ = futureExchangeInfo$.pipe(\n mergeMap((x) =>\n from(x.symbols).pipe(\n //\n map((symbol): IProduct => {\n return {\n datasource_id: 'BINANCE',\n product_id: encodePath('usdt-future', symbol.symbol),\n base_currency: symbol.baseAsset,\n quote_currency: symbol.quoteAsset,\n price_step: +`1e-${symbol.pricePrecision}`,\n value_scale: 1,\n volume_step: +`1e-${symbol.quantityPrecision}`,\n name: `${symbol.baseAsset}/${symbol.quoteAsset} PERP`,\n value_scale_unit: '',\n margin_rate: +symbol.requiredMarginPercent / 100,\n value_based_cost: 0,\n volume_based_cost: 0,\n max_position: 0,\n max_volume: 0,\n allow_long: true,\n allow_short: true,\n market_id: 'BINANCE/USDT-FUTURE',\n no_interest_rate: false,\n };\n }),\n tap((v) => product$.next(v)),\n toArray(),\n ),\n ),\n shareReplay(1),\n);\n\nfutureProducts$.subscribe();\n\ncreateSQLWriter<IProduct>(terminal, {\n data$: product$,\n tableName: 'product',\n keyFn: (x) => encodePath(x.datasource_id, x.product_id),\n conflictKeys: ['datasource_id', 'product_id'],\n writeInterval: 1000,\n});\n"]}
@@ -0,0 +1,3 @@
1
+ import { Terminal } from '@yuants/protocol';
2
+ export declare const terminal: Terminal;
3
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,eAAO,MAAM,QAAQ,UAGnB,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.terminal = void 0;
4
+ const protocol_1 = require("@yuants/protocol");
5
+ const utils_1 = require("@yuants/utils");
6
+ exports.terminal = new protocol_1.Terminal(process.env.HOST_URL, {
7
+ terminal_id: process.env.TERMINAL_ID || `binance/${(0, utils_1.UUID)()}`,
8
+ name: '@yuants/vendor-binance',
9
+ });
10
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAC5C,yCAAqC;AAExB,QAAA,QAAQ,GAAG,IAAI,mBAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAS,EAAE;IAC1D,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,WAAW,IAAA,YAAI,GAAE,EAAE;IAC3D,IAAI,EAAE,wBAAwB;CAC/B,CAAC,CAAC","sourcesContent":["import { Terminal } from '@yuants/protocol';\nimport { UUID } from '@yuants/utils';\n\nexport const terminal = new Terminal(process.env.HOST_URL!, {\n terminal_id: process.env.TERMINAL_ID || `binance/${UUID()}`,\n name: '@yuants/vendor-binance',\n});\n"]}
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "@yuants/vendor-binance",
3
- "version": "0.4.49",
3
+ "version": "0.5.1",
4
+ "bin": "lib/cli.js",
4
5
  "files": [
5
- "dist/extension.bundle.js"
6
+ "dist",
7
+ "lib",
8
+ "temp"
6
9
  ],
7
10
  "dependencies": {
8
11
  "@yuants/protocol": "0.37.2",
9
- "@yuants/data-account": "0.3.3",
12
+ "@yuants/data-account": "0.3.4",
10
13
  "@yuants/utils": "0.5.0",
11
14
  "@yuants/data-series": "0.3.16",
12
15
  "@yuants/sql": "0.8.3",
package/temp/image-tag ADDED
@@ -0,0 +1 @@
1
+ sha-b4831152d13a8e55c58e35ae77c9f9f7367eabb3
@@ -0,0 +1,33 @@
1
+ {
2
+ "apps/vendor-binance/CHANGELOG.json": "39adcb7ce1bd60448e8510bdfa416a14fde2e02a",
3
+ "apps/vendor-binance/CHANGELOG.md": "c6de23b595acbc48eb72e4a45e581112a3b7bec2",
4
+ "apps/vendor-binance/README.md": "4ab94c08b3d07398aee74c3264a4f87d554d20fa",
5
+ "apps/vendor-binance/api-extractor.json": "62f4fd324425b9a235f0c117975967aab09ced0c",
6
+ "apps/vendor-binance/build/Dockerfile": "bcf1c8d7b51c3106affd0579545e92af1a505b56",
7
+ "apps/vendor-binance/config/jest.config.json": "4bb17bde3ee911163a3edb36a6eb71491d80b1bd",
8
+ "apps/vendor-binance/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
9
+ "apps/vendor-binance/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
10
+ "apps/vendor-binance/etc/vendor-binance.api.md": "2094b84e9b5e7503f5c42b31fffee8d7db47fe7b",
11
+ "apps/vendor-binance/package.json": "f288262eeab62c76ed1dd1858f2f05cd097d1343",
12
+ "apps/vendor-binance/src/api.ts": "6278b55e9330d8f49362f9ab4f7df1d9d021b93e",
13
+ "apps/vendor-binance/src/cli.ts": "9bf6b5559a6c6f33da20e74cc6c5d702c60ec891",
14
+ "apps/vendor-binance/src/extension.ts": "20c19da6bd0224b891dbbb94e3f63458ba7ae57b",
15
+ "apps/vendor-binance/src/index.ts": "fdac26f4c4a5093e3d647bddcd3c9998c2de7b4c",
16
+ "apps/vendor-binance/src/interest_rate.ts": "473562c8e0a772338809705ba5d908c0489c5dcb",
17
+ "apps/vendor-binance/src/legacy_index.ts": "6696f250ba0216a57b238b328a200b231ba4e11b",
18
+ "apps/vendor-binance/src/product.ts": "9f82802b98528aedd773f711d2147d749b6e9ae4",
19
+ "apps/vendor-binance/src/terminal.ts": "184c6cfcea5d9a9496c62e1e5bb15d20a0ddace8",
20
+ "apps/vendor-binance/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
21
+ "apps/vendor-binance/.rush/temp/shrinkwrap-deps.json": "dac6fe331898427eba9251d445971f7598940b2a",
22
+ "libraries/protocol/temp/package-deps.json": "d326f24867d9ae3fef16ff84ba537eabb7c8adf0",
23
+ "libraries/data-account/temp/package-deps.json": "0e5bd33f40288d3bc2a3b32cf51188a346a8dd34",
24
+ "libraries/utils/temp/package-deps.json": "c747617da1c0a40843603c62a7477da641ff0aef",
25
+ "libraries/data-series/temp/package-deps.json": "3ba9330800ae3952ed7ba430526596a24d1e8eb7",
26
+ "libraries/sql/temp/package-deps.json": "1cb2248873d01ed732e8473f7b242a41f987fdd7",
27
+ "libraries/data-product/temp/package-deps.json": "634e636d948295079b02dbeffb84f6d52872fda8",
28
+ "libraries/data-ohlc/temp/package-deps.json": "f05db3bced2139edafc9a3d2c647d0987f974ce7",
29
+ "libraries/data-interest-rate/temp/package-deps.json": "420702140b635d7fbbd0524108a827b12efde639",
30
+ "libraries/transfer/temp/package-deps.json": "cb2786055e5e79cd7d9d0f5787e300ca1c0bf002",
31
+ "libraries/extension/temp/package-deps.json": "96816518ae9dc050cafe0b8fbce95cbb59d06ee6",
32
+ "tools/toolkit/temp/package-deps.json": "eb0447c467da3a90db0913ed01e42ec0de840234"
33
+ }