@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 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
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ohlc.d.ts.map
@@ -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
@@ -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.1.3",
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.5",
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-1bd0d651f2c874352cef14ea91dbba7c187dfad7
1
+ sha-c6511e35a4a528311dff185f44f36f46b195fb0f
@@ -1,32 +1,34 @@
1
1
  {
2
- "apps/vendor-hyperliquid/CHANGELOG.json": "b0e08cf0fe70e9340034d10f4066b650b089feb4",
3
- "apps/vendor-hyperliquid/CHANGELOG.md": "badcf6a8562615c953c521921666e0e6f9996d9f",
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": "4f468643201422f428d860c76d844399908b0c4d",
11
- "apps/vendor-hyperliquid/src/api.ts": "f30431f81789561acc3b8861a71b20053aeb0b0a",
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": "926c9074c4884ebaf0104ca91ed05ffd99d007cb",
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": "8cd059657ea073e638ba6dacf3444b7e9bd363e7",
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
  }