@lifi/sdk 3.0.0-alpha.4 → 3.0.0-alpha.40
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/package.json +31 -86
- package/src/_cjs/config.js +71 -0
- package/src/_cjs/config.js.map +1 -0
- package/{dist/cjs → src/_cjs}/constants.js +3 -5
- package/src/_cjs/constants.js.map +1 -0
- package/src/_cjs/core/BaseStepExecutor.js +55 -0
- package/src/_cjs/core/BaseStepExecutor.js.map +1 -0
- package/src/_cjs/core/EVM/EVM.js +43 -0
- package/src/_cjs/core/EVM/EVM.js.map +1 -0
- package/src/_cjs/core/EVM/EVMStepExecutor.js +284 -0
- package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -0
- package/{dist/cjs/types → src/_cjs/core/EVM}/abi.js +1 -0
- package/src/_cjs/core/EVM/abi.js.map +1 -0
- package/{dist/cjs/execution → src/_cjs/core/EVM}/checkAllowance.js +12 -12
- package/src/_cjs/core/EVM/checkAllowance.js.map +1 -0
- package/{dist/cjs/allowance → src/_cjs/core/EVM}/getAllowance.js +13 -17
- package/src/_cjs/core/EVM/getAllowance.js.map +1 -0
- package/{dist/cjs/balance/getBalance.js → src/_cjs/core/EVM/getEVMBalance.js} +20 -22
- package/src/_cjs/core/EVM/getEVMBalance.js.map +1 -0
- package/{dist/cjs/execution → src/_cjs/core/EVM}/multisig.js +7 -11
- package/src/_cjs/core/EVM/multisig.js.map +1 -0
- package/src/_cjs/core/EVM/publicClient.js +35 -0
- package/src/_cjs/core/EVM/publicClient.js.map +1 -0
- package/src/_cjs/core/EVM/setAllowance.js +71 -0
- package/src/_cjs/core/EVM/setAllowance.js.map +1 -0
- package/src/_cjs/core/EVM/switchChain.js +38 -0
- package/src/_cjs/core/EVM/switchChain.js.map +1 -0
- package/src/_cjs/core/EVM/types.js +9 -0
- package/src/_cjs/core/EVM/types.js.map +1 -0
- package/{dist/cjs/utils/getMaxPriorityFeePerGas.js → src/_cjs/core/EVM/utils.js} +10 -3
- package/src/_cjs/core/EVM/utils.js.map +1 -0
- package/src/_cjs/core/Solana/Solana.js +44 -0
- package/src/_cjs/core/Solana/Solana.js.map +1 -0
- package/src/_cjs/core/Solana/SolanaStepExecutor.js +163 -0
- package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -0
- package/src/_cjs/core/Solana/connection.js +18 -0
- package/src/_cjs/core/Solana/connection.js.map +1 -0
- package/src/_cjs/core/Solana/getSolanaBalance.js +60 -0
- package/src/_cjs/core/Solana/getSolanaBalance.js.map +1 -0
- package/src/_cjs/core/Solana/types.js +10 -0
- package/src/_cjs/core/Solana/types.js.map +1 -0
- package/src/_cjs/core/StatusManager.js +167 -0
- package/src/_cjs/core/StatusManager.js.map +1 -0
- package/{dist/cjs/execution → src/_cjs/core}/checkBalance.js +5 -5
- package/src/_cjs/core/checkBalance.js.map +1 -0
- package/src/_cjs/core/execution.js +134 -0
- package/src/_cjs/core/execution.js.map +1 -0
- package/src/_cjs/core/executionState.js +23 -0
- package/src/_cjs/core/executionState.js.map +1 -0
- package/src/_cjs/core/index.js +7 -0
- package/src/_cjs/core/index.js.map +1 -0
- package/src/_cjs/core/prepareRestart.js +23 -0
- package/src/_cjs/core/prepareRestart.js.map +1 -0
- package/src/_cjs/core/provider.js +15 -0
- package/src/_cjs/core/provider.js.map +1 -0
- package/src/_cjs/core/stepComparison.js +25 -0
- package/src/_cjs/core/stepComparison.js.map +1 -0
- package/{dist/cjs/allowance → src/_cjs/core}/types.js +1 -0
- package/src/_cjs/core/types.js.map +1 -0
- package/{dist/cjs/execution → src/_cjs/core}/utils.js +16 -10
- package/src/_cjs/core/utils.js.map +1 -0
- package/{dist/cjs/execution → src/_cjs/core}/waitForReceivingTransaction.js +11 -12
- package/src/_cjs/core/waitForReceivingTransaction.js.map +1 -0
- package/src/_cjs/createConfig.js +32 -0
- package/src/_cjs/createConfig.js.map +1 -0
- package/src/_cjs/helpers.js +57 -0
- package/src/_cjs/helpers.js.map +1 -0
- package/src/_cjs/index.js +22 -0
- package/src/_cjs/index.js.map +1 -0
- package/src/_cjs/package.json +1 -0
- package/src/_cjs/request.js +66 -0
- package/src/_cjs/request.js.map +1 -0
- package/src/_cjs/services/api.js +311 -0
- package/src/_cjs/services/api.js.map +1 -0
- package/src/_cjs/services/balance.js +49 -0
- package/src/_cjs/services/balance.js.map +1 -0
- package/{dist/cjs → src/_cjs}/typeguards.js +1 -0
- package/src/_cjs/typeguards.js.map +1 -0
- package/src/_cjs/types/index.js +5 -0
- package/src/_cjs/types/index.js.map +1 -0
- package/{dist/cjs/types/internal.types.js → src/_cjs/types/internal.js} +1 -0
- package/src/_cjs/types/internal.js.map +1 -0
- package/{dist/cjs → src/_cjs}/utils/errors.js +25 -3
- package/src/_cjs/utils/errors.js.map +1 -0
- package/src/_cjs/utils/getTransactionMessage.js +31 -0
- package/src/_cjs/utils/getTransactionMessage.js.map +1 -0
- package/src/_cjs/utils/index.js +9 -0
- package/src/_cjs/utils/index.js.map +1 -0
- package/{dist/cjs → src/_cjs}/utils/median.js +1 -0
- package/src/_cjs/utils/median.js.map +1 -0
- package/src/_cjs/utils/parseBackendError.js +27 -0
- package/src/_cjs/utils/parseBackendError.js.map +1 -0
- package/src/_cjs/utils/parseError.js +67 -0
- package/src/_cjs/utils/parseError.js.map +1 -0
- package/{dist/cjs → src/_cjs}/utils/utils.js +5 -11
- package/src/_cjs/utils/utils.js.map +1 -0
- package/{dist/cjs → src/_cjs}/version.js +2 -1
- package/src/_cjs/version.js.map +1 -0
- package/src/_esm/config.js +68 -0
- package/src/_esm/config.js.map +1 -0
- package/{dist → src/_esm}/constants.js +2 -4
- package/src/_esm/constants.js.map +1 -0
- package/src/_esm/core/BaseStepExecutor.js +52 -0
- package/src/_esm/core/BaseStepExecutor.js.map +1 -0
- package/src/_esm/core/EVM/EVM.js +39 -0
- package/src/_esm/core/EVM/EVM.js.map +1 -0
- package/src/_esm/core/EVM/EVMStepExecutor.js +309 -0
- package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -0
- package/{dist/types → src/_esm/core/EVM}/abi.js +1 -0
- package/src/_esm/core/EVM/abi.js.map +1 -0
- package/{dist/execution → src/_esm/core/EVM}/checkAllowance.js +8 -6
- package/src/_esm/core/EVM/checkAllowance.js.map +1 -0
- package/{dist/allowance → src/_esm/core/EVM}/getAllowance.js +19 -6
- package/src/_esm/core/EVM/getAllowance.js.map +1 -0
- package/{dist/balance/getBalance.js → src/_esm/core/EVM/getEVMBalance.js} +10 -12
- package/src/_esm/core/EVM/getEVMBalance.js.map +1 -0
- package/{dist/execution → src/_esm/core/EVM}/multisig.js +5 -6
- package/src/_esm/core/EVM/multisig.js.map +1 -0
- package/src/_esm/core/EVM/publicClient.js +37 -0
- package/src/_esm/core/EVM/publicClient.js.map +1 -0
- package/{dist/allowance → src/_esm/core/EVM}/setAllowance.js +46 -11
- package/src/_esm/core/EVM/setAllowance.js.map +1 -0
- package/{dist/execution → src/_esm/core/EVM}/switchChain.js +7 -4
- package/src/_esm/core/EVM/switchChain.js.map +1 -0
- package/src/_esm/core/EVM/types.js +6 -0
- package/src/_esm/core/EVM/types.js.map +1 -0
- package/{dist/utils/getMaxPriorityFeePerGas.js → src/_esm/core/EVM/utils.js} +9 -1
- package/src/_esm/core/EVM/utils.js.map +1 -0
- package/src/_esm/core/Solana/Solana.js +40 -0
- package/src/_esm/core/Solana/Solana.js.map +1 -0
- package/src/_esm/core/Solana/SolanaStepExecutor.js +164 -0
- package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -0
- package/src/_esm/core/Solana/connection.js +19 -0
- package/src/_esm/core/Solana/connection.js.map +1 -0
- package/src/_esm/core/Solana/getSolanaBalance.js +56 -0
- package/src/_esm/core/Solana/getSolanaBalance.js.map +1 -0
- package/src/_esm/core/Solana/types.js +7 -0
- package/src/_esm/core/Solana/types.js.map +1 -0
- package/src/_esm/core/StatusManager.js +203 -0
- package/src/_esm/core/StatusManager.js.map +1 -0
- package/{dist/execution → src/_esm/core}/checkBalance.js +3 -2
- package/src/_esm/core/checkBalance.js.map +1 -0
- package/src/_esm/core/execution.js +173 -0
- package/src/_esm/core/execution.js.map +1 -0
- package/src/_esm/core/executionState.js +20 -0
- package/src/_esm/core/executionState.js.map +1 -0
- package/src/_esm/core/index.js +4 -0
- package/src/_esm/core/index.js.map +1 -0
- package/src/_esm/core/prepareRestart.js +64 -0
- package/src/_esm/core/prepareRestart.js.map +1 -0
- package/src/_esm/core/provider.js +11 -0
- package/src/_esm/core/provider.js.map +1 -0
- package/{dist/execution → src/_esm/core}/stepComparison.js +7 -5
- package/src/_esm/core/stepComparison.js.map +1 -0
- package/src/_esm/core/types.js +2 -0
- package/src/_esm/core/types.js.map +1 -0
- package/{dist/execution → src/_esm/core}/utils.js +14 -0
- package/src/_esm/core/utils.js.map +1 -0
- package/{dist/execution → src/_esm/core}/waitForReceivingTransaction.js +9 -7
- package/src/_esm/core/waitForReceivingTransaction.js.map +1 -0
- package/src/_esm/createConfig.js +28 -0
- package/src/_esm/createConfig.js.map +1 -0
- package/{dist → src/_esm}/helpers.js +5 -17
- package/src/_esm/helpers.js.map +1 -0
- package/src/_esm/index.js +13 -0
- package/src/_esm/index.js.map +1 -0
- package/src/_esm/package.json +1 -0
- package/{dist → src/_esm}/request.js +23 -13
- package/src/_esm/request.js.map +1 -0
- package/src/_esm/services/api.js +380 -0
- package/src/_esm/services/api.js.map +1 -0
- package/src/_esm/services/balance.js +65 -0
- package/src/_esm/services/balance.js.map +1 -0
- package/{dist → src/_esm}/typeguards.js +1 -0
- package/src/_esm/typeguards.js.map +1 -0
- package/src/_esm/types/index.js +2 -0
- package/src/_esm/types/index.js.map +1 -0
- package/src/_esm/types/internal.js +2 -0
- package/src/_esm/types/internal.js.map +1 -0
- package/{dist → src/_esm}/utils/errors.js +25 -0
- package/src/_esm/utils/errors.js.map +1 -0
- package/src/_esm/utils/getTransactionMessage.js +28 -0
- package/src/_esm/utils/getTransactionMessage.js.map +1 -0
- package/src/_esm/utils/index.js +6 -0
- package/src/_esm/utils/index.js.map +1 -0
- package/{dist → src/_esm}/utils/median.js +1 -0
- package/src/_esm/utils/median.js.map +1 -0
- package/src/_esm/utils/parseBackendError.js +24 -0
- package/src/_esm/utils/parseBackendError.js.map +1 -0
- package/{dist → src/_esm}/utils/parseError.js +4 -53
- package/src/_esm/utils/parseError.js.map +1 -0
- package/{dist → src/_esm}/utils/utils.js +2 -1
- package/src/_esm/utils/utils.js.map +1 -0
- package/src/_esm/version.js +3 -0
- package/src/_esm/version.js.map +1 -0
- package/src/_types/config.d.ts +15 -0
- package/src/_types/config.d.ts.map +1 -0
- package/{dist/cjs → src/_types}/constants.d.ts +2 -4
- package/src/_types/constants.d.ts.map +1 -0
- package/src/_types/core/BaseStepExecutor.d.ts +13 -0
- package/src/_types/core/BaseStepExecutor.d.ts.map +1 -0
- package/src/_types/core/EVM/EVM.d.ts +3 -0
- package/src/_types/core/EVM/EVM.d.ts.map +1 -0
- package/src/_types/core/EVM/EVMStepExecutor.d.ts +16 -0
- package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -0
- package/{dist/cjs/types → src/_types/core/EVM}/abi.d.ts +1 -0
- package/src/_types/core/EVM/abi.d.ts.map +1 -0
- package/src/_types/core/EVM/checkAllowance.d.ts +6 -0
- package/src/_types/core/EVM/checkAllowance.d.ts.map +1 -0
- package/{dist/cjs/allowance → src/_types/core/EVM}/getAllowance.d.ts +15 -1
- package/src/_types/core/EVM/getAllowance.d.ts.map +1 -0
- package/src/_types/core/EVM/getEVMBalance.d.ts +3 -0
- package/src/_types/core/EVM/getEVMBalance.d.ts.map +1 -0
- package/src/_types/core/EVM/multisig.d.ts +6 -0
- package/src/_types/core/EVM/multisig.d.ts.map +1 -0
- package/src/_types/core/EVM/publicClient.d.ts +8 -0
- package/src/_types/core/EVM/publicClient.d.ts.map +1 -0
- package/src/_types/core/EVM/setAllowance.d.ts +25 -0
- package/src/_types/core/EVM/setAllowance.d.ts.map +1 -0
- package/{dist/cjs/execution → src/_types/core/EVM}/switchChain.d.ts +5 -4
- package/src/_types/core/EVM/switchChain.d.ts.map +1 -0
- package/src/_types/core/EVM/types.d.ts +55 -0
- package/src/_types/core/EVM/types.d.ts.map +1 -0
- package/src/_types/core/EVM/utils.d.ts +5 -0
- package/src/_types/core/EVM/utils.d.ts.map +1 -0
- package/src/_types/core/Solana/Solana.d.ts +3 -0
- package/src/_types/core/Solana/Solana.d.ts.map +1 -0
- package/src/_types/core/Solana/SolanaStepExecutor.d.ts +12 -0
- package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -0
- package/src/_types/core/Solana/connection.d.ts +8 -0
- package/src/_types/core/Solana/connection.d.ts.map +1 -0
- package/src/_types/core/Solana/getSolanaBalance.d.ts +3 -0
- package/src/_types/core/Solana/getSolanaBalance.d.ts.map +1 -0
- package/src/_types/core/Solana/types.d.ts +13 -0
- package/src/_types/core/Solana/types.d.ts.map +1 -0
- package/{dist/cjs/execution → src/_types/core}/StatusManager.d.ts +15 -28
- package/src/_types/core/StatusManager.d.ts.map +1 -0
- package/src/_types/core/checkBalance.d.ts +3 -0
- package/src/_types/core/checkBalance.d.ts.map +1 -0
- package/src/_types/core/execution.d.ts +42 -0
- package/src/_types/core/execution.d.ts.map +1 -0
- package/src/_types/core/executionState.d.ts +15 -0
- package/src/_types/core/executionState.d.ts.map +1 -0
- package/src/_types/core/index.d.ts +4 -0
- package/src/_types/core/index.d.ts.map +1 -0
- package/src/_types/core/prepareRestart.d.ts +3 -0
- package/src/_types/core/prepareRestart.d.ts.map +1 -0
- package/src/_types/core/provider.d.ts +3 -0
- package/src/_types/core/provider.d.ts.map +1 -0
- package/{dist/execution → src/_types/core}/stepComparison.d.ts +7 -4
- package/src/_types/core/stepComparison.d.ts.map +1 -0
- package/src/_types/core/types.d.ts +80 -0
- package/src/_types/core/types.d.ts.map +1 -0
- package/{dist/execution → src/_types/core}/utils.d.ts +5 -2
- package/src/_types/core/utils.d.ts.map +1 -0
- package/src/_types/core/waitForReceivingTransaction.d.ts +4 -0
- package/src/_types/core/waitForReceivingTransaction.d.ts.map +1 -0
- package/src/_types/createConfig.d.ts +4 -0
- package/src/_types/createConfig.d.ts.map +1 -0
- package/{dist → src/_types}/helpers.d.ts +4 -3
- package/src/_types/helpers.d.ts.map +1 -0
- package/src/_types/index.d.ts +13 -0
- package/src/_types/index.d.ts.map +1 -0
- package/{dist → src/_types}/request.d.ts +1 -0
- package/src/_types/request.d.ts.map +1 -0
- package/src/_types/services/api.d.ts +89 -0
- package/src/_types/services/api.d.ts.map +1 -0
- package/src/_types/services/balance.d.ts +30 -0
- package/src/_types/services/balance.d.ts.map +1 -0
- package/{dist/cjs → src/_types}/typeguards.d.ts +3 -2
- package/src/_types/typeguards.d.ts.map +1 -0
- package/src/_types/types/index.d.ts +2 -0
- package/src/_types/types/index.d.ts.map +1 -0
- package/src/_types/types/internal.d.ts +58 -0
- package/src/_types/types/internal.d.ts.map +1 -0
- package/{dist → src/_types}/utils/errors.d.ts +1 -0
- package/src/_types/utils/errors.d.ts.map +1 -0
- package/src/_types/utils/getTransactionMessage.d.ts +4 -0
- package/src/_types/utils/getTransactionMessage.d.ts.map +1 -0
- package/src/_types/utils/index.d.ts +6 -0
- package/src/_types/utils/index.d.ts.map +1 -0
- package/{dist/cjs → src/_types}/utils/median.d.ts +1 -0
- package/src/_types/utils/median.d.ts.map +1 -0
- package/src/_types/utils/parseBackendError.d.ts +3 -0
- package/src/_types/utils/parseBackendError.d.ts.map +1 -0
- package/{dist → src/_types}/utils/parseError.d.ts +4 -6
- package/src/_types/utils/parseError.d.ts.map +1 -0
- package/{dist → src/_types}/utils/utils.d.ts +1 -0
- package/src/_types/utils/utils.d.ts.map +1 -0
- package/src/_types/version.d.ts +3 -0
- package/src/_types/version.d.ts.map +1 -0
- package/src/config.ts +71 -0
- package/src/constants.ts +4 -0
- package/src/core/BaseStepExecutor.ts +40 -0
- package/src/core/EVM/EVM.ts +47 -0
- package/src/core/EVM/EVMStepExecutor.ts +461 -0
- package/src/core/EVM/abi.ts +47 -0
- package/src/core/EVM/checkAllowance.ts +152 -0
- package/src/core/EVM/getAllowance.ts +144 -0
- package/src/core/EVM/getEVMBalance.ts +118 -0
- package/src/core/EVM/multisig.ts +53 -0
- package/src/core/EVM/publicClient.ts +46 -0
- package/src/core/EVM/setAllowance.ts +144 -0
- package/src/core/EVM/switchChain.ts +77 -0
- package/src/core/EVM/types.ts +73 -0
- package/src/core/EVM/utils.ts +42 -0
- package/src/core/Solana/Solana.ts +46 -0
- package/src/core/Solana/SolanaStepExecutor.ts +259 -0
- package/src/core/Solana/connection.ts +19 -0
- package/src/core/Solana/getSolanaBalance.ts +72 -0
- package/src/core/Solana/types.ts +18 -0
- package/src/core/StatusManager.ts +231 -0
- package/src/core/checkBalance.ts +48 -0
- package/src/core/execution.ts +218 -0
- package/src/core/executionState.ts +39 -0
- package/src/core/index.ts +3 -0
- package/src/core/prepareRestart.ts +82 -0
- package/src/core/provider.ts +12 -0
- package/src/core/stepComparison.ts +51 -0
- package/src/core/types.ts +117 -0
- package/src/core/utils.ts +122 -0
- package/src/core/waitForReceivingTransaction.ts +74 -0
- package/src/createConfig.ts +33 -0
- package/src/helpers.ts +83 -0
- package/src/index.ts +12 -0
- package/src/request.ts +79 -0
- package/src/services/api.ts +511 -0
- package/src/services/balance.ts +93 -0
- package/src/typeguards.ts +89 -0
- package/src/types/index.ts +1 -0
- package/src/types/internal.ts +60 -0
- package/src/utils/errors.ts +231 -0
- package/src/utils/getTransactionMessage.ts +46 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/median.ts +11 -0
- package/src/utils/parseBackendError.ts +50 -0
- package/src/utils/parseError.ts +204 -0
- package/src/utils/utils.ts +48 -0
- package/src/version.ts +2 -0
- package/dist/LiFi.d.ts +0 -171
- package/dist/LiFi.js +0 -246
- package/dist/allowance/getAllowance.d.ts +0 -6
- package/dist/allowance/index.d.ts +0 -3
- package/dist/allowance/index.js +0 -3
- package/dist/allowance/setAllowance.d.ts +0 -5
- package/dist/allowance/types.d.ts +0 -27
- package/dist/allowance/types.js +0 -1
- package/dist/balance/getBalance.d.ts +0 -2
- package/dist/balance/getTokenBalance.d.ts +0 -8
- package/dist/balance/getTokenBalance.js +0 -27
- package/dist/balance/index.d.ts +0 -2
- package/dist/balance/index.js +0 -2
- package/dist/cjs/LiFi.d.ts +0 -171
- package/dist/cjs/LiFi.js +0 -276
- package/dist/cjs/allowance/index.d.ts +0 -3
- package/dist/cjs/allowance/index.js +0 -19
- package/dist/cjs/allowance/setAllowance.d.ts +0 -5
- package/dist/cjs/allowance/setAllowance.js +0 -56
- package/dist/cjs/allowance/types.d.ts +0 -27
- package/dist/cjs/balance/getBalance.d.ts +0 -2
- package/dist/cjs/balance/getTokenBalance.d.ts +0 -8
- package/dist/cjs/balance/getTokenBalance.js +0 -33
- package/dist/cjs/balance/index.d.ts +0 -2
- package/dist/cjs/balance/index.js +0 -18
- package/dist/cjs/connectors.d.ts +0 -8
- package/dist/cjs/connectors.js +0 -75
- package/dist/cjs/execution/RouteExecutionManager.d.ts +0 -59
- package/dist/cjs/execution/RouteExecutionManager.js +0 -202
- package/dist/cjs/execution/StatusManager.js +0 -171
- package/dist/cjs/execution/StepExecutionManager.d.ts +0 -7
- package/dist/cjs/execution/StepExecutionManager.js +0 -267
- package/dist/cjs/execution/StepExecutor.d.ts +0 -15
- package/dist/cjs/execution/StepExecutor.js +0 -62
- package/dist/cjs/execution/checkAllowance.d.ts +0 -4
- package/dist/cjs/execution/checkBalance.d.ts +0 -2
- package/dist/cjs/execution/index.d.ts +0 -1
- package/dist/cjs/execution/index.js +0 -17
- package/dist/cjs/execution/multisig.d.ts +0 -4
- package/dist/cjs/execution/prepareRestart.d.ts +0 -3
- package/dist/cjs/execution/prepareRestart.js +0 -65
- package/dist/cjs/execution/stepComparison.d.ts +0 -14
- package/dist/cjs/execution/stepComparison.js +0 -37
- package/dist/cjs/execution/switchChain.js +0 -54
- package/dist/cjs/execution/utils.d.ts +0 -12
- package/dist/cjs/execution/waitForReceivingTransaction.d.ts +0 -3
- package/dist/cjs/helpers.d.ts +0 -18
- package/dist/cjs/helpers.js +0 -84
- package/dist/cjs/index.d.ts +0 -5
- package/dist/cjs/index.js +0 -24
- package/dist/cjs/request.d.ts +0 -9
- package/dist/cjs/request.js +0 -60
- package/dist/cjs/services/ApiService.d.ts +0 -17
- package/dist/cjs/services/ApiService.js +0 -326
- package/dist/cjs/services/ChainsService.d.ts +0 -11
- package/dist/cjs/services/ChainsService.js +0 -39
- package/dist/cjs/services/ConfigService.d.ts +0 -23
- package/dist/cjs/services/ConfigService.js +0 -101
- package/dist/cjs/types/index.d.ts +0 -4
- package/dist/cjs/types/index.js +0 -22
- package/dist/cjs/types/internal.types.d.ts +0 -142
- package/dist/cjs/utils/errors.d.ts +0 -107
- package/dist/cjs/utils/getMaxPriorityFeePerGas.d.ts +0 -2
- package/dist/cjs/utils/index.d.ts +0 -5
- package/dist/cjs/utils/index.js +0 -21
- package/dist/cjs/utils/parseError.d.ts +0 -37
- package/dist/cjs/utils/parseError.js +0 -157
- package/dist/cjs/utils/utils.d.ts +0 -10
- package/dist/cjs/version.d.ts +0 -2
- package/dist/connectors.d.ts +0 -8
- package/dist/connectors.js +0 -41
- package/dist/constants.d.ts +0 -6
- package/dist/execution/RouteExecutionManager.d.ts +0 -59
- package/dist/execution/RouteExecutionManager.js +0 -195
- package/dist/execution/StatusManager.d.ts +0 -67
- package/dist/execution/StatusManager.js +0 -167
- package/dist/execution/StepExecutionManager.d.ts +0 -7
- package/dist/execution/StepExecutionManager.js +0 -260
- package/dist/execution/StepExecutor.d.ts +0 -15
- package/dist/execution/StepExecutor.js +0 -58
- package/dist/execution/checkAllowance.d.ts +0 -4
- package/dist/execution/checkBalance.d.ts +0 -2
- package/dist/execution/index.d.ts +0 -1
- package/dist/execution/index.js +0 -1
- package/dist/execution/multisig.d.ts +0 -4
- package/dist/execution/prepareRestart.d.ts +0 -3
- package/dist/execution/prepareRestart.js +0 -61
- package/dist/execution/switchChain.d.ts +0 -21
- package/dist/execution/waitForReceivingTransaction.d.ts +0 -3
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -6
- package/dist/services/ApiService.d.ts +0 -17
- package/dist/services/ApiService.js +0 -321
- package/dist/services/ChainsService.d.ts +0 -11
- package/dist/services/ChainsService.js +0 -33
- package/dist/services/ConfigService.d.ts +0 -23
- package/dist/services/ConfigService.js +0 -99
- package/dist/typeguards.d.ts +0 -4
- package/dist/types/abi.d.ts +0 -5
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.js +0 -4
- package/dist/types/internal.types.d.ts +0 -142
- package/dist/types/internal.types.js +0 -1
- package/dist/utils/getMaxPriorityFeePerGas.d.ts +0 -2
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.js +0 -5
- package/dist/utils/median.d.ts +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.js +0 -2
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ChainType } from '@lifi/types'
|
|
2
|
+
import { PublicKey } from '@solana/web3.js'
|
|
3
|
+
import type { StepExecutorOptions } from '../types.js'
|
|
4
|
+
import { SolanaStepExecutor } from './SolanaStepExecutor.js'
|
|
5
|
+
import { getSolanaBalance } from './getSolanaBalance.js'
|
|
6
|
+
import type { SolanaProvider, SolanaProviderOptions } from './types.js'
|
|
7
|
+
|
|
8
|
+
export function Solana(options?: SolanaProviderOptions): SolanaProvider {
|
|
9
|
+
const _options: SolanaProviderOptions = options ?? {}
|
|
10
|
+
return {
|
|
11
|
+
get type() {
|
|
12
|
+
return ChainType.SVM
|
|
13
|
+
},
|
|
14
|
+
isAddress(address: string): boolean {
|
|
15
|
+
try {
|
|
16
|
+
new PublicKey(address)
|
|
17
|
+
return true
|
|
18
|
+
} catch (error) {
|
|
19
|
+
return false
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
getBalance: getSolanaBalance,
|
|
23
|
+
async getStepExecutor(
|
|
24
|
+
options: StepExecutorOptions
|
|
25
|
+
): Promise<SolanaStepExecutor> {
|
|
26
|
+
if (!_options.getWalletAdapter) {
|
|
27
|
+
throw new Error(`getWalletAdapter is not provided.`)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const walletAdapter = await _options.getWalletAdapter()
|
|
31
|
+
|
|
32
|
+
const executor = new SolanaStepExecutor({
|
|
33
|
+
walletAdapter,
|
|
34
|
+
routeId: options.routeId,
|
|
35
|
+
executionOptions: {
|
|
36
|
+
...options.executionOptions,
|
|
37
|
+
},
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
return executor
|
|
41
|
+
},
|
|
42
|
+
setOptions(options: SolanaProviderOptions) {
|
|
43
|
+
Object.assign(_options, options)
|
|
44
|
+
},
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import type { ExtendedTransactionInfo, FullStatusData } from '@lifi/types'
|
|
2
|
+
import type { Adapter } from '@solana/wallet-adapter-base'
|
|
3
|
+
import {
|
|
4
|
+
VersionedTransaction,
|
|
5
|
+
type TransactionConfirmationStrategy,
|
|
6
|
+
type TransactionSignature,
|
|
7
|
+
} from '@solana/web3.js'
|
|
8
|
+
import { config } from '../../config.js'
|
|
9
|
+
import { getStepTransaction } from '../../services/api.js'
|
|
10
|
+
import {
|
|
11
|
+
LiFiErrorCode,
|
|
12
|
+
TransactionError,
|
|
13
|
+
getTransactionFailedMessage,
|
|
14
|
+
parseError,
|
|
15
|
+
} from '../../utils/index.js'
|
|
16
|
+
import { BaseStepExecutor } from '../BaseStepExecutor.js'
|
|
17
|
+
import { checkBalance } from '../checkBalance.js'
|
|
18
|
+
import { stepComparison } from '../stepComparison.js'
|
|
19
|
+
import type {
|
|
20
|
+
LiFiStepExtended,
|
|
21
|
+
StepExecutorOptions,
|
|
22
|
+
TransactionParameters,
|
|
23
|
+
} from '../types.js'
|
|
24
|
+
import { getSubstatusMessage } from '../utils.js'
|
|
25
|
+
import { waitForReceivingTransaction } from '../waitForReceivingTransaction.js'
|
|
26
|
+
import { getSolanaConnection } from './connection.js'
|
|
27
|
+
|
|
28
|
+
export interface SolanaStepExecutorOptions extends StepExecutorOptions {
|
|
29
|
+
walletAdapter: Adapter
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class SolanaStepExecutor extends BaseStepExecutor {
|
|
33
|
+
private walletAdapter: Adapter
|
|
34
|
+
|
|
35
|
+
constructor(options: SolanaStepExecutorOptions) {
|
|
36
|
+
super(options)
|
|
37
|
+
this.walletAdapter = options.walletAdapter
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
executeStep = async (step: LiFiStepExtended): Promise<LiFiStepExtended> => {
|
|
41
|
+
step.execution = this.statusManager.initExecutionObject(step)
|
|
42
|
+
|
|
43
|
+
const fromChain = await config.getChainById(step.action.fromChainId)
|
|
44
|
+
const toChain = await config.getChainById(step.action.toChainId)
|
|
45
|
+
|
|
46
|
+
const isBridgeExecution = fromChain.id !== toChain.id
|
|
47
|
+
const currentProcessType = isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'
|
|
48
|
+
|
|
49
|
+
// STEP 2: Get transaction
|
|
50
|
+
let process = this.statusManager.findOrCreateProcess(
|
|
51
|
+
step,
|
|
52
|
+
currentProcessType
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
if (process.status !== 'DONE') {
|
|
56
|
+
try {
|
|
57
|
+
const connection = await getSolanaConnection()
|
|
58
|
+
let txHash: TransactionSignature
|
|
59
|
+
if (process.txHash) {
|
|
60
|
+
txHash = process.txHash as TransactionSignature
|
|
61
|
+
} else {
|
|
62
|
+
process = this.statusManager.updateProcess(
|
|
63
|
+
step,
|
|
64
|
+
process.type,
|
|
65
|
+
'STARTED'
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
// Check balance
|
|
69
|
+
await checkBalance(this.walletAdapter.publicKey!.toString(), step)
|
|
70
|
+
|
|
71
|
+
// Create new transaction
|
|
72
|
+
if (!step.transactionRequest) {
|
|
73
|
+
const updatedStep = await getStepTransaction(step)
|
|
74
|
+
const comparedStep = await stepComparison(
|
|
75
|
+
this.statusManager,
|
|
76
|
+
step,
|
|
77
|
+
updatedStep,
|
|
78
|
+
this.allowUserInteraction,
|
|
79
|
+
this.executionOptions
|
|
80
|
+
)
|
|
81
|
+
step = {
|
|
82
|
+
...comparedStep,
|
|
83
|
+
execution: step.execution,
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (!step.transactionRequest?.data) {
|
|
88
|
+
throw new TransactionError(
|
|
89
|
+
LiFiErrorCode.TransactionUnprepared,
|
|
90
|
+
'Unable to prepare transaction.'
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
process = this.statusManager.updateProcess(
|
|
95
|
+
step,
|
|
96
|
+
process.type,
|
|
97
|
+
'ACTION_REQUIRED'
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
if (!this.allowUserInteraction) {
|
|
101
|
+
return step
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
let transactionRequest: TransactionParameters = {
|
|
105
|
+
data: step.transactionRequest.data,
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (this.executionOptions?.updateTransactionRequestHook) {
|
|
109
|
+
const customizedTransactionRequest: TransactionParameters =
|
|
110
|
+
await this.executionOptions.updateTransactionRequestHook({
|
|
111
|
+
requestType: 'transaction',
|
|
112
|
+
...transactionRequest,
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
transactionRequest = {
|
|
116
|
+
...transactionRequest,
|
|
117
|
+
...customizedTransactionRequest,
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (!transactionRequest.data) {
|
|
122
|
+
throw new TransactionError(
|
|
123
|
+
LiFiErrorCode.TransactionUnprepared,
|
|
124
|
+
'Unable to prepare transaction.'
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const versionedTransaction = VersionedTransaction.deserialize(
|
|
129
|
+
Uint8Array.from(atob(transactionRequest.data), (c) =>
|
|
130
|
+
c.charCodeAt(0)
|
|
131
|
+
)
|
|
132
|
+
)
|
|
133
|
+
txHash = await this.walletAdapter.sendTransaction(
|
|
134
|
+
versionedTransaction,
|
|
135
|
+
connection,
|
|
136
|
+
{
|
|
137
|
+
maxRetries: 5,
|
|
138
|
+
skipPreflight: true,
|
|
139
|
+
}
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
process = this.statusManager.updateProcess(
|
|
143
|
+
step,
|
|
144
|
+
process.type,
|
|
145
|
+
'PENDING',
|
|
146
|
+
{
|
|
147
|
+
txHash: txHash,
|
|
148
|
+
txLink: `${fromChain.metamask.blockExplorerUrls[0]}tx/${txHash}`,
|
|
149
|
+
}
|
|
150
|
+
)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const signatureResult = await connection.confirmTransaction(
|
|
154
|
+
{
|
|
155
|
+
signature: txHash,
|
|
156
|
+
} as TransactionConfirmationStrategy,
|
|
157
|
+
'confirmed'
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
if (signatureResult.value.err) {
|
|
161
|
+
throw new TransactionError(
|
|
162
|
+
LiFiErrorCode.TransactionFailed,
|
|
163
|
+
`Transaction failed: ${signatureResult.value.err}`
|
|
164
|
+
)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (isBridgeExecution) {
|
|
168
|
+
process = this.statusManager.updateProcess(step, process.type, 'DONE')
|
|
169
|
+
}
|
|
170
|
+
} catch (e: any) {
|
|
171
|
+
const error = await parseError(e, step, process)
|
|
172
|
+
process = this.statusManager.updateProcess(
|
|
173
|
+
step,
|
|
174
|
+
process.type,
|
|
175
|
+
'FAILED',
|
|
176
|
+
{
|
|
177
|
+
error: {
|
|
178
|
+
message: error.message,
|
|
179
|
+
htmlMessage: error.htmlMessage,
|
|
180
|
+
code: error.code,
|
|
181
|
+
},
|
|
182
|
+
}
|
|
183
|
+
)
|
|
184
|
+
this.statusManager.updateExecution(step, 'FAILED')
|
|
185
|
+
throw error
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// STEP 5: Wait for the receiving chain
|
|
190
|
+
const processTxHash = process.txHash
|
|
191
|
+
if (isBridgeExecution) {
|
|
192
|
+
process = this.statusManager.findOrCreateProcess(
|
|
193
|
+
step,
|
|
194
|
+
'RECEIVING_CHAIN',
|
|
195
|
+
'PENDING'
|
|
196
|
+
)
|
|
197
|
+
}
|
|
198
|
+
let statusResponse: FullStatusData
|
|
199
|
+
try {
|
|
200
|
+
if (!processTxHash) {
|
|
201
|
+
throw new Error('Transaction hash is undefined.')
|
|
202
|
+
}
|
|
203
|
+
statusResponse = (await waitForReceivingTransaction(
|
|
204
|
+
processTxHash,
|
|
205
|
+
this.statusManager,
|
|
206
|
+
process.type,
|
|
207
|
+
step
|
|
208
|
+
)) as FullStatusData
|
|
209
|
+
|
|
210
|
+
const statusReceiving =
|
|
211
|
+
statusResponse.receiving as ExtendedTransactionInfo
|
|
212
|
+
|
|
213
|
+
process = this.statusManager.updateProcess(step, process.type, 'DONE', {
|
|
214
|
+
substatus: statusResponse.substatus,
|
|
215
|
+
substatusMessage:
|
|
216
|
+
statusResponse.substatusMessage ||
|
|
217
|
+
getSubstatusMessage(statusResponse.status, statusResponse.substatus),
|
|
218
|
+
txHash: statusReceiving?.txHash,
|
|
219
|
+
txLink: `${toChain.metamask.blockExplorerUrls[0]}tx/${statusReceiving?.txHash}`,
|
|
220
|
+
})
|
|
221
|
+
|
|
222
|
+
this.statusManager.updateExecution(step, 'DONE', {
|
|
223
|
+
fromAmount: statusResponse.sending.amount,
|
|
224
|
+
toAmount: statusReceiving?.amount,
|
|
225
|
+
toToken: statusReceiving?.token,
|
|
226
|
+
gasCosts: [
|
|
227
|
+
{
|
|
228
|
+
amount: statusResponse.sending.gasAmount,
|
|
229
|
+
amountUSD: statusResponse.sending.gasAmountUSD,
|
|
230
|
+
token: statusResponse.sending.gasToken,
|
|
231
|
+
estimate: statusResponse.sending.gasUsed,
|
|
232
|
+
limit: statusResponse.sending.gasUsed,
|
|
233
|
+
price: statusResponse.sending.gasPrice,
|
|
234
|
+
type: 'SEND',
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
})
|
|
238
|
+
} catch (e: unknown) {
|
|
239
|
+
const htmlMessage = await getTransactionFailedMessage(
|
|
240
|
+
step,
|
|
241
|
+
process.txLink
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
process = this.statusManager.updateProcess(step, process.type, 'FAILED', {
|
|
245
|
+
error: {
|
|
246
|
+
code: LiFiErrorCode.TransactionFailed,
|
|
247
|
+
message: 'Failed while waiting for receiving chain.',
|
|
248
|
+
htmlMessage,
|
|
249
|
+
},
|
|
250
|
+
})
|
|
251
|
+
this.statusManager.updateExecution(step, 'FAILED')
|
|
252
|
+
console.warn(e)
|
|
253
|
+
throw e
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// DONE
|
|
257
|
+
return step
|
|
258
|
+
}
|
|
259
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ChainId } from '@lifi/types'
|
|
2
|
+
import { Connection } from '@solana/web3.js'
|
|
3
|
+
import { getRpcUrl } from '../utils.js'
|
|
4
|
+
|
|
5
|
+
const solanaChainProvider: Connection | undefined = undefined
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* getSolanaConnection is just a thin wrapper around getting the
|
|
9
|
+
* connection (rpc provider) for Solana
|
|
10
|
+
* @returns - Solana rpc connection
|
|
11
|
+
*/
|
|
12
|
+
export const getSolanaConnection = async (): Promise<Connection> => {
|
|
13
|
+
if (!solanaChainProvider) {
|
|
14
|
+
const rpcUrl = await getRpcUrl(ChainId.SOL)
|
|
15
|
+
return new Connection(rpcUrl)
|
|
16
|
+
} else {
|
|
17
|
+
return solanaChainProvider
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { ChainId, Token, TokenAmount } from '@lifi/types'
|
|
2
|
+
import { PublicKey } from '@solana/web3.js'
|
|
3
|
+
import { wrappedSolAddress } from '../../constants.js'
|
|
4
|
+
import { getSolanaConnection } from './connection.js'
|
|
5
|
+
import { TokenProgramAddress } from './types.js'
|
|
6
|
+
|
|
7
|
+
export const getSolanaBalance = async (
|
|
8
|
+
walletAddress: string,
|
|
9
|
+
tokens: Token[]
|
|
10
|
+
): Promise<TokenAmount[]> => {
|
|
11
|
+
if (tokens.length === 0) {
|
|
12
|
+
return []
|
|
13
|
+
}
|
|
14
|
+
const { chainId } = tokens[0]
|
|
15
|
+
tokens.forEach((token) => {
|
|
16
|
+
if (token.chainId !== chainId) {
|
|
17
|
+
console.warn(`Requested tokens have to be on the same chain.`)
|
|
18
|
+
}
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
return getSolanaBalanceDefault(chainId, tokens, walletAddress)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const getSolanaBalanceDefault = async (
|
|
25
|
+
_chainId: ChainId,
|
|
26
|
+
tokens: Token[],
|
|
27
|
+
walletAddress: string
|
|
28
|
+
): Promise<TokenAmount[]> => {
|
|
29
|
+
const connection = await getSolanaConnection()
|
|
30
|
+
const accountPublicKey = new PublicKey(walletAddress)
|
|
31
|
+
const tokenProgramPublicKey = new PublicKey(TokenProgramAddress)
|
|
32
|
+
const [slot, balance, tokenAccountsByOwner] = await Promise.allSettled([
|
|
33
|
+
connection.getSlot(),
|
|
34
|
+
connection.getBalance(accountPublicKey),
|
|
35
|
+
connection.getParsedTokenAccountsByOwner(accountPublicKey, {
|
|
36
|
+
programId: tokenProgramPublicKey,
|
|
37
|
+
}),
|
|
38
|
+
])
|
|
39
|
+
const blockNumber = slot.status === 'fulfilled' ? BigInt(slot.value) : 0n
|
|
40
|
+
const solBalance = balance.status === 'fulfilled' ? BigInt(balance.value) : 0n
|
|
41
|
+
const walletTokenAmounts =
|
|
42
|
+
tokenAccountsByOwner.status === 'fulfilled'
|
|
43
|
+
? tokenAccountsByOwner.value.value.reduce(
|
|
44
|
+
(tokenAmounts, value) => {
|
|
45
|
+
const amount = BigInt(
|
|
46
|
+
value.account.data.parsed.info.tokenAmount.amount
|
|
47
|
+
)
|
|
48
|
+
if (amount > 0n) {
|
|
49
|
+
tokenAmounts[value.account.data.parsed.info.mint] = amount
|
|
50
|
+
}
|
|
51
|
+
return tokenAmounts
|
|
52
|
+
},
|
|
53
|
+
{} as Record<string, bigint>
|
|
54
|
+
)
|
|
55
|
+
: {}
|
|
56
|
+
walletTokenAmounts[wrappedSolAddress] ??= 0n
|
|
57
|
+
walletTokenAmounts[wrappedSolAddress] += solBalance
|
|
58
|
+
const tokenAmounts: TokenAmount[] = tokens.map((token) => {
|
|
59
|
+
if (walletTokenAmounts[token.address]) {
|
|
60
|
+
return {
|
|
61
|
+
...token,
|
|
62
|
+
amount: walletTokenAmounts[token.address],
|
|
63
|
+
blockNumber,
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
...token,
|
|
68
|
+
blockNumber,
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
return tokenAmounts
|
|
72
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ChainType, type ChainId } from '@lifi/types'
|
|
2
|
+
import type { Adapter } from '@solana/wallet-adapter-base'
|
|
3
|
+
import { type SDKProvider } from '../types.js'
|
|
4
|
+
|
|
5
|
+
export interface SolanaProviderOptions {
|
|
6
|
+
getWalletAdapter?: () => Promise<Adapter>
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface SolanaProvider extends SDKProvider {
|
|
10
|
+
rpcUrls?: Record<ChainId, string[]>
|
|
11
|
+
setOptions(options: SolanaProviderOptions): void
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function isSolana(provider: SDKProvider): provider is SolanaProvider {
|
|
15
|
+
return provider.type === ChainType.SVM
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const TokenProgramAddress = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Execution,
|
|
3
|
+
LiFiStep,
|
|
4
|
+
Process,
|
|
5
|
+
ProcessType,
|
|
6
|
+
Status,
|
|
7
|
+
} from '@lifi/types'
|
|
8
|
+
import { emptyExecution } from '@lifi/types'
|
|
9
|
+
import { executionState } from './executionState.js'
|
|
10
|
+
import type { LiFiStepExtended } from './types.js'
|
|
11
|
+
import { getProcessMessage } from './utils.js'
|
|
12
|
+
|
|
13
|
+
type OptionalParameters = Partial<
|
|
14
|
+
Pick<
|
|
15
|
+
Process,
|
|
16
|
+
| 'doneAt'
|
|
17
|
+
| 'failedAt'
|
|
18
|
+
| 'txHash'
|
|
19
|
+
| 'txLink'
|
|
20
|
+
| 'error'
|
|
21
|
+
| 'substatus'
|
|
22
|
+
| 'substatusMessage'
|
|
23
|
+
| 'multisigTxHash'
|
|
24
|
+
>
|
|
25
|
+
>
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Manages status updates of a route and provides various functions for tracking processes
|
|
29
|
+
* @param {string} routeId The route dd this StatusManger belongs to.
|
|
30
|
+
* @returns {StatusManager} An instance of StatusManager.
|
|
31
|
+
*/
|
|
32
|
+
export class StatusManager {
|
|
33
|
+
private readonly routeId: string
|
|
34
|
+
private shouldUpdate = true
|
|
35
|
+
|
|
36
|
+
constructor(routeId: string) {
|
|
37
|
+
this.routeId = routeId
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Initializes the execution object of a Step.
|
|
42
|
+
* @param step The current step in execution
|
|
43
|
+
* @returns The initialized execution object for this step and a function to update this step
|
|
44
|
+
*/
|
|
45
|
+
initExecutionObject = (step: LiFiStepExtended): Execution => {
|
|
46
|
+
if (!step.execution) {
|
|
47
|
+
step.execution = structuredClone<Execution>(emptyExecution)
|
|
48
|
+
step.execution.status = 'PENDING'
|
|
49
|
+
this.updateStepInRoute(step)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Change status to PENDING after resuming from FAILED
|
|
53
|
+
if (step.execution.status === 'FAILED') {
|
|
54
|
+
step.execution.status = 'PENDING'
|
|
55
|
+
this.updateStepInRoute(step)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return step.execution
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Updates the execution object of a Step.
|
|
63
|
+
* @param step The current step in execution
|
|
64
|
+
* @param status The status for the execution
|
|
65
|
+
* @param execution Optional. Information about received tokens
|
|
66
|
+
* @returns The step with the updated execution object
|
|
67
|
+
*/
|
|
68
|
+
updateExecution(
|
|
69
|
+
step: LiFiStepExtended,
|
|
70
|
+
status: Status,
|
|
71
|
+
execution?: Partial<Execution>
|
|
72
|
+
): LiFiStep {
|
|
73
|
+
if (!step.execution) {
|
|
74
|
+
throw Error("Can't update empty execution.")
|
|
75
|
+
}
|
|
76
|
+
step.execution.status = status
|
|
77
|
+
if (execution) {
|
|
78
|
+
step.execution = {
|
|
79
|
+
...step.execution,
|
|
80
|
+
...execution,
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
this.updateStepInRoute(step)
|
|
84
|
+
return step
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Create and push a new process into the execution.
|
|
89
|
+
* @param step The step that should contain the new process.
|
|
90
|
+
* @param type Type of the process. Used to identify already existing processes.
|
|
91
|
+
* @param status By default created procces is set to the STARTED status. We can override new process with the needed status.
|
|
92
|
+
* @returns Returns process.
|
|
93
|
+
*/
|
|
94
|
+
findOrCreateProcess = (
|
|
95
|
+
step: LiFiStepExtended,
|
|
96
|
+
type: ProcessType,
|
|
97
|
+
status?: Status
|
|
98
|
+
): Process => {
|
|
99
|
+
if (!step.execution?.process) {
|
|
100
|
+
throw new Error("Execution hasn't been initialized.")
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const process = step.execution.process.find((p) => p.type === type)
|
|
104
|
+
|
|
105
|
+
if (process) {
|
|
106
|
+
if (status && process.status !== status) {
|
|
107
|
+
process.status = status
|
|
108
|
+
this.updateStepInRoute(step)
|
|
109
|
+
}
|
|
110
|
+
return process
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const newProcess: Process = {
|
|
114
|
+
type: type,
|
|
115
|
+
startedAt: Date.now(),
|
|
116
|
+
message: getProcessMessage(type, status ?? 'STARTED'),
|
|
117
|
+
status: status ?? 'STARTED',
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
step.execution.process.push(newProcess)
|
|
121
|
+
this.updateStepInRoute(step)
|
|
122
|
+
return newProcess
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Update a process object.
|
|
127
|
+
* @param step The step where the process should be updated
|
|
128
|
+
* @param type The process type to update
|
|
129
|
+
* @param status The status the process gets.
|
|
130
|
+
* @param [params] Additional parameters to append to the process.
|
|
131
|
+
* @returns The update process
|
|
132
|
+
*/
|
|
133
|
+
updateProcess = (
|
|
134
|
+
step: LiFiStepExtended,
|
|
135
|
+
type: ProcessType,
|
|
136
|
+
status: Status,
|
|
137
|
+
params?: OptionalParameters
|
|
138
|
+
): Process => {
|
|
139
|
+
if (!step.execution) {
|
|
140
|
+
throw new Error("Can't update an empty step execution.")
|
|
141
|
+
}
|
|
142
|
+
const currentProcess = step?.execution?.process.find((p) => p.type === type)
|
|
143
|
+
|
|
144
|
+
if (!currentProcess) {
|
|
145
|
+
throw new Error("Can't find a process for the given type.")
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
switch (status) {
|
|
149
|
+
case 'CANCELLED':
|
|
150
|
+
currentProcess.doneAt = Date.now()
|
|
151
|
+
break
|
|
152
|
+
case 'FAILED':
|
|
153
|
+
currentProcess.doneAt = Date.now()
|
|
154
|
+
step.execution.status = 'FAILED'
|
|
155
|
+
break
|
|
156
|
+
case 'DONE':
|
|
157
|
+
currentProcess.doneAt = Date.now()
|
|
158
|
+
break
|
|
159
|
+
case 'PENDING':
|
|
160
|
+
step.execution.status = 'PENDING'
|
|
161
|
+
break
|
|
162
|
+
case 'ACTION_REQUIRED':
|
|
163
|
+
step.execution.status = 'ACTION_REQUIRED'
|
|
164
|
+
break
|
|
165
|
+
default:
|
|
166
|
+
break
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
currentProcess.status = status
|
|
170
|
+
currentProcess.message = getProcessMessage(type, status)
|
|
171
|
+
// set extra parameters or overwritte the standard params set in the switch statement
|
|
172
|
+
if (params) {
|
|
173
|
+
for (const [key, value] of Object.entries(params)) {
|
|
174
|
+
currentProcess[key] = value
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Sort processes, the ones with DONE status go first
|
|
178
|
+
step.execution.process = [
|
|
179
|
+
...step?.execution?.process.filter(
|
|
180
|
+
(process) => process.status === 'DONE'
|
|
181
|
+
),
|
|
182
|
+
...step?.execution?.process.filter(
|
|
183
|
+
(process) => process.status !== 'DONE'
|
|
184
|
+
),
|
|
185
|
+
]
|
|
186
|
+
this.updateStepInRoute(step) // updates the step in the route
|
|
187
|
+
return currentProcess
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Remove a process from the execution
|
|
192
|
+
* @param step The step where the process should be removed from
|
|
193
|
+
* @param type The process type to remove
|
|
194
|
+
*/
|
|
195
|
+
removeProcess = (step: LiFiStepExtended, type: ProcessType): void => {
|
|
196
|
+
if (!step.execution) {
|
|
197
|
+
throw new Error("Execution hasn't been initialized.")
|
|
198
|
+
}
|
|
199
|
+
const index = step.execution.process.findIndex((p) => p.type === type)
|
|
200
|
+
step.execution.process.splice(index, 1)
|
|
201
|
+
this.updateStepInRoute(step)
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
updateStepInRoute = (step: LiFiStep): LiFiStep => {
|
|
205
|
+
if (!this.shouldUpdate) {
|
|
206
|
+
return step
|
|
207
|
+
}
|
|
208
|
+
const data = executionState.get(this.routeId)
|
|
209
|
+
|
|
210
|
+
if (!data) {
|
|
211
|
+
throw new Error('Execution data not found.')
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const stepIndex = data.route.steps.findIndex(
|
|
215
|
+
(routeStep) => routeStep.id === step.id
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
if (stepIndex === -1) {
|
|
219
|
+
throw new Error("Couldn't find a step to update.")
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
data.route.steps[stepIndex] = { ...data.route.steps[stepIndex], ...step }
|
|
223
|
+
|
|
224
|
+
data.executionOptions?.updateRouteHook?.(data.route)
|
|
225
|
+
return data.route.steps[stepIndex]
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
allowUpdates(value: boolean): void {
|
|
229
|
+
this.shouldUpdate = value
|
|
230
|
+
}
|
|
231
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { LiFiStep } from '@lifi/types'
|
|
2
|
+
import { formatUnits } from 'viem'
|
|
3
|
+
import { getTokenBalance } from '../services/balance.js'
|
|
4
|
+
import { BalanceError } from '../utils/errors.js'
|
|
5
|
+
|
|
6
|
+
export const checkBalance = async (
|
|
7
|
+
walletAddress: string,
|
|
8
|
+
step: LiFiStep,
|
|
9
|
+
depth = 0
|
|
10
|
+
): Promise<void> => {
|
|
11
|
+
const token = await getTokenBalance(walletAddress, step.action.fromToken)
|
|
12
|
+
if (token) {
|
|
13
|
+
const currentBalance = token.amount ?? 0n
|
|
14
|
+
const neededBalance = BigInt(step.action.fromAmount)
|
|
15
|
+
|
|
16
|
+
if (currentBalance < neededBalance) {
|
|
17
|
+
if (depth <= 3) {
|
|
18
|
+
await new Promise((resolve) => {
|
|
19
|
+
setTimeout(resolve, 200)
|
|
20
|
+
})
|
|
21
|
+
await checkBalance(walletAddress, step, depth + 1)
|
|
22
|
+
} else if (
|
|
23
|
+
(neededBalance * BigInt((1 - step.action.slippage) * 1_000_000_000)) /
|
|
24
|
+
1_000_000_000n <=
|
|
25
|
+
currentBalance
|
|
26
|
+
) {
|
|
27
|
+
// adjust amount in slippage limits
|
|
28
|
+
step.action.fromAmount = currentBalance.toString()
|
|
29
|
+
} else {
|
|
30
|
+
const neeeded = formatUnits(neededBalance, token.decimals)
|
|
31
|
+
const current = formatUnits(currentBalance, token.decimals)
|
|
32
|
+
let errorMessage =
|
|
33
|
+
`Your ${token.symbol} balance is too low, ` +
|
|
34
|
+
`you try to transfer ${neeeded} ${token.symbol}, ` +
|
|
35
|
+
`but your wallet only holds ${current} ${token.symbol}. ` +
|
|
36
|
+
`No funds have been sent.`
|
|
37
|
+
|
|
38
|
+
if (currentBalance !== 0n) {
|
|
39
|
+
errorMessage +=
|
|
40
|
+
`If the problem consists, please delete this transfer and ` +
|
|
41
|
+
`start a new one with a maximum of ${current} ${token.symbol}.`
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
throw new BalanceError('The balance is too low.', errorMessage)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|