@metamask-previews/transaction-controller 38.3.0-preview-7692db0d → 38.3.0-preview-de5d2fda

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 (83) hide show
  1. package/dist/TransactionController.cjs +44 -47
  2. package/dist/TransactionController.cjs.map +1 -1
  3. package/dist/TransactionController.d.cts +8 -8
  4. package/dist/TransactionController.d.cts.map +1 -1
  5. package/dist/TransactionController.d.mts +8 -8
  6. package/dist/TransactionController.d.mts.map +1 -1
  7. package/dist/TransactionController.mjs +44 -47
  8. package/dist/TransactionController.mjs.map +1 -1
  9. package/dist/api/accounts-api.cjs +61 -0
  10. package/dist/api/accounts-api.cjs.map +1 -0
  11. package/dist/api/accounts-api.d.cts +56 -0
  12. package/dist/api/accounts-api.d.cts.map +1 -0
  13. package/dist/api/accounts-api.d.mts +56 -0
  14. package/dist/api/accounts-api.d.mts.map +1 -0
  15. package/dist/api/accounts-api.mjs +56 -0
  16. package/dist/api/accounts-api.mjs.map +1 -0
  17. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs +135 -0
  18. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +1 -0
  19. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts +11 -0
  20. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +1 -0
  21. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts +11 -0
  22. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +1 -0
  23. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +135 -0
  24. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +1 -0
  25. package/dist/helpers/IncomingTransactionHelper.cjs +96 -134
  26. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  27. package/dist/helpers/IncomingTransactionHelper.d.cts +7 -12
  28. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  29. package/dist/helpers/IncomingTransactionHelper.d.mts +7 -12
  30. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  31. package/dist/helpers/IncomingTransactionHelper.mjs +96 -134
  32. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  33. package/dist/helpers/MultichainTrackingHelper.cjs +3 -66
  34. package/dist/helpers/MultichainTrackingHelper.cjs.map +1 -1
  35. package/dist/helpers/MultichainTrackingHelper.d.cts +1 -14
  36. package/dist/helpers/MultichainTrackingHelper.d.cts.map +1 -1
  37. package/dist/helpers/MultichainTrackingHelper.d.mts +1 -14
  38. package/dist/helpers/MultichainTrackingHelper.d.mts.map +1 -1
  39. package/dist/helpers/MultichainTrackingHelper.mjs +3 -66
  40. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -1
  41. package/dist/helpers/PendingTransactionTracker.cjs +7 -9
  42. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
  43. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
  44. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
  45. package/dist/helpers/PendingTransactionTracker.mjs +7 -9
  46. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.d.cts +1 -2
  49. package/dist/index.d.cts.map +1 -1
  50. package/dist/index.d.mts +1 -2
  51. package/dist/index.d.mts.map +1 -1
  52. package/dist/index.mjs.map +1 -1
  53. package/dist/types.cjs.map +1 -1
  54. package/dist/types.d.cts +7 -8
  55. package/dist/types.d.cts.map +1 -1
  56. package/dist/types.d.mts +7 -8
  57. package/dist/types.d.mts.map +1 -1
  58. package/dist/types.mjs.map +1 -1
  59. package/package.json +1 -1
  60. package/dist/helpers/EtherscanRemoteTransactionSource.cjs +0 -157
  61. package/dist/helpers/EtherscanRemoteTransactionSource.cjs.map +0 -1
  62. package/dist/helpers/EtherscanRemoteTransactionSource.d.cts +0 -16
  63. package/dist/helpers/EtherscanRemoteTransactionSource.d.cts.map +0 -1
  64. package/dist/helpers/EtherscanRemoteTransactionSource.d.mts +0 -16
  65. package/dist/helpers/EtherscanRemoteTransactionSource.d.mts.map +0 -1
  66. package/dist/helpers/EtherscanRemoteTransactionSource.mjs +0 -157
  67. package/dist/helpers/EtherscanRemoteTransactionSource.mjs.map +0 -1
  68. package/dist/helpers/TransactionPoller.cjs +0 -133
  69. package/dist/helpers/TransactionPoller.cjs.map +0 -1
  70. package/dist/helpers/TransactionPoller.d.cts +0 -31
  71. package/dist/helpers/TransactionPoller.d.cts.map +0 -1
  72. package/dist/helpers/TransactionPoller.d.mts +0 -31
  73. package/dist/helpers/TransactionPoller.d.mts.map +0 -1
  74. package/dist/helpers/TransactionPoller.mjs +0 -130
  75. package/dist/helpers/TransactionPoller.mjs.map +0 -1
  76. package/dist/utils/etherscan.cjs +0 -115
  77. package/dist/utils/etherscan.cjs.map +0 -1
  78. package/dist/utils/etherscan.d.cts +0 -74
  79. package/dist/utils/etherscan.d.cts.map +0 -1
  80. package/dist/utils/etherscan.d.mts +0 -74
  81. package/dist/utils/etherscan.d.mts.map +0 -1
  82. package/dist/utils/etherscan.mjs +0 -109
  83. package/dist/utils/etherscan.mjs.map +0 -1
