@yuants/vendor-hyperliquid 0.1.3 → 0.2.0
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.js +10 -0
- package/dist/api.js.map +1 -1
- package/dist/ohlc.js +125 -0
- package/dist/ohlc.js.map +1 -0
- package/lib/api.d.ts +28 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +10 -0
- package/lib/api.js.map +1 -1
- package/lib/ohlc.d.ts +2 -0
- package/lib/ohlc.d.ts.map +1 -0
- package/lib/ohlc.js +127 -0
- package/lib/ohlc.js.map +1 -0
- package/package.json +4 -3
- package/temp/image-tag +1 -1
- package/temp/package-deps.json +8 -6
package/dist/api.js
CHANGED
|
@@ -77,6 +77,16 @@ export class HyperliquidClient {
|
|
|
77
77
|
* FYI: https://github.com/hyperliquid-dex/hyperliquid-python-sdk/blob/a4280d08ca42936a6851f309b7a4f4ae995a92c0/hyperliquid/info.py#L184
|
|
78
78
|
*/
|
|
79
79
|
this.getAllMids = () => this.request('POST', 'info', { type: 'allMids' });
|
|
80
|
+
/**
|
|
81
|
+
* info
|
|
82
|
+
*
|
|
83
|
+
* Only the most recent 5000 candles are available
|
|
84
|
+
*
|
|
85
|
+
* Supported intervals: "1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "8h", "12h", "1d", "3d", "1w", "1M"
|
|
86
|
+
*
|
|
87
|
+
* https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint#candle-snapshot
|
|
88
|
+
*/
|
|
89
|
+
this.getCandleSnapshot = (params) => this.request('POST', 'info', Object.assign({ type: 'candleSnapshot' }, params));
|
|
80
90
|
/**
|
|
81
91
|
* exchange - placeOrder
|
|
82
92
|
*
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { UUID, formatTime } from '@yuants/utils';\n// @ts-ignore\nimport { ethers } from 'ethers';\nimport { Subject, filter, firstValueFrom, mergeMap, of, shareReplay, throwError, timeout, timer } from 'rxjs';\nimport { signL1Action } from './sign';\n\n/**\n * API: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/notation\n */\nexport class HyperliquidClient {\n noAuth = true;\n private wallet: ethers.Wallet | undefined;\n public public_key: string | undefined;\n constructor(config: {\n auth: {\n private_key: string;\n };\n }) {\n if (config.auth.private_key) {\n this.noAuth = false;\n }\n this.wallet = !this.noAuth ? new ethers.Wallet(config.auth.private_key) : undefined;\n this.public_key = this.wallet?.address;\n }\n\n async request(method: string, path: string, params?: any) {\n const url = new URL('https://api.hyperliquid.xyz');\n\n url.pathname = path;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n const body = method === 'GET' ? '' : JSON.stringify(params);\n // const str = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(signData, secret_key));\n\n console.info(formatTime(Date.now()), method, url.href, JSON.stringify(headers), body);\n const res = await fetch(url.href, {\n method,\n headers,\n body: body || undefined,\n });\n const retStr = await res.text();\n try {\n if (process.env.LOG_LEVEL === 'DEBUG') {\n console.debug(formatTime(Date.now()), 'HyperliquidResponse', path, JSON.stringify(params), retStr);\n }\n return JSON.parse(retStr);\n } catch (e) {\n console.error(formatTime(Date.now()), 'HyperliquidRequestFailed', path, JSON.stringify(params), retStr);\n throw e;\n }\n }\n\n mapPathToRequestChannel: Record<\n string,\n {\n requestQueue: Array<{\n trace_id: string;\n method: string;\n path: string;\n params?: any;\n }>;\n responseChannel: Subject<{ trace_id: string; response?: any; error?: Error }>;\n }\n > = {};\n\n setupChannel(path: string, period: number, limit: number) {\n this.mapPathToRequestChannel[path] = {\n requestQueue: [],\n responseChannel: new Subject(),\n };\n\n const { requestQueue, responseChannel } = this.mapPathToRequestChannel[path];\n timer(0, period)\n .pipe(\n filter(() => requestQueue.length > 0),\n mergeMap(() => requestQueue.splice(0, limit)),\n mergeMap(async (request) => {\n try {\n const res = await this.request(request.method, request.path, request.params);\n return { trace_id: request.trace_id, response: res };\n } catch (error) {\n return { trace_id: request.trace_id, error };\n }\n }),\n )\n .subscribe(responseChannel);\n }\n\n async requestWithFlowControl(\n method: string,\n path: string,\n flowControl: { period: number; limit: number } = { period: 10, limit: Infinity },\n params?: any,\n ) {\n const { period, limit } = flowControl;\n if (!this.mapPathToRequestChannel[path]) {\n this.setupChannel(path, period, limit);\n }\n const uuid = UUID();\n\n const { requestQueue, responseChannel } = this.mapPathToRequestChannel[path];\n const res$ = responseChannel.pipe(\n //\n filter((response) => response.trace_id === uuid),\n mergeMap((response) => (response.error ? throwError(() => response.error) : of(response))),\n timeout(30_000),\n shareReplay(1),\n );\n requestQueue.push({ trace_id: uuid, method, path, params });\n return (await firstValueFrom(res$)).response;\n }\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-users-perpetuals-account-summary\n */\n getUserPerpetualsAccountSummary = (params: {\n user: string;\n }): Promise<{\n marginSummary: {\n accountValue: string;\n totalNtlPos: string;\n totalRawUsd: string;\n totalMarginUsed: string;\n };\n crossMarginSummary: {\n accountValue: string;\n totalNtlPos: string;\n totalRawUsd: string;\n totalMarginUsed: string;\n };\n crossMaintenanceMarginUsed: string;\n withdrawable: string;\n assetPositions: {\n type: string;\n position: {\n coin: string;\n szi: string;\n leverage: {\n type: string;\n value: number;\n };\n entryPx: string;\n positionValue: string;\n unrealizedPnl: string;\n returnOnEquity: string;\n liquidationPx: string;\n marginUsed: string;\n maxLeverage: number;\n cumFunding: {\n allTime: string;\n sinceOpen: string;\n sinceChange: string;\n };\n };\n }[];\n time: number;\n }> => this.request('POST', 'info', { ...params, type: 'clearinghouseState' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-perpetuals-metadata\n */\n getPerpetualsMetaData = (params?: {\n dex?: string;\n }): Promise<{\n universe: {\n name: string;\n szDecimals: number;\n maxLeverage: number;\n onlyIsolated?: boolean;\n isDelisted?: boolean;\n }[];\n marginTables: [\n number,\n {\n description: string;\n marginTiers: {\n lowerBound: string;\n maxLeverage: number;\n }[];\n },\n ][];\n }> => this.request('POST', 'info', { type: 'meta' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/spot#retrieve-spot-metadata\n */\n getSpotMetaData = (): Promise<{\n tokens: {\n name: string;\n szDecimals: number;\n weiDecimals: number;\n index: number;\n tokenId: string;\n isCanonical: boolean;\n evmContract: null;\n fullName: null;\n }[];\n universe: {\n name: string;\n tokens: number[];\n index: number;\n isCanonical: boolean;\n }[];\n }> => this.request('POST', 'info', { type: 'spotMeta' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-a-users-funding-history-or-non-funding-ledger-updates\n */\n getUserFundingHistory = (params: {\n user: string;\n startTime?: number;\n endTime?: number;\n }): Promise<{\n time: number;\n hash: string;\n delta: {\n type: string;\n coin: string;\n usdc: string;\n szi: string;\n fundingRate: string;\n };\n }> => this.request('POST', 'info', { ...params, type: 'fundingHistory' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/spot#retrieve-spot-metadata\n */\n getUserTokenBalances = (params: {\n user: string;\n }): Promise<{\n balances: {\n coin: string;\n token: number;\n hold: string;\n total: string;\n entryNtl: string;\n }[];\n }> => this.request('POST', 'info', { ...params, type: 'tokenBalances' });\n\n /**\n * info - Get Historical Funding Rates\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-historical-funding-rates\n *\n * Data Characteristics:\n * - API Limit: Maximum 500 records per request\n * - Time Ordering: Data returned in **ascending** chronological order (earliest to latest)\n * - Time Format: Uses millisecond timestamps\n * - Pagination Strategy: When data exceeds 500 records, use startTime parameter for pagination\n * - First request: startTime = query start time, endTime = query end time\n * - Subsequent requests: startTime = last record time + 1ms, endTime = query end time\n * - Rate Format:\n * - fundingRate: String decimal, positive means longs pay shorts, negative means shorts pay longs\n * - premium: Premium rate\n * - time: Timestamp when the funding rate takes effect (milliseconds)\n *\n * Example Response Data Structure:\n * ```json\n * [\n * {\n * \"coin\": \"BTC\",\n * \"fundingRate\": \"0.0001\",\n * \"premium\": \"0.00005\",\n * \"time\": 1705123200000\n * }\n * ]\n * ```\n */\n getHistoricalFundingRates = (params: {\n coin: string;\n startTime: number;\n endTime?: number;\n }): Promise<\n {\n coin: string;\n fundingRate: string;\n premium: string;\n time: number;\n }[]\n > => this.request('POST', 'info', { ...params, type: 'fundingHistory' });\n\n /**\n * Undocumented mysterious endpoint that returns all MIDs\n *\n * FYI: https://github.com/hyperliquid-dex/hyperliquid-python-sdk/blob/a4280d08ca42936a6851f309b7a4f4ae995a92c0/hyperliquid/info.py#L184\n */\n getAllMids = (): Promise<Record<string, string>> => this.request('POST', 'info', { type: 'allMids' });\n\n /**\n * exchange - placeOrder\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order\n *\n * Meaning of keys:\n * a is asset\n * b is isBuy\n * p is price\n * s is size\n * r is reduceOnly\n * t is type\n * c is cloid (client order id)\n *\n * Meaning of keys in optional builder argument:\n * b is the address the should receive the additional fee\n * f is the size of the fee in tenths of a basis point e.g.\n * if f is 10, 1bp of the order notional will be charged to the user and sent to the builder\n */\n placeOrder = async (params: {\n orders: {\n a: number;\n b: boolean;\n p: string;\n s: string;\n r: boolean;\n t: {\n limit?: {\n tif: string;\n };\n trigger?: {\n isMarke: boolean;\n triggerPx: string;\n tpsl: string;\n };\n };\n c?: number; // optional, used for client order id\n }[];\n builder?: {\n b: string;\n f: number;\n };\n vaultAddress?: string; // optional, used for vault orders\n expiresAfter?: number; // optional, used for vault orders\n }): Promise<{\n status: string;\n response: {\n type: 'order';\n data: {\n statuses: {\n filled?: {\n totalSz: string;\n avgPx: string;\n oid: number;\n };\n error?: string;\n resting?: {\n oid: number;\n };\n }[];\n };\n };\n }> => {\n const action: Record<string, any> = {\n type: 'order',\n orders: params.orders,\n grouping: 'na',\n };\n if (params.builder) {\n action['builder'] = params.builder;\n }\n const nonce = Date.now();\n const signature = await signL1Action(\n this.wallet!,\n action,\n null,\n nonce,\n !!params.expiresAfter ? params.expiresAfter : null,\n true,\n );\n\n return this.request('POST', 'exchange', {\n action,\n nonce,\n signature,\n });\n };\n\n /**\n * exchange - cancelOrder\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#cancel-order-s\n *\n * Meaning of keys:\n * a is asset\n * o is oid (order id)\n */\n cancelOrder = async (params: {\n cancels: {\n a: number;\n o: number;\n }[];\n vaultAddress?: string; // optional, used for vault orders\n expiresAfter?: number; // optional, used for vault orders\n }): Promise<{\n status: string;\n response: {\n type: 'cancel';\n data: {\n statuses:\n | string\n | {\n error: string;\n }[];\n };\n };\n }> => {\n const action: Record<string, any> = {\n type: 'cancel',\n cancels: params.cancels,\n };\n const nonce = Date.now();\n const signature = await signL1Action(\n this.wallet!,\n action,\n null,\n nonce,\n !!params.expiresAfter ? params.expiresAfter : null,\n true,\n );\n return this.request('POST', 'exchange', {\n action,\n nonce,\n signature,\n });\n };\n}\n\nexport const client = new HyperliquidClient({\n auth: {\n private_key: process.env.PRIVATE_KEY!,\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { UUID, formatTime } from '@yuants/utils';\n// @ts-ignore\nimport { ethers } from 'ethers';\nimport { Subject, filter, firstValueFrom, mergeMap, of, shareReplay, throwError, timeout, timer } from 'rxjs';\nimport { signL1Action } from './sign';\n\n/**\n * API: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/notation\n */\nexport class HyperliquidClient {\n noAuth = true;\n private wallet: ethers.Wallet | undefined;\n public public_key: string | undefined;\n constructor(config: {\n auth: {\n private_key: string;\n };\n }) {\n if (config.auth.private_key) {\n this.noAuth = false;\n }\n this.wallet = !this.noAuth ? new ethers.Wallet(config.auth.private_key) : undefined;\n this.public_key = this.wallet?.address;\n }\n\n async request(method: string, path: string, params?: any) {\n const url = new URL('https://api.hyperliquid.xyz');\n\n url.pathname = path;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n const body = method === 'GET' ? '' : JSON.stringify(params);\n // const str = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(signData, secret_key));\n\n console.info(formatTime(Date.now()), method, url.href, JSON.stringify(headers), body);\n const res = await fetch(url.href, {\n method,\n headers,\n body: body || undefined,\n });\n const retStr = await res.text();\n try {\n if (process.env.LOG_LEVEL === 'DEBUG') {\n console.debug(formatTime(Date.now()), 'HyperliquidResponse', path, JSON.stringify(params), retStr);\n }\n return JSON.parse(retStr);\n } catch (e) {\n console.error(formatTime(Date.now()), 'HyperliquidRequestFailed', path, JSON.stringify(params), retStr);\n throw e;\n }\n }\n\n mapPathToRequestChannel: Record<\n string,\n {\n requestQueue: Array<{\n trace_id: string;\n method: string;\n path: string;\n params?: any;\n }>;\n responseChannel: Subject<{ trace_id: string; response?: any; error?: Error }>;\n }\n > = {};\n\n setupChannel(path: string, period: number, limit: number) {\n this.mapPathToRequestChannel[path] = {\n requestQueue: [],\n responseChannel: new Subject(),\n };\n\n const { requestQueue, responseChannel } = this.mapPathToRequestChannel[path];\n timer(0, period)\n .pipe(\n filter(() => requestQueue.length > 0),\n mergeMap(() => requestQueue.splice(0, limit)),\n mergeMap(async (request) => {\n try {\n const res = await this.request(request.method, request.path, request.params);\n return { trace_id: request.trace_id, response: res };\n } catch (error) {\n return { trace_id: request.trace_id, error };\n }\n }),\n )\n .subscribe(responseChannel);\n }\n\n async requestWithFlowControl(\n method: string,\n path: string,\n flowControl: { period: number; limit: number } = { period: 10, limit: Infinity },\n params?: any,\n ) {\n const { period, limit } = flowControl;\n if (!this.mapPathToRequestChannel[path]) {\n this.setupChannel(path, period, limit);\n }\n const uuid = UUID();\n\n const { requestQueue, responseChannel } = this.mapPathToRequestChannel[path];\n const res$ = responseChannel.pipe(\n //\n filter((response) => response.trace_id === uuid),\n mergeMap((response) => (response.error ? throwError(() => response.error) : of(response))),\n timeout(30_000),\n shareReplay(1),\n );\n requestQueue.push({ trace_id: uuid, method, path, params });\n return (await firstValueFrom(res$)).response;\n }\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-users-perpetuals-account-summary\n */\n getUserPerpetualsAccountSummary = (params: {\n user: string;\n }): Promise<{\n marginSummary: {\n accountValue: string;\n totalNtlPos: string;\n totalRawUsd: string;\n totalMarginUsed: string;\n };\n crossMarginSummary: {\n accountValue: string;\n totalNtlPos: string;\n totalRawUsd: string;\n totalMarginUsed: string;\n };\n crossMaintenanceMarginUsed: string;\n withdrawable: string;\n assetPositions: {\n type: string;\n position: {\n coin: string;\n szi: string;\n leverage: {\n type: string;\n value: number;\n };\n entryPx: string;\n positionValue: string;\n unrealizedPnl: string;\n returnOnEquity: string;\n liquidationPx: string;\n marginUsed: string;\n maxLeverage: number;\n cumFunding: {\n allTime: string;\n sinceOpen: string;\n sinceChange: string;\n };\n };\n }[];\n time: number;\n }> => this.request('POST', 'info', { ...params, type: 'clearinghouseState' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-perpetuals-metadata\n */\n getPerpetualsMetaData = (params?: {\n dex?: string;\n }): Promise<{\n universe: {\n name: string;\n szDecimals: number;\n maxLeverage: number;\n onlyIsolated?: boolean;\n isDelisted?: boolean;\n }[];\n marginTables: [\n number,\n {\n description: string;\n marginTiers: {\n lowerBound: string;\n maxLeverage: number;\n }[];\n },\n ][];\n }> => this.request('POST', 'info', { type: 'meta' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/spot#retrieve-spot-metadata\n */\n getSpotMetaData = (): Promise<{\n tokens: {\n name: string;\n szDecimals: number;\n weiDecimals: number;\n index: number;\n tokenId: string;\n isCanonical: boolean;\n evmContract: null;\n fullName: null;\n }[];\n universe: {\n name: string;\n tokens: number[];\n index: number;\n isCanonical: boolean;\n }[];\n }> => this.request('POST', 'info', { type: 'spotMeta' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-a-users-funding-history-or-non-funding-ledger-updates\n */\n getUserFundingHistory = (params: {\n user: string;\n startTime?: number;\n endTime?: number;\n }): Promise<{\n time: number;\n hash: string;\n delta: {\n type: string;\n coin: string;\n usdc: string;\n szi: string;\n fundingRate: string;\n };\n }> => this.request('POST', 'info', { ...params, type: 'fundingHistory' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/spot#retrieve-spot-metadata\n */\n getUserTokenBalances = (params: {\n user: string;\n }): Promise<{\n balances: {\n coin: string;\n token: number;\n hold: string;\n total: string;\n entryNtl: string;\n }[];\n }> => this.request('POST', 'info', { ...params, type: 'tokenBalances' });\n\n /**\n * info - Get Historical Funding Rates\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-historical-funding-rates\n *\n * Data Characteristics:\n * - API Limit: Maximum 500 records per request\n * - Time Ordering: Data returned in **ascending** chronological order (earliest to latest)\n * - Time Format: Uses millisecond timestamps\n * - Pagination Strategy: When data exceeds 500 records, use startTime parameter for pagination\n * - First request: startTime = query start time, endTime = query end time\n * - Subsequent requests: startTime = last record time + 1ms, endTime = query end time\n * - Rate Format:\n * - fundingRate: String decimal, positive means longs pay shorts, negative means shorts pay longs\n * - premium: Premium rate\n * - time: Timestamp when the funding rate takes effect (milliseconds)\n *\n * Example Response Data Structure:\n * ```json\n * [\n * {\n * \"coin\": \"BTC\",\n * \"fundingRate\": \"0.0001\",\n * \"premium\": \"0.00005\",\n * \"time\": 1705123200000\n * }\n * ]\n * ```\n */\n getHistoricalFundingRates = (params: {\n coin: string;\n startTime: number;\n endTime?: number;\n }): Promise<\n {\n coin: string;\n fundingRate: string;\n premium: string;\n time: number;\n }[]\n > => this.request('POST', 'info', { ...params, type: 'fundingHistory' });\n\n /**\n * Undocumented mysterious endpoint that returns all MIDs\n *\n * FYI: https://github.com/hyperliquid-dex/hyperliquid-python-sdk/blob/a4280d08ca42936a6851f309b7a4f4ae995a92c0/hyperliquid/info.py#L184\n */\n getAllMids = (): Promise<Record<string, string>> => this.request('POST', 'info', { type: 'allMids' });\n\n /**\n * info\n *\n * Only the most recent 5000 candles are available\n *\n * Supported intervals: \"1m\", \"3m\", \"5m\", \"15m\", \"30m\", \"1h\", \"2h\", \"4h\", \"8h\", \"12h\", \"1d\", \"3d\", \"1w\", \"1M\"\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint#candle-snapshot\n */\n getCandleSnapshot = (params: {\n req: {\n coin: string;\n interval: string;\n startTime: number;\n endTime: number;\n };\n }): Promise<\n {\n T: number;\n c: string; // close price\n h: string; // high price\n i: string;\n l: string; // low price\n o: string; // open price\n n: number;\n s: string; // Symbol\n t: number; // time in milliseconds\n v: string; // volume\n }[]\n > => this.request('POST', 'info', { type: 'candleSnapshot', ...params });\n\n /**\n * exchange - placeOrder\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order\n *\n * Meaning of keys:\n * a is asset\n * b is isBuy\n * p is price\n * s is size\n * r is reduceOnly\n * t is type\n * c is cloid (client order id)\n *\n * Meaning of keys in optional builder argument:\n * b is the address the should receive the additional fee\n * f is the size of the fee in tenths of a basis point e.g.\n * if f is 10, 1bp of the order notional will be charged to the user and sent to the builder\n */\n placeOrder = async (params: {\n orders: {\n a: number;\n b: boolean;\n p: string;\n s: string;\n r: boolean;\n t: {\n limit?: {\n tif: string;\n };\n trigger?: {\n isMarke: boolean;\n triggerPx: string;\n tpsl: string;\n };\n };\n c?: number; // optional, used for client order id\n }[];\n builder?: {\n b: string;\n f: number;\n };\n vaultAddress?: string; // optional, used for vault orders\n expiresAfter?: number; // optional, used for vault orders\n }): Promise<{\n status: string;\n response: {\n type: 'order';\n data: {\n statuses: {\n filled?: {\n totalSz: string;\n avgPx: string;\n oid: number;\n };\n error?: string;\n resting?: {\n oid: number;\n };\n }[];\n };\n };\n }> => {\n const action: Record<string, any> = {\n type: 'order',\n orders: params.orders,\n grouping: 'na',\n };\n if (params.builder) {\n action['builder'] = params.builder;\n }\n const nonce = Date.now();\n const signature = await signL1Action(\n this.wallet!,\n action,\n null,\n nonce,\n !!params.expiresAfter ? params.expiresAfter : null,\n true,\n );\n\n return this.request('POST', 'exchange', {\n action,\n nonce,\n signature,\n });\n };\n\n /**\n * exchange - cancelOrder\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#cancel-order-s\n *\n * Meaning of keys:\n * a is asset\n * o is oid (order id)\n */\n cancelOrder = async (params: {\n cancels: {\n a: number;\n o: number;\n }[];\n vaultAddress?: string; // optional, used for vault orders\n expiresAfter?: number; // optional, used for vault orders\n }): Promise<{\n status: string;\n response: {\n type: 'cancel';\n data: {\n statuses:\n | string\n | {\n error: string;\n }[];\n };\n };\n }> => {\n const action: Record<string, any> = {\n type: 'cancel',\n cancels: params.cancels,\n };\n const nonce = Date.now();\n const signature = await signL1Action(\n this.wallet!,\n action,\n null,\n nonce,\n !!params.expiresAfter ? params.expiresAfter : null,\n true,\n );\n return this.request('POST', 'exchange', {\n action,\n nonce,\n signature,\n });\n };\n}\n\nexport const client = new HyperliquidClient({\n auth: {\n private_key: process.env.PRIVATE_KEY!,\n },\n});\n"]}
|
package/dist/ohlc.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
2
|
+
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
3
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
4
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
5
|
+
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
6
|
+
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
|
7
|
+
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
8
|
+
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
9
|
+
function fulfill(value) { resume("next", value); }
|
|
10
|
+
function reject(value) { resume("throw", value); }
|
|
11
|
+
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
12
|
+
};
|
|
13
|
+
import { createSeriesProvider } from '@yuants/data-series';
|
|
14
|
+
import { Terminal } from '@yuants/protocol';
|
|
15
|
+
import { decodePath, formatTime } from '@yuants/utils';
|
|
16
|
+
import { client } from './api';
|
|
17
|
+
// Hyperliquid supported intervals
|
|
18
|
+
// 支持的时间间隔: "1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "8h", "12h", "1d", "3d", "1w", "1M"
|
|
19
|
+
const DURATION_TO_HYPERLIQUID_INTERVAL = {
|
|
20
|
+
PT1M: '1m',
|
|
21
|
+
PT3M: '3m',
|
|
22
|
+
PT5M: '5m',
|
|
23
|
+
PT15M: '15m',
|
|
24
|
+
PT30M: '30m',
|
|
25
|
+
PT1H: '1h',
|
|
26
|
+
PT2H: '2h',
|
|
27
|
+
PT4H: '4h',
|
|
28
|
+
PT8H: '8h',
|
|
29
|
+
PT12H: '12h',
|
|
30
|
+
P1D: '1d',
|
|
31
|
+
P3D: '3d',
|
|
32
|
+
P1W: '1w',
|
|
33
|
+
P1M: '1M',
|
|
34
|
+
};
|
|
35
|
+
const DURATION_TO_PERIOD_IN_SEC = {
|
|
36
|
+
PT1M: 60,
|
|
37
|
+
PT3M: 180,
|
|
38
|
+
PT5M: 300,
|
|
39
|
+
PT15M: 900,
|
|
40
|
+
PT30M: 1800,
|
|
41
|
+
PT1H: 3600,
|
|
42
|
+
PT2H: 7200,
|
|
43
|
+
PT4H: 14400,
|
|
44
|
+
PT8H: 28800,
|
|
45
|
+
PT12H: 43200,
|
|
46
|
+
P1D: 86400,
|
|
47
|
+
P3D: 259200,
|
|
48
|
+
P1W: 604800,
|
|
49
|
+
P1M: 2592000,
|
|
50
|
+
};
|
|
51
|
+
createSeriesProvider(Terminal.fromNodeEnv(), {
|
|
52
|
+
tableName: 'ohlc',
|
|
53
|
+
series_id_prefix_parts: ['HYPERLIQUID'],
|
|
54
|
+
reversed: true,
|
|
55
|
+
serviceOptions: { concurrent: 1 },
|
|
56
|
+
queryFn: function ({ series_id, ended_at }) {
|
|
57
|
+
return __asyncGenerator(this, arguments, function* () {
|
|
58
|
+
const [datasource_id, product_id, duration] = decodePath(series_id);
|
|
59
|
+
const period_in_sec = DURATION_TO_PERIOD_IN_SEC[duration];
|
|
60
|
+
if (!datasource_id) {
|
|
61
|
+
throw 'datasource_id is required';
|
|
62
|
+
}
|
|
63
|
+
if (!product_id) {
|
|
64
|
+
throw 'product_id is required';
|
|
65
|
+
}
|
|
66
|
+
if (!period_in_sec) {
|
|
67
|
+
throw 'period_in_sec is required';
|
|
68
|
+
}
|
|
69
|
+
const [instType, instId] = decodePath(product_id);
|
|
70
|
+
if (!instId) {
|
|
71
|
+
throw `invalid product_id: ${product_id}`;
|
|
72
|
+
}
|
|
73
|
+
// 从 instId 中提取币种名称,例如 "BTC-USDC" -> "BTC"
|
|
74
|
+
const coin = instId.split('-')[0];
|
|
75
|
+
const interval = DURATION_TO_HYPERLIQUID_INTERVAL[duration];
|
|
76
|
+
if (!interval) {
|
|
77
|
+
throw `unsupported duration: ${duration}`;
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
// 获取最近 5000 根 K 线,从很早的时间开始到 ended_at
|
|
81
|
+
const startTime = 0; // 从很早开始,让 API 返回最近的数据
|
|
82
|
+
const res = yield __await(client.getCandleSnapshot({
|
|
83
|
+
req: {
|
|
84
|
+
coin: coin,
|
|
85
|
+
interval: interval,
|
|
86
|
+
startTime: startTime,
|
|
87
|
+
endTime: ended_at,
|
|
88
|
+
},
|
|
89
|
+
}));
|
|
90
|
+
console.info(formatTime(Date.now()), 'getCandleSnapshot', coin, interval, `${startTime}-${ended_at}`, `returned ${(res === null || res === void 0 ? void 0 : res.length) || 0} candles`);
|
|
91
|
+
if (!res || !res.length || res.length === 0) {
|
|
92
|
+
return yield __await(void 0);
|
|
93
|
+
}
|
|
94
|
+
// Hyperliquid candle 数据格式: 对象格式
|
|
95
|
+
// { T: number, c: string, h: string, i: string, l: string, o: string, n: number, s: string, t: number, v: string }
|
|
96
|
+
// t: 时间戳(毫秒),o: 开盘价,h: 最高价,l: 最低价,c: 收盘价,v: 成交量
|
|
97
|
+
const data = res
|
|
98
|
+
.filter((x) => x.t < ended_at) // 确保不包含 ended_at 时间点
|
|
99
|
+
.map((x) => ({
|
|
100
|
+
series_id,
|
|
101
|
+
datasource_id,
|
|
102
|
+
product_id,
|
|
103
|
+
duration,
|
|
104
|
+
created_at: formatTime(x.t),
|
|
105
|
+
closed_at: formatTime(x.t + period_in_sec * 1000),
|
|
106
|
+
open: x.o,
|
|
107
|
+
high: x.h,
|
|
108
|
+
low: x.l,
|
|
109
|
+
close: x.c,
|
|
110
|
+
volume: x.v,
|
|
111
|
+
open_interest: '0',
|
|
112
|
+
}))
|
|
113
|
+
.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); // 按时间降序排列
|
|
114
|
+
if (data.length > 0) {
|
|
115
|
+
yield yield __await(data);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
console.error(formatTime(Date.now()), 'getCandleSnapshot failed', coin, interval, error);
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=ohlc.js.map
|
package/dist/ohlc.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ohlc.js","sourceRoot":"","sources":["../src/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 { decodePath, formatTime } from '@yuants/utils';\nimport { client } from './api';\n\n// Hyperliquid supported intervals\n// 支持的时间间隔: \"1m\", \"3m\", \"5m\", \"15m\", \"30m\", \"1h\", \"2h\", \"4h\", \"8h\", \"12h\", \"1d\", \"3d\", \"1w\", \"1M\"\n\nconst DURATION_TO_HYPERLIQUID_INTERVAL: 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 PT8H: '8h',\n PT12H: '12h',\n\n P1D: '1d',\n P3D: '3d',\n P1W: '1w',\n P1M: '1M',\n};\n\nconst DURATION_TO_PERIOD_IN_SEC: Record<string, number> = {\n PT1M: 60,\n PT3M: 180,\n PT5M: 300,\n PT15M: 900,\n PT30M: 1800,\n\n PT1H: 3600,\n PT2H: 7200,\n PT4H: 14400,\n PT8H: 28800,\n PT12H: 43200,\n\n P1D: 86400,\n P3D: 259200,\n P1W: 604800,\n P1M: 2592000,\n};\n\ncreateSeriesProvider<IOHLC>(Terminal.fromNodeEnv(), {\n tableName: 'ohlc',\n series_id_prefix_parts: ['HYPERLIQUID'],\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 period_in_sec = DURATION_TO_PERIOD_IN_SEC[duration];\n\n if (!datasource_id) {\n throw 'datasource_id is required';\n }\n if (!product_id) {\n throw 'product_id is required';\n }\n if (!period_in_sec) {\n throw 'period_in_sec is required';\n }\n\n const [instType, instId] = decodePath(product_id);\n if (!instId) {\n throw `invalid product_id: ${product_id}`;\n }\n\n // 从 instId 中提取币种名称,例如 \"BTC-USDC\" -> \"BTC\"\n const coin = instId.split('-')[0];\n\n const interval = DURATION_TO_HYPERLIQUID_INTERVAL[duration];\n if (!interval) {\n throw `unsupported duration: ${duration}`;\n }\n\n try {\n // 获取最近 5000 根 K 线,从很早的时间开始到 ended_at\n const startTime = 0; // 从很早开始,让 API 返回最近的数据\n\n const res = await client.getCandleSnapshot({\n req: {\n coin: coin,\n interval: interval,\n startTime: startTime,\n endTime: ended_at,\n },\n });\n\n console.info(\n formatTime(Date.now()),\n 'getCandleSnapshot',\n coin,\n interval,\n `${startTime}-${ended_at}`,\n `returned ${res?.length || 0} candles`,\n );\n\n if (!res || !res.length || res.length === 0) {\n return;\n }\n\n // Hyperliquid candle 数据格式: 对象格式\n // { T: number, c: string, h: string, i: string, l: string, o: string, n: number, s: string, t: number, v: string }\n // t: 时间戳(毫秒),o: 开盘价,h: 最高价,l: 最低价,c: 收盘价,v: 成交量\n const data = res\n .filter((x) => x.t < ended_at) // 确保不包含 ended_at 时间点\n .map(\n (x): IOHLC => ({\n series_id,\n datasource_id,\n product_id,\n duration,\n created_at: formatTime(x.t),\n closed_at: formatTime(x.t + period_in_sec * 1000),\n open: x.o,\n high: x.h,\n low: x.l,\n close: x.c,\n volume: x.v,\n open_interest: '0',\n }),\n )\n .sort((a: IOHLC, b: IOHLC) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); // 按时间降序排列\n\n if (data.length > 0) {\n yield data;\n }\n } catch (error) {\n console.error(formatTime(Date.now()), 'getCandleSnapshot failed', coin, interval, error);\n throw error;\n }\n },\n});\n"]}
|
package/lib/api.d.ts
CHANGED
|
@@ -207,6 +207,34 @@ export declare class HyperliquidClient {
|
|
|
207
207
|
* FYI: https://github.com/hyperliquid-dex/hyperliquid-python-sdk/blob/a4280d08ca42936a6851f309b7a4f4ae995a92c0/hyperliquid/info.py#L184
|
|
208
208
|
*/
|
|
209
209
|
getAllMids: () => Promise<Record<string, string>>;
|
|
210
|
+
/**
|
|
211
|
+
* info
|
|
212
|
+
*
|
|
213
|
+
* Only the most recent 5000 candles are available
|
|
214
|
+
*
|
|
215
|
+
* Supported intervals: "1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "8h", "12h", "1d", "3d", "1w", "1M"
|
|
216
|
+
*
|
|
217
|
+
* https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint#candle-snapshot
|
|
218
|
+
*/
|
|
219
|
+
getCandleSnapshot: (params: {
|
|
220
|
+
req: {
|
|
221
|
+
coin: string;
|
|
222
|
+
interval: string;
|
|
223
|
+
startTime: number;
|
|
224
|
+
endTime: number;
|
|
225
|
+
};
|
|
226
|
+
}) => Promise<{
|
|
227
|
+
T: number;
|
|
228
|
+
c: string;
|
|
229
|
+
h: string;
|
|
230
|
+
i: string;
|
|
231
|
+
l: string;
|
|
232
|
+
o: string;
|
|
233
|
+
n: number;
|
|
234
|
+
s: string;
|
|
235
|
+
t: number;
|
|
236
|
+
v: string;
|
|
237
|
+
}[]>;
|
|
210
238
|
/**
|
|
211
239
|
* exchange - placeOrder
|
|
212
240
|
*
|
package/lib/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/lib/api.js
CHANGED
|
@@ -80,6 +80,16 @@ class HyperliquidClient {
|
|
|
80
80
|
* FYI: https://github.com/hyperliquid-dex/hyperliquid-python-sdk/blob/a4280d08ca42936a6851f309b7a4f4ae995a92c0/hyperliquid/info.py#L184
|
|
81
81
|
*/
|
|
82
82
|
this.getAllMids = () => this.request('POST', 'info', { type: 'allMids' });
|
|
83
|
+
/**
|
|
84
|
+
* info
|
|
85
|
+
*
|
|
86
|
+
* Only the most recent 5000 candles are available
|
|
87
|
+
*
|
|
88
|
+
* Supported intervals: "1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "8h", "12h", "1d", "3d", "1w", "1M"
|
|
89
|
+
*
|
|
90
|
+
* https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint#candle-snapshot
|
|
91
|
+
*/
|
|
92
|
+
this.getCandleSnapshot = (params) => this.request('POST', 'info', Object.assign({ type: 'candleSnapshot' }, params));
|
|
83
93
|
/**
|
|
84
94
|
* exchange - placeOrder
|
|
85
95
|
*
|
package/lib/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { UUID, formatTime } from '@yuants/utils';\n// @ts-ignore\nimport { ethers } from 'ethers';\nimport { Subject, filter, firstValueFrom, mergeMap, of, shareReplay, throwError, timeout, timer } from 'rxjs';\nimport { signL1Action } from './sign';\n\n/**\n * API: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/notation\n */\nexport class HyperliquidClient {\n noAuth = true;\n private wallet: ethers.Wallet | undefined;\n public public_key: string | undefined;\n constructor(config: {\n auth: {\n private_key: string;\n };\n }) {\n if (config.auth.private_key) {\n this.noAuth = false;\n }\n this.wallet = !this.noAuth ? new ethers.Wallet(config.auth.private_key) : undefined;\n this.public_key = this.wallet?.address;\n }\n\n async request(method: string, path: string, params?: any) {\n const url = new URL('https://api.hyperliquid.xyz');\n\n url.pathname = path;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n const body = method === 'GET' ? '' : JSON.stringify(params);\n // const str = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(signData, secret_key));\n\n console.info(formatTime(Date.now()), method, url.href, JSON.stringify(headers), body);\n const res = await fetch(url.href, {\n method,\n headers,\n body: body || undefined,\n });\n const retStr = await res.text();\n try {\n if (process.env.LOG_LEVEL === 'DEBUG') {\n console.debug(formatTime(Date.now()), 'HyperliquidResponse', path, JSON.stringify(params), retStr);\n }\n return JSON.parse(retStr);\n } catch (e) {\n console.error(formatTime(Date.now()), 'HyperliquidRequestFailed', path, JSON.stringify(params), retStr);\n throw e;\n }\n }\n\n mapPathToRequestChannel: Record<\n string,\n {\n requestQueue: Array<{\n trace_id: string;\n method: string;\n path: string;\n params?: any;\n }>;\n responseChannel: Subject<{ trace_id: string; response?: any; error?: Error }>;\n }\n > = {};\n\n setupChannel(path: string, period: number, limit: number) {\n this.mapPathToRequestChannel[path] = {\n requestQueue: [],\n responseChannel: new Subject(),\n };\n\n const { requestQueue, responseChannel } = this.mapPathToRequestChannel[path];\n timer(0, period)\n .pipe(\n filter(() => requestQueue.length > 0),\n mergeMap(() => requestQueue.splice(0, limit)),\n mergeMap(async (request) => {\n try {\n const res = await this.request(request.method, request.path, request.params);\n return { trace_id: request.trace_id, response: res };\n } catch (error) {\n return { trace_id: request.trace_id, error };\n }\n }),\n )\n .subscribe(responseChannel);\n }\n\n async requestWithFlowControl(\n method: string,\n path: string,\n flowControl: { period: number; limit: number } = { period: 10, limit: Infinity },\n params?: any,\n ) {\n const { period, limit } = flowControl;\n if (!this.mapPathToRequestChannel[path]) {\n this.setupChannel(path, period, limit);\n }\n const uuid = UUID();\n\n const { requestQueue, responseChannel } = this.mapPathToRequestChannel[path];\n const res$ = responseChannel.pipe(\n //\n filter((response) => response.trace_id === uuid),\n mergeMap((response) => (response.error ? throwError(() => response.error) : of(response))),\n timeout(30_000),\n shareReplay(1),\n );\n requestQueue.push({ trace_id: uuid, method, path, params });\n return (await firstValueFrom(res$)).response;\n }\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-users-perpetuals-account-summary\n */\n getUserPerpetualsAccountSummary = (params: {\n user: string;\n }): Promise<{\n marginSummary: {\n accountValue: string;\n totalNtlPos: string;\n totalRawUsd: string;\n totalMarginUsed: string;\n };\n crossMarginSummary: {\n accountValue: string;\n totalNtlPos: string;\n totalRawUsd: string;\n totalMarginUsed: string;\n };\n crossMaintenanceMarginUsed: string;\n withdrawable: string;\n assetPositions: {\n type: string;\n position: {\n coin: string;\n szi: string;\n leverage: {\n type: string;\n value: number;\n };\n entryPx: string;\n positionValue: string;\n unrealizedPnl: string;\n returnOnEquity: string;\n liquidationPx: string;\n marginUsed: string;\n maxLeverage: number;\n cumFunding: {\n allTime: string;\n sinceOpen: string;\n sinceChange: string;\n };\n };\n }[];\n time: number;\n }> => this.request('POST', 'info', { ...params, type: 'clearinghouseState' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-perpetuals-metadata\n */\n getPerpetualsMetaData = (params?: {\n dex?: string;\n }): Promise<{\n universe: {\n name: string;\n szDecimals: number;\n maxLeverage: number;\n onlyIsolated?: boolean;\n isDelisted?: boolean;\n }[];\n marginTables: [\n number,\n {\n description: string;\n marginTiers: {\n lowerBound: string;\n maxLeverage: number;\n }[];\n },\n ][];\n }> => this.request('POST', 'info', { type: 'meta' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/spot#retrieve-spot-metadata\n */\n getSpotMetaData = (): Promise<{\n tokens: {\n name: string;\n szDecimals: number;\n weiDecimals: number;\n index: number;\n tokenId: string;\n isCanonical: boolean;\n evmContract: null;\n fullName: null;\n }[];\n universe: {\n name: string;\n tokens: number[];\n index: number;\n isCanonical: boolean;\n }[];\n }> => this.request('POST', 'info', { type: 'spotMeta' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-a-users-funding-history-or-non-funding-ledger-updates\n */\n getUserFundingHistory = (params: {\n user: string;\n startTime?: number;\n endTime?: number;\n }): Promise<{\n time: number;\n hash: string;\n delta: {\n type: string;\n coin: string;\n usdc: string;\n szi: string;\n fundingRate: string;\n };\n }> => this.request('POST', 'info', { ...params, type: 'fundingHistory' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/spot#retrieve-spot-metadata\n */\n getUserTokenBalances = (params: {\n user: string;\n }): Promise<{\n balances: {\n coin: string;\n token: number;\n hold: string;\n total: string;\n entryNtl: string;\n }[];\n }> => this.request('POST', 'info', { ...params, type: 'tokenBalances' });\n\n /**\n * info - Get Historical Funding Rates\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-historical-funding-rates\n *\n * Data Characteristics:\n * - API Limit: Maximum 500 records per request\n * - Time Ordering: Data returned in **ascending** chronological order (earliest to latest)\n * - Time Format: Uses millisecond timestamps\n * - Pagination Strategy: When data exceeds 500 records, use startTime parameter for pagination\n * - First request: startTime = query start time, endTime = query end time\n * - Subsequent requests: startTime = last record time + 1ms, endTime = query end time\n * - Rate Format:\n * - fundingRate: String decimal, positive means longs pay shorts, negative means shorts pay longs\n * - premium: Premium rate\n * - time: Timestamp when the funding rate takes effect (milliseconds)\n *\n * Example Response Data Structure:\n * ```json\n * [\n * {\n * \"coin\": \"BTC\",\n * \"fundingRate\": \"0.0001\",\n * \"premium\": \"0.00005\",\n * \"time\": 1705123200000\n * }\n * ]\n * ```\n */\n getHistoricalFundingRates = (params: {\n coin: string;\n startTime: number;\n endTime?: number;\n }): Promise<\n {\n coin: string;\n fundingRate: string;\n premium: string;\n time: number;\n }[]\n > => this.request('POST', 'info', { ...params, type: 'fundingHistory' });\n\n /**\n * Undocumented mysterious endpoint that returns all MIDs\n *\n * FYI: https://github.com/hyperliquid-dex/hyperliquid-python-sdk/blob/a4280d08ca42936a6851f309b7a4f4ae995a92c0/hyperliquid/info.py#L184\n */\n getAllMids = (): Promise<Record<string, string>> => this.request('POST', 'info', { type: 'allMids' });\n\n /**\n * exchange - placeOrder\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order\n *\n * Meaning of keys:\n * a is asset\n * b is isBuy\n * p is price\n * s is size\n * r is reduceOnly\n * t is type\n * c is cloid (client order id)\n *\n * Meaning of keys in optional builder argument:\n * b is the address the should receive the additional fee\n * f is the size of the fee in tenths of a basis point e.g.\n * if f is 10, 1bp of the order notional will be charged to the user and sent to the builder\n */\n placeOrder = async (params: {\n orders: {\n a: number;\n b: boolean;\n p: string;\n s: string;\n r: boolean;\n t: {\n limit?: {\n tif: string;\n };\n trigger?: {\n isMarke: boolean;\n triggerPx: string;\n tpsl: string;\n };\n };\n c?: number; // optional, used for client order id\n }[];\n builder?: {\n b: string;\n f: number;\n };\n vaultAddress?: string; // optional, used for vault orders\n expiresAfter?: number; // optional, used for vault orders\n }): Promise<{\n status: string;\n response: {\n type: 'order';\n data: {\n statuses: {\n filled?: {\n totalSz: string;\n avgPx: string;\n oid: number;\n };\n error?: string;\n resting?: {\n oid: number;\n };\n }[];\n };\n };\n }> => {\n const action: Record<string, any> = {\n type: 'order',\n orders: params.orders,\n grouping: 'na',\n };\n if (params.builder) {\n action['builder'] = params.builder;\n }\n const nonce = Date.now();\n const signature = await signL1Action(\n this.wallet!,\n action,\n null,\n nonce,\n !!params.expiresAfter ? params.expiresAfter : null,\n true,\n );\n\n return this.request('POST', 'exchange', {\n action,\n nonce,\n signature,\n });\n };\n\n /**\n * exchange - cancelOrder\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#cancel-order-s\n *\n * Meaning of keys:\n * a is asset\n * o is oid (order id)\n */\n cancelOrder = async (params: {\n cancels: {\n a: number;\n o: number;\n }[];\n vaultAddress?: string; // optional, used for vault orders\n expiresAfter?: number; // optional, used for vault orders\n }): Promise<{\n status: string;\n response: {\n type: 'cancel';\n data: {\n statuses:\n | string\n | {\n error: string;\n }[];\n };\n };\n }> => {\n const action: Record<string, any> = {\n type: 'cancel',\n cancels: params.cancels,\n };\n const nonce = Date.now();\n const signature = await signL1Action(\n this.wallet!,\n action,\n null,\n nonce,\n !!params.expiresAfter ? params.expiresAfter : null,\n true,\n );\n return this.request('POST', 'exchange', {\n action,\n nonce,\n signature,\n });\n };\n}\n\nexport const client = new HyperliquidClient({\n auth: {\n private_key: process.env.PRIVATE_KEY!,\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { UUID, formatTime } from '@yuants/utils';\n// @ts-ignore\nimport { ethers } from 'ethers';\nimport { Subject, filter, firstValueFrom, mergeMap, of, shareReplay, throwError, timeout, timer } from 'rxjs';\nimport { signL1Action } from './sign';\n\n/**\n * API: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/notation\n */\nexport class HyperliquidClient {\n noAuth = true;\n private wallet: ethers.Wallet | undefined;\n public public_key: string | undefined;\n constructor(config: {\n auth: {\n private_key: string;\n };\n }) {\n if (config.auth.private_key) {\n this.noAuth = false;\n }\n this.wallet = !this.noAuth ? new ethers.Wallet(config.auth.private_key) : undefined;\n this.public_key = this.wallet?.address;\n }\n\n async request(method: string, path: string, params?: any) {\n const url = new URL('https://api.hyperliquid.xyz');\n\n url.pathname = path;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n const body = method === 'GET' ? '' : JSON.stringify(params);\n // const str = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(signData, secret_key));\n\n console.info(formatTime(Date.now()), method, url.href, JSON.stringify(headers), body);\n const res = await fetch(url.href, {\n method,\n headers,\n body: body || undefined,\n });\n const retStr = await res.text();\n try {\n if (process.env.LOG_LEVEL === 'DEBUG') {\n console.debug(formatTime(Date.now()), 'HyperliquidResponse', path, JSON.stringify(params), retStr);\n }\n return JSON.parse(retStr);\n } catch (e) {\n console.error(formatTime(Date.now()), 'HyperliquidRequestFailed', path, JSON.stringify(params), retStr);\n throw e;\n }\n }\n\n mapPathToRequestChannel: Record<\n string,\n {\n requestQueue: Array<{\n trace_id: string;\n method: string;\n path: string;\n params?: any;\n }>;\n responseChannel: Subject<{ trace_id: string; response?: any; error?: Error }>;\n }\n > = {};\n\n setupChannel(path: string, period: number, limit: number) {\n this.mapPathToRequestChannel[path] = {\n requestQueue: [],\n responseChannel: new Subject(),\n };\n\n const { requestQueue, responseChannel } = this.mapPathToRequestChannel[path];\n timer(0, period)\n .pipe(\n filter(() => requestQueue.length > 0),\n mergeMap(() => requestQueue.splice(0, limit)),\n mergeMap(async (request) => {\n try {\n const res = await this.request(request.method, request.path, request.params);\n return { trace_id: request.trace_id, response: res };\n } catch (error) {\n return { trace_id: request.trace_id, error };\n }\n }),\n )\n .subscribe(responseChannel);\n }\n\n async requestWithFlowControl(\n method: string,\n path: string,\n flowControl: { period: number; limit: number } = { period: 10, limit: Infinity },\n params?: any,\n ) {\n const { period, limit } = flowControl;\n if (!this.mapPathToRequestChannel[path]) {\n this.setupChannel(path, period, limit);\n }\n const uuid = UUID();\n\n const { requestQueue, responseChannel } = this.mapPathToRequestChannel[path];\n const res$ = responseChannel.pipe(\n //\n filter((response) => response.trace_id === uuid),\n mergeMap((response) => (response.error ? throwError(() => response.error) : of(response))),\n timeout(30_000),\n shareReplay(1),\n );\n requestQueue.push({ trace_id: uuid, method, path, params });\n return (await firstValueFrom(res$)).response;\n }\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-users-perpetuals-account-summary\n */\n getUserPerpetualsAccountSummary = (params: {\n user: string;\n }): Promise<{\n marginSummary: {\n accountValue: string;\n totalNtlPos: string;\n totalRawUsd: string;\n totalMarginUsed: string;\n };\n crossMarginSummary: {\n accountValue: string;\n totalNtlPos: string;\n totalRawUsd: string;\n totalMarginUsed: string;\n };\n crossMaintenanceMarginUsed: string;\n withdrawable: string;\n assetPositions: {\n type: string;\n position: {\n coin: string;\n szi: string;\n leverage: {\n type: string;\n value: number;\n };\n entryPx: string;\n positionValue: string;\n unrealizedPnl: string;\n returnOnEquity: string;\n liquidationPx: string;\n marginUsed: string;\n maxLeverage: number;\n cumFunding: {\n allTime: string;\n sinceOpen: string;\n sinceChange: string;\n };\n };\n }[];\n time: number;\n }> => this.request('POST', 'info', { ...params, type: 'clearinghouseState' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-perpetuals-metadata\n */\n getPerpetualsMetaData = (params?: {\n dex?: string;\n }): Promise<{\n universe: {\n name: string;\n szDecimals: number;\n maxLeverage: number;\n onlyIsolated?: boolean;\n isDelisted?: boolean;\n }[];\n marginTables: [\n number,\n {\n description: string;\n marginTiers: {\n lowerBound: string;\n maxLeverage: number;\n }[];\n },\n ][];\n }> => this.request('POST', 'info', { type: 'meta' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/spot#retrieve-spot-metadata\n */\n getSpotMetaData = (): Promise<{\n tokens: {\n name: string;\n szDecimals: number;\n weiDecimals: number;\n index: number;\n tokenId: string;\n isCanonical: boolean;\n evmContract: null;\n fullName: null;\n }[];\n universe: {\n name: string;\n tokens: number[];\n index: number;\n isCanonical: boolean;\n }[];\n }> => this.request('POST', 'info', { type: 'spotMeta' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-a-users-funding-history-or-non-funding-ledger-updates\n */\n getUserFundingHistory = (params: {\n user: string;\n startTime?: number;\n endTime?: number;\n }): Promise<{\n time: number;\n hash: string;\n delta: {\n type: string;\n coin: string;\n usdc: string;\n szi: string;\n fundingRate: string;\n };\n }> => this.request('POST', 'info', { ...params, type: 'fundingHistory' });\n\n /**\n * info\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/spot#retrieve-spot-metadata\n */\n getUserTokenBalances = (params: {\n user: string;\n }): Promise<{\n balances: {\n coin: string;\n token: number;\n hold: string;\n total: string;\n entryNtl: string;\n }[];\n }> => this.request('POST', 'info', { ...params, type: 'tokenBalances' });\n\n /**\n * info - Get Historical Funding Rates\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-historical-funding-rates\n *\n * Data Characteristics:\n * - API Limit: Maximum 500 records per request\n * - Time Ordering: Data returned in **ascending** chronological order (earliest to latest)\n * - Time Format: Uses millisecond timestamps\n * - Pagination Strategy: When data exceeds 500 records, use startTime parameter for pagination\n * - First request: startTime = query start time, endTime = query end time\n * - Subsequent requests: startTime = last record time + 1ms, endTime = query end time\n * - Rate Format:\n * - fundingRate: String decimal, positive means longs pay shorts, negative means shorts pay longs\n * - premium: Premium rate\n * - time: Timestamp when the funding rate takes effect (milliseconds)\n *\n * Example Response Data Structure:\n * ```json\n * [\n * {\n * \"coin\": \"BTC\",\n * \"fundingRate\": \"0.0001\",\n * \"premium\": \"0.00005\",\n * \"time\": 1705123200000\n * }\n * ]\n * ```\n */\n getHistoricalFundingRates = (params: {\n coin: string;\n startTime: number;\n endTime?: number;\n }): Promise<\n {\n coin: string;\n fundingRate: string;\n premium: string;\n time: number;\n }[]\n > => this.request('POST', 'info', { ...params, type: 'fundingHistory' });\n\n /**\n * Undocumented mysterious endpoint that returns all MIDs\n *\n * FYI: https://github.com/hyperliquid-dex/hyperliquid-python-sdk/blob/a4280d08ca42936a6851f309b7a4f4ae995a92c0/hyperliquid/info.py#L184\n */\n getAllMids = (): Promise<Record<string, string>> => this.request('POST', 'info', { type: 'allMids' });\n\n /**\n * info\n *\n * Only the most recent 5000 candles are available\n *\n * Supported intervals: \"1m\", \"3m\", \"5m\", \"15m\", \"30m\", \"1h\", \"2h\", \"4h\", \"8h\", \"12h\", \"1d\", \"3d\", \"1w\", \"1M\"\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint#candle-snapshot\n */\n getCandleSnapshot = (params: {\n req: {\n coin: string;\n interval: string;\n startTime: number;\n endTime: number;\n };\n }): Promise<\n {\n T: number;\n c: string; // close price\n h: string; // high price\n i: string;\n l: string; // low price\n o: string; // open price\n n: number;\n s: string; // Symbol\n t: number; // time in milliseconds\n v: string; // volume\n }[]\n > => this.request('POST', 'info', { type: 'candleSnapshot', ...params });\n\n /**\n * exchange - placeOrder\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#place-an-order\n *\n * Meaning of keys:\n * a is asset\n * b is isBuy\n * p is price\n * s is size\n * r is reduceOnly\n * t is type\n * c is cloid (client order id)\n *\n * Meaning of keys in optional builder argument:\n * b is the address the should receive the additional fee\n * f is the size of the fee in tenths of a basis point e.g.\n * if f is 10, 1bp of the order notional will be charged to the user and sent to the builder\n */\n placeOrder = async (params: {\n orders: {\n a: number;\n b: boolean;\n p: string;\n s: string;\n r: boolean;\n t: {\n limit?: {\n tif: string;\n };\n trigger?: {\n isMarke: boolean;\n triggerPx: string;\n tpsl: string;\n };\n };\n c?: number; // optional, used for client order id\n }[];\n builder?: {\n b: string;\n f: number;\n };\n vaultAddress?: string; // optional, used for vault orders\n expiresAfter?: number; // optional, used for vault orders\n }): Promise<{\n status: string;\n response: {\n type: 'order';\n data: {\n statuses: {\n filled?: {\n totalSz: string;\n avgPx: string;\n oid: number;\n };\n error?: string;\n resting?: {\n oid: number;\n };\n }[];\n };\n };\n }> => {\n const action: Record<string, any> = {\n type: 'order',\n orders: params.orders,\n grouping: 'na',\n };\n if (params.builder) {\n action['builder'] = params.builder;\n }\n const nonce = Date.now();\n const signature = await signL1Action(\n this.wallet!,\n action,\n null,\n nonce,\n !!params.expiresAfter ? params.expiresAfter : null,\n true,\n );\n\n return this.request('POST', 'exchange', {\n action,\n nonce,\n signature,\n });\n };\n\n /**\n * exchange - cancelOrder\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#cancel-order-s\n *\n * Meaning of keys:\n * a is asset\n * o is oid (order id)\n */\n cancelOrder = async (params: {\n cancels: {\n a: number;\n o: number;\n }[];\n vaultAddress?: string; // optional, used for vault orders\n expiresAfter?: number; // optional, used for vault orders\n }): Promise<{\n status: string;\n response: {\n type: 'cancel';\n data: {\n statuses:\n | string\n | {\n error: string;\n }[];\n };\n };\n }> => {\n const action: Record<string, any> = {\n type: 'cancel',\n cancels: params.cancels,\n };\n const nonce = Date.now();\n const signature = await signL1Action(\n this.wallet!,\n action,\n null,\n nonce,\n !!params.expiresAfter ? params.expiresAfter : null,\n true,\n );\n return this.request('POST', 'exchange', {\n action,\n nonce,\n signature,\n });\n };\n}\n\nexport const client = new HyperliquidClient({\n auth: {\n private_key: process.env.PRIVATE_KEY!,\n },\n});\n"]}
|
package/lib/ohlc.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ohlc.d.ts","sourceRoot":"","sources":["../src/ohlc.ts"],"names":[],"mappings":""}
|
package/lib/ohlc.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
3
|
+
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
4
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
5
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
6
|
+
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
7
|
+
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
|
8
|
+
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
9
|
+
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
10
|
+
function fulfill(value) { resume("next", value); }
|
|
11
|
+
function reject(value) { resume("throw", value); }
|
|
12
|
+
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const data_series_1 = require("@yuants/data-series");
|
|
16
|
+
const protocol_1 = require("@yuants/protocol");
|
|
17
|
+
const utils_1 = require("@yuants/utils");
|
|
18
|
+
const api_1 = require("./api");
|
|
19
|
+
// Hyperliquid supported intervals
|
|
20
|
+
// 支持的时间间隔: "1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "8h", "12h", "1d", "3d", "1w", "1M"
|
|
21
|
+
const DURATION_TO_HYPERLIQUID_INTERVAL = {
|
|
22
|
+
PT1M: '1m',
|
|
23
|
+
PT3M: '3m',
|
|
24
|
+
PT5M: '5m',
|
|
25
|
+
PT15M: '15m',
|
|
26
|
+
PT30M: '30m',
|
|
27
|
+
PT1H: '1h',
|
|
28
|
+
PT2H: '2h',
|
|
29
|
+
PT4H: '4h',
|
|
30
|
+
PT8H: '8h',
|
|
31
|
+
PT12H: '12h',
|
|
32
|
+
P1D: '1d',
|
|
33
|
+
P3D: '3d',
|
|
34
|
+
P1W: '1w',
|
|
35
|
+
P1M: '1M',
|
|
36
|
+
};
|
|
37
|
+
const DURATION_TO_PERIOD_IN_SEC = {
|
|
38
|
+
PT1M: 60,
|
|
39
|
+
PT3M: 180,
|
|
40
|
+
PT5M: 300,
|
|
41
|
+
PT15M: 900,
|
|
42
|
+
PT30M: 1800,
|
|
43
|
+
PT1H: 3600,
|
|
44
|
+
PT2H: 7200,
|
|
45
|
+
PT4H: 14400,
|
|
46
|
+
PT8H: 28800,
|
|
47
|
+
PT12H: 43200,
|
|
48
|
+
P1D: 86400,
|
|
49
|
+
P3D: 259200,
|
|
50
|
+
P1W: 604800,
|
|
51
|
+
P1M: 2592000,
|
|
52
|
+
};
|
|
53
|
+
(0, data_series_1.createSeriesProvider)(protocol_1.Terminal.fromNodeEnv(), {
|
|
54
|
+
tableName: 'ohlc',
|
|
55
|
+
series_id_prefix_parts: ['HYPERLIQUID'],
|
|
56
|
+
reversed: true,
|
|
57
|
+
serviceOptions: { concurrent: 1 },
|
|
58
|
+
queryFn: function ({ series_id, ended_at }) {
|
|
59
|
+
return __asyncGenerator(this, arguments, function* () {
|
|
60
|
+
const [datasource_id, product_id, duration] = (0, utils_1.decodePath)(series_id);
|
|
61
|
+
const period_in_sec = DURATION_TO_PERIOD_IN_SEC[duration];
|
|
62
|
+
if (!datasource_id) {
|
|
63
|
+
throw 'datasource_id is required';
|
|
64
|
+
}
|
|
65
|
+
if (!product_id) {
|
|
66
|
+
throw 'product_id is required';
|
|
67
|
+
}
|
|
68
|
+
if (!period_in_sec) {
|
|
69
|
+
throw 'period_in_sec is required';
|
|
70
|
+
}
|
|
71
|
+
const [instType, instId] = (0, utils_1.decodePath)(product_id);
|
|
72
|
+
if (!instId) {
|
|
73
|
+
throw `invalid product_id: ${product_id}`;
|
|
74
|
+
}
|
|
75
|
+
// 从 instId 中提取币种名称,例如 "BTC-USDC" -> "BTC"
|
|
76
|
+
const coin = instId.split('-')[0];
|
|
77
|
+
const interval = DURATION_TO_HYPERLIQUID_INTERVAL[duration];
|
|
78
|
+
if (!interval) {
|
|
79
|
+
throw `unsupported duration: ${duration}`;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
// 获取最近 5000 根 K 线,从很早的时间开始到 ended_at
|
|
83
|
+
const startTime = 0; // 从很早开始,让 API 返回最近的数据
|
|
84
|
+
const res = yield __await(api_1.client.getCandleSnapshot({
|
|
85
|
+
req: {
|
|
86
|
+
coin: coin,
|
|
87
|
+
interval: interval,
|
|
88
|
+
startTime: startTime,
|
|
89
|
+
endTime: ended_at,
|
|
90
|
+
},
|
|
91
|
+
}));
|
|
92
|
+
console.info((0, utils_1.formatTime)(Date.now()), 'getCandleSnapshot', coin, interval, `${startTime}-${ended_at}`, `returned ${(res === null || res === void 0 ? void 0 : res.length) || 0} candles`);
|
|
93
|
+
if (!res || !res.length || res.length === 0) {
|
|
94
|
+
return yield __await(void 0);
|
|
95
|
+
}
|
|
96
|
+
// Hyperliquid candle 数据格式: 对象格式
|
|
97
|
+
// { T: number, c: string, h: string, i: string, l: string, o: string, n: number, s: string, t: number, v: string }
|
|
98
|
+
// t: 时间戳(毫秒),o: 开盘价,h: 最高价,l: 最低价,c: 收盘价,v: 成交量
|
|
99
|
+
const data = res
|
|
100
|
+
.filter((x) => x.t < ended_at) // 确保不包含 ended_at 时间点
|
|
101
|
+
.map((x) => ({
|
|
102
|
+
series_id,
|
|
103
|
+
datasource_id,
|
|
104
|
+
product_id,
|
|
105
|
+
duration,
|
|
106
|
+
created_at: (0, utils_1.formatTime)(x.t),
|
|
107
|
+
closed_at: (0, utils_1.formatTime)(x.t + period_in_sec * 1000),
|
|
108
|
+
open: x.o,
|
|
109
|
+
high: x.h,
|
|
110
|
+
low: x.l,
|
|
111
|
+
close: x.c,
|
|
112
|
+
volume: x.v,
|
|
113
|
+
open_interest: '0',
|
|
114
|
+
}))
|
|
115
|
+
.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); // 按时间降序排列
|
|
116
|
+
if (data.length > 0) {
|
|
117
|
+
yield yield __await(data);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error((0, utils_1.formatTime)(Date.now()), 'getCandleSnapshot failed', coin, interval, error);
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=ohlc.js.map
|
package/lib/ohlc.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ohlc.js","sourceRoot":"","sources":["../src/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 { decodePath, formatTime } from '@yuants/utils';\nimport { client } from './api';\n\n// Hyperliquid supported intervals\n// 支持的时间间隔: \"1m\", \"3m\", \"5m\", \"15m\", \"30m\", \"1h\", \"2h\", \"4h\", \"8h\", \"12h\", \"1d\", \"3d\", \"1w\", \"1M\"\n\nconst DURATION_TO_HYPERLIQUID_INTERVAL: 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 PT8H: '8h',\n PT12H: '12h',\n\n P1D: '1d',\n P3D: '3d',\n P1W: '1w',\n P1M: '1M',\n};\n\nconst DURATION_TO_PERIOD_IN_SEC: Record<string, number> = {\n PT1M: 60,\n PT3M: 180,\n PT5M: 300,\n PT15M: 900,\n PT30M: 1800,\n\n PT1H: 3600,\n PT2H: 7200,\n PT4H: 14400,\n PT8H: 28800,\n PT12H: 43200,\n\n P1D: 86400,\n P3D: 259200,\n P1W: 604800,\n P1M: 2592000,\n};\n\ncreateSeriesProvider<IOHLC>(Terminal.fromNodeEnv(), {\n tableName: 'ohlc',\n series_id_prefix_parts: ['HYPERLIQUID'],\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 period_in_sec = DURATION_TO_PERIOD_IN_SEC[duration];\n\n if (!datasource_id) {\n throw 'datasource_id is required';\n }\n if (!product_id) {\n throw 'product_id is required';\n }\n if (!period_in_sec) {\n throw 'period_in_sec is required';\n }\n\n const [instType, instId] = decodePath(product_id);\n if (!instId) {\n throw `invalid product_id: ${product_id}`;\n }\n\n // 从 instId 中提取币种名称,例如 \"BTC-USDC\" -> \"BTC\"\n const coin = instId.split('-')[0];\n\n const interval = DURATION_TO_HYPERLIQUID_INTERVAL[duration];\n if (!interval) {\n throw `unsupported duration: ${duration}`;\n }\n\n try {\n // 获取最近 5000 根 K 线,从很早的时间开始到 ended_at\n const startTime = 0; // 从很早开始,让 API 返回最近的数据\n\n const res = await client.getCandleSnapshot({\n req: {\n coin: coin,\n interval: interval,\n startTime: startTime,\n endTime: ended_at,\n },\n });\n\n console.info(\n formatTime(Date.now()),\n 'getCandleSnapshot',\n coin,\n interval,\n `${startTime}-${ended_at}`,\n `returned ${res?.length || 0} candles`,\n );\n\n if (!res || !res.length || res.length === 0) {\n return;\n }\n\n // Hyperliquid candle 数据格式: 对象格式\n // { T: number, c: string, h: string, i: string, l: string, o: string, n: number, s: string, t: number, v: string }\n // t: 时间戳(毫秒),o: 开盘价,h: 最高价,l: 最低价,c: 收盘价,v: 成交量\n const data = res\n .filter((x) => x.t < ended_at) // 确保不包含 ended_at 时间点\n .map(\n (x): IOHLC => ({\n series_id,\n datasource_id,\n product_id,\n duration,\n created_at: formatTime(x.t),\n closed_at: formatTime(x.t + period_in_sec * 1000),\n open: x.o,\n high: x.h,\n low: x.l,\n close: x.c,\n volume: x.v,\n open_interest: '0',\n }),\n )\n .sort((a: IOHLC, b: IOHLC) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); // 按时间降序排列\n\n if (data.length > 0) {\n yield data;\n }\n } catch (error) {\n console.error(formatTime(Date.now()), 'getCandleSnapshot failed', coin, interval, error);\n throw error;\n }\n },\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuants/vendor-hyperliquid",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"bin": "lib/cli.js",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@yuants/protocol": "0.37.3",
|
|
12
12
|
"@yuants/transfer": "0.2.5",
|
|
13
|
-
"@yuants/data-account": "0.3.
|
|
13
|
+
"@yuants/data-account": "0.3.6",
|
|
14
14
|
"@yuants/utils": "0.6.0",
|
|
15
15
|
"@yuants/sql": "0.8.4",
|
|
16
16
|
"@yuants/data-product": "0.2.6",
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"crypto-js": "^4.2.0",
|
|
21
21
|
"hyperliquid": "~1.6.2",
|
|
22
22
|
"ethers": "~6.13.5",
|
|
23
|
-
"@msgpack/msgpack": "~3.1.2"
|
|
23
|
+
"@msgpack/msgpack": "~3.1.2",
|
|
24
|
+
"@yuants/data-ohlc": "0.3.13"
|
|
24
25
|
},
|
|
25
26
|
"devDependencies": {
|
|
26
27
|
"@microsoft/api-extractor": "~7.30.0",
|
package/temp/image-tag
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
sha-
|
|
1
|
+
sha-c6511e35a4a528311dff185f44f36f46b195fb0f
|
package/temp/package-deps.json
CHANGED
|
@@ -1,32 +1,34 @@
|
|
|
1
1
|
{
|
|
2
|
-
"apps/vendor-hyperliquid/CHANGELOG.json": "
|
|
3
|
-
"apps/vendor-hyperliquid/CHANGELOG.md": "
|
|
2
|
+
"apps/vendor-hyperliquid/CHANGELOG.json": "2cef120ef291678d2e6487fa78482866a633e632",
|
|
3
|
+
"apps/vendor-hyperliquid/CHANGELOG.md": "8b91739c43ec6462e386b49413333927b00c4809",
|
|
4
4
|
"apps/vendor-hyperliquid/api-extractor.json": "62f4fd324425b9a235f0c117975967aab09ced0c",
|
|
5
5
|
"apps/vendor-hyperliquid/build/Dockerfile": "1c2ae19b2c8549403281594a463aaae67d70400c",
|
|
6
6
|
"apps/vendor-hyperliquid/config/jest.config.json": "4bb17bde3ee911163a3edb36a6eb71491d80b1bd",
|
|
7
7
|
"apps/vendor-hyperliquid/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
|
|
8
8
|
"apps/vendor-hyperliquid/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
|
|
9
9
|
"apps/vendor-hyperliquid/etc/vendor-hyperliquid.api.md": "66675bd88afa1fe945f0d4023984c1c9c3e60a34",
|
|
10
|
-
"apps/vendor-hyperliquid/package.json": "
|
|
11
|
-
"apps/vendor-hyperliquid/src/api.ts": "
|
|
10
|
+
"apps/vendor-hyperliquid/package.json": "6919b0ef9d7ba5856ac895aef7d2958bebda4983",
|
|
11
|
+
"apps/vendor-hyperliquid/src/api.ts": "041aa6e0e322b7c6ea5c822119c695b05d32295a",
|
|
12
12
|
"apps/vendor-hyperliquid/src/cli.ts": "9bf6b5559a6c6f33da20e74cc6c5d702c60ec891",
|
|
13
13
|
"apps/vendor-hyperliquid/src/extension.ts": "451dc84e9d62d0e87aec1e04a2a8375aaef873a3",
|
|
14
14
|
"apps/vendor-hyperliquid/src/index.ts": "0b84c433e1cb0c6b718e54f88c213c9d1b632691",
|
|
15
15
|
"apps/vendor-hyperliquid/src/interest_rate.ts": "5b46f8a4904734d9801e3ddd1146813918e36835",
|
|
16
|
+
"apps/vendor-hyperliquid/src/ohlc.ts": "b1272944f0ffe8dd77ef9e7e39429efb7d2e5006",
|
|
16
17
|
"apps/vendor-hyperliquid/src/order.ts": "26bbe7b5e52a7b7fbff4ea7bb8944b7c7b42d664",
|
|
17
18
|
"apps/vendor-hyperliquid/src/product.ts": "73a920896d1c825885d93c244de7d48ab93bb902",
|
|
18
19
|
"apps/vendor-hyperliquid/src/sign.ts": "94f4e5604a01d197d164b42415b17789ab2b6889",
|
|
19
20
|
"apps/vendor-hyperliquid/src/terminal.ts": "04776a178d253a2e53f9c84c802e80f67aa9179b",
|
|
20
21
|
"apps/vendor-hyperliquid/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
|
|
21
|
-
"apps/vendor-hyperliquid/.rush/temp/shrinkwrap-deps.json": "
|
|
22
|
+
"apps/vendor-hyperliquid/.rush/temp/shrinkwrap-deps.json": "a644dec0eeab2f37ea8753d3b91dda558ffaf336",
|
|
22
23
|
"libraries/protocol/temp/package-deps.json": "43291b31649f44821b64235587e30fe4663fc305",
|
|
23
24
|
"libraries/transfer/temp/package-deps.json": "a662579703128c1770f30f8ffaab3f5a233f9d48",
|
|
24
|
-
"libraries/data-account/temp/package-deps.json": "
|
|
25
|
+
"libraries/data-account/temp/package-deps.json": "6271fcb95ec701464eb1e36e3efad6d674644484",
|
|
25
26
|
"libraries/utils/temp/package-deps.json": "ecdd5e56cb2b6db83ee9caf8784ad342484f1699",
|
|
26
27
|
"libraries/sql/temp/package-deps.json": "ccd7161a4384bf97c6a29bff21030ed3bea5336f",
|
|
27
28
|
"libraries/data-product/temp/package-deps.json": "08342cfa222eca4cd64d23f753ae9a2cd5254343",
|
|
28
29
|
"libraries/data-interest-rate/temp/package-deps.json": "27c147717413bf219a8aef339c14411290cd7d93",
|
|
29
30
|
"libraries/data-series/temp/package-deps.json": "4024c0f6e805fecc48dbdc2045d3d3c0c5c609db",
|
|
31
|
+
"libraries/data-ohlc/temp/package-deps.json": "d8812a8cdf4b60e7d3a66ff723f6d9ec82f27259",
|
|
30
32
|
"libraries/extension/temp/package-deps.json": "f22ec5c30214f7aeeda63f46bd920290be555f57",
|
|
31
33
|
"tools/toolkit/temp/package-deps.json": "eb0447c467da3a90db0913ed01e42ec0de840234"
|
|
32
34
|
}
|