@metamask/polling-controller 5.0.1 → 6.0.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 (43) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/dist/AbstractPollingController.js +8 -86
  3. package/dist/AbstractPollingController.js.map +1 -1
  4. package/dist/AbstractPollingController.mjs +9 -0
  5. package/dist/AbstractPollingController.mjs.map +1 -0
  6. package/dist/BlockTrackerPollingController.js +11 -59
  7. package/dist/BlockTrackerPollingController.js.map +1 -1
  8. package/dist/BlockTrackerPollingController.mjs +12 -0
  9. package/dist/BlockTrackerPollingController.mjs.map +1 -0
  10. package/dist/StaticIntervalPollingController.js +11 -79
  11. package/dist/StaticIntervalPollingController.js.map +1 -1
  12. package/dist/StaticIntervalPollingController.mjs +12 -0
  13. package/dist/StaticIntervalPollingController.mjs.map +1 -0
  14. package/dist/chunk-4HJ6GRV5.js +94 -0
  15. package/dist/chunk-4HJ6GRV5.js.map +1 -0
  16. package/dist/chunk-GKOBRMW7.mjs +94 -0
  17. package/dist/chunk-GKOBRMW7.mjs.map +1 -0
  18. package/dist/chunk-JEAX4QNH.js +67 -0
  19. package/dist/chunk-JEAX4QNH.js.map +1 -0
  20. package/dist/chunk-K5LVF4PY.mjs +67 -0
  21. package/dist/chunk-K5LVF4PY.mjs.map +1 -0
  22. package/dist/chunk-LNXPCWKH.js +67 -0
  23. package/dist/chunk-LNXPCWKH.js.map +1 -0
  24. package/dist/chunk-WHT6NCVX.mjs +67 -0
  25. package/dist/chunk-WHT6NCVX.mjs.map +1 -0
  26. package/dist/index.js +19 -11
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +20 -0
  29. package/dist/index.mjs.map +1 -0
  30. package/dist/tsconfig.build.tsbuildinfo +1 -0
  31. package/dist/{AbstractPollingController.d.ts → types/AbstractPollingController.d.ts} +2 -2
  32. package/dist/types/AbstractPollingController.d.ts.map +1 -0
  33. package/dist/{BlockTrackerPollingController.d.ts → types/BlockTrackerPollingController.d.ts} +9 -9
  34. package/dist/types/BlockTrackerPollingController.d.ts.map +1 -0
  35. package/dist/{StaticIntervalPollingController.d.ts → types/StaticIntervalPollingController.d.ts} +12 -12
  36. package/dist/types/StaticIntervalPollingController.d.ts.map +1 -0
  37. package/dist/types/index.d.ts.map +1 -0
  38. package/package.json +15 -5
  39. package/dist/AbstractPollingController.d.ts.map +0 -1
  40. package/dist/BlockTrackerPollingController.d.ts.map +0 -1
  41. package/dist/StaticIntervalPollingController.d.ts.map +0 -1
  42. package/dist/index.d.ts.map +0 -1
  43. /package/dist/{index.d.ts → types/index.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [6.0.0]
11
+
12
+ ### Added
13
+
14
+ - **BREAKING**: Add ESM build ([#3998](https://github.com/MetaMask/core/pull/3998))
15
+ - It's no longer possible to import files from `./dist` directly.
16
+
17
+ ### Changed
18
+
19
+ - **BREAKING:** Bump `@metamask/base-controller` to `^5.0.0` ([#4039](https://github.com/MetaMask/core/pull/4039))
20
+ - This version has a number of breaking changes. See the changelog for more.
21
+ - **BREAKING:** Bump dependency and peer dependency on `@metamask/network-controller` to `^18.0.0` ([#4039](https://github.com/MetaMask/core/pull/4039))
22
+ - Bump `@metamask/controller-utils` to `^9.0.0` ([#4039](https://github.com/MetaMask/core/pull/4039))
23
+
10
24
  ## [5.0.1]
11
25
 
12
26
  ### Changed
@@ -95,7 +109,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
95
109
 
96
110
  - Initial release
97
111
 
98
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/polling-controller@5.0.1...HEAD
112
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/polling-controller@6.0.0...HEAD
113
+ [6.0.0]: https://github.com/MetaMask/core/compare/@metamask/polling-controller@5.0.1...@metamask/polling-controller@6.0.0
99
114
  [5.0.1]: https://github.com/MetaMask/core/compare/@metamask/polling-controller@5.0.0...@metamask/polling-controller@5.0.1
100
115
  [5.0.0]: https://github.com/MetaMask/core/compare/@metamask/polling-controller@4.0.0...@metamask/polling-controller@5.0.0
101
116
  [4.0.0]: https://github.com/MetaMask/core/compare/@metamask/polling-controller@3.0.0...@metamask/polling-controller@4.0.0
@@ -1,87 +1,9 @@
1
- "use strict";
2
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
- 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");
5
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
- };
7
- var __importDefault = (this && this.__importDefault) || function (mod) {
8
- return (mod && mod.__esModule) ? mod : { "default": mod };
9
- };
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.AbstractPollingControllerBaseMixin = exports.getKey = void 0;
12
- const fast_json_stable_stringify_1 = __importDefault(require("fast-json-stable-stringify"));
13
- const uuid_1 = require("uuid");
14
- const getKey = (networkClientId, options) => `${networkClientId}:${(0, fast_json_stable_stringify_1.default)(options)}`;
15
- exports.getKey = getKey;
16
- /**
17
- * AbstractPollingControllerBaseMixin
18
- *
19
- * @param Base - The base class to mix onto.
20
- * @returns The composed class.
21
- */
22
- function AbstractPollingControllerBaseMixin(Base) {
23
- var _AbstractPollingControllerBase_pollingTokenSets, _AbstractPollingControllerBase_callbacks;
24
- class AbstractPollingControllerBase extends Base {
25
- constructor() {
26
- super(...arguments);
27
- _AbstractPollingControllerBase_pollingTokenSets.set(this, new Map());
28
- _AbstractPollingControllerBase_callbacks.set(this, new Map());
29
- }
30
- startPollingByNetworkClientId(networkClientId, options = {}) {
31
- var _a;
32
- const pollToken = (0, uuid_1.v4)();
33
- const key = (0, exports.getKey)(networkClientId, options);
34
- const pollingTokenSet = (_a = __classPrivateFieldGet(this, _AbstractPollingControllerBase_pollingTokenSets, "f").get(key)) !== null && _a !== void 0 ? _a : new Set();
35
- pollingTokenSet.add(pollToken);
36
- __classPrivateFieldGet(this, _AbstractPollingControllerBase_pollingTokenSets, "f").set(key, pollingTokenSet);
37
- if (pollingTokenSet.size === 1) {
38
- this._startPollingByNetworkClientId(networkClientId, options);
39
- }
40
- return pollToken;
41
- }
42
- stopAllPolling() {
43
- __classPrivateFieldGet(this, _AbstractPollingControllerBase_pollingTokenSets, "f").forEach((tokenSet, _key) => {
44
- tokenSet.forEach((token) => {
45
- this.stopPollingByPollingToken(token);
46
- });
47
- });
48
- }
49
- stopPollingByPollingToken(pollingToken) {
50
- if (!pollingToken) {
51
- throw new Error('pollingToken required');
52
- }
53
- let keyToDelete = null;
54
- for (const [key, tokenSet] of __classPrivateFieldGet(this, _AbstractPollingControllerBase_pollingTokenSets, "f")) {
55
- if (tokenSet.delete(pollingToken)) {
56
- if (tokenSet.size === 0) {
57
- keyToDelete = key;
58
- }
59
- break;
60
- }
61
- }
62
- if (keyToDelete) {
63
- this._stopPollingByPollingTokenSetId(keyToDelete);
64
- __classPrivateFieldGet(this, _AbstractPollingControllerBase_pollingTokenSets, "f").delete(keyToDelete);
65
- const callbacks = __classPrivateFieldGet(this, _AbstractPollingControllerBase_callbacks, "f").get(keyToDelete);
66
- if (callbacks) {
67
- for (const callback of callbacks) {
68
- // eslint-disable-next-line n/callback-return
69
- callback(keyToDelete);
70
- }
71
- callbacks.clear();
72
- }
73
- }
74
- }
75
- onPollingCompleteByNetworkClientId(networkClientId, callback, options = {}) {
76
- var _a;
77
- const key = (0, exports.getKey)(networkClientId, options);
78
- const callbacks = (_a = __classPrivateFieldGet(this, _AbstractPollingControllerBase_callbacks, "f").get(key)) !== null && _a !== void 0 ? _a : new Set();
79
- callbacks.add(callback);
80
- __classPrivateFieldGet(this, _AbstractPollingControllerBase_callbacks, "f").set(key, callbacks);
81
- }
82
- }
83
- _AbstractPollingControllerBase_pollingTokenSets = new WeakMap(), _AbstractPollingControllerBase_callbacks = new WeakMap();
84
- return AbstractPollingControllerBase;
85
- }
86
- exports.AbstractPollingControllerBaseMixin = AbstractPollingControllerBaseMixin;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+ var _chunk4HJ6GRV5js = require('./chunk-4HJ6GRV5.js');
5
+
6
+
7
+
8
+ exports.AbstractPollingControllerBaseMixin = _chunk4HJ6GRV5js.AbstractPollingControllerBaseMixin; exports.getKey = _chunk4HJ6GRV5js.getKey;
87
9
  //# sourceMappingURL=AbstractPollingController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractPollingController.js","sourceRoot":"","sources":["../src/AbstractPollingController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NetworkClientId } from '@metamask/network-controller';\nimport type { Json } from '@metamask/utils';\nimport stringify from 'fast-json-stable-stringify';\nimport { v4 as random } from 'uuid';\n\nexport type IPollingController = {\n startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json,\n ): string;\n\n stopAllPolling(): void;\n\n stopPollingByPollingToken(pollingToken: string): void;\n\n onPollingCompleteByNetworkClientId(\n networkClientId: NetworkClientId,\n callback: (networkClientId: NetworkClientId) => void,\n options: Json,\n ): void;\n\n _executePoll(networkClientId: NetworkClientId, options: Json): Promise<void>;\n _startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json,\n ): void;\n _stopPollingByPollingTokenSetId(key: PollingTokenSetId): void;\n};\n\nexport const getKey = (\n networkClientId: NetworkClientId,\n options: Json,\n): PollingTokenSetId => `${networkClientId}:${stringify(options)}`;\n\nexport type PollingTokenSetId = `${NetworkClientId}:${string}`;\n\n// TODO: Replace `any` with type\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor = new (...args: any[]) => object;\n\n/**\n * AbstractPollingControllerBaseMixin\n *\n * @param Base - The base class to mix onto.\n * @returns The composed class.\n */\nexport function AbstractPollingControllerBaseMixin<TBase extends Constructor>(\n Base: TBase,\n) {\n abstract class AbstractPollingControllerBase\n extends Base\n implements IPollingController\n {\n readonly #pollingTokenSets: Map<PollingTokenSetId, Set<string>> = new Map();\n\n #callbacks: Map<\n PollingTokenSetId,\n Set<(PollingTokenSetId: PollingTokenSetId) => void>\n > = new Map();\n\n abstract _executePoll(\n networkClientId: NetworkClientId,\n options: Json,\n ): Promise<void>;\n\n abstract _startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json,\n ): void;\n\n abstract _stopPollingByPollingTokenSetId(key: PollingTokenSetId): void;\n\n startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json = {},\n ): string {\n const pollToken = random();\n const key = getKey(networkClientId, options);\n const pollingTokenSet =\n this.#pollingTokenSets.get(key) ?? new Set<string>();\n pollingTokenSet.add(pollToken);\n this.#pollingTokenSets.set(key, pollingTokenSet);\n\n if (pollingTokenSet.size === 1) {\n this._startPollingByNetworkClientId(networkClientId, options);\n }\n\n return pollToken;\n }\n\n stopAllPolling() {\n this.#pollingTokenSets.forEach((tokenSet, _key) => {\n tokenSet.forEach((token) => {\n this.stopPollingByPollingToken(token);\n });\n });\n }\n\n stopPollingByPollingToken(pollingToken: string) {\n if (!pollingToken) {\n throw new Error('pollingToken required');\n }\n\n let keyToDelete: PollingTokenSetId | null = null;\n for (const [key, tokenSet] of this.#pollingTokenSets) {\n if (tokenSet.delete(pollingToken)) {\n if (tokenSet.size === 0) {\n keyToDelete = key;\n }\n break;\n }\n }\n\n if (keyToDelete) {\n this._stopPollingByPollingTokenSetId(keyToDelete);\n this.#pollingTokenSets.delete(keyToDelete);\n const callbacks = this.#callbacks.get(keyToDelete);\n if (callbacks) {\n for (const callback of callbacks) {\n // eslint-disable-next-line n/callback-return\n callback(keyToDelete);\n }\n callbacks.clear();\n }\n }\n }\n\n onPollingCompleteByNetworkClientId(\n networkClientId: NetworkClientId,\n callback: (networkClientId: NetworkClientId) => void,\n options: Json = {},\n ) {\n const key = getKey(networkClientId, options);\n const callbacks = this.#callbacks.get(key) ?? new Set<typeof callback>();\n callbacks.add(callback);\n this.#callbacks.set(key, callbacks);\n }\n }\n return AbstractPollingControllerBase;\n}\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import {
2
+ AbstractPollingControllerBaseMixin,
3
+ getKey
4
+ } from "./chunk-GKOBRMW7.mjs";
5
+ export {
6
+ AbstractPollingControllerBaseMixin,
7
+ getKey
8
+ };
9
+ //# sourceMappingURL=AbstractPollingController.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,60 +1,12 @@
1
- "use strict";
2
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
- 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");
5
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
- };
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.BlockTrackerPollingControllerV1 = exports.BlockTrackerPollingController = exports.BlockTrackerPollingControllerOnly = void 0;
9
- const base_controller_1 = require("@metamask/base-controller");
10
- const AbstractPollingController_1 = require("./AbstractPollingController");
11
- /**
12
- * BlockTrackerPollingControllerMixin
13
- * A polling controller that polls using a block tracker.
14
- *
15
- * @param Base - The base class to mix onto.
16
- * @returns The composed class.
17
- */
18
- function BlockTrackerPollingControllerMixin(Base) {
19
- var _BlockTrackerPollingController_activeListeners;
20
- class BlockTrackerPollingController extends (0, AbstractPollingController_1.AbstractPollingControllerBaseMixin)(Base) {
21
- constructor() {
22
- super(...arguments);
23
- _BlockTrackerPollingController_activeListeners.set(this, {});
24
- }
25
- _startPollingByNetworkClientId(networkClientId, options) {
26
- const key = (0, AbstractPollingController_1.getKey)(networkClientId, options);
27
- if (__classPrivateFieldGet(this, _BlockTrackerPollingController_activeListeners, "f")[key]) {
28
- return;
29
- }
30
- const networkClient = this._getNetworkClientById(networkClientId);
31
- if (networkClient) {
32
- const updateOnNewBlock = this._executePoll.bind(this, networkClientId, options);
33
- networkClient.blockTracker.addListener('latest', updateOnNewBlock);
34
- __classPrivateFieldGet(this, _BlockTrackerPollingController_activeListeners, "f")[key] = updateOnNewBlock;
35
- }
36
- else {
37
- throw new Error(`Unable to retrieve blockTracker for networkClientId ${networkClientId}`);
38
- }
39
- }
40
- _stopPollingByPollingTokenSetId(key) {
41
- const [networkClientId] = key.split(':');
42
- const networkClient = this._getNetworkClientById(networkClientId);
43
- if (networkClient && __classPrivateFieldGet(this, _BlockTrackerPollingController_activeListeners, "f")[key]) {
44
- const listener = __classPrivateFieldGet(this, _BlockTrackerPollingController_activeListeners, "f")[key];
45
- if (listener) {
46
- networkClient.blockTracker.removeListener('latest', listener);
47
- delete __classPrivateFieldGet(this, _BlockTrackerPollingController_activeListeners, "f")[key];
48
- }
49
- }
50
- }
51
- }
52
- _BlockTrackerPollingController_activeListeners = new WeakMap();
53
- return BlockTrackerPollingController;
54
- }
55
- class Empty {
56
- }
57
- exports.BlockTrackerPollingControllerOnly = BlockTrackerPollingControllerMixin(Empty);
58
- exports.BlockTrackerPollingController = BlockTrackerPollingControllerMixin(base_controller_1.BaseController);
59
- exports.BlockTrackerPollingControllerV1 = BlockTrackerPollingControllerMixin(base_controller_1.BaseControllerV1);
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+ var _chunkJEAX4QNHjs = require('./chunk-JEAX4QNH.js');
6
+ require('./chunk-4HJ6GRV5.js');
7
+
8
+
9
+
10
+
11
+ exports.BlockTrackerPollingController = _chunkJEAX4QNHjs.BlockTrackerPollingController; exports.BlockTrackerPollingControllerOnly = _chunkJEAX4QNHjs.BlockTrackerPollingControllerOnly; exports.BlockTrackerPollingControllerV1 = _chunkJEAX4QNHjs.BlockTrackerPollingControllerV1;
60
12
  //# sourceMappingURL=BlockTrackerPollingController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlockTrackerPollingController.js","sourceRoot":"","sources":["../src/BlockTrackerPollingController.ts"],"names":[],"mappings":";;;;;;;;AAAA,+DAA6E;AAO7E,2EAGqC;AAOrC;;;;;;GAMG;AACH,SAAS,kCAAkC,CACzC,IAAW;;IAEX,MAAe,6BAA8B,SAAQ,IAAA,8DAAkC,EACrF,IAAI,CACL;QAFD;;YAGE,yDAAqE,EAAE,EAAC;QA8C1E,CAAC;QAxCC,8BAA8B,CAC5B,eAAgC,EAChC,OAAa;YAEb,MAAM,GAAG,GAAG,IAAA,kCAAM,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAE7C,IAAI,uBAAA,IAAI,sDAAiB,CAAC,GAAG,CAAC,EAAE;gBAC9B,OAAO;aACR;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;YAClE,IAAI,aAAa,EAAE;gBACjB,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAC7C,IAAI,EACJ,eAAe,EACf,OAAO,CACR,CAAC;gBACF,aAAa,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;gBACnE,uBAAA,IAAI,sDAAiB,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC;aAC/C;iBAAM;gBACL,MAAM,IAAI,KAAK,CACb,uDAAuD,eAAe,EAAE,CACzE,CAAC;aACH;QACH,CAAC;QAED,+BAA+B,CAAC,GAAsB;YACpD,MAAM,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAC9C,eAAkC,CACnC,CAAC;YAEF,IAAI,aAAa,IAAI,uBAAA,IAAI,sDAAiB,CAAC,GAAG,CAAC,EAAE;gBAC/C,MAAM,QAAQ,GAAG,uBAAA,IAAI,sDAAiB,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,QAAQ,EAAE;oBACZ,aAAa,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAC9D,OAAO,uBAAA,IAAI,sDAAiB,CAAC,GAAG,CAAC,CAAC;iBACnC;aACF;QACH,CAAC;KACF;;IAED,OAAO,6BAA6B,CAAC;AACvC,CAAC;AAED,MAAM,KAAK;CAAG;AAED,QAAA,iCAAiC,GAC5C,kCAAkC,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,6BAA6B,GACxC,kCAAkC,CAAC,gCAAc,CAAC,CAAC;AACxC,QAAA,+BAA+B,GAC1C,kCAAkC,CAAC,kCAAgB,CAAC,CAAC","sourcesContent":["import { BaseController, BaseControllerV1 } from '@metamask/base-controller';\nimport type {\n NetworkClientId,\n NetworkClient,\n} from '@metamask/network-controller';\nimport type { Json } from '@metamask/utils';\n\nimport {\n AbstractPollingControllerBaseMixin,\n getKey,\n} from './AbstractPollingController';\nimport type { PollingTokenSetId } from './AbstractPollingController';\n\n// TODO: Replace `any` with type\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor = new (...args: any[]) => object;\n\n/**\n * BlockTrackerPollingControllerMixin\n * A polling controller that polls using a block tracker.\n *\n * @param Base - The base class to mix onto.\n * @returns The composed class.\n */\nfunction BlockTrackerPollingControllerMixin<TBase extends Constructor>(\n Base: TBase,\n) {\n abstract class BlockTrackerPollingController extends AbstractPollingControllerBaseMixin(\n Base,\n ) {\n #activeListeners: Record<string, (options: Json) => Promise<void>> = {};\n\n abstract _getNetworkClientById(\n networkClientId: NetworkClientId,\n ): NetworkClient | undefined;\n\n _startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json,\n ) {\n const key = getKey(networkClientId, options);\n\n if (this.#activeListeners[key]) {\n return;\n }\n\n const networkClient = this._getNetworkClientById(networkClientId);\n if (networkClient) {\n const updateOnNewBlock = this._executePoll.bind(\n this,\n networkClientId,\n options,\n );\n networkClient.blockTracker.addListener('latest', updateOnNewBlock);\n this.#activeListeners[key] = updateOnNewBlock;\n } else {\n throw new Error(\n `Unable to retrieve blockTracker for networkClientId ${networkClientId}`,\n );\n }\n }\n\n _stopPollingByPollingTokenSetId(key: PollingTokenSetId) {\n const [networkClientId] = key.split(':');\n const networkClient = this._getNetworkClientById(\n networkClientId as NetworkClientId,\n );\n\n if (networkClient && this.#activeListeners[key]) {\n const listener = this.#activeListeners[key];\n if (listener) {\n networkClient.blockTracker.removeListener('latest', listener);\n delete this.#activeListeners[key];\n }\n }\n }\n }\n\n return BlockTrackerPollingController;\n}\n\nclass Empty {}\n\nexport const BlockTrackerPollingControllerOnly =\n BlockTrackerPollingControllerMixin(Empty);\nexport const BlockTrackerPollingController =\n BlockTrackerPollingControllerMixin(BaseController);\nexport const BlockTrackerPollingControllerV1 =\n BlockTrackerPollingControllerMixin(BaseControllerV1);\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import {
2
+ BlockTrackerPollingController,
3
+ BlockTrackerPollingControllerOnly,
4
+ BlockTrackerPollingControllerV1
5
+ } from "./chunk-WHT6NCVX.mjs";
6
+ import "./chunk-GKOBRMW7.mjs";
7
+ export {
8
+ BlockTrackerPollingController,
9
+ BlockTrackerPollingControllerOnly,
10
+ BlockTrackerPollingControllerV1
11
+ };
12
+ //# sourceMappingURL=BlockTrackerPollingController.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,80 +1,12 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
12
- if (kind === "m") throw new TypeError("Private method is not writable");
13
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
14
- 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");
15
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
- };
17
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
18
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
19
- 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");
20
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
21
- };
22
- Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.StaticIntervalPollingControllerV1 = exports.StaticIntervalPollingController = exports.StaticIntervalPollingControllerOnly = void 0;
24
- const base_controller_1 = require("@metamask/base-controller");
25
- const AbstractPollingController_1 = require("./AbstractPollingController");
26
- /**
27
- * StaticIntervalPollingControllerMixin
28
- * A polling controller that polls on a static interval.
29
- *
30
- * @param Base - The base class to mix onto.
31
- * @returns The composed class.
32
- */
33
- function StaticIntervalPollingControllerMixin(Base) {
34
- var _StaticIntervalPollingController_intervalIds, _StaticIntervalPollingController_intervalLength;
35
- class StaticIntervalPollingController extends (0, AbstractPollingController_1.AbstractPollingControllerBaseMixin)(Base) {
36
- constructor() {
37
- super(...arguments);
38
- _StaticIntervalPollingController_intervalIds.set(this, {});
39
- _StaticIntervalPollingController_intervalLength.set(this, 1000);
40
- }
41
- setIntervalLength(intervalLength) {
42
- __classPrivateFieldSet(this, _StaticIntervalPollingController_intervalLength, intervalLength, "f");
43
- }
44
- getIntervalLength() {
45
- return __classPrivateFieldGet(this, _StaticIntervalPollingController_intervalLength, "f");
46
- }
47
- _startPollingByNetworkClientId(networkClientId, options) {
48
- if (!__classPrivateFieldGet(this, _StaticIntervalPollingController_intervalLength, "f")) {
49
- throw new Error('intervalLength must be defined and greater than 0');
50
- }
51
- const key = (0, AbstractPollingController_1.getKey)(networkClientId, options);
52
- const existingInterval = __classPrivateFieldGet(this, _StaticIntervalPollingController_intervalIds, "f")[key];
53
- this._stopPollingByPollingTokenSetId(key);
54
- __classPrivateFieldGet(this, _StaticIntervalPollingController_intervalIds, "f")[key] = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
55
- try {
56
- yield this._executePoll(networkClientId, options);
57
- }
58
- catch (error) {
59
- console.error(error);
60
- }
61
- this._startPollingByNetworkClientId(networkClientId, options);
62
- }), existingInterval ? __classPrivateFieldGet(this, _StaticIntervalPollingController_intervalLength, "f") : 0);
63
- }
64
- _stopPollingByPollingTokenSetId(key) {
65
- const intervalId = __classPrivateFieldGet(this, _StaticIntervalPollingController_intervalIds, "f")[key];
66
- if (intervalId) {
67
- clearTimeout(intervalId);
68
- delete __classPrivateFieldGet(this, _StaticIntervalPollingController_intervalIds, "f")[key];
69
- }
70
- }
71
- }
72
- _StaticIntervalPollingController_intervalIds = new WeakMap(), _StaticIntervalPollingController_intervalLength = new WeakMap();
73
- return StaticIntervalPollingController;
74
- }
75
- class Empty {
76
- }
77
- exports.StaticIntervalPollingControllerOnly = StaticIntervalPollingControllerMixin(Empty);
78
- exports.StaticIntervalPollingController = StaticIntervalPollingControllerMixin(base_controller_1.BaseController);
79
- exports.StaticIntervalPollingControllerV1 = StaticIntervalPollingControllerMixin(base_controller_1.BaseControllerV1);
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+ var _chunkLNXPCWKHjs = require('./chunk-LNXPCWKH.js');
6
+ require('./chunk-4HJ6GRV5.js');
7
+
8
+
9
+
10
+
11
+ exports.StaticIntervalPollingController = _chunkLNXPCWKHjs.StaticIntervalPollingController; exports.StaticIntervalPollingControllerOnly = _chunkLNXPCWKHjs.StaticIntervalPollingControllerOnly; exports.StaticIntervalPollingControllerV1 = _chunkLNXPCWKHjs.StaticIntervalPollingControllerV1;
80
12
  //# sourceMappingURL=StaticIntervalPollingController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StaticIntervalPollingController.js","sourceRoot":"","sources":["../src/StaticIntervalPollingController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAA6E;AAI7E,2EAGqC;AAUrC;;;;;;GAMG;AACH,SAAS,oCAAoC,CAC3C,IAAW;;IAEX,MAAe,+BACb,SAAQ,IAAA,8DAAkC,EAAC,IAAI,CAAC;QADlD;;YAIE,uDAAmE,EAAE,EAAC;YAEtE,0DAAsC,IAAI,EAAC;QA0C7C,CAAC;QAxCC,iBAAiB,CAAC,cAAsB;YACtC,uBAAA,IAAI,mDAAmB,cAAc,MAAA,CAAC;QACxC,CAAC;QAED,iBAAiB;YACf,OAAO,uBAAA,IAAI,uDAAgB,CAAC;QAC9B,CAAC;QAED,8BAA8B,CAC5B,eAAgC,EAChC,OAAa;YAEb,IAAI,CAAC,uBAAA,IAAI,uDAAgB,EAAE;gBACzB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;aACtE;YAED,MAAM,GAAG,GAAG,IAAA,kCAAM,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,gBAAgB,GAAG,uBAAA,IAAI,oDAAa,CAAC,GAAG,CAAC,CAAC;YAChD,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,CAAC;YAE1C,uBAAA,IAAI,oDAAa,CAAC,GAAG,CAAC,GAAG,UAAU,CACjC,GAAS,EAAE;gBACT,IAAI;oBACF,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;iBACnD;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBACtB;gBACD,IAAI,CAAC,8BAA8B,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC,CAAA,EACD,gBAAgB,CAAC,CAAC,CAAC,uBAAA,IAAI,uDAAgB,CAAC,CAAC,CAAC,CAAC,CAC5C,CAAC;QACJ,CAAC;QAED,+BAA+B,CAAC,GAAsB;YACpD,MAAM,UAAU,GAAG,uBAAA,IAAI,oDAAa,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,UAAU,EAAE;gBACd,YAAY,CAAC,UAAU,CAAC,CAAC;gBACzB,OAAO,uBAAA,IAAI,oDAAa,CAAC,GAAG,CAAC,CAAC;aAC/B;QACH,CAAC;KACF;;IAED,OAAO,+BAA+B,CAAC;AACzC,CAAC;AAED,MAAM,KAAK;CAAG;AAED,QAAA,mCAAmC,GAC9C,oCAAoC,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,+BAA+B,GAC1C,oCAAoC,CAAC,gCAAc,CAAC,CAAC;AAC1C,QAAA,iCAAiC,GAC5C,oCAAoC,CAAC,kCAAgB,CAAC,CAAC","sourcesContent":["import { BaseController, BaseControllerV1 } from '@metamask/base-controller';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Json } from '@metamask/utils';\n\nimport {\n AbstractPollingControllerBaseMixin,\n getKey,\n} from './AbstractPollingController';\nimport type {\n IPollingController,\n PollingTokenSetId,\n} from './AbstractPollingController';\n\n// TODO: Replace `any` with type\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor = new (...args: any[]) => object;\n\n/**\n * StaticIntervalPollingControllerMixin\n * A polling controller that polls on a static interval.\n *\n * @param Base - The base class to mix onto.\n * @returns The composed class.\n */\nfunction StaticIntervalPollingControllerMixin<TBase extends Constructor>(\n Base: TBase,\n) {\n abstract class StaticIntervalPollingController\n extends AbstractPollingControllerBaseMixin(Base)\n implements IPollingController\n {\n readonly #intervalIds: Record<PollingTokenSetId, NodeJS.Timeout> = {};\n\n #intervalLength: number | undefined = 1000;\n\n setIntervalLength(intervalLength: number) {\n this.#intervalLength = intervalLength;\n }\n\n getIntervalLength() {\n return this.#intervalLength;\n }\n\n _startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json,\n ) {\n if (!this.#intervalLength) {\n throw new Error('intervalLength must be defined and greater than 0');\n }\n\n const key = getKey(networkClientId, options);\n const existingInterval = this.#intervalIds[key];\n this._stopPollingByPollingTokenSetId(key);\n\n this.#intervalIds[key] = setTimeout(\n async () => {\n try {\n await this._executePoll(networkClientId, options);\n } catch (error) {\n console.error(error);\n }\n this._startPollingByNetworkClientId(networkClientId, options);\n },\n existingInterval ? this.#intervalLength : 0,\n );\n }\n\n _stopPollingByPollingTokenSetId(key: PollingTokenSetId) {\n const intervalId = this.#intervalIds[key];\n if (intervalId) {\n clearTimeout(intervalId);\n delete this.#intervalIds[key];\n }\n }\n }\n\n return StaticIntervalPollingController;\n}\n\nclass Empty {}\n\nexport const StaticIntervalPollingControllerOnly =\n StaticIntervalPollingControllerMixin(Empty);\nexport const StaticIntervalPollingController =\n StaticIntervalPollingControllerMixin(BaseController);\nexport const StaticIntervalPollingControllerV1 =\n StaticIntervalPollingControllerMixin(BaseControllerV1);\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import {
