@yuants/vendor-hyperliquid 0.4.4 → 0.4.6
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 +6 -0
- package/dist/api.js.map +1 -1
- package/dist/quote.js +26 -9
- package/dist/quote.js.map +1 -1
- package/lib/api.d.ts +27 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +6 -0
- package/lib/api.js.map +1 -1
- package/lib/quote.js +25 -8
- package/lib/quote.js.map +1 -1
- package/package.json +3 -3
- package/temp/package-deps.json +7 -7
package/dist/api.js
CHANGED
|
@@ -85,6 +85,12 @@ export class HyperliquidClient {
|
|
|
85
85
|
* FYI: https://github.com/hyperliquid-dex/hyperliquid-python-sdk/blob/a4280d08ca42936a6851f309b7a4f4ae995a92c0/hyperliquid/info.py#L184
|
|
86
86
|
*/
|
|
87
87
|
this.getAllMids = () => this.request('POST', 'info', { type: 'allMids' });
|
|
88
|
+
/**
|
|
89
|
+
* info
|
|
90
|
+
*
|
|
91
|
+
* https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-perpetuals-asset-contexts-includes-mark-price-current-funding-open-interest-etc.
|
|
92
|
+
*/
|
|
93
|
+
this.getMetaAndAssetCtxs = () => this.request('POST', 'info', { type: 'metaAndAssetCtxs' });
|
|
88
94
|
/**
|
|
89
95
|
* info
|
|
90
96
|
*
|
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\n *\n * Retrieve user's open orders\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint#open-orders\n */\n getUserOpenOrders = (params: {\n user: string;\n }): Promise<\n {\n coin: string;\n limitPx: string;\n oid: number;\n side: string;\n sz: string;\n timestamp: number;\n }[]\n > => this.request('POST', 'info', { ...params, type: 'openOrders' });\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"]}
|
|
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\n *\n * Retrieve user's open orders\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint#open-orders\n */\n getUserOpenOrders = (params: {\n user: string;\n }): Promise<\n {\n coin: string;\n limitPx: string;\n oid: number;\n side: string;\n sz: string;\n timestamp: number;\n }[]\n > => this.request('POST', 'info', { ...params, type: 'openOrders' });\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 * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-perpetuals-asset-contexts-includes-mark-price-current-funding-open-interest-etc.\n */\n getMetaAndAssetCtxs = (): Promise<\n [\n {\n universe: {\n name: string;\n szDecimals: number;\n maxLeverage: number;\n onlyIsolated?: boolean;\n isDelisted?: boolean;\n }[];\n },\n {\n dayNtlVlm: string;\n funding: string;\n impactPxs: [string, string];\n markPx: string;\n midPx: string;\n openInterest: string;\n oraclePx: string;\n premium: string;\n prevDayPx: string;\n }[],\n ]\n > => this.request('POST', 'info', { type: 'metaAndAssetCtxs' });\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/quote.js
CHANGED
|
@@ -1,17 +1,34 @@
|
|
|
1
1
|
import { Terminal } from '@yuants/protocol';
|
|
2
2
|
import { writeToSQL } from '@yuants/sql';
|
|
3
3
|
import { decodePath, encodePath } from '@yuants/utils';
|
|
4
|
-
import { defer, filter, map, mergeMap, repeat, retry, shareReplay } from 'rxjs';
|
|
4
|
+
import { defer, filter, map, mergeMap, repeat, retry, shareReplay, withLatestFrom } from 'rxjs';
|
|
5
5
|
import { client } from './api';
|
|
6
6
|
const terminal = Terminal.fromNodeEnv();
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
const ASSET_CTX_REFRESH_INTERVAL = process.env.ASSET_CTX_REFRESH_INTERVAL
|
|
8
|
+
? Number(process.env.ASSET_CTX_REFRESH_INTERVAL)
|
|
9
|
+
: 5000;
|
|
10
|
+
const assetCtxMap$ = defer(() => client.getMetaAndAssetCtxs()).pipe(map(([meta, assetCtxs]) => {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
const entries = (_b = (_a = meta === null || meta === void 0 ? void 0 : meta.universe) === null || _a === void 0 ? void 0 : _a.map((asset, index) => [
|
|
13
|
+
asset.name,
|
|
14
|
+
assetCtxs === null || assetCtxs === void 0 ? void 0 : assetCtxs[index],
|
|
15
|
+
])) !== null && _b !== void 0 ? _b : [];
|
|
16
|
+
return new Map(entries.filter(([, ctx]) => !!ctx));
|
|
17
|
+
}), repeat({ delay: ASSET_CTX_REFRESH_INTERVAL }), retry({ delay: 5000 }), shareReplay({ bufferSize: 1, refCount: true }));
|
|
18
|
+
const quote$ = defer(() => client.getAllMids()).pipe(map((mids) => Object.entries(mids !== null && mids !== void 0 ? mids : {})), mergeMap((entries) => entries), withLatestFrom(assetCtxMap$), map(([entry, assetCtxMap]) => {
|
|
19
|
+
var _a;
|
|
20
|
+
const [coin, price] = entry;
|
|
21
|
+
const ctx = assetCtxMap.get(coin);
|
|
22
|
+
return {
|
|
23
|
+
datasource_id: 'HYPERLIQUID',
|
|
24
|
+
product_id: encodePath('PERPETUAL', `${coin}-USD`),
|
|
25
|
+
last_price: `${price}`,
|
|
26
|
+
bid_price: `${price}`,
|
|
27
|
+
ask_price: `${price}`,
|
|
28
|
+
open_interest: `${(_a = ctx === null || ctx === void 0 ? void 0 : ctx.openInterest) !== null && _a !== void 0 ? _a : 0}`,
|
|
29
|
+
updated_at: new Date().toISOString(),
|
|
30
|
+
};
|
|
31
|
+
}), repeat({ delay: 1000 }), retry({ delay: 5000 }), shareReplay({ bufferSize: 1, refCount: true }));
|
|
15
32
|
if (process.env.WRITE_QUOTE_TO_SQL === 'true') {
|
|
16
33
|
quote$
|
|
17
34
|
.pipe(writeToSQL({
|
package/dist/quote.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../src/quote.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../src/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { decodePath, encodePath } from '@yuants/utils';\nimport { defer, filter, map, mergeMap, repeat, retry, shareReplay, withLatestFrom } from 'rxjs';\nimport type { IQuote } from '../../../libraries/data-quote/lib';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\nconst ASSET_CTX_REFRESH_INTERVAL = process.env.ASSET_CTX_REFRESH_INTERVAL\n ? Number(process.env.ASSET_CTX_REFRESH_INTERVAL)\n : 5_000;\n\ntype HyperliquidAssetContext = Awaited<ReturnType<typeof client.getMetaAndAssetCtxs>>[1][number];\n\nconst assetCtxMap$ = defer(() => client.getMetaAndAssetCtxs()).pipe(\n map(([meta, assetCtxs]) => {\n const entries =\n meta?.universe?.map<[string, HyperliquidAssetContext | undefined]>((asset, index) => [\n asset.name,\n assetCtxs?.[index],\n ]) ?? [];\n return new Map(entries.filter(([, ctx]) => !!ctx));\n }),\n repeat({ delay: ASSET_CTX_REFRESH_INTERVAL }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nconst quote$ = defer(() => client.getAllMids()).pipe(\n map((mids) => Object.entries(mids ?? {})),\n mergeMap((entries) => entries),\n withLatestFrom(assetCtxMap$),\n map(([entry, assetCtxMap]): Partial<IQuote> => {\n const [coin, price] = entry;\n const ctx = assetCtxMap.get(coin);\n return {\n datasource_id: 'HYPERLIQUID',\n product_id: encodePath('PERPETUAL', `${coin}-USD`),\n last_price: `${price}`,\n bid_price: `${price}`,\n ask_price: `${price}`,\n open_interest: `${ctx?.openInterest ?? 0}`,\n updated_at: new Date().toISOString(),\n };\n }),\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nif (process.env.WRITE_QUOTE_TO_SQL === 'true') {\n quote$\n .pipe(\n writeToSQL({\n terminal,\n tableName: 'quote',\n writeInterval: 1000,\n conflictKeys: ['datasource_id', 'product_id'],\n }),\n )\n .subscribe();\n\n terminal.channel.publishChannel('quote', { pattern: '^HYPERLIQUID/' }, (channel_id) => {\n const [datasourceId, productId] = decodePath(channel_id);\n if (!datasourceId || !productId) {\n throw new Error(`Invalid channel_id: ${channel_id}`);\n }\n return quote$.pipe(filter((quote) => quote.product_id === productId));\n });\n}\n"]}
|
package/lib/api.d.ts
CHANGED
|
@@ -224,6 +224,33 @@ export declare class HyperliquidClient {
|
|
|
224
224
|
* FYI: https://github.com/hyperliquid-dex/hyperliquid-python-sdk/blob/a4280d08ca42936a6851f309b7a4f4ae995a92c0/hyperliquid/info.py#L184
|
|
225
225
|
*/
|
|
226
226
|
getAllMids: () => Promise<Record<string, string>>;
|
|
227
|
+
/**
|
|
228
|
+
* info
|
|
229
|
+
*
|
|
230
|
+
* https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-perpetuals-asset-contexts-includes-mark-price-current-funding-open-interest-etc.
|
|
231
|
+
*/
|
|
232
|
+
getMetaAndAssetCtxs: () => Promise<[
|
|
233
|
+
{
|
|
234
|
+
universe: {
|
|
235
|
+
name: string;
|
|
236
|
+
szDecimals: number;
|
|
237
|
+
maxLeverage: number;
|
|
238
|
+
onlyIsolated?: boolean;
|
|
239
|
+
isDelisted?: boolean;
|
|
240
|
+
}[];
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
dayNtlVlm: string;
|
|
244
|
+
funding: string;
|
|
245
|
+
impactPxs: [string, string];
|
|
246
|
+
markPx: string;
|
|
247
|
+
midPx: string;
|
|
248
|
+
openInterest: string;
|
|
249
|
+
oraclePx: string;
|
|
250
|
+
premium: string;
|
|
251
|
+
prevDayPx: string;
|
|
252
|
+
}[]
|
|
253
|
+
]>;
|
|
227
254
|
/**
|
|
228
255
|
* info
|
|
229
256
|
*
|
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
|
@@ -88,6 +88,12 @@ class HyperliquidClient {
|
|
|
88
88
|
* FYI: https://github.com/hyperliquid-dex/hyperliquid-python-sdk/blob/a4280d08ca42936a6851f309b7a4f4ae995a92c0/hyperliquid/info.py#L184
|
|
89
89
|
*/
|
|
90
90
|
this.getAllMids = () => this.request('POST', 'info', { type: 'allMids' });
|
|
91
|
+
/**
|
|
92
|
+
* info
|
|
93
|
+
*
|
|
94
|
+
* https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-perpetuals-asset-contexts-includes-mark-price-current-funding-open-interest-etc.
|
|
95
|
+
*/
|
|
96
|
+
this.getMetaAndAssetCtxs = () => this.request('POST', 'info', { type: 'metaAndAssetCtxs' });
|
|
91
97
|
/**
|
|
92
98
|
* info
|
|
93
99
|
*
|
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\n *\n * Retrieve user's open orders\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint#open-orders\n */\n getUserOpenOrders = (params: {\n user: string;\n }): Promise<\n {\n coin: string;\n limitPx: string;\n oid: number;\n side: string;\n sz: string;\n timestamp: number;\n }[]\n > => this.request('POST', 'info', { ...params, type: 'openOrders' });\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"]}
|
|
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\n *\n * Retrieve user's open orders\n *\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint#open-orders\n */\n getUserOpenOrders = (params: {\n user: string;\n }): Promise<\n {\n coin: string;\n limitPx: string;\n oid: number;\n side: string;\n sz: string;\n timestamp: number;\n }[]\n > => this.request('POST', 'info', { ...params, type: 'openOrders' });\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 * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-perpetuals-asset-contexts-includes-mark-price-current-funding-open-interest-etc.\n */\n getMetaAndAssetCtxs = (): Promise<\n [\n {\n universe: {\n name: string;\n szDecimals: number;\n maxLeverage: number;\n onlyIsolated?: boolean;\n isDelisted?: boolean;\n }[];\n },\n {\n dayNtlVlm: string;\n funding: string;\n impactPxs: [string, string];\n markPx: string;\n midPx: string;\n openInterest: string;\n oraclePx: string;\n premium: string;\n prevDayPx: string;\n }[],\n ]\n > => this.request('POST', 'info', { type: 'metaAndAssetCtxs' });\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/quote.js
CHANGED
|
@@ -6,14 +6,31 @@ const utils_1 = require("@yuants/utils");
|
|
|
6
6
|
const rxjs_1 = require("rxjs");
|
|
7
7
|
const api_1 = require("./api");
|
|
8
8
|
const terminal = protocol_1.Terminal.fromNodeEnv();
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
const ASSET_CTX_REFRESH_INTERVAL = process.env.ASSET_CTX_REFRESH_INTERVAL
|
|
10
|
+
? Number(process.env.ASSET_CTX_REFRESH_INTERVAL)
|
|
11
|
+
: 5000;
|
|
12
|
+
const assetCtxMap$ = (0, rxjs_1.defer)(() => api_1.client.getMetaAndAssetCtxs()).pipe((0, rxjs_1.map)(([meta, assetCtxs]) => {
|
|
13
|
+
var _a, _b;
|
|
14
|
+
const entries = (_b = (_a = meta === null || meta === void 0 ? void 0 : meta.universe) === null || _a === void 0 ? void 0 : _a.map((asset, index) => [
|
|
15
|
+
asset.name,
|
|
16
|
+
assetCtxs === null || assetCtxs === void 0 ? void 0 : assetCtxs[index],
|
|
17
|
+
])) !== null && _b !== void 0 ? _b : [];
|
|
18
|
+
return new Map(entries.filter(([, ctx]) => !!ctx));
|
|
19
|
+
}), (0, rxjs_1.repeat)({ delay: ASSET_CTX_REFRESH_INTERVAL }), (0, rxjs_1.retry)({ delay: 5000 }), (0, rxjs_1.shareReplay)({ bufferSize: 1, refCount: true }));
|
|
20
|
+
const quote$ = (0, rxjs_1.defer)(() => api_1.client.getAllMids()).pipe((0, rxjs_1.map)((mids) => Object.entries(mids !== null && mids !== void 0 ? mids : {})), (0, rxjs_1.mergeMap)((entries) => entries), (0, rxjs_1.withLatestFrom)(assetCtxMap$), (0, rxjs_1.map)(([entry, assetCtxMap]) => {
|
|
21
|
+
var _a;
|
|
22
|
+
const [coin, price] = entry;
|
|
23
|
+
const ctx = assetCtxMap.get(coin);
|
|
24
|
+
return {
|
|
25
|
+
datasource_id: 'HYPERLIQUID',
|
|
26
|
+
product_id: (0, utils_1.encodePath)('PERPETUAL', `${coin}-USD`),
|
|
27
|
+
last_price: `${price}`,
|
|
28
|
+
bid_price: `${price}`,
|
|
29
|
+
ask_price: `${price}`,
|
|
30
|
+
open_interest: `${(_a = ctx === null || ctx === void 0 ? void 0 : ctx.openInterest) !== null && _a !== void 0 ? _a : 0}`,
|
|
31
|
+
updated_at: new Date().toISOString(),
|
|
32
|
+
};
|
|
33
|
+
}), (0, rxjs_1.repeat)({ delay: 1000 }), (0, rxjs_1.retry)({ delay: 5000 }), (0, rxjs_1.shareReplay)({ bufferSize: 1, refCount: true }));
|
|
17
34
|
if (process.env.WRITE_QUOTE_TO_SQL === 'true') {
|
|
18
35
|
quote$
|
|
19
36
|
.pipe((0, sql_1.writeToSQL)({
|
package/lib/quote.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../src/quote.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../src/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import { Terminal } from '@yuants/protocol';\nimport { writeToSQL } from '@yuants/sql';\nimport { decodePath, encodePath } from '@yuants/utils';\nimport { defer, filter, map, mergeMap, repeat, retry, shareReplay, withLatestFrom } from 'rxjs';\nimport type { IQuote } from '../../../libraries/data-quote/lib';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\nconst ASSET_CTX_REFRESH_INTERVAL = process.env.ASSET_CTX_REFRESH_INTERVAL\n ? Number(process.env.ASSET_CTX_REFRESH_INTERVAL)\n : 5_000;\n\ntype HyperliquidAssetContext = Awaited<ReturnType<typeof client.getMetaAndAssetCtxs>>[1][number];\n\nconst assetCtxMap$ = defer(() => client.getMetaAndAssetCtxs()).pipe(\n map(([meta, assetCtxs]) => {\n const entries =\n meta?.universe?.map<[string, HyperliquidAssetContext | undefined]>((asset, index) => [\n asset.name,\n assetCtxs?.[index],\n ]) ?? [];\n return new Map(entries.filter(([, ctx]) => !!ctx));\n }),\n repeat({ delay: ASSET_CTX_REFRESH_INTERVAL }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nconst quote$ = defer(() => client.getAllMids()).pipe(\n map((mids) => Object.entries(mids ?? {})),\n mergeMap((entries) => entries),\n withLatestFrom(assetCtxMap$),\n map(([entry, assetCtxMap]): Partial<IQuote> => {\n const [coin, price] = entry;\n const ctx = assetCtxMap.get(coin);\n return {\n datasource_id: 'HYPERLIQUID',\n product_id: encodePath('PERPETUAL', `${coin}-USD`),\n last_price: `${price}`,\n bid_price: `${price}`,\n ask_price: `${price}`,\n open_interest: `${ctx?.openInterest ?? 0}`,\n updated_at: new Date().toISOString(),\n };\n }),\n repeat({ delay: 1000 }),\n retry({ delay: 5000 }),\n shareReplay({ bufferSize: 1, refCount: true }),\n);\n\nif (process.env.WRITE_QUOTE_TO_SQL === 'true') {\n quote$\n .pipe(\n writeToSQL({\n terminal,\n tableName: 'quote',\n writeInterval: 1000,\n conflictKeys: ['datasource_id', 'product_id'],\n }),\n )\n .subscribe();\n\n terminal.channel.publishChannel('quote', { pattern: '^HYPERLIQUID/' }, (channel_id) => {\n const [datasourceId, productId] = decodePath(channel_id);\n if (!datasourceId || !productId) {\n throw new Error(`Invalid channel_id: ${channel_id}`);\n }\n return quote$.pipe(filter((quote) => quote.product_id === productId));\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuants/vendor-hyperliquid",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.6",
|
|
4
4
|
"bin": "lib/cli.js",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"files": [
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@yuants/protocol": "0.50.4",
|
|
13
13
|
"@yuants/transfer": "0.2.33",
|
|
14
|
-
"@yuants/data-account": "0.6.
|
|
14
|
+
"@yuants/data-account": "0.6.15",
|
|
15
15
|
"@yuants/utils": "0.11.0",
|
|
16
16
|
"@yuants/sql": "0.9.24",
|
|
17
17
|
"@yuants/data-product": "0.4.15",
|
|
18
18
|
"@yuants/data-interest-rate": "0.1.42",
|
|
19
|
-
"@yuants/data-order": "0.
|
|
19
|
+
"@yuants/data-order": "0.4.0",
|
|
20
20
|
"@yuants/data-series": "0.3.45",
|
|
21
21
|
"@yuants/data-quote": "0.2.37",
|
|
22
22
|
"rxjs": "~7.5.6",
|
package/temp/package-deps.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"apps/vendor-hyperliquid/CHANGELOG.json": "
|
|
3
|
-
"apps/vendor-hyperliquid/CHANGELOG.md": "
|
|
2
|
+
"apps/vendor-hyperliquid/CHANGELOG.json": "d051b312b81961c8e0d4616b59678b2a19a13991",
|
|
3
|
+
"apps/vendor-hyperliquid/CHANGELOG.md": "3d86e01ae24a725cba1e4f78b0b542379ac64447",
|
|
4
4
|
"apps/vendor-hyperliquid/api-extractor.json": "62f4fd324425b9a235f0c117975967aab09ced0c",
|
|
5
5
|
"apps/vendor-hyperliquid/config/jest.config.json": "4bb17bde3ee911163a3edb36a6eb71491d80b1bd",
|
|
6
6
|
"apps/vendor-hyperliquid/config/rig.json": "f6c7b5537dc77a3170ba9f008bae3b6c3ee11956",
|
|
7
7
|
"apps/vendor-hyperliquid/config/typescript.json": "854907e8a821f2050f6533368db160c649c25348",
|
|
8
8
|
"apps/vendor-hyperliquid/etc/vendor-hyperliquid.api.md": "66675bd88afa1fe945f0d4023984c1c9c3e60a34",
|
|
9
|
-
"apps/vendor-hyperliquid/package.json": "
|
|
10
|
-
"apps/vendor-hyperliquid/src/api.ts": "
|
|
9
|
+
"apps/vendor-hyperliquid/package.json": "f7ca683321e50d9c8ecdded09cd7fc80fe3a89ea",
|
|
10
|
+
"apps/vendor-hyperliquid/src/api.ts": "a3d15cb7ac36e731faad6c1971dfe052ede86ae3",
|
|
11
11
|
"apps/vendor-hyperliquid/src/cli.ts": "9bf6b5559a6c6f33da20e74cc6c5d702c60ec891",
|
|
12
12
|
"apps/vendor-hyperliquid/src/index.ts": "ab241e7fbc75e3569822fff2fbe3686905a30b9c",
|
|
13
13
|
"apps/vendor-hyperliquid/src/interest_rate.ts": "5a4decdc2d18f7d711c5217840d6be9d04d926b2",
|
|
@@ -15,18 +15,18 @@
|
|
|
15
15
|
"apps/vendor-hyperliquid/src/order.ts": "a798816962e21c02fddee195f46f4425929cdc79",
|
|
16
16
|
"apps/vendor-hyperliquid/src/pending-orders.ts": "efcf7cd3fa191ec47a78c0db646bd3511819b3e1",
|
|
17
17
|
"apps/vendor-hyperliquid/src/product.ts": "1fd2995837e894004d9f8684b7e65cb8e85eaa66",
|
|
18
|
-
"apps/vendor-hyperliquid/src/quote.ts": "
|
|
18
|
+
"apps/vendor-hyperliquid/src/quote.ts": "aa07123755df3e52f15fdfc1fecb1aba0673a6d4",
|
|
19
19
|
"apps/vendor-hyperliquid/src/sign.ts": "94f4e5604a01d197d164b42415b17789ab2b6889",
|
|
20
20
|
"apps/vendor-hyperliquid/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
|
|
21
21
|
"apps/vendor-hyperliquid/.rush/temp/shrinkwrap-deps.json": "ac7e4eb2f082d7d64db29b08e240cf4b5b420a78",
|
|
22
22
|
"libraries/protocol/temp/package-deps.json": "35bc77333a1c85db1cd130579963e8cefa00f56c",
|
|
23
23
|
"libraries/transfer/temp/package-deps.json": "708a4caf79d042cad56a39f0b00d399bca04af40",
|
|
24
|
-
"libraries/data-account/temp/package-deps.json": "
|
|
24
|
+
"libraries/data-account/temp/package-deps.json": "bc6176ac72e51f5deb7f123807852a4305935bcd",
|
|
25
25
|
"libraries/utils/temp/package-deps.json": "c58f1ca8f498315d9a0219ca8c498299a41d297b",
|
|
26
26
|
"libraries/sql/temp/package-deps.json": "e3b6f24485a429fb24cacbf0d6150f55ca394706",
|
|
27
27
|
"libraries/data-product/temp/package-deps.json": "0a4e14971c7dc350b84712fb16c07fefad351619",
|
|
28
28
|
"libraries/data-interest-rate/temp/package-deps.json": "11bb199efb64628f67b1165e11d6c85dd7114a9a",
|
|
29
|
-
"libraries/data-order/temp/package-deps.json": "
|
|
29
|
+
"libraries/data-order/temp/package-deps.json": "afb45e88841011b7abd71901cda1bda450f36dc5",
|
|
30
30
|
"libraries/data-series/temp/package-deps.json": "d5269fad8f63460b1b5f29ba701ad3a9457e0061",
|
|
31
31
|
"libraries/data-quote/temp/package-deps.json": "752ea44d75cbe7a652ace79629c02ca92a92cf1d",
|
|
32
32
|
"libraries/data-ohlc/temp/package-deps.json": "6e10227e1c394ad0b5a71e0f810914760e9b7956",
|