@metamask/transaction-controller 40.1.0 → 41.1.0

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 (67) hide show
  1. package/CHANGELOG.md +50 -1
  2. package/README.md +4 -0
  3. package/dist/TransactionController.cjs +116 -227
  4. package/dist/TransactionController.cjs.map +1 -1
  5. package/dist/TransactionController.d.cts +34 -52
  6. package/dist/TransactionController.d.cts.map +1 -1
  7. package/dist/TransactionController.d.mts +34 -52
  8. package/dist/TransactionController.d.mts.map +1 -1
  9. package/dist/TransactionController.mjs +119 -232
  10. package/dist/TransactionController.mjs.map +1 -1
  11. package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs +1 -2
  12. package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs.map +1 -1
  13. package/dist/helpers/EtherscanRemoteTransactionSource.cjs +13 -12
  14. package/dist/helpers/EtherscanRemoteTransactionSource.cjs.map +1 -1
  15. package/dist/helpers/EtherscanRemoteTransactionSource.d.cts.map +1 -1
  16. package/dist/helpers/EtherscanRemoteTransactionSource.d.mts.map +1 -1
  17. package/dist/helpers/EtherscanRemoteTransactionSource.mjs +13 -12
  18. package/dist/helpers/EtherscanRemoteTransactionSource.mjs.map +1 -1
  19. package/dist/helpers/GasFeePoller.cjs +6 -4
  20. package/dist/helpers/GasFeePoller.cjs.map +1 -1
  21. package/dist/helpers/GasFeePoller.d.cts +1 -1
  22. package/dist/helpers/GasFeePoller.d.cts.map +1 -1
  23. package/dist/helpers/GasFeePoller.d.mts +1 -1
  24. package/dist/helpers/GasFeePoller.d.mts.map +1 -1
  25. package/dist/helpers/GasFeePoller.mjs +6 -4
  26. package/dist/helpers/GasFeePoller.mjs.map +1 -1
  27. package/dist/helpers/IncomingTransactionHelper.cjs +20 -11
  28. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  29. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  30. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  31. package/dist/helpers/IncomingTransactionHelper.mjs +21 -12
  32. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  33. package/dist/helpers/MethodDataHelper.cjs +80 -0
  34. package/dist/helpers/MethodDataHelper.cjs.map +1 -0
  35. package/dist/helpers/MethodDataHelper.d.cts +14 -0
  36. package/dist/helpers/MethodDataHelper.d.cts.map +1 -0
  37. package/dist/helpers/MethodDataHelper.d.mts +14 -0
  38. package/dist/helpers/MethodDataHelper.d.mts.map +1 -0
  39. package/dist/helpers/MethodDataHelper.mjs +73 -0
  40. package/dist/helpers/MethodDataHelper.mjs.map +1 -0
  41. package/dist/helpers/MultichainTrackingHelper.cjs +87 -104
  42. package/dist/helpers/MultichainTrackingHelper.cjs.map +1 -1
  43. package/dist/helpers/MultichainTrackingHelper.d.cts +16 -22
  44. package/dist/helpers/MultichainTrackingHelper.d.cts.map +1 -1
  45. package/dist/helpers/MultichainTrackingHelper.d.mts +16 -22
  46. package/dist/helpers/MultichainTrackingHelper.d.mts.map +1 -1
  47. package/dist/helpers/MultichainTrackingHelper.mjs +88 -109
  48. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -1
  49. package/dist/helpers/PendingTransactionTracker.cjs +26 -22
  50. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
  51. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
  52. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
  53. package/dist/helpers/PendingTransactionTracker.mjs +26 -22
  54. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
  55. package/dist/types.cjs.map +1 -1
  56. package/dist/types.d.cts +7 -3
  57. package/dist/types.d.cts.map +1 -1
  58. package/dist/types.d.mts +7 -3
  59. package/dist/types.d.mts.map +1 -1
  60. package/dist/types.mjs.map +1 -1
  61. package/dist/utils/etherscan.cjs +2 -1
  62. package/dist/utils/etherscan.cjs.map +1 -1
  63. package/dist/utils/etherscan.d.cts.map +1 -1
  64. package/dist/utils/etherscan.d.mts.map +1 -1
  65. package/dist/utils/etherscan.mjs +3 -2
  66. package/dist/utils/etherscan.mjs.map +1 -1
  67. package/package.json +8 -6