@@ -36,7 +36,7 @@ const LineaGasFeeFlow_1 = require("./gas-flows/LineaGasFeeFlow.cjs");
36
36
  const OptimismLayer1GasFeeFlow_1 = require("./gas-flows/OptimismLayer1GasFeeFlow.cjs");
37
37
  const ScrollLayer1GasFeeFlow_1 = require("./gas-flows/ScrollLayer1GasFeeFlow.cjs");
38
38
  const TestGasFeeFlow_1 = require("./gas-flows/TestGasFeeFlow.cjs");
39
- const EtherscanRemoteTransactionSource_1 = require("./helpers/EtherscanRemoteTransactionSource.cjs");
39
+ const AccountsApiRemoteTransactionSource_1 = require("./helpers/AccountsApiRemoteTransactionSource.cjs");
40
40
  const GasFeePoller_1 = require("./helpers/GasFeePoller.cjs");
41
41
  const IncomingTransactionHelper_1 = require("./helpers/IncomingTransactionHelper.cjs");
42
42
  const MultichainTrackingHelper_1 = require("./helpers/MultichainTrackingHelper.cjs");
@@ -70,7 +70,7 @@ const metadata = {
70
70
  persist: true,
71
71
  anonymous: false,
72
72
  },
73
- lastFetchedBlockNumbers: {
73
+ lastFetchedTimestamps: {
74
74
  persist: true,
75
75
  anonymous: false,
76
76
  },
@@ -111,7 +111,7 @@ function getDefaultTransactionControllerState() {
111
111
  return {
112
112
  methodData: {},
113
113
  transactions: [],
114
- lastFetchedBlockNumbers: {},
114
+ lastFetchedTimestamps: {},
115
115
  submitHistory: [],
116
116
  };
117
117
  }
@@ -263,30 +263,20 @@ class TransactionController extends base_controller_1.BaseController {
263
263
  isMultichainEnabled,
264
264
  provider,
265
265
  nonceTracker: this.nonceTracker,
266
- incomingTransactionOptions: incomingTransactions,
267
266
  findNetworkClientIdByChainId,
268
267
  getNetworkClientById: ((networkClientId) => {
269
268
  return this.messagingSystem.call(`NetworkController:getNetworkClientById`, networkClientId);
270
269
  }),
271
270
  getNetworkClientRegistry,
272
- removeIncomingTransactionHelperListeners: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_removeIncomingTransactionHelperListeners).bind(this),
273
271
  removePendingTransactionTrackerListeners: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_removePendingTransactionTrackerListeners).bind(this),
274
272
  createNonceTracker: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createNonceTracker).bind(this),
275
- createIncomingTransactionHelper: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createIncomingTransactionHelper).bind(this),
276
273
  createPendingTransactionTracker: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createPendingTransactionTracker).bind(this),
277
274
  onNetworkStateChange: (listener) => {
278
275
  this.messagingSystem.subscribe('NetworkController:stateChange', listener);
279
276
  },
280
277
  }), "f");
