@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,49 @@
|
|
|
1
|
+
import type { MarketDisplay, OpenOrder, Order, TriggerOrder } from '@lifi/perps-types';
|
|
2
|
+
import { OrderStatus, OrderType } from '@lifi/perps-types';
|
|
3
|
+
import type { HlFrontendOpenOrder, HlOrderDetail } from '../types/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Map a Hyperliquid orderType string to the OrderType enum.
|
|
6
|
+
*
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export declare const mapOrderType: (orderType: string) => OrderType;
|
|
10
|
+
/** @public */
|
|
11
|
+
export declare const isTriggerType: (type: OrderType) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Decide whether a raw Hyperliquid order belongs in the cross-provider
|
|
14
|
+
* `triggerOrders` bucket. Single source of truth for both the REST
|
|
15
|
+
* `getOrders` path (`HlFrontendOpenOrder` payload) and the `orderUpdates`
|
|
16
|
+
* WS handler (`HlOrderDetail.order`, a strict subset).
|
|
17
|
+
*
|
|
18
|
+
* Authoritative signals, in order:
|
|
19
|
+
* 1. `isTrigger` — REST-only boolean Hyperliquid sets on
|
|
20
|
+
* `frontendOpenOrders`. Definitive when present.
|
|
21
|
+
* 2. `isPositionTpsl` — REST-only flag for TP/SL legs attached to a
|
|
22
|
+
* position.
|
|
23
|
+
* 3. `triggerCondition !== 'N/A'` — present on both REST and WS payloads.
|
|
24
|
+
* Non-trigger orders carry the literal `'N/A'`.
|
|
25
|
+
* 4. `triggerPx` non-null and non-zero — present on both. The reliable
|
|
26
|
+
* trigger signal on the WS wire when `orderType` lies (HL pushes
|
|
27
|
+
* `'Limit'` for a freshly-placed TP/SL until REST refetch lands the
|
|
28
|
+
* corrected type).
|
|
29
|
+
* 5. `orderType` — final fall-back via `isTriggerType`.
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
export declare const isTriggerOrder: (o: HlFrontendOpenOrder | HlOrderDetail["order"]) => boolean;
|
|
33
|
+
/** @public */
|
|
34
|
+
export declare const mapOpenOrder: (o: HlFrontendOpenOrder, market: MarketDisplay) => OpenOrder;
|
|
35
|
+
/** @public */
|
|
36
|
+
export declare const mapTriggerOrder: (o: HlFrontendOpenOrder, market: MarketDisplay) => TriggerOrder;
|
|
37
|
+
/** @public */
|
|
38
|
+
export declare const mapOrderStatus: (status: string) => OrderStatus;
|
|
39
|
+
/**
|
|
40
|
+
* Map a raw Hyperliquid order status to a short English sentence
|
|
41
|
+
* describing *why* the order ended in a terminal non-FILLED state. Bare
|
|
42
|
+
* `canceled`/`cancelled`/`rejected` carry no actionable detail and
|
|
43
|
+
* return `undefined`; so do non-terminal and unknown values.
|
|
44
|
+
* @public
|
|
45
|
+
*/
|
|
46
|
+
export declare const mapStatusReason: (status: string) => string | undefined;
|
|
47
|
+
/** @public */
|
|
48
|
+
export declare const mapOrder: (detail: HlOrderDetail, market: MarketDisplay) => Order;
|
|
49
|
+
//# sourceMappingURL=mapOrder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,KAAK,EACL,YAAY,EACb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAEL,WAAW,EACX,SAAS,EAEV,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE3E;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,KAAG,SAehD,CAAA;AAED,cAAc;AACd,eAAO,MAAM,aAAa,GAAI,MAAM,SAAS,KAAG,OAIjB,CAAA;AAE/B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,cAAc,GACzB,GAAG,mBAAmB,GAAG,aAAa,CAAC,OAAO,CAAC,KAC9C,OAkBF,CAAA;AAED,cAAc;AACd,eAAO,MAAM,YAAY,GACvB,GAAG,mBAAmB,EACtB,QAAQ,aAAa,KACpB,SAaD,CAAA;AAEF,cAAc;AACd,eAAO,MAAM,eAAe,GAC1B,GAAG,mBAAmB,EACtB,QAAQ,aAAa,KACpB,YAcF,CAAA;AAED,cAAc;AACd,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,WAmB/C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,SAuBzD,CAAA;AAeD,cAAc;AACd,eAAO,MAAM,QAAQ,GACnB,QAAQ,aAAa,EACrB,QAAQ,aAAa,KACpB,KAsBF,CAAA"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { OrderSide, OrderStatus, OrderType, TimeInForce, } from '@lifi/perps-types';
|
|
2
|
+
/**
|
|
3
|
+
* Map a Hyperliquid orderType string to the OrderType enum.
|
|
4
|
+
*
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export const mapOrderType = (orderType) => {
|
|
8
|
+
switch (orderType) {
|
|
9
|
+
case 'Take Profit Market':
|
|
10
|
+
return OrderType.TAKE_PROFIT_MARKET;
|
|
11
|
+
case 'Take Profit Limit':
|
|
12
|
+
return OrderType.TAKE_PROFIT_LIMIT;
|
|
13
|
+
case 'Stop Market':
|
|
14
|
+
return OrderType.STOP_MARKET;
|
|
15
|
+
case 'Stop Limit':
|
|
16
|
+
return OrderType.STOP_LIMIT;
|
|
17
|
+
case 'Market':
|
|
18
|
+
return OrderType.MARKET;
|
|
19
|
+
default:
|
|
20
|
+
return OrderType.LIMIT;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
/** @public */
|
|
24
|
+
export const isTriggerType = (type) => type === OrderType.TAKE_PROFIT_MARKET ||
|
|
25
|
+
type === OrderType.TAKE_PROFIT_LIMIT ||
|
|
26
|
+
type === OrderType.STOP_MARKET ||
|
|
27
|
+
type === OrderType.STOP_LIMIT;
|
|
28
|
+
/**
|
|
29
|
+
* Decide whether a raw Hyperliquid order belongs in the cross-provider
|
|
30
|
+
* `triggerOrders` bucket. Single source of truth for both the REST
|
|
31
|
+
* `getOrders` path (`HlFrontendOpenOrder` payload) and the `orderUpdates`
|
|
32
|
+
* WS handler (`HlOrderDetail.order`, a strict subset).
|
|
33
|
+
*
|
|
34
|
+
* Authoritative signals, in order:
|
|
35
|
+
* 1. `isTrigger` — REST-only boolean Hyperliquid sets on
|
|
36
|
+
* `frontendOpenOrders`. Definitive when present.
|
|
37
|
+
* 2. `isPositionTpsl` — REST-only flag for TP/SL legs attached to a
|
|
38
|
+
* position.
|
|
39
|
+
* 3. `triggerCondition !== 'N/A'` — present on both REST and WS payloads.
|
|
40
|
+
* Non-trigger orders carry the literal `'N/A'`.
|
|
41
|
+
* 4. `triggerPx` non-null and non-zero — present on both. The reliable
|
|
42
|
+
* trigger signal on the WS wire when `orderType` lies (HL pushes
|
|
43
|
+
* `'Limit'` for a freshly-placed TP/SL until REST refetch lands the
|
|
44
|
+
* corrected type).
|
|
45
|
+
* 5. `orderType` — final fall-back via `isTriggerType`.
|
|
46
|
+
* @public
|
|
47
|
+
*/
|
|
48
|
+
export const isTriggerOrder = (o) => {
|
|
49
|
+
if ('isTrigger' in o && o.isTrigger === true) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
if ('isPositionTpsl' in o && o.isPositionTpsl === true) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
if (o.triggerCondition && o.triggerCondition !== 'N/A') {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
if (o.triggerPx != null &&
|
|
59
|
+
o.triggerPx !== '' &&
|
|
60
|
+
parseFloat(o.triggerPx) > 0) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
return isTriggerType(mapOrderType(o.orderType));
|
|
64
|
+
};
|
|
65
|
+
/** @public */
|
|
66
|
+
export const mapOpenOrder = (o, market) => ({
|
|
67
|
+
orderId: String(o.oid),
|
|
68
|
+
market,
|
|
69
|
+
side: o.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
|
|
70
|
+
type: mapOrderType(o.orderType),
|
|
71
|
+
size: o.sz,
|
|
72
|
+
price: o.limitPx,
|
|
73
|
+
filledSize: o.origSz
|
|
74
|
+
? (parseFloat(o.origSz) - parseFloat(o.sz)).toString()
|
|
75
|
+
: '0',
|
|
76
|
+
reduceOnly: o.reduceOnly ?? false,
|
|
77
|
+
label: o.isTrigger ? o.triggerCondition : undefined,
|
|
78
|
+
createdAt: new Date(o.timestamp).toISOString(),
|
|
79
|
+
});
|
|
80
|
+
/** @public */
|
|
81
|
+
export const mapTriggerOrder = (o, market) => {
|
|
82
|
+
const type = mapOrderType(o.orderType);
|
|
83
|
+
const isLimit = type === OrderType.TAKE_PROFIT_LIMIT || type === OrderType.STOP_LIMIT;
|
|
84
|
+
return {
|
|
85
|
+
orderId: String(o.oid),
|
|
86
|
+
market,
|
|
87
|
+
type,
|
|
88
|
+
size: o.sz,
|
|
89
|
+
triggerPrice: o.triggerPx,
|
|
90
|
+
...(isLimit ? { limitPrice: o.limitPx } : {}),
|
|
91
|
+
label: o.triggerCondition,
|
|
92
|
+
createdAt: new Date(o.timestamp).toISOString(),
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
/** @public */
|
|
96
|
+
export const mapOrderStatus = (status) => {
|
|
97
|
+
switch (status) {
|
|
98
|
+
case 'open':
|
|
99
|
+
case 'resting':
|
|
100
|
+
return OrderStatus.OPEN;
|
|
101
|
+
case 'filled':
|
|
102
|
+
return OrderStatus.FILLED;
|
|
103
|
+
case 'canceled':
|
|
104
|
+
case 'cancelled':
|
|
105
|
+
return OrderStatus.CANCELLED;
|
|
106
|
+
case 'rejected':
|
|
107
|
+
return OrderStatus.REJECTED;
|
|
108
|
+
case 'triggered':
|
|
109
|
+
return OrderStatus.TRIGGERED;
|
|
110
|
+
case 'marginCanceled':
|
|
111
|
+
return OrderStatus.CANCELLED;
|
|
112
|
+
default:
|
|
113
|
+
return OrderStatus.PENDING;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Map a raw Hyperliquid order status to a short English sentence
|
|
118
|
+
* describing *why* the order ended in a terminal non-FILLED state. Bare
|
|
119
|
+
* `canceled`/`cancelled`/`rejected` carry no actionable detail and
|
|
120
|
+
* return `undefined`; so do non-terminal and unknown values.
|
|
121
|
+
* @public
|
|
122
|
+
*/
|
|
123
|
+
export const mapStatusReason = (status) => {
|
|
124
|
+
switch (status) {
|
|
125
|
+
case 'iocCanceled':
|
|
126
|
+
return 'Order cancelled: not enough liquidity to fill immediately.';
|
|
127
|
+
case 'reduceOnlyCanceled':
|
|
128
|
+
return 'Order cancelled: would not reduce your position.';
|
|
129
|
+
case 'marginCanceled':
|
|
130
|
+
return 'Order cancelled: insufficient margin.';
|
|
131
|
+
case 'liquidatedCanceled':
|
|
132
|
+
return 'Order cancelled: account was liquidated.';
|
|
133
|
+
case 'siblingFilledCanceled':
|
|
134
|
+
return 'Order cancelled: sibling OCO order filled first.';
|
|
135
|
+
case 'selfTradeCanceled':
|
|
136
|
+
return 'Order cancelled: would self-trade against your own resting order.';
|
|
137
|
+
case 'tickRejected':
|
|
138
|
+
return 'Order rejected: price did not match the tick size.';
|
|
139
|
+
case 'minTradeNtlRejected':
|
|
140
|
+
return 'Order rejected: notional value below the minimum trade size.';
|
|
141
|
+
case 'delistedRejected':
|
|
142
|
+
return 'Order rejected: market has been delisted.';
|
|
143
|
+
default:
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const mapTimeInForce = (tif) => {
|
|
148
|
+
switch (tif) {
|
|
149
|
+
case 'Gtc':
|
|
150
|
+
return TimeInForce.GTC;
|
|
151
|
+
case 'Ioc':
|
|
152
|
+
return TimeInForce.IOC;
|
|
153
|
+
case 'Alo':
|
|
154
|
+
return TimeInForce.POST_ONLY;
|
|
155
|
+
default:
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
/** @public */
|
|
160
|
+
export const mapOrder = (detail, market) => {
|
|
161
|
+
const o = detail.order;
|
|
162
|
+
const filled = parseFloat(o.origSz) - parseFloat(o.sz);
|
|
163
|
+
return {
|
|
164
|
+
orderId: String(o.oid),
|
|
165
|
+
market,
|
|
166
|
+
side: o.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
|
|
167
|
+
type: mapOrderType(o.orderType),
|
|
168
|
+
price: o.limitPx,
|
|
169
|
+
originalSize: o.origSz,
|
|
170
|
+
remainingSize: o.sz,
|
|
171
|
+
filledSize: filled.toString(),
|
|
172
|
+
timeInForce: mapTimeInForce(o.tif ?? undefined),
|
|
173
|
+
reduceOnly: o.reduceOnly ?? undefined,
|
|
174
|
+
isTrigger: o.triggerCondition !== undefined && o.triggerCondition !== 'N/A',
|
|
175
|
+
triggerPrice: o.triggerPx ?? undefined,
|
|
176
|
+
status: mapOrderStatus(detail.status),
|
|
177
|
+
statusReason: mapStatusReason(detail.status),
|
|
178
|
+
createdAt: new Date(o.timestamp).toISOString(),
|
|
179
|
+
updatedAt: new Date(detail.statusTimestamp).toISOString(),
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
//# sourceMappingURL=mapOrder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapOrder.js","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAG1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAa,EAAE;IAC3D,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,oBAAoB;YACvB,OAAO,SAAS,CAAC,kBAAkB,CAAA;QACrC,KAAK,mBAAmB;YACtB,OAAO,SAAS,CAAC,iBAAiB,CAAA;QACpC,KAAK,aAAa;YAChB,OAAO,SAAS,CAAC,WAAW,CAAA;QAC9B,KAAK,YAAY;YACf,OAAO,SAAS,CAAC,UAAU,CAAA;QAC7B,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,MAAM,CAAA;QACzB;YACE,OAAO,SAAS,CAAC,KAAK,CAAA;IAC1B,CAAC;AACH,CAAC,CAAA;AAED,cAAc;AACd,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAe,EAAW,EAAE,CACxD,IAAI,KAAK,SAAS,CAAC,kBAAkB;IACrC,IAAI,KAAK,SAAS,CAAC,iBAAiB;IACpC,IAAI,KAAK,SAAS,CAAC,WAAW;IAC9B,IAAI,KAAK,SAAS,CAAC,UAAU,CAAA;AAE/B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,CAA+C,EACtC,EAAE;IACX,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,gBAAgB,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IACE,CAAC,CAAC,SAAS,IAAI,IAAI;QACnB,CAAC,CAAC,SAAS,KAAK,EAAE;QAClB,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAC3B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,cAAc;AACd,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,CAAsB,EACtB,MAAqB,EACV,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;IACtB,MAAM;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI;IACrD,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,EAAE;IACV,KAAK,EAAE,CAAC,CAAC,OAAO;IAChB,UAAU,EAAE,CAAC,CAAC,MAAM;QAClB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;QACtD,CAAC,CAAC,GAAG;IACP,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,KAAK;IACjC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;IACnD,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;CAC/C,CAAC,CAAA;AAEF,cAAc;AACd,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,CAAsB,EACtB,MAAqB,EACP,EAAE;IAChB,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,OAAO,GACX,IAAI,KAAK,SAAS,CAAC,iBAAiB,IAAI,IAAI,KAAK,SAAS,CAAC,UAAU,CAAA;IACvE,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QACtB,MAAM;QACN,IAAI;QACJ,IAAI,EAAE,CAAC,CAAC,EAAE;QACV,YAAY,EAAE,CAAC,CAAC,SAAS;QACzB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,KAAK,EAAE,CAAC,CAAC,gBAAgB;QACzB,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;KAC/C,CAAA;AACH,CAAC,CAAA;AAED,cAAc;AACd,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAe,EAAE;IAC5D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,IAAI,CAAA;QACzB,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC,MAAM,CAAA;QAC3B,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC,SAAS,CAAA;QAC9B,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,QAAQ,CAAA;QAC7B,KAAK,WAAW;YACd,OAAO,WAAW,CAAC,SAAS,CAAA;QAC9B,KAAK,gBAAgB;YACnB,OAAO,WAAW,CAAC,SAAS,CAAA;QAC9B;YACE,OAAO,WAAW,CAAC,OAAO,CAAA;IAC9B,CAAC;AACH,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAc,EAAsB,EAAE;IACpE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,aAAa;YAChB,OAAO,4DAA4D,CAAA;QACrE,KAAK,oBAAoB;YACvB,OAAO,kDAAkD,CAAA;QAC3D,KAAK,gBAAgB;YACnB,OAAO,uCAAuC,CAAA;QAChD,KAAK,oBAAoB;YACvB,OAAO,0CAA0C,CAAA;QACnD,KAAK,uBAAuB;YAC1B,OAAO,kDAAkD,CAAA;QAC3D,KAAK,mBAAmB;YACtB,OAAO,mEAAmE,CAAA;QAC5E,KAAK,cAAc;YACjB,OAAO,oDAAoD,CAAA;QAC7D,KAAK,qBAAqB;YACxB,OAAO,8DAA8D,CAAA;QACvE,KAAK,kBAAkB;YACrB,OAAO,2CAA2C,CAAA;QACpD;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,GAAuB,EAA2B,EAAE;IAC1E,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,WAAW,CAAC,GAAG,CAAA;QACxB,KAAK,KAAK;YACR,OAAO,WAAW,CAAC,GAAG,CAAA;QACxB,KAAK,KAAK;YACR,OAAO,WAAW,CAAC,SAAS,CAAA;QAC9B;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC,CAAA;AAED,cAAc;AACd,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAAqB,EACrB,MAAqB,EACd,EAAE;IACT,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAA;IACtB,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAEtD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QACtB,MAAM;QACN,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI;QACrD,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/B,KAAK,EAAE,CAAC,CAAC,OAAO;QAChB,YAAY,EAAE,CAAC,CAAC,MAAM;QACtB,aAAa,EAAE,CAAC,CAAC,EAAE;QACnB,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE;QAC7B,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC;QAC/C,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,SAAS;QACrC,SAAS,EAAE,CAAC,CAAC,gBAAgB,KAAK,SAAS,IAAI,CAAC,CAAC,gBAAgB,KAAK,KAAK;QAC3E,YAAY,EAAE,CAAC,CAAC,SAAS,IAAI,SAAS;QACtC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;QACrC,YAAY,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5C,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;QAC9C,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE;KAC1D,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MarketDisplay, Position } from '@lifi/perps-types';
|
|
2
|
+
import type { HlAssetPosition } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* True when the assetPosition has non-zero size. Hyperliquid keeps zero-size
|
|
5
|
+
* rows in clearinghouse states after a close; both the REST and WS positions
|
|
6
|
+
* paths drop them so a close surfaces as absence from the open set.
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export declare const isOpenAssetPosition: (ap: HlAssetPosition) => boolean;
|
|
10
|
+
/** @public */
|
|
11
|
+
export declare const mapPosition: (ap: HlAssetPosition, market: MarketDisplay) => Position;
|
|
12
|
+
//# sourceMappingURL=mapPosition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,IAAI,eAAe,KAAG,OAChB,CAAA;AAE1C,cAAc;AACd,eAAO,MAAM,WAAW,GACtB,IAAI,eAAe,EACnB,QAAQ,aAAa,KACpB,QAsBF,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { MarginMode, PositionSide } from '@lifi/perps-types';
|
|
2
|
+
/**
|
|
3
|
+
* True when the assetPosition has non-zero size. Hyperliquid keeps zero-size
|
|
4
|
+
* rows in clearinghouse states after a close; both the REST and WS positions
|
|
5
|
+
* paths drop them so a close surfaces as absence from the open set.
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export const isOpenAssetPosition = (ap) => Number.parseFloat(ap.position.szi) !== 0;
|
|
9
|
+
/** @public */
|
|
10
|
+
export const mapPosition = (ap, market) => {
|
|
11
|
+
const pos = ap.position;
|
|
12
|
+
const szi = parseFloat(pos.szi);
|
|
13
|
+
return {
|
|
14
|
+
market,
|
|
15
|
+
side: szi >= 0 ? PositionSide.LONG : PositionSide.SHORT,
|
|
16
|
+
size: Math.abs(szi).toString(),
|
|
17
|
+
entryPrice: pos.entryPx ?? '0',
|
|
18
|
+
markPrice: pos.positionValue && szi !== 0
|
|
19
|
+
? (parseFloat(pos.positionValue) / Math.abs(szi)).toString()
|
|
20
|
+
: '0',
|
|
21
|
+
liquidationPrice: pos.liquidationPx ?? '0',
|
|
22
|
+
unrealizedPnl: pos.unrealizedPnl,
|
|
23
|
+
leverage: ap.position.leverage.value,
|
|
24
|
+
marginUsed: pos.marginUsed,
|
|
25
|
+
marginMode: ap.position.leverage.type === 'cross'
|
|
26
|
+
? MarginMode.CROSS
|
|
27
|
+
: MarginMode.ISOLATED,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=mapPosition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapPosition.js","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAG5D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAmB,EAAW,EAAE,CAClE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAE1C,cAAc;AACd,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,EAAmB,EACnB,MAAqB,EACX,EAAE;IACZ,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAA;IACvB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAE/B,OAAO;QACL,MAAM;QACN,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK;QACvD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;QAC9B,UAAU,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG;QAC9B,SAAS,EACP,GAAG,CAAC,aAAa,IAAI,GAAG,KAAK,CAAC;YAC5B,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC5D,CAAC,CAAC,GAAG;QACT,gBAAgB,EAAE,GAAG,CAAC,aAAa,IAAI,GAAG;QAC1C,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;QACpC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EACR,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO;YACnC,CAAC,CAAC,UAAU,CAAC,KAAK;YAClB,CAAC,CAAC,UAAU,CAAC,QAAQ;KAC1B,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Asset, Market } from '@lifi/perps-types';
|
|
2
|
+
/**
|
|
3
|
+
* Synthesise the {@link Asset} for a Hyperliquid wire coin. `id` and `logoURI`
|
|
4
|
+
* keep the raw coin — the logo CDN is keyed by it, HIP-3 `dex:` prefix
|
|
5
|
+
* included. `displaySymbol` drops the prefix: the category is carried by
|
|
6
|
+
* `categoryId`, never by the display string.
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export declare const coinAsset: (coin: string) => Asset;
|
|
10
|
+
/**
|
|
11
|
+
* Distinct wire `dex` names to fan `clearinghouseState` / `frontendOpenOrders`
|
|
12
|
+
* reads across, derived from the backend market list. Spot is excluded (it has
|
|
13
|
+
* no clearinghouseState); the main perp dex maps to the empty string.
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export declare const perpsDexNames: (markets: readonly Market[]) => string[];
|
|
17
|
+
//# sourceMappingURL=marketDisplay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketDisplay.d.ts","sourceRoot":"","sources":["../../../src/utils/marketDisplay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAQtD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,KAKvC,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,SAAS,MAAM,EAAE,KAAG,MAAM,EAShE,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { MAIN_DEX_NAME, MAIN_MARKET_ID, PROVIDER_KEY, SPOT_MARKET_ID, } from '../constants.js';
|
|
2
|
+
/**
|
|
3
|
+
* Synthesise the {@link Asset} for a Hyperliquid wire coin. `id` and `logoURI`
|
|
4
|
+
* keep the raw coin — the logo CDN is keyed by it, HIP-3 `dex:` prefix
|
|
5
|
+
* included. `displaySymbol` drops the prefix: the category is carried by
|
|
6
|
+
* `categoryId`, never by the display string.
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export const coinAsset = (coin) => ({
|
|
10
|
+
providerId: PROVIDER_KEY,
|
|
11
|
+
id: coin,
|
|
12
|
+
displaySymbol: coin.includes(':') ? coin.slice(coin.indexOf(':') + 1) : coin,
|
|
13
|
+
logoURI: `https://app.hyperliquid.xyz/coins/${coin}.svg`,
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Distinct wire `dex` names to fan `clearinghouseState` / `frontendOpenOrders`
|
|
17
|
+
* reads across, derived from the backend market list. Spot is excluded (it has
|
|
18
|
+
* no clearinghouseState); the main perp dex maps to the empty string.
|
|
19
|
+
* @public
|
|
20
|
+
*/
|
|
21
|
+
export const perpsDexNames = (markets) => {
|
|
22
|
+
const names = new Set();
|
|
23
|
+
for (const m of markets) {
|
|
24
|
+
if (m.categoryId === SPOT_MARKET_ID) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
names.add(m.categoryId === MAIN_MARKET_ID ? MAIN_DEX_NAME : m.categoryId);
|
|
28
|
+
}
|
|
29
|
+
return [...names];
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=marketDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketDisplay.js","sourceRoot":"","sources":["../../../src/utils/marketDisplay.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,iBAAiB,CAAA;AAExB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAS,EAAE,CAAC,CAAC;IACjD,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,IAAI;IACR,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;IAC5E,OAAO,EAAE,qCAAqC,IAAI,MAAM;CACzD,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAA0B,EAAY,EAAE;IACpE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;YACpC,SAAQ;QACV,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAC3E,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAA;AACnB,CAAC,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hyperliquid order size and price formatting for exchange submission.
|
|
3
|
+
*
|
|
4
|
+
* These encode Hyperliquid-specific order submission rules. Getting size/price
|
|
5
|
+
* formatting wrong causes rejected orders.
|
|
6
|
+
*
|
|
7
|
+
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/tick-and-lot-size
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Derive the maximum number of price decimal places for a given asset.
|
|
11
|
+
*
|
|
12
|
+
* @param szDecimals - The asset's szDecimals (from market meta)
|
|
13
|
+
* @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
|
|
14
|
+
* @returns Maximum allowed price decimals
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
export declare function getMaxPriceDecimals(szDecimals: number, market?: string): number;
|
|
18
|
+
/**
|
|
19
|
+
* Format a size value for order submission.
|
|
20
|
+
*
|
|
21
|
+
* Per Hyperliquid docs (tick-and-lot-size):
|
|
22
|
+
* - Size must be rounded to the asset's szDecimals
|
|
23
|
+
* - Trailing zeroes must be removed for signing
|
|
24
|
+
*
|
|
25
|
+
* @param size - The size value to format
|
|
26
|
+
* @param szDecimals - Number of decimal places allowed for this asset (from meta)
|
|
27
|
+
* @returns Size as a string with correct precision, no trailing zeros
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatOrderSize(size: number, szDecimals: number): string;
|
|
31
|
+
/**
|
|
32
|
+
* Format a price value for order submission.
|
|
33
|
+
*
|
|
34
|
+
* Per Hyperliquid docs (tick-and-lot-size):
|
|
35
|
+
* - Maximum 5 significant figures
|
|
36
|
+
* - Max decimals = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)
|
|
37
|
+
* - Integer prices always allowed regardless of significant figures
|
|
38
|
+
* - Trailing zeroes must be removed for signing
|
|
39
|
+
*
|
|
40
|
+
* Rounding is half-up (away from zero at exact halfway) on the true decimal
|
|
41
|
+
* value, not on the binary float — (1.005).toFixed(2) would give '1.00'.
|
|
42
|
+
*
|
|
43
|
+
* @param price - The price value to format
|
|
44
|
+
* @param szDecimals - The asset's szDecimals (affects max price decimals)
|
|
45
|
+
* @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
|
|
46
|
+
* @returns Price as a string with correct precision, no trailing zeros
|
|
47
|
+
* @public
|
|
48
|
+
*/
|
|
49
|
+
export declare function formatOrderPrice(price: number, szDecimals: number, market?: string): string;
|
|
50
|
+
//# sourceMappingURL=orderFormatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAOxE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAYR"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hyperliquid order size and price formatting for exchange submission.
|
|
3
|
+
*
|
|
4
|
+
* These encode Hyperliquid-specific order submission rules. Getting size/price
|
|
5
|
+
* formatting wrong causes rejected orders.
|
|
6
|
+
*
|
|
7
|
+
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/tick-and-lot-size
|
|
8
|
+
*/
|
|
9
|
+
import Big from 'big.js';
|
|
10
|
+
/**
|
|
11
|
+
* Max combined decimals (size + price) enforced by Hyperliquid.
|
|
12
|
+
* Perps: 6, Spot: 8
|
|
13
|
+
*/
|
|
14
|
+
const MAX_DECIMALS_PERPS = 6;
|
|
15
|
+
const MAX_DECIMALS_SPOT = 8;
|
|
16
|
+
function getMaxDecimals(market) {
|
|
17
|
+
return market === 'spot' ? MAX_DECIMALS_SPOT : MAX_DECIMALS_PERPS;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Derive the maximum number of price decimal places for a given asset.
|
|
21
|
+
*
|
|
22
|
+
* @param szDecimals - The asset's szDecimals (from market meta)
|
|
23
|
+
* @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
|
|
24
|
+
* @returns Maximum allowed price decimals
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export function getMaxPriceDecimals(szDecimals, market) {
|
|
28
|
+
return Math.max(0, getMaxDecimals(market) - szDecimals);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Format a size value for order submission.
|
|
32
|
+
*
|
|
33
|
+
* Per Hyperliquid docs (tick-and-lot-size):
|
|
34
|
+
* - Size must be rounded to the asset's szDecimals
|
|
35
|
+
* - Trailing zeroes must be removed for signing
|
|
36
|
+
*
|
|
37
|
+
* @param size - The size value to format
|
|
38
|
+
* @param szDecimals - Number of decimal places allowed for this asset (from meta)
|
|
39
|
+
* @returns Size as a string with correct precision, no trailing zeros
|
|
40
|
+
* @public
|
|
41
|
+
*/
|
|
42
|
+
export function formatOrderSize(size, szDecimals) {
|
|
43
|
+
// Big.roundDown truncates toward zero — never round a size up, it could
|
|
44
|
+
// exceed available balance. Exact decimal arithmetic: flooring the float
|
|
45
|
+
// product dropped a lot step (0.29 * 100 === 28.999999999999996).
|
|
46
|
+
const truncated = new Big(size).round(szDecimals, Big.roundDown);
|
|
47
|
+
// toFixed() with no dp always emits plain notation; eq(0) guards '-0'
|
|
48
|
+
return truncated.eq(0) ? '0' : truncated.toFixed();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Format a price value for order submission.
|
|
52
|
+
*
|
|
53
|
+
* Per Hyperliquid docs (tick-and-lot-size):
|
|
54
|
+
* - Maximum 5 significant figures
|
|
55
|
+
* - Max decimals = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)
|
|
56
|
+
* - Integer prices always allowed regardless of significant figures
|
|
57
|
+
* - Trailing zeroes must be removed for signing
|
|
58
|
+
*
|
|
59
|
+
* Rounding is half-up (away from zero at exact halfway) on the true decimal
|
|
60
|
+
* value, not on the binary float — (1.005).toFixed(2) would give '1.00'.
|
|
61
|
+
*
|
|
62
|
+
* @param price - The price value to format
|
|
63
|
+
* @param szDecimals - The asset's szDecimals (affects max price decimals)
|
|
64
|
+
* @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
|
|
65
|
+
* @returns Price as a string with correct precision, no trailing zeros
|
|
66
|
+
* @public
|
|
67
|
+
*/
|
|
68
|
+
export function formatOrderPrice(price, szDecimals, market) {
|
|
69
|
+
const maxPriceDecimals = getMaxPriceDecimals(szDecimals, market);
|
|
70
|
+
let rounded = new Big(price).round(maxPriceDecimals, Big.roundHalfUp);
|
|
71
|
+
// Integer prices bypass the 5 sig-fig rule; prec() is a no-op below 6 sig figs
|
|
72
|
+
if (!rounded.mod(1).eq(0)) {
|
|
73
|
+
rounded = rounded.prec(5, Big.roundHalfUp);
|
|
74
|
+
}
|
|
75
|
+
// toFixed() with no dp always emits plain notation; eq(0) guards '-0'
|
|
76
|
+
return rounded.eq(0) ? '0' : rounded.toFixed();
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=orderFormatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,GAAG,MAAM,QAAQ,CAAA;AAExB;;;GAGG;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAE3B,SAAS,cAAc,CAAC,MAAe;IACrC,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAA;AACnE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,MAAe;IAEf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAA;AACzD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,UAAkB;IAC9D,wEAAwE;IACxE,yEAAyE;IACzE,kEAAkE;IAClE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IAChE,sEAAsE;IACtE,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,UAAkB,EAClB,MAAe;IAEf,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAEhE,IAAI,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;IAErE,+EAA+E;IAC/E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;IAC5C,CAAC;IAED,sEAAsE;IACtE,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;AAChD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map a desired price `step` to Hyperliquid's server-side aggregation hint
|
|
3
|
+
* `(nSigFigs, mantissa)` against the order of magnitude of `referencePrice`
|
|
4
|
+
* (the market's mark price gives the digit count). HL buckets the book to
|
|
5
|
+
* `nSigFigs` significant figures, so the figures resolving a price to `step`
|
|
6
|
+
* granularity are `floor(log10(referencePrice)) - floor(log10(step)) + 1`.
|
|
7
|
+
*
|
|
8
|
+
* Returns `{}` (full precision) when the step is finer than HL's 5-sig-fig
|
|
9
|
+
* grid or the inputs are unusable; clamps to {@link HL_MIN_SIG_FIGS} when the
|
|
10
|
+
* step is coarser than HL's lowest granularity. `mantissa` is emitted only for
|
|
11
|
+
* a non-power-of-ten step that lands on the 5-sig-fig grid, since HL ignores
|
|
12
|
+
* it below `nSigFigs === 5`.
|
|
13
|
+
*
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export declare function priceStepToAggregation(step: number, referencePrice: number): {
|
|
17
|
+
nSigFigs?: number;
|
|
18
|
+
mantissa?: number;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=priceStepToAggregation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priceStepToAggregation.d.ts","sourceRoot":"","sources":["../../../src/utils/priceStepToAggregation.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GACrB;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAsB1C"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Significant-figure bounds Hyperliquid's `l2Book` accepts; `undefined` is full precision. */
|
|
2
|
+
const HL_MIN_SIG_FIGS = 2;
|
|
3
|
+
const HL_MAX_SIG_FIGS = 5;
|
|
4
|
+
/** Mantissa sub-steps HL honours, but only when `nSigFigs === 5`. */
|
|
5
|
+
const HL_MANTISSA_VALUES = [1, 2, 5];
|
|
6
|
+
/** Snap a leading-digit ratio to the nearest mantissa HL accepts (1, 2 or 5). */
|
|
7
|
+
function snapToMantissa(ratio) {
|
|
8
|
+
let closest = HL_MANTISSA_VALUES[0];
|
|
9
|
+
for (const m of HL_MANTISSA_VALUES) {
|
|
10
|
+
if (Math.abs(ratio - m) < Math.abs(ratio - closest)) {
|
|
11
|
+
closest = m;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return closest;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Map a desired price `step` to Hyperliquid's server-side aggregation hint
|
|
18
|
+
* `(nSigFigs, mantissa)` against the order of magnitude of `referencePrice`
|
|
19
|
+
* (the market's mark price gives the digit count). HL buckets the book to
|
|
20
|
+
* `nSigFigs` significant figures, so the figures resolving a price to `step`
|
|
21
|
+
* granularity are `floor(log10(referencePrice)) - floor(log10(step)) + 1`.
|
|
22
|
+
*
|
|
23
|
+
* Returns `{}` (full precision) when the step is finer than HL's 5-sig-fig
|
|
24
|
+
* grid or the inputs are unusable; clamps to {@link HL_MIN_SIG_FIGS} when the
|
|
25
|
+
* step is coarser than HL's lowest granularity. `mantissa` is emitted only for
|
|
26
|
+
* a non-power-of-ten step that lands on the 5-sig-fig grid, since HL ignores
|
|
27
|
+
* it below `nSigFigs === 5`.
|
|
28
|
+
*
|
|
29
|
+
* @public
|
|
30
|
+
*/
|
|
31
|
+
export function priceStepToAggregation(step, referencePrice) {
|
|
32
|
+
if (!Number.isFinite(step) || step <= 0) {
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
if (!Number.isFinite(referencePrice) || referencePrice <= 0) {
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
const stepExp = Math.floor(Math.log10(step));
|
|
39
|
+
const priceExp = Math.floor(Math.log10(referencePrice));
|
|
40
|
+
const nSigFigs = priceExp - stepExp + 1;
|
|
41
|
+
if (nSigFigs > HL_MAX_SIG_FIGS) {
|
|
42
|
+
return {};
|
|
43
|
+
}
|
|
44
|
+
const clamped = Math.max(HL_MIN_SIG_FIGS, nSigFigs);
|
|
45
|
+
const mantissa = snapToMantissa(step / 10 ** stepExp);
|
|
46
|
+
if (clamped === HL_MAX_SIG_FIGS && mantissa !== 1) {
|
|
47
|
+
return { nSigFigs: clamped, mantissa };
|
|
48
|
+
}
|
|
49
|
+
return { nSigFigs: clamped };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=priceStepToAggregation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priceStepToAggregation.js","sourceRoot":"","sources":["../../../src/utils/priceStepToAggregation.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,MAAM,eAAe,GAAG,CAAC,CAAA;AACzB,MAAM,eAAe,GAAG,CAAC,CAAA;AACzB,qEAAqE;AACrE,MAAM,kBAAkB,GAAmC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAEpE,iFAAiF;AACjF,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;IACnC,KAAK,MAAM,CAAC,IAAI,kBAAkB,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;YACpD,OAAO,GAAG,CAAC,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,cAAsB;IAEtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAA;IAEvC,IAAI,QAAQ,GAAG,eAAe,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;IACnD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,GAAG,EAAE,IAAI,OAAO,CAAC,CAAA;IACrD,IAAI,OAAO,KAAK,eAAe,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;IACxC,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Asset, Balance, Market } from '@lifi/perps-types';
|
|
2
|
+
import type { HlSpotBalance } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* USD price keyed by spot token index: each spot market's live USD price
|
|
5
|
+
* (from `priceByMarketId`, keyed by `Market.id`) under its base-asset id, and
|
|
6
|
+
* every market's quote-asset id at $1. A spot market absent from
|
|
7
|
+
* `priceByMarketId` values its token at 0.
|
|
8
|
+
*/
|
|
9
|
+
export declare const spotPriceById: (markets: readonly Market[], priceByMarketId: ReadonlyMap<string, number>) => Map<string, number>;
|
|
10
|
+
/**
|
|
11
|
+
* The held spot {@link Asset} for an HL balance: the venue token index
|
|
12
|
+
* (`b.token`) as `Asset.id` — equal to that token's spot `Market.baseAsset.id`
|
|
13
|
+
* — with display fields derived from the coin.
|
|
14
|
+
*/
|
|
15
|
+
export declare const spotAssetFromToken: (b: HlSpotBalance) => Asset;
|
|
16
|
+
/** Assemble a typed spot {@link Balance} from its resolved asset and raw size. */
|
|
17
|
+
export declare const spotBalance: (asset: Asset, total: string, priceById: Map<string, number>) => Balance;
|
|
18
|
+
//# sourceMappingURL=spotBalance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spotBalance.d.ts","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,SAAS,MAAM,EAAE,EAC1B,iBAAiB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3C,GAAG,CAAC,MAAM,EAAE,MAAM,CAapB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,aAAa,KAAG,KAGpD,CAAA;AAEF,kFAAkF;AAClF,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,OAAO,MAAM,EACb,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC7B,OAKD,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { stringToFloat } from '@lifi/perps-sdk';
|
|
2
|
+
import { SPOT_MARKET_ID } from '../constants.js';
|
|
3
|
+
import { coinAsset } from './marketDisplay.js';
|
|
4
|
+
/**
|
|
5
|
+
* USD price keyed by spot token index: each spot market's live USD price
|
|
6
|
+
* (from `priceByMarketId`, keyed by `Market.id`) under its base-asset id, and
|
|
7
|
+
* every market's quote-asset id at $1. A spot market absent from
|
|
8
|
+
* `priceByMarketId` values its token at 0.
|
|
9
|
+
*/
|
|
10
|
+
export const spotPriceById = (markets, priceByMarketId) => {
|
|
11
|
+
const map = new Map();
|
|
12
|
+
for (const m of markets) {
|
|
13
|
+
if (m.categoryId === SPOT_MARKET_ID) {
|
|
14
|
+
map.set(m.baseAsset.id, priceByMarketId.get(m.id) ?? 0);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
for (const m of markets) {
|
|
18
|
+
if (!map.has(m.quoteAsset.id)) {
|
|
19
|
+
map.set(m.quoteAsset.id, 1);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return map;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* The held spot {@link Asset} for an HL balance: the venue token index
|
|
26
|
+
* (`b.token`) as `Asset.id` — equal to that token's spot `Market.baseAsset.id`
|
|
27
|
+
* — with display fields derived from the coin.
|
|
28
|
+
*/
|
|
29
|
+
export const spotAssetFromToken = (b) => ({
|
|
30
|
+
...coinAsset(b.coin),
|
|
31
|
+
id: String(b.token),
|
|
32
|
+
});
|
|
33
|
+
/** Assemble a typed spot {@link Balance} from its resolved asset and raw size. */
|
|
34
|
+
export const spotBalance = (asset, total, priceById) => ({
|
|
35
|
+
categoryId: SPOT_MARKET_ID,
|
|
36
|
+
asset,
|
|
37
|
+
units: total,
|
|
38
|
+
valueUsd: (stringToFloat(total) * (priceById.get(asset.id) ?? 0)).toString(),
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=spotBalance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spotBalance.js","sourceRoot":"","sources":["../../../src/utils/spotBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAA0B,EAC1B,eAA4C,EACvB,EAAE;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAA;IACrC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,UAAU,KAAK,cAAc,EAAE,CAAC;YACpC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAgB,EAAS,EAAE,CAAC,CAAC;IAC9D,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;CACpB,CAAC,CAAA;AAEF,kFAAkF;AAClF,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAY,EACZ,KAAa,EACb,SAA8B,EACrB,EAAE,CAAC,CAAC;IACb,UAAU,EAAE,cAAc;IAC1B,KAAK;IACL,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7E,CAAC,CAAA"}
|