@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 @@
|
|
|
1
|
+
{"version":3,"file":"getActivity.js","sourceRoot":"","sources":["../../../src/services/getActivity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type SDKRequestOptions } from '@lifi/perps-sdk';
|
|
2
|
+
import type { FillsResponse } from '@lifi/perps-types';
|
|
3
|
+
import type { Address } from 'viem';
|
|
4
|
+
import type { HyperliquidContext } from '../context.js';
|
|
5
|
+
/**
|
|
6
|
+
* Parameters for {@link getFills}.
|
|
7
|
+
*
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export interface GetFillsParams {
|
|
11
|
+
address: Address;
|
|
12
|
+
limit?: number;
|
|
13
|
+
/** `tid` of the oldest fill to return (returned items have `tid < cursor`). */
|
|
14
|
+
cursor?: string;
|
|
15
|
+
/** Inclusive lower bound in ms-since-epoch — switches to the `userFillsByTime` endpoint. */
|
|
16
|
+
startTime?: number;
|
|
17
|
+
/** Inclusive upper bound in ms-since-epoch — switches to the `userFillsByTime` endpoint. */
|
|
18
|
+
endTime?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Fetch the user's fills history. When `startTime` or `endTime` is provided,
|
|
22
|
+
* Hyperliquid's `userFillsByTime` endpoint is used; otherwise the unbounded
|
|
23
|
+
* `userFills` endpoint returns the full history. The backend's enriched asset
|
|
24
|
+
* list supplies the display fields; only the fills endpoint is read direct
|
|
25
|
+
* from HL.
|
|
26
|
+
*
|
|
27
|
+
* Pagination is cursor-based on the fill's `tid`: results with
|
|
28
|
+
* `tid < cursor` are kept and the last-page's tail `id` is returned as the
|
|
29
|
+
* next cursor.
|
|
30
|
+
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
31
|
+
* @public
|
|
32
|
+
*/
|
|
33
|
+
export declare const getFills: ({ client, apiUrl }: HyperliquidContext, params: GetFillsParams, options?: SDKRequestOptions) => Promise<FillsResponse>;
|
|
34
|
+
//# sourceMappingURL=getFills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getFills.d.ts","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAMnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAKvD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,QAAQ,GACnB,oBAAoB,kBAAkB,EACtC,QAAQ,cAAc,EACtB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,aAAa,CAiDvB,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { getMarketRegistry } from '@lifi/perps-sdk';
|
|
2
|
+
import { DEFAULT_HISTORY_LIMIT, MAX_HISTORY_LIMIT, PROVIDER_KEY, } from '../constants.js';
|
|
3
|
+
import { mapFill } from '../utils/index.js';
|
|
4
|
+
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
5
|
+
/**
|
|
6
|
+
* Fetch the user's fills history. When `startTime` or `endTime` is provided,
|
|
7
|
+
* Hyperliquid's `userFillsByTime` endpoint is used; otherwise the unbounded
|
|
8
|
+
* `userFills` endpoint returns the full history. The backend's enriched asset
|
|
9
|
+
* list supplies the display fields; only the fills endpoint is read direct
|
|
10
|
+
* from HL.
|
|
11
|
+
*
|
|
12
|
+
* Pagination is cursor-based on the fill's `tid`: results with
|
|
13
|
+
* `tid < cursor` are kept and the last-page's tail `id` is returned as the
|
|
14
|
+
* next cursor.
|
|
15
|
+
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
export const getFills = async ({ client, apiUrl }, params, options) => {
|
|
19
|
+
const registry = getMarketRegistry(client, PROVIDER_KEY);
|
|
20
|
+
await registry.sync();
|
|
21
|
+
const infoOpts = hlInfoOptions(client, options);
|
|
22
|
+
const limit = Math.min(params.limit ?? DEFAULT_HISTORY_LIMIT, MAX_HISTORY_LIMIT);
|
|
23
|
+
const useByTime = params.startTime !== undefined || params.endTime !== undefined;
|
|
24
|
+
const allFills = useByTime
|
|
25
|
+
? await infoRequest(apiUrl, {
|
|
26
|
+
type: 'userFillsByTime',
|
|
27
|
+
user: params.address,
|
|
28
|
+
startTime: params.startTime ?? 0,
|
|
29
|
+
...(params.endTime !== undefined ? { endTime: params.endTime } : {}),
|
|
30
|
+
}, infoOpts)
|
|
31
|
+
: await infoRequest(apiUrl, { type: 'userFills', user: params.address }, infoOpts);
|
|
32
|
+
const filtered = params.cursor === undefined
|
|
33
|
+
? allFills
|
|
34
|
+
: allFills.filter((f) => f.tid < Number.parseInt(params.cursor, 10));
|
|
35
|
+
const hasMore = filtered.length > limit;
|
|
36
|
+
const items = filtered
|
|
37
|
+
.slice(0, limit)
|
|
38
|
+
.map((f) => mapFill(f, registry.require(f.coin)));
|
|
39
|
+
return {
|
|
40
|
+
provider: PROVIDER_KEY,
|
|
41
|
+
items,
|
|
42
|
+
pagination: {
|
|
43
|
+
limit,
|
|
44
|
+
hasMore,
|
|
45
|
+
cursor: items.length > 0 ? items[items.length - 1].id : undefined,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=getFills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getFills.js","sourceRoot":"","sources":["../../../src/services/getFills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,iBAAiB,CAAA;AAG3E,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAkBnE;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,EAAE,MAAM,EAAE,MAAM,EAAsB,EACtC,MAAsB,EACtB,OAA2B,EACH,EAAE;IAC1B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxD,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IACrB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,MAAM,CAAC,KAAK,IAAI,qBAAqB,EACrC,iBAAiB,CAClB,CAAA;IAED,MAAM,SAAS,GACb,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,CAAA;IAEhE,MAAM,QAAQ,GAAG,SAAS;QACxB,CAAC,CAAC,MAAM,WAAW,CACf,MAAM,EACN;YACE,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,MAAM,CAAC,OAAO;YACpB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,EACD,QAAQ,CACT;QACH,CAAC,CAAC,MAAM,WAAW,CACf,MAAM,EACN,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,EAC3C,QAAQ,CACT,CAAA;IAEL,MAAM,QAAQ,GACZ,MAAM,CAAC,MAAM,KAAK,SAAS;QACzB,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAO,EAAE,EAAE,CAAC,CAAC,CAAA;IAEzE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAA;IACvC,MAAM,KAAK,GAAG,QAAQ;SACnB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEnD,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,KAAK;QACL,UAAU,EAAE;YACV,KAAK;YACL,OAAO;YACP,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;SAClE;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ProviderGetOrderParams, type SDKRequestOptions } from '@lifi/perps-sdk';
|
|
2
|
+
import type { Order } from '@lifi/perps-types';
|
|
3
|
+
import type { HyperliquidContext } from '../context.js';
|
|
4
|
+
/**
|
|
5
|
+
* Parameters for {@link getOrder}.
|
|
6
|
+
*
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export type GetOrderParams = ProviderGetOrderParams;
|
|
10
|
+
/**
|
|
11
|
+
* Read getOrder direct from the Hyperliquid REST API.
|
|
12
|
+
*
|
|
13
|
+
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export declare const getOrder: ({ client, apiUrl }: HyperliquidContext, params: GetOrderParams, options?: SDKRequestOptions) => Promise<Order>;
|
|
17
|
+
//# sourceMappingURL=getOrder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOrder.d.ts","sourceRoot":"","sources":["../../../src/services/getOrder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAG9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAKvD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GACnB,oBAAoB,kBAAkB,EACtC,QAAQ,cAAc,EACtB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,KAAK,CA6Bf,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { getMarketRegistry, PerpsError, } from '@lifi/perps-sdk';
|
|
2
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
3
|
+
import { PROVIDER_KEY } from '../constants.js';
|
|
4
|
+
import { mapOrder } from '../utils/index.js';
|
|
5
|
+
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
6
|
+
/**
|
|
7
|
+
* Read getOrder direct from the Hyperliquid REST API.
|
|
8
|
+
*
|
|
9
|
+
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export const getOrder = async ({ client, apiUrl }, params, options) => {
|
|
13
|
+
const oid = Number.parseInt(params.id, 10);
|
|
14
|
+
if (Number.isNaN(oid)) {
|
|
15
|
+
const err = new PerpsError(PerpsErrorCode.ValidationError, `Invalid order ID: ${params.id}. Must be a numeric oid.`);
|
|
16
|
+
err.tool = PROVIDER_KEY;
|
|
17
|
+
throw err;
|
|
18
|
+
}
|
|
19
|
+
const status = await infoRequest(apiUrl, { type: 'orderStatus', user: params.address, oid }, hlInfoOptions(client, options));
|
|
20
|
+
if (status.status !== 'order') {
|
|
21
|
+
const err = new PerpsError(PerpsErrorCode.OrderNotFound, `Order not found: ${params.id}`);
|
|
22
|
+
err.tool = PROVIDER_KEY;
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
const registry = getMarketRegistry(client, PROVIDER_KEY);
|
|
26
|
+
await registry.sync();
|
|
27
|
+
return mapOrder(status.order, registry.require(status.order.order.coin));
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=getOrder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOrder.js","sourceRoot":"","sources":["../../../src/services/getOrder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,UAAU,GAGX,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AASnE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,EAAE,MAAM,EAAE,MAAM,EAAsB,EACtC,MAAsB,EACtB,OAA2B,EACX,EAAE;IAClB,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,UAAU,CACxB,cAAc,CAAC,eAAe,EAC9B,qBAAqB,MAAM,CAAC,EAAE,0BAA0B,CACzD,CAAA;QACD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAA;QACvB,MAAM,GAAG,CAAA;IACX,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,MAAM,EACN,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,EAClD,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAC/B,CAAA;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,UAAU,CACxB,cAAc,CAAC,aAAa,EAC5B,oBAAoB,MAAM,CAAC,EAAE,EAAE,CAChC,CAAA;QACD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAA;QACvB,MAAM,GAAG,CAAA;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxD,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IACrB,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;AAC1E,CAAC,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type SDKRequestOptions } from '@lifi/perps-sdk';
|
|
2
|
+
import type { OrdersResponse } from '@lifi/perps-types';
|
|
3
|
+
import type { Address } from 'viem';
|
|
4
|
+
import type { HyperliquidContext } from '../context.js';
|
|
5
|
+
/**
|
|
6
|
+
* Parameters for {@link getOrders}.
|
|
7
|
+
*
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export interface GetOrdersParams {
|
|
11
|
+
address: Address;
|
|
12
|
+
/** Optional filter — opaque `Market.id`. */
|
|
13
|
+
marketId?: string;
|
|
14
|
+
limit?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Fetch open + trigger orders across every supported perps sub-dex for
|
|
18
|
+
* `address`, normalised into `OrdersResponse`. Trigger orders that appear as
|
|
19
|
+
* children of a parent limit order (Hyperliquid's `normalTpsl` flow) are
|
|
20
|
+
* extracted and surfaced alongside top-level trigger orders. The backend's
|
|
21
|
+
* enriched asset list supplies the sub-dex fan-out and display fields; only
|
|
22
|
+
* `frontendOpenOrders` is read direct.
|
|
23
|
+
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
24
|
+
* @public
|
|
25
|
+
*/
|
|
26
|
+
export declare const getOrders: ({ client, apiUrl }: HyperliquidContext, params: GetOrdersParams, options?: SDKRequestOptions) => Promise<OrdersResponse>;
|
|
27
|
+
//# sourceMappingURL=getOrders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOrders.d.ts","sourceRoot":"","sources":["../../../src/services/getOrders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EAAa,cAAc,EAAgB,MAAM,mBAAmB,CAAA;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAavD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GACpB,oBAAoB,kBAAkB,EACtC,QAAQ,eAAe,EACvB,UAAU,iBAAiB,KAC1B,OAAO,CAAC,cAAc,CAyDxB,CAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { getMarketRegistry } from '@lifi/perps-sdk';
|
|
2
|
+
import { PROVIDER_KEY } from '../constants.js';
|
|
3
|
+
import { isTriggerOrder, mapOpenOrder, mapTriggerOrder, perpsDexNames, } from '../utils/index.js';
|
|
4
|
+
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
5
|
+
/**
|
|
6
|
+
* Fetch open + trigger orders across every supported perps sub-dex for
|
|
7
|
+
* `address`, normalised into `OrdersResponse`. Trigger orders that appear as
|
|
8
|
+
* children of a parent limit order (Hyperliquid's `normalTpsl` flow) are
|
|
9
|
+
* extracted and surfaced alongside top-level trigger orders. The backend's
|
|
10
|
+
* enriched asset list supplies the sub-dex fan-out and display fields; only
|
|
11
|
+
* `frontendOpenOrders` is read direct.
|
|
12
|
+
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
export const getOrders = async ({ client, apiUrl }, params, options) => {
|
|
16
|
+
const registry = getMarketRegistry(client, PROVIDER_KEY);
|
|
17
|
+
const markets = await registry.sync();
|
|
18
|
+
const infoOpts = hlInfoOptions(client, options);
|
|
19
|
+
const ordersResults = await Promise.all(perpsDexNames(markets).map((name) => infoRequest(apiUrl, {
|
|
20
|
+
type: 'frontendOpenOrders',
|
|
21
|
+
user: params.address,
|
|
22
|
+
...(name ? { dex: name } : {}),
|
|
23
|
+
}, infoOpts)));
|
|
24
|
+
const raw = ordersResults.flat();
|
|
25
|
+
const childOids = new Set();
|
|
26
|
+
for (const o of raw) {
|
|
27
|
+
for (const child of o.children) {
|
|
28
|
+
childOids.add(child.oid);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const nonChild = raw.filter((o) => !childOids.has(o.oid));
|
|
32
|
+
let openOrders = nonChild
|
|
33
|
+
.filter((o) => !isTriggerOrder(o))
|
|
34
|
+
.map((o) => mapOpenOrder(o, registry.require(o.coin)));
|
|
35
|
+
let triggerOrders = [
|
|
36
|
+
...nonChild
|
|
37
|
+
.filter((o) => isTriggerOrder(o))
|
|
38
|
+
.map((o) => mapTriggerOrder(o, registry.require(o.coin))),
|
|
39
|
+
...raw
|
|
40
|
+
.filter((o) => childOids.has(o.oid))
|
|
41
|
+
.map((o) => mapTriggerOrder(o, registry.require(o.coin))),
|
|
42
|
+
];
|
|
43
|
+
if (params.marketId !== undefined) {
|
|
44
|
+
openOrders = openOrders.filter((o) => o.market.id === params.marketId);
|
|
45
|
+
triggerOrders = triggerOrders.filter((o) => o.market.id === params.marketId);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
provider: PROVIDER_KEY,
|
|
49
|
+
openOrders,
|
|
50
|
+
triggerOrders,
|
|
51
|
+
pagination: {
|
|
52
|
+
limit: params.limit ?? openOrders.length + triggerOrders.length,
|
|
53
|
+
hasMore: false,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=getOrders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOrders.js","sourceRoot":"","sources":["../../../src/services/getOrders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type SDKRequestOptions } from '@lifi/perps-sdk';
|
|
2
|
+
import type { PositionsResponse } from '@lifi/perps-types';
|
|
3
|
+
import type { Address } from 'viem';
|
|
4
|
+
import type { HyperliquidContext } from '../context.js';
|
|
5
|
+
/**
|
|
6
|
+
* Parameters for {@link getPositions}.
|
|
7
|
+
*
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export interface GetPositionsParams {
|
|
11
|
+
address: Address;
|
|
12
|
+
/** Filter to a single opaque `Market.id` (e.g. `'BTC'`, `'xyz:PURR'`). */
|
|
13
|
+
marketId?: string;
|
|
14
|
+
/** Page size hint surfaced on the response. Hyperliquid returns all open positions in one call, so pagination is never required. */
|
|
15
|
+
limit?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Fetch open positions across every supported perps sub-dex for `address`,
|
|
19
|
+
* normalised into `PositionsResponse`. Zero-size entries are dropped. The
|
|
20
|
+
* backend's enriched asset list supplies the sub-dex fan-out and display
|
|
21
|
+
* fields; only `clearinghouseState` is read direct from Hyperliquid.
|
|
22
|
+
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
export declare const getPositions: ({ client, apiUrl }: HyperliquidContext, params: GetPositionsParams, options?: SDKRequestOptions) => Promise<PositionsResponse>;
|
|
26
|
+
//# sourceMappingURL=getPositions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPositions.d.ts","sourceRoot":"","sources":["../../../src/services/getPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AASvD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oIAAoI;IACpI,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GACvB,oBAAoB,kBAAkB,EACtC,QAAQ,kBAAkB,EAC1B,UAAU,iBAAiB,KAC1B,OAAO,CAAC,iBAAiB,CAqC3B,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { getMarketRegistry } from '@lifi/perps-sdk';
|
|
2
|
+
import { PROVIDER_KEY } from '../constants.js';
|
|
3
|
+
import { isOpenAssetPosition, mapPosition, perpsDexNames, } from '../utils/index.js';
|
|
4
|
+
import { hlInfoOptions, infoRequest } from '../utils/infoClient.js';
|
|
5
|
+
/**
|
|
6
|
+
* Fetch open positions across every supported perps sub-dex for `address`,
|
|
7
|
+
* normalised into `PositionsResponse`. Zero-size entries are dropped. The
|
|
8
|
+
* backend's enriched asset list supplies the sub-dex fan-out and display
|
|
9
|
+
* fields; only `clearinghouseState` is read direct from Hyperliquid.
|
|
10
|
+
* @throws {PerpsError} On Hyperliquid REST error, network, or parsing failures.
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export const getPositions = async ({ client, apiUrl }, params, options) => {
|
|
14
|
+
const registry = getMarketRegistry(client, PROVIDER_KEY);
|
|
15
|
+
const markets = await registry.sync();
|
|
16
|
+
const infoOpts = hlInfoOptions(client, options);
|
|
17
|
+
const stateResults = await Promise.all(perpsDexNames(markets).map((name) => infoRequest(apiUrl, {
|
|
18
|
+
type: 'clearinghouseState',
|
|
19
|
+
user: params.address,
|
|
20
|
+
...(name ? { dex: name } : {}),
|
|
21
|
+
}, infoOpts)));
|
|
22
|
+
let positions = stateResults.flatMap((state) => state.assetPositions
|
|
23
|
+
.filter(isOpenAssetPosition)
|
|
24
|
+
.map((ap) => mapPosition(ap, registry.require(ap.position.coin))));
|
|
25
|
+
if (params.marketId !== undefined) {
|
|
26
|
+
positions = positions.filter((p) => p.market.id === params.marketId);
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
provider: PROVIDER_KEY,
|
|
30
|
+
positions,
|
|
31
|
+
pagination: {
|
|
32
|
+
limit: params.limit ?? positions.length,
|
|
33
|
+
hasMore: false,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=getPositions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPositions.js","sourceRoot":"","sources":["../../../src/services/getPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,iBAAiB,CAAA;AAG3E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,aAAa,GACd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAenE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,EAAE,MAAM,EAAE,MAAM,EAAsB,EACtC,MAA0B,EAC1B,OAA2B,EACC,EAAE;IAC9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE/C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClC,WAAW,CACT,MAAM,EACN;QACE,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,MAAM,CAAC,OAAO;QACpB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/B,EACD,QAAQ,CACT,CACF,CACF,CAAA;IAED,IAAI,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7C,KAAK,CAAC,cAAc;SACjB,MAAM,CAAC,mBAAmB,CAAC;SAC3B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CACpE,CAAA;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAA;IACtE,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,SAAS;QACT,UAAU,EAAE;YACV,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM;YACvC,OAAO,EAAE,KAAK;SACf;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type StorageAdapter } from '@lifi/perps-sdk';
|
|
2
|
+
import { type Address, type Hex } from 'viem';
|
|
3
|
+
/**
|
|
4
|
+
* Hyperliquid agent keypair — an EVM keypair the user approves (via
|
|
5
|
+
* `APPROVE_AGENT`) to sign trading actions on their behalf, so each order
|
|
6
|
+
* does not require a wallet prompt.
|
|
7
|
+
*/
|
|
8
|
+
export interface HyperliquidAgent {
|
|
9
|
+
/** Agent wallet address. */
|
|
10
|
+
address: Address;
|
|
11
|
+
/** Agent private key. */
|
|
12
|
+
privateKey: Hex;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Owns the Hyperliquid agent keypair lifecycle: generate, persist, look up,
|
|
16
|
+
* and revoke. Keyed per user L1 address. Persisted via the injected
|
|
17
|
+
* {@link StorageAdapter} (browser `localStorage` by default).
|
|
18
|
+
*/
|
|
19
|
+
export declare class HyperliquidAgentStore {
|
|
20
|
+
private storage;
|
|
21
|
+
private cache;
|
|
22
|
+
constructor(storage?: StorageAdapter);
|
|
23
|
+
private storageKey;
|
|
24
|
+
/**
|
|
25
|
+
* Get the existing agent for a user address.
|
|
26
|
+
*
|
|
27
|
+
* @throws {PerpsError} `AgentNotFound` when no agent exists, or
|
|
28
|
+
* `AgentStorageCorrupt` when a record is present but malformed (so callers
|
|
29
|
+
* never act on a structurally-invalid keypair, and `getOrCreate` does not
|
|
30
|
+
* silently overwrite a poisoned-but-recoverable entry).
|
|
31
|
+
*/
|
|
32
|
+
get(address: Address): Promise<HyperliquidAgent>;
|
|
33
|
+
/**
|
|
34
|
+
* Get the existing agent for a user address, or create and persist one.
|
|
35
|
+
* Regenerates only on genuine absence; a malformed stored record surfaces
|
|
36
|
+
* as `AgentStorageCorrupt` rather than being overwritten with a fresh key.
|
|
37
|
+
*/
|
|
38
|
+
getOrCreate(address: Address): Promise<HyperliquidAgent>;
|
|
39
|
+
/** Whether an agent exists for the user address. */
|
|
40
|
+
has(address: Address): Promise<boolean>;
|
|
41
|
+
/**
|
|
42
|
+
* Remove the agent for a user address. Call when the user revokes agent
|
|
43
|
+
* authorization.
|
|
44
|
+
*/
|
|
45
|
+
remove(address: Address): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Import an existing agent keypair (e.g. restoring from backup or pinning a
|
|
48
|
+
* specific key) and persist it.
|
|
49
|
+
*/
|
|
50
|
+
import(address: Address, privateKey: Hex): Promise<HyperliquidAgent>;
|
|
51
|
+
/** Clear the in-memory cache. Does not remove persisted agents. */
|
|
52
|
+
clearCache(): void;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=HyperliquidAgentStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HyperliquidAgentStore.d.ts","sourceRoot":"","sources":["../../../src/signers/HyperliquidAgentStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAoB,MAAM,MAAM,CAAA;AAM/D;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,yBAAyB;IACzB,UAAU,EAAE,GAAG,CAAA;CAChB;AA0BD;;;;GAIG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAA2C;gBAE5C,OAAO,CAAC,EAAE,cAAc;IAIpC,OAAO,CAAC,UAAU;IAIlB;;;;;;;OAOG;IACG,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0BtD;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0B9D,oDAAoD;IAC9C,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAS7C;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAe1E,mEAAmE;IACnE,UAAU,IAAI,IAAI;CAGnB"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { localStorageAdapter, PerpsError, PerpsErrorMessage, parseStoredRecord, } from '@lifi/perps-sdk';
|
|
2
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
3
|
+
import { isAddress, isHex } from 'viem';
|
|
4
|
+
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
|
|
5
|
+
import { PROVIDER_KEY } from '../constants.js';
|
|
6
|
+
const STORAGE_PREFIX = 'lifi-perps-agent';
|
|
7
|
+
const isParsablePrivateKey = (value) => {
|
|
8
|
+
if (!isHex(value)) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
privateKeyToAccount(value);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const isHyperliquidAgent = (value) => {
|
|
20
|
+
if (typeof value !== 'object' || value === null) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const { address, privateKey } = value;
|
|
24
|
+
return (typeof address === 'string' &&
|
|
25
|
+
isAddress(address) &&
|
|
26
|
+
isParsablePrivateKey(privateKey));
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Owns the Hyperliquid agent keypair lifecycle: generate, persist, look up,
|
|
30
|
+
* and revoke. Keyed per user L1 address. Persisted via the injected
|
|
31
|
+
* {@link StorageAdapter} (browser `localStorage` by default).
|
|
32
|
+
*/
|
|
33
|
+
export class HyperliquidAgentStore {
|
|
34
|
+
storage;
|
|
35
|
+
cache = new Map();
|
|
36
|
+
constructor(storage) {
|
|
37
|
+
this.storage = storage ?? localStorageAdapter;
|
|
38
|
+
}
|
|
39
|
+
storageKey(address) {
|
|
40
|
+
return `${STORAGE_PREFIX}:${address.toLowerCase()}:${PROVIDER_KEY}`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the existing agent for a user address.
|
|
44
|
+
*
|
|
45
|
+
* @throws {PerpsError} `AgentNotFound` when no agent exists, or
|
|
46
|
+
* `AgentStorageCorrupt` when a record is present but malformed (so callers
|
|
47
|
+
* never act on a structurally-invalid keypair, and `getOrCreate` does not
|
|
48
|
+
* silently overwrite a poisoned-but-recoverable entry).
|
|
49
|
+
*/
|
|
50
|
+
async get(address) {
|
|
51
|
+
const key = this.storageKey(address);
|
|
52
|
+
const cached = this.cache.get(key);
|
|
53
|
+
if (cached) {
|
|
54
|
+
return cached;
|
|
55
|
+
}
|
|
56
|
+
const stored = await this.storage.get(key);
|
|
57
|
+
const agent = parseStoredRecord(stored, isHyperliquidAgent);
|
|
58
|
+
if (agent) {
|
|
59
|
+
this.cache.set(key, agent);
|
|
60
|
+
return agent;
|
|
61
|
+
}
|
|
62
|
+
const corrupt = stored !== null;
|
|
63
|
+
const error = new PerpsError(PerpsErrorCode.SDKError, corrupt
|
|
64
|
+
? PerpsErrorMessage.AgentStorageCorrupt
|
|
65
|
+
: PerpsErrorMessage.AgentNotFound);
|
|
66
|
+
error.tool = '@lifi/perps-sdk-provider-hyperliquid';
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get the existing agent for a user address, or create and persist one.
|
|
71
|
+
* Regenerates only on genuine absence; a malformed stored record surfaces
|
|
72
|
+
* as `AgentStorageCorrupt` rather than being overwritten with a fresh key.
|
|
73
|
+
*/
|
|
74
|
+
async getOrCreate(address) {
|
|
75
|
+
try {
|
|
76
|
+
return await this.get(address);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error instanceof PerpsError &&
|
|
80
|
+
error.message !== PerpsErrorMessage.AgentNotFound) {
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
const privateKey = generatePrivateKey();
|
|
84
|
+
const account = privateKeyToAccount(privateKey);
|
|
85
|
+
const agent = {
|
|
86
|
+
address: account.address,
|
|
87
|
+
privateKey,
|
|
88
|
+
};
|
|
89
|
+
const key = this.storageKey(address);
|
|
90
|
+
await this.storage.set(key, JSON.stringify(agent));
|
|
91
|
+
this.cache.set(key, agent);
|
|
92
|
+
return agent;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** Whether an agent exists for the user address. */
|
|
96
|
+
async has(address) {
|
|
97
|
+
try {
|
|
98
|
+
await this.get(address);
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Remove the agent for a user address. Call when the user revokes agent
|
|
107
|
+
* authorization.
|
|
108
|
+
*/
|
|
109
|
+
async remove(address) {
|
|
110
|
+
const key = this.storageKey(address);
|
|
111
|
+
this.cache.delete(key);
|
|
112
|
+
await this.storage.remove(key);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Import an existing agent keypair (e.g. restoring from backup or pinning a
|
|
116
|
+
* specific key) and persist it.
|
|
117
|
+
*/
|
|
118
|
+
async import(address, privateKey) {
|
|
119
|
+
const account = privateKeyToAccount(privateKey);
|
|
120
|
+
const agent = {
|
|
121
|
+
address: account.address,
|
|
122
|
+
privateKey,
|
|
123
|
+
};
|
|
124
|
+
const key = this.storageKey(address);
|
|
125
|
+
await this.storage.set(key, JSON.stringify(agent));
|
|
126
|
+
this.cache.set(key, agent);
|
|
127
|
+
return agent;
|
|
128
|
+
}
|
|
129
|
+
/** Clear the in-memory cache. Does not remove persisted agents. */
|
|
130
|
+
clearCache() {
|
|
131
|
+
this.cache.clear();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=HyperliquidAgentStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HyperliquidAgentStore.js","sourceRoot":"","sources":["../../../src/signers/HyperliquidAgentStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signers/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/signers/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAG3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type SignActionsContext } from '@lifi/perps-sdk';
|
|
2
|
+
import type { ActionStep, SignedActionStep } from '@lifi/perps-types';
|
|
3
|
+
import { SigningMethod } from '@lifi/perps-types';
|
|
4
|
+
import type { Address } from 'viem';
|
|
5
|
+
import type { HyperliquidAgentStore } from './HyperliquidAgentStore.js';
|
|
6
|
+
/**
|
|
7
|
+
* Sign a batch of EIP-712 action steps. Hyperliquid owns both EIP712 arms and
|
|
8
|
+
* picks WHO signs from the descriptor's `signers` (forwarded on the context):
|
|
9
|
+
* - `AGENT` → the user's Hyperliquid agent keypair (provisioned + approved
|
|
10
|
+
* during setup; a missing agent throws).
|
|
11
|
+
* - `USER` → the end-user's wallet, read from `ctx.userWallet`.
|
|
12
|
+
* Hyperliquid declares no WASM_BLOB / EVM_TX actions, so those schemes reject.
|
|
13
|
+
*/
|
|
14
|
+
export declare function hyperliquidSignActions(agentStore: HyperliquidAgentStore, method: SigningMethod, steps: ActionStep[], address: Address, ctx: SignActionsContext | undefined): Promise<SignedActionStep[]>;
|
|
15
|
+
//# sourceMappingURL=signActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signActions.d.ts","sourceRoot":"","sources":["../../../src/signers/signActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAGxB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,UAAU,EAGV,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAA+B,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAO,MAAM,MAAM,CAAA;AACxC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAEvE;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,qBAAqB,EACjC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,kBAAkB,GAAG,SAAS,GAClC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsB7B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { PerpsError, signTypedData, signTypedDataWithSigner, } from '@lifi/perps-sdk';
|
|
2
|
+
import { PerpsErrorCode, PerpsSigner, SigningMethod } from '@lifi/perps-types';
|
|
3
|
+
/**
|
|
4
|
+
* Sign a batch of EIP-712 action steps. Hyperliquid owns both EIP712 arms and
|
|
5
|
+
* picks WHO signs from the descriptor's `signers` (forwarded on the context):
|
|
6
|
+
* - `AGENT` → the user's Hyperliquid agent keypair (provisioned + approved
|
|
7
|
+
* during setup; a missing agent throws).
|
|
8
|
+
* - `USER` → the end-user's wallet, read from `ctx.userWallet`.
|
|
9
|
+
* Hyperliquid declares no WASM_BLOB / EVM_TX actions, so those schemes reject.
|
|
10
|
+
*/
|
|
11
|
+
export async function hyperliquidSignActions(agentStore, method, steps, address, ctx) {
|
|
12
|
+
if (method !== SigningMethod.EIP712) {
|
|
13
|
+
throw new PerpsError(PerpsErrorCode.SDKError, `hyperliquidProvider.signActions: unsupported SigningMethod '${method}'. ` +
|
|
14
|
+
'Hyperliquid only signs EIP712 actions.');
|
|
15
|
+
}
|
|
16
|
+
const sign = ctx?.signers?.includes(PerpsSigner.USER)
|
|
17
|
+
? await userWalletSigner(ctx)
|
|
18
|
+
: await agentSigner(agentStore, address);
|
|
19
|
+
return Promise.all(steps.map(async (step) => ({
|
|
20
|
+
action: step.action,
|
|
21
|
+
typedData: step.typedData,
|
|
22
|
+
signature: await sign(step),
|
|
23
|
+
})));
|
|
24
|
+
}
|
|
25
|
+
async function agentSigner(agentStore, address) {
|
|
26
|
+
const agent = await agentStore.get(address);
|
|
27
|
+
return (step) => signTypedData(agent.privateKey, step.typedData);
|
|
28
|
+
}
|
|
29
|
+
function userWalletSigner(ctx) {
|
|
30
|
+
const wallet = ctx.userWallet;
|
|
31
|
+
if (!wallet) {
|
|
32
|
+
throw new PerpsError(PerpsErrorCode.SDKError, 'hyperliquidProvider.signActions: a USER-signed action requires the ' +
|
|
33
|
+
'end-user wallet. Pass `userWallet` to createPerpsClient or call ' +
|
|
34
|
+
'setUserWallet(walletClient).');
|
|
35
|
+
}
|
|
36
|
+
return Promise.resolve((step) => signTypedDataWithSigner(wallet, step.typedData));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=signActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signActions.js","sourceRoot":"","sources":["../../../src/signers/signActions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,aAAa,EACb,uBAAuB,GACxB,MAAM,iBAAiB,CAAA;AAOxB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAI9E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAiC,EACjC,MAAqB,EACrB,KAAmB,EACnB,OAAgB,EAChB,GAAmC;IAEnC,IAAI,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,+DAA+D,MAAM,KAAK;YACxE,wCAAwC,CAC3C,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;QACnD,CAAC,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC;QAC7B,CAAC,CAAC,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAE1C,OAAO,OAAO,CAAC,GAAG,CACf,KAA4B,CAAC,GAAG,CAC/B,KAAK,EAAE,IAAI,EAAmC,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;KAC5B,CAAC,CACH,CACF,CAAA;AACH,CAAC;AAID,KAAK,UAAU,WAAW,CACxB,UAAiC,EACjC,OAAgB;IAEhB,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC3C,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;AAClE,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAuB;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAA;IAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,qEAAqE;YACnE,kEAAkE;YAClE,8BAA8B,CACjC,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAChD,CAAA;AACH,CAAC"}
|