@yuants/vendor-binance 0.6.17 → 0.6.19
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/legacy_index.js +12 -19
- package/dist/legacy_index.js.map +1 -1
- package/dist/product.js +30 -34
- package/dist/product.js.map +1 -1
- package/lib/legacy_index.js +12 -19
- package/lib/legacy_index.js.map +1 -1
- package/lib/product.js +30 -34
- package/lib/product.js.map +1 -1
- package/package.json +3 -3
- package/temp/package-deps.json +7 -7
package/dist/legacy_index.js
CHANGED
|
@@ -85,14 +85,8 @@ const getOpenInterest = async (symbol) => {
|
|
|
85
85
|
if (!usdtUmAssets) {
|
|
86
86
|
throw new Error('um USDT not found');
|
|
87
87
|
}
|
|
88
|
-
const
|
|
89
|
-
|
|
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
|
-
};
|
|
88
|
+
const equity = +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL;
|
|
89
|
+
const free = equity - +usdtUmAssets.initialMargin;
|
|
96
90
|
const positions = umAccountResult.positions
|
|
97
91
|
.filter((v) => +v.positionAmt !== 0)
|
|
98
92
|
.map((v) => {
|
|
@@ -110,7 +104,11 @@ const getOpenInterest = async (symbol) => {
|
|
|
110
104
|
};
|
|
111
105
|
});
|
|
112
106
|
return {
|
|
113
|
-
money
|
|
107
|
+
money: {
|
|
108
|
+
currency: 'USDT',
|
|
109
|
+
equity,
|
|
110
|
+
free,
|
|
111
|
+
},
|
|
114
112
|
positions,
|
|
115
113
|
};
|
|
116
114
|
}, { auto_refresh_interval: 1000 });
|
|
@@ -124,17 +122,12 @@ const getOpenInterest = async (symbol) => {
|
|
|
124
122
|
throw new Error(spotAccountResult.msg);
|
|
125
123
|
}
|
|
126
124
|
const usdtAssets = spotAccountResult.balances.find((v) => v.asset === 'USDT');
|
|
127
|
-
const money = {
|
|
128
|
-
currency: 'USDT',
|
|
129
|
-
leverage: 1,
|
|
130
|
-
equity: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
|
|
131
|
-
balance: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
|
|
132
|
-
profit: 0,
|
|
133
|
-
used: 0,
|
|
134
|
-
free: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
|
|
135
|
-
};
|
|
136
125
|
return {
|
|
137
|
-
money
|
|
126
|
+
money: {
|
|
127
|
+
currency: 'USDT',
|
|
128
|
+
equity: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
|
|
129
|
+
free: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
|
|
130
|
+
},
|
|
138
131
|
positions: [],
|
|
139
132
|
};
|
|
140
133
|
});
|
package/dist/legacy_index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy_index.js","sourceRoot":"","sources":["../src/legacy_index.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IAccountMoney, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { addAccountTransferAddress } from '@yuants/transfer';\nimport { decodePath, encodePath, formatTime } from '@yuants/utils';\nimport { defer, from, map, mergeMap, repeat, retry, shareReplay, toArray } from 'rxjs';\nimport { client, isError } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\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\n provideAccountInfoService(\n terminal,\n UNIFIED_ACCOUNT_ID,\n async () => {\n const [accountResult, umAccountResult] = await Promise.all([\n client.getUnifiedAccountBalance(),\n client.getUnifiedUmAccount(),\n ]);\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 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 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 money,\n positions,\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n addAccountMarket(terminal, { account_id: UNIFIED_ACCOUNT_ID, market_id: 'BINANCE/UNIFIED' });\n }\n\n {\n // spot account info\n\n provideAccountInfoService(terminal, SPOT_ACCOUNT_ID, async () => {\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 money,\n positions: [],\n };\n });\n\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.server.provideService<IOrder>(\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"]}
|
|
1
|
+
{"version":3,"file":"legacy_index.js","sourceRoot":"","sources":["../src/legacy_index.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { addAccountTransferAddress } from '@yuants/transfer';\nimport { decodePath, encodePath, formatTime } from '@yuants/utils';\nimport { defer, from, map, mergeMap, repeat, retry, shareReplay, toArray } from 'rxjs';\nimport { client, isError } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\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\n provideAccountInfoService(\n terminal,\n UNIFIED_ACCOUNT_ID,\n async () => {\n const [accountResult, umAccountResult] = await Promise.all([\n client.getUnifiedAccountBalance(),\n client.getUnifiedUmAccount(),\n ]);\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 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 equity = +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL;\n const free = equity - +usdtUmAssets.initialMargin;\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 money: {\n currency: 'USDT',\n equity,\n free,\n },\n positions,\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n addAccountMarket(terminal, { account_id: UNIFIED_ACCOUNT_ID, market_id: 'BINANCE/UNIFIED' });\n }\n\n {\n // spot account info\n\n provideAccountInfoService(terminal, SPOT_ACCOUNT_ID, async () => {\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 return {\n money: {\n currency: 'USDT',\n equity: +(usdtAssets?.free || 0),\n free: +(usdtAssets?.free || 0),\n },\n positions: [],\n };\n });\n\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.server.provideService<IOrder>(\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"]}
|
package/dist/product.js
CHANGED
|
@@ -1,40 +1,36 @@
|
|
|
1
|
+
import { provideQueryProductsService } from '@yuants/data-product';
|
|
1
2
|
import { Terminal } from '@yuants/protocol';
|
|
2
|
-
import { createSQLWriter } from '@yuants/sql';
|
|
3
3
|
import { encodePath } from '@yuants/utils';
|
|
4
|
-
import { Subject, defer, from, map, mergeMap, repeat, retry, shareReplay, tap, toArray } from 'rxjs';
|
|
5
4
|
import { client } from './api';
|
|
6
5
|
const terminal = Terminal.fromNodeEnv();
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
tableName: 'product',
|
|
37
|
-
conflictKeys: ['datasource_id', 'product_id'],
|
|
38
|
-
writeInterval: 1000,
|
|
6
|
+
// Provide QueryProducts service with the new design
|
|
7
|
+
const cache = provideQueryProductsService(terminal, 'BINANCE', async (req) => {
|
|
8
|
+
// Directly call the external API to get exchange info
|
|
9
|
+
const exchangeInfo = await client.getFutureExchangeInfo();
|
|
10
|
+
// Convert symbols to IProduct format
|
|
11
|
+
return exchangeInfo.symbols.map((symbol) => {
|
|
12
|
+
return {
|
|
13
|
+
datasource_id: 'BINANCE',
|
|
14
|
+
product_id: encodePath('usdt-future', symbol.symbol),
|
|
15
|
+
base_currency: symbol.baseAsset,
|
|
16
|
+
quote_currency: symbol.quoteAsset,
|
|
17
|
+
price_step: +`1e-${symbol.pricePrecision}`,
|
|
18
|
+
value_scale: 1,
|
|
19
|
+
volume_step: +`1e-${symbol.quantityPrecision}`,
|
|
20
|
+
name: `${symbol.baseAsset}/${symbol.quoteAsset} PERP`,
|
|
21
|
+
value_scale_unit: '',
|
|
22
|
+
margin_rate: +symbol.requiredMarginPercent / 100,
|
|
23
|
+
value_based_cost: 0,
|
|
24
|
+
volume_based_cost: 0,
|
|
25
|
+
max_position: 0,
|
|
26
|
+
max_volume: 0,
|
|
27
|
+
allow_long: true,
|
|
28
|
+
allow_short: true,
|
|
29
|
+
market_id: 'BINANCE/USDT-FUTURE',
|
|
30
|
+
no_interest_rate: false,
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
}, {
|
|
34
|
+
auto_refresh_interval: 3600000,
|
|
39
35
|
});
|
|
40
36
|
//# sourceMappingURL=product.js.map
|
package/dist/product.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product.js","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"product.js","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;AAExC,oDAAoD;AACpD,MAAM,KAAK,GAAG,2BAA2B,CACvC,QAAQ,EACR,SAAS,EACT,KAAK,EAAE,GAA0B,EAAuB,EAAE;IACxD,sDAAsD;IACtD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAE1D,qCAAqC;IACrC,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAY,EAAE;QACnD,OAAO;YACL,aAAa,EAAE,SAAS;YACxB,UAAU,EAAE,UAAU,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC;YACpD,aAAa,EAAE,MAAM,CAAC,SAAS;YAC/B,cAAc,EAAE,MAAM,CAAC,UAAU;YACjC,UAAU,EAAE,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE;YAC1C,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,CAAC,MAAM,MAAM,CAAC,iBAAiB,EAAE;YAC9C,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,OAAO;YACrD,gBAAgB,EAAE,EAAE;YACpB,WAAW,EAAE,CAAC,MAAM,CAAC,qBAAqB,GAAG,GAAG;YAChD,gBAAgB,EAAE,CAAC;YACnB,iBAAiB,EAAE,CAAC;YACpB,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,qBAAqB;YAChC,gBAAgB,EAAE,KAAK;SACxB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,EACD;IACE,qBAAqB,EAAE,OAAQ;CAChC,CACF,CAAC","sourcesContent":["import { IProduct, IQueryProductsRequest, provideQueryProductsService } from '@yuants/data-product';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath } from '@yuants/utils';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\n// Provide QueryProducts service with the new design\nconst cache = provideQueryProductsService(\n terminal,\n 'BINANCE',\n async (req: IQueryProductsRequest): Promise<IProduct[]> => {\n // Directly call the external API to get exchange info\n const exchangeInfo = await client.getFutureExchangeInfo();\n\n // Convert symbols to IProduct format\n return exchangeInfo.symbols.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 },\n {\n auto_refresh_interval: 3600_000,\n },\n);\n"]}
|
package/lib/legacy_index.js
CHANGED
|
@@ -87,14 +87,8 @@ const getOpenInterest = async (symbol) => {
|
|
|
87
87
|
if (!usdtUmAssets) {
|
|
88
88
|
throw new Error('um USDT not found');
|
|
89
89
|
}
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
equity: +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL,
|
|
93
|
-
balance: +usdtAssets.totalWalletBalance,
|
|
94
|
-
profit: +usdtAssets.umUnrealizedPNL,
|
|
95
|
-
used: +usdtUmAssets.initialMargin,
|
|
96
|
-
free: +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL - +usdtUmAssets.initialMargin,
|
|
97
|
-
};
|
|
90
|
+
const equity = +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL;
|
|
91
|
+
const free = equity - +usdtUmAssets.initialMargin;
|
|
98
92
|
const positions = umAccountResult.positions
|
|
99
93
|
.filter((v) => +v.positionAmt !== 0)
|
|
100
94
|
.map((v) => {
|
|
@@ -112,7 +106,11 @@ const getOpenInterest = async (symbol) => {
|
|
|
112
106
|
};
|
|
113
107
|
});
|
|
114
108
|
return {
|
|
115
|
-
money
|
|
109
|
+
money: {
|
|
110
|
+
currency: 'USDT',
|
|
111
|
+
equity,
|
|
112
|
+
free,
|
|
113
|
+
},
|
|
116
114
|
positions,
|
|
117
115
|
};
|
|
118
116
|
}, { auto_refresh_interval: 1000 });
|
|
@@ -126,17 +124,12 @@ const getOpenInterest = async (symbol) => {
|
|
|
126
124
|
throw new Error(spotAccountResult.msg);
|
|
127
125
|
}
|
|
128
126
|
const usdtAssets = spotAccountResult.balances.find((v) => v.asset === 'USDT');
|
|
129
|
-
const money = {
|
|
130
|
-
currency: 'USDT',
|
|
131
|
-
leverage: 1,
|
|
132
|
-
equity: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
|
|
133
|
-
balance: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
|
|
134
|
-
profit: 0,
|
|
135
|
-
used: 0,
|
|
136
|
-
free: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
|
|
137
|
-
};
|
|
138
127
|
return {
|
|
139
|
-
money
|
|
128
|
+
money: {
|
|
129
|
+
currency: 'USDT',
|
|
130
|
+
equity: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
|
|
131
|
+
free: +((usdtAssets === null || usdtAssets === void 0 ? void 0 : usdtAssets.free) || 0),
|
|
132
|
+
},
|
|
140
133
|
positions: [],
|
|
141
134
|
};
|
|
142
135
|
});
|
package/lib/legacy_index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy_index.js","sourceRoot":"","sources":["../src/legacy_index.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IAccountMoney, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { addAccountTransferAddress } from '@yuants/transfer';\nimport { decodePath, encodePath, formatTime } from '@yuants/utils';\nimport { defer, from, map, mergeMap, repeat, retry, shareReplay, toArray } from 'rxjs';\nimport { client, isError } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\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\n provideAccountInfoService(\n terminal,\n UNIFIED_ACCOUNT_ID,\n async () => {\n const [accountResult, umAccountResult] = await Promise.all([\n client.getUnifiedAccountBalance(),\n client.getUnifiedUmAccount(),\n ]);\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 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 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 money,\n positions,\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n addAccountMarket(terminal, { account_id: UNIFIED_ACCOUNT_ID, market_id: 'BINANCE/UNIFIED' });\n }\n\n {\n // spot account info\n\n provideAccountInfoService(terminal, SPOT_ACCOUNT_ID, async () => {\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 money,\n positions: [],\n };\n });\n\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.server.provideService<IOrder>(\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"]}
|
|
1
|
+
{"version":3,"file":"legacy_index.js","sourceRoot":"","sources":["../src/legacy_index.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { addAccountTransferAddress } from '@yuants/transfer';\nimport { decodePath, encodePath, formatTime } from '@yuants/utils';\nimport { defer, from, map, mergeMap, repeat, retry, shareReplay, toArray } from 'rxjs';\nimport { client, isError } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\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\n provideAccountInfoService(\n terminal,\n UNIFIED_ACCOUNT_ID,\n async () => {\n const [accountResult, umAccountResult] = await Promise.all([\n client.getUnifiedAccountBalance(),\n client.getUnifiedUmAccount(),\n ]);\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 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 equity = +usdtAssets.totalWalletBalance + +usdtAssets.umUnrealizedPNL;\n const free = equity - +usdtUmAssets.initialMargin;\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 money: {\n currency: 'USDT',\n equity,\n free,\n },\n positions,\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n addAccountMarket(terminal, { account_id: UNIFIED_ACCOUNT_ID, market_id: 'BINANCE/UNIFIED' });\n }\n\n {\n // spot account info\n\n provideAccountInfoService(terminal, SPOT_ACCOUNT_ID, async () => {\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 return {\n money: {\n currency: 'USDT',\n equity: +(usdtAssets?.free || 0),\n free: +(usdtAssets?.free || 0),\n },\n positions: [],\n };\n });\n\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.server.provideService<IOrder>(\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"]}
|
package/lib/product.js
CHANGED
|
@@ -1,42 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const data_product_1 = require("@yuants/data-product");
|
|
3
4
|
const protocol_1 = require("@yuants/protocol");
|
|
4
|
-
const sql_1 = require("@yuants/sql");
|
|
5
5
|
const utils_1 = require("@yuants/utils");
|
|
6
|
-
const rxjs_1 = require("rxjs");
|
|
7
6
|
const api_1 = require("./api");
|
|
8
7
|
const terminal = protocol_1.Terminal.fromNodeEnv();
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
tableName: 'product',
|
|
39
|
-
conflictKeys: ['datasource_id', 'product_id'],
|
|
40
|
-
writeInterval: 1000,
|
|
8
|
+
// Provide QueryProducts service with the new design
|
|
9
|
+
const cache = (0, data_product_1.provideQueryProductsService)(terminal, 'BINANCE', async (req) => {
|
|
10
|
+
// Directly call the external API to get exchange info
|
|
11
|
+
const exchangeInfo = await api_1.client.getFutureExchangeInfo();
|
|
12
|
+
// Convert symbols to IProduct format
|
|
13
|
+
return exchangeInfo.symbols.map((symbol) => {
|
|
14
|
+
return {
|
|
15
|
+
datasource_id: 'BINANCE',
|
|
16
|
+
product_id: (0, utils_1.encodePath)('usdt-future', symbol.symbol),
|
|
17
|
+
base_currency: symbol.baseAsset,
|
|
18
|
+
quote_currency: symbol.quoteAsset,
|
|
19
|
+
price_step: +`1e-${symbol.pricePrecision}`,
|
|
20
|
+
value_scale: 1,
|
|
21
|
+
volume_step: +`1e-${symbol.quantityPrecision}`,
|
|
22
|
+
name: `${symbol.baseAsset}/${symbol.quoteAsset} PERP`,
|
|
23
|
+
value_scale_unit: '',
|
|
24
|
+
margin_rate: +symbol.requiredMarginPercent / 100,
|
|
25
|
+
value_based_cost: 0,
|
|
26
|
+
volume_based_cost: 0,
|
|
27
|
+
max_position: 0,
|
|
28
|
+
max_volume: 0,
|
|
29
|
+
allow_long: true,
|
|
30
|
+
allow_short: true,
|
|
31
|
+
market_id: 'BINANCE/USDT-FUTURE',
|
|
32
|
+
no_interest_rate: false,
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
}, {
|
|
36
|
+
auto_refresh_interval: 3600000,
|
|
41
37
|
});
|
|
42
38
|
//# sourceMappingURL=product.js.map
|
package/lib/product.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product.js","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"product.js","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":";;AAAA,uDAAoG;AACpG,+CAA4C;AAC5C,yCAA2C;AAC3C,+BAA+B;AAE/B,MAAM,QAAQ,GAAG,mBAAQ,CAAC,WAAW,EAAE,CAAC;AAExC,oDAAoD;AACpD,MAAM,KAAK,GAAG,IAAA,0CAA2B,EACvC,QAAQ,EACR,SAAS,EACT,KAAK,EAAE,GAA0B,EAAuB,EAAE;IACxD,sDAAsD;IACtD,MAAM,YAAY,GAAG,MAAM,YAAM,CAAC,qBAAqB,EAAE,CAAC;IAE1D,qCAAqC;IACrC,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAY,EAAE;QACnD,OAAO;YACL,aAAa,EAAE,SAAS;YACxB,UAAU,EAAE,IAAA,kBAAU,EAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC;YACpD,aAAa,EAAE,MAAM,CAAC,SAAS;YAC/B,cAAc,EAAE,MAAM,CAAC,UAAU;YACjC,UAAU,EAAE,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE;YAC1C,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,CAAC,MAAM,MAAM,CAAC,iBAAiB,EAAE;YAC9C,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,OAAO;YACrD,gBAAgB,EAAE,EAAE;YACpB,WAAW,EAAE,CAAC,MAAM,CAAC,qBAAqB,GAAG,GAAG;YAChD,gBAAgB,EAAE,CAAC;YACnB,iBAAiB,EAAE,CAAC;YACpB,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,qBAAqB;YAChC,gBAAgB,EAAE,KAAK;SACxB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,EACD;IACE,qBAAqB,EAAE,OAAQ;CAChC,CACF,CAAC","sourcesContent":["import { IProduct, IQueryProductsRequest, provideQueryProductsService } from '@yuants/data-product';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath } from '@yuants/utils';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\n// Provide QueryProducts service with the new design\nconst cache = provideQueryProductsService(\n terminal,\n 'BINANCE',\n async (req: IQueryProductsRequest): Promise<IProduct[]> => {\n // Directly call the external API to get exchange info\n const exchangeInfo = await client.getFutureExchangeInfo();\n\n // Convert symbols to IProduct format\n return exchangeInfo.symbols.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 },\n {\n auto_refresh_interval: 3600_000,\n },\n);\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuants/vendor-binance",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.19",
|
|
4
4
|
"bin": "lib/cli.js",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"files": [
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
],
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@yuants/protocol": "0.45.0",
|
|
13
|
-
"@yuants/data-account": "0.
|
|
13
|
+
"@yuants/data-account": "0.5.0",
|
|
14
14
|
"@yuants/utils": "0.8.0",
|
|
15
15
|
"@yuants/data-series": "0.3.29",
|
|
16
16
|
"@yuants/sql": "0.9.8",
|
|
17
|
-
"@yuants/data-product": "0.
|
|
17
|
+
"@yuants/data-product": "0.3.0",
|
|
18
18
|
"@yuants/data-ohlc": "0.3.25",
|
|
19
19
|
"@yuants/data-order": "0.2.14",
|
|
20
20
|
"@yuants/data-interest-rate": "0.1.26",
|
package/temp/package-deps.json
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
{
|
|
2
|
-
"apps/vendor-binance/CHANGELOG.json": "
|
|
3
|
-
"apps/vendor-binance/CHANGELOG.md": "
|
|
2
|
+
"apps/vendor-binance/CHANGELOG.json": "2518cb5b1b2a82e9208bb9fc92ecd7c668f903d8",
|
|
3
|
+
"apps/vendor-binance/CHANGELOG.md": "5cdd513dddbe019d3fec04023bc8b27a8e0c4839",
|
|
4
4
|
"apps/vendor-binance/README.md": "4ab94c08b3d07398aee74c3264a4f87d554d20fa",
|
|
5
5
|
"apps/vendor-binance/api-extractor.json": "62f4fd324425b9a235f0c117975967aab09ced0c",
|
|
6
6
|
"apps/vendor-binance/config/jest.config.json": "4bb17bde3ee911163a3edb36a6eb71491d80b1bd",
|
|
7
7
|
"apps/vendor-binance/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
|
|
8
8
|
"apps/vendor-binance/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
|
|
9
9
|
"apps/vendor-binance/etc/vendor-binance.api.md": "2094b84e9b5e7503f5c42b31fffee8d7db47fe7b",
|
|
10
|
-
"apps/vendor-binance/package.json": "
|
|
10
|
+
"apps/vendor-binance/package.json": "0a07328c21637d9542f86a906fae459b741d5d1b",
|
|
11
11
|
"apps/vendor-binance/src/api.ts": "6278b55e9330d8f49362f9ab4f7df1d9d021b93e",
|
|
12
12
|
"apps/vendor-binance/src/cli.ts": "9bf6b5559a6c6f33da20e74cc6c5d702c60ec891",
|
|
13
13
|
"apps/vendor-binance/src/index.ts": "fdac26f4c4a5093e3d647bddcd3c9998c2de7b4c",
|
|
14
14
|
"apps/vendor-binance/src/interest_rate.ts": "ee82ea130495c151b67850a8b90ca972cb8a8d84",
|
|
15
|
-
"apps/vendor-binance/src/legacy_index.ts": "
|
|
16
|
-
"apps/vendor-binance/src/product.ts": "
|
|
15
|
+
"apps/vendor-binance/src/legacy_index.ts": "afa3d84ef50d5ec097d670542e43d7c48be69fee",
|
|
16
|
+
"apps/vendor-binance/src/product.ts": "ea88fc2e6d0e57ee01d13131b26eb052d8f29fb7",
|
|
17
17
|
"apps/vendor-binance/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
|
|
18
18
|
"apps/vendor-binance/.rush/temp/shrinkwrap-deps.json": "80a5c76b2afe850118bafcd332e4a9d737d2e08e",
|
|
19
19
|
"libraries/protocol/temp/package-deps.json": "ff231b7689ff7d151498b496f70944d4598fcf33",
|
|
20
|
-
"libraries/data-account/temp/package-deps.json": "
|
|
20
|
+
"libraries/data-account/temp/package-deps.json": "2bb2640092ffc415b896930eb47edf7a46bdb0c8",
|
|
21
21
|
"libraries/utils/temp/package-deps.json": "56def945d0e67a9d0ca13447d2333155be0138f2",
|
|
22
22
|
"libraries/data-series/temp/package-deps.json": "dd0d2f8322b484f074ae09c050ceb53fbc1368f4",
|
|
23
23
|
"libraries/sql/temp/package-deps.json": "2da55e5e704b1c1558acab11b6df163744d1b24a",
|
|
24
|
-
"libraries/data-product/temp/package-deps.json": "
|
|
24
|
+
"libraries/data-product/temp/package-deps.json": "7c61716062e33869b203755b1b7db894e713b46f",
|
|
25
25
|
"libraries/data-ohlc/temp/package-deps.json": "6ae0a1249855ee2e1aefd88a66f6d0c4a1f61dd5",
|
|
26
26
|
"libraries/data-order/temp/package-deps.json": "add9a90c23442334f0575f403ef48dc33ceb5fd4",
|
|
27
27
|
"libraries/data-interest-rate/temp/package-deps.json": "246f09881d5bce801a352861086d7e2b90eb5b6b",
|