@metamask-previews/transaction-controller 40.1.0-preview-6879d4ce → 40.1.0-preview-8a7e499b

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 (79) hide show
  1. package/dist/TransactionController.cjs +45 -45
  2. package/dist/TransactionController.cjs.map +1 -1
  3. package/dist/TransactionController.d.cts +8 -7
  4. package/dist/TransactionController.d.cts.map +1 -1
  5. package/dist/TransactionController.d.mts +8 -7
  6. package/dist/TransactionController.d.mts.map +1 -1
  7. package/dist/TransactionController.mjs +45 -45
  8. package/dist/TransactionController.mjs.map +1 -1
  9. package/dist/api/accounts-api.cjs +3 -48
  10. package/dist/api/accounts-api.cjs.map +1 -1
  11. package/dist/api/accounts-api.d.cts +0 -49
  12. package/dist/api/accounts-api.d.cts.map +1 -1
  13. package/dist/api/accounts-api.d.mts +0 -49
  14. package/dist/api/accounts-api.d.mts.map +1 -1
  15. package/dist/api/accounts-api.mjs +2 -46
  16. package/dist/api/accounts-api.mjs.map +1 -1
  17. package/dist/constants.cjs +85 -1
  18. package/dist/constants.cjs.map +1 -1
  19. package/dist/constants.d.cts +84 -0
  20. package/dist/constants.d.cts.map +1 -1
  21. package/dist/constants.d.mts +84 -0
  22. package/dist/constants.d.mts.map +1 -1
  23. package/dist/constants.mjs +84 -0
  24. package/dist/constants.mjs.map +1 -1
  25. package/dist/helpers/EtherscanRemoteTransactionSource.cjs +157 -0
  26. package/dist/helpers/EtherscanRemoteTransactionSource.cjs.map +1 -0
  27. package/dist/helpers/EtherscanRemoteTransactionSource.d.cts +16 -0
  28. package/dist/helpers/EtherscanRemoteTransactionSource.d.cts.map +1 -0
  29. package/dist/helpers/EtherscanRemoteTransactionSource.d.mts +16 -0
  30. package/dist/helpers/EtherscanRemoteTransactionSource.d.mts.map +1 -0
  31. package/dist/helpers/EtherscanRemoteTransactionSource.mjs +157 -0
  32. package/dist/helpers/EtherscanRemoteTransactionSource.mjs.map +1 -0
  33. package/dist/helpers/IncomingTransactionHelper.cjs +139 -68
  34. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  35. package/dist/helpers/IncomingTransactionHelper.d.cts +16 -9
  36. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  37. package/dist/helpers/IncomingTransactionHelper.d.mts +16 -9
  38. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  39. package/dist/helpers/IncomingTransactionHelper.mjs +139 -68
  40. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  41. package/dist/helpers/MultichainTrackingHelper.cjs +66 -3
  42. package/dist/helpers/MultichainTrackingHelper.cjs.map +1 -1
  43. package/dist/helpers/MultichainTrackingHelper.d.cts +14 -1
  44. package/dist/helpers/MultichainTrackingHelper.d.cts.map +1 -1
  45. package/dist/helpers/MultichainTrackingHelper.d.mts +14 -1
  46. package/dist/helpers/MultichainTrackingHelper.d.mts.map +1 -1
  47. package/dist/helpers/MultichainTrackingHelper.mjs +66 -3
  48. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -1
  49. package/dist/index.cjs +2 -3
  50. package/dist/index.cjs.map +1 -1
  51. package/dist/index.d.cts +3 -3
  52. package/dist/index.d.cts.map +1 -1
  53. package/dist/index.d.mts +3 -3
  54. package/dist/index.d.mts.map +1 -1
  55. package/dist/index.mjs +1 -2
  56. package/dist/index.mjs.map +1 -1
  57. package/dist/types.cjs.map +1 -1
  58. package/dist/types.d.cts +14 -21
  59. package/dist/types.d.cts.map +1 -1
  60. package/dist/types.d.mts +14 -21
  61. package/dist/types.d.mts.map +1 -1
  62. package/dist/types.mjs.map +1 -1
  63. package/dist/utils/etherscan.cjs +115 -0
  64. package/dist/utils/etherscan.cjs.map +1 -0
  65. package/dist/utils/etherscan.d.cts +74 -0
  66. package/dist/utils/etherscan.d.cts.map +1 -0
  67. package/dist/utils/etherscan.d.mts +74 -0
  68. package/dist/utils/etherscan.d.mts.map +1 -0
  69. package/dist/utils/etherscan.mjs +109 -0
  70. package/dist/utils/etherscan.mjs.map +1 -0
  71. package/package.json +1 -1
  72. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs +0 -181
  73. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +0 -1
  74. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts +0 -12
  75. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +0 -1
  76. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts +0 -12
  77. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +0 -1
  78. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +0 -181
  79. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +0 -1
