@metamask-previews/transaction-controller 62.7.0-preview-749d0638 → 62.7.0-preview-42084fe4

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 (38) hide show
  1. package/CHANGELOG.md +0 -4
  2. package/dist/TransactionController.cjs +73 -62
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts +13 -12
  5. package/dist/TransactionController.d.cts.map +1 -1
  6. package/dist/TransactionController.d.mts +13 -12
  7. package/dist/TransactionController.d.mts.map +1 -1
  8. package/dist/TransactionController.mjs +73 -62
  9. package/dist/TransactionController.mjs.map +1 -1
  10. package/dist/helpers/PendingTransactionTracker.cjs +1 -3
  11. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
  12. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
  13. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
  14. package/dist/helpers/PendingTransactionTracker.mjs +1 -3
  15. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
  16. package/dist/index.cjs +4 -1
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +1 -0
  19. package/dist/index.d.cts.map +1 -1
  20. package/dist/index.d.mts +1 -0
  21. package/dist/index.d.mts.map +1 -1
  22. package/dist/index.mjs +1 -0
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/types.cjs.map +1 -1
  25. package/dist/types.d.cts +4 -5
  26. package/dist/types.d.cts.map +1 -1
  27. package/dist/types.d.mts +4 -5
  28. package/dist/types.d.mts.map +1 -1
  29. package/dist/types.mjs.map +1 -1
  30. package/dist/utils/history.cjs +164 -0
  31. package/dist/utils/history.cjs.map +1 -0
  32. package/dist/utils/history.d.cts +29 -0
  33. package/dist/utils/history.d.cts.map +1 -0
  34. package/dist/utils/history.d.mts +29 -0
  35. package/dist/utils/history.d.mts.map +1 -0
  36. package/dist/utils/history.mjs +164 -0
  37. package/dist/utils/history.mjs.map +1 -0
  38. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,12 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ### Added
