@lifi/perps-sdk-provider-hyperliquid 0.2.0-alpha.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/LICENSE +201 -0
- package/README.md +174 -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 +73 -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,15 @@
|
|
|
1
|
+
export { assetIsSpot, calculateAssetId, getProviderIndex } from './assetId.js';
|
|
2
|
+
export type { InfoRequestOptions } from './infoClient.js';
|
|
3
|
+
export { hlInfoOptions, infoRequest } from './infoClient.js';
|
|
4
|
+
export { calculateLiquidationPrice, calculateMaintenanceMarginRate, } from './liquidation.js';
|
|
5
|
+
export { mapFundingActivity, mapLedgerEntry } from './mapActivity.js';
|
|
6
|
+
export { classifyFillFromPosition, mapFill } from './mapFill.js';
|
|
7
|
+
export { mapMarket } from './mapMarket.js';
|
|
8
|
+
export { mapMarketPrice } from './mapMarketPrice.js';
|
|
9
|
+
export { isTriggerOrder, isTriggerType, mapOpenOrder, mapOrder, mapOrderStatus, mapOrderType, mapStatusReason, mapTriggerOrder, } from './mapOrder.js';
|
|
10
|
+
export { isOpenAssetPosition, mapPosition } from './mapPosition.js';
|
|
11
|
+
export { coinAsset, perpsDexNames } from './marketDisplay.js';
|
|
12
|
+
export { formatOrderPrice, formatOrderSize, getMaxPriceDecimals, } from './orderFormatting.js';
|
|
13
|
+
export { priceStepToAggregation } from './priceStepToAggregation.js';
|
|
14
|
+
export { spotAssetFromToken, spotBalance, spotPriceById, } from './spotBalance.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC9E,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
export { assetIsSpot, calculateAssetId, getProviderIndex } from './assetId.js';
|
|
5
|
+
export { hlInfoOptions, infoRequest } from './infoClient.js';
|
|
6
|
+
export { calculateLiquidationPrice, calculateMaintenanceMarginRate, } from './liquidation.js';
|
|
7
|
+
export { mapFundingActivity, mapLedgerEntry } from './mapActivity.js';
|
|
8
|
+
export { classifyFillFromPosition, mapFill } from './mapFill.js';
|
|
9
|
+
export { mapMarket } from './mapMarket.js';
|
|
10
|
+
export { mapMarketPrice } from './mapMarketPrice.js';
|
|
11
|
+
export { isTriggerOrder, isTriggerType, mapOpenOrder, mapOrder, mapOrderStatus, mapOrderType, mapStatusReason, mapTriggerOrder, } from './mapOrder.js';
|
|
12
|
+
export { isOpenAssetPosition, mapPosition } from './mapPosition.js';
|
|
13
|
+
export { coinAsset, perpsDexNames } from './marketDisplay.js';
|
|
14
|
+
export { formatOrderPrice, formatOrderSize, getMaxPriceDecimals, } from './orderFormatting.js';
|
|
15
|
+
export { priceStepToAggregation } from './priceStepToAggregation.js';
|
|
16
|
+
export { spotAssetFromToken, spotBalance, spotPriceById, } from './spotBalance.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,kDAAkD;AAElD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE9E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type PerpsSDKClient, type ResolvedRetryPolicy, type SDKRequestOptions } from '@lifi/perps-sdk';
|
|
2
|
+
/** @internal */
|
|
3
|
+
export declare const HYPERLIQUID_RETRY_DEFAULTS: ResolvedRetryPolicy;
|
|
4
|
+
/** @public */
|
|
5
|
+
export interface InfoRequestOptions {
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
policy?: ResolvedRetryPolicy;
|
|
8
|
+
fetchImpl?: typeof fetch;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the client's retry/fetch config into options for {@link infoRequest}.
|
|
12
|
+
*
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
export declare const hlInfoOptions: (client: PerpsSDKClient, options?: SDKRequestOptions) => InfoRequestOptions;
|
|
16
|
+
/**
|
|
17
|
+
* POST to the Hyperliquid `/info` endpoint and return the parsed JSON body.
|
|
18
|
+
*
|
|
19
|
+
* Direct-to-venue: no proxy, no AJV validation, no cache. The caller's type
|
|
20
|
+
* parameter is trusted; consumers should treat the response shape as
|
|
21
|
+
* upstream-controlled and normalise into `@lifi/perps-types` shapes before
|
|
22
|
+
* surfacing.
|
|
23
|
+
*
|
|
24
|
+
* Non-2xx responses raise a {@link PerpsError} with the Hyperliquid provider key.
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export declare function infoRequest<T>(apiUrl: string, body: Record<string, unknown>, options?: InfoRequestOptions): Promise<T>;
|
|
28
|
+
//# sourceMappingURL=infoClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infoClient.d.ts","sourceRoot":"","sources":["../../../src/utils/infoClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAExB,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AAIxB,gBAAgB;AAChB,eAAO,MAAM,0BAA0B,EAAE,mBAmBxC,CAAA;AAED,cAAc;AACd,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,cAAc,EACtB,UAAU,iBAAiB,KAC1B,kBAQD,CAAA;AAEF;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAqCZ"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { fetchWithRetry, PerpsError, resolveRetryPolicy, } from '@lifi/perps-sdk';
|
|
2
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
3
|
+
import { PROVIDER_KEY } from '../constants.js';
|
|
4
|
+
/** @internal */
|
|
5
|
+
export const HYPERLIQUID_RETRY_DEFAULTS = {
|
|
6
|
+
enabled: true,
|
|
7
|
+
maxAttempts: 3,
|
|
8
|
+
baseDelayMs: 2_000,
|
|
9
|
+
maxDelayMs: 15_000,
|
|
10
|
+
respectRetryAfter: true,
|
|
11
|
+
classify: ({ response }) => {
|
|
12
|
+
if (response.status === 429) {
|
|
13
|
+
return 'retry-rate-limit';
|
|
14
|
+
}
|
|
15
|
+
if (response.status === 502 ||
|
|
16
|
+
response.status === 503 ||
|
|
17
|
+
response.status === 504) {
|
|
18
|
+
return 'retry-server';
|
|
19
|
+
}
|
|
20
|
+
return 'fail';
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the client's retry/fetch config into options for {@link infoRequest}.
|
|
25
|
+
*
|
|
26
|
+
* @public
|
|
27
|
+
*/
|
|
28
|
+
export const hlInfoOptions = (client, options) => ({
|
|
29
|
+
signal: options?.signal,
|
|
30
|
+
policy: resolveRetryPolicy(HYPERLIQUID_RETRY_DEFAULTS, client.config.retry, PROVIDER_KEY),
|
|
31
|
+
fetchImpl: client.config.fetch,
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* POST to the Hyperliquid `/info` endpoint and return the parsed JSON body.
|
|
35
|
+
*
|
|
36
|
+
* Direct-to-venue: no proxy, no AJV validation, no cache. The caller's type
|
|
37
|
+
* parameter is trusted; consumers should treat the response shape as
|
|
38
|
+
* upstream-controlled and normalise into `@lifi/perps-types` shapes before
|
|
39
|
+
* surfacing.
|
|
40
|
+
*
|
|
41
|
+
* Non-2xx responses raise a {@link PerpsError} with the Hyperliquid provider key.
|
|
42
|
+
* @public
|
|
43
|
+
*/
|
|
44
|
+
export async function infoRequest(apiUrl, body, options) {
|
|
45
|
+
const policy = options?.policy ?? HYPERLIQUID_RETRY_DEFAULTS;
|
|
46
|
+
let response;
|
|
47
|
+
try {
|
|
48
|
+
response = await fetchWithRetry(`${apiUrl}/info`, {
|
|
49
|
+
method: 'POST',
|
|
50
|
+
headers: { 'Content-Type': 'application/json' },
|
|
51
|
+
body: JSON.stringify(body),
|
|
52
|
+
}, {
|
|
53
|
+
policy,
|
|
54
|
+
fetchImpl: options?.fetchImpl,
|
|
55
|
+
signal: options?.signal,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const err = new PerpsError(PerpsErrorCode.ServerError, error instanceof Error ? error.message : 'Hyperliquid info request failed');
|
|
60
|
+
err.tool = PROVIDER_KEY;
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
const err = new PerpsError(PerpsErrorCode.ThirdPartyError, `Hyperliquid info request failed: ${response.status}`);
|
|
65
|
+
err.tool = PROVIDER_KEY;
|
|
66
|
+
throw err;
|
|
67
|
+
}
|
|
68
|
+
return (await response.json());
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=infoClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infoClient.js","sourceRoot":"","sources":["../../../src/utils/infoClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,UAAU,EAGV,kBAAkB,GAEnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,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;AASD;;;;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;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,IAA6B,EAC7B,OAA4B;IAE5B,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,0BAA0B,CAAA;IAE5D,IAAI,QAAkB,CAAA;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,cAAc,CAC7B,GAAG,MAAM,OAAO,EAChB;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,EACD;YACE,MAAM;YACN,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CACF,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,UAAU,CACxB,cAAc,CAAC,WAAW,EAC1B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC,CAC3E,CAAA;QACD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAA;QACvB,MAAM,GAAG,CAAA;IACX,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,IAAI,UAAU,CACxB,cAAc,CAAC,eAAe,EAC9B,oCAAoC,QAAQ,CAAC,MAAM,EAAE,CACtD,CAAA;QACD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAA;QACvB,MAAM,GAAG,CAAA;IACX,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAA;AACrC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
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
|
+
* Calculate the maintenance margin fraction for a Hyperliquid asset.
|
|
16
|
+
*
|
|
17
|
+
* Maintenance margin is half of the initial margin at max leverage.
|
|
18
|
+
*
|
|
19
|
+
* @param maxLeverage - Maximum leverage for the asset (e.g., 50 for BTC)
|
|
20
|
+
* @returns Maintenance margin fraction (e.g., 0.01 for 50x max leverage),
|
|
21
|
+
* or undefined if maxLeverage is zero
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
export declare function calculateMaintenanceMarginRate(maxLeverage: number): number | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Calculate liquidation price using the exact Hyperliquid formula.
|
|
27
|
+
*
|
|
28
|
+
* For isolated margin, new position prediction. For existing positions,
|
|
29
|
+
* prefer Position.liquidationPrice from the API.
|
|
30
|
+
*
|
|
31
|
+
* Formula derivation (isolated margin, single position):
|
|
32
|
+
* margin_per_unit = entryPrice / leverage
|
|
33
|
+
* maintenance_per_unit = entryPrice * mmr
|
|
34
|
+
* margin_available = margin_per_unit - maintenance_per_unit
|
|
35
|
+
* liq_price = entryPrice - side * margin_available / (1 - mmr * side)
|
|
36
|
+
*
|
|
37
|
+
* Where mmr = 1 / (2 * maxLeverage).
|
|
38
|
+
*
|
|
39
|
+
* @param entryPrice - Position entry price
|
|
40
|
+
* @param leverage - User-selected leverage (e.g., 10)
|
|
41
|
+
* @param isLong - True if long position, false if short
|
|
42
|
+
* @param maxLeverage - Asset's maximum leverage (e.g., 50 for BTC). Determines
|
|
43
|
+
* the maintenance margin rate: mmr = 1 / (2 * maxLeverage)
|
|
44
|
+
* @returns Estimated liquidation price, or undefined if inputs are invalid
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
export declare function calculateLiquidationPrice(entryPrice: number, leverage: number, isLong: boolean, maxLeverage: number): number | undefined;
|
|
48
|
+
//# sourceMappingURL=liquidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"liquidation.d.ts","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAKpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAWpB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
import { estimateIsolatedLiquidationPrice } from '@lifi/perps-sdk';
|
|
15
|
+
/**
|
|
16
|
+
* Calculate the maintenance margin fraction for a Hyperliquid asset.
|
|
17
|
+
*
|
|
18
|
+
* Maintenance margin is half of the initial margin at max leverage.
|
|
19
|
+
*
|
|
20
|
+
* @param maxLeverage - Maximum leverage for the asset (e.g., 50 for BTC)
|
|
21
|
+
* @returns Maintenance margin fraction (e.g., 0.01 for 50x max leverage),
|
|
22
|
+
* or undefined if maxLeverage is zero
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
export function calculateMaintenanceMarginRate(maxLeverage) {
|
|
26
|
+
if (maxLeverage === 0) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
return 1 / (2 * maxLeverage);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Calculate liquidation price using the exact Hyperliquid formula.
|
|
33
|
+
*
|
|
34
|
+
* For isolated margin, new position prediction. For existing positions,
|
|
35
|
+
* prefer Position.liquidationPrice from the API.
|
|
36
|
+
*
|
|
37
|
+
* Formula derivation (isolated margin, single position):
|
|
38
|
+
* margin_per_unit = entryPrice / leverage
|
|
39
|
+
* maintenance_per_unit = entryPrice * mmr
|
|
40
|
+
* margin_available = margin_per_unit - maintenance_per_unit
|
|
41
|
+
* liq_price = entryPrice - side * margin_available / (1 - mmr * side)
|
|
42
|
+
*
|
|
43
|
+
* Where mmr = 1 / (2 * maxLeverage).
|
|
44
|
+
*
|
|
45
|
+
* @param entryPrice - Position entry price
|
|
46
|
+
* @param leverage - User-selected leverage (e.g., 10)
|
|
47
|
+
* @param isLong - True if long position, false if short
|
|
48
|
+
* @param maxLeverage - Asset's maximum leverage (e.g., 50 for BTC). Determines
|
|
49
|
+
* the maintenance margin rate: mmr = 1 / (2 * maxLeverage)
|
|
50
|
+
* @returns Estimated liquidation price, or undefined if inputs are invalid
|
|
51
|
+
* @public
|
|
52
|
+
*/
|
|
53
|
+
export function calculateLiquidationPrice(entryPrice, leverage, isLong, maxLeverage) {
|
|
54
|
+
const mmr = calculateMaintenanceMarginRate(maxLeverage);
|
|
55
|
+
if (mmr === undefined) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
return estimateIsolatedLiquidationPrice({
|
|
59
|
+
entryPrice,
|
|
60
|
+
leverage,
|
|
61
|
+
isLong,
|
|
62
|
+
maintenanceMarginRate: mmr,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=liquidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"liquidation.js","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAA;AAElE;;;;;;;;;GASG;AACH,MAAM,UAAU,8BAA8B,CAC5C,WAAmB;IAEnB,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAA;AAC9B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAAkB,EAClB,QAAgB,EAChB,MAAe,EACf,WAAmB;IAEnB,MAAM,GAAG,GAAG,8BAA8B,CAAC,WAAW,CAAC,CAAA;IACvD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,gCAAgC,CAAC;QACtC,UAAU;QACV,QAAQ;QACR,MAAM;QACN,qBAAqB,EAAE,GAAG;KAC3B,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ActivityItem, FundingActivity, MarketDisplay } from '@lifi/perps-types';
|
|
2
|
+
import type { HlFundingUpdate, HlLedgerUpdate } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Map a Hyperliquid non-funding ledger entry to an ActivityItem.
|
|
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-user `sendAsset`
|
|
9
|
+
* dex moves (where `user === destination === queriedAddress`).
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export declare const mapLedgerEntry: (entry: HlLedgerUpdate, providerKey: string, queriedAddress: string, resolveMarket: (coin: string) => MarketDisplay) => ActivityItem | null;
|
|
13
|
+
/** @public */
|
|
14
|
+
export declare const mapFundingActivity: (entry: HlFundingUpdate, providerKey: string, resolveMarket: (coin: string) => MarketDisplay) => FundingActivity;
|
|
15
|
+
//# sourceMappingURL=mapActivity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapActivity.d.ts","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EAEf,aAAa,EAGd,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGxE;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,cAAc,EACrB,aAAa,MAAM,EACnB,gBAAgB,MAAM,EACtB,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,KAC7C,YAAY,GAAG,IA0IjB,CAAA;AAED,cAAc;AACd,eAAO,MAAM,kBAAkB,GAC7B,OAAO,eAAe,EACtB,aAAa,MAAM,EACnB,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,KAC7C,eASD,CAAA"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { ActivityType } from '@lifi/perps-types';
|
|
2
|
+
import { isSendAssetDelta, isSpotTransferDelta } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Map a Hyperliquid non-funding ledger entry to an ActivityItem.
|
|
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-user `sendAsset`
|
|
9
|
+
* dex moves (where `user === destination === queriedAddress`).
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export const mapLedgerEntry = (entry, providerKey, queriedAddress, resolveMarket) => {
|
|
13
|
+
const { delta } = entry;
|
|
14
|
+
const base = {
|
|
15
|
+
id: entry.hash,
|
|
16
|
+
provider: providerKey,
|
|
17
|
+
timestamp: new Date(entry.time).toISOString(),
|
|
18
|
+
};
|
|
19
|
+
// Handled before the switch: the catch-all arm of `HlLedgerDelta` is a
|
|
20
|
+
// structural supertype of the concrete delta, so a `switch (delta.type)`
|
|
21
|
+
// cannot narrow off the discriminant. The user-defined type guard does.
|
|
22
|
+
if (isSpotTransferDelta(delta)) {
|
|
23
|
+
const queried = queriedAddress.toLowerCase();
|
|
24
|
+
const sender = delta.user.toLowerCase();
|
|
25
|
+
const recipient = delta.destination.toLowerCase();
|
|
26
|
+
const direction = queried === sender ? 'OUT' : 'IN';
|
|
27
|
+
const counterpartyAddress = direction === 'OUT' ? recipient : sender;
|
|
28
|
+
const meta = {
|
|
29
|
+
transferType: 'spotTransfer',
|
|
30
|
+
};
|
|
31
|
+
if (delta.usdcValue !== undefined) {
|
|
32
|
+
meta.usdcValue = delta.usdcValue;
|
|
33
|
+
}
|
|
34
|
+
if (delta.fee !== undefined) {
|
|
35
|
+
meta.fee = delta.fee;
|
|
36
|
+
}
|
|
37
|
+
if (delta.nativeTokenFee !== undefined) {
|
|
38
|
+
meta.nativeTokenFee = delta.nativeTokenFee;
|
|
39
|
+
}
|
|
40
|
+
if (delta.nonce !== undefined) {
|
|
41
|
+
meta.nonce = delta.nonce;
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
...base,
|
|
45
|
+
type: ActivityType.TRANSFER,
|
|
46
|
+
direction,
|
|
47
|
+
counterpartyAddress,
|
|
48
|
+
asset: delta.token,
|
|
49
|
+
amount: delta.amount,
|
|
50
|
+
meta,
|
|
51
|
+
explorerLink: entry.hash
|
|
52
|
+
? `https://app.hyperliquid.xyz/explorer/tx/${entry.hash}`
|
|
53
|
+
: undefined,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// `sendAsset` (wire `type === 'send'`) covers cross-user transfers
|
|
57
|
+
// (modelled as TRANSFER) and same-user dex moves (returned as null —
|
|
58
|
+
// overloading TRANSFER for those would lie about direction). Pre-switch
|
|
59
|
+
// narrowing for the same reason as spotTransfer.
|
|
60
|
+
if (isSendAssetDelta(delta)) {
|
|
61
|
+
const queried = queriedAddress.toLowerCase();
|
|
62
|
+
const sender = delta.user.toLowerCase();
|
|
63
|
+
const recipient = delta.destination.toLowerCase();
|
|
64
|
+
if (sender === recipient && sender === queried) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const direction = queried === sender ? 'OUT' : 'IN';
|
|
68
|
+
const counterpartyAddress = direction === 'OUT' ? recipient : sender;
|
|
69
|
+
const meta = {
|
|
70
|
+
transferType: 'sendAsset',
|
|
71
|
+
sourceDex: delta.sourceDex,
|
|
72
|
+
destinationDex: delta.destinationDex,
|
|
73
|
+
usdcValue: delta.usdcValue,
|
|
74
|
+
fee: delta.fee,
|
|
75
|
+
nativeTokenFee: delta.nativeTokenFee,
|
|
76
|
+
feeToken: delta.feeToken,
|
|
77
|
+
nonce: delta.nonce,
|
|
78
|
+
};
|
|
79
|
+
return {
|
|
80
|
+
...base,
|
|
81
|
+
type: ActivityType.TRANSFER,
|
|
82
|
+
direction,
|
|
83
|
+
counterpartyAddress,
|
|
84
|
+
asset: delta.token,
|
|
85
|
+
amount: delta.amount,
|
|
86
|
+
meta,
|
|
87
|
+
explorerLink: entry.hash
|
|
88
|
+
? `https://app.hyperliquid.xyz/explorer/tx/${entry.hash}`
|
|
89
|
+
: undefined,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
switch (delta.type) {
|
|
93
|
+
case 'deposit':
|
|
94
|
+
return {
|
|
95
|
+
...base,
|
|
96
|
+
type: ActivityType.DEPOSIT,
|
|
97
|
+
amount: delta.usdc ?? '0',
|
|
98
|
+
explorerLink: entry.hash
|
|
99
|
+
? `https://scan.li.fi/tx/${entry.hash}`
|
|
100
|
+
: undefined,
|
|
101
|
+
};
|
|
102
|
+
case 'withdraw':
|
|
103
|
+
return {
|
|
104
|
+
...base,
|
|
105
|
+
type: ActivityType.WITHDRAWAL,
|
|
106
|
+
amount: delta.usdc ?? '0',
|
|
107
|
+
fee: delta.fee ?? '0',
|
|
108
|
+
explorerLink: entry.hash
|
|
109
|
+
? `https://scan.li.fi/tx/${entry.hash}`
|
|
110
|
+
: undefined,
|
|
111
|
+
};
|
|
112
|
+
case 'liquidation': {
|
|
113
|
+
const d = delta;
|
|
114
|
+
const liquidatedPositions = (d.liquidatedPositions ?? []).map((p) => ({
|
|
115
|
+
market: resolveMarket(p.coin),
|
|
116
|
+
size: p.szi,
|
|
117
|
+
}));
|
|
118
|
+
// Liquidation rows must point to at least one market. Drop entries with
|
|
119
|
+
// missing/empty positions so downstream consumers can rely on that
|
|
120
|
+
// invariant and avoid rendering a market-less liquidation card.
|
|
121
|
+
if (liquidatedPositions.length === 0) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
...base,
|
|
126
|
+
type: ActivityType.LIQUIDATION,
|
|
127
|
+
liquidatedNotionalPosition: d.liquidatedNtlPos,
|
|
128
|
+
accountValue: d.accountValue,
|
|
129
|
+
leverageType: d.leverageType,
|
|
130
|
+
liquidatedPositions,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
default:
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
/** @public */
|
|
138
|
+
export const mapFundingActivity = (entry, providerKey, resolveMarket) => ({
|
|
139
|
+
id: entry.hash,
|
|
140
|
+
provider: providerKey,
|
|
141
|
+
timestamp: new Date(entry.time).toISOString(),
|
|
142
|
+
type: ActivityType.FUNDING,
|
|
143
|
+
market: resolveMarket(entry.delta.coin),
|
|
144
|
+
amount: entry.delta.usdc,
|
|
145
|
+
positionSize: entry.delta.szi,
|
|
146
|
+
fundingRate: entry.delta.fundingRate,
|
|
147
|
+
});
|
|
148
|
+
//# sourceMappingURL=mapActivity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapActivity.js","sourceRoot":"","sources":["../../../src/utils/mapActivity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { classifyFillFromPosition } from '@lifi/perps-sdk';
|
|
2
|
+
import type { Fill, MarketDisplay } from '@lifi/perps-types';
|
|
3
|
+
import type { HlUserFill } from '../types/index.js';
|
|
4
|
+
export { classifyFillFromPosition };
|
|
5
|
+
/**
|
|
6
|
+
* Spot-ness comes from the resolved market's category, not the coin string —
|
|
7
|
+
* HL's canonical spot pair 0 is addressed as `PURR/USDC`, not `@0`.
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export declare const mapFill: (fill: HlUserFill, market: MarketDisplay) => Fill;
|
|
11
|
+
//# sourceMappingURL=mapFill.d.ts.map
|
|
@@ -0,0 +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;AAS5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,QAAQ,aAAa,KAAG,IAwBhE,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { classifyFillFromPosition, ExplorerChainId, explorerTxUrl, } from '@lifi/perps-sdk';
|
|
2
|
+
import { FillClassification, FillStatus, LiquidityRole, OrderSide, OrderType, } from '@lifi/perps-types';
|
|
3
|
+
import { SPOT_MARKET_ID } from '../constants.js';
|
|
4
|
+
export { classifyFillFromPosition };
|
|
5
|
+
/**
|
|
6
|
+
* Spot-ness comes from the resolved market's category, not the coin string —
|
|
7
|
+
* HL's canonical spot pair 0 is addressed as `PURR/USDC`, not `@0`.
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export const mapFill = (fill, market) => ({
|
|
11
|
+
...(market.categoryId === SPOT_MARKET_ID
|
|
12
|
+
? { realizedPnl: fill.closedPnl }
|
|
13
|
+
: { realizedPnl: fill.closedPnl === '0' ? null : fill.closedPnl }),
|
|
14
|
+
id: String(fill.tid),
|
|
15
|
+
orderId: String(fill.oid),
|
|
16
|
+
market,
|
|
17
|
+
side: fill.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
|
|
18
|
+
type: fill.dir?.includes('Limit') ? OrderType.LIMIT : OrderType.MARKET,
|
|
19
|
+
size: fill.sz,
|
|
20
|
+
price: fill.px,
|
|
21
|
+
status: FillStatus.FILLED,
|
|
22
|
+
liquidity: fill.crossed ? LiquidityRole.TAKER : LiquidityRole.MAKER,
|
|
23
|
+
filledSize: fill.sz,
|
|
24
|
+
fee: fill.fee,
|
|
25
|
+
startPosition: fill.startPosition,
|
|
26
|
+
explorerLink: explorerTxUrl(ExplorerChainId.HYPERLIQUID, fill.hash),
|
|
27
|
+
classification: market.categoryId === SPOT_MARKET_ID
|
|
28
|
+
? fill.side === 'B'
|
|
29
|
+
? FillClassification.SPOT_BUY
|
|
30
|
+
: FillClassification.SPOT_SELL
|
|
31
|
+
: classifyFillFromPosition(fill.startPosition, fill.side, fill.sz),
|
|
32
|
+
createdAt: new Date(fill.time).toISOString(),
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=mapFill.js.map
|
|
@@ -0,0 +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,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,GACV,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,MAAqB,EAAQ,EAAE,CAAC,CAAC;IACzE,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc;QACtC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;QACjC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACpE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACzB,MAAM;IACN,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI;IACxD,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;IACtE,IAAI,EAAE,IAAI,CAAC,EAAE;IACb,KAAK,EAAE,IAAI,CAAC,EAAE;IACd,MAAM,EAAE,UAAU,CAAC,MAAM;IACzB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK;IACnE,UAAU,EAAE,IAAI,CAAC,EAAE;IACnB,GAAG,EAAE,IAAI,CAAC,GAAG;IACb,aAAa,EAAE,IAAI,CAAC,aAAa;IACjC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;IACnE,cAAc,EACZ,MAAM,CAAC,UAAU,KAAK,cAAc;QAClC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG;YACjB,CAAC,CAAC,kBAAkB,CAAC,QAAQ;YAC7B,CAAC,CAAC,kBAAkB,CAAC,SAAS;QAChC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IACtE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;CAC7C,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PerpsMarket } from '@lifi/perps-types';
|
|
2
|
+
import type { HlUniverseItem } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Map a Hyperliquid universe entry to a {@link PerpsMarket}'s static instrument
|
|
5
|
+
* metadata. Live mark/stats fields live on the `/prices` item — see
|
|
6
|
+
* {@link mapMarketPrice}. `categoryId` is the `Provider.categories[].id` of the
|
|
7
|
+
* dex the entry was fetched from — known to the caller at fetch time, never
|
|
8
|
+
* re-derived from the coin string.
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export declare const mapMarket: (universe: HlUniverseItem, categoryId: string) => PerpsMarket;
|
|
12
|
+
//# sourceMappingURL=mapMarket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapMarket.d.ts","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAQvD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU,cAAc,EACxB,YAAY,MAAM,KACjB,WAWD,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { PROVIDER_KEY } from '../constants.js';
|
|
2
|
+
import { calculateMaintenanceMarginRate } from './liquidation.js';
|
|
3
|
+
import { coinAsset } from './marketDisplay.js';
|
|
4
|
+
import { getMaxPriceDecimals } from './orderFormatting.js';
|
|
5
|
+
/** Hyperliquid quotes every perp market in USDC. */
|
|
6
|
+
const QUOTE_SYMBOL = 'USDC';
|
|
7
|
+
/**
|
|
8
|
+
* Map a Hyperliquid universe entry to a {@link PerpsMarket}'s static instrument
|
|
9
|
+
* metadata. Live mark/stats fields live on the `/prices` item — see
|
|
10
|
+
* {@link mapMarketPrice}. `categoryId` is the `Provider.categories[].id` of the
|
|
11
|
+
* dex the entry was fetched from — known to the caller at fetch time, never
|
|
12
|
+
* re-derived from the coin string.
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
export const mapMarket = (universe, categoryId) => ({
|
|
16
|
+
providerId: PROVIDER_KEY,
|
|
17
|
+
id: universe.name,
|
|
18
|
+
categoryId,
|
|
19
|
+
baseAsset: coinAsset(universe.name),
|
|
20
|
+
quoteAsset: coinAsset(QUOTE_SYMBOL),
|
|
21
|
+
szDecimals: universe.szDecimals,
|
|
22
|
+
priceDecimals: getMaxPriceDecimals(universe.szDecimals),
|
|
23
|
+
maxLeverage: universe.maxLeverage,
|
|
24
|
+
onlyIsolated: universe.onlyIsolated === true,
|
|
25
|
+
maintenanceMarginRate: calculateMaintenanceMarginRate(universe.maxLeverage),
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=mapMarket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapMarket.js","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,oDAAoD;AACpD,MAAM,YAAY,GAAG,MAAM,CAAA;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAwB,EACxB,UAAkB,EACL,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,QAAQ,CAAC,IAAI;IACjB,UAAU;IACV,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;IACnC,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC;IACnC,UAAU,EAAE,QAAQ,CAAC,UAAU;IAC/B,aAAa,EAAE,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC;IACvD,WAAW,EAAE,QAAQ,CAAC,WAAW;IACjC,YAAY,EAAE,QAAQ,CAAC,YAAY,KAAK,IAAI;IAC5C,qBAAqB,EAAE,8BAA8B,CAAC,QAAQ,CAAC,WAAW,CAAC;CAC5E,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MarketPrice } from '@lifi/perps-types';
|
|
2
|
+
import type { HlAssetCtx } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Map a Hyperliquid asset context plus its mid to a {@link MarketPrice} — the
|
|
5
|
+
* live mark/stats data for the `/prices` item. `mid` is the market mid from
|
|
6
|
+
* `allMids`, known to the caller; `HlAssetCtx` carries no mid of its own.
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export declare const mapMarketPrice: (marketId: string, assetCtx: HlAssetCtx, mid: string) => MarketPrice;
|
|
10
|
+
//# sourceMappingURL=mapMarketPrice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapMarketPrice.d.ts","sourceRoot":"","sources":["../../../src/utils/mapMarketPrice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAInD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,UAAU,MAAM,EAChB,UAAU,UAAU,EACpB,KAAK,MAAM,KACV,WAiBF,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const NEXT_FUNDING_INTERVAL_MS = 60 * 60 * 1000; // 1 hour
|
|
2
|
+
/**
|
|
3
|
+
* Map a Hyperliquid asset context plus its mid to a {@link MarketPrice} — the
|
|
4
|
+
* live mark/stats data for the `/prices` item. `mid` is the market mid from
|
|
5
|
+
* `allMids`, known to the caller; `HlAssetCtx` carries no mid of its own.
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export const mapMarketPrice = (marketId, assetCtx, mid) => {
|
|
9
|
+
const now = Date.now();
|
|
10
|
+
const nextFundingTime = Math.ceil(now / NEXT_FUNDING_INTERVAL_MS) * NEXT_FUNDING_INTERVAL_MS;
|
|
11
|
+
return {
|
|
12
|
+
marketId,
|
|
13
|
+
price: mid,
|
|
14
|
+
markPrice: assetCtx.markPx,
|
|
15
|
+
prevDayPrice: assetCtx.prevDayPx,
|
|
16
|
+
volume24h: assetCtx.dayNtlVlm,
|
|
17
|
+
openInterest: assetCtx.openInterest,
|
|
18
|
+
funding: {
|
|
19
|
+
rate: assetCtx.funding,
|
|
20
|
+
nextFundingTime,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=mapMarketPrice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapMarketPrice.js","sourceRoot":"","sources":["../../../src/utils/mapMarketPrice.ts"],"names":[],"mappings":"AAGA,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,SAAS;AAEzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,QAAgB,EAChB,QAAoB,EACpB,GAAW,EACE,EAAE;IACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,eAAe,GACnB,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,wBAAwB,CAAC,GAAG,wBAAwB,CAAA;IAEtE,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,GAAG;QACV,SAAS,EAAE,QAAQ,CAAC,MAAM;QAC1B,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ,CAAC,OAAO;YACtB,eAAe;SAChB;KACF,CAAA;AACH,CAAC,CAAA"}
|