@@ -37,7 +37,7 @@ const LineaGasFeeFlow_1 = require("./gas-flows/LineaGasFeeFlow.cjs");
37
37
  const OptimismLayer1GasFeeFlow_1 = require("./gas-flows/OptimismLayer1GasFeeFlow.cjs");
38
38
  const ScrollLayer1GasFeeFlow_1 = require("./gas-flows/ScrollLayer1GasFeeFlow.cjs");
39
39
  const TestGasFeeFlow_1 = require("./gas-flows/TestGasFeeFlow.cjs");
40
- const AccountsApiRemoteTransactionSource_1 = require("./helpers/AccountsApiRemoteTransactionSource.cjs");
40
+ const EtherscanRemoteTransactionSource_1 = require("./helpers/EtherscanRemoteTransactionSource.cjs");
41
41
  const GasFeePoller_1 = require("./helpers/GasFeePoller.cjs");
42
42
  const IncomingTransactionHelper_1 = require("./helpers/IncomingTransactionHelper.cjs");
43
43
  const MultichainTrackingHelper_1 = require("./helpers/MultichainTrackingHelper.cjs");
@@ -267,20 +267,30 @@ class TransactionController extends base_controller_1.BaseController {
267
267
  isMultichainEnabled,
268
268
  provider,
269
269
  nonceTracker: this.nonceTracker,
270
+ incomingTransactionOptions: incomingTransactions,
270
271
  findNetworkClientIdByChainId,
271
272
  getNetworkClientById: ((networkClientId) => {
272
273
  return this.messagingSystem.call(`NetworkController:getNetworkClientById`, networkClientId);
273
274
  }),
274
275
  getNetworkClientRegistry,
276
+ removeIncomingTransactionHelperListeners: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_removeIncomingTransactionHelperListeners).bind(this),
275
277
  removePendingTransactionTrackerListeners: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_removePendingTransactionTrackerListeners).bind(this),
276
278
  createNonceTracker: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createNonceTracker).bind(this),
279
+ createIncomingTransactionHelper: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createIncomingTransactionHelper).bind(this),
277
280
  createPendingTransactionTracker: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createPendingTransactionTracker).bind(this),
278
281
  onNetworkStateChange: (listener) => {
279
282
  this.messagingSystem.subscribe('NetworkController:stateChange', listener);
280
283
  },
281
284
  }), "f");
