@metamask-previews/transaction-controller 39.1.0-preview-608079df → 39.1.0-preview-fd7ad7de

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 (95) hide show
  1. package/dist/TransactionController.cjs +50 -105
  2. package/dist/TransactionController.cjs.map +1 -1
  3. package/dist/TransactionController.d.cts +9 -11
  4. package/dist/TransactionController.d.cts.map +1 -1
  5. package/dist/TransactionController.d.mts +9 -11
  6. package/dist/TransactionController.d.mts.map +1 -1
  7. package/dist/TransactionController.mjs +52 -107
  8. package/dist/TransactionController.mjs.map +1 -1
  9. package/dist/api/accounts-api.cjs +52 -33
  10. package/dist/api/accounts-api.cjs.map +1 -1
  11. package/dist/api/accounts-api.d.cts +48 -35
  12. package/dist/api/accounts-api.d.cts.map +1 -1
  13. package/dist/api/accounts-api.d.mts +48 -35
  14. package/dist/api/accounts-api.d.mts.map +1 -1
  15. package/dist/api/accounts-api.mjs +49 -31
  16. package/dist/api/accounts-api.mjs.map +1 -1
  17. package/dist/constants.cjs +1 -85
  18. package/dist/constants.cjs.map +1 -1
  19. package/dist/constants.d.cts +0 -84
  20. package/dist/constants.d.cts.map +1 -1
  21. package/dist/constants.d.mts +0 -84
  22. package/dist/constants.d.mts.map +1 -1
  23. package/dist/constants.mjs +0 -84
  24. package/dist/constants.mjs.map +1 -1
  25. package/dist/errors.cjs +1 -8
  26. package/dist/errors.cjs.map +1 -1
  27. package/dist/errors.d.cts +0 -4
  28. package/dist/errors.d.cts.map +1 -1
  29. package/dist/errors.d.mts +0 -4
  30. package/dist/errors.d.mts.map +1 -1
  31. package/dist/errors.mjs +0 -6
  32. package/dist/errors.mjs.map +1 -1
  33. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs +132 -0
  34. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +1 -0
  35. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts +11 -0
  36. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +1 -0
  37. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts +11 -0
  38. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +1 -0
  39. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +132 -0
  40. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +1 -0
  41. package/dist/helpers/IncomingTransactionHelper.cjs +87 -137
  42. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  43. package/dist/helpers/IncomingTransactionHelper.d.cts +7 -12
  44. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  45. package/dist/helpers/IncomingTransactionHelper.d.mts +7 -12
  46. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  47. package/dist/helpers/IncomingTransactionHelper.mjs +87 -137
  48. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  49. package/dist/helpers/MultichainTrackingHelper.cjs +3 -66
  50. package/dist/helpers/MultichainTrackingHelper.cjs.map +1 -1
  51. package/dist/helpers/MultichainTrackingHelper.d.cts +1 -14
  52. package/dist/helpers/MultichainTrackingHelper.d.cts.map +1 -1
  53. package/dist/helpers/MultichainTrackingHelper.d.mts +1 -14
  54. package/dist/helpers/MultichainTrackingHelper.d.mts.map +1 -1
  55. package/dist/helpers/MultichainTrackingHelper.mjs +3 -66
  56. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -1
  57. package/dist/index.cjs +1 -2
  58. package/dist/index.cjs.map +1 -1
  59. package/dist/index.d.cts +2 -3
  60. package/dist/index.d.cts.map +1 -1
  61. package/dist/index.d.mts +2 -3
  62. package/dist/index.d.mts.map +1 -1
  63. package/dist/index.mjs +1 -1
  64. package/dist/index.mjs.map +1 -1
  65. package/dist/types.cjs.map +1 -1
  66. package/dist/types.d.cts +13 -12
  67. package/dist/types.d.cts.map +1 -1
  68. package/dist/types.d.mts +13 -12
  69. package/dist/types.d.mts.map +1 -1
  70. package/dist/types.mjs.map +1 -1
  71. package/dist/utils/validation.cjs +1 -13
  72. package/dist/utils/validation.cjs.map +1 -1
  73. package/dist/utils/validation.d.cts +0 -7
  74. package/dist/utils/validation.d.cts.map +1 -1
  75. package/dist/utils/validation.d.mts +0 -7
  76. package/dist/utils/validation.d.mts.map +1 -1
  77. package/dist/utils/validation.mjs +0 -11
  78. package/dist/utils/validation.mjs.map +1 -1
  79. package/package.json +1 -2
  80. package/dist/helpers/EtherscanRemoteTransactionSource.cjs +0 -157
  81. package/dist/helpers/EtherscanRemoteTransactionSource.cjs.map +0 -1
  82. package/dist/helpers/EtherscanRemoteTransactionSource.d.cts +0 -16
  83. package/dist/helpers/EtherscanRemoteTransactionSource.d.cts.map +0 -1
  84. package/dist/helpers/EtherscanRemoteTransactionSource.d.mts +0 -16
  85. package/dist/helpers/EtherscanRemoteTransactionSource.d.mts.map +0 -1
  86. package/dist/helpers/EtherscanRemoteTransactionSource.mjs +0 -157
  87. package/dist/helpers/EtherscanRemoteTransactionSource.mjs.map +0 -1
  88. package/dist/utils/etherscan.cjs +0 -115
  89. package/dist/utils/etherscan.cjs.map +0 -1
  90. package/dist/utils/etherscan.d.cts +0 -74
  91. package/dist/utils/etherscan.d.cts.map +0 -1
  92. package/dist/utils/etherscan.d.mts +0 -74
  93. package/dist/utils/etherscan.d.mts.map +0 -1
  94. package/dist/utils/etherscan.mjs +0 -109
  95. package/dist/utils/etherscan.mjs.map +0 -1
