@yuants/vendor-okx 0.31.11 → 0.32.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 (37) hide show
  1. package/README.md +0 -4
  2. package/dist/index.js +0 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/public-data/ohlc.js +13 -163
  5. package/dist/public-data/ohlc.js.map +1 -1
  6. package/dist/services/interest-ledger-service.js +23 -19
  7. package/dist/services/interest-ledger-service.js.map +1 -1
  8. package/lib/index.d.ts +0 -1
  9. package/lib/index.d.ts.map +1 -1
  10. package/lib/index.js +0 -1
  11. package/lib/index.js.map +1 -1
  12. package/lib/public-data/ohlc.js +12 -162
  13. package/lib/public-data/ohlc.js.map +1 -1
  14. package/lib/services/interest-ledger-service.js +23 -19
  15. package/lib/services/interest-ledger-service.js.map +1 -1
  16. package/package.json +7 -7
  17. package/temp/build/typescript/ts_xKrCYDcc.json +1 -1
  18. package/temp/package-deps.json +8 -11
  19. package/temp/test/jest/haste-map-0104fb5fee08bd97aacd02300cdbf195-f3ddf881f4f21e2e5ae6006d95adf2b1-267deb988b5111321a1cf92c4d020334 +0 -0
  20. package/dist/public-data/interest_rate.js +0 -118
  21. package/dist/public-data/interest_rate.js.map +0 -1
  22. package/dist/utils/provideOHLCFromTimeBackwardService.js +0 -49
  23. package/dist/utils/provideOHLCFromTimeBackwardService.js.map +0 -1
  24. package/dist/utils/provideSeriesFromTimeBackwardService.js +0 -59
  25. package/dist/utils/provideSeriesFromTimeBackwardService.js.map +0 -1
  26. package/lib/public-data/interest_rate.d.ts +0 -2
  27. package/lib/public-data/interest_rate.d.ts.map +0 -1
  28. package/lib/public-data/interest_rate.js +0 -120
  29. package/lib/public-data/interest_rate.js.map +0 -1
  30. package/lib/utils/provideOHLCFromTimeBackwardService.d.ts +0 -24
  31. package/lib/utils/provideOHLCFromTimeBackwardService.d.ts.map +0 -1
  32. package/lib/utils/provideOHLCFromTimeBackwardService.js +0 -53
  33. package/lib/utils/provideOHLCFromTimeBackwardService.js.map +0 -1
  34. package/lib/utils/provideSeriesFromTimeBackwardService.d.ts +0 -22
  35. package/lib/utils/provideSeriesFromTimeBackwardService.d.ts.map +0 -1
  36. package/lib/utils/provideSeriesFromTimeBackwardService.js +0 -63
  37. package/lib/utils/provideSeriesFromTimeBackwardService.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ohlc.js","sourceRoot":"","sources":["../../src/public-data/ohlc.ts"],"names":[],"mappings":"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","sourcesContent":["import { IOHLC } from '@yuants/data-ohlc';\nimport { createSeriesProvider } from '@yuants/data-series';\nimport { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { convertDurationToOffset, decodePath, encodePath, formatTime } from '@yuants/utils';\nimport { firstValueFrom, map, timer } from 'rxjs';\nimport { getHistoryCandles } from '../api/public-api';\nimport { provideOHLCFromTimeBackwardService } from '../utils/provideOHLCFromTimeBackwardService';\nimport { useOHLC } from '../ws';\n\nconst terminal = Terminal.fromNodeEnv();\n\n// 时间粒度,默认值1m\n// 如 [1m/3m/5m/15m/30m/1H/2H/4H]\n// 香港时间开盘价k线:[6H/12H/1D/1W/1M]\n// UTC时间开盘价k线:[6Hutc/12Hutc/1Dutc/1Wutc/1Mutc]\n\nconst DURATION_TO_OKX_BAR_TYPE: Record<string, string> = {\n PT1M: '1m',\n PT3M: '3m',\n PT5M: '5m',\n PT15M: '15m',\n PT30M: '30m',\n\n PT1H: '1H',\n PT2H: '2H',\n PT4H: '4H',\n PT6H: '6H',\n PT12H: '12H',\n\n P1D: '1D',\n P1W: '1W',\n P1M: '1M',\n};\n\nconst DURATION_TO_OKX_CANDLE_TYPE: Record<string, string> = {\n PT1M: 'candle1m',\n PT3M: 'candle3m',\n PT5M: 'candle5m',\n PT15M: 'candle15m',\n PT30M: 'candle30m',\n\n PT1H: 'candle1H',\n PT2H: 'candle2H',\n PT4H: 'candle4H',\n PT6H: 'candle6H',\n PT12H: 'candle12H',\n\n P1D: 'candle1D',\n P1W: 'candle1W',\n P1M: 'candle1M',\n};\n\ntype IOHLCV2WriteRow = Pick<\n IOHLC,\n 'series_id' | 'created_at' | 'closed_at' | 'open' | 'high' | 'low' | 'close' | 'volume' | 'open_interest'\n> & { __origin: IOHLC };\n\nconst OHLC_V2_WRITE_COLUMNS: Array<keyof IOHLCV2WriteRow> = [\n 'series_id',\n 'created_at',\n 'closed_at',\n 'open',\n 'high',\n 'low',\n 'close',\n 'volume',\n 'open_interest',\n];\n\ncreateSeriesProvider<IOHLC>(terminal, {\n tableName: 'ohlc',\n series_id_prefix_parts: ['OKX'],\n reversed: true,\n serviceOptions: { concurrent: 1 },\n queryFn: async function* ({ series_id, ended_at }) {\n const [datasource_id, product_id, duration] = decodePath(series_id);\n const offset = convertDurationToOffset(duration);\n if (!datasource_id) {\n throw 'datasource_id is required';\n }\n if (!product_id) {\n throw 'product_id is required';\n }\n if (!offset) {\n throw 'duration is invalid';\n }\n const [instType, instId] = decodePath(product_id);\n if (!instId) {\n throw `invalid product_id: ${product_id}`;\n }\n\n const bar = DURATION_TO_OKX_BAR_TYPE[duration];\n if (!bar) {\n throw `unsupported duration: ${duration}`;\n }\n\n let currentStartTime = ended_at;\n\n while (true) {\n // 向前翻页,时间降序,不含 after 时间点\n const res = await getHistoryCandles({\n instId,\n bar,\n after: `${currentStartTime}`,\n limit: '100',\n });\n if (res.code !== '0') {\n throw `API failed: ${res.code} ${res.msg}`;\n }\n if (res.data.length === 0) break;\n currentStartTime = +res.data[res.data.length - 1][0];\n const data = res.data.map(\n (x): IOHLC => ({\n series_id,\n datasource_id,\n product_id,\n duration,\n created_at: formatTime(+x[0]),\n closed_at: formatTime(+x[0] + offset),\n open: x[1],\n high: x[2],\n low: x[3],\n close: x[4],\n volume: x[5],\n open_interest: '0',\n }),\n );\n yield data;\n await firstValueFrom(timer(1000));\n }\n },\n});\n\nterminal.channel.publishChannel('ohlc', { pattern: `^OKX/` }, (series_id) => {\n const [datasource_id, product_id, duration] = decodePath(series_id);\n const [instType, instId] = decodePath(product_id);\n const offset = convertDurationToOffset(duration);\n if (!datasource_id) {\n throw 'datasource_id is required';\n }\n if (!product_id) {\n throw 'product_id is required';\n }\n if (!instType || !instId) {\n throw `invalid product_id: ${product_id}`;\n }\n if (!offset) {\n throw 'duration is invalid';\n }\n const series_id_v2 = `${encodePath(datasource_id, instType, instId)}/${duration}`;\n const candleType = DURATION_TO_OKX_CANDLE_TYPE[duration];\n console.info(formatTime(Date.now()), `subscribe`, series_id, product_id);\n\n return useOHLC(candleType, instId).pipe(\n map((data): IOHLC => {\n const created_at = Number(data[0][0]);\n const closed_at = created_at + offset;\n const open = data[0][1];\n const high = data[0][2];\n const low = data[0][3];\n const close = data[0][4];\n const volume = data[0][5];\n return {\n closed_at: formatTime(closed_at),\n created_at: formatTime(created_at),\n open,\n high,\n low,\n close,\n series_id,\n datasource_id,\n duration,\n product_id,\n volume,\n open_interest: '0',\n };\n }),\n map(\n (x): IOHLCV2WriteRow => ({\n __origin: x,\n series_id: series_id_v2,\n created_at: x.created_at,\n closed_at: x.closed_at,\n open: x.open,\n high: x.high,\n low: x.low,\n close: x.close,\n volume: x.volume,\n open_interest: x.open_interest,\n }),\n ),\n writeToSQL({\n tableName: 'ohlc_v2',\n columns: OHLC_V2_WRITE_COLUMNS,\n conflictKeys: ['series_id', 'created_at'],\n writeInterval: 1000,\n terminal,\n }),\n map((x) => x.__origin),\n writeToSQL({\n tableName: 'ohlc',\n conflictKeys: ['series_id', 'created_at'],\n writeInterval: 1000,\n terminal,\n }),\n );\n});\n\nprovideOHLCFromTimeBackwardService({\n terminal,\n datasource_id: 'OKX',\n supported_durations: Object.keys(DURATION_TO_OKX_BAR_TYPE),\n queryFn: async ({ series_id, datasource_id, product_id, duration, offset, time }) => {\n const [instType, instId] = decodePath(product_id);\n if (!instId) {\n throw `invalid product_id: ${product_id}`;\n }\n\n const bar = DURATION_TO_OKX_BAR_TYPE[duration];\n if (!bar) {\n throw `unsupported duration: ${duration}`;\n }\n\n // 从指定时间点向过去获取一页数据\n const res = await getHistoryCandles({\n instId,\n bar,\n after: `${new Date(time).getTime()}`, // 不包含该时间点 (标准的右开)\n limit: `300`,\n });\n\n if (res.code !== '0') {\n throw `API failed: ${res.code} ${res.msg}`;\n }\n\n return res.data.map(\n (x): IOHLC => ({\n series_id,\n datasource_id,\n product_id,\n duration,\n created_at: formatTime(+x[0]),\n closed_at: formatTime(+x[0] + offset),\n open: x[1],\n high: x[2],\n low: x[3],\n close: x[4],\n volume: x[5],\n open_interest: '0',\n }),\n );\n },\n serviceOptions: {\n // Rate limit: 20 requests per 2 seconds\n egress_token_capacity: 20,\n egress_token_refill_interval: 2000,\n },\n});\n"]}
1
+ {"version":3,"file":"ohlc.js","sourceRoot":"","sources":["../../src/public-data/ohlc.ts"],"names":[],"mappings":"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","sourcesContent":["import { decodeOHLCSeriesId, encodeOHLCSeriesId, IOHLC } from '@yuants/data-ohlc';\nimport { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { convertDurationToOffset, decodePath, encodePath, formatTime } from '@yuants/utils';\nimport { map } from 'rxjs';\nimport { useOHLC } from '../ws';\n\nconst terminal = Terminal.fromNodeEnv();\n\n// 时间粒度,默认值1m\n// 如 [1m/3m/5m/15m/30m/1H/2H/4H]\n// 香港时间开盘价k线:[6H/12H/1D/1W/1M]\n// UTC时间开盘价k线:[6Hutc/12Hutc/1Dutc/1Wutc/1Mutc]\n\nconst DURATION_TO_OKX_CANDLE_TYPE: Record<string, string> = {\n PT1M: 'candle1m',\n PT3M: 'candle3m',\n PT5M: 'candle5m',\n PT15M: 'candle15m',\n PT30M: 'candle30m',\n\n PT1H: 'candle1H',\n PT2H: 'candle2H',\n PT4H: 'candle4H',\n PT6H: 'candle6H',\n PT12H: 'candle12H',\n\n P1D: 'candle1D',\n P1W: 'candle1W',\n P1M: 'candle1M',\n};\n\nconst OHLC_V2_WRITE_COLUMNS: Array<keyof IOHLC> = [\n 'series_id',\n 'created_at',\n 'closed_at',\n 'open',\n 'high',\n 'low',\n 'close',\n 'volume',\n 'open_interest',\n];\n\nterminal.channel.publishChannel('ohlc', { pattern: `^OKX/` }, (series_id) => {\n const { product_id, duration } = decodeOHLCSeriesId(series_id);\n const [datasource_id, instType, instId] = decodePath(product_id);\n const offset = convertDurationToOffset(duration);\n if (!datasource_id) {\n throw 'datasource_id is required';\n }\n if (!instType || !instId) {\n throw `invalid product_id: ${product_id}`;\n }\n if (!offset) {\n throw 'duration is invalid';\n }\n const product_id_path = encodePath(datasource_id, instType, instId);\n const candleType = DURATION_TO_OKX_CANDLE_TYPE[duration];\n if (!candleType) {\n throw `unsupported duration: ${duration}`;\n }\n const normalized_series_id = encodeOHLCSeriesId(product_id_path, duration);\n console.info(formatTime(Date.now()), `subscribe`, normalized_series_id, product_id_path);\n\n return useOHLC(candleType, instId).pipe(\n map((data): IOHLC => {\n const created_at = Number(data[0][0]);\n const closed_at = created_at + offset;\n const open = data[0][1];\n const high = data[0][2];\n const low = data[0][3];\n const close = data[0][4];\n const volume = data[0][5];\n return {\n closed_at: formatTime(closed_at),\n created_at: formatTime(created_at),\n open,\n high,\n low,\n close,\n series_id: normalized_series_id,\n datasource_id,\n duration,\n product_id: product_id_path,\n volume,\n open_interest: '0',\n };\n }),\n writeToSQL({\n tableName: 'ohlc_v2',\n columns: OHLC_V2_WRITE_COLUMNS,\n conflictKeys: ['series_id', 'created_at'],\n writeInterval: 1000,\n terminal,\n }),\n );\n});\n"]}
@@ -8,28 +8,32 @@ const terminal = protocol_1.Terminal.fromNodeEnv();
8
8
  const WINDOW_MS = 365 * 24 * 3600000;
9
9
  const fetchInterestRateLedgerBackward = async (req) => {
10
10
  var _a;
11
- const params = {};
12
- params.end = req.time.toString();
13
- params.begin = (req.time - WINDOW_MS).toString();
14
- params.limit = 100;
15
- params.type = req.ledger_type;
16
- const res = await (0, private_api_1.getAccountBillsArchive)(req.credential.payload, params);
17
- return ((_a = res.data) !== null && _a !== void 0 ? _a : [])
18
- .map((v) => {
19
- const ms = Number(v.ts);
20
- return {
21
- id: v.billId,
22
- product_id: (0, utils_1.encodePath)('OKX', v.instType, v.instId),
23
- amount: v.balChg,
24
- account_id: req.account_id,
25
- currency: v.ccy,
26
- created_at: (0, utils_1.formatTime)(ms),
27
- };
28
- })
29
- .filter((x) => Date.parse(x.created_at) <= req.time);
11
+ if (req.ledger_type === 'FUNDING_FEE') {
12
+ const params = {};
13
+ params.end = req.time.toString();
14
+ params.begin = (req.time - WINDOW_MS).toString();
15
+ params.limit = 100;
16
+ params.type = '8';
17
+ const res = await (0, private_api_1.getAccountBillsArchive)(req.credential.payload, params);
18
+ return ((_a = res.data) !== null && _a !== void 0 ? _a : [])
19
+ .map((v) => {
20
+ const ms = Number(v.ts);
21
+ return {
22
+ id: v.billId,
23
+ product_id: (0, utils_1.encodePath)('OKX', v.instType, v.instId),
24
+ amount: v.balChg,
25
+ account_id: req.account_id,
26
+ currency: v.ccy,
27
+ created_at: (0, utils_1.formatTime)(ms),
28
+ };
29
+ })
30
+ .filter((x) => Date.parse(x.created_at) <= req.time);
31
+ }
32
+ return [];
30
33
  };
31
34
  (0, exchange_1.provideInterestLedgerService)(terminal, {
32
35
  direction: 'backward',
33
36
  type: 'OKX',
37
+ ledger_type: ['FUNDING_FEE'],
34
38
  }, fetchInterestRateLedgerBackward);
35
39
  //# sourceMappingURL=interest-ledger-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interest-ledger-service.js","sourceRoot":"","sources":["../../src/services/interest-ledger-service.ts"],"names":[],"mappings":";;AACA,+CAA4C;AAC5C,yCAAuD;AACvD,+CAAgE;AAChE,oDAA4D;AAO5D,MAAM,QAAQ,GAAG,mBAAQ,CAAC,WAAW,EAAE,CAAC;AAExC,MAAM,SAAS,GAAG,GAAG,GAAG,EAAE,GAAG,OAAQ,CAAC;AAEtC,MAAM,+BAA+B,GAAG,KAAK,EAAE,GAK9C,EAA8B,EAAE;;IAC/B,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjD,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;IACnB,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,IAAA,oCAAsB,EAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzE,OAAO,CAAC,MAAA,GAAG,CAAC,IAAI,mCAAI,EAAE,CAAC;SACpB,GAAG,CAAC,CAAC,CAAC,EAAmB,EAAE;QAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,MAAM;YACZ,UAAU,EAAE,IAAA,kBAAU,EAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;YACnD,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,QAAQ,EAAE,CAAC,CAAC,GAAG;YACf,UAAU,EAAE,IAAA,kBAAU,EAAC,EAAE,CAAC;SACR,CAAC;IACvB,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAW,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,IAAA,uCAA4B,EAC1B,QAAQ,EACR;IACE,SAAS,EAAE,UAAU;IACrB,IAAI,EAAE,KAAK;CACZ,EACD,+BAA+B,CAChC,CAAC","sourcesContent":["import { IInterestLedger } from '@yuants/data-interest-rate';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath, formatTime } from '@yuants/utils';\nimport { provideInterestLedgerService } from '@yuants/exchange';\nimport { getAccountBillsArchive } from '../api/private-api';\n\ninterface IExchangeCredential {\n type: string;\n payload: any;\n}\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst WINDOW_MS = 365 * 24 * 3600_000;\n\nconst fetchInterestRateLedgerBackward = async (req: {\n credential: IExchangeCredential;\n account_id: string;\n time: number;\n ledger_type: string;\n}): Promise<IInterestLedger[]> => {\n const params: Record<string, string | number> = {};\n params.end = req.time.toString();\n params.begin = (req.time - WINDOW_MS).toString();\n params.limit = 100;\n params.type = req.ledger_type;\n const res = await getAccountBillsArchive(req.credential.payload, params);\n return (res.data ?? [])\n .map((v): IInterestLedger => {\n const ms = Number(v.ts);\n return {\n id: v.billId,\n product_id: encodePath('OKX', v.instType, v.instId),\n amount: v.balChg,\n account_id: req.account_id,\n currency: v.ccy,\n created_at: formatTime(ms),\n } as IInterestLedger;\n })\n .filter((x) => Date.parse(x.created_at!) <= req.time);\n};\n\nprovideInterestLedgerService(\n terminal,\n {\n direction: 'backward',\n type: 'OKX',\n },\n fetchInterestRateLedgerBackward,\n);\n"]}
1
+ {"version":3,"file":"interest-ledger-service.js","sourceRoot":"","sources":["../../src/services/interest-ledger-service.ts"],"names":[],"mappings":";;AACA,+CAA4C;AAC5C,yCAAuD;AACvD,+CAAgE;AAChE,oDAA4D;AAO5D,MAAM,QAAQ,GAAG,mBAAQ,CAAC,WAAW,EAAE,CAAC;AAExC,MAAM,SAAS,GAAG,GAAG,GAAG,EAAE,GAAG,OAAQ,CAAC;AAEtC,MAAM,+BAA+B,GAAG,KAAK,EAAE,GAK9C,EAA8B,EAAE;;IAC/B,IAAI,GAAG,CAAC,WAAW,KAAK,aAAa,EAAE,CAAC;QACtC,MAAM,MAAM,GAAoC,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjD,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;QACnB,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,IAAA,oCAAsB,EAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzE,OAAO,CAAC,MAAA,GAAG,CAAC,IAAI,mCAAI,EAAE,CAAC;aACpB,GAAG,CAAC,CAAC,CAAC,EAAmB,EAAE;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxB,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,MAAM;gBACZ,UAAU,EAAE,IAAA,kBAAU,EAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;gBACnD,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,QAAQ,EAAE,CAAC,CAAC,GAAG;gBACf,UAAU,EAAE,IAAA,kBAAU,EAAC,EAAE,CAAC;aACR,CAAC;QACvB,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAW,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,IAAA,uCAA4B,EAC1B,QAAQ,EACR;IACE,SAAS,EAAE,UAAU;IACrB,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,CAAC,aAAa,CAAC;CAC7B,EACD,+BAA+B,CAChC,CAAC","sourcesContent":["import { IInterestLedger } from '@yuants/data-interest-rate';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath, formatTime } from '@yuants/utils';\nimport { provideInterestLedgerService } from '@yuants/exchange';\nimport { getAccountBillsArchive } from '../api/private-api';\n\ninterface IExchangeCredential {\n type: string;\n payload: any;\n}\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst WINDOW_MS = 365 * 24 * 3600_000;\n\nconst fetchInterestRateLedgerBackward = async (req: {\n credential: IExchangeCredential;\n account_id: string;\n time: number;\n ledger_type: string;\n}): Promise<IInterestLedger[]> => {\n if (req.ledger_type === 'FUNDING_FEE') {\n const params: Record<string, string | number> = {};\n params.end = req.time.toString();\n params.begin = (req.time - WINDOW_MS).toString();\n params.limit = 100;\n params.type = '8';\n const res = await getAccountBillsArchive(req.credential.payload, params);\n return (res.data ?? [])\n .map((v): IInterestLedger => {\n const ms = Number(v.ts);\n return {\n id: v.billId,\n product_id: encodePath('OKX', v.instType, v.instId),\n amount: v.balChg,\n account_id: req.account_id,\n currency: v.ccy,\n created_at: formatTime(ms),\n } as IInterestLedger;\n })\n .filter((x) => Date.parse(x.created_at!) <= req.time);\n }\n return [];\n};\n\nprovideInterestLedgerService(\n terminal,\n {\n direction: 'backward',\n type: 'OKX',\n ledger_type: ['FUNDING_FEE'],\n },\n fetchInterestRateLedgerBackward,\n);\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuants/vendor-okx",
3
- "version": "0.31.11",
3
+ "version": "0.32.1",
4
4
  "main": "lib/index.js",
5
5
  "files": [
6
6
  "dist",
@@ -10,20 +10,20 @@
10
10
  "dependencies": {
11
11
  "rxjs": "~7.5.6",
12
12
  "ws": "~8.8.1",
13
- "@yuants/protocol": "0.54.1",
14
13
  "@yuants/transfer": "0.2.48",
15
- "@yuants/data-order": "0.7.9",
16
14
  "@yuants/data-account": "0.11.8",
15
+ "@yuants/protocol": "0.54.1",
16
+ "@yuants/data-order": "0.7.9",
17
17
  "@yuants/utils": "0.19.4",
18
18
  "@yuants/cache": "0.3.12",
19
19
  "@yuants/sql": "0.9.39",
20
- "@yuants/data-product": "0.5.9",
21
20
  "@yuants/data-series": "0.3.61",
22
21
  "@yuants/data-ohlc": "0.6.4",
22
+ "@yuants/data-product": "0.5.9",
23
23
  "@yuants/data-interest-rate": "0.2.8",
24
24
  "@yuants/data-quote": "0.4.8",
25
25
  "@yuants/data-trade": "0.1.30",
26
- "@yuants/exchange": "0.8.11"
26
+ "@yuants/exchange": "0.8.12"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@microsoft/api-extractor": "~7.55.2",
@@ -35,8 +35,8 @@
35
35
  "typescript": "~5.9.3",
36
36
  "ts-node": "~10.9.2",
37
37
  "@types/ws": "~8.5.3",
38
- "@yuants/tool-kit": "0.2.2",
39
- "@yuants/extension": "0.2.40"
38
+ "@yuants/extension": "0.2.40",
39
+ "@yuants/tool-kit": "0.2.2"
40
40
  },
41
41
  "publishConfig": {
42
42
  "registry": "https://registry.npmjs.org",