@@ -0,0 +1,73 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ 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");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _MethodDataHelper_instances, _MethodDataHelper_getProvider, _MethodDataHelper_getState, _MethodDataHelper_methodRegistryByNetworkClientId, _MethodDataHelper_mutex, _MethodDataHelper_registryLookup;
13
+ import { createModuleLogger } from "@metamask/utils";
14
+ import { Mutex } from "async-mutex";
15
+ import { MethodRegistry } from "eth-method-registry";
16
+ // This package purposefully relies on Node's EventEmitter module.
17
+ // eslint-disable-next-line import/no-nodejs-modules
18
+ import EventEmitter from "events";
19
+ import { projectLogger } from "../logger.mjs";
20
+ const log = createModuleLogger(projectLogger, 'method-data');
21
+ export class MethodDataHelper {
22
+ constructor({ getProvider, getState, }) {
23
+ _MethodDataHelper_instances.add(this);
24
+ _MethodDataHelper_getProvider.set(this, void 0);
25
+ _MethodDataHelper_getState.set(this, void 0);
26
+ _MethodDataHelper_methodRegistryByNetworkClientId.set(this, void 0);
27
+ _MethodDataHelper_mutex.set(this, new Mutex());
28
+ this.hub = new EventEmitter();
29
+ __classPrivateFieldSet(this, _MethodDataHelper_getProvider, getProvider, "f");
30
+ __classPrivateFieldSet(this, _MethodDataHelper_getState, getState, "f");
31
+ __classPrivateFieldSet(this, _MethodDataHelper_methodRegistryByNetworkClientId, new Map(), "f");
32
+ }
33
+ async lookup(fourBytePrefix, networkClientId) {
34
+ log('lookup', fourBytePrefix, networkClientId);
35
+ const releaseLock = await __classPrivateFieldGet(this, _MethodDataHelper_mutex, "f").acquire();
36
+ try {
37
+ const cachedResult = __classPrivateFieldGet(this, _MethodDataHelper_getState, "f").call(this)[fourBytePrefix];
38
+ if (cachedResult) {
39
+ log('Cached', cachedResult);
40
+ return cachedResult;
41
+ }
42
+ let registry = __classPrivateFieldGet(this, _MethodDataHelper_methodRegistryByNetworkClientId, "f").get(networkClientId);
43
+ if (!registry) {
44
+ const provider = __classPrivateFieldGet(this, _MethodDataHelper_getProvider, "f").call(this, networkClientId);
45
+ // @ts-expect-error Type in eth-method-registry is inappropriate and should be changed
46
+ registry = new MethodRegistry({ provider });
47
+ __classPrivateFieldGet(this, _MethodDataHelper_methodRegistryByNetworkClientId, "f").set(networkClientId, registry);
48
+ log('Created registry', networkClientId);
49
+ }
50
+ const methodData = await __classPrivateFieldGet(this, _MethodDataHelper_instances, "m", _MethodDataHelper_registryLookup).call(this, fourBytePrefix, registry);
51
+ log('Result', methodData);
52
+ this.hub.emit('update', { fourBytePrefix, methodData });
53
+ return methodData;
54
+ }
55
+ finally {
56
+ releaseLock();
57
+ }
58
+ }
59
+ }
60
+ _MethodDataHelper_getProvider = new WeakMap(), _MethodDataHelper_getState = new WeakMap(), _MethodDataHelper_methodRegistryByNetworkClientId = new WeakMap(), _MethodDataHelper_mutex = new WeakMap(), _MethodDataHelper_instances = new WeakSet(), _MethodDataHelper_registryLookup = async function _MethodDataHelper_registryLookup(fourBytePrefix, methodRegistry) {
61
+ const registryMethod = await methodRegistry.lookup(fourBytePrefix);
62
+ if (!registryMethod) {
63
+ log('No method found', fourBytePrefix);
64
+ return {
65
+ registryMethod: '',
66
+ parsedRegistryMethod: { name: undefined, args: undefined },
67
+ };
68
+ }
69
+ log('Parsing', registryMethod);
70
+ const parsedRegistryMethod = methodRegistry.parse(registryMethod);
71
+ return { registryMethod, parsedRegistryMethod };
72
+ };
73
+ //# sourceMappingURL=MethodDataHelper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MethodDataHelper.mjs","sourceRoot":"","sources":["../../src/helpers/MethodDataHelper.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AACrD,OAAO,EAAE,KAAK,EAAE,oBAAoB;AACpC,OAAO,EAAE,cAAc,EAAE,4BAA4B;AACrD,kEAAkE;AAClE,oDAAoD;AACpD,OAAO,YAAY,eAAe;AAElC,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAG1C,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE7D,MAAM,OAAO,gBAAgB;IAW3B,YAAY,EACV,WAAW,EACX,QAAQ,GAIT;;QAdD,gDAA6D;QAE7D,6CAA4C;QAE5C,oEAAuE;QAEvE,kCAAS,IAAI,KAAK,EAAE,EAAC;QASnB,IAAI,CAAC,GAAG,GAAG,IAAI,YAAY,EAAE,CAAC;QAE9B,uBAAA,IAAI,iCAAgB,WAAW,MAAA,CAAC;QAChC,uBAAA,IAAI,8BAAa,QAAQ,MAAA,CAAC;QAC1B,uBAAA,IAAI,qDAAoC,IAAI,GAAG,EAAE,MAAA,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,MAAM,CACV,cAAsB,EACtB,eAAgC;QAEhC,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,MAAM,uBAAA,IAAI,+BAAO,CAAC,OAAO,EAAE,CAAC;QAEhD,IAAI;YACF,MAAM,YAAY,GAAG,uBAAA,IAAI,kCAAU,MAAd,IAAI,CAAY,CAAC,cAAc,CAAC,CAAC;YAEtD,IAAI,YAAY,EAAE;gBAChB,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBAC5B,OAAO,YAAY,CAAC;aACrB;YAED,IAAI,QAAQ,GAAG,uBAAA,IAAI,yDAAiC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAE1E,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,QAAQ,GAAG,uBAAA,IAAI,qCAAa,MAAjB,IAAI,EAAc,eAAe,CAAC,CAAC;gBAEpD,sFAAsF;gBACtF,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAE5C,uBAAA,IAAI,yDAAiC,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;gBAErE,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;aAC1C;YAED,MAAM,UAAU,GAAG,MAAM,uBAAA,IAAI,qEAAgB,MAApB,IAAI,EAAiB,cAAc,EAAE,QAAQ,CAAC,CAAC;YAExE,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAE1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;YAExD,OAAO,UAAU,CAAC;SACnB;gBAAS;YACR,WAAW,EAAE,CAAC;SACf;IACH,CAAC;CAuBF;uRArBC,KAAK,2CACH,cAAsB,EACtB,cAA8B;IAE9B,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAEnE,IAAI,CAAC,cAAc,EAAE;QACnB,GAAG,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;QAEvC,OAAO;YACL,cAAc,EAAE,EAAE;YAClB,oBAAoB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;SAC3D,CAAC;KACH;IAED,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAE/B,MAAM,oBAAoB,GAAG,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAElE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;AAClD,CAAC","sourcesContent":["import type { NetworkClientId, Provider } from '@metamask/network-controller';\nimport { createModuleLogger } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\nimport { MethodRegistry } from 'eth-method-registry';\n// This package purposefully relies on Node's EventEmitter module.\n// eslint-disable-next-line import/no-nodejs-modules\nimport EventEmitter from 'events';\n\nimport { projectLogger } from '../logger';\nimport type { MethodData } from '../TransactionController';\n\nconst log = createModuleLogger(projectLogger, 'method-data');\n\nexport class MethodDataHelper {\n hub: EventEmitter;\n\n #getProvider: (networkClientId: NetworkClientId) => Provider;\n\n #getState: () => Record<string, MethodData>;\n\n #methodRegistryByNetworkClientId: Map<NetworkClientId, MethodRegistry>;\n\n #mutex = new Mutex();\n\n constructor({\n getProvider,\n getState,\n }: {\n getProvider: (networkClientId: NetworkClientId) => Provider;\n getState: () => Record<string, MethodData>;\n }) {\n this.hub = new EventEmitter();\n\n this.#getProvider = getProvider;\n this.#getState = getState;\n this.#methodRegistryByNetworkClientId = new Map();\n }\n\n async lookup(\n fourBytePrefix: string,\n networkClientId: NetworkClientId,\n ): Promise<MethodData> {\n log('lookup', fourBytePrefix, networkClientId);\n\n const releaseLock = await this.#mutex.acquire();\n\n try {\n const cachedResult = this.#getState()[fourBytePrefix];\n\n if (cachedResult) {\n log('Cached', cachedResult);\n return cachedResult;\n }\n\n let registry = this.#methodRegistryByNetworkClientId.get(networkClientId);\n\n if (!registry) {\n const provider = this.#getProvider(networkClientId);\n\n // @ts-expect-error Type in eth-method-registry is inappropriate and should be changed\n registry = new MethodRegistry({ provider });\n\n this.#methodRegistryByNetworkClientId.set(networkClientId, registry);\n\n log('Created registry', networkClientId);\n }\n\n const methodData = await this.#registryLookup(fourBytePrefix, registry);\n\n log('Result', methodData);\n\n this.hub.emit('update', { fourBytePrefix, methodData });\n\n return methodData;\n } finally {\n releaseLock();\n }\n }\n\n async #registryLookup(\n fourBytePrefix: string,\n methodRegistry: MethodRegistry,\n ): Promise<MethodData> {\n const registryMethod = await methodRegistry.lookup(fourBytePrefix);\n\n if (!registryMethod) {\n log('No method found', fourBytePrefix);\n\n return {\n registryMethod: '',\n parsedRegistryMethod: { name: undefined, args: undefined },\n };\n }\n\n log('Parsing', registryMethod);\n\n const parsedRegistryMethod = methodRegistry.parse(registryMethod);\n\n return { registryMethod, parsedRegistryMethod };\n }\n}\n"]}
@@ -10,23 +10,15 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- var _MultichainTrackingHelper_instances, _MultichainTrackingHelper_isMultichainEnabled, _MultichainTrackingHelper_provider, _MultichainTrackingHelper_nonceTracker, _MultichainTrackingHelper_incomingTransactionOptions, _MultichainTrackingHelper_findNetworkClientIdByChainId, _MultichainTrackingHelper_getNetworkClientById, _MultichainTrackingHelper_getNetworkClientRegistry, _MultichainTrackingHelper_removeIncomingTransactionHelperListeners, _MultichainTrackingHelper_removePendingTransactionTrackerListeners, _MultichainTrackingHelper_createNonceTracker, _MultichainTrackingHelper_createIncomingTransactionHelper, _MultichainTrackingHelper_createPendingTransactionTracker, _MultichainTrackingHelper_nonceMutexesByChainId, _MultichainTrackingHelper_trackingMap, _MultichainTrackingHelper_etherscanRemoteTransactionSourcesMap, _MultichainTrackingHelper_refreshTrackingMap, _MultichainTrackingHelper_stopTrackingByNetworkClientId, _MultichainTrackingHelper_startTrackingByNetworkClientId, _MultichainTrackingHelper_refreshEtherscanRemoteTransactionSources, _MultichainTrackingHelper_getNetworkClient;
13
+ var _MultichainTrackingHelper_instances, _MultichainTrackingHelper_findNetworkClientIdByChainId, _MultichainTrackingHelper_getNetworkClientById, _MultichainTrackingHelper_getNetworkClientRegistry, _MultichainTrackingHelper_removeIncomingTransactionHelperListeners, _MultichainTrackingHelper_removePendingTransactionTrackerListeners, _MultichainTrackingHelper_createNonceTracker, _MultichainTrackingHelper_createIncomingTransactionHelper, _MultichainTrackingHelper_createPendingTransactionTracker, _MultichainTrackingHelper_createRemoteTransactionSource, _MultichainTrackingHelper_nonceMutexesByChainId, _MultichainTrackingHelper_trackingMap, _MultichainTrackingHelper_remoteTransactionSourcesMap, _MultichainTrackingHelper_refreshTrackingMap, _MultichainTrackingHelper_stopTrackingByNetworkClientId, _MultichainTrackingHelper_startTrackingByNetworkClientId, _MultichainTrackingHelper_refreshRemoteTransactionSources;
17
14
  Object.defineProperty(exports, "__esModule", { value: true });
18
15
  exports.MultichainTrackingHelper = void 0;
19
- const eth_query_1 = __importDefault(require("@metamask/eth-query"));
20
16
  const async_mutex_1 = require("async-mutex");
21
17
  const logger_1 = require("../logger.cjs");
