@metamask/transaction-controller 53.0.0 → 54.0.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.
Files changed (58) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/dist/TransactionController.cjs +99 -102
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts +9 -15
  5. package/dist/TransactionController.d.cts.map +1 -1
  6. package/dist/TransactionController.d.mts +9 -15
  7. package/dist/TransactionController.d.mts.map +1 -1
  8. package/dist/TransactionController.mjs +99 -102
  9. package/dist/TransactionController.mjs.map +1 -1
  10. package/dist/helpers/GasFeePoller.cjs +2 -1
  11. package/dist/helpers/GasFeePoller.cjs.map +1 -1
  12. package/dist/helpers/GasFeePoller.d.cts +1 -1
  13. package/dist/helpers/GasFeePoller.d.cts.map +1 -1
  14. package/dist/helpers/GasFeePoller.d.mts +1 -1
  15. package/dist/helpers/GasFeePoller.d.mts.map +1 -1
  16. package/dist/helpers/GasFeePoller.mjs +2 -1
  17. package/dist/helpers/GasFeePoller.mjs.map +1 -1
  18. package/dist/helpers/PendingTransactionTracker.cjs +1 -0
  19. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
  20. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
  21. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
  22. package/dist/helpers/PendingTransactionTracker.mjs +1 -0
  23. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.d.cts +1 -1
  26. package/dist/index.d.cts.map +1 -1
  27. package/dist/index.d.mts +1 -1
  28. package/dist/index.d.mts.map +1 -1
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/types.cjs.map +1 -1
  31. package/dist/types.d.cts +28 -0
  32. package/dist/types.d.cts.map +1 -1
  33. package/dist/types.d.mts +28 -0
  34. package/dist/types.d.mts.map +1 -1
  35. package/dist/types.mjs.map +1 -1
  36. package/dist/utils/batch.cjs +16 -8
  37. package/dist/utils/batch.cjs.map +1 -1
  38. package/dist/utils/batch.d.cts +4 -3
  39. package/dist/utils/batch.d.cts.map +1 -1
  40. package/dist/utils/batch.d.mts +4 -3
  41. package/dist/utils/batch.d.mts.map +1 -1
  42. package/dist/utils/batch.mjs +16 -8
  43. package/dist/utils/batch.mjs.map +1 -1
  44. package/dist/utils/nonce.cjs +4 -1
  45. package/dist/utils/nonce.cjs.map +1 -1
  46. package/dist/utils/nonce.d.cts +1 -1
  47. package/dist/utils/nonce.d.cts.map +1 -1
  48. package/dist/utils/nonce.d.mts +1 -1
  49. package/dist/utils/nonce.d.mts.map +1 -1
  50. package/dist/utils/nonce.mjs +4 -1
  51. package/dist/utils/nonce.mjs.map +1 -1
  52. package/dist/utils/validation.cjs +4 -2
  53. package/dist/utils/validation.cjs.map +1 -1
  54. package/dist/utils/validation.d.cts.map +1 -1
  55. package/dist/utils/validation.d.mts.map +1 -1
  56. package/dist/utils/validation.mjs +4 -2
  57. package/dist/utils/validation.mjs.map +1 -1
  58. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [54.0.0]
