@lifi/perps-sdk 0.1.1-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 +54 -0
- package/dist/cjs/agent/AgentManager.d.ts +15 -0
- package/dist/cjs/agent/AgentManager.d.ts.map +1 -0
- package/dist/cjs/agent/AgentManager.js +80 -0
- package/dist/cjs/agent/AgentManager.js.map +1 -0
- package/dist/cjs/agent/storage.d.ts +4 -0
- package/dist/cjs/agent/storage.d.ts.map +1 -0
- package/dist/cjs/agent/storage.js +47 -0
- package/dist/cjs/agent/storage.js.map +1 -0
- package/dist/cjs/agent/types.d.ts +11 -0
- package/dist/cjs/agent/types.d.ts.map +1 -0
- package/dist/cjs/agent/types.js +3 -0
- package/dist/cjs/agent/types.js.map +1 -0
- package/dist/cjs/client/PerpsClient.d.ts +29 -0
- package/dist/cjs/client/PerpsClient.d.ts.map +1 -0
- package/dist/cjs/client/PerpsClient.js +328 -0
- package/dist/cjs/client/PerpsClient.js.map +1 -0
- package/dist/cjs/client/createPerpsClient.d.ts +30 -0
- package/dist/cjs/client/createPerpsClient.d.ts.map +1 -0
- package/dist/cjs/client/createPerpsClient.js +56 -0
- package/dist/cjs/client/createPerpsClient.js.map +1 -0
- package/dist/cjs/client/types.d.ts +61 -0
- package/dist/cjs/client/types.d.ts.map +1 -0
- package/dist/cjs/client/types.js +3 -0
- package/dist/cjs/client/types.js.map +1 -0
- package/dist/cjs/errors/AgentError.d.ts +10 -0
- package/dist/cjs/errors/AgentError.d.ts.map +1 -0
- package/dist/cjs/errors/AgentError.js +23 -0
- package/dist/cjs/errors/AgentError.js.map +1 -0
- package/dist/cjs/errors/HTTPError.d.ts +11 -0
- package/dist/cjs/errors/HTTPError.d.ts.map +1 -0
- package/dist/cjs/errors/HTTPError.js +62 -0
- package/dist/cjs/errors/HTTPError.js.map +1 -0
- package/dist/cjs/errors/PerpsError.d.ts +9 -0
- package/dist/cjs/errors/PerpsError.d.ts.map +1 -0
- package/dist/cjs/errors/PerpsError.js +27 -0
- package/dist/cjs/errors/PerpsError.js.map +1 -0
- package/dist/cjs/errors/PerpsSDKError.d.ts +9 -0
- package/dist/cjs/errors/PerpsSDKError.d.ts.map +1 -0
- package/dist/cjs/errors/PerpsSDKError.js +36 -0
- package/dist/cjs/errors/PerpsSDKError.js.map +1 -0
- package/dist/cjs/errors/ServerError.d.ts +10 -0
- package/dist/cjs/errors/ServerError.d.ts.map +1 -0
- package/dist/cjs/errors/ServerError.js +24 -0
- package/dist/cjs/errors/ServerError.js.map +1 -0
- package/dist/cjs/errors/ValidationError.d.ts +9 -0
- package/dist/cjs/errors/ValidationError.d.ts.map +1 -0
- package/dist/cjs/errors/ValidationError.js +23 -0
- package/dist/cjs/errors/ValidationError.js.map +1 -0
- package/dist/cjs/errors/constants.d.ts +15 -0
- package/dist/cjs/errors/constants.d.ts.map +1 -0
- package/dist/cjs/errors/constants.js +20 -0
- package/dist/cjs/errors/constants.js.map +1 -0
- package/dist/cjs/errors/utils/rootCause.d.ts +6 -0
- package/dist/cjs/errors/utils/rootCause.d.ts.map +1 -0
- package/dist/cjs/errors/utils/rootCause.js +41 -0
- package/dist/cjs/errors/utils/rootCause.js.map +1 -0
- package/dist/cjs/index.d.ts +46 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +82 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/services/cancelOrder.d.ts +10 -0
- package/dist/cjs/services/cancelOrder.d.ts.map +1 -0
- package/dist/cjs/services/cancelOrder.js +16 -0
- package/dist/cjs/services/cancelOrder.js.map +1 -0
- package/dist/cjs/services/createAuthorization.d.ts +10 -0
- package/dist/cjs/services/createAuthorization.d.ts.map +1 -0
- package/dist/cjs/services/createAuthorization.js +16 -0
- package/dist/cjs/services/createAuthorization.js.map +1 -0
- package/dist/cjs/services/createOrder.d.ts +21 -0
- package/dist/cjs/services/createOrder.d.ts.map +1 -0
- package/dist/cjs/services/createOrder.js +27 -0
- package/dist/cjs/services/createOrder.js.map +1 -0
- package/dist/cjs/services/getAccount.d.ts +8 -0
- package/dist/cjs/services/getAccount.d.ts.map +1 -0
- package/dist/cjs/services/getAccount.js +12 -0
- package/dist/cjs/services/getAccount.js.map +1 -0
- package/dist/cjs/services/getDexes.d.ts +4 -0
- package/dist/cjs/services/getDexes.d.ts.map +1 -0
- package/dist/cjs/services/getDexes.js +8 -0
- package/dist/cjs/services/getDexes.js.map +1 -0
- package/dist/cjs/services/getHistory.d.ts +10 -0
- package/dist/cjs/services/getHistory.d.ts.map +1 -0
- package/dist/cjs/services/getHistory.js +14 -0
- package/dist/cjs/services/getHistory.js.map +1 -0
- package/dist/cjs/services/getMarket.d.ts +8 -0
- package/dist/cjs/services/getMarket.d.ts.map +1 -0
- package/dist/cjs/services/getMarket.js +11 -0
- package/dist/cjs/services/getMarket.js.map +1 -0
- package/dist/cjs/services/getMarkets.d.ts +7 -0
- package/dist/cjs/services/getMarkets.d.ts.map +1 -0
- package/dist/cjs/services/getMarkets.js +9 -0
- package/dist/cjs/services/getMarkets.js.map +1 -0
- package/dist/cjs/services/getOhlcv.d.ts +12 -0
- package/dist/cjs/services/getOhlcv.d.ts.map +1 -0
- package/dist/cjs/services/getOhlcv.js +15 -0
- package/dist/cjs/services/getOhlcv.js.map +1 -0
- package/dist/cjs/services/getOrder.d.ts +9 -0
- package/dist/cjs/services/getOrder.d.ts.map +1 -0
- package/dist/cjs/services/getOrder.js +12 -0
- package/dist/cjs/services/getOrder.js.map +1 -0
- package/dist/cjs/services/getOrderbook.d.ts +9 -0
- package/dist/cjs/services/getOrderbook.d.ts.map +1 -0
- package/dist/cjs/services/getOrderbook.js +12 -0
- package/dist/cjs/services/getOrderbook.js.map +1 -0
- package/dist/cjs/services/getPrices.d.ts +8 -0
- package/dist/cjs/services/getPrices.d.ts.map +1 -0
- package/dist/cjs/services/getPrices.js +12 -0
- package/dist/cjs/services/getPrices.js.map +1 -0
- package/dist/cjs/services/submitAuthorization.d.ts +10 -0
- package/dist/cjs/services/submitAuthorization.d.ts.map +1 -0
- package/dist/cjs/services/submitAuthorization.js +16 -0
- package/dist/cjs/services/submitAuthorization.js.map +1 -0
- package/dist/cjs/services/submitOrder.d.ts +10 -0
- package/dist/cjs/services/submitOrder.d.ts.map +1 -0
- package/dist/cjs/services/submitOrder.js +16 -0
- package/dist/cjs/services/submitOrder.js.map +1 -0
- package/dist/cjs/utils/request.d.ts +7 -0
- package/dist/cjs/utils/request.d.ts.map +1 -0
- package/dist/cjs/utils/request.js +63 -0
- package/dist/cjs/utils/request.js.map +1 -0
- package/dist/cjs/utils/signTypedData.d.ts +3 -0
- package/dist/cjs/utils/signTypedData.d.ts.map +1 -0
- package/dist/cjs/utils/signTypedData.js +15 -0
- package/dist/cjs/utils/signTypedData.js.map +1 -0
- package/dist/cjs/utils/sleep.d.ts +2 -0
- package/dist/cjs/utils/sleep.d.ts.map +1 -0
- package/dist/cjs/utils/sleep.js +6 -0
- package/dist/cjs/utils/sleep.js.map +1 -0
- package/dist/cjs/version.d.ts +3 -0
- package/dist/cjs/version.d.ts.map +1 -0
- package/dist/cjs/version.js +6 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/esm/agent/AgentManager.d.ts +45 -0
- package/dist/esm/agent/AgentManager.d.ts.map +1 -0
- package/dist/esm/agent/AgentManager.js +110 -0
- package/dist/esm/agent/AgentManager.js.map +1 -0
- package/dist/esm/agent/storage.d.ts +12 -0
- package/dist/esm/agent/storage.d.ts.map +1 -0
- package/dist/esm/agent/storage.js +54 -0
- package/dist/esm/agent/storage.js.map +1 -0
- package/dist/esm/agent/types.d.ts +23 -0
- package/dist/esm/agent/types.d.ts.map +1 -0
- package/dist/esm/agent/types.js +2 -0
- package/dist/esm/agent/types.js.map +1 -0
- package/dist/esm/client/PerpsClient.d.ts +188 -0
- package/dist/esm/client/PerpsClient.d.ts.map +1 -0
- package/dist/esm/client/PerpsClient.js +512 -0
- package/dist/esm/client/PerpsClient.js.map +1 -0
- package/dist/esm/client/createPerpsClient.d.ts +82 -0
- package/dist/esm/client/createPerpsClient.d.ts.map +1 -0
- package/dist/esm/client/createPerpsClient.js +80 -0
- package/dist/esm/client/createPerpsClient.js.map +1 -0
- package/dist/esm/client/types.d.ts +131 -0
- package/dist/esm/client/types.d.ts.map +1 -0
- package/dist/esm/client/types.js +2 -0
- package/dist/esm/client/types.js.map +1 -0
- package/dist/esm/errors/AgentError.d.ts +25 -0
- package/dist/esm/errors/AgentError.d.ts.map +1 -0
- package/dist/esm/errors/AgentError.js +35 -0
- package/dist/esm/errors/AgentError.js.map +1 -0
- package/dist/esm/errors/HTTPError.d.ts +11 -0
- package/dist/esm/errors/HTTPError.d.ts.map +1 -0
- package/dist/esm/errors/HTTPError.js +61 -0
- package/dist/esm/errors/HTTPError.js.map +1 -0
- package/dist/esm/errors/PerpsError.d.ts +9 -0
- package/dist/esm/errors/PerpsError.d.ts.map +1 -0
- package/dist/esm/errors/PerpsError.js +23 -0
- package/dist/esm/errors/PerpsError.js.map +1 -0
- package/dist/esm/errors/PerpsSDKError.d.ts +40 -0
- package/dist/esm/errors/PerpsSDKError.d.ts.map +1 -0
- package/dist/esm/errors/PerpsSDKError.js +67 -0
- package/dist/esm/errors/PerpsSDKError.js.map +1 -0
- package/dist/esm/errors/ServerError.d.ts +23 -0
- package/dist/esm/errors/ServerError.d.ts.map +1 -0
- package/dist/esm/errors/ServerError.js +34 -0
- package/dist/esm/errors/ServerError.js.map +1 -0
- package/dist/esm/errors/ValidationError.d.ts +23 -0
- package/dist/esm/errors/ValidationError.d.ts.map +1 -0
- package/dist/esm/errors/ValidationError.js +34 -0
- package/dist/esm/errors/ValidationError.js.map +1 -0
- package/dist/esm/errors/constants.d.ts +15 -0
- package/dist/esm/errors/constants.d.ts.map +1 -0
- package/dist/esm/errors/constants.js +17 -0
- package/dist/esm/errors/constants.js.map +1 -0
- package/dist/esm/errors/utils/rootCause.d.ts +71 -0
- package/dist/esm/errors/utils/rootCause.d.ts.map +1 -0
- package/dist/esm/errors/utils/rootCause.js +99 -0
- package/dist/esm/errors/utils/rootCause.js.map +1 -0
- package/dist/esm/index.d.ts +46 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +37 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/services/cancelOrder.d.ts +51 -0
- package/dist/esm/services/cancelOrder.d.ts.map +1 -0
- package/dist/esm/services/cancelOrder.js +50 -0
- package/dist/esm/services/cancelOrder.js.map +1 -0
- package/dist/esm/services/createAuthorization.d.ts +47 -0
- package/dist/esm/services/createAuthorization.d.ts.map +1 -0
- package/dist/esm/services/createAuthorization.js +46 -0
- package/dist/esm/services/createAuthorization.js.map +1 -0
- package/dist/esm/services/createOrder.d.ts +71 -0
- package/dist/esm/services/createOrder.d.ts.map +1 -0
- package/dist/esm/services/createOrder.js +59 -0
- package/dist/esm/services/createOrder.js.map +1 -0
- package/dist/esm/services/getAccount.d.ts +32 -0
- package/dist/esm/services/getAccount.d.ts.map +1 -0
- package/dist/esm/services/getAccount.js +31 -0
- package/dist/esm/services/getAccount.js.map +1 -0
- package/dist/esm/services/getDexes.d.ts +20 -0
- package/dist/esm/services/getDexes.d.ts.map +1 -0
- package/dist/esm/services/getDexes.js +21 -0
- package/dist/esm/services/getDexes.js.map +1 -0
- package/dist/esm/services/getHistory.d.ts +45 -0
- package/dist/esm/services/getHistory.d.ts.map +1 -0
- package/dist/esm/services/getHistory.js +42 -0
- package/dist/esm/services/getHistory.js.map +1 -0
- package/dist/esm/services/getMarket.d.ts +27 -0
- package/dist/esm/services/getMarket.d.ts.map +1 -0
- package/dist/esm/services/getMarket.js +25 -0
- package/dist/esm/services/getMarket.js.map +1 -0
- package/dist/esm/services/getMarkets.d.ts +25 -0
- package/dist/esm/services/getMarkets.d.ts.map +1 -0
- package/dist/esm/services/getMarkets.js +23 -0
- package/dist/esm/services/getMarkets.js.map +1 -0
- package/dist/esm/services/getOhlcv.d.ts +40 -0
- package/dist/esm/services/getOhlcv.d.ts.map +1 -0
- package/dist/esm/services/getOhlcv.js +34 -0
- package/dist/esm/services/getOhlcv.js.map +1 -0
- package/dist/esm/services/getOrder.d.ts +33 -0
- package/dist/esm/services/getOrder.d.ts.map +1 -0
- package/dist/esm/services/getOrder.js +30 -0
- package/dist/esm/services/getOrder.js.map +1 -0
- package/dist/esm/services/getOrderbook.d.ts +34 -0
- package/dist/esm/services/getOrderbook.d.ts.map +1 -0
- package/dist/esm/services/getOrderbook.js +31 -0
- package/dist/esm/services/getOrderbook.js.map +1 -0
- package/dist/esm/services/getPrices.d.ts +33 -0
- package/dist/esm/services/getPrices.d.ts.map +1 -0
- package/dist/esm/services/getPrices.js +32 -0
- package/dist/esm/services/getPrices.js.map +1 -0
- package/dist/esm/services/submitAuthorization.d.ts +42 -0
- package/dist/esm/services/submitAuthorization.d.ts.map +1 -0
- package/dist/esm/services/submitAuthorization.js +41 -0
- package/dist/esm/services/submitAuthorization.js.map +1 -0
- package/dist/esm/services/submitOrder.d.ts +44 -0
- package/dist/esm/services/submitOrder.d.ts.map +1 -0
- package/dist/esm/services/submitOrder.js +43 -0
- package/dist/esm/services/submitOrder.js.map +1 -0
- package/dist/esm/utils/request.d.ts +26 -0
- package/dist/esm/utils/request.d.ts.map +1 -0
- package/dist/esm/utils/request.js +82 -0
- package/dist/esm/utils/request.js.map +1 -0
- package/dist/esm/utils/signTypedData.d.ts +15 -0
- package/dist/esm/utils/signTypedData.d.ts.map +1 -0
- package/dist/esm/utils/signTypedData.js +25 -0
- package/dist/esm/utils/signTypedData.js.map +1 -0
- package/dist/esm/utils/sleep.d.ts +2 -0
- package/dist/esm/utils/sleep.d.ts.map +1 -0
- package/dist/esm/utils/sleep.js +2 -0
- package/dist/esm/utils/sleep.js.map +1 -0
- package/dist/esm/version.d.ts +3 -0
- package/dist/esm/version.d.ts.map +1 -0
- package/dist/esm/version.js +3 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/types/agent/AgentManager.d.ts +45 -0
- package/dist/types/agent/AgentManager.d.ts.map +1 -0
- package/dist/types/agent/storage.d.ts +12 -0
- package/dist/types/agent/storage.d.ts.map +1 -0
- package/dist/types/agent/types.d.ts +23 -0
- package/dist/types/agent/types.d.ts.map +1 -0
- package/dist/types/client/PerpsClient.d.ts +188 -0
- package/dist/types/client/PerpsClient.d.ts.map +1 -0
- package/dist/types/client/createPerpsClient.d.ts +82 -0
- package/dist/types/client/createPerpsClient.d.ts.map +1 -0
- package/dist/types/client/types.d.ts +131 -0
- package/dist/types/client/types.d.ts.map +1 -0
- package/dist/types/errors/AgentError.d.ts +25 -0
- package/dist/types/errors/AgentError.d.ts.map +1 -0
- package/dist/types/errors/HTTPError.d.ts +11 -0
- package/dist/types/errors/HTTPError.d.ts.map +1 -0
- package/dist/types/errors/PerpsError.d.ts +9 -0
- package/dist/types/errors/PerpsError.d.ts.map +1 -0
- package/dist/types/errors/PerpsSDKError.d.ts +40 -0
- package/dist/types/errors/PerpsSDKError.d.ts.map +1 -0
- package/dist/types/errors/ServerError.d.ts +23 -0
- package/dist/types/errors/ServerError.d.ts.map +1 -0
- package/dist/types/errors/ValidationError.d.ts +23 -0
- package/dist/types/errors/ValidationError.d.ts.map +1 -0
- package/dist/types/errors/constants.d.ts +15 -0
- package/dist/types/errors/constants.d.ts.map +1 -0
- package/dist/types/errors/utils/rootCause.d.ts +71 -0
- package/dist/types/errors/utils/rootCause.d.ts.map +1 -0
- package/dist/types/index.d.ts +46 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/services/cancelOrder.d.ts +51 -0
- package/dist/types/services/cancelOrder.d.ts.map +1 -0
- package/dist/types/services/createAuthorization.d.ts +47 -0
- package/dist/types/services/createAuthorization.d.ts.map +1 -0
- package/dist/types/services/createOrder.d.ts +71 -0
- package/dist/types/services/createOrder.d.ts.map +1 -0
- package/dist/types/services/getAccount.d.ts +32 -0
- package/dist/types/services/getAccount.d.ts.map +1 -0
- package/dist/types/services/getDexes.d.ts +20 -0
- package/dist/types/services/getDexes.d.ts.map +1 -0
- package/dist/types/services/getHistory.d.ts +45 -0
- package/dist/types/services/getHistory.d.ts.map +1 -0
- package/dist/types/services/getMarket.d.ts +27 -0
- package/dist/types/services/getMarket.d.ts.map +1 -0
- package/dist/types/services/getMarkets.d.ts +25 -0
- package/dist/types/services/getMarkets.d.ts.map +1 -0
- package/dist/types/services/getOhlcv.d.ts +40 -0
- package/dist/types/services/getOhlcv.d.ts.map +1 -0
- package/dist/types/services/getOrder.d.ts +33 -0
- package/dist/types/services/getOrder.d.ts.map +1 -0
- package/dist/types/services/getOrderbook.d.ts +34 -0
- package/dist/types/services/getOrderbook.d.ts.map +1 -0
- package/dist/types/services/getPrices.d.ts +33 -0
- package/dist/types/services/getPrices.d.ts.map +1 -0
- package/dist/types/services/submitAuthorization.d.ts +42 -0
- package/dist/types/services/submitAuthorization.d.ts.map +1 -0
- package/dist/types/services/submitOrder.d.ts +44 -0
- package/dist/types/services/submitOrder.d.ts.map +1 -0
- package/dist/types/utils/request.d.ts +26 -0
- package/dist/types/utils/request.d.ts.map +1 -0
- package/dist/types/utils/signTypedData.d.ts +15 -0
- package/dist/types/utils/signTypedData.d.ts.map +1 -0
- package/dist/types/utils/sleep.d.ts +2 -0
- package/dist/types/utils/sleep.d.ts.map +1 -0
- package/dist/types/version.d.ts +3 -0
- package/dist/types/version.d.ts.map +1 -0
- package/package.json +102 -0
- package/src/agent/AgentManager.ts +135 -0
- package/src/agent/storage.ts +58 -0
- package/src/agent/types.ts +24 -0
- package/src/client/PerpsClient.ts +654 -0
- package/src/client/createPerpsClient.ts +164 -0
- package/src/client/types.ts +156 -0
- package/src/errors/AgentError.ts +43 -0
- package/src/errors/HTTPError.ts +72 -0
- package/src/errors/PerpsError.ts +34 -0
- package/src/errors/PerpsSDKError.ts +79 -0
- package/src/errors/ServerError.ts +41 -0
- package/src/errors/ValidationError.ts +38 -0
- package/src/errors/constants.ts +15 -0
- package/src/errors/utils/rootCause.ts +112 -0
- package/src/index.ts +77 -0
- package/src/services/cancelOrder.ts +75 -0
- package/src/services/createAuthorization.ts +75 -0
- package/src/services/createOrder.ts +113 -0
- package/src/services/getAccount.ts +47 -0
- package/src/services/getDexes.ts +34 -0
- package/src/services/getHistory.ts +62 -0
- package/src/services/getMarket.ts +41 -0
- package/src/services/getMarkets.ts +37 -0
- package/src/services/getOhlcv.ts +58 -0
- package/src/services/getOrder.ts +48 -0
- package/src/services/getOrderbook.ts +49 -0
- package/src/services/getPrices.ts +48 -0
- package/src/services/submitAuthorization.ts +70 -0
- package/src/services/submitOrder.ts +72 -0
- package/src/utils/request.ts +121 -0
- package/src/utils/signTypedData.ts +31 -0
- package/src/utils/sleep.ts +2 -0
- package/src/version.ts +2 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
2
|
+
import { AgentManager } from '../agent/AgentManager.js'
|
|
3
|
+
import type { StorageAdapter } from '../agent/types.js'
|
|
4
|
+
import { PerpsErrorName } from '../errors/constants.js'
|
|
5
|
+
import { PerpsError } from '../errors/PerpsError.js'
|
|
6
|
+
import { sleep } from '../utils/sleep.js'
|
|
7
|
+
|
|
8
|
+
const DEFAULT_API_URL = 'https://li.quest/v1/perps'
|
|
9
|
+
const HEALTH_POLL_INTERVAL_MS = 500
|
|
10
|
+
const HEALTH_MAX_ATTEMPTS = 50
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Configuration options for creating a Perps SDK client.
|
|
14
|
+
*/
|
|
15
|
+
export interface PerpsConfig {
|
|
16
|
+
/** Integrator identifier (required) */
|
|
17
|
+
integrator: string
|
|
18
|
+
/** Optional API key for authenticated requests */
|
|
19
|
+
apiKey?: string
|
|
20
|
+
/** Base API URL. Defaults to https://li.quest/v1/perps */
|
|
21
|
+
apiUrl?: string
|
|
22
|
+
/** Disable version update check in development mode */
|
|
23
|
+
disableVersionCheck?: boolean
|
|
24
|
+
/** Custom storage adapter for agent keys. Defaults to localStorage. */
|
|
25
|
+
storage?: StorageAdapter
|
|
26
|
+
/** Optional request interceptor for custom handling */
|
|
27
|
+
requestInterceptor?: RequestInterceptor
|
|
28
|
+
/** Whether to perform a health check on startup before allowing requests. Default: true */
|
|
29
|
+
healthCheck?: boolean
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Resolved configuration with required fields.
|
|
34
|
+
*/
|
|
35
|
+
export interface PerpsBaseConfig {
|
|
36
|
+
/** Integrator identifier (required) */
|
|
37
|
+
integrator: string
|
|
38
|
+
/** Optional API key for authenticated requests */
|
|
39
|
+
apiKey?: string
|
|
40
|
+
/** Resolved API URL (always set) */
|
|
41
|
+
apiUrl: string
|
|
42
|
+
/** Disable version update check in development mode */
|
|
43
|
+
disableVersionCheck?: boolean
|
|
44
|
+
/** Optional request interceptor for custom handling */
|
|
45
|
+
requestInterceptor?: RequestInterceptor
|
|
46
|
+
/** Promise that resolves when the API is ready. Requests wait for this. */
|
|
47
|
+
readyPromise?: Promise<void>
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Request interceptor function type.
|
|
52
|
+
* Called before each request is made, allowing modification of fetch options.
|
|
53
|
+
*/
|
|
54
|
+
export type RequestInterceptor = (
|
|
55
|
+
url: string,
|
|
56
|
+
options: RequestInit
|
|
57
|
+
) => RequestInit | Promise<RequestInit>
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Options passed to service functions for request control.
|
|
61
|
+
*/
|
|
62
|
+
export interface SDKRequestOptions {
|
|
63
|
+
/** AbortSignal to cancel the request */
|
|
64
|
+
signal?: AbortSignal
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The Perps SDK client instance.
|
|
69
|
+
* Holds configuration and agent manager for making API requests.
|
|
70
|
+
*/
|
|
71
|
+
export interface PerpsSDKClient {
|
|
72
|
+
/** SDK configuration */
|
|
73
|
+
readonly config: PerpsBaseConfig
|
|
74
|
+
/** Agent manager for USER_AGENT signing mode */
|
|
75
|
+
readonly agentManager: AgentManager
|
|
76
|
+
/** Promise that resolves when the API health check passes. */
|
|
77
|
+
readonly ready: Promise<void>
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Create a new Perps SDK client.
|
|
82
|
+
*
|
|
83
|
+
* @param options - Configuration options
|
|
84
|
+
* @returns A new SDK client instance
|
|
85
|
+
* @throws {PerpsError} If integrator is not provided
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```ts
|
|
89
|
+
* const client = createPerpsClient({
|
|
90
|
+
* integrator: 'my-app',
|
|
91
|
+
* apiKey: 'optional-api-key',
|
|
92
|
+
* })
|
|
93
|
+
*
|
|
94
|
+
* // Use with service functions
|
|
95
|
+
* const { dexes } = await getDexes(client)
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export function createPerpsClient(options: PerpsConfig): PerpsSDKClient {
|
|
99
|
+
if (!options.integrator) {
|
|
100
|
+
const error = new PerpsError(
|
|
101
|
+
PerpsErrorCode.ValidationError,
|
|
102
|
+
'Integrator is required. Please see documentation at https://docs.li.fi'
|
|
103
|
+
)
|
|
104
|
+
error.name = PerpsErrorName.ValidationError
|
|
105
|
+
throw error
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const apiUrl = options.apiUrl ?? DEFAULT_API_URL
|
|
109
|
+
|
|
110
|
+
const readyPromise =
|
|
111
|
+
options.healthCheck !== false ? pollHealth(apiUrl) : Promise.resolve()
|
|
112
|
+
|
|
113
|
+
const config: PerpsBaseConfig = {
|
|
114
|
+
integrator: options.integrator,
|
|
115
|
+
apiKey: options.apiKey,
|
|
116
|
+
apiUrl,
|
|
117
|
+
disableVersionCheck: options.disableVersionCheck,
|
|
118
|
+
requestInterceptor: options.requestInterceptor,
|
|
119
|
+
readyPromise,
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const agentManager = new AgentManager(options.storage)
|
|
123
|
+
|
|
124
|
+
return {
|
|
125
|
+
get config() {
|
|
126
|
+
return config
|
|
127
|
+
},
|
|
128
|
+
get agentManager() {
|
|
129
|
+
return agentManager
|
|
130
|
+
},
|
|
131
|
+
get ready() {
|
|
132
|
+
return readyPromise
|
|
133
|
+
},
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Poll the API health endpoint until it returns a successful response.
|
|
139
|
+
*
|
|
140
|
+
* Derives the health URL from the apiUrl origin (e.g. https://li.quest/health/live).
|
|
141
|
+
* Retries up to {@link HEALTH_MAX_ATTEMPTS} times with {@link HEALTH_POLL_INTERVAL_MS} delays.
|
|
142
|
+
*
|
|
143
|
+
* @throws {PerpsError} If the health endpoint does not respond after all attempts
|
|
144
|
+
*/
|
|
145
|
+
async function pollHealth(apiUrl: string): Promise<void> {
|
|
146
|
+
const healthUrl = `${new URL(apiUrl).origin}/health/live`
|
|
147
|
+
|
|
148
|
+
for (let i = 0; i < HEALTH_MAX_ATTEMPTS; i++) {
|
|
149
|
+
try {
|
|
150
|
+
const response = await fetch(healthUrl)
|
|
151
|
+
if (response.ok) {
|
|
152
|
+
return
|
|
153
|
+
}
|
|
154
|
+
} catch {
|
|
155
|
+
// Server not reachable yet, retry
|
|
156
|
+
}
|
|
157
|
+
await sleep(HEALTH_POLL_INTERVAL_MS)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
throw new PerpsError(
|
|
161
|
+
PerpsErrorCode.ServerError,
|
|
162
|
+
'API health check failed: server did not become ready'
|
|
163
|
+
)
|
|
164
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Address,
|
|
3
|
+
AuthorizationInput,
|
|
4
|
+
AuthorizationsResponse,
|
|
5
|
+
OrderSide,
|
|
6
|
+
OrderType,
|
|
7
|
+
SignedAuthorization,
|
|
8
|
+
TimeInForce,
|
|
9
|
+
TriggerOrderInput,
|
|
10
|
+
} from '@lifi/perps-types'
|
|
11
|
+
import type { StorageAdapter } from '../agent/types.js'
|
|
12
|
+
|
|
13
|
+
// Re-export the SDK client types from createPerpsClient
|
|
14
|
+
export type {
|
|
15
|
+
PerpsBaseConfig,
|
|
16
|
+
PerpsConfig,
|
|
17
|
+
PerpsSDKClient,
|
|
18
|
+
RequestInterceptor,
|
|
19
|
+
SDKRequestOptions,
|
|
20
|
+
} from './createPerpsClient.js'
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Signing mode determines who signs trading actions.
|
|
24
|
+
*
|
|
25
|
+
* - `USER`: User wallet signs each action (requires wallet popup per action)
|
|
26
|
+
* - `USER_AGENT`: SDK-generated agent signs actions (no popups after initial setup)
|
|
27
|
+
*/
|
|
28
|
+
export type SigningMode = 'USER' | 'USER_AGENT'
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Options for PerpsClient constructor.
|
|
32
|
+
*/
|
|
33
|
+
export interface PerpsClientOptions {
|
|
34
|
+
/** Integrator identifier (required) */
|
|
35
|
+
integrator: string
|
|
36
|
+
/** Optional API key for authenticated requests */
|
|
37
|
+
apiKey?: string
|
|
38
|
+
/** Base API URL. Defaults to https://li.quest/v1/perps */
|
|
39
|
+
apiUrl?: string
|
|
40
|
+
/** Custom storage adapter for agent keys. Defaults to localStorage. */
|
|
41
|
+
storage?: StorageAdapter
|
|
42
|
+
/** Whether to perform a health check on startup before allowing requests. Default: true */
|
|
43
|
+
healthCheck?: boolean
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Parameters for building authorization payloads.
|
|
48
|
+
*/
|
|
49
|
+
export interface BuildAuthorizationParams {
|
|
50
|
+
/** DEX to authorize */
|
|
51
|
+
dex: string
|
|
52
|
+
/** User wallet address */
|
|
53
|
+
address: Address
|
|
54
|
+
/** Address of the signer (auto-set in USER_AGENT mode) */
|
|
55
|
+
signerAddress?: Address
|
|
56
|
+
/** Authorizations to create */
|
|
57
|
+
authorizations: AuthorizationInput[]
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Parameters for placing an order.
|
|
62
|
+
*/
|
|
63
|
+
export interface PlaceOrderParams {
|
|
64
|
+
/** DEX to place order on */
|
|
65
|
+
dex: string
|
|
66
|
+
/** User wallet address */
|
|
67
|
+
address: Address
|
|
68
|
+
/** Client-provided order ID */
|
|
69
|
+
clientOrderId?: string
|
|
70
|
+
/** Market symbol */
|
|
71
|
+
symbol: string
|
|
72
|
+
/** Order side */
|
|
73
|
+
side: OrderSide
|
|
74
|
+
/** Order type */
|
|
75
|
+
type: OrderType
|
|
76
|
+
/** Order size */
|
|
77
|
+
size: string
|
|
78
|
+
/** Order price */
|
|
79
|
+
price: string
|
|
80
|
+
/** Leverage */
|
|
81
|
+
leverage?: number
|
|
82
|
+
/** Reduce only flag */
|
|
83
|
+
reduceOnly?: boolean
|
|
84
|
+
/** Time in force */
|
|
85
|
+
timeInForce?: TimeInForce
|
|
86
|
+
/** Expiration time */
|
|
87
|
+
expiresAt?: string
|
|
88
|
+
/** Take profit trigger */
|
|
89
|
+
takeProfit?: TriggerOrderInput
|
|
90
|
+
/** Stop loss trigger */
|
|
91
|
+
stopLoss?: TriggerOrderInput
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Parameters for canceling orders.
|
|
96
|
+
*/
|
|
97
|
+
export interface CancelOrdersParams {
|
|
98
|
+
/** DEX to cancel orders on */
|
|
99
|
+
dex: string
|
|
100
|
+
/** User wallet address */
|
|
101
|
+
address: Address
|
|
102
|
+
/** Order IDs to cancel */
|
|
103
|
+
ids: string[]
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Parameters for getRequiredAuthorizations().
|
|
108
|
+
*/
|
|
109
|
+
export interface GetRequiredAuthorizationsParams {
|
|
110
|
+
/** DEX to check authorizations for */
|
|
111
|
+
dex: string
|
|
112
|
+
/** User wallet address */
|
|
113
|
+
address: Address
|
|
114
|
+
/** Whether to require abstraction (for HIP-3 assets). Default: false */
|
|
115
|
+
requireAbstraction?: boolean
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Result from getRequiredAuthorizations().
|
|
120
|
+
*/
|
|
121
|
+
export interface RequiredAuthorizationsResult {
|
|
122
|
+
/** Authorizations requiring user wallet signature (0, 1, or 2 items) */
|
|
123
|
+
userAuthorizations: AuthorizationInput[]
|
|
124
|
+
/** Authorizations the SDK auto-signs with the agent after user auths are submitted */
|
|
125
|
+
agentAuthorizations: AuthorizationInput[]
|
|
126
|
+
/** Whether the local agent is registered and valid on the backend */
|
|
127
|
+
agentValid: boolean
|
|
128
|
+
/** The raw abstractionStatus from config (null=never set, 'disabled', 'unifiedAccount', 'portfolioMargin') */
|
|
129
|
+
abstractionStatus: string | null
|
|
130
|
+
/** Whether all authorizations are already satisfied (ready to trade) */
|
|
131
|
+
isReady: boolean
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Parameters for executeAuthorizations().
|
|
136
|
+
*/
|
|
137
|
+
export interface ExecuteAuthorizationsParams {
|
|
138
|
+
/** DEX to authorize */
|
|
139
|
+
dex: string
|
|
140
|
+
/** User wallet address */
|
|
141
|
+
address: Address
|
|
142
|
+
/** The result from getRequiredAuthorizations() */
|
|
143
|
+
required: RequiredAuthorizationsResult
|
|
144
|
+
/** User-signed actions corresponding to required.userAuthorizations */
|
|
145
|
+
userSignedActions: SignedAuthorization[]
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Result from executeAuthorizations().
|
|
150
|
+
*/
|
|
151
|
+
export interface ExecuteAuthorizationsResult {
|
|
152
|
+
/** Results from user-signed authorization submission */
|
|
153
|
+
userResults: AuthorizationsResponse
|
|
154
|
+
/** Results from agent-signed authorization submission (if any) */
|
|
155
|
+
agentResults?: AuthorizationsResponse
|
|
156
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
2
|
+
import { version } from '../version.js'
|
|
3
|
+
import { PerpsErrorName } from './constants.js'
|
|
4
|
+
import { PerpsError } from './PerpsError.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Error thrown when agent-related operations fail (agent not found, authorization issues, etc.)
|
|
8
|
+
*/
|
|
9
|
+
export class AgentError extends PerpsError {
|
|
10
|
+
override name = PerpsErrorName.AgentError
|
|
11
|
+
|
|
12
|
+
constructor(message: string, code = PerpsErrorCode.AgentUnauthorized) {
|
|
13
|
+
super(code, message)
|
|
14
|
+
this.name = PerpsErrorName.AgentError
|
|
15
|
+
|
|
16
|
+
// Override message format
|
|
17
|
+
this.message = `[${PerpsErrorName.AgentError}] ${message}\nLI.FI Perps SDK version: ${version}`
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Create an AgentError for a missing agent.
|
|
22
|
+
*
|
|
23
|
+
* @param address - The user address
|
|
24
|
+
* @param dex - The DEX identifier
|
|
25
|
+
*/
|
|
26
|
+
static notFound(address: string, dex: string): AgentError {
|
|
27
|
+
return new AgentError(
|
|
28
|
+
`Agent not found for ${address} on ${dex}. Call setSigningMode() first.`
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Create an AgentError for an unauthorized agent.
|
|
34
|
+
*
|
|
35
|
+
* @param address - The agent address
|
|
36
|
+
* @param dex - The DEX identifier
|
|
37
|
+
*/
|
|
38
|
+
static unauthorized(address: string, dex: string): AgentError {
|
|
39
|
+
return new AgentError(
|
|
40
|
+
`Agent ${address} is not authorized on ${dex}. Submit authorization first.`
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { PerpsErrorBody } from '@lifi/perps-types'
|
|
2
|
+
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
3
|
+
import { PerpsErrorName } from './constants.js'
|
|
4
|
+
import { PerpsError } from './PerpsError.js'
|
|
5
|
+
|
|
6
|
+
const statusCodeToErrorCode = new Map<number, PerpsErrorCode>([
|
|
7
|
+
[400, PerpsErrorCode.ValidationError],
|
|
8
|
+
[401, PerpsErrorCode.SignatureInvalid],
|
|
9
|
+
[403, PerpsErrorCode.AgentUnauthorized],
|
|
10
|
+
[404, PerpsErrorCode.MarketNotFound],
|
|
11
|
+
[422, PerpsErrorCode.ValidationError],
|
|
12
|
+
[424, PerpsErrorCode.ThirdPartyError],
|
|
13
|
+
[429, PerpsErrorCode.ServerError],
|
|
14
|
+
[500, PerpsErrorCode.ServerError],
|
|
15
|
+
[502, PerpsErrorCode.ServerError],
|
|
16
|
+
[503, PerpsErrorCode.ServerError],
|
|
17
|
+
[504, PerpsErrorCode.TimeoutError],
|
|
18
|
+
])
|
|
19
|
+
|
|
20
|
+
function getErrorCodeFromStatus(status: number): PerpsErrorCode {
|
|
21
|
+
return statusCodeToErrorCode.get(status) ?? PerpsErrorCode.ServerError
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function createInitialMessage(response: Response): string {
|
|
25
|
+
const statusCode =
|
|
26
|
+
response.status || response.status === 0 ? response.status : ''
|
|
27
|
+
const title = response.statusText || ''
|
|
28
|
+
const status = `${statusCode} ${title}`.trim()
|
|
29
|
+
const reason = status ? `status code ${status}` : 'an unknown error'
|
|
30
|
+
return `Request failed with ${reason}`
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export class HTTPError extends PerpsError {
|
|
34
|
+
response: Response
|
|
35
|
+
status: number
|
|
36
|
+
url: string
|
|
37
|
+
responseBody?: PerpsErrorBody
|
|
38
|
+
|
|
39
|
+
constructor(response: Response, url: string) {
|
|
40
|
+
const code = getErrorCodeFromStatus(response.status)
|
|
41
|
+
const message = createInitialMessage(response)
|
|
42
|
+
|
|
43
|
+
super(code, message)
|
|
44
|
+
|
|
45
|
+
this.name = PerpsErrorName.HTTPError
|
|
46
|
+
this.response = response
|
|
47
|
+
this.status = response.status
|
|
48
|
+
this.url = url
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async buildAdditionalDetails(): Promise<this> {
|
|
52
|
+
try {
|
|
53
|
+
this.responseBody = (await this.response.json()) as PerpsErrorBody
|
|
54
|
+
|
|
55
|
+
if (this.responseBody) {
|
|
56
|
+
// Update code from response body if available
|
|
57
|
+
if (this.responseBody.code) {
|
|
58
|
+
this.code = this.responseBody.code
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Append server message
|
|
62
|
+
if (this.responseBody.message) {
|
|
63
|
+
this.message = `${this.message}. ${this.responseBody.message}`
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
} catch {
|
|
67
|
+
// Response body parsing failed - use defaults
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return this
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
2
|
+
import { version } from '../version.js'
|
|
3
|
+
import { PerpsErrorName } from './constants.js'
|
|
4
|
+
|
|
5
|
+
export class PerpsError extends Error {
|
|
6
|
+
code: PerpsErrorCode
|
|
7
|
+
override name = PerpsErrorName.PerpsError
|
|
8
|
+
|
|
9
|
+
constructor(
|
|
10
|
+
code: PerpsErrorCode = PerpsErrorCode.DefaultError,
|
|
11
|
+
message = 'Unknown error occurred'
|
|
12
|
+
) {
|
|
13
|
+
const errorMessage = `[${PerpsErrorName.PerpsError}] ${message}\nLI.FI Perps SDK version: ${version}`
|
|
14
|
+
super(errorMessage)
|
|
15
|
+
this.code = code
|
|
16
|
+
this.name = PerpsErrorName.PerpsError
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static fromError(error: unknown, defaultCode?: PerpsErrorCode): PerpsError {
|
|
20
|
+
if (error instanceof PerpsError) {
|
|
21
|
+
return error
|
|
22
|
+
}
|
|
23
|
+
if (error instanceof Error) {
|
|
24
|
+
return new PerpsError(
|
|
25
|
+
defaultCode ?? PerpsErrorCode.DefaultError,
|
|
26
|
+
error.message
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
return new PerpsError(
|
|
30
|
+
defaultCode ?? PerpsErrorCode.DefaultError,
|
|
31
|
+
String(error)
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
2
|
+
import { version } from '../version.js'
|
|
3
|
+
import { PerpsError } from './PerpsError.js'
|
|
4
|
+
|
|
5
|
+
const PERPS_SDK_ERROR_NAME = 'PerpsSDKError'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Top-level SDK error that wraps all other error types.
|
|
9
|
+
* This is the public-facing error type for the SDK.
|
|
10
|
+
*
|
|
11
|
+
* PerpsSDKError always includes:
|
|
12
|
+
* - A consistent error message format with SDK version
|
|
13
|
+
* - Access to the root cause error via the `cause` property
|
|
14
|
+
* - Stack trace preservation
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* try {
|
|
19
|
+
* await getDexes(client)
|
|
20
|
+
* } catch (error) {
|
|
21
|
+
* if (error instanceof PerpsSDKError) {
|
|
22
|
+
* console.log(error.message) // [PerpsSDKError] message\nSDK version: X
|
|
23
|
+
* console.log(error.cause) // Original error
|
|
24
|
+
* console.log(error.code) // Numeric error code
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export class PerpsSDKError extends Error {
|
|
30
|
+
override name = PERPS_SDK_ERROR_NAME
|
|
31
|
+
|
|
32
|
+
/** Numeric error code from PerpsErrorCode enum */
|
|
33
|
+
code: PerpsErrorCode
|
|
34
|
+
|
|
35
|
+
/** Original cause of the error */
|
|
36
|
+
override cause?: Error
|
|
37
|
+
|
|
38
|
+
constructor(error: Error, message?: string) {
|
|
39
|
+
// Determine the code
|
|
40
|
+
const code =
|
|
41
|
+
error instanceof PerpsError ? error.code : PerpsErrorCode.DefaultError
|
|
42
|
+
|
|
43
|
+
// Build the message
|
|
44
|
+
const errorMessage = message ?? error.message
|
|
45
|
+
const formattedMessage = `[${PERPS_SDK_ERROR_NAME}] ${errorMessage}\nLI.FI Perps SDK version: ${version}`
|
|
46
|
+
|
|
47
|
+
super(formattedMessage)
|
|
48
|
+
|
|
49
|
+
this.name = PERPS_SDK_ERROR_NAME
|
|
50
|
+
this.code = code
|
|
51
|
+
this.cause = error
|
|
52
|
+
|
|
53
|
+
// Preserve the original stack trace if available
|
|
54
|
+
if (error.stack) {
|
|
55
|
+
this.stack = `${this.stack}\nCaused by: ${error.stack}`
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Wrap any error in a PerpsSDKError.
|
|
61
|
+
*
|
|
62
|
+
* @param error - The error to wrap
|
|
63
|
+
* @param message - Optional custom message
|
|
64
|
+
* @returns PerpsSDKError instance
|
|
65
|
+
*/
|
|
66
|
+
static wrap(error: unknown, message?: string): PerpsSDKError {
|
|
67
|
+
if (error instanceof PerpsSDKError) {
|
|
68
|
+
return error
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (error instanceof Error) {
|
|
72
|
+
return new PerpsSDKError(error, message)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Convert non-Error to Error
|
|
76
|
+
const wrappedError = new Error(String(error))
|
|
77
|
+
return new PerpsSDKError(wrappedError, message)
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
2
|
+
import { version } from '../version.js'
|
|
3
|
+
import { PerpsErrorName } from './constants.js'
|
|
4
|
+
import { PerpsError } from './PerpsError.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Error thrown when server-side operations fail (network errors, timeouts, etc.)
|
|
8
|
+
*/
|
|
9
|
+
export class ServerError extends PerpsError {
|
|
10
|
+
override name = PerpsErrorName.ServerError
|
|
11
|
+
|
|
12
|
+
constructor(message: string, code = PerpsErrorCode.ServerError) {
|
|
13
|
+
super(code, message)
|
|
14
|
+
this.name = PerpsErrorName.ServerError
|
|
15
|
+
|
|
16
|
+
// Override message format
|
|
17
|
+
this.message = `[${PerpsErrorName.ServerError}] ${message}\nLI.FI Perps SDK version: ${version}`
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Create a ServerError for a network failure.
|
|
22
|
+
*
|
|
23
|
+
* @param cause - The original error
|
|
24
|
+
*/
|
|
25
|
+
static networkError(cause?: Error): ServerError {
|
|
26
|
+
const message = cause?.message ?? 'Network request failed'
|
|
27
|
+
return new ServerError(message)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Create a ServerError for a timeout.
|
|
32
|
+
*
|
|
33
|
+
* @param operation - The operation that timed out
|
|
34
|
+
*/
|
|
35
|
+
static timeout(operation: string): ServerError {
|
|
36
|
+
return new ServerError(
|
|
37
|
+
`${operation} timed out`,
|
|
38
|
+
PerpsErrorCode.TimeoutError
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
2
|
+
import { version } from '../version.js'
|
|
3
|
+
import { PerpsErrorName } from './constants.js'
|
|
4
|
+
import { PerpsError } from './PerpsError.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Error thrown when validation fails (invalid parameters, missing required fields, etc.)
|
|
8
|
+
*/
|
|
9
|
+
export class ValidationError extends PerpsError {
|
|
10
|
+
override name = PerpsErrorName.ValidationError
|
|
11
|
+
|
|
12
|
+
constructor(message: string) {
|
|
13
|
+
super(PerpsErrorCode.ValidationError, message)
|
|
14
|
+
this.name = PerpsErrorName.ValidationError
|
|
15
|
+
|
|
16
|
+
// Override message format
|
|
17
|
+
this.message = `[${PerpsErrorName.ValidationError}] ${message}\nLI.FI Perps SDK version: ${version}`
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Create a ValidationError from a validation failure.
|
|
22
|
+
*
|
|
23
|
+
* @param field - The field that failed validation
|
|
24
|
+
* @param reason - The reason for validation failure
|
|
25
|
+
*/
|
|
26
|
+
static field(field: string, reason: string): ValidationError {
|
|
27
|
+
return new ValidationError(`Invalid ${field}: ${reason}`)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Create a ValidationError for a missing required field.
|
|
32
|
+
*
|
|
33
|
+
* @param field - The name of the missing field
|
|
34
|
+
*/
|
|
35
|
+
static required(field: string): ValidationError {
|
|
36
|
+
return new ValidationError(`${field} is required`)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export enum PerpsErrorName {
|
|
2
|
+
PerpsError = 'PerpsError',
|
|
3
|
+
HTTPError = 'HTTPError',
|
|
4
|
+
ValidationError = 'ValidationError',
|
|
5
|
+
ServerError = 'ServerError',
|
|
6
|
+
ConfigError = 'ConfigError',
|
|
7
|
+
AgentError = 'AgentError',
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export enum PerpsErrorMessage {
|
|
11
|
+
UnknownError = 'Unknown error occurred.',
|
|
12
|
+
ConfigNotInitialized = 'SDK not configured. Call createPerpsConfig() first.',
|
|
13
|
+
AgentNotFound = 'Agent not found. Call setSigningMode() first.',
|
|
14
|
+
InvalidSigningMode = 'Invalid signing mode for this operation.',
|
|
15
|
+
}
|