@relayprotocol/relay-sdk 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/_cjs/package.json +1 -0
- package/_cjs/src/actions/claimAppFees.js +53 -0
- package/_cjs/src/actions/claimAppFees.js.map +1 -0
- package/_cjs/src/actions/execute.js +76 -0
- package/_cjs/src/actions/execute.js.map +1 -0
- package/_cjs/src/actions/getAppFees.js +24 -0
- package/_cjs/src/actions/getAppFees.js.map +1 -0
- package/_cjs/src/actions/getPrice.js +51 -0
- package/_cjs/src/actions/getPrice.js.map +1 -0
- package/_cjs/src/actions/getQuote.js +91 -0
- package/_cjs/src/actions/getQuote.js.map +1 -0
- package/_cjs/src/actions/getSolverCapacity.js +21 -0
- package/_cjs/src/actions/getSolverCapacity.js.map +1 -0
- package/_cjs/src/actions/index.js +10 -0
- package/_cjs/src/actions/index.js.map +1 -0
- package/_cjs/src/client.js +207 -0
- package/_cjs/src/client.js.map +1 -0
- package/_cjs/src/constants/address.js +48 -0
- package/_cjs/src/constants/address.js.map +1 -0
- package/_cjs/src/constants/bvm.js +5 -0
- package/_cjs/src/constants/bvm.js.map +1 -0
- package/_cjs/src/constants/index.js +6 -0
- package/_cjs/src/constants/index.js.map +1 -0
- package/_cjs/src/constants/servers.js +9 -0
- package/_cjs/src/constants/servers.js.map +1 -0
- package/_cjs/src/errors/DepositTransactionTimeoutError.js +18 -0
- package/_cjs/src/errors/DepositTransactionTimeoutError.js.map +1 -0
- package/_cjs/src/errors/SolverStatusTimeoutError.js +18 -0
- package/_cjs/src/errors/SolverStatusTimeoutError.js.map +1 -0
- package/_cjs/src/errors/TransactionConfirmationError.js +25 -0
- package/_cjs/src/errors/TransactionConfirmationError.js.map +1 -0
- package/_cjs/src/errors/index.js +10 -0
- package/_cjs/src/errors/index.js.map +1 -0
- package/_cjs/src/index.js +10 -0
- package/_cjs/src/index.js.map +1 -0
- package/_cjs/src/routes/index.js +46 -0
- package/_cjs/src/routes/index.js.map +1 -0
- package/_cjs/src/types/AdaptedWallet.js +3 -0
- package/_cjs/src/types/AdaptedWallet.js.map +1 -0
- package/_cjs/src/types/Execute.js +3 -0
- package/_cjs/src/types/Execute.js.map +1 -0
- package/_cjs/src/types/Progress.js +3 -0
- package/_cjs/src/types/Progress.js.map +1 -0
- package/_cjs/src/types/RelayChain.js +3 -0
- package/_cjs/src/types/RelayChain.js.map +1 -0
- package/_cjs/src/types/SignatureStepItem.js +3 -0
- package/_cjs/src/types/SignatureStepItem.js.map +1 -0
- package/_cjs/src/types/TransactionStepItem.js +3 -0
- package/_cjs/src/types/TransactionStepItem.js.map +1 -0
- package/_cjs/src/types/api.js +3 -0
- package/_cjs/src/types/api.js.map +1 -0
- package/_cjs/src/types/index.js +11 -0
- package/_cjs/src/types/index.js.map +1 -0
- package/_cjs/src/utils/axios.js +18 -0
- package/_cjs/src/utils/axios.js.map +1 -0
- package/_cjs/src/utils/chain.js +91 -0
- package/_cjs/src/utils/chain.js.map +1 -0
- package/_cjs/src/utils/executeSteps/index.js +298 -0
- package/_cjs/src/utils/executeSteps/index.js.map +1 -0
- package/_cjs/src/utils/executeSteps/signatureStep.js +186 -0
- package/_cjs/src/utils/executeSteps/signatureStep.js.map +1 -0
- package/_cjs/src/utils/executeSteps/transactionStep.js +74 -0
- package/_cjs/src/utils/executeSteps/transactionStep.js.map +1 -0
- package/_cjs/src/utils/executeSteps/websocketHandlers.js +112 -0
- package/_cjs/src/utils/executeSteps/websocketHandlers.js.map +1 -0
- package/_cjs/src/utils/fetchChainConfigs.js +20 -0
- package/_cjs/src/utils/fetchChainConfigs.js.map +1 -0
- package/_cjs/src/utils/getCurrentStepData.js +28 -0
- package/_cjs/src/utils/getCurrentStepData.js.map +1 -0
- package/_cjs/src/utils/getTenderlyDetails.js +24 -0
- package/_cjs/src/utils/getTenderlyDetails.js.map +1 -0
- package/_cjs/src/utils/hyperliquid.js +95 -0
- package/_cjs/src/utils/hyperliquid.js.map +1 -0
- package/_cjs/src/utils/index.js +39 -0
- package/_cjs/src/utils/index.js.map +1 -0
- package/_cjs/src/utils/logger.js +38 -0
- package/_cjs/src/utils/logger.js.map +1 -0
- package/_cjs/src/utils/params.js +21 -0
- package/_cjs/src/utils/params.js.map +1 -0
- package/_cjs/src/utils/pollApi.js +40 -0
- package/_cjs/src/utils/pollApi.js.map +1 -0
- package/_cjs/src/utils/prepareBatchTransaction.js +35 -0
- package/_cjs/src/utils/prepareBatchTransaction.js.map +1 -0
- package/_cjs/src/utils/prepareCallTransaction.js +14 -0
- package/_cjs/src/utils/prepareCallTransaction.js.map +1 -0
- package/_cjs/src/utils/repeatUntilOk.js +19 -0
- package/_cjs/src/utils/repeatUntilOk.js.map +1 -0
- package/_cjs/src/utils/request.js +48 -0
- package/_cjs/src/utils/request.js.map +1 -0
- package/_cjs/src/utils/simulateContract.js +8 -0
- package/_cjs/src/utils/simulateContract.js.map +1 -0
- package/_cjs/src/utils/structuredClone.js +11 -0
- package/_cjs/src/utils/structuredClone.js.map +1 -0
- package/_cjs/src/utils/transaction.js +351 -0
- package/_cjs/src/utils/transaction.js.map +1 -0
- package/_cjs/src/utils/viemWallet.js +211 -0
- package/_cjs/src/utils/viemWallet.js.map +1 -0
- package/_cjs/src/utils/websocket.js +76 -0
- package/_cjs/src/utils/websocket.js.map +1 -0
- package/_cjs/src/version.js +5 -0
- package/_cjs/src/version.js.map +1 -0
- package/_cjs/tsconfig.build.tsbuildinfo +1 -0
- package/_esm/package.json +1 -0
- package/_esm/src/actions/claimAppFees.js +54 -0
- package/_esm/src/actions/claimAppFees.js.map +1 -0
- package/_esm/src/actions/execute.js +83 -0
- package/_esm/src/actions/execute.js.map +1 -0
- package/_esm/src/actions/getAppFees.js +25 -0
- package/_esm/src/actions/getAppFees.js.map +1 -0
- package/_esm/src/actions/getPrice.js +53 -0
- package/_esm/src/actions/getPrice.js.map +1 -0
- package/_esm/src/actions/getQuote.js +92 -0
- package/_esm/src/actions/getQuote.js.map +1 -0
- package/_esm/src/actions/getSolverCapacity.js +18 -0
- package/_esm/src/actions/getSolverCapacity.js.map +1 -0
- package/_esm/src/actions/index.js +7 -0
- package/_esm/src/actions/index.js.map +1 -0
- package/_esm/src/client.js +217 -0
- package/_esm/src/client.js.map +1 -0
- package/_esm/src/constants/address.js +43 -0
- package/_esm/src/constants/address.js.map +1 -0
- package/_esm/src/constants/bvm.js +2 -0
- package/_esm/src/constants/bvm.js.map +1 -0
- package/_esm/src/constants/index.js +3 -0
- package/_esm/src/constants/index.js.map +1 -0
- package/_esm/src/constants/servers.js +7 -0
- package/_esm/src/constants/servers.js.map +1 -0
- package/_esm/src/errors/DepositTransactionTimeoutError.js +14 -0
- package/_esm/src/errors/DepositTransactionTimeoutError.js.map +1 -0
- package/_esm/src/errors/SolverStatusTimeoutError.js +14 -0
- package/_esm/src/errors/SolverStatusTimeoutError.js.map +1 -0
- package/_esm/src/errors/TransactionConfirmationError.js +21 -0
- package/_esm/src/errors/TransactionConfirmationError.js.map +1 -0
- package/_esm/src/errors/index.js +4 -0
- package/_esm/src/errors/index.js.map +1 -0
- package/_esm/src/index.js +7 -0
- package/_esm/src/index.js.map +1 -0
- package/_esm/src/routes/index.js +43 -0
- package/_esm/src/routes/index.js.map +1 -0
- package/_esm/src/types/AdaptedWallet.js +2 -0
- package/_esm/src/types/AdaptedWallet.js.map +1 -0
- package/_esm/src/types/Execute.js +2 -0
- package/_esm/src/types/Execute.js.map +1 -0
- package/_esm/src/types/Progress.js +2 -0
- package/_esm/src/types/Progress.js.map +1 -0
- package/_esm/src/types/RelayChain.js +2 -0
- package/_esm/src/types/RelayChain.js.map +1 -0
- package/_esm/src/types/SignatureStepItem.js +2 -0
- package/_esm/src/types/SignatureStepItem.js.map +1 -0
- package/_esm/src/types/TransactionStepItem.js +2 -0
- package/_esm/src/types/TransactionStepItem.js.map +1 -0
- package/_esm/src/types/api.js +6 -0
- package/_esm/src/types/api.js.map +1 -0
- package/_esm/src/types/index.js +8 -0
- package/_esm/src/types/index.js.map +1 -0
- package/_esm/src/utils/axios.js +15 -0
- package/_esm/src/utils/axios.js.map +1 -0
- package/_esm/src/utils/chain.js +86 -0
- package/_esm/src/utils/chain.js.map +1 -0
- package/_esm/src/utils/executeSteps/index.js +347 -0
- package/_esm/src/utils/executeSteps/index.js.map +1 -0
- package/_esm/src/utils/executeSteps/signatureStep.js +191 -0
- package/_esm/src/utils/executeSteps/signatureStep.js.map +1 -0
- package/_esm/src/utils/executeSteps/transactionStep.js +76 -0
- package/_esm/src/utils/executeSteps/transactionStep.js.map +1 -0
- package/_esm/src/utils/executeSteps/websocketHandlers.js +124 -0
- package/_esm/src/utils/executeSteps/websocketHandlers.js.map +1 -0
- package/_esm/src/utils/fetchChainConfigs.js +16 -0
- package/_esm/src/utils/fetchChainConfigs.js.map +1 -0
- package/_esm/src/utils/getCurrentStepData.js +24 -0
- package/_esm/src/utils/getCurrentStepData.js.map +1 -0
- package/_esm/src/utils/getTenderlyDetails.js +20 -0
- package/_esm/src/utils/getTenderlyDetails.js.map +1 -0
- package/_esm/src/utils/hyperliquid.js +90 -0
- package/_esm/src/utils/hyperliquid.js.map +1 -0
- package/_esm/src/utils/index.js +16 -0
- package/_esm/src/utils/index.js.map +1 -0
- package/_esm/src/utils/logger.js +34 -0
- package/_esm/src/utils/logger.js.map +1 -0
- package/_esm/src/utils/params.js +40 -0
- package/_esm/src/utils/params.js.map +1 -0
- package/_esm/src/utils/pollApi.js +57 -0
- package/_esm/src/utils/pollApi.js.map +1 -0
- package/_esm/src/utils/prepareBatchTransaction.js +31 -0
- package/_esm/src/utils/prepareBatchTransaction.js.map +1 -0
- package/_esm/src/utils/prepareCallTransaction.js +11 -0
- package/_esm/src/utils/prepareCallTransaction.js.map +1 -0
- package/_esm/src/utils/repeatUntilOk.js +23 -0
- package/_esm/src/utils/repeatUntilOk.js.map +1 -0
- package/_esm/src/utils/request.js +42 -0
- package/_esm/src/utils/request.js.map +1 -0
- package/_esm/src/utils/simulateContract.js +5 -0
- package/_esm/src/utils/simulateContract.js.map +1 -0
- package/_esm/src/utils/structuredClone.js +8 -0
- package/_esm/src/utils/structuredClone.js.map +1 -0
- package/_esm/src/utils/transaction.js +374 -0
- package/_esm/src/utils/transaction.js.map +1 -0
- package/_esm/src/utils/viemWallet.js +207 -0
- package/_esm/src/utils/viemWallet.js.map +1 -0
- package/_esm/src/utils/websocket.js +78 -0
- package/_esm/src/utils/websocket.js.map +1 -0
- package/_esm/src/version.js +2 -0
- package/_esm/src/version.js.map +1 -0
- package/_esm/tsconfig.build.tsbuildinfo +1 -0
- package/_types/src/actions/claimAppFees.d.ts +21 -0
- package/_types/src/actions/claimAppFees.d.ts.map +1 -0
- package/_types/src/actions/execute.d.ts +23 -0
- package/_types/src/actions/execute.d.ts.map +1 -0
- package/_types/src/actions/getAppFees.d.ts +12 -0
- package/_types/src/actions/getAppFees.d.ts.map +1 -0
- package/_types/src/actions/getPrice.d.ts +23 -0
- package/_types/src/actions/getPrice.d.ts.map +1 -0
- package/_types/src/actions/getQuote.d.ts +24 -0
- package/_types/src/actions/getQuote.d.ts.map +1 -0
- package/_types/src/actions/getSolverCapacity.d.ts +8 -0
- package/_types/src/actions/getSolverCapacity.d.ts.map +1 -0
- package/_types/src/actions/index.d.ts +7 -0
- package/_types/src/actions/index.d.ts.map +1 -0
- package/_types/src/client.d.ts +8039 -0
- package/_types/src/client.d.ts.map +1 -0
- package/_types/src/constants/address.d.ts +11 -0
- package/_types/src/constants/address.d.ts.map +1 -0
- package/_types/src/constants/bvm.d.ts +2 -0
- package/_types/src/constants/bvm.d.ts.map +1 -0
- package/_types/src/constants/index.d.ts +3 -0
- package/_types/src/constants/index.d.ts.map +1 -0
- package/_types/src/constants/servers.d.ts +6 -0
- package/_types/src/constants/servers.d.ts.map +1 -0
- package/_types/src/errors/DepositTransactionTimeoutError.d.ts +5 -0
- package/_types/src/errors/DepositTransactionTimeoutError.d.ts.map +1 -0
- package/_types/src/errors/SolverStatusTimeoutError.d.ts +5 -0
- package/_types/src/errors/SolverStatusTimeoutError.d.ts.map +1 -0
- package/_types/src/errors/TransactionConfirmationError.d.ts +9 -0
- package/_types/src/errors/TransactionConfirmationError.d.ts.map +1 -0
- package/_types/src/errors/index.d.ts +4 -0
- package/_types/src/errors/index.d.ts.map +1 -0
- package/_types/src/index.d.ts +7 -0
- package/_types/src/index.d.ts.map +1 -0
- package/_types/src/routes/index.d.ts +2 -0
- package/_types/src/routes/index.d.ts.map +1 -0
- package/_types/src/types/AdaptedWallet.d.ts +27 -0
- package/_types/src/types/AdaptedWallet.d.ts.map +1 -0
- package/_types/src/types/Execute.d.ts +64 -0
- package/_types/src/types/Execute.d.ts.map +1 -0
- package/_types/src/types/Progress.d.ts +17 -0
- package/_types/src/types/Progress.d.ts.map +1 -0
- package/_types/src/types/RelayChain.d.ts +47 -0
- package/_types/src/types/RelayChain.d.ts.map +1 -0
- package/_types/src/types/SignatureStepItem.d.ts +21 -0
- package/_types/src/types/SignatureStepItem.d.ts.map +1 -0
- package/_types/src/types/TransactionStepItem.d.ts +25 -0
- package/_types/src/types/TransactionStepItem.d.ts.map +1 -0
- package/_types/src/types/api.d.ts +4911 -0
- package/_types/src/types/api.d.ts.map +1 -0
- package/_types/src/types/index.d.ts +8 -0
- package/_types/src/types/index.d.ts.map +1 -0
- package/_types/src/utils/axios.d.ts +2 -0
- package/_types/src/utils/axios.d.ts.map +1 -0
- package/_types/src/utils/chain.d.ts +7 -0
- package/_types/src/utils/chain.d.ts.map +1 -0
- package/_types/src/utils/executeSteps/index.d.ts +34 -0
- package/_types/src/utils/executeSteps/index.d.ts.map +1 -0
- package/_types/src/utils/executeSteps/signatureStep.d.ts +21 -0
- package/_types/src/utils/executeSteps/signatureStep.d.ts.map +1 -0
- package/_types/src/utils/executeSteps/transactionStep.d.ts +25 -0
- package/_types/src/utils/executeSteps/transactionStep.d.ts.map +1 -0
- package/_types/src/utils/executeSteps/websocketHandlers.d.ts +21 -0
- package/_types/src/utils/executeSteps/websocketHandlers.d.ts.map +1 -0
- package/_types/src/utils/fetchChainConfigs.d.ts +3 -0
- package/_types/src/utils/fetchChainConfigs.d.ts.map +1 -0
- package/_types/src/utils/getCurrentStepData.d.ts +80 -0
- package/_types/src/utils/getCurrentStepData.d.ts.map +1 -0
- package/_types/src/utils/getTenderlyDetails.d.ts +6 -0
- package/_types/src/utils/getTenderlyDetails.d.ts.map +1 -0
- package/_types/src/utils/hyperliquid.d.ts +49 -0
- package/_types/src/utils/hyperliquid.d.ts.map +1 -0
- package/_types/src/utils/index.d.ts +16 -0
- package/_types/src/utils/index.d.ts.map +1 -0
- package/_types/src/utils/logger.d.ts +9 -0
- package/_types/src/utils/logger.d.ts.map +1 -0
- package/_types/src/utils/params.d.ts +27 -0
- package/_types/src/utils/params.d.ts.map +1 -0
- package/_types/src/utils/pollApi.d.ts +22 -0
- package/_types/src/utils/pollApi.d.ts.map +1 -0
- package/_types/src/utils/prepareBatchTransaction.d.ts +41 -0
- package/_types/src/utils/prepareBatchTransaction.d.ts.map +1 -0
- package/_types/src/utils/prepareCallTransaction.d.ts +6 -0
- package/_types/src/utils/prepareCallTransaction.d.ts.map +1 -0
- package/_types/src/utils/repeatUntilOk.d.ts +10 -0
- package/_types/src/utils/repeatUntilOk.d.ts.map +1 -0
- package/_types/src/utils/request.d.ts +11 -0
- package/_types/src/utils/request.d.ts.map +1 -0
- package/_types/src/utils/simulateContract.d.ts +4 -0
- package/_types/src/utils/simulateContract.d.ts.map +1 -0
- package/_types/src/utils/structuredClone.d.ts +2 -0
- package/_types/src/utils/structuredClone.d.ts.map +1 -0
- package/_types/src/utils/transaction.d.ts +12 -0
- package/_types/src/utils/transaction.d.ts.map +1 -0
- package/_types/src/utils/viemWallet.d.ts +5 -0
- package/_types/src/utils/viemWallet.d.ts.map +1 -0
- package/_types/src/utils/websocket.d.ts +30 -0
- package/_types/src/utils/websocket.d.ts.map +1 -0
- package/_types/src/version.d.ts +2 -0
- package/_types/src/version.d.ts.map +1 -0
- package/_types/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +57 -0
- package/readme.md +37 -0
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
import { getClient, RelayClient } from '../../client.js';
|
|
2
|
+
import { LogLevel } from '../logger.js';
|
|
3
|
+
import { prepareHyperliquidSignatureStep } from '../../utils/index.js';
|
|
4
|
+
import { canBatchTransactions, prepareBatchTransaction } from '../prepareBatchTransaction.js';
|
|
5
|
+
import { handleSignatureStepItem } from './signatureStep.js';
|
|
6
|
+
import { handleTransactionStepItem } from './transactionStep.js';
|
|
7
|
+
import { trackRequestStatus, extractDepositRequestId } from '../websocket.js';
|
|
8
|
+
import { handleWebSocketUpdate } from './websocketHandlers.js';
|
|
9
|
+
/**
|
|
10
|
+
* This function orchestrates the execution of multi-step operations returned from the Relay Quote API,
|
|
11
|
+
* such as bridging, swapping tokens, or performing cross-chain calls. It handles transaction
|
|
12
|
+
* signing, submission, and validation while providing real-time progress updates through the setState callback.
|
|
13
|
+
*
|
|
14
|
+
* @param chainId - The origin chain ID for execution
|
|
15
|
+
* @param request - AxiosRequestConfig for API requests
|
|
16
|
+
* @param wallet - Wallet adapter implementing the {@link AdaptedWallet} interface
|
|
17
|
+
* @param setState - Callback function to update UI state during execution progress
|
|
18
|
+
* @param newJson - Execute object containing the steps, fees, and details from Relay Quote API
|
|
19
|
+
* @param stepOptions - Optional configuration for specific steps (e.g., gas limits)
|
|
20
|
+
* @param sharedStatusControl - Optional shared status control object for coordinating WebSocket/polling across recursive calls
|
|
21
|
+
* @returns Promise<Execute> - The final execution result with updated status
|
|
22
|
+
*/
|
|
23
|
+
export async function executeSteps(chainId, request = {}, wallet, setState, newJson, stepOptions, sharedStatusControl) {
|
|
24
|
+
const client = getClient();
|
|
25
|
+
if (client?.baseApiUrl) {
|
|
26
|
+
request.baseURL = client.baseApiUrl;
|
|
27
|
+
}
|
|
28
|
+
const pollingInterval = client.pollingInterval ?? 5000;
|
|
29
|
+
const maximumAttempts = client.maxPollingAttemptsBeforeTimeout ??
|
|
30
|
+
(2.5 * 60 * 1000) / pollingInterval;
|
|
31
|
+
const chain = client.chains.find((chain) => chain.id === chainId);
|
|
32
|
+
if (!chain) {
|
|
33
|
+
throw `Unable to find chain: Chain id ${chainId}`;
|
|
34
|
+
}
|
|
35
|
+
let json = newJson;
|
|
36
|
+
let isAtomicBatchSupported = false;
|
|
37
|
+
// Manage WebSocket and polling coordination
|
|
38
|
+
const statusControl = sharedStatusControl || {
|
|
39
|
+
websocketActive: false,
|
|
40
|
+
websocketConnected: false,
|
|
41
|
+
closeWebSocket: undefined,
|
|
42
|
+
lastKnownStatus: undefined,
|
|
43
|
+
websocketFailureTimeoutId: null
|
|
44
|
+
};
|
|
45
|
+
// WebSocket terminal status promise - rejects when failure/refund status received
|
|
46
|
+
let terminalStatusPromise = null;
|
|
47
|
+
let rejectTerminalStatus = null;
|
|
48
|
+
// Promise-based approach for WebSocket failure handling
|
|
49
|
+
let websocketFailedPromise = null;
|
|
50
|
+
let resolveWebsocketFailed = null;
|
|
51
|
+
const onWebsocketFailed = () => {
|
|
52
|
+
if (!websocketFailedPromise) {
|
|
53
|
+
websocketFailedPromise = new Promise((resolve) => {
|
|
54
|
+
resolveWebsocketFailed = resolve;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return websocketFailedPromise;
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
// Handle errors
|
|
61
|
+
if (json.error || !json.steps)
|
|
62
|
+
throw json;
|
|
63
|
+
// Check if step's transactions can be batched and if wallet supports atomic batch (EIP-5792)
|
|
64
|
+
// If so, manipulate steps to batch transactions
|
|
65
|
+
if (canBatchTransactions(json.steps)) {
|
|
66
|
+
isAtomicBatchSupported = Boolean(wallet?.supportsAtomicBatch &&
|
|
67
|
+
(await wallet?.supportsAtomicBatch(chainId)));
|
|
68
|
+
if (isAtomicBatchSupported) {
|
|
69
|
+
const batchedStep = prepareBatchTransaction(json.steps);
|
|
70
|
+
json.steps = [batchedStep];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Check if Hyperliquid and if so, rewrite steps to become a signature step
|
|
74
|
+
if (chainId === 1337 &&
|
|
75
|
+
json.steps[0] &&
|
|
76
|
+
json.steps[0].id !== 'sign') {
|
|
77
|
+
const activeWalletChainId = await wallet?.getChainId();
|
|
78
|
+
const signatureStep = prepareHyperliquidSignatureStep(json.steps, activeWalletChainId);
|
|
79
|
+
json.steps = [signatureStep];
|
|
80
|
+
}
|
|
81
|
+
// Update state on first call or recursion
|
|
82
|
+
setState({
|
|
83
|
+
steps: [...json?.steps],
|
|
84
|
+
fees: { ...json?.fees },
|
|
85
|
+
breakdown: json?.breakdown,
|
|
86
|
+
details: json?.details
|
|
87
|
+
});
|
|
88
|
+
let incompleteStepIndex = -1;
|
|
89
|
+
let incompleteStepItemIndex = -1;
|
|
90
|
+
json.steps.find((step, i) => {
|
|
91
|
+
if (!step.items) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
incompleteStepItemIndex = step.items.findIndex((item) => item.status == 'incomplete');
|
|
95
|
+
if (incompleteStepItemIndex !== -1) {
|
|
96
|
+
incompleteStepIndex = i;
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
// There are no more incomplete steps
|
|
101
|
+
if (incompleteStepIndex === -1) {
|
|
102
|
+
client.log(['Execute Steps: all steps complete'], LogLevel.Verbose);
|
|
103
|
+
// Clean up WebSocket and failure timeout if execution is complete
|
|
104
|
+
statusControl.closeWebSocket?.();
|
|
105
|
+
clearFailureTimeout(statusControl, client);
|
|
106
|
+
return json;
|
|
107
|
+
}
|
|
108
|
+
const step = json.steps[incompleteStepIndex];
|
|
109
|
+
if (stepOptions && stepOptions[step.id]) {
|
|
110
|
+
const currentStepOptions = stepOptions[step.id];
|
|
111
|
+
step.items?.forEach((stepItem) => {
|
|
112
|
+
if (currentStepOptions.gasLimit) {
|
|
113
|
+
stepItem.data.gas = currentStepOptions.gasLimit;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
let stepItems = json.steps[incompleteStepIndex].items;
|
|
118
|
+
if (!stepItems) {
|
|
119
|
+
client.log(['Execute Steps: skipping step, no items in step'], LogLevel.Verbose);
|
|
120
|
+
return json;
|
|
121
|
+
}
|
|
122
|
+
// =============================================
|
|
123
|
+
// WebSocket Setup for Real-Time Status Updates
|
|
124
|
+
// =============================================
|
|
125
|
+
// We initialize the WebSocket connection before awaiting the step execution promises.
|
|
126
|
+
//
|
|
127
|
+
// The WebSocket is only used when all of these conditions are met:
|
|
128
|
+
// - WebSocket is enabled in the client configuration
|
|
129
|
+
// - We have a valid requestId
|
|
130
|
+
// - We're on the last step of execution
|
|
131
|
+
// - The step has incomplete items
|
|
132
|
+
// - WebSocket isn't already active
|
|
133
|
+
// - The origin and destination chain is not bitcoin
|
|
134
|
+
const isLastStep = incompleteStepIndex === json.steps.length - 1;
|
|
135
|
+
const isStepIncomplete = stepItems.some((item) => item.status === 'incomplete');
|
|
136
|
+
const requestId = extractDepositRequestId(json.steps);
|
|
137
|
+
if (client.websocketEnabled &&
|
|
138
|
+
requestId &&
|
|
139
|
+
isLastStep &&
|
|
140
|
+
isStepIncomplete &&
|
|
141
|
+
!statusControl.websocketActive &&
|
|
142
|
+
chainId !== 8253038 &&
|
|
143
|
+
json?.details?.currencyOut?.currency?.chainId !== 8253038) {
|
|
144
|
+
statusControl.websocketActive = true;
|
|
145
|
+
// Create the promises immediately so they're available for early failures
|
|
146
|
+
websocketFailedPromise = new Promise((resolve) => {
|
|
147
|
+
resolveWebsocketFailed = resolve;
|
|
148
|
+
});
|
|
149
|
+
terminalStatusPromise = new Promise((_, reject) => {
|
|
150
|
+
rejectTerminalStatus = reject;
|
|
151
|
+
});
|
|
152
|
+
statusControl.closeWebSocket = trackRequestStatus({
|
|
153
|
+
event: 'request.status.updated',
|
|
154
|
+
requestId: requestId,
|
|
155
|
+
enabled: true,
|
|
156
|
+
url: client.websocketUrl,
|
|
157
|
+
onOpen: () => {
|
|
158
|
+
client.log(['Websocket open'], LogLevel.Verbose);
|
|
159
|
+
statusControl.websocketConnected = true;
|
|
160
|
+
},
|
|
161
|
+
onUpdate: (data) => {
|
|
162
|
+
handleWebSocketUpdate({
|
|
163
|
+
data,
|
|
164
|
+
stepItems,
|
|
165
|
+
chainId,
|
|
166
|
+
setState,
|
|
167
|
+
json,
|
|
168
|
+
client,
|
|
169
|
+
statusControl,
|
|
170
|
+
onTerminalError: (error) => {
|
|
171
|
+
// Immediately reject when terminal status received
|
|
172
|
+
rejectTerminalStatus?.(error);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
},
|
|
176
|
+
onError: (err) => {
|
|
177
|
+
// Handle WebSocket connection/network errors by falling back to polling
|
|
178
|
+
if (!['success', 'refund'].includes(statusControl.lastKnownStatus || '')) {
|
|
179
|
+
client.log(['Websocket connection error, falling back to polling', err], LogLevel.Verbose);
|
|
180
|
+
statusControl.websocketActive = false;
|
|
181
|
+
statusControl.websocketConnected = false;
|
|
182
|
+
// Clean up any pending failure timeout when WebSocket errors
|
|
183
|
+
clearFailureTimeout(statusControl, client);
|
|
184
|
+
// Trigger the websocket failed promise to start polling fallback
|
|
185
|
+
resolveWebsocketFailed?.();
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
onClose: () => {
|
|
189
|
+
client.log(['Websocket closed'], LogLevel.Verbose);
|
|
190
|
+
// Clean up any pending failure timeout when WebSocket closes
|
|
191
|
+
clearFailureTimeout(statusControl, client);
|
|
192
|
+
// Only re-enable polling if we haven't reached a terminal state
|
|
193
|
+
if (!['success', 'refund'].includes(statusControl.lastKnownStatus || '') &&
|
|
194
|
+
!stepItems[0].error) {
|
|
195
|
+
client.log(['Re-enabling polling due to unexpected WebSocket closure'], LogLevel.Verbose);
|
|
196
|
+
// Trigger the websocket failed promise to start polling
|
|
197
|
+
resolveWebsocketFailed?.();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}).close;
|
|
201
|
+
}
|
|
202
|
+
let { kind } = step;
|
|
203
|
+
client.log([`Execute Steps: Begin processing step items for: ${step.action}`], LogLevel.Verbose);
|
|
204
|
+
const promises = stepItems
|
|
205
|
+
.filter((stepItem) => stepItem.status === 'incomplete')
|
|
206
|
+
.map((stepItem) => {
|
|
207
|
+
return new Promise(async (resolve, reject) => {
|
|
208
|
+
try {
|
|
209
|
+
// Create step execution promise
|
|
210
|
+
const stepExecutionPromise = (async () => {
|
|
211
|
+
// Handle each step based on it's kind
|
|
212
|
+
switch (kind) {
|
|
213
|
+
// Make an on-chain transaction
|
|
214
|
+
case 'transaction': {
|
|
215
|
+
await handleTransactionStepItem({
|
|
216
|
+
stepItem: stepItem,
|
|
217
|
+
step,
|
|
218
|
+
wallet,
|
|
219
|
+
setState,
|
|
220
|
+
request,
|
|
221
|
+
client,
|
|
222
|
+
json,
|
|
223
|
+
chainId,
|
|
224
|
+
isAtomicBatchSupported,
|
|
225
|
+
incompleteStepItemIndex,
|
|
226
|
+
stepItems,
|
|
227
|
+
onWebsocketFailed: statusControl.websocketActive
|
|
228
|
+
? onWebsocketFailed
|
|
229
|
+
: null,
|
|
230
|
+
statusControl
|
|
231
|
+
});
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
// Sign a message
|
|
235
|
+
case 'signature': {
|
|
236
|
+
await handleSignatureStepItem({
|
|
237
|
+
stepItem,
|
|
238
|
+
step,
|
|
239
|
+
wallet,
|
|
240
|
+
setState,
|
|
241
|
+
request,
|
|
242
|
+
client,
|
|
243
|
+
json,
|
|
244
|
+
maximumAttempts,
|
|
245
|
+
pollingInterval,
|
|
246
|
+
chain,
|
|
247
|
+
onWebsocketFailed: statusControl.websocketActive
|
|
248
|
+
? onWebsocketFailed
|
|
249
|
+
: null
|
|
250
|
+
});
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
default:
|
|
254
|
+
throw new Error(`Unknown step kind: ${kind}. Expected 'signature' or 'transaction'`);
|
|
255
|
+
}
|
|
256
|
+
})();
|
|
257
|
+
// Allow WebSocket terminal status (failure/refund) to immediately interrupt and stop step execution
|
|
258
|
+
if (statusControl.websocketActive && terminalStatusPromise) {
|
|
259
|
+
await Promise.race([stepExecutionPromise, terminalStatusPromise]);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
await stepExecutionPromise;
|
|
263
|
+
}
|
|
264
|
+
// Mark step item as complete
|
|
265
|
+
stepItem.status = 'complete';
|
|
266
|
+
stepItem.progressState = 'complete';
|
|
267
|
+
stepItem.isValidatingSignature = false;
|
|
268
|
+
setState({
|
|
269
|
+
steps: [...json?.steps],
|
|
270
|
+
fees: { ...json?.fees },
|
|
271
|
+
breakdown: json?.breakdown,
|
|
272
|
+
details: json?.details
|
|
273
|
+
});
|
|
274
|
+
resolve(stepItem);
|
|
275
|
+
}
|
|
276
|
+
catch (e) {
|
|
277
|
+
const error = e;
|
|
278
|
+
const errorMessage = error
|
|
279
|
+
? error.message
|
|
280
|
+
: 'Error: something went wrong';
|
|
281
|
+
if (error && json?.steps) {
|
|
282
|
+
json.steps[incompleteStepIndex].error = errorMessage;
|
|
283
|
+
stepItem.error = errorMessage;
|
|
284
|
+
stepItem.errorData = e?.response?.data || e;
|
|
285
|
+
stepItem.isValidatingSignature = false;
|
|
286
|
+
setState({
|
|
287
|
+
steps: [...json?.steps],
|
|
288
|
+
fees: { ...json?.fees },
|
|
289
|
+
breakdown: json?.breakdown,
|
|
290
|
+
details: json?.details
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
reject(error);
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
await Promise.all(promises);
|
|
298
|
+
// Recursively call executeSteps()
|
|
299
|
+
const result = await executeSteps(chainId, request, wallet, setState, json, stepOptions, statusControl);
|
|
300
|
+
// Clean up WebSocket and failure timeout if execution completes
|
|
301
|
+
statusControl.closeWebSocket?.();
|
|
302
|
+
clearFailureTimeout(statusControl, client);
|
|
303
|
+
return result;
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
client.log(['Execute Steps: An error occurred', err], LogLevel.Error);
|
|
307
|
+
// Clean up WebSocket and failure timeout on error
|
|
308
|
+
statusControl.closeWebSocket?.();
|
|
309
|
+
clearFailureTimeout(statusControl, client);
|
|
310
|
+
const error = err && err?.response?.data ? err.response.data : err;
|
|
311
|
+
let refunded = false;
|
|
312
|
+
if (error && error.message) {
|
|
313
|
+
refunded = error.message.includes('Refunded');
|
|
314
|
+
}
|
|
315
|
+
else if (error && error.includes) {
|
|
316
|
+
refunded = error.includes('Refunded');
|
|
317
|
+
}
|
|
318
|
+
if (json) {
|
|
319
|
+
json.error = error;
|
|
320
|
+
setState({
|
|
321
|
+
steps: json.steps ? [...json.steps] : [{}],
|
|
322
|
+
fees: { ...json?.fees },
|
|
323
|
+
breakdown: json?.breakdown,
|
|
324
|
+
details: json?.details,
|
|
325
|
+
refunded: refunded,
|
|
326
|
+
error
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
json = {
|
|
331
|
+
error,
|
|
332
|
+
steps: [],
|
|
333
|
+
refunded
|
|
334
|
+
};
|
|
335
|
+
setState(json);
|
|
336
|
+
}
|
|
337
|
+
throw err;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
function clearFailureTimeout(statusControl, client) {
|
|
341
|
+
if (statusControl.websocketFailureTimeoutId) {
|
|
342
|
+
clearTimeout(statusControl.websocketFailureTimeoutId);
|
|
343
|
+
statusControl.websocketFailureTimeoutId = null;
|
|
344
|
+
client.log(['Cleared failure timeout during cleanup'], LogLevel.Verbose);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/executeSteps/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { axios } from '../index.js';
|
|
2
|
+
import { LogLevel } from '../logger.js';
|
|
3
|
+
import { sendUsd } from '../hyperliquid.js';
|
|
4
|
+
/**
|
|
5
|
+
* Handles the execution of a signature step item, including signing, posting, and validation.
|
|
6
|
+
*/
|
|
7
|
+
export async function handleSignatureStepItem({ stepItem, step, wallet, setState, request, client, json, maximumAttempts, pollingInterval, chain, onWebsocketFailed }) {
|
|
8
|
+
if (!stepItem.data) {
|
|
9
|
+
throw `Step item is missing data`;
|
|
10
|
+
}
|
|
11
|
+
let signature;
|
|
12
|
+
const signData = stepItem.data['sign'];
|
|
13
|
+
const postData = stepItem.data['post'];
|
|
14
|
+
client.log(['Execute Steps: Begin signature step'], LogLevel.Verbose);
|
|
15
|
+
if (signData) {
|
|
16
|
+
stepItem.progressState = 'signing';
|
|
17
|
+
setState({
|
|
18
|
+
steps: [...json.steps],
|
|
19
|
+
fees: { ...json?.fees },
|
|
20
|
+
breakdown: json?.breakdown,
|
|
21
|
+
details: json?.details
|
|
22
|
+
});
|
|
23
|
+
signature = await wallet.handleSignMessageStep(stepItem, step);
|
|
24
|
+
if (signature) {
|
|
25
|
+
request.params = {
|
|
26
|
+
...request.params,
|
|
27
|
+
signature
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (chain.id === 1337 && signature) {
|
|
32
|
+
await sendUsd(client, signature, stepItem);
|
|
33
|
+
}
|
|
34
|
+
if (postData) {
|
|
35
|
+
client.log(['Execute Steps: Posting order'], LogLevel.Verbose);
|
|
36
|
+
stepItem.progressState = 'posting';
|
|
37
|
+
setState({
|
|
38
|
+
steps: [...json.steps],
|
|
39
|
+
fees: { ...json?.fees },
|
|
40
|
+
breakdown: json?.breakdown,
|
|
41
|
+
details: json?.details
|
|
42
|
+
});
|
|
43
|
+
const postOrderUrl = new URL(`${request.baseURL}${postData.endpoint}`);
|
|
44
|
+
const headers = {
|
|
45
|
+
'Content-Type': 'application/json'
|
|
46
|
+
};
|
|
47
|
+
if (postData.body && !postData.body.referrer) {
|
|
48
|
+
postData.body.referrer = client.source;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const getData = async function () {
|
|
52
|
+
let response = await axios.request({
|
|
53
|
+
url: postOrderUrl.href,
|
|
54
|
+
data: postData.body ? JSON.stringify(postData.body) : undefined,
|
|
55
|
+
method: postData.method,
|
|
56
|
+
params: request.params,
|
|
57
|
+
headers
|
|
58
|
+
});
|
|
59
|
+
return response;
|
|
60
|
+
};
|
|
61
|
+
const res = await getData();
|
|
62
|
+
// Append new steps if returned in response
|
|
63
|
+
if (res.data && res.data.steps && Array.isArray(res.data.steps)) {
|
|
64
|
+
json.steps = [...json.steps, ...res.data.steps];
|
|
65
|
+
setState({
|
|
66
|
+
steps: [...json.steps, ...res.data.steps],
|
|
67
|
+
fees: { ...json.fees },
|
|
68
|
+
breakdown: json.breakdown,
|
|
69
|
+
details: json.details
|
|
70
|
+
});
|
|
71
|
+
client.log([
|
|
72
|
+
`Execute Steps: New steps appended from ${postData.endpoint}`,
|
|
73
|
+
res.data.steps
|
|
74
|
+
], LogLevel.Verbose);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (res.status > 299 || res.status < 200)
|
|
78
|
+
throw res.data;
|
|
79
|
+
if (res.data.results) {
|
|
80
|
+
stepItem.orderData = res.data.results;
|
|
81
|
+
}
|
|
82
|
+
else if (res.data && res.data.orderId) {
|
|
83
|
+
stepItem.orderData = [
|
|
84
|
+
{
|
|
85
|
+
orderId: res.data.orderId,
|
|
86
|
+
crossPostingOrderId: res.data.crossPostingOrderId,
|
|
87
|
+
orderIndex: res.data.orderIndex || 0
|
|
88
|
+
}
|
|
89
|
+
];
|
|
90
|
+
}
|
|
91
|
+
setState({
|
|
92
|
+
steps: [...json?.steps],
|
|
93
|
+
fees: { ...json?.fees },
|
|
94
|
+
breakdown: json?.breakdown,
|
|
95
|
+
details: json?.details
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// If check, poll check until validated
|
|
103
|
+
if (stepItem?.check) {
|
|
104
|
+
stepItem.progressState = 'validating';
|
|
105
|
+
setState({
|
|
106
|
+
steps: [...json.steps],
|
|
107
|
+
fees: { ...json?.fees },
|
|
108
|
+
breakdown: json?.breakdown,
|
|
109
|
+
details: json?.details
|
|
110
|
+
});
|
|
111
|
+
stepItem.isValidatingSignature = true;
|
|
112
|
+
setState({
|
|
113
|
+
steps: [...json?.steps],
|
|
114
|
+
fees: { ...json?.fees },
|
|
115
|
+
breakdown: json?.breakdown,
|
|
116
|
+
details: json?.details
|
|
117
|
+
});
|
|
118
|
+
const headers = {
|
|
119
|
+
'Content-Type': 'application/json'
|
|
120
|
+
};
|
|
121
|
+
// If websocket is enabled, wait for it to fail before falling back to polling
|
|
122
|
+
if (onWebsocketFailed) {
|
|
123
|
+
client.log([
|
|
124
|
+
'Waiting for WebSocket to fail before starting signature validation polling'
|
|
125
|
+
], LogLevel.Verbose);
|
|
126
|
+
try {
|
|
127
|
+
await onWebsocketFailed();
|
|
128
|
+
client.log(['WebSocket failed, starting signature polling'], LogLevel.Verbose);
|
|
129
|
+
}
|
|
130
|
+
catch (e) {
|
|
131
|
+
client.log(['WebSocket failed promise rejected, skipping signature polling'], LogLevel.Verbose);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Start polling for signature validation
|
|
136
|
+
const pollWithCancellation = async () => {
|
|
137
|
+
let attemptCount = 0;
|
|
138
|
+
while (attemptCount < maximumAttempts) {
|
|
139
|
+
try {
|
|
140
|
+
const res = await axios.request({
|
|
141
|
+
url: `${request.baseURL}${stepItem?.check?.endpoint}`,
|
|
142
|
+
method: stepItem?.check?.method,
|
|
143
|
+
headers
|
|
144
|
+
});
|
|
145
|
+
client.log([`Execute Steps: Polling execute status to check if indexed`, res], LogLevel.Verbose);
|
|
146
|
+
// Check status
|
|
147
|
+
if (res?.data?.status === 'success' && res?.data?.txHashes) {
|
|
148
|
+
const chainTxHashes = res.data?.txHashes?.map((hash) => {
|
|
149
|
+
return {
|
|
150
|
+
txHash: hash,
|
|
151
|
+
chainId: res.data.destinationChainId ?? chain?.id
|
|
152
|
+
};
|
|
153
|
+
});
|
|
154
|
+
if (res?.data?.inTxHashes) {
|
|
155
|
+
const chainInTxHashes = res.data.inTxHashes.map((hash) => {
|
|
156
|
+
return {
|
|
157
|
+
txHash: hash,
|
|
158
|
+
chainId: chain?.id ?? res.data.originChainId
|
|
159
|
+
};
|
|
160
|
+
});
|
|
161
|
+
stepItem.internalTxHashes = chainInTxHashes;
|
|
162
|
+
}
|
|
163
|
+
stepItem.txHashes = chainTxHashes;
|
|
164
|
+
return; // Success - exit polling
|
|
165
|
+
}
|
|
166
|
+
else if (res?.data?.status === 'failure') {
|
|
167
|
+
throw Error(res?.data?.details || 'Transaction failed');
|
|
168
|
+
}
|
|
169
|
+
else if (res?.data?.status === 'delayed') {
|
|
170
|
+
stepItem.progressState = 'validating_delayed';
|
|
171
|
+
setState({
|
|
172
|
+
steps: [...json?.steps],
|
|
173
|
+
fees: { ...json?.fees },
|
|
174
|
+
breakdown: json?.breakdown,
|
|
175
|
+
details: json?.details
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
attemptCount++;
|
|
179
|
+
await new Promise((resolve) => setTimeout(resolve, pollingInterval));
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
throw error;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Max attempts reached
|
|
186
|
+
throw new Error(`Failed to get an ok response after ${attemptCount} attempt(s), aborting`);
|
|
187
|
+
};
|
|
188
|
+
await pollWithCancellation();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=signatureStep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signatureStep.js","sourceRoot":"","sources":["../../../../src/utils/executeSteps/signatureStep.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { sendTransactionSafely } from '../transaction.js';
|
|
2
|
+
import { LogLevel } from '../logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handles the execution of a transaction step item, including transaction submission and validation.
|
|
5
|
+
*/
|
|
6
|
+
export async function handleTransactionStepItem({ stepItem, step, wallet, setState, request, client, json, chainId, isAtomicBatchSupported, incompleteStepItemIndex, stepItems, onWebsocketFailed, statusControl }) {
|
|
7
|
+
if (!stepItem.data) {
|
|
8
|
+
throw `Step item is missing data`;
|
|
9
|
+
}
|
|
10
|
+
client.log(['Execute Steps: Begin transaction step for, sending transaction'], LogLevel.Verbose);
|
|
11
|
+
// if chainId is present in the tx data field then you should relay the tx on that chain
|
|
12
|
+
// otherwise, it's assumed the chain id matched the network the api request was made on
|
|
13
|
+
const transactionChainId = stepItem.data?.chainId ?? chainId;
|
|
14
|
+
const crossChainIntentChainId = chainId;
|
|
15
|
+
stepItem.progressState = 'confirming';
|
|
16
|
+
setState({
|
|
17
|
+
steps: [...json.steps],
|
|
18
|
+
fees: { ...json?.fees },
|
|
19
|
+
breakdown: json?.breakdown,
|
|
20
|
+
details: json?.details
|
|
21
|
+
});
|
|
22
|
+
// If atomic batch is supported and first item in step, batch all items in the step
|
|
23
|
+
const transactionStepItems = isAtomicBatchSupported && incompleteStepItemIndex === 0
|
|
24
|
+
? stepItems
|
|
25
|
+
: stepItem;
|
|
26
|
+
await sendTransactionSafely(transactionChainId, transactionStepItems, step, wallet, (txHashes) => {
|
|
27
|
+
client.log(['Execute Steps: Transaction step, got transactions', txHashes], LogLevel.Verbose);
|
|
28
|
+
stepItem.txHashes = txHashes;
|
|
29
|
+
setState({
|
|
30
|
+
steps: [...json.steps],
|
|
31
|
+
fees: { ...json?.fees },
|
|
32
|
+
breakdown: json?.breakdown,
|
|
33
|
+
details: json?.details
|
|
34
|
+
});
|
|
35
|
+
}, (internalTxHashes) => {
|
|
36
|
+
stepItem.internalTxHashes = internalTxHashes;
|
|
37
|
+
setState({
|
|
38
|
+
steps: [...json.steps],
|
|
39
|
+
fees: { ...json?.fees },
|
|
40
|
+
breakdown: json?.breakdown,
|
|
41
|
+
details: json?.details
|
|
42
|
+
});
|
|
43
|
+
}, onWebsocketFailed, request, undefined, crossChainIntentChainId, (res) => {
|
|
44
|
+
if (res && res.data.status === 'delayed') {
|
|
45
|
+
stepItem.progressState = 'validating_delayed';
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
stepItem.progressState = 'validating';
|
|
49
|
+
}
|
|
50
|
+
setState({
|
|
51
|
+
steps: [...json.steps],
|
|
52
|
+
fees: { ...json?.fees },
|
|
53
|
+
breakdown: json?.breakdown,
|
|
54
|
+
details: json?.details
|
|
55
|
+
});
|
|
56
|
+
}, json?.details, (receipt) => {
|
|
57
|
+
stepItem.receipt = receipt;
|
|
58
|
+
setState({
|
|
59
|
+
steps: [...json.steps],
|
|
60
|
+
fees: { ...json?.fees },
|
|
61
|
+
breakdown: json?.breakdown,
|
|
62
|
+
details: json?.details
|
|
63
|
+
});
|
|
64
|
+
}, (checkStatus) => {
|
|
65
|
+
if (checkStatus != stepItem.checkStatus) {
|
|
66
|
+
stepItem.checkStatus = checkStatus;
|
|
67
|
+
setState({
|
|
68
|
+
steps: [...json.steps],
|
|
69
|
+
fees: { ...json?.fees },
|
|
70
|
+
breakdown: json?.breakdown,
|
|
71
|
+
details: json?.details
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}, statusControl);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=transactionStep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionStep.js","sourceRoot":"","sources":["../../../../src/utils/executeSteps/transactionStep.ts"],"names":[],"mappings":"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"}
|