@metamask-previews/transaction-controller 62.6.0-preview-d717276a → 62.6.0-preview-cd26c284

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +1 -4
  2. package/dist/TransactionController.cjs +110 -18
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts +15 -6
  5. package/dist/TransactionController.d.cts.map +1 -1
  6. package/dist/TransactionController.d.mts +15 -6
  7. package/dist/TransactionController.d.mts.map +1 -1
  8. package/dist/TransactionController.mjs +111 -19
  9. package/dist/TransactionController.mjs.map +1 -1
  10. package/dist/helpers/IncomingTransactionHelper.cjs +9 -4
  11. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  12. package/dist/helpers/IncomingTransactionHelper.d.cts +2 -1
  13. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  14. package/dist/helpers/IncomingTransactionHelper.d.mts +2 -1
  15. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  16. package/dist/helpers/IncomingTransactionHelper.mjs +9 -4
  17. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  18. package/dist/index.cjs +4 -1
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.cts +1 -0
  21. package/dist/index.d.cts.map +1 -1
  22. package/dist/index.d.mts +1 -0
  23. package/dist/index.d.mts.map +1 -1
  24. package/dist/index.mjs +1 -0
  25. package/dist/index.mjs.map +1 -1
  26. package/dist/types.cjs.map +1 -1
  27. package/dist/types.d.cts +4 -5
  28. package/dist/types.d.cts.map +1 -1
  29. package/dist/types.d.mts +4 -5
  30. package/dist/types.d.mts.map +1 -1
  31. package/dist/types.mjs.map +1 -1
  32. package/dist/utils/history.cjs +164 -0
  33. package/dist/utils/history.cjs.map +1 -0
  34. package/dist/utils/history.d.cts +29 -0
  35. package/dist/utils/history.d.cts.map +1 -0
  36. package/dist/utils/history.d.mts +29 -0
  37. package/dist/utils/history.d.mts.map +1 -0
  38. package/dist/utils/history.mjs +164 -0
  39. package/dist/utils/history.mjs.map +1 -0
  40. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,10 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ### Changed