282
285
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").initialize();
283
- this.incomingTransactionHelper = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createIncomingTransactionHelper).call(this);
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
+ });
284
294
  this.pendingTransactionTracker = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createPendingTransactionTracker).call(this, {
285
295
  provider,
286
296
  blockTracker,
@@ -463,20 +473,27 @@ class TransactionController extends base_controller_1.BaseController {
463
473
  startIncomingTransactionPolling(networkClientIds = []) {
464
474
  if (networkClientIds.length === 0) {
465
475
  this.incomingTransactionHelper.start();
476
+ return;
466
477
  }
478
+ __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").startIncomingTransactionPolling(networkClientIds);
467
479
  }
468
480
  stopIncomingTransactionPolling(networkClientIds = []) {
469
481
  if (networkClientIds.length === 0) {
470
482
  this.incomingTransactionHelper.stop();
483
+ return;
471
484
  }
485
+ __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopIncomingTransactionPolling(networkClientIds);
472
486
  }
473
487
  stopAllIncomingTransactionPolling() {
474
488
  this.incomingTransactionHelper.stop();
489
+ __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopAllIncomingTransactionPolling();
475
490
  }
476
491
  async updateIncomingTransactions(networkClientIds = []) {
477
492
  if (networkClientIds.length === 0) {
478
493
  await this.incomingTransactionHelper.update();
494
+ return;
479
495
  }
496
+ await __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").updateIncomingTransactions(networkClientIds);
480
497
  }
481
498
  /**
482
499
  * Attempts to cancel a transaction based on its ID by setting its status to "rejected"
@@ -604,33 +621,23 @@ class TransactionController extends base_controller_1.BaseController {
604
621
  * wiped on current network.
605
622
  */
606
623
  wipeTransactions(ignoreNetwork, address) {
607
- (0, logger_1.projectLogger)('Wiping transactions', { ignoreNetwork, address });
608
624
  /* istanbul ignore next */
609
625
  if (ignoreNetwork && !address) {
610
626
  this.update((state) => {
611
627
  state.transactions = [];
612
- state.lastFetchedBlockNumbers = {};
613
628
  });
614
629
  return;
615
630
  }
616
631
  const currentChainId = this.getChainId();
617
- const { transactions } = this.state;
618
- const newTransactions = transactions.filter((tx) => {
619
- const { chainId, txParams } = tx;
632
+ const newTransactions = this.state.transactions.filter(({ chainId, txParams }) => {
620
633
  const isMatchingNetwork = ignoreNetwork || chainId === currentChainId;
621
634
  if (!isMatchingNetwork) {
622
635
  return true;
623
636
  }
624
- const isMatchingAddress = !address ||
625
- txParams.from?.toLowerCase() === address.toLowerCase() ||
626
- txParams.to?.toLowerCase() === address.toLowerCase();
627
- if (isMatchingAddress) {
628
- (0, logger_1.projectLogger)('Removing transaction', tx);
629
- }
637
+ const isMatchingAddress = !address || txParams.from?.toLowerCase() === address.toLowerCase();
630
638
  return !isMatchingAddress;
631
639
  });
632
640
  this.update((state) => {
633
- state.lastFetchedBlockNumbers = {};
634
641
  state.transactions = this.trimTransactionsForState(newTransactions);
635
642
  });
636
643
  }
@@ -1521,28 +1528,24 @@ class TransactionController extends base_controller_1.BaseController {
1521
1528
  };
1522
1529
  return common_1.Common.custom(customChainParams);
1523
1530
  }
1524
- onIncomingTransactions(transactions) {
1525
- let newTransactions = [];
1531
+ onIncomingTransactions({ added, updated, }) {
1526
1532
  this.update((state) => {
1527
1533
  const { transactions: currentTransactions } = state;
1528
- newTransactions = transactions.filter((tx) => !currentTransactions.some((currentTx) => currentTx.hash?.toLowerCase() === tx.hash?.toLowerCase() &&
1529
- currentTx.txParams.from?.toLowerCase() ===
1530
- tx.txParams.from?.toLowerCase()));
1531
- if (!newTransactions.length) {
1532
- return;
1533
- }
1534
- (0, logger_1.projectLogger)('Adding incoming transactions to state', newTransactions.length, {
1535
- newTransactions,
1536
- });
1537
- state.transactions = this.trimTransactionsForState([
1538
- ...newTransactions,
1539
- ...currentTransactions,
1540
- ]);
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);
1541
1542
  });
1542
- if (!newTransactions.length) {
1543
- return;
1544
- }
1545
- this.messagingSystem.publish(`${controllerName}:incomingTransactionsReceived`, newTransactions);
1543
+ }
1544
+ onUpdatedLastFetchedBlockNumbers({ lastFetchedBlockNumbers, blockNumber, }) {
1545
+ this.update((state) => {
1546
+ state.lastFetchedBlockNumbers = lastFetchedBlockNumbers;
1547
+ });
1548
+ this.messagingSystem.publish(`${controllerName}:incomingTransactionBlockReceived`, blockNumber);
1546
1549
  }
1547
1550
  generateDappSuggestedGasFees(txParams, origin) {
1548
1551
  if (!origin || origin === controller_utils_1.ORIGIN_METAMASK) {
@@ -1869,21 +1872,17 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1869
1872
  getPendingTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNonceTrackerPendingTransactions).bind(this, chainId),
1870
1873
  getConfirmedTransactions: this.getNonceTrackerTransactions.bind(this, types_1.TransactionStatus.confirmed),
1871
1874
  });
1872
- }, _TransactionController_createIncomingTransactionHelper = function _TransactionController_createIncomingTransactionHelper({ chainId, } = {}) {
1873
- const updateCache = (fn) => {
1874
- this.update((state) => {
1875
- fn(state.lastFetchedBlockNumbers);
1876
- });
1877
- };
1875
+ }, _TransactionController_createIncomingTransactionHelper = function _TransactionController_createIncomingTransactionHelper({ blockTracker, etherscanRemoteTransactionSource, chainId, }) {
1878
1876
  const incomingTransactionHelper = new IncomingTransactionHelper_1.IncomingTransactionHelper({
1877
+ blockTracker,
1879
1878
  getCurrentAccount: () => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getSelectedAccount).call(this),
1880
- getCache: () => this.state.lastFetchedBlockNumbers,
1881
- getChainIds: chainId ? () => [chainId] : () => [this.getChainId()],
1882
- includeTokenTransfers: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").includeTokenTransfers,
1879
+ getLastFetchedBlockNumbers: () => this.state.lastFetchedBlockNumbers,
1880
+ getLocalTransactions: () => this.state.transactions,
1881
+ getChainId: chainId ? () => chainId : this.getChainId.bind(this),
1883
1882
  isEnabled: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").isEnabled,
1884
1883
  queryEntireHistory: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").queryEntireHistory,
1885
- remoteTransactionSource: new AccountsApiRemoteTransactionSource_1.AccountsApiRemoteTransactionSource(),
1886
- updateCache,
1884
+ remoteTransactionSource: etherscanRemoteTransactionSource,
1885
+ transactionLimit: __classPrivateFieldGet(this, _TransactionController_transactionHistoryLimit, "f"),
1887
1886
  updateTransactions: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").updateTransactions,
1888
1887
  });
1889
1888
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_addIncomingTransactionHelperListeners).call(this, incomingTransactionHelper);
@@ -1918,9 +1917,10 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1918
1917
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopAllTracking();
1919
1918
  }, _TransactionController_removeIncomingTransactionHelperListeners = function _TransactionController_removeIncomingTransactionHelperListeners(incomingTransactionHelper) {
1920
1919
  incomingTransactionHelper.hub.removeAllListeners('transactions');
1921
- incomingTransactionHelper.hub.removeAllListeners('updated-last-fetched-timestamp');
1920
+ incomingTransactionHelper.hub.removeAllListeners('updatedLastFetchedBlockNumbers');
1922
1921
  }, _TransactionController_addIncomingTransactionHelperListeners = function _TransactionController_addIncomingTransactionHelperListeners(incomingTransactionHelper) {
1923
1922
  incomingTransactionHelper.hub.on('transactions', this.onIncomingTransactions.bind(this));
1923
+ incomingTransactionHelper.hub.on('updatedLastFetchedBlockNumbers', this.onUpdatedLastFetchedBlockNumbers.bind(this));
1924
1924
  }, _TransactionController_removePendingTransactionTrackerListeners = function _TransactionController_removePendingTransactionTrackerListeners(pendingTransactionTracker) {
1925
1925
  pendingTransactionTracker.hub.removeAllListeners('transaction-confirmed');
1926
1926
  pendingTransactionTracker.hub.removeAllListeners('transaction-dropped');