@lifi/perps-sdk-provider-hyperliquid 1.3.1 → 1.5.1

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 (66) hide show
  1. package/dist/cjs/HyperliquidProvider.d.ts.map +1 -1
  2. package/dist/cjs/HyperliquidProvider.js +2 -0
  3. package/dist/cjs/HyperliquidProvider.js.map +1 -1
  4. package/dist/cjs/index.d.ts +2 -0
  5. package/dist/cjs/index.d.ts.map +1 -1
  6. package/dist/cjs/index.js +3 -1
  7. package/dist/cjs/index.js.map +1 -1
  8. package/dist/cjs/services/getAccount.d.ts.map +1 -1
  9. package/dist/cjs/services/getAccount.js +2 -1
  10. package/dist/cjs/services/getAccount.js.map +1 -1
  11. package/dist/cjs/services/getAccountExists.d.ts +8 -0
  12. package/dist/cjs/services/getAccountExists.d.ts.map +1 -0
  13. package/dist/cjs/services/getAccountExists.js +15 -0
  14. package/dist/cjs/services/getAccountExists.js.map +1 -0
  15. package/dist/cjs/types/account.d.ts +3 -0
  16. package/dist/cjs/types/account.d.ts.map +1 -1
  17. package/dist/cjs/types/account.js.map +1 -1
  18. package/dist/cjs/types/ws.d.ts +8 -0
  19. package/dist/cjs/types/ws.d.ts.map +1 -1
  20. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +2 -0
  21. package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  22. package/dist/cjs/websocket/HyperliquidWsProvider.js +85 -13
  23. package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
  24. package/dist/esm/HyperliquidProvider.d.ts.map +1 -1
  25. package/dist/esm/HyperliquidProvider.js +2 -0
  26. package/dist/esm/HyperliquidProvider.js.map +1 -1
  27. package/dist/esm/index.d.ts +2 -0
  28. package/dist/esm/index.d.ts.map +1 -1
  29. package/dist/esm/index.js +1 -0
  30. package/dist/esm/index.js.map +1 -1
  31. package/dist/esm/services/getAccount.d.ts.map +1 -1
  32. package/dist/esm/services/getAccount.js +3 -2
  33. package/dist/esm/services/getAccount.js.map +1 -1
  34. package/dist/esm/services/getAccountExists.d.ts +22 -0
  35. package/dist/esm/services/getAccountExists.d.ts.map +1 -0
  36. package/dist/esm/services/getAccountExists.js +20 -0
  37. package/dist/esm/services/getAccountExists.js.map +1 -0
  38. package/dist/esm/types/account.d.ts +9 -0
  39. package/dist/esm/types/account.d.ts.map +1 -1
  40. package/dist/esm/types/account.js.map +1 -1
  41. package/dist/esm/types/ws.d.ts +10 -0
  42. package/dist/esm/types/ws.d.ts.map +1 -1
  43. package/dist/esm/websocket/HyperliquidWsProvider.d.ts +2 -0
  44. package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  45. package/dist/esm/websocket/HyperliquidWsProvider.js +85 -13
  46. package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
  47. package/dist/types/HyperliquidProvider.d.ts.map +1 -1
  48. package/dist/types/index.d.ts +2 -0
  49. package/dist/types/index.d.ts.map +1 -1
  50. package/dist/types/services/getAccount.d.ts.map +1 -1
  51. package/dist/types/services/getAccountExists.d.ts +22 -0
  52. package/dist/types/services/getAccountExists.d.ts.map +1 -0
  53. package/dist/types/types/account.d.ts +9 -0
  54. package/dist/types/types/account.d.ts.map +1 -1
  55. package/dist/types/types/ws.d.ts +10 -0
  56. package/dist/types/types/ws.d.ts.map +1 -1
  57. package/dist/types/websocket/HyperliquidWsProvider.d.ts +2 -0
  58. package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
  59. package/package.json +3 -3
  60. package/src/HyperliquidProvider.ts +8 -0
  61. package/src/index.ts +2 -0
  62. package/src/services/getAccount.ts +3 -2
  63. package/src/services/getAccountExists.ts +40 -0
  64. package/src/types/account.ts +10 -0
  65. package/src/types/ws.ts +12 -0
  66. package/src/websocket/HyperliquidWsProvider.ts +108 -13
