@metamask/transaction-controller 57.3.0 → 57.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +19 -1
  2. package/dist/TransactionController.cjs +97 -34
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts +17 -3
  5. package/dist/TransactionController.d.cts.map +1 -1
  6. package/dist/TransactionController.d.mts +17 -3
  7. package/dist/TransactionController.d.mts.map +1 -1
  8. package/dist/TransactionController.mjs +97 -34
  9. package/dist/TransactionController.mjs.map +1 -1
  10. package/dist/api/simulation-api.cjs +28 -2
  11. package/dist/api/simulation-api.cjs.map +1 -1
  12. package/dist/api/simulation-api.d.cts.map +1 -1
  13. package/dist/api/simulation-api.d.mts.map +1 -1
  14. package/dist/api/simulation-api.mjs +29 -2
  15. package/dist/api/simulation-api.mjs.map +1 -1
  16. package/dist/constants.cjs +5 -1
  17. package/dist/constants.cjs.map +1 -1
  18. package/dist/constants.d.cts +2 -0
  19. package/dist/constants.d.cts.map +1 -1
  20. package/dist/constants.d.mts +2 -0
  21. package/dist/constants.d.mts.map +1 -1
  22. package/dist/constants.mjs +4 -0
  23. package/dist/constants.mjs.map +1 -1
  24. package/dist/index.cjs +2 -1
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +3 -3
  27. package/dist/index.d.cts.map +1 -1
  28. package/dist/index.d.mts +3 -3
  29. package/dist/index.d.mts.map +1 -1
  30. package/dist/index.mjs +1 -1
  31. package/dist/index.mjs.map +1 -1
  32. package/dist/types.cjs +6 -1
  33. package/dist/types.cjs.map +1 -1
  34. package/dist/types.d.cts +32 -0
  35. package/dist/types.d.cts.map +1 -1
  36. package/dist/types.d.mts +32 -0
  37. package/dist/types.d.mts.map +1 -1
  38. package/dist/types.mjs +5 -0
  39. package/dist/types.mjs.map +1 -1
  40. package/dist/utils/batch.cjs +46 -21
  41. package/dist/utils/batch.cjs.map +1 -1
  42. package/dist/utils/batch.d.cts +5 -3
  43. package/dist/utils/batch.d.cts.map +1 -1
  44. package/dist/utils/batch.d.mts +5 -3
  45. package/dist/utils/batch.d.mts.map +1 -1
  46. package/dist/utils/batch.mjs +48 -23
  47. package/dist/utils/batch.mjs.map +1 -1
  48. package/dist/utils/gas.cjs +11 -1
  49. package/dist/utils/gas.cjs.map +1 -1
  50. package/dist/utils/gas.d.cts +3 -1
  51. package/dist/utils/gas.d.cts.map +1 -1
  52. package/dist/utils/gas.d.mts +3 -1
  53. package/dist/utils/gas.d.mts.map +1 -1
  54. package/dist/utils/gas.mjs +11 -1
  55. package/dist/utils/gas.mjs.map +1 -1
  56. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [57.4.0]