281
278
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").initialize();
282
- const etherscanRemoteTransactionSource = new EtherscanRemoteTransactionSource_1.EtherscanRemoteTransactionSource({
283
- apiKeysByChainId: incomingTransactions.etherscanApiKeysByChainId,
284
- includeTokenTransfers: incomingTransactions.includeTokenTransfers,
285
- });
286
- this.incomingTransactionHelper = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createIncomingTransactionHelper).call(this, {
287
- blockTracker,
288
- etherscanRemoteTransactionSource,
289
- });
279
+ this.incomingTransactionHelper = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createIncomingTransactionHelper).call(this);
290
280
  this.pendingTransactionTracker = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_createPendingTransactionTracker).call(this, {
291
281
  provider,
292
282
  blockTracker,
@@ -463,27 +453,20 @@ class TransactionController extends base_controller_1.BaseController {
463
453
  startIncomingTransactionPolling(networkClientIds = []) {
464
454
  if (networkClientIds.length === 0) {
465
455
  this.incomingTransactionHelper.start();
466
- return;
467
456
  }
468
- __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").startIncomingTransactionPolling(networkClientIds);
469
457
  }
470
458
  stopIncomingTransactionPolling(networkClientIds = []) {
471
459
  if (networkClientIds.length === 0) {
472
460
  this.incomingTransactionHelper.stop();
473
- return;
474
461
  }
475
- __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopIncomingTransactionPolling(networkClientIds);
476
462
  }
477
463
  stopAllIncomingTransactionPolling() {
478
464
  this.incomingTransactionHelper.stop();
479
- __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopAllIncomingTransactionPolling();
480
465
  }
481
466
  async updateIncomingTransactions(networkClientIds = []) {
482
467
  if (networkClientIds.length === 0) {
483
468
  await this.incomingTransactionHelper.update();
484
- return;
485
469
  }
486
- await __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").updateIncomingTransactions(networkClientIds);
487
470
  }
488
471
  /**
489
472
  * Attempts to cancel a transaction based on its ID by setting its status to "rejected"
@@ -611,23 +594,45 @@ class TransactionController extends base_controller_1.BaseController {
611
594
  * wiped on current network.
612
595
  */
613
596
  wipeTransactions(ignoreNetwork, address) {
597
+ (0, logger_1.projectLogger)('Wiping transactions', { ignoreNetwork, address });
614
598
  /* istanbul ignore next */
615
599
  if (ignoreNetwork && !address) {
616
600
  this.update((state) => {
617
601
  state.transactions = [];
602
+ state.lastFetchedTimestamps = {};
618
603
  });
619
604
  return;
620
605
  }
621
606
  const currentChainId = this.getChainId();
622
- 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;
623
610
  const isMatchingNetwork = ignoreNetwork || chainId === currentChainId;
624
611
  if (!isMatchingNetwork) {
625
612
  return true;
626
613
  }
627
- 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
+ }
628
620
  return !isMatchingAddress;
629
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
+ }, {});
630
634
  this.update((state) => {
635
+ state.lastFetchedTimestamps = newLastFetchedTimestamps;
631
636
  state.transactions = this.trimTransactionsForState(newTransactions);
632
637
  });
633
638
  }
@@ -1518,24 +1523,20 @@ class TransactionController extends base_controller_1.BaseController {
1518
1523
  };
1519
1524
  return common_1.Common.custom(customChainParams);
1520
1525
  }
