@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,218 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
2
|
+
import type { Route } from '@lifi/types'
|
|
3
|
+
import { config } from '../config.js'
|
|
4
|
+
import { executionState } from './executionState.js'
|
|
5
|
+
import { prepareRestart } from './prepareRestart.js'
|
|
6
|
+
import type { ExecutionOptions, RouteExtended } from './types.js'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Execute a route.
|
|
10
|
+
* @param route - The route that should be executed. Cannot be an active route.
|
|
11
|
+
* @param executionOptions - An object containing settings and callbacks.
|
|
12
|
+
* @returns The executed route.
|
|
13
|
+
* @throws {LiFiError} Throws a LiFiError if the execution fails.
|
|
14
|
+
*/
|
|
15
|
+
export const executeRoute = async (
|
|
16
|
+
route: Route,
|
|
17
|
+
executionOptions?: ExecutionOptions
|
|
18
|
+
): Promise<RouteExtended> => {
|
|
19
|
+
// Deep clone to prevent side effects
|
|
20
|
+
const clonedRoute = structuredClone<Route>(route)
|
|
21
|
+
|
|
22
|
+
let executionPromise = executionState.get(clonedRoute.id)?.promise
|
|
23
|
+
// Check if route is already running
|
|
24
|
+
if (executionPromise) {
|
|
25
|
+
return executionPromise
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
executionPromise = executeSteps(clonedRoute, executionOptions)
|
|
29
|
+
|
|
30
|
+
executionState.create(route, executionOptions, executionPromise)
|
|
31
|
+
|
|
32
|
+
return executionPromise
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Resume the execution of a route that has been stopped or had an error while executing.
|
|
37
|
+
* @param route - The route that is to be executed. Cannot be an active route.
|
|
38
|
+
* @param executionOptions - An object containing settings and callbacks.
|
|
39
|
+
* @returns The executed route.
|
|
40
|
+
* @throws {LiFiError} Throws a LiFiError if the execution fails.
|
|
41
|
+
*/
|
|
42
|
+
export const resumeRoute = async (
|
|
43
|
+
route: Route,
|
|
44
|
+
executionOptions?: ExecutionOptions
|
|
45
|
+
): Promise<RouteExtended> => {
|
|
46
|
+
// Deep clone to prevent side effects
|
|
47
|
+
const clonedRoute = structuredClone<Route>(route)
|
|
48
|
+
|
|
49
|
+
const execution = executionState.get(clonedRoute.id)
|
|
50
|
+
|
|
51
|
+
if (execution) {
|
|
52
|
+
const executionHalted = execution.executors.some(
|
|
53
|
+
(executor) => !executor.allowExecution
|
|
54
|
+
)
|
|
55
|
+
if (!executionHalted) {
|
|
56
|
+
// Check if we want to resume route execution in the background
|
|
57
|
+
updateRouteExecution(route, {
|
|
58
|
+
executeInBackground: executionOptions?.executeInBackground,
|
|
59
|
+
})
|
|
60
|
+
if (!execution.promise) {
|
|
61
|
+
// We should never reach this point if we do clean-up properly
|
|
62
|
+
throw new Error('Route execution promise not found.')
|
|
63
|
+
}
|
|
64
|
+
return execution.promise
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
await prepareRestart(clonedRoute)
|
|
69
|
+
|
|
70
|
+
const executionPromise = executeSteps(clonedRoute, executionOptions)
|
|
71
|
+
executionState.create(route, executionOptions, executionPromise)
|
|
72
|
+
|
|
73
|
+
return executionPromise
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const executeSteps = async (
|
|
77
|
+
route: RouteExtended,
|
|
78
|
+
executionOptions?: ExecutionOptions
|
|
79
|
+
): Promise<RouteExtended> => {
|
|
80
|
+
executionState.create(route, executionOptions)
|
|
81
|
+
|
|
82
|
+
// Loop over steps and execute them
|
|
83
|
+
for (let index = 0; index < route.steps.length; index++) {
|
|
84
|
+
const execution = executionState.get(route.id)
|
|
85
|
+
// Check if execution has stopped in the meantime
|
|
86
|
+
if (!execution) {
|
|
87
|
+
break
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const step = route.steps[index]
|
|
91
|
+
const previousStep = route.steps[index - 1]
|
|
92
|
+
// Check if the step is already done
|
|
93
|
+
//
|
|
94
|
+
if (step.execution?.status === 'DONE') {
|
|
95
|
+
continue
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Update amount using output of previous execution. In the future this should be handled by calling `updateRoute`
|
|
99
|
+
if (previousStep?.execution?.toAmount) {
|
|
100
|
+
step.action.fromAmount = previousStep.execution.toAmount
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
const fromAddress = step.action.fromAddress
|
|
105
|
+
if (!fromAddress) {
|
|
106
|
+
throw new Error('Action fromAddress is not specified.')
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const provider = config
|
|
110
|
+
.get()
|
|
111
|
+
.providers?.find((provider) => provider.isAddress(fromAddress))
|
|
112
|
+
|
|
113
|
+
if (!provider) {
|
|
114
|
+
throw new Error('SDK Execution Provider not found.')
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const stepExecutor = await provider.getStepExecutor({
|
|
118
|
+
routeId: route.id,
|
|
119
|
+
executionOptions: execution.executionOptions,
|
|
120
|
+
})
|
|
121
|
+
execution.executors.push(stepExecutor)
|
|
122
|
+
|
|
123
|
+
// Check if we want to execute this step in the background
|
|
124
|
+
if (execution.executionOptions) {
|
|
125
|
+
updateRouteExecution(route, execution.executionOptions)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const executedStep = await stepExecutor.executeStep(step)
|
|
129
|
+
|
|
130
|
+
// We may reach this point if user interaction isn't allowed. We want to stop execution until we resume it
|
|
131
|
+
if (executedStep.execution?.status !== 'DONE') {
|
|
132
|
+
stopRouteExecution(route)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Execution stopped during the current step, we don't want to continue to the next step so we return already
|
|
136
|
+
if (stepExecutor.allowExecution) {
|
|
137
|
+
return route
|
|
138
|
+
}
|
|
139
|
+
} catch (e) {
|
|
140
|
+
stopRouteExecution(route)
|
|
141
|
+
throw e
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Clean up after the execution
|
|
146
|
+
executionState.delete(route.id)
|
|
147
|
+
return route
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Updates route execution to background or foreground state.
|
|
152
|
+
* @param route - A route that is currently in execution.
|
|
153
|
+
* @param options - An object with execution settings.
|
|
154
|
+
*/
|
|
155
|
+
export const updateRouteExecution = (
|
|
156
|
+
route: Route,
|
|
157
|
+
options: ExecutionOptions
|
|
158
|
+
): void => {
|
|
159
|
+
const execution = executionState.get(route.id)
|
|
160
|
+
if (!execution) {
|
|
161
|
+
return
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if ('executeInBackground' in options) {
|
|
165
|
+
for (const executor of execution.executors) {
|
|
166
|
+
executor.setInteraction({
|
|
167
|
+
allowInteraction: !options?.executeInBackground,
|
|
168
|
+
allowUpdates: true,
|
|
169
|
+
})
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Update active route settings so we know what the current state of execution is
|
|
173
|
+
execution.executionOptions = {
|
|
174
|
+
...execution.executionOptions,
|
|
175
|
+
...options,
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Stops the execution of an active route.
|
|
181
|
+
* @param route - A route that is currently in execution.
|
|
182
|
+
* @returns The stopped route.
|
|
183
|
+
*/
|
|
184
|
+
export const stopRouteExecution = (route: Route): Route => {
|
|
185
|
+
const execution = executionState.get(route.id)
|
|
186
|
+
if (!execution) {
|
|
187
|
+
return route
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
for (const executor of execution.executors) {
|
|
191
|
+
executor.setInteraction({
|
|
192
|
+
allowInteraction: false,
|
|
193
|
+
allowUpdates: false,
|
|
194
|
+
allowExecution: false,
|
|
195
|
+
})
|
|
196
|
+
}
|
|
197
|
+
executionState.delete(route.id)
|
|
198
|
+
return execution.route
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Get the list of active routes.
|
|
203
|
+
* @returns A list of routes.
|
|
204
|
+
*/
|
|
205
|
+
export const getActiveRoutes = (): RouteExtended[] => {
|
|
206
|
+
return Object.values(executionState.state)
|
|
207
|
+
.map((dict) => dict?.route)
|
|
208
|
+
.filter(Boolean) as RouteExtended[]
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Return the current route information for given route. The route has to be active.
|
|
213
|
+
* @param routeId - A route id.
|
|
214
|
+
* @returns The updated route.
|
|
215
|
+
*/
|
|
216
|
+
export const getActiveRoute = (routeId: string): RouteExtended | undefined => {
|
|
217
|
+
return executionState.get(routeId)?.route
|
|
218
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ExecutionOptions, RouteExtended, StepExecutor } from './types.js'
|
|
2
|
+
|
|
3
|
+
export interface ExecutionData {
|
|
4
|
+
route: RouteExtended
|
|
5
|
+
executors: StepExecutor[]
|
|
6
|
+
executionOptions?: ExecutionOptions
|
|
7
|
+
promise?: Promise<RouteExtended>
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ExecutionState {
|
|
11
|
+
state: Partial<Record<string, ExecutionData>>
|
|
12
|
+
get(routeId: string): ExecutionData | undefined
|
|
13
|
+
create(
|
|
14
|
+
route: RouteExtended,
|
|
15
|
+
executionOptions?: ExecutionOptions,
|
|
16
|
+
promise?: Promise<RouteExtended>
|
|
17
|
+
): ExecutionData
|
|
18
|
+
delete(routeId: string): void
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const executionState: ExecutionState = {
|
|
22
|
+
state: {},
|
|
23
|
+
get(routeId: string) {
|
|
24
|
+
return this.state[routeId]
|
|
25
|
+
},
|
|
26
|
+
create(route, executionOptions, promise) {
|
|
27
|
+
this.state[route.id] = {
|
|
28
|
+
...this.state[route.id],
|
|
29
|
+
route,
|
|
30
|
+
executionOptions,
|
|
31
|
+
promise,
|
|
32
|
+
executors: [],
|
|
33
|
+
}
|
|
34
|
+
return this.state[route.id]!
|
|
35
|
+
},
|
|
36
|
+
delete(routeId) {
|
|
37
|
+
delete this.state[routeId]
|
|
38
|
+
},
|
|
39
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { LiFiStep } from '@lifi/types'
|
|
2
|
+
import type { LiFiStepExtended, RouteExtended } from './types.js'
|
|
3
|
+
|
|
4
|
+
export const prepareRestart = async (route: RouteExtended) => {
|
|
5
|
+
for (let index = 0; index < route.steps.length; index++) {
|
|
6
|
+
const step = route.steps[index]
|
|
7
|
+
const stepHasFailed = step.execution?.status === 'FAILED'
|
|
8
|
+
|
|
9
|
+
if (stepHasFailed) {
|
|
10
|
+
// await handleErrorType(walletClient, step)
|
|
11
|
+
deleteFailedProcesses(step)
|
|
12
|
+
deleteTransactionData(step)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// const handleErrorType = async (walletClient: WalletClient, step: LiFiStep) => {
|
|
18
|
+
// const client = walletClient.extend(publicActions)
|
|
19
|
+
|
|
20
|
+
// const isGasLimitError = step.execution?.process.some(
|
|
21
|
+
// (p) => p.error?.code === LiFiErrorCode.GasLimitError
|
|
22
|
+
// )
|
|
23
|
+
// const isGasPriceError = step.execution?.process.some(
|
|
24
|
+
// (p) => p.error?.code === LiFiErrorCode.TransactionUnderpriced
|
|
25
|
+
// )
|
|
26
|
+
|
|
27
|
+
// const { transactionRequest } = step
|
|
28
|
+
|
|
29
|
+
// if (isGasLimitError) {
|
|
30
|
+
// if (transactionRequest) {
|
|
31
|
+
// let gasLimit = transactionRequest.gasLimit
|
|
32
|
+
|
|
33
|
+
// try {
|
|
34
|
+
// gasLimit = await client.estimateGas(transactionRequest)
|
|
35
|
+
// } catch (error) {}
|
|
36
|
+
|
|
37
|
+
// if (gasLimit) {
|
|
38
|
+
// transactionRequest.gasLimit = BigNumber.from(
|
|
39
|
+
// `${(BigInt(gasLimit.toString()) * 125n) / 100n}`
|
|
40
|
+
// )
|
|
41
|
+
// }
|
|
42
|
+
// }
|
|
43
|
+
|
|
44
|
+
// step.estimate.gasCosts?.forEach(
|
|
45
|
+
// (gasCost) =>
|
|
46
|
+
// (gasCost.limit = `${Math.round(Number(gasCost.limit) * 1.25)}`)
|
|
47
|
+
// )
|
|
48
|
+
// }
|
|
49
|
+
|
|
50
|
+
// if (isGasPriceError) {
|
|
51
|
+
// if (transactionRequest) {
|
|
52
|
+
// let gasPrice = transactionRequest.gasPrice
|
|
53
|
+
|
|
54
|
+
// try {
|
|
55
|
+
// gasPrice = await client.getGasPrice()
|
|
56
|
+
// } catch (error) {}
|
|
57
|
+
|
|
58
|
+
// if (gasPrice) {
|
|
59
|
+
// transactionRequest.gasPrice = BigNumber.from(
|
|
60
|
+
// `${(BigInt(gasPrice.toString()) * 125n) / 100n}`
|
|
61
|
+
// )
|
|
62
|
+
// }
|
|
63
|
+
// }
|
|
64
|
+
|
|
65
|
+
// step.estimate.gasCosts?.forEach(
|
|
66
|
+
// (gasCost) =>
|
|
67
|
+
// (gasCost.price = `${Math.round(Number(gasCost.price) * 1.25)}`)
|
|
68
|
+
// )
|
|
69
|
+
// }
|
|
70
|
+
// }
|
|
71
|
+
|
|
72
|
+
const deleteFailedProcesses = (step: LiFiStepExtended) => {
|
|
73
|
+
if (step.execution) {
|
|
74
|
+
step.execution.process = step.execution.process.filter(
|
|
75
|
+
(process) => process.status === 'DONE'
|
|
76
|
+
)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const deleteTransactionData = (step: LiFiStep) => {
|
|
81
|
+
step.transactionRequest = undefined
|
|
82
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ChainType } from '@lifi/types'
|
|
2
|
+
import { config } from '../config.js'
|
|
3
|
+
|
|
4
|
+
export const getProvider = <T>(type: ChainType): T => {
|
|
5
|
+
const provider = config
|
|
6
|
+
.get()
|
|
7
|
+
.providers?.find((provider) => provider.type === type) as T
|
|
8
|
+
if (!provider) {
|
|
9
|
+
throw new Error(`${type} provider not found.`)
|
|
10
|
+
}
|
|
11
|
+
return provider
|
|
12
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { LiFiStep } from '@lifi/types'
|
|
2
|
+
import { LiFiErrorCode, TransactionError } from '../utils/errors.js'
|
|
3
|
+
import type { StatusManager } from './StatusManager.js'
|
|
4
|
+
import type { ExecutionOptions } from './types.js'
|
|
5
|
+
import { checkStepSlippageThreshold } from './utils.js'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* This method checks whether the new and updated Step meets the required exchange rate conditions.
|
|
9
|
+
* If yes it returns the updated Step.
|
|
10
|
+
* If no and if user interaction is allowed it triggers the acceptExchangeRateUpdateHook. If no user interaction is allowed it aborts.
|
|
11
|
+
* @param statusManager
|
|
12
|
+
* @param oldStep
|
|
13
|
+
* @param newStep
|
|
14
|
+
* @param settings
|
|
15
|
+
* @param allowUserInteraction
|
|
16
|
+
* @param executionOptions
|
|
17
|
+
* @returns Return LiFiStep
|
|
18
|
+
*/
|
|
19
|
+
export const stepComparison = async (
|
|
20
|
+
statusManager: StatusManager,
|
|
21
|
+
oldStep: LiFiStep,
|
|
22
|
+
newStep: LiFiStep,
|
|
23
|
+
allowUserInteraction: boolean,
|
|
24
|
+
executionOptions?: ExecutionOptions
|
|
25
|
+
): Promise<LiFiStep> => {
|
|
26
|
+
// Check if changed exchange rate is in the range of slippage threshold
|
|
27
|
+
if (checkStepSlippageThreshold(oldStep, newStep)) {
|
|
28
|
+
return statusManager.updateStepInRoute(newStep)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let allowStepUpdate: boolean | undefined
|
|
32
|
+
if (allowUserInteraction) {
|
|
33
|
+
allowStepUpdate = await executionOptions?.acceptExchangeRateUpdateHook?.({
|
|
34
|
+
oldToAmount: oldStep.estimate.toAmount,
|
|
35
|
+
newToAmount: newStep.estimate.toAmount,
|
|
36
|
+
toToken: newStep.action.toToken,
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (!allowStepUpdate) {
|
|
41
|
+
// The user declined the new exchange rate, so we are not going to proceed
|
|
42
|
+
throw new TransactionError(
|
|
43
|
+
LiFiErrorCode.ExchangeRateUpdateCanceled,
|
|
44
|
+
'Exchange rate has changed!',
|
|
45
|
+
`Transaction was not sent, your funds are still in your wallet.
|
|
46
|
+
The exchange rate has changed and the previous estimation can not be fulfilled due to value loss.`
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return statusManager.updateStepInRoute(newStep)
|
|
51
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ChainType,
|
|
3
|
+
Execution,
|
|
4
|
+
LiFiStep,
|
|
5
|
+
Route,
|
|
6
|
+
Step,
|
|
7
|
+
Token,
|
|
8
|
+
TokenAmount,
|
|
9
|
+
} from '@lifi/types'
|
|
10
|
+
import type { WalletClient } from 'viem'
|
|
11
|
+
|
|
12
|
+
export interface SDKProvider {
|
|
13
|
+
readonly type: ChainType
|
|
14
|
+
isAddress(address: string): boolean
|
|
15
|
+
getStepExecutor(options: StepExecutorOptions): Promise<StepExecutor>
|
|
16
|
+
getBalance(walletAddress: string, tokens: Token[]): Promise<TokenAmount[]>
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface StepExecutorOptions {
|
|
20
|
+
routeId: string
|
|
21
|
+
executionOptions?: ExecutionOptions
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface InteractionSettings {
|
|
25
|
+
allowInteraction?: boolean
|
|
26
|
+
allowUpdates?: boolean
|
|
27
|
+
allowExecution?: boolean
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface StepExecutor {
|
|
31
|
+
allowUserInteraction: boolean
|
|
32
|
+
allowExecution: boolean
|
|
33
|
+
setInteraction(settings?: InteractionSettings): void
|
|
34
|
+
executeStep(step: LiFiStepExtended): Promise<LiFiStepExtended>
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface RouteExtended extends Omit<Route, 'steps'> {
|
|
38
|
+
steps: LiFiStepExtended[]
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface LiFiStepExtended extends LiFiStep {
|
|
42
|
+
execution?: Execution
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export type StepExtended = Step & {
|
|
46
|
+
execution?: Execution
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type TransactionParameters = {
|
|
50
|
+
chainId?: number
|
|
51
|
+
to?: string
|
|
52
|
+
from?: string
|
|
53
|
+
nonce?: number
|
|
54
|
+
data?: string
|
|
55
|
+
value?: bigint
|
|
56
|
+
gas?: bigint
|
|
57
|
+
gasPrice?: bigint
|
|
58
|
+
maxFeePerGas?: bigint
|
|
59
|
+
maxPriorityFeePerGas?: bigint
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface RouteExecutionData {
|
|
63
|
+
route: Route
|
|
64
|
+
executors: StepExecutor[]
|
|
65
|
+
executionOptions?: ExecutionOptions
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export type RouteExecutionDataDictionary = Partial<
|
|
69
|
+
Record<string, RouteExecutionData>
|
|
70
|
+
>
|
|
71
|
+
|
|
72
|
+
export type RouteExecutionDictionary = Partial<Record<string, Promise<Route>>>
|
|
73
|
+
|
|
74
|
+
export type UpdateRouteHook = (updatedRoute: Route) => void
|
|
75
|
+
|
|
76
|
+
export interface TransactionRequestParameters extends TransactionParameters {
|
|
77
|
+
requestType: 'approve' | 'transaction'
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export type TransactionRequestUpdateHook = (
|
|
81
|
+
updatedTxRequest: TransactionRequestParameters
|
|
82
|
+
) => Promise<TransactionParameters>
|
|
83
|
+
|
|
84
|
+
export type SwitchChainHook = (
|
|
85
|
+
chainId: number
|
|
86
|
+
) => Promise<WalletClient | undefined>
|
|
87
|
+
|
|
88
|
+
export interface AcceptSlippageUpdateHookParams {
|
|
89
|
+
toToken: Token
|
|
90
|
+
oldToAmount: string
|
|
91
|
+
newToAmount: string
|
|
92
|
+
oldSlippage: number
|
|
93
|
+
newSlippage: number
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export type AcceptSlippageUpdateHook = (
|
|
97
|
+
params: AcceptSlippageUpdateHookParams
|
|
98
|
+
) => Promise<boolean | undefined>
|
|
99
|
+
|
|
100
|
+
export interface ExchangeRateUpdateParams {
|
|
101
|
+
toToken: Token
|
|
102
|
+
oldToAmount: string
|
|
103
|
+
newToAmount: string
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export type AcceptExchangeRateUpdateHook = (
|
|
107
|
+
params: ExchangeRateUpdateParams
|
|
108
|
+
) => Promise<boolean | undefined>
|
|
109
|
+
|
|
110
|
+
export interface ExecutionOptions {
|
|
111
|
+
acceptExchangeRateUpdateHook?: AcceptExchangeRateUpdateHook
|
|
112
|
+
switchChainHook?: SwitchChainHook
|
|
113
|
+
updateRouteHook?: UpdateRouteHook
|
|
114
|
+
updateTransactionRequestHook?: TransactionRequestUpdateHook
|
|
115
|
+
executeInBackground?: boolean
|
|
116
|
+
infiniteApproval?: boolean
|
|
117
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type ChainId,
|
|
3
|
+
type LiFiStep,
|
|
4
|
+
type ProcessType,
|
|
5
|
+
type Status,
|
|
6
|
+
type StatusMessage,
|
|
7
|
+
type Substatus,
|
|
8
|
+
} from '@lifi/types'
|
|
9
|
+
import { config } from '../config.js'
|
|
10
|
+
|
|
11
|
+
export const getRpcUrl = async (chainId: ChainId): Promise<string> => {
|
|
12
|
+
const rpcUrls = await getRpcUrls(chainId)
|
|
13
|
+
return rpcUrls[0]
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const getRpcUrls = async (chainId: ChainId): Promise<string[]> => {
|
|
17
|
+
const rpcUrls = (await config.getRPCUrls())[chainId]
|
|
18
|
+
if (!rpcUrls?.length) {
|
|
19
|
+
throw new Error('RPC URL not found')
|
|
20
|
+
}
|
|
21
|
+
return rpcUrls
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const processMessages: Record<ProcessType, Partial<Record<Status, string>>> = {
|
|
25
|
+
TOKEN_ALLOWANCE: {
|
|
26
|
+
STARTED: 'Setting token allowance.',
|
|
27
|
+
PENDING: 'Waiting for token allowance.',
|
|
28
|
+
DONE: 'Token allowance set.',
|
|
29
|
+
},
|
|
30
|
+
SWITCH_CHAIN: {
|
|
31
|
+
PENDING: 'Chain switch required.',
|
|
32
|
+
DONE: 'Chain switched successfully.',
|
|
33
|
+
},
|
|
34
|
+
SWAP: {
|
|
35
|
+
STARTED: 'Preparing swap transaction.',
|
|
36
|
+
ACTION_REQUIRED: 'Please sign the transaction.',
|
|
37
|
+
PENDING: 'Waiting for swap transaction.',
|
|
38
|
+
DONE: 'Swap completed.',
|
|
39
|
+
},
|
|
40
|
+
CROSS_CHAIN: {
|
|
41
|
+
STARTED: 'Preparing bridge transaction.',
|
|
42
|
+
ACTION_REQUIRED: 'Please sign the transaction.',
|
|
43
|
+
PENDING: 'Waiting for bridge transaction.',
|
|
44
|
+
DONE: 'Bridge transaction confirmed.',
|
|
45
|
+
},
|
|
46
|
+
RECEIVING_CHAIN: {
|
|
47
|
+
PENDING: 'Waiting for destination chain.',
|
|
48
|
+
DONE: 'Bridge completed.',
|
|
49
|
+
},
|
|
50
|
+
TRANSACTION: {},
|
|
51
|
+
}
|
|
52
|
+
const substatusMessages: Record<
|
|
53
|
+
StatusMessage,
|
|
54
|
+
Partial<Record<Substatus, string>>
|
|
55
|
+
> = {
|
|
56
|
+
PENDING: {
|
|
57
|
+
BRIDGE_NOT_AVAILABLE: 'Bridge communication is temporarily unavailable.',
|
|
58
|
+
CHAIN_NOT_AVAILABLE: 'RPC communication is temporarily unavailable.',
|
|
59
|
+
NOT_PROCESSABLE_REFUND_NEEDED:
|
|
60
|
+
'The transfer cannot be completed successfully. A refund operation is required.',
|
|
61
|
+
UNKNOWN_ERROR:
|
|
62
|
+
'An unexpected error occurred. Please seek assistance in the LI.FI discord server.',
|
|
63
|
+
WAIT_SOURCE_CONFIRMATIONS:
|
|
64
|
+
'The bridge deposit has been received. The bridge is waiting for more confirmations to start the off-chain logic.',
|
|
65
|
+
WAIT_DESTINATION_TRANSACTION:
|
|
66
|
+
'The bridge off-chain logic is being executed. Wait for the transaction to appear on the destination chain.',
|
|
67
|
+
},
|
|
68
|
+
DONE: {
|
|
69
|
+
PARTIAL:
|
|
70
|
+
'Some of the received tokens are not the requested destination tokens.',
|
|
71
|
+
REFUNDED: 'The tokens were refunded to the sender address.',
|
|
72
|
+
COMPLETED: 'The transfer is complete.',
|
|
73
|
+
},
|
|
74
|
+
FAILED: {},
|
|
75
|
+
INVALID: {},
|
|
76
|
+
NOT_FOUND: {},
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function getProcessMessage(
|
|
80
|
+
type: ProcessType,
|
|
81
|
+
status: Status
|
|
82
|
+
): string | undefined {
|
|
83
|
+
const processMessage = processMessages[type][status]
|
|
84
|
+
return processMessage
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export function getSubstatusMessage(
|
|
88
|
+
status: StatusMessage,
|
|
89
|
+
substatus?: Substatus
|
|
90
|
+
): string | undefined {
|
|
91
|
+
if (!substatus) {
|
|
92
|
+
return
|
|
93
|
+
}
|
|
94
|
+
const message = substatusMessages[status][substatus]
|
|
95
|
+
return message
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Used to check if changed exchange rate is in the range of slippage threshold.
|
|
100
|
+
* We use a slippage value as a threshold to trigger the rate change hook.
|
|
101
|
+
* This can result in almost doubled slippage for the user and need to be revisited.
|
|
102
|
+
* @param oldStep
|
|
103
|
+
* @param newStep
|
|
104
|
+
* @returns Boolean
|
|
105
|
+
*/
|
|
106
|
+
export function checkStepSlippageThreshold(
|
|
107
|
+
oldStep: LiFiStep,
|
|
108
|
+
newStep: LiFiStep
|
|
109
|
+
): boolean {
|
|
110
|
+
const setSlippage = oldStep.action.slippage
|
|
111
|
+
const oldEstimatedToAmount = BigInt(oldStep.estimate.toAmountMin)
|
|
112
|
+
const newEstimatedToAmount = BigInt(newStep.estimate.toAmountMin)
|
|
113
|
+
const amountDifference = oldEstimatedToAmount - newEstimatedToAmount
|
|
114
|
+
// oldEstimatedToAmount can be 0 when we use conract calls
|
|
115
|
+
let actualSlippage = 0
|
|
116
|
+
if (oldEstimatedToAmount > 0) {
|
|
117
|
+
actualSlippage =
|
|
118
|
+
Number((amountDifference * 1_000_000_000n) / oldEstimatedToAmount) /
|
|
119
|
+
1_000_000_000
|
|
120
|
+
}
|
|
121
|
+
return actualSlippage <= setSlippage
|
|
122
|
+
}
|