@lifi/perps-sdk-provider-hyperliquid 20.1.0 → 22.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.
- package/README.md +15 -0
- package/dist/cjs/HyperliquidProvider.d.ts.map +1 -1
- package/dist/cjs/HyperliquidProvider.js +2 -2
- package/dist/cjs/HyperliquidProvider.js.map +1 -1
- package/dist/cjs/services/getAccount.d.ts.map +1 -1
- package/dist/cjs/services/getAccount.js +8 -8
- package/dist/cjs/services/getAccount.js.map +1 -1
- package/dist/cjs/services/getAccountExists.d.ts +3 -1
- package/dist/cjs/services/getAccountExists.d.ts.map +1 -1
- package/dist/cjs/services/getAccountExists.js +27 -6
- package/dist/cjs/services/getAccountExists.js.map +1 -1
- package/dist/cjs/services/getActivity.d.ts.map +1 -1
- package/dist/cjs/services/getActivity.js +3 -1
- package/dist/cjs/services/getActivity.js.map +1 -1
- package/dist/cjs/services/getAvailableToTrade.d.ts.map +1 -1
- package/dist/cjs/services/getAvailableToTrade.js +3 -0
- package/dist/cjs/services/getAvailableToTrade.js.map +1 -1
- package/dist/cjs/services/getFills.d.ts.map +1 -1
- package/dist/cjs/services/getFills.js +3 -1
- package/dist/cjs/services/getFills.js.map +1 -1
- package/dist/cjs/services/getMarketSettings.d.ts.map +1 -1
- package/dist/cjs/services/getMarketSettings.js +3 -0
- package/dist/cjs/services/getMarketSettings.js.map +1 -1
- package/dist/cjs/services/getOrder.d.ts.map +1 -1
- package/dist/cjs/services/getOrder.js +2 -0
- package/dist/cjs/services/getOrder.js.map +1 -1
- package/dist/cjs/services/getOrders.d.ts.map +1 -1
- package/dist/cjs/services/getOrders.js +3 -1
- package/dist/cjs/services/getOrders.js.map +1 -1
- package/dist/cjs/services/getPortfolioHistory.d.ts.map +1 -1
- package/dist/cjs/services/getPortfolioHistory.js +2 -0
- package/dist/cjs/services/getPortfolioHistory.js.map +1 -1
- package/dist/cjs/services/getPositions.d.ts.map +1 -1
- package/dist/cjs/services/getPositions.js +3 -1
- package/dist/cjs/services/getPositions.js.map +1 -1
- package/dist/cjs/services/getWithdrawableBalances.d.ts.map +1 -1
- package/dist/cjs/services/getWithdrawableBalances.js +3 -1
- package/dist/cjs/services/getWithdrawableBalances.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +1 -1
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +3 -3
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/liquidation.js +1 -1
- package/dist/cjs/utils/liquidation.js.map +1 -1
- package/dist/cjs/utils/orderFormatting.d.ts +3 -2
- package/dist/cjs/utils/orderFormatting.d.ts.map +1 -1
- package/dist/cjs/utils/orderFormatting.js +4 -4
- package/dist/cjs/utils/orderFormatting.js.map +1 -1
- package/dist/cjs/utils/spotBalance.d.ts.map +1 -1
- package/dist/cjs/utils/spotBalance.js +2 -2
- package/dist/cjs/utils/spotBalance.js.map +1 -1
- package/dist/cjs/utils/withdrawableBalances.d.ts +1 -1
- package/dist/cjs/utils/withdrawableBalances.d.ts.map +1 -1
- package/dist/cjs/utils/withdrawableBalances.js +7 -4
- package/dist/cjs/utils/withdrawableBalances.js.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 +42 -10
- package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/esm/HyperliquidProvider.d.ts.map +1 -1
- package/dist/esm/HyperliquidProvider.js +3 -3
- package/dist/esm/HyperliquidProvider.js.map +1 -1
- package/dist/esm/services/getAccount.d.ts.map +1 -1
- package/dist/esm/services/getAccount.js +9 -6
- package/dist/esm/services/getAccount.js.map +1 -1
- package/dist/esm/services/getAccountExists.d.ts +3 -1
- package/dist/esm/services/getAccountExists.d.ts.map +1 -1
- package/dist/esm/services/getAccountExists.js +29 -9
- package/dist/esm/services/getAccountExists.js.map +1 -1
- package/dist/esm/services/getActivity.d.ts.map +1 -1
- package/dist/esm/services/getActivity.js +3 -1
- package/dist/esm/services/getActivity.js.map +1 -1
- package/dist/esm/services/getAvailableToTrade.d.ts.map +1 -1
- package/dist/esm/services/getAvailableToTrade.js +3 -0
- package/dist/esm/services/getAvailableToTrade.js.map +1 -1
- package/dist/esm/services/getFills.d.ts.map +1 -1
- package/dist/esm/services/getFills.js +3 -1
- package/dist/esm/services/getFills.js.map +1 -1
- package/dist/esm/services/getMarketSettings.d.ts.map +1 -1
- package/dist/esm/services/getMarketSettings.js +3 -0
- package/dist/esm/services/getMarketSettings.js.map +1 -1
- package/dist/esm/services/getOrder.d.ts.map +1 -1
- package/dist/esm/services/getOrder.js +2 -0
- package/dist/esm/services/getOrder.js.map +1 -1
- package/dist/esm/services/getOrders.d.ts.map +1 -1
- package/dist/esm/services/getOrders.js +3 -1
- package/dist/esm/services/getOrders.js.map +1 -1
- package/dist/esm/services/getPortfolioHistory.d.ts.map +1 -1
- package/dist/esm/services/getPortfolioHistory.js +2 -0
- package/dist/esm/services/getPortfolioHistory.js.map +1 -1
- package/dist/esm/services/getPositions.d.ts.map +1 -1
- package/dist/esm/services/getPositions.js +3 -1
- package/dist/esm/services/getPositions.js.map +1 -1
- package/dist/esm/services/getWithdrawableBalances.d.ts.map +1 -1
- package/dist/esm/services/getWithdrawableBalances.js +3 -1
- package/dist/esm/services/getWithdrawableBalances.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -1
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -1
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/liquidation.js +2 -2
- package/dist/esm/utils/liquidation.js.map +1 -1
- package/dist/esm/utils/orderFormatting.d.ts +14 -12
- package/dist/esm/utils/orderFormatting.d.ts.map +1 -1
- package/dist/esm/utils/orderFormatting.js +14 -14
- package/dist/esm/utils/orderFormatting.js.map +1 -1
- package/dist/esm/utils/spotBalance.d.ts.map +1 -1
- package/dist/esm/utils/spotBalance.js +3 -3
- package/dist/esm/utils/spotBalance.js.map +1 -1
- package/dist/esm/utils/withdrawableBalances.d.ts +1 -1
- package/dist/esm/utils/withdrawableBalances.d.ts.map +1 -1
- package/dist/esm/utils/withdrawableBalances.js +7 -4
- package/dist/esm/utils/withdrawableBalances.js.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 +43 -13
- package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/types/HyperliquidProvider.d.ts.map +1 -1
- package/dist/types/services/getAccount.d.ts.map +1 -1
- package/dist/types/services/getAccountExists.d.ts +3 -1
- package/dist/types/services/getAccountExists.d.ts.map +1 -1
- package/dist/types/services/getActivity.d.ts.map +1 -1
- package/dist/types/services/getAvailableToTrade.d.ts.map +1 -1
- package/dist/types/services/getFills.d.ts.map +1 -1
- package/dist/types/services/getMarketSettings.d.ts.map +1 -1
- package/dist/types/services/getOrder.d.ts.map +1 -1
- package/dist/types/services/getOrders.d.ts.map +1 -1
- package/dist/types/services/getPortfolioHistory.d.ts.map +1 -1
- package/dist/types/services/getPositions.d.ts.map +1 -1
- package/dist/types/services/getWithdrawableBalances.d.ts.map +1 -1
- package/dist/types/utils/index.d.ts +1 -1
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/orderFormatting.d.ts +14 -12
- package/dist/types/utils/orderFormatting.d.ts.map +1 -1
- package/dist/types/utils/spotBalance.d.ts.map +1 -1
- package/dist/types/utils/withdrawableBalances.d.ts +1 -1
- package/dist/types/utils/withdrawableBalances.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 +6 -5
- package/src/services/getAccount.ts +21 -19
- package/src/services/getAccountExists.ts +55 -14
- package/src/services/getActivity.ts +3 -1
- package/src/services/getAvailableToTrade.ts +7 -0
- package/src/services/getFills.ts +3 -1
- package/src/services/getMarketSettings.ts +7 -0
- package/src/services/getOrder.ts +2 -0
- package/src/services/getOrders.ts +3 -1
- package/src/services/getPortfolioHistory.ts +2 -0
- package/src/services/getPositions.ts +3 -1
- package/src/services/getWithdrawableBalances.ts +3 -1
- package/src/utils/index.ts +2 -2
- package/src/utils/liquidation.ts +2 -2
- package/src/utils/orderFormatting.ts +20 -16
- package/src/utils/spotBalance.ts +5 -3
- package/src/utils/withdrawableBalances.ts +12 -7
- package/src/websocket/HyperliquidWsProvider.ts +55 -15
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
calculateTransferable,
|
|
2
3
|
DecodeChain,
|
|
3
4
|
getMarketRegistry,
|
|
4
5
|
isActiveMarket,
|
|
@@ -30,12 +31,13 @@ import type {
|
|
|
30
31
|
} from '@lifi/perps-types'
|
|
31
32
|
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
32
33
|
import Big from 'big.js'
|
|
33
|
-
import { isAddress } from 'viem'
|
|
34
|
+
import { type Address, isAddress } from 'viem'
|
|
34
35
|
import {
|
|
35
36
|
DEFAULT_HYPERLIQUID_API_URL,
|
|
36
37
|
HYPERLIQUID_FEE_TIER_FALLBACK,
|
|
37
38
|
SPOT_MARKET_ID,
|
|
38
39
|
} from '../constants.js'
|
|
40
|
+
import { requireAccountExists } from '../services/getAccountExists.js'
|
|
39
41
|
import type {
|
|
40
42
|
HlActiveAssetData,
|
|
41
43
|
HlAssetPosition,
|
|
@@ -137,6 +139,7 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
|
137
139
|
private readonly clearinghouseRefs = new Map<string, number>()
|
|
138
140
|
private readonly client: PerpsSDKClient | undefined
|
|
139
141
|
private readonly registry: MarketRegistry | undefined
|
|
142
|
+
private readonly accountChecksByUser = new Map<string, Promise<void>>()
|
|
140
143
|
// Spot-funded modes need both spot valuation and clearinghouse margin state.
|
|
141
144
|
private readonly abstractionByUser = new Map<
|
|
142
145
|
string,
|
|
@@ -229,6 +232,26 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
|
229
232
|
this.orderApiUrl = orderApiUrl.origin
|
|
230
233
|
}
|
|
231
234
|
|
|
235
|
+
private ensureAccountExists(address: Address): Promise<void> {
|
|
236
|
+
const user = normalizeHlAddress(address)
|
|
237
|
+
const existing = this.accountChecksByUser.get(user)
|
|
238
|
+
if (existing !== undefined) {
|
|
239
|
+
return existing
|
|
240
|
+
}
|
|
241
|
+
const check = requireAccountExists(
|
|
242
|
+
this.orderApiUrl,
|
|
243
|
+
address,
|
|
244
|
+
this.client === undefined ? undefined : hlInfoOptions(this.client)
|
|
245
|
+
)
|
|
246
|
+
this.accountChecksByUser.set(user, check)
|
|
247
|
+
void check.catch(() => {
|
|
248
|
+
if (this.accountChecksByUser.get(user) === check) {
|
|
249
|
+
this.accountChecksByUser.delete(user)
|
|
250
|
+
}
|
|
251
|
+
})
|
|
252
|
+
return check
|
|
253
|
+
}
|
|
254
|
+
|
|
232
255
|
override async subscribe(
|
|
233
256
|
sub: Subscription,
|
|
234
257
|
listener: SubscriptionListener,
|
|
@@ -278,23 +301,19 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
|
278
301
|
}
|
|
279
302
|
|
|
280
303
|
protected async openChannel(sub: Subscription): Promise<() => void> {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
if (sub.channel === 'orderUpdates') {
|
|
284
|
-
this.claimOrderUpdatesKey(this.toKey(sub))
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
await this.registry?.sync()
|
|
288
|
-
|
|
304
|
+
const registry = this.registry
|
|
305
|
+
let marketValidated = false
|
|
289
306
|
if (
|
|
290
|
-
|
|
307
|
+
registry !== undefined &&
|
|
291
308
|
(sub.channel === 'marketContext' ||
|
|
292
309
|
sub.channel === 'orderbook' ||
|
|
293
310
|
sub.channel === 'candle' ||
|
|
294
311
|
sub.channel === 'trades' ||
|
|
295
312
|
sub.channel === 'availableToTrade')
|
|
296
313
|
) {
|
|
297
|
-
|
|
314
|
+
await registry.sync()
|
|
315
|
+
marketValidated = true
|
|
316
|
+
const market = registry.requireActive(sub.marketId)
|
|
298
317
|
if (
|
|
299
318
|
sub.channel === 'availableToTrade' &&
|
|
300
319
|
market.categoryId === SPOT_MARKET_ID
|
|
@@ -308,6 +327,18 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
|
308
327
|
}
|
|
309
328
|
}
|
|
310
329
|
|
|
330
|
+
if ('address' in sub) {
|
|
331
|
+
await this.ensureAccountExists(sub.address)
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if (sub.channel === 'orderUpdates') {
|
|
335
|
+
this.claimOrderUpdatesKey(this.toKey(sub))
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
if (registry !== undefined && !marketValidated) {
|
|
339
|
+
await registry.sync()
|
|
340
|
+
}
|
|
341
|
+
|
|
311
342
|
// Markets context aggregates slower asset-context feeds with fast mid/mark
|
|
312
343
|
// ticks from `fastAssetCtxs`.
|
|
313
344
|
if (sub.channel === 'marketsContext') {
|
|
@@ -1507,10 +1538,19 @@ export class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
|
1507
1538
|
}
|
|
1508
1539
|
return
|
|
1509
1540
|
}
|
|
1510
|
-
const rows = balances.map((balance) =>
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1541
|
+
const rows = balances.map((balance) => {
|
|
1542
|
+
const total = toWireBig(balance.total, 'spotState.balances.total')
|
|
1543
|
+
return {
|
|
1544
|
+
...spotBalance(spotAssetFromToken(balance), balance.total, priceById),
|
|
1545
|
+
locked: balance.hold,
|
|
1546
|
+
transferable: calculateTransferable(
|
|
1547
|
+
total
|
|
1548
|
+
.minus(toWireBig(balance.hold, 'spotState.balances.hold'))
|
|
1549
|
+
.toFixed(),
|
|
1550
|
+
total.toFixed()
|
|
1551
|
+
),
|
|
1552
|
+
}
|
|
1553
|
+
})
|
|
1514
1554
|
this.emit(`spotState:${user}`, {
|
|
1515
1555
|
channel: 'spotBalances',
|
|
1516
1556
|
data: rows,
|