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

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 +43 -103
  2. package/dist/TransactionController.cjs.map +1 -1
  3. package/dist/TransactionController.d.cts +78 -11
  4. package/dist/TransactionController.d.cts.map +1 -1
  5. package/dist/TransactionController.d.mts +78 -11
  6. package/dist/TransactionController.d.mts.map +1 -1
  7. package/dist/TransactionController.mjs +45 -105
  8. package/dist/TransactionController.mjs.map +1 -1
  9. package/dist/api/accounts-api.cjs +35 -33
  10. package/dist/api/accounts-api.cjs.map +1 -1
  11. package/dist/api/accounts-api.d.cts +42 -35
  12. package/dist/api/accounts-api.d.cts.map +1 -1
  13. package/dist/api/accounts-api.d.mts +42 -35
  14. package/dist/api/accounts-api.d.mts.map +1 -1
  15. package/dist/api/accounts-api.mjs +33 -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 +178 -0
  34. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +1 -0
  35. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts +12 -0
  36. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +1 -0
  37. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts +12 -0
  38. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +1 -0
  39. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +178 -0
  40. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +1 -0
  41. package/dist/helpers/IncomingTransactionHelper.cjs +68 -139
  42. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  43. package/dist/helpers/IncomingTransactionHelper.d.cts +9 -16
  44. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  45. package/dist/helpers/IncomingTransactionHelper.d.mts +9 -16
  46. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  47. package/dist/helpers/IncomingTransactionHelper.mjs +68 -139
  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 +3 -2
  58. package/dist/index.cjs.map +1 -1
  59. package/dist/index.d.cts +3 -3
  60. package/dist/index.d.cts.map +1 -1
  61. package/dist/index.d.mts +3 -3
  62. package/dist/index.d.mts.map +1 -1
  63. package/dist/index.mjs +2 -1
  64. package/dist/index.mjs.map +1 -1
  65. package/dist/types.cjs.map +1 -1
  66. package/dist/types.d.cts +23 -18
  67. package/dist/types.d.cts.map +1 -1
  68. package/dist/types.d.mts +23 -18
  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
@@ -9,7 +9,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10
10
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
11
11
  };