@@ -13,7 +13,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
13
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
- var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_createNonceTracker, _TransactionController_createIncomingTransactionHelper, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_removeIncomingTransactionHelperListeners, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getNetworkClientId, _TransactionController_getGlobalNetworkClientId, _TransactionController_getGlobalChainId, _TransactionController_isCustomNetwork, _TransactionController_getSelectedAccount, _TransactionController_updateSubmitHistory;
16
+ var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_createNonceTracker, _TransactionController_createIncomingTransactionHelper, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_removeIncomingTransactionHelperListeners, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getNetworkClientId, _TransactionController_getGlobalNetworkClientId, _TransactionController_getGlobalChainId, _TransactionController_isCustomNetwork, _TransactionController_getSelectedAccount, _TransactionController_updateSubmitHistory;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.TransactionController = exports.ApprovalState = exports.SPEED_UP_RATE = exports.CANCEL_RATE = exports.HARDFORK = void 0;
19
19
  const common_1 = require("@ethereumjs/common");
@@ -31,13 +31,12 @@ const eth_method_registry_1 = require("eth-method-registry");
31
31
  const events_1 = require("events");
32
32
  const lodash_1 = require("lodash");
33
33
  const uuid_1 = require("uuid");
34
- const accounts_api_1 = require("./api/accounts-api.cjs");
35
34
  const DefaultGasFeeFlow_1 = require("./gas-flows/DefaultGasFeeFlow.cjs");
36
35
  const LineaGasFeeFlow_1 = require("./gas-flows/LineaGasFeeFlow.cjs");
37
36
  const OptimismLayer1GasFeeFlow_1 = require("./gas-flows/OptimismLayer1GasFeeFlow.cjs");
38
37
  const ScrollLayer1GasFeeFlow_1 = require("./gas-flows/ScrollLayer1GasFeeFlow.cjs");
39
38
  const TestGasFeeFlow_1 = require("./gas-flows/TestGasFeeFlow.cjs");
40
- const EtherscanRemoteTransactionSource_1 = require("./helpers/EtherscanRemoteTransactionSource.cjs");
39
+ const AccountsApiRemoteTransactionSource_1 = require("./helpers/AccountsApiRemoteTransactionSource.cjs");
41
40
  const GasFeePoller_1 = require("./helpers/GasFeePoller.cjs");
42
41
  const IncomingTransactionHelper_1 = require("./helpers/IncomingTransactionHelper.cjs");