2
+ StaticIntervalPollingController,
3
+ StaticIntervalPollingControllerOnly,
4
+ StaticIntervalPollingControllerV1
5
+ } from "./chunk-K5LVF4PY.mjs";
6
+ import "./chunk-GKOBRMW7.mjs";
7
+ export {
8
+ StaticIntervalPollingController,
9
+ StaticIntervalPollingControllerOnly,
10
+ StaticIntervalPollingControllerV1
11
+ };
12
+ //# sourceMappingURL=StaticIntervalPollingController.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,94 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var __accessCheck = (obj, member, msg) => {
2
+ if (!member.has(obj))
3
+ throw TypeError("Cannot " + msg);
4
+ };
5
+ var __privateGet = (obj, member, getter) => {
6
+ __accessCheck(obj, member, "read from private field");
7
+ return getter ? getter.call(obj) : member.get(obj);
8
+ };
9
+ var __privateAdd = (obj, member, value) => {
10
+ if (member.has(obj))
11
+ throw TypeError("Cannot add the same private member more than once");
12
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
13
+ };
14
+ var __privateSet = (obj, member, value, setter) => {
15
+ __accessCheck(obj, member, "write to private field");
16
+ setter ? setter.call(obj, value) : member.set(obj, value);
17
+ return value;
18
+ };
19
+
20
+ // src/AbstractPollingController.ts
21
+ var _fastjsonstablestringify = require('fast-json-stable-stringify'); var _fastjsonstablestringify2 = _interopRequireDefault(_fastjsonstablestringify);
22
+ var _uuid = require('uuid');
23
+ var getKey = (networkClientId, options) => `${networkClientId}:${_fastjsonstablestringify2.default.call(void 0, options)}`;
24
+ function AbstractPollingControllerBaseMixin(Base) {
25
+ var _pollingTokenSets, _callbacks;
26
+ class AbstractPollingControllerBase extends Base {
27
+ constructor() {
28
+ super(...arguments);
29
+ __privateAdd(this, _pollingTokenSets, /* @__PURE__ */ new Map());
30
+ __privateAdd(this, _callbacks, /* @__PURE__ */ new Map());
31
+ }
32
+ startPollingByNetworkClientId(networkClientId, options = {}) {
33
+ const pollToken = _uuid.v4.call(void 0, );
34
+ const key = getKey(networkClientId, options);
35
+ const pollingTokenSet = __privateGet(this, _pollingTokenSets).get(key) ?? /* @__PURE__ */ new Set();
36
+ pollingTokenSet.add(pollToken);
37
+ __privateGet(this, _pollingTokenSets).set(key, pollingTokenSet);
38
+ if (pollingTokenSet.size === 1) {
39
+ this._startPollingByNetworkClientId(networkClientId, options);
40
+ }
41
+ return pollToken;
42
+ }
43
+ stopAllPolling() {
44
+ __privateGet(this, _pollingTokenSets).forEach((tokenSet, _key) => {
45
+ tokenSet.forEach((token) => {
46
+ this.stopPollingByPollingToken(token);
47
+ });
48
+ });
49
+ }
50
+ stopPollingByPollingToken(pollingToken) {
51
+ if (!pollingToken) {
52
+ throw new Error("pollingToken required");
53
+ }
54
+ let keyToDelete = null;
55
+ for (const [key, tokenSet] of __privateGet(this, _pollingTokenSets)) {
56
+ if (tokenSet.delete(pollingToken)) {
57
+ if (tokenSet.size === 0) {
58
+ keyToDelete = key;
59
+ }
60
+ break;
61
+ }
62
+ }
63
+ if (keyToDelete) {
64
+ this._stopPollingByPollingTokenSetId(keyToDelete);
65
+ __privateGet(this, _pollingTokenSets).delete(keyToDelete);
66
+ const callbacks = __privateGet(this, _callbacks).get(keyToDelete);
67
+ if (callbacks) {
68
+ for (const callback of callbacks) {
69
+ callback(keyToDelete);
70
+ }
71
+ callbacks.clear();
72
+ }
73
+ }
74
+ }
75
+ onPollingCompleteByNetworkClientId(networkClientId, callback, options = {}) {
76
+ const key = getKey(networkClientId, options);
77
+ const callbacks = __privateGet(this, _callbacks).get(key) ?? /* @__PURE__ */ new Set();
78
+ callbacks.add(callback);
79
+ __privateGet(this, _callbacks).set(key, callbacks);
80
+ }
81
+ }
82
+ _pollingTokenSets = new WeakMap();
83
+ _callbacks = new WeakMap();
84
+ return AbstractPollingControllerBase;
85
+ }
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+ exports.__privateGet = __privateGet; exports.__privateAdd = __privateAdd; exports.__privateSet = __privateSet; exports.getKey = getKey; exports.AbstractPollingControllerBaseMixin = AbstractPollingControllerBaseMixin;
94
+ //# sourceMappingURL=chunk-4HJ6GRV5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/AbstractPollingController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAEA,OAAO,eAAe;AACtB,SAAS,MAAM,cAAc;AA0BtB,IAAM,SAAS,CACpB,iBACA,YACsB,GAAG,eAAe,IAAI,UAAU,OAAO,CAAC;AAczD,SAAS,mCACd,MACA;AAhDF;AAAA,EAiDE,MAAe,sCACL,KAEV;AAAA,IAHA;AAAA;AAIE,yBAAS,mBAAyD,oBAAI,IAAI;AAE1E,qCAGI,oBAAI,IAAI;AAAA;AAAA,IAcZ,8BACE,iBACA,UAAgB,CAAC,GACT;AACR,YAAM,YAAY,OAAO;AACzB,YAAM,MAAM,OAAO,iBAAiB,OAAO;AAC3C,YAAM,kBACJ,mBAAK,mBAAkB,IAAI,GAAG,KAAK,oBAAI,IAAY;AACrD,sBAAgB,IAAI,SAAS;AAC7B,yBAAK,mBAAkB,IAAI,KAAK,eAAe;AAE/C,UAAI,gBAAgB,SAAS,GAAG;AAC9B,aAAK,+BAA+B,iBAAiB,OAAO;AAAA,MAC9D;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,iBAAiB;AACf,yBAAK,mBAAkB,QAAQ,CAAC,UAAU,SAAS;AACjD,iBAAS,QAAQ,CAAC,UAAU;AAC1B,eAAK,0BAA0B,KAAK;AAAA,QACtC,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IAEA,0BAA0B,cAAsB;AAC9C,UAAI,CAAC,cAAc;AACjB,cAAM,IAAI,MAAM,uBAAuB;AAAA,MACzC;AAEA,UAAI,cAAwC;AAC5C,iBAAW,CAAC,KAAK,QAAQ,KAAK,mBAAK,oBAAmB;AACpD,YAAI,SAAS,OAAO,YAAY,GAAG;AACjC,cAAI,SAAS,SAAS,GAAG;AACvB,0BAAc;AAAA,UAChB;AACA;AAAA,QACF;AAAA,MACF;AAEA,UAAI,aAAa;AACf,aAAK,gCAAgC,WAAW;AAChD,2BAAK,mBAAkB,OAAO,WAAW;AACzC,cAAM,YAAY,mBAAK,YAAW,IAAI,WAAW;AACjD,YAAI,WAAW;AACb,qBAAW,YAAY,WAAW;AAEhC,qBAAS,WAAW;AAAA,UACtB;AACA,oBAAU,MAAM;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,IAEA,mCACE,iBACA,UACA,UAAgB,CAAC,GACjB;AACA,YAAM,MAAM,OAAO,iBAAiB,OAAO;AAC3C,YAAM,YAAY,mBAAK,YAAW,IAAI,GAAG,KAAK,oBAAI,IAAqB;AACvE,gBAAU,IAAI,QAAQ;AACtB,yBAAK,YAAW,IAAI,KAAK,SAAS;AAAA,IACpC;AAAA,EACF;AApFW;AAET;AAmFF,SAAO;AACT","sourcesContent":["import type { NetworkClientId } from '@metamask/network-controller';\nimport type { Json } from '@metamask/utils';\nimport stringify from 'fast-json-stable-stringify';\nimport { v4 as random } from 'uuid';\n\nexport type IPollingController = {\n startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json,\n ): string;\n\n stopAllPolling(): void;\n\n stopPollingByPollingToken(pollingToken: string): void;\n\n onPollingCompleteByNetworkClientId(\n networkClientId: NetworkClientId,\n callback: (networkClientId: NetworkClientId) => void,\n options: Json,\n ): void;\n\n _executePoll(networkClientId: NetworkClientId, options: Json): Promise<void>;\n _startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json,\n ): void;\n _stopPollingByPollingTokenSetId(key: PollingTokenSetId): void;\n};\n\nexport const getKey = (\n networkClientId: NetworkClientId,\n options: Json,\n): PollingTokenSetId => `${networkClientId}:${stringify(options)}`;\n\nexport type PollingTokenSetId = `${NetworkClientId}:${string}`;\n\n// TODO: Replace `any` with type\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor = new (...args: any[]) => object;\n\n/**\n * AbstractPollingControllerBaseMixin\n *\n * @param Base - The base class to mix onto.\n * @returns The composed class.\n */\nexport function AbstractPollingControllerBaseMixin<TBase extends Constructor>(\n Base: TBase,\n) {\n abstract class AbstractPollingControllerBase\n extends Base\n implements IPollingController\n {\n readonly #pollingTokenSets: Map<PollingTokenSetId, Set<string>> = new Map();\n\n #callbacks: Map<\n PollingTokenSetId,\n Set<(PollingTokenSetId: PollingTokenSetId) => void>\n > = new Map();\n\n abstract _executePoll(\n networkClientId: NetworkClientId,\n options: Json,\n ): Promise<void>;\n\n abstract _startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json,\n ): void;\n\n abstract _stopPollingByPollingTokenSetId(key: PollingTokenSetId): void;\n\n startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json = {},\n ): string {\n const pollToken = random();\n const key = getKey(networkClientId, options);\n const pollingTokenSet =\n this.#pollingTokenSets.get(key) ?? new Set<string>();\n pollingTokenSet.add(pollToken);\n this.#pollingTokenSets.set(key, pollingTokenSet);\n\n if (pollingTokenSet.size === 1) {\n this._startPollingByNetworkClientId(networkClientId, options);\n }\n\n return pollToken;\n }\n\n stopAllPolling() {\n this.#pollingTokenSets.forEach((tokenSet, _key) => {\n tokenSet.forEach((token) => {\n this.stopPollingByPollingToken(token);\n });\n });\n }\n\n stopPollingByPollingToken(pollingToken: string) {\n if (!pollingToken) {\n throw new Error('pollingToken required');\n }\n\n let keyToDelete: PollingTokenSetId | null = null;\n for (const [key, tokenSet] of this.#pollingTokenSets) {\n if (tokenSet.delete(pollingToken)) {\n if (tokenSet.size === 0) {\n keyToDelete = key;\n }\n break;\n }\n }\n\n if (keyToDelete) {\n this._stopPollingByPollingTokenSetId(keyToDelete);\n this.#pollingTokenSets.delete(keyToDelete);\n const callbacks = this.#callbacks.get(keyToDelete);\n if (callbacks) {\n for (const callback of callbacks) {\n // eslint-disable-next-line n/callback-return\n callback(keyToDelete);\n }\n callbacks.clear();\n }\n }\n }\n\n onPollingCompleteByNetworkClientId(\n networkClientId: NetworkClientId,\n callback: (networkClientId: NetworkClientId) => void,\n options: Json = {},\n ) {\n const key = getKey(networkClientId, options);\n const callbacks = this.#callbacks.get(key) ?? new Set<typeof callback>();\n callbacks.add(callback);\n this.#callbacks.set(key, callbacks);\n }\n }\n return AbstractPollingControllerBase;\n}\n"]}
@@ -0,0 +1,94 @@
1
+ var __accessCheck = (obj, member, msg) => {
2
+ if (!member.has(obj))
3
+ throw TypeError("Cannot " + msg);
4
+ };
5
+ var __privateGet = (obj, member, getter) => {
6
+ __accessCheck(obj, member, "read from private field");
7
+ return getter ? getter.call(obj) : member.get(obj);
8
+ };
9
+ var __privateAdd = (obj, member, value) => {
10
+ if (member.has(obj))
11
+ throw TypeError("Cannot add the same private member more than once");
12
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
13
+ };
14
+ var __privateSet = (obj, member, value, setter) => {
15
+ __accessCheck(obj, member, "write to private field");
16
+ setter ? setter.call(obj, value) : member.set(obj, value);
17
+ return value;
18
+ };
19
+
20
+ // src/AbstractPollingController.ts
21
+ import stringify from "fast-json-stable-stringify";
22
+ import { v4 as random } from "uuid";
23
+ var getKey = (networkClientId, options) => `${networkClientId}:${stringify(options)}`;
24
+ function AbstractPollingControllerBaseMixin(Base) {
25
+ var _pollingTokenSets, _callbacks;
26
+ class AbstractPollingControllerBase extends Base {
27
+ constructor() {
28
+ super(...arguments);
29
+ __privateAdd(this, _pollingTokenSets, /* @__PURE__ */ new Map());
30
+ __privateAdd(this, _callbacks, /* @__PURE__ */ new Map());
31
+ }
32
+ startPollingByNetworkClientId(networkClientId, options = {}) {
33
+ const pollToken = random();
34
+ const key = getKey(networkClientId, options);
35
+ const pollingTokenSet = __privateGet(this, _pollingTokenSets).get(key) ?? /* @__PURE__ */ new Set();
36
+ pollingTokenSet.add(pollToken);
37
+ __privateGet(this, _pollingTokenSets).set(key, pollingTokenSet);
38
+ if (pollingTokenSet.size === 1) {
39
+ this._startPollingByNetworkClientId(networkClientId, options);
40
+ }
41
+ return pollToken;
42
+ }
43
+ stopAllPolling() {
44
+ __privateGet(this, _pollingTokenSets).forEach((tokenSet, _key) => {
45
+ tokenSet.forEach((token) => {
46
+ this.stopPollingByPollingToken(token);
47
+ });
48
+ });
49
+ }
50
+ stopPollingByPollingToken(pollingToken) {
51
+ if (!pollingToken) {
52
+ throw new Error("pollingToken required");
53
+ }
54
+ let keyToDelete = null;
55
+ for (const [key, tokenSet] of __privateGet(this, _pollingTokenSets)) {
56
+ if (tokenSet.delete(pollingToken)) {
57
+ if (tokenSet.size === 0) {
58
+ keyToDelete = key;
59
+ }
60
+ break;
61
+ }
62
+ }
63
+ if (keyToDelete) {
64
+ this._stopPollingByPollingTokenSetId(keyToDelete);
65
+ __privateGet(this, _pollingTokenSets).delete(keyToDelete);
66
+ const callbacks = __privateGet(this, _callbacks).get(keyToDelete);
67
+ if (callbacks) {
68
+ for (const callback of callbacks) {
69
+ callback(keyToDelete);
70
+ }
71
+ callbacks.clear();
72
+ }
73
+ }
74
+ }
75
+ onPollingCompleteByNetworkClientId(networkClientId, callback, options = {}) {
76
+ const key = getKey(networkClientId, options);
77
+ const callbacks = __privateGet(this, _callbacks).get(key) ?? /* @__PURE__ */ new Set();
78
+ callbacks.add(callback);
79
+ __privateGet(this, _callbacks).set(key, callbacks);
80
+ }
81
+ }
82
+ _pollingTokenSets = new WeakMap();
83
+ _callbacks = new WeakMap();
84
+ return AbstractPollingControllerBase;
85
+ }
86
+
87
+ export {
88
+ __privateGet,
89
+ __privateAdd,
90
+ __privateSet,
91
+ getKey,
92
+ AbstractPollingControllerBaseMixin
93
+ };
94
+ //# sourceMappingURL=chunk-GKOBRMW7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/AbstractPollingController.ts"],"sourcesContent":["import type { NetworkClientId } from '@metamask/network-controller';\nimport type { Json } from '@metamask/utils';\nimport stringify from 'fast-json-stable-stringify';\nimport { v4 as random } from 'uuid';\n\nexport type IPollingController = {\n startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json,\n ): string;\n\n stopAllPolling(): void;\n\n stopPollingByPollingToken(pollingToken: string): void;\n\n onPollingCompleteByNetworkClientId(\n networkClientId: NetworkClientId,\n callback: (networkClientId: NetworkClientId) => void,\n options: Json,\n ): void;\n\n _executePoll(networkClientId: NetworkClientId, options: Json): Promise<void>;\n _startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json,\n ): void;\n _stopPollingByPollingTokenSetId(key: PollingTokenSetId): void;\n};\n\nexport const getKey = (\n networkClientId: NetworkClientId,\n options: Json,\n): PollingTokenSetId => `${networkClientId}:${stringify(options)}`;\n\nexport type PollingTokenSetId = `${NetworkClientId}:${string}`;\n\n// TODO: Replace `any` with type\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor = new (...args: any[]) => object;\n\n/**\n * AbstractPollingControllerBaseMixin\n *\n * @param Base - The base class to mix onto.\n * @returns The composed class.\n */\nexport function AbstractPollingControllerBaseMixin<TBase extends Constructor>(\n Base: TBase,\n) {\n abstract class AbstractPollingControllerBase\n extends Base\n implements IPollingController\n {\n readonly #pollingTokenSets: Map<PollingTokenSetId, Set<string>> = new Map();\n\n #callbacks: Map<\n PollingTokenSetId,\n Set<(PollingTokenSetId: PollingTokenSetId) => void>\n > = new Map();\n\n abstract _executePoll(\n networkClientId: NetworkClientId,\n options: Json,\n ): Promise<void>;\n\n abstract _startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json,\n ): void;\n\n abstract _stopPollingByPollingTokenSetId(key: PollingTokenSetId): void;\n\n startPollingByNetworkClientId(\n networkClientId: NetworkClientId,\n options: Json = {},\n ): string {\n const pollToken = random();\n const key = getKey(networkClientId, options);\n const pollingTokenSet =\n this.#pollingTokenSets.get(key) ?? new Set<string>();\n pollingTokenSet.add(pollToken);\n this.#pollingTokenSets.set(key, pollingTokenSet);\n\n if (pollingTokenSet.size === 1) {\n this._startPollingByNetworkClientId(networkClientId, options);\n }\n\n return pollToken;\n }\n\n stopAllPolling() {\n this.#pollingTokenSets.forEach((tokenSet, _key) => {\n tokenSet.forEach((token) => {\n this.stopPollingByPollingToken(token);\n });\n });\n }\n\n stopPollingByPollingToken(pollingToken: string) {\n if (!pollingToken) {\n throw new Error('pollingToken required');\n }\n\n let keyToDelete: PollingTokenSetId | null = null;\n for (const [key, tokenSet] of this.#pollingTokenSets) {\n if (tokenSet.delete(pollingToken)) {\n if (tokenSet.size === 0) {\n keyToDelete = key;\n }\n break;\n }\n }\n\n if (keyToDelete) {\n this._stopPollingByPollingTokenSetId(keyToDelete);\n this.#pollingTokenSets.delete(keyToDelete);\n const callbacks = this.#callbacks.get(keyToDelete);\n if (callbacks) {\n for (const callback of callbacks) {\n // eslint-disable-next-line n/callback-return\n callback(keyToDelete);\n }\n callbacks.clear();\n }\n }\n }\n\n onPollingCompleteByNetworkClientId(\n networkClientId: NetworkClientId,\n callback: (networkClientId: NetworkClientId) => void,\n options: Json = {},\n ) {\n const key = getKey(networkClientId, options);\n const callbacks = this.#callbacks.get(key) ?? new Set<typeof callback>();\n callbacks.add(callback);\n this.#callbacks.set(key, callbacks);\n }\n }\n return AbstractPollingControllerBase;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEA,OAAO,eAAe;AACtB,SAAS,MAAM,cAAc;AA0BtB,IAAM,SAAS,CACpB,iBACA,YACsB,GAAG,eAAe,IAAI,UAAU,OAAO,CAAC;AAczD,SAAS,mCACd,MACA;AAhDF;AAAA,EAiDE,MAAe,sCACL,KAEV;AAAA,IAHA;AAAA;AAIE,yBAAS,mBAAyD,oBAAI,IAAI;AAE1E,qCAGI,oBAAI,IAAI;AAAA;AAAA,IAcZ,8BACE,iBACA,UAAgB,CAAC,GACT;AACR,YAAM,YAAY,OAAO;AACzB,YAAM,MAAM,OAAO,iBAAiB,OAAO;AAC3C,YAAM,kBACJ,mBAAK,mBAAkB,IAAI,GAAG,KAAK,oBAAI,IAAY;AACrD,sBAAgB,IAAI,SAAS;AAC7B,yBAAK,mBAAkB,IAAI,KAAK,eAAe;AAE/C,UAAI,gBAAgB,SAAS,GAAG;AAC9B,aAAK,+BAA+B,iBAAiB,OAAO;AAAA,MAC9D;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,iBAAiB;AACf,yBAAK,mBAAkB,QAAQ,CAAC,UAAU,SAAS;AACjD,iBAAS,QAAQ,CAAC,UAAU;AAC1B,eAAK,0BAA0B,KAAK;AAAA,QACtC,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IAEA,0BAA0B,cAAsB;AAC9C,UAAI,CAAC,cAAc;AACjB,cAAM,IAAI,MAAM,uBAAuB;AAAA,MACzC;AAEA,UAAI,cAAwC;AAC5C,iBAAW,CAAC,KAAK,QAAQ,KAAK,mBAAK,oBAAmB;AACpD,YAAI,SAAS,OAAO,YAAY,GAAG;AACjC,cAAI,SAAS,SAAS,GAAG;AACvB,0BAAc;AAAA,UAChB;AACA;AAAA,QACF;AAAA,MACF;AAEA,UAAI,aAAa;AACf,aAAK,gCAAgC,WAAW;AAChD,2BAAK,mBAAkB,OAAO,WAAW;AACzC,cAAM,YAAY,mBAAK,YAAW,IAAI,WAAW;AACjD,YAAI,WAAW;AACb,qBAAW,YAAY,WAAW;AAEhC,qBAAS,WAAW;AAAA,UACtB;AACA,oBAAU,MAAM;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,IAEA,mCACE,iBACA,UACA,UAAgB,CAAC,GACjB;AACA,YAAM,MAAM,OAAO,iBAAiB,OAAO;AAC3C,YAAM,YAAY,mBAAK,YAAW,IAAI,GAAG,KAAK,oBAAI,IAAqB;AACvE,gBAAU,IAAI,QAAQ;AACtB,yBAAK,YAAW,IAAI,KAAK,SAAS;AAAA,IACpC;AAAA,EACF;AApFW;AAET;AAmFF,SAAO;AACT;","names":[]}