@lifi/perps-sdk-provider-hyperliquid 13.0.0 → 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 +16 -9
- 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 +14 -10
- 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 +22 -14
- 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,4 +1,4 @@
|
|
|
1
|
-
import { errorCodeFromStatus, fetchWithRetry, PerpsError, resolveRetryPolicy, } from '@lifi/perps-sdk';
|
|
1
|
+
import { errorCodeFromStatus, fetchWithRetry, isAbortError, PerpsError, resolveRetryPolicy, } from '@lifi/perps-sdk';
|
|
2
2
|
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
3
3
|
import { isAddress } from 'viem';
|
|
4
4
|
import { PROVIDER_KEY } from '../constants.js';
|
|
@@ -51,7 +51,7 @@ export const hlInfoOptions = (client, options) => ({
|
|
|
51
51
|
fetchImpl: client.config.fetch,
|
|
52
52
|
});
|
|
53
53
|
/**
|
|
54
|
-
* POST to
|
|
54
|
+
* POST a JSON body to a Hyperliquid REST surface and return the parsed body.
|
|
55
55
|
*
|
|
56
56
|
* Direct-to-venue: no proxy, no AJV validation, no cache. The caller's type
|
|
57
57
|
* parameter is trusted; consumers should treat the response shape as
|
|
@@ -61,14 +61,17 @@ export const hlInfoOptions = (client, options) => ({
|
|
|
61
61
|
* Non-2xx responses raise a {@link PerpsError} tagged with the Hyperliquid
|
|
62
62
|
* provider key, carrying the code the status resolves to: `RateLimitExceeded`
|
|
63
63
|
* for a 429, `Unauthorized` for a 401, `AgentUnauthorized` for a 403, and
|
|
64
|
-
* `ThirdPartyError` for every other status.
|
|
65
|
-
*
|
|
64
|
+
* `ThirdPartyError` for every other status. A transport failure and a 2xx body
|
|
65
|
+
* that is not JSON both raise `ServerError`, so every failure but a caller
|
|
66
|
+
* abort reaches the caller as a `PerpsError`. An abort rejects untouched.
|
|
67
|
+
*
|
|
68
|
+
* @param label - Names the surface in the error message, e.g. `info request`.
|
|
69
|
+
* @internal
|
|
66
70
|
*/
|
|
67
|
-
export async function
|
|
71
|
+
export async function hlPostJson(url, label, body, options) {
|
|
68
72
|
const policy = options?.policy ?? HYPERLIQUID_RETRY_DEFAULTS;
|
|
69
|
-
let response;
|
|
70
73
|
try {
|
|
71
|
-
response = await fetchWithRetry(
|
|
74
|
+
const response = await fetchWithRetry(url, {
|
|
72
75
|
method: 'POST',
|
|
73
76
|
headers: { 'Content-Type': 'application/json' },
|
|
74
77
|
body: JSON.stringify(normalizeInfoValue(body)),
|
|
@@ -77,17 +80,29 @@ export async function infoRequest(apiUrl, body, options) {
|
|
|
77
80
|
fetchImpl: options?.fetchImpl,
|
|
78
81
|
signal: options?.signal,
|
|
79
82
|
});
|
|
83
|
+
if (!response.ok) {
|
|
84
|
+
const err = new PerpsError(errorCodeFromStatus(response.status, PerpsErrorCode.ThirdPartyError, HYPERLIQUID_STATUS_ERROR_CODES), `Hyperliquid ${label} failed: ${response.status}`);
|
|
85
|
+
err.tool = PROVIDER_KEY;
|
|
86
|
+
throw err;
|
|
87
|
+
}
|
|
88
|
+
return (await response.json());
|
|
80
89
|
}
|
|
81
90
|
catch (error) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if (!response.ok) {
|
|
87
|
-
const err = new PerpsError(errorCodeFromStatus(response.status, PerpsErrorCode.ThirdPartyError, HYPERLIQUID_STATUS_ERROR_CODES), `Hyperliquid info request failed: ${response.status}`);
|
|
91
|
+
if (error instanceof PerpsError || isAbortError(error)) {
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
const err = new PerpsError(PerpsErrorCode.ServerError, error instanceof Error ? error.message : `Hyperliquid ${label} failed`);
|
|
88
95
|
err.tool = PROVIDER_KEY;
|
|
89
96
|
throw err;
|
|
90
97
|
}
|
|
91
|
-
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* POST to the Hyperliquid `/info` endpoint and return the parsed JSON body.
|
|
101
|
+
* See {@link hlPostJson} for the transport and error contract.
|
|
102
|
+
*
|
|
103
|
+
* @public
|
|
104
|
+
*/
|
|
105
|
+
export function infoRequest(apiUrl, body, options) {
|
|
106
|
+
return hlPostJson(`${apiUrl}/info`, 'info request', body, options);
|
|
92
107
|
}
|
|
93
108
|
//# sourceMappingURL=infoClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infoClient.js","sourceRoot":"","sources":["../../../src/utils/infoClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,UAAU,EAGV,kBAAkB,GAEnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAW,EAAE;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;IAC1E,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IACtC,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC;YAChD,GAAG;YACH,kBAAkB,CAAC,WAAW,CAAC;SAChC,CAAC,CACH,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,8BAA8B,GAAG;IACrC,GAAG,EAAE,cAAc,CAAC,YAAY;IAChC,GAAG,EAAE,cAAc,CAAC,iBAAiB;CAC7B,CAAA;AAEV,gBAAgB;AAChB,MAAM,CAAC,MAAM,0BAA0B,GAAwB;IAC7D,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,MAAM;IAClB,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QACD,IACE,QAAQ,CAAC,MAAM,KAAK,GAAG;YACvB,QAAQ,CAAC,MAAM,KAAK,GAAG;YACvB,QAAQ,CAAC,MAAM,KAAK,GAAG,EACvB,CAAC;YACD,OAAO,cAAc,CAAA;QACvB,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA;AAcD;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAsB,EACtB,OAA2B,EACP,EAAE,CAAC,CAAC;IACxB,MAAM,EAAE,OAAO,EAAE,MAAM;IACvB,MAAM,EAAE,kBAAkB,CACxB,0BAA0B,EAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,EACnB,YAAY,CACb;IACD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;CAC/B,CAAC,CAAA;AAEF
|
|
1
|
+
{"version":3,"file":"infoClient.js","sourceRoot":"","sources":["../../../src/utils/infoClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,UAAU,EAGV,kBAAkB,GAEnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAW,EAAE;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;IAC1E,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IACtC,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC;YAChD,GAAG;YACH,kBAAkB,CAAC,WAAW,CAAC;SAChC,CAAC,CACH,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,8BAA8B,GAAG;IACrC,GAAG,EAAE,cAAc,CAAC,YAAY;IAChC,GAAG,EAAE,cAAc,CAAC,iBAAiB;CAC7B,CAAA;AAEV,gBAAgB;AAChB,MAAM,CAAC,MAAM,0BAA0B,GAAwB;IAC7D,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,MAAM;IAClB,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QACD,IACE,QAAQ,CAAC,MAAM,KAAK,GAAG;YACvB,QAAQ,CAAC,MAAM,KAAK,GAAG;YACvB,QAAQ,CAAC,MAAM,KAAK,GAAG,EACvB,CAAC;YACD,OAAO,cAAc,CAAA;QACvB,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA;AAcD;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAsB,EACtB,OAA2B,EACP,EAAE,CAAC,CAAC;IACxB,MAAM,EAAE,OAAO,EAAE,MAAM;IACvB,MAAM,EAAE,kBAAkB,CACxB,0BAA0B,EAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,EACnB,YAAY,CACb;IACD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;CAC/B,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,KAAa,EACb,IAA6B,EAC7B,OAA4B;IAE5B,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,0BAA0B,CAAA;IAE5D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,GAAG,EACH;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;SAC/C,EACD;YACE,MAAM;YACN,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CACF,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,UAAU,CACxB,mBAAmB,CACjB,QAAQ,CAAC,MAAM,EACf,cAAc,CAAC,eAAe,EAC9B,8BAA8B,CAC/B,EACD,eAAe,KAAK,YAAY,QAAQ,CAAC,MAAM,EAAE,CAClD,CAAA;YACD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAA;YACvB,MAAM,GAAG,CAAA;QACX,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAA;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,UAAU,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,KAAK,CAAA;QACb,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,UAAU,CACxB,cAAc,CAAC,WAAW,EAC1B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,KAAK,SAAS,CACvE,CAAA;QACD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAA;QACvB,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,MAAc,EACd,IAA6B,EAC7B,OAA4B;IAE5B,OAAO,UAAU,CAAI,GAAG,MAAM,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AACvE,CAAC"}
|
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type {
|
|
1
|
+
import { type AssetRegistry } from '@lifi/perps-sdk';
|
|
2
|
+
import type { ActivityItem, FundingActivity, LiquidationActivity, MarketDisplay } from '@lifi/perps-types';
|
|
3
|
+
import type { HlFundingUpdate, HlLedgerUpdate, HlUserFill } from '../types/index.js';
|
|
3
4
|
/**
|
|
4
|
-
* Map
|
|
5
|
-
*
|
|
6
|
-
* Direction for `spotTransfer` and `sendAsset` is derived from
|
|
7
|
-
* `queriedAddress` matching the delta's `user` (OUT) or `destination` (IN).
|
|
8
|
-
* Returns null for unsupported delta types and for same-account moves, where
|
|
9
|
-
* `user === destination === queriedAddress`.
|
|
10
|
-
*
|
|
11
|
-
* @param resolveMarket - Market identity for a venue coin, or `undefined` when
|
|
12
|
-
* the backend market list does not hold it. A liquidated position the resolver
|
|
13
|
-
* cannot identify is dropped.
|
|
5
|
+
* Map supported ledger entries; exclude same-account moves and unsupported types.
|
|
6
|
+
* Missing assets throw; unresolved liquidation markets omit only those positions.
|
|
14
7
|
* @public
|
|
15
8
|
*/
|
|
16
|
-
export declare const mapLedgerEntry: (entry: HlLedgerUpdate, providerKey: string, queriedAddress: string, resolveMarket: (coin: string) => MarketDisplay | undefined) => ActivityItem | null;
|
|
9
|
+
export declare const mapLedgerEntry: (entry: HlLedgerUpdate, providerKey: string, queriedAddress: string, assetRegistry: AssetRegistry, resolveMarket: (coin: string) => MarketDisplay | undefined) => ActivityItem | null;
|
|
17
10
|
/**
|
|
18
11
|
* Map a Hyperliquid funding ledger update to a normalized funding activity, or
|
|
19
12
|
* `null` when `resolveMarket` cannot identify the row's coin. `amount`,
|
|
@@ -26,4 +19,14 @@ export declare const mapLedgerEntry: (entry: HlLedgerUpdate, providerKey: string
|
|
|
26
19
|
* @public
|
|
27
20
|
*/
|
|
28
21
|
export declare const mapFundingActivity: (entry: HlFundingUpdate, providerKey: string, resolveMarket: (coin: string) => MarketDisplay | undefined) => FundingActivity | null;
|
|
22
|
+
/**
|
|
23
|
+
* Build one liquidation activity per liquidation order from the fills of the
|
|
24
|
+
* liquidated account. Hyperliquid attaches `liquidation` to the fills of both
|
|
25
|
+
* parties, so only fills whose `liquidatedUser` is the queried address count.
|
|
26
|
+
* A fill whose hash a ledger liquidation row already carries is the same
|
|
27
|
+
* event and is skipped. The size sign follows the closed position: a sell
|
|
28
|
+
* fill closes a long. Groups whose market does not resolve are dropped.
|
|
29
|
+
* @public
|
|
30
|
+
*/
|
|
31
|
+
export declare const mapLiquidationFills: (fills: HlUserFill[], providerKey: string, queriedAddress: string, resolveMarket: (coin: string) => MarketDisplay | undefined, ledgerHashes: ReadonlySet<string>) => LiquidationActivity[];
|
|
29
32
|
//# sourceMappingURL=mapActivity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapActivity.d.ts","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"mapActivity.d.ts","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,iBAAiB,CAAA;AAChE,OAAO,KAAK,EACV,YAAY,EAIZ,eAAe,EACf,mBAAmB,EACnB,aAAa,EAGd,MAAM,mBAAmB,CAAA;AAG1B,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,UAAU,EACX,MAAM,mBAAmB,CAAA;AA8C1B;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,cAAc,EACrB,aAAa,MAAM,EACnB,gBAAgB,MAAM,EACtB,eAAe,aAAa,EAC5B,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,KACzD,YAAY,GAAG,IAuKjB,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,eAAe,EACtB,aAAa,MAAM,EACnB,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,KACzD,eAAe,GAAG,IAgBpB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,EAAE,EACnB,aAAa,MAAM,EACnB,gBAAgB,MAAM,EACtB,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,EAC1D,cAAc,WAAW,CAAC,MAAM,CAAC,KAChC,mBAAmB,EA4CrB,CAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { PerpsError } from '@lifi/perps-sdk';
|
|
2
|
+
import { ActivityType, PerpsErrorCode } from '@lifi/perps-types';
|
|
3
|
+
import Big from 'big.js';
|
|
4
|
+
import { isCollateralTransferDelta, isDepositDelta, isLiquidationDelta, isSendAssetDelta, isSpotTransferDelta, isVaultTransferDelta, isWithdrawDelta, } from '../types/index.js';
|
|
3
5
|
/**
|
|
4
6
|
* Hyperliquid settles every perp deposit and withdrawal in USDC, and charges
|
|
5
7
|
* the `spotTransfer` fee in USDC too — that delta carries no `feeToken`.
|
|
@@ -10,76 +12,81 @@ const HL_COLLATERAL_SYMBOL = 'USDC';
|
|
|
10
12
|
* so the symbol comes from the venue rather than from the delta.
|
|
11
13
|
*/
|
|
12
14
|
const HL_NATIVE_TOKEN_SYMBOL = 'HYPE';
|
|
15
|
+
// Hyperliquid reserves spot token index 0 for USDC.
|
|
16
|
+
const HL_COLLATERAL_ASSET_ID = '0';
|
|
13
17
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* `coinAsset` cannot be reused here.
|
|
18
|
+
* A ledger row moves a spot asset — a perp contract cannot be sent, received
|
|
19
|
+
* or withdrawn — so the delta's token symbol resolves inside the spot asset
|
|
20
|
+
* registry. The HIP-1 ticker auction keeps those symbols unique.
|
|
18
21
|
*/
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
+
const resolveLedgerAsset = (symbol, registry) => {
|
|
23
|
+
const asset = registry.assets.find((candidate) => candidate.displaySymbol === symbol);
|
|
24
|
+
if (asset === undefined) {
|
|
25
|
+
const error = new PerpsError(PerpsErrorCode.ValidationError, `[hyperliquid] stale or mis-keyed asset registry: unknown spot symbol '${symbol}'`);
|
|
26
|
+
error.tool = 'hyperliquid';
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
return asset;
|
|
22
30
|
};
|
|
23
31
|
/**
|
|
24
|
-
* Map
|
|
25
|
-
*
|
|
26
|
-
* Direction for `spotTransfer` and `sendAsset` is derived from
|
|
27
|
-
* `queriedAddress` matching the delta's `user` (OUT) or `destination` (IN).
|
|
28
|
-
* Returns null for unsupported delta types and for same-account moves, where
|
|
29
|
-
* `user === destination === queriedAddress`.
|
|
30
|
-
*
|
|
31
|
-
* @param resolveMarket - Market identity for a venue coin, or `undefined` when
|
|
32
|
-
* the backend market list does not hold it. A liquidated position the resolver
|
|
33
|
-
* cannot identify is dropped.
|
|
32
|
+
* Map supported ledger entries; exclude same-account moves and unsupported types.
|
|
33
|
+
* Missing assets throw; unresolved liquidation markets omit only those positions.
|
|
34
34
|
* @public
|
|
35
35
|
*/
|
|
36
|
-
export const mapLedgerEntry = (entry, providerKey, queriedAddress, resolveMarket) => {
|
|
36
|
+
export const mapLedgerEntry = (entry, providerKey, queriedAddress, assetRegistry, resolveMarket) => {
|
|
37
37
|
const { delta } = entry;
|
|
38
38
|
const base = {
|
|
39
39
|
id: entry.hash,
|
|
40
40
|
provider: providerKey,
|
|
41
41
|
timestamp: new Date(entry.time).toISOString(),
|
|
42
42
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if (isSpotTransferDelta(delta)) {
|
|
43
|
+
if (isSpotTransferDelta(delta) ||
|
|
44
|
+
isSendAssetDelta(delta) ||
|
|
45
|
+
isCollateralTransferDelta(delta)) {
|
|
47
46
|
const queried = queriedAddress.toLowerCase();
|
|
48
47
|
const sender = delta.user.toLowerCase();
|
|
49
48
|
const recipient = delta.destination.toLowerCase();
|
|
50
|
-
// A transfer reports a movement between two accounts. A row whose sender
|
|
51
|
-
// and recipient are the queried account moves nothing between accounts.
|
|
52
49
|
if (sender === recipient && sender === queried) {
|
|
53
50
|
return null;
|
|
54
51
|
}
|
|
55
52
|
const direction = queried === sender ? 'OUT' : 'IN';
|
|
56
|
-
const counterpartyAddress = direction === 'OUT' ? recipient : sender;
|
|
57
|
-
const meta = {
|
|
58
|
-
transferType: 'spotTransfer',
|
|
59
|
-
};
|
|
60
|
-
if (delta.usdcValue !== undefined) {
|
|
61
|
-
meta.usdcValue = delta.usdcValue;
|
|
62
|
-
}
|
|
63
|
-
if (delta.nonce !== undefined) {
|
|
64
|
-
meta.nonce = delta.nonce;
|
|
65
|
-
}
|
|
66
53
|
const fees = [];
|
|
67
54
|
if (delta.fee !== undefined) {
|
|
68
|
-
fees.push({ amount: delta.fee, asset: HL_COLLATERAL_SYMBOL });
|
|
69
|
-
}
|
|
70
|
-
if (delta.nativeTokenFee !== undefined) {
|
|
71
55
|
fees.push({
|
|
72
|
-
amount: delta.
|
|
73
|
-
asset:
|
|
56
|
+
amount: delta.fee,
|
|
57
|
+
asset: isSendAssetDelta(delta)
|
|
58
|
+
? delta.feeToken.split(':')[0]
|
|
59
|
+
: HL_COLLATERAL_SYMBOL,
|
|
74
60
|
});
|
|
75
61
|
}
|
|
62
|
+
if (!isCollateralTransferDelta(delta) &&
|
|
63
|
+
delta.nativeTokenFee !== undefined) {
|
|
64
|
+
fees.push({ amount: delta.nativeTokenFee, asset: HL_NATIVE_TOKEN_SYMBOL });
|
|
65
|
+
}
|
|
66
|
+
const meta = {
|
|
67
|
+
transferType: isSendAssetDelta(delta) ? 'sendAsset' : delta.type,
|
|
68
|
+
};
|
|
69
|
+
if (!isCollateralTransferDelta(delta)) {
|
|
70
|
+
if (delta.usdcValue !== undefined) {
|
|
71
|
+
meta.usdcValue = delta.usdcValue;
|
|
72
|
+
}
|
|
73
|
+
if (delta.nonce !== undefined) {
|
|
74
|
+
meta.nonce = delta.nonce;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (isSendAssetDelta(delta)) {
|
|
78
|
+
meta.sourceDex = delta.sourceDex;
|
|
79
|
+
meta.destinationDex = delta.destinationDex;
|
|
80
|
+
}
|
|
76
81
|
return {
|
|
77
82
|
...base,
|
|
78
83
|
type: ActivityType.TRANSFER,
|
|
79
84
|
direction,
|
|
80
|
-
counterpartyAddress,
|
|
81
|
-
asset:
|
|
82
|
-
|
|
85
|
+
counterpartyAddress: direction === 'OUT' ? recipient : sender,
|
|
86
|
+
asset: isCollateralTransferDelta(delta)
|
|
87
|
+
? assetRegistry.require(HL_COLLATERAL_ASSET_ID)
|
|
88
|
+
: resolveLedgerAsset(delta.token, assetRegistry),
|
|
89
|
+
amount: isCollateralTransferDelta(delta) ? delta.usdc : delta.amount,
|
|
83
90
|
...(fees.length === 0 ? {} : { fees }),
|
|
84
91
|
meta,
|
|
85
92
|
explorerLink: entry.hash
|
|
@@ -87,38 +94,35 @@ export const mapLedgerEntry = (entry, providerKey, queriedAddress, resolveMarket
|
|
|
87
94
|
: undefined,
|
|
88
95
|
};
|
|
89
96
|
}
|
|
90
|
-
|
|
91
|
-
// (modelled as TRANSFER) and same-user dex moves (returned as null —
|
|
92
|
-
// overloading TRANSFER for those would lie about direction). Pre-switch
|
|
93
|
-
// narrowing for the same reason as spotTransfer.
|
|
94
|
-
if (isSendAssetDelta(delta)) {
|
|
97
|
+
if (isVaultTransferDelta(delta)) {
|
|
95
98
|
const queried = queriedAddress.toLowerCase();
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
+
const vault = delta.vault.toLowerCase();
|
|
100
|
+
if (delta.type === 'vaultDeposit' && queried === vault) {
|
|
101
|
+
throw new PerpsError(PerpsErrorCode.ValidationError, 'Hyperliquid vaultDeposit identifies no depositor for the vault account');
|
|
102
|
+
}
|
|
103
|
+
if (delta.type === 'vaultWithdraw' &&
|
|
104
|
+
delta.user.toLowerCase() === vault &&
|
|
105
|
+
queried === vault) {
|
|
99
106
|
return null;
|
|
100
107
|
}
|
|
101
|
-
const direction = queried === sender ? 'OUT' : 'IN';
|
|
102
|
-
const counterpartyAddress = direction === 'OUT' ? recipient : sender;
|
|
103
|
-
const meta = {
|
|
104
|
-
transferType: 'sendAsset',
|
|
105
|
-
sourceDex: delta.sourceDex,
|
|
106
|
-
destinationDex: delta.destinationDex,
|
|
107
|
-
usdcValue: delta.usdcValue,
|
|
108
|
-
nonce: delta.nonce,
|
|
109
|
-
};
|
|
110
108
|
return {
|
|
111
109
|
...base,
|
|
112
110
|
type: ActivityType.TRANSFER,
|
|
113
|
-
direction,
|
|
114
|
-
counterpartyAddress
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
111
|
+
direction: delta.type === 'vaultDeposit' || queried === vault ? 'OUT' : 'IN',
|
|
112
|
+
counterpartyAddress: delta.type === 'vaultWithdraw' && queried === vault
|
|
113
|
+
? delta.user.toLowerCase()
|
|
114
|
+
: vault,
|
|
115
|
+
asset: assetRegistry.require(HL_COLLATERAL_ASSET_ID),
|
|
116
|
+
amount: delta.type === 'vaultDeposit' ? delta.usdc : delta.netWithdrawnUsd,
|
|
117
|
+
meta: delta.type === 'vaultDeposit'
|
|
118
|
+
? { transferType: delta.type }
|
|
119
|
+
: {
|
|
120
|
+
transferType: delta.type,
|
|
121
|
+
requestedUsd: delta.requestedUsd,
|
|
122
|
+
commission: delta.commission,
|
|
123
|
+
closingCost: delta.closingCost,
|
|
124
|
+
basis: delta.basis,
|
|
125
|
+
},
|
|
122
126
|
explorerLink: entry.hash
|
|
123
127
|
? `https://app.hyperliquid.xyz/explorer/tx/${entry.hash}`
|
|
124
128
|
: undefined,
|
|
@@ -130,7 +134,7 @@ export const mapLedgerEntry = (entry, providerKey, queriedAddress, resolveMarket
|
|
|
130
134
|
return {
|
|
131
135
|
...base,
|
|
132
136
|
type: ActivityType.DEPOSIT,
|
|
133
|
-
asset:
|
|
137
|
+
asset: assetRegistry.require(HL_COLLATERAL_ASSET_ID),
|
|
134
138
|
amount: delta.usdc,
|
|
135
139
|
explorerLink: entry.hash
|
|
136
140
|
? `https://scan.li.fi/tx/${entry.hash}`
|
|
@@ -141,7 +145,7 @@ export const mapLedgerEntry = (entry, providerKey, queriedAddress, resolveMarket
|
|
|
141
145
|
return {
|
|
142
146
|
...base,
|
|
143
147
|
type: ActivityType.WITHDRAWAL,
|
|
144
|
-
asset:
|
|
148
|
+
asset: assetRegistry.require(HL_COLLATERAL_ASSET_ID),
|
|
145
149
|
amount: delta.usdc,
|
|
146
150
|
...(delta.fee === undefined
|
|
147
151
|
? {}
|
|
@@ -206,4 +210,56 @@ export const mapFundingActivity = (entry, providerKey, resolveMarket) => {
|
|
|
206
210
|
fundingRate: entry.delta.fundingRate,
|
|
207
211
|
};
|
|
208
212
|
};
|
|
213
|
+
/**
|
|
214
|
+
* Build one liquidation activity per liquidation order from the fills of the
|
|
215
|
+
* liquidated account. Hyperliquid attaches `liquidation` to the fills of both
|
|
216
|
+
* parties, so only fills whose `liquidatedUser` is the queried address count.
|
|
217
|
+
* A fill whose hash a ledger liquidation row already carries is the same
|
|
218
|
+
* event and is skipped. The size sign follows the closed position: a sell
|
|
219
|
+
* fill closes a long. Groups whose market does not resolve are dropped.
|
|
220
|
+
* @public
|
|
221
|
+
*/
|
|
222
|
+
export const mapLiquidationFills = (fills, providerKey, queriedAddress, resolveMarket, ledgerHashes) => {
|
|
223
|
+
const queried = queriedAddress.toLowerCase();
|
|
224
|
+
const byOrder = new Map();
|
|
225
|
+
for (const fill of fills) {
|
|
226
|
+
if (fill.liquidation?.liquidatedUser.toLowerCase() !== queried ||
|
|
227
|
+
(fill.hash !== undefined && ledgerHashes.has(fill.hash))) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
const group = byOrder.get(fill.oid) ?? [];
|
|
231
|
+
group.push(fill);
|
|
232
|
+
byOrder.set(fill.oid, group);
|
|
233
|
+
}
|
|
234
|
+
return [...byOrder.entries()].flatMap(([oid, group]) => {
|
|
235
|
+
const [first] = group;
|
|
236
|
+
const market = resolveMarket(first.coin);
|
|
237
|
+
if (market === undefined) {
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
let size = new Big(0);
|
|
241
|
+
let notional = new Big(0);
|
|
242
|
+
let time = first.time;
|
|
243
|
+
for (const fill of group) {
|
|
244
|
+
size = size.plus(fill.sz);
|
|
245
|
+
notional = notional.plus(new Big(fill.px).times(fill.sz));
|
|
246
|
+
time = Math.max(time, fill.time);
|
|
247
|
+
}
|
|
248
|
+
return [
|
|
249
|
+
{
|
|
250
|
+
id: `liquidation:${oid}`,
|
|
251
|
+
provider: providerKey,
|
|
252
|
+
timestamp: new Date(time).toISOString(),
|
|
253
|
+
type: ActivityType.LIQUIDATION,
|
|
254
|
+
liquidatedNotionalPosition: notional.toFixed(),
|
|
255
|
+
liquidatedPositions: [
|
|
256
|
+
{
|
|
257
|
+
market,
|
|
258
|
+
size: (first.side === 'A' ? size : size.neg()).toFixed(),
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
},
|
|
262
|
+
];
|
|
263
|
+
});
|
|
264
|
+
};
|
|
209
265
|
//# sourceMappingURL=mapActivity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapActivity.js","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapActivity.js","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAGzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAGzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAQ5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,0FAA0F;AAC1F,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,QAAQ,aAAa,KAAG,IAwCjE,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { classifyFillFromPosition, ExplorerChainId, explorerTxUrl, } from '@lifi/perps-sdk';
|
|
2
|
-
import { FillClassification,
|
|
2
|
+
import { FillClassification, LiquidityRole, OrderSide, OrderType, } from '@lifi/perps-types';
|
|
3
3
|
import { SPOT_MARKET_ID } from '../constants.js';
|
|
4
4
|
/** Re-export the shared fill-position classifier used by Hyperliquid mappings. @public */
|
|
5
5
|
export { classifyFillFromPosition };
|
|
@@ -27,7 +27,6 @@ export const mapFill = (fill, market) => {
|
|
|
27
27
|
type: fill.crossed ? undefined : OrderType.LIMIT,
|
|
28
28
|
size: fill.sz,
|
|
29
29
|
price: fill.px,
|
|
30
|
-
status: FillStatus.FILLED,
|
|
31
30
|
liquidity: fill.crossed ? LiquidityRole.TAKER : LiquidityRole.MAKER,
|
|
32
31
|
filledSize: fill.sz,
|
|
33
32
|
fee: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,SAAS,GACV,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGhD,0FAA0F;AAC1F,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,MAAqB,EAAQ,EAAE;IACvE,qEAAqE;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,aAAa,CAAA;IAEjE,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc;YACtC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;YACjC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACzB,aAAa,EAAE,IAAI,CAAC,KAAK;QACzB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI;QACxD,0EAA0E;QAC1E,0EAA0E;QAC1E,6EAA6E;QAC7E,sEAAsE;QACtE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK;QAChD,IAAI,EAAE,IAAI,CAAC,EAAE;QACb,KAAK,EAAE,IAAI,CAAC,EAAE;QACd,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK;QACnE,UAAU,EAAE,IAAI,CAAC,EAAE;QACnB,GAAG,EAAE;YACH,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,KAAK,EAAE,QAAQ;SAChB;QACD,UAAU,EACR,IAAI,CAAC,UAAU,KAAK,SAAS;YAC3B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;QAClD,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;QACnE,cAAc,EACZ,MAAM,CAAC,UAAU,KAAK,cAAc;YAClC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG;gBACjB,CAAC,CAAC,kBAAkB,CAAC,QAAQ;gBAC7B,CAAC,CAAC,kBAAkB,CAAC,SAAS;YAChC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACtE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;KAC7C,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,77 +1,12 @@
|
|
|
1
|
-
import type { MarketDisplay,
|
|
1
|
+
import type { MarketDisplay, Order } from '@lifi/perps-types';
|
|
2
2
|
import { OrderStatus, OrderType } from '@lifi/perps-types';
|
|
3
|
-
import type { HlFrontendOpenOrder, HlOrderDetail } from '../types/index.js';
|
|
4
|
-
/**
|
|
5
|
-
* An order as seen by the REST `frontendOpenOrders` payload, or the smaller
|
|
6
|
-
* shape nested in the `orderUpdates` WebSocket frame. `mapOpenOrder` and
|
|
7
|
-
* `mapTriggerOrder` accept either so both code paths share one mapper.
|
|
8
|
-
* @public
|
|
9
|
-
*/
|
|
3
|
+
import type { HlFrontendOpenOrder, HlOrderDetail, HlTwapHistoryEntry } from '../types/index.js';
|
|
4
|
+
/** Order payload shared by frontend, historical, and single-order reads. */
|
|
10
5
|
export type HlOrderLike = HlFrontendOpenOrder | HlOrderDetail['order'];
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* @public
|
|
15
|
-
*/
|
|
16
|
-
export declare const mapOrderType: (orderType: string) => OrderType;
|
|
17
|
-
/** Return whether an SDK order type represents a take-profit or stop trigger. @public */
|
|
18
|
-
export declare const isTriggerType: (type: OrderType) => boolean;
|
|
19
|
-
/**
|
|
20
|
-
* Decide whether a raw Hyperliquid order belongs in the cross-provider
|
|
21
|
-
* `triggerOrders` bucket. Single source of truth for both the REST
|
|
22
|
-
* `getOrders` path (`HlFrontendOpenOrder` payload) and the `orderUpdates`
|
|
23
|
-
* WS handler (`HlOrderDetail.order`, a strict subset).
|
|
24
|
-
*
|
|
25
|
-
* Authoritative signals, in order:
|
|
26
|
-
* 1. `isTrigger` — REST-only boolean Hyperliquid sets on
|
|
27
|
-
* `frontendOpenOrders`. Definitive when present.
|
|
28
|
-
* 2. `isPositionTpsl` — REST-only flag for TP/SL legs attached to a
|
|
29
|
-
* position.
|
|
30
|
-
* 3. `triggerCondition !== 'N/A'` — present on both REST and WS payloads.
|
|
31
|
-
* Non-trigger orders carry the literal `'N/A'`.
|
|
32
|
-
* 4. `triggerPx` non-null and non-zero — present on both. The reliable
|
|
33
|
-
* trigger signal on the WS wire when `orderType` lies (HL pushes
|
|
34
|
-
* `'Limit'` for a freshly-placed TP/SL until REST refetch lands the
|
|
35
|
-
* corrected type).
|
|
36
|
-
* 5. `orderType` — final fall-back via `isTriggerType`.
|
|
37
|
-
* @public
|
|
38
|
-
*/
|
|
39
|
-
export declare const isTriggerOrder: (o: HlOrderLike) => boolean;
|
|
40
|
-
/**
|
|
41
|
-
* Map an open Hyperliquid order to the SDK's normalized open-order shape.
|
|
42
|
-
* Numeric IDs become strings and wire millisecond timestamps become ISO dates.
|
|
43
|
-
* @public
|
|
44
|
-
*/
|
|
45
|
-
export declare const mapOpenOrder: (o: HlOrderLike, market: MarketDisplay) => OpenOrder;
|
|
46
|
-
/**
|
|
47
|
-
* Map a Hyperliquid trigger/TP-SL order to the SDK's trigger-order shape.
|
|
48
|
-
* @public
|
|
49
|
-
*/
|
|
50
|
-
export declare const mapTriggerOrder: (o: HlOrderLike, market: MarketDisplay) => TriggerOrder;
|
|
51
|
-
/**
|
|
52
|
-
* Map a raw Hyperliquid order status string to the SDK's OrderStatus enum.
|
|
53
|
-
*
|
|
54
|
-
* HL's terminal statuses are mostly compound strings ending in `Canceled`
|
|
55
|
-
* or `Rejected` (e.g. `siblingFilledCanceled`, `tickRejected`); classify
|
|
56
|
-
* those by suffix so a status HL adds later still lands in the correct
|
|
57
|
-
* terminal bucket instead of silently falling through to PENDING, which
|
|
58
|
-
* {@link isActiveOrderStatus} treats as active. `scheduledCancel` is the
|
|
59
|
-
* one documented cancel status without the `Canceled` suffix.
|
|
60
|
-
* @public
|
|
61
|
-
*/
|
|
6
|
+
/** Translate documented venue execution types without reading trigger prose. */
|
|
7
|
+
export declare const mapOrderType: (orderType: string) => Exclude<OrderType, OrderType.TWAP>;
|
|
8
|
+
/** Translate venue lifecycle statuses; unknown statuses are errors. */
|
|
62
9
|
export declare const mapOrderStatus: (status: string) => OrderStatus;
|
|
63
|
-
/**
|
|
64
|
-
|
|
65
|
-
* describing *why* the order ended in a terminal non-FILLED state. Bare
|
|
66
|
-
* `canceled`/`cancelled`/`rejected` carry no actionable detail and
|
|
67
|
-
* return `undefined`; so do non-terminal and unknown values.
|
|
68
|
-
* @public
|
|
69
|
-
*/
|
|
70
|
-
export declare const mapStatusReason: (status: string) => string | undefined;
|
|
71
|
-
/**
|
|
72
|
-
* Map an `orderStatus` detail to the SDK's normalized order shape, preserving
|
|
73
|
-
* decimal size/price strings and translating status, side, and time-in-force.
|
|
74
|
-
* @public
|
|
75
|
-
*/
|
|
76
|
-
export declare const mapOrder: (detail: HlOrderDetail, market: MarketDisplay) => Order;
|
|
10
|
+
/** Normalize regular, trigger, and TWAP rows through one lifecycle model. */
|
|
11
|
+
export declare const mapOrder: (raw: HlOrderLike | HlOrderDetail | HlTwapHistoryEntry, market: MarketDisplay, parentOrderId?: string) => Order;
|
|
77
12
|
//# sourceMappingURL=mapOrder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EAGN,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEL,WAAW,EACX,SAAS,EAGV,MAAM,mBAAmB,CAAA;AAG1B,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,4EAA4E;AAC5E,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;AAEtE,gFAAgF;AAChF,eAAO,MAAM,YAAY,GACvB,WAAW,MAAM,KAChB,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAiBnC,CAAA;AAED,uEAAuE;AACvE,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,WAuC/C,CAAA;AAQD,6EAA6E;AAC7E,eAAO,MAAM,QAAQ,GACnB,KAAK,WAAW,GAAG,aAAa,GAAG,kBAAkB,EACrD,QAAQ,aAAa,EACrB,gBAAgB,MAAM,KACrB,KAiIF,CAAA"}
|