11
+
12
+ ### Added
13
+
14
+ - Add optional `afterSimulate` and `beforeSign` hooks to constructor ([#5503](https://github.com/MetaMask/core/pull/5503))
15
+ - Add `AfterSimulateHook` type.
16
+ - Add `BeforeSignHook` type.
17
+ - Add `TransactionContainerType` enum.
18
+ - Add `TransactionControllerEstimateGasAction` type.
19
+ - Add optional `containerTypes` property to `TransactionMeta`.
20
+ - Add optional `ignoreDelegationSignatures` boolean to `estimateGas` method.
21
+ - Add `gasFeeEstimates` property to `TransactionBatchMeta`, populated using `DefaultGasFeeFlow` ([#5886](https://github.com/MetaMask/core/pull/5886))
22
+
23
+ ### Fixed
24
+
25
+ - Handle unknown chain IDs on incoming transactions ([#5985](https://github.com/MetaMask/core/pull/5985))
26
+
10
27
  ## [57.3.0]
11
28
 
12
29
  ### Added
@@ -1668,7 +1685,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1668
1685
 
1669
1686
  All changes listed after this point were applied to this package following the monorepo conversion.
1670
1687
 
1671
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@57.3.0...HEAD
1688
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@57.4.0...HEAD
1689
+ [57.4.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@57.3.0...@metamask/transaction-controller@57.4.0
1672
1690
  [57.3.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@57.2.0...@metamask/transaction-controller@57.3.0
1673
1691
  [57.2.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@57.1.0...@metamask/transaction-controller@57.2.0
1674
1692
  [57.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@57.0.0...@metamask/transaction-controller@57.1.0
@@ -13,7 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || 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_afterAdd, _TransactionController_afterSign, _TransactionController_approvingTransactionIds, _TransactionController_beforeCheckPendingTransaction, _TransactionController_beforePublish, _TransactionController_gasFeeFlows, _TransactionController_getAdditionalSignArguments, _TransactionController_getCurrentAccountEIP1559Compatibility, _TransactionController_getCurrentNetworkEIP1559Compatibility, _TransactionController_getExternalPendingTransactions, _TransactionController_getGasFeeEstimates, _TransactionController_getNetworkState, _TransactionController_getPermittedAccounts, _TransactionController_getSavedGasFees, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_internalEvents, _TransactionController_isAutomaticGasFeeUpdateEnabled, _TransactionController_isEIP7702GasFeeTokensEnabled, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isHistoryDisabled, _TransactionController_isSendFlowHistoryDisabled, _TransactionController_isSimulationEnabled, _TransactionController_isSwapsDisabled, _TransactionController_layer1GasFeeFlows, _TransactionController_methodDataHelper, _TransactionController_multichainTrackingHelper, _TransactionController_pendingTransactionOptions, _TransactionController_publicKeyEIP7702, _TransactionController_publish, _TransactionController_publishBatchHook, _TransactionController_securityProviderRequest, _TransactionController_sign, _TransactionController_signAbortCallbacks, _TransactionController_testGasFeeFlows, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_retryTransaction, _TransactionController_signExternalTransaction, _TransactionController_addMetadata, _TransactionController_updateGasProperties, _TransactionController_onBootCleanup, _TransactionController_failIncompleteTransactions, _TransactionController_processApproval, _TransactionController_approveTransaction, _TransactionController_publishTransaction, _TransactionController_rejectTransaction, _TransactionController_trimTransactionsForState, _TransactionController_isFinalState, _TransactionController_isLocalFinalState, _TransactionController_requestApproval, _TransactionController_getTransaction, _TransactionController_getTransactionOrThrow, _TransactionController_getApprovalId, _TransactionController_isTransactionCompleted, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_onIncomingTransactions, _TransactionController_generateDappSuggestedGasFees, _TransactionController_addExternalTransaction, _TransactionController_markNonceDuplicatesDropped, _TransactionController_setTransactionStatusDropped, _TransactionController_getTransactionWithActionId, _TransactionController_waitForTransactionFinished, _TransactionController_updateTransactionMetaRSV, _TransactionController_getEIP1559Compatibility, _TransactionController_signTransaction, _TransactionController_onTransactionStatusChange, _TransactionController_getNonceTrackerTransactions, _TransactionController_onConfirmedTransaction, _TransactionController_updatePostBalance, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_publishTransactionForRetry, _TransactionController_isTransactionAlreadyConfirmedError, _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, _TransactionController_failTransaction;
16
+ var _TransactionController_instances, _TransactionController_afterAdd, _TransactionController_afterSign, _TransactionController_afterSimulate, _TransactionController_approvingTransactionIds, _TransactionController_beforeCheckPendingTransaction, _TransactionController_beforePublish, _TransactionController_beforeSign, _TransactionController_gasFeeFlows, _TransactionController_getAdditionalSignArguments, _TransactionController_getCurrentAccountEIP1559Compatibility, _TransactionController_getCurrentNetworkEIP1559Compatibility, _TransactionController_getExternalPendingTransactions, _TransactionController_getGasFeeEstimates, _TransactionController_getNetworkState, _TransactionController_getPermittedAccounts, _TransactionController_getSavedGasFees, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_internalEvents, _TransactionController_isAutomaticGasFeeUpdateEnabled, _TransactionController_isEIP7702GasFeeTokensEnabled, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isHistoryDisabled, _TransactionController_isSendFlowHistoryDisabled, _TransactionController_isSimulationEnabled, _TransactionController_isSwapsDisabled, _TransactionController_layer1GasFeeFlows, _TransactionController_methodDataHelper, _TransactionController_multichainTrackingHelper, _TransactionController_pendingTransactionOptions, _TransactionController_publicKeyEIP7702, _TransactionController_publish, _TransactionController_publishBatchHook, _TransactionController_securityProviderRequest, _TransactionController_sign, _TransactionController_signAbortCallbacks, _TransactionController_skipSimulationTransactionIds, _TransactionController_testGasFeeFlows, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_retryTransaction, _TransactionController_signExternalTransaction, _TransactionController_addMetadata, _TransactionController_updateGasProperties, _TransactionController_onBootCleanup, _TransactionController_failIncompleteTransactions, _TransactionController_processApproval, _TransactionController_approveTransaction, _TransactionController_publishTransaction, _TransactionController_rejectTransaction, _TransactionController_trimTransactionsForState, _TransactionController_isFinalState, _TransactionController_isLocalFinalState, _TransactionController_requestApproval, _TransactionController_getTransaction, _TransactionController_getTransactionOrThrow, _TransactionController_getApprovalId, _TransactionController_isTransactionCompleted, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_onIncomingTransactions, _TransactionController_generateDappSuggestedGasFees, _TransactionController_addExternalTransaction, _TransactionController_markNonceDuplicatesDropped, _TransactionController_setTransactionStatusDropped, _TransactionController_getTransactionWithActionId, _TransactionController_waitForTransactionFinished, _TransactionController_updateTransactionMetaRSV, _TransactionController_getEIP1559Compatibility, _TransactionController_signTransaction, _TransactionController_onTransactionStatusChange, _TransactionController_getNonceTrackerTransactions, _TransactionController_onConfirmedTransaction, _TransactionController_updatePostBalance, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_publishTransactionForRetry, _TransactionController_isTransactionAlreadyConfirmedError, _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, _TransactionController_failTransaction, _TransactionController_runAfterSimulateHook;
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");
@@ -147,9 +147,11 @@ class TransactionController extends base_controller_1.BaseController {
147
147
  _TransactionController_instances.add(this);
148
148
  _TransactionController_afterAdd.set(this, void 0);
149
149
  _TransactionController_afterSign.set(this, void 0);
150
+ _TransactionController_afterSimulate.set(this, void 0);
150
151
  _TransactionController_approvingTransactionIds.set(this, new Set());
151
152
  _TransactionController_beforeCheckPendingTransaction.set(this, void 0);
152
153
  _TransactionController_beforePublish.set(this, void 0);
154
+ _TransactionController_beforeSign.set(this, void 0);
153
155
  _TransactionController_gasFeeFlows.set(this, void 0);
154
156
  _TransactionController_getAdditionalSignArguments.set(this, void 0);
155
157
  _TransactionController_getCurrentAccountEIP1559Compatibility.set(this, void 0);
@@ -179,6 +181,7 @@ class TransactionController extends base_controller_1.BaseController {
179
181
  _TransactionController_securityProviderRequest.set(this, void 0);
180
182
  _TransactionController_sign.set(this, void 0);
181
183
  _TransactionController_signAbortCallbacks.set(this, new Map());
184
+ _TransactionController_skipSimulationTransactionIds.set(this, new Set());
182
185
  _TransactionController_testGasFeeFlows.set(this, void 0);
183
186
  _TransactionController_trace.set(this, void 0);
184
187
  _TransactionController_transactionHistoryLimit.set(this, void 0);
@@ -188,10 +191,12 @@ class TransactionController extends base_controller_1.BaseController {
188
191
  this.messagingSystem = messenger;
189
192
  __classPrivateFieldSet(this, _TransactionController_afterAdd, hooks?.afterAdd ?? (() => Promise.resolve({})), "f");
190
193
  __classPrivateFieldSet(this, _TransactionController_afterSign, hooks?.afterSign ?? (() => true), "f");
194
+ __classPrivateFieldSet(this, _TransactionController_afterSimulate, hooks?.afterSimulate ?? (() => Promise.resolve({})), "f");
191
195
  __classPrivateFieldSet(this, _TransactionController_beforeCheckPendingTransaction,
192
196
  /* istanbul ignore next */
193
197
  hooks?.beforeCheckPendingTransaction ?? (() => Promise.resolve(true)), "f");
194
198
  __classPrivateFieldSet(this, _TransactionController_beforePublish, hooks?.beforePublish ?? (() => Promise.resolve(true)), "f");
199
+ __classPrivateFieldSet(this, _TransactionController_beforeSign, hooks?.beforeSign ?? (() => Promise.resolve({})), "f");
195
200
  __classPrivateFieldSet(this, _TransactionController_getAdditionalSignArguments, hooks?.getAdditionalSignArguments ?? (() => []), "f");
196
201
  __classPrivateFieldSet(this, _TransactionController_getCurrentAccountEIP1559Compatibility, getCurrentAccountEIP1559Compatibility ?? (() => Promise.resolve(true)), "f");
197
202
  __classPrivateFieldSet(this, _TransactionController_getCurrentNetworkEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, "f");
@@ -320,22 +325,23 @@ class TransactionController extends base_controller_1.BaseController {
320
325
  addTransaction: this.addTransaction.bind(this),
321
326
  getChainId: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).bind(this),
322
327
  getEthQuery: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId }),
328
+ getGasFeeEstimates: __classPrivateFieldGet(this, _TransactionController_getGasFeeEstimates, "f"),
323
329
  getInternalAccounts: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getInternalAccounts).bind(this),
324
- getTransaction: (transactionId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionOrThrow).call(this, transactionId),
325
- isSimulationEnabled: __classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f"),
326
- messenger: this.messagingSystem,
327
- publishBatchHook: __classPrivateFieldGet(this, _TransactionController_publishBatchHook, "f"),
328
- publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
329
- request,
330
- updateTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).bind(this),
331
- publishTransaction: (ethQuery, transactionMeta) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_publishTransaction).call(this, ethQuery, transactionMeta),
332
330
  getPendingTransactionTracker: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createPendingTransactionTracker).call(this, {
333
331
  provider: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getProvider).call(this, { networkClientId }),
334
332
  blockTracker,
335
333
  chainId: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).call(this, networkClientId),
336
334
  networkClientId,
337
335
  }),
336
+ getTransaction: (transactionId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionOrThrow).call(this, transactionId),
337
+ isSimulationEnabled: __classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f"),
338
+ messenger: this.messagingSystem,
339
+ publishBatchHook: __classPrivateFieldGet(this, _TransactionController_publishBatchHook, "f"),
340
+ publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
341
+ publishTransaction: (ethQuery, transactionMeta) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_publishTransaction).call(this, ethQuery, transactionMeta),
342
+ request,
338
343
  update: this.update.bind(this),
344
+ updateTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).bind(this),
339
345
  });
340
346
  }
