@metamask-previews/bridge-status-controller 63.1.0-preview-159e76e4 → 64.0.0-preview-7cfbb337

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/CHANGELOG.md CHANGED
@@ -7,10 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [64.0.0]
11
+
10
12
  ### Changed
11
13
 
14
+ - **BREAKING:** Bump `@metamask/bridge-controller` from `^63.2.0` to `^64.0.0` ([#7295](https://github.com/MetaMask/core/pull/7295))
15
+ - Improve type safety by replacing tx data type assertions with type predicates ([#7228](https://github.com/MetaMask/core/pull/7228))
16
+ - Submit `resetApproval` tx before the tx approval if it is included in the quoteResponse ([#7228](https://github.com/MetaMask/core/pull/7228))
12
17
  - Bump `@metamask/network-controller` from `^26.0.0` to `^27.0.0` ([#7258](https://github.com/MetaMask/core/pull/7258))
13
- - Bump `@metamask/transaction-controller` from `^62.3.0` to `^62.3.1` ([#7257](https://github.com/MetaMask/core/pull/7257))
18
+ - Bump `@metamask/transaction-controller` from `^62.3.0` to `^62.4.0` ([#7257](https://github.com/MetaMask/core/pull/7257), [#7289](https://github.com/MetaMask/core/pull/7289))
14
19
 
15
20
  ## [63.1.0]
16
21
 
@@ -804,7 +809,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
804
809
 
805
810
  - Initial release ([#5317](https://github.com/MetaMask/core/pull/5317))
806
811
 
807
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@63.1.0...HEAD
812
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@64.0.0...HEAD
813
+ [64.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@63.1.0...@metamask/bridge-status-controller@64.0.0
808
814
  [63.1.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@63.0.0...@metamask/bridge-status-controller@63.1.0
809
815
  [63.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@62.0.0...@metamask/bridge-status-controller@63.0.0
810
816
  [62.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-status-controller@61.0.0...@metamask/bridge-status-controller@62.0.0
@@ -14,6 +14,7 @@ var _BridgeStatusController_instances, _BridgeStatusController_pollingTokensByTx
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.BridgeStatusController = void 0;
16
16
  const bridge_controller_1 = require("@metamask/bridge-controller");
17
+ const bridge_controller_2 = require("@metamask/bridge-controller");
17
18
  const controller_utils_1 = require("@metamask/controller-utils");
18
19
  const polling_controller_1 = require("@metamask/polling-controller");
19
20
  const transaction_controller_1 = require("@metamask/transaction-controller");
@@ -65,7 +66,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
65
66
  return;
66
67
  }
67
68
  this.update((statusState) => {
68
- statusState.txHistory[txHistoryKey].status.status = bridge_controller_1.StatusTypes.FAILED;
69
+ statusState.txHistory[txHistoryKey].status.status = bridge_controller_2.StatusTypes.FAILED;
69
70
  });
70
71
  });
71
72
  this.resetState = () => {
@@ -123,7 +124,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
123
124
  }
124
125
  });
125
126
  // Restart polling if it was stopped and this is a bridge transaction
126
- const isBridgeTx = (0, bridge_controller_1.isCrossChain)(historyItem.quote.srcChainId, historyItem.quote.destChainId);
127
+ const isBridgeTx = (0, bridge_controller_2.isCrossChain)(historyItem.quote.srcChainId, historyItem.quote.destChainId);
127
128
  if (isBridgeTx) {
128
129
  // Check if polling was stopped (no active polling token)
129
130
  const existingPollingToken = __classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[targetTxMetaId];
@@ -151,8 +152,8 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
151
152
  const { txHistory } = this.state;
152
153
  const historyItems = Object.values(txHistory);
153
154
  const incompleteHistoryItems = historyItems
154
- .filter((historyItem) => historyItem.status.status === bridge_controller_1.StatusTypes.PENDING ||
155
- historyItem.status.status === bridge_controller_1.StatusTypes.UNKNOWN)
155
+ .filter((historyItem) => historyItem.status.status === bridge_controller_2.StatusTypes.PENDING ||
156
+ historyItem.status.status === bridge_controller_2.StatusTypes.UNKNOWN)
156
157
  .filter((historyItem) => {
157
158
  // Check if we are already polling this tx, if so, skip restarting polling for that
158
159
  const pollingToken = __classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[historyItem.txMetaId];
@@ -160,7 +161,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
160
161
  })
161
162
  // Swap txs don't need to have their statuses polled
162
163
  .filter((historyItem) => {
163
- const isBridgeTx = (0, bridge_controller_1.isCrossChain)(historyItem.quote.srcChainId, historyItem.quote.destChainId);
164
+ const isBridgeTx = (0, bridge_controller_2.isCrossChain)(historyItem.quote.srcChainId, historyItem.quote.destChainId);
164
165
  return isBridgeTx;
165
166
  });
166
167
  incompleteHistoryItems.forEach((historyItem) => {
@@ -198,7 +199,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
198
199
  status: {
199
200
  // We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that
200
201
  // Also we know the bare minimum fields for status at this point in time
201
- status: bridge_controller_1.StatusTypes.PENDING,
202
+ status: bridge_controller_2.StatusTypes.PENDING,
202
203
  srcChain: {
203
204
  chainId: statusRequest.srcChainId,
204
205
  txHash: statusRequest.srcTxHash,
@@ -225,7 +226,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
225
226
  return;
226
227
  }
227
228
  const { quote } = txHistoryItem;
228
- const isBridgeTx = (0, bridge_controller_1.isCrossChain)(quote.srcChainId, quote.destChainId);
229
+ const isBridgeTx = (0, bridge_controller_2.isCrossChain)(quote.srcChainId, quote.destChainId);
229
230
  if (isBridgeTx) {
230
231
  __classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[txId] = this.startPolling({
231
232
  bridgeTxMetaId: txId,
@@ -301,7 +302,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
301
302
  const statusRequest = (0, bridge_status_1.getStatusRequestWithSrcTxHash)(historyItem.quote, srcTxHash);
302
303
  const { status, validationFailures } = await (0, bridge_status_1.fetchBridgeTxStatus)(statusRequest, __classPrivateFieldGet(this, _BridgeStatusController_clientId, "f"), __classPrivateFieldGet(this, _BridgeStatusController_fetchFn, "f"), __classPrivateFieldGet(this, _BridgeStatusController_config, "f").customBridgeApiBaseUrl);
303
304
  if (validationFailures.length > 0) {
304
- __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.StatusValidationFailed, bridgeTxMetaId, {
305
+ __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.StatusValidationFailed, bridgeTxMetaId, {
305
306
  failures: validationFailures,
306
307
  });
307
308
  throw new Error(`Bridge status validation failed: ${validationFailures.join(', ')}`);
@@ -309,8 +310,8 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
309
310
  const newBridgeHistoryItem = {
310
311
  ...historyItem,
311
312
  status,
312
- completionTime: status.status === bridge_controller_1.StatusTypes.COMPLETE ||
313
- status.status === bridge_controller_1.StatusTypes.FAILED
313
+ completionTime: status.status === bridge_controller_2.StatusTypes.COMPLETE ||
314
+ status.status === bridge_controller_2.StatusTypes.FAILED
314
315
  ? Date.now()
315
316
  : undefined, // TODO make this more accurate by looking up dest txHash block time
316
317
  attempts: undefined,
@@ -323,8 +324,8 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
323
324
  state.txHistory[bridgeTxMetaId] = newBridgeHistoryItem;
324
325
  });
325
326
  const pollingToken = __classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[bridgeTxMetaId];
326
- const isFinalStatus = status.status === bridge_controller_1.StatusTypes.COMPLETE ||
327
- status.status === bridge_controller_1.StatusTypes.FAILED;
327
+ const isFinalStatus = status.status === bridge_controller_2.StatusTypes.COMPLETE ||
328
+ status.status === bridge_controller_2.StatusTypes.FAILED;
328
329
  if (isFinalStatus && pollingToken) {
329
330
  this.stopPollingByPollingToken(pollingToken);
330
331
  delete __classPrivateFieldGet(this, _BridgeStatusController_pollingTokensByTxMetaId, "f")[bridgeTxMetaId];
@@ -332,12 +333,12 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
332
333
  if (historyItem.featureId) {
333
334
  return;
334
335
  }
335
- if (status.status === bridge_controller_1.StatusTypes.COMPLETE) {
336
- __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Completed, bridgeTxMetaId);
336
+ if (status.status === bridge_controller_2.StatusTypes.COMPLETE) {
337
+ __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Completed, bridgeTxMetaId);
337
338
  this.messenger.publish('BridgeStatusController:destinationTransactionCompleted', historyItem.quote.destAsset.assetId);
338
339
  }
339
- if (status.status === bridge_controller_1.StatusTypes.FAILED) {
340
- __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Failed, bridgeTxMetaId);
340
+ if (status.status === bridge_controller_2.StatusTypes.FAILED) {
341
+ __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Failed, bridgeTxMetaId);
341
342
  }
342
343
  }
343
344
  }
@@ -433,11 +434,10 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
433
434
  }
434
435
  return finalTransactionMeta;
435
436
  });
436
- _BridgeStatusController_handleApprovalTx.set(this, async (isBridgeTx, quoteResponse, requireApproval) => {
437
- const { approval } = quoteResponse;
437
+ _BridgeStatusController_handleApprovalTx.set(this, async (isBridgeTx, srcChainId, approval, resetApproval, requireApproval) => {
438
438
  if (approval) {
439
439
  const approveTx = async () => {
440
- await __classPrivateFieldGet(this, _BridgeStatusController_handleUSDTAllowanceReset, "f").call(this, quoteResponse);
440
+ await __classPrivateFieldGet(this, _BridgeStatusController_handleUSDTAllowanceReset, "f").call(this, resetApproval);
441
441
  const approvalTxMeta = await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransaction, "f").call(this, {
442
442
  transactionType: isBridgeTx
443
443
  ? transaction_controller_1.TransactionType.bridgeApproval
@@ -445,7 +445,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
445
445
  trade: approval,
446
446
  requireApproval,
447
447
  });
448
- await (0, transaction_1.handleApprovalDelay)(quoteResponse);
448
+ await (0, transaction_1.handleApprovalDelay)(srcChainId);
449
449
  return approvalTxMeta;
450
450
  };
451
451
  return await __classPrivateFieldGet(this, _BridgeStatusController_trace, "f").call(this, {
@@ -453,7 +453,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
453
453
  ? constants_1.TraceName.BridgeTransactionApprovalCompleted
454
454
  : constants_1.TraceName.SwapTransactionApprovalCompleted,
455
455
  data: {
456
- srcChainId: (0, bridge_controller_1.formatChainIdToCaip)(quoteResponse.quote.srcChainId),
456
+ srcChainId: (0, bridge_controller_2.formatChainIdToCaip)(srcChainId),
457
457
  stxEnabled: false,
458
458
  },
459
459
  }, approveTx);
@@ -475,7 +475,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
475
475
  if (!selectedAccount) {
476
476
  throw new Error('Failed to submit cross-chain swap transaction: unknown account in trade data');
477
477
  }
478
- const hexChainId = (0, bridge_controller_1.formatChainIdToHex)(trade.chainId);
478
+ const hexChainId = (0, bridge_controller_2.formatChainIdToHex)(trade.chainId);
479
479
  const networkClientId = this.messenger.call('NetworkController:findNetworkClientIdByChainId', hexChainId);
480
480
  const requestOptions = {
481
481
  actionId,
@@ -497,8 +497,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
497
497
  const { result } = await __classPrivateFieldGet(this, _BridgeStatusController_addTransactionFn, "f").call(this, transactionParamsWithMaxGas, requestOptions);
498
498
  return await __classPrivateFieldGet(this, _BridgeStatusController_waitForHashAndReturnFinalTxMeta, "f").call(this, result);
499
499
  });
500
- _BridgeStatusController_handleUSDTAllowanceReset.set(this, async (quoteResponse) => {
501
- const resetApproval = await (0, transaction_1.getUSDTAllowanceResetTx)(this.messenger, quoteResponse);
500
+ _BridgeStatusController_handleUSDTAllowanceReset.set(this, async (resetApproval) => {
502
501
  if (resetApproval) {
503
502
  await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransaction, "f").call(this, {
504
503
  transactionType: transaction_controller_1.TransactionType.bridgeApproval,
@@ -570,7 +569,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
570
569
  * @returns The transaction meta
571
570
  */
572
571
  this.submitTx = async (accountAddress, quoteResponse, isStxEnabledOnClient, quotesReceivedContext) => {
573
- this.messenger.call('BridgeController:stopPollingForQuotes', bridge_controller_1.AbortReason.TransactionSubmitted,
572
+ this.messenger.call('BridgeController:stopPollingForQuotes', bridge_controller_2.AbortReason.TransactionSubmitted,
574
573
  // If trade is submitted before all quotes are loaded, the QuotesReceived event is published
575
574
  // If the trade has a featureId, it means it was submitted outside of the Unified Swap and Bridge experience, so no QuotesReceived event is published
576
575
  quoteResponse.featureId ? undefined : quotesReceivedContext);
@@ -578,38 +577,37 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
578
577
  if (!selectedAccount) {
579
578
  throw new Error('Failed to submit cross-chain swap transaction: undefined multichain account');
580
579
  }
581
- const isHardwareAccount = (0, bridge_controller_1.isHardwareWallet)(selectedAccount);
580
+ const isHardwareAccount = (0, bridge_controller_2.isHardwareWallet)(selectedAccount);
582
581
  const preConfirmationProperties = (0, metrics_1.getPreConfirmationPropertiesFromQuote)(quoteResponse, isStxEnabledOnClient, isHardwareAccount);
583
582
  // Emit Submitted event after submit button is clicked
584
583
  !quoteResponse.featureId &&
585
- __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Submitted, undefined, preConfirmationProperties);
584
+ __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Submitted, undefined, preConfirmationProperties);
586
585
  let txMeta;
587
586
  let approvalTxId;
588
587
  const startTime = Date.now();
589
- const isBridgeTx = (0, bridge_controller_1.isCrossChain)(quoteResponse.quote.srcChainId, quoteResponse.quote.destChainId);
588
+ const isBridgeTx = (0, bridge_controller_2.isCrossChain)(quoteResponse.quote.srcChainId, quoteResponse.quote.destChainId);
590
589
  // Submit non-EVM tx (Solana, BTC, Tron)
591
- const isNonEvmTrade = (0, bridge_controller_1.isNonEvmChainId)(quoteResponse.quote.srcChainId) &&
592
- (typeof quoteResponse.trade === 'string' ||
593
- (0, bridge_controller_1.isBitcoinTrade)(quoteResponse.trade) ||
594
- (0, bridge_controller_1.isTronTrade)(quoteResponse.trade));
595
- if (isNonEvmTrade) {
590
+ if ((0, bridge_controller_2.isNonEvmChainId)(quoteResponse.quote.srcChainId)) {
596
591
  // Handle non-EVM approval if present (e.g., Tron token approvals)
597
- if (quoteResponse.approval) {
592
+ if (quoteResponse.approval && (0, bridge_controller_2.isTronTrade)(quoteResponse.approval)) {
598
593
  const approvalTxMeta = await __classPrivateFieldGet(this, _BridgeStatusController_trace, "f").call(this, {
599
594
  name: isBridgeTx
600
595
  ? constants_1.TraceName.BridgeTransactionApprovalCompleted
601
596
  : constants_1.TraceName.SwapTransactionApprovalCompleted,
602
597
  data: {
603
- srcChainId: (0, bridge_controller_1.formatChainIdToCaip)(quoteResponse.quote.srcChainId),
598
+ srcChainId: (0, bridge_controller_2.formatChainIdToCaip)(quoteResponse.quote.srcChainId),
604
599
  stxEnabled: false,
605
600
  },
606
601
  }, async () => {
607
602
  try {
608
- return await __classPrivateFieldGet(this, _BridgeStatusController_handleNonEvmTx, "f").call(this, quoteResponse.approval, quoteResponse, selectedAccount);
603
+ return quoteResponse.approval &&
604
+ (0, bridge_controller_2.isTronTrade)(quoteResponse.approval)
605
+ ? await __classPrivateFieldGet(this, _BridgeStatusController_handleNonEvmTx, "f").call(this, quoteResponse.approval, quoteResponse, selectedAccount)
606
+ : undefined;
609
607
  }
610
608
  catch (error) {
611
609
  !quoteResponse.featureId &&
612
- __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Failed, undefined, {
610
+ __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Failed, undefined, {
613
611
  error_message: error?.message,
614
612
  ...preConfirmationProperties,
615
613
  });
@@ -618,23 +616,28 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
618
616
  });
619
617
  approvalTxId = approvalTxMeta?.id;
620
618
  // Add delay after approval similar to EVM flow
621
- await (0, transaction_1.handleApprovalDelay)(quoteResponse);
619
+ await (0, transaction_1.handleApprovalDelay)(quoteResponse.quote.srcChainId);
622
620
  }
623
621
  txMeta = await __classPrivateFieldGet(this, _BridgeStatusController_trace, "f").call(this, {
624
622
  name: isBridgeTx
625
623
  ? constants_1.TraceName.BridgeTransactionCompleted
626
624
  : constants_1.TraceName.SwapTransactionCompleted,
627
625
  data: {
628
- srcChainId: (0, bridge_controller_1.formatChainIdToCaip)(quoteResponse.quote.srcChainId),
626
+ srcChainId: (0, bridge_controller_2.formatChainIdToCaip)(quoteResponse.quote.srcChainId),
629
627
  stxEnabled: false,
630
628
  },
631
629
  }, async () => {
632
630
  try {
631
+ if (!((0, bridge_controller_2.isTronTrade)(quoteResponse.trade) ||
632
+ (0, bridge_controller_2.isBitcoinTrade)(quoteResponse.trade) ||
633
+ typeof quoteResponse.trade === 'string')) {
634
+ throw new Error('Failed to submit cross-chain swap transaction: trade is not a non-EVM transaction');
635
+ }
633
636
  return await __classPrivateFieldGet(this, _BridgeStatusController_handleNonEvmTx, "f").call(this, quoteResponse.trade, quoteResponse, selectedAccount);
634
637
  }
635
638
  catch (error) {
636
639
  !quoteResponse.featureId &&
637
- __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Failed, txMeta?.id, {
640
+ __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Failed, txMeta?.id, {
638
641
  error_message: error?.message,
639
642
  ...preConfirmationProperties,
640
643
  });
@@ -653,15 +656,20 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
653
656
  ? constants_1.TraceName.BridgeTransactionCompleted
654
657
  : constants_1.TraceName.SwapTransactionCompleted,
655
658
  data: {
656
- srcChainId: (0, bridge_controller_1.formatChainIdToCaip)(quoteResponse.quote.srcChainId),
659
+ srcChainId: (0, bridge_controller_2.formatChainIdToCaip)(quoteResponse.quote.srcChainId),
657
660
  stxEnabled: isStxEnabledOnClient,
658
661
  },
659
662
  }, async () => {
663
+ if (!(0, bridge_controller_1.isEvmTxData)(quoteResponse.trade)) {
664
+ throw new Error('Failed to submit cross-chain swap transaction: trade is not an EVM transaction');
665
+ }
660
666
  if (isStxEnabledOnClient || quoteResponse.quote.gasIncluded7702) {
661
667
  const { tradeMeta, approvalMeta } = await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransactionBatch, "f").call(this, {
662
668
  isBridgeTx,
663
- resetApproval: (await (0, transaction_1.getUSDTAllowanceResetTx)(this.messenger, quoteResponse)),
664
- approval: quoteResponse.approval,
669
+ resetApproval: quoteResponse.resetApproval,
670
+ approval: quoteResponse.approval && (0, bridge_controller_1.isEvmTxData)(quoteResponse.approval)
671
+ ? quoteResponse.approval
672
+ : undefined,
665
673
  trade: quoteResponse.trade,
666
674
  quoteResponse,
667
675
  requireApproval,
@@ -670,7 +678,9 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
670
678
  return tradeMeta;
671
679
  }
672
680
  // Set approval time and id if an approval tx is needed
673
- const approvalTxMeta = await __classPrivateFieldGet(this, _BridgeStatusController_handleApprovalTx, "f").call(this, isBridgeTx, quoteResponse, requireApproval);
681
+ const approvalTxMeta = await __classPrivateFieldGet(this, _BridgeStatusController_handleApprovalTx, "f").call(this, isBridgeTx, quoteResponse.quote.srcChainId, quoteResponse.approval && (0, bridge_controller_1.isEvmTxData)(quoteResponse.approval)
682
+ ? quoteResponse.approval
683
+ : undefined, quoteResponse.resetApproval, requireApproval);
674
684
  approvalTxId = approvalTxMeta?.id;
675
685
  await (0, transaction_1.handleMobileHardwareWalletDelay)(requireApproval);
676
686
  return await __classPrivateFieldGet(this, _BridgeStatusController_handleEvmTransaction, "f").call(this, {
@@ -697,12 +707,12 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
697
707
  startTime,
698
708
  approvalTxId,
699
709
  });
700
- if ((0, bridge_controller_1.isNonEvmChainId)(quoteResponse.quote.srcChainId)) {
710
+ if ((0, bridge_controller_2.isNonEvmChainId)(quoteResponse.quote.srcChainId)) {
701
711
  // Start polling for bridge tx status
702
712
  __classPrivateFieldGet(this, _BridgeStatusController_startPollingForTxId, "f").call(this, txMeta.id);
703
713
  // Track non-EVM Swap completed event
704
714
  if (!isBridgeTx) {
705
- __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Completed, txMeta.id);
715
+ __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Completed, txMeta.id);
706
716
  }
707
717
  }
708
718
  }
@@ -720,7 +730,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
720
730
  */
721
731
  _BridgeStatusController_trackUnifiedSwapBridgeEvent.set(this, (eventName, txMetaId, eventProperties) => {
722
732
  const baseProperties = {
723
- action_type: bridge_controller_1.MetricsActionType.SWAPBRIDGE_V1,
733
+ action_type: bridge_controller_2.MetricsActionType.SWAPBRIDGE_V1,
724
734
  ...(eventProperties ?? {}),
725
735
  };
726
736
  // This will publish events for PERPS dropped tx failures as well
@@ -735,7 +745,7 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
735
745
  }
736
746
  const requestParamProperties = (0, metrics_1.getRequestParamFromHistory)(historyItem);
737
747
  // Always publish StatusValidationFailed event, regardless of featureId
738
- if (eventName === bridge_controller_1.UnifiedSwapBridgeEventName.StatusValidationFailed) {
748
+ if (eventName === bridge_controller_2.UnifiedSwapBridgeEventName.StatusValidationFailed) {
739
749
  const { chain_id_source, chain_id_destination, token_address_source, token_address_destination, } = requestParamProperties;
740
750
  this.messenger.call('BridgeController:trackUnifiedSwapBridgeEvent', eventName, {
741
751
  ...baseProperties,
@@ -803,16 +813,16 @@ class BridgeStatusController extends (0, polling_controller_1.StaticIntervalPoll
803
813
  __classPrivateFieldGet(this, _BridgeStatusController_markTxAsFailed, "f").call(this, transactionMeta);
804
814
  // Track failed event
805
815
  if (status !== transaction_controller_1.TransactionStatus.rejected) {
806
- __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Failed, id, (0, metrics_1.getEVMTxPropertiesFromTransactionMeta)(transactionMeta));
816
+ __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Failed, id, (0, metrics_1.getEVMTxPropertiesFromTransactionMeta)(transactionMeta));
807
817
  }
808
818
  }
809
819
  });
810
820
  this.messenger.subscribe('TransactionController:transactionConfirmed', (transactionMeta) => {
811
821
  const { type, id, chainId } = transactionMeta;
812
822
  if (type === transaction_controller_1.TransactionType.swap) {
813
- __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_1.UnifiedSwapBridgeEventName.Completed, id);
823
+ __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, bridge_controller_2.UnifiedSwapBridgeEventName.Completed, id);
814
824
  }
815
- if (type === transaction_controller_1.TransactionType.bridge && !(0, bridge_controller_1.isNonEvmChainId)(chainId)) {
825
+ if (type === transaction_controller_1.TransactionType.bridge && !(0, bridge_controller_2.isNonEvmChainId)(chainId)) {
816
826
  __classPrivateFieldGet(this, _BridgeStatusController_startPollingForTxId, "f").call(this, id);
817
827
  }
818
828
  });