12
- 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;
12
+ 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;
13
13
  function $importDefault(module) {
14
14
  if (module?.__esModule) {
15
15
  return module.default;
@@ -28,20 +28,19 @@ const EthQuery = $importDefault($EthQuery);
28
28
  import { NetworkClientType } from "@metamask/network-controller";
29
29
  import { NonceTracker } from "@metamask/nonce-tracker";
30
30
  import { errorCodes, rpcErrors, providerErrors } from "@metamask/rpc-errors";
31
- import { add0x, hexToNumber } from "@metamask/utils";
31
+ import { add0x } from "@metamask/utils";
32
32
  import { Mutex } from "async-mutex";
33
33
  import { MethodRegistry } from "eth-method-registry";
34
34
  import { EventEmitter } from "events";
35
35
  import $lodash from "lodash";
36
36
  const { cloneDeep, mapValues, merge, pickBy, sortBy } = $lodash;
37
37
  import { v1 as random } from "uuid";
38
- import { getAccountAddressRelationship } from "./api/accounts-api.mjs";
39
38
  import { DefaultGasFeeFlow } from "./gas-flows/DefaultGasFeeFlow.mjs";
40
39
  import { LineaGasFeeFlow } from "./gas-flows/LineaGasFeeFlow.mjs";
41
40
  import { OptimismLayer1GasFeeFlow } from "./gas-flows/OptimismLayer1GasFeeFlow.mjs";
42
41
  import { ScrollLayer1GasFeeFlow } from "./gas-flows/ScrollLayer1GasFeeFlow.mjs";
43
42
  import { TestGasFeeFlow } from "./gas-flows/TestGasFeeFlow.mjs";
44
- import { EtherscanRemoteTransactionSource } from "./helpers/EtherscanRemoteTransactionSource.mjs";
43
+ import { AccountsApiRemoteTransactionSource } from "./helpers/AccountsApiRemoteTransactionSource.mjs";
45
44
  import { GasFeePoller } from "./helpers/GasFeePoller.mjs";
46
45
  import { IncomingTransactionHelper } from "./helpers/IncomingTransactionHelper.mjs";
47
46
  import { MultichainTrackingHelper } from "./helpers/MultichainTrackingHelper.mjs";
@@ -61,7 +60,7 @@ import { getSimulationData } from "./utils/simulation.mjs";
61
60
  import { updatePostTransactionBalance, updateSwapsTransaction } from "./utils/swaps.mjs";
62
61
  import { determineTransactionType } from "./utils/transaction-type.mjs";
63
62
  import { normalizeTransactionParams, isEIP1559Transaction, validateGasValues, validateIfTransactionUnapproved, normalizeTxError, normalizeGasFeeValues } from "./utils/utils.mjs";
64
- import { validateParamTo, validateTransactionOrigin, validateTxParams } from "./utils/validation.mjs";
63
+ import { validateTransactionOrigin, validateTxParams } from "./utils/validation.mjs";
65
64
  /**
66
65
  * Metadata for the TransactionController state, describing how to "anonymize"
67
66
  * the state and which parts should be persisted.
@@ -182,7 +181,6 @@ export class TransactionController extends BaseController {
182
181
  * @param options.getSavedGasFees - Gets the saved gas fee config.
183
182
  * @param options.incomingTransactions - Configuration options for incoming transaction support.
184
183
  * @param options.isMultichainEnabled - Enable multichain support.
185
- * @param options.isFirstTimeInteractionEnabled - Whether first time interaction checks are enabled.
186
184
  * @param options.isSimulationEnabled - Whether new transactions will be automatically simulated.
187
185
  * @param options.messenger - The controller messenger.
188
186
  * @param options.onNetworkStateChange - Allows subscribing to network controller state changes.
@@ -196,7 +194,7 @@ export class TransactionController extends BaseController {
196
194
  * @param options.transactionHistoryLimit - Transaction history limit.
197
195
  * @param options.hooks - The controller hooks.
198
196
  */
199
- 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, }) {
197
+ 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, }) {
200
198
  super({
201
199
  name: controllerName,
202
200
  metadata,
@@ -215,7 +213,6 @@ export class TransactionController extends BaseController {
215
213
  this.signAbortCallbacks = new Map();
216
214
  _TransactionController_trace.set(this, void 0);
217
215
  _TransactionController_transactionHistoryLimit.set(this, void 0);
218
- _TransactionController_isFirstTimeInteractionEnabled.set(this, void 0);
219
216
  _TransactionController_isSimulationEnabled.set(this, void 0);
220
217
  _TransactionController_testGasFeeFlows.set(this, void 0);
221
218
  _TransactionController_multichainTrackingHelper.set(this, void 0);
@@ -229,7 +226,6 @@ export class TransactionController extends BaseController {
229
226
  this.isSendFlowHistoryDisabled = disableSendFlowHistory ?? false;
230
227
  this.isHistoryDisabled = disableHistory ?? false;
231
228
  this.isSwapsDisabled = disableSwaps ?? false;
232
- __classPrivateFieldSet(this, _TransactionController_isFirstTimeInteractionEnabled, isFirstTimeInteractionEnabled ?? (() => true), "f");
233
229
  __classPrivateFieldSet(this, _TransactionController_isSimulationEnabled, isSimulationEnabled ?? (() => true), "f");
234
230
  // @ts-expect-error the type in eth-method-registry is inappropriate and should be changed
235
231
  this.registry = new MethodRegistry({ provider });
@@ -271,30 +267,20 @@ export class TransactionController extends BaseController {
271
267
  isMultichainEnabled,
272
268
  provider,
273
269
  nonceTracker: this.nonceTracker,
274
- incomingTransactionOptions: incomingTransactions,
275
270
  findNetworkClientIdByChainId,
276
271
  getNetworkClientById: ((networkClientId) => {
277
272
  return this.messagingSystem.call(`NetworkController:getNetworkClientById`, networkClientId);
278
273
  }),
279
274
  getNetworkClientRegistry,
280
- removeIncomingTransactionHelperListeners: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_removeIncomingTransactionHelperListeners).bind(this),
281
275
  removePendingTransactionTrackerListeners: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_removePendingTransactionTrackerListeners).bind(this),
282
276
  createNonceTracker: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createNonceTracker).bind(this),
283
- createIncomingTransactionHelper: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createIncomingTransactionHelper).bind(this),
284
277
  createPendingTransactionTracker: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createPendingTransactionTracker).bind(this),
285
278
  onNetworkStateChange: (listener) => {
286
279
  this.messagingSystem.subscribe('NetworkController:stateChange', listener);
287
280
  },
288
281
  }), "f");