43
42
  const MultichainTrackingHelper_1 = require("./helpers/MultichainTrackingHelper.cjs");
@@ -71,7 +70,7 @@ const metadata = {
71
70
  persist: true,
72
71
  anonymous: false,
73
72
  },
74
- lastFetchedBlockNumbers: {
73
+ lastFetchedTimestamps: {
75
74
  persist: true,
76
75
  anonymous: false,
77
76
  },
@@ -112,7 +111,7 @@ function getDefaultTransactionControllerState() {
112
111
  return {
113
112
  methodData: {},
114
113
  transactions: [],
115
- lastFetchedBlockNumbers: {},
114
+ lastFetchedTimestamps: {},
116
115
  submitHistory: [],
117
116
  };
118
117
  }
@@ -178,7 +177,6 @@ class TransactionController extends base_controller_1.BaseController {
178
177
  * @param options.getSavedGasFees - Gets the saved gas fee config.
179
178
  * @param options.incomingTransactions - Configuration options for incoming transaction support.
180
179
  * @param options.isMultichainEnabled - Enable multichain support.
181
- * @param options.isFirstTimeInteractionEnabled - Whether first time interaction checks are enabled.
182
180
  * @param options.isSimulationEnabled - Whether new transactions will be automatically simulated.
183
181
  * @param options.messenger - The controller messenger.
184
182
  * @param options.onNetworkStateChange - Allows subscribing to network controller state changes.
@@ -192,7 +190,7 @@ class TransactionController extends base_controller_1.BaseController {
192
190
  * @param options.transactionHistoryLimit - Transaction history limit.
193
191
  * @param options.hooks - The controller hooks.
194
192
  */
195
- constructor({ blockTracker, disableHistory, disableSendFlowHistory, disableSwaps, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isMultichainEnabled = false, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, onNetworkStateChange, pendingTransactions = {}, provider, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, }) {
193
+ constructor({ blockTracker, disableHistory, disableSendFlowHistory, disableSwaps, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isMultichainEnabled = false, isSimulationEnabled, messenger, onNetworkStateChange, pendingTransactions = {}, provider, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, }) {
196
194
  super({
197
195
  name: controllerName,
198
196
  metadata,
@@ -211,7 +209,6 @@ class TransactionController extends base_controller_1.BaseController {
211
209
  this.signAbortCallbacks = new Map();
212
210
  _TransactionController_trace.set(this, void 0);
213
211
  _TransactionController_transactionHistoryLimit.set(this, void 0);
214
- _TransactionController_isFirstTimeInteractionEnabled.set(this, void 0);
215
212
  _TransactionController_isSimulationEnabled.set(this, void 0);
216
213
  _TransactionController_testGasFeeFlows.set(this, void 0);
217
214
  _TransactionController_multichainTrackingHelper.set(this, void 0);
@@ -225,7 +222,6 @@ class TransactionController extends base_controller_1.BaseController {
225
222
  this.isSendFlowHistoryDisabled = disableSendFlowHistory ?? false;
226
223
  this.isHistoryDisabled = disableHistory ?? false;
227
224
  this.isSwapsDisabled = disableSwaps ?? false;
228
- __classPrivateFieldSet(this, _TransactionController_isFirstTimeInteractionEnabled, isFirstTimeInteractionEnabled ?? (() => true), "f");
229
225
  __classPrivateFieldSet(this, _TransactionController_isSimulationEnabled, isSimulationEnabled ?? (() => true), "f");
230
226
  // @ts-expect-error the type in eth-method-registry is inappropriate and should be changed
231
227
  this.registry = new eth_method_registry_1.MethodRegistry({ provider });
@@ -267,30 +263,20 @@ class TransactionController extends base_controller_1.BaseController {
267
263
  isMultichainEnabled,
268
264
  provider,
269
265
  nonceTracker: this.nonceTracker,
270
- incomingTransactionOptions: incomingTransactions,
271
266
  findNetworkClientIdByChainId,
272
267
  getNetworkClientById: ((networkClientId) => {
273
268
  return this.messagingSystem.call(`NetworkController:getNetworkClientById`, networkClientId);
274
269
  }),
275
270
  getNetworkClientRegistry,
276
- removeIncomingTransactionHelperListeners: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_removeIncomingTransactionHelperListeners).bind(this),
277
271
  removePendingTransactionTrackerListeners: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_removePendingTransactionTrackerListeners).bind(this),
278
272
  createNonceTracker: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createNonceTracker).bind(this),
279
- createIncomingTransactionHelper: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createIncomingTransactionHelper).bind(this),
280
273
  createPendingTransactionTracker: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createPendingTransactionTracker).bind(this),
281
274
  onNetworkStateChange: (listener) => {
282
275
  this.messagingSystem.subscribe('NetworkController:stateChange', listener);
283
276
  },
284
277
  }), "f");
285
278
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").initialize();
286
- const etherscanRemoteTransactionSource = new EtherscanRemoteTransactionSource_1.EtherscanRemoteTransactionSource({
287
- apiKeysByChainId: incomingTransactions.etherscanApiKeysByChainId,
288
- includeTokenTransfers: incomingTransactions.includeTokenTransfers,
289
- });
290
- this.incomingTransactionHelper = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createIncomingTransactionHelper).call(this, {
291
- blockTracker,
292
- etherscanRemoteTransactionSource,
293
- });
279
+ this.incomingTransactionHelper = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createIncomingTransactionHelper).call(this);
294
280
  this.pendingTransactionTracker = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createPendingTransactionTracker).call(this, {
295
281
  provider,
296
282
  blockTracker,
@@ -407,16 +393,15 @@ class TransactionController extends base_controller_1.BaseController {
407
393
  dappSuggestedGasFees,
408
394
  deviceConfirmedOn,
409
395
  id: (0, uuid_1.v1)(),
410
- isFirstTimeInteraction: undefined,
411
- networkClientId,
412
396
  origin,
413
397
  securityAlertResponse,
414
398
  status: types_1.TransactionStatus.unapproved,
415
399
  time: Date.now(),
416
400
  txParams,
417
- type: transactionType,
418
401
  userEditedGasLimit: false,
419
402
  verifiedOnBlockchain: false,
403
+ type: transactionType,
404
+ networkClientId,
420
405
  };
421
406
  await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Estimate Gas Properties', parentContext: traceContext }, (context) => this.updateGasProperties(addedTransactionMeta, {
422
407
  traceContext: context,
@@ -449,14 +434,9 @@ class TransactionController extends base_controller_1.BaseController {
449
434
  (0, logger_1.projectLogger)('Error while updating simulation data', error);
450
435
  throw error;
451
436
  });
452
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateFirstTimeInteraction).call(this, addedTransactionMeta, {
453
- traceContext,
454
- }).catch((error) => {
455
- (0, logger_1.projectLogger)('Error while updating first interaction properties', error);
456
- });
457
437
  }
