@yuants/vendor-aster 0.9.3 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/client.js +35 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/private-api.js +147 -15
- package/dist/api/private-api.js.map +1 -1
- package/dist/api/public-api.js +114 -11
- package/dist/api/public-api.js.map +1 -1
- package/dist/services/markets/quote.js +2 -1
- package/dist/services/markets/quote.js.map +1 -1
- package/lib/api/client.d.ts +7 -0
- package/lib/api/client.d.ts.map +1 -0
- package/lib/api/client.js +38 -0
- package/lib/api/client.js.map +1 -0
- package/lib/api/private-api.d.ts +59 -23
- package/lib/api/private-api.d.ts.map +1 -1
- package/lib/api/private-api.js +157 -14
- package/lib/api/private-api.js.map +1 -1
- package/lib/api/public-api.d.ts +33 -12
- package/lib/api/public-api.d.ts.map +1 -1
- package/lib/api/public-api.js +122 -11
- package/lib/api/public-api.js.map +1 -1
- package/lib/services/markets/quote.js +2 -1
- package/lib/services/markets/quote.js.map +1 -1
- package/package.json +1 -1
- package/temp/package-deps.json +8 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../../../src/services/markets/quote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAe,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EACL,UAAU,EACV,aAAa,EACb,SAAS,EACT,KAAK,EACL,UAAU,EACV,MAAM,EACN,IAAI,EACJ,OAAO,EACP,GAAG,EACH,KAAK,EACL,QAAQ,EACR,EAAE,EACF,MAAM,EACN,KAAK,EACL,IAAI,EACJ,WAAW,EACX,SAAS,EACT,KAAK,GACN,MAAM,MAAM,CAAC;AACd,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;AACxC,MAAM,yCAAyC,GAAG,GAAG,CAAC;AACtD,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAO,CAAC;AAE1G,MAAM,YAAY,GAAG,CAAC,QAAiB,EAAE,WAAoB,EAAE,EAAE;IAC/D,QAAQ,QAAQ,EAAE;QAChB,KAAK,QAAQ;YACX,OAAO,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,CAAC,CAAC,GAAG,IAAK,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,CAAC,CAAC,GAAG,KAAM,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,CAAC,CAAC,GAAG,OAAS,CAAC;QACxC,KAAK,KAAK;YACR,OAAO,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,CAAC,CAAC,GAAG,QAAU,CAAC;QACzC;YACE,OAAO,SAAS,CAAC;KACpB;AACH,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,UAAyC,EAAE,UAAkB,EAAE,EAAE;IAC7F,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,EAAE,EAAE;QACnC,IAAI,IAAI,CAAC,aAAa,KAAK,gBAAgB,IAAI,IAAI,CAAC,aAAa,KAAK,cAAc;YAAE,SAAS;QAC/F,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,QAAQ,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;YAAE,SAAS;QAC9D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;KAC7C;IACD,IAAI,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,UAAU,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,WAAW,CACnC,KAAK,EAAE,MAAc,EAAE,EAAE;IACvB,IAAI;QACF,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,SAAS,CAAC;KAClB;AACH,CAAC,EACD,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAC9B,CAAC;AAEF,MAAM,gBAAgB,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAClE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,yCAAyC,CAAC,CAAC,EAC/F,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,IAAI,CAAC,gEAAgE,EAAE,GAAG,CAAC,CAAC;IACpF,OAAO,EAAE,CAAC,yCAAyC,CAAC,CAAC;AACvD,CAAC,CAAC,EACF,SAAS,CAAC,yCAAyC,CAAC,EACpD,KAAK,CAAC,EAAE,KAAK,EAAE,KAAM,EAAE,CAAC,EACxB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;AAEF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CACxD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACvB,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACtB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;AAEF,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CACnC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EACpC,GAAG,CACD,CAAC,MAAM,EAAmB,EAAE,CAAC,CAAC;IAC5B,aAAa,EAAE,OAAO;IACtB,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IACtD,UAAU,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE;IAC7B,SAAS,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE;IAC5B,SAAS,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE;CAC7B,CAAC,CACH,CACF,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAC9B,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAC9C,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;AAEF,iEAAiE;AACjE,oFAAoF;AACpF,MAAM,yBAAyB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB;IACrE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IAC/C,CAAC,CAAC,KAAM,CAAC,CAAC,iCAAiC;AAE7C,MAAM,qBAAqB,GAAG,aAAa,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAC/E,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE,CACxC,KAAK,CAAC,GAAG,EAAE;IACT,OAAO,CAAC,IAAI,CACV,uCAAuC,OAAO,CAAC,MAAM,iBAAiB,eAAe,aAAa,CACnG,CAAC;IACF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACvB,SAAS,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAC1B,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC/C,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EACrD,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACrB,MAAM;QACN,YAAY,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,GAAG;QACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC,EACH,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE;QACjB,OAAO,CAAC,IAAI,CAAC,qCAAqC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC,CACH,CACF,CACF,CAAC;AACJ,CAAC,CAAC,CACH,EACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAClB,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAClD,CAAC;AAEF,sDAAsD;AACtD,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,IAAI,CACvD,GAAG,CACD,CAAC,IAAI,EAAmB,EAAE,CAAC,CAAC;IAC1B,aAAa,EAAE,OAAO;IACtB,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC;IACrD,aAAa,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY;CAClC,CAAC,CACH,CACF,CAAC;AAEF,qFAAqF;AACrF,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAC9D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;IACX,gDAAgD;IAChD,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC,EACF,MAAM,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,EAC5C,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACtB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;AAEF,4CAA4C;AAC5C,MAAM,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAC7C,QAAQ,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAChD,GAAG,CACD,CAAC,WAAW,EAAmB,EAAE,CAAC,CAAC;IACjC,aAAa,EAAE,OAAO;IACtB,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;IAC3D,kBAAkB,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS;IAChG,mBAAmB,EAAE,WAAW,CAAC,eAAe;CACjD,CAAC,CACH,CACF,CAAC;AAEF,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,qBAAqB,CAAC,CAAC,IAAI,CACxF,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EACpC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAClB,MAAM,CAAC,IAAI,CACT,IAAI,CACF,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CACX,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;IACtB,aAAa,EAAE,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC,GAAG;CACvB,CAAC,EACJ,EAAqB,CACtB,CACF,CACF,EACD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;AAEF,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,EAAE;IAC7C,MAAM;SACH,IAAI,CACH,oBAAoB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC1C,UAAU,CAAC;QACT,QAAQ;QACR,SAAS,EAAE,OAAO;QAClB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC;KAC9C,CAAC,CACH;SACA,SAAS,EAAE,CAAC;IAEf,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE;QAC9E,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;SACtD;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;CACJ","sourcesContent":["import { createCache } from '@yuants/cache';\nimport { setMetricsQuoteState, type IQuote } from '@yuants/data-quote';\nimport { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { decodePath, encodePath } from '@yuants/utils';\nimport {\n catchError,\n combineLatest,\n concatMap,\n defer,\n exhaustMap,\n filter,\n from,\n groupBy,\n map,\n merge,\n mergeMap,\n of,\n repeat,\n retry,\n scan,\n shareReplay,\n startWith,\n timer,\n} from 'rxjs';\nimport {\n getFApiV1ExchangeInfo,\n getFApiV1OpenInterest,\n getFApiV1PremiumIndex,\n getFApiV1TickerPrice,\n IAsterRateLimit,\n} from '../../api/public-api';\n\nconst terminal = Terminal.fromNodeEnv();\nconst DEFAULT_OPEN_INTEREST_REQUEST_INTERVAL_MS = 500;\nconst OPEN_INTEREST_TTL = process.env.OPEN_INTEREST_TTL ? Number(process.env.OPEN_INTEREST_TTL) : 120_000;\n\nconst toIntervalMs = (interval?: string, intervalNum?: number) => {\n switch (interval) {\n case 'SECOND':\n return (intervalNum ?? 1) * 1_000;\n case 'MINUTE':\n return (intervalNum ?? 1) * 60_000;\n case 'HOUR':\n return (intervalNum ?? 1) * 3_600_000;\n case 'DAY':\n return (intervalNum ?? 1) * 86_400_000;\n default:\n return undefined;\n }\n};\n\nconst getRequestIntervalMs = (rateLimits: IAsterRateLimit[] | undefined, fallbackMs: number) => {\n const intervals: number[] = [];\n for (const item of rateLimits ?? []) {\n if (item.rateLimitType !== 'REQUEST_WEIGHT' && item.rateLimitType !== 'RAW_REQUESTS') continue;\n const duration = toIntervalMs(item.interval, item.intervalNum);\n const limit = item.limit;\n if (duration == null || limit == null || limit <= 0) continue;\n intervals.push(Math.ceil(duration / limit));\n }\n if (!intervals.length) return fallbackMs;\n return Math.max(fallbackMs, Math.max(...intervals));\n};\n\nconst openInterestCache = createCache<string>(\n async (symbol: string) => {\n try {\n const data = await getFApiV1OpenInterest({ symbol });\n return data.openInterest;\n } catch (error) {\n console.warn('getFApiV1OpenInterest failed', symbol, error);\n return undefined;\n }\n },\n { expire: OPEN_INTEREST_TTL },\n);\n\nconst requestInterval$ = defer(() => getFApiV1ExchangeInfo({})).pipe(\n map((info) => getRequestIntervalMs(info.rateLimits, DEFAULT_OPEN_INTEREST_REQUEST_INTERVAL_MS)),\n catchError((err) => {\n console.warn('getFApiV1ExchangeInfo failed when calculating request interval', err);\n return of(DEFAULT_OPEN_INTEREST_REQUEST_INTERVAL_MS);\n }),\n startWith(DEFAULT_OPEN_INTEREST_REQUEST_INTERVAL_MS),\n retry({ delay: 60_000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nconst ticker$ = defer(() => getFApiV1TickerPrice({})).pipe(\n map((tickers) => (Array.isArray(tickers) ? tickers : [])),\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nconst quoteFromTicker$ = ticker$.pipe(\n mergeMap((tickers) => tickers || []),\n map(\n (ticker): Partial<IQuote> => ({\n datasource_id: 'ASTER',\n product_id: encodePath('ASTER', 'PERP', ticker.symbol),\n last_price: `${ticker.price}`,\n bid_price: `${ticker.price}`,\n ask_price: `${ticker.price}`,\n }),\n ),\n);\n\n// Extract unique symbols from ticker stream\nconst symbolList$ = ticker$.pipe(\n map((tickers) => tickers.map((t) => t.symbol)),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\n// Create a controlled rotation stream for fetching open interest\n// This cycles through all symbols with proper delays, independent of ticker updates\nconst OPEN_INTEREST_CYCLE_DELAY = process.env.OPEN_INTEREST_CYCLE_DELAY\n ? Number(process.env.OPEN_INTEREST_CYCLE_DELAY)\n : 60_000; // 60 seconds between full cycles\n\nconst openInterestRotation$ = combineLatest([symbolList$, requestInterval$]).pipe(\n exhaustMap(([symbols, requestInterval]) =>\n defer(() => {\n console.info(\n `Starting open interest rotation for ${symbols.length} symbols with ${requestInterval}ms interval`,\n );\n return from(symbols).pipe(\n concatMap((symbol, index) =>\n (index > 0 ? timer(requestInterval) : of(0)).pipe(\n mergeMap(() => from(openInterestCache.query(symbol))),\n map((openInterest) => ({\n symbol,\n openInterest: openInterest ?? '0',\n timestamp: Date.now(),\n })),\n catchError((err) => {\n console.warn(`Failed to fetch open interest for ${symbol}:`, err);\n return of(undefined);\n }),\n ),\n ),\n );\n }),\n ),\n filter((x) => !!x),\n shareReplay({ bufferSize: 1000, refCount: true }), // Cache open interest for all symbols\n);\n\n// Convert open interest rotation data to quote format\nconst quoteFromOpenInterest$ = openInterestRotation$.pipe(\n map(\n (data): Partial<IQuote> => ({\n datasource_id: 'ASTER',\n product_id: encodePath('ASTER', 'PERP', data?.symbol),\n open_interest: data?.openInterest,\n }),\n ),\n);\n\n// Funding rate stream - fetches all symbols at once (more efficient than per-symbol)\nconst fundingRate$ = defer(() => getFApiV1PremiumIndex({})).pipe(\n map((data) => {\n // Handle both single object and array responses\n const premiumDataArray = Array.isArray(data) ? data : [data];\n return premiumDataArray;\n }),\n repeat({ delay: OPEN_INTEREST_CYCLE_DELAY }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\n// Convert funding rate data to quote format\nconst quoteFromFundingRate$ = fundingRate$.pipe(\n mergeMap((premiumDataArray) => premiumDataArray),\n map(\n (premiumData): Partial<IQuote> => ({\n datasource_id: 'ASTER',\n product_id: encodePath('ASTER', 'PERP', premiumData.symbol),\n interest_rate_long: premiumData.lastFundingRate ? `${-+premiumData.lastFundingRate}` : undefined,\n interest_rate_short: premiumData.lastFundingRate,\n }),\n ),\n);\n\nconst quote$ = merge(quoteFromTicker$, quoteFromOpenInterest$, quoteFromFundingRate$).pipe(\n groupBy((quote) => quote.product_id),\n mergeMap((group$) =>\n group$.pipe(\n scan(\n (acc, cur) =>\n Object.assign(acc, cur, {\n datasource_id: 'ASTER',\n product_id: group$.key,\n }),\n {} as Partial<IQuote>,\n ),\n ),\n ),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nif (process.env.WRITE_QUOTE_TO_SQL === 'true') {\n quote$\n .pipe(\n setMetricsQuoteState(terminal.terminal_id),\n writeToSQL({\n terminal,\n tableName: 'quote',\n writeInterval: 1000,\n conflictKeys: ['datasource_id', 'product_id'],\n }),\n )\n .subscribe();\n\n terminal.channel.publishChannel('quote', { pattern: '^ASTER/' }, (channel_id) => {\n const [datasourceId, productId] = decodePath(channel_id);\n if (!datasourceId || !productId) {\n throw new Error(`Invalid channel_id: ${channel_id}`);\n }\n return quote$.pipe(filter((quote) => quote.product_id === productId));\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../../../src/services/markets/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCache } from '@yuants/cache';\nimport { setMetricsQuoteState, type IQuote } from '@yuants/data-quote';\nimport { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { decodePath, encodePath } from '@yuants/utils';\nimport {\n catchError,\n combineLatest,\n concatMap,\n defer,\n exhaustMap,\n filter,\n from,\n groupBy,\n map,\n merge,\n mergeMap,\n of,\n repeat,\n retry,\n scan,\n shareReplay,\n startWith,\n timer,\n} from 'rxjs';\nimport {\n getFApiV1ExchangeInfo,\n getFApiV1OpenInterest,\n getFApiV1PremiumIndex,\n getFApiV1TickerPrice,\n IAsterRateLimit,\n} from '../../api/public-api';\n\nconst terminal = Terminal.fromNodeEnv();\nconst DISABLE_OPEN_INTEREST = process.env.DISABLE_OPEN_INTEREST === 'true';\nconst DEFAULT_OPEN_INTEREST_REQUEST_INTERVAL_MS = 500;\nconst OPEN_INTEREST_TTL = process.env.OPEN_INTEREST_TTL ? Number(process.env.OPEN_INTEREST_TTL) : 120_000;\n\nconst toIntervalMs = (interval?: string, intervalNum?: number) => {\n switch (interval) {\n case 'SECOND':\n return (intervalNum ?? 1) * 1_000;\n case 'MINUTE':\n return (intervalNum ?? 1) * 60_000;\n case 'HOUR':\n return (intervalNum ?? 1) * 3_600_000;\n case 'DAY':\n return (intervalNum ?? 1) * 86_400_000;\n default:\n return undefined;\n }\n};\n\nconst getRequestIntervalMs = (rateLimits: IAsterRateLimit[] | undefined, fallbackMs: number) => {\n const intervals: number[] = [];\n for (const item of rateLimits ?? []) {\n if (item.rateLimitType !== 'REQUEST_WEIGHT' && item.rateLimitType !== 'RAW_REQUESTS') continue;\n const duration = toIntervalMs(item.interval, item.intervalNum);\n const limit = item.limit;\n if (duration == null || limit == null || limit <= 0) continue;\n intervals.push(Math.ceil(duration / limit));\n }\n if (!intervals.length) return fallbackMs;\n return Math.max(fallbackMs, Math.max(...intervals));\n};\n\nconst openInterestCache = createCache<string>(\n async (symbol: string) => {\n try {\n const data = await getFApiV1OpenInterest({ symbol });\n return data.openInterest;\n } catch (error) {\n console.warn('getFApiV1OpenInterest failed', symbol, error);\n return undefined;\n }\n },\n { expire: OPEN_INTEREST_TTL },\n);\n\nconst requestInterval$ = defer(() => getFApiV1ExchangeInfo({})).pipe(\n map((info) => getRequestIntervalMs(info.rateLimits, DEFAULT_OPEN_INTEREST_REQUEST_INTERVAL_MS)),\n catchError((err) => {\n console.warn('getFApiV1ExchangeInfo failed when calculating request interval', err);\n return of(DEFAULT_OPEN_INTEREST_REQUEST_INTERVAL_MS);\n }),\n startWith(DEFAULT_OPEN_INTEREST_REQUEST_INTERVAL_MS),\n retry({ delay: 60_000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nconst ticker$ = defer(() => getFApiV1TickerPrice({})).pipe(\n map((tickers) => (Array.isArray(tickers) ? tickers : [])),\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nconst quoteFromTicker$ = ticker$.pipe(\n mergeMap((tickers) => tickers || []),\n map(\n (ticker): Partial<IQuote> => ({\n datasource_id: 'ASTER',\n product_id: encodePath('ASTER', 'PERP', ticker.symbol),\n last_price: `${ticker.price}`,\n bid_price: `${ticker.price}`,\n ask_price: `${ticker.price}`,\n }),\n ),\n);\n\n// Extract unique symbols from ticker stream\nconst symbolList$ = ticker$.pipe(\n map((tickers) => tickers.map((t) => t.symbol)),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\n// Create a controlled rotation stream for fetching open interest\n// This cycles through all symbols with proper delays, independent of ticker updates\nconst OPEN_INTEREST_CYCLE_DELAY = process.env.OPEN_INTEREST_CYCLE_DELAY\n ? Number(process.env.OPEN_INTEREST_CYCLE_DELAY)\n : 60_000; // 60 seconds between full cycles\n\nconst openInterestRotation$ = combineLatest([symbolList$, requestInterval$]).pipe(\n exhaustMap(([symbols, requestInterval]) =>\n defer(() => {\n console.info(\n `Starting open interest rotation for ${symbols.length} symbols with ${requestInterval}ms interval`,\n );\n return from(symbols).pipe(\n concatMap((symbol, index) =>\n (index > 0 ? timer(requestInterval) : of(0)).pipe(\n mergeMap(() => from(openInterestCache.query(symbol))),\n map((openInterest) => ({\n symbol,\n openInterest: openInterest ?? '0',\n timestamp: Date.now(),\n })),\n catchError((err) => {\n console.warn(`Failed to fetch open interest for ${symbol}:`, err);\n return of(undefined);\n }),\n ),\n ),\n );\n }),\n ),\n filter((x) => !!x),\n shareReplay({ bufferSize: 1000, refCount: true }), // Cache open interest for all symbols\n);\n\n// Convert open interest rotation data to quote format\nconst quoteFromOpenInterest$ = openInterestRotation$.pipe(\n map(\n (data): Partial<IQuote> => ({\n datasource_id: 'ASTER',\n product_id: encodePath('ASTER', 'PERP', data?.symbol),\n open_interest: data?.openInterest,\n }),\n ),\n);\n\n// Funding rate stream - fetches all symbols at once (more efficient than per-symbol)\nconst fundingRate$ = defer(() => getFApiV1PremiumIndex({})).pipe(\n map((data) => {\n // Handle both single object and array responses\n const premiumDataArray = Array.isArray(data) ? data : [data];\n return premiumDataArray;\n }),\n repeat({ delay: OPEN_INTEREST_CYCLE_DELAY }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\n// Convert funding rate data to quote format\nconst quoteFromFundingRate$ = fundingRate$.pipe(\n mergeMap((premiumDataArray) => premiumDataArray),\n map(\n (premiumData): Partial<IQuote> => ({\n datasource_id: 'ASTER',\n product_id: encodePath('ASTER', 'PERP', premiumData.symbol),\n interest_rate_long: premiumData.lastFundingRate ? `${-+premiumData.lastFundingRate}` : undefined,\n interest_rate_short: premiumData.lastFundingRate,\n }),\n ),\n);\n\nconst quote$ = merge(\n quoteFromTicker$,\n quoteFromFundingRate$,\n DISABLE_OPEN_INTEREST ? of() : quoteFromOpenInterest$,\n).pipe(\n groupBy((quote) => quote.product_id),\n mergeMap((group$) =>\n group$.pipe(\n scan(\n (acc, cur) =>\n Object.assign(acc, cur, {\n datasource_id: 'ASTER',\n product_id: group$.key,\n }),\n {} as Partial<IQuote>,\n ),\n ),\n ),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nif (process.env.WRITE_QUOTE_TO_SQL === 'true') {\n quote$\n .pipe(\n setMetricsQuoteState(terminal.terminal_id),\n writeToSQL({\n terminal,\n tableName: 'quote',\n writeInterval: 1000,\n conflictKeys: ['datasource_id', 'product_id'],\n }),\n )\n .subscribe();\n\n terminal.channel.publishChannel('quote', { pattern: '^ASTER/' }, (channel_id) => {\n const [datasourceId, productId] = decodePath(channel_id);\n if (!datasourceId || !productId) {\n throw new Error(`Invalid channel_id: ${channel_id}`);\n }\n return quote$.pipe(filter((quote) => quote.product_id === productId));\n });\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const futureAPIBucket: import("@yuants/utils").ITokenBucket;
|
|
2
|
+
export declare const spotAPIBucket: import("@yuants/utils").ITokenBucket;
|
|
3
|
+
export declare const orderFutureSecondAPIBucket: import("@yuants/utils").ITokenBucket;
|
|
4
|
+
export declare const orderFutureMinuteAPIBucket: import("@yuants/utils").ITokenBucket;
|
|
5
|
+
export declare const orderSpotSecondAPIBucket: import("@yuants/utils").ITokenBucket;
|
|
6
|
+
export declare const orderSpotMinuteAPIBucket: import("@yuants/utils").ITokenBucket;
|
|
7
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,eAAe,sCAI1B,CAAC;AAEH,eAAO,MAAM,aAAa,sCAIxB,CAAC;AAEH,eAAO,MAAM,0BAA0B,sCAIrC,CAAC;AAEH,eAAO,MAAM,0BAA0B,sCAIrC,CAAC;AAEH,eAAO,MAAM,wBAAwB,sCAInC,CAAC;AAEH,eAAO,MAAM,wBAAwB,sCAInC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.orderSpotMinuteAPIBucket = exports.orderSpotSecondAPIBucket = exports.orderFutureMinuteAPIBucket = exports.orderFutureSecondAPIBucket = exports.spotAPIBucket = exports.futureAPIBucket = void 0;
|
|
4
|
+
const utils_1 = require("@yuants/utils");
|
|
5
|
+
// Initialize token buckets at module load time.
|
|
6
|
+
// Subsequent calls should use `tokenBucket(bucketId)` without options.
|
|
7
|
+
// REQUEST_WEIGHT limits (source: exchangeInfo.rateLimits in Aster docs)
|
|
8
|
+
exports.futureAPIBucket = (0, utils_1.tokenBucket)('fapi.asterdex.com', {
|
|
9
|
+
capacity: 2400,
|
|
10
|
+
refillInterval: 60000,
|
|
11
|
+
refillAmount: 2400,
|
|
12
|
+
});
|
|
13
|
+
exports.spotAPIBucket = (0, utils_1.tokenBucket)('sapi.asterdex.com', {
|
|
14
|
+
capacity: 6000,
|
|
15
|
+
refillInterval: 60000,
|
|
16
|
+
refillAmount: 6000,
|
|
17
|
+
});
|
|
18
|
+
exports.orderFutureSecondAPIBucket = (0, utils_1.tokenBucket)('order/future/second', {
|
|
19
|
+
capacity: 300,
|
|
20
|
+
refillInterval: 10000,
|
|
21
|
+
refillAmount: 300,
|
|
22
|
+
});
|
|
23
|
+
exports.orderFutureMinuteAPIBucket = (0, utils_1.tokenBucket)('order/future/minute', {
|
|
24
|
+
capacity: 1200,
|
|
25
|
+
refillInterval: 60000,
|
|
26
|
+
refillAmount: 1200,
|
|
27
|
+
});
|
|
28
|
+
exports.orderSpotSecondAPIBucket = (0, utils_1.tokenBucket)('order/spot/second', {
|
|
29
|
+
capacity: 1000,
|
|
30
|
+
refillInterval: 10000,
|
|
31
|
+
refillAmount: 1000,
|
|
32
|
+
});
|
|
33
|
+
exports.orderSpotMinuteAPIBucket = (0, utils_1.tokenBucket)('order/spot/minute', {
|
|
34
|
+
capacity: 6000,
|
|
35
|
+
refillInterval: 60000,
|
|
36
|
+
refillAmount: 6000,
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":";;;AAAA,yCAA4C;AAE5C,gDAAgD;AAChD,uEAAuE;AAEvE,wEAAwE;AAC3D,QAAA,eAAe,GAAG,IAAA,mBAAW,EAAC,mBAAmB,EAAE;IAC9D,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,KAAM;IACtB,YAAY,EAAE,IAAI;CACnB,CAAC,CAAC;AAEU,QAAA,aAAa,GAAG,IAAA,mBAAW,EAAC,mBAAmB,EAAE;IAC5D,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,KAAM;IACtB,YAAY,EAAE,IAAI;CACnB,CAAC,CAAC;AAEU,QAAA,0BAA0B,GAAG,IAAA,mBAAW,EAAC,qBAAqB,EAAE;IAC3E,QAAQ,EAAE,GAAG;IACb,cAAc,EAAE,KAAM;IACtB,YAAY,EAAE,GAAG;CAClB,CAAC,CAAC;AAEU,QAAA,0BAA0B,GAAG,IAAA,mBAAW,EAAC,qBAAqB,EAAE;IAC3E,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,KAAM;IACtB,YAAY,EAAE,IAAI;CACnB,CAAC,CAAC;AAEU,QAAA,wBAAwB,GAAG,IAAA,mBAAW,EAAC,mBAAmB,EAAE;IACvE,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,KAAM;IACtB,YAAY,EAAE,IAAI;CACnB,CAAC,CAAC;AAEU,QAAA,wBAAwB,GAAG,IAAA,mBAAW,EAAC,mBAAmB,EAAE;IACvE,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,KAAM;IACtB,YAAY,EAAE,IAAI;CACnB,CAAC,CAAC","sourcesContent":["import { tokenBucket } from '@yuants/utils';\n\n// Initialize token buckets at module load time.\n// Subsequent calls should use `tokenBucket(bucketId)` without options.\n\n// REQUEST_WEIGHT limits (source: exchangeInfo.rateLimits in Aster docs)\nexport const futureAPIBucket = tokenBucket('fapi.asterdex.com', {\n capacity: 2400,\n refillInterval: 60_000,\n refillAmount: 2400,\n});\n\nexport const spotAPIBucket = tokenBucket('sapi.asterdex.com', {\n capacity: 6000,\n refillInterval: 60_000,\n refillAmount: 6000,\n});\n\nexport const orderFutureSecondAPIBucket = tokenBucket('order/future/second', {\n capacity: 300,\n refillInterval: 10_000,\n refillAmount: 300,\n});\n\nexport const orderFutureMinuteAPIBucket = tokenBucket('order/future/minute', {\n capacity: 1200,\n refillInterval: 60_000,\n refillAmount: 1200,\n});\n\nexport const orderSpotSecondAPIBucket = tokenBucket('order/spot/second', {\n capacity: 1000,\n refillInterval: 10_000,\n refillAmount: 1000,\n});\n\nexport const orderSpotMinuteAPIBucket = tokenBucket('order/spot/minute', {\n capacity: 6000,\n refillInterval: 60_000,\n refillAmount: 6000,\n});\n"]}
|
package/lib/api/private-api.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import './client';
|
|
1
2
|
export interface ICredential {
|
|
2
3
|
address: string;
|
|
3
4
|
api_key: string;
|
|
@@ -46,9 +47,11 @@ export interface IAsterSpotOpenOrder {
|
|
|
46
47
|
/**
|
|
47
48
|
* 获取账户信息
|
|
48
49
|
*
|
|
50
|
+
* Weight: 5
|
|
51
|
+
*
|
|
49
52
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E8%B4%A6%E6%88%B7%E4%BF%A1%E6%81%AFv4-user_data
|
|
50
53
|
*/
|
|
51
|
-
export declare const getFApiV4Account: (credential: ICredential, params:
|
|
54
|
+
export declare const getFApiV4Account: (credential: ICredential, params: Record<string, never>) => Promise<{
|
|
52
55
|
feeTier: number;
|
|
53
56
|
canTrade: boolean;
|
|
54
57
|
canDeposit: boolean;
|
|
@@ -102,10 +105,12 @@ export declare const getFApiV4Account: (credential: ICredential, params: {}) =>
|
|
|
102
105
|
/**
|
|
103
106
|
* 用户持仓风险V2 (USER_DATA)
|
|
104
107
|
*
|
|
108
|
+
* Weight: 5
|
|
109
|
+
*
|
|
105
110
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E7%94%A8%E6%88%B7%E6%8C%81%E4%BB%93%E9%A3%8E%E9%99%A9v2-user_data
|
|
106
111
|
*/
|
|
107
112
|
export declare const getFApiV2PositionRisk: (credential: ICredential, params: {
|
|
108
|
-
symbol?: string
|
|
113
|
+
symbol?: string;
|
|
109
114
|
}) => Promise<{
|
|
110
115
|
entryPrice: string;
|
|
111
116
|
marginType: string;
|
|
@@ -121,7 +126,12 @@ export declare const getFApiV2PositionRisk: (credential: ICredential, params: {
|
|
|
121
126
|
positionSide: string;
|
|
122
127
|
updateTime: number;
|
|
123
128
|
}[]>;
|
|
124
|
-
|
|
129
|
+
/**
|
|
130
|
+
* Weight: 5
|
|
131
|
+
*
|
|
132
|
+
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#L2840-L2855
|
|
133
|
+
*/
|
|
134
|
+
export declare const getFApiV2Balance: (credential: ICredential, params: Record<string, never>) => Promise<{
|
|
125
135
|
accountAlias: string;
|
|
126
136
|
asset: string;
|
|
127
137
|
balance: string;
|
|
@@ -132,43 +142,59 @@ export declare const getFApiV2Balance: (credential: ICredential, params: {}) =>
|
|
|
132
142
|
marginAvailable: boolean;
|
|
133
143
|
updateTime: number;
|
|
134
144
|
}[]>;
|
|
145
|
+
/**
|
|
146
|
+
* Weight: 1 by order
|
|
147
|
+
*
|
|
148
|
+
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#post-fapiv1order-%E7%9A%84%E7%A4%BA%E4%BE%8B
|
|
149
|
+
*/
|
|
135
150
|
export declare const postFApiV1Order: (credential: ICredential, params: {
|
|
136
151
|
symbol: string;
|
|
137
152
|
side: 'BUY' | 'SELL';
|
|
138
|
-
positionSide?:
|
|
153
|
+
positionSide?: 'BOTH' | 'LONG' | 'SHORT';
|
|
139
154
|
type: 'MARKET' | 'LIMIT' | 'STOP' | 'STOP_MARKET' | 'TAKE_PROFIT' | 'TAKE_PROFIT_MARKET' | 'TRAILING_STOP_MARKET';
|
|
140
|
-
reduceOnly?:
|
|
141
|
-
quantity?: number
|
|
142
|
-
price?: number
|
|
143
|
-
timeInForce?:
|
|
144
|
-
}) => Promise<
|
|
155
|
+
reduceOnly?: 'true' | 'false';
|
|
156
|
+
quantity?: number;
|
|
157
|
+
price?: number;
|
|
158
|
+
timeInForce?: 'GTC' | 'IOC' | 'FOK' | 'GTX' | 'HIDDEN';
|
|
159
|
+
}) => Promise<Record<string, never>>;
|
|
145
160
|
/**
|
|
146
161
|
* 查询当前挂单 (永续)
|
|
147
162
|
*
|
|
163
|
+
* Weight: with symbol 1, without symbol 40
|
|
164
|
+
*
|
|
148
165
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#L2728-L2766
|
|
149
166
|
*/
|
|
150
167
|
export declare const getFApiV1OpenOrders: (credential: ICredential, params: {
|
|
151
|
-
symbol?: string
|
|
168
|
+
symbol?: string;
|
|
152
169
|
}) => Promise<IAsterFutureOpenOrder[]>;
|
|
153
170
|
/**
|
|
154
171
|
* 查询当前挂单 (现货)
|
|
155
172
|
*
|
|
173
|
+
* Weight: with symbol 1, without symbol 40
|
|
174
|
+
*
|
|
156
175
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#L1196-L1234
|
|
157
176
|
*/
|
|
158
177
|
export declare const getApiV1OpenOrders: (credential: ICredential, params: {
|
|
159
|
-
symbol?: string
|
|
178
|
+
symbol?: string;
|
|
160
179
|
}) => Promise<IAsterSpotOpenOrder[]>;
|
|
180
|
+
/**
|
|
181
|
+
* Weight: 1
|
|
182
|
+
*
|
|
183
|
+
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#L2498-L2516
|
|
184
|
+
*/
|
|
161
185
|
export declare const deleteFApiV1Order: (credential: ICredential, params: {
|
|
162
186
|
symbol: string;
|
|
163
|
-
orderId?: string | number
|
|
164
|
-
origClientOrderId?: string
|
|
165
|
-
}) => Promise<
|
|
187
|
+
orderId?: string | number;
|
|
188
|
+
origClientOrderId?: string;
|
|
189
|
+
}) => Promise<Record<string, never>>;
|
|
166
190
|
/**
|
|
167
191
|
* 获取账户信息 (现货)
|
|
168
192
|
*
|
|
193
|
+
* Weight: 5
|
|
194
|
+
*
|
|
169
195
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#%E8%B4%A6%E6%88%B7%E4%BF%A1%E6%81%AF-user_data
|
|
170
196
|
*/
|
|
171
|
-
export declare const getApiV1Account: (credential: ICredential, params:
|
|
197
|
+
export declare const getApiV1Account: (credential: ICredential, params: Record<string, never>) => Promise<{
|
|
172
198
|
feeTier: number;
|
|
173
199
|
canTrade: boolean;
|
|
174
200
|
canDeposit: boolean;
|
|
@@ -183,32 +209,42 @@ export declare const getApiV1Account: (credential: ICredential, params: {}) => P
|
|
|
183
209
|
}>;
|
|
184
210
|
/**
|
|
185
211
|
* 获取最新价格
|
|
212
|
+
*
|
|
213
|
+
* Weight: without symbol 2 (current implementation)
|
|
214
|
+
*
|
|
186
215
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#%E6%9C%80%E6%96%B0%E4%BB%B7%E6%A0%BC
|
|
187
216
|
*/
|
|
188
|
-
export declare const getApiV1TickerPrice: (credential: ICredential, params:
|
|
217
|
+
export declare const getApiV1TickerPrice: (credential: ICredential, params: Record<string, never>) => Promise<{
|
|
189
218
|
symbol: string;
|
|
190
219
|
price: string;
|
|
191
220
|
time: number;
|
|
192
221
|
}[]>;
|
|
222
|
+
/**
|
|
223
|
+
* Weight: 1
|
|
224
|
+
*
|
|
225
|
+
* https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#post-apiv1order-%E7%9A%84%E7%A4%BA%E4%BE%8B
|
|
226
|
+
*/
|
|
193
227
|
export declare const postApiV1Order: (credential: ICredential, params: {
|
|
194
228
|
symbol: string;
|
|
195
229
|
side: 'BUY' | 'SELL';
|
|
196
230
|
type: 'MARKET' | 'LIMIT' | 'STOP' | 'STOP_MARKET' | 'TAKE_PROFIT' | 'TAKE_PROFIT_MARKET';
|
|
197
|
-
timeInForce?:
|
|
198
|
-
quantity?: number
|
|
199
|
-
quoteOrderQty?: number
|
|
200
|
-
price?: number
|
|
231
|
+
timeInForce?: 'GTC' | 'IOC' | 'FOK' | 'GTX';
|
|
232
|
+
quantity?: number;
|
|
233
|
+
quoteOrderQty?: number;
|
|
234
|
+
price?: number;
|
|
201
235
|
}) => Promise<{
|
|
202
236
|
orderId: number;
|
|
203
237
|
}>;
|
|
204
238
|
/**
|
|
205
239
|
* 取消有效订单 (现货)
|
|
206
240
|
*
|
|
241
|
+
* Weight: 1
|
|
242
|
+
*
|
|
207
243
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#L1040-L1074
|
|
208
244
|
*/
|
|
209
245
|
export declare const deleteApiV1Order: (credential: ICredential, params: {
|
|
210
246
|
symbol: string;
|
|
211
|
-
orderId?: string | number
|
|
212
|
-
origClientOrderId?: string
|
|
213
|
-
}) => Promise<
|
|
247
|
+
orderId?: string | number;
|
|
248
|
+
origClientOrderId?: string;
|
|
249
|
+
}) => Promise<Record<string, never>>;
|
|
214
250
|
//# sourceMappingURL=private-api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private-api.d.ts","sourceRoot":"","sources":["../../src/api/private-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"private-api.d.ts","sourceRoot":"","sources":["../../src/api/private-api.ts"],"names":[],"mappings":"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"}
|
package/lib/api/private-api.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.deleteApiV1Order = exports.postApiV1Order = exports.getApiV1TickerPrice = exports.getApiV1Account = exports.deleteFApiV1Order = exports.getApiV1OpenOrders = exports.getFApiV1OpenOrders = exports.postFApiV1Order = exports.getFApiV2Balance = exports.getFApiV2PositionRisk = exports.getFApiV4Account = void 0;
|
|
4
4
|
const utils_1 = require("@yuants/utils");
|
|
5
5
|
const protocol_1 = require("@yuants/protocol");
|
|
6
|
+
require("./client");
|
|
6
7
|
const MetricsAsterApiCallCounter = protocol_1.GlobalPrometheusRegistry.counter('aster_api_call', 'Number of aster api call');
|
|
7
8
|
const terminal = protocol_1.Terminal.fromNodeEnv();
|
|
8
9
|
const request = async (credential, method, baseURL, endpoint, params = {}) => {
|
|
@@ -42,52 +43,194 @@ const request = async (credential, method, baseURL, endpoint, params = {}) => {
|
|
|
42
43
|
}, e);
|
|
43
44
|
}
|
|
44
45
|
};
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
const createSpotApi = createApi('https://sapi.asterdex.com');
|
|
46
|
+
const FutureBaseURL = 'https://fapi.asterdex.com';
|
|
47
|
+
const SpotBaseURL = 'https://sapi.asterdex.com';
|
|
48
48
|
/**
|
|
49
49
|
* 获取账户信息
|
|
50
50
|
*
|
|
51
|
+
* Weight: 5
|
|
52
|
+
*
|
|
51
53
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E8%B4%A6%E6%88%B7%E4%BF%A1%E6%81%AFv4-user_data
|
|
52
54
|
*/
|
|
53
|
-
|
|
55
|
+
const getFApiV4Account = (credential, params) => {
|
|
56
|
+
const endpoint = '/fapi/v4/account';
|
|
57
|
+
const url = new URL(FutureBaseURL);
|
|
58
|
+
url.pathname = endpoint;
|
|
59
|
+
const weight = 5;
|
|
60
|
+
(0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
|
|
61
|
+
return request(credential, 'GET', FutureBaseURL, endpoint, params);
|
|
62
|
+
};
|
|
63
|
+
exports.getFApiV4Account = getFApiV4Account;
|
|
54
64
|
/**
|
|
55
65
|
* 用户持仓风险V2 (USER_DATA)
|
|
56
66
|
*
|
|
67
|
+
* Weight: 5
|
|
68
|
+
*
|
|
57
69
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#%E7%94%A8%E6%88%B7%E6%8C%81%E4%BB%93%E9%A3%8E%E9%99%A9v2-user_data
|
|
58
70
|
*/
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
71
|
+
const getFApiV2PositionRisk = (credential, params) => {
|
|
72
|
+
const endpoint = '/fapi/v2/positionRisk';
|
|
73
|
+
const url = new URL(FutureBaseURL);
|
|
74
|
+
url.pathname = endpoint;
|
|
75
|
+
const weight = 5;
|
|
76
|
+
(0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
|
|
77
|
+
return request(credential, 'GET', FutureBaseURL, endpoint, params);
|
|
78
|
+
};
|
|
79
|
+
exports.getFApiV2PositionRisk = getFApiV2PositionRisk;
|
|
80
|
+
/**
|
|
81
|
+
* Weight: 5
|
|
82
|
+
*
|
|
83
|
+
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#L2840-L2855
|
|
84
|
+
*/
|
|
85
|
+
const getFApiV2Balance = (credential, params) => {
|
|
86
|
+
const endpoint = '/fapi/v2/balance';
|
|
87
|
+
const url = new URL(FutureBaseURL);
|
|
88
|
+
url.pathname = endpoint;
|
|
89
|
+
const weight = 5;
|
|
90
|
+
(0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
|
|
91
|
+
return request(credential, 'GET', FutureBaseURL, endpoint, params);
|
|
92
|
+
};
|
|
93
|
+
exports.getFApiV2Balance = getFApiV2Balance;
|
|
94
|
+
/**
|
|
95
|
+
* Weight: 1 by order
|
|
96
|
+
*
|
|
97
|
+
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#post-fapiv1order-%E7%9A%84%E7%A4%BA%E4%BE%8B
|
|
98
|
+
*/
|
|
99
|
+
const postFApiV1Order = (credential, params) => {
|
|
100
|
+
const endpoint = '/fapi/v1/order';
|
|
101
|
+
const url = new URL(FutureBaseURL);
|
|
102
|
+
url.pathname = endpoint;
|
|
103
|
+
const weight = 1;
|
|
104
|
+
(0, utils_1.scopeError)('ASTER_FUTURE_ORDER_API_SECOND_RATE_LIMIT', { method: 'POST', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)('order/future/second').acquireSync(weight));
|
|
105
|
+
(0, utils_1.scopeError)('ASTER_FUTURE_ORDER_API_MINUTE_RATE_LIMIT', { method: 'POST', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)('order/future/minute').acquireSync(weight));
|
|
106
|
+
return request(credential, 'POST', FutureBaseURL, endpoint, params);
|
|
107
|
+
};
|
|
108
|
+
exports.postFApiV1Order = postFApiV1Order;
|
|
62
109
|
/**
|
|
63
110
|
* 查询当前挂单 (永续)
|
|
64
111
|
*
|
|
112
|
+
* Weight: with symbol 1, without symbol 40
|
|
113
|
+
*
|
|
65
114
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#L2728-L2766
|
|
66
115
|
*/
|
|
67
|
-
|
|
116
|
+
const getFApiV1OpenOrders = (credential, params) => {
|
|
117
|
+
const endpoint = '/fapi/v1/openOrders';
|
|
118
|
+
const url = new URL(FutureBaseURL);
|
|
119
|
+
url.pathname = endpoint;
|
|
120
|
+
const weight = (params === null || params === void 0 ? void 0 : params.symbol) ? 1 : 40;
|
|
121
|
+
(0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', {
|
|
122
|
+
method: 'GET',
|
|
123
|
+
endpoint,
|
|
124
|
+
host: url.host,
|
|
125
|
+
path: url.pathname,
|
|
126
|
+
bucketId: url.host,
|
|
127
|
+
weight,
|
|
128
|
+
hasSymbol: !!(params === null || params === void 0 ? void 0 : params.symbol),
|
|
129
|
+
}, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
|
|
130
|
+
return request(credential, 'GET', FutureBaseURL, endpoint, params);
|
|
131
|
+
};
|
|
132
|
+
exports.getFApiV1OpenOrders = getFApiV1OpenOrders;
|
|
68
133
|
/**
|
|
69
134
|
* 查询当前挂单 (现货)
|
|
70
135
|
*
|
|
136
|
+
* Weight: with symbol 1, without symbol 40
|
|
137
|
+
*
|
|
71
138
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#L1196-L1234
|
|
72
139
|
*/
|
|
73
|
-
|
|
74
|
-
|
|
140
|
+
const getApiV1OpenOrders = (credential, params) => {
|
|
141
|
+
const endpoint = '/api/v1/openOrders';
|
|
142
|
+
const url = new URL(SpotBaseURL);
|
|
143
|
+
url.pathname = endpoint;
|
|
144
|
+
const weight = (params === null || params === void 0 ? void 0 : params.symbol) ? 1 : 40;
|
|
145
|
+
(0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', {
|
|
146
|
+
method: 'GET',
|
|
147
|
+
endpoint,
|
|
148
|
+
host: url.host,
|
|
149
|
+
path: url.pathname,
|
|
150
|
+
bucketId: url.host,
|
|
151
|
+
weight,
|
|
152
|
+
hasSymbol: !!(params === null || params === void 0 ? void 0 : params.symbol),
|
|
153
|
+
}, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
|
|
154
|
+
return request(credential, 'GET', SpotBaseURL, endpoint, params);
|
|
155
|
+
};
|
|
156
|
+
exports.getApiV1OpenOrders = getApiV1OpenOrders;
|
|
157
|
+
/**
|
|
158
|
+
* Weight: 1
|
|
159
|
+
*
|
|
160
|
+
* https://github.com/asterdex/api-docs/blob/master/aster-finance-futures-api_CN.md#L2498-L2516
|
|
161
|
+
*/
|
|
162
|
+
const deleteFApiV1Order = (credential, params) => {
|
|
163
|
+
const endpoint = '/fapi/v1/order';
|
|
164
|
+
const url = new URL(FutureBaseURL);
|
|
165
|
+
url.pathname = endpoint;
|
|
166
|
+
const weight = 1;
|
|
167
|
+
(0, utils_1.scopeError)('ASTER_FUTURE_ORDER_API_SECOND_RATE_LIMIT', { method: 'DELETE', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)('order/future/second').acquireSync(weight));
|
|
168
|
+
(0, utils_1.scopeError)('ASTER_FUTURE_ORDER_API_MINUTE_RATE_LIMIT', { method: 'DELETE', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)('order/future/minute').acquireSync(weight));
|
|
169
|
+
return request(credential, 'DELETE', FutureBaseURL, endpoint, params);
|
|
170
|
+
};
|
|
171
|
+
exports.deleteFApiV1Order = deleteFApiV1Order;
|
|
75
172
|
/**
|
|
76
173
|
* 获取账户信息 (现货)
|
|
77
174
|
*
|
|
175
|
+
* Weight: 5
|
|
176
|
+
*
|
|
78
177
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#%E8%B4%A6%E6%88%B7%E4%BF%A1%E6%81%AF-user_data
|
|
79
178
|
*/
|
|
80
|
-
|
|
179
|
+
const getApiV1Account = (credential, params) => {
|
|
180
|
+
const endpoint = '/api/v1/account';
|
|
181
|
+
const url = new URL(SpotBaseURL);
|
|
182
|
+
url.pathname = endpoint;
|
|
183
|
+
const weight = 5;
|
|
184
|
+
(0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
|
|
185
|
+
return request(credential, 'GET', SpotBaseURL, endpoint, params);
|
|
186
|
+
};
|
|
187
|
+
exports.getApiV1Account = getApiV1Account;
|
|
81
188
|
/**
|
|
82
189
|
* 获取最新价格
|
|
190
|
+
*
|
|
191
|
+
* Weight: without symbol 2 (current implementation)
|
|
192
|
+
*
|
|
83
193
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#%E6%9C%80%E6%96%B0%E4%BB%B7%E6%A0%BC
|
|
84
194
|
*/
|
|
85
|
-
|
|
86
|
-
|
|
195
|
+
const getApiV1TickerPrice = (credential, params) => {
|
|
196
|
+
const endpoint = '/api/v1/ticker/price';
|
|
197
|
+
const url = new URL(SpotBaseURL);
|
|
198
|
+
url.pathname = endpoint;
|
|
199
|
+
const weight = 2;
|
|
200
|
+
(0, utils_1.scopeError)('ASTER_API_RATE_LIMIT', { method: 'GET', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)(url.host).acquireSync(weight));
|
|
201
|
+
return request(credential, 'GET', SpotBaseURL, endpoint, params);
|
|
202
|
+
};
|
|
203
|
+
exports.getApiV1TickerPrice = getApiV1TickerPrice;
|
|
204
|
+
/**
|
|
205
|
+
* Weight: 1
|
|
206
|
+
*
|
|
207
|
+
* https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#post-apiv1order-%E7%9A%84%E7%A4%BA%E4%BE%8B
|
|
208
|
+
*/
|
|
209
|
+
const postApiV1Order = (credential, params) => {
|
|
210
|
+
const endpoint = '/api/v1/order';
|
|
211
|
+
const url = new URL(SpotBaseURL);
|
|
212
|
+
url.pathname = endpoint;
|
|
213
|
+
const weight = 1;
|
|
214
|
+
(0, utils_1.scopeError)('ASTER_SPOT_ORDER_API_SECOND_RATE_LIMIT', { method: 'POST', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)('order/spot/second').acquireSync(weight));
|
|
215
|
+
(0, utils_1.scopeError)('ASTER_SPOT_ORDER_API_MINUTE_RATE_LIMIT', { method: 'POST', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)('order/spot/minute').acquireSync(weight));
|
|
216
|
+
return request(credential, 'POST', SpotBaseURL, endpoint, params);
|
|
217
|
+
};
|
|
218
|
+
exports.postApiV1Order = postApiV1Order;
|
|
87
219
|
/**
|
|
88
220
|
* 取消有效订单 (现货)
|
|
89
221
|
*
|
|
222
|
+
* Weight: 1
|
|
223
|
+
*
|
|
90
224
|
* https://github.com/asterdex/api-docs/blob/master/aster-finance-spot-api_CN.md#L1040-L1074
|
|
91
225
|
*/
|
|
92
|
-
|
|
226
|
+
const deleteApiV1Order = (credential, params) => {
|
|
227
|
+
const endpoint = '/api/v1/order';
|
|
228
|
+
const url = new URL(SpotBaseURL);
|
|
229
|
+
url.pathname = endpoint;
|
|
230
|
+
const weight = 1;
|
|
231
|
+
(0, utils_1.scopeError)('ASTER_SPOT_ORDER_API_SECOND_RATE_LIMIT', { method: 'DELETE', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)('order/spot/second').acquireSync(weight));
|
|
232
|
+
(0, utils_1.scopeError)('ASTER_SPOT_ORDER_API_MINUTE_RATE_LIMIT', { method: 'DELETE', endpoint, host: url.host, path: url.pathname, bucketId: url.host, weight }, () => (0, utils_1.tokenBucket)('order/spot/minute').acquireSync(weight));
|
|
233
|
+
return request(credential, 'DELETE', SpotBaseURL, endpoint, params);
|
|
234
|
+
};
|
|
235
|
+
exports.deleteApiV1Order = deleteApiV1Order;
|
|
93
236
|
//# sourceMappingURL=private-api.js.map
|