@lifi/perps-sdk-provider-hyperliquid 27.0.0 → 28.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/HyperliquidProvider.d.ts.map +1 -1
  3. package/dist/cjs/HyperliquidProvider.js +7 -2
  4. package/dist/cjs/HyperliquidProvider.js.map +1 -1
  5. package/dist/cjs/services/getAccount.d.ts.map +1 -1
  6. package/dist/cjs/services/getAccount.js +5 -3
  7. package/dist/cjs/services/getAccount.js.map +1 -1
  8. package/dist/cjs/utils/liquidation.d.ts +1 -1
  9. package/dist/cjs/utils/liquidation.d.ts.map +1 -1
  10. package/dist/cjs/utils/liquidation.js.map +1 -1
  11. package/dist/cjs/utils/spotBalance.d.ts +1 -1
  12. package/dist/cjs/utils/spotBalance.d.ts.map +1 -1
  13. package/dist/cjs/utils/spotBalance.js +4 -1
  14. package/dist/cjs/utils/spotBalance.js.map +1 -1
  15. package/dist/cjs/utils/transferMargin.js +2 -2
  16. package/dist/cjs/utils/transferMargin.js.map +1 -1
  17. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +1 -0
  18. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  19. package/dist/cjs/websocket/HyperliquidWsProvider.js +4 -1
  20. package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
  21. package/dist/esm/HyperliquidProvider.d.ts.map +1 -1
  22. package/dist/esm/HyperliquidProvider.js +10 -4
  23. package/dist/esm/HyperliquidProvider.js.map +1 -1
  24. package/dist/esm/services/getAccount.d.ts.map +1 -1
  25. package/dist/esm/services/getAccount.js +6 -4
  26. package/dist/esm/services/getAccount.js.map +1 -1
  27. package/dist/esm/utils/liquidation.d.ts +3 -1
  28. package/dist/esm/utils/liquidation.d.ts.map +1 -1
  29. package/dist/esm/utils/liquidation.js +2 -0
  30. package/dist/esm/utils/liquidation.js.map +1 -1
  31. package/dist/esm/utils/spotBalance.d.ts +2 -1
  32. package/dist/esm/utils/spotBalance.d.ts.map +1 -1
  33. package/dist/esm/utils/spotBalance.js +5 -1
  34. package/dist/esm/utils/spotBalance.js.map +1 -1
  35. package/dist/esm/utils/transferMargin.js +3 -3
  36. package/dist/esm/utils/transferMargin.js.map +1 -1
  37. package/dist/esm/websocket/HyperliquidWsProvider.d.ts +1 -0
  38. package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  39. package/dist/esm/websocket/HyperliquidWsProvider.js +5 -2
  40. package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
  41. package/dist/types/HyperliquidProvider.d.ts.map +1 -1
  42. package/dist/types/services/getAccount.d.ts.map +1 -1
  43. package/dist/types/utils/liquidation.d.ts +3 -1
  44. package/dist/types/utils/liquidation.d.ts.map +1 -1
  45. package/dist/types/utils/spotBalance.d.ts +2 -1
  46. package/dist/types/utils/spotBalance.d.ts.map +1 -1
  47. package/dist/types/websocket/HyperliquidWsProvider.d.ts +1 -0
  48. package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  49. package/package.json +3 -3
  50. package/src/HyperliquidProvider.ts +18 -6
  51. package/src/services/getAccount.ts +13 -3
  52. package/src/utils/liquidation.ts +3 -1
  53. package/src/utils/spotBalance.ts +8 -1
  54. package/src/utils/transferMargin.ts +4 -4
  55. package/src/websocket/HyperliquidWsProvider.ts +13 -1