22
- const EtherscanRemoteTransactionSource_1 = require("./EtherscanRemoteTransactionSource.cjs");
18
+ const log = (0, logger_1.createModuleLogger)(logger_1.projectLogger, 'multichain-tracking');
23
19
  class MultichainTrackingHelper {
24
- constructor({ isMultichainEnabled, provider, nonceTracker, incomingTransactionOptions, findNetworkClientIdByChainId, getNetworkClientById, getNetworkClientRegistry, removeIncomingTransactionHelperListeners, removePendingTransactionTrackerListeners, createNonceTracker, createIncomingTransactionHelper, createPendingTransactionTracker, onNetworkStateChange, }) {
20
+ constructor({ findNetworkClientIdByChainId, getNetworkClientById, getNetworkClientRegistry, removeIncomingTransactionHelperListeners, removePendingTransactionTrackerListeners, createNonceTracker, createIncomingTransactionHelper, createPendingTransactionTracker, createRemoteTransactionSource, onNetworkStateChange, }) {
25
21
  _MultichainTrackingHelper_instances.add(this);
26
- _MultichainTrackingHelper_isMultichainEnabled.set(this, void 0);
27
- _MultichainTrackingHelper_provider.set(this, void 0);
28
- _MultichainTrackingHelper_nonceTracker.set(this, void 0);
29
- _MultichainTrackingHelper_incomingTransactionOptions.set(this, void 0);
30
22
  _MultichainTrackingHelper_findNetworkClientIdByChainId.set(this, void 0);
31
23
  _MultichainTrackingHelper_getNetworkClientById.set(this, void 0);
32
24
  _MultichainTrackingHelper_getNetworkClientRegistry.set(this, void 0);
@@ -35,16 +27,17 @@ class MultichainTrackingHelper {
35
27
  _MultichainTrackingHelper_createNonceTracker.set(this, void 0);
36
28
  _MultichainTrackingHelper_createIncomingTransactionHelper.set(this, void 0);
37
29
  _MultichainTrackingHelper_createPendingTransactionTracker.set(this, void 0);
30
+ _MultichainTrackingHelper_createRemoteTransactionSource.set(this, void 0);
38
31
  _MultichainTrackingHelper_nonceMutexesByChainId.set(this, new Map());
39
32
  _MultichainTrackingHelper_trackingMap.set(this, new Map());
40
- _MultichainTrackingHelper_etherscanRemoteTransactionSourcesMap.set(this, new Map());
33
+ _MultichainTrackingHelper_remoteTransactionSourcesMap.set(this, new Map());
41
34
  this.checkForPendingTransactionAndStartPolling = () => {
42
35
  for (const [, trackers] of __classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f")) {
43
36
  trackers.pendingTransactionTracker.startIfPendingTransactions();
44
37
  }
45
38
  };
46
39
  _MultichainTrackingHelper_refreshTrackingMap.set(this, (networkClients) => {
47
- __classPrivateFieldGet(this, _MultichainTrackingHelper_refreshEtherscanRemoteTransactionSources, "f").call(this, networkClients);
40
+ __classPrivateFieldGet(this, _MultichainTrackingHelper_refreshRemoteTransactionSources, "f").call(this, networkClients);
48
41
  const networkClientIds = Object.keys(networkClients);
49
42
  const existingNetworkClientIds = Array.from(__classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f").keys());
50
43
  // Remove tracking for NetworkClientIds that no longer exist
@@ -57,23 +50,22 @@ class MultichainTrackingHelper {
57
50
  networkClientIdsToAdd.forEach((id) => {
58
51
  __classPrivateFieldGet(this, _MultichainTrackingHelper_instances, "m", _MultichainTrackingHelper_startTrackingByNetworkClientId).call(this, id);
59
52
  });
53
+ if (networkClientIdsToAdd.length) {
54
+ log('Added trackers', networkClientIdsToAdd);
55
+ }
56
+ if (networkClientIdsToRemove.length) {
57
+ log('Removed trackers', networkClientIdsToRemove);
58
+ }
60
59
  });
61
- _MultichainTrackingHelper_refreshEtherscanRemoteTransactionSources.set(this, (networkClients) => {
62
- // this will be prettier when we have consolidated network clients with a single chainId:
63
- // check if there are still other network clients using the same chainId
64
- // if not remove the etherscanRemoteTransaction source from the map
60
+ _MultichainTrackingHelper_refreshRemoteTransactionSources.set(this, (networkClients) => {
65
61
  const chainIdsInRegistry = new Set();
66
62
  Object.values(networkClients).forEach((networkClient) => chainIdsInRegistry.add(networkClient.configuration.chainId));
67
- const existingChainIds = Array.from(__classPrivateFieldGet(this, _MultichainTrackingHelper_etherscanRemoteTransactionSourcesMap, "f").keys());
63
+ const existingChainIds = Array.from(__classPrivateFieldGet(this, _MultichainTrackingHelper_remoteTransactionSourcesMap, "f").keys());
68
64
  const chainIdsToRemove = existingChainIds.filter((chainId) => !chainIdsInRegistry.has(chainId));
69
65
  chainIdsToRemove.forEach((chainId) => {
70
- __classPrivateFieldGet(this, _MultichainTrackingHelper_etherscanRemoteTransactionSourcesMap, "f").delete(chainId);
66
+ __classPrivateFieldGet(this, _MultichainTrackingHelper_remoteTransactionSourcesMap, "f").delete(chainId);
71
67
  });
72
68
  });
73
- __classPrivateFieldSet(this, _MultichainTrackingHelper_isMultichainEnabled, isMultichainEnabled, "f");
74
- __classPrivateFieldSet(this, _MultichainTrackingHelper_provider, provider, "f");
75
- __classPrivateFieldSet(this, _MultichainTrackingHelper_nonceTracker, nonceTracker, "f");
76
- __classPrivateFieldSet(this, _MultichainTrackingHelper_incomingTransactionOptions, incomingTransactionOptions, "f");
77
69
  __classPrivateFieldSet(this, _MultichainTrackingHelper_findNetworkClientIdByChainId, findNetworkClientIdByChainId, "f");
78
70
  __classPrivateFieldSet(this, _MultichainTrackingHelper_getNetworkClientById, getNetworkClientById, "f");
79
71
  __classPrivateFieldSet(this, _MultichainTrackingHelper_getNetworkClientRegistry, getNetworkClientRegistry, "f");
@@ -82,45 +74,26 @@ class MultichainTrackingHelper {
82
74
  __classPrivateFieldSet(this, _MultichainTrackingHelper_createNonceTracker, createNonceTracker, "f");
83
75
  __classPrivateFieldSet(this, _MultichainTrackingHelper_createIncomingTransactionHelper, createIncomingTransactionHelper, "f");
84
76
  __classPrivateFieldSet(this, _MultichainTrackingHelper_createPendingTransactionTracker, createPendingTransactionTracker, "f");
77
+ __classPrivateFieldSet(this, _MultichainTrackingHelper_createRemoteTransactionSource, createRemoteTransactionSource, "f");
85
78
  onNetworkStateChange((_, patches) => {
86
- if (__classPrivateFieldGet(this, _MultichainTrackingHelper_isMultichainEnabled, "f")) {
87
- const networkClients = __classPrivateFieldGet(this, _MultichainTrackingHelper_getNetworkClientRegistry, "f").call(this);
88
- patches.forEach(({ op, path }) => {
89
- if (op === 'remove' && path[0] === 'networkConfigurations') {
90
- const networkClientId = path[1];
91
- delete networkClients[networkClientId];
92
- }
93
- });
94
- __classPrivateFieldGet(this, _MultichainTrackingHelper_refreshTrackingMap, "f").call(this, networkClients);
95
- }
79
+ const networkClients = __classPrivateFieldGet(this, _MultichainTrackingHelper_getNetworkClientRegistry, "f").call(this);
80
+ patches.forEach(({ op, path }) => {
81
+ if (op === 'remove' && path[0] === 'networkConfigurations') {
82
+ const networkClientId = path[1];
83
+ delete networkClients[networkClientId];
84
+ }
85
+ });
86
+ __classPrivateFieldGet(this, _MultichainTrackingHelper_refreshTrackingMap, "f").call(this, networkClients);
96
87
  });
97
88
  }
98
89
  initialize() {
99
- if (!__classPrivateFieldGet(this, _MultichainTrackingHelper_isMultichainEnabled, "f")) {
100
- return;
101
- }
102
90
  const networkClients = __classPrivateFieldGet(this, _MultichainTrackingHelper_getNetworkClientRegistry, "f").call(this);
103
91
  __classPrivateFieldGet(this, _MultichainTrackingHelper_refreshTrackingMap, "f").call(this, networkClients);
92
+ log('Initialized');
104
93
  }
105
94
  has(networkClientId) {
106
95
  return __classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f").has(networkClientId);
107
96
  }
108
- getEthQuery({ networkClientId, chainId, } = {}) {
109
- if (!__classPrivateFieldGet(this, _MultichainTrackingHelper_isMultichainEnabled, "f")) {
110
- return new eth_query_1.default(this.getProvider());
111
- }
112
- return new eth_query_1.default(this.getProvider({ networkClientId, chainId }));
113
- }
114
- getProvider({ networkClientId, chainId, } = {}) {
115
- if (!__classPrivateFieldGet(this, _MultichainTrackingHelper_isMultichainEnabled, "f")) {
116
- return __classPrivateFieldGet(this, _MultichainTrackingHelper_provider, "f");
117
- }
118
- const networkClient = __classPrivateFieldGet(this, _MultichainTrackingHelper_instances, "m", _MultichainTrackingHelper_getNetworkClient).call(this, {
119
- networkClientId,
120
- chainId,
121
- });
122
- return networkClient?.provider || __classPrivateFieldGet(this, _MultichainTrackingHelper_provider, "f");
123
- }
124
97
  /**
125
98
  * Gets the mutex intended to guard the nonceTracker for a particular chainId and key .
126
99
  *
@@ -151,19 +124,14 @@ class MultichainTrackingHelper {
151
124
  * @returns object with the `nextNonce` `nonceDetails`, and the releaseLock.
152
125
  */
153
126
  async getNonceLock(address, networkClientId) {
154
- let releaseLockForChainIdKey;
155
- let nonceTracker = __classPrivateFieldGet(this, _MultichainTrackingHelper_nonceTracker, "f");
156
- if (networkClientId && __classPrivateFieldGet(this, _MultichainTrackingHelper_isMultichainEnabled, "f")) {
157
- const networkClient = __classPrivateFieldGet(this, _MultichainTrackingHelper_getNetworkClientById, "f").call(this, networkClientId);
158
- releaseLockForChainIdKey = await this.acquireNonceLockForChainIdKey({
159
- chainId: networkClient.configuration.chainId,
160
- key: address,
161
- });
162
- const trackers = __classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f").get(networkClientId);
163
- if (!trackers) {
164
- throw new Error('missing nonceTracker for networkClientId');
165
- }
166
- nonceTracker = trackers.nonceTracker;
127
+ const networkClient = __classPrivateFieldGet(this, _MultichainTrackingHelper_getNetworkClientById, "f").call(this, networkClientId);
128
+ const releaseLockForChainIdKey = await this.acquireNonceLockForChainIdKey({
129
+ chainId: networkClient.configuration.chainId,
130
+ key: address,
131
+ });
132
+ const nonceTracker = __classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f").get(networkClientId)?.nonceTracker;
133
+ if (!nonceTracker) {
134
+ throw new Error(`Missing nonce tracker for network client ID - ${networkClientId}`);
167
135
  }
168
136
  // Acquires the lock for the chainId + address and the nonceLock from the nonceTracker, then
169
137
  // couples them together by replacing the nonceLock's releaseLock method with
@@ -171,12 +139,13 @@ class MultichainTrackingHelper {
171
139
  // lock for the chainId.
172
140
  try {
173
141
  const nonceLock = await nonceTracker.getNonceLock(address);
142
+ const releaseLock = () => {
143
+ nonceLock.releaseLock();
144
+ releaseLockForChainIdKey?.();
145
+ };
174
146
  return {
175
147
  ...nonceLock,
176
- releaseLock: () => {
177
- nonceLock.releaseLock();
178
- releaseLockForChainIdKey?.();
179
- },
148
+ releaseLock,
180
149
  };
181
150
  }
182
151
  catch (err) {
@@ -184,13 +153,19 @@ class MultichainTrackingHelper {
184
153
  throw err;
185
154
  }
186
155
  }
187
- startIncomingTransactionPolling(networkClientIds = []) {
188
- networkClientIds.forEach((networkClientId) => {
156
+ startIncomingTransactionPolling(networkClientIds) {
157
+ const finalNetworkClientIds = networkClientIds ?? [
158
+ ...__classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f").keys(),
159
+ ];
160
+ finalNetworkClientIds.forEach((networkClientId) => {
189
161
  __classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f").get(networkClientId)?.incomingTransactionHelper.start();
190
162
  });
191
163
  }
192
- stopIncomingTransactionPolling(networkClientIds = []) {
193
- networkClientIds.forEach((networkClientId) => {
164
+ stopIncomingTransactionPolling(networkClientIds) {
165
+ const finalNetworkClientIds = networkClientIds ?? [
166
+ ...__classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f").keys(),
167
+ ];
168
+ finalNetworkClientIds.forEach((networkClientId) => {
194
169
  __classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f").get(networkClientId)?.incomingTransactionHelper.stop();
195
170
  });
196
171
  }
@@ -199,8 +174,11 @@ class MultichainTrackingHelper {
199
174
  trackers.incomingTransactionHelper.stop();
200
175
  }
201
176
  }
202
- async updateIncomingTransactions(networkClientIds = []) {
203
- const promises = await Promise.allSettled(networkClientIds.map(async (networkClientId) => {
177
+ async updateIncomingTransactions(networkClientIds) {
178
+ const finalNetworkClientIds = networkClientIds ?? [
179
+ ...__classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f").keys(),
180
+ ];
181
+ const promises = await Promise.allSettled(finalNetworkClientIds.map(async (networkClientId) => {
204
182
  return await __classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f")
205
183
  .get(networkClientId)
206
184
  ?.incomingTransactionHelper.update();
@@ -208,7 +186,7 @@ class MultichainTrackingHelper {
208
186
  promises
209
187
  .filter((result) => result.status === 'rejected')
210
188
  .forEach((result) => {
211
- (0, logger_1.incomingTransactionsLogger)('failed to update incoming transactions', result.reason);
189
+ log('Failed to update incoming transactions', result.reason);
212
190
  });
213
191
  }
214
192
  stopAllTracking() {
@@ -216,9 +194,35 @@ class MultichainTrackingHelper {
216
194
  __classPrivateFieldGet(this, _MultichainTrackingHelper_instances, "m", _MultichainTrackingHelper_stopTrackingByNetworkClientId).call(this, networkClientId);
217
195
  }
218
196
  }
197
+ getNetworkClient({ chainId, networkClientId: requestNetworkClientId, }) {
198
+ if (!requestNetworkClientId && !chainId) {
199
+ throw new Error('Cannot locate network client without networkClientId or chainId');
200
+ }
201
+ let networkClient;
202
+ let networkClientId = requestNetworkClientId;
203
+ try {
204
+ if (requestNetworkClientId) {
205
+ networkClient = __classPrivateFieldGet(this, _MultichainTrackingHelper_getNetworkClientById, "f").call(this, requestNetworkClientId);
206
+ }
207
+ }
208
+ catch (error) {
209
+ log('No network client found with ID', requestNetworkClientId);
210
+ if (!chainId) {
211
+ throw error;
212
+ }
213
+ }
214
+ if (!networkClient && chainId) {
215
+ networkClientId = __classPrivateFieldGet(this, _MultichainTrackingHelper_findNetworkClientIdByChainId, "f").call(this, chainId);
216
+ networkClient = __classPrivateFieldGet(this, _MultichainTrackingHelper_getNetworkClientById, "f").call(this, networkClientId);
217
+ }
218
+ return {
219
+ ...networkClient,
220
+ id: networkClientId,
221
+ };
222
+ }
219
223
  }
220
224
  exports.MultichainTrackingHelper = MultichainTrackingHelper;
221
- _MultichainTrackingHelper_isMultichainEnabled = new WeakMap(), _MultichainTrackingHelper_provider = new WeakMap(), _MultichainTrackingHelper_nonceTracker = new WeakMap(), _MultichainTrackingHelper_incomingTransactionOptions = new WeakMap(), _MultichainTrackingHelper_findNetworkClientIdByChainId = new WeakMap(), _MultichainTrackingHelper_getNetworkClientById = new WeakMap(), _MultichainTrackingHelper_getNetworkClientRegistry = new WeakMap(), _MultichainTrackingHelper_removeIncomingTransactionHelperListeners = new WeakMap(), _MultichainTrackingHelper_removePendingTransactionTrackerListeners = new WeakMap(), _MultichainTrackingHelper_createNonceTracker = new WeakMap(), _MultichainTrackingHelper_createIncomingTransactionHelper = new WeakMap(), _MultichainTrackingHelper_createPendingTransactionTracker = new WeakMap(), _MultichainTrackingHelper_nonceMutexesByChainId = new WeakMap(), _MultichainTrackingHelper_trackingMap = new WeakMap(), _MultichainTrackingHelper_etherscanRemoteTransactionSourcesMap = new WeakMap(), _MultichainTrackingHelper_refreshTrackingMap = new WeakMap(), _MultichainTrackingHelper_refreshEtherscanRemoteTransactionSources = new WeakMap(), _MultichainTrackingHelper_instances = new WeakSet(), _MultichainTrackingHelper_stopTrackingByNetworkClientId = function _MultichainTrackingHelper_stopTrackingByNetworkClientId(networkClientId) {
225
+ _MultichainTrackingHelper_findNetworkClientIdByChainId = new WeakMap(), _MultichainTrackingHelper_getNetworkClientById = new WeakMap(), _MultichainTrackingHelper_getNetworkClientRegistry = new WeakMap(), _MultichainTrackingHelper_removeIncomingTransactionHelperListeners = new WeakMap(), _MultichainTrackingHelper_removePendingTransactionTrackerListeners = new WeakMap(), _MultichainTrackingHelper_createNonceTracker = new WeakMap(), _MultichainTrackingHelper_createIncomingTransactionHelper = new WeakMap(), _MultichainTrackingHelper_createPendingTransactionTracker = new WeakMap(), _MultichainTrackingHelper_createRemoteTransactionSource = new WeakMap(), _MultichainTrackingHelper_nonceMutexesByChainId = new WeakMap(), _MultichainTrackingHelper_trackingMap = new WeakMap(), _MultichainTrackingHelper_remoteTransactionSourcesMap = new WeakMap(), _MultichainTrackingHelper_refreshTrackingMap = new WeakMap(), _MultichainTrackingHelper_refreshRemoteTransactionSources = new WeakMap(), _MultichainTrackingHelper_instances = new WeakSet(), _MultichainTrackingHelper_stopTrackingByNetworkClientId = function _MultichainTrackingHelper_stopTrackingByNetworkClientId(networkClientId) {
222
226
  const trackers = __classPrivateFieldGet(this, _MultichainTrackingHelper_trackingMap, "f").get(networkClientId);
223
227
  if (trackers) {
224
228
  trackers.pendingTransactionTracker.stop();
@@ -233,12 +237,11 @@ _MultichainTrackingHelper_isMultichainEnabled = new WeakMap(), _MultichainTracki
233
237
  return;
234
238
  }
235
239
  const { provider, blockTracker, configuration: { chainId }, } = __classPrivateFieldGet(this, _MultichainTrackingHelper_getNetworkClientById, "f").call(this, networkClientId);
236
- let etherscanRemoteTransactionSource = __classPrivateFieldGet(this, _MultichainTrackingHelper_etherscanRemoteTransactionSourcesMap, "f").get(chainId);
237
- if (!etherscanRemoteTransactionSource) {
238
- etherscanRemoteTransactionSource = new EtherscanRemoteTransactionSource_1.EtherscanRemoteTransactionSource({
239
- includeTokenTransfers: __classPrivateFieldGet(this, _MultichainTrackingHelper_incomingTransactionOptions, "f").includeTokenTransfers,
240
- });
241
- __classPrivateFieldGet(this, _MultichainTrackingHelper_etherscanRemoteTransactionSourcesMap, "f").set(chainId, etherscanRemoteTransactionSource);
240
+ let remoteTransactionSource = __classPrivateFieldGet(this, _MultichainTrackingHelper_remoteTransactionSourcesMap, "f").get(chainId);
241
+ if (!remoteTransactionSource) {
242
+ remoteTransactionSource = __classPrivateFieldGet(this, _MultichainTrackingHelper_createRemoteTransactionSource, "f").call(this);
243
+ __classPrivateFieldGet(this, _MultichainTrackingHelper_remoteTransactionSourcesMap, "f").set(chainId, remoteTransactionSource);
244
+ log('Created remote transaction source', chainId);
242
245
  }
243
246
  const nonceTracker = __classPrivateFieldGet(this, _MultichainTrackingHelper_createNonceTracker, "f").call(this, {
244
247
  provider,
@@ -247,7 +250,7 @@ _MultichainTrackingHelper_isMultichainEnabled = new WeakMap(), _MultichainTracki
247
250
  });
248
251
  const incomingTransactionHelper = __classPrivateFieldGet(this, _MultichainTrackingHelper_createIncomingTransactionHelper, "f").call(this, {
249
252
  blockTracker,
250
- etherscanRemoteTransactionSource,
253
+ remoteTransactionSource,
251
254
  chainId,
252
255
  });
253
256
  const pendingTransactionTracker = __classPrivateFieldGet(this, _MultichainTrackingHelper_createPendingTransactionTracker, "f").call(this, {
@@ -260,25 +263,5 @@ _MultichainTrackingHelper_isMultichainEnabled = new WeakMap(), _MultichainTracki
260
263
  incomingTransactionHelper,
261
264
  pendingTransactionTracker,
262
265
  });
263
- }, _MultichainTrackingHelper_getNetworkClient = function _MultichainTrackingHelper_getNetworkClient({ networkClientId, chainId, } = {}) {
264
- let networkClient;
265
- if (networkClientId) {
266
- try {
267
- networkClient = __classPrivateFieldGet(this, _MultichainTrackingHelper_getNetworkClientById, "f").call(this, networkClientId);
268
- }
269
- catch (err) {
270
- (0, logger_1.incomingTransactionsLogger)('failed to get network client by networkClientId');
271
- }
272
- }
273
- if (!networkClient && chainId) {
274
- try {
275
- const networkClientIdForChainId = __classPrivateFieldGet(this, _MultichainTrackingHelper_findNetworkClientIdByChainId, "f").call(this, chainId);
276
- networkClient = __classPrivateFieldGet(this, _MultichainTrackingHelper_getNetworkClientById, "f").call(this, networkClientIdForChainId);
277
- }
278
- catch (err) {
279
- (0, logger_1.incomingTransactionsLogger)('failed to get network client by chainId');
280
- }
281
- }
282
- return networkClient;
283
266
  };
284
267
  //# sourceMappingURL=MultichainTrackingHelper.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultichainTrackingHelper.cjs","sourceRoot":"","sources":["../../src/helpers/MultichainTrackingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import EthQuery from '@metamask/eth-query';\nimport type {\n NetworkClientId,\n NetworkController,\n NetworkClient,\n BlockTracker,\n Provider,\n NetworkControllerStateChangeEvent,\n} from '@metamask/network-controller';\nimport type { NonceLock, NonceTracker } from '@metamask/nonce-tracker';\nimport type { Hex } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\n\nimport { incomingTransactionsLogger as log } from '../logger';\nimport { EtherscanRemoteTransactionSource } from './EtherscanRemoteTransactionSource';\nimport type {\n IncomingTransactionHelper,\n IncomingTransactionOptions,\n} from './IncomingTransactionHelper';\nimport type { PendingTransactionTracker } from './PendingTransactionTracker';\n\n/**\n * Registry of network clients provided by the NetworkController\n */\ntype NetworkClientRegistry = ReturnType<\n NetworkController['getNetworkClientRegistry']\n>;\n\nexport type MultichainTrackingHelperOptions = {\n isMultichainEnabled: boolean;\n provider: Provider;\n nonceTracker: NonceTracker;\n incomingTransactionOptions: IncomingTransactionOptions;\n\n findNetworkClientIdByChainId: NetworkController['findNetworkClientIdByChainId'];\n getNetworkClientById: NetworkController['getNetworkClientById'];\n getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n\n removeIncomingTransactionHelperListeners: (\n IncomingTransactionHelper: IncomingTransactionHelper,\n ) => void;\n removePendingTransactionTrackerListeners: (\n pendingTransactionTracker: PendingTransactionTracker,\n ) => void;\n createNonceTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => NonceTracker;\n createIncomingTransactionHelper: (opts: {\n blockTracker: BlockTracker;\n etherscanRemoteTransactionSource: EtherscanRemoteTransactionSource;\n chainId?: Hex;\n }) => IncomingTransactionHelper;\n createPendingTransactionTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => PendingTransactionTracker;\n onNetworkStateChange: (\n listener: (\n ...payload: NetworkControllerStateChangeEvent['payload']\n ) => void,\n ) => void;\n};\n\nexport class MultichainTrackingHelper {\n #isMultichainEnabled: boolean;\n\n readonly #provider: Provider;\n\n readonly #nonceTracker: NonceTracker;\n\n readonly #incomingTransactionOptions: IncomingTransactionOptions;\n\n readonly #findNetworkClientIdByChainId: NetworkController['findNetworkClientIdByChainId'];\n\n readonly #getNetworkClientById: NetworkController['getNetworkClientById'];\n\n readonly #getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n\n readonly #removeIncomingTransactionHelperListeners: (\n IncomingTransactionHelper: IncomingTransactionHelper,\n ) => void;\n\n readonly #removePendingTransactionTrackerListeners: (\n pendingTransactionTracker: PendingTransactionTracker,\n ) => void;\n\n readonly #createNonceTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => NonceTracker;\n\n readonly #createIncomingTransactionHelper: (opts: {\n blockTracker: BlockTracker;\n chainId?: Hex;\n etherscanRemoteTransactionSource: EtherscanRemoteTransactionSource;\n }) => IncomingTransactionHelper;\n\n readonly #createPendingTransactionTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => PendingTransactionTracker;\n\n readonly #nonceMutexesByChainId = new Map<Hex, Map<string, Mutex>>();\n\n readonly #trackingMap: Map<\n NetworkClientId,\n {\n nonceTracker: NonceTracker;\n pendingTransactionTracker: PendingTransactionTracker;\n incomingTransactionHelper: IncomingTransactionHelper;\n }\n > = new Map();\n\n readonly #etherscanRemoteTransactionSourcesMap: Map<\n Hex,\n EtherscanRemoteTransactionSource\n > = new Map();\n\n constructor({\n isMultichainEnabled,\n provider,\n nonceTracker,\n incomingTransactionOptions,\n findNetworkClientIdByChainId,\n getNetworkClientById,\n getNetworkClientRegistry,\n removeIncomingTransactionHelperListeners,\n removePendingTransactionTrackerListeners,\n createNonceTracker,\n createIncomingTransactionHelper,\n createPendingTransactionTracker,\n onNetworkStateChange,\n }: MultichainTrackingHelperOptions) {\n this.#isMultichainEnabled = isMultichainEnabled;\n this.#provider = provider;\n this.#nonceTracker = nonceTracker;\n this.#incomingTransactionOptions = incomingTransactionOptions;\n\n this.#findNetworkClientIdByChainId = findNetworkClientIdByChainId;\n this.#getNetworkClientById = getNetworkClientById;\n this.#getNetworkClientRegistry = getNetworkClientRegistry;\n\n this.#removeIncomingTransactionHelperListeners =\n removeIncomingTransactionHelperListeners;\n this.#removePendingTransactionTrackerListeners =\n removePendingTransactionTrackerListeners;\n this.#createNonceTracker = createNonceTracker;\n this.#createIncomingTransactionHelper = createIncomingTransactionHelper;\n this.#createPendingTransactionTracker = createPendingTransactionTracker;\n\n onNetworkStateChange((_, patches) => {\n if (this.#isMultichainEnabled) {\n const networkClients = this.#getNetworkClientRegistry();\n patches.forEach(({ op, path }) => {\n if (op === 'remove' && path[0] === 'networkConfigurations') {\n const networkClientId = path[1] as NetworkClientId;\n delete networkClients[networkClientId];\n }\n });\n\n this.#refreshTrackingMap(networkClients);\n }\n });\n }\n\n initialize() {\n if (!this.#isMultichainEnabled) {\n return;\n }\n const networkClients = this.#getNetworkClientRegistry();\n this.#refreshTrackingMap(networkClients);\n }\n\n has(networkClientId: NetworkClientId) {\n return this.#trackingMap.has(networkClientId);\n }\n\n getEthQuery({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): EthQuery {\n if (!this.#isMultichainEnabled) {\n return new EthQuery(this.getProvider());\n }\n return new EthQuery(this.getProvider({ networkClientId, chainId }));\n }\n\n getProvider({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): Provider {\n if (!this.#isMultichainEnabled) {\n return this.#provider;\n }\n\n const networkClient = this.#getNetworkClient({\n networkClientId,\n chainId,\n });\n\n return networkClient?.provider || this.#provider;\n }\n\n /**\n * Gets the mutex intended to guard the nonceTracker for a particular chainId and key .\n *\n * @param opts - The options object.\n * @param opts.chainId - The hex chainId.\n * @param opts.key - The hex address (or constant) pertaining to the chainId\n * @returns Mutex instance for the given chainId and key pair\n */\n async acquireNonceLockForChainIdKey({\n chainId,\n key = 'global',\n }: {\n chainId: Hex;\n key?: string;\n }): Promise<() => void> {\n let nonceMutexesForChainId = this.#nonceMutexesByChainId.get(chainId);\n if (!nonceMutexesForChainId) {\n nonceMutexesForChainId = new Map<string, Mutex>();\n this.#nonceMutexesByChainId.set(chainId, nonceMutexesForChainId);\n }\n let nonceMutexForKey = nonceMutexesForChainId.get(key);\n if (!nonceMutexForKey) {\n nonceMutexForKey = new Mutex();\n nonceMutexesForChainId.set(key, nonceMutexForKey);\n }\n\n return await nonceMutexForKey.acquire();\n }\n\n /**\n * Gets the next nonce according to the nonce-tracker.\n * Ensure `releaseLock` is called once processing of the `nonce` value is complete.\n *\n * @param address - The hex string address for the transaction.\n * @param networkClientId - The network client ID for the transaction, used to fetch the correct nonce tracker.\n * @returns object with the `nextNonce` `nonceDetails`, and the releaseLock.\n */\n async getNonceLock(\n address: string,\n networkClientId?: NetworkClientId,\n ): Promise<NonceLock> {\n let releaseLockForChainIdKey: (() => void) | undefined;\n let nonceTracker = this.#nonceTracker;\n if (networkClientId && this.#isMultichainEnabled) {\n const networkClient = this.#getNetworkClientById(networkClientId);\n releaseLockForChainIdKey = await this.acquireNonceLockForChainIdKey({\n chainId: networkClient.configuration.chainId,\n key: address,\n });\n const trackers = this.#trackingMap.get(networkClientId);\n if (!trackers) {\n throw new Error('missing nonceTracker for networkClientId');\n }\n nonceTracker = trackers.nonceTracker;\n }\n\n // Acquires the lock for the chainId + address and the nonceLock from the nonceTracker, then\n // couples them together by replacing the nonceLock's releaseLock method with\n // an anonymous function that calls releases both the original nonceLock and the\n // lock for the chainId.\n try {\n const nonceLock = await nonceTracker.getNonceLock(address);\n return {\n ...nonceLock,\n releaseLock: () => {\n nonceLock.releaseLock();\n releaseLockForChainIdKey?.();\n },\n };\n } catch (err) {\n releaseLockForChainIdKey?.();\n throw err;\n }\n }\n\n startIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n networkClientIds.forEach((networkClientId) => {\n this.#trackingMap.get(networkClientId)?.incomingTransactionHelper.start();\n });\n }\n\n stopIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n networkClientIds.forEach((networkClientId) => {\n this.#trackingMap.get(networkClientId)?.incomingTransactionHelper.stop();\n });\n }\n\n stopAllIncomingTransactionPolling() {\n for (const [, trackers] of this.#trackingMap) {\n trackers.incomingTransactionHelper.stop();\n }\n }\n\n async updateIncomingTransactions(networkClientIds: NetworkClientId[] = []) {\n const promises = await Promise.allSettled(\n networkClientIds.map(async (networkClientId) => {\n return await this.#trackingMap\n .get(networkClientId)\n ?.incomingTransactionHelper.update();\n }),\n );\n\n promises\n .filter((result) => result.status === 'rejected')\n .forEach((result) => {\n log(\n 'failed to update incoming transactions',\n (result as PromiseRejectedResult).reason,\n );\n });\n }\n\n checkForPendingTransactionAndStartPolling = () => {\n for (const [, trackers] of this.#trackingMap) {\n trackers.pendingTransactionTracker.startIfPendingTransactions();\n }\n };\n\n stopAllTracking() {\n for (const [networkClientId] of this.#trackingMap) {\n this.#stopTrackingByNetworkClientId(networkClientId);\n }\n }\n\n #refreshTrackingMap = (networkClients: NetworkClientRegistry) => {\n this.#refreshEtherscanRemoteTransactionSources(networkClients);\n\n const networkClientIds = Object.keys(networkClients);\n const existingNetworkClientIds = Array.from(this.#trackingMap.keys());\n\n // Remove tracking for NetworkClientIds that no longer exist\n const networkClientIdsToRemove = existingNetworkClientIds.filter(\n (id) => !networkClientIds.includes(id),\n );\n networkClientIdsToRemove.forEach((id) => {\n this.#stopTrackingByNetworkClientId(id);\n });\n\n // Start tracking new NetworkClientIds from the registry\n const networkClientIdsToAdd = networkClientIds.filter(\n (id) => !existingNetworkClientIds.includes(id),\n );\n networkClientIdsToAdd.forEach((id) => {\n this.#startTrackingByNetworkClientId(id);\n });\n };\n\n #stopTrackingByNetworkClientId(networkClientId: NetworkClientId) {\n const trackers = this.#trackingMap.get(networkClientId);\n if (trackers) {\n trackers.pendingTransactionTracker.stop();\n this.#removePendingTransactionTrackerListeners(\n trackers.pendingTransactionTracker,\n );\n trackers.incomingTransactionHelper.stop();\n this.#removeIncomingTransactionHelperListeners(\n trackers.incomingTransactionHelper,\n );\n this.#trackingMap.delete(networkClientId);\n }\n }\n\n #startTrackingByNetworkClientId(networkClientId: NetworkClientId) {\n const trackers = this.#trackingMap.get(networkClientId);\n if (trackers) {\n return;\n }\n\n const {\n provider,\n blockTracker,\n configuration: { chainId },\n } = this.#getNetworkClientById(networkClientId);\n\n let etherscanRemoteTransactionSource =\n this.#etherscanRemoteTransactionSourcesMap.get(chainId);\n if (!etherscanRemoteTransactionSource) {\n etherscanRemoteTransactionSource = new EtherscanRemoteTransactionSource({\n includeTokenTransfers:\n this.#incomingTransactionOptions.includeTokenTransfers,\n });\n this.#etherscanRemoteTransactionSourcesMap.set(\n chainId,\n etherscanRemoteTransactionSource,\n );\n }\n\n const nonceTracker = this.#createNonceTracker({\n provider,\n blockTracker,\n chainId,\n });\n\n const incomingTransactionHelper = this.#createIncomingTransactionHelper({\n blockTracker,\n etherscanRemoteTransactionSource,\n chainId,\n });\n\n const pendingTransactionTracker = this.#createPendingTransactionTracker({\n provider,\n blockTracker,\n chainId,\n });\n\n this.#trackingMap.set(networkClientId, {\n nonceTracker,\n incomingTransactionHelper,\n pendingTransactionTracker,\n });\n }\n\n #refreshEtherscanRemoteTransactionSources = (\n networkClients: NetworkClientRegistry,\n ) => {\n // this will be prettier when we have consolidated network clients with a single chainId:\n // check if there are still other network clients using the same chainId\n // if not remove the etherscanRemoteTransaction source from the map\n const chainIdsInRegistry = new Set();\n Object.values(networkClients).forEach((networkClient) =>\n chainIdsInRegistry.add(networkClient.configuration.chainId),\n );\n const existingChainIds = Array.from(\n this.#etherscanRemoteTransactionSourcesMap.keys(),\n );\n const chainIdsToRemove = existingChainIds.filter(\n (chainId) => !chainIdsInRegistry.has(chainId),\n );\n\n chainIdsToRemove.forEach((chainId) => {\n this.#etherscanRemoteTransactionSourcesMap.delete(chainId);\n });\n };\n\n #getNetworkClient({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): NetworkClient | undefined {\n let networkClient: NetworkClient | undefined;\n\n if (networkClientId) {\n try {\n networkClient = this.#getNetworkClientById(networkClientId);\n } catch (err) {\n log('failed to get network client by networkClientId');\n }\n }\n if (!networkClient && chainId) {\n try {\n const networkClientIdForChainId =\n this.#findNetworkClientIdByChainId(chainId);\n networkClient = this.#getNetworkClientById(networkClientIdForChainId);\n } catch (err) {\n log('failed to get network client by chainId');\n }\n }\n return networkClient;\n }\n}\n"]}
1
+ {"version":3,"file":"MultichainTrackingHelper.cjs","sourceRoot":"","sources":["../../src/helpers/MultichainTrackingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n NetworkClientId,\n NetworkController,\n NetworkClient,\n BlockTracker,\n Provider,\n NetworkControllerStateChangeEvent,\n} from '@metamask/network-controller';\nimport type { NonceLock, NonceTracker } from '@metamask/nonce-tracker';\nimport type { Hex } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { RemoteTransactionSource } from '../types';\nimport type { IncomingTransactionHelper } from './IncomingTransactionHelper';\nimport type { PendingTransactionTracker } from './PendingTransactionTracker';\n\n/**\n * Registry of network clients provided by the NetworkController\n */\ntype NetworkClientRegistry = ReturnType<\n NetworkController['getNetworkClientRegistry']\n>;\n\nconst log = createModuleLogger(projectLogger, 'multichain-tracking');\n\nexport type MultichainTrackingHelperOptions = {\n findNetworkClientIdByChainId: NetworkController['findNetworkClientIdByChainId'];\n getNetworkClientById: NetworkController['getNetworkClientById'];\n getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n removeIncomingTransactionHelperListeners: (\n IncomingTransactionHelper: IncomingTransactionHelper,\n ) => void;\n removePendingTransactionTrackerListeners: (\n pendingTransactionTracker: PendingTransactionTracker,\n ) => void;\n createNonceTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId: Hex;\n }) => NonceTracker;\n createIncomingTransactionHelper: (opts: {\n blockTracker: BlockTracker;\n remoteTransactionSource: RemoteTransactionSource;\n chainId: Hex;\n }) => IncomingTransactionHelper;\n createPendingTransactionTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId: Hex;\n }) => PendingTransactionTracker;\n createRemoteTransactionSource: () => RemoteTransactionSource;\n onNetworkStateChange: (\n listener: (\n ...payload: NetworkControllerStateChangeEvent['payload']\n ) => void,\n ) => void;\n};\n\nexport class MultichainTrackingHelper {\n readonly #findNetworkClientIdByChainId: NetworkController['findNetworkClientIdByChainId'];\n\n readonly #getNetworkClientById: NetworkController['getNetworkClientById'];\n\n readonly #getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n\n readonly #removeIncomingTransactionHelperListeners: (\n IncomingTransactionHelper: IncomingTransactionHelper,\n ) => void;\n\n readonly #removePendingTransactionTrackerListeners: (\n pendingTransactionTracker: PendingTransactionTracker,\n ) => void;\n\n readonly #createNonceTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId: Hex;\n }) => NonceTracker;\n\n readonly #createIncomingTransactionHelper: (opts: {\n blockTracker: BlockTracker;\n chainId: Hex;\n remoteTransactionSource: RemoteTransactionSource;\n }) => IncomingTransactionHelper;\n\n readonly #createPendingTransactionTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId: Hex;\n }) => PendingTransactionTracker;\n\n readonly #createRemoteTransactionSource: () => RemoteTransactionSource;\n\n readonly #nonceMutexesByChainId = new Map<Hex, Map<string, Mutex>>();\n\n readonly #trackingMap: Map<\n NetworkClientId,\n {\n nonceTracker: NonceTracker;\n pendingTransactionTracker: PendingTransactionTracker;\n incomingTransactionHelper: IncomingTransactionHelper;\n }\n > = new Map();\n\n readonly #remoteTransactionSourcesMap: Map<Hex, RemoteTransactionSource> =\n new Map();\n\n constructor({\n findNetworkClientIdByChainId,\n getNetworkClientById,\n getNetworkClientRegistry,\n removeIncomingTransactionHelperListeners,\n removePendingTransactionTrackerListeners,\n createNonceTracker,\n createIncomingTransactionHelper,\n createPendingTransactionTracker,\n createRemoteTransactionSource,\n onNetworkStateChange,\n }: MultichainTrackingHelperOptions) {\n this.#findNetworkClientIdByChainId = findNetworkClientIdByChainId;\n this.#getNetworkClientById = getNetworkClientById;\n this.#getNetworkClientRegistry = getNetworkClientRegistry;\n\n this.#removeIncomingTransactionHelperListeners =\n removeIncomingTransactionHelperListeners;\n this.#removePendingTransactionTrackerListeners =\n removePendingTransactionTrackerListeners;\n this.#createNonceTracker = createNonceTracker;\n this.#createIncomingTransactionHelper = createIncomingTransactionHelper;\n this.#createPendingTransactionTracker = createPendingTransactionTracker;\n this.#createRemoteTransactionSource = createRemoteTransactionSource;\n\n onNetworkStateChange((_, patches) => {\n const networkClients = this.#getNetworkClientRegistry();\n\n patches.forEach(({ op, path }) => {\n if (op === 'remove' && path[0] === 'networkConfigurations') {\n const networkClientId = path[1] as NetworkClientId;\n delete networkClients[networkClientId];\n }\n });\n\n this.#refreshTrackingMap(networkClients);\n });\n }\n\n initialize() {\n const networkClients = this.#getNetworkClientRegistry();\n\n this.#refreshTrackingMap(networkClients);\n\n log('Initialized');\n }\n\n has(networkClientId: NetworkClientId) {\n return this.#trackingMap.has(networkClientId);\n }\n\n /**\n * Gets the mutex intended to guard the nonceTracker for a particular chainId and key .\n *\n * @param opts - The options object.\n * @param opts.chainId - The hex chainId.\n * @param opts.key - The hex address (or constant) pertaining to the chainId\n * @returns Mutex instance for the given chainId and key pair\n */\n async acquireNonceLockForChainIdKey({\n chainId,\n key = 'global',\n }: {\n chainId: Hex;\n key?: string;\n }): Promise<() => void> {\n let nonceMutexesForChainId = this.#nonceMutexesByChainId.get(chainId);\n if (!nonceMutexesForChainId) {\n nonceMutexesForChainId = new Map<string, Mutex>();\n this.#nonceMutexesByChainId.set(chainId, nonceMutexesForChainId);\n }\n let nonceMutexForKey = nonceMutexesForChainId.get(key);\n if (!nonceMutexForKey) {\n nonceMutexForKey = new Mutex();\n nonceMutexesForChainId.set(key, nonceMutexForKey);\n }\n\n return await nonceMutexForKey.acquire();\n }\n\n /**\n * Gets the next nonce according to the nonce-tracker.\n * Ensure `releaseLock` is called once processing of the `nonce` value is complete.\n *\n * @param address - The hex string address for the transaction.\n * @param networkClientId - The network client ID for the transaction, used to fetch the correct nonce tracker.\n * @returns object with the `nextNonce` `nonceDetails`, and the releaseLock.\n */\n async getNonceLock(\n address: string,\n networkClientId: NetworkClientId,\n ): Promise<NonceLock> {\n const networkClient = this.#getNetworkClientById(networkClientId);\n\n const releaseLockForChainIdKey = await this.acquireNonceLockForChainIdKey({\n chainId: networkClient.configuration.chainId,\n key: address,\n });\n\n const nonceTracker = this.#trackingMap.get(networkClientId)?.nonceTracker;\n\n if (!nonceTracker) {\n throw new Error(\n `Missing nonce tracker for network client ID - ${\n networkClientId as string\n }`,\n );\n }\n\n // Acquires the lock for the chainId + address and the nonceLock from the nonceTracker, then\n // couples them together by replacing the nonceLock's releaseLock method with\n // an anonymous function that calls releases both the original nonceLock and the\n // lock for the chainId.\n try {\n const nonceLock = await nonceTracker.getNonceLock(address);\n\n const releaseLock = () => {\n nonceLock.releaseLock();\n releaseLockForChainIdKey?.();\n };\n\n return {\n ...nonceLock,\n releaseLock,\n };\n } catch (err) {\n releaseLockForChainIdKey?.();\n throw err;\n }\n }\n\n startIncomingTransactionPolling(networkClientIds?: NetworkClientId[]) {\n const finalNetworkClientIds = networkClientIds ?? [\n ...this.#trackingMap.keys(),\n ];\n\n finalNetworkClientIds.forEach((networkClientId) => {\n this.#trackingMap.get(networkClientId)?.incomingTransactionHelper.start();\n });\n }\n\n stopIncomingTransactionPolling(networkClientIds?: NetworkClientId[]) {\n const finalNetworkClientIds = networkClientIds ?? [\n ...this.#trackingMap.keys(),\n ];\n\n finalNetworkClientIds.forEach((networkClientId) => {\n this.#trackingMap.get(networkClientId)?.incomingTransactionHelper.stop();\n });\n }\n\n stopAllIncomingTransactionPolling() {\n for (const [, trackers] of this.#trackingMap) {\n trackers.incomingTransactionHelper.stop();\n }\n }\n\n async updateIncomingTransactions(networkClientIds?: NetworkClientId[]) {\n const finalNetworkClientIds = networkClientIds ?? [\n ...this.#trackingMap.keys(),\n ];\n\n const promises = await Promise.allSettled(\n finalNetworkClientIds.map(async (networkClientId) => {\n return await this.#trackingMap\n .get(networkClientId)\n ?.incomingTransactionHelper.update();\n }),\n );\n\n promises\n .filter((result) => result.status === 'rejected')\n .forEach((result) => {\n log(\n 'Failed to update incoming transactions',\n (result as PromiseRejectedResult).reason,\n );\n });\n }\n\n checkForPendingTransactionAndStartPolling = () => {\n for (const [, trackers] of this.#trackingMap) {\n trackers.pendingTransactionTracker.startIfPendingTransactions();\n }\n };\n\n stopAllTracking() {\n for (const [networkClientId] of this.#trackingMap) {\n this.#stopTrackingByNetworkClientId(networkClientId);\n }\n }\n\n getNetworkClient({\n chainId,\n networkClientId: requestNetworkClientId,\n }: {\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n }): NetworkClient & { id: NetworkClientId } {\n if (!requestNetworkClientId && !chainId) {\n throw new Error(\n 'Cannot locate network client without networkClientId or chainId',\n );\n }\n\n let networkClient: NetworkClient | undefined;\n let networkClientId = requestNetworkClientId;\n\n try {\n if (requestNetworkClientId) {\n networkClient = this.#getNetworkClientById(requestNetworkClientId);\n }\n } catch (error) {\n log('No network client found with ID', requestNetworkClientId);\n\n if (!chainId) {\n throw error;\n }\n }\n\n if (!networkClient && chainId) {\n networkClientId = this.#findNetworkClientIdByChainId(chainId);\n networkClient = this.#getNetworkClientById(networkClientId);\n }\n\n return {\n ...(networkClient as NetworkClient),\n id: networkClientId as NetworkClientId,\n };\n }\n\n #refreshTrackingMap = (networkClients: NetworkClientRegistry) => {\n this.#refreshRemoteTransactionSources(networkClients);\n\n const networkClientIds = Object.keys(networkClients);\n const existingNetworkClientIds = Array.from(this.#trackingMap.keys());\n\n // Remove tracking for NetworkClientIds that no longer exist\n const networkClientIdsToRemove = existingNetworkClientIds.filter(\n (id) => !networkClientIds.includes(id),\n );\n\n networkClientIdsToRemove.forEach((id) => {\n this.#stopTrackingByNetworkClientId(id);\n });\n\n // Start tracking new NetworkClientIds from the registry\n const networkClientIdsToAdd = networkClientIds.filter(\n (id) => !existingNetworkClientIds.includes(id),\n );\n\n networkClientIdsToAdd.forEach((id) => {\n this.#startTrackingByNetworkClientId(id);\n });\n\n if (networkClientIdsToAdd.length) {\n log('Added trackers', networkClientIdsToAdd);\n }\n\n if (networkClientIdsToRemove.length) {\n log('Removed trackers', networkClientIdsToRemove);\n }\n };\n\n #stopTrackingByNetworkClientId(networkClientId: NetworkClientId) {\n const trackers = this.#trackingMap.get(networkClientId);\n if (trackers) {\n trackers.pendingTransactionTracker.stop();\n this.#removePendingTransactionTrackerListeners(\n trackers.pendingTransactionTracker,\n );\n trackers.incomingTransactionHelper.stop();\n this.#removeIncomingTransactionHelperListeners(\n trackers.incomingTransactionHelper,\n );\n this.#trackingMap.delete(networkClientId);\n }\n }\n\n #startTrackingByNetworkClientId(networkClientId: NetworkClientId) {\n const trackers = this.#trackingMap.get(networkClientId);\n if (trackers) {\n return;\n }\n\n const {\n provider,\n blockTracker,\n configuration: { chainId },\n } = this.#getNetworkClientById(networkClientId);\n\n let remoteTransactionSource =\n this.#remoteTransactionSourcesMap.get(chainId);\n\n if (!remoteTransactionSource) {\n remoteTransactionSource = this.#createRemoteTransactionSource();\n this.#remoteTransactionSourcesMap.set(chainId, remoteTransactionSource);\n\n log('Created remote transaction source', chainId);\n }\n\n const nonceTracker = this.#createNonceTracker({\n provider,\n blockTracker,\n chainId,\n });\n\n const incomingTransactionHelper = this.#createIncomingTransactionHelper({\n blockTracker,\n remoteTransactionSource,\n chainId,\n });\n\n const pendingTransactionTracker = this.#createPendingTransactionTracker({\n provider,\n blockTracker,\n chainId,\n });\n\n this.#trackingMap.set(networkClientId, {\n nonceTracker,\n incomingTransactionHelper,\n pendingTransactionTracker,\n });\n }\n\n #refreshRemoteTransactionSources = (\n networkClients: NetworkClientRegistry,\n ) => {\n const chainIdsInRegistry = new Set();\n\n Object.values(networkClients).forEach((networkClient) =>\n chainIdsInRegistry.add(networkClient.configuration.chainId),\n );\n\n const existingChainIds = Array.from(\n this.#remoteTransactionSourcesMap.keys(),\n );\n\n const chainIdsToRemove = existingChainIds.filter(\n (chainId) => !chainIdsInRegistry.has(chainId),\n );\n\n chainIdsToRemove.forEach((chainId) => {\n this.#remoteTransactionSourcesMap.delete(chainId);\n });\n };\n}\n"]}
@@ -1,15 +1,10 @@
1
- import EthQuery from "@metamask/eth-query";
2
- import type { NetworkClientId, NetworkController, BlockTracker, Provider, NetworkControllerStateChangeEvent } from "@metamask/network-controller";
1
+ import type { NetworkClientId, NetworkController, NetworkClient, BlockTracker, Provider, NetworkControllerStateChangeEvent } from "@metamask/network-controller";
3
2
  import type { NonceLock, NonceTracker } from "@metamask/nonce-tracker";
4
3
  import type { Hex } from "@metamask/utils";
5
- import { EtherscanRemoteTransactionSource } from "./EtherscanRemoteTransactionSource.cjs";
6
- import type { IncomingTransactionHelper, IncomingTransactionOptions } from "./IncomingTransactionHelper.cjs";
4
+ import type { RemoteTransactionSource } from "../types.cjs";
5
+ import type { IncomingTransactionHelper } from "./IncomingTransactionHelper.cjs";
7
6
  import type { PendingTransactionTracker } from "./PendingTransactionTracker.cjs";
8
7
  export type MultichainTrackingHelperOptions = {
9
- isMultichainEnabled: boolean;
10
- provider: Provider;
11
- nonceTracker: NonceTracker;
12
- incomingTransactionOptions: IncomingTransactionOptions;
13
8
  findNetworkClientIdByChainId: NetworkController['findNetworkClientIdByChainId'];
14
9
  getNetworkClientById: NetworkController['getNetworkClientById'];
15
10
  getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];
@@ -18,33 +13,26 @@ export type MultichainTrackingHelperOptions = {
18
13
  createNonceTracker: (opts: {
19
14
  provider: Provider;
20
15
  blockTracker: BlockTracker;
21
- chainId?: Hex;
16
+ chainId: Hex;
22
17
  }) => NonceTracker;
23
18
  createIncomingTransactionHelper: (opts: {
24
19
  blockTracker: BlockTracker;
25
- etherscanRemoteTransactionSource: EtherscanRemoteTransactionSource;
26
- chainId?: Hex;
20
+ remoteTransactionSource: RemoteTransactionSource;
21
+ chainId: Hex;
27
22
  }) => IncomingTransactionHelper;
28
23
  createPendingTransactionTracker: (opts: {
29
24
  provider: Provider;
30
25
  blockTracker: BlockTracker;
31
- chainId?: Hex;
26
+ chainId: Hex;
32
27
  }) => PendingTransactionTracker;
28
+ createRemoteTransactionSource: () => RemoteTransactionSource;
33
29
  onNetworkStateChange: (listener: (...payload: NetworkControllerStateChangeEvent['payload']) => void) => void;
34
30
  };
35
31
  export declare class MultichainTrackingHelper {
36
32
  #private;
37
- constructor({ isMultichainEnabled, provider, nonceTracker, incomingTransactionOptions, findNetworkClientIdByChainId, getNetworkClientById, getNetworkClientRegistry, removeIncomingTransactionHelperListeners, removePendingTransactionTrackerListeners, createNonceTracker, createIncomingTransactionHelper, createPendingTransactionTracker, onNetworkStateChange, }: MultichainTrackingHelperOptions);
33
+ constructor({ findNetworkClientIdByChainId, getNetworkClientById, getNetworkClientRegistry, removeIncomingTransactionHelperListeners, removePendingTransactionTrackerListeners, createNonceTracker, createIncomingTransactionHelper, createPendingTransactionTracker, createRemoteTransactionSource, onNetworkStateChange, }: MultichainTrackingHelperOptions);
38
34
  initialize(): void;
39
35
  has(networkClientId: NetworkClientId): boolean;
40
- getEthQuery({ networkClientId, chainId, }?: {
41
- networkClientId?: NetworkClientId;
42
- chainId?: Hex;
43
- }): EthQuery;
44
- getProvider({ networkClientId, chainId, }?: {
45
- networkClientId?: NetworkClientId;
46
- chainId?: Hex;
47
- }): Provider;
48
36
  /**
49
37
  * Gets the mutex intended to guard the nonceTracker for a particular chainId and key .
50
38
  *
@@ -65,12 +53,18 @@ export declare class MultichainTrackingHelper {
65
53
  * @param networkClientId - The network client ID for the transaction, used to fetch the correct nonce tracker.
66
54
  * @returns object with the `nextNonce` `nonceDetails`, and the releaseLock.
67
55
  */
68
- getNonceLock(address: string, networkClientId?: NetworkClientId): Promise<NonceLock>;
56
+ getNonceLock(address: string, networkClientId: NetworkClientId): Promise<NonceLock>;
69
57
  startIncomingTransactionPolling(networkClientIds?: NetworkClientId[]): void;
70
58
  stopIncomingTransactionPolling(networkClientIds?: NetworkClientId[]): void;
71
59
  stopAllIncomingTransactionPolling(): void;
72
60
  updateIncomingTransactions(networkClientIds?: NetworkClientId[]): Promise<void>;
73
61
  checkForPendingTransactionAndStartPolling: () => void;
74
62
  stopAllTracking(): void;
63
+ getNetworkClient({ chainId, networkClientId: requestNetworkClientId, }: {
64
+ chainId?: Hex;
65
+ networkClientId?: NetworkClientId;
66
+ }): NetworkClient & {
67
+ id: NetworkClientId;
68
+ };
75
69
  }
76
70
  //# sourceMappingURL=MultichainTrackingHelper.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultichainTrackingHelper.d.cts","sourceRoot":"","sources":["../../src/helpers/MultichainTrackingHelper.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,4BAA4B;AAC3C,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EAEjB,YAAY,EACZ,QAAQ,EACR,iCAAiC,EAClC,qCAAqC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,gCAAgC;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,EAAE,gCAAgC,EAAE,+CAA2C;AACtF,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC3B,wCAAoC;AACrC,OAAO,KAAK,EAAE,yBAAyB,EAAE,wCAAoC;AAS7E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,0BAA0B,EAAE,0BAA0B,CAAC;IAEvD,4BAA4B,EAAE,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;IAChF,oBAAoB,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;IAChE,wBAAwB,EAAE,iBAAiB,CAAC,0BAA0B,CAAC,CAAC;IAExE,wCAAwC,EAAE,CACxC,yBAAyB,EAAE,yBAAyB,KACjD,IAAI,CAAC;IACV,wCAAwC,EAAE,CACxC,yBAAyB,EAAE,yBAAyB,KACjD,IAAI,CAAC;IACV,kBAAkB,EAAE,CAAC,IAAI,EAAE;QACzB,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,YAAY,CAAC;QAC3B,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,KAAK,YAAY,CAAC;IACnB,+BAA+B,EAAE,CAAC,IAAI,EAAE;QACtC,YAAY,EAAE,YAAY,CAAC;QAC3B,gCAAgC,EAAE,gCAAgC,CAAC;QACnE,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,KAAK,yBAAyB,CAAC;IAChC,+BAA+B,EAAE,CAAC,IAAI,EAAE;QACtC,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,YAAY,CAAC;QAC3B,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,KAAK,yBAAyB,CAAC;IAChC,oBAAoB,EAAE,CACpB,QAAQ,EAAE,CACR,GAAG,OAAO,EAAE,iCAAiC,CAAC,SAAS,CAAC,KACrD,IAAI,KACN,IAAI,CAAC;CACX,CAAC;AAEF,qBAAa,wBAAwB;;gBAyDvB,EACV,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,0BAA0B,EAC1B,4BAA4B,EAC5B,oBAAoB,EACpB,wBAAwB,EACxB,wCAAwC,EACxC,wCAAwC,EACxC,kBAAkB,EAClB,+BAA+B,EAC/B,+BAA+B,EAC/B,oBAAoB,GACrB,EAAE,+BAA+B;IAiClC,UAAU;IAQV,GAAG,CAAC,eAAe,EAAE,eAAe;IAIpC,WAAW,CAAC,EACV,eAAe,EACf,OAAO,GACR,GAAE;QACD,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,OAAO,CAAC,EAAE,GAAG,CAAC;KACV,GAAG,QAAQ;IAOjB,WAAW,CAAC,EACV,eAAe,EACf,OAAO,GACR,GAAE;QACD,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,OAAO,CAAC,EAAE,GAAG,CAAC;KACV,GAAG,QAAQ;IAajB;;;;;;;OAOG;IACG,6BAA6B,CAAC,EAClC,OAAO,EACP,GAAc,GACf,EAAE;QACD,OAAO,EAAE,GAAG,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAevB;;;;;;;OAOG;IACG,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,eAAe,GAChC,OAAO,CAAC,SAAS,CAAC;IAmCrB,+BAA+B,CAAC,gBAAgB,GAAE,eAAe,EAAO;IAMxE,8BAA8B,CAAC,gBAAgB,GAAE,eAAe,EAAO;IAMvE,iCAAiC;IAM3B,0BAA0B,CAAC,gBAAgB,GAAE,eAAe,EAAO;IAmBzE,yCAAyC,aAIvC;IAEF,eAAe;CA+IhB"}
1
+ {"version":3,"file":"MultichainTrackingHelper.d.cts","sourceRoot":"","sources":["../../src/helpers/MultichainTrackingHelper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,iCAAiC,EAClC,qCAAqC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,gCAAgC;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EAAE,uBAAuB,EAAE,qBAAiB;AACxD,OAAO,KAAK,EAAE,yBAAyB,EAAE,wCAAoC;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,wCAAoC;AAW7E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,4BAA4B,EAAE,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;IAChF,oBAAoB,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;IAChE,wBAAwB,EAAE,iBAAiB,CAAC,0BAA0B,CAAC,CAAC;IACxE,wCAAwC,EAAE,CACxC,yBAAyB,EAAE,yBAAyB,KACjD,IAAI,CAAC;IACV,wCAAwC,EAAE,CACxC,yBAAyB,EAAE,yBAAyB,KACjD,IAAI,CAAC;IACV,kBAAkB,EAAE,CAAC,IAAI,EAAE;QACzB,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,YAAY,CAAC;QAC3B,OAAO,EAAE,GAAG,CAAC;KACd,KAAK,YAAY,CAAC;IACnB,+BAA+B,EAAE,CAAC,IAAI,EAAE;QACtC,YAAY,EAAE,YAAY,CAAC;QAC3B,uBAAuB,EAAE,uBAAuB,CAAC;QACjD,OAAO,EAAE,GAAG,CAAC;KACd,KAAK,yBAAyB,CAAC;IAChC,+BAA+B,EAAE,CAAC,IAAI,EAAE;QACtC,QAAQ,EAAE,QAAQ,CAAC;QACnB,YAAY,EAAE,YAAY,CAAC;QAC3B,OAAO,EAAE,GAAG,CAAC;KACd,KAAK,yBAAyB,CAAC;IAChC,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;IAC7D,oBAAoB,EAAE,CACpB,QAAQ,EAAE,CACR,GAAG,OAAO,EAAE,iCAAiC,CAAC,SAAS,CAAC,KACrD,IAAI,KACN,IAAI,CAAC;CACX,CAAC;AAEF,qBAAa,wBAAwB;;gBAiDvB,EACV,4BAA4B,EAC5B,oBAAoB,EACpB,wBAAwB,EACxB,wCAAwC,EACxC,wCAAwC,EACxC,kBAAkB,EAClB,+BAA+B,EAC/B,+BAA+B,EAC/B,6BAA6B,EAC7B,oBAAoB,GACrB,EAAE,+BAA+B;IA4BlC,UAAU;IAQV,GAAG,CAAC,eAAe,EAAE,eAAe;IAIpC;;;;;;;OAOG;IACG,6BAA6B,CAAC,EAClC,OAAO,EACP,GAAc,GACf,EAAE;QACD,OAAO,EAAE,GAAG,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAevB;;;;;;;OAOG;IACG,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,SAAS,CAAC;IAwCrB,+BAA+B,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE;IAUpE,8BAA8B,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE;IAUnE,iCAAiC;IAM3B,0BAA0B,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE;IAuBrE,yCAAyC,aAIvC;IAEF,eAAe;IAMf,gBAAgB,CAAC,EACf,OAAO,EACP,eAAe,EAAE,sBAAsB,GACxC,EAAE;QACD,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,eAAe,CAAC,EAAE,eAAe,CAAC;KACnC,GAAG,aAAa,GAAG;QAAE,EAAE,EAAE,eAAe,CAAA;KAAE;CAqJ5C"}