11
-
12
- - Deprecate `history` and `sendFlowHistory` properties from `TransactionMeta` and `TransactionController` ([#7326](https://github.com/MetaMask/core/pull/7326))
13
-
14
10
  ## [62.6.0]
15
11
 
16
12
  ### Added
@@ -34,6 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
34
30
 
35
31
  ### Changed
36
32
 
33
+ - Use gas fee properties from first transaction in EIP-7702 transactions ([#7323](https://github.com/MetaMask/core/pull/7323))
37
34
  - Bump `@metamask/remote-feature-flag-controller` from `^2.0.1` to `^3.0.0` ([#7309](https://github.com/MetaMask/core/pull/7309)
38
35
 
39
36
  ## [62.4.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_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_getSimulationConfig, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_internalEvents, _TransactionController_isAutomaticGasFeeUpdateEnabled, _TransactionController_isEIP7702GasFeeTokensEnabled, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_isSwapsDisabled, _TransactionController_isTimeoutEnabled, _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_retryTransaction, _TransactionController_signExternalTransaction, _TransactionController_addMetadata, _TransactionController_updateGasProperties, _TransactionController_onBootCleanup, _TransactionController_failIncompleteTransactions, _TransactionController_processApproval, _TransactionController_approveTransaction, _TransactionController_publishTransaction, _TransactionController_rejectTransaction, _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_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_onGasFeePollerTransactionBatchUpdate, _TransactionController_updateTransactionBatch, _TransactionController_getSelectedAccount, _TransactionController_getInternalAccounts, _TransactionController_updateSubmitHistory, _TransactionController_updateGasEstimate, _TransactionController_registerActionHandlers, _TransactionController_deleteTransaction, _TransactionController_isRejectError, _TransactionController_rejectTransactionAndThrow, _TransactionController_failTransaction, _TransactionController_runAfterSimulateHook, _TransactionController_defaultPublishHook, _TransactionController_getGasFeeTokens, _TransactionController_getGasFeeTokensAction;
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_getSimulationConfig, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_internalEvents, _TransactionController_isAutomaticGasFeeUpdateEnabled, _TransactionController_isEIP7702GasFeeTokensEnabled, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isHistoryDisabled, _TransactionController_isSendFlowHistoryDisabled, _TransactionController_isSimulationEnabled, _TransactionController_isSwapsDisabled, _TransactionController_isTimeoutEnabled, _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_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_onGasFeePollerTransactionBatchUpdate, _TransactionController_updateTransactionBatch, _TransactionController_getSelectedAccount, _TransactionController_getInternalAccounts, _TransactionController_updateSubmitHistory, _TransactionController_updateGasEstimate, _TransactionController_registerActionHandlers, _TransactionController_deleteTransaction, _TransactionController_isRejectError, _TransactionController_rejectTransactionAndThrow, _TransactionController_failTransaction, _TransactionController_runAfterSimulateHook, _TransactionController_defaultPublishHook, _TransactionController_getGasFeeTokens, _TransactionController_getGasFeeTokensAction;
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");
@@ -53,6 +53,7 @@ const gas_1 = require("./utils/gas.cjs");
53
53
  const gas_fee_tokens_1 = require("./utils/gas-fee-tokens.cjs");
54
54
  const gas_fees_1 = require("./utils/gas-fees.cjs");
55
55
  const gas_flow_1 = require("./utils/gas-flow.cjs");
56
+ const history_1 = require("./utils/history.cjs");
56
57
  const layer1_gas_fee_flow_1 = require("./utils/layer1-gas-fee-flow.cjs");
57
58
  const nonce_1 = require("./utils/nonce.cjs");
58
59
  const prepare_1 = require("./utils/prepare.cjs");
@@ -137,14 +138,13 @@ function getDefaultTransactionControllerState() {
137
138
  * Controller responsible for submitting and managing transactions.
138
139
  */
139
140
  class TransactionController extends base_controller_1.BaseController {
140
- // readonly #transactionHistoryLimit: number;
141
141
  /**
142
142
  * Constructs a TransactionController.
143
143
  *
144
144
  * @param options - The controller options.
145
145
  */
146
146
  constructor(options) {
147
- const { disableSwaps, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, getSimulationConfig, hooks, incomingTransactions = {}, isAutomaticGasFeeUpdateEnabled, isEIP7702GasFeeTokensEnabled, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, pendingTransactions = {}, publicKeyEIP7702, securityProviderRequest, sign, state, testGasFeeFlows, trace, } = options;
147
+ const { disableHistory, disableSendFlowHistory, disableSwaps, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, getSimulationConfig, hooks, incomingTransactions = {}, isAutomaticGasFeeUpdateEnabled, isEIP7702GasFeeTokensEnabled, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, pendingTransactions = {}, publicKeyEIP7702, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, } = options;
148
148
  super({
149
149
  name: controllerName,
150
150
  metadata,
@@ -178,6 +178,8 @@ class TransactionController extends base_controller_1.BaseController {
178
178
  _TransactionController_isAutomaticGasFeeUpdateEnabled.set(this, void 0);
179
179
  _TransactionController_isEIP7702GasFeeTokensEnabled.set(this, void 0);
180
180
  _TransactionController_isFirstTimeInteractionEnabled.set(this, void 0);
181
+ _TransactionController_isHistoryDisabled.set(this, void 0);
182
+ _TransactionController_isSendFlowHistoryDisabled.set(this, void 0);
181
183
  _TransactionController_isSimulationEnabled.set(this, void 0);
182
184
  _TransactionController_isSwapsDisabled.set(this, void 0);
183
185
  _TransactionController_isTimeoutEnabled.set(this, void 0);
@@ -194,6 +196,7 @@ class TransactionController extends base_controller_1.BaseController {
194
196
  _TransactionController_skipSimulationTransactionIds.set(this, new Set());
195
197
  _TransactionController_testGasFeeFlows.set(this, void 0);
196
198
  _TransactionController_trace.set(this, void 0);
199
+ _TransactionController_transactionHistoryLimit.set(this, void 0);
197
200
  _TransactionController_checkForPendingTransactionAndStartPolling.set(this, () => {
198
201
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").checkForPendingTransactionAndStartPolling();
199
202
  });
@@ -228,6 +231,8 @@ class TransactionController extends base_controller_1.BaseController {
228
231
  __classPrivateFieldSet(this, _TransactionController_isEIP7702GasFeeTokensEnabled, isEIP7702GasFeeTokensEnabled ??
229
232
  (() => Promise.resolve(false)), "f");
230
233
  __classPrivateFieldSet(this, _TransactionController_isFirstTimeInteractionEnabled, isFirstTimeInteractionEnabled ?? (() => true), "f");
234
+ __classPrivateFieldSet(this, _TransactionController_isHistoryDisabled, disableHistory ?? false, "f");
235
+ __classPrivateFieldSet(this, _TransactionController_isSendFlowHistoryDisabled, disableSendFlowHistory ?? false, "f");
231
236
  __classPrivateFieldSet(this, _TransactionController_isSimulationEnabled, isSimulationEnabled ?? (() => true), "f");
232
237
  __classPrivateFieldSet(this, _TransactionController_isSwapsDisabled, disableSwaps ?? false, "f");
233
238
  __classPrivateFieldSet(this, _TransactionController_isTimeoutEnabled, hooks?.isTimeoutEnabled ?? (() => true), "f");
@@ -240,6 +245,7 @@ class TransactionController extends base_controller_1.BaseController {
240
245
  __classPrivateFieldSet(this, _TransactionController_sign, sign, "f");
241
246
  __classPrivateFieldSet(this, _TransactionController_testGasFeeFlows, testGasFeeFlows === true, "f");
242
247
  __classPrivateFieldSet(this, _TransactionController_trace, trace ?? ((_request, fn) => fn?.()), "f");
248
+ __classPrivateFieldSet(this, _TransactionController_transactionHistoryLimit, transactionHistoryLimit, "f");
243
249
  const findNetworkClientIdByChainId = (chainId) => {
244
250
  return this.messenger.call(`NetworkController:findNetworkClientIdByChainId`, chainId);
245
251
  };
@@ -291,6 +297,7 @@ class TransactionController extends base_controller_1.BaseController {
291
297
  isEnabled: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").isEnabled,
292
298
  messenger: this.messenger,
293
299
  remoteTransactionSource: new AccountsApiRemoteTransactionSource_1.AccountsApiRemoteTransactionSource(),
300
+ trimTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).bind(this),
294
301
  updateTransactions: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").updateTransactions,
295
302
  }), "f");
296
303
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_addIncomingTransactionHelperListeners).call(this, __classPrivateFieldGet(this, _TransactionController_incomingTransactionHelper, "f"));
@@ -384,7 +391,7 @@ class TransactionController extends base_controller_1.BaseController {
384
391
  */
385
392
  async addTransaction(txParams, options) {
386
393
  (0, logger_1.projectLogger)('Adding transaction', txParams, options);
387
- const { actionId, assetsFiatValues, batchId, deviceConfirmedOn, disableGasBuffer, gasFeeToken, isGasFeeIncluded, isGasFeeSponsored, method, nestedTransactions, networkClientId, origin, publishHook, requireApproval, securityAlertResponse, skipInitialGasEstimate, swaps = {}, traceContext, type, } = options;
394
+ const { actionId, assetsFiatValues, batchId, deviceConfirmedOn, disableGasBuffer, gasFeeToken, isGasFeeIncluded, isGasFeeSponsored, method, nestedTransactions, networkClientId, origin, publishHook, requireApproval, securityAlertResponse, sendFlowHistory, skipInitialGasEstimate, swaps = {}, traceContext, type, } = options;
388
395
  // eslint-disable-next-line no-param-reassign
389
396
  txParams = (0, utils_2.normalizeTransactionParams)(txParams);
390
397
  if (!__classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").has(networkClientId)) {
@@ -471,6 +478,7 @@ class TransactionController extends base_controller_1.BaseController {
471
478
  .then(() => {
472
479
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
473
480
  transactionId: newTransactionMeta.id,
481
+ skipHistory: true,
474
482
  skipResimulateCheck: true,
475
483
  skipValidation: true,
476
484
  }, (tx) => {
@@ -494,6 +502,14 @@ class TransactionController extends base_controller_1.BaseController {
494
502
  addedTransactionMeta.securityProviderResponse =
495
503
  securityProviderResponse;
496
504
  }
505
+ if (!__classPrivateFieldGet(this, _TransactionController_isSendFlowHistoryDisabled, "f")) {
506
+ // eslint-disable-next-line require-atomic-updates
507
+ addedTransactionMeta.sendFlowHistory = sendFlowHistory ?? [];
508
+ }
509
+ // Initial history push
510
+ if (!__classPrivateFieldGet(this, _TransactionController_isHistoryDisabled, "f")) {
511
+ addedTransactionMeta = (0, history_1.addInitialHistorySnapshot)(addedTransactionMeta);
512
+ }
497
513
  addedTransactionMeta = (0, swaps_1.updateSwapsTransaction)(addedTransactionMeta, transactionType, swaps, {
498
514
  isSwapsDisabled: __classPrivateFieldGet(this, _TransactionController_isSwapsDisabled, "f"),
499
515
  cancelTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransaction).bind(this),
@@ -504,6 +520,7 @@ class TransactionController extends base_controller_1.BaseController {
504
520
  .then((delegationAddress) => {
505
521
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
506
522
  transactionId: addedTransactionMeta.id,
523
+ skipHistory: true,
507
524
  skipResimulateCheck: true,
508
525
  skipValidation: true,
509
526
  }, (tx) => {
@@ -693,14 +710,13 @@ class TransactionController extends base_controller_1.BaseController {
693
710
  * Updates an existing transaction in state.
694
711
  *
695
712
  * @param transactionMeta - The new transaction to store in state.
696
- * @param note - A note or update reason to be logged.
713
+ * @param note - A note or update reason to include in the transaction history.
697
714
  */
698
715
  updateTransaction(transactionMeta, note) {
699
716
  const { id: transactionId } = transactionMeta;
700
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId }, () => ({
717
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, note }, () => ({
701
718
  ...transactionMeta,
702
719
  }));
703
- (0, logger_1.projectLogger)(`Transaction ${transactionId} updated. ${note}`);
704
720
  }
705
721
  /**
706
722
  * Update the security alert response for a transaction.
@@ -748,7 +764,7 @@ class TransactionController extends base_controller_1.BaseController {
748
764
  return !isMatchingAddress;
749
765
  });
750
766
  this.update((state) => {
751
- state.transactions = newTransactions;
767
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, newTransactions);
752
768
  });
753
769
  }
754
770
  /**
@@ -789,6 +805,33 @@ class TransactionController extends base_controller_1.BaseController {
789
805
  console.error('Failed to confirm external transaction', error);
790
806
  }
791
807
  }
808
+ /**
809
+ * Append new send flow history to a transaction.
810
+ *
811
+ * @param transactionID - The ID of the transaction to update.
812
+ * @param currentSendFlowHistoryLength - The length of the current sendFlowHistory array.
813
+ * @param sendFlowHistoryToAdd - The sendFlowHistory entries to add.
814
+ * @returns The updated transactionMeta.
815
+ */
816
+ updateTransactionSendFlowHistory(transactionID, currentSendFlowHistoryLength, sendFlowHistoryToAdd) {
817
+ if (__classPrivateFieldGet(this, _TransactionController_isSendFlowHistoryDisabled, "f")) {
818
+ throw new Error('Send flow history is disabled for the current transaction controller');
819
+ }
820
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionID);
821
+ if (!transactionMeta) {
822
+ throw new Error(`Cannot update send flow history as no transaction metadata found`);
823
+ }
824
+ (0, utils_2.validateIfTransactionUnapproved)(transactionMeta, 'updateTransactionSendFlowHistory');
825
+ const sendFlowHistory = transactionMeta.sendFlowHistory ?? [];
826
+ if (currentSendFlowHistoryLength === sendFlowHistory.length) {
827
+ const updatedTransactionMeta = {
828
+ ...transactionMeta,
829
+ sendFlowHistory: [...sendFlowHistory, ...sendFlowHistoryToAdd],
830
+ };
831
+ this.updateTransaction(updatedTransactionMeta, `${controllerName}:updateTransactionSendFlowHistory - sendFlowHistory updated`);
832
+ }
833
+ return __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionID);
834
+ }
792
835
  /**
793
836
  * Update the gas values of a transaction.
794
837
  *
@@ -858,6 +901,7 @@ class TransactionController extends base_controller_1.BaseController {
858
901
  const filteredTransactionGasFees = (0, lodash_1.pickBy)(transactionGasFees);
859
902
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
860
903
  transactionId,
904
+ note: `${controllerName}:updateTransactionGasFees - gas values updated`,
861
905
  skipResimulateCheck: true,
862
906
  }, (draftTxMeta) => {
863
907
  const { txParams, ...otherProps } = filteredTransactionGasFees;
@@ -972,6 +1016,8 @@ class TransactionController extends base_controller_1.BaseController {
972
1016
  }
973
1017
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
974
1018
  transactionId,
1019
+ note: 'TransactionController#setTransactionActive - Transaction isActive updated',
1020
+ skipHistory: true,
975
1021
  skipValidation: true,
976
1022
  skipResimulateCheck: true,
977
1023
  }, (updatedTransactionMeta) => {
@@ -1217,7 +1263,7 @@ class TransactionController extends base_controller_1.BaseController {
1217
1263
  clearUnapprovedTransactions() {
1218
1264
  const transactions = this.state.transactions.filter(({ status }) => status !== types_1.TransactionStatus.unapproved);
1219
1265
  this.update((state) => {
1220
- state.transactions = transactions;
1266
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, transactions);
1221
1267
  });
1222
1268
  }
1223
1269
  /**
@@ -1255,6 +1301,7 @@ class TransactionController extends base_controller_1.BaseController {
1255
1301
  });
1256
1302
  const updatedTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1257
1303
  transactionId,
1304
+ note: 'TransactionController#updateAtomicBatchData - Atomic batch data updated',
1258
1305
  }, (transactionMeta) => {
1259
1306
  const { nestedTransactions, txParams } = transactionMeta;
1260
1307
  const from = txParams.from;
@@ -1277,6 +1324,7 @@ class TransactionController extends base_controller_1.BaseController {
1277
1324
  await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateGasEstimate).call(this, draftTransaction);
1278
1325
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1279
1326
  transactionId,
1327
+ note: 'TransactionController#updateAtomicBatchData - Gas estimate updated',
1280
1328
  }, (transactionMeta) => {
1281
1329
  transactionMeta.txParams.gas = draftTransaction.txParams.gas;
1282
1330
  transactionMeta.simulationFails = draftTransaction.simulationFails;
@@ -1296,6 +1344,7 @@ class TransactionController extends base_controller_1.BaseController {
1296
1344
  (0, logger_1.projectLogger)('Updating batch transactions', { transactionId, batchTransactions });
1297
1345
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1298
1346
  transactionId,
1347
+ note: 'TransactionController#updateBatchTransactions - Batch transactions updated',
1299
1348
  }, (transactionMeta) => {
1300
1349
  transactionMeta.batchTransactions = batchTransactions;
1301
1350
  });
@@ -1378,7 +1427,7 @@ class TransactionController extends base_controller_1.BaseController {
1378
1427
  }
1379
1428
  }
1380
1429
  exports.TransactionController = TransactionController;
1381
- _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_getSimulationConfig = 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_isSimulationEnabled = new WeakMap(), _TransactionController_isSwapsDisabled = new WeakMap(), _TransactionController_isTimeoutEnabled = 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_checkForPendingTransactionAndStartPolling = new WeakMap(), _TransactionController_instances = new WeakSet(), _TransactionController_retryTransaction = async function _TransactionController_retryTransaction({ actionId, afterSubmit, estimatedBaseFee, gasValues, label, prepareTransactionParams, rate, transactionId, transactionType, }) {
1430
+ _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_getSimulationConfig = 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_isTimeoutEnabled = 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, }) {
1382
1431
  // If transaction is found for same action id, do not create a new transaction.
1383
1432
  if (__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionWithActionId).call(this, actionId)) {
1384
1433
  return;
@@ -1466,7 +1515,10 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_afterSig
1466
1515
  }, _TransactionController_addMetadata = function _TransactionController_addMetadata(transactionMeta) {
1467
1516
  (0, validation_1.validateTxParams)(transactionMeta.txParams);
1468
1517
  this.update((state) => {
1469
- state.transactions = [...state.transactions, transactionMeta];
1518
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, [
1519
+ ...state.transactions,
1520
+ transactionMeta,
1521
+ ]);
1470
1522
  });
1471
1523
  }, _TransactionController_updateGasProperties = async function _TransactionController_updateGasProperties(transactionMeta, { traceContext } = {}) {
1472
1524
  const isEIP1559Compatible = transactionMeta.txParams.type !== types_1.TransactionEnvelopeType.legacy &&
@@ -1621,6 +1673,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
1621
1673
  // eslint-disable-next-line require-atomic-updates
1622
1674
  transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1623
1675
  transactionId,
1676
+ note: 'TransactionController#approveTransaction - Transaction approved',
1624
1677
  }, (draftTxMeta) => {
1625
1678
  const { chainId, txParams } = draftTxMeta;
1626
1679
  const { gas, type } = txParams;
@@ -1673,6 +1726,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
1673
1726
  // eslint-disable-next-line require-atomic-updates
1674
1727
  transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1675
1728
  transactionId,
1729
+ note: 'TransactionController#approveTransaction - Transaction submitted',
1676
1730
  }, (draftTxMeta) => {
1677
1731
  draftTxMeta.hash = hash;
1678
1732
  draftTxMeta.status = types_1.TransactionStatus.submitted;
@@ -1733,6 +1787,27 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
1733
1787
  actionId,
1734
1788
  });
1735
1789
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onTransactionStatusChange).call(this, updatedTransactionMeta);
1790
+ }, _TransactionController_trimTransactionsForState = function _TransactionController_trimTransactionsForState(transactions) {
1791
+ const nonceNetworkSet = new Set();
1792
+ const txsToKeep = [...transactions]
1793
+ .sort((a, b) => (a.time > b.time ? -1 : 1)) // Descending time order
1794
+ .filter((tx) => {
1795
+ const { chainId, status, txParams, time } = tx;
1796
+ if (txParams) {
1797
+ const key = `${String(txParams.nonce)}-${(0, controller_utils_1.convertHexToDecimal)(chainId)}-${new Date(time).toDateString()}`;
1798
+ if (nonceNetworkSet.has(key)) {
1799
+ return true;
1800
+ }
1801
+ else if (nonceNetworkSet.size < __classPrivateFieldGet(this, _TransactionController_transactionHistoryLimit, "f") ||
1802
+ !__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isFinalState).call(this, status)) {
1803
+ nonceNetworkSet.add(key);
1804
+ return true;
1805
+ }
1806
+ }
1807
+ return false;
1808
+ });
1809
+ txsToKeep.reverse(); // Ascending time order
1810
+ return txsToKeep;
1736
1811
  }, _TransactionController_isFinalState = function _TransactionController_isFinalState(status) {
1737
1812
  return (status === types_1.TransactionStatus.rejected ||
1738
1813
  status === types_1.TransactionStatus.confirmed ||
@@ -1820,7 +1895,10 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
1820
1895
  }
1821
1896
  this.update((state) => {
1822
1897
  const { transactions: currentTransactions } = state;
1823
- state.transactions = [...finalTransactions, ...currentTransactions];
1898
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, [
1899
+ ...finalTransactions,
1900
+ ...currentTransactions,
1901
+ ]);
1824
1902
  (0, logger_1.projectLogger)('Added incoming transactions to state', finalTransactions.length, finalTransactions);
1825
1903
  });
1826
1904
  this.messenger.publish(`${controllerName}:incomingTransactionsReceived`, finalTransactions);
@@ -1857,10 +1935,17 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
1857
1935
  const confirmedTxs = sameFromAndNetworkTransactions.filter((transaction) => transaction.status === types_1.TransactionStatus.confirmed);
1858
1936
  const pendingTxs = sameFromAndNetworkTransactions.filter((transaction) => transaction.status === types_1.TransactionStatus.submitted);
1859
1937
  (0, external_transactions_1.validateConfirmedExternalTransaction)(transactionMeta, confirmedTxs, pendingTxs);
1938
+ // Make sure provided external transaction has non empty history array
1939
+ const newTransactionMeta = (transactionMeta.history ?? []).length === 0 && !__classPrivateFieldGet(this, _TransactionController_isHistoryDisabled, "f")
1940
+ ? (0, history_1.addInitialHistorySnapshot)(transactionMeta)
1941
+ : transactionMeta;
1860
1942
  this.update((state) => {
1861
- state.transactions = [...state.transactions, transactionMeta];
1943
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, [
1944
+ ...state.transactions,
1945
+ newTransactionMeta,
1946
+ ]);
1862
1947
  });
1863
- return transactionMeta;
1948
+ return newTransactionMeta;
1864
1949
  }, _TransactionController_markNonceDuplicatesDropped = function _TransactionController_markNonceDuplicatesDropped(transactionId) {
1865
1950
  const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
1866
1951
  if (!transactionMeta) {
@@ -1931,7 +2016,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
1931
2016
  (0, logger_1.projectLogger)('Calling before sign hook', transactionMeta);
1932
2017
  const { updateTransaction } = (await __classPrivateFieldGet(this, _TransactionController_beforeSign, "f").call(this, { transactionMeta })) ?? {};
1933
2018
  if (updateTransaction) {
1934
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, skipResimulateCheck: true }, updateTransaction);
2019
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, skipResimulateCheck: true, note: 'beforeSign Hook' }, updateTransaction);
1935
2020
  (0, logger_1.projectLogger)('Updated transaction after before sign hook');
1936
2021
  }
1937
2022
  transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionOrThrow).call(this, transactionId);
@@ -2110,7 +2195,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2110
2195
  ];
2111
2196
  }, _TransactionController_getLayer1GasFeeFlows = function _TransactionController_getLayer1GasFeeFlows() {
2112
2197
  return [new OptimismLayer1GasFeeFlow_1.OptimismLayer1GasFeeFlow(), new ScrollLayer1GasFeeFlow_1.ScrollLayer1GasFeeFlow()];
2113
- }, _TransactionController_updateTransactionInternal = function _TransactionController_updateTransactionInternal({ transactionId, skipValidation, skipResimulateCheck, }, callback) {
2198
+ }, _TransactionController_updateTransactionInternal = function _TransactionController_updateTransactionInternal({ transactionId, note, skipHistory, skipValidation, skipResimulateCheck, }, callback) {
2114
2199
  let resimulateResponse;
2115
2200
  this.update((state) => {
2116
2201
  const index = state.transactions.findIndex(({ id }) => id === transactionId);
@@ -2127,6 +2212,10 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2127
2212
  if (!skipResimulateCheck && __classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f").call(this)) {
2128
2213
  resimulateResponse = (0, ResimulateHelper_1.shouldResimulate)(originalTransactionMeta, transactionMeta);
2129
2214
  }
2215
+ const shouldSkipHistory = __classPrivateFieldGet(this, _TransactionController_isHistoryDisabled, "f") || skipHistory;
2216
+ if (!shouldSkipHistory) {
2217
+ transactionMeta = (0, history_1.updateTransactionHistory)(transactionMeta, note ?? 'Transaction updated');
2218
+ }
2130
2219
  state.transactions[index] = transactionMeta;
2131
2220
  });
2132
2221
  const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
@@ -2188,6 +2277,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2188
2277
  }
2189
2278
  const updatedTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2190
2279
  transactionId,
2280
+ note: 'TransactionController#updateSimulationData - Update simulation data',
2191
2281
  skipResimulateCheck: Boolean(blockTime),
2192
2282
  }, (txMeta) => {
2193
2283
  txMeta.gasFeeTokens = gasFeeTokens;
@@ -2200,7 +2290,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2200
2290
  (0, logger_1.projectLogger)('Updated simulation data', transactionId, updatedTransactionMeta);
2201
2291
  await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_runAfterSimulateHook).call(this, updatedTransactionMeta);
2202
2292
  }, _TransactionController_onGasFeePollerTransactionUpdate = function _TransactionController_onGasFeePollerTransactionUpdate({ transactionId, gasFeeEstimates, gasFeeEstimatesLoaded, layer1GasFee, }) {
2203
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId }, (txMeta) => {
2293
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, skipHistory: true }, (txMeta) => {
2204
2294
  (0, GasFeePoller_1.updateTransactionGasProperties)({
2205
2295
  txMeta,
2206
2296
  gasFeeEstimates,
@@ -2285,7 +2375,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2285
2375
  }, _TransactionController_deleteTransaction = function _TransactionController_deleteTransaction(transactionId) {
2286
2376
  this.update((state) => {
2287
2377
  const transactions = state.transactions.filter(({ id }) => id !== transactionId);
2288
- state.transactions = transactions;
2378
+ state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, transactions);
2289
2379
  });
2290
2380
  }, _TransactionController_isRejectError = function _TransactionController_isRejectError(error) {
2291
2381
  return [
@@ -2306,6 +2396,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2306
2396
  try {
2307
2397
  newTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2308
2398
  transactionId: transactionMeta.id,
2399
+ note: 'TransactionController#failTransaction - Add error message and set status to failed',
2309
2400
  skipValidation: true,
2310
2401
  }, (draftTransactionMeta) => {
2311
2402
  draftTransactionMeta.status = types_1.TransactionStatus.failed;
@@ -2347,6 +2438,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2347
2438
  const updatedTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2348
2439
  transactionId,
2349
2440
  skipResimulateCheck: true,
2441
+ note: 'afterSimulate Hook',
2350
2442
  }, (txMeta) => {
2351
2443
  txMeta.txParamsOriginal = (0, lodash_1.cloneDeep)(txMeta.txParams);
2352
2444
  updateTransaction(txMeta);