289
282
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").initialize();
290
- const etherscanRemoteTransactionSource = new EtherscanRemoteTransactionSource({
291
- apiKeysByChainId: incomingTransactions.etherscanApiKeysByChainId,
292
- includeTokenTransfers: incomingTransactions.includeTokenTransfers,
293
- });
294
- this.incomingTransactionHelper = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createIncomingTransactionHelper).call(this, {
295
- blockTracker,
296
- etherscanRemoteTransactionSource,
297
- });
283
+ this.incomingTransactionHelper = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createIncomingTransactionHelper).call(this);
298
284
  this.pendingTransactionTracker = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createPendingTransactionTracker).call(this, {
299
285
  provider,
300
286
  blockTracker,
@@ -411,16 +397,15 @@ export class TransactionController extends BaseController {
411
397
  dappSuggestedGasFees,
412
398
  deviceConfirmedOn,
413
399
  id: random(),
414
- isFirstTimeInteraction: undefined,
415
- networkClientId,
416
400
  origin,
417
401
  securityAlertResponse,
418
402
  status: TransactionStatus.unapproved,
419
403
  time: Date.now(),
420
404
  txParams,
421
- type: transactionType,
422
405
  userEditedGasLimit: false,
423
406
  verifiedOnBlockchain: false,
407
+ type: transactionType,
408
+ networkClientId,
424
409
  };
425
410
  await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Estimate Gas Properties', parentContext: traceContext }, (context) => this.updateGasProperties(addedTransactionMeta, {
426
411
  traceContext: context,
@@ -453,14 +438,9 @@ export class TransactionController extends BaseController {
453
438
  log('Error while updating simulation data', error);
454
439
  throw error;
455
440
  });
456
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateFirstTimeInteraction).call(this, addedTransactionMeta, {
457
- traceContext,
458
- }).catch((error) => {
459
- log('Error while updating first interaction properties', error);
460
- });
461
441
  }
462
442
  else {
463
- log('Skipping simulation & first interaction update as approval not required');
443
+ log('Skipping simulation as approval not required');
464
444
  }
465
445
  this.messagingSystem.publish(`${controllerName}:unapprovedTransactionAdded`, addedTransactionMeta);
466
446
  }