@@ -1 +1 @@
1
- {"version":3,"file":"liquidation.d.ts","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,mBAAmB,CAAA;AAEtE;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,GAClB,aAAa,CAQf;AAED,cAAc;AACd,eAAO,MAAM,kCAAkC,6CAG9C,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,MAAM,GAClB,MAAM,CAOR;AAED,cAAc;AACd,eAAO,MAAM,6BAA6B,oGAGzC,CAAA"}
1
+ {"version":3,"file":"liquidation.d.ts","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,mBAAmB,CAAA;AAEtE;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,GAClB,aAAa,CAQf;AAED,cAAc;AACd,eAAO,MAAM,kCAAkC,6CAG9C,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAOpB;AAED,cAAc;AACd,eAAO,MAAM,6BAA6B,oGAGzC,CAAA"}
@@ -11,9 +11,10 @@ export declare const spotPriceById: (markets: readonly Market[], priceByMarketId
11
11
  * Convert a Hyperliquid spot balance's numeric token index into an SDK asset.
12
12
  * The balance payload has no `fullName`, so logo resolution uses the base
13
13
  * `_spot` URI rule rather than Unit-underlying lookup.
14
+ * @param registered - The registry `Asset` with the same `id`; only its `decimals` is copied.
14
15
  * @public
15
16
  */
16
- export declare const spotAssetFromToken: (b: HlSpotBalance) => Asset;
17
+ export declare const spotAssetFromToken: (b: HlSpotBalance, registered?: Asset) => Asset;
17
18
  /** Assemble a typed spot {@link Balance}; `total` is native token units and its unit price and USD value use `priceById`. @public */
18
19
  export declare const spotBalance: (asset: Asset, total: DecimalString, priceById: ReadonlyMap<string, DecimalString>) => Balance;
19
20
  //# sourceMappingURL=spotBalance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spotBalance.d.ts","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAItD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,SAAS,MAAM,EAAE,EAC1B,iBAAiB,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,KAClD,GAAG,CAAC,MAAM,EAAE,aAAa,CAc3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,aAAa,KAAG,KAIpD,CAAA;AAEF,qIAAqI;AACrI,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,OAAO,aAAa,EACpB,WAAW,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,KAC5C,OAUF,CAAA"}
1
+ {"version":3,"file":"spotBalance.d.ts","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAItD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,SAAS,MAAM,EAAE,EAC1B,iBAAiB,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,KAClD,GAAG,CAAC,MAAM,EAAE,aAAa,CAc3B,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC7B,GAAG,aAAa,EAChB,aAAa,KAAK,KACjB,KAOD,CAAA;AAEF,qIAAqI;AACrI,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,OAAO,aAAa,EACpB,WAAW,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,KAC5C,OAUF,CAAA"}
@@ -31,6 +31,7 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
31
31
  private readonly clearinghouseRefs;
32
32
  private readonly client;
33
33
  private readonly registry;
34
+ private readonly assetRegistry;
34
35
  private readonly accountChecksByUser;
35
36
  private readonly abstractionByUser;
36
37
  private readonly summaryUsers;
@@ -1 +1 @@
1
- {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/perps-sdk-provider-hyperliquid",
3
- "version": "27.0.0",
3
+ "version": "28.0.0",
4
4
  "description": "Hyperliquid provider plugin for @lifi/perps-sdk",
5
5
  "homepage": "https://github.com/lifinance/perps-sdk",
6
6
  "bugs": {
@@ -49,10 +49,10 @@
49
49
  "dependencies": {
50
50
  "big.js": "^7.0.1",
51
51
  "viem": "^2.55.18",
52
- "@lifi/perps-types": "^22.0.0"
52
+ "@lifi/perps-types": "^23.0.0"
53
53
  },
54
54
  "peerDependencies": {
55
- "@lifi/perps-sdk": "^25.0.0"
55
+ "@lifi/perps-sdk": "^26.0.0"
56
56
  },
57
57
  "publishConfig": {
58
58
  "access": "public"
@@ -23,6 +23,7 @@ import {
23
23
  resolveQuote,
24
24
  type SDKRequestOptions,
25
25
  type SignActionsContext,
26
+ type SignActionsResult,
26
27
  type StorageAdapter,
27
28
  } from '@lifi/perps-sdk'
28
29
  import {
@@ -49,8 +50,8 @@ import {
49
50
  type PositionsResponse,
50
51
  type Quote,
51
52
  type SetupAction,
52
- type SignedActionStep,
53
53
  type SigningMethod,
54
+ UserActionStatus,
54
55
  } from '@lifi/perps-types'
55
56
  import { type Address, type Hex, isAddress } from 'viem'
56
57
  import { projectHyperliquidConfigSettings } from './accountConfig.js'
@@ -294,15 +295,24 @@ export function hyperliquidProvider(
294
295
  return {}
295
296
  },
296
297
 
297
- signActions: (
298
+ signActions: async (
298
299
  method: SigningMethod,
299
300
  steps: ActionStep[],
300
301
  address: Address,
301
302
  ctx?: SignActionsContext
302
- ): Promise<SignedActionStep[]> =>
303
- hyperliquidSignActions(agentStore, method, steps, address, ctx),
303
+ ): Promise<SignActionsResult> => ({
304
+ signed: await hyperliquidSignActions(
305
+ agentStore,
306
+ method,
307
+ steps,
308
+ address,
309
+ ctx
310
+ ),
311
+ executed: [],
312
+ }),
304
313
 
305
- // A confirmed session-agent revoke leaves the stored key unusable.
314
+ // A session-agent revoke the venue acknowledged leaves the stored key
315
+ // unusable. An indeterminate or failed revoke keeps it.
306
316
  onExecuteResults: async (
307
317
  address: Address,
308
318
  results: ActionResult[]
@@ -310,7 +320,9 @@ export function hyperliquidProvider(
310
320
  if (
311
321
  results.some(
312
322
  (result) =>
313
- result.success && result.action === ActionType.REVOKE_SESSION_AGENT
323
+ result.action === ActionType.REVOKE_SESSION_AGENT &&
324
+ (result.status === UserActionStatus.Submitted ||
325
+ result.status === UserActionStatus.Accepted)
314
326
  )
315
327
  ) {
316
328
  await agentStore.remove(address)
@@ -1,5 +1,7 @@
1
1
  import {
2
+ type AssetRegistry,
2
3
  calculateTransferable,
4
+ getAssetRegistry,
3
5
  getMarketRegistry,
4
6
  getMarketsContext,
5
7
  isDecimalStringGreaterThan,
@@ -68,7 +70,8 @@ const buildBalances = (
68
70
  stateByDex: Map<string, HlClearinghouseState>,
69
71
  quoteAssetIds: ReadonlySet<string>,
70
72
  priceById: ReadonlyMap<string, DecimalString>,
71
- quoteAssetByCategory: Map<string, Asset>
73
+ quoteAssetByCategory: Map<string, Asset>,
74
+ assetRegistry: AssetRegistry
72
75
  ): BalancePartition => {
73
76
  const { balances, collateralBalances } = partitionSpotBalances(
74
77
  spotState.balances
@@ -85,7 +88,11 @@ const buildBalances = (
85
88
  PROVIDER_KEY
86
89
  )
87
90
  return {
88
- ...spotBalance(spotAssetFromToken(b), total, priceById),
91
+ ...spotBalance(
92
+ spotAssetFromToken(b, assetRegistry.get(String(b.token))),
93
+ total,
94
+ priceById
95
+ ),
89
96
  transferable: calculateTransferable(
90
97
  subtractDecimalString(total, hold),
91
98
  total
@@ -168,6 +175,7 @@ export const getAccount = async (
168
175
  const quoteAssetByCategory = new Map(
169
176
  markets.map((m) => [m.categoryId, m.quoteAsset])
170
177
  )
178
+ const assetRegistry = getAssetRegistry(client, PROVIDER_KEY)
171
179
 
172
180
  const [
173
181
  feesResult,
@@ -214,6 +222,7 @@ export const getAccount = async (
214
222
  )
215
223
  ),
216
224
  getMarketsContext(client, { provider: PROVIDER_KEY }, options),
225
+ assetRegistry.sync(),
217
226
  ])
218
227
 
219
228
  const priceById = spotPriceById(
@@ -271,7 +280,8 @@ export const getAccount = async (
271
280
  stateByDex,
272
281
  quoteAssetIds,
273
282
  priceById,
274
- quoteAssetByCategory
283
+ quoteAssetByCategory,
284
+ assetRegistry
275
285
  )
276
286
 
277
287
  const marginUsed = safeAddDecimalStrings(
@@ -61,6 +61,8 @@ export const safeCalculateMaintenanceMarginRate = createSafeFunction(
61
61
  * @param leverage - User-selected leverage (e.g., `'10'`)
62
62
  * @param maxLeverage - Asset's maximum leverage (e.g., 50 for BTC). Sets
63
63
  * mmr = 1 / (2 × maxLeverage).
64
+ * @returns The estimate, or `undefined` when `leverage` is at or above
65
+ * `2 × maxLeverage`, as {@link estimateLiquidationPrice} documents.
64
66
  * @throws {PerpsError} `ValidationError` when `maxLeverage` is not a finite
65
67
  * number above zero, or on an input that `estimateLiquidationPrice` rejects.
66
68
  * @public
@@ -70,7 +72,7 @@ export function calculateLiquidationPrice(
70
72
  leverage: string,
71
73
  isLong: boolean,
72
74
  maxLeverage: number
73
- ): string {
75
+ ): string | undefined {
74
76
  return estimateLiquidationPrice({
75
77
  entryPrice,
76
78
  leverage,
@@ -38,12 +38,19 @@ export const spotPriceById = (
38
38
  * Convert a Hyperliquid spot balance's numeric token index into an SDK asset.
39
39
  * The balance payload has no `fullName`, so logo resolution uses the base
40
40
  * `_spot` URI rule rather than Unit-underlying lookup.
41
+ * @param registered - The registry `Asset` with the same `id`; only its `decimals` is copied.
41
42
  * @public
42
43
  */
43
- export const spotAssetFromToken = (b: HlSpotBalance): Asset => ({
44
+ export const spotAssetFromToken = (
45
+ b: HlSpotBalance,
46
+ registered?: Asset
47
+ ): Asset => ({
44
48
  ...coinAsset(b.coin),
45
49
  id: String(b.token),
46
50
  logoURI: spotLogoURI(b.coin),
51
+ ...(registered?.decimals === undefined
52
+ ? {}
53
+ : { decimals: registered.decimals }),
47
54
  })
48
55
 
49
56
  /** Assemble a typed spot {@link Balance}; `total` is native token units and its unit price and USD value use `priceById`. @public */
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  isDecimalString,
3
3
  isDecimalStringGreaterThan,
4
+ isPositionMarginAdjustable,
5
+ isPositionMarginRemovable,
4
6
  multiplyDecimalString,
5
7
  PerpsError,
6
- positionSupportsMarginAdjustment,
7
- positionSupportsMarginRemoval,
8
8
  roundDecimalString,
9
9
  subtractDecimalString,
10
10
  } from '@lifi/perps-sdk'
@@ -65,10 +65,10 @@ function requirePositivePositionAmount(
65
65
  export function positionRemovableMargin(
66
66
  position: Position
67
67
  ): DecimalString | undefined {
68
- if (!positionSupportsMarginAdjustment(position)) {
68
+ if (!isPositionMarginAdjustable(position)) {
69
69
  return undefined
70
70
  }
71
- if (!positionSupportsMarginRemoval(position)) {
71
+ if (!isPositionMarginRemovable(position)) {
72
72
  return '0'
73
73
  }
74
74
  const marginUsed = requirePositionAmount(position.marginUsed, 'marginUsed')
@@ -1,8 +1,10 @@
1
1
  import {
2
+ type AssetRegistry,
2
3
  addDecimalString,
3
4
  calculateTransferable,
4
5
  compareDecimalStrings,
5
6
  DecodeChain,
7
+ getAssetRegistry,
6
8
  getMarketRegistry,
7
9
  isActiveMarket,
8
10
  isActiveOrderStatus,
@@ -154,6 +156,7 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
154
156
  private readonly clearinghouseRefs = new Map<string, number>()
155
157
  private readonly client: PerpsSDKClient | undefined
156
158
  private readonly registry: MarketRegistry | undefined
159
+ private readonly assetRegistry: AssetRegistry | undefined
157
160
  private readonly accountChecksByUser = new Map<string, Promise<void>>()
158
161
  // Spot-funded modes need both spot valuation and clearinghouse margin state.
159
162
  private readonly abstractionByUser = new Map<
@@ -242,6 +245,7 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
242
245
  )
243
246
  this.client = client
244
247
  this.registry = client && getMarketRegistry(client, providerKey)
248
+ this.assetRegistry = client && getAssetRegistry(client, providerKey)
245
249
  const orderApiUrl = new URL(wsUrl)
246
250
  orderApiUrl.protocol = orderApiUrl.protocol === 'wss:' ? 'https:' : 'http:'
247
251
  this.orderApiUrl = orderApiUrl.origin
@@ -1331,6 +1335,7 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
1331
1335
  }
1332
1336
  }
1333
1337
  try {
1338
+ await this.assetRegistry?.sync()
1334
1339
  if (count === 0) {
1335
1340
  await this.registerSub(wireKey, payload)
1336
1341
  }
@@ -1595,7 +1600,14 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
1595
1600
  const rows = balances.map(({ balance, total }) => {
1596
1601
  const free = safeSubtractDecimalString(total, balance.hold)
1597
1602
  return {
1598
- ...spotBalance(spotAssetFromToken(balance), total, priceById),
1603
+ ...spotBalance(
1604
+ spotAssetFromToken(
1605
+ balance,
1606
+ this.assetRegistry?.get(String(balance.token))
1607
+ ),
1608
+ total,
1609
+ priceById
1610
+ ),
1599
1611
  locked: balance.hold,
1600
1612
  transferable:
1601
1613
  free === undefined ? '0' : calculateTransferable(free, total),