@lifi/perps-sdk-provider-hyperliquid 0.0.0-preview-c903f1e
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/LICENSE +201 -0
- package/README.md +29 -0
- package/dist/cjs/HyperliquidProvider.d.ts +15 -0
- package/dist/cjs/HyperliquidProvider.d.ts.map +1 -0
- package/dist/cjs/HyperliquidProvider.js +135 -0
- package/dist/cjs/HyperliquidProvider.js.map +1 -0
- package/dist/cjs/accountConfig.d.ts +3 -0
- package/dist/cjs/accountConfig.d.ts.map +1 -0
- package/dist/cjs/accountConfig.js +45 -0
- package/dist/cjs/accountConfig.js.map +1 -0
- package/dist/cjs/accountSummary.d.ts +3 -0
- package/dist/cjs/accountSummary.d.ts.map +1 -0
- package/dist/cjs/accountSummary.js +12 -0
- package/dist/cjs/accountSummary.js.map +1 -0
- package/dist/cjs/constants.d.ts +11 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +16 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/context.d.ts +13 -0
- package/dist/cjs/context.d.ts.map +1 -0
- package/dist/cjs/context.js +24 -0
- package/dist/cjs/context.js.map +1 -0
- package/dist/cjs/index.d.ts +22 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +47 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/services/getAccount.d.ts +6 -0
- package/dist/cjs/services/getAccount.d.ts.map +1 -0
- package/dist/cjs/services/getAccount.js +109 -0
- package/dist/cjs/services/getAccount.js.map +1 -0
- package/dist/cjs/services/getActivity.d.ts +15 -0
- package/dist/cjs/services/getActivity.d.ts.map +1 -0
- package/dist/cjs/services/getActivity.js +65 -0
- package/dist/cjs/services/getActivity.js.map +1 -0
- package/dist/cjs/services/getFills.d.ts +13 -0
- package/dist/cjs/services/getFills.d.ts.map +1 -0
- package/dist/cjs/services/getFills.js +40 -0
- package/dist/cjs/services/getFills.js.map +1 -0
- package/dist/cjs/services/getOrder.d.ts +6 -0
- package/dist/cjs/services/getOrder.d.ts.map +1 -0
- package/dist/cjs/services/getOrder.js +27 -0
- package/dist/cjs/services/getOrder.js.map +1 -0
- package/dist/cjs/services/getOrders.d.ts +11 -0
- package/dist/cjs/services/getOrders.d.ts.map +1 -0
- package/dist/cjs/services/getOrders.js +51 -0
- package/dist/cjs/services/getOrders.js.map +1 -0
- package/dist/cjs/services/getPositions.d.ts +11 -0
- package/dist/cjs/services/getPositions.d.ts.map +1 -0
- package/dist/cjs/services/getPositions.js +33 -0
- package/dist/cjs/services/getPositions.js.map +1 -0
- package/dist/cjs/signers/HyperliquidAgentStore.d.ts +19 -0
- package/dist/cjs/signers/HyperliquidAgentStore.d.ts.map +1 -0
- package/dist/cjs/signers/HyperliquidAgentStore.js +110 -0
- package/dist/cjs/signers/HyperliquidAgentStore.js.map +1 -0
- package/dist/cjs/signers/index.d.ts +4 -0
- package/dist/cjs/signers/index.d.ts.map +1 -0
- package/dist/cjs/signers/index.js +8 -0
- package/dist/cjs/signers/index.js.map +1 -0
- package/dist/cjs/signers/signActions.d.ts +7 -0
- package/dist/cjs/signers/signActions.d.ts.map +1 -0
- package/dist/cjs/signers/signActions.js +33 -0
- package/dist/cjs/signers/signActions.js.map +1 -0
- package/dist/cjs/types/account.d.ts +51 -0
- package/dist/cjs/types/account.d.ts.map +1 -0
- package/dist/cjs/types/account.js +10 -0
- package/dist/cjs/types/account.js.map +1 -0
- package/dist/cjs/types/action.d.ts +51 -0
- package/dist/cjs/types/action.d.ts.map +1 -0
- package/dist/cjs/types/action.js +11 -0
- package/dist/cjs/types/action.js.map +1 -0
- package/dist/cjs/types/asset.d.ts +66 -0
- package/dist/cjs/types/asset.d.ts.map +1 -0
- package/dist/cjs/types/asset.js +3 -0
- package/dist/cjs/types/asset.js.map +1 -0
- package/dist/cjs/types/fill.d.ts +18 -0
- package/dist/cjs/types/fill.d.ts.map +1 -0
- package/dist/cjs/types/fill.js +3 -0
- package/dist/cjs/types/fill.js.map +1 -0
- package/dist/cjs/types/index.d.ts +8 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +24 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/ledger.d.ts +53 -0
- package/dist/cjs/types/ledger.d.ts.map +1 -0
- package/dist/cjs/types/ledger.js +8 -0
- package/dist/cjs/types/ledger.js.map +1 -0
- package/dist/cjs/types/order.d.ts +46 -0
- package/dist/cjs/types/order.d.ts.map +1 -0
- package/dist/cjs/types/order.js +3 -0
- package/dist/cjs/types/order.js.map +1 -0
- package/dist/cjs/types/ws.d.ts +36 -0
- package/dist/cjs/types/ws.d.ts.map +1 -0
- package/dist/cjs/types/ws.js +3 -0
- package/dist/cjs/types/ws.js.map +1 -0
- package/dist/cjs/utils/assetId.d.ts +4 -0
- package/dist/cjs/utils/assetId.d.ts.map +1 -0
- package/dist/cjs/utils/assetId.js +21 -0
- package/dist/cjs/utils/assetId.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +15 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +49 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/infoClient.d.ts +10 -0
- package/dist/cjs/utils/infoClient.d.ts.map +1 -0
- package/dist/cjs/utils/infoClient.js +58 -0
- package/dist/cjs/utils/infoClient.js.map +1 -0
- package/dist/cjs/utils/liquidation.d.ts +3 -0
- package/dist/cjs/utils/liquidation.d.ts.map +1 -0
- package/dist/cjs/utils/liquidation.js +24 -0
- package/dist/cjs/utils/liquidation.js.map +1 -0
- package/dist/cjs/utils/mapActivity.d.ts +5 -0
- package/dist/cjs/utils/mapActivity.d.ts.map +1 -0
- package/dist/cjs/utils/mapActivity.js +133 -0
- package/dist/cjs/utils/mapActivity.js.map +1 -0
- package/dist/cjs/utils/mapFill.d.ts +6 -0
- package/dist/cjs/utils/mapFill.d.ts.map +1 -0
- package/dist/cjs/utils/mapFill.js +33 -0
- package/dist/cjs/utils/mapFill.js.map +1 -0
- package/dist/cjs/utils/mapMarket.d.ts +4 -0
- package/dist/cjs/utils/mapMarket.d.ts.map +1 -0
- package/dist/cjs/utils/mapMarket.js +22 -0
- package/dist/cjs/utils/mapMarket.js.map +1 -0
- package/dist/cjs/utils/mapMarketPrice.d.ts +4 -0
- package/dist/cjs/utils/mapMarketPrice.d.ts.map +1 -0
- package/dist/cjs/utils/mapMarketPrice.js +22 -0
- package/dist/cjs/utils/mapMarketPrice.js.map +1 -0
- package/dist/cjs/utils/mapOrder.d.ts +12 -0
- package/dist/cjs/utils/mapOrder.d.ts.map +1 -0
- package/dist/cjs/utils/mapOrder.js +156 -0
- package/dist/cjs/utils/mapOrder.js.map +1 -0
- package/dist/cjs/utils/mapPosition.d.ts +5 -0
- package/dist/cjs/utils/mapPosition.d.ts.map +1 -0
- package/dist/cjs/utils/mapPosition.js +28 -0
- package/dist/cjs/utils/mapPosition.js.map +1 -0
- package/dist/cjs/utils/marketDisplay.d.ts +4 -0
- package/dist/cjs/utils/marketDisplay.d.ts.map +1 -0
- package/dist/cjs/utils/marketDisplay.js +23 -0
- package/dist/cjs/utils/marketDisplay.js.map +1 -0
- package/dist/cjs/utils/orderFormatting.d.ts +4 -0
- package/dist/cjs/utils/orderFormatting.d.ts.map +1 -0
- package/dist/cjs/utils/orderFormatting.js +30 -0
- package/dist/cjs/utils/orderFormatting.js.map +1 -0
- package/dist/cjs/utils/priceStepToAggregation.d.ts +5 -0
- package/dist/cjs/utils/priceStepToAggregation.d.ts.map +1 -0
- package/dist/cjs/utils/priceStepToAggregation.js +36 -0
- package/dist/cjs/utils/priceStepToAggregation.js.map +1 -0
- package/dist/cjs/utils/spotBalance.d.ts +6 -0
- package/dist/cjs/utils/spotBalance.d.ts.map +1 -0
- package/dist/cjs/utils/spotBalance.js +34 -0
- package/dist/cjs/utils/spotBalance.js.map +1 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +29 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.js +359 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -0
- package/dist/cjs/websocket/index.d.ts +2 -0
- package/dist/cjs/websocket/index.d.ts.map +1 -0
- package/dist/cjs/websocket/index.js +6 -0
- package/dist/cjs/websocket/index.js.map +1 -0
- package/dist/esm/HyperliquidProvider.d.ts +64 -0
- package/dist/esm/HyperliquidProvider.d.ts.map +1 -0
- package/dist/esm/HyperliquidProvider.js +162 -0
- package/dist/esm/HyperliquidProvider.js.map +1 -0
- package/dist/esm/accountConfig.d.ts +10 -0
- package/dist/esm/accountConfig.d.ts.map +1 -0
- package/dist/esm/accountConfig.js +65 -0
- package/dist/esm/accountConfig.js.map +1 -0
- package/dist/esm/accountSummary.d.ts +10 -0
- package/dist/esm/accountSummary.d.ts.map +1 -0
- package/dist/esm/accountSummary.js +22 -0
- package/dist/esm/accountSummary.js.map +1 -0
- package/dist/esm/constants.d.ts +40 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +42 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/context.d.ts +26 -0
- package/dist/esm/context.d.ts.map +1 -0
- package/dist/esm/context.js +25 -0
- package/dist/esm/context.js.map +1 -0
- package/dist/esm/index.d.ts +31 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/services/getAccount.d.ts +28 -0
- package/dist/esm/services/getAccount.d.ts.map +1 -0
- package/dist/esm/services/getAccount.js +134 -0
- package/dist/esm/services/getAccount.js.map +1 -0
- package/dist/esm/services/getActivity.d.ts +33 -0
- package/dist/esm/services/getActivity.d.ts.map +1 -0
- package/dist/esm/services/getActivity.js +75 -0
- package/dist/esm/services/getActivity.js.map +1 -0
- package/dist/esm/services/getFills.d.ts +34 -0
- package/dist/esm/services/getFills.d.ts.map +1 -0
- package/dist/esm/services/getFills.js +49 -0
- package/dist/esm/services/getFills.js.map +1 -0
- package/dist/esm/services/getOrder.d.ts +17 -0
- package/dist/esm/services/getOrder.d.ts.map +1 -0
- package/dist/esm/services/getOrder.js +29 -0
- package/dist/esm/services/getOrder.js.map +1 -0
- package/dist/esm/services/getOrders.d.ts +27 -0
- package/dist/esm/services/getOrders.d.ts.map +1 -0
- package/dist/esm/services/getOrders.js +57 -0
- package/dist/esm/services/getOrders.js.map +1 -0
- package/dist/esm/services/getPositions.d.ts +26 -0
- package/dist/esm/services/getPositions.d.ts.map +1 -0
- package/dist/esm/services/getPositions.js +37 -0
- package/dist/esm/services/getPositions.js.map +1 -0
- package/dist/esm/signers/HyperliquidAgentStore.d.ts +54 -0
- package/dist/esm/signers/HyperliquidAgentStore.d.ts.map +1 -0
- package/dist/esm/signers/HyperliquidAgentStore.js +134 -0
- package/dist/esm/signers/HyperliquidAgentStore.js.map +1 -0
- package/dist/esm/signers/index.d.ts +4 -0
- package/dist/esm/signers/index.d.ts.map +1 -0
- package/dist/esm/signers/index.js +4 -0
- package/dist/esm/signers/index.js.map +1 -0
- package/dist/esm/signers/signActions.d.ts +15 -0
- package/dist/esm/signers/signActions.d.ts.map +1 -0
- package/dist/esm/signers/signActions.js +38 -0
- package/dist/esm/signers/signActions.js.map +1 -0
- package/dist/esm/types/account.d.ts +64 -0
- package/dist/esm/types/account.d.ts.map +1 -0
- package/dist/esm/types/account.js +13 -0
- package/dist/esm/types/account.js.map +1 -0
- package/dist/esm/types/action.d.ts +61 -0
- package/dist/esm/types/action.d.ts.map +1 -0
- package/dist/esm/types/action.js +16 -0
- package/dist/esm/types/action.js.map +1 -0
- package/dist/esm/types/asset.d.ts +82 -0
- package/dist/esm/types/asset.d.ts.map +1 -0
- package/dist/esm/types/asset.js +3 -0
- package/dist/esm/types/asset.js.map +1 -0
- package/dist/esm/types/fill.d.ts +21 -0
- package/dist/esm/types/fill.d.ts.map +1 -0
- package/dist/esm/types/fill.js +3 -0
- package/dist/esm/types/fill.js.map +1 -0
- package/dist/esm/types/index.d.ts +8 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +11 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/ledger.d.ts +93 -0
- package/dist/esm/types/ledger.d.ts.map +1 -0
- package/dist/esm/types/ledger.js +16 -0
- package/dist/esm/types/ledger.js.map +1 -0
- package/dist/esm/types/order.d.ts +51 -0
- package/dist/esm/types/order.d.ts.map +1 -0
- package/dist/esm/types/order.js +3 -0
- package/dist/esm/types/order.js.map +1 -0
- package/dist/esm/types/ws.d.ts +43 -0
- package/dist/esm/types/ws.d.ts.map +1 -0
- package/dist/esm/types/ws.js +3 -0
- package/dist/esm/types/ws.js.map +1 -0
- package/dist/esm/utils/assetId.d.ts +20 -0
- package/dist/esm/utils/assetId.d.ts.map +1 -0
- package/dist/esm/utils/assetId.js +31 -0
- package/dist/esm/utils/assetId.js.map +1 -0
- package/dist/esm/utils/index.d.ts +15 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +17 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/infoClient.d.ts +28 -0
- package/dist/esm/utils/infoClient.d.ts.map +1 -0
- package/dist/esm/utils/infoClient.js +70 -0
- package/dist/esm/utils/infoClient.js.map +1 -0
- package/dist/esm/utils/liquidation.d.ts +48 -0
- package/dist/esm/utils/liquidation.d.ts.map +1 -0
- package/dist/esm/utils/liquidation.js +65 -0
- package/dist/esm/utils/liquidation.js.map +1 -0
- package/dist/esm/utils/mapActivity.d.ts +15 -0
- package/dist/esm/utils/mapActivity.d.ts.map +1 -0
- package/dist/esm/utils/mapActivity.js +148 -0
- package/dist/esm/utils/mapActivity.js.map +1 -0
- package/dist/esm/utils/mapFill.d.ts +11 -0
- package/dist/esm/utils/mapFill.d.ts.map +1 -0
- package/dist/esm/utils/mapFill.js +34 -0
- package/dist/esm/utils/mapFill.js.map +1 -0
- package/dist/esm/utils/mapMarket.d.ts +12 -0
- package/dist/esm/utils/mapMarket.d.ts.map +1 -0
- package/dist/esm/utils/mapMarket.js +27 -0
- package/dist/esm/utils/mapMarket.js.map +1 -0
- package/dist/esm/utils/mapMarketPrice.d.ts +10 -0
- package/dist/esm/utils/mapMarketPrice.d.ts.map +1 -0
- package/dist/esm/utils/mapMarketPrice.js +24 -0
- package/dist/esm/utils/mapMarketPrice.js.map +1 -0
- package/dist/esm/utils/mapOrder.d.ts +49 -0
- package/dist/esm/utils/mapOrder.d.ts.map +1 -0
- package/dist/esm/utils/mapOrder.js +182 -0
- package/dist/esm/utils/mapOrder.js.map +1 -0
- package/dist/esm/utils/mapPosition.d.ts +12 -0
- package/dist/esm/utils/mapPosition.d.ts.map +1 -0
- package/dist/esm/utils/mapPosition.js +30 -0
- package/dist/esm/utils/mapPosition.js.map +1 -0
- package/dist/esm/utils/marketDisplay.d.ts +17 -0
- package/dist/esm/utils/marketDisplay.d.ts.map +1 -0
- package/dist/esm/utils/marketDisplay.js +31 -0
- package/dist/esm/utils/marketDisplay.js.map +1 -0
- package/dist/esm/utils/orderFormatting.d.ts +50 -0
- package/dist/esm/utils/orderFormatting.d.ts.map +1 -0
- package/dist/esm/utils/orderFormatting.js +78 -0
- package/dist/esm/utils/orderFormatting.js.map +1 -0
- package/dist/esm/utils/priceStepToAggregation.d.ts +20 -0
- package/dist/esm/utils/priceStepToAggregation.d.ts.map +1 -0
- package/dist/esm/utils/priceStepToAggregation.js +51 -0
- package/dist/esm/utils/priceStepToAggregation.js.map +1 -0
- package/dist/esm/utils/spotBalance.d.ts +18 -0
- package/dist/esm/utils/spotBalance.d.ts.map +1 -0
- package/dist/esm/utils/spotBalance.js +40 -0
- package/dist/esm/utils/spotBalance.js.map +1 -0
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts +61 -0
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -0
- package/dist/esm/websocket/HyperliquidWsProvider.js +406 -0
- package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -0
- package/dist/esm/websocket/index.d.ts +2 -0
- package/dist/esm/websocket/index.d.ts.map +1 -0
- package/dist/esm/websocket/index.js +3 -0
- package/dist/esm/websocket/index.js.map +1 -0
- package/dist/types/HyperliquidProvider.d.ts +64 -0
- package/dist/types/HyperliquidProvider.d.ts.map +1 -0
- package/dist/types/accountConfig.d.ts +10 -0
- package/dist/types/accountConfig.d.ts.map +1 -0
- package/dist/types/accountSummary.d.ts +10 -0
- package/dist/types/accountSummary.d.ts.map +1 -0
- package/dist/types/constants.d.ts +40 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/context.d.ts +26 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/services/getAccount.d.ts +28 -0
- package/dist/types/services/getAccount.d.ts.map +1 -0
- package/dist/types/services/getActivity.d.ts +33 -0
- package/dist/types/services/getActivity.d.ts.map +1 -0
- package/dist/types/services/getFills.d.ts +34 -0
- package/dist/types/services/getFills.d.ts.map +1 -0
- package/dist/types/services/getOrder.d.ts +17 -0
- package/dist/types/services/getOrder.d.ts.map +1 -0
- package/dist/types/services/getOrders.d.ts +27 -0
- package/dist/types/services/getOrders.d.ts.map +1 -0
- package/dist/types/services/getPositions.d.ts +26 -0
- package/dist/types/services/getPositions.d.ts.map +1 -0
- package/dist/types/signers/HyperliquidAgentStore.d.ts +54 -0
- package/dist/types/signers/HyperliquidAgentStore.d.ts.map +1 -0
- package/dist/types/signers/index.d.ts +4 -0
- package/dist/types/signers/index.d.ts.map +1 -0
- package/dist/types/signers/signActions.d.ts +15 -0
- package/dist/types/signers/signActions.d.ts.map +1 -0
- package/dist/types/types/account.d.ts +64 -0
- package/dist/types/types/account.d.ts.map +1 -0
- package/dist/types/types/action.d.ts +61 -0
- package/dist/types/types/action.d.ts.map +1 -0
- package/dist/types/types/asset.d.ts +82 -0
- package/dist/types/types/asset.d.ts.map +1 -0
- package/dist/types/types/fill.d.ts +21 -0
- package/dist/types/types/fill.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +8 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/ledger.d.ts +93 -0
- package/dist/types/types/ledger.d.ts.map +1 -0
- package/dist/types/types/order.d.ts +51 -0
- package/dist/types/types/order.d.ts.map +1 -0
- package/dist/types/types/ws.d.ts +43 -0
- package/dist/types/types/ws.d.ts.map +1 -0
- package/dist/types/utils/assetId.d.ts +20 -0
- package/dist/types/utils/assetId.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +15 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/infoClient.d.ts +28 -0
- package/dist/types/utils/infoClient.d.ts.map +1 -0
- package/dist/types/utils/liquidation.d.ts +48 -0
- package/dist/types/utils/liquidation.d.ts.map +1 -0
- package/dist/types/utils/mapActivity.d.ts +15 -0
- package/dist/types/utils/mapActivity.d.ts.map +1 -0
- package/dist/types/utils/mapFill.d.ts +11 -0
- package/dist/types/utils/mapFill.d.ts.map +1 -0
- package/dist/types/utils/mapMarket.d.ts +12 -0
- package/dist/types/utils/mapMarket.d.ts.map +1 -0
- package/dist/types/utils/mapMarketPrice.d.ts +10 -0
- package/dist/types/utils/mapMarketPrice.d.ts.map +1 -0
- package/dist/types/utils/mapOrder.d.ts +49 -0
- package/dist/types/utils/mapOrder.d.ts.map +1 -0
- package/dist/types/utils/mapPosition.d.ts +12 -0
- package/dist/types/utils/mapPosition.d.ts.map +1 -0
- package/dist/types/utils/marketDisplay.d.ts +17 -0
- package/dist/types/utils/marketDisplay.d.ts.map +1 -0
- package/dist/types/utils/orderFormatting.d.ts +50 -0
- package/dist/types/utils/orderFormatting.d.ts.map +1 -0
- package/dist/types/utils/priceStepToAggregation.d.ts +20 -0
- package/dist/types/utils/priceStepToAggregation.d.ts.map +1 -0
- package/dist/types/utils/spotBalance.d.ts +18 -0
- package/dist/types/utils/spotBalance.d.ts.map +1 -0
- package/dist/types/websocket/HyperliquidWsProvider.d.ts +61 -0
- package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -0
- package/dist/types/websocket/index.d.ts +2 -0
- package/dist/types/websocket/index.d.ts.map +1 -0
- package/package.json +68 -0
- package/src/HyperliquidProvider.ts +381 -0
- package/src/accountConfig.ts +89 -0
- package/src/accountSummary.ts +32 -0
- package/src/constants.ts +47 -0
- package/src/context.ts +41 -0
- package/src/index.ts +45 -0
- package/src/services/getAccount.ts +263 -0
- package/src/services/getActivity.ts +162 -0
- package/src/services/getFills.ts +96 -0
- package/src/services/getOrder.ts +61 -0
- package/src/services/getOrders.ts +101 -0
- package/src/services/getPositions.ts +76 -0
- package/src/signers/HyperliquidAgentStore.ts +176 -0
- package/src/signers/index.ts +5 -0
- package/src/signers/signActions.ts +78 -0
- package/src/types/account.ts +74 -0
- package/src/types/action.ts +66 -0
- package/src/types/asset.ts +96 -0
- package/src/types/fill.ts +24 -0
- package/src/types/index.ts +11 -0
- package/src/types/ledger.ts +111 -0
- package/src/types/order.ts +56 -0
- package/src/types/ws.ts +47 -0
- package/src/utils/assetId.ts +38 -0
- package/src/utils/index.ts +38 -0
- package/src/utils/infoClient.ts +111 -0
- package/src/utils/liquidation.ts +74 -0
- package/src/utils/mapActivity.ts +182 -0
- package/src/utils/mapFill.ts +48 -0
- package/src/utils/mapMarket.ts +33 -0
- package/src/utils/mapMarketPrice.ts +33 -0
- package/src/utils/mapOrder.ts +218 -0
- package/src/utils/mapPosition.ts +40 -0
- package/src/utils/marketDisplay.ts +38 -0
- package/src/utils/orderFormatting.ts +93 -0
- package/src/utils/priceStepToAggregation.ts +58 -0
- package/src/utils/spotBalance.ts +51 -0
- package/src/websocket/HyperliquidWsProvider.ts +533 -0
- package/src/websocket/index.ts +3 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// biome-ignore-all lint/performance/noBarrelFile lint/performance/noReExportAll: single re-export entry point
|
|
2
|
+
// for every Hyperliquid wire type. Internal modules import per-file paths
|
|
3
|
+
// (e.g. `../types/account.js`) to avoid pulling unrelated types into bundles.
|
|
4
|
+
|
|
5
|
+
export * from './account.js'
|
|
6
|
+
export * from './action.js'
|
|
7
|
+
export * from './asset.js'
|
|
8
|
+
export * from './fill.js'
|
|
9
|
+
export * from './ledger.js'
|
|
10
|
+
export * from './order.js'
|
|
11
|
+
export * from './ws.js'
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { Address } from 'viem'
|
|
2
|
+
|
|
3
|
+
// `userNonFundingLedgerUpdates` + `userFunding` shapes.
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Hyperliquid `spotTransfer` ledger delta. Emitted for transfers of spot
|
|
7
|
+
* tokens between Hyperliquid accounts. `user` is the sender, `destination`
|
|
8
|
+
* the recipient; direction is derived at the call site from the queried
|
|
9
|
+
* address.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export type HlSpotTransferDelta = {
|
|
13
|
+
type: 'spotTransfer'
|
|
14
|
+
token: string
|
|
15
|
+
amount: string
|
|
16
|
+
usdcValue: string
|
|
17
|
+
user: Address
|
|
18
|
+
destination: Address
|
|
19
|
+
fee?: string
|
|
20
|
+
nativeTokenFee?: string
|
|
21
|
+
nonce?: number
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Hyperliquid ledger delta emitted for the `sendAsset` exchange action. The
|
|
26
|
+
* wire `type` literal is `'send'` (NOT `'sendAsset'`); the TS name retains
|
|
27
|
+
* the `SendAsset` prefix to match `HL_PRIMARY_TYPE_SEND_ASSET`.
|
|
28
|
+
*
|
|
29
|
+
* - `user` is the sender, `destination` the recipient. For same-user dex
|
|
30
|
+
* moves both equal the queried address.
|
|
31
|
+
* - `sourceDex` / `destinationDex` use `""` for the main USDC perp DEX,
|
|
32
|
+
* `"spot"` for spot, or the perp DEX name otherwise.
|
|
33
|
+
* - `token` is a wire token identifier (e.g. `"USDC"` or `"TOKEN:0x..."`).
|
|
34
|
+
* - `nonce` is the wire nonce (ms timestamp); always present on `send`
|
|
35
|
+
* deltas, unlike `spotTransfer` where it may be null.
|
|
36
|
+
* @public
|
|
37
|
+
*/
|
|
38
|
+
export type HlSendAssetDelta = {
|
|
39
|
+
type: 'send'
|
|
40
|
+
user: Address
|
|
41
|
+
destination: Address
|
|
42
|
+
sourceDex: string
|
|
43
|
+
destinationDex: string
|
|
44
|
+
token: string
|
|
45
|
+
amount: string
|
|
46
|
+
usdcValue: string
|
|
47
|
+
fee: string
|
|
48
|
+
nativeTokenFee: string
|
|
49
|
+
nonce: number
|
|
50
|
+
feeToken: string
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** @public */
|
|
54
|
+
export type HlLedgerDelta =
|
|
55
|
+
| HlSpotTransferDelta
|
|
56
|
+
| HlSendAssetDelta
|
|
57
|
+
| {
|
|
58
|
+
type: string
|
|
59
|
+
usdc?: string
|
|
60
|
+
[key: string]: unknown
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Type guard for `HlSpotTransferDelta` — TypeScript cannot narrow off the
|
|
65
|
+
* `type` discriminant alone because the catch-all arm of `HlLedgerDelta` has
|
|
66
|
+
* `type: string` (a supertype of the literal `'spotTransfer'`). Use this at
|
|
67
|
+
* call sites that need the strongly-typed shape.
|
|
68
|
+
* @public
|
|
69
|
+
*/
|
|
70
|
+
export const isSpotTransferDelta = (
|
|
71
|
+
delta: HlLedgerDelta
|
|
72
|
+
): delta is HlSpotTransferDelta => delta.type === 'spotTransfer'
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Type guard for `HlSendAssetDelta`. The wire `type` literal is `'send'`;
|
|
76
|
+
* see `HlSendAssetDelta` for the naming-vs-wire-format rationale. Same
|
|
77
|
+
* catch-all-arm caveat as `isSpotTransferDelta`.
|
|
78
|
+
* @public
|
|
79
|
+
*/
|
|
80
|
+
export const isSendAssetDelta = (
|
|
81
|
+
delta: HlLedgerDelta
|
|
82
|
+
): delta is HlSendAssetDelta => delta.type === 'send'
|
|
83
|
+
|
|
84
|
+
/** @public */
|
|
85
|
+
export type HlLedgerUpdate = {
|
|
86
|
+
time: number
|
|
87
|
+
hash: string
|
|
88
|
+
delta: HlLedgerDelta
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** @public */
|
|
92
|
+
export type HlUserNonFundingLedgerUpdates = HlLedgerUpdate[]
|
|
93
|
+
|
|
94
|
+
/** @public */
|
|
95
|
+
export type HlFundingDelta = {
|
|
96
|
+
type: 'funding'
|
|
97
|
+
coin: string
|
|
98
|
+
usdc: string
|
|
99
|
+
szi: string
|
|
100
|
+
fundingRate: string
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** @public */
|
|
104
|
+
export type HlFundingUpdate = {
|
|
105
|
+
time: number
|
|
106
|
+
hash: string
|
|
107
|
+
delta: HlFundingDelta
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** @public */
|
|
111
|
+
export type HlUserFunding = HlFundingUpdate[]
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Order shapes returned by Hyperliquid `/info`.
|
|
2
|
+
|
|
3
|
+
/** @public */
|
|
4
|
+
export type HlFrontendOpenOrder = {
|
|
5
|
+
oid: number
|
|
6
|
+
coin: string
|
|
7
|
+
side: string
|
|
8
|
+
sz: string
|
|
9
|
+
limitPx: string
|
|
10
|
+
orderType: string
|
|
11
|
+
origSz: string
|
|
12
|
+
reduceOnly: boolean
|
|
13
|
+
timestamp: number
|
|
14
|
+
isTrigger: boolean
|
|
15
|
+
isPositionTpsl: boolean
|
|
16
|
+
triggerCondition: string
|
|
17
|
+
triggerPx: string
|
|
18
|
+
children: HlFrontendOpenOrder[]
|
|
19
|
+
tif: string | null
|
|
20
|
+
cloid: string | null
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** @public */
|
|
24
|
+
export type HlFrontendOpenOrders = HlFrontendOpenOrder[]
|
|
25
|
+
|
|
26
|
+
/** @public */
|
|
27
|
+
export type HlOrderDetail = {
|
|
28
|
+
order: {
|
|
29
|
+
oid: number
|
|
30
|
+
coin: string
|
|
31
|
+
side: string
|
|
32
|
+
sz: string
|
|
33
|
+
limitPx: string
|
|
34
|
+
orderType: string
|
|
35
|
+
origSz: string
|
|
36
|
+
reduceOnly: boolean
|
|
37
|
+
timestamp: number
|
|
38
|
+
tif: string | null
|
|
39
|
+
cloid: string | null
|
|
40
|
+
triggerCondition: string
|
|
41
|
+
triggerPx: string | null
|
|
42
|
+
}
|
|
43
|
+
status: string
|
|
44
|
+
statusTimestamp: number
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** @public */
|
|
48
|
+
export type HlOrderStatusFound = {
|
|
49
|
+
status: 'order'
|
|
50
|
+
order: HlOrderDetail
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** @public */
|
|
54
|
+
export type HlOrderStatusResponse =
|
|
55
|
+
| HlOrderStatusFound
|
|
56
|
+
| { status: 'unknownOid' }
|
package/src/types/ws.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Hyperliquid WebSocket incoming message types.
|
|
2
|
+
|
|
3
|
+
import type { HlClearinghouseState, HlSpotBalance } from './account.js'
|
|
4
|
+
import type { HlAllMids, HlCandle, HlL2Book } from './asset.js'
|
|
5
|
+
import type { HlUserFill } from './fill.js'
|
|
6
|
+
|
|
7
|
+
/** @public */
|
|
8
|
+
export type HlWsMessage = {
|
|
9
|
+
channel: string
|
|
10
|
+
data: unknown
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** @public */
|
|
14
|
+
export type HlWsAllMidsData = {
|
|
15
|
+
mids: HlAllMids
|
|
16
|
+
dex?: string
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** @public */
|
|
20
|
+
export type HlWsL2BookData = HlL2Book & { coin: string }
|
|
21
|
+
|
|
22
|
+
/** @public */
|
|
23
|
+
export type HlWsCandleData = HlCandle & {
|
|
24
|
+
T: number
|
|
25
|
+
s: string
|
|
26
|
+
i: string
|
|
27
|
+
n: number
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** @public */
|
|
31
|
+
export type HlWsUserFillsData = {
|
|
32
|
+
isSnapshot: boolean
|
|
33
|
+
user: string
|
|
34
|
+
fills: HlUserFill[]
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** @public */
|
|
38
|
+
export type HlWsAllDexsClearinghouseStateData = {
|
|
39
|
+
user: string
|
|
40
|
+
clearinghouseStates: [string, Pick<HlClearinghouseState, 'assetPositions'>][]
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** @public */
|
|
44
|
+
export type HlWsSpotStateData = {
|
|
45
|
+
user: string
|
|
46
|
+
spotState: { balances: HlSpotBalance[] }
|
|
47
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spot asset IDs use the @pairIndex format (e.g. "@230").
|
|
3
|
+
*
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export const assetIsSpot = (assetId: string): boolean => assetId.startsWith('@')
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Calculate the asset ID for a given provider index and asset index.
|
|
10
|
+
*
|
|
11
|
+
* Main provider (provider = ''): assetId = indexInProvider
|
|
12
|
+
* HIP-3 providers (provider = 'xyz'): assetId = 100_000 + perpDexIndex * 10_000 + indexInProvider
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
export const calculateAssetId = (
|
|
16
|
+
providerIndex: number,
|
|
17
|
+
indexInProvider: number
|
|
18
|
+
): number => {
|
|
19
|
+
if (providerIndex === 0) {
|
|
20
|
+
return indexInProvider
|
|
21
|
+
}
|
|
22
|
+
return 100_000 + providerIndex * 10_000 + indexInProvider
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Get the provider index from the given list of provider names.
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
export const getProviderIndex = (
|
|
30
|
+
provider: string,
|
|
31
|
+
providerNames: string[]
|
|
32
|
+
): number => {
|
|
33
|
+
const index = providerNames.indexOf(provider)
|
|
34
|
+
if (index === -1) {
|
|
35
|
+
throw new Error(`Unknown sub-provider: ${provider}`)
|
|
36
|
+
}
|
|
37
|
+
return index
|
|
38
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// biome-ignore-all lint/performance/noBarrelFile: single re-export entry point
|
|
2
|
+
// for the package's utility surface. Internal modules import per-file paths
|
|
3
|
+
// (e.g. `./assetId.js`, `./mapFill.js`) directly.
|
|
4
|
+
|
|
5
|
+
export { assetIsSpot, calculateAssetId, getProviderIndex } from './assetId.js'
|
|
6
|
+
export type { InfoRequestOptions } from './infoClient.js'
|
|
7
|
+
export { hlInfoOptions, infoRequest } from './infoClient.js'
|
|
8
|
+
export {
|
|
9
|
+
calculateLiquidationPrice,
|
|
10
|
+
calculateMaintenanceMarginRate,
|
|
11
|
+
} from './liquidation.js'
|
|
12
|
+
export { mapFundingActivity, mapLedgerEntry } from './mapActivity.js'
|
|
13
|
+
export { classifyFillFromPosition, mapFill } from './mapFill.js'
|
|
14
|
+
export { mapMarket } from './mapMarket.js'
|
|
15
|
+
export { mapMarketPrice } from './mapMarketPrice.js'
|
|
16
|
+
export {
|
|
17
|
+
isTriggerOrder,
|
|
18
|
+
isTriggerType,
|
|
19
|
+
mapOpenOrder,
|
|
20
|
+
mapOrder,
|
|
21
|
+
mapOrderStatus,
|
|
22
|
+
mapOrderType,
|
|
23
|
+
mapStatusReason,
|
|
24
|
+
mapTriggerOrder,
|
|
25
|
+
} from './mapOrder.js'
|
|
26
|
+
export { isOpenAssetPosition, mapPosition } from './mapPosition.js'
|
|
27
|
+
export { coinAsset, perpsDexNames } from './marketDisplay.js'
|
|
28
|
+
export {
|
|
29
|
+
formatOrderPrice,
|
|
30
|
+
formatOrderSize,
|
|
31
|
+
getMaxPriceDecimals,
|
|
32
|
+
} from './orderFormatting.js'
|
|
33
|
+
export { priceStepToAggregation } from './priceStepToAggregation.js'
|
|
34
|
+
export {
|
|
35
|
+
spotAssetFromToken,
|
|
36
|
+
spotBalance,
|
|
37
|
+
spotPriceById,
|
|
38
|
+
} from './spotBalance.js'
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import {
|
|
2
|
+
fetchWithRetry,
|
|
3
|
+
PerpsError,
|
|
4
|
+
type PerpsSDKClient,
|
|
5
|
+
type ResolvedRetryPolicy,
|
|
6
|
+
resolveRetryPolicy,
|
|
7
|
+
type SDKRequestOptions,
|
|
8
|
+
} from '@lifi/perps-sdk'
|
|
9
|
+
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
10
|
+
import { PROVIDER_KEY } from '../constants.js'
|
|
11
|
+
|
|
12
|
+
/** @internal */
|
|
13
|
+
export const HYPERLIQUID_RETRY_DEFAULTS: ResolvedRetryPolicy = {
|
|
14
|
+
enabled: true,
|
|
15
|
+
maxAttempts: 3,
|
|
16
|
+
baseDelayMs: 2_000,
|
|
17
|
+
maxDelayMs: 15_000,
|
|
18
|
+
respectRetryAfter: true,
|
|
19
|
+
classify: ({ response }) => {
|
|
20
|
+
if (response.status === 429) {
|
|
21
|
+
return 'retry-rate-limit'
|
|
22
|
+
}
|
|
23
|
+
if (
|
|
24
|
+
response.status === 502 ||
|
|
25
|
+
response.status === 503 ||
|
|
26
|
+
response.status === 504
|
|
27
|
+
) {
|
|
28
|
+
return 'retry-server'
|
|
29
|
+
}
|
|
30
|
+
return 'fail'
|
|
31
|
+
},
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** @public */
|
|
35
|
+
export interface InfoRequestOptions {
|
|
36
|
+
signal?: AbortSignal
|
|
37
|
+
policy?: ResolvedRetryPolicy
|
|
38
|
+
fetchImpl?: typeof fetch
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Resolve the client's retry/fetch config into options for {@link infoRequest}.
|
|
43
|
+
*
|
|
44
|
+
* @public
|
|
45
|
+
*/
|
|
46
|
+
export const hlInfoOptions = (
|
|
47
|
+
client: PerpsSDKClient,
|
|
48
|
+
options?: SDKRequestOptions
|
|
49
|
+
): InfoRequestOptions => ({
|
|
50
|
+
signal: options?.signal,
|
|
51
|
+
policy: resolveRetryPolicy(
|
|
52
|
+
HYPERLIQUID_RETRY_DEFAULTS,
|
|
53
|
+
client.config.retry,
|
|
54
|
+
PROVIDER_KEY
|
|
55
|
+
),
|
|
56
|
+
fetchImpl: client.config.fetch,
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* POST to the Hyperliquid `/info` endpoint and return the parsed JSON body.
|
|
61
|
+
*
|
|
62
|
+
* Direct-to-venue: no proxy, no AJV validation, no cache. The caller's type
|
|
63
|
+
* parameter is trusted; consumers should treat the response shape as
|
|
64
|
+
* upstream-controlled and normalise into `@lifi/perps-types` shapes before
|
|
65
|
+
* surfacing.
|
|
66
|
+
*
|
|
67
|
+
* Non-2xx responses raise a {@link PerpsError} with the Hyperliquid provider key.
|
|
68
|
+
* @public
|
|
69
|
+
*/
|
|
70
|
+
export async function infoRequest<T>(
|
|
71
|
+
apiUrl: string,
|
|
72
|
+
body: Record<string, unknown>,
|
|
73
|
+
options?: InfoRequestOptions
|
|
74
|
+
): Promise<T> {
|
|
75
|
+
const policy = options?.policy ?? HYPERLIQUID_RETRY_DEFAULTS
|
|
76
|
+
|
|
77
|
+
let response: Response
|
|
78
|
+
try {
|
|
79
|
+
response = await fetchWithRetry(
|
|
80
|
+
`${apiUrl}/info`,
|
|
81
|
+
{
|
|
82
|
+
method: 'POST',
|
|
83
|
+
headers: { 'Content-Type': 'application/json' },
|
|
84
|
+
body: JSON.stringify(body),
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
policy,
|
|
88
|
+
fetchImpl: options?.fetchImpl,
|
|
89
|
+
signal: options?.signal,
|
|
90
|
+
}
|
|
91
|
+
)
|
|
92
|
+
} catch (error) {
|
|
93
|
+
const err = new PerpsError(
|
|
94
|
+
PerpsErrorCode.ServerError,
|
|
95
|
+
error instanceof Error ? error.message : 'Hyperliquid info request failed'
|
|
96
|
+
)
|
|
97
|
+
err.tool = PROVIDER_KEY
|
|
98
|
+
throw err
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (!response.ok) {
|
|
102
|
+
const err = new PerpsError(
|
|
103
|
+
PerpsErrorCode.ThirdPartyError,
|
|
104
|
+
`Hyperliquid info request failed: ${response.status}`
|
|
105
|
+
)
|
|
106
|
+
err.tool = PROVIDER_KEY
|
|
107
|
+
throw err
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return (await response.json()) as T
|
|
111
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hyperliquid-specific liquidation price calculation.
|
|
3
|
+
*
|
|
4
|
+
* Uses the exact formula from Hyperliquid docs:
|
|
5
|
+
* https://hyperliquid.gitbook.io/hyperliquid-docs/trading/liquidations
|
|
6
|
+
*
|
|
7
|
+
* liq_price = price - side * margin_available / position_size / (1 - l * side)
|
|
8
|
+
*
|
|
9
|
+
* Where:
|
|
10
|
+
* - l = 1 / (2 * maxLeverage) (maintenance margin fraction)
|
|
11
|
+
* - side = 1 (long) or -1 (short)
|
|
12
|
+
* - margin_available = isolated_margin - maintenance_margin_required
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { estimateIsolatedLiquidationPrice } from '@lifi/perps-sdk'
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Calculate the maintenance margin fraction for a Hyperliquid asset.
|
|
19
|
+
*
|
|
20
|
+
* Maintenance margin is half of the initial margin at max leverage.
|
|
21
|
+
*
|
|
22
|
+
* @param maxLeverage - Maximum leverage for the asset (e.g., 50 for BTC)
|
|
23
|
+
* @returns Maintenance margin fraction (e.g., 0.01 for 50x max leverage),
|
|
24
|
+
* or undefined if maxLeverage is zero
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export function calculateMaintenanceMarginRate(
|
|
28
|
+
maxLeverage: number
|
|
29
|
+
): number | undefined {
|
|
30
|
+
if (maxLeverage === 0) {
|
|
31
|
+
return undefined
|
|
32
|
+
}
|
|
33
|
+
return 1 / (2 * maxLeverage)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Calculate liquidation price using the exact Hyperliquid formula.
|
|
38
|
+
*
|
|
39
|
+
* For isolated margin, new position prediction. For existing positions,
|
|
40
|
+
* prefer Position.liquidationPrice from the API.
|
|
41
|
+
*
|
|
42
|
+
* Formula derivation (isolated margin, single position):
|
|
43
|
+
* margin_per_unit = entryPrice / leverage
|
|
44
|
+
* maintenance_per_unit = entryPrice * mmr
|
|
45
|
+
* margin_available = margin_per_unit - maintenance_per_unit
|
|
46
|
+
* liq_price = entryPrice - side * margin_available / (1 - mmr * side)
|
|
47
|
+
*
|
|
48
|
+
* Where mmr = 1 / (2 * maxLeverage).
|
|
49
|
+
*
|
|
50
|
+
* @param entryPrice - Position entry price
|
|
51
|
+
* @param leverage - User-selected leverage (e.g., 10)
|
|
52
|
+
* @param isLong - True if long position, false if short
|
|
53
|
+
* @param maxLeverage - Asset's maximum leverage (e.g., 50 for BTC). Determines
|
|
54
|
+
* the maintenance margin rate: mmr = 1 / (2 * maxLeverage)
|
|
55
|
+
* @returns Estimated liquidation price, or undefined if inputs are invalid
|
|
56
|
+
* @public
|
|
57
|
+
*/
|
|
58
|
+
export function calculateLiquidationPrice(
|
|
59
|
+
entryPrice: number,
|
|
60
|
+
leverage: number,
|
|
61
|
+
isLong: boolean,
|
|
62
|
+
maxLeverage: number
|
|
63
|
+
): number | undefined {
|
|
64
|
+
const mmr = calculateMaintenanceMarginRate(maxLeverage)
|
|
65
|
+
if (mmr === undefined) {
|
|
66
|
+
return undefined
|
|
67
|
+
}
|
|
68
|
+
return estimateIsolatedLiquidationPrice({
|
|
69
|
+
entryPrice,
|
|
70
|
+
leverage,
|
|
71
|
+
isLong,
|
|
72
|
+
maintenanceMarginRate: mmr,
|
|
73
|
+
})
|
|
74
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ActivityItem,
|
|
3
|
+
DepositActivity,
|
|
4
|
+
FundingActivity,
|
|
5
|
+
LiquidationActivity,
|
|
6
|
+
MarketDisplay,
|
|
7
|
+
TransferActivity,
|
|
8
|
+
WithdrawalActivity,
|
|
9
|
+
} from '@lifi/perps-types'
|
|
10
|
+
import { ActivityType } from '@lifi/perps-types'
|
|
11
|
+
import type { HlFundingUpdate, HlLedgerUpdate } from '../types/index.js'
|
|
12
|
+
import { isSendAssetDelta, isSpotTransferDelta } from '../types/index.js'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Map a Hyperliquid non-funding ledger entry to an ActivityItem.
|
|
16
|
+
*
|
|
17
|
+
* Direction for `spotTransfer` and `sendAsset` is derived from
|
|
18
|
+
* `queriedAddress` matching the delta's `user` (OUT) or `destination` (IN).
|
|
19
|
+
* Returns null for unsupported delta types and for same-user `sendAsset`
|
|
20
|
+
* dex moves (where `user === destination === queriedAddress`).
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
export const mapLedgerEntry = (
|
|
24
|
+
entry: HlLedgerUpdate,
|
|
25
|
+
providerKey: string,
|
|
26
|
+
queriedAddress: string,
|
|
27
|
+
resolveMarket: (coin: string) => MarketDisplay
|
|
28
|
+
): ActivityItem | null => {
|
|
29
|
+
const { delta } = entry
|
|
30
|
+
const base = {
|
|
31
|
+
id: entry.hash,
|
|
32
|
+
provider: providerKey,
|
|
33
|
+
timestamp: new Date(entry.time).toISOString(),
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Handled before the switch: the catch-all arm of `HlLedgerDelta` is a
|
|
37
|
+
// structural supertype of the concrete delta, so a `switch (delta.type)`
|
|
38
|
+
// cannot narrow off the discriminant. The user-defined type guard does.
|
|
39
|
+
if (isSpotTransferDelta(delta)) {
|
|
40
|
+
const queried = queriedAddress.toLowerCase()
|
|
41
|
+
const sender = delta.user.toLowerCase()
|
|
42
|
+
const recipient = delta.destination.toLowerCase()
|
|
43
|
+
const direction: 'IN' | 'OUT' = queried === sender ? 'OUT' : 'IN'
|
|
44
|
+
const counterpartyAddress = direction === 'OUT' ? recipient : sender
|
|
45
|
+
const meta: Record<string, unknown> = {
|
|
46
|
+
transferType: 'spotTransfer',
|
|
47
|
+
}
|
|
48
|
+
if (delta.usdcValue !== undefined) {
|
|
49
|
+
meta.usdcValue = delta.usdcValue
|
|
50
|
+
}
|
|
51
|
+
if (delta.fee !== undefined) {
|
|
52
|
+
meta.fee = delta.fee
|
|
53
|
+
}
|
|
54
|
+
if (delta.nativeTokenFee !== undefined) {
|
|
55
|
+
meta.nativeTokenFee = delta.nativeTokenFee
|
|
56
|
+
}
|
|
57
|
+
if (delta.nonce !== undefined) {
|
|
58
|
+
meta.nonce = delta.nonce
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
...base,
|
|
62
|
+
type: ActivityType.TRANSFER,
|
|
63
|
+
direction,
|
|
64
|
+
counterpartyAddress,
|
|
65
|
+
asset: delta.token,
|
|
66
|
+
amount: delta.amount,
|
|
67
|
+
meta,
|
|
68
|
+
explorerLink: entry.hash
|
|
69
|
+
? `https://app.hyperliquid.xyz/explorer/tx/${entry.hash}`
|
|
70
|
+
: undefined,
|
|
71
|
+
} satisfies TransferActivity
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// `sendAsset` (wire `type === 'send'`) covers cross-user transfers
|
|
75
|
+
// (modelled as TRANSFER) and same-user dex moves (returned as null —
|
|
76
|
+
// overloading TRANSFER for those would lie about direction). Pre-switch
|
|
77
|
+
// narrowing for the same reason as spotTransfer.
|
|
78
|
+
if (isSendAssetDelta(delta)) {
|
|
79
|
+
const queried = queriedAddress.toLowerCase()
|
|
80
|
+
const sender = delta.user.toLowerCase()
|
|
81
|
+
const recipient = delta.destination.toLowerCase()
|
|
82
|
+
|
|
83
|
+
if (sender === recipient && sender === queried) {
|
|
84
|
+
return null
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const direction: 'IN' | 'OUT' = queried === sender ? 'OUT' : 'IN'
|
|
88
|
+
const counterpartyAddress = direction === 'OUT' ? recipient : sender
|
|
89
|
+
const meta: Record<string, unknown> = {
|
|
90
|
+
transferType: 'sendAsset',
|
|
91
|
+
sourceDex: delta.sourceDex,
|
|
92
|
+
destinationDex: delta.destinationDex,
|
|
93
|
+
usdcValue: delta.usdcValue,
|
|
94
|
+
fee: delta.fee,
|
|
95
|
+
nativeTokenFee: delta.nativeTokenFee,
|
|
96
|
+
feeToken: delta.feeToken,
|
|
97
|
+
nonce: delta.nonce,
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
...base,
|
|
101
|
+
type: ActivityType.TRANSFER,
|
|
102
|
+
direction,
|
|
103
|
+
counterpartyAddress,
|
|
104
|
+
asset: delta.token,
|
|
105
|
+
amount: delta.amount,
|
|
106
|
+
meta,
|
|
107
|
+
explorerLink: entry.hash
|
|
108
|
+
? `https://app.hyperliquid.xyz/explorer/tx/${entry.hash}`
|
|
109
|
+
: undefined,
|
|
110
|
+
} satisfies TransferActivity
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
switch (delta.type) {
|
|
114
|
+
case 'deposit':
|
|
115
|
+
return {
|
|
116
|
+
...base,
|
|
117
|
+
type: ActivityType.DEPOSIT,
|
|
118
|
+
amount: delta.usdc ?? '0',
|
|
119
|
+
explorerLink: entry.hash
|
|
120
|
+
? `https://scan.li.fi/tx/${entry.hash}`
|
|
121
|
+
: undefined,
|
|
122
|
+
} satisfies DepositActivity
|
|
123
|
+
|
|
124
|
+
case 'withdraw':
|
|
125
|
+
return {
|
|
126
|
+
...base,
|
|
127
|
+
type: ActivityType.WITHDRAWAL,
|
|
128
|
+
amount: delta.usdc ?? '0',
|
|
129
|
+
fee: (delta as { fee?: string }).fee ?? '0',
|
|
130
|
+
explorerLink: entry.hash
|
|
131
|
+
? `https://scan.li.fi/tx/${entry.hash}`
|
|
132
|
+
: undefined,
|
|
133
|
+
} satisfies WithdrawalActivity
|
|
134
|
+
|
|
135
|
+
case 'liquidation': {
|
|
136
|
+
const d = delta as unknown as {
|
|
137
|
+
type: string
|
|
138
|
+
liquidatedNtlPos: string
|
|
139
|
+
accountValue: string
|
|
140
|
+
leverageType: string
|
|
141
|
+
liquidatedPositions?: { coin: string; szi: string }[]
|
|
142
|
+
}
|
|
143
|
+
const liquidatedPositions = (d.liquidatedPositions ?? []).map((p) => ({
|
|
144
|
+
market: resolveMarket(p.coin),
|
|
145
|
+
size: p.szi,
|
|
146
|
+
}))
|
|
147
|
+
// Liquidation rows must point to at least one market. Drop entries with
|
|
148
|
+
// missing/empty positions so downstream consumers can rely on that
|
|
149
|
+
// invariant and avoid rendering a market-less liquidation card.
|
|
150
|
+
if (liquidatedPositions.length === 0) {
|
|
151
|
+
return null
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
...base,
|
|
155
|
+
type: ActivityType.LIQUIDATION,
|
|
156
|
+
liquidatedNotionalPosition: d.liquidatedNtlPos,
|
|
157
|
+
accountValue: d.accountValue,
|
|
158
|
+
leverageType: d.leverageType,
|
|
159
|
+
liquidatedPositions,
|
|
160
|
+
} satisfies LiquidationActivity
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
default:
|
|
164
|
+
return null
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** @public */
|
|
169
|
+
export const mapFundingActivity = (
|
|
170
|
+
entry: HlFundingUpdate,
|
|
171
|
+
providerKey: string,
|
|
172
|
+
resolveMarket: (coin: string) => MarketDisplay
|
|
173
|
+
): FundingActivity => ({
|
|
174
|
+
id: entry.hash,
|
|
175
|
+
provider: providerKey,
|
|
176
|
+
timestamp: new Date(entry.time).toISOString(),
|
|
177
|
+
type: ActivityType.FUNDING,
|
|
178
|
+
market: resolveMarket(entry.delta.coin),
|
|
179
|
+
amount: entry.delta.usdc,
|
|
180
|
+
positionSize: entry.delta.szi,
|
|
181
|
+
fundingRate: entry.delta.fundingRate,
|
|
182
|
+
})
|