341
347
  /**
@@ -577,15 +583,18 @@ class TransactionController extends base_controller_1.BaseController {
577
583
  *
578
584
  * @param transaction - The transaction to estimate gas for.
579
585
  * @param networkClientId - The network client id to use for the estimate.
586
+ * @param options - Additional options for the estimate.
587
+ * @param options.ignoreDelegationSignatures - Ignore signature errors if submitting delegations to the DelegationManager.
580
588
  * @returns The gas and gas price.
581
589
  */
582
- async estimateGas(transaction, networkClientId) {
590
+ async estimateGas(transaction, networkClientId, { ignoreDelegationSignatures, } = {}) {
583
591
  const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, {
584
592
  networkClientId,
585
593
  });
586
594
  const { estimatedGas, simulationFails } = await (0, gas_1.estimateGas)({
587
595
  chainId: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).call(this, networkClientId),
588
596
  ethQuery,
597
+ ignoreDelegationSignatures,
589
598
  isSimulationEnabled: __classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f").call(this),
590
599
  messenger: this.messagingSystem,
591
600
  txParams: transaction,
@@ -1267,7 +1276,7 @@ class TransactionController extends base_controller_1.BaseController {
1267
1276
  }
1268
1277
  }
1269
1278
  exports.TransactionController = TransactionController;
1270
- _TransactionController_afterAdd = new WeakMap(), _TransactionController_afterSign = new WeakMap(), _TransactionController_approvingTransactionIds = new WeakMap(), _TransactionController_beforeCheckPendingTransaction = new WeakMap(), _TransactionController_beforePublish = new WeakMap(), _TransactionController_gasFeeFlows = new WeakMap(), _TransactionController_getAdditionalSignArguments = new WeakMap(), _TransactionController_getCurrentAccountEIP1559Compatibility = new WeakMap(), _TransactionController_getCurrentNetworkEIP1559Compatibility = new WeakMap(), _TransactionController_getExternalPendingTransactions = new WeakMap(), _TransactionController_getGasFeeEstimates = new WeakMap(), _TransactionController_getNetworkState = new WeakMap(), _TransactionController_getPermittedAccounts = new WeakMap(), _TransactionController_getSavedGasFees = new WeakMap(), _TransactionController_incomingTransactionHelper = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_internalEvents = new WeakMap(), _TransactionController_isAutomaticGasFeeUpdateEnabled = new WeakMap(), _TransactionController_isEIP7702GasFeeTokensEnabled = new WeakMap(), _TransactionController_isFirstTimeInteractionEnabled = new WeakMap(), _TransactionController_isHistoryDisabled = new WeakMap(), _TransactionController_isSendFlowHistoryDisabled = new WeakMap(), _TransactionController_isSimulationEnabled = new WeakMap(), _TransactionController_isSwapsDisabled = new WeakMap(), _TransactionController_layer1GasFeeFlows = new WeakMap(), _TransactionController_methodDataHelper = new WeakMap(), _TransactionController_multichainTrackingHelper = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(), _TransactionController_publicKeyEIP7702 = new WeakMap(), _TransactionController_publish = new WeakMap(), _TransactionController_publishBatchHook = new WeakMap(), _TransactionController_securityProviderRequest = new WeakMap(), _TransactionController_sign = new WeakMap(), _TransactionController_signAbortCallbacks = new WeakMap(), _TransactionController_testGasFeeFlows = new WeakMap(), _TransactionController_trace = new WeakMap(), _TransactionController_transactionHistoryLimit = new WeakMap(), _TransactionController_checkForPendingTransactionAndStartPolling = new WeakMap(), _TransactionController_instances = new WeakSet(), _TransactionController_retryTransaction = async function _TransactionController_retryTransaction({ actionId, afterSubmit, estimatedBaseFee, gasValues, label, prepareTransactionParams, rate, transactionId, transactionType, }) {
1279
+ _TransactionController_afterAdd = new WeakMap(), _TransactionController_afterSign = new WeakMap(), _TransactionController_afterSimulate = new WeakMap(), _TransactionController_approvingTransactionIds = new WeakMap(), _TransactionController_beforeCheckPendingTransaction = new WeakMap(), _TransactionController_beforePublish = new WeakMap(), _TransactionController_beforeSign = new WeakMap(), _TransactionController_gasFeeFlows = new WeakMap(), _TransactionController_getAdditionalSignArguments = new WeakMap(), _TransactionController_getCurrentAccountEIP1559Compatibility = new WeakMap(), _TransactionController_getCurrentNetworkEIP1559Compatibility = new WeakMap(), _TransactionController_getExternalPendingTransactions = new WeakMap(), _TransactionController_getGasFeeEstimates = new WeakMap(), _TransactionController_getNetworkState = new WeakMap(), _TransactionController_getPermittedAccounts = new WeakMap(), _TransactionController_getSavedGasFees = new WeakMap(), _TransactionController_incomingTransactionHelper = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_internalEvents = new WeakMap(), _TransactionController_isAutomaticGasFeeUpdateEnabled = new WeakMap(), _TransactionController_isEIP7702GasFeeTokensEnabled = new WeakMap(), _TransactionController_isFirstTimeInteractionEnabled = new WeakMap(), _TransactionController_isHistoryDisabled = new WeakMap(), _TransactionController_isSendFlowHistoryDisabled = new WeakMap(), _TransactionController_isSimulationEnabled = new WeakMap(), _TransactionController_isSwapsDisabled = new WeakMap(), _TransactionController_layer1GasFeeFlows = new WeakMap(), _TransactionController_methodDataHelper = new WeakMap(), _TransactionController_multichainTrackingHelper = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(), _TransactionController_publicKeyEIP7702 = new WeakMap(), _TransactionController_publish = new WeakMap(), _TransactionController_publishBatchHook = new WeakMap(), _TransactionController_securityProviderRequest = new WeakMap(), _TransactionController_sign = new WeakMap(), _TransactionController_signAbortCallbacks = new WeakMap(), _TransactionController_skipSimulationTransactionIds = new WeakMap(), _TransactionController_testGasFeeFlows = new WeakMap(), _TransactionController_trace = new WeakMap(), _TransactionController_transactionHistoryLimit = new WeakMap(), _TransactionController_checkForPendingTransactionAndStartPolling = new WeakMap(), _TransactionController_instances = new WeakSet(), _TransactionController_retryTransaction = async function _TransactionController_retryTransaction({ actionId, afterSubmit, estimatedBaseFee, gasValues, label, prepareTransactionParams, rate, transactionId, transactionType, }) {
1271
1280
  // If transaction is found for same action id, do not create a new transaction.
1272
1281
  if (__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionWithActionId).call(this, actionId)) {
1273
1282
  return;
@@ -1442,6 +1451,9 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_afterSig
1442
1451
  }
1443
1452
  }
1444
1453
  }
