@metamask-previews/bridge-status-controller 33.0.0-preview-5bfc4b6a → 34.0.0-preview-52f43d2

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.
Files changed (40) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/dist/bridge-status-controller.cjs +104 -77
  3. package/dist/bridge-status-controller.cjs.map +1 -1
  4. package/dist/bridge-status-controller.d.cts +3 -1
  5. package/dist/bridge-status-controller.d.cts.map +1 -1
  6. package/dist/bridge-status-controller.d.mts +3 -1
  7. package/dist/bridge-status-controller.d.mts.map +1 -1
  8. package/dist/bridge-status-controller.mjs +106 -79
  9. package/dist/bridge-status-controller.mjs.map +1 -1
  10. package/dist/types.cjs.map +1 -1
  11. package/dist/types.d.cts +1 -0
  12. package/dist/types.d.cts.map +1 -1
  13. package/dist/types.d.mts +1 -0
  14. package/dist/types.d.mts.map +1 -1
  15. package/dist/types.mjs.map +1 -1
  16. package/dist/utils/gas.cjs +34 -1
  17. package/dist/utils/gas.cjs.map +1 -1
  18. package/dist/utils/gas.d.cts +7 -0
  19. package/dist/utils/gas.d.cts.map +1 -1
  20. package/dist/utils/gas.d.mts +7 -0
  21. package/dist/utils/gas.d.mts.map +1 -1
  22. package/dist/utils/gas.mjs +32 -0
  23. package/dist/utils/gas.mjs.map +1 -1
  24. package/dist/utils/metrics.cjs +9 -4
  25. package/dist/utils/metrics.cjs.map +1 -1
  26. package/dist/utils/metrics.d.cts +1 -1
  27. package/dist/utils/metrics.d.cts.map +1 -1
  28. package/dist/utils/metrics.d.mts +1 -1
  29. package/dist/utils/metrics.d.mts.map +1 -1
  30. package/dist/utils/metrics.mjs +9 -4
  31. package/dist/utils/metrics.mjs.map +1 -1
  32. package/dist/utils/transaction.cjs +100 -1
  33. package/dist/utils/transaction.cjs.map +1 -1
  34. package/dist/utils/transaction.d.cts +80 -2
  35. package/dist/utils/transaction.d.cts.map +1 -1
  36. package/dist/utils/transaction.d.mts +80 -2
  37. package/dist/utils/transaction.d.mts.map +1 -1
  38. package/dist/utils/transaction.mjs +96 -1
  39. package/dist/utils/transaction.mjs.map +1 -1
  40. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,8 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [34.0.0]
