@lifi/perps-sdk-provider-hyperliquid 0.0.0-preview-c903f1e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +29 -0
- package/dist/cjs/HyperliquidProvider.d.ts +15 -0
- package/dist/cjs/HyperliquidProvider.d.ts.map +1 -0
- package/dist/cjs/HyperliquidProvider.js +135 -0
- package/dist/cjs/HyperliquidProvider.js.map +1 -0
- package/dist/cjs/accountConfig.d.ts +3 -0
- package/dist/cjs/accountConfig.d.ts.map +1 -0
- package/dist/cjs/accountConfig.js +45 -0
- package/dist/cjs/accountConfig.js.map +1 -0
- package/dist/cjs/accountSummary.d.ts +3 -0
- package/dist/cjs/accountSummary.d.ts.map +1 -0
- package/dist/cjs/accountSummary.js +12 -0
- package/dist/cjs/accountSummary.js.map +1 -0
- package/dist/cjs/constants.d.ts +11 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +16 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/context.d.ts +13 -0
- package/dist/cjs/context.d.ts.map +1 -0
- package/dist/cjs/context.js +24 -0
- package/dist/cjs/context.js.map +1 -0
- package/dist/cjs/index.d.ts +22 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +47 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/services/getAccount.d.ts +6 -0
- package/dist/cjs/services/getAccount.d.ts.map +1 -0
- package/dist/cjs/services/getAccount.js +109 -0
- package/dist/cjs/services/getAccount.js.map +1 -0
- package/dist/cjs/services/getActivity.d.ts +15 -0
- package/dist/cjs/services/getActivity.d.ts.map +1 -0
- package/dist/cjs/services/getActivity.js +65 -0
- package/dist/cjs/services/getActivity.js.map +1 -0
- package/dist/cjs/services/getFills.d.ts +13 -0
- package/dist/cjs/services/getFills.d.ts.map +1 -0
- package/dist/cjs/services/getFills.js +40 -0
- package/dist/cjs/services/getFills.js.map +1 -0
- package/dist/cjs/services/getOrder.d.ts +6 -0
- package/dist/cjs/services/getOrder.d.ts.map +1 -0
- package/dist/cjs/services/getOrder.js +27 -0
- package/dist/cjs/services/getOrder.js.map +1 -0
- package/dist/cjs/services/getOrders.d.ts +11 -0
- package/dist/cjs/services/getOrders.d.ts.map +1 -0
- package/dist/cjs/services/getOrders.js +51 -0
- package/dist/cjs/services/getOrders.js.map +1 -0
- package/dist/cjs/services/getPositions.d.ts +11 -0
- package/dist/cjs/services/getPositions.d.ts.map +1 -0
- package/dist/cjs/services/getPositions.js +33 -0
- package/dist/cjs/services/getPositions.js.map +1 -0
- package/dist/cjs/signers/HyperliquidAgentStore.d.ts +19 -0
- package/dist/cjs/signers/HyperliquidAgentStore.d.ts.map +1 -0
- package/dist/cjs/signers/HyperliquidAgentStore.js +110 -0
- package/dist/cjs/signers/HyperliquidAgentStore.js.map +1 -0
- package/dist/cjs/signers/index.d.ts +4 -0
- package/dist/cjs/signers/index.d.ts.map +1 -0
- package/dist/cjs/signers/index.js +8 -0
- package/dist/cjs/signers/index.js.map +1 -0
- package/dist/cjs/signers/signActions.d.ts +7 -0
- package/dist/cjs/signers/signActions.d.ts.map +1 -0
- package/dist/cjs/signers/signActions.js +33 -0
- package/dist/cjs/signers/signActions.js.map +1 -0
- package/dist/cjs/types/account.d.ts +51 -0
- package/dist/cjs/types/account.d.ts.map +1 -0
- package/dist/cjs/types/account.js +10 -0
- package/dist/cjs/types/account.js.map +1 -0
- package/dist/cjs/types/action.d.ts +51 -0
- package/dist/cjs/types/action.d.ts.map +1 -0
- package/dist/cjs/types/action.js +11 -0
- package/dist/cjs/types/action.js.map +1 -0
- package/dist/cjs/types/asset.d.ts +66 -0
- package/dist/cjs/types/asset.d.ts.map +1 -0
- package/dist/cjs/types/asset.js +3 -0
- package/dist/cjs/types/asset.js.map +1 -0
- package/dist/cjs/types/fill.d.ts +18 -0
- package/dist/cjs/types/fill.d.ts.map +1 -0
- package/dist/cjs/types/fill.js +3 -0
- package/dist/cjs/types/fill.js.map +1 -0
- package/dist/cjs/types/index.d.ts +8 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +24 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/ledger.d.ts +53 -0
- package/dist/cjs/types/ledger.d.ts.map +1 -0
- package/dist/cjs/types/ledger.js +8 -0
- package/dist/cjs/types/ledger.js.map +1 -0
- package/dist/cjs/types/order.d.ts +46 -0
- package/dist/cjs/types/order.d.ts.map +1 -0
- package/dist/cjs/types/order.js +3 -0
- package/dist/cjs/types/order.js.map +1 -0
- package/dist/cjs/types/ws.d.ts +36 -0
- package/dist/cjs/types/ws.d.ts.map +1 -0
- package/dist/cjs/types/ws.js +3 -0
- package/dist/cjs/types/ws.js.map +1 -0
- package/dist/cjs/utils/assetId.d.ts +4 -0
- package/dist/cjs/utils/assetId.d.ts.map +1 -0
- package/dist/cjs/utils/assetId.js +21 -0
- package/dist/cjs/utils/assetId.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +15 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +49 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/infoClient.d.ts +10 -0
- package/dist/cjs/utils/infoClient.d.ts.map +1 -0
- package/dist/cjs/utils/infoClient.js +58 -0
- package/dist/cjs/utils/infoClient.js.map +1 -0
- package/dist/cjs/utils/liquidation.d.ts +3 -0
- package/dist/cjs/utils/liquidation.d.ts.map +1 -0
- package/dist/cjs/utils/liquidation.js +24 -0
- package/dist/cjs/utils/liquidation.js.map +1 -0
- package/dist/cjs/utils/mapActivity.d.ts +5 -0
- package/dist/cjs/utils/mapActivity.d.ts.map +1 -0
- package/dist/cjs/utils/mapActivity.js +133 -0
- package/dist/cjs/utils/mapActivity.js.map +1 -0
- package/dist/cjs/utils/mapFill.d.ts +6 -0
- package/dist/cjs/utils/mapFill.d.ts.map +1 -0
- package/dist/cjs/utils/mapFill.js +33 -0
- package/dist/cjs/utils/mapFill.js.map +1 -0
- package/dist/cjs/utils/mapMarket.d.ts +4 -0
- package/dist/cjs/utils/mapMarket.d.ts.map +1 -0
- package/dist/cjs/utils/mapMarket.js +22 -0
- package/dist/cjs/utils/mapMarket.js.map +1 -0
- package/dist/cjs/utils/mapMarketPrice.d.ts +4 -0
- package/dist/cjs/utils/mapMarketPrice.d.ts.map +1 -0
- package/dist/cjs/utils/mapMarketPrice.js +22 -0
- package/dist/cjs/utils/mapMarketPrice.js.map +1 -0
- package/dist/cjs/utils/mapOrder.d.ts +12 -0
- package/dist/cjs/utils/mapOrder.d.ts.map +1 -0
- package/dist/cjs/utils/mapOrder.js +156 -0
- package/dist/cjs/utils/mapOrder.js.map +1 -0
- package/dist/cjs/utils/mapPosition.d.ts +5 -0
- package/dist/cjs/utils/mapPosition.d.ts.map +1 -0
- package/dist/cjs/utils/mapPosition.js +28 -0
- package/dist/cjs/utils/mapPosition.js.map +1 -0
- package/dist/cjs/utils/marketDisplay.d.ts +4 -0
- package/dist/cjs/utils/marketDisplay.d.ts.map +1 -0
- package/dist/cjs/utils/marketDisplay.js +23 -0
- package/dist/cjs/utils/marketDisplay.js.map +1 -0
- package/dist/cjs/utils/orderFormatting.d.ts +4 -0
- package/dist/cjs/utils/orderFormatting.d.ts.map +1 -0
- package/dist/cjs/utils/orderFormatting.js +30 -0
- package/dist/cjs/utils/orderFormatting.js.map +1 -0
- package/dist/cjs/utils/priceStepToAggregation.d.ts +5 -0
- package/dist/cjs/utils/priceStepToAggregation.d.ts.map +1 -0
- package/dist/cjs/utils/priceStepToAggregation.js +36 -0
- package/dist/cjs/utils/priceStepToAggregation.js.map +1 -0
- package/dist/cjs/utils/spotBalance.d.ts +6 -0
- package/dist/cjs/utils/spotBalance.d.ts.map +1 -0
- package/dist/cjs/utils/spotBalance.js +34 -0
- package/dist/cjs/utils/spotBalance.js.map +1 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts +29 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.d.ts.map +1 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.js +359 -0
- package/dist/cjs/websocket/HyperliquidWsProvider.js.map +1 -0
- package/dist/cjs/websocket/index.d.ts +2 -0
- package/dist/cjs/websocket/index.d.ts.map +1 -0
- package/dist/cjs/websocket/index.js +6 -0
- package/dist/cjs/websocket/index.js.map +1 -0
- package/dist/esm/HyperliquidProvider.d.ts +64 -0
- package/dist/esm/HyperliquidProvider.d.ts.map +1 -0
- package/dist/esm/HyperliquidProvider.js +162 -0
- package/dist/esm/HyperliquidProvider.js.map +1 -0
- package/dist/esm/accountConfig.d.ts +10 -0
- package/dist/esm/accountConfig.d.ts.map +1 -0
- package/dist/esm/accountConfig.js +65 -0
- package/dist/esm/accountConfig.js.map +1 -0
- package/dist/esm/accountSummary.d.ts +10 -0
- package/dist/esm/accountSummary.d.ts.map +1 -0
- package/dist/esm/accountSummary.js +22 -0
- package/dist/esm/accountSummary.js.map +1 -0
- package/dist/esm/constants.d.ts +40 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +42 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/context.d.ts +26 -0
- package/dist/esm/context.d.ts.map +1 -0
- package/dist/esm/context.js +25 -0
- package/dist/esm/context.js.map +1 -0
- package/dist/esm/index.d.ts +31 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/services/getAccount.d.ts +28 -0
- package/dist/esm/services/getAccount.d.ts.map +1 -0
- package/dist/esm/services/getAccount.js +134 -0
- package/dist/esm/services/getAccount.js.map +1 -0
- package/dist/esm/services/getActivity.d.ts +33 -0
- package/dist/esm/services/getActivity.d.ts.map +1 -0
- package/dist/esm/services/getActivity.js +75 -0
- package/dist/esm/services/getActivity.js.map +1 -0
- package/dist/esm/services/getFills.d.ts +34 -0
- package/dist/esm/services/getFills.d.ts.map +1 -0
- package/dist/esm/services/getFills.js +49 -0
- package/dist/esm/services/getFills.js.map +1 -0
- package/dist/esm/services/getOrder.d.ts +17 -0
- package/dist/esm/services/getOrder.d.ts.map +1 -0
- package/dist/esm/services/getOrder.js +29 -0
- package/dist/esm/services/getOrder.js.map +1 -0
- package/dist/esm/services/getOrders.d.ts +27 -0
- package/dist/esm/services/getOrders.d.ts.map +1 -0
- package/dist/esm/services/getOrders.js +57 -0
- package/dist/esm/services/getOrders.js.map +1 -0
- package/dist/esm/services/getPositions.d.ts +26 -0
- package/dist/esm/services/getPositions.d.ts.map +1 -0
- package/dist/esm/services/getPositions.js +37 -0
- package/dist/esm/services/getPositions.js.map +1 -0
- package/dist/esm/signers/HyperliquidAgentStore.d.ts +54 -0
- package/dist/esm/signers/HyperliquidAgentStore.d.ts.map +1 -0
- package/dist/esm/signers/HyperliquidAgentStore.js +134 -0
- package/dist/esm/signers/HyperliquidAgentStore.js.map +1 -0
- package/dist/esm/signers/index.d.ts +4 -0
- package/dist/esm/signers/index.d.ts.map +1 -0
- package/dist/esm/signers/index.js +4 -0
- package/dist/esm/signers/index.js.map +1 -0
- package/dist/esm/signers/signActions.d.ts +15 -0
- package/dist/esm/signers/signActions.d.ts.map +1 -0
- package/dist/esm/signers/signActions.js +38 -0
- package/dist/esm/signers/signActions.js.map +1 -0
- package/dist/esm/types/account.d.ts +64 -0
- package/dist/esm/types/account.d.ts.map +1 -0
- package/dist/esm/types/account.js +13 -0
- package/dist/esm/types/account.js.map +1 -0
- package/dist/esm/types/action.d.ts +61 -0
- package/dist/esm/types/action.d.ts.map +1 -0
- package/dist/esm/types/action.js +16 -0
- package/dist/esm/types/action.js.map +1 -0
- package/dist/esm/types/asset.d.ts +82 -0
- package/dist/esm/types/asset.d.ts.map +1 -0
- package/dist/esm/types/asset.js +3 -0
- package/dist/esm/types/asset.js.map +1 -0
- package/dist/esm/types/fill.d.ts +21 -0
- package/dist/esm/types/fill.d.ts.map +1 -0
- package/dist/esm/types/fill.js +3 -0
- package/dist/esm/types/fill.js.map +1 -0
- package/dist/esm/types/index.d.ts +8 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +11 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/ledger.d.ts +93 -0
- package/dist/esm/types/ledger.d.ts.map +1 -0
- package/dist/esm/types/ledger.js +16 -0
- package/dist/esm/types/ledger.js.map +1 -0
- package/dist/esm/types/order.d.ts +51 -0
- package/dist/esm/types/order.d.ts.map +1 -0
- package/dist/esm/types/order.js +3 -0
- package/dist/esm/types/order.js.map +1 -0
- package/dist/esm/types/ws.d.ts +43 -0
- package/dist/esm/types/ws.d.ts.map +1 -0
- package/dist/esm/types/ws.js +3 -0
- package/dist/esm/types/ws.js.map +1 -0
- package/dist/esm/utils/assetId.d.ts +20 -0
- package/dist/esm/utils/assetId.d.ts.map +1 -0
- package/dist/esm/utils/assetId.js +31 -0
- package/dist/esm/utils/assetId.js.map +1 -0
- package/dist/esm/utils/index.d.ts +15 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +17 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/infoClient.d.ts +28 -0
- package/dist/esm/utils/infoClient.d.ts.map +1 -0
- package/dist/esm/utils/infoClient.js +70 -0
- package/dist/esm/utils/infoClient.js.map +1 -0
- package/dist/esm/utils/liquidation.d.ts +48 -0
- package/dist/esm/utils/liquidation.d.ts.map +1 -0
- package/dist/esm/utils/liquidation.js +65 -0
- package/dist/esm/utils/liquidation.js.map +1 -0
- package/dist/esm/utils/mapActivity.d.ts +15 -0
- package/dist/esm/utils/mapActivity.d.ts.map +1 -0
- package/dist/esm/utils/mapActivity.js +148 -0
- package/dist/esm/utils/mapActivity.js.map +1 -0
- package/dist/esm/utils/mapFill.d.ts +11 -0
- package/dist/esm/utils/mapFill.d.ts.map +1 -0
- package/dist/esm/utils/mapFill.js +34 -0
- package/dist/esm/utils/mapFill.js.map +1 -0
- package/dist/esm/utils/mapMarket.d.ts +12 -0
- package/dist/esm/utils/mapMarket.d.ts.map +1 -0
- package/dist/esm/utils/mapMarket.js +27 -0
- package/dist/esm/utils/mapMarket.js.map +1 -0
- package/dist/esm/utils/mapMarketPrice.d.ts +10 -0
- package/dist/esm/utils/mapMarketPrice.d.ts.map +1 -0
- package/dist/esm/utils/mapMarketPrice.js +24 -0
- package/dist/esm/utils/mapMarketPrice.js.map +1 -0
- package/dist/esm/utils/mapOrder.d.ts +49 -0
- package/dist/esm/utils/mapOrder.d.ts.map +1 -0
- package/dist/esm/utils/mapOrder.js +182 -0
- package/dist/esm/utils/mapOrder.js.map +1 -0
- package/dist/esm/utils/mapPosition.d.ts +12 -0
- package/dist/esm/utils/mapPosition.d.ts.map +1 -0
- package/dist/esm/utils/mapPosition.js +30 -0
- package/dist/esm/utils/mapPosition.js.map +1 -0
- package/dist/esm/utils/marketDisplay.d.ts +17 -0
- package/dist/esm/utils/marketDisplay.d.ts.map +1 -0
- package/dist/esm/utils/marketDisplay.js +31 -0
- package/dist/esm/utils/marketDisplay.js.map +1 -0
- package/dist/esm/utils/orderFormatting.d.ts +50 -0
- package/dist/esm/utils/orderFormatting.d.ts.map +1 -0
- package/dist/esm/utils/orderFormatting.js +78 -0
- package/dist/esm/utils/orderFormatting.js.map +1 -0
- package/dist/esm/utils/priceStepToAggregation.d.ts +20 -0
- package/dist/esm/utils/priceStepToAggregation.d.ts.map +1 -0
- package/dist/esm/utils/priceStepToAggregation.js +51 -0
- package/dist/esm/utils/priceStepToAggregation.js.map +1 -0
- package/dist/esm/utils/spotBalance.d.ts +18 -0
- package/dist/esm/utils/spotBalance.d.ts.map +1 -0
- package/dist/esm/utils/spotBalance.js +40 -0
- package/dist/esm/utils/spotBalance.js.map +1 -0
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts +61 -0
- package/dist/esm/websocket/HyperliquidWsProvider.d.ts.map +1 -0
- package/dist/esm/websocket/HyperliquidWsProvider.js +406 -0
- package/dist/esm/websocket/HyperliquidWsProvider.js.map +1 -0
- package/dist/esm/websocket/index.d.ts +2 -0
- package/dist/esm/websocket/index.d.ts.map +1 -0
- package/dist/esm/websocket/index.js +3 -0
- package/dist/esm/websocket/index.js.map +1 -0
- package/dist/types/HyperliquidProvider.d.ts +64 -0
- package/dist/types/HyperliquidProvider.d.ts.map +1 -0
- package/dist/types/accountConfig.d.ts +10 -0
- package/dist/types/accountConfig.d.ts.map +1 -0
- package/dist/types/accountSummary.d.ts +10 -0
- package/dist/types/accountSummary.d.ts.map +1 -0
- package/dist/types/constants.d.ts +40 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/context.d.ts +26 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/services/getAccount.d.ts +28 -0
- package/dist/types/services/getAccount.d.ts.map +1 -0
- package/dist/types/services/getActivity.d.ts +33 -0
- package/dist/types/services/getActivity.d.ts.map +1 -0
- package/dist/types/services/getFills.d.ts +34 -0
- package/dist/types/services/getFills.d.ts.map +1 -0
- package/dist/types/services/getOrder.d.ts +17 -0
- package/dist/types/services/getOrder.d.ts.map +1 -0
- package/dist/types/services/getOrders.d.ts +27 -0
- package/dist/types/services/getOrders.d.ts.map +1 -0
- package/dist/types/services/getPositions.d.ts +26 -0
- package/dist/types/services/getPositions.d.ts.map +1 -0
- package/dist/types/signers/HyperliquidAgentStore.d.ts +54 -0
- package/dist/types/signers/HyperliquidAgentStore.d.ts.map +1 -0
- package/dist/types/signers/index.d.ts +4 -0
- package/dist/types/signers/index.d.ts.map +1 -0
- package/dist/types/signers/signActions.d.ts +15 -0
- package/dist/types/signers/signActions.d.ts.map +1 -0
- package/dist/types/types/account.d.ts +64 -0
- package/dist/types/types/account.d.ts.map +1 -0
- package/dist/types/types/action.d.ts +61 -0
- package/dist/types/types/action.d.ts.map +1 -0
- package/dist/types/types/asset.d.ts +82 -0
- package/dist/types/types/asset.d.ts.map +1 -0
- package/dist/types/types/fill.d.ts +21 -0
- package/dist/types/types/fill.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +8 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/ledger.d.ts +93 -0
- package/dist/types/types/ledger.d.ts.map +1 -0
- package/dist/types/types/order.d.ts +51 -0
- package/dist/types/types/order.d.ts.map +1 -0
- package/dist/types/types/ws.d.ts +43 -0
- package/dist/types/types/ws.d.ts.map +1 -0
- package/dist/types/utils/assetId.d.ts +20 -0
- package/dist/types/utils/assetId.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +15 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/infoClient.d.ts +28 -0
- package/dist/types/utils/infoClient.d.ts.map +1 -0
- package/dist/types/utils/liquidation.d.ts +48 -0
- package/dist/types/utils/liquidation.d.ts.map +1 -0
- package/dist/types/utils/mapActivity.d.ts +15 -0
- package/dist/types/utils/mapActivity.d.ts.map +1 -0
- package/dist/types/utils/mapFill.d.ts +11 -0
- package/dist/types/utils/mapFill.d.ts.map +1 -0
- package/dist/types/utils/mapMarket.d.ts +12 -0
- package/dist/types/utils/mapMarket.d.ts.map +1 -0
- package/dist/types/utils/mapMarketPrice.d.ts +10 -0
- package/dist/types/utils/mapMarketPrice.d.ts.map +1 -0
- package/dist/types/utils/mapOrder.d.ts +49 -0
- package/dist/types/utils/mapOrder.d.ts.map +1 -0
- package/dist/types/utils/mapPosition.d.ts +12 -0
- package/dist/types/utils/mapPosition.d.ts.map +1 -0
- package/dist/types/utils/marketDisplay.d.ts +17 -0
- package/dist/types/utils/marketDisplay.d.ts.map +1 -0
- package/dist/types/utils/orderFormatting.d.ts +50 -0
- package/dist/types/utils/orderFormatting.d.ts.map +1 -0
- package/dist/types/utils/priceStepToAggregation.d.ts +20 -0
- package/dist/types/utils/priceStepToAggregation.d.ts.map +1 -0
- package/dist/types/utils/spotBalance.d.ts +18 -0
- package/dist/types/utils/spotBalance.d.ts.map +1 -0
- package/dist/types/websocket/HyperliquidWsProvider.d.ts +61 -0
- package/dist/types/websocket/HyperliquidWsProvider.d.ts.map +1 -0
- package/dist/types/websocket/index.d.ts +2 -0
- package/dist/types/websocket/index.d.ts.map +1 -0
- package/package.json +68 -0
- package/src/HyperliquidProvider.ts +381 -0
- package/src/accountConfig.ts +89 -0
- package/src/accountSummary.ts +32 -0
- package/src/constants.ts +47 -0
- package/src/context.ts +41 -0
- package/src/index.ts +45 -0
- package/src/services/getAccount.ts +263 -0
- package/src/services/getActivity.ts +162 -0
- package/src/services/getFills.ts +96 -0
- package/src/services/getOrder.ts +61 -0
- package/src/services/getOrders.ts +101 -0
- package/src/services/getPositions.ts +76 -0
- package/src/signers/HyperliquidAgentStore.ts +176 -0
- package/src/signers/index.ts +5 -0
- package/src/signers/signActions.ts +78 -0
- package/src/types/account.ts +74 -0
- package/src/types/action.ts +66 -0
- package/src/types/asset.ts +96 -0
- package/src/types/fill.ts +24 -0
- package/src/types/index.ts +11 -0
- package/src/types/ledger.ts +111 -0
- package/src/types/order.ts +56 -0
- package/src/types/ws.ts +47 -0
- package/src/utils/assetId.ts +38 -0
- package/src/utils/index.ts +38 -0
- package/src/utils/infoClient.ts +111 -0
- package/src/utils/liquidation.ts +74 -0
- package/src/utils/mapActivity.ts +182 -0
- package/src/utils/mapFill.ts +48 -0
- package/src/utils/mapMarket.ts +33 -0
- package/src/utils/mapMarketPrice.ts +33 -0
- package/src/utils/mapOrder.ts +218 -0
- package/src/utils/mapPosition.ts +40 -0
- package/src/utils/marketDisplay.ts +38 -0
- package/src/utils/orderFormatting.ts +93 -0
- package/src/utils/priceStepToAggregation.ts +58 -0
- package/src/utils/spotBalance.ts +51 -0
- package/src/websocket/HyperliquidWsProvider.ts +533 -0
- package/src/websocket/index.ts +3 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type PerpsSDKClient, type ProviderGetQuoteParams, type QuoteListener, WsProviderBase, type WsProviderFactory } from '@lifi/perps-sdk';
|
|
2
|
+
import { type Subscription } from '@lifi/perps-types';
|
|
3
|
+
/**
|
|
4
|
+
* `WsProviderFactory` constructor for Hyperliquid — pass to
|
|
5
|
+
* `new PerpsWsClient(client, { wsProviders: { hyperliquid: hyperliquidWsProvider() } })`.
|
|
6
|
+
*
|
|
7
|
+
* Derives the active sub-DEX set from the `markets` list `PerpsWsClient`
|
|
8
|
+
* passes in (the provider's own key and `'spot'` are excluded — they
|
|
9
|
+
* aren't sub-DEX subscriptions on the HL wire). Higher-order shape mirrors
|
|
10
|
+
* `lighterWsProvider(options)` so the two factories register identically.
|
|
11
|
+
*
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
export declare const hyperliquidWsProvider: () => WsProviderFactory;
|
|
15
|
+
/**
|
|
16
|
+
* Hyperliquid realtime {@link WsProvider}: multiplexes prices, positions,
|
|
17
|
+
* orders, fills and spot balances over a single {@link ReconnectingWebSocket}.
|
|
18
|
+
* Construct via {@link hyperliquidWsProvider}.
|
|
19
|
+
*
|
|
20
|
+
* `orderUpdates` supports a single address per provider instance: HL delivers
|
|
21
|
+
* those frames without a user field, so frames from two concurrent address
|
|
22
|
+
* subscriptions on one socket cannot be attributed. Subscribing a second
|
|
23
|
+
* address rejects while the first still has listeners; once the first is
|
|
24
|
+
* released, an address switch reclaims the channel immediately.
|
|
25
|
+
*
|
|
26
|
+
* @public
|
|
27
|
+
*/
|
|
28
|
+
export declare class HyperliquidWsProvider extends WsProviderBase<object> {
|
|
29
|
+
private orderUpdatesKey;
|
|
30
|
+
private readonly subDexes;
|
|
31
|
+
private readonly client;
|
|
32
|
+
private readonly registry;
|
|
33
|
+
private midsBySubDex;
|
|
34
|
+
constructor(wsUrl: string, providerKey: string, subDexes: string[], client?: PerpsSDKClient);
|
|
35
|
+
subscribeQuote(params: ProviderGetQuoteParams, onQuote: QuoteListener): Promise<() => void>;
|
|
36
|
+
protected openChannel(sub: Subscription): Promise<() => void>;
|
|
37
|
+
/**
|
|
38
|
+
* Enforce the single-address `orderUpdates` invariant (HL frames carry no
|
|
39
|
+
* user field, so concurrent address subscriptions are unattributable). A
|
|
40
|
+
* listener-free lingering channel for another address is torn down eagerly
|
|
41
|
+
* so a wallet switch needn't wait out the teardown linger; a live one throws.
|
|
42
|
+
*/
|
|
43
|
+
private claimOrderUpdatesKey;
|
|
44
|
+
/** Build sub-key + payload pairs for each sub-dex allMids subscription. */
|
|
45
|
+
private getPriceSubEntries;
|
|
46
|
+
protected onClose(): void;
|
|
47
|
+
protected sendSubscribe(payload: object): void;
|
|
48
|
+
protected toKey(sub: Subscription): string;
|
|
49
|
+
private toHlPayload;
|
|
50
|
+
protected handleMessage(raw: string): void;
|
|
51
|
+
private handleAllMids;
|
|
52
|
+
/** Latest mid per `Market.id`, merged across sub-dex allMids frames. */
|
|
53
|
+
private mergedMids;
|
|
54
|
+
private handleL2Book;
|
|
55
|
+
private handleCandle;
|
|
56
|
+
private handleOrderUpdates;
|
|
57
|
+
private handleUserFills;
|
|
58
|
+
private handleAllDexsClearinghouseState;
|
|
59
|
+
private handleSpotState;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=HyperliquidWsProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HyperliquidWsProvider.d.ts","sourceRoot":"","sources":["../../../src/websocket/HyperliquidWsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAGlB,cAAc,EACd,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAIL,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAA;AA8B1B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,QAC5B,iBAIH,CAAA;AAEH;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,MAAM,CAAC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,YAAY,CAA4C;gBAG9D,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE,cAAc;IAWnB,cAAc,CAClB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,IAAI,CAAC;cAkBN,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAgDnE;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAiB5B,2EAA2E;IAC3E,OAAO,CAAC,kBAAkB;cAaP,OAAO,IAAI,IAAI;IAKlC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9C,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;IAmB1C,OAAO,CAAC,WAAW;IAqCnB,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM;IAyDnC,OAAO,CAAC,aAAa;IAYrB,wEAAwE;IACxE,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,kBAAkB;IA0D1B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,+BAA+B;IAkBvC,OAAO,CAAC,eAAe;CAaxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/websocket/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lifi/perps-sdk-provider-hyperliquid",
|
|
3
|
+
"version": "0.0.0-preview-c903f1e",
|
|
4
|
+
"description": "Hyperliquid provider plugin for @lifi/perps-sdk",
|
|
5
|
+
"homepage": "https://github.com/lifinance/perps-sdk",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/lifinance/perps-sdk/issues"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/lifinance/perps-sdk.git"
|
|
12
|
+
},
|
|
13
|
+
"license": "Apache-2.0",
|
|
14
|
+
"author": "LI.FI <dev@li.fi>",
|
|
15
|
+
"type": "module",
|
|
16
|
+
"main": "./dist/cjs/index.js",
|
|
17
|
+
"module": "./dist/esm/index.js",
|
|
18
|
+
"types": "./dist/types/index.d.ts",
|
|
19
|
+
"typings": "./dist/types/index.d.ts",
|
|
20
|
+
"sideEffects": false,
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/types/index.d.ts",
|
|
24
|
+
"import": "./dist/esm/index.js",
|
|
25
|
+
"default": "./dist/cjs/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./utils": {
|
|
28
|
+
"types": "./dist/types/utils/index.d.ts",
|
|
29
|
+
"import": "./dist/esm/utils/index.js",
|
|
30
|
+
"default": "./dist/cjs/utils/index.js"
|
|
31
|
+
},
|
|
32
|
+
"./package.json": "./package.json"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist/**",
|
|
36
|
+
"!dist/**/*.tsbuildinfo",
|
|
37
|
+
"src/**/*.ts",
|
|
38
|
+
"!src/**/*.spec.ts",
|
|
39
|
+
"!src/**/*.test.ts",
|
|
40
|
+
"!src/**/*.mock.ts",
|
|
41
|
+
"!src/**/*.handlers.ts",
|
|
42
|
+
"!src/**/*.tsbuildinfo",
|
|
43
|
+
"!**/__mocks__/**",
|
|
44
|
+
"!*.tmp",
|
|
45
|
+
"!*.env",
|
|
46
|
+
"!tsconfig.json"
|
|
47
|
+
],
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"big.js": "^7.0.1",
|
|
50
|
+
"@lifi/perps-types": "0.0.0-preview-c903f1e"
|
|
51
|
+
},
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"viem": "^2.48.8",
|
|
54
|
+
"@lifi/perps-sdk": "0.0.0-preview-c903f1e"
|
|
55
|
+
},
|
|
56
|
+
"publishConfig": {
|
|
57
|
+
"access": "public"
|
|
58
|
+
},
|
|
59
|
+
"keywords": [
|
|
60
|
+
"perps",
|
|
61
|
+
"perpetuals",
|
|
62
|
+
"trading",
|
|
63
|
+
"defi",
|
|
64
|
+
"lifi",
|
|
65
|
+
"sdk",
|
|
66
|
+
"hyperliquid"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type ActionSignerContribution,
|
|
3
|
+
type LiquidationEstimateParams,
|
|
4
|
+
PerpsError,
|
|
5
|
+
PerpsErrorMessage,
|
|
6
|
+
type PerpsProviderPlugin,
|
|
7
|
+
type PerpsSDKClient,
|
|
8
|
+
type ProviderGetAccountParams,
|
|
9
|
+
type ProviderGetActivityParams,
|
|
10
|
+
type ProviderGetFillsParams,
|
|
11
|
+
type ProviderGetOrderParams,
|
|
12
|
+
type ProviderGetOrdersParams,
|
|
13
|
+
type ProviderGetPositionsParams,
|
|
14
|
+
type ProviderGetQuoteParams,
|
|
15
|
+
resolveQuote,
|
|
16
|
+
type SDKRequestOptions,
|
|
17
|
+
type SignActionsContext,
|
|
18
|
+
type StorageAdapter,
|
|
19
|
+
} from '@lifi/perps-sdk'
|
|
20
|
+
import {
|
|
21
|
+
type AccountConfig,
|
|
22
|
+
type AccountConfigSetting,
|
|
23
|
+
type AccountResponse,
|
|
24
|
+
type AccountSummary,
|
|
25
|
+
type ActionStep,
|
|
26
|
+
ActionType,
|
|
27
|
+
type ActivitiesResponse,
|
|
28
|
+
type FillsResponse,
|
|
29
|
+
type Market,
|
|
30
|
+
type Order,
|
|
31
|
+
type OrdersResponse,
|
|
32
|
+
PerpsErrorCode,
|
|
33
|
+
type PerpsMarket,
|
|
34
|
+
PerpsSigner,
|
|
35
|
+
type Position,
|
|
36
|
+
type PositionsResponse,
|
|
37
|
+
type ProviderAction,
|
|
38
|
+
type Quote,
|
|
39
|
+
type SignedActionStep,
|
|
40
|
+
type SigningMethod,
|
|
41
|
+
} from '@lifi/perps-types'
|
|
42
|
+
import { type Address, type Hex, isAddress } from 'viem'
|
|
43
|
+
import { projectHyperliquidConfigSettings } from './accountConfig.js'
|
|
44
|
+
import { getAccountSummary } from './accountSummary.js'
|
|
45
|
+
import {
|
|
46
|
+
DEFAULT_HYPERLIQUID_API_URL,
|
|
47
|
+
HYPERLIQUID_FEE_TIER_FALLBACK,
|
|
48
|
+
PROVIDER_KEY,
|
|
49
|
+
SPOT_MARKET_ID,
|
|
50
|
+
} from './constants.js'
|
|
51
|
+
import { HyperliquidContextRef } from './context.js'
|
|
52
|
+
import { getAccount } from './services/getAccount.js'
|
|
53
|
+
import { getActivity } from './services/getActivity.js'
|
|
54
|
+
import { getFills } from './services/getFills.js'
|
|
55
|
+
import { getOrder } from './services/getOrder.js'
|
|
56
|
+
import { getOrders } from './services/getOrders.js'
|
|
57
|
+
import { getPositions } from './services/getPositions.js'
|
|
58
|
+
import {
|
|
59
|
+
type HyperliquidAgent,
|
|
60
|
+
HyperliquidAgentStore,
|
|
61
|
+
} from './signers/HyperliquidAgentStore.js'
|
|
62
|
+
import { hyperliquidSignActions } from './signers/signActions.js'
|
|
63
|
+
import type { HlExtraAgents } from './types/index.js'
|
|
64
|
+
import { hlInfoOptions, infoRequest } from './utils/infoClient.js'
|
|
65
|
+
import { calculateLiquidationPrice } from './utils/liquidation.js'
|
|
66
|
+
import { formatOrderPrice, formatOrderSize } from './utils/orderFormatting.js'
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Options for {@link hyperliquidProvider}.
|
|
70
|
+
*
|
|
71
|
+
* @public
|
|
72
|
+
*/
|
|
73
|
+
export interface HyperliquidProviderOptions {
|
|
74
|
+
/**
|
|
75
|
+
* Base URL for the Hyperliquid REST surface. Defaults to
|
|
76
|
+
* `https://api.hyperliquid.xyz`. Override to point at a custom or
|
|
77
|
+
* third-party endpoint — e.g. a reverse proxy, a self-hosted mirror, or a
|
|
78
|
+
* rate-limit-managed gateway in front of Hyperliquid.
|
|
79
|
+
*/
|
|
80
|
+
apiUrl?: string
|
|
81
|
+
/**
|
|
82
|
+
* Storage adapter for the user's per-address Hyperliquid agent keypair.
|
|
83
|
+
* Defaults to browser `localStorage`. Pass a custom adapter for SSR /
|
|
84
|
+
* non-browser hosts or encrypted storage.
|
|
85
|
+
*/
|
|
86
|
+
storage?: StorageAdapter
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Hyperliquid provider plugin extended with agent-keypair lifecycle methods.
|
|
91
|
+
* Hyperliquid signs trading actions with a per-user agent wallet the user
|
|
92
|
+
* approves via `APPROVE_AGENT`; the plugin owns that keypair's generation,
|
|
93
|
+
* persistence, and revocation. The base {@link PerpsProviderPlugin} contract
|
|
94
|
+
* stays provider-agnostic — this extension is opt-in for callers that
|
|
95
|
+
* explicitly type against it (e.g. to surface a "revoke agent" affordance).
|
|
96
|
+
*/
|
|
97
|
+
export interface HyperliquidPerpsProvider extends PerpsProviderPlugin {
|
|
98
|
+
/** Resolve the agent wallet address, throwing if none has been created. */
|
|
99
|
+
getAgentAddress(address: Address): Promise<Address>
|
|
100
|
+
/** Whether an agent keypair exists for the user address. */
|
|
101
|
+
hasAgent(address: Address): Promise<boolean>
|
|
102
|
+
/** Remove the user's agent keypair (revoke local authorization). */
|
|
103
|
+
removeAgent(address: Address): Promise<void>
|
|
104
|
+
/** Import an existing agent keypair for the user address. */
|
|
105
|
+
importAgent(address: Address, privateKey: Hex): Promise<HyperliquidAgent>
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Factory for the Hyperliquid {@link PerpsProviderPlugin}.
|
|
110
|
+
*
|
|
111
|
+
* Account-specific state is read direct from `${apiUrl}/info`; enriched asset
|
|
112
|
+
* metadata and public/shared data come from the LI.FI backend (Valkey-cached).
|
|
113
|
+
* Pass to `createPerpsClient({ providers: [hyperliquidProvider()] })` and look
|
|
114
|
+
* up via `client.getProvider('hyperliquid')`.
|
|
115
|
+
*
|
|
116
|
+
* Write actions are EIP-712 typed data signed by the user's Hyperliquid agent
|
|
117
|
+
* keypair; the plugin owns that keypair (generation, storage, revocation) and
|
|
118
|
+
* dispatches the agent-signed arm via `signActions`.
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```ts
|
|
122
|
+
* const client = createPerpsClient({
|
|
123
|
+
* integrator: 'my-app',
|
|
124
|
+
* providers: [hyperliquidProvider()],
|
|
125
|
+
* })
|
|
126
|
+
* ```
|
|
127
|
+
* @public
|
|
128
|
+
*/
|
|
129
|
+
export function hyperliquidProvider(
|
|
130
|
+
options: HyperliquidProviderOptions = {}
|
|
131
|
+
): HyperliquidPerpsProvider {
|
|
132
|
+
const apiUrl = options.apiUrl ?? DEFAULT_HYPERLIQUID_API_URL
|
|
133
|
+
const agentStore = new HyperliquidAgentStore(options.storage)
|
|
134
|
+
const contextRef = new HyperliquidContextRef(apiUrl)
|
|
135
|
+
|
|
136
|
+
const toLowerAddress = (value: unknown): string | null =>
|
|
137
|
+
typeof value === 'string' && isAddress(value) ? value.toLowerCase() : null
|
|
138
|
+
|
|
139
|
+
const toValidUntilMs = (value: unknown): number | null => {
|
|
140
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
141
|
+
return value
|
|
142
|
+
}
|
|
143
|
+
if (typeof value === 'string') {
|
|
144
|
+
const parsed = Number(value)
|
|
145
|
+
return Number.isFinite(parsed) ? parsed : null
|
|
146
|
+
}
|
|
147
|
+
return null
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const isKnownExpiredRemoteAgent = async (
|
|
151
|
+
address: Address,
|
|
152
|
+
localAgentAddress: Address
|
|
153
|
+
): Promise<boolean> => {
|
|
154
|
+
let context: ReturnType<typeof contextRef.require> | null = null
|
|
155
|
+
try {
|
|
156
|
+
context = contextRef.require()
|
|
157
|
+
} catch {
|
|
158
|
+
// Unbound provider (e.g. direct unit tests) cannot query /info.
|
|
159
|
+
return false
|
|
160
|
+
}
|
|
161
|
+
const agents = await infoRequest<HlExtraAgents>(
|
|
162
|
+
apiUrl,
|
|
163
|
+
{ type: 'extraAgents', user: address },
|
|
164
|
+
hlInfoOptions(context.client)
|
|
165
|
+
)
|
|
166
|
+
const local = localAgentAddress.toLowerCase()
|
|
167
|
+
const match = agents.find(
|
|
168
|
+
(agent) => toLowerAddress(agent.address) === local
|
|
169
|
+
) as Record<string, unknown> | undefined
|
|
170
|
+
if (!match) {
|
|
171
|
+
return false
|
|
172
|
+
}
|
|
173
|
+
const validUntilMs = toValidUntilMs(match.validUntil)
|
|
174
|
+
return validUntilMs !== null && validUntilMs <= Date.now()
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const resolveApproveAgentAddress = async (
|
|
178
|
+
address: Address
|
|
179
|
+
): Promise<Address> => {
|
|
180
|
+
try {
|
|
181
|
+
const localAgent = await agentStore.get(address)
|
|
182
|
+
try {
|
|
183
|
+
if (await isKnownExpiredRemoteAgent(address, localAgent.address)) {
|
|
184
|
+
await agentStore.remove(address)
|
|
185
|
+
return (await agentStore.getOrCreate(address)).address
|
|
186
|
+
}
|
|
187
|
+
} catch {
|
|
188
|
+
// If the upstream extra-agent probe fails, keep the existing local key.
|
|
189
|
+
}
|
|
190
|
+
return localAgent.address
|
|
191
|
+
} catch (error) {
|
|
192
|
+
if (
|
|
193
|
+
error instanceof PerpsError &&
|
|
194
|
+
error.message === PerpsErrorMessage.AgentNotFound
|
|
195
|
+
) {
|
|
196
|
+
return (await agentStore.getOrCreate(address)).address
|
|
197
|
+
}
|
|
198
|
+
throw error
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return {
|
|
203
|
+
type: PROVIDER_KEY,
|
|
204
|
+
|
|
205
|
+
bind: (client: PerpsSDKClient): void => contextRef.bind(client),
|
|
206
|
+
|
|
207
|
+
getAgentAddress: async (address: Address): Promise<Address> =>
|
|
208
|
+
(await agentStore.get(address)).address,
|
|
209
|
+
|
|
210
|
+
hasAgent: (address: Address): Promise<boolean> => agentStore.has(address),
|
|
211
|
+
|
|
212
|
+
removeAgent: (address: Address): Promise<void> =>
|
|
213
|
+
agentStore.remove(address),
|
|
214
|
+
|
|
215
|
+
importAgent: (
|
|
216
|
+
address: Address,
|
|
217
|
+
privateKey: Hex
|
|
218
|
+
): Promise<HyperliquidAgent> => agentStore.import(address, privateKey),
|
|
219
|
+
|
|
220
|
+
resolveActionRequest: async (
|
|
221
|
+
action: ActionType,
|
|
222
|
+
address: Address,
|
|
223
|
+
signers: PerpsSigner[]
|
|
224
|
+
): Promise<ActionSignerContribution> => {
|
|
225
|
+
// APPROVE_AGENT is user-signed: the user authorises the agent, so the
|
|
226
|
+
// agent address rides as a param (not signerAddress). The agent is
|
|
227
|
+
// provisioned on first use so its address is known before the backend
|
|
228
|
+
// builds the typed data.
|
|
229
|
+
if (action === ActionType.APPROVE_AGENT) {
|
|
230
|
+
const agentAddress = await resolveApproveAgentAddress(address)
|
|
231
|
+
return { params: { agentAddress } }
|
|
232
|
+
}
|
|
233
|
+
// Agent-signed actions (trades, account-mode) carry the agent as the
|
|
234
|
+
// on-wire signerAddress. User-signed actions (builder-fee, withdrawal)
|
|
235
|
+
// contribute nothing — core submits under the user's own address.
|
|
236
|
+
if (signers.includes(PerpsSigner.AGENT)) {
|
|
237
|
+
const agent = await agentStore.get(address)
|
|
238
|
+
return { signerAddress: agent.address }
|
|
239
|
+
}
|
|
240
|
+
return {}
|
|
241
|
+
},
|
|
242
|
+
|
|
243
|
+
signActions: (
|
|
244
|
+
method: SigningMethod,
|
|
245
|
+
steps: ActionStep[],
|
|
246
|
+
address: Address,
|
|
247
|
+
ctx?: SignActionsContext
|
|
248
|
+
): Promise<SignedActionStep[]> =>
|
|
249
|
+
hyperliquidSignActions(agentStore, method, steps, address, ctx),
|
|
250
|
+
|
|
251
|
+
getAccount: (
|
|
252
|
+
params: ProviderGetAccountParams,
|
|
253
|
+
opts?: SDKRequestOptions
|
|
254
|
+
): Promise<AccountResponse> =>
|
|
255
|
+
getAccount(contextRef.require(), { address: params.address }, opts),
|
|
256
|
+
|
|
257
|
+
getPositions: (
|
|
258
|
+
params: ProviderGetPositionsParams,
|
|
259
|
+
opts?: SDKRequestOptions
|
|
260
|
+
): Promise<PositionsResponse> =>
|
|
261
|
+
getPositions(
|
|
262
|
+
contextRef.require(),
|
|
263
|
+
{
|
|
264
|
+
address: params.address,
|
|
265
|
+
marketId: params.marketId,
|
|
266
|
+
limit: params.limit,
|
|
267
|
+
},
|
|
268
|
+
opts
|
|
269
|
+
),
|
|
270
|
+
|
|
271
|
+
getOrders: (
|
|
272
|
+
params: ProviderGetOrdersParams,
|
|
273
|
+
opts?: SDKRequestOptions
|
|
274
|
+
): Promise<OrdersResponse> =>
|
|
275
|
+
getOrders(
|
|
276
|
+
contextRef.require(),
|
|
277
|
+
{
|
|
278
|
+
address: params.address,
|
|
279
|
+
marketId: params.marketId,
|
|
280
|
+
limit: params.limit,
|
|
281
|
+
},
|
|
282
|
+
opts
|
|
283
|
+
),
|
|
284
|
+
|
|
285
|
+
getOrder: (
|
|
286
|
+
params: ProviderGetOrderParams,
|
|
287
|
+
opts?: SDKRequestOptions
|
|
288
|
+
): Promise<Order> =>
|
|
289
|
+
getOrder(
|
|
290
|
+
contextRef.require(),
|
|
291
|
+
{ address: params.address, id: params.id },
|
|
292
|
+
opts
|
|
293
|
+
),
|
|
294
|
+
|
|
295
|
+
getFills: (
|
|
296
|
+
params: ProviderGetFillsParams,
|
|
297
|
+
opts?: SDKRequestOptions
|
|
298
|
+
): Promise<FillsResponse> =>
|
|
299
|
+
getFills(
|
|
300
|
+
contextRef.require(),
|
|
301
|
+
{
|
|
302
|
+
address: params.address,
|
|
303
|
+
limit: params.limit,
|
|
304
|
+
cursor: params.cursor,
|
|
305
|
+
startTime: params.startTime,
|
|
306
|
+
endTime: params.endTime,
|
|
307
|
+
},
|
|
308
|
+
opts
|
|
309
|
+
),
|
|
310
|
+
|
|
311
|
+
getActivity: (
|
|
312
|
+
params: ProviderGetActivityParams,
|
|
313
|
+
opts?: SDKRequestOptions
|
|
314
|
+
): Promise<ActivitiesResponse> =>
|
|
315
|
+
getActivity(
|
|
316
|
+
contextRef.require(),
|
|
317
|
+
{
|
|
318
|
+
address: params.address,
|
|
319
|
+
limit: params.limit,
|
|
320
|
+
cursor: params.cursor,
|
|
321
|
+
startTime: params.startTime,
|
|
322
|
+
endTime: params.endTime,
|
|
323
|
+
type: params.type,
|
|
324
|
+
},
|
|
325
|
+
opts
|
|
326
|
+
),
|
|
327
|
+
|
|
328
|
+
getQuote: (
|
|
329
|
+
params: ProviderGetQuoteParams,
|
|
330
|
+
opts?: SDKRequestOptions
|
|
331
|
+
): Promise<Quote> =>
|
|
332
|
+
resolveQuote(
|
|
333
|
+
contextRef.require().client,
|
|
334
|
+
PROVIDER_KEY,
|
|
335
|
+
params,
|
|
336
|
+
HYPERLIQUID_FEE_TIER_FALLBACK,
|
|
337
|
+
opts
|
|
338
|
+
),
|
|
339
|
+
|
|
340
|
+
getAccountSummary: (
|
|
341
|
+
account: AccountResponse,
|
|
342
|
+
positions: Position[]
|
|
343
|
+
): AccountSummary => getAccountSummary(account, positions),
|
|
344
|
+
|
|
345
|
+
formatOrderPrice: (market: Market, price: number): string =>
|
|
346
|
+
formatOrderPrice(
|
|
347
|
+
price,
|
|
348
|
+
market.szDecimals,
|
|
349
|
+
market.categoryId === SPOT_MARKET_ID ? 'spot' : undefined
|
|
350
|
+
),
|
|
351
|
+
|
|
352
|
+
formatOrderSize: (market: Market, size: number): string =>
|
|
353
|
+
formatOrderSize(size, market.szDecimals),
|
|
354
|
+
|
|
355
|
+
estimateLiquidationPrice: (
|
|
356
|
+
market: PerpsMarket,
|
|
357
|
+
params: LiquidationEstimateParams
|
|
358
|
+
): number | undefined =>
|
|
359
|
+
calculateLiquidationPrice(
|
|
360
|
+
params.entryPrice,
|
|
361
|
+
params.leverage,
|
|
362
|
+
params.isLong,
|
|
363
|
+
market.maxLeverage
|
|
364
|
+
),
|
|
365
|
+
|
|
366
|
+
projectConfig: (
|
|
367
|
+
config: AccountConfig,
|
|
368
|
+
setup: ProviderAction[],
|
|
369
|
+
options: ProviderAction[]
|
|
370
|
+
): AccountConfigSetting[] => {
|
|
371
|
+
if (config.provider !== PROVIDER_KEY) {
|
|
372
|
+
throw new PerpsError(
|
|
373
|
+
PerpsErrorCode.SDKError,
|
|
374
|
+
`hyperliquidProvider.projectConfig received config for provider ` +
|
|
375
|
+
`'${config.provider}'.`
|
|
376
|
+
)
|
|
377
|
+
}
|
|
378
|
+
return projectHyperliquidConfigSettings(config, setup, options)
|
|
379
|
+
},
|
|
380
|
+
}
|
|
381
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { PerpsError } from '@lifi/perps-sdk'
|
|
2
|
+
import type {
|
|
3
|
+
AccountConfigSetting,
|
|
4
|
+
HyperliquidAccountConfig,
|
|
5
|
+
ProviderAction,
|
|
6
|
+
} from '@lifi/perps-types'
|
|
7
|
+
import { ActionType, PerpsErrorCode } from '@lifi/perps-types'
|
|
8
|
+
|
|
9
|
+
function assertNever(value: never): never {
|
|
10
|
+
throw new Error(
|
|
11
|
+
`Unreachable: exhaustiveness check failed for value ${JSON.stringify(value)}`
|
|
12
|
+
)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Project a single Hyperliquid descriptor against the typed
|
|
17
|
+
* `HyperliquidAccountConfig` into an `AccountConfigSetting`.
|
|
18
|
+
*
|
|
19
|
+
* Mapping table:
|
|
20
|
+
*
|
|
21
|
+
* | descriptor.type | projected values
|
|
22
|
+
* |-----------------------|----------------------------------------------
|
|
23
|
+
* | APPROVE_AGENT | [] (no parameters)
|
|
24
|
+
* | APPROVE_BUILDER_FEE | [] (no parameters)
|
|
25
|
+
* | ACCOUNT_MODE | [{ name: 'mode', value: config.abstractionMode }]
|
|
26
|
+
*
|
|
27
|
+
* The switch is exhaustive over `ActionType` so enum additions force a
|
|
28
|
+
* compile error in the `default` arm. ActionTypes that are not valid on
|
|
29
|
+
* `Provider.setup` / `Provider.options` for Hyperliquid throw at runtime.
|
|
30
|
+
*/
|
|
31
|
+
function projectHyperliquidDescriptor(
|
|
32
|
+
descriptor: ProviderAction,
|
|
33
|
+
config: HyperliquidAccountConfig
|
|
34
|
+
): AccountConfigSetting {
|
|
35
|
+
switch (descriptor.type) {
|
|
36
|
+
case ActionType.APPROVE_AGENT:
|
|
37
|
+
case ActionType.APPROVE_BUILDER_FEE:
|
|
38
|
+
return { type: descriptor.type, values: [] }
|
|
39
|
+
|
|
40
|
+
case ActionType.ACCOUNT_MODE:
|
|
41
|
+
return {
|
|
42
|
+
type: descriptor.type,
|
|
43
|
+
values: [{ name: 'mode', value: config.abstractionMode }],
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
case ActionType.ACCOUNT_TYPE:
|
|
47
|
+
case ActionType.SEND_ASSET:
|
|
48
|
+
case ActionType.WITHDRAWAL:
|
|
49
|
+
case ActionType.TRANSFER:
|
|
50
|
+
case ActionType.PLACE_ORDER:
|
|
51
|
+
case ActionType.PLACE_TRIGGER_ORDER:
|
|
52
|
+
case ActionType.CANCEL_ORDER:
|
|
53
|
+
case ActionType.CANCEL_ALL_ORDERS:
|
|
54
|
+
case ActionType.MODIFY_ORDER:
|
|
55
|
+
case ActionType.UPDATE_LEVERAGE:
|
|
56
|
+
case ActionType.UPDATE_POSITION_MARGIN:
|
|
57
|
+
case ActionType.REGISTER_API_KEY:
|
|
58
|
+
case ActionType.APPROVE_READ_ONLY_TOKEN:
|
|
59
|
+
case ActionType.DEPOSIT:
|
|
60
|
+
case ActionType.META_VOTE:
|
|
61
|
+
case ActionType.META_ACCEPT_TERMS:
|
|
62
|
+
throw new PerpsError(
|
|
63
|
+
PerpsErrorCode.SDKError,
|
|
64
|
+
`Hyperliquid account-config mapper has no projection for ` +
|
|
65
|
+
`descriptor type '${descriptor.type}' — this ActionType is not ` +
|
|
66
|
+
`valid on Provider.setup / Provider.options for Hyperliquid.`
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
default:
|
|
70
|
+
return assertNever(descriptor.type)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Project the union of Hyperliquid setup + options descriptors against the
|
|
76
|
+
* typed `HyperliquidAccountConfig`. Produces exactly one
|
|
77
|
+
* `AccountConfigSetting` per descriptor, in `setup`-then-`options` order.
|
|
78
|
+
*
|
|
79
|
+
* @public
|
|
80
|
+
*/
|
|
81
|
+
export function projectHyperliquidConfigSettings(
|
|
82
|
+
config: HyperliquidAccountConfig,
|
|
83
|
+
setup: ProviderAction[],
|
|
84
|
+
options: ProviderAction[]
|
|
85
|
+
): AccountConfigSetting[] {
|
|
86
|
+
return [...setup, ...options].map((descriptor) =>
|
|
87
|
+
projectHyperliquidDescriptor(descriptor, config)
|
|
88
|
+
)
|
|
89
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { summarizeAccount } from '@lifi/perps-sdk'
|
|
2
|
+
import type {
|
|
3
|
+
AccountResponse,
|
|
4
|
+
AccountSummary,
|
|
5
|
+
Position,
|
|
6
|
+
} from '@lifi/perps-types'
|
|
7
|
+
import { HlAbstractionMode } from './types/index.js'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* In `unifiedAccount`/`portfolioMargin` the whole account lives in spot, so the
|
|
11
|
+
* collateral rows are already gross holdings (locked margin included). In
|
|
12
|
+
* `disabled`/`dexAbstraction` (and the unset/standard mode) the venue rows hold
|
|
13
|
+
* `accountValue`, which Hyperliquid reports net of locked margin — i.e. free.
|
|
14
|
+
*/
|
|
15
|
+
const isUnifiedMode = (account: AccountResponse): boolean =>
|
|
16
|
+
account.config.provider === 'hyperliquid' &&
|
|
17
|
+
(account.config.abstractionMode === HlAbstractionMode.UNIFIED_ACCOUNT ||
|
|
18
|
+
account.config.abstractionMode === HlAbstractionMode.PORTFOLIO_MARGIN)
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Roll a Hyperliquid {@link AccountResponse} up into an {@link AccountSummary},
|
|
22
|
+
* branching on the abstraction mode so the gross/free meaning of the collateral
|
|
23
|
+
* rows is interpreted correctly.
|
|
24
|
+
*
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export function getAccountSummary(
|
|
28
|
+
account: AccountResponse,
|
|
29
|
+
positions: Position[]
|
|
30
|
+
): AccountSummary {
|
|
31
|
+
return summarizeAccount(account, positions, isUnifiedMode(account))
|
|
32
|
+
}
|
package/src/constants.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { FeeTier } from '@lifi/perps-types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Hyperliquid provider key (exported from the package index as
|
|
5
|
+
* `HYPERLIQUID_PROVIDER_KEY`).
|
|
6
|
+
*
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export const PROVIDER_KEY = 'hyperliquid'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Default Hyperliquid REST base URL.
|
|
13
|
+
*
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export const DEFAULT_HYPERLIQUID_API_URL = 'https://api.hyperliquid.xyz'
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Approximate published baseline maker/taker fee tier for Hyperliquid, used to
|
|
20
|
+
* seed fee math before the live account `feeTier` resolves. Rates are fractions
|
|
21
|
+
* (not basis points): `0.00015` = 0.015% maker, `0.00045` = 0.045% taker.
|
|
22
|
+
*
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
export const HYPERLIQUID_FEE_TIER_FALLBACK: FeeTier = {
|
|
26
|
+
maker: '0.00015',
|
|
27
|
+
taker: '0.00045',
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** @internal */
|
|
31
|
+
export const DEFAULT_HISTORY_LIMIT = 50
|
|
32
|
+
/** @internal */
|
|
33
|
+
export const MAX_HISTORY_LIMIT = 200
|
|
34
|
+
/** @internal */
|
|
35
|
+
export const NINETY_DAYS_MS = 90 * 24 * 60 * 60 * 1000
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Main perps DEX uses an empty sub-dex name on the wire; surfaced as
|
|
39
|
+
* 'hyperliquid' in normalised market IDs.
|
|
40
|
+
*
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
export const MAIN_DEX_NAME = ''
|
|
44
|
+
/** @internal */
|
|
45
|
+
export const MAIN_MARKET_ID = 'hyperliquid'
|
|
46
|
+
/** @internal */
|
|
47
|
+
export const SPOT_MARKET_ID = 'spot'
|