@@ -477,27 +457,20 @@ export class TransactionController extends BaseController {
477
457
  startIncomingTransactionPolling(networkClientIds = []) {
478
458
  if (networkClientIds.length === 0) {
479
459
  this.incomingTransactionHelper.start();
480
- return;
481
460
  }
482
- __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").startIncomingTransactionPolling(networkClientIds);
483
461
  }
484
462
  stopIncomingTransactionPolling(networkClientIds = []) {
485
463
  if (networkClientIds.length === 0) {
486
464
  this.incomingTransactionHelper.stop();
487
- return;
488
465
  }
489
- __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopIncomingTransactionPolling(networkClientIds);
490
466
  }
491
467
  stopAllIncomingTransactionPolling() {
492
468
  this.incomingTransactionHelper.stop();
493
- __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopAllIncomingTransactionPolling();
494
469
  }
495
470
  async updateIncomingTransactions(networkClientIds = []) {
496
471
  if (networkClientIds.length === 0) {
497
472
  await this.incomingTransactionHelper.update();
498
- return;
499
473
  }
500
- await __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").updateIncomingTransactions(networkClientIds);
501
474
  }
502
475
  /**
503
476
  * Attempts to cancel a transaction based on its ID by setting its status to "rejected"
@@ -625,23 +598,33 @@ export class TransactionController extends BaseController {
625
598
  * wiped on current network.
626
599
  */
627
600
  wipeTransactions(ignoreNetwork, address) {
601
+ log('Wiping transactions', { ignoreNetwork, address });
628
602
  /* istanbul ignore next */
629
603
  if (ignoreNetwork && !address) {
630
604
  this.update((state) => {
631
605
  state.transactions = [];
606
+ state.lastFetchedBlockNumbers = {};
632
607
  });
633
608
  return;
634
609
  }
635
610
  const currentChainId = this.getChainId();
636
- const newTransactions = this.state.transactions.filter(({ chainId, txParams }) => {
611
+ const { transactions } = this.state;
612
+ const newTransactions = transactions.filter((tx) => {
613
+ const { chainId, txParams } = tx;
637
614
  const isMatchingNetwork = ignoreNetwork || chainId === currentChainId;
638
615
  if (!isMatchingNetwork) {
639
616
  return true;
640
617
  }
641
- const isMatchingAddress = !address || txParams.from?.toLowerCase() === address.toLowerCase();
618
+ const isMatchingAddress = !address ||
619
+ txParams.from?.toLowerCase() === address.toLowerCase() ||
620
+ txParams.to?.toLowerCase() === address.toLowerCase();
621
+ if (isMatchingAddress) {
622
+ log('Removing transaction', tx);
623
+ }
642
624
  return !isMatchingAddress;
643
625
  });
644
626
  this.update((state) => {
627
+ state.lastFetchedBlockNumbers = {};
645
628
  state.transactions = this.trimTransactionsForState(newTransactions);
646
629
  });
647
630
  }
@@ -1532,24 +1515,20 @@ export class TransactionController extends BaseController {
1532
1515
  };
1533
1516
  return Common.custom(customChainParams);
1534
1517
  }
1535
- onIncomingTransactions({ added, updated, }) {
1518
+ onIncomingTransactions(transactions) {
1536
1519
  this.update((state) => {
1537
1520
  const { transactions: currentTransactions } = state;
1538
- const updatedTransactions = [
1539
- ...added,
1540
- ...currentTransactions.map((originalTransaction) => {
1541
- const updatedTransaction = updated.find(({ hash }) => hash === originalTransaction.hash);
1542
- return updatedTransaction ?? originalTransaction;
1543
- }),
1544
- ];
1545
- state.transactions = this.trimTransactionsForState(updatedTransactions);
1546
- });
1547
- }
1548
- onUpdatedLastFetchedBlockNumbers({ lastFetchedBlockNumbers, blockNumber, }) {
1549
- this.update((state) => {
1550
- state.lastFetchedBlockNumbers = lastFetchedBlockNumbers;
1521
+ const newTransactions = transactions.filter((tx) => !currentTransactions.some((currentTx) => currentTx.hash?.toLowerCase() === tx.hash?.toLowerCase() &&
1522
+ currentTx.type === TransactionType.incoming));
1523
+ log('Adding incoming transactions to state', newTransactions.length, {
1524
+ newTransactions,
1525
+ });
1526
+ state.transactions = this.trimTransactionsForState([
1527
+ ...newTransactions,
1528
+ ...currentTransactions,
1529
+ ]);
1551
1530
  });
1552
- this.messagingSystem.publish(`${controllerName}:incomingTransactionBlockReceived`, blockNumber);
1531
+ this.messagingSystem.publish(`${controllerName}:incomingTransactionsReceived`, transactions);
1553
1532
  }
1554
1533
  generateDappSuggestedGasFees(txParams, origin) {
1555
1534
  if (!origin || origin === ORIGIN_METAMASK) {
@@ -1798,7 +1777,7 @@ export class TransactionController extends BaseController {
1798
1777
  error?.data?.message?.includes('nonce too low'));
1799
1778
  }
1800
1779
  }
1801
- _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, }) {
1780
+ _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, }) {
1802
1781
  // If transaction is found for same action id, do not create a new transaction.
1803
1782
  if (this.getTransactionWithActionId(actionId)) {
1804
1783
  return;
@@ -1875,17 +1854,21 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1875
1854
  getPendingTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNonceTrackerPendingTransactions).bind(this, chainId),
1876
1855
  getConfirmedTransactions: this.getNonceTrackerTransactions.bind(this, TransactionStatus.confirmed),
1877
1856
  });
1878
- }, _TransactionController_createIncomingTransactionHelper = function _TransactionController_createIncomingTransactionHelper({ blockTracker, etherscanRemoteTransactionSource, chainId, }) {
1857
+ }, _TransactionController_createIncomingTransactionHelper = function _TransactionController_createIncomingTransactionHelper({ chainId, } = {}) {
1858
+ const updateCache = (fn) => {
1859
+ this.update((state) => {
1860
+ fn(state.lastFetchedBlockNumbers);
1861
+ });
1862
+ };
1879
1863
  const incomingTransactionHelper = new IncomingTransactionHelper({
1880
- blockTracker,
1881
1864
  getCurrentAccount: () => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getSelectedAccount).call(this),
1882
- getLastFetchedBlockNumbers: () => this.state.lastFetchedBlockNumbers,
1883
- getLocalTransactions: () => this.state.transactions,
1884
- getChainId: chainId ? () => chainId : this.getChainId.bind(this),
1865
+ getCache: () => this.state.lastFetchedBlockNumbers,
1866
+ getChainIds: chainId ? () => [chainId] : () => [this.getChainId()],
1867
+ includeTokenTransfers: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").includeTokenTransfers,
1885
1868
  isEnabled: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").isEnabled,
1886
1869
  queryEntireHistory: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").queryEntireHistory,
1887
- remoteTransactionSource: etherscanRemoteTransactionSource,
1888
- transactionLimit: __classPrivateFieldGet(this, _TransactionController_transactionHistoryLimit, "f"),
1870
+ remoteTransactionSource: new AccountsApiRemoteTransactionSource(),
1871
+ updateCache,
1889
1872
  updateTransactions: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").updateTransactions,
1890
1873
  });
