@yuants/vendor-hyperliquid 0.3.15 → 0.3.16

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/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  import { addAccountMarket, provideAccountInfoService } from '@yuants/data-account';
2
+ import { Terminal } from '@yuants/protocol';
2
3
  import { encodePath } from '@yuants/utils';
3
4
  import { client } from './api';
4
5
  import './interest_rate';
5
6
  import './order';
6
7
  import './product';
7
- import { terminal } from './terminal';
8
+ const terminal = Terminal.fromNodeEnv();
8
9
  (async () => {
9
10
  // swap account info
10
11
  {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IAccountMoney, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { client } from './api';\nimport './interest_rate';\nimport './order';\nimport './product';\nimport { terminal } from './terminal';\n\n(async () => {\n // swap account info\n {\n const account_id = `Hyperliquid/${client.public_key}`;\n\n provideAccountInfoService(\n terminal,\n account_id,\n async () => {\n const accountRes = await client.getUserPerpetualsAccountSummary({\n user: client.public_key!,\n });\n\n const profit = accountRes.assetPositions\n .map((pos) => +pos.position.unrealizedPnl)\n .reduce((a, b) => a + b, 0);\n\n const money: IAccountMoney = {\n currency: 'USDC',\n equity: +accountRes.crossMarginSummary.accountValue,\n profit: profit,\n free: +accountRes.withdrawable,\n used: +accountRes.crossMarginSummary.accountValue - +accountRes.withdrawable,\n balance: +accountRes.crossMarginSummary.accountValue - profit,\n };\n\n return {\n money: money,\n positions: accountRes.assetPositions.map(\n (position): IPosition => ({\n position_id: `${position.position.coin}-USD`,\n datasource_id: 'HYPERLIQUID',\n product_id: encodePath('PERPETUAL', `${position.position.coin}-USD`),\n direction: +position.position.szi > 0 ? 'LONG' : 'SHORT',\n volume: Math.abs(+position.position.szi),\n free_volume: Math.abs(+position.position.szi),\n position_price: +position.position.entryPx,\n closable_price: Math.abs(+position.position.positionValue / +position.position.szi),\n floating_profit: +position.position.unrealizedPnl,\n valuation: +position.position.positionValue,\n margin: +position.position.marginUsed,\n }),\n ),\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n addAccountMarket(terminal, { account_id: `Hyperliquid/${client.public_key}`, market_id: 'Hyperliquid' });\n }\n\n // TODO: spot account info\n\n // TODO: funding rate\n\n // TODO: transfer\n})();\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { addAccountMarket, IAccountMoney, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath } from '@yuants/utils';\nimport { client } from './api';\nimport './interest_rate';\nimport './order';\nimport './product';\n\nconst terminal = Terminal.fromNodeEnv();\n\n(async () => {\n // swap account info\n {\n const account_id = `Hyperliquid/${client.public_key}`;\n\n provideAccountInfoService(\n terminal,\n account_id,\n async () => {\n const accountRes = await client.getUserPerpetualsAccountSummary({\n user: client.public_key!,\n });\n\n const profit = accountRes.assetPositions\n .map((pos) => +pos.position.unrealizedPnl)\n .reduce((a, b) => a + b, 0);\n\n const money: IAccountMoney = {\n currency: 'USDC',\n equity: +accountRes.crossMarginSummary.accountValue,\n profit: profit,\n free: +accountRes.withdrawable,\n used: +accountRes.crossMarginSummary.accountValue - +accountRes.withdrawable,\n balance: +accountRes.crossMarginSummary.accountValue - profit,\n };\n\n return {\n money: money,\n positions: accountRes.assetPositions.map(\n (position): IPosition => ({\n position_id: `${position.position.coin}-USD`,\n datasource_id: 'HYPERLIQUID',\n product_id: encodePath('PERPETUAL', `${position.position.coin}-USD`),\n direction: +position.position.szi > 0 ? 'LONG' : 'SHORT',\n volume: Math.abs(+position.position.szi),\n free_volume: Math.abs(+position.position.szi),\n position_price: +position.position.entryPx,\n closable_price: Math.abs(+position.position.positionValue / +position.position.szi),\n floating_profit: +position.position.unrealizedPnl,\n valuation: +position.position.positionValue,\n margin: +position.position.marginUsed,\n }),\n ),\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n addAccountMarket(terminal, { account_id: `Hyperliquid/${client.public_key}`, market_id: 'Hyperliquid' });\n }\n\n // TODO: spot account info\n\n // TODO: funding rate\n\n // TODO: transfer\n})();\n"]}
package/dist/order.js CHANGED
@@ -1,6 +1,7 @@
1
+ import { Terminal } from '@yuants/protocol';
1
2
  import { formatTime } from '@yuants/utils';
2
3
  import { client } from './api';
3
- import { terminal } from './terminal';
4
+ const terminal = Terminal.fromNodeEnv();
4
5
  /**
5
6
  * Round price according to Hyperliquid rules:
6
7
  * - Max 5 significant figures
package/dist/order.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"order.js","sourceRoot":"","sources":["../src/order.ts"],"names":[],"mappings":"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","sourcesContent":["import { IOrder } from '@yuants/data-order';\nimport { formatTime } from '@yuants/utils';\nimport { client } from './api';\nimport { terminal } from './terminal';\n\n/**\n * Round price according to Hyperliquid rules:\n * - Max 5 significant figures\n * - Max decimal places = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)\n * - Integer prices are always allowed regardless of significant figures\n */\nconst roundPrice = (price: number, instType: 'PERPETUAL' | 'SPOT', szDecimals: number): string => {\n const MAX_DECIMALS = instType === 'PERPETUAL' ? 6 : 8;\n const maxDecimalPlaces = MAX_DECIMALS - szDecimals;\n\n // Convert to string to work with precision\n const priceStr = price.toString();\n\n // Check if it's an integer\n if (Number.isInteger(price)) {\n return priceStr;\n }\n\n // Get significant figures count\n const significantFigures = priceStr.replace(/^0+\\.?0*/, '').replace(/\\./g, '').length;\n\n // If more than 5 significant figures, round to 5\n let roundedPrice = price;\n if (significantFigures > 5) {\n // Find the position of the first non-zero digit\n const firstNonZeroIndex = priceStr.match(/[1-9]/)?.index || 0;\n const decimalIndex = priceStr.indexOf('.');\n\n if (decimalIndex === -1) {\n // Integer case - round to 5 significant figures\n const magnitude = Math.floor(Math.log10(Math.abs(price)));\n const factor = Math.pow(10, magnitude - 4); // 5 significant figures\n roundedPrice = Math.round(price / factor) * factor;\n } else {\n // Decimal case\n const beforeDecimal = priceStr.substring(0, decimalIndex);\n const afterDecimal = priceStr.substring(decimalIndex + 1);\n\n if (beforeDecimal !== '0') {\n // Has integer part\n const integerDigits = beforeDecimal.length;\n const neededDecimalDigits = Math.max(0, 5 - integerDigits);\n roundedPrice = parseFloat(price.toFixed(neededDecimalDigits));\n } else {\n // Pure decimal (0.xxxx)\n const leadingZeros = afterDecimal.match(/^0*/)?.[0].length || 0;\n const precision = leadingZeros + 5;\n roundedPrice = parseFloat(price.toFixed(precision));\n }\n }\n }\n\n // Apply decimal places limit\n const finalPrice = parseFloat(roundedPrice.toFixed(maxDecimalPlaces));\n\n return finalPrice.toString();\n};\n\nterminal.server.provideService<IOrder>(\n 'SubmitOrder',\n {\n required: ['account_id'],\n properties: {\n account_id: { const: `Hyperliquid/${client.public_key}` },\n },\n },\n async (msg) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(msg));\n const order = msg.req;\n\n const [instType, symbol] = order.product_id.split('/');\n const baseCurrency = symbol.split('-')[0];\n\n const mapBaseCurrencyToAssetId: Record<string, number> = {};\n const mapBaseCurrencyToSzDecimals: Record<string, number> = {};\n\n if (instType === 'PERPETUAL') {\n const meta = await client.getPerpetualsMetaData();\n for (let i = 0; i < meta.universe.length; i++) {\n const token = meta.universe[i];\n mapBaseCurrencyToAssetId[token.name] = i;\n mapBaseCurrencyToSzDecimals[token.name] = token.szDecimals;\n }\n } else if (instType === 'SPOT') {\n const meta = await client.getSpotMetaData();\n for (const token of meta.tokens) {\n mapBaseCurrencyToAssetId[token.name] = token.index;\n mapBaseCurrencyToSzDecimals[token.name] = token.szDecimals;\n }\n }\n\n const a = mapBaseCurrencyToAssetId[baseCurrency];\n const szDecimals = mapBaseCurrencyToSzDecimals[baseCurrency];\n const b = order.order_direction === 'OPEN_LONG' || order.order_direction === 'CLOSE_SHORT';\n\n let price = `${order.price}`;\n if (order.order_type === 'MARKET') {\n const allMids = await client.getAllMids();\n const midPrice = +allMids[baseCurrency];\n price = `${b ? (1 + 0.05) * midPrice : (1 - 0.05) * midPrice}`;\n }\n price = roundPrice(+price, instType as 'PERPETUAL' | 'SPOT', szDecimals);\n\n const p = `${price}`;\n const s = `${order.volume}`;\n const r = order.order_direction === 'CLOSE_LONG' || order.order_direction === 'CLOSE_SHORT';\n // other method\n const t =\n order.order_type === 'MARKET'\n ? {\n limit: {\n tif: 'Ioc',\n },\n }\n : {\n limit: {\n tif: 'Gtc',\n },\n };\n const params = {\n orders: [\n {\n a,\n b,\n p,\n s,\n r,\n t,\n },\n ],\n };\n\n const res = await client.placeOrder(params);\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(res));\n return {\n res: {\n code: res.status === 'ok' && res.response.data.statuses[0]?.error === undefined ? 0 : 1,\n message: res.status !== 'ok' ? 'API ERROR' : res.response.data.statuses[0]?.error || 'OK',\n },\n };\n },\n);\n"]}
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../src/order.ts"],"names":[],"mappings":"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","sourcesContent":["import { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { formatTime } from '@yuants/utils';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\n/**\n * Round price according to Hyperliquid rules:\n * - Max 5 significant figures\n * - Max decimal places = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)\n * - Integer prices are always allowed regardless of significant figures\n */\nconst roundPrice = (price: number, instType: 'PERPETUAL' | 'SPOT', szDecimals: number): string => {\n const MAX_DECIMALS = instType === 'PERPETUAL' ? 6 : 8;\n const maxDecimalPlaces = MAX_DECIMALS - szDecimals;\n\n // Convert to string to work with precision\n const priceStr = price.toString();\n\n // Check if it's an integer\n if (Number.isInteger(price)) {\n return priceStr;\n }\n\n // Get significant figures count\n const significantFigures = priceStr.replace(/^0+\\.?0*/, '').replace(/\\./g, '').length;\n\n // If more than 5 significant figures, round to 5\n let roundedPrice = price;\n if (significantFigures > 5) {\n // Find the position of the first non-zero digit\n const firstNonZeroIndex = priceStr.match(/[1-9]/)?.index || 0;\n const decimalIndex = priceStr.indexOf('.');\n\n if (decimalIndex === -1) {\n // Integer case - round to 5 significant figures\n const magnitude = Math.floor(Math.log10(Math.abs(price)));\n const factor = Math.pow(10, magnitude - 4); // 5 significant figures\n roundedPrice = Math.round(price / factor) * factor;\n } else {\n // Decimal case\n const beforeDecimal = priceStr.substring(0, decimalIndex);\n const afterDecimal = priceStr.substring(decimalIndex + 1);\n\n if (beforeDecimal !== '0') {\n // Has integer part\n const integerDigits = beforeDecimal.length;\n const neededDecimalDigits = Math.max(0, 5 - integerDigits);\n roundedPrice = parseFloat(price.toFixed(neededDecimalDigits));\n } else {\n // Pure decimal (0.xxxx)\n const leadingZeros = afterDecimal.match(/^0*/)?.[0].length || 0;\n const precision = leadingZeros + 5;\n roundedPrice = parseFloat(price.toFixed(precision));\n }\n }\n }\n\n // Apply decimal places limit\n const finalPrice = parseFloat(roundedPrice.toFixed(maxDecimalPlaces));\n\n return finalPrice.toString();\n};\n\nterminal.server.provideService<IOrder>(\n 'SubmitOrder',\n {\n required: ['account_id'],\n properties: {\n account_id: { const: `Hyperliquid/${client.public_key}` },\n },\n },\n async (msg) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(msg));\n const order = msg.req;\n\n const [instType, symbol] = order.product_id.split('/');\n const baseCurrency = symbol.split('-')[0];\n\n const mapBaseCurrencyToAssetId: Record<string, number> = {};\n const mapBaseCurrencyToSzDecimals: Record<string, number> = {};\n\n if (instType === 'PERPETUAL') {\n const meta = await client.getPerpetualsMetaData();\n for (let i = 0; i < meta.universe.length; i++) {\n const token = meta.universe[i];\n mapBaseCurrencyToAssetId[token.name] = i;\n mapBaseCurrencyToSzDecimals[token.name] = token.szDecimals;\n }\n } else if (instType === 'SPOT') {\n const meta = await client.getSpotMetaData();\n for (const token of meta.tokens) {\n mapBaseCurrencyToAssetId[token.name] = token.index;\n mapBaseCurrencyToSzDecimals[token.name] = token.szDecimals;\n }\n }\n\n const a = mapBaseCurrencyToAssetId[baseCurrency];\n const szDecimals = mapBaseCurrencyToSzDecimals[baseCurrency];\n const b = order.order_direction === 'OPEN_LONG' || order.order_direction === 'CLOSE_SHORT';\n\n let price = `${order.price}`;\n if (order.order_type === 'MARKET') {\n const allMids = await client.getAllMids();\n const midPrice = +allMids[baseCurrency];\n price = `${b ? (1 + 0.05) * midPrice : (1 - 0.05) * midPrice}`;\n }\n price = roundPrice(+price, instType as 'PERPETUAL' | 'SPOT', szDecimals);\n\n const p = `${price}`;\n const s = `${order.volume}`;\n const r = order.order_direction === 'CLOSE_LONG' || order.order_direction === 'CLOSE_SHORT';\n // other method\n const t =\n order.order_type === 'MARKET'\n ? {\n limit: {\n tif: 'Ioc',\n },\n }\n : {\n limit: {\n tif: 'Gtc',\n },\n };\n const params = {\n orders: [\n {\n a,\n b,\n p,\n s,\n r,\n t,\n },\n ],\n };\n\n const res = await client.placeOrder(params);\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(res));\n return {\n res: {\n code: res.status === 'ok' && res.response.data.statuses[0]?.error === undefined ? 0 : 1,\n message: res.status !== 'ok' ? 'API ERROR' : res.response.data.statuses[0]?.error || 'OK',\n },\n };\n },\n);\n"]}
package/dist/product.js CHANGED
@@ -1,8 +1,9 @@
1
+ import { Terminal } from '@yuants/protocol';
1
2
  import { createSQLWriter } from '@yuants/sql';
2
3
  import { encodePath, formatTime } from '@yuants/utils';
3
4
  import { defer, repeat, retry, shareReplay, Subject, tap } from 'rxjs';
4
5
  import { client } from './api';
5
- import { terminal } from './terminal';
6
+ const terminal = Terminal.fromNodeEnv();
6
7
  const product$ = new Subject();
7
8
  const tokenProduct$ = defer(async () => {
8
9
  const res = await client.getSpotMetaData();
@@ -1 +1 @@
1
- {"version":3,"file":"product.js","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"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","sourcesContent":["import { IProduct } from '@yuants/data-product';\nimport { createSQLWriter } from '@yuants/sql';\nimport { encodePath, formatTime } from '@yuants/utils';\nimport { defer, repeat, retry, shareReplay, Subject, tap } from 'rxjs';\nimport { client } from './api';\nimport { terminal } from './terminal';\n\nconst product$ = new Subject<IProduct>();\n\nconst tokenProduct$ = defer(async () => {\n const res = await client.getSpotMetaData();\n return res.tokens.map(\n (token): IProduct => ({\n product_id: encodePath('SPOT', `${token.name}-USDC`),\n datasource_id: 'HYPERLIQUID',\n quote_currency: 'USDC',\n base_currency: token.name,\n price_step: 1e-2,\n volume_step: Number(`1e-${token.szDecimals}`),\n name: '',\n value_scale: 1,\n value_scale_unit: '',\n margin_rate: 1,\n value_based_cost: 0,\n volume_based_cost: 0,\n max_position: 0,\n max_volume: 0,\n allow_long: true,\n allow_short: false,\n market_id: 'Hyperliquid',\n no_interest_rate: true,\n }),\n );\n}).pipe(\n tap((list) => list.forEach((product) => product$.next(product))),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'SpotProducts', e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\nexport const perpetualProduct$ = defer(async () => {\n const res = await client.getPerpetualsMetaData();\n return res.universe.map(\n (product): IProduct => ({\n product_id: encodePath('PERPETUAL', `${product.name}-USD`),\n datasource_id: 'HYPERLIQUID',\n quote_currency: 'USD',\n base_currency: product.name,\n price_step: 1e-2,\n volume_step: Number(`1e-${product.szDecimals}`),\n name: '',\n value_scale: 1,\n value_scale_unit: '',\n margin_rate: 1 / product.maxLeverage,\n value_based_cost: 0,\n volume_based_cost: 0,\n max_position: 0,\n max_volume: 0,\n allow_long: true,\n allow_short: true,\n market_id: 'Hyperliquid',\n no_interest_rate: false,\n }),\n );\n}).pipe(\n tap((list) => list.forEach((product) => product$.next(product))),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'PerpetualProducts', e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\nperpetualProduct$.subscribe();\ntokenProduct$.subscribe();\n\ncreateSQLWriter<IProduct>(terminal, {\n data$: product$,\n tableName: 'product',\n conflictKeys: ['datasource_id', 'product_id'],\n writeInterval: 1000,\n});\n"]}
1
+ {"version":3,"file":"product.js","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"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","sourcesContent":["import { IProduct } from '@yuants/data-product';\nimport { Terminal } from '@yuants/protocol';\nimport { createSQLWriter } from '@yuants/sql';\nimport { encodePath, formatTime } from '@yuants/utils';\nimport { defer, repeat, retry, shareReplay, Subject, tap } from 'rxjs';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst product$ = new Subject<IProduct>();\n\nconst tokenProduct$ = defer(async () => {\n const res = await client.getSpotMetaData();\n return res.tokens.map(\n (token): IProduct => ({\n product_id: encodePath('SPOT', `${token.name}-USDC`),\n datasource_id: 'HYPERLIQUID',\n quote_currency: 'USDC',\n base_currency: token.name,\n price_step: 1e-2,\n volume_step: Number(`1e-${token.szDecimals}`),\n name: '',\n value_scale: 1,\n value_scale_unit: '',\n margin_rate: 1,\n value_based_cost: 0,\n volume_based_cost: 0,\n max_position: 0,\n max_volume: 0,\n allow_long: true,\n allow_short: false,\n market_id: 'Hyperliquid',\n no_interest_rate: true,\n }),\n );\n}).pipe(\n tap((list) => list.forEach((product) => product$.next(product))),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'SpotProducts', e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\nexport const perpetualProduct$ = defer(async () => {\n const res = await client.getPerpetualsMetaData();\n return res.universe.map(\n (product): IProduct => ({\n product_id: encodePath('PERPETUAL', `${product.name}-USD`),\n datasource_id: 'HYPERLIQUID',\n quote_currency: 'USD',\n base_currency: product.name,\n price_step: 1e-2,\n volume_step: Number(`1e-${product.szDecimals}`),\n name: '',\n value_scale: 1,\n value_scale_unit: '',\n margin_rate: 1 / product.maxLeverage,\n value_based_cost: 0,\n volume_based_cost: 0,\n max_position: 0,\n max_volume: 0,\n allow_long: true,\n allow_short: true,\n market_id: 'Hyperliquid',\n no_interest_rate: false,\n }),\n );\n}).pipe(\n tap((list) => list.forEach((product) => product$.next(product))),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'PerpetualProducts', e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\nperpetualProduct$.subscribe();\ntokenProduct$.subscribe();\n\ncreateSQLWriter<IProduct>(terminal, {\n data$: product$,\n tableName: 'product',\n conflictKeys: ['datasource_id', 'product_id'],\n writeInterval: 1000,\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,iBAAiB,CAAC;AACzB,OAAO,SAAS,CAAC;AACjB,OAAO,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,iBAAiB,CAAC;AACzB,OAAO,SAAS,CAAC;AACjB,OAAO,WAAW,CAAC"}
package/lib/index.js CHANGED
@@ -1,17 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const data_account_1 = require("@yuants/data-account");
4
+ const protocol_1 = require("@yuants/protocol");
4
5
  const utils_1 = require("@yuants/utils");
5
6
  const api_1 = require("./api");
6
7
  require("./interest_rate");
7
8
  require("./order");
8
9
  require("./product");
9
- const terminal_1 = require("./terminal");
10
+ const terminal = protocol_1.Terminal.fromNodeEnv();
10
11
  (async () => {
11
12
  // swap account info
12
13
  {
13
14
  const account_id = `Hyperliquid/${api_1.client.public_key}`;
14
- (0, data_account_1.provideAccountInfoService)(terminal_1.terminal, account_id, async () => {
15
+ (0, data_account_1.provideAccountInfoService)(terminal, account_id, async () => {
15
16
  const accountRes = await api_1.client.getUserPerpetualsAccountSummary({
16
17
  user: api_1.client.public_key,
17
18
  });
@@ -43,7 +44,7 @@ const terminal_1 = require("./terminal");
43
44
  })),
44
45
  };
45
46
  }, { auto_refresh_interval: 1000 });
46
- (0, data_account_1.addAccountMarket)(terminal_1.terminal, { account_id: `Hyperliquid/${api_1.client.public_key}`, market_id: 'Hyperliquid' });
47
+ (0, data_account_1.addAccountMarket)(terminal, { account_id: `Hyperliquid/${api_1.client.public_key}`, market_id: 'Hyperliquid' });
47
48
  }
48
49
  // TODO: spot account info
49
50
  // TODO: funding rate
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,uDAA6G;AAC7G,yCAA2C;AAC3C,+BAA+B;AAC/B,2BAAyB;AACzB,mBAAiB;AACjB,qBAAmB;AACnB,yCAAsC;AAEtC,CAAC,KAAK,IAAI,EAAE;IACV,oBAAoB;IACpB;QACE,MAAM,UAAU,GAAG,eAAe,YAAM,CAAC,UAAU,EAAE,CAAC;QAEtD,IAAA,wCAAyB,EACvB,mBAAQ,EACR,UAAU,EACV,KAAK,IAAI,EAAE;YACT,MAAM,UAAU,GAAG,MAAM,YAAM,CAAC,+BAA+B,CAAC;gBAC9D,IAAI,EAAE,YAAM,CAAC,UAAW;aACzB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc;iBACrC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;iBACzC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9B,MAAM,KAAK,GAAkB;gBAC3B,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY;gBACnD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY;gBAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY,GAAG,CAAC,UAAU,CAAC,YAAY;gBAC5E,OAAO,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY,GAAG,MAAM;aAC9D,CAAC;YAEF,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,CACtC,CAAC,QAAQ,EAAa,EAAE,CAAC,CAAC;oBACxB,WAAW,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM;oBAC5C,aAAa,EAAE,aAAa;oBAC5B,UAAU,EAAE,IAAA,kBAAU,EAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC;oBACpE,SAAS,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;oBACxD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACxC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAC7C,cAAc,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO;oBAC1C,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACnF,eAAe,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa;oBACjD,SAAS,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa;oBAC3C,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU;iBACtC,CAAC,CACH;aACF,CAAC;QACJ,CAAC,EACD,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAChC,CAAC;QAEF,IAAA,+BAAgB,EAAC,mBAAQ,EAAE,EAAE,UAAU,EAAE,eAAe,YAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;KAC1G;IAED,0BAA0B;IAE1B,qBAAqB;IAErB,iBAAiB;AACnB,CAAC,CAAC,EAAE,CAAC","sourcesContent":["import { addAccountMarket, IAccountMoney, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { encodePath } from '@yuants/utils';\nimport { client } from './api';\nimport './interest_rate';\nimport './order';\nimport './product';\nimport { terminal } from './terminal';\n\n(async () => {\n // swap account info\n {\n const account_id = `Hyperliquid/${client.public_key}`;\n\n provideAccountInfoService(\n terminal,\n account_id,\n async () => {\n const accountRes = await client.getUserPerpetualsAccountSummary({\n user: client.public_key!,\n });\n\n const profit = accountRes.assetPositions\n .map((pos) => +pos.position.unrealizedPnl)\n .reduce((a, b) => a + b, 0);\n\n const money: IAccountMoney = {\n currency: 'USDC',\n equity: +accountRes.crossMarginSummary.accountValue,\n profit: profit,\n free: +accountRes.withdrawable,\n used: +accountRes.crossMarginSummary.accountValue - +accountRes.withdrawable,\n balance: +accountRes.crossMarginSummary.accountValue - profit,\n };\n\n return {\n money: money,\n positions: accountRes.assetPositions.map(\n (position): IPosition => ({\n position_id: `${position.position.coin}-USD`,\n datasource_id: 'HYPERLIQUID',\n product_id: encodePath('PERPETUAL', `${position.position.coin}-USD`),\n direction: +position.position.szi > 0 ? 'LONG' : 'SHORT',\n volume: Math.abs(+position.position.szi),\n free_volume: Math.abs(+position.position.szi),\n position_price: +position.position.entryPx,\n closable_price: Math.abs(+position.position.positionValue / +position.position.szi),\n floating_profit: +position.position.unrealizedPnl,\n valuation: +position.position.positionValue,\n margin: +position.position.marginUsed,\n }),\n ),\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n addAccountMarket(terminal, { account_id: `Hyperliquid/${client.public_key}`, market_id: 'Hyperliquid' });\n }\n\n // TODO: spot account info\n\n // TODO: funding rate\n\n // TODO: transfer\n})();\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,uDAA6G;AAC7G,+CAA4C;AAC5C,yCAA2C;AAC3C,+BAA+B;AAC/B,2BAAyB;AACzB,mBAAiB;AACjB,qBAAmB;AAEnB,MAAM,QAAQ,GAAG,mBAAQ,CAAC,WAAW,EAAE,CAAC;AAExC,CAAC,KAAK,IAAI,EAAE;IACV,oBAAoB;IACpB;QACE,MAAM,UAAU,GAAG,eAAe,YAAM,CAAC,UAAU,EAAE,CAAC;QAEtD,IAAA,wCAAyB,EACvB,QAAQ,EACR,UAAU,EACV,KAAK,IAAI,EAAE;YACT,MAAM,UAAU,GAAG,MAAM,YAAM,CAAC,+BAA+B,CAAC;gBAC9D,IAAI,EAAE,YAAM,CAAC,UAAW;aACzB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc;iBACrC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;iBACzC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9B,MAAM,KAAK,GAAkB;gBAC3B,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY;gBACnD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY;gBAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY,GAAG,CAAC,UAAU,CAAC,YAAY;gBAC5E,OAAO,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,YAAY,GAAG,MAAM;aAC9D,CAAC;YAEF,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,CACtC,CAAC,QAAQ,EAAa,EAAE,CAAC,CAAC;oBACxB,WAAW,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM;oBAC5C,aAAa,EAAE,aAAa;oBAC5B,UAAU,EAAE,IAAA,kBAAU,EAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC;oBACpE,SAAS,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;oBACxD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACxC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAC7C,cAAc,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO;oBAC1C,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACnF,eAAe,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa;oBACjD,SAAS,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa;oBAC3C,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU;iBACtC,CAAC,CACH;aACF,CAAC;QACJ,CAAC,EACD,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAChC,CAAC;QAEF,IAAA,+BAAgB,EAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,eAAe,YAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;KAC1G;IAED,0BAA0B;IAE1B,qBAAqB;IAErB,iBAAiB;AACnB,CAAC,CAAC,EAAE,CAAC","sourcesContent":["import { addAccountMarket, IAccountMoney, IPosition, provideAccountInfoService } from '@yuants/data-account';\nimport { Terminal } from '@yuants/protocol';\nimport { encodePath } from '@yuants/utils';\nimport { client } from './api';\nimport './interest_rate';\nimport './order';\nimport './product';\n\nconst terminal = Terminal.fromNodeEnv();\n\n(async () => {\n // swap account info\n {\n const account_id = `Hyperliquid/${client.public_key}`;\n\n provideAccountInfoService(\n terminal,\n account_id,\n async () => {\n const accountRes = await client.getUserPerpetualsAccountSummary({\n user: client.public_key!,\n });\n\n const profit = accountRes.assetPositions\n .map((pos) => +pos.position.unrealizedPnl)\n .reduce((a, b) => a + b, 0);\n\n const money: IAccountMoney = {\n currency: 'USDC',\n equity: +accountRes.crossMarginSummary.accountValue,\n profit: profit,\n free: +accountRes.withdrawable,\n used: +accountRes.crossMarginSummary.accountValue - +accountRes.withdrawable,\n balance: +accountRes.crossMarginSummary.accountValue - profit,\n };\n\n return {\n money: money,\n positions: accountRes.assetPositions.map(\n (position): IPosition => ({\n position_id: `${position.position.coin}-USD`,\n datasource_id: 'HYPERLIQUID',\n product_id: encodePath('PERPETUAL', `${position.position.coin}-USD`),\n direction: +position.position.szi > 0 ? 'LONG' : 'SHORT',\n volume: Math.abs(+position.position.szi),\n free_volume: Math.abs(+position.position.szi),\n position_price: +position.position.entryPx,\n closable_price: Math.abs(+position.position.positionValue / +position.position.szi),\n floating_profit: +position.position.unrealizedPnl,\n valuation: +position.position.positionValue,\n margin: +position.position.marginUsed,\n }),\n ),\n };\n },\n { auto_refresh_interval: 1000 },\n );\n\n addAccountMarket(terminal, { account_id: `Hyperliquid/${client.public_key}`, market_id: 'Hyperliquid' });\n }\n\n // TODO: spot account info\n\n // TODO: funding rate\n\n // TODO: transfer\n})();\n"]}
package/lib/order.js CHANGED
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const protocol_1 = require("@yuants/protocol");
3
4
  const utils_1 = require("@yuants/utils");
4
5
  const api_1 = require("./api");
5
- const terminal_1 = require("./terminal");
6
+ const terminal = protocol_1.Terminal.fromNodeEnv();
6
7
  /**
7
8
  * Round price according to Hyperliquid rules:
8
9
  * - Max 5 significant figures
@@ -55,7 +56,7 @@ const roundPrice = (price, instType, szDecimals) => {
55
56
  const finalPrice = parseFloat(roundedPrice.toFixed(maxDecimalPlaces));
56
57
  return finalPrice.toString();
57
58
  };
58
- terminal_1.terminal.server.provideService('SubmitOrder', {
59
+ terminal.server.provideService('SubmitOrder', {
59
60
  required: ['account_id'],
60
61
  properties: {
61
62
  account_id: { const: `Hyperliquid/${api_1.client.public_key}` },
package/lib/order.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"order.js","sourceRoot":"","sources":["../src/order.ts"],"names":[],"mappings":"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","sourcesContent":["import { IOrder } from '@yuants/data-order';\nimport { formatTime } from '@yuants/utils';\nimport { client } from './api';\nimport { terminal } from './terminal';\n\n/**\n * Round price according to Hyperliquid rules:\n * - Max 5 significant figures\n * - Max decimal places = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)\n * - Integer prices are always allowed regardless of significant figures\n */\nconst roundPrice = (price: number, instType: 'PERPETUAL' | 'SPOT', szDecimals: number): string => {\n const MAX_DECIMALS = instType === 'PERPETUAL' ? 6 : 8;\n const maxDecimalPlaces = MAX_DECIMALS - szDecimals;\n\n // Convert to string to work with precision\n const priceStr = price.toString();\n\n // Check if it's an integer\n if (Number.isInteger(price)) {\n return priceStr;\n }\n\n // Get significant figures count\n const significantFigures = priceStr.replace(/^0+\\.?0*/, '').replace(/\\./g, '').length;\n\n // If more than 5 significant figures, round to 5\n let roundedPrice = price;\n if (significantFigures > 5) {\n // Find the position of the first non-zero digit\n const firstNonZeroIndex = priceStr.match(/[1-9]/)?.index || 0;\n const decimalIndex = priceStr.indexOf('.');\n\n if (decimalIndex === -1) {\n // Integer case - round to 5 significant figures\n const magnitude = Math.floor(Math.log10(Math.abs(price)));\n const factor = Math.pow(10, magnitude - 4); // 5 significant figures\n roundedPrice = Math.round(price / factor) * factor;\n } else {\n // Decimal case\n const beforeDecimal = priceStr.substring(0, decimalIndex);\n const afterDecimal = priceStr.substring(decimalIndex + 1);\n\n if (beforeDecimal !== '0') {\n // Has integer part\n const integerDigits = beforeDecimal.length;\n const neededDecimalDigits = Math.max(0, 5 - integerDigits);\n roundedPrice = parseFloat(price.toFixed(neededDecimalDigits));\n } else {\n // Pure decimal (0.xxxx)\n const leadingZeros = afterDecimal.match(/^0*/)?.[0].length || 0;\n const precision = leadingZeros + 5;\n roundedPrice = parseFloat(price.toFixed(precision));\n }\n }\n }\n\n // Apply decimal places limit\n const finalPrice = parseFloat(roundedPrice.toFixed(maxDecimalPlaces));\n\n return finalPrice.toString();\n};\n\nterminal.server.provideService<IOrder>(\n 'SubmitOrder',\n {\n required: ['account_id'],\n properties: {\n account_id: { const: `Hyperliquid/${client.public_key}` },\n },\n },\n async (msg) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(msg));\n const order = msg.req;\n\n const [instType, symbol] = order.product_id.split('/');\n const baseCurrency = symbol.split('-')[0];\n\n const mapBaseCurrencyToAssetId: Record<string, number> = {};\n const mapBaseCurrencyToSzDecimals: Record<string, number> = {};\n\n if (instType === 'PERPETUAL') {\n const meta = await client.getPerpetualsMetaData();\n for (let i = 0; i < meta.universe.length; i++) {\n const token = meta.universe[i];\n mapBaseCurrencyToAssetId[token.name] = i;\n mapBaseCurrencyToSzDecimals[token.name] = token.szDecimals;\n }\n } else if (instType === 'SPOT') {\n const meta = await client.getSpotMetaData();\n for (const token of meta.tokens) {\n mapBaseCurrencyToAssetId[token.name] = token.index;\n mapBaseCurrencyToSzDecimals[token.name] = token.szDecimals;\n }\n }\n\n const a = mapBaseCurrencyToAssetId[baseCurrency];\n const szDecimals = mapBaseCurrencyToSzDecimals[baseCurrency];\n const b = order.order_direction === 'OPEN_LONG' || order.order_direction === 'CLOSE_SHORT';\n\n let price = `${order.price}`;\n if (order.order_type === 'MARKET') {\n const allMids = await client.getAllMids();\n const midPrice = +allMids[baseCurrency];\n price = `${b ? (1 + 0.05) * midPrice : (1 - 0.05) * midPrice}`;\n }\n price = roundPrice(+price, instType as 'PERPETUAL' | 'SPOT', szDecimals);\n\n const p = `${price}`;\n const s = `${order.volume}`;\n const r = order.order_direction === 'CLOSE_LONG' || order.order_direction === 'CLOSE_SHORT';\n // other method\n const t =\n order.order_type === 'MARKET'\n ? {\n limit: {\n tif: 'Ioc',\n },\n }\n : {\n limit: {\n tif: 'Gtc',\n },\n };\n const params = {\n orders: [\n {\n a,\n b,\n p,\n s,\n r,\n t,\n },\n ],\n };\n\n const res = await client.placeOrder(params);\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(res));\n return {\n res: {\n code: res.status === 'ok' && res.response.data.statuses[0]?.error === undefined ? 0 : 1,\n message: res.status !== 'ok' ? 'API ERROR' : res.response.data.statuses[0]?.error || 'OK',\n },\n };\n },\n);\n"]}
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../src/order.ts"],"names":[],"mappings":"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","sourcesContent":["import { IOrder } from '@yuants/data-order';\nimport { Terminal } from '@yuants/protocol';\nimport { formatTime } from '@yuants/utils';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\n/**\n * Round price according to Hyperliquid rules:\n * - Max 5 significant figures\n * - Max decimal places = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)\n * - Integer prices are always allowed regardless of significant figures\n */\nconst roundPrice = (price: number, instType: 'PERPETUAL' | 'SPOT', szDecimals: number): string => {\n const MAX_DECIMALS = instType === 'PERPETUAL' ? 6 : 8;\n const maxDecimalPlaces = MAX_DECIMALS - szDecimals;\n\n // Convert to string to work with precision\n const priceStr = price.toString();\n\n // Check if it's an integer\n if (Number.isInteger(price)) {\n return priceStr;\n }\n\n // Get significant figures count\n const significantFigures = priceStr.replace(/^0+\\.?0*/, '').replace(/\\./g, '').length;\n\n // If more than 5 significant figures, round to 5\n let roundedPrice = price;\n if (significantFigures > 5) {\n // Find the position of the first non-zero digit\n const firstNonZeroIndex = priceStr.match(/[1-9]/)?.index || 0;\n const decimalIndex = priceStr.indexOf('.');\n\n if (decimalIndex === -1) {\n // Integer case - round to 5 significant figures\n const magnitude = Math.floor(Math.log10(Math.abs(price)));\n const factor = Math.pow(10, magnitude - 4); // 5 significant figures\n roundedPrice = Math.round(price / factor) * factor;\n } else {\n // Decimal case\n const beforeDecimal = priceStr.substring(0, decimalIndex);\n const afterDecimal = priceStr.substring(decimalIndex + 1);\n\n if (beforeDecimal !== '0') {\n // Has integer part\n const integerDigits = beforeDecimal.length;\n const neededDecimalDigits = Math.max(0, 5 - integerDigits);\n roundedPrice = parseFloat(price.toFixed(neededDecimalDigits));\n } else {\n // Pure decimal (0.xxxx)\n const leadingZeros = afterDecimal.match(/^0*/)?.[0].length || 0;\n const precision = leadingZeros + 5;\n roundedPrice = parseFloat(price.toFixed(precision));\n }\n }\n }\n\n // Apply decimal places limit\n const finalPrice = parseFloat(roundedPrice.toFixed(maxDecimalPlaces));\n\n return finalPrice.toString();\n};\n\nterminal.server.provideService<IOrder>(\n 'SubmitOrder',\n {\n required: ['account_id'],\n properties: {\n account_id: { const: `Hyperliquid/${client.public_key}` },\n },\n },\n async (msg) => {\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(msg));\n const order = msg.req;\n\n const [instType, symbol] = order.product_id.split('/');\n const baseCurrency = symbol.split('-')[0];\n\n const mapBaseCurrencyToAssetId: Record<string, number> = {};\n const mapBaseCurrencyToSzDecimals: Record<string, number> = {};\n\n if (instType === 'PERPETUAL') {\n const meta = await client.getPerpetualsMetaData();\n for (let i = 0; i < meta.universe.length; i++) {\n const token = meta.universe[i];\n mapBaseCurrencyToAssetId[token.name] = i;\n mapBaseCurrencyToSzDecimals[token.name] = token.szDecimals;\n }\n } else if (instType === 'SPOT') {\n const meta = await client.getSpotMetaData();\n for (const token of meta.tokens) {\n mapBaseCurrencyToAssetId[token.name] = token.index;\n mapBaseCurrencyToSzDecimals[token.name] = token.szDecimals;\n }\n }\n\n const a = mapBaseCurrencyToAssetId[baseCurrency];\n const szDecimals = mapBaseCurrencyToSzDecimals[baseCurrency];\n const b = order.order_direction === 'OPEN_LONG' || order.order_direction === 'CLOSE_SHORT';\n\n let price = `${order.price}`;\n if (order.order_type === 'MARKET') {\n const allMids = await client.getAllMids();\n const midPrice = +allMids[baseCurrency];\n price = `${b ? (1 + 0.05) * midPrice : (1 - 0.05) * midPrice}`;\n }\n price = roundPrice(+price, instType as 'PERPETUAL' | 'SPOT', szDecimals);\n\n const p = `${price}`;\n const s = `${order.volume}`;\n const r = order.order_direction === 'CLOSE_LONG' || order.order_direction === 'CLOSE_SHORT';\n // other method\n const t =\n order.order_type === 'MARKET'\n ? {\n limit: {\n tif: 'Ioc',\n },\n }\n : {\n limit: {\n tif: 'Gtc',\n },\n };\n const params = {\n orders: [\n {\n a,\n b,\n p,\n s,\n r,\n t,\n },\n ],\n };\n\n const res = await client.placeOrder(params);\n console.info(formatTime(Date.now()), 'SubmitOrder', JSON.stringify(res));\n return {\n res: {\n code: res.status === 'ok' && res.response.data.statuses[0]?.error === undefined ? 0 : 1,\n message: res.status !== 'ok' ? 'API ERROR' : res.response.data.statuses[0]?.error || 'OK',\n },\n };\n },\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AA6ChD,eAAO,MAAM,iBAAiB,uCAkC7B,CAAC"}
1
+ {"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AA+ChD,eAAO,MAAM,iBAAiB,uCAkC7B,CAAC"}
package/lib/product.js CHANGED
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.perpetualProduct$ = void 0;
4
+ const protocol_1 = require("@yuants/protocol");
4
5
  const sql_1 = require("@yuants/sql");
5
6
  const utils_1 = require("@yuants/utils");
6
7
  const rxjs_1 = require("rxjs");
7
8
  const api_1 = require("./api");
8
- const terminal_1 = require("./terminal");
9
+ const terminal = protocol_1.Terminal.fromNodeEnv();
9
10
  const product$ = new rxjs_1.Subject();
10
11
  const tokenProduct$ = (0, rxjs_1.defer)(async () => {
11
12
  const res = await api_1.client.getSpotMetaData();
@@ -63,7 +64,7 @@ exports.perpetualProduct$ = (0, rxjs_1.defer)(async () => {
63
64
  }), (0, rxjs_1.retry)({ delay: 5000 }), (0, rxjs_1.repeat)({ delay: 86400000 }), (0, rxjs_1.shareReplay)(1));
64
65
  exports.perpetualProduct$.subscribe();
65
66
  tokenProduct$.subscribe();
66
- (0, sql_1.createSQLWriter)(terminal_1.terminal, {
67
+ (0, sql_1.createSQLWriter)(terminal, {
67
68
  data$: product$,
68
69
  tableName: 'product',
69
70
  conflictKeys: ['datasource_id', 'product_id'],
@@ -1 +1 @@
1
- {"version":3,"file":"product.js","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"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","sourcesContent":["import { IProduct } from '@yuants/data-product';\nimport { createSQLWriter } from '@yuants/sql';\nimport { encodePath, formatTime } from '@yuants/utils';\nimport { defer, repeat, retry, shareReplay, Subject, tap } from 'rxjs';\nimport { client } from './api';\nimport { terminal } from './terminal';\n\nconst product$ = new Subject<IProduct>();\n\nconst tokenProduct$ = defer(async () => {\n const res = await client.getSpotMetaData();\n return res.tokens.map(\n (token): IProduct => ({\n product_id: encodePath('SPOT', `${token.name}-USDC`),\n datasource_id: 'HYPERLIQUID',\n quote_currency: 'USDC',\n base_currency: token.name,\n price_step: 1e-2,\n volume_step: Number(`1e-${token.szDecimals}`),\n name: '',\n value_scale: 1,\n value_scale_unit: '',\n margin_rate: 1,\n value_based_cost: 0,\n volume_based_cost: 0,\n max_position: 0,\n max_volume: 0,\n allow_long: true,\n allow_short: false,\n market_id: 'Hyperliquid',\n no_interest_rate: true,\n }),\n );\n}).pipe(\n tap((list) => list.forEach((product) => product$.next(product))),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'SpotProducts', e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\nexport const perpetualProduct$ = defer(async () => {\n const res = await client.getPerpetualsMetaData();\n return res.universe.map(\n (product): IProduct => ({\n product_id: encodePath('PERPETUAL', `${product.name}-USD`),\n datasource_id: 'HYPERLIQUID',\n quote_currency: 'USD',\n base_currency: product.name,\n price_step: 1e-2,\n volume_step: Number(`1e-${product.szDecimals}`),\n name: '',\n value_scale: 1,\n value_scale_unit: '',\n margin_rate: 1 / product.maxLeverage,\n value_based_cost: 0,\n volume_based_cost: 0,\n max_position: 0,\n max_volume: 0,\n allow_long: true,\n allow_short: true,\n market_id: 'Hyperliquid',\n no_interest_rate: false,\n }),\n );\n}).pipe(\n tap((list) => list.forEach((product) => product$.next(product))),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'PerpetualProducts', e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\nperpetualProduct$.subscribe();\ntokenProduct$.subscribe();\n\ncreateSQLWriter<IProduct>(terminal, {\n data$: product$,\n tableName: 'product',\n conflictKeys: ['datasource_id', 'product_id'],\n writeInterval: 1000,\n});\n"]}
1
+ {"version":3,"file":"product.js","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"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","sourcesContent":["import { IProduct } from '@yuants/data-product';\nimport { Terminal } from '@yuants/protocol';\nimport { createSQLWriter } from '@yuants/sql';\nimport { encodePath, formatTime } from '@yuants/utils';\nimport { defer, repeat, retry, shareReplay, Subject, tap } from 'rxjs';\nimport { client } from './api';\n\nconst terminal = Terminal.fromNodeEnv();\n\nconst product$ = new Subject<IProduct>();\n\nconst tokenProduct$ = defer(async () => {\n const res = await client.getSpotMetaData();\n return res.tokens.map(\n (token): IProduct => ({\n product_id: encodePath('SPOT', `${token.name}-USDC`),\n datasource_id: 'HYPERLIQUID',\n quote_currency: 'USDC',\n base_currency: token.name,\n price_step: 1e-2,\n volume_step: Number(`1e-${token.szDecimals}`),\n name: '',\n value_scale: 1,\n value_scale_unit: '',\n margin_rate: 1,\n value_based_cost: 0,\n volume_based_cost: 0,\n max_position: 0,\n max_volume: 0,\n allow_long: true,\n allow_short: false,\n market_id: 'Hyperliquid',\n no_interest_rate: true,\n }),\n );\n}).pipe(\n tap((list) => list.forEach((product) => product$.next(product))),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'SpotProducts', e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\nexport const perpetualProduct$ = defer(async () => {\n const res = await client.getPerpetualsMetaData();\n return res.universe.map(\n (product): IProduct => ({\n product_id: encodePath('PERPETUAL', `${product.name}-USD`),\n datasource_id: 'HYPERLIQUID',\n quote_currency: 'USD',\n base_currency: product.name,\n price_step: 1e-2,\n volume_step: Number(`1e-${product.szDecimals}`),\n name: '',\n value_scale: 1,\n value_scale_unit: '',\n margin_rate: 1 / product.maxLeverage,\n value_based_cost: 0,\n volume_based_cost: 0,\n max_position: 0,\n max_volume: 0,\n allow_long: true,\n allow_short: true,\n market_id: 'Hyperliquid',\n no_interest_rate: false,\n }),\n );\n}).pipe(\n tap((list) => list.forEach((product) => product$.next(product))),\n tap({\n error: (e) => {\n console.error(formatTime(Date.now()), 'PerpetualProducts', e);\n },\n }),\n retry({ delay: 5000 }),\n repeat({ delay: 86400_000 }),\n shareReplay(1),\n);\n\nperpetualProduct$.subscribe();\ntokenProduct$.subscribe();\n\ncreateSQLWriter<IProduct>(terminal, {\n data$: product$,\n tableName: 'product',\n conflictKeys: ['datasource_id', 'product_id'],\n writeInterval: 1000,\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuants/vendor-hyperliquid",
3
- "version": "0.3.15",
3
+ "version": "0.3.16",
4
4
  "bin": "lib/cli.js",
5
5
  "main": "lib/index.js",
6
6
  "files": [
@@ -9,21 +9,21 @@
9
9
  "temp"
10
10
  ],
11
11
  "dependencies": {
12
- "@yuants/protocol": "0.44.0",
13
- "@yuants/transfer": "0.2.16",
14
- "@yuants/data-account": "0.4.5",
12
+ "@yuants/protocol": "0.45.0",
13
+ "@yuants/transfer": "0.2.17",
14
+ "@yuants/data-account": "0.4.6",
15
15
  "@yuants/utils": "0.8.0",
16
- "@yuants/sql": "0.9.7",
17
- "@yuants/data-product": "0.2.17",
18
- "@yuants/data-interest-rate": "0.1.25",
19
- "@yuants/data-order": "0.2.13",
20
- "@yuants/data-series": "0.3.28",
16
+ "@yuants/sql": "0.9.8",
17
+ "@yuants/data-product": "0.2.18",
18
+ "@yuants/data-interest-rate": "0.1.26",
19
+ "@yuants/data-order": "0.2.14",
20
+ "@yuants/data-series": "0.3.29",
21
21
  "rxjs": "~7.5.6",
22
22
  "crypto-js": "^4.2.0",
23
23
  "hyperliquid": "~1.6.2",
24
24
  "ethers": "~6.13.5",
25
25
  "@msgpack/msgpack": "~3.1.2",
26
- "@yuants/data-ohlc": "0.3.24"
26
+ "@yuants/data-ohlc": "0.3.25"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@microsoft/api-extractor": "~7.30.0",
@@ -1,33 +1,32 @@
1
1
  {
2
- "apps/vendor-hyperliquid/CHANGELOG.json": "1d11aef2280df1ba5e1aaf534956d1c47b9c8dd9",
3
- "apps/vendor-hyperliquid/CHANGELOG.md": "f042baddff762d3b9ebed3b6c7498ac7a2b5bd93",
2
+ "apps/vendor-hyperliquid/CHANGELOG.json": "110ad6e8cbce0b2f642c1edb79ad7739b1596b91",
3
+ "apps/vendor-hyperliquid/CHANGELOG.md": "4aaa49f1cce94784bc985c7d9c387185521c6f70",
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": "c0cce4930b639fc97ff5ba553809e616a6ce48f6",
9
+ "apps/vendor-hyperliquid/package.json": "0638d77c6403bd49be79704672f568d941d6ce18",
10
10
  "apps/vendor-hyperliquid/src/api.ts": "041aa6e0e322b7c6ea5c822119c695b05d32295a",
11
11
  "apps/vendor-hyperliquid/src/cli.ts": "9bf6b5559a6c6f33da20e74cc6c5d702c60ec891",
12
- "apps/vendor-hyperliquid/src/index.ts": "b62e4650a10ea26db3b08caea8f580c7d0c5ee91",
12
+ "apps/vendor-hyperliquid/src/index.ts": "7657d0e32c93b8c81496119ec7a05e2882207e5a",
13
13
  "apps/vendor-hyperliquid/src/interest_rate.ts": "5b46f8a4904734d9801e3ddd1146813918e36835",
14
14
  "apps/vendor-hyperliquid/src/ohlc.ts": "b1272944f0ffe8dd77ef9e7e39429efb7d2e5006",
15
- "apps/vendor-hyperliquid/src/order.ts": "6f7cce32c4d23ba5defd07b5427672082c1319cd",
16
- "apps/vendor-hyperliquid/src/product.ts": "fec2d7f031f6aa594891e52096fcedcc8a65906c",
15
+ "apps/vendor-hyperliquid/src/order.ts": "de633327cb9ca8c02295f14d2d8a8b8384fdc1b4",
16
+ "apps/vendor-hyperliquid/src/product.ts": "36081fdbea85de89a2745cb4815abcb05d1af294",
17
17
  "apps/vendor-hyperliquid/src/sign.ts": "94f4e5604a01d197d164b42415b17789ab2b6889",
18
- "apps/vendor-hyperliquid/src/terminal.ts": "04776a178d253a2e53f9c84c802e80f67aa9179b",
19
18
  "apps/vendor-hyperliquid/tsconfig.json": "81da8f78196974b5d15da0edb6b2d9f48641063c",
20
19
  "apps/vendor-hyperliquid/.rush/temp/shrinkwrap-deps.json": "d8a15e8163d8abdb142a2024a5b5b13ab444f87b",
21
- "libraries/protocol/temp/package-deps.json": "8eafdac8b7fcbd384da0c4d631d4232ca6e57772",
22
- "libraries/transfer/temp/package-deps.json": "e0b34d4194569952115135c95fa12960ddfd3fe7",
23
- "libraries/data-account/temp/package-deps.json": "3551b99eefd7b25554e1dde345cafccd37c7c928",
24
- "libraries/utils/temp/package-deps.json": "c0ccd6946461153e7eb1b04a3061e075788fad2a",
25
- "libraries/sql/temp/package-deps.json": "da0e17fb9630241beb52c1e3d124b369ddbe37b4",
26
- "libraries/data-product/temp/package-deps.json": "a59164cb062c82db4350b210ee75a7a2aa6f7022",
27
- "libraries/data-interest-rate/temp/package-deps.json": "1c404b9ff7652d0102472b8ec143e4e373af5d85",
28
- "libraries/data-order/temp/package-deps.json": "bbd94675f86f13a9a6d866e7a245810c8125f8cd",
29
- "libraries/data-series/temp/package-deps.json": "fc6408d3f9ac43e4695e096950633ba9b357f6a3",
30
- "libraries/data-ohlc/temp/package-deps.json": "660bf98a9ff523a7c5ad6d4f9f17a2b8547f6a73",
31
- "libraries/extension/temp/package-deps.json": "abcd1ce716b9fd88f33173d01f02c4c3a9462009",
20
+ "libraries/protocol/temp/package-deps.json": "ff231b7689ff7d151498b496f70944d4598fcf33",
21
+ "libraries/transfer/temp/package-deps.json": "2a26e3db2d5ef3318172d1d29ca257bfa94d1b21",
22
+ "libraries/data-account/temp/package-deps.json": "7baeec049b7f31fb4bafb63018c0c9736f1aa456",
23
+ "libraries/utils/temp/package-deps.json": "56def945d0e67a9d0ca13447d2333155be0138f2",
24
+ "libraries/sql/temp/package-deps.json": "2da55e5e704b1c1558acab11b6df163744d1b24a",
25
+ "libraries/data-product/temp/package-deps.json": "fceed1ec7ecb23e7e3f9c36bc0abd3f053a27c75",
26
+ "libraries/data-interest-rate/temp/package-deps.json": "246f09881d5bce801a352861086d7e2b90eb5b6b",
27
+ "libraries/data-order/temp/package-deps.json": "add9a90c23442334f0575f403ef48dc33ceb5fd4",
28
+ "libraries/data-series/temp/package-deps.json": "dd0d2f8322b484f074ae09c050ceb53fbc1368f4",
29
+ "libraries/data-ohlc/temp/package-deps.json": "6ae0a1249855ee2e1aefd88a66f6d0c4a1f61dd5",
30
+ "libraries/extension/temp/package-deps.json": "1e2fec9acb35353b204eff0d4cc0af65c3b2582a",
32
31
  "tools/toolkit/temp/package-deps.json": "3bef053db16659f0cdaceea64c8a8580c0131633"
33
32
  }
package/dist/terminal.js DELETED
@@ -1,3 +0,0 @@
1
- import { Terminal } from '@yuants/protocol';
2
- export const terminal = Terminal.fromNodeEnv();
3
- //# sourceMappingURL=terminal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC","sourcesContent":["import { Terminal } from '@yuants/protocol';\n\nexport const terminal = Terminal.fromNodeEnv();\n"]}
package/lib/terminal.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import { Terminal } from '@yuants/protocol';
2
- export declare const terminal: Terminal;
3
- //# sourceMappingURL=terminal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,eAAO,MAAM,QAAQ,UAAyB,CAAC"}
package/lib/terminal.js DELETED
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.terminal = void 0;
4
- const protocol_1 = require("@yuants/protocol");
5
- exports.terminal = protocol_1.Terminal.fromNodeEnv();
6
- //# sourceMappingURL=terminal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAE/B,QAAA,QAAQ,GAAG,mBAAQ,CAAC,WAAW,EAAE,CAAC","sourcesContent":["import { Terminal } from '@yuants/protocol';\n\nexport const terminal = Terminal.fromNodeEnv();\n"]}