@metamask/polling-controller 5.0.0 → 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 +46 -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
@@ -1,4 +1,5 @@
1
1
  # Changelog
2
+
2
3
  All notable changes to this project will be documented in this file.
3
4
 
4
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
@@ -6,67 +7,111 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
7
 
7
8
  ## [Unreleased]
8
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
+
24
+ ## [5.0.1]
25
+
26
+ ### Changed
27
+
28
+ - Bump `@metamask/controller-utils` to `^8.0.4` ([#4007](https://github.com/MetaMask/core/pull/4007))
29
+ - Bump `@metamask/network-controller` to `^17.2.1` ([#4007](https://github.com/MetaMask/core/pull/4007))
30
+
9
31
  ## [5.0.0]
32
+
10
33
  ### Changed
34
+
11
35
  - **BREAKING:** Bump `@metamask/network-controller` peer dependency to `^17.2.0` ([#3821](https://github.com/MetaMask/core/pull/3821))
12
36
  - Bump `@metamask/utils` to `^8.3.0` ([#3769](https://github.com/MetaMask/core/pull/3769))
13
37
  - Bump `@metamask/base-controller` to `^4.1.1` ([#3760](https://github.com/MetaMask/core/pull/3760), [#3821](https://github.com/MetaMask/core/pull/3821))
14
38
  - Bump `@metamask/controller-utils` to `^8.0.2` ([#3821](https://github.com/MetaMask/core/pull/3821))
15
39
 
16
40
  ## [4.0.0]
41
+
17
42
  ### Changed
43
+
18
44
  - **BREAKING:** Bump `@metamask/network-controller` dependency and peer dependency from `^17.0.0` to `^17.1.1` ([#3695](https://github.com/MetaMask/core/pull/3695))
19
45
  - Bump `@metamask/base-controller` to `^4.0.1` ([#3695](https://github.com/MetaMask/core/pull/3695))
20
46
  - Bump `@metamask/controller-utils` to `^8.0.1` ([#3695](https://github.com/MetaMask/core/pull/3695), [#3678](https://github.com/MetaMask/core/pull/3678))
21
47
 
22
48
  ## [3.0.0]
49
+
23
50
  ### Added
51
+
24
52
  - `BlockTrackerPollingController`, `BlockTrackerPollingControllerV1` and `BlockTrackerPollingControllerOnly` have been added and can be used by subclasses to poll with a blockTracker using the same API as the `StaticIntervalPollingController` versions - the only exception is the requirement to implement the abstract method `_getNetworkClientById` on subclasses.
25
53
 
26
54
  ### Changed
55
+
27
56
  - **BREAKING:** `PollingController`, `PollingControllerV1` and `PollingControllerOnly` are all removed and replaced by `StaticIntervalPollingController`, `StaticIntervalPollingControllerV1` and `StaticIntervalPollingControllerOnly` ([#3636](https://github.com/MetaMask/core/pull/3636))
28
57
 
29
58
  ## [2.0.0]
59
+
30
60
  ### Changed
61
+
31
62
  - **BREAKING:** Bump `@metamask/base-controller` to ^4.0.0 ([#2063](https://github.com/MetaMask/core/pull/2063))
32
63
  - This is breaking because the type of the `messenger` has backward-incompatible changes. See the changelog for this package for more.
33
64
  - Bump `@metamask/controller-utils` to ^6.0.0 ([#2063](https://github.com/MetaMask/core/pull/2063))
34
65
  - Bump `@metamask/network-controller` to ^17.0.0 ([#2063](https://github.com/MetaMask/core/pull/2063))
35
66
 
36
67
  ## [1.0.2]
68
+
37
69
  ### Changed
70
+
38
71
  - **BREAKING:** Bump dependency and peer dependency on `@metamask/network-controller` to ^16.0.0
39
72
  - Bump @metamask/utils from 8.1.0 to 8.2.0 ([#1957](https://github.com/MetaMask/core/pull/1957))
40
73
 
41
74
  ## [1.0.1]
75
+
42
76
  ### Fixed
77
+
43
78
  - Export `PollingControllerOnly` ([#1921](https://github.com/MetaMask/core/pull/1921))
44
79
 
45
80
  ## [1.0.0]
81
+
46
82
  ### Added
83
+
47
84
  - Add `PollingControllerOnly` to extend from an empty class. This will allow classes that previously are just classes that don't extend from BaseV1 or V2 to extend from this new `PollingControllerOnly`. ([#1873](https://github.com/MetaMask/core/pull/1873))
48
85
 
49
86
  ### Changed
87
+
50
88
  - **BREAKING:** `_executePoll()` is called immediately on start if no polling interval is already active for the networkClientId + options combination ([#1874](https://github.com/MetaMask/core/pull/1874))
51
89
  - Bump dependency and peer dependency on `@metamask/network-controller` to ^15.1.0
52
90
 
53
91
  ## [0.2.0]
92
+
54
93
  ### Added
94
+
55
95
  - Add way to start and stop different polling sessions for the same network client ID by providing extra scoping data ([#1776](https://github.com/MetaMask/core/pull/1776))
56
96
  - Add optional second argument to `stopPollingByPollingToken` (formerly `stopPollingByNetworkClientId`)
57
97
  - Add optional second argument to `onPollingCompleteByNetworkClientId`
58
98
 
59
99
  ### Changed
100
+
60
101
  - **BREAKING:** Bump dependency and peer dependency on `@metamask/network-controller` to ^15.0.0
61
102
  - **BREAKING:** Polling controllers are expected to override `_executePoll` instead of `executePoll` ([#1810](https://github.com/MetaMask/core/pull/1810))
62
103
  - **BREAKING:** Rename `stopPollingByNetworkClientId` to `stopPollingByPollingToken` ([#1810](https://github.com/MetaMask/core/pull/1810))
63
104
  - Add dependency on `fast-json-stable-stringify` ^2.1.0
64
105
 
65
106
  ## [0.1.0]
107
+
66
108
  ### Added
109
+
67
110
  - Initial release
68
111
 
69
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/polling-controller@5.0.0...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
114
+ [5.0.1]: https://github.com/MetaMask/core/compare/@metamask/polling-controller@5.0.0...@metamask/polling-controller@5.0.1
70
115
  [5.0.0]: https://github.com/MetaMask/core/compare/@metamask/polling-controller@4.0.0...@metamask/polling-controller@5.0.0
71
116
  [4.0.0]: https://github.com/MetaMask/core/compare/@metamask/polling-controller@3.0.0...@metamask/polling-controller@4.0.0
72
117
  [3.0.0]: https://github.com/MetaMask/core/compare/@metamask/polling-controller@2.0.0...@metamask/polling-controller@3.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"]}