@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,101 @@
|
|
|
1
|
+
import { getMarketRegistry, type SDKRequestOptions } from '@lifi/perps-sdk'
|
|
2
|
+
import type { OpenOrder, OrdersResponse, TriggerOrder } from '@lifi/perps-types'
|
|
3
|
+
import type { Address } from 'viem'
|
|
4
|
+
import { PROVIDER_KEY } from '../constants.js'
|
|
5
|
+
import type { HyperliquidContext } from '../context.js'
|
|
6
|
+
import type {
|
|
7
|
+
HlFrontendOpenOrder,
|
|
8
|
+
HlFrontendOpenOrders,
|
|
9
|
+
} from '../types/index.js'
|
|
10
|
+
import {
|
|
11
|
+
isTriggerOrder,
|
|
12
|
+
mapOpenOrder,
|
|
13
|
+
mapTriggerOrder,
|
|
14
|
+
perpsDexNames,
|
|
15
|
+
} from '../utils/index.js'
|
|
16
|
+
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js'
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Parameters for {@link getOrders}.
|
|
20
|
+
*
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
export interface GetOrdersParams {
|
|
24
|
+
address: Address
|
|
25
|
+
/** Optional filter — opaque `Market.id`. */
|
|
26
|
+
marketId?: string
|
|
27
|
+
limit?: number
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Fetch open + trigger orders across every supported perps sub-dex for
|
|
32
|
+
* `address`, normalised into `OrdersResponse`. Trigger orders that appear as
|
|
33
|
+
* children of a parent limit order (Hyperliquid's `normalTpsl` flow) are
|
|
34
|
+
* extracted and surfaced alongside top-level trigger orders. The backend's
|
|
35
|
+
* enriched asset list supplies the sub-dex fan-out and display fields; only
|
|
36
|
+
* `frontendOpenOrders` is read direct.
|
|
37
|
+
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
38
|
+
* @public
|
|
39
|
+
*/
|
|
40
|
+
export const getOrders = async (
|
|
41
|
+
{ client, apiUrl }: HyperliquidContext,
|
|
42
|
+
params: GetOrdersParams,
|
|
43
|
+
options?: SDKRequestOptions
|
|
44
|
+
): Promise<OrdersResponse> => {
|
|
45
|
+
const registry = getMarketRegistry(client, PROVIDER_KEY)
|
|
46
|
+
const markets = await registry.sync()
|
|
47
|
+
const infoOpts = hlInfoOptions(client, options)
|
|
48
|
+
|
|
49
|
+
const ordersResults = await Promise.all(
|
|
50
|
+
perpsDexNames(markets).map((name) =>
|
|
51
|
+
infoRequest<HlFrontendOpenOrders>(
|
|
52
|
+
apiUrl,
|
|
53
|
+
{
|
|
54
|
+
type: 'frontendOpenOrders',
|
|
55
|
+
user: params.address,
|
|
56
|
+
...(name ? { dex: name } : {}),
|
|
57
|
+
},
|
|
58
|
+
infoOpts
|
|
59
|
+
)
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
const raw: HlFrontendOpenOrder[] = ordersResults.flat()
|
|
64
|
+
|
|
65
|
+
const childOids = new Set<number>()
|
|
66
|
+
for (const o of raw) {
|
|
67
|
+
for (const child of o.children) {
|
|
68
|
+
childOids.add(child.oid)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const nonChild = raw.filter((o) => !childOids.has(o.oid))
|
|
73
|
+
|
|
74
|
+
let openOrders: OpenOrder[] = nonChild
|
|
75
|
+
.filter((o) => !isTriggerOrder(o))
|
|
76
|
+
.map((o) => mapOpenOrder(o, registry.require(o.coin)))
|
|
77
|
+
|
|
78
|
+
let triggerOrders: TriggerOrder[] = [
|
|
79
|
+
...nonChild
|
|
80
|
+
.filter((o) => isTriggerOrder(o))
|
|
81
|
+
.map((o) => mapTriggerOrder(o, registry.require(o.coin))),
|
|
82
|
+
...raw
|
|
83
|
+
.filter((o) => childOids.has(o.oid))
|
|
84
|
+
.map((o) => mapTriggerOrder(o, registry.require(o.coin))),
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
if (params.marketId !== undefined) {
|
|
88
|
+
openOrders = openOrders.filter((o) => o.market.id === params.marketId)
|
|
89
|
+
triggerOrders = triggerOrders.filter((o) => o.market.id === params.marketId)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return {
|
|
93
|
+
provider: PROVIDER_KEY,
|
|
94
|
+
openOrders,
|
|
95
|
+
triggerOrders,
|
|
96
|
+
pagination: {
|
|
97
|
+
limit: params.limit ?? openOrders.length + triggerOrders.length,
|
|
98
|
+
hasMore: false,
|
|
99
|
+
},
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { getMarketRegistry, type SDKRequestOptions } from '@lifi/perps-sdk'
|
|
2
|
+
import type { PositionsResponse } from '@lifi/perps-types'
|
|
3
|
+
import type { Address } from 'viem'
|
|
4
|
+
import { PROVIDER_KEY } from '../constants.js'
|
|
5
|
+
import type { HyperliquidContext } from '../context.js'
|
|
6
|
+
import type { HlClearinghouseState } from '../types/index.js'
|
|
7
|
+
import {
|
|
8
|
+
isOpenAssetPosition,
|
|
9
|
+
mapPosition,
|
|
10
|
+
perpsDexNames,
|
|
11
|
+
} from '../utils/index.js'
|
|
12
|
+
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Parameters for {@link getPositions}.
|
|
16
|
+
*
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
export interface GetPositionsParams {
|
|
20
|
+
address: Address
|
|
21
|
+
/** Filter to a single opaque `Market.id` (e.g. `'BTC'`, `'xyz:PURR'`). */
|
|
22
|
+
marketId?: string
|
|
23
|
+
/** Page size hint surfaced on the response. Hyperliquid returns all open positions in one call, so pagination is never required. */
|
|
24
|
+
limit?: number
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Fetch open positions across every supported perps sub-dex for `address`,
|
|
29
|
+
* normalised into `PositionsResponse`. Zero-size entries are dropped. The
|
|
30
|
+
* backend's enriched asset list supplies the sub-dex fan-out and display
|
|
31
|
+
* fields; only `clearinghouseState` is read direct from Hyperliquid.
|
|
32
|
+
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
export const getPositions = async (
|
|
36
|
+
{ client, apiUrl }: HyperliquidContext,
|
|
37
|
+
params: GetPositionsParams,
|
|
38
|
+
options?: SDKRequestOptions
|
|
39
|
+
): Promise<PositionsResponse> => {
|
|
40
|
+
const registry = getMarketRegistry(client, PROVIDER_KEY)
|
|
41
|
+
const markets = await registry.sync()
|
|
42
|
+
const infoOpts = hlInfoOptions(client, options)
|
|
43
|
+
|
|
44
|
+
const stateResults = await Promise.all(
|
|
45
|
+
perpsDexNames(markets).map((name) =>
|
|
46
|
+
infoRequest<HlClearinghouseState>(
|
|
47
|
+
apiUrl,
|
|
48
|
+
{
|
|
49
|
+
type: 'clearinghouseState',
|
|
50
|
+
user: params.address,
|
|
51
|
+
...(name ? { dex: name } : {}),
|
|
52
|
+
},
|
|
53
|
+
infoOpts
|
|
54
|
+
)
|
|
55
|
+
)
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
let positions = stateResults.flatMap((state) =>
|
|
59
|
+
state.assetPositions
|
|
60
|
+
.filter(isOpenAssetPosition)
|
|
61
|
+
.map((ap) => mapPosition(ap, registry.require(ap.position.coin)))
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
if (params.marketId !== undefined) {
|
|
65
|
+
positions = positions.filter((p) => p.market.id === params.marketId)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return {
|
|
69
|
+
provider: PROVIDER_KEY,
|
|
70
|
+
positions,
|
|
71
|
+
pagination: {
|
|
72
|
+
limit: params.limit ?? positions.length,
|
|
73
|
+
hasMore: false,
|
|
74
|
+
},
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import {
|
|
2
|
+
localStorageAdapter,
|
|
3
|
+
PerpsError,
|
|
4
|
+
PerpsErrorMessage,
|
|
5
|
+
parseStoredRecord,
|
|
6
|
+
type StorageAdapter,
|
|
7
|
+
} from '@lifi/perps-sdk'
|
|
8
|
+
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
9
|
+
import { type Address, type Hex, isAddress, isHex } from 'viem'
|
|
10
|
+
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
|
|
11
|
+
import { PROVIDER_KEY } from '../constants.js'
|
|
12
|
+
|
|
13
|
+
const STORAGE_PREFIX = 'lifi-perps-agent'
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Hyperliquid agent keypair — an EVM keypair the user approves (via
|
|
17
|
+
* `APPROVE_AGENT`) to sign trading actions on their behalf, so each order
|
|
18
|
+
* does not require a wallet prompt.
|
|
19
|
+
*/
|
|
20
|
+
export interface HyperliquidAgent {
|
|
21
|
+
/** Agent wallet address. */
|
|
22
|
+
address: Address
|
|
23
|
+
/** Agent private key. */
|
|
24
|
+
privateKey: Hex
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const isParsablePrivateKey = (value: unknown): value is Hex => {
|
|
28
|
+
if (!isHex(value)) {
|
|
29
|
+
return false
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
privateKeyToAccount(value)
|
|
33
|
+
return true
|
|
34
|
+
} catch {
|
|
35
|
+
return false
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const isHyperliquidAgent = (value: unknown): value is HyperliquidAgent => {
|
|
40
|
+
if (typeof value !== 'object' || value === null) {
|
|
41
|
+
return false
|
|
42
|
+
}
|
|
43
|
+
const { address, privateKey } = value as Record<string, unknown>
|
|
44
|
+
return (
|
|
45
|
+
typeof address === 'string' &&
|
|
46
|
+
isAddress(address) &&
|
|
47
|
+
isParsablePrivateKey(privateKey)
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Owns the Hyperliquid agent keypair lifecycle: generate, persist, look up,
|
|
53
|
+
* and revoke. Keyed per user L1 address. Persisted via the injected
|
|
54
|
+
* {@link StorageAdapter} (browser `localStorage` by default).
|
|
55
|
+
*/
|
|
56
|
+
export class HyperliquidAgentStore {
|
|
57
|
+
private storage: StorageAdapter
|
|
58
|
+
private cache: Map<string, HyperliquidAgent> = new Map()
|
|
59
|
+
|
|
60
|
+
constructor(storage?: StorageAdapter) {
|
|
61
|
+
this.storage = storage ?? localStorageAdapter
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
private storageKey(address: Address): string {
|
|
65
|
+
return `${STORAGE_PREFIX}:${address.toLowerCase()}:${PROVIDER_KEY}`
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Get the existing agent for a user address.
|
|
70
|
+
*
|
|
71
|
+
* @throws {PerpsError} `AgentNotFound` when no agent exists, or
|
|
72
|
+
* `AgentStorageCorrupt` when a record is present but malformed (so callers
|
|
73
|
+
* never act on a structurally-invalid keypair, and `getOrCreate` does not
|
|
74
|
+
* silently overwrite a poisoned-but-recoverable entry).
|
|
75
|
+
*/
|
|
76
|
+
async get(address: Address): Promise<HyperliquidAgent> {
|
|
77
|
+
const key = this.storageKey(address)
|
|
78
|
+
|
|
79
|
+
const cached = this.cache.get(key)
|
|
80
|
+
if (cached) {
|
|
81
|
+
return cached
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const stored = await this.storage.get(key)
|
|
85
|
+
const agent = parseStoredRecord(stored, isHyperliquidAgent)
|
|
86
|
+
if (agent) {
|
|
87
|
+
this.cache.set(key, agent)
|
|
88
|
+
return agent
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const corrupt = stored !== null
|
|
92
|
+
const error = new PerpsError(
|
|
93
|
+
PerpsErrorCode.SDKError,
|
|
94
|
+
corrupt
|
|
95
|
+
? PerpsErrorMessage.AgentStorageCorrupt
|
|
96
|
+
: PerpsErrorMessage.AgentNotFound
|
|
97
|
+
)
|
|
98
|
+
error.tool = '@lifi/perps-sdk-provider-hyperliquid'
|
|
99
|
+
throw error
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Get the existing agent for a user address, or create and persist one.
|
|
104
|
+
* Regenerates only on genuine absence; a malformed stored record surfaces
|
|
105
|
+
* as `AgentStorageCorrupt` rather than being overwritten with a fresh key.
|
|
106
|
+
*/
|
|
107
|
+
async getOrCreate(address: Address): Promise<HyperliquidAgent> {
|
|
108
|
+
try {
|
|
109
|
+
return await this.get(address)
|
|
110
|
+
} catch (error) {
|
|
111
|
+
if (
|
|
112
|
+
error instanceof PerpsError &&
|
|
113
|
+
error.message !== PerpsErrorMessage.AgentNotFound
|
|
114
|
+
) {
|
|
115
|
+
throw error
|
|
116
|
+
}
|
|
117
|
+
const privateKey = generatePrivateKey()
|
|
118
|
+
const account = privateKeyToAccount(privateKey)
|
|
119
|
+
|
|
120
|
+
const agent: HyperliquidAgent = {
|
|
121
|
+
address: account.address,
|
|
122
|
+
privateKey,
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const key = this.storageKey(address)
|
|
126
|
+
await this.storage.set(key, JSON.stringify(agent))
|
|
127
|
+
this.cache.set(key, agent)
|
|
128
|
+
|
|
129
|
+
return agent
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** Whether an agent exists for the user address. */
|
|
134
|
+
async has(address: Address): Promise<boolean> {
|
|
135
|
+
try {
|
|
136
|
+
await this.get(address)
|
|
137
|
+
return true
|
|
138
|
+
} catch {
|
|
139
|
+
return false
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Remove the agent for a user address. Call when the user revokes agent
|
|
145
|
+
* authorization.
|
|
146
|
+
*/
|
|
147
|
+
async remove(address: Address): Promise<void> {
|
|
148
|
+
const key = this.storageKey(address)
|
|
149
|
+
this.cache.delete(key)
|
|
150
|
+
await this.storage.remove(key)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Import an existing agent keypair (e.g. restoring from backup or pinning a
|
|
155
|
+
* specific key) and persist it.
|
|
156
|
+
*/
|
|
157
|
+
async import(address: Address, privateKey: Hex): Promise<HyperliquidAgent> {
|
|
158
|
+
const account = privateKeyToAccount(privateKey)
|
|
159
|
+
|
|
160
|
+
const agent: HyperliquidAgent = {
|
|
161
|
+
address: account.address,
|
|
162
|
+
privateKey,
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const key = this.storageKey(address)
|
|
166
|
+
await this.storage.set(key, JSON.stringify(agent))
|
|
167
|
+
this.cache.set(key, agent)
|
|
168
|
+
|
|
169
|
+
return agent
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** Clear the in-memory cache. Does not remove persisted agents. */
|
|
173
|
+
clearCache(): void {
|
|
174
|
+
this.cache.clear()
|
|
175
|
+
}
|
|
176
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// biome-ignore-all lint/performance/noBarrelFile: package-internal barrel.
|
|
2
|
+
|
|
3
|
+
export type { HyperliquidAgent } from './HyperliquidAgentStore.js'
|
|
4
|
+
export { HyperliquidAgentStore } from './HyperliquidAgentStore.js'
|
|
5
|
+
export { hyperliquidSignActions } from './signActions.js'
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PerpsError,
|
|
3
|
+
type SignActionsContext,
|
|
4
|
+
signTypedData,
|
|
5
|
+
signTypedDataWithSigner,
|
|
6
|
+
} from '@lifi/perps-sdk'
|
|
7
|
+
import type {
|
|
8
|
+
ActionStep,
|
|
9
|
+
Eip712ActionStep,
|
|
10
|
+
Eip712SignedActionStep,
|
|
11
|
+
SignedActionStep,
|
|
12
|
+
} from '@lifi/perps-types'
|
|
13
|
+
import { PerpsErrorCode, PerpsSigner, SigningMethod } from '@lifi/perps-types'
|
|
14
|
+
import type { Address, Hex } from 'viem'
|
|
15
|
+
import type { HyperliquidAgentStore } from './HyperliquidAgentStore.js'
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Sign a batch of EIP-712 action steps. Hyperliquid owns both EIP712 arms and
|
|
19
|
+
* picks WHO signs from the descriptor's `signers` (forwarded on the context):
|
|
20
|
+
* - `AGENT` → the user's Hyperliquid agent keypair (provisioned + approved
|
|
21
|
+
* during setup; a missing agent throws).
|
|
22
|
+
* - `USER` → the end-user's wallet, read from `ctx.userWallet`.
|
|
23
|
+
* Hyperliquid declares no WASM_BLOB / EVM_TX actions, so those schemes reject.
|
|
24
|
+
*/
|
|
25
|
+
export async function hyperliquidSignActions(
|
|
26
|
+
agentStore: HyperliquidAgentStore,
|
|
27
|
+
method: SigningMethod,
|
|
28
|
+
steps: ActionStep[],
|
|
29
|
+
address: Address,
|
|
30
|
+
ctx: SignActionsContext | undefined
|
|
31
|
+
): Promise<SignedActionStep[]> {
|
|
32
|
+
if (method !== SigningMethod.EIP712) {
|
|
33
|
+
throw new PerpsError(
|
|
34
|
+
PerpsErrorCode.SDKError,
|
|
35
|
+
`hyperliquidProvider.signActions: unsupported SigningMethod '${method}'. ` +
|
|
36
|
+
'Hyperliquid only signs EIP712 actions.'
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const sign = ctx?.signers?.includes(PerpsSigner.USER)
|
|
41
|
+
? await userWalletSigner(ctx)
|
|
42
|
+
: await agentSigner(agentStore, address)
|
|
43
|
+
|
|
44
|
+
return Promise.all(
|
|
45
|
+
(steps as Eip712ActionStep[]).map(
|
|
46
|
+
async (step): Promise<Eip712SignedActionStep> => ({
|
|
47
|
+
action: step.action,
|
|
48
|
+
typedData: step.typedData,
|
|
49
|
+
signature: await sign(step),
|
|
50
|
+
})
|
|
51
|
+
)
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
type SignStep = (step: Eip712ActionStep) => Promise<Hex>
|
|
56
|
+
|
|
57
|
+
async function agentSigner(
|
|
58
|
+
agentStore: HyperliquidAgentStore,
|
|
59
|
+
address: Address
|
|
60
|
+
): Promise<SignStep> {
|
|
61
|
+
const agent = await agentStore.get(address)
|
|
62
|
+
return (step) => signTypedData(agent.privateKey, step.typedData)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function userWalletSigner(ctx: SignActionsContext): Promise<SignStep> {
|
|
66
|
+
const wallet = ctx.userWallet
|
|
67
|
+
if (!wallet) {
|
|
68
|
+
throw new PerpsError(
|
|
69
|
+
PerpsErrorCode.SDKError,
|
|
70
|
+
'hyperliquidProvider.signActions: a USER-signed action requires the ' +
|
|
71
|
+
'end-user wallet. Pass `userWallet` to createPerpsClient or call ' +
|
|
72
|
+
'setUserWallet(walletClient).'
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
return Promise.resolve((step) =>
|
|
76
|
+
signTypedDataWithSigner(wallet, step.typedData)
|
|
77
|
+
)
|
|
78
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// Account-level types returned by Hyperliquid `/info`.
|
|
2
|
+
|
|
3
|
+
/** @public */
|
|
4
|
+
export type HlPosition = {
|
|
5
|
+
coin: string
|
|
6
|
+
szi: string
|
|
7
|
+
entryPx: string
|
|
8
|
+
positionValue: string
|
|
9
|
+
liquidationPx: string
|
|
10
|
+
unrealizedPnl: string
|
|
11
|
+
marginUsed: string
|
|
12
|
+
leverage: {
|
|
13
|
+
type: string
|
|
14
|
+
value: number
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** @public */
|
|
19
|
+
export type HlAssetPosition = {
|
|
20
|
+
position: HlPosition
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** @public */
|
|
24
|
+
export type HlClearinghouseState = {
|
|
25
|
+
assetPositions: HlAssetPosition[]
|
|
26
|
+
marginSummary: {
|
|
27
|
+
accountValue: string
|
|
28
|
+
totalMarginUsed: string
|
|
29
|
+
}
|
|
30
|
+
crossMarginSummary: {
|
|
31
|
+
accountValue: string
|
|
32
|
+
totalMarginUsed: string
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** @public */
|
|
37
|
+
export type HlSpotBalance = {
|
|
38
|
+
coin: string
|
|
39
|
+
token: number
|
|
40
|
+
total: string
|
|
41
|
+
hold: string
|
|
42
|
+
entryNtl: string
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** @public */
|
|
46
|
+
export type HlSpotClearinghouseState = {
|
|
47
|
+
balances: HlSpotBalance[]
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** @public */
|
|
51
|
+
export type HlUserFees = {
|
|
52
|
+
userAddRate: string
|
|
53
|
+
userCrossRate: string
|
|
54
|
+
activeReferralDiscount: string
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** @public */
|
|
58
|
+
export type HlExtraAgents = Record<string, unknown>[]
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Possible values returned by the `userAbstraction` info endpoint.
|
|
62
|
+
* `null` means abstraction has never been set (standard mode).
|
|
63
|
+
* @public
|
|
64
|
+
*/
|
|
65
|
+
export const HlAbstractionMode = {
|
|
66
|
+
DISABLED: 'disabled',
|
|
67
|
+
UNIFIED_ACCOUNT: 'unifiedAccount',
|
|
68
|
+
PORTFOLIO_MARGIN: 'portfolioMargin',
|
|
69
|
+
DEX_ABSTRACTION: 'dexAbstraction',
|
|
70
|
+
} as const
|
|
71
|
+
|
|
72
|
+
/** @public */
|
|
73
|
+
export type HlAbstractionMode =
|
|
74
|
+
(typeof HlAbstractionMode)[keyof typeof HlAbstractionMode]
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Hyperliquid `/exchange` request/response shapes + EIP-712 primary types.
|
|
2
|
+
|
|
3
|
+
/** @public */
|
|
4
|
+
export type HlExchangeRequest = {
|
|
5
|
+
action: Record<string, unknown>
|
|
6
|
+
signature: {
|
|
7
|
+
r: string
|
|
8
|
+
s: string
|
|
9
|
+
v: number
|
|
10
|
+
}
|
|
11
|
+
nonce: number
|
|
12
|
+
vaultAddress?: string | null
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** @public */
|
|
16
|
+
export type HlExchangeResponse = {
|
|
17
|
+
status: string
|
|
18
|
+
response?:
|
|
19
|
+
| string
|
|
20
|
+
| {
|
|
21
|
+
type: string
|
|
22
|
+
data?: {
|
|
23
|
+
statuses?: (
|
|
24
|
+
| string
|
|
25
|
+
| { filled: { totalSz: string; avgPx: string; oid: number } }
|
|
26
|
+
| { resting: { oid: number } }
|
|
27
|
+
| { waitingForFill: { oid: number } }
|
|
28
|
+
| { waitingForTrigger: { oid: number } }
|
|
29
|
+
| { success: true }
|
|
30
|
+
| { error: string }
|
|
31
|
+
)[]
|
|
32
|
+
status?: unknown
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** @public */
|
|
38
|
+
export const HL_PRIMARY_TYPE_APPROVE_AGENT =
|
|
39
|
+
'HyperliquidTransaction:ApproveAgent' as const
|
|
40
|
+
/** @public */
|
|
41
|
+
export const HL_PRIMARY_TYPE_APPROVE_BUILDER_FEE =
|
|
42
|
+
'HyperliquidTransaction:ApproveBuilderFee' as const
|
|
43
|
+
/** @public */
|
|
44
|
+
export const HL_PRIMARY_TYPE_USER_SET_ABSTRACTION =
|
|
45
|
+
'HyperliquidTransaction:UserSetAbstraction' as const
|
|
46
|
+
/** @public */
|
|
47
|
+
export const HL_PRIMARY_TYPE_AGENT_SET_ABSTRACTION =
|
|
48
|
+
'HyperliquidTransaction:AgentSetAbstraction' as const
|
|
49
|
+
/** @public */
|
|
50
|
+
export const HL_PRIMARY_TYPE_WITHDRAW =
|
|
51
|
+
'HyperliquidTransaction:Withdraw' as const
|
|
52
|
+
/** @public */
|
|
53
|
+
export const HL_PRIMARY_TYPE_SEND_ASSET =
|
|
54
|
+
'HyperliquidTransaction:SendAsset' as const
|
|
55
|
+
/** @public */
|
|
56
|
+
export const HL_PRIMARY_TYPE_AGENT = 'Agent' as const
|
|
57
|
+
|
|
58
|
+
/** @public */
|
|
59
|
+
export type HlPrimaryType =
|
|
60
|
+
| typeof HL_PRIMARY_TYPE_APPROVE_AGENT
|
|
61
|
+
| typeof HL_PRIMARY_TYPE_APPROVE_BUILDER_FEE
|
|
62
|
+
| typeof HL_PRIMARY_TYPE_USER_SET_ABSTRACTION
|
|
63
|
+
| typeof HL_PRIMARY_TYPE_AGENT_SET_ABSTRACTION
|
|
64
|
+
| typeof HL_PRIMARY_TYPE_WITHDRAW
|
|
65
|
+
| typeof HL_PRIMARY_TYPE_SEND_ASSET
|
|
66
|
+
| typeof HL_PRIMARY_TYPE_AGENT
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// Asset / market metadata returned by Hyperliquid `/info`.
|
|
2
|
+
|
|
3
|
+
/** @public */
|
|
4
|
+
export type HlUniverseItem = {
|
|
5
|
+
name: string
|
|
6
|
+
szDecimals: number
|
|
7
|
+
maxLeverage: number
|
|
8
|
+
onlyIsolated?: boolean
|
|
9
|
+
isDelisted?: boolean
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** @public */
|
|
13
|
+
export type HlMeta = {
|
|
14
|
+
universe: HlUniverseItem[]
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** @public */
|
|
18
|
+
export type HlAssetCtx = {
|
|
19
|
+
funding: string
|
|
20
|
+
openInterest: string
|
|
21
|
+
dayNtlVlm: string
|
|
22
|
+
prevDayPx: string
|
|
23
|
+
markPx: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** @public */
|
|
27
|
+
export type HlMetaAndAssetCtxs = [HlMeta, HlAssetCtx[]]
|
|
28
|
+
|
|
29
|
+
/** @public */
|
|
30
|
+
export type HlUniverse = HlMeta['universe']
|
|
31
|
+
|
|
32
|
+
/** @public */
|
|
33
|
+
export type HlAllMids = Record<string, string>
|
|
34
|
+
|
|
35
|
+
/** @public */
|
|
36
|
+
export type HlCandle = {
|
|
37
|
+
t: number
|
|
38
|
+
o: string
|
|
39
|
+
h: string
|
|
40
|
+
l: string
|
|
41
|
+
c: string
|
|
42
|
+
v: string
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** @public */
|
|
46
|
+
export type HlCandleSnapshot = HlCandle[]
|
|
47
|
+
|
|
48
|
+
/** @public */
|
|
49
|
+
export type HlLevel = {
|
|
50
|
+
px: string
|
|
51
|
+
sz: string
|
|
52
|
+
n: number
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** @public */
|
|
56
|
+
export type HlL2Book = {
|
|
57
|
+
levels: [HlLevel[], HlLevel[]]
|
|
58
|
+
time: number
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** @public */
|
|
62
|
+
export type HlPerpDexs = (null | { name: string })[]
|
|
63
|
+
|
|
64
|
+
/** @public */
|
|
65
|
+
export type HlSpotToken = {
|
|
66
|
+
name: string
|
|
67
|
+
index: number
|
|
68
|
+
tokenId: string
|
|
69
|
+
szDecimals: number
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** @public */
|
|
73
|
+
export type HlSpotUniverseEntry = {
|
|
74
|
+
name: string
|
|
75
|
+
tokens: [number, number]
|
|
76
|
+
index: number
|
|
77
|
+
isCanonical: boolean
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** @public */
|
|
81
|
+
export type HlSpotMeta = {
|
|
82
|
+
tokens: HlSpotToken[]
|
|
83
|
+
universe: HlSpotUniverseEntry[]
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** @public */
|
|
87
|
+
export type HlSpotAssetCtx = {
|
|
88
|
+
coin: string
|
|
89
|
+
prevDayPx: string
|
|
90
|
+
dayNtlVlm: string
|
|
91
|
+
markPx: string
|
|
92
|
+
midPx: string | null
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** @public */
|
|
96
|
+
export type HlSpotMetaAndAssetCtxs = [HlSpotMeta, HlSpotAssetCtx[]]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Fill shapes returned by Hyperliquid `/info`.
|
|
2
|
+
|
|
3
|
+
/** @public */
|
|
4
|
+
export type HlUserFill = {
|
|
5
|
+
tid: number
|
|
6
|
+
oid: number
|
|
7
|
+
hash?: string
|
|
8
|
+
coin: string
|
|
9
|
+
side: string
|
|
10
|
+
sz: string
|
|
11
|
+
px: string
|
|
12
|
+
dir: string
|
|
13
|
+
fee: string
|
|
14
|
+
closedPnl: string
|
|
15
|
+
crossed: boolean
|
|
16
|
+
time: number
|
|
17
|
+
startPosition: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** @public */
|
|
21
|
+
export type HlUserFills = HlUserFill[]
|
|
22
|
+
|
|
23
|
+
/** @public */
|
|
24
|
+
export type HlUserFillsByTime = HlUserFill[]
|