1521
- onIncomingTransactions({ added, updated, }) {
1526
+ onIncomingTransactions(incomingTransactions) {
1522
1527
  this.update((state) => {
1523
1528
  const { transactions: currentTransactions } = state;
1524
- const updatedTransactions = [
1525
- ...added,
1526
- ...currentTransactions.map((originalTransaction) => {
1527
- const updatedTransaction = updated.find(({ hash }) => hash === originalTransaction.hash);
1528
- return updatedTransaction ?? originalTransaction;
1529
- }),
1530
- ];
1531
- state.transactions = this.trimTransactionsForState(updatedTransactions);
1529
+ state.transactions = this.trimTransactionsForState([
1530
+ ...incomingTransactions,
1531
+ ...currentTransactions,
1532
+ ]);
1532
1533
  });
1534
+ this.messagingSystem.publish(`${controllerName}:incomingTransactionsReceived`, incomingTransactions);
1533
1535
  }
1534
- onUpdatedLastFetchedBlockNumbers({ lastFetchedBlockNumbers, blockNumber, }) {
1536
+ onUpdatedLastFetchedTimestamp({ key, timestamp, }) {
1535
1537
  this.update((state) => {
1536
- state.lastFetchedBlockNumbers = lastFetchedBlockNumbers;
1538
+ state.lastFetchedTimestamps[key] = timestamp;
1537
1539
  });
1538
- this.messagingSystem.publish(`${controllerName}:incomingTransactionBlockReceived`, blockNumber);
1539
1540
  }
1540
1541
  generateDappSuggestedGasFees(txParams, origin) {
1541
1542
  if (!origin || origin === controller_utils_1.ORIGIN_METAMASK) {
@@ -1862,18 +1863,14 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1862
1863
  getPendingTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNonceTrackerPendingTransactions).bind(this, chainId),
1863
1864
  getConfirmedTransactions: this.getNonceTrackerTransactions.bind(this, types_1.TransactionStatus.confirmed),
1864
1865
  });
1865
- }, _TransactionController_createIncomingTransactionHelper = function _TransactionController_createIncomingTransactionHelper({ blockTracker, etherscanRemoteTransactionSource, chainId, }) {
1866
+ }, _TransactionController_createIncomingTransactionHelper = function _TransactionController_createIncomingTransactionHelper({ chainId, } = {}) {
1866
1867
  const incomingTransactionHelper = new IncomingTransactionHelper_1.IncomingTransactionHelper({
1867
- blockTracker,
1868
1868
  getCurrentAccount: () => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getSelectedAccount).call(this),
1869
- getLastFetchedBlockNumbers: () => this.state.lastFetchedBlockNumbers,
1870
- getLocalTransactions: () => this.state.transactions,
1871
- getChainId: chainId ? () => chainId : this.getChainId.bind(this),
1869
+ getLastFetchedTimestamps: () => this.state.lastFetchedTimestamps,
1870
+ getChainIds: chainId ? () => [chainId] : () => [this.getChainId()],
1872
1871
  isEnabled: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").isEnabled,
1873
- queryEntireHistory: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").queryEntireHistory,
1874
- remoteTransactionSource: etherscanRemoteTransactionSource,
1872
+ remoteTransactionSource: new AccountsApiRemoteTransactionSource_1.AccountsApiRemoteTransactionSource(),
1875
1873
  transactionLimit: __classPrivateFieldGet(this, _TransactionController_transactionHistoryLimit, "f"),
1876
- updateTransactions: __classPrivateFieldGet(this, _TransactionController_incomingTransactionOptions, "f").updateTransactions,
1877
1874
  });
1878
1875
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_addIncomingTransactionHelperListeners).call(this, incomingTransactionHelper);
1879
1876
  return incomingTransactionHelper;
@@ -1906,11 +1903,11 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_in
1906
1903
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_removeIncomingTransactionHelperListeners).call(this, this.incomingTransactionHelper);
1907
1904
  __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopAllTracking();
1908
1905
  }, _TransactionController_removeIncomingTransactionHelperListeners = function _TransactionController_removeIncomingTransactionHelperListeners(incomingTransactionHelper) {
1909
- incomingTransactionHelper.hub.removeAllListeners('transactions');
1910
- incomingTransactionHelper.hub.removeAllListeners('updatedLastFetchedBlockNumbers');
1906
+ incomingTransactionHelper.hub.removeAllListeners('incoming-transactions');
1907
+ incomingTransactionHelper.hub.removeAllListeners('updated-last-fetched-timestamp');
1911
1908
  }, _TransactionController_addIncomingTransactionHelperListeners = function _TransactionController_addIncomingTransactionHelperListeners(incomingTransactionHelper) {
1912
- incomingTransactionHelper.hub.on('transactions', this.onIncomingTransactions.bind(this));
1913
- 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));
1914
1911
  }, _TransactionController_removePendingTransactionTrackerListeners = function _TransactionController_removePendingTransactionTrackerListeners(pendingTransactionTracker) {
1915
1912
  pendingTransactionTracker.hub.removeAllListeners('transaction-confirmed');
1916
1913
  pendingTransactionTracker.hub.removeAllListeners('transaction-dropped');