1454
+ finally {
1455
+ __classPrivateFieldGet(this, _TransactionController_skipSimulationTransactionIds, "f").delete(transactionId);
1456
+ }
1445
1457
  }
1446
1458
  const finalMeta = await finishedPromise;
1447
1459
  switch (finalMeta?.status) {
@@ -1692,14 +1704,23 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
1692
1704
  if (!transactions.length) {
1693
1705
  return;
1694
1706
  }
1695
- const finalTransactions = transactions.map((tx) => {
1707
+ const finalTransactions = [];
1708
+ for (const tx of transactions) {
1696
1709
  const { chainId } = tx;
1697
- const networkClientId = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNetworkClientId).call(this, { chainId });
1698
- return {
1699
- ...tx,
1700
- networkClientId,
1701
- };
1702
- });
1710
+ try {
1711
+ const networkClientId = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNetworkClientId).call(this, { chainId });
1712
+ finalTransactions.push({
1713
+ ...tx,
1714
+ networkClientId,
1715
+ });
1716
+ }
1717
+ catch (error) {
1718
+ (0, logger_1.projectLogger)('Failed to get network client ID for incoming transaction', {
1719
+ chainId,
1720
+ error,
1721
+ });
1722
+ }
1723
+ }
1703
1724
  this.update((state) => {
1704
1725
  const { transactions: currentTransactions } = state;
1705
1726
  state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, [
@@ -1818,31 +1839,43 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
1818
1839
  const currentAccountIsEIP1559Compatible = await __classPrivateFieldGet(this, _TransactionController_getCurrentAccountEIP1559Compatibility, "f").call(this);
1819
1840
  return (currentNetworkIsEIP1559Compatible && currentAccountIsEIP1559Compatible);
1820
1841
  }, _TransactionController_signTransaction = async function _TransactionController_signTransaction(transactionMeta) {
1821
- const { isExternalSign, txParams } = transactionMeta;
1842
+ const { chainId, id: transactionId, isExternalSign, txParams, } = transactionMeta;
1822
1843
  if (isExternalSign) {
1823
1844
  (0, logger_1.projectLogger)('Skipping sign as signed externally');
1824
1845
  return undefined;
1825
1846
  }
1826
- (0, logger_1.projectLogger)('Signing transaction', txParams);
1827
1847
  const { authorizationList, from } = txParams;
1828
- const finalTxParams = { ...txParams };
1829
- finalTxParams.authorizationList = await (0, eip7702_1.signAuthorizationList)({
1848
+ const signedAuthorizationList = await (0, eip7702_1.signAuthorizationList)({
1830
1849
  authorizationList,
1831
1850
  messenger: this.messagingSystem,
1832
1851
  transactionMeta,
1833
1852
  });
1834
- const unsignedEthTx = (0, prepare_1.prepareTransaction)(transactionMeta.chainId, finalTxParams);
1835
- __classPrivateFieldGet(this, _TransactionController_approvingTransactionIds, "f").add(transactionMeta.id);
1853
+ if (signedAuthorizationList) {
1854
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId }, (txMeta) => {
1855
+ txMeta.txParams.authorizationList = signedAuthorizationList;
1856
+ });
1857
+ }
1858
+ (0, logger_1.projectLogger)('Calling before sign hook', transactionMeta);
1859
+ const { updateTransaction } = (await __classPrivateFieldGet(this, _TransactionController_beforeSign, "f").call(this, { transactionMeta })) ?? {};
1860
+ if (updateTransaction) {
1861
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, skipResimulateCheck: true, note: 'beforeSign Hook' }, updateTransaction);
1862
+ (0, logger_1.projectLogger)('Updated transaction after before sign hook');
1863
+ }
1864
+ const finalTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionOrThrow).call(this, transactionId);
1865
+ const { txParams: finalTxParams } = finalTransactionMeta;
1866
+ const unsignedEthTx = (0, prepare_1.prepareTransaction)(chainId, finalTxParams);
1867
+ __classPrivateFieldGet(this, _TransactionController_approvingTransactionIds, "f").add(transactionId);
1868
+ (0, logger_1.projectLogger)('Signing transaction', finalTxParams);
1836
1869
  const signedTx = await new Promise((resolve, reject) => {
1837
- __classPrivateFieldGet(this, _TransactionController_sign, "f")?.call(this, unsignedEthTx, from, ...__classPrivateFieldGet(this, _TransactionController_getAdditionalSignArguments, "f").call(this, transactionMeta)).then(resolve, reject);
1838
- __classPrivateFieldGet(this, _TransactionController_signAbortCallbacks, "f").set(transactionMeta.id, () => reject(new Error('Signing aborted by user')));
1870
+ __classPrivateFieldGet(this, _TransactionController_sign, "f")?.call(this, unsignedEthTx, from, ...__classPrivateFieldGet(this, _TransactionController_getAdditionalSignArguments, "f").call(this, finalTransactionMeta)).then(resolve, reject);
1871
+ __classPrivateFieldGet(this, _TransactionController_signAbortCallbacks, "f").set(transactionId, () => reject(new Error('Signing aborted by user')));
1839
1872
  });
