@lifi/perps-sdk 0.1.1-alpha.9 → 1.0.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/README.md +157 -20
- package/dist/cjs/client/PerpsClient.d.ts +57 -24
- package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
- package/dist/cjs/client/PerpsClient.js +218 -208
- package/dist/cjs/client/PerpsClient.js.map +1 -1
- package/dist/cjs/client/bindProvider.d.ts +3 -0
- package/dist/cjs/client/bindProvider.d.ts.map +1 -0
- package/dist/cjs/client/bindProvider.js +9 -0
- package/dist/cjs/client/bindProvider.js.map +1 -0
- package/dist/cjs/client/createPerpsClient.d.ts +7 -25
- package/dist/cjs/client/createPerpsClient.d.ts.map +1 -1
- package/dist/cjs/client/createPerpsClient.js +28 -8
- package/dist/cjs/client/createPerpsClient.js.map +1 -1
- package/dist/cjs/client/requireProvider.d.ts +3 -0
- package/dist/cjs/client/requireProvider.d.ts.map +1 -0
- package/dist/cjs/client/requireProvider.js +16 -0
- package/dist/cjs/client/requireProvider.js.map +1 -0
- package/dist/cjs/errors/PerpsError.d.ts +2 -3
- package/dist/cjs/errors/PerpsError.d.ts.map +1 -1
- package/dist/cjs/errors/PerpsError.js +3 -15
- package/dist/cjs/errors/PerpsError.js.map +1 -1
- package/dist/cjs/errors/constants.d.ts +2 -12
- package/dist/cjs/errors/constants.d.ts.map +1 -1
- package/dist/cjs/errors/constants.js +3 -14
- package/dist/cjs/errors/constants.js.map +1 -1
- package/dist/cjs/index.d.ts +58 -34
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +122 -45
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/registry/assetRegistry.d.ts +11 -0
- package/dist/cjs/registry/assetRegistry.d.ts.map +1 -0
- package/dist/cjs/registry/assetRegistry.js +39 -0
- package/dist/cjs/registry/assetRegistry.js.map +1 -0
- package/dist/cjs/registry/marketRegistry.d.ts +13 -0
- package/dist/cjs/registry/marketRegistry.d.ts.map +1 -0
- package/dist/cjs/registry/marketRegistry.js +58 -0
- package/dist/cjs/registry/marketRegistry.js.map +1 -0
- package/dist/cjs/registry/referenceDataRegistry.d.ts +20 -0
- package/dist/cjs/registry/referenceDataRegistry.d.ts.map +1 -0
- package/dist/cjs/registry/referenceDataRegistry.js +59 -0
- package/dist/cjs/registry/referenceDataRegistry.js.map +1 -0
- package/dist/cjs/services/createAction.d.ts +13 -0
- package/dist/cjs/services/createAction.d.ts.map +1 -0
- package/dist/cjs/services/createAction.js +17 -0
- package/dist/cjs/services/createAction.js.map +1 -0
- package/dist/cjs/services/executeAction.d.ts +13 -0
- package/dist/cjs/services/executeAction.d.ts.map +1 -0
- package/dist/cjs/services/{submitAuthorization.js → executeAction.js} +8 -6
- package/dist/cjs/services/executeAction.js.map +1 -0
- package/dist/cjs/services/getAccount.d.ts +5 -3
- package/dist/cjs/services/getAccount.d.ts.map +1 -1
- package/dist/cjs/services/getAccount.js +2 -6
- package/dist/cjs/services/getAccount.js.map +1 -1
- 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 +15 -0
- package/dist/cjs/services/getActivity.js.map +1 -0
- package/dist/cjs/services/getAssets.d.ts +8 -0
- package/dist/cjs/services/getAssets.d.ts.map +1 -0
- package/dist/cjs/services/getAssets.js +11 -0
- package/dist/cjs/services/getAssets.js.map +1 -0
- package/dist/cjs/services/getFills.d.ts +14 -0
- package/dist/cjs/services/getFills.d.ts.map +1 -0
- package/dist/cjs/services/getFills.js +14 -0
- package/dist/cjs/services/getFills.js.map +1 -0
- package/dist/cjs/services/getMarket.d.ts +4 -3
- package/dist/cjs/services/getMarket.d.ts.map +1 -1
- package/dist/cjs/services/getMarket.js +6 -4
- package/dist/cjs/services/getMarket.js.map +1 -1
- package/dist/cjs/services/getMarkets.d.ts +4 -2
- package/dist/cjs/services/getMarkets.d.ts.map +1 -1
- package/dist/cjs/services/getMarkets.js +5 -2
- package/dist/cjs/services/getMarkets.js.map +1 -1
- package/dist/cjs/services/getMeta.d.ts +5 -0
- package/dist/cjs/services/getMeta.d.ts.map +1 -0
- package/dist/cjs/services/getMeta.js +8 -0
- package/dist/cjs/services/getMeta.js.map +1 -0
- package/dist/cjs/services/getOhlcv.d.ts +4 -3
- package/dist/cjs/services/getOhlcv.d.ts.map +1 -1
- package/dist/cjs/services/getOhlcv.js +4 -3
- package/dist/cjs/services/getOhlcv.js.map +1 -1
- package/dist/cjs/services/getOrder.d.ts +5 -3
- package/dist/cjs/services/getOrder.d.ts.map +1 -1
- package/dist/cjs/services/getOrder.js +2 -6
- package/dist/cjs/services/getOrder.js.map +1 -1
- package/dist/cjs/services/getOrderbook.d.ts +4 -3
- package/dist/cjs/services/getOrderbook.d.ts.map +1 -1
- package/dist/cjs/services/getOrderbook.js +4 -3
- package/dist/cjs/services/getOrderbook.js.map +1 -1
- package/dist/cjs/services/getOrders.d.ts +13 -0
- package/dist/cjs/services/getOrders.d.ts.map +1 -0
- package/dist/cjs/services/getOrders.js +13 -0
- package/dist/cjs/services/getOrders.js.map +1 -0
- package/dist/cjs/services/getPositions.d.ts +13 -0
- package/dist/cjs/services/getPositions.d.ts.map +1 -0
- package/dist/cjs/services/getPositions.js +13 -0
- package/dist/cjs/services/getPositions.js.map +1 -0
- package/dist/cjs/services/getPrices.d.ts +4 -3
- package/dist/cjs/services/getPrices.d.ts.map +1 -1
- package/dist/cjs/services/getPrices.js +3 -3
- package/dist/cjs/services/getPrices.js.map +1 -1
- package/dist/cjs/services/getProviders.d.ts +5 -0
- package/dist/cjs/services/getProviders.d.ts.map +1 -0
- package/dist/cjs/services/getProviders.js +8 -0
- package/dist/cjs/services/getProviders.js.map +1 -0
- package/dist/cjs/services/getQuote.d.ts +12 -0
- package/dist/cjs/services/getQuote.d.ts.map +1 -0
- package/dist/cjs/services/getQuote.js +13 -0
- package/dist/cjs/services/getQuote.js.map +1 -0
- package/dist/cjs/services/getTermsAcceptance.d.ts +6 -0
- package/dist/cjs/services/getTermsAcceptance.d.ts.map +1 -0
- package/dist/cjs/services/getTermsAcceptance.js +9 -0
- package/dist/cjs/services/getTermsAcceptance.js.map +1 -0
- package/dist/cjs/services/resolveQuote.d.ts +7 -0
- package/dist/cjs/services/resolveQuote.d.ts.map +1 -0
- package/dist/cjs/services/resolveQuote.js +50 -0
- package/dist/cjs/services/resolveQuote.js.map +1 -0
- package/dist/cjs/services/resolveSubscribeQuote.d.ts +6 -0
- package/dist/cjs/services/resolveSubscribeQuote.d.ts.map +1 -0
- package/dist/cjs/services/resolveSubscribeQuote.js +65 -0
- package/dist/cjs/services/resolveSubscribeQuote.js.map +1 -0
- package/dist/cjs/storage/parseStoredRecord.d.ts +4 -0
- package/dist/cjs/storage/parseStoredRecord.d.ts.map +1 -0
- package/dist/cjs/storage/parseStoredRecord.js +26 -0
- package/dist/cjs/storage/parseStoredRecord.js.map +1 -0
- package/dist/cjs/storage/storage.d.ts.map +1 -0
- package/dist/cjs/storage/storage.js.map +1 -0
- package/dist/cjs/{agent → storage}/types.d.ts +0 -5
- package/dist/cjs/storage/types.d.ts.map +1 -0
- package/dist/cjs/{agent → storage}/types.js.map +1 -1
- package/dist/cjs/transport/fetchWithRetry.d.ts +8 -0
- package/dist/cjs/transport/fetchWithRetry.d.ts.map +1 -0
- package/dist/cjs/transport/fetchWithRetry.js +81 -0
- package/dist/cjs/transport/fetchWithRetry.js.map +1 -0
- package/dist/cjs/{utils → transport}/request.d.ts +3 -2
- package/dist/cjs/transport/request.d.ts.map +1 -0
- package/dist/cjs/transport/request.js +75 -0
- package/dist/cjs/transport/request.js.map +1 -0
- package/dist/cjs/transport/retryPolicy.d.ts +37 -0
- package/dist/cjs/transport/retryPolicy.d.ts.map +1 -0
- package/dist/cjs/transport/retryPolicy.js +79 -0
- package/dist/cjs/transport/retryPolicy.js.map +1 -0
- package/dist/cjs/types/api.d.ts +85 -0
- package/dist/cjs/types/api.d.ts.map +1 -0
- package/dist/cjs/{dex/types.js → types/api.js} +1 -1
- package/dist/cjs/types/api.js.map +1 -0
- package/dist/cjs/types/config.d.ts +26 -0
- package/dist/cjs/types/config.d.ts.map +1 -0
- package/dist/cjs/{realtime/hyperliquid/types.js → types/config.js} +1 -1
- package/dist/cjs/types/config.js.map +1 -0
- package/dist/cjs/types/provider.d.ts +84 -0
- package/dist/cjs/types/provider.d.ts.map +1 -0
- package/dist/cjs/types/provider.js +3 -0
- package/dist/cjs/types/provider.js.map +1 -0
- package/dist/cjs/utils/accountSummary.d.ts +3 -0
- package/dist/cjs/utils/accountSummary.d.ts.map +1 -0
- package/dist/cjs/utils/accountSummary.js +25 -0
- package/dist/cjs/utils/accountSummary.js.map +1 -0
- package/dist/cjs/utils/assertNever.d.ts +2 -0
- package/dist/cjs/utils/assertNever.d.ts.map +1 -0
- package/dist/cjs/utils/assertNever.js +7 -0
- package/dist/cjs/utils/assertNever.js.map +1 -0
- package/dist/cjs/utils/calculations.d.ts +52 -0
- package/dist/cjs/utils/calculations.d.ts.map +1 -0
- package/dist/cjs/utils/calculations.js +148 -0
- package/dist/cjs/utils/calculations.js.map +1 -0
- package/dist/cjs/utils/depositChain.d.ts +6 -0
- package/dist/cjs/utils/depositChain.d.ts.map +1 -0
- package/dist/cjs/utils/depositChain.js +13 -0
- package/dist/cjs/utils/depositChain.js.map +1 -0
- package/dist/cjs/utils/explorer.d.ts +9 -0
- package/dist/cjs/utils/explorer.d.ts.map +1 -0
- package/dist/cjs/utils/explorer.js +23 -0
- package/dist/cjs/utils/explorer.js.map +1 -0
- package/dist/cjs/utils/fillClassification.d.ts +3 -0
- package/dist/cjs/utils/fillClassification.d.ts.map +1 -0
- package/dist/cjs/utils/fillClassification.js +37 -0
- package/dist/cjs/utils/fillClassification.js.map +1 -0
- package/dist/cjs/utils/format.d.ts +13 -0
- package/dist/cjs/utils/format.d.ts.map +1 -0
- package/dist/cjs/utils/format.js +117 -0
- package/dist/cjs/utils/format.js.map +1 -0
- package/dist/cjs/utils/orderClassification.d.ts +10 -0
- package/dist/cjs/utils/orderClassification.d.ts.map +1 -0
- package/dist/cjs/utils/orderClassification.js +49 -0
- package/dist/cjs/utils/orderClassification.js.map +1 -0
- package/dist/cjs/utils/orderMath.d.ts +6 -0
- package/dist/cjs/utils/orderMath.d.ts.map +1 -0
- package/dist/cjs/utils/orderMath.js +71 -0
- package/dist/cjs/utils/orderMath.js.map +1 -0
- package/dist/cjs/utils/parse.d.ts +2 -0
- package/dist/cjs/utils/parse.d.ts.map +1 -0
- package/dist/cjs/utils/parse.js +14 -0
- package/dist/cjs/utils/parse.js.map +1 -0
- package/dist/cjs/utils/positionMath.d.ts +32 -0
- package/dist/cjs/utils/positionMath.d.ts.map +1 -0
- package/dist/cjs/utils/positionMath.js +52 -0
- package/dist/cjs/utils/positionMath.js.map +1 -0
- package/dist/cjs/utils/signTypedData.d.ts +3 -1
- package/dist/cjs/utils/signTypedData.d.ts.map +1 -1
- package/dist/cjs/utils/signTypedData.js +11 -3
- package/dist/cjs/utils/signTypedData.js.map +1 -1
- package/dist/cjs/utils/sleep.d.ts.map +1 -1
- package/dist/cjs/utils/sleep.js.map +1 -1
- package/dist/cjs/utils/units.d.ts +3 -0
- package/dist/cjs/utils/units.d.ts.map +1 -0
- package/dist/cjs/utils/units.js +18 -0
- package/dist/cjs/utils/units.js.map +1 -0
- package/dist/cjs/utils/validation.d.ts +2 -0
- package/dist/cjs/utils/validation.d.ts.map +1 -0
- package/dist/cjs/utils/validation.js +16 -0
- package/dist/cjs/utils/validation.js.map +1 -0
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.d.ts.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/websocket/PerpsWsClient.d.ts +27 -0
- package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -0
- package/dist/cjs/websocket/PerpsWsClient.js +84 -0
- package/dist/cjs/websocket/PerpsWsClient.js.map +1 -0
- package/dist/{esm/realtime → cjs/websocket}/ReconnectingWebSocket.d.ts +23 -7
- package/dist/cjs/websocket/ReconnectingWebSocket.d.ts.map +1 -0
- package/dist/cjs/websocket/ReconnectingWebSocket.js +213 -0
- package/dist/cjs/websocket/ReconnectingWebSocket.js.map +1 -0
- package/dist/cjs/websocket/WsProviderBase.d.ts +31 -0
- package/dist/cjs/websocket/WsProviderBase.d.ts.map +1 -0
- package/dist/cjs/websocket/WsProviderBase.js +197 -0
- package/dist/cjs/websocket/WsProviderBase.js.map +1 -0
- package/dist/cjs/websocket/cachePromise.d.ts +2 -0
- package/dist/cjs/websocket/cachePromise.d.ts.map +1 -0
- package/dist/cjs/websocket/cachePromise.js +18 -0
- package/dist/cjs/websocket/cachePromise.js.map +1 -0
- package/dist/cjs/websocket/types.d.ts +15 -0
- package/dist/cjs/websocket/types.d.ts.map +1 -0
- package/dist/cjs/{dex → websocket}/types.js.map +1 -1
- package/dist/cjs/websocket/wsLog.d.ts +10 -0
- package/dist/cjs/websocket/wsLog.d.ts.map +1 -0
- package/dist/cjs/websocket/wsLog.js +31 -0
- package/dist/cjs/websocket/wsLog.js.map +1 -0
- package/dist/esm/client/PerpsClient.d.ts +223 -136
- package/dist/esm/client/PerpsClient.d.ts.map +1 -1
- package/dist/esm/client/PerpsClient.js +399 -339
- package/dist/esm/client/PerpsClient.js.map +1 -1
- package/dist/esm/client/bindProvider.d.ts +13 -0
- package/dist/esm/client/bindProvider.d.ts.map +1 -0
- package/dist/esm/client/bindProvider.js +16 -0
- package/dist/esm/client/bindProvider.js.map +1 -0
- package/dist/esm/client/createPerpsClient.d.ts +24 -64
- package/dist/esm/client/createPerpsClient.d.ts.map +1 -1
- package/dist/esm/client/createPerpsClient.js +45 -17
- package/dist/esm/client/createPerpsClient.js.map +1 -1
- package/dist/esm/client/requireProvider.d.ts +12 -0
- package/dist/esm/client/requireProvider.d.ts.map +1 -0
- package/dist/esm/client/requireProvider.js +22 -0
- package/dist/esm/client/requireProvider.js.map +1 -0
- package/dist/esm/errors/PerpsError.d.ts +10 -3
- package/dist/esm/errors/PerpsError.d.ts.map +1 -1
- package/dist/esm/errors/PerpsError.js +11 -15
- package/dist/esm/errors/PerpsError.js.map +1 -1
- package/dist/esm/errors/constants.d.ts +8 -12
- package/dist/esm/errors/constants.d.ts.map +1 -1
- package/dist/esm/errors/constants.js +8 -13
- package/dist/esm/errors/constants.js.map +1 -1
- package/dist/esm/index.d.ts +66 -34
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +49 -29
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/registry/assetRegistry.d.ts +25 -0
- package/dist/esm/registry/assetRegistry.d.ts.map +1 -0
- package/dist/esm/registry/assetRegistry.js +48 -0
- package/dist/esm/registry/assetRegistry.js.map +1 -0
- package/dist/esm/registry/marketRegistry.d.ts +42 -0
- package/dist/esm/registry/marketRegistry.d.ts.map +1 -0
- package/dist/esm/registry/marketRegistry.js +81 -0
- package/dist/esm/registry/marketRegistry.js.map +1 -0
- package/dist/esm/registry/referenceDataRegistry.d.ts +44 -0
- package/dist/esm/registry/referenceDataRegistry.d.ts.map +1 -0
- package/dist/esm/registry/referenceDataRegistry.js +79 -0
- package/dist/esm/registry/referenceDataRegistry.js.map +1 -0
- package/dist/esm/services/createAction.d.ts +26 -0
- package/dist/esm/services/createAction.d.ts.map +1 -0
- package/dist/esm/services/createAction.js +22 -0
- package/dist/esm/services/createAction.js.map +1 -0
- package/dist/esm/services/executeAction.d.ts +26 -0
- package/dist/esm/services/executeAction.d.ts.map +1 -0
- package/dist/esm/services/executeAction.js +26 -0
- package/dist/esm/services/executeAction.js.map +1 -0
- package/dist/esm/services/getAccount.d.ts +21 -18
- package/dist/esm/services/getAccount.d.ts.map +1 -1
- package/dist/esm/services/getAccount.js +13 -19
- package/dist/esm/services/getAccount.js.map +1 -1
- package/dist/esm/services/getActivity.d.ts +39 -0
- package/dist/esm/services/getActivity.d.ts.map +1 -0
- package/dist/esm/services/getActivity.js +29 -0
- package/dist/esm/services/getActivity.js.map +1 -0
- package/dist/esm/services/getAssets.d.ts +27 -0
- package/dist/esm/services/getAssets.d.ts.map +1 -0
- package/dist/esm/services/getAssets.js +22 -0
- package/dist/esm/services/getAssets.js.map +1 -0
- package/dist/esm/services/getFills.d.ts +38 -0
- package/dist/esm/services/getFills.d.ts.map +1 -0
- package/dist/esm/services/getFills.js +28 -0
- package/dist/esm/services/getFills.js.map +1 -0
- package/dist/esm/services/getMarket.d.ts +22 -15
- package/dist/esm/services/getMarket.d.ts.map +1 -1
- package/dist/esm/services/getMarket.js +14 -14
- package/dist/esm/services/getMarket.js.map +1 -1
- package/dist/esm/services/getMarkets.d.ts +16 -13
- package/dist/esm/services/getMarkets.d.ts.map +1 -1
- package/dist/esm/services/getMarkets.js +11 -12
- package/dist/esm/services/getMarkets.js.map +1 -1
- package/dist/esm/services/getMeta.d.ts +19 -0
- package/dist/esm/services/getMeta.d.ts.map +1 -0
- package/dist/esm/services/getMeta.js +19 -0
- package/dist/esm/services/getMeta.js.map +1 -0
- package/dist/esm/services/getOhlcv.d.ts +17 -21
- package/dist/esm/services/getOhlcv.d.ts.map +1 -1
- package/dist/esm/services/getOhlcv.js +9 -15
- package/dist/esm/services/getOhlcv.js.map +1 -1
- package/dist/esm/services/getOrder.d.ts +18 -18
- package/dist/esm/services/getOrder.d.ts.map +1 -1
- package/dist/esm/services/getOrder.js +10 -18
- package/dist/esm/services/getOrder.js.map +1 -1
- package/dist/esm/services/getOrderbook.d.ts +14 -24
- package/dist/esm/services/getOrderbook.d.ts.map +1 -1
- package/dist/esm/services/getOrderbook.js +8 -22
- package/dist/esm/services/getOrderbook.js.map +1 -1
- package/dist/esm/services/getOrders.d.ts +35 -0
- package/dist/esm/services/getOrders.d.ts.map +1 -0
- package/dist/esm/services/getOrders.js +26 -0
- package/dist/esm/services/getOrders.js.map +1 -0
- package/dist/esm/services/getPositions.d.ts +35 -0
- package/dist/esm/services/getPositions.d.ts.map +1 -0
- package/dist/esm/services/getPositions.js +26 -0
- package/dist/esm/services/getPositions.js.map +1 -0
- package/dist/esm/services/getPrices.d.ts +13 -25
- package/dist/esm/services/getPrices.d.ts.map +1 -1
- package/dist/esm/services/getPrices.js +6 -23
- package/dist/esm/services/getPrices.js.map +1 -1
- package/dist/esm/services/getProviders.d.ts +20 -0
- package/dist/esm/services/getProviders.d.ts.map +1 -0
- package/dist/esm/services/getProviders.js +20 -0
- package/dist/esm/services/getProviders.js.map +1 -0
- package/dist/esm/services/getQuote.d.ts +42 -0
- package/dist/esm/services/getQuote.d.ts.map +1 -0
- package/dist/esm/services/getQuote.js +33 -0
- package/dist/esm/services/getQuote.js.map +1 -0
- package/dist/esm/services/getTermsAcceptance.d.ts +24 -0
- package/dist/esm/services/getTermsAcceptance.d.ts.map +1 -0
- package/dist/esm/services/getTermsAcceptance.js +24 -0
- package/dist/esm/services/getTermsAcceptance.js.map +1 -0
- package/dist/esm/services/resolveQuote.d.ts +36 -0
- package/dist/esm/services/resolveQuote.d.ts.map +1 -0
- package/dist/esm/services/resolveQuote.js +74 -0
- package/dist/esm/services/resolveQuote.js.map +1 -0
- package/dist/esm/services/resolveSubscribeQuote.d.ts +31 -0
- package/dist/esm/services/resolveSubscribeQuote.d.ts.map +1 -0
- package/dist/esm/services/resolveSubscribeQuote.js +86 -0
- package/dist/esm/services/resolveSubscribeQuote.js.map +1 -0
- package/dist/esm/storage/parseStoredRecord.d.ts +29 -0
- package/dist/esm/storage/parseStoredRecord.d.ts.map +1 -0
- package/dist/esm/storage/parseStoredRecord.js +47 -0
- package/dist/esm/storage/parseStoredRecord.js.map +1 -0
- package/dist/{types/agent → esm/storage}/storage.d.ts +6 -3
- package/dist/esm/storage/storage.d.ts.map +1 -0
- package/dist/esm/{agent → storage}/storage.js +6 -4
- package/dist/esm/storage/storage.js.map +1 -0
- package/dist/esm/storage/types.d.ts +14 -0
- package/dist/esm/storage/types.d.ts.map +1 -0
- package/dist/{cjs/client → esm/storage}/types.js.map +1 -1
- package/dist/esm/transport/fetchWithRetry.d.ts +22 -0
- package/dist/esm/transport/fetchWithRetry.d.ts.map +1 -0
- package/dist/esm/transport/fetchWithRetry.js +87 -0
- package/dist/esm/transport/fetchWithRetry.js.map +1 -0
- package/dist/esm/transport/request.d.ts +25 -0
- package/dist/esm/transport/request.d.ts.map +1 -0
- package/dist/esm/transport/request.js +82 -0
- package/dist/esm/transport/request.js.map +1 -0
- package/dist/esm/transport/retryPolicy.d.ts +106 -0
- package/dist/esm/transport/retryPolicy.d.ts.map +1 -0
- package/dist/esm/transport/retryPolicy.js +99 -0
- package/dist/esm/transport/retryPolicy.js.map +1 -0
- package/dist/esm/types/api.d.ts +214 -0
- package/dist/esm/types/api.d.ts.map +1 -0
- package/dist/esm/types/api.js +2 -0
- package/dist/esm/types/api.js.map +1 -0
- package/dist/esm/types/config.d.ts +70 -0
- package/dist/esm/types/config.d.ts.map +1 -0
- package/dist/esm/types/config.js +2 -0
- package/dist/esm/types/config.js.map +1 -0
- package/dist/esm/types/provider.d.ts +330 -0
- package/dist/esm/types/provider.d.ts.map +1 -0
- package/dist/esm/types/provider.js +2 -0
- package/dist/esm/types/provider.js.map +1 -0
- package/dist/esm/utils/accountSummary.d.ts +13 -0
- package/dist/esm/utils/accountSummary.d.ts.map +1 -0
- package/dist/esm/utils/accountSummary.js +32 -0
- package/dist/esm/utils/accountSummary.js.map +1 -0
- package/dist/esm/utils/assertNever.d.ts +20 -0
- package/dist/esm/utils/assertNever.d.ts.map +1 -0
- package/dist/esm/utils/assertNever.js +22 -0
- package/dist/esm/utils/assertNever.js.map +1 -0
- package/dist/esm/utils/calculations.d.ts +225 -0
- package/dist/esm/utils/calculations.d.ts.map +1 -0
- package/dist/esm/utils/calculations.js +291 -0
- package/dist/esm/utils/calculations.js.map +1 -0
- package/dist/esm/utils/depositChain.d.ts +25 -0
- package/dist/esm/utils/depositChain.d.ts.map +1 -0
- package/dist/esm/utils/depositChain.js +23 -0
- package/dist/esm/utils/depositChain.js.map +1 -0
- package/dist/esm/utils/explorer.d.ts +33 -0
- package/dist/esm/utils/explorer.d.ts.map +1 -0
- package/dist/esm/utils/explorer.js +38 -0
- package/dist/esm/utils/explorer.js.map +1 -0
- package/dist/esm/utils/fillClassification.d.ts +13 -0
- package/dist/esm/utils/fillClassification.d.ts.map +1 -0
- package/dist/esm/utils/fillClassification.js +44 -0
- package/dist/esm/utils/fillClassification.js.map +1 -0
- package/dist/esm/utils/format.d.ts +66 -0
- package/dist/esm/utils/format.d.ts.map +1 -0
- package/dist/esm/utils/format.js +171 -0
- package/dist/esm/utils/format.js.map +1 -0
- package/dist/esm/utils/orderClassification.d.ts +47 -0
- package/dist/esm/utils/orderClassification.d.ts.map +1 -0
- package/dist/esm/utils/orderClassification.js +78 -0
- package/dist/esm/utils/orderClassification.js.map +1 -0
- package/dist/esm/utils/orderMath.d.ts +44 -0
- package/dist/esm/utils/orderMath.d.ts.map +1 -0
- package/dist/esm/utils/orderMath.js +103 -0
- package/dist/esm/utils/orderMath.js.map +1 -0
- package/dist/esm/utils/parse.d.ts +21 -0
- package/dist/esm/utils/parse.d.ts.map +1 -0
- package/dist/esm/utils/parse.js +30 -0
- package/dist/esm/utils/parse.js.map +1 -0
- package/dist/esm/utils/positionMath.d.ts +107 -0
- package/dist/esm/utils/positionMath.d.ts.map +1 -0
- package/dist/esm/utils/positionMath.js +119 -0
- package/dist/esm/utils/positionMath.js.map +1 -0
- package/dist/esm/utils/signTypedData.d.ts +13 -10
- package/dist/esm/utils/signTypedData.d.ts.map +1 -1
- package/dist/esm/utils/signTypedData.js +20 -13
- package/dist/esm/utils/signTypedData.js.map +1 -1
- package/dist/esm/utils/sleep.d.ts +5 -0
- package/dist/esm/utils/sleep.d.ts.map +1 -1
- package/dist/esm/utils/sleep.js +5 -0
- package/dist/esm/utils/sleep.js.map +1 -1
- package/dist/esm/utils/units.d.ts +27 -0
- package/dist/esm/utils/units.d.ts.map +1 -0
- package/dist/esm/utils/units.js +38 -0
- package/dist/esm/utils/units.js.map +1 -0
- package/dist/esm/utils/validation.d.ts +18 -0
- package/dist/esm/utils/validation.d.ts.map +1 -0
- package/dist/esm/utils/validation.js +29 -0
- package/dist/esm/utils/validation.js.map +1 -0
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.d.ts.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/websocket/PerpsWsClient.d.ts +100 -0
- package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -0
- package/dist/esm/websocket/PerpsWsClient.js +121 -0
- package/dist/esm/websocket/PerpsWsClient.js.map +1 -0
- package/dist/esm/websocket/ReconnectingWebSocket.d.ts +130 -0
- package/dist/esm/websocket/ReconnectingWebSocket.d.ts.map +1 -0
- package/dist/esm/websocket/ReconnectingWebSocket.js +288 -0
- package/dist/esm/websocket/ReconnectingWebSocket.js.map +1 -0
- package/dist/esm/websocket/WsProviderBase.d.ts +89 -0
- package/dist/esm/websocket/WsProviderBase.d.ts.map +1 -0
- package/dist/esm/websocket/WsProviderBase.js +246 -0
- package/dist/esm/websocket/WsProviderBase.js.map +1 -0
- package/dist/esm/websocket/cachePromise.d.ts +14 -0
- package/dist/esm/websocket/cachePromise.d.ts.map +1 -0
- package/dist/esm/websocket/cachePromise.js +27 -0
- package/dist/esm/websocket/cachePromise.js.map +1 -0
- package/dist/esm/websocket/types.d.ts +60 -0
- package/dist/esm/websocket/types.d.ts.map +1 -0
- package/dist/{cjs/realtime → esm/websocket}/types.js.map +1 -1
- package/dist/esm/websocket/wsLog.d.ts +50 -0
- package/dist/esm/websocket/wsLog.d.ts.map +1 -0
- package/dist/esm/websocket/wsLog.js +68 -0
- package/dist/esm/websocket/wsLog.js.map +1 -0
- package/dist/types/client/PerpsClient.d.ts +223 -136
- package/dist/types/client/PerpsClient.d.ts.map +1 -1
- package/dist/types/client/bindProvider.d.ts +13 -0
- package/dist/types/client/bindProvider.d.ts.map +1 -0
- package/dist/types/client/createPerpsClient.d.ts +24 -64
- package/dist/types/client/createPerpsClient.d.ts.map +1 -1
- package/dist/types/client/requireProvider.d.ts +12 -0
- package/dist/types/client/requireProvider.d.ts.map +1 -0
- package/dist/types/errors/PerpsError.d.ts +10 -3
- package/dist/types/errors/PerpsError.d.ts.map +1 -1
- package/dist/types/errors/constants.d.ts +8 -12
- package/dist/types/errors/constants.d.ts.map +1 -1
- package/dist/types/index.d.ts +66 -34
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/registry/assetRegistry.d.ts +25 -0
- package/dist/types/registry/assetRegistry.d.ts.map +1 -0
- package/dist/types/registry/marketRegistry.d.ts +42 -0
- package/dist/types/registry/marketRegistry.d.ts.map +1 -0
- package/dist/types/registry/referenceDataRegistry.d.ts +44 -0
- package/dist/types/registry/referenceDataRegistry.d.ts.map +1 -0
- package/dist/types/services/createAction.d.ts +26 -0
- package/dist/types/services/createAction.d.ts.map +1 -0
- package/dist/types/services/executeAction.d.ts +26 -0
- package/dist/types/services/executeAction.d.ts.map +1 -0
- package/dist/types/services/getAccount.d.ts +21 -18
- package/dist/types/services/getAccount.d.ts.map +1 -1
- package/dist/types/services/getActivity.d.ts +39 -0
- package/dist/types/services/getActivity.d.ts.map +1 -0
- package/dist/types/services/getAssets.d.ts +27 -0
- package/dist/types/services/getAssets.d.ts.map +1 -0
- package/dist/types/services/getFills.d.ts +38 -0
- package/dist/types/services/getFills.d.ts.map +1 -0
- package/dist/types/services/getMarket.d.ts +22 -15
- package/dist/types/services/getMarket.d.ts.map +1 -1
- package/dist/types/services/getMarkets.d.ts +16 -13
- package/dist/types/services/getMarkets.d.ts.map +1 -1
- package/dist/types/services/getMeta.d.ts +19 -0
- package/dist/types/services/getMeta.d.ts.map +1 -0
- package/dist/types/services/getOhlcv.d.ts +17 -21
- package/dist/types/services/getOhlcv.d.ts.map +1 -1
- package/dist/types/services/getOrder.d.ts +18 -18
- package/dist/types/services/getOrder.d.ts.map +1 -1
- package/dist/types/services/getOrderbook.d.ts +14 -24
- package/dist/types/services/getOrderbook.d.ts.map +1 -1
- package/dist/types/services/getOrders.d.ts +35 -0
- package/dist/types/services/getOrders.d.ts.map +1 -0
- package/dist/types/services/getPositions.d.ts +35 -0
- package/dist/types/services/getPositions.d.ts.map +1 -0
- package/dist/types/services/getPrices.d.ts +13 -25
- package/dist/types/services/getPrices.d.ts.map +1 -1
- package/dist/types/services/getProviders.d.ts +20 -0
- package/dist/types/services/getProviders.d.ts.map +1 -0
- package/dist/types/services/getQuote.d.ts +42 -0
- package/dist/types/services/getQuote.d.ts.map +1 -0
- package/dist/types/services/getTermsAcceptance.d.ts +24 -0
- package/dist/types/services/getTermsAcceptance.d.ts.map +1 -0
- package/dist/types/services/resolveQuote.d.ts +36 -0
- package/dist/types/services/resolveQuote.d.ts.map +1 -0
- package/dist/types/services/resolveSubscribeQuote.d.ts +31 -0
- package/dist/types/services/resolveSubscribeQuote.d.ts.map +1 -0
- package/dist/types/storage/parseStoredRecord.d.ts +29 -0
- package/dist/types/storage/parseStoredRecord.d.ts.map +1 -0
- package/dist/{esm/agent → types/storage}/storage.d.ts +6 -3
- package/dist/types/storage/storage.d.ts.map +1 -0
- package/dist/types/storage/types.d.ts +14 -0
- package/dist/types/storage/types.d.ts.map +1 -0
- package/dist/types/transport/fetchWithRetry.d.ts +22 -0
- package/dist/types/transport/fetchWithRetry.d.ts.map +1 -0
- package/dist/types/transport/request.d.ts +25 -0
- package/dist/types/transport/request.d.ts.map +1 -0
- package/dist/types/transport/retryPolicy.d.ts +106 -0
- package/dist/types/transport/retryPolicy.d.ts.map +1 -0
- package/dist/types/types/api.d.ts +214 -0
- package/dist/types/types/api.d.ts.map +1 -0
- package/dist/types/types/config.d.ts +70 -0
- package/dist/types/types/config.d.ts.map +1 -0
- package/dist/types/types/provider.d.ts +330 -0
- package/dist/types/types/provider.d.ts.map +1 -0
- package/dist/types/utils/accountSummary.d.ts +13 -0
- package/dist/types/utils/accountSummary.d.ts.map +1 -0
- package/dist/types/utils/assertNever.d.ts +20 -0
- package/dist/types/utils/assertNever.d.ts.map +1 -0
- package/dist/types/utils/calculations.d.ts +225 -0
- package/dist/types/utils/calculations.d.ts.map +1 -0
- package/dist/types/utils/depositChain.d.ts +25 -0
- package/dist/types/utils/depositChain.d.ts.map +1 -0
- package/dist/types/utils/explorer.d.ts +33 -0
- package/dist/types/utils/explorer.d.ts.map +1 -0
- package/dist/types/utils/fillClassification.d.ts +13 -0
- package/dist/types/utils/fillClassification.d.ts.map +1 -0
- package/dist/types/utils/format.d.ts +66 -0
- package/dist/types/utils/format.d.ts.map +1 -0
- package/dist/types/utils/orderClassification.d.ts +47 -0
- package/dist/types/utils/orderClassification.d.ts.map +1 -0
- package/dist/types/utils/orderMath.d.ts +44 -0
- package/dist/types/utils/orderMath.d.ts.map +1 -0
- package/dist/types/utils/parse.d.ts +21 -0
- package/dist/types/utils/parse.d.ts.map +1 -0
- package/dist/types/utils/positionMath.d.ts +107 -0
- package/dist/types/utils/positionMath.d.ts.map +1 -0
- package/dist/types/utils/signTypedData.d.ts +13 -10
- package/dist/types/utils/signTypedData.d.ts.map +1 -1
- package/dist/types/utils/sleep.d.ts +5 -0
- package/dist/types/utils/sleep.d.ts.map +1 -1
- package/dist/types/utils/units.d.ts +27 -0
- package/dist/types/utils/units.d.ts.map +1 -0
- package/dist/types/utils/validation.d.ts +18 -0
- package/dist/types/utils/validation.d.ts.map +1 -0
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/dist/types/websocket/PerpsWsClient.d.ts +100 -0
- package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -0
- package/dist/types/websocket/ReconnectingWebSocket.d.ts +130 -0
- package/dist/types/websocket/ReconnectingWebSocket.d.ts.map +1 -0
- package/dist/types/websocket/WsProviderBase.d.ts +89 -0
- package/dist/types/websocket/WsProviderBase.d.ts.map +1 -0
- package/dist/types/websocket/cachePromise.d.ts +14 -0
- package/dist/types/websocket/cachePromise.d.ts.map +1 -0
- package/dist/types/websocket/types.d.ts +60 -0
- package/dist/types/websocket/types.d.ts.map +1 -0
- package/dist/types/websocket/wsLog.d.ts +50 -0
- package/dist/types/websocket/wsLog.d.ts.map +1 -0
- package/package.json +12 -50
- package/src/client/PerpsClient.ts +549 -435
- package/src/client/bindProvider.ts +24 -0
- package/src/client/createPerpsClient.ts +61 -80
- package/src/client/requireProvider.ts +29 -0
- package/src/errors/PerpsError.ts +11 -22
- package/src/errors/constants.ts +8 -13
- package/src/index.ts +189 -65
- package/src/registry/assetRegistry.ts +62 -0
- package/src/registry/marketRegistry.ts +100 -0
- package/src/registry/referenceDataRegistry.ts +95 -0
- package/src/services/createAction.ts +52 -0
- package/src/services/executeAction.ts +56 -0
- package/src/services/getAccount.ts +26 -27
- package/src/services/getActivity.ts +57 -0
- package/src/services/getAssets.ts +38 -0
- package/src/services/getFills.ts +55 -0
- package/src/services/getMarket.ts +34 -23
- package/src/services/getMarkets.ts +21 -18
- package/src/services/getMeta.ts +30 -0
- package/src/services/getOhlcv.ts +21 -27
- package/src/services/getOrder.ts +23 -27
- package/src/services/getOrderbook.ts +18 -30
- package/src/services/getOrders.ts +51 -0
- package/src/services/getPositions.ts +51 -0
- package/src/services/getPrices.ts +16 -31
- package/src/services/getProviders.ts +31 -0
- package/src/services/getQuote.ts +58 -0
- package/src/services/getTermsAcceptance.ts +32 -0
- package/src/services/resolveQuote.ts +122 -0
- package/src/services/resolveSubscribeQuote.ts +109 -0
- package/src/storage/parseStoredRecord.ts +55 -0
- package/src/{agent → storage}/storage.ts +6 -4
- package/src/storage/types.ts +13 -0
- package/src/transport/fetchWithRetry.ts +116 -0
- package/src/transport/request.ts +123 -0
- package/src/transport/retryPolicy.ts +202 -0
- package/src/types/api.ts +239 -0
- package/src/types/config.ts +79 -0
- package/src/types/provider.ts +429 -0
- package/src/utils/accountSummary.ts +46 -0
- package/src/utils/assertNever.ts +23 -0
- package/src/utils/calculations.ts +406 -0
- package/src/utils/depositChain.ts +37 -0
- package/src/utils/explorer.ts +51 -0
- package/src/utils/fillClassification.ts +51 -0
- package/src/utils/format.ts +212 -0
- package/src/utils/orderClassification.ts +96 -0
- package/src/utils/orderMath.ts +134 -0
- package/src/utils/parse.ts +29 -0
- package/src/utils/positionMath.ts +149 -0
- package/src/utils/signTypedData.ts +25 -15
- package/src/utils/sleep.ts +5 -0
- package/src/utils/units.ts +39 -0
- package/src/utils/validation.ts +38 -0
- package/src/version.ts +1 -1
- package/src/websocket/PerpsWsClient.ts +204 -0
- package/src/websocket/ReconnectingWebSocket.ts +353 -0
- package/src/websocket/WsProviderBase.ts +333 -0
- package/src/websocket/cachePromise.ts +30 -0
- package/src/websocket/types.ts +75 -0
- package/src/websocket/wsLog.ts +82 -0
- package/dist/cjs/agent/AgentManager.d.ts +0 -15
- package/dist/cjs/agent/AgentManager.d.ts.map +0 -1
- package/dist/cjs/agent/AgentManager.js +0 -80
- package/dist/cjs/agent/AgentManager.js.map +0 -1
- package/dist/cjs/agent/storage.d.ts.map +0 -1
- package/dist/cjs/agent/storage.js.map +0 -1
- package/dist/cjs/agent/types.d.ts.map +0 -1
- package/dist/cjs/client/types.d.ts +0 -62
- package/dist/cjs/client/types.d.ts.map +0 -1
- package/dist/cjs/dex/hyperliquid.d.ts +0 -3
- package/dist/cjs/dex/hyperliquid.d.ts.map +0 -1
- package/dist/cjs/dex/hyperliquid.js +0 -21
- package/dist/cjs/dex/hyperliquid.js.map +0 -1
- package/dist/cjs/dex/registry.d.ts +0 -3
- package/dist/cjs/dex/registry.d.ts.map +0 -1
- package/dist/cjs/dex/registry.js +0 -16
- package/dist/cjs/dex/registry.js.map +0 -1
- package/dist/cjs/dex/types.d.ts +0 -13
- package/dist/cjs/dex/types.d.ts.map +0 -1
- package/dist/cjs/errors/AgentError.d.ts +0 -10
- package/dist/cjs/errors/AgentError.d.ts.map +0 -1
- package/dist/cjs/errors/AgentError.js +0 -23
- package/dist/cjs/errors/AgentError.js.map +0 -1
- package/dist/cjs/errors/HTTPError.d.ts +0 -11
- package/dist/cjs/errors/HTTPError.d.ts.map +0 -1
- package/dist/cjs/errors/HTTPError.js +0 -62
- package/dist/cjs/errors/HTTPError.js.map +0 -1
- package/dist/cjs/errors/PerpsSDKError.d.ts +0 -9
- package/dist/cjs/errors/PerpsSDKError.d.ts.map +0 -1
- package/dist/cjs/errors/PerpsSDKError.js +0 -36
- package/dist/cjs/errors/PerpsSDKError.js.map +0 -1
- package/dist/cjs/errors/ServerError.d.ts +0 -10
- package/dist/cjs/errors/ServerError.d.ts.map +0 -1
- package/dist/cjs/errors/ServerError.js +0 -24
- package/dist/cjs/errors/ServerError.js.map +0 -1
- package/dist/cjs/errors/ValidationError.d.ts +0 -9
- package/dist/cjs/errors/ValidationError.d.ts.map +0 -1
- package/dist/cjs/errors/ValidationError.js +0 -23
- package/dist/cjs/errors/ValidationError.js.map +0 -1
- package/dist/cjs/errors/utils/rootCause.d.ts +0 -6
- package/dist/cjs/errors/utils/rootCause.d.ts.map +0 -1
- package/dist/cjs/errors/utils/rootCause.js +0 -41
- package/dist/cjs/errors/utils/rootCause.js.map +0 -1
- package/dist/cjs/realtime/PerpsWsClient.d.ts +0 -14
- package/dist/cjs/realtime/PerpsWsClient.d.ts.map +0 -1
- package/dist/cjs/realtime/PerpsWsClient.js +0 -56
- package/dist/cjs/realtime/PerpsWsClient.js.map +0 -1
- package/dist/cjs/realtime/ReconnectingWebSocket.d.ts +0 -36
- package/dist/cjs/realtime/ReconnectingWebSocket.d.ts.map +0 -1
- package/dist/cjs/realtime/ReconnectingWebSocket.js +0 -132
- package/dist/cjs/realtime/ReconnectingWebSocket.js.map +0 -1
- package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -26
- package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
- package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.js +0 -225
- package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.js.map +0 -1
- package/dist/cjs/realtime/hyperliquid/types.d.ts +0 -35
- package/dist/cjs/realtime/hyperliquid/types.d.ts.map +0 -1
- package/dist/cjs/realtime/hyperliquid/types.js.map +0 -1
- package/dist/cjs/realtime/types.d.ts +0 -10
- package/dist/cjs/realtime/types.d.ts.map +0 -1
- package/dist/cjs/realtime/types.js +0 -3
- package/dist/cjs/services/cancelOrder.d.ts +0 -10
- package/dist/cjs/services/cancelOrder.d.ts.map +0 -1
- package/dist/cjs/services/cancelOrder.js +0 -16
- package/dist/cjs/services/cancelOrder.js.map +0 -1
- package/dist/cjs/services/createAuthorization.d.ts +0 -10
- package/dist/cjs/services/createAuthorization.d.ts.map +0 -1
- package/dist/cjs/services/createAuthorization.js +0 -16
- package/dist/cjs/services/createAuthorization.js.map +0 -1
- package/dist/cjs/services/createOrder.d.ts +0 -21
- package/dist/cjs/services/createOrder.d.ts.map +0 -1
- package/dist/cjs/services/createOrder.js +0 -27
- package/dist/cjs/services/createOrder.js.map +0 -1
- package/dist/cjs/services/createWithdrawal.d.ts +0 -9
- package/dist/cjs/services/createWithdrawal.d.ts.map +0 -1
- package/dist/cjs/services/createWithdrawal.js +0 -15
- package/dist/cjs/services/createWithdrawal.js.map +0 -1
- package/dist/cjs/services/getDexes.d.ts +0 -4
- package/dist/cjs/services/getDexes.d.ts.map +0 -1
- package/dist/cjs/services/getDexes.js +0 -8
- package/dist/cjs/services/getDexes.js.map +0 -1
- package/dist/cjs/services/getHistory.d.ts +0 -10
- package/dist/cjs/services/getHistory.d.ts.map +0 -1
- package/dist/cjs/services/getHistory.js +0 -14
- package/dist/cjs/services/getHistory.js.map +0 -1
- package/dist/cjs/services/submitAuthorization.d.ts +0 -10
- package/dist/cjs/services/submitAuthorization.d.ts.map +0 -1
- package/dist/cjs/services/submitAuthorization.js.map +0 -1
- package/dist/cjs/services/submitOrder.d.ts +0 -10
- package/dist/cjs/services/submitOrder.d.ts.map +0 -1
- package/dist/cjs/services/submitOrder.js +0 -16
- package/dist/cjs/services/submitOrder.js.map +0 -1
- package/dist/cjs/services/submitWithdrawal.d.ts +0 -9
- package/dist/cjs/services/submitWithdrawal.d.ts.map +0 -1
- package/dist/cjs/services/submitWithdrawal.js +0 -15
- package/dist/cjs/services/submitWithdrawal.js.map +0 -1
- package/dist/cjs/utils/request.d.ts.map +0 -1
- package/dist/cjs/utils/request.js +0 -60
- package/dist/cjs/utils/request.js.map +0 -1
- package/dist/esm/agent/AgentManager.d.ts +0 -45
- package/dist/esm/agent/AgentManager.d.ts.map +0 -1
- package/dist/esm/agent/AgentManager.js +0 -110
- package/dist/esm/agent/AgentManager.js.map +0 -1
- package/dist/esm/agent/storage.d.ts.map +0 -1
- package/dist/esm/agent/storage.js.map +0 -1
- package/dist/esm/agent/types.d.ts +0 -23
- package/dist/esm/agent/types.d.ts.map +0 -1
- package/dist/esm/agent/types.js.map +0 -1
- package/dist/esm/client/types.d.ts +0 -134
- package/dist/esm/client/types.d.ts.map +0 -1
- package/dist/esm/client/types.js.map +0 -1
- package/dist/esm/dex/hyperliquid.d.ts +0 -3
- package/dist/esm/dex/hyperliquid.d.ts.map +0 -1
- package/dist/esm/dex/hyperliquid.js +0 -19
- package/dist/esm/dex/hyperliquid.js.map +0 -1
- package/dist/esm/dex/registry.d.ts +0 -3
- package/dist/esm/dex/registry.d.ts.map +0 -1
- package/dist/esm/dex/registry.js +0 -13
- package/dist/esm/dex/registry.js.map +0 -1
- package/dist/esm/dex/types.d.ts +0 -15
- package/dist/esm/dex/types.d.ts.map +0 -1
- package/dist/esm/dex/types.js +0 -2
- package/dist/esm/dex/types.js.map +0 -1
- package/dist/esm/errors/AgentError.d.ts +0 -25
- package/dist/esm/errors/AgentError.d.ts.map +0 -1
- package/dist/esm/errors/AgentError.js +0 -35
- package/dist/esm/errors/AgentError.js.map +0 -1
- package/dist/esm/errors/HTTPError.d.ts +0 -11
- package/dist/esm/errors/HTTPError.d.ts.map +0 -1
- package/dist/esm/errors/HTTPError.js +0 -61
- package/dist/esm/errors/HTTPError.js.map +0 -1
- package/dist/esm/errors/PerpsSDKError.d.ts +0 -40
- package/dist/esm/errors/PerpsSDKError.d.ts.map +0 -1
- package/dist/esm/errors/PerpsSDKError.js +0 -67
- package/dist/esm/errors/PerpsSDKError.js.map +0 -1
- package/dist/esm/errors/ServerError.d.ts +0 -23
- package/dist/esm/errors/ServerError.d.ts.map +0 -1
- package/dist/esm/errors/ServerError.js +0 -34
- package/dist/esm/errors/ServerError.js.map +0 -1
- package/dist/esm/errors/ValidationError.d.ts +0 -23
- package/dist/esm/errors/ValidationError.d.ts.map +0 -1
- package/dist/esm/errors/ValidationError.js +0 -34
- package/dist/esm/errors/ValidationError.js.map +0 -1
- package/dist/esm/errors/utils/rootCause.d.ts +0 -71
- package/dist/esm/errors/utils/rootCause.d.ts.map +0 -1
- package/dist/esm/errors/utils/rootCause.js +0 -99
- package/dist/esm/errors/utils/rootCause.js.map +0 -1
- package/dist/esm/realtime/PerpsWsClient.d.ts +0 -14
- package/dist/esm/realtime/PerpsWsClient.d.ts.map +0 -1
- package/dist/esm/realtime/PerpsWsClient.js +0 -52
- package/dist/esm/realtime/PerpsWsClient.js.map +0 -1
- package/dist/esm/realtime/ReconnectingWebSocket.d.ts.map +0 -1
- package/dist/esm/realtime/ReconnectingWebSocket.js +0 -128
- package/dist/esm/realtime/ReconnectingWebSocket.js.map +0 -1
- package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -26
- package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
- package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.js +0 -222
- package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.js.map +0 -1
- package/dist/esm/realtime/hyperliquid/types.d.ts +0 -35
- package/dist/esm/realtime/hyperliquid/types.d.ts.map +0 -1
- package/dist/esm/realtime/hyperliquid/types.js +0 -4
- package/dist/esm/realtime/hyperliquid/types.js.map +0 -1
- package/dist/esm/realtime/types.d.ts +0 -10
- package/dist/esm/realtime/types.d.ts.map +0 -1
- package/dist/esm/realtime/types.js +0 -2
- package/dist/esm/realtime/types.js.map +0 -1
- package/dist/esm/services/cancelOrder.d.ts +0 -51
- package/dist/esm/services/cancelOrder.d.ts.map +0 -1
- package/dist/esm/services/cancelOrder.js +0 -50
- package/dist/esm/services/cancelOrder.js.map +0 -1
- package/dist/esm/services/createAuthorization.d.ts +0 -51
- package/dist/esm/services/createAuthorization.d.ts.map +0 -1
- package/dist/esm/services/createAuthorization.js +0 -50
- package/dist/esm/services/createAuthorization.js.map +0 -1
- package/dist/esm/services/createOrder.d.ts +0 -74
- package/dist/esm/services/createOrder.d.ts.map +0 -1
- package/dist/esm/services/createOrder.js +0 -62
- package/dist/esm/services/createOrder.js.map +0 -1
- package/dist/esm/services/createWithdrawal.d.ts +0 -49
- package/dist/esm/services/createWithdrawal.d.ts.map +0 -1
- package/dist/esm/services/createWithdrawal.js +0 -49
- package/dist/esm/services/createWithdrawal.js.map +0 -1
- package/dist/esm/services/getDexes.d.ts +0 -20
- package/dist/esm/services/getDexes.d.ts.map +0 -1
- package/dist/esm/services/getDexes.js +0 -21
- package/dist/esm/services/getDexes.js.map +0 -1
- package/dist/esm/services/getHistory.d.ts +0 -45
- package/dist/esm/services/getHistory.d.ts.map +0 -1
- package/dist/esm/services/getHistory.js +0 -42
- package/dist/esm/services/getHistory.js.map +0 -1
- package/dist/esm/services/submitAuthorization.d.ts +0 -42
- package/dist/esm/services/submitAuthorization.d.ts.map +0 -1
- package/dist/esm/services/submitAuthorization.js +0 -41
- package/dist/esm/services/submitAuthorization.js.map +0 -1
- package/dist/esm/services/submitOrder.d.ts +0 -44
- package/dist/esm/services/submitOrder.d.ts.map +0 -1
- package/dist/esm/services/submitOrder.js +0 -43
- package/dist/esm/services/submitOrder.js.map +0 -1
- package/dist/esm/services/submitWithdrawal.d.ts +0 -40
- package/dist/esm/services/submitWithdrawal.d.ts.map +0 -1
- package/dist/esm/services/submitWithdrawal.js +0 -40
- package/dist/esm/services/submitWithdrawal.js.map +0 -1
- package/dist/esm/utils/request.d.ts +0 -26
- package/dist/esm/utils/request.d.ts.map +0 -1
- package/dist/esm/utils/request.js +0 -78
- package/dist/esm/utils/request.js.map +0 -1
- package/dist/types/agent/AgentManager.d.ts +0 -45
- package/dist/types/agent/AgentManager.d.ts.map +0 -1
- package/dist/types/agent/storage.d.ts.map +0 -1
- package/dist/types/agent/types.d.ts +0 -23
- package/dist/types/agent/types.d.ts.map +0 -1
- package/dist/types/client/types.d.ts +0 -134
- package/dist/types/client/types.d.ts.map +0 -1
- package/dist/types/dex/hyperliquid.d.ts +0 -3
- package/dist/types/dex/hyperliquid.d.ts.map +0 -1
- package/dist/types/dex/registry.d.ts +0 -3
- package/dist/types/dex/registry.d.ts.map +0 -1
- package/dist/types/dex/types.d.ts +0 -15
- package/dist/types/dex/types.d.ts.map +0 -1
- package/dist/types/errors/AgentError.d.ts +0 -25
- package/dist/types/errors/AgentError.d.ts.map +0 -1
- package/dist/types/errors/HTTPError.d.ts +0 -11
- package/dist/types/errors/HTTPError.d.ts.map +0 -1
- package/dist/types/errors/PerpsSDKError.d.ts +0 -40
- package/dist/types/errors/PerpsSDKError.d.ts.map +0 -1
- package/dist/types/errors/ServerError.d.ts +0 -23
- package/dist/types/errors/ServerError.d.ts.map +0 -1
- package/dist/types/errors/ValidationError.d.ts +0 -23
- package/dist/types/errors/ValidationError.d.ts.map +0 -1
- package/dist/types/errors/utils/rootCause.d.ts +0 -71
- package/dist/types/errors/utils/rootCause.d.ts.map +0 -1
- package/dist/types/realtime/PerpsWsClient.d.ts +0 -14
- package/dist/types/realtime/PerpsWsClient.d.ts.map +0 -1
- package/dist/types/realtime/ReconnectingWebSocket.d.ts +0 -36
- package/dist/types/realtime/ReconnectingWebSocket.d.ts.map +0 -1
- package/dist/types/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -26
- package/dist/types/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
- package/dist/types/realtime/hyperliquid/types.d.ts +0 -35
- package/dist/types/realtime/hyperliquid/types.d.ts.map +0 -1
- package/dist/types/realtime/types.d.ts +0 -10
- package/dist/types/realtime/types.d.ts.map +0 -1
- package/dist/types/services/cancelOrder.d.ts +0 -51
- package/dist/types/services/cancelOrder.d.ts.map +0 -1
- package/dist/types/services/createAuthorization.d.ts +0 -51
- package/dist/types/services/createAuthorization.d.ts.map +0 -1
- package/dist/types/services/createOrder.d.ts +0 -74
- package/dist/types/services/createOrder.d.ts.map +0 -1
- package/dist/types/services/createWithdrawal.d.ts +0 -49
- package/dist/types/services/createWithdrawal.d.ts.map +0 -1
- package/dist/types/services/getDexes.d.ts +0 -20
- package/dist/types/services/getDexes.d.ts.map +0 -1
- package/dist/types/services/getHistory.d.ts +0 -45
- package/dist/types/services/getHistory.d.ts.map +0 -1
- package/dist/types/services/submitAuthorization.d.ts +0 -42
- package/dist/types/services/submitAuthorization.d.ts.map +0 -1
- package/dist/types/services/submitOrder.d.ts +0 -44
- package/dist/types/services/submitOrder.d.ts.map +0 -1
- package/dist/types/services/submitWithdrawal.d.ts +0 -40
- package/dist/types/services/submitWithdrawal.d.ts.map +0 -1
- package/dist/types/utils/request.d.ts +0 -26
- package/dist/types/utils/request.d.ts.map +0 -1
- package/src/agent/AgentManager.ts +0 -135
- package/src/agent/types.ts +0 -24
- package/src/client/types.ts +0 -162
- package/src/dex/hyperliquid.ts +0 -20
- package/src/dex/registry.ts +0 -15
- package/src/dex/types.ts +0 -16
- package/src/errors/AgentError.ts +0 -43
- package/src/errors/HTTPError.ts +0 -72
- package/src/errors/PerpsSDKError.ts +0 -79
- package/src/errors/ServerError.ts +0 -41
- package/src/errors/ValidationError.ts +0 -38
- package/src/errors/utils/rootCause.ts +0 -112
- package/src/realtime/PerpsWsClient.ts +0 -73
- package/src/realtime/ReconnectingWebSocket.ts +0 -156
- package/src/realtime/hyperliquid/HyperliquidWsProvider.ts +0 -278
- package/src/realtime/hyperliquid/types.ts +0 -48
- package/src/realtime/types.ts +0 -16
- package/src/services/cancelOrder.ts +0 -75
- package/src/services/createAuthorization.ts +0 -79
- package/src/services/createOrder.ts +0 -116
- package/src/services/createWithdrawal.ts +0 -76
- package/src/services/getDexes.ts +0 -34
- package/src/services/getHistory.ts +0 -62
- package/src/services/submitAuthorization.ts +0 -70
- package/src/services/submitOrder.ts +0 -72
- package/src/services/submitWithdrawal.ts +0 -67
- package/src/utils/request.ts +0 -116
- /package/dist/cjs/{agent → storage}/storage.d.ts +0 -0
- /package/dist/cjs/{agent → storage}/storage.js +0 -0
- /package/dist/cjs/{agent → storage}/types.js +0 -0
- /package/dist/cjs/{client → websocket}/types.js +0 -0
- /package/dist/esm/{agent → storage}/types.js +0 -0
- /package/dist/esm/{client → websocket}/types.js +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token unit conversion utilities.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { formatUnits } from 'viem'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Convert a base-unit amount (bigint string) to a human-readable decimal string.
|
|
9
|
+
*
|
|
10
|
+
* @param amount - Amount in base units (e.g. "1000000" for 1 USDC)
|
|
11
|
+
* @param decimals - Token decimals (e.g. 6 for USDC)
|
|
12
|
+
* @returns Decimal string (e.g. "1.0"); `"0"` when `amount` is not a valid
|
|
13
|
+
* bigint
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* fromBaseUnits('1000000', 6) // '1'
|
|
17
|
+
* ```
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
export function fromBaseUnits(amount: string, decimals: number): string {
|
|
21
|
+
try {
|
|
22
|
+
return formatUnits(BigInt(amount), decimals)
|
|
23
|
+
} catch {
|
|
24
|
+
return '0'
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Convert a base-unit amount to a number.
|
|
30
|
+
*
|
|
31
|
+
* @param amount - Amount in base units
|
|
32
|
+
* @param decimals - Token decimals
|
|
33
|
+
* @returns Numeric value, or 0 if parsing fails
|
|
34
|
+
* @public
|
|
35
|
+
*/
|
|
36
|
+
export function fromBaseUnitsNumber(amount: string, decimals: number): number {
|
|
37
|
+
const value = Number(fromBaseUnits(amount, decimals))
|
|
38
|
+
return Number.isFinite(value) ? value : 0
|
|
39
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Order validation utilities.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Validate margin input against available balance and exchange minimums.
|
|
7
|
+
*
|
|
8
|
+
* @param margin - Margin amount in USD
|
|
9
|
+
* @param _leverage - Position leverage (reserved for future use)
|
|
10
|
+
* @param availableBalance - Available balance, or null if unknown
|
|
11
|
+
* @param _feeRate - Fee rate as decimal, or null if unknown (reserved for future use)
|
|
12
|
+
* @param minMarginUsd - Minimum margin requirement in USD (exchange-specific).
|
|
13
|
+
* Source this from the selected provider's `minOrderValueUsd` metadata
|
|
14
|
+
* (see `@lifi/perps-types` `Provider`) rather than a client-side constant.
|
|
15
|
+
* @returns Error code: 'insufficient' | 'below-minimum' | '' (valid)
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
export function validateMargin(
|
|
19
|
+
margin: number,
|
|
20
|
+
_leverage: number,
|
|
21
|
+
availableBalance: number | null,
|
|
22
|
+
_feeRate: number | null,
|
|
23
|
+
minMarginUsd: number
|
|
24
|
+
): string {
|
|
25
|
+
if (margin <= 0) {
|
|
26
|
+
return ''
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (availableBalance !== null && margin > availableBalance) {
|
|
30
|
+
return 'insufficient'
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (margin < minMarginUsd) {
|
|
34
|
+
return 'below-minimum'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return ''
|
|
38
|
+
}
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const name = '@lifi/perps-sdk'
|
|
2
|
-
export const version = '
|
|
2
|
+
export const version = '1.0.0'
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { PerpsErrorCode, type Subscription } from '@lifi/perps-types'
|
|
2
|
+
import { PerpsError } from '../errors/PerpsError.js'
|
|
3
|
+
import { getProviders } from '../services/getProviders.js'
|
|
4
|
+
import type { GetQuoteParams } from '../services/getQuote.js'
|
|
5
|
+
import type { PerpsSDKClient, QuoteListener } from '../types/provider.js'
|
|
6
|
+
import { cachePromise } from './cachePromise.js'
|
|
7
|
+
import type {
|
|
8
|
+
EventForSubscription,
|
|
9
|
+
SubscriptionListener,
|
|
10
|
+
WsProvider,
|
|
11
|
+
WsStatusListener,
|
|
12
|
+
} from './types.js'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Factory for a per-provider WS plugin. Invoked once per provider key the
|
|
16
|
+
* first time `subscribe(...)` is called against it.
|
|
17
|
+
*
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
export type WsProviderFactory = (params: {
|
|
21
|
+
/** Provider key (e.g. `'lighter'`, `'hyperliquid'`). */
|
|
22
|
+
provider: string
|
|
23
|
+
/** WS URL discovered from `/providers`. */
|
|
24
|
+
wsUrl: string
|
|
25
|
+
/**
|
|
26
|
+
* Markets visible to this provider via `/providers`, optionally filtered
|
|
27
|
+
* by the consumer's `createPerpsClient({ providers: { [key]: { markets } } })`
|
|
28
|
+
* config. Each provider interprets these its own way — Hyperliquid uses
|
|
29
|
+
* them to decide which sub-DEXes to subscribe to; Lighter ignores them.
|
|
30
|
+
*/
|
|
31
|
+
markets: string[]
|
|
32
|
+
/**
|
|
33
|
+
* The SDK client. WS providers use it to call core services (e.g.
|
|
34
|
+
* `getAssets` to source the wire-id ↔ display-symbol map) without
|
|
35
|
+
* duplicating backend orchestration in the WS layer.
|
|
36
|
+
*/
|
|
37
|
+
client: PerpsSDKClient
|
|
38
|
+
}) => WsProvider
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Options for {@link PerpsWsClient}.
|
|
42
|
+
*
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
export interface PerpsWsClientOptions {
|
|
46
|
+
/**
|
|
47
|
+
* Per-provider WS factory map. Each key (e.g. `'hyperliquid'`,
|
|
48
|
+
* `'lighter'`) maps to a factory that returns a `WsProvider`. Concrete
|
|
49
|
+
* implementations ship with the provider packages — e.g.
|
|
50
|
+
* `@lifi/perps-sdk-provider-hyperliquid` exports `HyperliquidWsProvider`,
|
|
51
|
+
* `@lifi/perps-sdk-provider-lighter` exports `LighterWsProvider`.
|
|
52
|
+
* Subscribing to a provider key without a registered factory throws.
|
|
53
|
+
*/
|
|
54
|
+
wsProviders?: Record<string, WsProviderFactory>
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Realtime client: lazily instantiates a per-provider {@link WsProvider} on
|
|
59
|
+
* first subscription and fans subscriptions out to it.
|
|
60
|
+
*
|
|
61
|
+
* @public
|
|
62
|
+
*/
|
|
63
|
+
export class PerpsWsClient {
|
|
64
|
+
private readonly client: PerpsSDKClient
|
|
65
|
+
private readonly options: PerpsWsClientOptions
|
|
66
|
+
private providers = new Map<string, WsProvider>()
|
|
67
|
+
private initPromises = new Map<string, Promise<WsProvider>>()
|
|
68
|
+
|
|
69
|
+
constructor(client: PerpsSDKClient, options: PerpsWsClientOptions = {}) {
|
|
70
|
+
this.client = client
|
|
71
|
+
this.options = options
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Subscribe to a realtime channel, lazily creating the provider's WS
|
|
76
|
+
* connection. Returns an unsubscribe function.
|
|
77
|
+
*
|
|
78
|
+
* @param onStatus - Optional listener for the underlying connection's
|
|
79
|
+
* health. Fires `reconnecting` on a transient drop and the terminal
|
|
80
|
+
* `disconnected` once auto-reconnect is abandoned, so consumers can
|
|
81
|
+
* surface a reconnecting/disconnected state instead of silently showing
|
|
82
|
+
* stale data.
|
|
83
|
+
* @throws {PerpsError} When no WS provider factory is registered for the
|
|
84
|
+
* subscription's `dex`.
|
|
85
|
+
* @public
|
|
86
|
+
*/
|
|
87
|
+
async subscribe<S extends Subscription>(
|
|
88
|
+
sub: S,
|
|
89
|
+
listener: (event: EventForSubscription<S>) => void,
|
|
90
|
+
onStatus?: WsStatusListener
|
|
91
|
+
): Promise<() => void> {
|
|
92
|
+
const providerKey = sub.dex
|
|
93
|
+
const provider = await this.getOrCreateProvider(providerKey)
|
|
94
|
+
provider.reconnect()
|
|
95
|
+
return provider.subscribe(sub, listener as SubscriptionListener, onStatus)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Stream live fill quotes for `params.symbol` on `params.provider`, lazily
|
|
100
|
+
* creating the provider's WS connection. The provider's WS plugin layers the
|
|
101
|
+
* quote on its orderbook channel, so a concurrent orderbook subscription on
|
|
102
|
+
* the same market shares one wire subscription. Returns an unsubscribe
|
|
103
|
+
* function.
|
|
104
|
+
*
|
|
105
|
+
* @throws {PerpsError} When no WS provider factory is registered for
|
|
106
|
+
* `params.provider`, or no market matches the symbol+type.
|
|
107
|
+
* @public
|
|
108
|
+
*/
|
|
109
|
+
async subscribeQuote(
|
|
110
|
+
params: GetQuoteParams,
|
|
111
|
+
onQuote: QuoteListener
|
|
112
|
+
): Promise<() => void> {
|
|
113
|
+
const provider = await this.getOrCreateProvider(params.provider)
|
|
114
|
+
return provider.subscribeQuote(
|
|
115
|
+
{
|
|
116
|
+
symbol: params.symbol,
|
|
117
|
+
side: params.side,
|
|
118
|
+
size: params.size,
|
|
119
|
+
type: params.type,
|
|
120
|
+
},
|
|
121
|
+
onQuote
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Close every open provider WS connection and drop all cached providers.
|
|
127
|
+
*
|
|
128
|
+
* @public
|
|
129
|
+
*/
|
|
130
|
+
close() {
|
|
131
|
+
for (const p of this.providers.values()) {
|
|
132
|
+
p.close()
|
|
133
|
+
}
|
|
134
|
+
this.providers.clear()
|
|
135
|
+
this.initPromises.clear()
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Reconnect an already-created provider when its socket reached terminal
|
|
140
|
+
* `disconnected`. Safe no-op when the provider is unknown or not terminal.
|
|
141
|
+
*
|
|
142
|
+
* @public
|
|
143
|
+
*/
|
|
144
|
+
reconnect(provider: string): void {
|
|
145
|
+
this.providers.get(provider)?.reconnect()
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
private async getOrCreateProvider(provider: string): Promise<WsProvider> {
|
|
149
|
+
const existing = this.providers.get(provider)
|
|
150
|
+
if (existing) {
|
|
151
|
+
return existing
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return cachePromise(
|
|
155
|
+
() => this.initPromises.get(provider),
|
|
156
|
+
(p) => {
|
|
157
|
+
if (p) {
|
|
158
|
+
this.initPromises.set(provider, p)
|
|
159
|
+
} else {
|
|
160
|
+
this.initPromises.delete(provider)
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
() => this.initProvider(provider)
|
|
164
|
+
)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private async initProvider(provider: string): Promise<WsProvider> {
|
|
168
|
+
const factory = this.options.wsProviders?.[provider]
|
|
169
|
+
if (factory === undefined) {
|
|
170
|
+
throw new PerpsError(
|
|
171
|
+
PerpsErrorCode.SDKError,
|
|
172
|
+
`No WS provider factory registered for '${provider}'. Pass one via ` +
|
|
173
|
+
'new PerpsWsClient(client, { wsProviders: { [key]: factory } }).'
|
|
174
|
+
)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const { providers } = await getProviders(this.client)
|
|
178
|
+
|
|
179
|
+
const providerInfo = providers.find((d) => d.key === provider)
|
|
180
|
+
if (!providerInfo?.wsUrl) {
|
|
181
|
+
throw new Error(`No WebSocket URL found for provider: ${provider}`)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const allMarkets = (providerInfo.categories ?? []) as Array<{
|
|
185
|
+
id: string
|
|
186
|
+
}>
|
|
187
|
+
const providerConfig = this.client.config.providers?.[provider]
|
|
188
|
+
const configuredMarkets = providerConfig?.markets
|
|
189
|
+
const markets = (
|
|
190
|
+
configuredMarkets
|
|
191
|
+
? allMarkets.filter((m) => configuredMarkets.includes(m.id))
|
|
192
|
+
: allMarkets
|
|
193
|
+
).map((m) => m.id)
|
|
194
|
+
|
|
195
|
+
const wsProvider = factory({
|
|
196
|
+
provider,
|
|
197
|
+
wsUrl: providerInfo.wsUrl,
|
|
198
|
+
markets,
|
|
199
|
+
client: this.client,
|
|
200
|
+
})
|
|
201
|
+
this.providers.set(provider, wsProvider)
|
|
202
|
+
return wsProvider
|
|
203
|
+
}
|
|
204
|
+
}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
CloseEvent as PartySocketCloseEvent,
|
|
3
|
+
ErrorEvent as PartySocketErrorEvent,
|
|
4
|
+
} from 'partysocket/ws'
|
|
5
|
+
import PartySocketWebSocket from 'partysocket/ws'
|
|
6
|
+
import type { WsConnectionStatus, WsStatusListener } from './types.js'
|
|
7
|
+
import { wsLog } from './wsLog.js'
|
|
8
|
+
|
|
9
|
+
type WsEventMap = {
|
|
10
|
+
open: () => void
|
|
11
|
+
close: (code: number, reason: string) => void
|
|
12
|
+
error: (error: Event) => void
|
|
13
|
+
message: (data: string) => void
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
type WsEvent = keyof WsEventMap
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Default reconnect attempt cap. With the jittered backoff below, ten attempts
|
|
20
|
+
* span roughly 20–60s of retries before the socket is declared `disconnected`
|
|
21
|
+
* — long enough for a live trading feed to ride out a transient network blip.
|
|
22
|
+
*/
|
|
23
|
+
const DEFAULT_MAX_RETRIES = 10
|
|
24
|
+
|
|
25
|
+
/** Default watchdog window: three keepalive intervals without inbound traffic. */
|
|
26
|
+
const DEFAULT_STALE_WINDOW_PING_INTERVALS = 3
|
|
27
|
+
|
|
28
|
+
const CONNECTION_TIMEOUT_MS = 4_000
|
|
29
|
+
/** Uptime below which an open does not reset the retry budget, so an accept-then-drop server still exhausts. */
|
|
30
|
+
const MIN_UPTIME_MS = 5_000
|
|
31
|
+
const MAX_ENQUEUED_MESSAGES = 1_000
|
|
32
|
+
/** First-retry delay is drawn once per socket from [500, 1500)ms to de-synchronize reconnect storms. */
|
|
33
|
+
const MIN_RECONNECTION_DELAY_MS = 500
|
|
34
|
+
const RECONNECTION_JITTER_MS = 1_000
|
|
35
|
+
const MAX_RECONNECTION_DELAY_MS = 10_000
|
|
36
|
+
|
|
37
|
+
const CLOSED_ERROR = 'WebSocket closed'
|
|
38
|
+
const EXHAUSTED_ERROR = 'WebSocket max reconnect attempts reached'
|
|
39
|
+
const WS_PROVIDER_KEY = 'reconnecting-websocket'
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Options for {@link ReconnectingWebSocket}.
|
|
43
|
+
*
|
|
44
|
+
* @public
|
|
45
|
+
*/
|
|
46
|
+
export interface ReconnectingWebSocketOptions {
|
|
47
|
+
maxRetries?: number
|
|
48
|
+
pingIntervalMs?: number
|
|
49
|
+
/**
|
|
50
|
+
* Keepalive frame sent every `pingIntervalMs` while the socket is open.
|
|
51
|
+
* Framing is venue-specific, so when omitted no keepalive is sent.
|
|
52
|
+
*/
|
|
53
|
+
pingPayload?: string
|
|
54
|
+
/**
|
|
55
|
+
* Stale-stream watchdog window. With `pingPayload` configured, the socket is
|
|
56
|
+
* force-reconnected when no inbound frame arrives within this window.
|
|
57
|
+
* Defaults to 3× `pingIntervalMs`.
|
|
58
|
+
*/
|
|
59
|
+
staleWindowMs?: number
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* A `WebSocket` transport that auto-reconnects with jittered exponential
|
|
64
|
+
* backoff (`partysocket` internals), buffers sends (bounded) while
|
|
65
|
+
* disconnected, keepalive-pings with the caller-supplied `pingPayload`, and
|
|
66
|
+
* force-reconnects a silently stale stream. Surfaces the
|
|
67
|
+
* {@link WsConnectionStatus} state machine: `reconnecting` on transient drops,
|
|
68
|
+
* terminal `disconnected` once the retry budget is exhausted.
|
|
69
|
+
*
|
|
70
|
+
* @public
|
|
71
|
+
*/
|
|
72
|
+
export class ReconnectingWebSocket {
|
|
73
|
+
private readonly socket: PartySocketWebSocket
|
|
74
|
+
private readonly maxRetries: number
|
|
75
|
+
private readonly pingIntervalMs: number
|
|
76
|
+
private readonly pingPayload: string | undefined
|
|
77
|
+
private readonly staleWindowMs: number
|
|
78
|
+
private closed = false
|
|
79
|
+
private reconnectRequested = false
|
|
80
|
+
private lastCloseRetryCount: number
|
|
81
|
+
private pingTimer: ReturnType<typeof setInterval> | null = null
|
|
82
|
+
private staleTimer: ReturnType<typeof setTimeout> | null = null
|
|
83
|
+
private listeners = {
|
|
84
|
+
open: new Set<WsEventMap['open']>(),
|
|
85
|
+
close: new Set<WsEventMap['close']>(),
|
|
86
|
+
error: new Set<WsEventMap['error']>(),
|
|
87
|
+
message: new Set<WsEventMap['message']>(),
|
|
88
|
+
}
|
|
89
|
+
private statusListeners = new Set<WsStatusListener>()
|
|
90
|
+
private status: WsConnectionStatus = 'reconnecting'
|
|
91
|
+
private readyResolvers: Array<{
|
|
92
|
+
resolve: () => void
|
|
93
|
+
reject: (e: Error) => void
|
|
94
|
+
}> = []
|
|
95
|
+
|
|
96
|
+
constructor(url: string, options?: ReconnectingWebSocketOptions) {
|
|
97
|
+
this.maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES
|
|
98
|
+
this.pingIntervalMs = options?.pingIntervalMs ?? 30_000
|
|
99
|
+
this.pingPayload = options?.pingPayload
|
|
100
|
+
this.staleWindowMs =
|
|
101
|
+
options?.staleWindowMs ??
|
|
102
|
+
this.pingIntervalMs * DEFAULT_STALE_WINDOW_PING_INTERVALS
|
|
103
|
+
this.socket = new PartySocketWebSocket(url, undefined, {
|
|
104
|
+
maxRetries: this.maxRetries,
|
|
105
|
+
connectionTimeout: CONNECTION_TIMEOUT_MS,
|
|
106
|
+
minUptime: MIN_UPTIME_MS,
|
|
107
|
+
maxEnqueuedMessages: MAX_ENQUEUED_MESSAGES,
|
|
108
|
+
minReconnectionDelay:
|
|
109
|
+
MIN_RECONNECTION_DELAY_MS + Math.random() * RECONNECTION_JITTER_MS,
|
|
110
|
+
maxReconnectionDelay: MAX_RECONNECTION_DELAY_MS,
|
|
111
|
+
})
|
|
112
|
+
this.lastCloseRetryCount = this.socket.retryCount
|
|
113
|
+
// The onX handlers receive the raw events; addEventListener would hand out
|
|
114
|
+
// partysocket's clones, which rewrite an empty close reason in Node.
|
|
115
|
+
this.socket.onopen = this.handleOpen
|
|
116
|
+
this.socket.onclose = this.handleClose
|
|
117
|
+
this.socket.onerror = this.handleError
|
|
118
|
+
this.socket.onmessage = this.handleMessage
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private handleOpen = () => {
|
|
122
|
+
this.startPing()
|
|
123
|
+
this.armWatchdog()
|
|
124
|
+
this.setStatus('connected')
|
|
125
|
+
for (const fn of this.listeners.open) {
|
|
126
|
+
this.callListener('open', fn)
|
|
127
|
+
}
|
|
128
|
+
for (const { resolve } of this.readyResolvers) {
|
|
129
|
+
resolve()
|
|
130
|
+
}
|
|
131
|
+
this.readyResolvers = []
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
private handleClose = (event: PartySocketCloseEvent) => {
|
|
135
|
+
this.stopPing()
|
|
136
|
+
this.clearWatchdog()
|
|
137
|
+
if (this.closed) {
|
|
138
|
+
return
|
|
139
|
+
}
|
|
140
|
+
for (const fn of this.listeners.close) {
|
|
141
|
+
this.callListener('close', fn, event.code, event.reason)
|
|
142
|
+
}
|
|
143
|
+
// partysocket schedules the next attempt — incrementing retryCount —
|
|
144
|
+
// before dispatching close, and exhausts silently: a retryCount at the cap
|
|
145
|
+
// that did not move since the previous close means no attempt was
|
|
146
|
+
// scheduled, i.e. the retry budget is spent.
|
|
147
|
+
const retryCount = this.socket.retryCount
|
|
148
|
+
const exhausted =
|
|
149
|
+
!this.reconnectRequested &&
|
|
150
|
+
retryCount >= this.maxRetries &&
|
|
151
|
+
retryCount === this.lastCloseRetryCount
|
|
152
|
+
this.lastCloseRetryCount = retryCount
|
|
153
|
+
if (exhausted) {
|
|
154
|
+
for (const { reject } of this.readyResolvers) {
|
|
155
|
+
reject(new Error(EXHAUSTED_ERROR))
|
|
156
|
+
}
|
|
157
|
+
this.readyResolvers = []
|
|
158
|
+
this.setStatus('disconnected')
|
|
159
|
+
} else {
|
|
160
|
+
this.setStatus('reconnecting')
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private handleError = (event: PartySocketErrorEvent) => {
|
|
165
|
+
for (const fn of this.listeners.error) {
|
|
166
|
+
this.callListener('error', fn, event)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private handleMessage = (event: MessageEvent) => {
|
|
171
|
+
this.armWatchdog()
|
|
172
|
+
const data =
|
|
173
|
+
typeof event.data === 'string' ? event.data : String(event.data)
|
|
174
|
+
for (const fn of this.listeners.message) {
|
|
175
|
+
this.callListener('message', fn, data)
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private setStatus(status: WsConnectionStatus) {
|
|
180
|
+
if (this.status === status) {
|
|
181
|
+
return
|
|
182
|
+
}
|
|
183
|
+
this.status = status
|
|
184
|
+
for (const fn of this.statusListeners) {
|
|
185
|
+
this.callListener('status', fn, status)
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
private callListener<TArgs extends unknown[]>(
|
|
190
|
+
listenerType: string,
|
|
191
|
+
listener: (...args: TArgs) => void,
|
|
192
|
+
...args: TArgs
|
|
193
|
+
) {
|
|
194
|
+
try {
|
|
195
|
+
listener(...args)
|
|
196
|
+
} catch (error) {
|
|
197
|
+
wsLog.listenerFailure(WS_PROVIDER_KEY, listenerType, error)
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
private startPing() {
|
|
202
|
+
const payload = this.pingPayload
|
|
203
|
+
if (payload === undefined) {
|
|
204
|
+
return
|
|
205
|
+
}
|
|
206
|
+
this.pingTimer = setInterval(() => {
|
|
207
|
+
if (this.socket.readyState === PartySocketWebSocket.OPEN) {
|
|
208
|
+
this.socket.send(payload)
|
|
209
|
+
}
|
|
210
|
+
}, this.pingIntervalMs)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
private stopPing() {
|
|
214
|
+
if (this.pingTimer) {
|
|
215
|
+
clearInterval(this.pingTimer)
|
|
216
|
+
this.pingTimer = null
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
private armWatchdog() {
|
|
221
|
+
if (this.pingPayload === undefined || this.closed) {
|
|
222
|
+
return
|
|
223
|
+
}
|
|
224
|
+
this.clearWatchdog()
|
|
225
|
+
this.staleTimer = setTimeout(() => {
|
|
226
|
+
// The keepalive went unanswered for the whole window: the connection is
|
|
227
|
+
// half-open and serving stale data — tear it down and reconnect.
|
|
228
|
+
this.reconnect()
|
|
229
|
+
}, this.staleWindowMs)
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
private clearWatchdog() {
|
|
233
|
+
if (this.staleTimer) {
|
|
234
|
+
clearTimeout(this.staleTimer)
|
|
235
|
+
this.staleTimer = null
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Send `data`, buffering it (bounded) for replay when the socket is not yet
|
|
241
|
+
* open.
|
|
242
|
+
*
|
|
243
|
+
* @public
|
|
244
|
+
*/
|
|
245
|
+
send(data: string) {
|
|
246
|
+
this.socket.send(data)
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Permanently close the socket and suppress further reconnection.
|
|
251
|
+
*
|
|
252
|
+
* @public
|
|
253
|
+
*/
|
|
254
|
+
close() {
|
|
255
|
+
this.closed = true
|
|
256
|
+
this.stopPing()
|
|
257
|
+
this.clearWatchdog()
|
|
258
|
+
this.socket.close()
|
|
259
|
+
for (const { reject } of this.readyResolvers) {
|
|
260
|
+
reject(new Error(CLOSED_ERROR))
|
|
261
|
+
}
|
|
262
|
+
this.readyResolvers = []
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Drop the current connection (if any) and reconnect with a fresh retry
|
|
267
|
+
* budget. Recovers a socket that reached terminal `disconnected`: status
|
|
268
|
+
* returns to `reconnecting` and the normal backoff cycle restarts.
|
|
269
|
+
*
|
|
270
|
+
* @public
|
|
271
|
+
*/
|
|
272
|
+
reconnect() {
|
|
273
|
+
this.closed = false
|
|
274
|
+
// Suppress the exhaustion check for the synchronous teardown close the
|
|
275
|
+
// underlying reconnect dispatches — a fresh attempt is always scheduled.
|
|
276
|
+
this.reconnectRequested = true
|
|
277
|
+
this.socket.reconnect()
|
|
278
|
+
this.reconnectRequested = false
|
|
279
|
+
this.lastCloseRetryCount = this.socket.retryCount
|
|
280
|
+
this.setStatus('reconnecting')
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Register a listener for a socket lifecycle event.
|
|
285
|
+
*
|
|
286
|
+
* @public
|
|
287
|
+
*/
|
|
288
|
+
on<E extends WsEvent>(event: E, fn: WsEventMap[E]) {
|
|
289
|
+
;(this.listeners[event] as Set<WsEventMap[E]>).add(fn)
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Remove a previously registered lifecycle-event listener.
|
|
294
|
+
*
|
|
295
|
+
* @public
|
|
296
|
+
*/
|
|
297
|
+
off<E extends WsEvent>(event: E, fn: WsEventMap[E]) {
|
|
298
|
+
;(this.listeners[event] as Set<WsEventMap[E]>).delete(fn)
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Current connection health. `reconnecting` until the first open;
|
|
303
|
+
* `disconnected` once auto-reconnect is abandoned (terminal until
|
|
304
|
+
* {@link ReconnectingWebSocket.reconnect} is called).
|
|
305
|
+
*
|
|
306
|
+
* @public
|
|
307
|
+
*/
|
|
308
|
+
getStatus(): WsConnectionStatus {
|
|
309
|
+
return this.status
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Register a connection-health listener. Fires on every status transition,
|
|
314
|
+
* including the terminal `disconnected` emitted on reconnect exhaustion.
|
|
315
|
+
*
|
|
316
|
+
* @public
|
|
317
|
+
*/
|
|
318
|
+
onStatus(fn: WsStatusListener) {
|
|
319
|
+
this.statusListeners.add(fn)
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Remove a previously registered connection-health listener.
|
|
324
|
+
*
|
|
325
|
+
* @public
|
|
326
|
+
*/
|
|
327
|
+
offStatus(fn: WsStatusListener) {
|
|
328
|
+
this.statusListeners.delete(fn)
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Resolve once the socket is open; reject if it closes or exhausts retries
|
|
333
|
+
* before opening. When the socket is already terminally dead — `close()`d or
|
|
334
|
+
* reconnect-exhausted (`disconnected`) — rejects immediately rather than
|
|
335
|
+
* queuing a waiter nothing would ever settle.
|
|
336
|
+
*
|
|
337
|
+
* @public
|
|
338
|
+
*/
|
|
339
|
+
ready(): Promise<void> {
|
|
340
|
+
if (this.socket.readyState === PartySocketWebSocket.OPEN) {
|
|
341
|
+
return Promise.resolve()
|
|
342
|
+
}
|
|
343
|
+
if (this.closed) {
|
|
344
|
+
return Promise.reject(new Error(CLOSED_ERROR))
|
|
345
|
+
}
|
|
346
|
+
if (this.status === 'disconnected') {
|
|
347
|
+
return Promise.reject(new Error(EXHAUSTED_ERROR))
|
|
348
|
+
}
|
|
349
|
+
return new Promise((resolve, reject) => {
|
|
350
|
+
this.readyResolvers.push({ resolve, reject })
|
|
351
|
+
})
|
|
352
|
+
}
|
|
353
|
+
}
|