1891
1874
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_addIncomingTransactionHelperListeners).call(this, incomingTransactionHelper);
@@ -1920,10 +1903,9 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1920
1903
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopAllTracking();
1921
1904
  }, _TransactionController_removeIncomingTransactionHelperListeners = function _TransactionController_removeIncomingTransactionHelperListeners(incomingTransactionHelper) {
1922
1905
  incomingTransactionHelper.hub.removeAllListeners('transactions');
1923
- incomingTransactionHelper.hub.removeAllListeners('updatedLastFetchedBlockNumbers');
1906
+ incomingTransactionHelper.hub.removeAllListeners('updated-last-fetched-timestamp');
1924
1907
  }, _TransactionController_addIncomingTransactionHelperListeners = function _TransactionController_addIncomingTransactionHelperListeners(incomingTransactionHelper) {
1925
1908
  incomingTransactionHelper.hub.on('transactions', this.onIncomingTransactions.bind(this));
1926
- incomingTransactionHelper.hub.on('updatedLastFetchedBlockNumbers', this.onUpdatedLastFetchedBlockNumbers.bind(this));
1927
1909
  }, _TransactionController_removePendingTransactionTrackerListeners = function _TransactionController_removePendingTransactionTrackerListeners(pendingTransactionTracker) {
1928
1910
  pendingTransactionTracker.hub.removeAllListeners('transaction-confirmed');
1929
1911
  pendingTransactionTracker.hub.removeAllListeners('transaction-dropped');
@@ -1976,48 +1958,6 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1976
1958
  });
1977
1959
  }
1978
1960
  return transactionMeta;
1979
- }, _TransactionController_updateFirstTimeInteraction = async function _TransactionController_updateFirstTimeInteraction(transactionMeta, { traceContext, } = {}) {
1980
- if (!__classPrivateFieldGet(this, _TransactionController_isFirstTimeInteractionEnabled, "f").call(this)) {
1981
- return;
1982
- }
1983
- const { chainId, id: transactionId, txParams: { to, from }, } = transactionMeta;
1984
- const request = {
1985
- chainId: hexToNumber(chainId),
1986
- to: to,
1987
- from,
1988
- };
1989
- validateParamTo(to);
1990
- const existingTransaction = this.state.transactions.find((tx) => tx.chainId === chainId &&
1991
- tx.txParams.from === from &&
1992
- tx.txParams.to === to &&
1993
- tx.id !== transactionId);
1994
- // Check if there is an existing transaction with the same from, to, and chainId
1995
- // else we continue to check the account address relationship from API
1996
- if (existingTransaction) {
1997
- return;
1998
- }
1999
- try {
2000
- const { count } = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Account Address Relationship', parentContext: traceContext }, () => getAccountAddressRelationship(request));
2001
- const isFirstTimeInteraction = count === undefined ? undefined : count === 0;
2002
- const finalTransactionMeta = this.getTransaction(transactionId);
2003
- /* istanbul ignore if */
2004
- if (!finalTransactionMeta) {
2005
- log('Cannot update first time interaction as transaction not found', transactionId);
2006
- return;
2007
- }
2008
- __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
2009
- transactionId,
2010
- note: 'TransactionController#updateFirstInteraction - Update first time interaction',
2011
- }, (txMeta) => {
2012
- txMeta.isFirstTimeInteraction = isFirstTimeInteraction;
2013
- });
2014
- log('Updated first time interaction', transactionId, {
2015
- isFirstTimeInteraction,
2016
- });
2017
- }
2018
- catch (error) {
2019
- log('Error fetching account address relationship, skipping first time interaction update', error);
2020
- }
2021
1961
  }, _TransactionController_updateSimulationData = async function _TransactionController_updateSimulationData(transactionMeta, { blockTime, traceContext, } = {}) {
2022
1962
  const { id: transactionId, chainId, txParams, simulationData: prevSimulationData, } = transactionMeta;
2023
1963
  const { from, to, value, data } = txParams;