458
438
  else {
459
- (0, logger_1.projectLogger)('Skipping simulation & first interaction update as approval not required');
439
+ (0, logger_1.projectLogger)('Skipping simulation as approval not required');
460
440
  }
461
441
  this.messagingSystem.publish(`${controllerName}:unapprovedTransactionAdded`, addedTransactionMeta);
462
442
  }
@@ -473,27 +453,20 @@ class TransactionController extends base_controller_1.BaseController {
473
453
  startIncomingTransactionPolling(networkClientIds = []) {
474
454
  if (networkClientIds.length === 0) {
475
455
  this.incomingTransactionHelper.start();
476
- return;
477
456
  }
478
- __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").startIncomingTransactionPolling(networkClientIds);
479
457
  }
480
458
  stopIncomingTransactionPolling(networkClientIds = []) {
481
459
  if (networkClientIds.length === 0) {
482
460
  this.incomingTransactionHelper.stop();
483
- return;
484
461
  }
485
- __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopIncomingTransactionPolling(networkClientIds);
486
462
  }
487
463
  stopAllIncomingTransactionPolling() {
488
464
  this.incomingTransactionHelper.stop();
489
- __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopAllIncomingTransactionPolling();
490
465
  }
491
466
  async updateIncomingTransactions(networkClientIds = []) {
492
467
  if (networkClientIds.length === 0) {
493
468
  await this.incomingTransactionHelper.update();
494
- return;
495
469
  }
496
- await __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").updateIncomingTransactions(networkClientIds);
497
470
  }
498
471
  /**
499
472
  * Attempts to cancel a transaction based on its ID by setting its status to "rejected"
@@ -621,23 +594,45 @@ class TransactionController extends base_controller_1.BaseController {
621
594
  * wiped on current network.
622
595
  */
623
596
  wipeTransactions(ignoreNetwork, address) {
597
+ (0, logger_1.projectLogger)('Wiping transactions', { ignoreNetwork, address });
624
598
  /* istanbul ignore next */
625
599
  if (ignoreNetwork && !address) {
626
600
  this.update((state) => {
627
601
  state.transactions = [];
602
+ state.lastFetchedTimestamps = {};
628
603
  });
629
604
  return;
630
605
  }
631
606
  const currentChainId = this.getChainId();
632
- const newTransactions = this.state.transactions.filter(({ chainId, txParams }) => {
607
+ const { lastFetchedTimestamps, transactions } = this.state;
608
+ const newTransactions = transactions.filter((tx) => {
609
+ const { chainId, txParams } = tx;
633
610
  const isMatchingNetwork = ignoreNetwork || chainId === currentChainId;
634
611
  if (!isMatchingNetwork) {
635
612
  return true;
636
613
  }
637
- const isMatchingAddress = !address || txParams.from?.toLowerCase() === address.toLowerCase();
614
+ const isMatchingAddress = !address ||
615
+ txParams.from?.toLowerCase() === address.toLowerCase() ||
616
+ txParams.to?.toLowerCase() === address.toLowerCase();
617
+ if (isMatchingAddress) {
618
+ (0, logger_1.projectLogger)('Removing transaction', tx);
619
+ }
638
620
  return !isMatchingAddress;
639
621
  });
622
+ const newLastFetchedTimestamps = Object.keys(lastFetchedTimestamps).reduce((acc, key) => {
623
+ const timestamp = lastFetchedTimestamps[key];
624
+ const isMatchingNetwork = ignoreNetwork || key.startsWith(`${currentChainId}#`);
625
+ const isMatchingAddress = !address || key.endsWith(`#${address.toLowerCase()}`);
626
+ if (!isMatchingNetwork || !isMatchingAddress) {
627
+ acc[key] = timestamp;
628
+ }
629
+ else {
630
+ (0, logger_1.projectLogger)('Removing last fetched timestamp', { key, timestamp });
631
+ }
632
+ return acc;
633
+ }, {});
640
634
  this.update((state) => {
635
+ state.lastFetchedTimestamps = newLastFetchedTimestamps;
641
636
  state.transactions = this.trimTransactionsForState(newTransactions);
642
637
  });
643
638
  }
@@ -1528,24 +1523,20 @@ class TransactionController extends base_controller_1.BaseController {
1528
1523
  };
1529
1524
  return common_1.Common.custom(customChainParams);
1530
1525
  }
1531
- onIncomingTransactions({ added, updated, }) {
1526
+ onIncomingTransactions(incomingTransactions) {
1532
1527
  this.update((state) => {
1533
1528
  const { transactions: currentTransactions } = state;
1534
- const updatedTransactions = [
1535
- ...added,
1536
- ...currentTransactions.map((originalTransaction) => {
1537
- const updatedTransaction = updated.find(({ hash }) => hash === originalTransaction.hash);
1538
- return updatedTransaction ?? originalTransaction;
1539
- }),
1540
- ];
1541
- state.transactions = this.trimTransactionsForState(updatedTransactions);
1529
+ state.transactions = this.trimTransactionsForState([
1530
+ ...incomingTransactions,
1531
+ ...currentTransactions,
1532
+ ]);
1542
1533
  });
1534
+ this.messagingSystem.publish(`${controllerName}:incomingTransactionsReceived`, incomingTransactions);
1543
1535
  }
1544
- onUpdatedLastFetchedBlockNumbers({ lastFetchedBlockNumbers, blockNumber, }) {
1536
+ onUpdatedLastFetchedTimestamp({ key, timestamp, }) {
1545
1537
  this.update((state) => {
1546
- state.lastFetchedBlockNumbers = lastFetchedBlockNumbers;
1538
+ state.lastFetchedTimestamps[key] = timestamp;
1547
1539
  });
1548
- this.messagingSystem.publish(`${controllerName}:incomingTransactionBlockReceived`, blockNumber);
1549
1540
  }
1550
1541
  generateDappSuggestedGasFees(txParams, origin) {
1551
1542
  if (!origin || origin === controller_utils_1.ORIGIN_METAMASK) {
@@ -1795,7 +1786,7 @@ class TransactionController extends base_controller_1.BaseController {
1795
1786
  }
1796
1787
  }
1797
1788
  exports.TransactionController = TransactionController;
1798
- _TransactionController_internalEvents = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(), _TransactionController_trace = new WeakMap(), _TransactionController_transactionHistoryLimit = new WeakMap(), _TransactionController_isFirstTimeInteractionEnabled = new WeakMap(), _TransactionController_isSimulationEnabled = new WeakMap(), _TransactionController_testGasFeeFlows = new WeakMap(), _TransactionController_multichainTrackingHelper = 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, }) {
1789
+ _TransactionController_internalEvents = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(), _TransactionController_trace = new WeakMap(), _TransactionController_transactionHistoryLimit = new WeakMap(), _TransactionController_isSimulationEnabled = new WeakMap(), _TransactionController_testGasFeeFlows = new WeakMap(), _TransactionController_multichainTrackingHelper = 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, }) {
1799
1790
  // If transaction is found for same action id, do not create a new transaction.
1800
1791
  if (this.getTransactionWithActionId(actionId)) {
1801
1792
  return;
@@ -1872,18 +1863,14 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1872
1863
  getPendingTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNonceTrackerPendingTransactions).bind(this, chainId),
1873
1864
  getConfirmedTransactions: this.getNonceTrackerTransactions.bind(this, types_1.TransactionStatus.confirmed),
1874
1865
  });
1875
- }, _TransactionController_createIncomingTransactionHelper = function _TransactionController_createIncomingTransactionHelper({ blockTracker, etherscanRemoteTransactionSource, chainId, }) {
1866
+ }, _TransactionController_createIncomingTransactionHelper = function _TransactionController_createIncomingTransactionHelper({ chainId, } = {}) {
1876
1867
  const incomingTransactionHelper = new IncomingTransactionHelper_1.IncomingTransactionHelper({
1877
- blockTracker,
1878
1868
  getCurrentAccount: () => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getSelectedAccount).call(this),
1879
- getLastFetchedBlockNumbers: () => this.state.lastFetchedBlockNumbers,
1880
- getLocalTransactions: () => this.state.transactions,
1881
- getChainId: chainId ? () => chainId : this.getChainId.bind(this),
1869
+ getLastFetchedTimestamps: () => this.state.lastFetchedTimestamps,
1870
+ getChainIds: chainId ? () => [chainId] : () => [this.getChainId()],
1882
1871
  isEnabled: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").isEnabled,
1883
- queryEntireHistory: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").queryEntireHistory,
1884
- remoteTransactionSource: etherscanRemoteTransactionSource,
1872
+ remoteTransactionSource: new AccountsApiRemoteTransactionSource_1.AccountsApiRemoteTransactionSource(),
1885
1873
  transactionLimit: __classPrivateFieldGet(this, _TransactionController_transactionHistoryLimit, "f"),
1886
- updateTransactions: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").updateTransactions,
1887
1874
  });