@@ -60,6 +60,16 @@ export type HlWsSpotAssetCtx = {
60
60
  dayBaseVlm?: HlWsNumberString;
61
61
  circulatingSupply?: HlWsNumberString;
62
62
  };
63
+ /** @public */
64
+ export type HlWsActiveAssetCtxData = {
65
+ coin: string;
66
+ ctx: Partial<Record<keyof HlWsPerpAssetCtx, HlWsNumberString | null>>;
67
+ };
68
+ /** @public */
69
+ export type HlWsActiveSpotAssetCtxData = {
70
+ coin: string;
71
+ ctx: HlWsSpotAssetCtx;
72
+ };
63
73
  /**
64
74
  * Compressed spot asset-context feed. The first frame is a broad snapshot; later
65
75
  * frames only carry changed fields.
@@ -1 +1 @@
1
- {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/types/ws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../../src/types/ws.ts"],"names":[],"mappings":"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"}
@@ -80,6 +80,8 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
80
80
  * + mark overlaid from `fastAssetCtxs`.
81
81
  */
82
82
  private emitMarketsContext;
83
+ private handleActiveAssetCtx;
84
+ private handleActiveSpotAssetCtx;
83
85
  /** Latest mid per `Market.id` across asset-context and fast feeds. */
84
86
  private mergedMids;
85
87
  private orderbookReferencePrice;