11
+
12
+ ### Added
13
+
14
+ - Add `isExternalSign` property to `TransactionMeta` to disable nonce generation and signing ([#5604](https://github.com/MetaMask/core/pull/5604))
15
+ - Add types for `isAtomicBatchSupported` method ([#5600](https://github.com/MetaMask/core/pull/5600))
16
+ - `IsAtomicBatchSupportedRequest`
17
+ - `IsAtomicBatchSupportedResult`
18
+ - `IsAtomicBatchSupportedResultEntry`
19
+
20
+ ### Changed
21
+
22
+ - **BREAKING:** Update signature of `isAtomicBatchSupported` method ([#5600](https://github.com/MetaMask/core/pull/5600))
23
+ - Replace `address` argument with `request` object containing `address` and optional `chainIds`.
24
+ - Return array of `IsAtomicBatchSupportedResultEntry` objects.
25
+ - Skip `origin` validation for `batch` transaction type ([#5586](https://github.com/MetaMask/core/pull/5586))
26
+
27
+ ### Fixed
28
+
29
+ - **BREAKING:** `enableTxParamsGasFeeUpdates` is renamed to `isAutomaticGasFeeUpdateEnabled` now expects a callback function instead of a boolean. ([#5602](https://github.com/MetaMask/core/pull/5602))
30
+ - This callback is invoked before performing `txParams` gas fee updates. The update will proceed only if the callback returns a truthy value.
31
+ - If not set it will default to return `false`.
32
+
10
33
  ## [53.0.0]
11
34
 
12
35
  ### Added
@@ -1484,7 +1507,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1484
1507
 
1485
1508
  All changes listed after this point were applied to this package following the monorepo conversion.
1486
1509
 
1487
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@53.0.0...HEAD
1510
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@54.0.0...HEAD
1511
+ [54.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@53.0.0...@metamask/transaction-controller@54.0.0
1488
1512
  [53.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@52.3.0...@metamask/transaction-controller@53.0.0
1489
1513
  [52.3.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@52.2.0...@metamask/transaction-controller@52.3.0
1490
1514
  [52.2.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@52.1.0...@metamask/transaction-controller@52.2.0
@@ -13,7 +13,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
13
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
- var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_methodDataHelper, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_publishBatchHook, _TransactionController_publicKeyEIP7702, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_rejectTransaction, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getSelectedAccount, _TransactionController_getInternalAccounts, _TransactionController_updateSubmitHistory, _TransactionController_updateGasEstimate, _TransactionController_registerActionHandlers, _TransactionController_deleteTransaction, _TransactionController_isRejectError, _TransactionController_rejectTransactionAndThrow;
16
+ var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_methodDataHelper, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_publishBatchHook, _TransactionController_publicKeyEIP7702, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_rejectTransaction, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_markNonceDuplicatesDropped, _TransactionController_signTransaction, _TransactionController_onConfirmedTransaction, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getSelectedAccount, _TransactionController_getInternalAccounts, _TransactionController_updateSubmitHistory, _TransactionController_updateGasEstimate, _TransactionController_registerActionHandlers, _TransactionController_deleteTransaction, _TransactionController_isRejectError, _TransactionController_rejectTransactionAndThrow;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.TransactionController = exports.ApprovalState = exports.SPEED_UP_RATE = exports.CANCEL_RATE = void 0;
19
19
  const base_controller_1 = require("@metamask/base-controller");
@@ -157,7 +157,7 @@ class TransactionController extends base_controller_1.BaseController {
157
157
  * @param options - The controller options.
158
158
  */
159
159
  constructor(options) {
160
- const { disableHistory, disableSendFlowHistory, disableSwaps, enableTxParamsGasFeeUpdates, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, pendingTransactions = {}, publicKeyEIP7702, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, } = options;
160
+ const { disableHistory, disableSendFlowHistory, disableSwaps, isAutomaticGasFeeUpdateEnabled, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, pendingTransactions = {}, publicKeyEIP7702, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, } = options;
161
161
  super({
162
162
  name: controllerName,
163
163
  metadata,
@@ -187,7 +187,8 @@ class TransactionController extends base_controller_1.BaseController {
187
187
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").checkForPendingTransactionAndStartPolling();
188
188
  });
189
189
  this.messagingSystem = messenger;
190
- this.isTxParamsGasFeeUpdatesEnabled = enableTxParamsGasFeeUpdates ?? false;
190
+ this.isTxParamsGasFeeUpdatesEnabled =
191
+ isAutomaticGasFeeUpdateEnabled ?? ((_txMeta) => false);
191
192
  this.getNetworkState = getNetworkState;
192
193
  this.isSendFlowHistoryDisabled = disableSendFlowHistory ?? false;
193
194
  this.isHistoryDisabled = disableHistory ?? false;
@@ -334,12 +335,12 @@ class TransactionController extends base_controller_1.BaseController {
334
335
  /**
335
336
  * Determine which chains support atomic batch transactions with the given account address.
336
337
  *
337
- * @param address - The address of the account to check.
338
- * @returns The supported chain IDs.
338
+ * @param request - Request object containing the account address and other parameters.
339
+ * @returns Result object containing the supported chains and related information.
339
340
  */
340
- async isAtomicBatchSupported(address) {
341
+ async isAtomicBatchSupported(request) {
341
342
  return (0, batch_1.isAtomicBatchSupported)({
342
- address,
343
+ ...request,
343
344
  getEthQuery: (chainId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { chainId }),
344
345
  messenger: this.messagingSystem,
345
346
  publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
@@ -678,7 +679,7 @@ class TransactionController extends base_controller_1.BaseController {
678
679
  updatedTransactionMeta.baseFeePerGas = baseFeePerGas;
679
680
  }
680
681
  // Update same nonce local transactions as dropped and define replacedBy properties.
681
- this.markNonceDuplicatesDropped(transactionId);
682
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_markNonceDuplicatesDropped).call(this, transactionId);
682
683
  // Update external provided transaction with updated gas values and confirmed status.
683
684
  this.updateTransaction(updatedTransactionMeta, `${controllerName}:confirmExternalTransaction - Add external transaction`);
684
685
  this.onTransactionStatusChange(updatedTransactionMeta);
@@ -1394,13 +1395,13 @@ class TransactionController extends base_controller_1.BaseController {
1394
1395
  }
1395
1396
  });
1396
1397
  this.onTransactionStatusChange(transactionMeta);
1397
- const rawTx = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Sign', parentContext: traceContext }, () => this.signTransaction(transactionMeta));
1398
+ const rawTx = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Sign', parentContext: traceContext }, () => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_signTransaction).call(this, transactionMeta));
1398
1399
  if (!(await this.beforePublish(transactionMeta))) {
1399
1400
  (0, logger_1.projectLogger)('Skipping publishing transaction based on hook');
1400
1401
  this.messagingSystem.publish(`${controllerName}:transactionPublishingSkipped`, transactionMeta);
1401
1402
  return ApprovalState.SkippedViaBeforePublishHook;
1402
1403
  }
1403
- if (!rawTx) {
1404
+ if (!rawTx && !transactionMeta.isExternalSign) {
1404
1405
  return ApprovalState.NotApproved;
1405
1406
  }
1406
1407
  const { networkClientId } = transactionMeta;
@@ -1427,7 +1428,7 @@ class TransactionController extends base_controller_1.BaseController {
1427
1428
  }
1428
1429
  await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Publish', parentContext: traceContext }, async () => {
1429
1430
  const publishHook = publishHookOverride ?? this.publish;
1430
- ({ transactionHash: hash } = await publishHook(transactionMeta, rawTx));
1431
+ ({ transactionHash: hash } = await publishHook(transactionMeta, rawTx ?? '0x'));
1431
1432
  if (hash === undefined) {
1432
1433
  hash = await this.publishTransaction(ethQuery, {
1433
1434
  ...transactionMeta,
@@ -1651,44 +1652,6 @@ class TransactionController extends base_controller_1.BaseController {
1651
1652
  });
1652
1653
  return newTransactionMeta;
1653
1654
  }
1654
- /**
1655
- * Sets other txMeta statuses to dropped if the txMeta that has been confirmed has other transactions
1656
- * in the transactions have the same nonce.
1657
- *
1658
- * @param transactionId - Used to identify original transaction.
1659
- */
1660
- markNonceDuplicatesDropped(transactionId) {
1661
- const transactionMeta = this.getTransaction(transactionId);
1662
- if (!transactionMeta) {
1663
- return;
1664
- }
1665
- const nonce = transactionMeta.txParams?.nonce;
1666
- const from = transactionMeta.txParams?.from;
1667
- const { chainId } = transactionMeta;
1668
- const sameNonceTransactions = this.state.transactions.filter((transaction) => transaction.id !== transactionId &&
1669
- transaction.txParams.from === from &&
1670
- transaction.txParams.nonce === nonce &&
1671
- transaction.chainId === chainId &&
1672
- transaction.type !== types_1.TransactionType.incoming);
1673
- const sameNonceTransactionIds = sameNonceTransactions.map((transaction) => transaction.id);
1674
- if (sameNonceTransactions.length === 0) {
1675
- return;
1676
- }
1677
- this.update((state) => {
1678
- for (const transaction of state.transactions) {
1679
- if (sameNonceTransactionIds.includes(transaction.id)) {
1680
- transaction.replacedBy = transactionMeta?.hash;
1681
- transaction.replacedById = transactionMeta?.id;
1682
- }
1683
- }
1684
- });
1685
- for (const transaction of this.state.transactions) {
1686
- if (sameNonceTransactionIds.includes(transaction.id) &&
1687
- transaction.status !== types_1.TransactionStatus.failed) {
1688
- this.setTransactionStatusDropped(transaction);
1689
- }
1690
- }
1691
- }
1692
1655
  /**
1693
1656
  * Method to set transaction status to dropped.
1694
1657
  *
@@ -1745,47 +1708,6 @@ class TransactionController extends base_controller_1.BaseController {
1745
1708
  const currentAccountIsEIP1559Compatible = await this.getCurrentAccountEIP1559Compatibility();
1746
1709
  return (currentNetworkIsEIP1559Compatible && currentAccountIsEIP1559Compatible);
1747
1710
  }
1748
- async signTransaction(transactionMeta) {
1749
- const { txParams } = transactionMeta;
1750
- (0, logger_1.projectLogger)('Signing transaction', txParams);
1751
- const { authorizationList, from } = txParams;
1752
- const finalTxParams = { ...txParams };
1753
- finalTxParams.authorizationList = await (0, eip7702_1.signAuthorizationList)({
1754
- authorizationList,
1755
- messenger: this.messagingSystem,
1756
- transactionMeta,
1757
- });
1758
- const unsignedEthTx = (0, prepare_1.prepareTransaction)(transactionMeta.chainId, finalTxParams);
1759
- this.approvingTransactionIds.add(transactionMeta.id);
1760
- const signedTx = await new Promise((resolve, reject) => {
1761
- this.sign?.(unsignedEthTx, from, ...this.getAdditionalSignArguments(transactionMeta)).then(resolve, reject);
1762
- this.signAbortCallbacks.set(transactionMeta.id, () => reject(new Error('Signing aborted by user')));
1763
- });
1764
- this.signAbortCallbacks.delete(transactionMeta.id);
1765
- if (!signedTx) {
1766
- (0, logger_1.projectLogger)('Skipping signed status as no signed transaction');
1767
- return undefined;
1768
- }
1769
- const transactionMetaFromHook = (0, lodash_1.cloneDeep)(transactionMeta);
1770
- if (!this.afterSign(transactionMetaFromHook, signedTx)) {
1771
- this.updateTransaction(transactionMetaFromHook, 'TransactionController#signTransaction - Update after sign');
1772
- (0, logger_1.projectLogger)('Skipping signed status based on hook');
1773
- return undefined;
1774
- }
1775
- const transactionMetaWithRsv = {
1776
- ...this.updateTransactionMetaRSV(transactionMetaFromHook, signedTx),
1777
- status: types_1.TransactionStatus.signed,
1778
- txParams: finalTxParams,
1779
- };
1780
- this.updateTransaction(transactionMetaWithRsv, 'TransactionController#approveTransaction - Transaction signed');
1781
- this.onTransactionStatusChange(transactionMetaWithRsv);
1782
- const rawTx = (0, prepare_1.serializeTransaction)(signedTx);
1783
- const transactionMetaWithRawTx = (0, lodash_1.merge)({}, transactionMetaWithRsv, {
1784
- rawTx,
1785
- });
1786
- this.updateTransaction(transactionMetaWithRawTx, 'TransactionController#approveTransaction - RawTransaction added');
1787
- return rawTx;
1788
- }
1789
1711
  onTransactionStatusChange(transactionMeta) {
1790
1712
  this.messagingSystem.publish(`${controllerName}:transactionStatusUpdated`, {
1791
1713
  transactionMeta,
@@ -1794,17 +1716,6 @@ class TransactionController extends base_controller_1.BaseController {
1794
1716
  getNonceTrackerTransactions(statuses, address, chainId) {
1795
1717
  return (0, nonce_1.getAndFormatTransactionsForNonceTracker)(chainId, address, statuses, this.state.transactions);
1796
1718
  }
1797
- onConfirmedTransaction(transactionMeta) {
1798
- (0, logger_1.projectLogger)('Processing confirmed transaction', transactionMeta.id);
1799
- this.markNonceDuplicatesDropped(transactionMeta.id);
1800
- this.messagingSystem.publish(`${controllerName}:transactionConfirmed`, transactionMeta);
1801
- this.onTransactionStatusChange(transactionMeta);
1802
- // Intentional given potential duration of process.
1803
- this.updatePostBalance(transactionMeta).catch((error) => {
1804
- (0, logger_1.projectLogger)('Error while updating post balance', error);
1805
- throw error;
1806
- });
1807
- }
1808
1719
  async updatePostBalance(transactionMeta) {
1809
1720
  try {
1810
1721
  const { networkClientId, type } = transactionMeta;
@@ -1953,6 +1864,92 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
1953
1864
  chainId,
1954
1865
  networkClientId,
1955
1866
  }).provider;
1867
+ }, _TransactionController_markNonceDuplicatesDropped = function _TransactionController_markNonceDuplicatesDropped(transactionId) {
1868
+ const transactionMeta = this.getTransaction(transactionId);
1869
+ if (!transactionMeta) {
1870
+ return;
1871
+ }
1872
+ const nonce = transactionMeta.txParams?.nonce;
1873
+ const from = transactionMeta.txParams?.from;
1874
+ const { chainId } = transactionMeta;
1875
+ const sameNonceTransactions = this.state.transactions.filter((transaction) => transaction.id !== transactionId &&
1876
+ transaction.txParams.from === from &&
1877
+ nonce &&
1878
+ transaction.txParams.nonce === nonce &&
1879
+ transaction.chainId === chainId &&
1880
+ transaction.type !== types_1.TransactionType.incoming);
1881
+ const sameNonceTransactionIds = sameNonceTransactions.map((transaction) => transaction.id);
1882
+ if (sameNonceTransactions.length === 0) {
1883
+ return;
1884
+ }
1885
+ this.update((state) => {
1886
+ for (const transaction of state.transactions) {
1887
+ if (sameNonceTransactionIds.includes(transaction.id)) {
1888
+ transaction.replacedBy = transactionMeta?.hash;
1889
+ transaction.replacedById = transactionMeta?.id;
1890
+ }
1891
+ }
1892
+ });
1893
+ for (const transaction of this.state.transactions) {
1894
+ if (sameNonceTransactionIds.includes(transaction.id) &&
1895
+ transaction.status !== types_1.TransactionStatus.failed) {
1896
+ this.setTransactionStatusDropped(transaction);
1897
+ }
1898
+ }
1899
+ }, _TransactionController_signTransaction = async function _TransactionController_signTransaction(transactionMeta) {
1900
+ const { isExternalSign, txParams } = transactionMeta;
1901
+ if (isExternalSign) {
1902
+ (0, logger_1.projectLogger)('Skipping sign as signed externally');
1903
+ return undefined;
1904
+ }
1905
+ (0, logger_1.projectLogger)('Signing transaction', txParams);
1906
+ const { authorizationList, from } = txParams;
1907
+ const finalTxParams = { ...txParams };
1908
+ finalTxParams.authorizationList = await (0, eip7702_1.signAuthorizationList)({
1909
+ authorizationList,
1910
+ messenger: this.messagingSystem,
1911
+ transactionMeta,
1912
+ });
1913
+ const unsignedEthTx = (0, prepare_1.prepareTransaction)(transactionMeta.chainId, finalTxParams);
1914
+ this.approvingTransactionIds.add(transactionMeta.id);
1915
+ const signedTx = await new Promise((resolve, reject) => {
1916
+ this.sign?.(unsignedEthTx, from, ...this.getAdditionalSignArguments(transactionMeta)).then(resolve, reject);
1917
+ this.signAbortCallbacks.set(transactionMeta.id, () => reject(new Error('Signing aborted by user')));
1918
+ });
1919
+ this.signAbortCallbacks.delete(transactionMeta.id);
1920
+ if (!signedTx) {
1921
+ (0, logger_1.projectLogger)('Skipping signed status as no signed transaction');
1922
+ return undefined;
1923
+ }
1924
+ const transactionMetaFromHook = (0, lodash_1.cloneDeep)(transactionMeta);
1925
+ if (!this.afterSign(transactionMetaFromHook, signedTx)) {
1926
+ this.updateTransaction(transactionMetaFromHook, 'TransactionController#signTransaction - Update after sign');
1927
+ (0, logger_1.projectLogger)('Skipping signed status based on hook');
1928
+ return undefined;
1929
+ }
1930
+ const transactionMetaWithRsv = {
1931
+ ...this.updateTransactionMetaRSV(transactionMetaFromHook, signedTx),
1932
+ status: types_1.TransactionStatus.signed,
1933
+ txParams: finalTxParams,
1934
+ };
1935
+ this.updateTransaction(transactionMetaWithRsv, 'TransactionController#approveTransaction - Transaction signed');
1936
+ this.onTransactionStatusChange(transactionMetaWithRsv);
1937
+ const rawTx = (0, prepare_1.serializeTransaction)(signedTx);
1938
+ const transactionMetaWithRawTx = (0, lodash_1.merge)({}, transactionMetaWithRsv, {
1939
+ rawTx,
1940
+ });
1941
+ this.updateTransaction(transactionMetaWithRawTx, 'TransactionController#approveTransaction - RawTransaction added');
1942
+ return rawTx;
1943
+ }, _TransactionController_onConfirmedTransaction = function _TransactionController_onConfirmedTransaction(transactionMeta) {
1944
+ (0, logger_1.projectLogger)('Processing confirmed transaction', transactionMeta.id);
1945
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_markNonceDuplicatesDropped).call(this, transactionMeta.id);
1946
+ this.messagingSystem.publish(`${controllerName}:transactionConfirmed`, transactionMeta);
1947
+ this.onTransactionStatusChange(transactionMeta);
1948
+ // Intentional given potential duration of process.
1949
+ this.updatePostBalance(transactionMeta).catch((error) => {
1950
+ (0, logger_1.projectLogger)('Error while updating post balance', error);
1951
+ throw error;
1952
+ });
1956
1953
  }, _TransactionController_createNonceTracker = function _TransactionController_createNonceTracker({ provider, blockTracker, chainId, }) {
1957
1954
  return new nonce_tracker_1.NonceTracker({
1958
1955
  // TODO: Fix types
@@ -1995,7 +1992,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
1995
1992
  pendingTransactionTracker.hub.removeAllListeners('transaction-failed');
1996
1993
  pendingTransactionTracker.hub.removeAllListeners('transaction-updated');
1997
1994
  }, _TransactionController_addPendingTransactionTrackerListeners = function _TransactionController_addPendingTransactionTrackerListeners(pendingTransactionTracker) {
1998
- pendingTransactionTracker.hub.on('transaction-confirmed', this.onConfirmedTransaction.bind(this));
1995
+ pendingTransactionTracker.hub.on('transaction-confirmed', __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onConfirmedTransaction).bind(this));
1999
1996
  pendingTransactionTracker.hub.on('transaction-dropped', this.setTransactionStatusDropped.bind(this));
2000
1997
  pendingTransactionTracker.hub.on('transaction-failed', this.failTransaction.bind(this));
2001
1998
  pendingTransactionTracker.hub.on('transaction-updated', this.updateTransaction.bind(this));