1888
1875
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_addIncomingTransactionHelperListeners).call(this, incomingTransactionHelper);
1889
1876
  return incomingTransactionHelper;
@@ -1916,11 +1903,11 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1916
1903
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_removeIncomingTransactionHelperListeners).call(this, this.incomingTransactionHelper);
1917
1904
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopAllTracking();
1918
1905
  }, _TransactionController_removeIncomingTransactionHelperListeners = function _TransactionController_removeIncomingTransactionHelperListeners(incomingTransactionHelper) {
1919
- incomingTransactionHelper.hub.removeAllListeners('transactions');
1920
- incomingTransactionHelper.hub.removeAllListeners('updatedLastFetchedBlockNumbers');
1906
+ incomingTransactionHelper.hub.removeAllListeners('incoming-transactions');
1907
+ incomingTransactionHelper.hub.removeAllListeners('updated-last-fetched-timestamp');
1921
1908
  }, _TransactionController_addIncomingTransactionHelperListeners = function _TransactionController_addIncomingTransactionHelperListeners(incomingTransactionHelper) {
1922
- incomingTransactionHelper.hub.on('transactions', this.onIncomingTransactions.bind(this));
1923
- incomingTransactionHelper.hub.on('updatedLastFetchedBlockNumbers', this.onUpdatedLastFetchedBlockNumbers.bind(this));
1909
+ incomingTransactionHelper.hub.on('incoming-transactions', this.onIncomingTransactions.bind(this));
1910
+ incomingTransactionHelper.hub.on('updated-last-fetched-timestamp', this.onUpdatedLastFetchedTimestamp.bind(this));
1924
1911
  }, _TransactionController_removePendingTransactionTrackerListeners = function _TransactionController_removePendingTransactionTrackerListeners(pendingTransactionTracker) {
1925
1912
  pendingTransactionTracker.hub.removeAllListeners('transaction-confirmed');
1926
1913
  pendingTransactionTracker.hub.removeAllListeners('transaction-dropped');
@@ -1973,48 +1960,6 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1973
1960
  });
