@lifi/perps-sdk-provider-hyperliquid 13.0.1 → 14.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 +115 -0
- package/dist/cjs/HyperliquidProvider.d.ts.map +1 -1
- package/dist/cjs/HyperliquidProvider.js +1 -2
- package/dist/cjs/HyperliquidProvider.js.map +1 -1
- package/dist/cjs/constants.d.ts +1 -0
- package/dist/cjs/constants.d.ts.map +1 -1
- package/dist/cjs/constants.js +2 -1
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/services/getAccount.d.ts.map +1 -1
- package/dist/cjs/services/getAccount.js +5 -2
- package/dist/cjs/services/getAccount.js.map +1 -1
- package/dist/cjs/services/getActivity.d.ts.map +1 -1
- package/dist/cjs/services/getActivity.js +40 -7
- package/dist/cjs/services/getActivity.js.map +1 -1
- package/dist/cjs/services/getFills.d.ts.map +1 -1
- package/dist/cjs/services/getFills.js +3 -0
- package/dist/cjs/services/getFills.js.map +1 -1
- package/dist/cjs/services/getOrder.d.ts.map +1 -1
- package/dist/cjs/services/getOrder.js +14 -3
- package/dist/cjs/services/getOrder.js.map +1 -1
- package/dist/cjs/services/getOrders.d.ts +2 -7
- package/dist/cjs/services/getOrders.d.ts.map +1 -1
- package/dist/cjs/services/getOrders.js +94 -31
- package/dist/cjs/services/getOrders.js.map +1 -1
- package/dist/cjs/services/getPositions.d.ts.map +1 -1
- package/dist/cjs/services/getPositions.js +1 -1
- package/dist/cjs/services/getPositions.js.map +1 -1
- package/dist/cjs/types/explorer.d.ts +10 -0
- package/dist/cjs/types/explorer.d.ts.map +1 -0
- package/dist/cjs/types/explorer.js +17 -0
- package/dist/cjs/types/explorer.js.map +1 -0
- package/dist/cjs/types/fill.d.ts +6 -0
- package/dist/cjs/types/fill.d.ts.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +1 -0
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/ledger.d.ts +24 -1
- package/dist/cjs/types/ledger.d.ts.map +1 -1
- package/dist/cjs/types/ledger.js +5 -1
- package/dist/cjs/types/ledger.js.map +1 -1
- package/dist/cjs/types/order.d.ts +24 -0
- package/dist/cjs/types/order.d.ts.map +1 -1
- package/dist/cjs/types/ws.d.ts +14 -0
- package/dist/cjs/types/ws.d.ts.map +1 -1
- package/dist/cjs/utils/assetId.d.ts +1 -0
- package/dist/cjs/utils/assetId.d.ts.map +1 -1
- package/dist/cjs/utils/assetId.js +6 -1
- package/dist/cjs/utils/assetId.js.map +1 -1
- package/dist/cjs/utils/explorer.d.ts +7 -0
- package/dist/cjs/utils/explorer.d.ts.map +1 -0
- package/dist/cjs/utils/explorer.js +49 -0
- package/dist/cjs/utils/explorer.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +4 -3
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +7 -6
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/infoClient.d.ts +1 -0
- package/dist/cjs/utils/infoClient.d.ts.map +1 -1
- package/dist/cjs/utils/infoClient.js +16 -10
- package/dist/cjs/utils/infoClient.js.map +1 -1
- package/dist/cjs/utils/mapActivity.d.ts +5 -3
- package/dist/cjs/utils/mapActivity.d.ts.map +1 -1
- package/dist/cjs/utils/mapActivity.js +116 -48
- package/dist/cjs/utils/mapActivity.js.map +1 -1
- package/dist/cjs/utils/mapFill.d.ts.map +1 -1
- package/dist/cjs/utils/mapFill.js +0 -1
- package/dist/cjs/utils/mapFill.js.map +1 -1
- package/dist/cjs/utils/mapOrder.d.ts +4 -9
- package/dist/cjs/utils/mapOrder.d.ts.map +1 -1
- package/dist/cjs/utils/mapOrder.js +149 -135
- package/dist/cjs/utils/mapOrder.js.map +1 -1
- package/dist/cjs/utils/spotBalance.d.ts.map +1 -1
- package/dist/cjs/utils/spotBalance.js +10 -6
- package/dist/cjs/utils/spotBalance.js.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +3 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/cjs/websocket/HyperliquidWsProvider.js +100 -29
- package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/esm/HyperliquidProvider.d.ts.map +1 -1
- package/dist/esm/HyperliquidProvider.js +1 -2
- package/dist/esm/HyperliquidProvider.js.map +1 -1
- package/dist/esm/constants.d.ts +8 -0
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/constants.js +8 -0
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/index.d.ts +1 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/services/getAccount.d.ts.map +1 -1
- package/dist/esm/services/getAccount.js +6 -3
- package/dist/esm/services/getAccount.js.map +1 -1
- package/dist/esm/services/getActivity.d.ts +2 -2
- package/dist/esm/services/getActivity.d.ts.map +1 -1
- package/dist/esm/services/getActivity.js +44 -9
- package/dist/esm/services/getActivity.js.map +1 -1
- package/dist/esm/services/getFills.d.ts.map +1 -1
- package/dist/esm/services/getFills.js +4 -1
- package/dist/esm/services/getFills.js.map +1 -1
- package/dist/esm/services/getOrder.d.ts.map +1 -1
- package/dist/esm/services/getOrder.js +15 -4
- package/dist/esm/services/getOrder.js.map +1 -1
- package/dist/esm/services/getOrders.d.ts +4 -24
- package/dist/esm/services/getOrders.d.ts.map +1 -1
- package/dist/esm/services/getOrders.js +115 -42
- package/dist/esm/services/getOrders.js.map +1 -1
- package/dist/esm/services/getPositions.d.ts.map +1 -1
- package/dist/esm/services/getPositions.js +2 -2
- package/dist/esm/services/getPositions.js.map +1 -1
- package/dist/esm/types/explorer.d.ts +27 -0
- package/dist/esm/types/explorer.d.ts.map +1 -0
- package/dist/esm/types/explorer.js +20 -0
- package/dist/esm/types/explorer.js.map +1 -0
- package/dist/esm/types/fill.d.ts +11 -0
- package/dist/esm/types/fill.d.ts.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.d.ts.map +1 -1
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/types/ledger.d.ts +28 -1
- package/dist/esm/types/ledger.d.ts.map +1 -1
- package/dist/esm/types/ledger.js +4 -0
- package/dist/esm/types/ledger.js.map +1 -1
- package/dist/esm/types/order.d.ts +26 -0
- package/dist/esm/types/order.d.ts.map +1 -1
- package/dist/esm/types/ws.d.ts +15 -0
- package/dist/esm/types/ws.d.ts.map +1 -1
- package/dist/esm/utils/assetId.d.ts +9 -0
- package/dist/esm/utils/assetId.d.ts.map +1 -1
- package/dist/esm/utils/assetId.js +13 -0
- package/dist/esm/utils/assetId.js.map +1 -1
- package/dist/esm/utils/explorer.d.ts +31 -0
- package/dist/esm/utils/explorer.d.ts.map +1 -0
- package/dist/esm/utils/explorer.js +68 -0
- package/dist/esm/utils/explorer.js.map +1 -0
- package/dist/esm/utils/index.d.ts +4 -3
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +4 -3
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/infoClient.d.ts +14 -3
- package/dist/esm/utils/infoClient.d.ts.map +1 -1
- package/dist/esm/utils/infoClient.js +29 -14
- package/dist/esm/utils/infoClient.js.map +1 -1
- package/dist/esm/utils/mapActivity.d.ts +16 -13
- package/dist/esm/utils/mapActivity.d.ts.map +1 -1
- package/dist/esm/utils/mapActivity.js +128 -72
- package/dist/esm/utils/mapActivity.js.map +1 -1
- package/dist/esm/utils/mapFill.d.ts.map +1 -1
- package/dist/esm/utils/mapFill.js +1 -2
- package/dist/esm/utils/mapFill.js.map +1 -1
- package/dist/esm/utils/mapOrder.d.ts +8 -73
- package/dist/esm/utils/mapOrder.d.ts.map +1 -1
- package/dist/esm/utils/mapOrder.js +148 -187
- package/dist/esm/utils/mapOrder.js.map +1 -1
- package/dist/esm/utils/spotBalance.d.ts +1 -1
- package/dist/esm/utils/spotBalance.d.ts.map +1 -1
- package/dist/esm/utils/spotBalance.js +12 -7
- package/dist/esm/utils/spotBalance.js.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts +5 -1
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/dist/esm/websocket/HyperliquidWsProvider.js +105 -34
- package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -1
- package/dist/types/HyperliquidProvider.d.ts.map +1 -1
- package/dist/types/constants.d.ts +8 -0
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/services/getAccount.d.ts.map +1 -1
- package/dist/types/services/getActivity.d.ts +2 -2
- package/dist/types/services/getActivity.d.ts.map +1 -1
- package/dist/types/services/getFills.d.ts.map +1 -1
- package/dist/types/services/getOrder.d.ts.map +1 -1
- package/dist/types/services/getOrders.d.ts +4 -24
- package/dist/types/services/getOrders.d.ts.map +1 -1
- package/dist/types/services/getPositions.d.ts.map +1 -1
- package/dist/types/types/explorer.d.ts +27 -0
- package/dist/types/types/explorer.d.ts.map +1 -0
- package/dist/types/types/fill.d.ts +11 -0
- package/dist/types/types/fill.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +1 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/ledger.d.ts +28 -1
- package/dist/types/types/ledger.d.ts.map +1 -1
- package/dist/types/types/order.d.ts +26 -0
- package/dist/types/types/order.d.ts.map +1 -1
- package/dist/types/types/ws.d.ts +15 -0
- package/dist/types/types/ws.d.ts.map +1 -1
- package/dist/types/utils/assetId.d.ts +9 -0
- package/dist/types/utils/assetId.d.ts.map +1 -1
- package/dist/types/utils/explorer.d.ts +31 -0
- package/dist/types/utils/explorer.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +4 -3
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/infoClient.d.ts +14 -3
- package/dist/types/utils/infoClient.d.ts.map +1 -1
- package/dist/types/utils/mapActivity.d.ts +16 -13
- package/dist/types/utils/mapActivity.d.ts.map +1 -1
- package/dist/types/utils/mapFill.d.ts.map +1 -1
- package/dist/types/utils/mapOrder.d.ts +8 -73
- package/dist/types/utils/mapOrder.d.ts.map +1 -1
- package/dist/types/utils/spotBalance.d.ts +1 -1
- package/dist/types/utils/spotBalance.d.ts.map +1 -1
- package/dist/types/websocket/HyperliquidWsProvider.d.ts +5 -1
- package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/HyperliquidProvider.ts +1 -13
- package/src/constants.ts +10 -0
- package/src/index.ts +1 -2
- package/src/services/getAccount.ts +8 -4
- package/src/services/getActivity.ts +81 -6
- package/src/services/getFills.ts +4 -1
- package/src/services/getOrder.ts +29 -5
- package/src/services/getOrders.ts +185 -70
- package/src/services/getPositions.ts +4 -1
- package/src/types/explorer.ts +39 -0
- package/src/types/fill.ts +12 -0
- package/src/types/index.ts +1 -0
- package/src/types/ledger.ts +37 -0
- package/src/types/order.ts +25 -0
- package/src/types/ws.ts +16 -0
- package/src/utils/assetId.ts +16 -0
- package/src/utils/explorer.ts +93 -0
- package/src/utils/index.ts +16 -7
- package/src/utils/infoClient.ts +46 -24
- package/src/utils/mapActivity.ts +163 -75
- package/src/utils/mapFill.ts +0 -2
- package/src/utils/mapOrder.ts +163 -212
- package/src/utils/spotBalance.ts +12 -7
- package/src/websocket/HyperliquidWsProvider.ts +127 -40
- package/dist/cjs/services/getRunningTwaps.d.ts +0 -10
- package/dist/cjs/services/getRunningTwaps.d.ts.map +0 -1
- package/dist/cjs/services/getRunningTwaps.js +0 -46
- package/dist/cjs/services/getRunningTwaps.js.map +0 -1
- package/dist/esm/services/getRunningTwaps.d.ts +0 -12
- package/dist/esm/services/getRunningTwaps.d.ts.map +0 -1
- package/dist/esm/services/getRunningTwaps.js +0 -40
- package/dist/esm/services/getRunningTwaps.js.map +0 -1
- package/dist/types/services/getRunningTwaps.d.ts +0 -12
- package/dist/types/services/getRunningTwaps.d.ts.map +0 -1
- package/src/services/getRunningTwaps.ts +0 -90
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*/
|
|
1
|
+
import { PerpsError, triggerConditionFor } from '@lifi/perps-sdk';
|
|
2
|
+
import { OrderSide, OrderStatus, OrderType, PerpsErrorCode, TimeInForce, } from '@lifi/perps-types';
|
|
3
|
+
import Big from 'big.js';
|
|
4
|
+
import { PROVIDER_KEY } from '../constants.js';
|
|
5
|
+
/** Translate documented venue execution types without reading trigger prose. */
|
|
7
6
|
export const mapOrderType = (orderType) => {
|
|
8
7
|
switch (orderType) {
|
|
9
8
|
case 'Take Profit Market':
|
|
@@ -16,222 +15,184 @@ export const mapOrderType = (orderType) => {
|
|
|
16
15
|
return OrderType.STOP_LIMIT;
|
|
17
16
|
case 'Market':
|
|
18
17
|
return OrderType.MARKET;
|
|
19
|
-
|
|
18
|
+
case 'Limit':
|
|
20
19
|
return OrderType.LIMIT;
|
|
20
|
+
default:
|
|
21
|
+
throw venueError(`Unknown Hyperliquid order type: ${orderType}`);
|
|
21
22
|
}
|
|
22
23
|
};
|
|
23
|
-
/**
|
|
24
|
-
export const isTriggerType = (type) => type === OrderType.TAKE_PROFIT_MARKET ||
|
|
25
|
-
type === OrderType.TAKE_PROFIT_LIMIT ||
|
|
26
|
-
type === OrderType.STOP_MARKET ||
|
|
27
|
-
type === OrderType.STOP_LIMIT;
|
|
28
|
-
/**
|
|
29
|
-
* Decide whether a raw Hyperliquid order belongs in the cross-provider
|
|
30
|
-
* `triggerOrders` bucket. Single source of truth for both the REST
|
|
31
|
-
* `getOrders` path (`HlFrontendOpenOrder` payload) and the `orderUpdates`
|
|
32
|
-
* WS handler (`HlOrderDetail.order`, a strict subset).
|
|
33
|
-
*
|
|
34
|
-
* Authoritative signals, in order:
|
|
35
|
-
* 1. `isTrigger` — REST-only boolean Hyperliquid sets on
|
|
36
|
-
* `frontendOpenOrders`. Definitive when present.
|
|
37
|
-
* 2. `isPositionTpsl` — REST-only flag for TP/SL legs attached to a
|
|
38
|
-
* position.
|
|
39
|
-
* 3. `triggerCondition !== 'N/A'` — present on both REST and WS payloads.
|
|
40
|
-
* Non-trigger orders carry the literal `'N/A'`.
|
|
41
|
-
* 4. `triggerPx` non-null and non-zero — present on both. The reliable
|
|
42
|
-
* trigger signal on the WS wire when `orderType` lies (HL pushes
|
|
43
|
-
* `'Limit'` for a freshly-placed TP/SL until REST refetch lands the
|
|
44
|
-
* corrected type).
|
|
45
|
-
* 5. `orderType` — final fall-back via `isTriggerType`.
|
|
46
|
-
* @public
|
|
47
|
-
*/
|
|
48
|
-
export const isTriggerOrder = (o) => {
|
|
49
|
-
if ('isTrigger' in o && o.isTrigger === true) {
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
if ('isPositionTpsl' in o && o.isPositionTpsl === true) {
|
|
53
|
-
return true;
|
|
54
|
-
}
|
|
55
|
-
if (o.triggerCondition && o.triggerCondition !== 'N/A') {
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
if (o.triggerPx != null &&
|
|
59
|
-
o.triggerPx !== '' &&
|
|
60
|
-
parseFloat(o.triggerPx) > 0) {
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
return isTriggerType(mapOrderType(o.orderType));
|
|
64
|
-
};
|
|
65
|
-
/**
|
|
66
|
-
* Map an open Hyperliquid order to the SDK's normalized open-order shape.
|
|
67
|
-
* Numeric IDs become strings and wire millisecond timestamps become ISO dates.
|
|
68
|
-
* @public
|
|
69
|
-
*/
|
|
70
|
-
export const mapOpenOrder = (o, market) => ({
|
|
71
|
-
orderId: String(o.oid),
|
|
72
|
-
market,
|
|
73
|
-
side: o.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
|
|
74
|
-
type: mapOrderType(o.orderType),
|
|
75
|
-
originalSize: o.origSz,
|
|
76
|
-
remainingSize: o.sz,
|
|
77
|
-
price: o.limitPx,
|
|
78
|
-
filledSize: o.origSz
|
|
79
|
-
? (parseFloat(o.origSz) - parseFloat(o.sz)).toString()
|
|
80
|
-
: '0',
|
|
81
|
-
reduceOnly: o.reduceOnly ?? false,
|
|
82
|
-
label: 'isTrigger' in o && o.isTrigger ? o.triggerCondition : undefined,
|
|
83
|
-
createdAt: new Date(o.timestamp).toISOString(),
|
|
84
|
-
});
|
|
85
|
-
/**
|
|
86
|
-
* Map a Hyperliquid trigger/TP-SL order to the SDK's trigger-order shape.
|
|
87
|
-
* @public
|
|
88
|
-
*/
|
|
89
|
-
export const mapTriggerOrder = (o, market) => {
|
|
90
|
-
const type = mapOrderType(o.orderType);
|
|
91
|
-
const isLimit = type === OrderType.TAKE_PROFIT_LIMIT || type === OrderType.STOP_LIMIT;
|
|
92
|
-
return {
|
|
93
|
-
orderId: String(o.oid),
|
|
94
|
-
market,
|
|
95
|
-
type,
|
|
96
|
-
size: o.sz,
|
|
97
|
-
triggerPrice: o.triggerPx ?? '0',
|
|
98
|
-
...(isLimit ? { limitPrice: o.limitPx } : {}),
|
|
99
|
-
label: o.triggerCondition,
|
|
100
|
-
createdAt: new Date(o.timestamp).toISOString(),
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
/**
|
|
104
|
-
* Map a raw Hyperliquid order status string to the SDK's OrderStatus enum.
|
|
105
|
-
*
|
|
106
|
-
* HL's terminal statuses are mostly compound strings ending in `Canceled`
|
|
107
|
-
* or `Rejected` (e.g. `siblingFilledCanceled`, `tickRejected`); classify
|
|
108
|
-
* those by suffix so a status HL adds later still lands in the correct
|
|
109
|
-
* terminal bucket instead of silently falling through to PENDING, which
|
|
110
|
-
* {@link isActiveOrderStatus} treats as active. `scheduledCancel` is the
|
|
111
|
-
* one documented cancel status without the `Canceled` suffix.
|
|
112
|
-
* @public
|
|
113
|
-
*/
|
|
24
|
+
/** Translate venue lifecycle statuses; unknown statuses are errors. */
|
|
114
25
|
export const mapOrderStatus = (status) => {
|
|
115
26
|
switch (status) {
|
|
116
27
|
case 'open':
|
|
117
|
-
case 'resting':
|
|
118
28
|
return OrderStatus.OPEN;
|
|
119
29
|
case 'filled':
|
|
120
30
|
return OrderStatus.FILLED;
|
|
121
31
|
case 'canceled':
|
|
122
|
-
case 'cancelled':
|
|
123
32
|
case 'scheduledCancel':
|
|
124
|
-
return OrderStatus.CANCELLED;
|
|
125
|
-
case 'rejected':
|
|
126
|
-
return OrderStatus.REJECTED;
|
|
127
|
-
case 'triggered':
|
|
128
|
-
return OrderStatus.TRIGGERED;
|
|
129
|
-
default:
|
|
130
|
-
if (status.endsWith('Canceled') || status.endsWith('Cancelled')) {
|
|
131
|
-
return OrderStatus.CANCELLED;
|
|
132
|
-
}
|
|
133
|
-
if (status.endsWith('Rejected')) {
|
|
134
|
-
return OrderStatus.REJECTED;
|
|
135
|
-
}
|
|
136
|
-
return OrderStatus.PENDING;
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
/**
|
|
140
|
-
* Map a raw Hyperliquid order status to a short English sentence
|
|
141
|
-
* describing *why* the order ended in a terminal non-FILLED state. Bare
|
|
142
|
-
* `canceled`/`cancelled`/`rejected` carry no actionable detail and
|
|
143
|
-
* return `undefined`; so do non-terminal and unknown values.
|
|
144
|
-
* @public
|
|
145
|
-
*/
|
|
146
|
-
export const mapStatusReason = (status) => {
|
|
147
|
-
switch (status) {
|
|
148
|
-
case 'iocCancelRejected':
|
|
149
|
-
return 'Order cancelled: not enough liquidity to fill immediately.';
|
|
150
|
-
case 'reduceOnlyCanceled':
|
|
151
|
-
return 'Order cancelled: would not reduce your position.';
|
|
152
33
|
case 'marginCanceled':
|
|
153
|
-
|
|
154
|
-
case '
|
|
155
|
-
return 'Order cancelled: account was liquidated.';
|
|
156
|
-
case 'siblingFilledCanceled':
|
|
157
|
-
return 'Order cancelled: sibling OCO order filled first.';
|
|
34
|
+
case 'vaultWithdrawalCanceled':
|
|
35
|
+
case 'openInterestCapCanceled':
|
|
158
36
|
case 'selfTradeCanceled':
|
|
159
|
-
|
|
160
|
-
case '
|
|
161
|
-
|
|
37
|
+
case 'reduceOnlyCanceled':
|
|
38
|
+
case 'siblingFilledCanceled':
|
|
39
|
+
case 'delistedCanceled':
|
|
40
|
+
case 'liquidatedCanceled':
|
|
41
|
+
return OrderStatus.CANCELLED;
|
|
42
|
+
case 'rejected':
|
|
162
43
|
case 'tickRejected':
|
|
163
|
-
return 'Order rejected: price did not match the tick size.';
|
|
164
44
|
case 'minTradeNtlRejected':
|
|
165
|
-
return 'Order rejected: notional value below the minimum trade size.';
|
|
166
|
-
case 'delistedCanceled':
|
|
167
|
-
return 'Order cancelled: market has been delisted.';
|
|
168
45
|
case 'perpMarginRejected':
|
|
169
|
-
return 'Order rejected: insufficient margin.';
|
|
170
46
|
case 'reduceOnlyRejected':
|
|
171
|
-
return 'Order rejected: would not reduce your position.';
|
|
172
47
|
case 'badAloPxRejected':
|
|
173
|
-
|
|
48
|
+
case 'iocCancelRejected':
|
|
174
49
|
case 'badTriggerPxRejected':
|
|
175
|
-
return 'Order rejected: invalid take-profit/stop-loss trigger price.';
|
|
176
50
|
case 'marketOrderNoLiquidityRejected':
|
|
177
|
-
return 'Order rejected: not enough liquidity for the market order.';
|
|
178
|
-
case 'oracleRejected':
|
|
179
|
-
return 'Order rejected: price too far from the oracle price.';
|
|
180
|
-
case 'vaultWithdrawalCanceled':
|
|
181
|
-
return 'Order cancelled: a vault withdrawal occurred.';
|
|
182
|
-
case 'openInterestCapCanceled':
|
|
183
|
-
return 'Order cancelled: too aggressive while open interest was at its cap.';
|
|
184
51
|
case 'positionIncreaseAtOpenInterestCapRejected':
|
|
185
52
|
case 'positionFlipAtOpenInterestCapRejected':
|
|
186
|
-
case 'openInterestIncreaseRejected':
|
|
187
|
-
return 'Order rejected: open interest is at its cap.';
|
|
188
53
|
case 'tooAggressiveAtOpenInterestCapRejected':
|
|
189
|
-
|
|
54
|
+
case 'openInterestIncreaseRejected':
|
|
190
55
|
case 'insufficientSpotBalanceRejected':
|
|
191
|
-
|
|
56
|
+
case 'oracleRejected':
|
|
192
57
|
case 'perpMaxPositionRejected':
|
|
193
|
-
return
|
|
58
|
+
return OrderStatus.REJECTED;
|
|
59
|
+
case 'triggered':
|
|
60
|
+
return OrderStatus.TRIGGERED;
|
|
194
61
|
default:
|
|
195
|
-
|
|
62
|
+
throw venueError(`Unknown Hyperliquid order status: ${status}`);
|
|
196
63
|
}
|
|
197
64
|
};
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
65
|
+
function venueError(message) {
|
|
66
|
+
const error = new PerpsError(PerpsErrorCode.ThirdPartyError, message);
|
|
67
|
+
error.tool = PROVIDER_KEY;
|
|
68
|
+
return error;
|
|
69
|
+
}
|
|
70
|
+
/** Normalize regular, trigger, and TWAP rows through one lifecycle model. */
|
|
71
|
+
export const mapOrder = (raw, market, parentOrderId) => {
|
|
72
|
+
if ('state' in raw) {
|
|
73
|
+
if (raw.twapId === undefined) {
|
|
74
|
+
throw venueError('Hyperliquid returned a TWAP without a twapId.');
|
|
75
|
+
}
|
|
76
|
+
const { state } = raw;
|
|
77
|
+
const filled = new Big(state.executedSz);
|
|
78
|
+
let status;
|
|
79
|
+
switch (raw.status.status) {
|
|
80
|
+
case 'activated':
|
|
81
|
+
status = filled.gt(0) ? OrderStatus.PARTIALLY_FILLED : OrderStatus.OPEN;
|
|
82
|
+
break;
|
|
83
|
+
case 'waitingForTrigger':
|
|
84
|
+
status = OrderStatus.OPEN;
|
|
85
|
+
break;
|
|
86
|
+
case 'finished':
|
|
87
|
+
status = OrderStatus.FILLED;
|
|
88
|
+
break;
|
|
89
|
+
case 'terminated':
|
|
90
|
+
case 'stopped':
|
|
91
|
+
status = OrderStatus.CANCELLED;
|
|
92
|
+
break;
|
|
93
|
+
case 'error':
|
|
94
|
+
status = OrderStatus.REJECTED;
|
|
95
|
+
break;
|
|
96
|
+
default:
|
|
97
|
+
throw venueError(`Unknown Hyperliquid TWAP status: ${raw.status.status}`);
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
orderId: String(raw.twapId),
|
|
101
|
+
market,
|
|
102
|
+
type: OrderType.TWAP,
|
|
103
|
+
side: state.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
|
|
104
|
+
originalSize: state.sz,
|
|
105
|
+
remainingSize: new Big(state.sz).minus(filled).toFixed(),
|
|
106
|
+
filledSize: state.executedSz,
|
|
107
|
+
...(filled.eq(0)
|
|
108
|
+
? {}
|
|
109
|
+
: { averagePrice: new Big(state.executedNtl).div(filled).toFixed() }),
|
|
110
|
+
reduceOnly: state.reduceOnly,
|
|
111
|
+
status,
|
|
112
|
+
...(status === OrderStatus.CANCELLED || status === OrderStatus.REJECTED
|
|
113
|
+
? { statusReason: raw.status.description ?? raw.status.status }
|
|
114
|
+
: {}),
|
|
115
|
+
createdAt: new Date(state.timestamp).toISOString(),
|
|
116
|
+
updatedAt: new Date(raw.time * 1000).toISOString(),
|
|
117
|
+
startedAt: new Date(state.timestamp).toISOString(),
|
|
118
|
+
durationSeconds: state.minutes * 60,
|
|
119
|
+
};
|
|
208
120
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
121
|
+
const o = 'order' in raw ? raw.order : raw;
|
|
122
|
+
const venueStatus = 'order' in raw ? raw.status : 'open';
|
|
123
|
+
const filled = new Big(o.origSz).minus(o.sz);
|
|
124
|
+
let status = mapOrderStatus(venueStatus);
|
|
125
|
+
if (parentOrderId !== undefined && !('order' in raw)) {
|
|
126
|
+
status = OrderStatus.PENDING;
|
|
127
|
+
}
|
|
128
|
+
else if (status === OrderStatus.OPEN && filled.gt(0)) {
|
|
129
|
+
status = OrderStatus.PARTIALLY_FILLED;
|
|
130
|
+
}
|
|
131
|
+
const base = {
|
|
219
132
|
orderId: String(o.oid),
|
|
220
133
|
market,
|
|
134
|
+
...(typeof o.cloid === 'string' ? { clientOrderId: o.cloid } : {}),
|
|
221
135
|
side: o.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
|
|
222
|
-
|
|
223
|
-
|
|
136
|
+
status,
|
|
137
|
+
...(status === OrderStatus.CANCELLED || status === OrderStatus.REJECTED
|
|
138
|
+
? { statusReason: venueStatus }
|
|
139
|
+
: {}),
|
|
224
140
|
originalSize: o.origSz,
|
|
225
141
|
remainingSize: o.sz,
|
|
226
|
-
filledSize: filled.
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
isTrigger: o.triggerCondition !== undefined && o.triggerCondition !== 'N/A',
|
|
230
|
-
triggerPrice: o.triggerPx ?? undefined,
|
|
231
|
-
status: mapOrderStatus(detail.status),
|
|
232
|
-
statusReason: mapStatusReason(detail.status),
|
|
142
|
+
filledSize: filled.toFixed(),
|
|
143
|
+
reduceOnly: o.reduceOnly,
|
|
144
|
+
...(parentOrderId === undefined ? {} : { parentOrderId }),
|
|
233
145
|
createdAt: new Date(o.timestamp).toISOString(),
|
|
234
|
-
updatedAt: new Date(
|
|
146
|
+
updatedAt: new Date('order' in raw ? raw.statusTimestamp : o.timestamp).toISOString(),
|
|
235
147
|
};
|
|
148
|
+
let type = mapOrderType(o.orderType);
|
|
149
|
+
if (o.isTrigger && (type === OrderType.MARKET || type === OrderType.LIMIT)) {
|
|
150
|
+
if (o.tpsl === undefined) {
|
|
151
|
+
throw venueError('Hyperliquid trigger order has no tpsl discriminator.');
|
|
152
|
+
}
|
|
153
|
+
type =
|
|
154
|
+
o.tpsl === 'tp'
|
|
155
|
+
? type === OrderType.MARKET
|
|
156
|
+
? OrderType.TAKE_PROFIT_MARKET
|
|
157
|
+
: OrderType.TAKE_PROFIT_LIMIT
|
|
158
|
+
: type === OrderType.MARKET
|
|
159
|
+
? OrderType.STOP_MARKET
|
|
160
|
+
: OrderType.STOP_LIMIT;
|
|
161
|
+
}
|
|
162
|
+
if (type !== OrderType.MARKET && type !== OrderType.LIMIT) {
|
|
163
|
+
const triggerType = type;
|
|
164
|
+
if (o.triggerPx === null) {
|
|
165
|
+
throw venueError('Hyperliquid trigger order has no trigger price.');
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
...base,
|
|
169
|
+
type: triggerType,
|
|
170
|
+
triggerPrice: o.triggerPx,
|
|
171
|
+
triggerCondition: triggerConditionFor(triggerType, base.side),
|
|
172
|
+
...(type === OrderType.STOP_LIMIT || type === OrderType.TAKE_PROFIT_LIMIT
|
|
173
|
+
? { limitPrice: o.limitPx }
|
|
174
|
+
: {}),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
let timeInForce;
|
|
178
|
+
switch (o.tif) {
|
|
179
|
+
case 'Ioc':
|
|
180
|
+
case 'FrontendMarket':
|
|
181
|
+
case 'LiquidationMarket':
|
|
182
|
+
timeInForce = TimeInForce.IOC;
|
|
183
|
+
break;
|
|
184
|
+
case 'Alo':
|
|
185
|
+
timeInForce = TimeInForce.POST_ONLY;
|
|
186
|
+
break;
|
|
187
|
+
case 'Gtc':
|
|
188
|
+
case null:
|
|
189
|
+
case undefined:
|
|
190
|
+
timeInForce =
|
|
191
|
+
type === OrderType.MARKET ? TimeInForce.IOC : TimeInForce.GTC;
|
|
192
|
+
break;
|
|
193
|
+
default:
|
|
194
|
+
throw venueError(`Unknown Hyperliquid time in force: ${o.tif}`);
|
|
195
|
+
}
|
|
196
|
+
return { ...base, type, price: o.limitPx, timeInForce };
|
|
236
197
|
};
|
|
237
198
|
//# sourceMappingURL=mapOrder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapOrder.js","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapOrder.js","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAOjE,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,cAAc,EACd,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAU9C,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,SAAiB,EACmB,EAAE;IACtC,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,oBAAoB;YACvB,OAAO,SAAS,CAAC,kBAAkB,CAAA;QACrC,KAAK,mBAAmB;YACtB,OAAO,SAAS,CAAC,iBAAiB,CAAA;QACpC,KAAK,aAAa;YAChB,OAAO,SAAS,CAAC,WAAW,CAAA;QAC9B,KAAK,YAAY;YACf,OAAO,SAAS,CAAC,UAAU,CAAA;QAC7B,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,MAAM,CAAA;QACzB,KAAK,OAAO;YACV,OAAO,SAAS,CAAC,KAAK,CAAA;QACxB;YACE,MAAM,UAAU,CAAC,mCAAmC,SAAS,EAAE,CAAC,CAAA;IACpE,CAAC;AACH,CAAC,CAAA;AAED,uEAAuE;AACvE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAe,EAAE;IAC5D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,IAAI,CAAA;QACzB,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC,MAAM,CAAA;QAC3B,KAAK,UAAU,CAAC;QAChB,KAAK,iBAAiB,CAAC;QACvB,KAAK,gBAAgB,CAAC;QACtB,KAAK,yBAAyB,CAAC;QAC/B,KAAK,yBAAyB,CAAC;QAC/B,KAAK,mBAAmB,CAAC;QACzB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,kBAAkB,CAAC;QACxB,KAAK,oBAAoB;YACvB,OAAO,WAAW,CAAC,SAAS,CAAA;QAC9B,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc,CAAC;QACpB,KAAK,qBAAqB,CAAC;QAC3B,KAAK,oBAAoB,CAAC;QAC1B,KAAK,oBAAoB,CAAC;QAC1B,KAAK,kBAAkB,CAAC;QACxB,KAAK,mBAAmB,CAAC;QACzB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,gCAAgC,CAAC;QACtC,KAAK,2CAA2C,CAAC;QACjD,KAAK,uCAAuC,CAAC;QAC7C,KAAK,wCAAwC,CAAC;QAC9C,KAAK,8BAA8B,CAAC;QACpC,KAAK,iCAAiC,CAAC;QACvC,KAAK,gBAAgB,CAAC;QACtB,KAAK,yBAAyB;YAC5B,OAAO,WAAW,CAAC,QAAQ,CAAA;QAC7B,KAAK,WAAW;YACd,OAAO,WAAW,CAAC,SAAS,CAAA;QAC9B;YACE,MAAM,UAAU,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAA;IACnE,CAAC;AACH,CAAC,CAAA;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;IACrE,KAAK,CAAC,IAAI,GAAG,YAAY,CAAA;IACzB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,GAAqD,EACrD,MAAqB,EACrB,aAAsB,EACf,EAAE;IACT,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;QACnB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,UAAU,CAAC,+CAA+C,CAAC,CAAA;QACnE,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;QACrB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACxC,IAAI,MAAmB,CAAA;QACvB,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC1B,KAAK,WAAW;gBACd,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA;gBACvE,MAAK;YACP,KAAK,mBAAmB;gBACtB,MAAM,GAAG,WAAW,CAAC,IAAI,CAAA;gBACzB,MAAK;YACP,KAAK,UAAU;gBACb,MAAM,GAAG,WAAW,CAAC,MAAM,CAAA;gBAC3B,MAAK;YACP,KAAK,YAAY,CAAC;YAClB,KAAK,SAAS;gBACZ,MAAM,GAAG,WAAW,CAAC,SAAS,CAAA;gBAC9B,MAAK;YACP,KAAK,OAAO;gBACV,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAA;gBAC7B,MAAK;YACP;gBACE,MAAM,UAAU,CACd,oCAAoC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CACxD,CAAA;QACL,CAAC;QACD,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC3B,MAAM;YACN,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI;YACzD,YAAY,EAAE,KAAK,CAAC,EAAE;YACtB,aAAa,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;YACxD,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACd,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACvE,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,MAAM;YACN,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,SAAS,IAAI,MAAM,KAAK,WAAW,CAAC,QAAQ;gBACrE,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;gBAC/D,CAAC,CAAC,EAAE,CAAC;YACP,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YAClD,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;YAClD,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YAClD,eAAe,EAAE,KAAK,CAAC,OAAO,GAAG,EAAE;SACpC,CAAA;IACH,CAAC;IACD,MAAM,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA;IAC1C,MAAM,WAAW,GAAG,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA;IACxD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC5C,IAAI,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;IACxC,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,GAAG,WAAW,CAAC,OAAO,CAAA;IAC9B,CAAC;SAAM,IAAI,MAAM,KAAK,WAAW,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAA;IACvC,CAAC;IACD,MAAM,IAAI,GAAc;QACtB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QACtB,MAAM;QACN,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI;QACrD,MAAM;QACN,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,SAAS,IAAI,MAAM,KAAK,WAAW,CAAC,QAAQ;YACrE,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE;YAC/B,CAAC,CAAC,EAAE,CAAC;QACP,YAAY,EAAE,CAAC,CAAC,MAAM;QACtB,aAAa,EAAE,CAAC,CAAC,EAAE;QACnB,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE;QAC5B,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC;QACzD,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;QAC9C,SAAS,EAAE,IAAI,IAAI,CACjB,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CACnD,CAAC,WAAW,EAAE;KAChB,CAAA;IACD,IAAI,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACpC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,IAAI,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,UAAU,CAAC,sDAAsD,CAAC,CAAA;QAC1E,CAAC;QACD,IAAI;YACF,CAAC,CAAC,IAAI,KAAK,IAAI;gBACb,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM;oBACzB,CAAC,CAAC,SAAS,CAAC,kBAAkB;oBAC9B,CAAC,CAAC,SAAS,CAAC,iBAAiB;gBAC/B,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM;oBACzB,CAAC,CAAC,SAAS,CAAC,WAAW;oBACvB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAA;IAC9B,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,CAAC,MAAM,IAAI,IAAI,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAyB,IAAI,CAAA;QAC9C,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,UAAU,CAAC,iDAAiD,CAAC,CAAA;QACrE,CAAC;QACD,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,WAAW;YACjB,YAAY,EAAE,CAAC,CAAC,SAAS;YACzB,gBAAgB,EAAE,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;YAC7D,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,UAAU,IAAI,IAAI,KAAK,SAAS,CAAC,iBAAiB;gBACvE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;gBAC3B,CAAC,CAAC,EAAE,CAAC;SACR,CAAA;IACH,CAAC;IACD,IAAI,WAAwB,CAAA;IAC5B,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QACd,KAAK,KAAK,CAAC;QACX,KAAK,gBAAgB,CAAC;QACtB,KAAK,mBAAmB;YACtB,WAAW,GAAG,WAAW,CAAC,GAAG,CAAA;YAC7B,MAAK;QACP,KAAK,KAAK;YACR,WAAW,GAAG,WAAW,CAAC,SAAS,CAAA;YACnC,MAAK;QACP,KAAK,KAAK,CAAC;QACX,KAAK,IAAI,CAAC;QACV,KAAK,SAAS;YACZ,WAAW;gBACT,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAA;YAC/D,MAAK;QACP;YACE,MAAM,UAAU,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IACnE,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAA;AACzD,CAAC,CAAA"}
|
|
@@ -14,6 +14,6 @@ export declare const spotPriceById: (markets: readonly Market[], priceByMarketId
|
|
|
14
14
|
* @public
|
|
15
15
|
*/
|
|
16
16
|
export declare const spotAssetFromToken: (b: HlSpotBalance) => Asset;
|
|
17
|
-
/** Assemble a typed spot {@link Balance}; `total` is native token units and its USD value
|
|
17
|
+
/** Assemble a typed spot {@link Balance}; `total` is native token units and its unit price and USD value use `priceById`. @public */
|
|
18
18
|
export declare const spotBalance: (asset: Asset, total: string, priceById: Map<string, number>) => Balance;
|
|
19
19
|
//# sourceMappingURL=spotBalance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spotBalance.d.ts","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/D,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,MAAM,CAAC,KAC3C,GAAG,CAAC,MAAM,EAAE,MAAM,CAapB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,aAAa,KAAG,KAIpD,CAAA;AAEF,
|
|
1
|
+
{"version":3,"file":"spotBalance.d.ts","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/D,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,MAAM,CAAC,KAC3C,GAAG,CAAC,MAAM,EAAE,MAAM,CAapB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,aAAa,KAAG,KAIpD,CAAA;AAEF,qIAAqI;AACrI,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,OAAO,MAAM,EACb,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC7B,OAUF,CAAA"}
|
|
@@ -33,11 +33,16 @@ export const spotAssetFromToken = (b) => ({
|
|
|
33
33
|
id: String(b.token),
|
|
34
34
|
logoURI: spotLogoURI(b.coin),
|
|
35
35
|
});
|
|
36
|
-
/** Assemble a typed spot {@link Balance}; `total` is native token units and its USD value
|
|
37
|
-
export const spotBalance = (asset, total, priceById) =>
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
36
|
+
/** Assemble a typed spot {@link Balance}; `total` is native token units and its unit price and USD value use `priceById`. @public */
|
|
37
|
+
export const spotBalance = (asset, total, priceById) => {
|
|
38
|
+
const price = priceById.get(asset.id) ?? 0;
|
|
39
|
+
return {
|
|
40
|
+
categoryId: SPOT_MARKET_ID,
|
|
41
|
+
asset,
|
|
42
|
+
units: total,
|
|
43
|
+
valueUsd: (stringToFloat(total) * price).toString(),
|
|
44
|
+
// A zero entry means the map holds no mark for the asset, not a free asset.
|
|
45
|
+
...(price > 0 ? { price: price.toString() } : {}),
|
|
46
|
+
};
|
|
47
|
+
};
|
|
43
48
|
//# sourceMappingURL=spotBalance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spotBalance.js","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAA0B,EAC1B,eAA4C,EACvB,EAAE;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAA;IACrC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;YACpC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAgB,EAAS,EAAE,CAAC,CAAC;IAC9D,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;CAC7B,CAAC,CAAA;AAEF,
|
|
1
|
+
{"version":3,"file":"spotBalance.js","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAA0B,EAC1B,eAA4C,EACvB,EAAE;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAA;IACrC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;YACpC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAgB,EAAS,EAAE,CAAC,CAAC;IAC9D,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;CAC7B,CAAC,CAAA;AAEF,qIAAqI;AACrI,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAY,EACZ,KAAa,EACb,SAA8B,EACrB,EAAE;IACX,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IAC1C,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,KAAK;QACL,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,EAAE;QACnD,4EAA4E;QAC5E,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -26,6 +26,8 @@ export declare const hyperliquidWsProvider: () => WsProviderFactory;
|
|
|
26
26
|
*/
|
|
27
27
|
export declare class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
28
28
|
private orderUpdatesKey;
|
|
29
|
+
private orderUpdatesEpoch;
|
|
30
|
+
private readonly orderApiUrl;
|
|
29
31
|
private readonly clearinghouseRefs;
|
|
30
32
|
private readonly client;
|
|
31
33
|
private readonly registry;
|
|
@@ -45,6 +47,7 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
|
45
47
|
private readonly pacDecodeChain;
|
|
46
48
|
private readonly sacDecodeChain;
|
|
47
49
|
private readonly orderbookDecodeChain;
|
|
50
|
+
private readonly orderUpdateChain;
|
|
48
51
|
constructor(wsUrl: string, providerKey: string, client?: PerpsSDKClient);
|
|
49
52
|
subscribe(sub: Subscription, listener: SubscriptionListener, onStatus?: WsStatusListener): Promise<() => void>;
|
|
50
53
|
subscribeQuote(params: ProviderGetQuoteParams, onQuote: QuoteListener): Promise<() => void>;
|
|
@@ -97,7 +100,8 @@ export declare class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
|
97
100
|
* Context for one market from the cached feeds: spot asset context when it
|
|
98
101
|
* maps, else perp asset context with mid + mark overlaid from
|
|
99
102
|
* `fastAssetCtxs`, else the fast feed alone — each price standing in for the
|
|
100
|
-
* other where it carries only one of mid/mark.
|
|
103
|
+
* other where it carries only one of mid/mark. An attached registry gates the
|
|
104
|
+
* market id: an id it does not list, or lists as delisted, yields no context.
|
|
101
105
|
*/
|
|
102
106
|
private computeMarketContext;
|
|
103
107
|
private handleActiveAssetCtx;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"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"}
|