11
+
12
+ ### Added
13
+
14
+ - Add `batchId` to BridgeHistoryItem to enable querying history by batchId ([#6058](https://github.com/MetaMask/core/pull/6058))
15
+
10
16
  ### Changed
11
17
 
18
+ - **BREAKING** Add tx batching functionality, which requires an `addTransactionBatchFn` handler to be passed to the BridgeStatusController's constructor ([#6058](https://github.com/MetaMask/core/pull/6058))
19
+ - **BREAKING** Update batched txs after signing with correct tx types, which requires an `updateTransactionFn` handler to be passed to the BridgeStatusController's constructor ([#6058](https://github.com/MetaMask/core/pull/6058))
20
+ - Add approvalTxId to txHistoryItem after signing batched transaction ([#6058](https://github.com/MetaMask/core/pull/6058))
21
+ - Remove `addUserOperationFromTransaction` tx submission code and constructor arg since it is unsupported ([#6057](https://github.com/MetaMask/core/pull/6057))
22
+ - Remove @metamask/user-operation-controller dependency ([#6057](https://github.com/MetaMask/core/pull/6057))
12
23
  - **BREAKING:** Bump peer dependency `@metamask/snaps-controllers` from `^12.0.0` to `^14.0.0` ([#6035](https://github.com/MetaMask/core/pull/6035))
13
24
 
14
25
  ### Fixed
@@ -385,7 +396,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
385
396
 
386
397
  - Initial release ([#5317](https://github.com/MetaMask/core/pull/5317))
387
398
 
388
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@33.0.0...HEAD
399
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@34.0.0...HEAD
400
+ [34.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@33.0.0...@metamask/bridge-status-controller@34.0.0
389
401
  [33.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@32.0.0...@metamask/bridge-status-controller@33.0.0
390
402
  [32.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@31.0.0...@metamask/bridge-status-controller@32.0.0
391
403
  [31.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@30.0.0...@metamask/bridge-status-controller@31.0.0
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _BridgeStatusController_instances, _BridgeStatusController_pollingTokensByTxMetaId, _BridgeStatusController_clientId, _BridgeStatusController_fetchFn, _BridgeStatusController_config, _BridgeStatusController_addTransactionFn, _BridgeStatusController_estimateGasFeeFn, _BridgeStatusController_trace, _BridgeStatusController_restartPollingForIncompleteHistoryItems, _BridgeStatusController_addTxToHistory, _BridgeStatusController_startPollingForTxId, _BridgeStatusController_getMultichainSelectedAccount, _BridgeStatusController_getMultichainSelectedAccountAddress, _BridgeStatusController_fetchBridgeTxStatus, _BridgeStatusController_getSrcTxHash, _BridgeStatusController_updateSrcTxHash, _BridgeStatusController_wipeBridgeStatusByChainId, _BridgeStatusController_handleSolanaTx, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, _BridgeStatusController_handleApprovalTx, _BridgeStatusController_handleEvmSmartTransaction, _BridgeStatusController_handleEvmTransaction, _BridgeStatusController_handleUSDTAllowanceReset, _BridgeStatusController_calculateGasFees, _BridgeStatusController_trackUnifiedSwapBridgeEvent;
13
+ var _BridgeStatusController_instances, _BridgeStatusController_pollingTokensByTxMetaId, _BridgeStatusController_clientId, _BridgeStatusController_fetchFn, _BridgeStatusController_config, _BridgeStatusController_addTransactionFn, _BridgeStatusController_addTransactionBatchFn, _BridgeStatusController_updateTransactionFn, _BridgeStatusController_estimateGasFeeFn, _BridgeStatusController_trace, _BridgeStatusController_markTxAsFailed, _BridgeStatusController_restartPollingForIncompleteHistoryItems, _BridgeStatusController_addTxToHistory, _BridgeStatusController_startPollingForTxId, _BridgeStatusController_getMultichainSelectedAccount, _BridgeStatusController_getMultichainSelectedAccountAddress, _BridgeStatusController_fetchBridgeTxStatus, _BridgeStatusController_getSrcTxHash, _BridgeStatusController_updateSrcTxHash, _BridgeStatusController_wipeBridgeStatusByChainId, _BridgeStatusController_handleSolanaTx, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, _BridgeStatusController_handleApprovalTx, _BridgeStatusController_handleEvmTransaction, _BridgeStatusController_handleUSDTAllowanceReset, _BridgeStatusController_calculateGasFees, _BridgeStatusController_handleEvmTransactionBatch, _BridgeStatusController_trackUnifiedSwapBridgeEvent;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.BridgeStatusController = void 0;
16
16
  const bridge_controller_1 = require("@metamask/bridge-controller");
@@ -19,7 +19,6 @@ const keyring_api_1 = require("@metamask/keyring-api");
19
19
  const polling_controller_1 = require("@metamask/polling-controller");
20
20
  const transaction_controller_1 = require("@metamask/transaction-controller");
21
21
  const utils_1 = require("@metamask/utils");
22
- const bignumber_js_1 = require("bignumber.js");
23
22
  const constants_1 = require("./constants.cjs");
24
23
  const types_1 = require("./types.cjs");
25
24
  const bridge_status_1 = require("./utils/bridge-status.cjs");
@@ -36,7 +35,7 @@ const metadata = {
36
35
  },
37
36
  };
38
37
  class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPollingController)() {
39
- constructor({ messenger, state, clientId, fetchFn, addTransactionFn, estimateGasFeeFn, config, traceFn, }) {
38
+ constructor({ messenger, state, clientId, fetchFn, addTransactionFn, addTransactionBatchFn, updateTransactionFn, estimateGasFeeFn, config, traceFn, }) {
40
39
  super({
41
40
  name: constants_1.BRIDGE_STATUS_CONTROLLER_NAME,
42
41
  metadata,
@@ -53,8 +52,22 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
53
52
  _BridgeStatusController_fetchFn.set(this, void 0);
54
53
  _BridgeStatusController_config.set(this, void 0);
55
54
  _BridgeStatusController_addTransactionFn.set(this, void 0);
55
+ _BridgeStatusController_addTransactionBatchFn.set(this, void 0);
56
+ _BridgeStatusController_updateTransactionFn.set(this, void 0);
56
57
  _BridgeStatusController_estimateGasFeeFn.set(this, void 0);
57
58
  _BridgeStatusController_trace.set(this, void 0);
59
+ // Mark tx as failed in txHistory if either the approval or trade fails
60
+ _BridgeStatusController_markTxAsFailed.set(this, ({ id }) => {
61
+ const txHistoryKey = this.state.txHistory[id]
62
+ ? id
63
+ : Object.keys(this.state.txHistory).find((key) => this.state.txHistory[key].approvalTxId === id);
64
+ if (!txHistoryKey) {
65
+ return;
66
+ }
67
+ this.update((statusState) => {
68
+ statusState.txHistory[txHistoryKey].status.status = bridge_controller_1.StatusTypes.FAILED;
69
+ });
70
+ });
58
71
  this.resetState = () => {
59
72
  this.update((state) => {
60
73
  state.txHistory = constants_1.DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;
@@ -83,8 +96,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
83
96
  historyItem.status.status === bridge_controller_1.StatusTypes.UNKNOWN)
84
97
  .filter((historyItem) => {
85
98
  // Check if we are already polling this tx, if so, skip restarting polling for that
86
- const srcTxMetaId = historyItem.txMetaId;
87
- const pollingToken = __classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[srcTxMetaId];
99
+ const pollingToken = __classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[historyItem.txMetaId];
88
100
  return !pollingToken;
89
101
  })
90
102
  // Swap txs don't need to have their statuses polled
@@ -106,6 +118,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
106
118
  // We know it's in progress but not the exact status yet
107
119
  const txHistoryItem = {
108
120
  txMetaId: bridgeTxMeta.id,
121
+ batchId: bridgeTxMeta.batchId,
109
122
  quote: quoteResponse.quote,
110
123
  startTime,
111
124
  estimatedProcessingTimeInSeconds: quoteResponse.estimatedProcessingTimeInSeconds,
@@ -304,7 +317,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
304
317
  }
305
318
  return finalTransactionMeta;
306
319
  });
307
- _BridgeStatusController_handleApprovalTx.set(this, async (isBridgeTx, quoteResponse, requireApproval = false) => {
320
+ _BridgeStatusController_handleApprovalTx.set(this, async (isBridgeTx, quoteResponse) => {
308
321
  const { approval } = quoteResponse;
309
322
  if (approval) {
310
323
  const approveTx = async () => {
@@ -314,8 +327,6 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
314
327
  ? transaction_controller_1.TransactionType.bridgeApproval
315
328
  : transaction_controller_1.TransactionType.swapApproval,
316
329
  trade: approval,
317
- quoteResponse,
318
- requireApproval,
319
330
  });
320
331
  await (0, transaction_1.handleLineaDelay)(quoteResponse);
321
332
  return approvalTxMeta;
@@ -332,31 +343,16 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
332
343
  }
333
344
  return undefined;
334
345
  });
335
- _BridgeStatusController_handleEvmSmartTransaction.set(this, async ({ isBridgeTx, trade, quoteResponse, approvalTxId, requireApproval = false, }) => {
336
- return await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransaction, "f").call(this, {
337
- transactionType: isBridgeTx
338
- ? transaction_controller_1.TransactionType.bridge
339
- : transaction_controller_1.TransactionType.swap,
340
- trade,
341
- quoteResponse,
342
- approvalTxId,
343
- shouldWaitForHash: false,
344
- requireApproval,
345
- });
346
- });
347
346
  /**
348
347
  * Submits an EVM transaction to the TransactionController
349
348
  *
350
349
  * @param params - The parameters for the transaction
351
350
  * @param params.transactionType - The type of transaction to submit
352
351
  * @param params.trade - The trade data to confirm
353
- * @param params.quoteResponse - The quote response
354
- * @param params.approvalTxId - The tx id of the approval tx
355
- * @param params.shouldWaitForHash - Whether to wait for the hash of the transaction
356
352
  * @param params.requireApproval - Whether to require approval for the transaction
357
353
  * @returns The transaction meta
358
354
  */
359
- _BridgeStatusController_handleEvmTransaction.set(this, async ({ transactionType, trade, quoteResponse, approvalTxId, shouldWaitForHash = true, requireApproval = false, }) => {
355
+ _BridgeStatusController_handleEvmTransaction.set(this, async ({ transactionType, trade, requireApproval = false, }) => {
360
356
  const actionId = (0, transaction_2.generateActionId)().toString();
361
357
  const selectedAccount = this.messagingSystem.call('AccountsController:getAccountByAddress', trade.from);
362
358
  if (!selectedAccount) {
@@ -381,28 +377,16 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
381
377
  ...transactionParams,
382
378
  ...(await __classPrivateFieldGet(this, _BridgeStatusController_calculateGasFees, "f").call(this, transactionParams, networkClientId, hexChainId)),
383
379
  };
384
- const { result, transactionMeta } = await __classPrivateFieldGet(this, _BridgeStatusController_addTransactionFn, "f").call(this, transactionParamsWithMaxGas, requestOptions);
385
- if (shouldWaitForHash) {
386
- return await __classPrivateFieldGet(this, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, "f").call(this, result);
387
- }
388
- return {
389
- ...(0, transaction_1.getTxMetaFields)(quoteResponse, approvalTxId),
390
- ...transactionMeta,
391
- };
380
+ const { result } = await __classPrivateFieldGet(this, _BridgeStatusController_addTransactionFn, "f").call(this, transactionParamsWithMaxGas, requestOptions);
381
+ return await __classPrivateFieldGet(this, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, "f").call(this, result);
392
382
  });
393
383
  _BridgeStatusController_handleUSDTAllowanceReset.set(this, async (quoteResponse) => {
394
- const hexChainId = (0, bridge_controller_1.formatChainIdToHex)(quoteResponse.quote.srcChainId);
395
- if (quoteResponse.approval &&
396
- (0, bridge_controller_1.isEthUsdt)(hexChainId, quoteResponse.quote.srcAsset.address)) {
397
- const allowance = new bignumber_js_1.BigNumber(await this.messagingSystem.call('BridgeController:getBridgeERC20Allowance', quoteResponse.quote.srcAsset.address, hexChainId));
398
- const shouldResetApproval = allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);
399
- if (shouldResetApproval) {
400
- await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransaction, "f").call(this, {
401
- transactionType: transaction_controller_1.TransactionType.bridgeApproval,
402
- trade: { ...quoteResponse.approval, data: (0, bridge_controller_1.getEthUsdtResetData)() },
403
- quoteResponse,
404
- });
405
- }
384
+ const resetApproval = await (0, transaction_1.getUSDTAllowanceResetTx)(this.messagingSystem, quoteResponse);
385
+ if (resetApproval) {
386
+ await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransaction, "f").call(this, {
387
+ transactionType: transaction_controller_1.TransactionType.bridgeApproval,
388
+ trade: resetApproval,
389
+ });
406
390
  }
407
391
  });
408
392
  _BridgeStatusController_calculateGasFees.set(this, async (transactionParams, networkClientId, chainId) => {
@@ -423,6 +407,42 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
423
407
  gas: maxGasLimit,
424
408
  };
425
409
  });
410
+ /**
411
+ * Submits batched EVM transactions to the TransactionController
412
+ *
413
+ * @param args - The parameters for the transaction
414
+ * @param args.isBridgeTx - Whether the transaction is a bridge transaction
415
+ * @param args.trade - The trade data to confirm
416
+ * @param args.approval - The approval data to confirm
417
+ * @param args.resetApproval - The ethereum:USDT reset approval data to confirm
418
+ * @param args.quoteResponse - The quote response
419
+ * @param args.requireApproval - Whether to require approval for the transaction
420
+ * @returns The approvalMeta and tradeMeta for the batched transaction
421
+ */
422
+ _BridgeStatusController_handleEvmTransactionBatch.set(this, async (args) => {
423
+ const transactionParams = await (0, transaction_1.getAddTransactionBatchParams)({
424
+ messagingSystem: this.messagingSystem,
425
+ estimateGasFeeFn: __classPrivateFieldGet(this, _BridgeStatusController_estimateGasFeeFn, "f"),
426
+ ...args,
427
+ });
428
+ const txDataByType = {
429
+ [transaction_controller_1.TransactionType.bridgeApproval]: transactionParams.transactions.find(({ type }) => type === transaction_controller_1.TransactionType.bridgeApproval)?.params.data,
430
+ [transaction_controller_1.TransactionType.swapApproval]: transactionParams.transactions.find(({ type }) => type === transaction_controller_1.TransactionType.swapApproval)?.params.data,
431
+ [transaction_controller_1.TransactionType.bridge]: transactionParams.transactions.find(({ type }) => type === transaction_controller_1.TransactionType.bridge)?.params.data,
432
+ [transaction_controller_1.TransactionType.swap]: transactionParams.transactions.find(({ type }) => type === transaction_controller_1.TransactionType.swap)?.params.data,
433
+ };
434
+ const { batchId } = await __classPrivateFieldGet(this, _BridgeStatusController_addTransactionBatchFn, "f").call(this, transactionParams);
435
+ const { approvalMeta, tradeMeta } = (0, transaction_1.findAndUpdateTransactionsInBatch)({
436
+ messagingSystem: this.messagingSystem,
437
+ updateTransactionFn: __classPrivateFieldGet(this, _BridgeStatusController_updateTransactionFn, "f"),
438
+ batchId,
439
+ txDataByType,
440
+ });
441
+ if (!tradeMeta) {
442
+ throw new Error('Failed to update cross-chain swap transaction batch: tradeMeta not found');
443
+ }
444
+ return { approvalMeta, tradeMeta };
445
+ });
426
446
  /**
427
447
  * Submits a cross-chain swap transaction
428
448
  *
@@ -445,7 +465,8 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
445
465
  // Emit Submitted event after submit button is clicked
446
466
  __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Submitted, undefined, preConfirmationProperties);
447
467
  let txMeta;
448
- let approvalTime, approvalTxId;
468
+ let approvalTxId;
469
+ const startTime = Date.now();
449
470
  const isBridgeTx = (0, bridge_controller_1.isCrossChain)(quoteResponse.quote.srcChainId, quoteResponse.quote.destChainId);
450
471
  // Submit SOLANA tx
451
472
  if ((0, bridge_controller_1.isSolanaChainId)(quoteResponse.quote.srcChainId) &&
@@ -477,10 +498,6 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
477
498
  // Extension does not have this issue
478
499
  const requireApproval = __classPrivateFieldGet(this, _BridgeStatusController_clientId, "f") === types_1.BridgeClientId.MOBILE &&
479
500
  (0, bridge_controller_1.isHardwareWallet)(__classPrivateFieldGet(this, _BridgeStatusController_instances, "m", _BridgeStatusController_getMultichainSelectedAccount).call(this));
480
- // Set approval time and id if an approval tx is needed
481
- const approvalTxMeta = await __classPrivateFieldGet(this, _BridgeStatusController_handleApprovalTx, "f").call(this, isBridgeTx, quoteResponse, requireApproval);
482
- approvalTime = approvalTxMeta?.time;
483
- approvalTxId = approvalTxMeta?.id;
484
501
  // Handle smart transactions if enabled
485
502
  txMeta = await __classPrivateFieldGet(this, _BridgeStatusController_trace, "f").call(this, {
486
503
  name: isBridgeTx
@@ -490,23 +507,30 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
490
507
  srcChainId: (0, bridge_controller_1.formatChainIdToCaip)(quoteResponse.quote.srcChainId),
491
508
  stxEnabled: isStxEnabledOnClient,
492
509
  },
493
- }, async () => isStxEnabledOnClient
494
- ? await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmSmartTransaction, "f").call(this, {
495
- isBridgeTx,
496
- trade: quoteResponse.trade,
497
- quoteResponse,
498
- approvalTxId,
499
- requireApproval,
500
- })
501
- : await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransaction, "f").call(this, {
510
+ }, async () => {
511
+ if (isStxEnabledOnClient) {
512
+ const { tradeMeta, approvalMeta } = await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransactionBatch, "f").call(this, {
513
+ isBridgeTx,
514
+ resetApproval: await (0, transaction_1.getUSDTAllowanceResetTx)(this.messagingSystem, quoteResponse),
515
+ approval: quoteResponse.approval,
516
+ trade: quoteResponse.trade,
517
+ quoteResponse,
518
+ requireApproval,
519
+ });
520
+ approvalTxId = approvalMeta?.id;
521
+ return tradeMeta;
522
+ }
523
+ // Set approval time and id if an approval tx is needed
524
+ const approvalTxMeta = await __classPrivateFieldGet(this, _BridgeStatusController_handleApprovalTx, "f").call(this, isBridgeTx, quoteResponse);
525
+ approvalTxId = approvalTxMeta?.id;
526
+ return await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransaction, "f").call(this, {
502
527
  transactionType: isBridgeTx
503
528
  ? transaction_controller_1.TransactionType.bridge
504
529
  : transaction_controller_1.TransactionType.swap,
505
530
  trade: quoteResponse.trade,
506
- quoteResponse,
507
- approvalTxId,
508
531
  requireApproval,
509
- }));
532
+ });
533
+ });
510
534
  }
511
535
  try {
512
536
  // Add swap or bridge tx to history
@@ -519,7 +543,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
519
543
  quoteResponse,
520
544
  slippagePercentage: 0,
521
545
  isStxEnabled: isStxEnabledOnClient,
522
- startTime: approvalTime ?? Date.now(),
546
+ startTime,
523
547
  approvalTxId,
524
548
  });
525
549
  if ((0, bridge_controller_1.isSolanaChainId)(quoteResponse.quote.srcChainId)) {
@@ -569,6 +593,8 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
569
593
  __classPrivateFieldSet(this, _BridgeStatusController_clientId, clientId, "f");
570
594
  __classPrivateFieldSet(this, _BridgeStatusController_fetchFn, fetchFn, "f");
571
595
  __classPrivateFieldSet(this, _BridgeStatusController_addTransactionFn, addTransactionFn, "f");
596
+ __classPrivateFieldSet(this, _BridgeStatusController_addTransactionBatchFn, addTransactionBatchFn, "f");
597
+ __classPrivateFieldSet(this, _BridgeStatusController_updateTransactionFn, updateTransactionFn, "f");
572
598
  __classPrivateFieldSet(this, _BridgeStatusController_estimateGasFeeFn, estimateGasFeeFn, "f");
573
599
  __classPrivateFieldSet(this, _BridgeStatusController_config, {
574
600
  customBridgeApiBaseUrl: config?.customBridgeApiBaseUrl ?? constants_1.BRIDGE_PROD_API_BASE_URL,
@@ -584,22 +610,23 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
584
610
  this.messagingSystem.subscribe('TransactionController:transactionFailed', ({ transactionMeta }) => {
585
611
  const { type, status, id } = transactionMeta;
586
612
  if (type &&
587
- [transaction_controller_1.TransactionType.bridge, transaction_controller_1.TransactionType.swap].includes(type) &&
588
- ![transaction_controller_1.TransactionStatus.signed, transaction_controller_1.TransactionStatus.approved].includes(status)) {
613
+ [
614
+ transaction_controller_1.TransactionType.bridge,
615
+ transaction_controller_1.TransactionType.swap,
616
+ transaction_controller_1.TransactionType.bridgeApproval,
617
+ transaction_controller_1.TransactionType.swapApproval,
618
+ ].includes(type) &&
619
+ [
620
+ transaction_controller_1.TransactionStatus.failed,
621
+ transaction_controller_1.TransactionStatus.dropped,
622
+ transaction_controller_1.TransactionStatus.rejected,
623
+ ].includes(status)) {
589
624
  // Mark tx as failed in txHistory
590
- this.update((bridgeStatusState) => {
591
- if (bridgeStatusState.txHistory[id]) {
592
- bridgeStatusState.txHistory[id] = {
593
- ...bridgeStatusState.txHistory[id],
594
- status: {
595
- ...bridgeStatusState.txHistory[id].status,
596
- status: bridge_controller_1.StatusTypes.FAILED,
597
- },
598
- };
599
- }
600
- });
625
+ __classPrivateFieldGet(this, _BridgeStatusController_markTxAsFailed, "f").call(this, transactionMeta);
601
626
  // Track failed event
602
- __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Failed, id, (0, metrics_1.getEVMTxPropertiesFromTransactionMeta)(transactionMeta));
627
+ if (status !== transaction_controller_1.TransactionStatus.rejected) {
628
+ __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Failed, id, (0, metrics_1.getEVMTxPropertiesFromTransactionMeta)(transactionMeta));
629
+ }
603
630
  }
604
631
  });
605
632
  this.messagingSystem.subscribe('TransactionController:transactionConfirmed', (transactionMeta) => {
@@ -618,7 +645,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
618
645
  }
619
646
  }
620
647
  exports.BridgeStatusController = BridgeStatusController;
621
- _BridgeStatusController_pollingTokensByTxMetaId = new WeakMap(), _BridgeStatusController_clientId = new WeakMap(), _BridgeStatusController_fetchFn = new WeakMap(), _BridgeStatusController_config = new WeakMap(), _BridgeStatusController_addTransactionFn = new WeakMap(), _BridgeStatusController_estimateGasFeeFn = new WeakMap(), _BridgeStatusController_trace = new WeakMap(), _BridgeStatusController_restartPollingForIncompleteHistoryItems = new WeakMap(), _BridgeStatusController_addTxToHistory = new WeakMap(), _BridgeStatusController_startPollingForTxId = new WeakMap(), _BridgeStatusController_fetchBridgeTxStatus = new WeakMap(), _BridgeStatusController_getSrcTxHash = new WeakMap(), _BridgeStatusController_updateSrcTxHash = new WeakMap(), _BridgeStatusController_wipeBridgeStatusByChainId = new WeakMap(), _BridgeStatusController_handleSolanaTx = new WeakMap(), _BridgeStatusController_waitForHashAndReturnFinalTxMeta = new WeakMap(), _BridgeStatusController_handleApprovalTx = new WeakMap(), _BridgeStatusController_handleEvmSmartTransaction = new WeakMap(), _BridgeStatusController_handleEvmTransaction = new WeakMap(), _BridgeStatusController_handleUSDTAllowanceReset = new WeakMap(), _BridgeStatusController_calculateGasFees = new WeakMap(), _BridgeStatusController_trackUnifiedSwapBridgeEvent = new WeakMap(), _BridgeStatusController_instances = new WeakSet(), _BridgeStatusController_getMultichainSelectedAccount = function _BridgeStatusController_getMultichainSelectedAccount() {
648
+ _BridgeStatusController_pollingTokensByTxMetaId = new WeakMap(), _BridgeStatusController_clientId = new WeakMap(), _BridgeStatusController_fetchFn = new WeakMap(), _BridgeStatusController_config = new WeakMap(), _BridgeStatusController_addTransactionFn = new WeakMap(), _BridgeStatusController_addTransactionBatchFn = new WeakMap(), _BridgeStatusController_updateTransactionFn = new WeakMap(), _BridgeStatusController_estimateGasFeeFn = new WeakMap(), _BridgeStatusController_trace = new WeakMap(), _BridgeStatusController_markTxAsFailed = new WeakMap(), _BridgeStatusController_restartPollingForIncompleteHistoryItems = new WeakMap(), _BridgeStatusController_addTxToHistory = new WeakMap(), _BridgeStatusController_startPollingForTxId = new WeakMap(), _BridgeStatusController_fetchBridgeTxStatus = new WeakMap(), _BridgeStatusController_getSrcTxHash = new WeakMap(), _BridgeStatusController_updateSrcTxHash = new WeakMap(), _BridgeStatusController_wipeBridgeStatusByChainId = new WeakMap(), _BridgeStatusController_handleSolanaTx = new WeakMap(), _BridgeStatusController_waitForHashAndReturnFinalTxMeta = new WeakMap(), _BridgeStatusController_handleApprovalTx = new WeakMap(), _BridgeStatusController_handleEvmTransaction = new WeakMap(), _BridgeStatusController_handleUSDTAllowanceReset = new WeakMap(), _BridgeStatusController_calculateGasFees = new WeakMap(), _BridgeStatusController_handleEvmTransactionBatch = new WeakMap(), _BridgeStatusController_trackUnifiedSwapBridgeEvent = new WeakMap(), _BridgeStatusController_instances = new WeakSet(), _BridgeStatusController_getMultichainSelectedAccount = function _BridgeStatusController_getMultichainSelectedAccount() {
622
649
  return this.messagingSystem.call('AccountsController:getSelectedMultichainAccount');
623
650
  }, _BridgeStatusController_getMultichainSelectedAccountAddress = function _BridgeStatusController_getMultichainSelectedAccountAddress() {
624
651
  return __classPrivateFieldGet(this, _BridgeStatusController_instances, "m", _BridgeStatusController_getMultichainSelectedAccount).call(this)?.address ?? '';