1974
1961
  }
1975
1962
  return transactionMeta;
1976
- }, _TransactionController_updateFirstTimeInteraction = async function _TransactionController_updateFirstTimeInteraction(transactionMeta, { traceContext, } = {}) {
1977
- if (!__classPrivateFieldGet(this, _TransactionController_isFirstTimeInteractionEnabled, "f").call(this)) {
1978
- return;
1979
- }
1980
- const { chainId, id: transactionId, txParams: { to, from }, } = transactionMeta;
1981
- const request = {
1982
- chainId: (0, utils_1.hexToNumber)(chainId),
1983
- to: to,
1984
- from,
1985
- };
1986
- (0, validation_1.validateParamTo)(to);
1987
- const existingTransaction = this.state.transactions.find((tx) => tx.chainId === chainId &&
1988
- tx.txParams.from === from &&
1989
- tx.txParams.to === to &&
1990
- tx.id !== transactionId);
1991
- // Check if there is an existing transaction with the same from, to, and chainId
1992
- // else we continue to check the account address relationship from API
1993
- if (existingTransaction) {
1994
- return;
1995
- }
1996
- try {
1997
- const { count } = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Account Address Relationship', parentContext: traceContext }, () => (0, accounts_api_1.getAccountAddressRelationship)(request));
1998
- const isFirstTimeInteraction = count === undefined ? undefined : count === 0;
1999
- const finalTransactionMeta = this.getTransaction(transactionId);
2000
- /* istanbul ignore if */
2001
- if (!finalTransactionMeta) {
2002
- (0, logger_1.projectLogger)('Cannot update first time interaction as transaction not found', transactionId);
2003
- return;
2004
- }
2005
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2006
- transactionId,
2007
- note: 'TransactionController#updateFirstInteraction - Update first time interaction',
2008
- }, (txMeta) => {
2009
- txMeta.isFirstTimeInteraction = isFirstTimeInteraction;
2010
- });
2011
- (0, logger_1.projectLogger)('Updated first time interaction', transactionId, {
2012
- isFirstTimeInteraction,
2013
- });
2014
- }
2015
- catch (error) {
2016
- (0, logger_1.projectLogger)('Error fetching account address relationship, skipping first time interaction update', error);
2017
- }
2018
1963
  }, _TransactionController_updateSimulationData = async function _TransactionController_updateSimulationData(transactionMeta, { blockTime, traceContext, } = {}) {
2019
1964
  const { id: transactionId, chainId, txParams, simulationData: prevSimulationData, } = transactionMeta;
2020
1965
  const { from, to, value, data } = txParams;