11
-
12
- - Add intent based transaction support ([#6547](https://github.com/MetaMask/core/pull/6547))
13
10
  ### Changed
14
11
 
15
- - Deprecate `history` and `sendFlowHistory` properties from `TransactionMeta` and `TransactionController` options ([#7326](https://github.com/MetaMask/core/pull/7326))
16
12
  - Bump `@metamask/remote-feature-flag-controller` from `^3.0.0` to `^3.1.0` ([#7519](https://github.com/MetaMask/core/pull/7519))
17
13
  - Bump `@metamask/network-controller` from `^27.0.0` to `^27.1.0` ([#7534](https://github.com/MetaMask/core/pull/7534))
18
14
  - Bump `@metamask/controller-utils` from `^11.16.0` to `^11.17.0` ([#7534](https://github.com/MetaMask/core/pull/7534))
@@ -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_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;
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");
@@ -143,7 +144,7 @@ class TransactionController extends base_controller_1.BaseController {
143
144
  * @param options - The controller options.
144
145
  */
145
146
  constructor(options) {
146
- 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, transactionHistoryLimit = 40, } = 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;
147
148
  super({
148
149
  name: controllerName,
149
150
  metadata,
@@ -177,6 +178,8 @@ class TransactionController extends base_controller_1.BaseController {
177
178
  _TransactionController_isAutomaticGasFeeUpdateEnabled.set(this, void 0);
178
179
  _TransactionController_isEIP7702GasFeeTokensEnabled.set(this, void 0);
179
180
  _TransactionController_isFirstTimeInteractionEnabled.set(this, void 0);
181
+ _TransactionController_isHistoryDisabled.set(this, void 0);
182
+ _TransactionController_isSendFlowHistoryDisabled.set(this, void 0);
180
183
  _TransactionController_isSimulationEnabled.set(this, void 0);
181
184
  _TransactionController_isSwapsDisabled.set(this, void 0);
182
185
  _TransactionController_isTimeoutEnabled.set(this, void 0);
@@ -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");
@@ -386,7 +391,7 @@ class TransactionController extends base_controller_1.BaseController {
386
391
  */
387
392
  async addTransaction(txParams, options) {
388
393
  (0, logger_1.projectLogger)('Adding transaction', txParams, options);
389
- const { actionId, assetsFiatValues, batchId, deviceConfirmedOn, disableGasBuffer, gasFeeToken, isGasFeeIncluded, isGasFeeSponsored, method, nestedTransactions, networkClientId, origin, publishHook, requestId, requireApproval, securityAlertResponse, skipInitialGasEstimate, swaps = {}, traceContext, type, } = options;
394
+ const { actionId, assetsFiatValues, batchId, deviceConfirmedOn, disableGasBuffer, gasFeeToken, isGasFeeIncluded, isGasFeeSponsored, method, nestedTransactions, networkClientId, origin, publishHook, requestId, requireApproval, securityAlertResponse, sendFlowHistory, skipInitialGasEstimate, swaps = {}, traceContext, type, } = options;
390
395
  // eslint-disable-next-line no-param-reassign
391
396
  txParams = (0, utils_2.normalizeTransactionParams)(txParams);
392
397
  if (!__classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").has(networkClientId)) {
@@ -462,32 +467,19 @@ class TransactionController extends base_controller_1.BaseController {
462
467
  addedTransactionMeta.txParamsOriginal = (0, lodash_1.cloneDeep)(addedTransactionMeta.txParams);
463
468
  updateTransaction(addedTransactionMeta);
464
469
  }
470
+ // eslint-disable-next-line no-negated-condition
465
471
  if (!skipInitialGasEstimate) {
466
472
  await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Estimate Gas Properties', parentContext: traceContext }, (context) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateGasProperties).call(this, addedTransactionMeta, {
467
473
  traceContext: context,
468
474
  }));
469
475
  }
470
- else if (isEIP1559Compatible &&
471
- addedTransactionMeta.txParams.gasPrice &&
472
- !addedTransactionMeta.txParams.maxFeePerGas) {
473
- // Convert legacy gasPrice to EIP-1559 fees for intent transactions on EIP-1559 networks
474
- addedTransactionMeta.txParams.maxFeePerGas =
475
- addedTransactionMeta.txParams.gasPrice;
476
- addedTransactionMeta.txParams.maxPriorityFeePerGas =
477
- addedTransactionMeta.txParams.gasPrice;
478
- addedTransactionMeta.txParams.type = types_1.TransactionEnvelopeType.feeMarket;
479
- delete addedTransactionMeta.txParams.gasPrice; // Remove legacy gas price
480
- }
481
- else if (!isEIP1559Compatible && addedTransactionMeta.txParams.gasPrice) {
482
- // Ensure legacy type for non-EIP-1559 networks
483
- addedTransactionMeta.txParams.type = types_1.TransactionEnvelopeType.legacy;
484
- }
485
476
  else {
486
477
  const newTransactionMeta = (0, lodash_1.cloneDeep)(addedTransactionMeta);
487
478
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateGasProperties).call(this, newTransactionMeta)
488
479
  .then(() => {
489
480
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
490
481
  transactionId: newTransactionMeta.id,
482
+ skipHistory: true,
491
483
  skipResimulateCheck: true,
492
484
  skipValidation: true,
493
485
  }, (tx) => {
@@ -511,6 +503,14 @@ class TransactionController extends base_controller_1.BaseController {
511
503
  addedTransactionMeta.securityProviderResponse =
512
504
  securityProviderResponse;
513
505
  }
506
+ if (!__classPrivateFieldGet(this, _TransactionController_isSendFlowHistoryDisabled, "f")) {
507
+ // eslint-disable-next-line require-atomic-updates
508
+ addedTransactionMeta.sendFlowHistory = sendFlowHistory ?? [];
509
+ }
510
+ // Initial history push
511
+ if (!__classPrivateFieldGet(this, _TransactionController_isHistoryDisabled, "f")) {
512
+ addedTransactionMeta = (0, history_1.addInitialHistorySnapshot)(addedTransactionMeta);
513
+ }
514
514
  addedTransactionMeta = (0, swaps_1.updateSwapsTransaction)(addedTransactionMeta, transactionType, swaps, {
515
515
  isSwapsDisabled: __classPrivateFieldGet(this, _TransactionController_isSwapsDisabled, "f"),
516
516
  cancelTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_rejectTransaction).bind(this),
@@ -521,6 +521,7 @@ class TransactionController extends base_controller_1.BaseController {
521
521
  .then((delegationAddress) => {
522
522
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
523
523
  transactionId: addedTransactionMeta.id,
524
+ skipHistory: true,
524
525
  skipResimulateCheck: true,
525
526
  skipValidation: true,
526
527
  }, (tx) => {
@@ -710,14 +711,13 @@ class TransactionController extends base_controller_1.BaseController {
710
711
  * Updates an existing transaction in state.
711
712
  *
712
713
  * @param transactionMeta - The new transaction to store in state.
713
- * @param note - A note or update reason to be logged.
714
+ * @param note - A note or update reason to include in the transaction history.
714
715
  */
715
716
  updateTransaction(transactionMeta, note) {
716
717
  const { id: transactionId } = transactionMeta;
717
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId }, () => ({
718
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, note }, () => ({
718
719
  ...transactionMeta,
719
720
  }));
720
- (0, logger_1.projectLogger)('Transaction updated', { transactionId, note });
721
721
  }
722
722
  /**
723
723
  * Update the security alert response for a transaction.
@@ -768,17 +768,6 @@ class TransactionController extends base_controller_1.BaseController {
768
768
  state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, newTransactions);
769
769
  });
770
770
  }
771
- /**
772
- * @deprecated No longer used. Kept only to avoid breaking changes. It now performs no operations.
773
- * @param transactionID - The ID of the transaction to update.
774
- * @param _currentSendFlowHistoryLength - The length of the current sendFlowHistory array.
775
- * @param _sendFlowHistoryToAdd - The sendFlowHistory entries to add.
776
- * @returns The transactionMeta.
777
- */
778
- updateTransactionSendFlowHistory(transactionID, _currentSendFlowHistoryLength, _sendFlowHistoryToAdd) {
779
- // Return the transaction unchanged
780
- return __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionOrThrow).call(this, transactionID);
781
- }
782
771
  /**
783
772
  * Adds external provided transaction to state as confirmed transaction.
784
773
  *
@@ -817,6 +806,33 @@ class TransactionController extends base_controller_1.BaseController {
817
806
  console.error('Failed to confirm external transaction', error);
818
807
  }
819
808
  }
809
+ /**
810
+ * Append new send flow history to a transaction.
811
+ *
812
+ * @param transactionID - The ID of the transaction to update.
813
+ * @param currentSendFlowHistoryLength - The length of the current sendFlowHistory array.
814
+ * @param sendFlowHistoryToAdd - The sendFlowHistory entries to add.
815
+ * @returns The updated transactionMeta.
816
+ */
817
+ updateTransactionSendFlowHistory(transactionID, currentSendFlowHistoryLength, sendFlowHistoryToAdd) {
818
+ if (__classPrivateFieldGet(this, _TransactionController_isSendFlowHistoryDisabled, "f")) {
819
+ throw new Error('Send flow history is disabled for the current transaction controller');
820
+ }
821
+ const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionID);
822
+ if (!transactionMeta) {
823
+ throw new Error(`Cannot update send flow history as no transaction metadata found`);
824
+ }
825
+ (0, utils_2.validateIfTransactionUnapproved)(transactionMeta, 'updateTransactionSendFlowHistory');
826
+ const sendFlowHistory = transactionMeta.sendFlowHistory ?? [];
827
+ if (currentSendFlowHistoryLength === sendFlowHistory.length) {
828
+ const updatedTransactionMeta = {
829
+ ...transactionMeta,
830
+ sendFlowHistory: [...sendFlowHistory, ...sendFlowHistoryToAdd],
831
+ };
832
+ this.updateTransaction(updatedTransactionMeta, `${controllerName}:updateTransactionSendFlowHistory - sendFlowHistory updated`);
833
+ }
834
+ return __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionID);
835
+ }
820
836
  /**
821
837
  * Update the gas values of a transaction.
822
838
  *
@@ -886,6 +902,7 @@ class TransactionController extends base_controller_1.BaseController {
886
902
  const filteredTransactionGasFees = (0, lodash_1.pickBy)(transactionGasFees);
887
903
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
888
904
  transactionId,
905
+ note: `${controllerName}:updateTransactionGasFees - gas values updated`,
889
906
  skipResimulateCheck: true,
890
907
  }, (draftTxMeta) => {
891
908
  const { txParams, ...otherProps } = filteredTransactionGasFees;
@@ -1000,6 +1017,8 @@ class TransactionController extends base_controller_1.BaseController {
1000
1017
  }
1001
1018
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1002
1019
  transactionId,
1020
+ note: 'TransactionController#setTransactionActive - Transaction isActive updated',
1021
+ skipHistory: true,
1003
1022
  skipValidation: true,
1004
1023
  skipResimulateCheck: true,
1005
1024
  }, (updatedTransactionMeta) => {
@@ -1283,6 +1302,7 @@ class TransactionController extends base_controller_1.BaseController {
1283
1302
  });
1284
1303
  const updatedTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1285
1304
  transactionId,
1305
+ note: 'TransactionController#updateAtomicBatchData - Atomic batch data updated',
1286
1306
  }, (transactionMeta) => {
1287
1307
  const { nestedTransactions, txParams } = transactionMeta;
1288
1308
  const from = txParams.from;
@@ -1305,6 +1325,7 @@ class TransactionController extends base_controller_1.BaseController {
1305
1325
  await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateGasEstimate).call(this, draftTransaction);
1306
1326
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1307
1327
  transactionId,
1328
+ note: 'TransactionController#updateAtomicBatchData - Gas estimate updated',
1308
1329
  }, (transactionMeta) => {
1309
1330
  transactionMeta.txParams.gas = draftTransaction.txParams.gas;
1310
1331
  transactionMeta.simulationFails = draftTransaction.simulationFails;
@@ -1324,6 +1345,7 @@ class TransactionController extends base_controller_1.BaseController {
1324
1345
  (0, logger_1.projectLogger)('Updating batch transactions', { transactionId, batchTransactions });
1325
1346
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1326
1347
  transactionId,
1348
+ note: 'TransactionController#updateBatchTransactions - Batch transactions updated',
1327
1349
  }, (transactionMeta) => {
1328
1350
  transactionMeta.batchTransactions = batchTransactions;
1329
1351
  });
@@ -1406,7 +1428,7 @@ class TransactionController extends base_controller_1.BaseController {
1406
1428
  }
1407
1429
  }
1408
1430
  exports.TransactionController = TransactionController;
1409
- _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_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, }) {
1431
+ _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, }) {
1410
1432
  // If transaction is found for same action id, do not create a new transaction.
1411
1433
  if (__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionWithActionId).call(this, actionId)) {
1412
1434
  return;
@@ -1565,30 +1587,6 @@ _TransactionController_afterAdd = new WeakMap(), _TransactionController_afterSig
1565
1587
  this.updateTransaction(updatedTransaction, 'TransactionController#processApproval - Updated with approval data');
1566
1588
  }
1567
1589
  }
1568
- // For intent-based transactions (e.g., CoW intents) that are not meant to be
1569
- // published on-chain by the TransactionController, skip the approve/publish flow.
1570
- // These are tracked externally and should not be signed or sent.
1571
- const isIntentTransaction = Boolean(
1572
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1573
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId)?.swapMetaData
1574
- ?.isIntentTx === true);
1575
- if (requireApproval === false && isIntentTransaction) {
1576
- const submittedTxMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1577
- transactionId,
1578
- skipValidation: true,
1579
- }, (draftTxMeta) => {
1580
- draftTxMeta.status = types_1.TransactionStatus.submitted;
1581
- draftTxMeta.submittedTime = new Date().getTime();
1582
- });
1583
- this.messenger.publish(`${controllerName}:transactionSubmitted`, {
1584
- transactionMeta: submittedTxMeta,
1585
- });
1586
- this.messenger.publish(`${controllerName}:transactionFinished`, submittedTxMeta);
1587
- __classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(`${transactionId}:finished`, submittedTxMeta);
1588
- // Short-circuit normal flow; result callbacks will be handled by the
1589
- // finished promise below.
1590
- return ApprovalState.Approved;
1591
- }
1592
1590
  const { isCompleted: isTxCompleted } = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_isTransactionCompleted).call(this, transactionId);
1593
1591
  if (!isTxCompleted) {
1594
1592
  const approvalResult = await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_approveTransaction).call(this, transactionId, traceContext, publishHook);
@@ -1676,6 +1674,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
1676
1674
  // eslint-disable-next-line require-atomic-updates
1677
1675
  transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1678
1676
  transactionId,
1677
+ note: 'TransactionController#approveTransaction - Transaction approved',
1679
1678
  }, (draftTxMeta) => {
1680
1679
  const { chainId, txParams } = draftTxMeta;
1681
1680
  const { gas, type } = txParams;
@@ -1728,6 +1727,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
1728
1727
  // eslint-disable-next-line require-atomic-updates
1729
1728
  transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1730
1729
  transactionId,
1730
+ note: 'TransactionController#approveTransaction - Transaction submitted',
1731
1731
  }, (draftTxMeta) => {
1732
1732
  draftTxMeta.hash = hash;
1733
1733
  draftTxMeta.status = types_1.TransactionStatus.submitted;
@@ -1936,13 +1936,17 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
1936
1936
  const confirmedTxs = sameFromAndNetworkTransactions.filter((transaction) => transaction.status === types_1.TransactionStatus.confirmed);
1937
1937
  const pendingTxs = sameFromAndNetworkTransactions.filter((transaction) => transaction.status === types_1.TransactionStatus.submitted);
1938
1938
  (0, external_transactions_1.validateConfirmedExternalTransaction)(transactionMeta, confirmedTxs, pendingTxs);
1939
+ // Make sure provided external transaction has non empty history array
1940
+ const newTransactionMeta = (transactionMeta.history ?? []).length === 0 && !__classPrivateFieldGet(this, _TransactionController_isHistoryDisabled, "f")
1941
+ ? (0, history_1.addInitialHistorySnapshot)(transactionMeta)
1942
+ : transactionMeta;
1939
1943
  this.update((state) => {
1940
1944
  state.transactions = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_trimTransactionsForState).call(this, [
1941
1945
  ...state.transactions,
1942
- transactionMeta,
1946
+ newTransactionMeta,
1943
1947
  ]);
1944
1948
  });
1945
- return transactionMeta;
1949
+ return newTransactionMeta;
1946
1950
  }, _TransactionController_markNonceDuplicatesDropped = function _TransactionController_markNonceDuplicatesDropped(transactionId) {
1947
1951
  const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
1948
1952
  if (!transactionMeta) {
@@ -2013,7 +2017,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2013
2017
  (0, logger_1.projectLogger)('Calling before sign hook', transactionMeta);
2014
2018
  const { updateTransaction } = (await __classPrivateFieldGet(this, _TransactionController_beforeSign, "f").call(this, { transactionMeta })) ?? {};
2015
2019
  if (updateTransaction) {
2016
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, skipResimulateCheck: true }, updateTransaction);
2020
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, skipResimulateCheck: true, note: 'beforeSign Hook' }, updateTransaction);
2017
2021
  (0, logger_1.projectLogger)('Updated transaction after before sign hook');
2018
2022
  }
2019
2023
  transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransactionOrThrow).call(this, transactionId);
@@ -2192,7 +2196,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2192
2196
  ];
2193
2197
  }, _TransactionController_getLayer1GasFeeFlows = function _TransactionController_getLayer1GasFeeFlows() {
2194
2198
  return [new OptimismLayer1GasFeeFlow_1.OptimismLayer1GasFeeFlow(), new ScrollLayer1GasFeeFlow_1.ScrollLayer1GasFeeFlow()];
2195
- }, _TransactionController_updateTransactionInternal = function _TransactionController_updateTransactionInternal({ transactionId, skipValidation, skipResimulateCheck, }, callback) {
2199
+ }, _TransactionController_updateTransactionInternal = function _TransactionController_updateTransactionInternal({ transactionId, note, skipHistory, skipValidation, skipResimulateCheck, }, callback) {
2196
2200
  let resimulateResponse;
2197
2201
  this.update((state) => {
2198
2202
  const index = state.transactions.findIndex(({ id }) => id === transactionId);
@@ -2209,6 +2213,10 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2209
2213
  if (!skipResimulateCheck && __classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f").call(this)) {
2210
2214
  resimulateResponse = (0, ResimulateHelper_1.shouldResimulate)(originalTransactionMeta, transactionMeta);
2211
2215
  }
2216
+ const shouldSkipHistory = __classPrivateFieldGet(this, _TransactionController_isHistoryDisabled, "f") || skipHistory;
2217
+ if (!shouldSkipHistory) {
2218
+ transactionMeta = (0, history_1.updateTransactionHistory)(transactionMeta, note ?? 'Transaction updated');
2219
+ }
2212
2220
  state.transactions[index] = transactionMeta;
2213
2221
  });
2214
2222
  const transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getTransaction).call(this, transactionId);
@@ -2270,6 +2278,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2270
2278
  }
2271
2279
  const updatedTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2272
2280
  transactionId,
2281
+ note: 'TransactionController#updateSimulationData - Update simulation data',
2273
2282
  skipResimulateCheck: Boolean(blockTime),
2274
2283
  }, (txMeta) => {
2275
2284
  txMeta.gasFeeTokens = gasFeeTokens;
@@ -2282,7 +2291,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2282
2291
  (0, logger_1.projectLogger)('Updated simulation data', transactionId, updatedTransactionMeta);
2283
2292
  await __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_runAfterSimulateHook).call(this, updatedTransactionMeta);
2284
2293
  }, _TransactionController_onGasFeePollerTransactionUpdate = function _TransactionController_onGasFeePollerTransactionUpdate({ transactionId, gasFeeEstimates, gasFeeEstimatesLoaded, layer1GasFee, }) {
2285
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId }, (txMeta) => {
2294
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, skipHistory: true }, (txMeta) => {
2286
2295
  (0, GasFeePoller_1.updateTransactionGasProperties)({
2287
2296
  txMeta,
2288
2297
  gasFeeEstimates,
@@ -2388,6 +2397,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2388
2397
  try {
2389
2398
  newTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2390
2399
  transactionId: transactionMeta.id,
2400
+ note: 'TransactionController#failTransaction - Add error message and set status to failed',
2391
2401
  skipValidation: true,
2392
2402
  }, (draftTransactionMeta) => {
2393
2403
  draftTransactionMeta.status = types_1.TransactionStatus.failed;
@@ -2429,6 +2439,7 @@ async function _TransactionController_approveTransaction(transactionId, traceCon
2429
2439
  const updatedTransactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2430
2440
  transactionId,
2431
2441
  skipResimulateCheck: true,
2442
+ note: 'afterSimulate Hook',
2432
2443
  }, (txMeta) => {
2433
2444
  txMeta.txParamsOriginal = (0, lodash_1.cloneDeep)(txMeta.txParams);
2434
2445
  updateTransaction(txMeta);