@@ -1 +1 @@
1
- {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAGlB,cAAc,EACd,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAOL,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAA;AA2C1B;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,QAC5B,iBAEgD,CAAA;AAEtD;;;;;;;;;;;;;GAaG;AACH,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,MAAM,CAAC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,eAAe,CAAsD;IAC7E,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,uBAAuB,CAAiC;IAChE,OAAO,CAAC,yBAAyB,CAAuC;IAKxE,OAAO,CAAC,iBAAiB,CAAuC;IAGhE,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,oBAAoB,CAAmC;gBAEnD,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;IASjE,cAAc,CAClB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC;cAkBN,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IA+DnE;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,iBAAiB;IAmBzB;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAWnC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,gBAAgB;cAcL,OAAO,IAAI,IAAI;IAalC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9C,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;IAwB1C,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,WAAW;IAwCnB,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM;IAwEnC,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,oBAAoB;IAe5B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA6C1B,sEAAsE;IACtE,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,kBAAkB;IA0D1B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,+BAA+B;IAkBvC,OAAO,CAAC,eAAe;CAaxB"}
1
+ {"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAGlB,cAAc,EACd,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAOL,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAA;AA6C1B;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,QAC5B,iBAEgD,CAAA;AAEtD;;;;;;;;;;;;;GAaG;AACH,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,MAAM,CAAC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,eAAe,CAAsD;IAC7E,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,uBAAuB,CAAiC;IAChE,OAAO,CAAC,yBAAyB,CAAuC;IAKxE,OAAO,CAAC,iBAAiB,CAAuC;IAGhE,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,oBAAoB,CAAmC;gBAEnD,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;IASjE,cAAc,CAClB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC;cAkBN,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IA+DnE;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,iBAAiB;IAmBzB;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAWnC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,gBAAgB;cAcL,OAAO,IAAI,IAAI;IAalC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9C,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;IA0B1C,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,WAAW;IA6CnB,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM;IA8EnC,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,oBAAoB;IAe5B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,wBAAwB;IAWhC,sEAAsE;IACtE,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,kBAAkB;IA0D1B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,+BAA+B;IAkBvC,OAAO,CAAC,eAAe;CAaxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/perps-sdk-provider-hyperliquid",
3
- "version": "1.3.1",
3
+ "version": "1.5.1",
4
4
  "description": "Hyperliquid provider plugin for @lifi/perps-sdk",
5
5
  "homepage": "https://github.com/lifinance/perps-sdk",
6
6
  "bugs": {
@@ -48,10 +48,10 @@
48
48
  "dependencies": {
49
49
  "big.js": "^7.0.1",
50
50
  "viem": "^2.48.8",
51
- "@lifi/perps-types": "^1.4.0"
51
+ "@lifi/perps-types": "^1.5.1"
52
52
  },
53
53
  "peerDependencies": {
54
- "@lifi/perps-sdk": "^1.3.0"
54
+ "@lifi/perps-sdk": "^1.5.1"
55
55
  },
56
56
  "publishConfig": {
57
57
  "access": "public"
@@ -5,6 +5,7 @@ import {
5
5
  PerpsErrorMessage,
6
6
  type PerpsProviderPlugin,
7
7
  type PerpsSDKClient,
8
+ type ProviderAccountExistsParams,
8
9
  type ProviderGetAccountParams,
9
10
  type ProviderGetActivityParams,
10
11
  type ProviderGetFillsParams,
@@ -50,6 +51,7 @@ import {
50
51
  } from './constants.js'
51
52
  import { HyperliquidContextRef } from './context.js'
52
53
  import { getAccount } from './services/getAccount.js'
54
+ import { getAccountExists } from './services/getAccountExists.js'
53
55
  import { getActivity } from './services/getActivity.js'
54
56
  import { getFills } from './services/getFills.js'
55
57
  import { getOrder } from './services/getOrder.js'
@@ -254,6 +256,12 @@ export function hyperliquidProvider(
254
256
  ): Promise<AccountResponse> =>
255
257
  getAccount(contextRef.require(), { address: params.address }, opts),
256
258
 
259
+ accountExists: (
260
+ params: ProviderAccountExistsParams,
261
+ opts?: SDKRequestOptions
262
+ ): Promise<boolean> =>
263
+ getAccountExists(contextRef.require(), { address: params.address }, opts),
264
+
257
265
  getPositions: (
258
266
  params: ProviderGetPositionsParams,
259
267
  opts?: SDKRequestOptions
package/src/index.ts CHANGED
@@ -25,6 +25,8 @@ export {
25
25
  } from './HyperliquidProvider.js'
26
26
  export type { GetAccountParams } from './services/getAccount.js'
27
27
  export { getAccount } from './services/getAccount.js'
28
+ export type { GetAccountExistsParams } from './services/getAccountExists.js'
29
+ export { getAccountExists } from './services/getAccountExists.js'
28
30
  export type { GetActivityParams } from './services/getActivity.js'
29
31
  export { getActivity } from './services/getActivity.js'
30
32
  export type { GetFillsParams } from './services/getFills.js'
@@ -28,7 +28,7 @@ import {
28
28
  spotPriceById,
29
29
  } from '../utils/index.js'
30
30
  import { hlInfoOptions, infoRequest } from '../utils/infoClient.js'
31
- import { mapPosition } from '../utils/mapPosition.js'
31
+ import { isOpenAssetPosition, mapPosition } from '../utils/mapPosition.js'
32
32
 
33
33
  /**
34
34
  * Parameters for {@link getAccount}.
@@ -218,7 +218,7 @@ export const getAccount = async (
218
218
 
219
219
  const positions: Position[] = stateResults.flatMap((state) =>
220
220
  state.assetPositions
221
- .filter((ap) => Number.parseFloat(ap.position.szi) !== 0)
221
+ .filter(isOpenAssetPosition)
222
222
  .map((ap) => mapPosition(ap, registry.require(ap.position.coin)))
223
223
  )
224
224
 
@@ -252,6 +252,7 @@ export const getAccount = async (
252
252
  address: params.address,
253
253
  balances,
254
254
  collateralBalances,
255
+ positions,
255
256
  marginUsed: getMarginUsed(abstractionResult, positions, stateByDex),
256
257
  unrealizedPnl: totalUnrealizedPnl.toString(),
257
258
  feeTier: {
@@ -0,0 +1,40 @@
1
+ import type { SDKRequestOptions } from '@lifi/perps-sdk'
2
+ import { type Address, zeroAddress } from 'viem'
3
+ import type { HyperliquidContext } from '../context.js'
4
+ import type { HlPreTransferCheck } from '../types/index.js'
5
+ import { hlInfoOptions, infoRequest } from '../utils/infoClient.js'
6
+
7
+ /**
8
+ * Parameters for {@link getAccountExists}.
9
+ *
10
+ * @public
11
+ */
12
+ export interface GetAccountExistsParams {
13
+ address: Address
14
+ }
15
+
16
+ /**
17
+ * Resolve whether a Hyperliquid Core account exists for `address` via a
18
+ * `preTransferCheck` info query. An account exists only after its first
19
+ * deposit (which pays the one-time creation fee), so this is the deposit-first
20
+ * gate for setup. `userExists` is independent of the `source` field, so a zero
21
+ * address is used.
22
+ * @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
23
+ * @public
24
+ */
25
+ export const getAccountExists = async (
26
+ { client, apiUrl }: HyperliquidContext,
27
+ params: GetAccountExistsParams,
28
+ options?: SDKRequestOptions
29
+ ): Promise<boolean> => {
30
+ const { userExists } = await infoRequest<HlPreTransferCheck>(
31
+ apiUrl,
32
+ {
33
+ type: 'preTransferCheck',
34
+ user: params.address,
35
+ source: zeroAddress,
36
+ },
37
+ hlInfoOptions(client, options)
38
+ )
39
+ return userExists
40
+ }
@@ -57,6 +57,16 @@ export type HlUserFees = {
57
57
  /** @public */
58
58
  export type HlExtraAgents = Record<string, unknown>[]
59
59
 
60
+ /**
61
+ * Response of the `preTransferCheck` info query. `userExists` is `false` until
62
+ * the account's first deposit (which pays the one-time creation `fee`); only
63
+ * `userExists` is read here.
64
+ * @public
65
+ */
66
+ export type HlPreTransferCheck = {
67
+ userExists: boolean
68
+ }
69
+
60
70
  /**
61
71
  * Possible values returned by the `userAbstraction` info endpoint.
62
72
  * `null` means abstraction has never been set (standard mode).
package/src/types/ws.ts CHANGED
@@ -71,6 +71,18 @@ export type HlWsSpotAssetCtx = {
71
71
  circulatingSupply?: HlWsNumberString
72
72
  }
73
73
 
74
+ /** @public */
75
+ export type HlWsActiveAssetCtxData = {
76
+ coin: string
77
+ ctx: Partial<Record<keyof HlWsPerpAssetCtx, HlWsNumberString | null>>
78
+ }
79
+
80
+ /** @public */
81
+ export type HlWsActiveSpotAssetCtxData = {
82
+ coin: string
83
+ ctx: HlWsSpotAssetCtx
84
+ }
85
+
74
86
  /**
75
87
  * Compressed spot asset-context feed. The first frame is a broad snapshot; later
76
88
  * frames only carry changed fields.
@@ -27,6 +27,8 @@ import type {
27
27
  HlAssetPosition,
28
28
  HlOrderDetail,
29
29
  HlUserFill,
30
+ HlWsActiveAssetCtxData,
31
+ HlWsActiveSpotAssetCtxData,
30
32
  HlWsAllDexsAssetCtxsData,
31
33
  HlWsAllDexsClearinghouseStateData,
32
34
  HlWsCandleData,
@@ -309,6 +311,8 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
309
311
  switch (sub.channel) {
310
312
  case 'marketsContext':
311
313
  return 'marketsContext'
314
+ case 'marketContext':
315
+ return `marketContext:${sub.marketId}`
312
316
  case 'orderbook':
313
317
  return `l2:${sub.marketId}:${this.orderbookAggregationKey(
314
318
  sub.marketId,
@@ -361,6 +365,11 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
361
365
  // Handled via getMarketsContextSubEntries in openChannel; never reaches
362
366
  // toHlPayload, but TS requires an exhaustive switch.
363
367
  return { type: 'allDexsAssetCtxs' }
368
+ case 'marketContext':
369
+ return {
370
+ type: 'activeAssetCtx',
371
+ coin: sub.marketId,
372
+ }
364
373
  case 'orderbook': {
365
374
  const aggregation = this.orderbookAggregation(
366
375
  sub.marketId,
@@ -435,6 +444,12 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
435
444
  case 'fastAssetCtxs':
436
445
  this.handleFastAssetCtxs(msg.data as string)
437
446
  break
447
+ case 'activeAssetCtx':
448
+ this.handleActiveAssetCtx(msg.data as HlWsActiveAssetCtxData, raw)
449
+ break
450
+ case 'activeSpotAssetCtx':
451
+ this.handleActiveSpotAssetCtx(msg.data as HlWsActiveSpotAssetCtxData)
452
+ break
438
453
  case 'l2':
439
454
  this.handleL2(msg.data as HlWsL2Data)
440
455
  break
@@ -580,21 +595,15 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
580
595
  }
581
596
  }
582
597
  for (const [marketId, ctx] of Object.entries(this.spotCtxByMarketId)) {
583
- const midPrice = toMarketContextString(ctx.midPx ?? ctx.markPx)
584
- const markPrice = toMarketContextString(ctx.markPx)
585
- if (midPrice === undefined || markPrice === undefined) {
586
- continue
587
- }
588
- const fast = this.fastCtxByMarketId[marketId]
589
- const emittedMarkPrice = fast?.markPx != null ? fast.markPx : markPrice
590
- data[marketId] = {
598
+ const context = mapSpotMarketContext(
591
599
  marketId,
592
- midPrice: fast?.midPx != null ? fast.midPx : midPrice,
593
- markPrice: emittedMarkPrice,
594
- prevDayPrice: toMarketContextString(ctx.prevDayPx),
595
- volume24h: toMarketContextString(ctx.dayNtlVlm),
596
- marketCap: toMarketCapString(emittedMarkPrice, ctx.circulatingSupply),
600
+ ctx,
601
+ this.fastCtxByMarketId[marketId]
602
+ )
603
+ if (context === undefined) {
604
+ continue
597
605
  }
606
+ data[marketId] = context
598
607
  }
599
608
  for (const [marketId, fast] of Object.entries(this.fastCtxByMarketId)) {
600
609
  if (data[marketId] !== undefined) {
@@ -611,6 +620,29 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
611
620
  this.emit('marketsContext', { channel: 'marketsContext', data })
612
621
  }
613
622
 
623
+ private handleActiveAssetCtx(data: HlWsActiveAssetCtxData, raw: string) {
624
+ const ctx = activePerpAssetCtx(data.coin, data.ctx)
625
+ if (ctx === undefined) {
626
+ wsLog.parseFailure(this.providerKey, raw)
627
+ return
628
+ }
629
+ this.emit(`marketContext:${data.coin}`, {
630
+ channel: 'marketContext',
631
+ data: mapMarketContext(data.coin, ctx),
632
+ })
633
+ }
634
+
635
+ private handleActiveSpotAssetCtx(data: HlWsActiveSpotAssetCtxData) {
636
+ const context = mapSpotMarketContext(data.coin, data.ctx)
637
+ if (context === undefined) {
638
+ return
639
+ }
640
+ this.emit(`marketContext:${data.coin}`, {
641
+ channel: 'marketContext',
642
+ data: context,
643
+ })
644
+ }
645
+
614
646
  /** Latest mid per `Market.id` across asset-context and fast feeds. */
615
647
  private mergedMids(): Map<string, number> {
616
648
  const map = new Map<string, number>()
@@ -932,6 +964,66 @@ function allDexsAssetCtxEntries(
932
964
  return data.assetCtxs ?? data.ctxs ?? []
933
965
  }
934
966
 
967
+ function activePerpAssetCtx(
968
+ marketId: string,
969
+ ctx: HlWsActiveAssetCtxData['ctx']
970
+ ): HlWsPerpAssetCtx | undefined {
971
+ const funding = toMarketContextString(ctx.funding)
972
+ const openInterest = toMarketContextString(ctx.openInterest)
973
+ const dayNtlVlm = toMarketContextString(ctx.dayNtlVlm)
974
+ const prevDayPx = toMarketContextString(ctx.prevDayPx)
975
+ const markPx = toMarketContextString(ctx.markPx)
976
+ const midPx =
977
+ ctx.midPx === undefined || ctx.midPx === null
978
+ ? null
979
+ : (toMarketContextString(ctx.midPx) ?? null)
980
+ const oraclePx = toMarketContextString(ctx.oraclePx)
981
+
982
+ if (
983
+ funding === undefined ||
984
+ openInterest === undefined ||
985
+ dayNtlVlm === undefined ||
986
+ prevDayPx === undefined ||
987
+ markPx === undefined ||
988
+ oraclePx === undefined
989
+ ) {
990
+ return undefined
991
+ }
992
+
993
+ return {
994
+ coin: marketId,
995
+ funding,
996
+ openInterest,
997
+ dayNtlVlm,
998
+ prevDayPx,
999
+ markPx,
1000
+ midPx,
1001
+ oraclePx,
1002
+ }
1003
+ }
1004
+
1005
+ function mapSpotMarketContext(
1006
+ marketId: string,
1007
+ ctx: HlWsSpotAssetCtx,
1008
+ fast?: HlWsFastAssetCtx
1009
+ ): MarketContext | undefined {
1010
+ const midPrice = toMarketContextString(ctx.midPx ?? ctx.markPx)
1011
+ const markPrice = toMarketContextString(ctx.markPx)
1012
+ if (midPrice === undefined || markPrice === undefined) {
1013
+ return undefined
1014
+ }
1015
+
1016
+ const emittedMarkPrice = fast?.markPx != null ? fast.markPx : markPrice
1017
+ return {
1018
+ marketId,
1019
+ midPrice: fast?.midPx != null ? fast.midPx : midPrice,
1020
+ markPrice: emittedMarkPrice,
1021
+ prevDayPrice: toMarketContextString(ctx.prevDayPx),
1022
+ volume24h: toMarketContextString(ctx.dayNtlVlm),
1023
+ marketCap: toMarketCapString(emittedMarkPrice, ctx.circulatingSupply),
1024
+ }
1025
+ }
1026
+
935
1027
  function compactRemovalPrice(
936
1028
  levels: OrderbookLevel[],
937
1029
  value: number | string | { p: string }
@@ -991,6 +1083,9 @@ function isValidHlFrame(channel: string, data: unknown): boolean {
991
1083
  switch (channel) {
992
1084
  case 'allDexsAssetCtxs':
993
1085
  return Array.isArray(data.assetCtxs) || Array.isArray(data.ctxs)
1086
+ case 'activeAssetCtx':
1087
+ case 'activeSpotAssetCtx':
1088
+ return typeof data.coin === 'string' && isObject(data.ctx)
994
1089
  case 'l2Book':
995
1090
  return (
996
1091
  typeof data.coin === 'string' &&