@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.
- package/dist/cjs/HyperliquidProvider.d.ts.map +1 -1
- package/dist/cjs/HyperliquidProvider.js +2 -0
- package/dist/cjs/HyperliquidProvider.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/services/getAccount.d.ts.map +1 -1
- package/dist/cjs/services/getAccount.js +2 -1
- package/dist/cjs/services/getAccount.js.map +1 -1
- package/dist/cjs/services/getAccountExists.d.ts +8 -0
- package/dist/cjs/services/getAccountExists.d.ts.map +1 -0
- package/dist/cjs/services/getAccountExists.js +15 -0
- package/dist/cjs/services/getAccountExists.js.map +1 -0
- package/dist/cjs/types/account.d.ts +3 -0
- package/dist/cjs/types/account.d.ts.map +1 -1
- package/dist/cjs/types/account.js.map +1 -1
- package/dist/cjs/types/ws.d.ts +8 -0
- package/dist/cjs/types/ws.d.ts.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +2 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.js +85 -13
- package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/esm/HyperliquidProvider.d.ts.map +1 -1
- package/dist/esm/HyperliquidProvider.js +2 -0
- package/dist/esm/HyperliquidProvider.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/services/getAccount.d.ts.map +1 -1
- package/dist/esm/services/getAccount.js +3 -2
- package/dist/esm/services/getAccount.js.map +1 -1
- package/dist/esm/services/getAccountExists.d.ts +22 -0
- package/dist/esm/services/getAccountExists.d.ts.map +1 -0
- package/dist/esm/services/getAccountExists.js +20 -0
- package/dist/esm/services/getAccountExists.js.map +1 -0
- package/dist/esm/types/account.d.ts +9 -0
- package/dist/esm/types/account.d.ts.map +1 -1
- package/dist/esm/types/account.js.map +1 -1
- package/dist/esm/types/ws.d.ts +10 -0
- package/dist/esm/types/ws.d.ts.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts +2 -0
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.js +85 -13
- package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/types/HyperliquidProvider.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/services/getAccount.d.ts.map +1 -1
- package/dist/types/services/getAccountExists.d.ts +22 -0
- package/dist/types/services/getAccountExists.d.ts.map +1 -0
- package/dist/types/types/account.d.ts +9 -0
- package/dist/types/types/account.d.ts.map +1 -1
- package/dist/types/types/ws.d.ts +10 -0
- package/dist/types/types/ws.d.ts.map +1 -1
- package/dist/types/websocket/HyperliquidWsProvider.d.ts +2 -0
- package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/HyperliquidProvider.ts +8 -0
- package/src/index.ts +2 -0
- package/src/services/getAccount.ts +3 -2
- package/src/services/getAccountExists.ts +40 -0
- package/src/types/account.ts +10 -0
- package/src/types/ws.ts +12 -0
- package/src/websocket/HyperliquidWsProvider.ts +108 -13
package/dist/types/types/ws.d.ts
CHANGED
|
@@ -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;
|
|
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
|
+
"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.
|
|
51
|
+
"@lifi/perps-types": "^1.5.1"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"@lifi/perps-sdk": "^1.
|
|
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(
|
|
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
|
+
}
|
package/src/types/account.ts
CHANGED
|
@@ -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
|
|
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
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
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' &&
|