1840
- __classPrivateFieldGet(this, _TransactionController_signAbortCallbacks, "f").delete(transactionMeta.id);
1873
+ __classPrivateFieldGet(this, _TransactionController_signAbortCallbacks, "f").delete(transactionId);
1841
1874
  if (!signedTx) {
1842
1875
  (0, logger_1.projectLogger)('Skipping signed status as no signed transaction');
1843
1876
  return undefined;
1844
1877
  }
1845
- const transactionMetaFromHook = (0, lodash_1.cloneDeep)(transactionMeta);
1878
+ const transactionMetaFromHook = (0, lodash_1.cloneDeep)(finalTransactionMeta);
1846
1879
  if (!__classPrivateFieldGet(this, _TransactionController_afterSign, "f").call(this, transactionMetaFromHook, signedTx)) {
1847
1880
  this.updateTransaction(transactionMetaFromHook, 'TransactionController#signTransaction - Update after sign');
1848
1881
  (0, logger_1.projectLogger)('Skipping signed status based on hook');
@@ -2061,7 +2094,8 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2061
2094
  tokenBalanceChanges: [],
2062
2095
  };
2063
2096
  let gasFeeTokens = [];
2064
- if (__classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f").call(this)) {
2097
+ const isBalanceChangesSkipped = __classPrivateFieldGet(this, _TransactionController_skipSimulationTransactionIds, "f").has(transactionId);
2098
+ if (__classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f").call(this) && !isBalanceChangesSkipped) {
2065
2099
  simulationData = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Simulate', parentContext: traceContext }, () => (0, balance_changes_1.getBalanceChanges)({
2066
2100
  blockTime,
2067
2101
  chainId,
@@ -2085,21 +2119,24 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2085
2119
  transactionMeta,
2086
2120
  });
