@lifi/sdk 4.0.0-alpha.9 → 4.0.0-beta.1
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/dist/cjs/actions/getQuote.js +2 -1
- package/dist/cjs/actions/getQuote.js.map +1 -1
- package/dist/cjs/actions/getRelayedTransactionStatus.js +1 -1
- package/dist/cjs/actions/getRelayedTransactionStatus.js.map +1 -1
- package/dist/cjs/actions/getRelayerQuote.js +2 -1
- package/dist/cjs/actions/getRelayerQuote.js.map +1 -1
- package/dist/cjs/actions/getStepTransaction.js +18 -1
- package/dist/cjs/actions/getStepTransaction.js.map +1 -1
- package/dist/cjs/actions/getTokens.js +1 -1
- package/dist/cjs/actions/getTokens.js.map +1 -1
- package/dist/cjs/core/BaseStepExecutionTask.d.ts +5 -0
- package/dist/cjs/core/BaseStepExecutionTask.js +10 -0
- package/dist/cjs/core/BaseStepExecutionTask.js.map +1 -0
- package/dist/cjs/core/BaseStepExecutor.d.ts +10 -3
- package/dist/cjs/core/BaseStepExecutor.js +51 -0
- package/dist/cjs/core/BaseStepExecutor.js.map +1 -1
- package/dist/cjs/core/StatusManager.d.ts +12 -10
- package/dist/cjs/core/StatusManager.js +32 -33
- package/dist/cjs/core/StatusManager.js.map +1 -1
- package/dist/cjs/core/TaskPipeline.d.ts +7 -0
- package/dist/cjs/core/TaskPipeline.js +27 -0
- package/dist/cjs/core/TaskPipeline.js.map +1 -0
- package/dist/cjs/core/actionMessages.js +19 -3
- package/dist/cjs/core/actionMessages.js.map +1 -1
- package/dist/cjs/core/execution.js +13 -1
- package/dist/cjs/core/execution.js.map +1 -1
- package/dist/cjs/core/prepareRestart.js +2 -3
- package/dist/cjs/core/prepareRestart.js.map +1 -1
- package/dist/cjs/core/storage.d.ts +17 -0
- package/dist/cjs/core/storage.js +36 -0
- package/dist/cjs/core/storage.js.map +1 -0
- package/dist/cjs/core/tasks/CheckBalanceTask.d.ts +5 -0
- package/dist/cjs/core/tasks/CheckBalanceTask.js +26 -0
- package/dist/cjs/core/tasks/CheckBalanceTask.js.map +1 -0
- package/dist/cjs/core/tasks/PrepareTransactionTask.d.ts +5 -0
- package/dist/cjs/core/tasks/PrepareTransactionTask.js +36 -0
- package/dist/cjs/core/tasks/PrepareTransactionTask.js.map +1 -0
- package/dist/cjs/core/tasks/WaitForTransactionStatusTask.d.ts +8 -0
- package/dist/cjs/core/tasks/WaitForTransactionStatusTask.js +73 -0
- package/dist/cjs/core/tasks/WaitForTransactionStatusTask.js.map +1 -0
- package/dist/cjs/core/{checkBalance.d.ts → tasks/helpers/checkBalance.d.ts} +1 -1
- package/dist/cjs/core/{checkBalance.js → tasks/helpers/checkBalance.js} +4 -4
- package/dist/cjs/core/tasks/helpers/checkBalance.js.map +1 -0
- package/dist/cjs/core/tasks/helpers/getTransactionRequestData.d.ts +2 -0
- package/dist/cjs/core/tasks/helpers/getTransactionRequestData.js +30 -0
- package/dist/cjs/core/tasks/helpers/getTransactionRequestData.js.map +1 -0
- package/dist/cjs/core/{stepComparison.d.ts → tasks/helpers/stepComparison.d.ts} +2 -2
- package/dist/cjs/core/{stepComparison.js → tasks/helpers/stepComparison.js} +3 -3
- package/dist/cjs/core/tasks/helpers/stepComparison.js.map +1 -0
- package/dist/cjs/core/{waitForTransactionStatus.d.ts → tasks/helpers/waitForTransactionStatus.d.ts} +2 -2
- package/dist/cjs/core/{waitForTransactionStatus.js → tasks/helpers/waitForTransactionStatus.js} +7 -5
- package/dist/cjs/core/tasks/helpers/waitForTransactionStatus.js.map +1 -0
- package/dist/cjs/core/utils.d.ts +6 -1
- package/dist/cjs/errors/constants.d.ts +2 -1
- package/dist/cjs/errors/constants.js +1 -0
- package/dist/cjs/errors/constants.js.map +1 -1
- package/dist/cjs/errors/errors.d.ts +5 -0
- package/dist/cjs/errors/errors.js +9 -1
- package/dist/cjs/errors/errors.js.map +1 -1
- package/dist/cjs/errors/httpError.js +3 -3
- package/dist/cjs/errors/httpError.js.map +1 -1
- package/dist/cjs/index.d.ts +15 -6
- package/dist/cjs/index.js +26 -7
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/core.d.ts +14 -6
- package/dist/cjs/types/execution.d.ts +22 -0
- package/dist/cjs/types/execution.js +3 -0
- package/dist/cjs/types/execution.js.map +1 -0
- package/dist/cjs/utils/waitForResult.d.ts +1 -1
- package/dist/cjs/utils/waitForResult.js +6 -2
- package/dist/cjs/utils/waitForResult.js.map +1 -1
- package/dist/cjs/utils/withDedupe.d.ts +5 -0
- package/dist/cjs/utils/withDedupe.js +2 -0
- package/dist/cjs/utils/withDedupe.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/actions/getQuote.js +2 -1
- package/dist/esm/actions/getQuote.js.map +1 -1
- package/dist/esm/actions/getRelayedTransactionStatus.js +1 -1
- package/dist/esm/actions/getRelayedTransactionStatus.js.map +1 -1
- package/dist/esm/actions/getRelayerQuote.js +2 -1
- package/dist/esm/actions/getRelayerQuote.js.map +1 -1
- package/dist/esm/actions/getStepTransaction.js +18 -1
- package/dist/esm/actions/getStepTransaction.js.map +1 -1
- package/dist/esm/actions/getTokens.js +1 -1
- package/dist/esm/actions/getTokens.js.map +1 -1
- package/dist/esm/core/BaseStepExecutionTask.d.ts +5 -0
- package/dist/esm/core/BaseStepExecutionTask.js +6 -0
- package/dist/esm/core/BaseStepExecutionTask.js.map +1 -0
- package/dist/esm/core/BaseStepExecutor.d.ts +10 -3
- package/dist/esm/core/BaseStepExecutor.js +52 -0
- package/dist/esm/core/BaseStepExecutor.js.map +1 -1
- package/dist/esm/core/StatusManager.d.ts +29 -27
- package/dist/esm/core/StatusManager.js +49 -50
- package/dist/esm/core/StatusManager.js.map +1 -1
- package/dist/esm/core/TaskPipeline.d.ts +7 -0
- package/dist/esm/core/TaskPipeline.js +23 -0
- package/dist/esm/core/TaskPipeline.js.map +1 -0
- package/dist/esm/core/actionMessages.js +19 -3
- package/dist/esm/core/actionMessages.js.map +1 -1
- package/dist/esm/core/execution.js +14 -3
- package/dist/esm/core/execution.js.map +1 -1
- package/dist/esm/core/prepareRestart.js +2 -3
- package/dist/esm/core/prepareRestart.js.map +1 -1
- package/dist/esm/core/storage.d.ts +17 -0
- package/dist/esm/core/storage.js +30 -0
- package/dist/esm/core/storage.js.map +1 -0
- package/dist/esm/core/tasks/CheckBalanceTask.d.ts +5 -0
- package/dist/esm/core/tasks/CheckBalanceTask.js +22 -0
- package/dist/esm/core/tasks/CheckBalanceTask.js.map +1 -0
- package/dist/esm/core/tasks/PrepareTransactionTask.d.ts +5 -0
- package/dist/esm/core/tasks/PrepareTransactionTask.js +32 -0
- package/dist/esm/core/tasks/PrepareTransactionTask.js.map +1 -0
- package/dist/esm/core/tasks/WaitForTransactionStatusTask.d.ts +8 -0
- package/dist/esm/core/tasks/WaitForTransactionStatusTask.js +74 -0
- package/dist/esm/core/tasks/WaitForTransactionStatusTask.js.map +1 -0
- package/dist/esm/core/{checkBalance.d.ts → tasks/helpers/checkBalance.d.ts} +1 -1
- package/dist/esm/core/{checkBalance.js → tasks/helpers/checkBalance.js} +4 -4
- package/dist/esm/core/tasks/helpers/checkBalance.js.map +1 -0
- package/dist/esm/core/tasks/helpers/getTransactionRequestData.d.ts +2 -0
- package/dist/esm/core/tasks/helpers/getTransactionRequestData.js +26 -0
- package/dist/esm/core/tasks/helpers/getTransactionRequestData.js.map +1 -0
- package/dist/esm/core/{stepComparison.d.ts → tasks/helpers/stepComparison.d.ts} +2 -2
- package/dist/esm/core/{stepComparison.js → tasks/helpers/stepComparison.js} +3 -3
- package/dist/esm/core/tasks/helpers/stepComparison.js.map +1 -0
- package/dist/esm/core/{waitForTransactionStatus.d.ts → tasks/helpers/waitForTransactionStatus.d.ts} +2 -2
- package/dist/esm/core/{waitForTransactionStatus.js → tasks/helpers/waitForTransactionStatus.js} +7 -5
- package/dist/esm/core/tasks/helpers/waitForTransactionStatus.js.map +1 -0
- package/dist/esm/core/utils.d.ts +6 -1
- package/dist/esm/errors/constants.d.ts +2 -1
- package/dist/esm/errors/constants.js +1 -0
- package/dist/esm/errors/constants.js.map +1 -1
- package/dist/esm/errors/errors.d.ts +10 -0
- package/dist/esm/errors/errors.js +12 -0
- package/dist/esm/errors/errors.js.map +1 -1
- package/dist/esm/errors/httpError.js +3 -3
- package/dist/esm/errors/httpError.js.map +1 -1
- package/dist/esm/index.d.ts +15 -6
- package/dist/esm/index.js +12 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/core.d.ts +18 -6
- package/dist/esm/types/execution.d.ts +23 -0
- package/dist/esm/types/execution.js +2 -0
- package/dist/esm/types/execution.js.map +1 -0
- package/dist/esm/utils/waitForResult.d.ts +2 -2
- package/dist/esm/utils/waitForResult.js +7 -3
- package/dist/esm/utils/waitForResult.js.map +1 -1
- package/dist/esm/utils/withDedupe.d.ts +10 -0
- package/dist/esm/utils/withDedupe.js +1 -1
- package/dist/esm/utils/withDedupe.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/types/actions/getRelayerQuote.d.ts.map +1 -1
- package/dist/types/actions/getStepTransaction.d.ts.map +1 -1
- package/dist/types/core/BaseStepExecutionTask.d.ts +6 -0
- package/dist/types/core/BaseStepExecutionTask.d.ts.map +1 -0
- package/dist/types/core/BaseStepExecutor.d.ts +10 -3
- package/dist/types/core/BaseStepExecutor.d.ts.map +1 -1
- package/dist/types/core/StatusManager.d.ts +29 -27
- package/dist/types/core/StatusManager.d.ts.map +1 -1
- package/dist/types/core/TaskPipeline.d.ts +8 -0
- package/dist/types/core/TaskPipeline.d.ts.map +1 -0
- package/dist/types/core/actionMessages.d.ts.map +1 -1
- package/dist/types/core/execution.d.ts.map +1 -1
- package/dist/types/core/prepareRestart.d.ts.map +1 -1
- package/dist/types/core/storage.d.ts +18 -0
- package/dist/types/core/storage.d.ts.map +1 -0
- package/dist/types/core/tasks/CheckBalanceTask.d.ts +6 -0
- package/dist/types/core/tasks/CheckBalanceTask.d.ts.map +1 -0
- package/dist/types/core/tasks/PrepareTransactionTask.d.ts +6 -0
- package/dist/types/core/tasks/PrepareTransactionTask.d.ts.map +1 -0
- package/dist/types/core/tasks/WaitForTransactionStatusTask.d.ts +9 -0
- package/dist/types/core/tasks/WaitForTransactionStatusTask.d.ts.map +1 -0
- package/dist/types/core/{checkBalance.d.ts → tasks/helpers/checkBalance.d.ts} +1 -1
- package/dist/types/core/tasks/helpers/checkBalance.d.ts.map +1 -0
- package/dist/types/core/tasks/helpers/getTransactionRequestData.d.ts +3 -0
- package/dist/types/core/tasks/helpers/getTransactionRequestData.d.ts.map +1 -0
- package/dist/types/core/{stepComparison.d.ts → tasks/helpers/stepComparison.d.ts} +2 -2
- package/dist/types/core/tasks/helpers/stepComparison.d.ts.map +1 -0
- package/dist/types/core/{waitForTransactionStatus.d.ts → tasks/helpers/waitForTransactionStatus.d.ts} +2 -2
- package/dist/types/core/tasks/helpers/waitForTransactionStatus.d.ts.map +1 -0
- package/dist/types/core/utils.d.ts +6 -1
- package/dist/types/core/utils.d.ts.map +1 -1
- package/dist/types/errors/constants.d.ts +2 -1
- package/dist/types/errors/constants.d.ts.map +1 -1
- package/dist/types/errors/errors.d.ts +10 -0
- package/dist/types/errors/errors.d.ts.map +1 -1
- package/dist/types/index.d.ts +15 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types/core.d.ts +18 -6
- package/dist/types/types/core.d.ts.map +1 -1
- package/dist/types/types/execution.d.ts +24 -0
- package/dist/types/types/execution.d.ts.map +1 -0
- package/dist/types/utils/waitForResult.d.ts +2 -2
- package/dist/types/utils/waitForResult.d.ts.map +1 -1
- package/dist/types/utils/withDedupe.d.ts +10 -0
- package/dist/types/utils/withDedupe.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/actions/getQuote.ts +4 -1
- package/src/actions/getRelayedTransactionStatus.ts +1 -1
- package/src/actions/getRelayerQuote.ts +4 -1
- package/src/actions/getStepTransaction.ts +27 -11
- package/src/actions/getTokens.ts +4 -2
- package/src/core/BaseStepExecutionTask.ts +9 -0
- package/src/core/BaseStepExecutor.ts +90 -2
- package/src/core/StatusManager.ts +62 -61
- package/src/core/TaskPipeline.ts +28 -0
- package/src/core/actionMessages.ts +20 -3
- package/src/core/execution.ts +17 -3
- package/src/core/prepareRestart.ts +2 -3
- package/src/core/storage.ts +42 -0
- package/src/core/tasks/CheckBalanceTask.ts +29 -0
- package/src/core/tasks/PrepareTransactionTask.ts +62 -0
- package/src/core/tasks/WaitForTransactionStatusTask.ts +114 -0
- package/src/core/{checkBalance.ts → tasks/helpers/checkBalance.ts} +5 -5
- package/src/core/tasks/helpers/getTransactionRequestData.ts +47 -0
- package/src/core/{stepComparison.ts → tasks/helpers/stepComparison.ts} +5 -5
- package/src/core/{waitForTransactionStatus.ts → tasks/helpers/waitForTransactionStatus.ts} +9 -7
- package/src/errors/constants.ts +1 -0
- package/src/errors/errors.ts +24 -0
- package/src/errors/httpError.ts +3 -3
- package/src/index.ts +24 -4
- package/src/types/core.ts +22 -13
- package/src/types/execution.ts +32 -0
- package/src/utils/waitForResult.ts +9 -4
- package/src/utils/withDedupe.ts +1 -1
- package/src/version.ts +1 -1
- package/dist/cjs/core/checkBalance.js.map +0 -1
- package/dist/cjs/core/stepComparison.js.map +0 -1
- package/dist/cjs/core/waitForDestinationChainTransaction.d.ts +0 -4
- package/dist/cjs/core/waitForDestinationChainTransaction.js +0 -71
- package/dist/cjs/core/waitForDestinationChainTransaction.js.map +0 -1
- package/dist/cjs/core/waitForTransactionStatus.js.map +0 -1
- package/dist/esm/core/checkBalance.js.map +0 -1
- package/dist/esm/core/stepComparison.js.map +0 -1
- package/dist/esm/core/waitForDestinationChainTransaction.d.ts +0 -4
- package/dist/esm/core/waitForDestinationChainTransaction.js +0 -74
- package/dist/esm/core/waitForDestinationChainTransaction.js.map +0 -1
- package/dist/esm/core/waitForTransactionStatus.js.map +0 -1
- package/dist/types/core/checkBalance.d.ts.map +0 -1
- package/dist/types/core/stepComparison.d.ts.map +0 -1
- package/dist/types/core/waitForDestinationChainTransaction.d.ts +0 -5
- package/dist/types/core/waitForDestinationChainTransaction.d.ts.map +0 -1
- package/dist/types/core/waitForTransactionStatus.d.ts.map +0 -1
- package/src/core/waitForDestinationChainTransaction.ts +0 -112
package/src/core/execution.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Route } from '@lifi/types'
|
|
2
2
|
import { LiFiErrorCode } from '../errors/constants.js'
|
|
3
|
-
import { ProviderError } from '../errors/errors.js'
|
|
3
|
+
import { ExecuteStepRetryError, ProviderError } from '../errors/errors.js'
|
|
4
4
|
import type {
|
|
5
5
|
ExecutionOptions,
|
|
6
|
+
LiFiStepExtended,
|
|
6
7
|
RouteExtended,
|
|
7
8
|
SDKClient,
|
|
8
9
|
SDKProvider,
|
|
@@ -94,7 +95,6 @@ const executeSteps = async (
|
|
|
94
95
|
const step = route.steps[index]
|
|
95
96
|
const previousStep = route.steps[index - 1]
|
|
96
97
|
// Check if the step is already done
|
|
97
|
-
//
|
|
98
98
|
if (step.execution?.status === 'DONE') {
|
|
99
99
|
continue
|
|
100
100
|
}
|
|
@@ -136,7 +136,21 @@ const executeSteps = async (
|
|
|
136
136
|
updateRouteExecution(route, execution.executionOptions)
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
let executedStep: LiFiStepExtended
|
|
140
|
+
try {
|
|
141
|
+
executedStep = await stepExecutor.executeStep(client, step)
|
|
142
|
+
} catch (e) {
|
|
143
|
+
if (e instanceof ExecuteStepRetryError) {
|
|
144
|
+
step.execution = undefined
|
|
145
|
+
executedStep = await stepExecutor.executeStep(
|
|
146
|
+
client,
|
|
147
|
+
step,
|
|
148
|
+
e.retryParams
|
|
149
|
+
)
|
|
150
|
+
} else {
|
|
151
|
+
throw e
|
|
152
|
+
}
|
|
153
|
+
}
|
|
140
154
|
|
|
141
155
|
// We may reach this point if user interaction isn't allowed. We want to stop execution until we resume it
|
|
142
156
|
if (executedStep.execution?.status !== 'DONE') {
|
|
@@ -7,9 +7,8 @@ export const prepareRestart = (route: RouteExtended) => {
|
|
|
7
7
|
// Find the index of the last action that has tx hash, taskId, or signed messages
|
|
8
8
|
const lastValidIndex = step.execution.actions.findLastIndex(
|
|
9
9
|
(action) =>
|
|
10
|
-
(
|
|
11
|
-
|
|
12
|
-
!!action.signedTypedData?.length) &&
|
|
10
|
+
['SWAP', 'CROSS_CHAIN', 'RECEIVING_CHAIN'].includes(action.type) &&
|
|
11
|
+
(!!action.txHash || !!action.taskId) &&
|
|
13
12
|
action.status !== 'FAILED'
|
|
14
13
|
)
|
|
15
14
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface SDKStorage {
|
|
2
|
+
get(key: string): string | null | Promise<string | null>
|
|
3
|
+
set(key: string, value: string): void | Promise<void>
|
|
4
|
+
remove(key: string): void | Promise<void>
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export class LocalStorageAdapter implements SDKStorage {
|
|
8
|
+
get(key: string): string | null {
|
|
9
|
+
return window.localStorage.getItem(key)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
set(key: string, value: string): void {
|
|
13
|
+
window.localStorage.setItem(key, value)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
remove(key: string): void {
|
|
17
|
+
window.localStorage.removeItem(key)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export class InMemoryStorage implements SDKStorage {
|
|
22
|
+
private store = new Map<string, string>()
|
|
23
|
+
|
|
24
|
+
get(key: string): string | null {
|
|
25
|
+
return this.store.get(key) ?? null
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
set(key: string, value: string): void {
|
|
29
|
+
this.store.set(key, value)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
remove(key: string): void {
|
|
33
|
+
this.store.delete(key)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function createDefaultStorage(): SDKStorage {
|
|
38
|
+
if (typeof window !== 'undefined' && window.localStorage) {
|
|
39
|
+
return new LocalStorageAdapter()
|
|
40
|
+
}
|
|
41
|
+
return new InMemoryStorage()
|
|
42
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LiFiErrorCode } from '../../errors/constants.js'
|
|
2
|
+
import { TransactionError } from '../../errors/errors.js'
|
|
3
|
+
import type { StepExecutorContext, TaskResult } from '../../types/execution.js'
|
|
4
|
+
import { BaseStepExecutionTask } from '../BaseStepExecutionTask.js'
|
|
5
|
+
import { checkBalance } from './helpers/checkBalance.js'
|
|
6
|
+
|
|
7
|
+
export class CheckBalanceTask extends BaseStepExecutionTask {
|
|
8
|
+
async run(context: StepExecutorContext): Promise<TaskResult> {
|
|
9
|
+
const { client, step, statusManager, isBridgeExecution } = context
|
|
10
|
+
|
|
11
|
+
statusManager.initializeAction({
|
|
12
|
+
step,
|
|
13
|
+
type: isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP',
|
|
14
|
+
chainId: step.action.fromChainId,
|
|
15
|
+
status: 'STARTED',
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
const walletAddress = step.action.fromAddress
|
|
19
|
+
if (!walletAddress) {
|
|
20
|
+
throw new TransactionError(
|
|
21
|
+
LiFiErrorCode.InternalError,
|
|
22
|
+
'The wallet address is undefined.'
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
await checkBalance(client, walletAddress, step)
|
|
27
|
+
return { status: 'COMPLETED' }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { getStepTransaction } from '../../actions/getStepTransaction.js'
|
|
2
|
+
import { LiFiErrorCode } from '../../errors/constants.js'
|
|
3
|
+
import { TransactionError } from '../../errors/errors.js'
|
|
4
|
+
import type { StepExecutorContext, TaskResult } from '../../types/execution.js'
|
|
5
|
+
import { BaseStepExecutionTask } from '../BaseStepExecutionTask.js'
|
|
6
|
+
import { stepComparison } from './helpers/stepComparison.js'
|
|
7
|
+
|
|
8
|
+
export class PrepareTransactionTask extends BaseStepExecutionTask {
|
|
9
|
+
async run(context: StepExecutorContext): Promise<TaskResult> {
|
|
10
|
+
const {
|
|
11
|
+
client,
|
|
12
|
+
step,
|
|
13
|
+
statusManager,
|
|
14
|
+
allowUserInteraction,
|
|
15
|
+
executionOptions,
|
|
16
|
+
isBridgeExecution,
|
|
17
|
+
} = context
|
|
18
|
+
|
|
19
|
+
const action = statusManager.findAction(
|
|
20
|
+
step,
|
|
21
|
+
isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
if (!action) {
|
|
25
|
+
throw new TransactionError(
|
|
26
|
+
LiFiErrorCode.TransactionUnprepared,
|
|
27
|
+
'Unable to prepare transaction. Action not found.'
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (!step.transactionRequest) {
|
|
32
|
+
const { execution, ...stepBase } = step
|
|
33
|
+
const updatedStep = await getStepTransaction(client, stepBase)
|
|
34
|
+
const comparedStep = await stepComparison(
|
|
35
|
+
statusManager,
|
|
36
|
+
step,
|
|
37
|
+
updatedStep,
|
|
38
|
+
allowUserInteraction,
|
|
39
|
+
executionOptions
|
|
40
|
+
)
|
|
41
|
+
Object.assign(step, {
|
|
42
|
+
...comparedStep,
|
|
43
|
+
execution: step.execution,
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (!step.transactionRequest?.data) {
|
|
48
|
+
throw new TransactionError(
|
|
49
|
+
LiFiErrorCode.TransactionUnprepared,
|
|
50
|
+
'Unable to prepare transaction. Transaction request data is not found.'
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
statusManager.updateAction(step, action.type, 'ACTION_REQUIRED')
|
|
55
|
+
|
|
56
|
+
if (!allowUserInteraction) {
|
|
57
|
+
return { status: 'PAUSED' }
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return { status: 'COMPLETED' }
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { ExtendedTransactionInfo, FullStatusData } from '@lifi/types'
|
|
2
|
+
import { LiFiErrorCode } from '../../errors/constants.js'
|
|
3
|
+
import { TransactionError } from '../../errors/errors.js'
|
|
4
|
+
import type { ExecutionActionType } from '../../types/core.js'
|
|
5
|
+
import type { StepExecutorContext, TaskResult } from '../../types/execution.js'
|
|
6
|
+
import { getTransactionFailedMessage } from '../../utils/getTransactionMessage.js'
|
|
7
|
+
import { BaseStepExecutionTask } from '../BaseStepExecutionTask.js'
|
|
8
|
+
import { waitForTransactionStatus } from './helpers/waitForTransactionStatus.js'
|
|
9
|
+
|
|
10
|
+
export class WaitForTransactionStatusTask extends BaseStepExecutionTask {
|
|
11
|
+
readonly actionType: ExecutionActionType
|
|
12
|
+
|
|
13
|
+
constructor(actionType: ExecutionActionType) {
|
|
14
|
+
super()
|
|
15
|
+
this.actionType = actionType
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async run(context: StepExecutorContext): Promise<TaskResult> {
|
|
19
|
+
const {
|
|
20
|
+
client,
|
|
21
|
+
step,
|
|
22
|
+
statusManager,
|
|
23
|
+
pollingIntervalMs,
|
|
24
|
+
toChain,
|
|
25
|
+
isBridgeExecution,
|
|
26
|
+
} = context
|
|
27
|
+
|
|
28
|
+
// At this point, we should have a txHash or taskId
|
|
29
|
+
// taskId is used for custom integrations that don't use the standard transaction hash
|
|
30
|
+
let transactionHash: string | undefined
|
|
31
|
+
try {
|
|
32
|
+
const swapOrBridgeAction = statusManager.findAction(
|
|
33
|
+
step,
|
|
34
|
+
isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP'
|
|
35
|
+
)
|
|
36
|
+
transactionHash = swapOrBridgeAction?.txHash || swapOrBridgeAction?.taskId
|
|
37
|
+
|
|
38
|
+
// Wait for the transaction status on the destination chain
|
|
39
|
+
if (!transactionHash) {
|
|
40
|
+
throw new Error('Transaction hash is undefined.')
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const action = statusManager.initializeAction({
|
|
44
|
+
step,
|
|
45
|
+
type: this.actionType,
|
|
46
|
+
chainId:
|
|
47
|
+
this.actionType === 'RECEIVING_CHAIN'
|
|
48
|
+
? step.action.toChainId
|
|
49
|
+
: step.action.fromChainId,
|
|
50
|
+
status: 'PENDING',
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
const statusResponse = (await waitForTransactionStatus(
|
|
54
|
+
client,
|
|
55
|
+
statusManager,
|
|
56
|
+
transactionHash,
|
|
57
|
+
step,
|
|
58
|
+
action.type,
|
|
59
|
+
pollingIntervalMs
|
|
60
|
+
)) as FullStatusData
|
|
61
|
+
|
|
62
|
+
const statusReceiving =
|
|
63
|
+
statusResponse.receiving as ExtendedTransactionInfo
|
|
64
|
+
|
|
65
|
+
// Update action status
|
|
66
|
+
statusManager.updateAction(step, action.type, 'DONE', {
|
|
67
|
+
chainId: statusReceiving?.chainId || toChain.id,
|
|
68
|
+
substatus: statusResponse.substatus,
|
|
69
|
+
substatusMessage: statusResponse.substatusMessage,
|
|
70
|
+
txHash: statusReceiving?.txHash,
|
|
71
|
+
txLink:
|
|
72
|
+
statusReceiving?.txLink ||
|
|
73
|
+
`${toChain.metamask.blockExplorerUrls[0]}tx/${statusReceiving?.txHash}`,
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
// Update execution status
|
|
77
|
+
statusManager.updateExecution(step, {
|
|
78
|
+
status: 'DONE',
|
|
79
|
+
...(statusResponse.sending.amount && {
|
|
80
|
+
fromAmount: statusResponse.sending.amount,
|
|
81
|
+
}),
|
|
82
|
+
...(statusReceiving?.amount && { toAmount: statusReceiving.amount }),
|
|
83
|
+
...(statusReceiving?.token && { toToken: statusReceiving.token }),
|
|
84
|
+
internalTxLink: statusResponse?.lifiExplorerLink,
|
|
85
|
+
externalTxLink: statusResponse?.bridgeExplorerLink,
|
|
86
|
+
gasCosts: [
|
|
87
|
+
{
|
|
88
|
+
amount: statusResponse.sending.gasAmount,
|
|
89
|
+
amountUSD: statusResponse.sending.gasAmountUSD,
|
|
90
|
+
token: statusResponse.sending.gasToken,
|
|
91
|
+
estimate: statusResponse.sending.gasUsed,
|
|
92
|
+
limit: statusResponse.sending.gasUsed,
|
|
93
|
+
price: statusResponse.sending.gasPrice,
|
|
94
|
+
type: 'SEND',
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
return { status: 'COMPLETED' }
|
|
100
|
+
} catch (e: any) {
|
|
101
|
+
const htmlMessage = await getTransactionFailedMessage(
|
|
102
|
+
client,
|
|
103
|
+
step,
|
|
104
|
+
`${toChain.metamask.blockExplorerUrls[0]}tx/${transactionHash}`
|
|
105
|
+
)
|
|
106
|
+
throw new TransactionError(
|
|
107
|
+
LiFiErrorCode.TransactionFailed,
|
|
108
|
+
htmlMessage ??
|
|
109
|
+
'Failed while waiting for status of destination chain transaction.',
|
|
110
|
+
e
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { LiFiStep } from '@lifi/types'
|
|
2
|
-
import { getTokenBalance } from '
|
|
3
|
-
import { BalanceError } from '
|
|
4
|
-
import type { SDKClient } from '
|
|
5
|
-
import { formatUnits } from '
|
|
6
|
-
import { sleep } from '
|
|
2
|
+
import { getTokenBalance } from '../../../actions/getTokenBalance.js'
|
|
3
|
+
import { BalanceError } from '../../../errors/errors.js'
|
|
4
|
+
import type { SDKClient } from '../../../types/core.js'
|
|
5
|
+
import { formatUnits } from '../../../utils/formatUnits.js'
|
|
6
|
+
import { sleep } from '../../../utils/sleep.js'
|
|
7
7
|
|
|
8
8
|
export const checkBalance = async (
|
|
9
9
|
client: SDKClient,
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { LiFiErrorCode } from '../../../errors/constants.js'
|
|
2
|
+
import { TransactionError } from '../../../errors/errors.js'
|
|
3
|
+
import type {
|
|
4
|
+
ExecutionOptions,
|
|
5
|
+
LiFiStepExtended,
|
|
6
|
+
TransactionParameters,
|
|
7
|
+
} from '../../../types/core.js'
|
|
8
|
+
|
|
9
|
+
export const getTransactionRequestData = async (
|
|
10
|
+
step: LiFiStepExtended,
|
|
11
|
+
executionOptions?: ExecutionOptions
|
|
12
|
+
): Promise<string> => {
|
|
13
|
+
if (!step.transactionRequest?.data) {
|
|
14
|
+
throw new TransactionError(
|
|
15
|
+
LiFiErrorCode.TransactionUnprepared,
|
|
16
|
+
'Unable to prepare transaction. Transaction request data is not found.'
|
|
17
|
+
)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let transactionRequest: TransactionParameters = {
|
|
21
|
+
data: step.transactionRequest.data,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (executionOptions?.updateTransactionRequestHook) {
|
|
25
|
+
const customizedTransactionRequest: TransactionParameters =
|
|
26
|
+
await executionOptions.updateTransactionRequestHook({
|
|
27
|
+
requestType: 'transaction',
|
|
28
|
+
...transactionRequest,
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
transactionRequest = {
|
|
32
|
+
...transactionRequest,
|
|
33
|
+
...customizedTransactionRequest,
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const transactionRequestData = transactionRequest.data
|
|
38
|
+
|
|
39
|
+
if (!transactionRequestData) {
|
|
40
|
+
throw new TransactionError(
|
|
41
|
+
LiFiErrorCode.TransactionUnprepared,
|
|
42
|
+
'Unable to prepare transaction. Transaction request data is not found.'
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return transactionRequestData
|
|
47
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { LiFiStep } from '@lifi/types'
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
2
|
+
import type { StatusManager } from '../../../core/StatusManager.js'
|
|
3
|
+
import { checkStepSlippageThreshold } from '../../../core/utils.js'
|
|
4
|
+
import { LiFiErrorCode } from '../../../errors/constants.js'
|
|
5
|
+
import { TransactionError } from '../../../errors/errors.js'
|
|
6
|
+
import type { ExecutionOptions } from '../../../types/core.js'
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* This method checks whether the new and updated Step meets the required exchange rate conditions.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { FullStatusData, LiFiStep, StatusResponse } from '@lifi/types'
|
|
2
|
-
import { getStatus } from '
|
|
3
|
-
import { ServerError } from '
|
|
4
|
-
import type { ExecutionActionType, SDKClient } from '
|
|
5
|
-
import { waitForResult } from '
|
|
6
|
-
import { getSubstatusMessage } from '
|
|
7
|
-
import type { StatusManager } from '
|
|
2
|
+
import { getStatus } from '../../../actions/getStatus.js'
|
|
3
|
+
import { ServerError } from '../../../errors/errors.js'
|
|
4
|
+
import type { ExecutionActionType, SDKClient } from '../../../types/core.js'
|
|
5
|
+
import { waitForResult } from '../../../utils/waitForResult.js'
|
|
6
|
+
import { getSubstatusMessage } from '../../actionMessages.js'
|
|
7
|
+
import type { StatusManager } from '../../StatusManager.js'
|
|
8
8
|
|
|
9
9
|
const TRANSACTION_HASH_OBSERVERS: Record<string, Promise<StatusResponse>> = {}
|
|
10
10
|
|
|
@@ -57,7 +57,9 @@ export async function waitForTransactionStatus(
|
|
|
57
57
|
let status = TRANSACTION_HASH_OBSERVERS[txHash]
|
|
58
58
|
|
|
59
59
|
if (!status) {
|
|
60
|
-
status = waitForResult(_getStatus, interval)
|
|
60
|
+
status = waitForResult(_getStatus, interval).finally(() => {
|
|
61
|
+
delete TRANSACTION_HASH_OBSERVERS[txHash]
|
|
62
|
+
})
|
|
61
63
|
TRANSACTION_HASH_OBSERVERS[txHash] = status
|
|
62
64
|
}
|
|
63
65
|
|
package/src/errors/constants.ts
CHANGED
package/src/errors/errors.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ExecuteStepRetryParams } from '../types/core.js'
|
|
1
2
|
import { BaseError } from './baseError.js'
|
|
2
3
|
import { ErrorName, LiFiErrorCode } from './constants.js'
|
|
3
4
|
|
|
@@ -42,3 +43,26 @@ export class ValidationError extends BaseError {
|
|
|
42
43
|
super(ErrorName.ValidationError, LiFiErrorCode.ValidationError, message)
|
|
43
44
|
}
|
|
44
45
|
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Thrown by a step executor when executeStep should be retried with the given params
|
|
49
|
+
* (e.g. wallet rejected 7702 upgrade → retry with atomicityNotReady).
|
|
50
|
+
* The execution layer catches this and retries executeStep(client, step, retryParams).
|
|
51
|
+
*/
|
|
52
|
+
export class ExecuteStepRetryError extends BaseError {
|
|
53
|
+
readonly retryParams: ExecuteStepRetryParams
|
|
54
|
+
|
|
55
|
+
constructor(
|
|
56
|
+
message: string,
|
|
57
|
+
retryParams: ExecuteStepRetryParams,
|
|
58
|
+
cause?: Error
|
|
59
|
+
) {
|
|
60
|
+
super(
|
|
61
|
+
ErrorName.ExecuteStepRetryError,
|
|
62
|
+
LiFiErrorCode.InternalError,
|
|
63
|
+
message,
|
|
64
|
+
cause
|
|
65
|
+
)
|
|
66
|
+
this.retryParams = retryParams
|
|
67
|
+
}
|
|
68
|
+
}
|
package/src/errors/httpError.ts
CHANGED
|
@@ -82,10 +82,10 @@ export class HTTPError extends BaseError {
|
|
|
82
82
|
try {
|
|
83
83
|
this.responseBody = await this.response.json()
|
|
84
84
|
|
|
85
|
-
if (this.responseBody) {
|
|
85
|
+
if (this.responseBody?.message) {
|
|
86
86
|
this.message += this.message.endsWith('.')
|
|
87
|
-
? ` ${this.responseBody
|
|
88
|
-
: `. ${this.responseBody
|
|
87
|
+
? ` ${this.responseBody.message.toString()}`
|
|
88
|
+
: `. ${this.responseBody.message.toString()}`
|
|
89
89
|
}
|
|
90
90
|
} catch {}
|
|
91
91
|
|
package/src/index.ts
CHANGED
|
@@ -24,8 +24,9 @@ export { actions } from './actions/index.js'
|
|
|
24
24
|
export { patchContractCalls } from './actions/patchContractCalls.js'
|
|
25
25
|
export { relayTransaction } from './actions/relayTransaction.js'
|
|
26
26
|
export { createClient } from './client/createClient.js'
|
|
27
|
+
export { getActionMessage, getSubstatusMessage } from './core/actionMessages.js'
|
|
28
|
+
export { BaseStepExecutionTask } from './core/BaseStepExecutionTask.js'
|
|
27
29
|
export { BaseStepExecutor } from './core/BaseStepExecutor.js'
|
|
28
|
-
export { checkBalance } from './core/checkBalance.js'
|
|
29
30
|
export {
|
|
30
31
|
executeRoute,
|
|
31
32
|
getActiveRoute,
|
|
@@ -35,13 +36,25 @@ export {
|
|
|
35
36
|
updateRouteExecution,
|
|
36
37
|
} from './core/execution.js'
|
|
37
38
|
export { StatusManager } from './core/StatusManager.js'
|
|
38
|
-
export {
|
|
39
|
-
export {
|
|
39
|
+
export type { SDKStorage } from './core/storage.js'
|
|
40
|
+
export {
|
|
41
|
+
createDefaultStorage,
|
|
42
|
+
InMemoryStorage,
|
|
43
|
+
LocalStorageAdapter,
|
|
44
|
+
} from './core/storage.js'
|
|
45
|
+
export { TaskPipeline } from './core/TaskPipeline.js'
|
|
46
|
+
export { CheckBalanceTask } from './core/tasks/CheckBalanceTask.js'
|
|
47
|
+
export { checkBalance } from './core/tasks/helpers/checkBalance.js'
|
|
48
|
+
export { getTransactionRequestData } from './core/tasks/helpers/getTransactionRequestData.js'
|
|
49
|
+
export { stepComparison } from './core/tasks/helpers/stepComparison.js'
|
|
50
|
+
export { PrepareTransactionTask } from './core/tasks/PrepareTransactionTask.js'
|
|
51
|
+
export { WaitForTransactionStatusTask } from './core/tasks/WaitForTransactionStatusTask.js'
|
|
40
52
|
export { BaseError } from './errors/baseError.js'
|
|
41
53
|
export type { ErrorCode } from './errors/constants.js'
|
|
42
54
|
export { ErrorMessage, ErrorName, LiFiErrorCode } from './errors/constants.js'
|
|
43
55
|
export {
|
|
44
56
|
BalanceError,
|
|
57
|
+
ExecuteStepRetryError,
|
|
45
58
|
ProviderError,
|
|
46
59
|
RPCError,
|
|
47
60
|
ServerError,
|
|
@@ -58,6 +71,7 @@ export type {
|
|
|
58
71
|
ContractCallParams,
|
|
59
72
|
ContractTool,
|
|
60
73
|
ExchangeRateUpdateParams,
|
|
74
|
+
ExecuteStepRetryParams,
|
|
61
75
|
Execution,
|
|
62
76
|
ExecutionAction,
|
|
63
77
|
ExecutionActionStatus,
|
|
@@ -87,6 +101,12 @@ export type {
|
|
|
87
101
|
TransactionRequestUpdateHook,
|
|
88
102
|
UpdateRouteHook,
|
|
89
103
|
} from './types/core.js'
|
|
104
|
+
export type {
|
|
105
|
+
StepExecutorBaseContext,
|
|
106
|
+
StepExecutorContext,
|
|
107
|
+
TaskResult,
|
|
108
|
+
TaskStatus,
|
|
109
|
+
} from './types/execution.js'
|
|
90
110
|
export { checkPackageUpdates } from './utils/checkPackageUpdates.js'
|
|
91
111
|
export { convertQuoteToRoute } from './utils/convertQuoteToRoute.js'
|
|
92
112
|
export { fetchTxErrorDetails } from './utils/fetchTxErrorDetails.js'
|
|
@@ -95,4 +115,4 @@ export { isHex } from './utils/isHex.js'
|
|
|
95
115
|
export { parseUnits } from './utils/parseUnits.js'
|
|
96
116
|
export { sleep } from './utils/sleep.js'
|
|
97
117
|
export { waitForResult } from './utils/waitForResult.js'
|
|
98
|
-
export { withDedupe } from './utils/withDedupe.js'
|
|
118
|
+
export { LruMap, withDedupe } from './utils/withDedupe.js'
|
package/src/types/core.ts
CHANGED
|
@@ -14,6 +14,7 @@ import type {
|
|
|
14
14
|
Token,
|
|
15
15
|
TokenAmount,
|
|
16
16
|
} from '@lifi/types'
|
|
17
|
+
import type { SDKStorage } from '../core/storage.js'
|
|
17
18
|
import type { ExtendedRequestInit } from './request.js'
|
|
18
19
|
|
|
19
20
|
export type RequestInterceptor = (
|
|
@@ -34,6 +35,7 @@ export interface SDKBaseConfig {
|
|
|
34
35
|
preloadChains?: boolean
|
|
35
36
|
chainsRefetchInterval?: number
|
|
36
37
|
requestInterceptor?: RequestInterceptor
|
|
38
|
+
storage?: SDKStorage
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
export interface SDKConfig extends Partial<Omit<SDKBaseConfig, 'integrator'>> {
|
|
@@ -82,13 +84,20 @@ export interface InteractionSettings {
|
|
|
82
84
|
allowExecution?: boolean
|
|
83
85
|
}
|
|
84
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Params passed when retrying executeStep after an ExecuteStepRetryError.
|
|
89
|
+
* Providers can use this to pass strategy-specific retry options (e.g. atomicityNotReady for Ethereum 7702).
|
|
90
|
+
*/
|
|
91
|
+
export type ExecuteStepRetryParams = Record<string, unknown>
|
|
92
|
+
|
|
85
93
|
export interface StepExecutor {
|
|
86
94
|
allowUserInteraction: boolean
|
|
87
95
|
allowExecution: boolean
|
|
88
96
|
setInteraction(settings?: InteractionSettings): void
|
|
89
97
|
executeStep(
|
|
90
98
|
client: SDKClient,
|
|
91
|
-
step: LiFiStepExtended
|
|
99
|
+
step: LiFiStepExtended,
|
|
100
|
+
retryParams?: ExecuteStepRetryParams
|
|
92
101
|
): Promise<LiFiStepExtended>
|
|
93
102
|
}
|
|
94
103
|
|
|
@@ -195,7 +204,6 @@ export interface ExecutionOptions {
|
|
|
195
204
|
getContractCalls?: GetContractCallsHook
|
|
196
205
|
adjustZeroOutputFromPreviousStep?: boolean
|
|
197
206
|
executeInBackground?: boolean
|
|
198
|
-
disableMessageSigning?: boolean
|
|
199
207
|
/**
|
|
200
208
|
* @deprecated
|
|
201
209
|
*/
|
|
@@ -215,8 +223,11 @@ export type ExecutionActionStatus =
|
|
|
215
223
|
| 'CANCELLED'
|
|
216
224
|
|
|
217
225
|
export type ExecutionActionType =
|
|
218
|
-
| 'TOKEN_ALLOWANCE'
|
|
219
226
|
| 'PERMIT'
|
|
227
|
+
| 'CHECK_ALLOWANCE'
|
|
228
|
+
| 'NATIVE_PERMIT'
|
|
229
|
+
| 'RESET_ALLOWANCE'
|
|
230
|
+
| 'SET_ALLOWANCE'
|
|
220
231
|
| 'SWAP'
|
|
221
232
|
| 'CROSS_CHAIN'
|
|
222
233
|
| 'RECEIVING_CHAIN'
|
|
@@ -224,21 +235,17 @@ export type ExecutionActionType =
|
|
|
224
235
|
export type ExecutionAction = {
|
|
225
236
|
type: ExecutionActionType
|
|
226
237
|
status: ExecutionActionStatus
|
|
238
|
+
message?: string
|
|
227
239
|
substatus?: Substatus
|
|
240
|
+
substatusMessage?: string
|
|
228
241
|
chainId?: number
|
|
229
242
|
txHash?: string
|
|
230
|
-
taskId?: string
|
|
231
243
|
txLink?: string
|
|
244
|
+
taskId?: string
|
|
232
245
|
txType?: TransactionMethodType
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
message: string
|
|
237
|
-
htmlMessage?: string
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// additional information
|
|
241
|
-
[key: string]: any
|
|
246
|
+
txHex?: string
|
|
247
|
+
// Errors occured during the action execution (within tasks)
|
|
248
|
+
error?: { code: string | number; message: string; htmlMessage?: string }
|
|
242
249
|
}
|
|
243
250
|
|
|
244
251
|
export interface Execution {
|
|
@@ -253,6 +260,8 @@ export interface Execution {
|
|
|
253
260
|
gasCosts?: GasCost[]
|
|
254
261
|
internalTxLink?: string
|
|
255
262
|
externalTxLink?: string
|
|
263
|
+
// Errors occured outside of actions (e.g. during context creation)
|
|
264
|
+
error?: { code: string | number; message: string; htmlMessage?: string }
|
|
256
265
|
}
|
|
257
266
|
|
|
258
267
|
export type TransactionMethodType = 'standard' | 'relayed' | 'batched'
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ExtendedChain } from '@lifi/types'
|
|
2
|
+
import type { StatusManager } from '../core/StatusManager.js'
|
|
3
|
+
import type {
|
|
4
|
+
ExecuteStepRetryParams,
|
|
5
|
+
ExecutionOptions,
|
|
6
|
+
LiFiStepExtended,
|
|
7
|
+
SDKClient,
|
|
8
|
+
} from './core.js'
|
|
9
|
+
|
|
10
|
+
export interface StepExecutorBaseContext {
|
|
11
|
+
statusManager: StatusManager
|
|
12
|
+
executionOptions?: ExecutionOptions
|
|
13
|
+
fromChain: ExtendedChain
|
|
14
|
+
toChain: ExtendedChain
|
|
15
|
+
isBridgeExecution: boolean
|
|
16
|
+
client: SDKClient
|
|
17
|
+
step: LiFiStepExtended
|
|
18
|
+
allowUserInteraction: boolean
|
|
19
|
+
retryParams?: ExecuteStepRetryParams
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface StepExecutorContext extends StepExecutorBaseContext {
|
|
23
|
+
pollingIntervalMs?: number
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface TaskResult<TContext = Record<string, unknown>> {
|
|
27
|
+
status: TaskStatus
|
|
28
|
+
/** Optional: data produced for downstream tasks. Pipeline merges into the executor context. */
|
|
29
|
+
context?: TContext
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export type TaskStatus = 'COMPLETED' | 'PAUSED'
|