2087
2121
  }
2088
- const finalTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
2122
+ const latestTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
2089
2123
  /* istanbul ignore if */
2090
- if (!finalTransactionMeta) {
2124
+ if (!latestTransactionMeta) {
2091
2125
  (0, logger_1.projectLogger)('Cannot update simulation data as transaction not found', transactionId, simulationData);
2092
2126
  return;
2093
2127
  }
2094
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2128
+ const updatedTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2095
2129
  transactionId,
2096
2130
  note: 'TransactionController#updateSimulationData - Update simulation data',
2097
2131
  skipResimulateCheck: Boolean(blockTime),
2098
2132
  }, (txMeta) => {
2099
2133
  txMeta.gasFeeTokens = gasFeeTokens;
2100
- txMeta.simulationData = simulationData;
2134
+ if (!isBalanceChangesSkipped) {
2135
+ txMeta.simulationData = simulationData;
2136
+ }
2101
2137
  });
2102
- (0, logger_1.projectLogger)('Updated simulation data', transactionId, simulationData);
2138
+ (0, logger_1.projectLogger)('Updated simulation data', transactionId, updatedTransactionMeta);
2139
+ await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_runAfterSimulateHook).call(this, updatedTransactionMeta);
2103
2140
  }, _TransactionController_onGasFeePollerTransactionUpdate = function _TransactionController_onGasFeePollerTransactionUpdate({ transactionId, gasFeeEstimates, gasFeeEstimatesLoaded, layer1GasFee, }) {
2104
2141
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, skipHistory: true }, (txMeta) => {
2105
2142
  (0, GasFeePoller_1.updateTransactionGasProperties)({
@@ -2156,6 +2193,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2156
2193
  txMeta: transactionMeta,
2157
2194
  });
2158
2195
  }, _TransactionController_registerActionHandlers = function _TransactionController_registerActionHandlers() {
2196
+ this.messagingSystem.registerActionHandler(`${controllerName}:estimateGas`, this.estimateGas.bind(this));
2159
2197
  this.messagingSystem.registerActionHandler(`${controllerName}:updateCustodialTransaction`, this.updateCustodialTransaction.bind(this));
2160
2198
  }, _TransactionController_deleteTransaction = function _TransactionController_deleteTransaction(transactionId) {
2161
2199
  this.update((state) => {
@@ -2204,5 +2242,30 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2204
2242
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onTransactionStatusChange).call(this, newTransactionMeta);
2205
2243
  this.messagingSystem.publish(`${controllerName}:transactionFinished`, newTransactionMeta);
2206
2244
  __classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(`${transactionMeta.id}:finished`, newTransactionMeta);
2245
+ }, _TransactionController_runAfterSimulateHook = async function _TransactionController_runAfterSimulateHook(transactionMeta) {
2246
+ (0, logger_1.projectLogger)('Calling afterSimulate hook', transactionMeta);
2247
+ const { id: transactionId } = transactionMeta;
2248
+ const result = await __classPrivateFieldGet(this, _TransactionController_afterSimulate, "f").call(this, {
2249
+ transactionMeta,
2250
+ });
2251
+ const { skipSimulation, updateTransaction } = result || {};
2252
+ if (skipSimulation) {
2253
+ __classPrivateFieldGet(this, _TransactionController_skipSimulationTransactionIds, "f").add(transactionId);
2254
+ }
2255
+ else if (skipSimulation === false) {
2256
+ __classPrivateFieldGet(this, _TransactionController_skipSimulationTransactionIds, "f").delete(transactionId);
2257
+ }
2258
+ if (!updateTransaction) {
2259
+ return;
2260
+ }
2261
+ const updatedTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2262
+ transactionId,
2263
+ skipResimulateCheck: true,
2264
+ note: 'afterSimulate Hook',
2265
+ }, (txMeta) => {
2266
+ txMeta.txParamsOriginal = (0, lodash_1.cloneDeep)(txMeta.txParams);
2267
+ updateTransaction(txMeta);
2268
+ });
2269
+ (0, logger_1.projectLogger)('Updated transaction with afterSimulate data', updatedTransactionMeta);
2207
2270
  };
2208
2271
  //# sourceMappingURL=TransactionController.cjs.map