@metamask-previews/assets-controllers 47.0.0-preview-958adf52 → 47.0.0-preview-553ac792

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 (90) hide show
  1. package/CHANGELOG.md +0 -1
  2. package/dist/AccountTrackerController.d.cts +4 -7
  3. package/dist/AccountTrackerController.d.cts.map +1 -1
  4. package/dist/AccountTrackerController.d.mts +4 -7
  5. package/dist/AccountTrackerController.d.mts.map +1 -1
  6. package/dist/MultichainBalancesController/BalancesTracker.cjs +122 -0
  7. package/dist/MultichainBalancesController/BalancesTracker.cjs.map +1 -0
  8. package/dist/MultichainBalancesController/BalancesTracker.d.cts +54 -0
  9. package/dist/MultichainBalancesController/BalancesTracker.d.cts.map +1 -0
  10. package/dist/MultichainBalancesController/BalancesTracker.d.mts +54 -0
  11. package/dist/MultichainBalancesController/BalancesTracker.d.mts.map +1 -0
  12. package/dist/MultichainBalancesController/BalancesTracker.mjs +118 -0
  13. package/dist/MultichainBalancesController/BalancesTracker.mjs.map +1 -0
  14. package/dist/MultichainBalancesController/MultichainBalancesController.cjs +65 -30
  15. package/dist/MultichainBalancesController/MultichainBalancesController.cjs.map +1 -1
  16. package/dist/MultichainBalancesController/MultichainBalancesController.d.cts +23 -3
  17. package/dist/MultichainBalancesController/MultichainBalancesController.d.cts.map +1 -1
  18. package/dist/MultichainBalancesController/MultichainBalancesController.d.mts +23 -3
  19. package/dist/MultichainBalancesController/MultichainBalancesController.d.mts.map +1 -1
  20. package/dist/MultichainBalancesController/MultichainBalancesController.mjs +67 -32
  21. package/dist/MultichainBalancesController/MultichainBalancesController.mjs.map +1 -1
  22. package/dist/MultichainBalancesController/Poller.cjs +45 -0
  23. package/dist/MultichainBalancesController/Poller.cjs.map +1 -0
  24. package/dist/MultichainBalancesController/Poller.d.cts +7 -0
  25. package/dist/MultichainBalancesController/Poller.d.cts.map +1 -0
  26. package/dist/MultichainBalancesController/Poller.d.mts +7 -0
  27. package/dist/MultichainBalancesController/Poller.d.mts.map +1 -0
  28. package/dist/MultichainBalancesController/Poller.mjs +41 -0
  29. package/dist/MultichainBalancesController/Poller.mjs.map +1 -0
  30. package/dist/MultichainBalancesController/constants.cjs +10 -1
  31. package/dist/MultichainBalancesController/constants.cjs.map +1 -1
  32. package/dist/MultichainBalancesController/constants.d.cts +4 -0
  33. package/dist/MultichainBalancesController/constants.d.cts.map +1 -1
  34. package/dist/MultichainBalancesController/constants.d.mts +4 -0
  35. package/dist/MultichainBalancesController/constants.d.mts.map +1 -1
  36. package/dist/MultichainBalancesController/constants.mjs +9 -0
  37. package/dist/MultichainBalancesController/constants.mjs.map +1 -1
  38. package/dist/MultichainBalancesController/index.cjs +4 -1
  39. package/dist/MultichainBalancesController/index.cjs.map +1 -1
  40. package/dist/MultichainBalancesController/index.d.cts +3 -2
  41. package/dist/MultichainBalancesController/index.d.cts.map +1 -1
  42. package/dist/MultichainBalancesController/index.d.mts +3 -2
  43. package/dist/MultichainBalancesController/index.d.mts.map +1 -1
  44. package/dist/MultichainBalancesController/index.mjs +2 -1
  45. package/dist/MultichainBalancesController/index.mjs.map +1 -1
  46. package/dist/MultichainBalancesController/utils.cjs +14 -1
  47. package/dist/MultichainBalancesController/utils.cjs.map +1 -1
  48. package/dist/MultichainBalancesController/utils.d.cts +7 -0
  49. package/dist/MultichainBalancesController/utils.d.cts.map +1 -1
  50. package/dist/MultichainBalancesController/utils.d.mts +7 -0
  51. package/dist/MultichainBalancesController/utils.d.mts.map +1 -1
  52. package/dist/MultichainBalancesController/utils.mjs +13 -1
  53. package/dist/MultichainBalancesController/utils.mjs.map +1 -1
  54. package/dist/TokenBalancesController.d.cts +7 -4
  55. package/dist/TokenBalancesController.d.cts.map +1 -1
  56. package/dist/TokenBalancesController.d.mts +7 -4
  57. package/dist/TokenBalancesController.d.mts.map +1 -1
  58. package/dist/index.cjs +3 -4
  59. package/dist/index.cjs.map +1 -1
  60. package/dist/index.d.cts +2 -4
  61. package/dist/index.d.cts.map +1 -1
  62. package/dist/index.d.mts +2 -4
  63. package/dist/index.d.mts.map +1 -1
  64. package/dist/index.mjs +2 -3
  65. package/dist/index.mjs.map +1 -1
  66. package/package.json +2 -5
  67. package/dist/MultichainAssetsController/MultichainAssetsController.cjs +0 -324
  68. package/dist/MultichainAssetsController/MultichainAssetsController.cjs.map +0 -1
  69. package/dist/MultichainAssetsController/MultichainAssetsController.d.cts +0 -66
  70. package/dist/MultichainAssetsController/MultichainAssetsController.d.cts.map +0 -1
  71. package/dist/MultichainAssetsController/MultichainAssetsController.d.mts +0 -66
  72. package/dist/MultichainAssetsController/MultichainAssetsController.d.mts.map +0 -1
  73. package/dist/MultichainAssetsController/MultichainAssetsController.mjs +0 -319
  74. package/dist/MultichainAssetsController/MultichainAssetsController.mjs.map +0 -1
  75. package/dist/MultichainAssetsController/index.cjs +0 -7
  76. package/dist/MultichainAssetsController/index.cjs.map +0 -1
  77. package/dist/MultichainAssetsController/index.d.cts +0 -3
  78. package/dist/MultichainAssetsController/index.d.cts.map +0 -1
  79. package/dist/MultichainAssetsController/index.d.mts +0 -3
  80. package/dist/MultichainAssetsController/index.d.mts.map +0 -1
  81. package/dist/MultichainAssetsController/index.mjs +0 -2
  82. package/dist/MultichainAssetsController/index.mjs.map +0 -1
  83. package/dist/MultichainAssetsController/utils.cjs +0 -26
  84. package/dist/MultichainAssetsController/utils.cjs.map +0 -1
  85. package/dist/MultichainAssetsController/utils.d.cts +0 -13
  86. package/dist/MultichainAssetsController/utils.d.cts.map +0 -1
  87. package/dist/MultichainAssetsController/utils.d.mts +0 -13
  88. package/dist/MultichainAssetsController/utils.d.mts.map +0 -1
  89. package/dist/MultichainAssetsController/utils.mjs +0 -22
  90. package/dist/MultichainAssetsController/utils.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -10,7 +10,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
10
10
  ### Changed
11
11
 
12
12
  - Bump `@metamask/snaps-utils` from `^8.9.0` to `^8.10.0` ([#5265](https://github.com/MetaMask/core/pull/5265))
13
- - Bump `@metamask/keyring-api"` from `^16.1.0` to `^17.0.0` ([#5280](https://github.com/MetaMask/core/pull/5280))
14
13
 
15
14
  ## [47.0.0]
16
15
 
@@ -69,12 +69,7 @@ declare const AccountTrackerController_base: (abstract new (...args: any[]) => {
69
69
  "__#13@#intervalLength": number | undefined;
70
70
  setIntervalLength(intervalLength: number): void;
71
71
  getIntervalLength(): number | undefined;
72
- _startPolling(input: AccountTrackerPollingInput): void; /**
73
- * @type AccountTrackerControllerState
74
- *
75
- * Account tracker controller state
76
- * @property accounts - Map of addresses to account information
77
- */
72
+ _startPolling(input: AccountTrackerPollingInput): void;
78
73
  _stopPollingByPollingTokenSetId(key: string): void;
79
74
  readonly "__#3@#pollingTokenSets": Map<string, Set<string>>;
80
75
  "__#3@#callbacks": Map<string, Set<(input: AccountTrackerPollingInput) => void>>;
@@ -82,7 +77,9 @@ declare const AccountTrackerController_base: (abstract new (...args: any[]) => {
82
77
  startPolling(input: AccountTrackerPollingInput): string;
83
78
  stopAllPolling(): void;
84
79
  stopPollingByPollingToken(pollingToken: string): void;
85
- onPollingComplete(input: AccountTrackerPollingInput, callback: (input: AccountTrackerPollingInput) => void): void;
80
+ onPollingComplete(input: AccountTrackerPollingInput, callback: (input: AccountTrackerPollingInput) => void): void; /**
81
+ * The action that can be performed to get the state of the {@link AccountTrackerController}.
82
+ */
86
83
  }) & typeof import("@metamask/base-controller").BaseController;
87
84
  /**
88
85
  * Controller that tracks the network balances for all user accounts.
@@ -1 +1 @@
1
- {"version":3,"file":"AccountTrackerController.d.cts","sourceRoot":"","sources":["../src/AccountTrackerController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AccountTrackerController.d.cts","sourceRoot":"","sources":["../src/AccountTrackerController.ts"],"names":[],"mappings":"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"}
@@ -69,12 +69,7 @@ declare const AccountTrackerController_base: (abstract new (...args: any[]) => {
69
69
  "__#13@#intervalLength": number | undefined;
70
70
  setIntervalLength(intervalLength: number): void;
71
71
  getIntervalLength(): number | undefined;
72
- _startPolling(input: AccountTrackerPollingInput): void; /**
73
- * @type AccountTrackerControllerState
74
- *
75
- * Account tracker controller state
76
- * @property accounts - Map of addresses to account information
77
- */
72
+ _startPolling(input: AccountTrackerPollingInput): void;
78
73
  _stopPollingByPollingTokenSetId(key: string): void;
79
74
  readonly "__#3@#pollingTokenSets": Map<string, Set<string>>;
80
75
  "__#3@#callbacks": Map<string, Set<(input: AccountTrackerPollingInput) => void>>;
@@ -82,7 +77,9 @@ declare const AccountTrackerController_base: (abstract new (...args: any[]) => {
82
77
  startPolling(input: AccountTrackerPollingInput): string;
83
78
  stopAllPolling(): void;
84
79
  stopPollingByPollingToken(pollingToken: string): void;
85
- onPollingComplete(input: AccountTrackerPollingInput, callback: (input: AccountTrackerPollingInput) => void): void;
80
+ onPollingComplete(input: AccountTrackerPollingInput, callback: (input: AccountTrackerPollingInput) => void): void; /**
81
+ * The action that can be performed to get the state of the {@link AccountTrackerController}.
82
+ */
86
83
  }) & typeof import("@metamask/base-controller").BaseController;
87
84
  /**
88
85
  * Controller that tracks the network balances for all user accounts.
@@ -1 +1 @@
1
- {"version":3,"file":"AccountTrackerController.d.mts","sourceRoot":"","sources":["../src/AccountTrackerController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AccountTrackerController.d.mts","sourceRoot":"","sources":["../src/AccountTrackerController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ 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");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _BalancesTracker_instances, _BalancesTracker_poller, _BalancesTracker_updateBalance, _BalancesTracker_balances, _BalancesTracker_isBalanceOutdated;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.BalancesTracker = void 0;
16
+ const Poller_1 = require("./Poller.cjs");
17
+ const BALANCES_TRACKING_INTERVAL = 5000; // Every 5s in milliseconds.
18
+ class BalancesTracker {
19
+ constructor(updateBalanceCallback) {
20
+ _BalancesTracker_instances.add(this);
21
+ _BalancesTracker_poller.set(this, void 0);
22
+ _BalancesTracker_updateBalance.set(this, void 0);
23
+ _BalancesTracker_balances.set(this, {});
24
+ __classPrivateFieldSet(this, _BalancesTracker_updateBalance, updateBalanceCallback, "f");
25
+ __classPrivateFieldSet(this, _BalancesTracker_poller, new Poller_1.Poller(() => this.updateBalances(), BALANCES_TRACKING_INTERVAL), "f");
26
+ }
27
+ /**
28
+ * Starts the tracking process.
29
+ */
30
+ start() {
31
+ __classPrivateFieldGet(this, _BalancesTracker_poller, "f").start();
32
+ }
33
+ /**
34
+ * Stops the tracking process.
35
+ */
36
+ stop() {
37
+ __classPrivateFieldGet(this, _BalancesTracker_poller, "f").stop();
38
+ }
39
+ /**
40
+ * Checks if an account ID is being tracked.
41
+ *
42
+ * @param accountId - The account ID.
43
+ * @returns True if the account is being tracked, false otherwise.
44
+ */
45
+ isTracked(accountId) {
46
+ return Object.prototype.hasOwnProperty.call(__classPrivateFieldGet(this, _BalancesTracker_balances, "f"), accountId);
47
+ }
48
+ /**
49
+ * Asserts that an account ID is being tracked.
50
+ *
51
+ * @param accountId - The account ID.
52
+ * @throws If the account ID is not being tracked.
53
+ */
54
+ assertBeingTracked(accountId) {
55
+ if (!this.isTracked(accountId)) {
56
+ throw new Error(`Account is not being tracked: ${accountId}`);
57
+ }
58
+ }
59
+ /**
60
+ * Starts tracking a new account ID. This method has no effect on already tracked
61
+ * accounts.
62
+ *
63
+ * @param accountId - The account ID.
64
+ * @param blockTime - The block time (used when refreshing the account balances).
65
+ */
66
+ track(accountId, blockTime) {
67
+ // Do not overwrite current info if already being tracked!
68
+ if (!this.isTracked(accountId)) {
69
+ __classPrivateFieldGet(this, _BalancesTracker_balances, "f")[accountId] = {
70
+ lastUpdated: 0,
71
+ blockTime,
72
+ };
73
+ }
74
+ }
75
+ /**
76
+ * Stops tracking a tracked account ID.
77
+ *
78
+ * @param accountId - The account ID.
79
+ * @throws If the account ID is not being tracked.
80
+ */
81
+ untrack(accountId) {
82
+ this.assertBeingTracked(accountId);
83
+ delete __classPrivateFieldGet(this, _BalancesTracker_balances, "f")[accountId];
84
+ }
85
+ /**
86
+ * Update the balances for a tracked account ID.
87
+ *
88
+ * @param accountId - The account ID.
89
+ * @throws If the account ID is not being tracked.
90
+ */
91
+ async updateBalance(accountId) {
92
+ this.assertBeingTracked(accountId);
93
+ // We check if the balance is outdated (by comparing to the block time associated
94
+ // with this kind of account).
95
+ //
96
+ // This might not be super accurate, but we could probably compute this differently
97
+ // and try to sync with the "real block time"!
98
+ const info = __classPrivateFieldGet(this, _BalancesTracker_balances, "f")[accountId];
99
+ if (__classPrivateFieldGet(this, _BalancesTracker_instances, "m", _BalancesTracker_isBalanceOutdated).call(this, info)) {
100
+ await __classPrivateFieldGet(this, _BalancesTracker_updateBalance, "f").call(this, accountId);
101
+ __classPrivateFieldGet(this, _BalancesTracker_balances, "f")[accountId].lastUpdated = Date.now();
102
+ }
103
+ }
104
+ /**
105
+ * Update the balances of all tracked accounts (only if the balances
106
+ * is considered outdated).
107
+ */
108
+ async updateBalances() {
109
+ await Promise.allSettled(Object.keys(__classPrivateFieldGet(this, _BalancesTracker_balances, "f")).map(async (accountId) => {
110
+ await this.updateBalance(accountId);
111
+ }));
112
+ }
113
+ }
114
+ exports.BalancesTracker = BalancesTracker;
115
+ _BalancesTracker_poller = new WeakMap(), _BalancesTracker_updateBalance = new WeakMap(), _BalancesTracker_balances = new WeakMap(), _BalancesTracker_instances = new WeakSet(), _BalancesTracker_isBalanceOutdated = function _BalancesTracker_isBalanceOutdated({ lastUpdated, blockTime }) {
116
+ return (
117
+ // Never been updated:
118
+ lastUpdated === 0 ||
119
+ // Outdated:
120
+ Date.now() - lastUpdated >= blockTime);
121
+ };
122
+ //# sourceMappingURL=BalancesTracker.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BalancesTracker.cjs","sourceRoot":"","sources":["../../src/MultichainBalancesController/BalancesTracker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAAkC;AAOlC,MAAM,0BAA0B,GAAG,IAAI,CAAC,CAAC,4BAA4B;AAErE,MAAa,eAAe;IAO1B,YAAY,qBAA2D;;QANvE,0CAAgB;QAEhB,iDAAqD;QAErD,oCAAyC,EAAE,EAAC;QAG1C,uBAAA,IAAI,kCAAkB,qBAAqB,MAAA,CAAC;QAE5C,uBAAA,IAAI,2BAAW,IAAI,eAAM,CACvB,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAC3B,0BAA0B,CAC3B,MAAA,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,uBAAA,IAAI,+BAAQ,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,uBAAA,IAAI,+BAAQ,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,SAAiB;QACzB,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAA,IAAI,iCAAU,EAAE,SAAS,CAAC,CAAC;IACzE,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,SAAiB;QAClC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;SAC/D;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAiB,EAAE,SAAiB;QACxC,0DAA0D;QAC1D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;YAC9B,uBAAA,IAAI,iCAAU,CAAC,SAAS,CAAC,GAAG;gBAC1B,WAAW,EAAE,CAAC;gBACd,SAAS;aACV,CAAC;SACH;IACH,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,SAAiB;QACvB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACnC,OAAO,uBAAA,IAAI,iCAAU,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAEnC,iFAAiF;QACjF,8BAA8B;QAC9B,EAAE;QACF,mFAAmF;QACnF,8CAA8C;QAC9C,MAAM,IAAI,GAAG,uBAAA,IAAI,iCAAU,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,uBAAA,IAAI,sEAAmB,MAAvB,IAAI,EAAoB,IAAI,CAAC,EAAE;YACjC,MAAM,uBAAA,IAAI,sCAAe,MAAnB,IAAI,EAAgB,SAAS,CAAC,CAAC;YACrC,uBAAA,IAAI,iCAAU,CAAC,SAAS,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;SACpD;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,OAAO,CAAC,UAAU,CACtB,MAAM,CAAC,IAAI,CAAC,uBAAA,IAAI,iCAAU,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAClD,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CAkBF;AAjID,0CAiIC;iQARoB,EAAE,WAAW,EAAE,SAAS,EAAe;IACxD,OAAO;IACL,sBAAsB;IACtB,WAAW,KAAK,CAAC;QACjB,YAAY;QACZ,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,IAAI,SAAS,CACtC,CAAC;AACJ,CAAC","sourcesContent":["import { Poller } from './Poller';\n\ntype BalanceInfo = {\n lastUpdated: number;\n blockTime: number;\n};\n\nconst BALANCES_TRACKING_INTERVAL = 5000; // Every 5s in milliseconds.\n\nexport class BalancesTracker {\n #poller: Poller;\n\n #updateBalance: (accountId: string) => Promise<void>;\n\n #balances: Record<string, BalanceInfo> = {};\n\n constructor(updateBalanceCallback: (accountId: string) => Promise<void>) {\n this.#updateBalance = updateBalanceCallback;\n\n this.#poller = new Poller(\n () => this.updateBalances(),\n BALANCES_TRACKING_INTERVAL,\n );\n }\n\n /**\n * Starts the tracking process.\n */\n start(): void {\n this.#poller.start();\n }\n\n /**\n * Stops the tracking process.\n */\n stop(): void {\n this.#poller.stop();\n }\n\n /**\n * Checks if an account ID is being tracked.\n *\n * @param accountId - The account ID.\n * @returns True if the account is being tracked, false otherwise.\n */\n isTracked(accountId: string) {\n return Object.prototype.hasOwnProperty.call(this.#balances, accountId);\n }\n\n /**\n * Asserts that an account ID is being tracked.\n *\n * @param accountId - The account ID.\n * @throws If the account ID is not being tracked.\n */\n assertBeingTracked(accountId: string) {\n if (!this.isTracked(accountId)) {\n throw new Error(`Account is not being tracked: ${accountId}`);\n }\n }\n\n /**\n * Starts tracking a new account ID. This method has no effect on already tracked\n * accounts.\n *\n * @param accountId - The account ID.\n * @param blockTime - The block time (used when refreshing the account balances).\n */\n track(accountId: string, blockTime: number) {\n // Do not overwrite current info if already being tracked!\n if (!this.isTracked(accountId)) {\n this.#balances[accountId] = {\n lastUpdated: 0,\n blockTime,\n };\n }\n }\n\n /**\n * Stops tracking a tracked account ID.\n *\n * @param accountId - The account ID.\n * @throws If the account ID is not being tracked.\n */\n untrack(accountId: string) {\n this.assertBeingTracked(accountId);\n delete this.#balances[accountId];\n }\n\n /**\n * Update the balances for a tracked account ID.\n *\n * @param accountId - The account ID.\n * @throws If the account ID is not being tracked.\n */\n async updateBalance(accountId: string) {\n this.assertBeingTracked(accountId);\n\n // We check if the balance is outdated (by comparing to the block time associated\n // with this kind of account).\n //\n // This might not be super accurate, but we could probably compute this differently\n // and try to sync with the \"real block time\"!\n const info = this.#balances[accountId];\n if (this.#isBalanceOutdated(info)) {\n await this.#updateBalance(accountId);\n this.#balances[accountId].lastUpdated = Date.now();\n }\n }\n\n /**\n * Update the balances of all tracked accounts (only if the balances\n * is considered outdated).\n */\n async updateBalances() {\n await Promise.allSettled(\n Object.keys(this.#balances).map(async (accountId) => {\n await this.updateBalance(accountId);\n }),\n );\n }\n\n /**\n * Checks if the balance is outdated according to the provided data.\n *\n * @param param - The balance info.\n * @param param.lastUpdated - The last updated timestamp.\n * @param param.blockTime - The block time.\n * @returns True if the balance is outdated, false otherwise.\n */\n #isBalanceOutdated({ lastUpdated, blockTime }: BalanceInfo): boolean {\n return (\n // Never been updated:\n lastUpdated === 0 ||\n // Outdated:\n Date.now() - lastUpdated >= blockTime\n );\n }\n}\n"]}
@@ -0,0 +1,54 @@
1
+ export declare class BalancesTracker {
2
+ #private;
3
+ constructor(updateBalanceCallback: (accountId: string) => Promise<void>);
4
+ /**
5
+ * Starts the tracking process.
6
+ */
7
+ start(): void;
8
+ /**
9
+ * Stops the tracking process.
10
+ */
11
+ stop(): void;
12
+ /**
13
+ * Checks if an account ID is being tracked.
14
+ *
15
+ * @param accountId - The account ID.
16
+ * @returns True if the account is being tracked, false otherwise.
17
+ */
18
+ isTracked(accountId: string): boolean;
19
+ /**
20
+ * Asserts that an account ID is being tracked.
21
+ *
22
+ * @param accountId - The account ID.
23
+ * @throws If the account ID is not being tracked.
24
+ */
25
+ assertBeingTracked(accountId: string): void;
26
+ /**
27
+ * Starts tracking a new account ID. This method has no effect on already tracked
28
+ * accounts.
29
+ *
30
+ * @param accountId - The account ID.
31
+ * @param blockTime - The block time (used when refreshing the account balances).
32
+ */
33
+ track(accountId: string, blockTime: number): void;
34
+ /**
35
+ * Stops tracking a tracked account ID.
36
+ *
37
+ * @param accountId - The account ID.
38
+ * @throws If the account ID is not being tracked.
39
+ */
40
+ untrack(accountId: string): void;
41
+ /**
42
+ * Update the balances for a tracked account ID.
43
+ *
44
+ * @param accountId - The account ID.
45
+ * @throws If the account ID is not being tracked.
46
+ */
47
+ updateBalance(accountId: string): Promise<void>;
48
+ /**
49
+ * Update the balances of all tracked accounts (only if the balances
50
+ * is considered outdated).
51
+ */
52
+ updateBalances(): Promise<void>;
53
+ }
54
+ //# sourceMappingURL=BalancesTracker.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BalancesTracker.d.cts","sourceRoot":"","sources":["../../src/MultichainBalancesController/BalancesTracker.ts"],"names":[],"mappings":"AASA,qBAAa,eAAe;;gBAOd,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;IASvE;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM;IAI3B;;;;;OAKG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM;IAMpC;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAU1C;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM;IAKzB;;;;;OAKG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM;IAerC;;;OAGG;IACG,cAAc;CAwBrB"}
@@ -0,0 +1,54 @@
1
+ export declare class BalancesTracker {
2
+ #private;
3
+ constructor(updateBalanceCallback: (accountId: string) => Promise<void>);
4
+ /**
5
+ * Starts the tracking process.
6
+ */
7
+ start(): void;
8
+ /**
9
+ * Stops the tracking process.
10
+ */
11
+ stop(): void;
12
+ /**
13
+ * Checks if an account ID is being tracked.
14
+ *
15
+ * @param accountId - The account ID.
16
+ * @returns True if the account is being tracked, false otherwise.
17
+ */
18
+ isTracked(accountId: string): boolean;
19
+ /**
20
+ * Asserts that an account ID is being tracked.
21
+ *
22
+ * @param accountId - The account ID.
23
+ * @throws If the account ID is not being tracked.
24
+ */
25
+ assertBeingTracked(accountId: string): void;
26
+ /**
27
+ * Starts tracking a new account ID. This method has no effect on already tracked
28
+ * accounts.
29
+ *
30
+ * @param accountId - The account ID.
31
+ * @param blockTime - The block time (used when refreshing the account balances).
32
+ */
33
+ track(accountId: string, blockTime: number): void;
34
+ /**
35
+ * Stops tracking a tracked account ID.
36
+ *
37
+ * @param accountId - The account ID.
38
+ * @throws If the account ID is not being tracked.
39
+ */
40
+ untrack(accountId: string): void;
41
+ /**
42
+ * Update the balances for a tracked account ID.
43
+ *
44
+ * @param accountId - The account ID.
45
+ * @throws If the account ID is not being tracked.
46
+ */
47
+ updateBalance(accountId: string): Promise<void>;
48
+ /**
49
+ * Update the balances of all tracked accounts (only if the balances
50
+ * is considered outdated).
51
+ */
52
+ updateBalances(): Promise<void>;
53
+ }
54
+ //# sourceMappingURL=BalancesTracker.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BalancesTracker.d.mts","sourceRoot":"","sources":["../../src/MultichainBalancesController/BalancesTracker.ts"],"names":[],"mappings":"AASA,qBAAa,eAAe;;gBAOd,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;IASvE;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM;IAI3B;;;;;OAKG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM;IAMpC;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAU1C;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM;IAKzB;;;;;OAKG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM;IAerC;;;OAGG;IACG,cAAc;CAwBrB"}
@@ -0,0 +1,118 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _BalancesTracker_instances, _BalancesTracker_poller, _BalancesTracker_updateBalance, _BalancesTracker_balances, _BalancesTracker_isBalanceOutdated;
13
+ import { Poller } from "./Poller.mjs";
14
+ const BALANCES_TRACKING_INTERVAL = 5000; // Every 5s in milliseconds.
15
+ export class BalancesTracker {
16
+ constructor(updateBalanceCallback) {
17
+ _BalancesTracker_instances.add(this);
18
+ _BalancesTracker_poller.set(this, void 0);
19
+ _BalancesTracker_updateBalance.set(this, void 0);
20
+ _BalancesTracker_balances.set(this, {});
21
+ __classPrivateFieldSet(this, _BalancesTracker_updateBalance, updateBalanceCallback, "f");
22
+ __classPrivateFieldSet(this, _BalancesTracker_poller, new Poller(() => this.updateBalances(), BALANCES_TRACKING_INTERVAL), "f");
23
+ }
24
+ /**
25
+ * Starts the tracking process.
26
+ */
27
+ start() {
28
+ __classPrivateFieldGet(this, _BalancesTracker_poller, "f").start();
29
+ }
30
+ /**
31
+ * Stops the tracking process.
32
+ */
33
+ stop() {
34
+ __classPrivateFieldGet(this, _BalancesTracker_poller, "f").stop();
35
+ }
36
+ /**
37
+ * Checks if an account ID is being tracked.
38
+ *
39
+ * @param accountId - The account ID.
40
+ * @returns True if the account is being tracked, false otherwise.
41
+ */
42
+ isTracked(accountId) {
43
+ return Object.prototype.hasOwnProperty.call(__classPrivateFieldGet(this, _BalancesTracker_balances, "f"), accountId);
44
+ }
45
+ /**
46
+ * Asserts that an account ID is being tracked.
47
+ *
48
+ * @param accountId - The account ID.
49
+ * @throws If the account ID is not being tracked.
50
+ */
51
+ assertBeingTracked(accountId) {
52
+ if (!this.isTracked(accountId)) {
53
+ throw new Error(`Account is not being tracked: ${accountId}`);
54
+ }
55
+ }
56
+ /**
57
+ * Starts tracking a new account ID. This method has no effect on already tracked
58
+ * accounts.
59
+ *
60
+ * @param accountId - The account ID.
61
+ * @param blockTime - The block time (used when refreshing the account balances).
62
+ */
63
+ track(accountId, blockTime) {
64
+ // Do not overwrite current info if already being tracked!
65
+ if (!this.isTracked(accountId)) {
66
+ __classPrivateFieldGet(this, _BalancesTracker_balances, "f")[accountId] = {
67
+ lastUpdated: 0,
68
+ blockTime,
69
+ };
70
+ }
71
+ }
72
+ /**
73
+ * Stops tracking a tracked account ID.
74
+ *
75
+ * @param accountId - The account ID.
76
+ * @throws If the account ID is not being tracked.
77
+ */
78
+ untrack(accountId) {
79
+ this.assertBeingTracked(accountId);
80
+ delete __classPrivateFieldGet(this, _BalancesTracker_balances, "f")[accountId];
81
+ }
82
+ /**
83
+ * Update the balances for a tracked account ID.
84
+ *
85
+ * @param accountId - The account ID.
86
+ * @throws If the account ID is not being tracked.
87
+ */
88
+ async updateBalance(accountId) {
89
+ this.assertBeingTracked(accountId);
90
+ // We check if the balance is outdated (by comparing to the block time associated
91
+ // with this kind of account).
92
+ //
93
+ // This might not be super accurate, but we could probably compute this differently
94
+ // and try to sync with the "real block time"!
95
+ const info = __classPrivateFieldGet(this, _BalancesTracker_balances, "f")[accountId];
96
+ if (__classPrivateFieldGet(this, _BalancesTracker_instances, "m", _BalancesTracker_isBalanceOutdated).call(this, info)) {
97
+ await __classPrivateFieldGet(this, _BalancesTracker_updateBalance, "f").call(this, accountId);
98
+ __classPrivateFieldGet(this, _BalancesTracker_balances, "f")[accountId].lastUpdated = Date.now();
99
+ }
100
+ }
101
+ /**
102
+ * Update the balances of all tracked accounts (only if the balances
103
+ * is considered outdated).
104
+ */
105
+ async updateBalances() {
106
+ await Promise.allSettled(Object.keys(__classPrivateFieldGet(this, _BalancesTracker_balances, "f")).map(async (accountId) => {
107
+ await this.updateBalance(accountId);
108
+ }));
109
+ }
110
+ }
111
+ _BalancesTracker_poller = new WeakMap(), _BalancesTracker_updateBalance = new WeakMap(), _BalancesTracker_balances = new WeakMap(), _BalancesTracker_instances = new WeakSet(), _BalancesTracker_isBalanceOutdated = function _BalancesTracker_isBalanceOutdated({ lastUpdated, blockTime }) {
112
+ return (
113
+ // Never been updated:
114
+ lastUpdated === 0 ||
115
+ // Outdated:
116
+ Date.now() - lastUpdated >= blockTime);
117
+ };
118
+ //# sourceMappingURL=BalancesTracker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BalancesTracker.mjs","sourceRoot":"","sources":["../../src/MultichainBalancesController/BalancesTracker.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,qBAAiB;AAOlC,MAAM,0BAA0B,GAAG,IAAI,CAAC,CAAC,4BAA4B;AAErE,MAAM,OAAO,eAAe;IAO1B,YAAY,qBAA2D;;QANvE,0CAAgB;QAEhB,iDAAqD;QAErD,oCAAyC,EAAE,EAAC;QAG1C,uBAAA,IAAI,kCAAkB,qBAAqB,MAAA,CAAC;QAE5C,uBAAA,IAAI,2BAAW,IAAI,MAAM,CACvB,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAC3B,0BAA0B,CAC3B,MAAA,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,uBAAA,IAAI,+BAAQ,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,uBAAA,IAAI,+BAAQ,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,SAAiB;QACzB,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAA,IAAI,iCAAU,EAAE,SAAS,CAAC,CAAC;IACzE,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,SAAiB;QAClC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;SAC/D;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAiB,EAAE,SAAiB;QACxC,0DAA0D;QAC1D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;YAC9B,uBAAA,IAAI,iCAAU,CAAC,SAAS,CAAC,GAAG;gBAC1B,WAAW,EAAE,CAAC;gBACd,SAAS;aACV,CAAC;SACH;IACH,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,SAAiB;QACvB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACnC,OAAO,uBAAA,IAAI,iCAAU,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAEnC,iFAAiF;QACjF,8BAA8B;QAC9B,EAAE;QACF,mFAAmF;QACnF,8CAA8C;QAC9C,MAAM,IAAI,GAAG,uBAAA,IAAI,iCAAU,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,uBAAA,IAAI,sEAAmB,MAAvB,IAAI,EAAoB,IAAI,CAAC,EAAE;YACjC,MAAM,uBAAA,IAAI,sCAAe,MAAnB,IAAI,EAAgB,SAAS,CAAC,CAAC;YACrC,uBAAA,IAAI,iCAAU,CAAC,SAAS,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;SACpD;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,OAAO,CAAC,UAAU,CACtB,MAAM,CAAC,IAAI,CAAC,uBAAA,IAAI,iCAAU,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAClD,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CAkBF;iQARoB,EAAE,WAAW,EAAE,SAAS,EAAe;IACxD,OAAO;IACL,sBAAsB;IACtB,WAAW,KAAK,CAAC;QACjB,YAAY;QACZ,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,IAAI,SAAS,CACtC,CAAC;AACJ,CAAC","sourcesContent":["import { Poller } from './Poller';\n\ntype BalanceInfo = {\n lastUpdated: number;\n blockTime: number;\n};\n\nconst BALANCES_TRACKING_INTERVAL = 5000; // Every 5s in milliseconds.\n\nexport class BalancesTracker {\n #poller: Poller;\n\n #updateBalance: (accountId: string) => Promise<void>;\n\n #balances: Record<string, BalanceInfo> = {};\n\n constructor(updateBalanceCallback: (accountId: string) => Promise<void>) {\n this.#updateBalance = updateBalanceCallback;\n\n this.#poller = new Poller(\n () => this.updateBalances(),\n BALANCES_TRACKING_INTERVAL,\n );\n }\n\n /**\n * Starts the tracking process.\n */\n start(): void {\n this.#poller.start();\n }\n\n /**\n * Stops the tracking process.\n */\n stop(): void {\n this.#poller.stop();\n }\n\n /**\n * Checks if an account ID is being tracked.\n *\n * @param accountId - The account ID.\n * @returns True if the account is being tracked, false otherwise.\n */\n isTracked(accountId: string) {\n return Object.prototype.hasOwnProperty.call(this.#balances, accountId);\n }\n\n /**\n * Asserts that an account ID is being tracked.\n *\n * @param accountId - The account ID.\n * @throws If the account ID is not being tracked.\n */\n assertBeingTracked(accountId: string) {\n if (!this.isTracked(accountId)) {\n throw new Error(`Account is not being tracked: ${accountId}`);\n }\n }\n\n /**\n * Starts tracking a new account ID. This method has no effect on already tracked\n * accounts.\n *\n * @param accountId - The account ID.\n * @param blockTime - The block time (used when refreshing the account balances).\n */\n track(accountId: string, blockTime: number) {\n // Do not overwrite current info if already being tracked!\n if (!this.isTracked(accountId)) {\n this.#balances[accountId] = {\n lastUpdated: 0,\n blockTime,\n };\n }\n }\n\n /**\n * Stops tracking a tracked account ID.\n *\n * @param accountId - The account ID.\n * @throws If the account ID is not being tracked.\n */\n untrack(accountId: string) {\n this.assertBeingTracked(accountId);\n delete this.#balances[accountId];\n }\n\n /**\n * Update the balances for a tracked account ID.\n *\n * @param accountId - The account ID.\n * @throws If the account ID is not being tracked.\n */\n async updateBalance(accountId: string) {\n this.assertBeingTracked(accountId);\n\n // We check if the balance is outdated (by comparing to the block time associated\n // with this kind of account).\n //\n // This might not be super accurate, but we could probably compute this differently\n // and try to sync with the \"real block time\"!\n const info = this.#balances[accountId];\n if (this.#isBalanceOutdated(info)) {\n await this.#updateBalance(accountId);\n this.#balances[accountId].lastUpdated = Date.now();\n }\n }\n\n /**\n * Update the balances of all tracked accounts (only if the balances\n * is considered outdated).\n */\n async updateBalances() {\n await Promise.allSettled(\n Object.keys(this.#balances).map(async (accountId) => {\n await this.updateBalance(accountId);\n }),\n );\n }\n\n /**\n * Checks if the balance is outdated according to the provided data.\n *\n * @param param - The balance info.\n * @param param.lastUpdated - The last updated timestamp.\n * @param param.blockTime - The block time.\n * @returns True if the balance is outdated, false otherwise.\n */\n #isBalanceOutdated({ lastUpdated, blockTime }: BalanceInfo): boolean {\n return (\n // Never been updated:\n lastUpdated === 0 ||\n // Outdated:\n Date.now() - lastUpdated >= blockTime\n );\n }\n}\n"]}
@@ -4,7 +4,13 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
4
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
5
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
6
  };
7
- var _MultichainBalancesController_instances, _MultichainBalancesController_listMultichainAccounts, _MultichainBalancesController_listAccounts, _MultichainBalancesController_getAccount, _MultichainBalancesController_isNonEvmAccount, _MultichainBalancesController_handleOnAccountAdded, _MultichainBalancesController_handleOnAccountBalancesUpdated, _MultichainBalancesController_handleOnAccountRemoved, _MultichainBalancesController_getBalances, _MultichainBalancesController_getClient;
7
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
+ if (kind === "m") throw new TypeError("Private method is not writable");
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
+ 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");
11
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
+ };
13
+ var _MultichainBalancesController_instances, _MultichainBalancesController_tracker, _MultichainBalancesController_listMultichainAccounts, _MultichainBalancesController_listAccounts, _MultichainBalancesController_getAccount, _MultichainBalancesController_updateBalance, _MultichainBalancesController_isNonEvmAccount, _MultichainBalancesController_handleOnAccountAdded, _MultichainBalancesController_handleOnAccountRemoved, _MultichainBalancesController_getBalances, _MultichainBalancesController_getClient;
8
14
  Object.defineProperty(exports, "__esModule", { value: true });
9
15
  exports.MultichainBalancesController = exports.getDefaultMultichainBalancesControllerState = void 0;
10
16
  const base_controller_1 = require("@metamask/base-controller");
@@ -55,15 +61,28 @@ class MultichainBalancesController extends base_controller_1.BaseController {
55
61
  },
56
62
  });
57
63
  _MultichainBalancesController_instances.add(this);
58
- // Fetch initial balances for all non-EVM accounts
64
+ _MultichainBalancesController_tracker.set(this, void 0);
65
+ __classPrivateFieldSet(this, _MultichainBalancesController_tracker, new _1.BalancesTracker(async (accountId) => await __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_updateBalance).call(this, accountId)), "f");
66
+ // Register all non-EVM accounts into the tracker
59
67
  for (const account of __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_listAccounts).call(this)) {
60
- this.updateBalance(account.id).catch((error) => {
61
- console.error(`Failed to fetch initial balance for account ${account.id}:`, error);
62
- });
68
+ if (__classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_isNonEvmAccount).call(this, account)) {
69
+ __classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").track(account.id, (0, utils_1.getBlockTimeForAccount)(account.type));
70
+ }
63
71
  }
64
72
  this.messagingSystem.subscribe('AccountsController:accountAdded', (account) => __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_handleOnAccountAdded).call(this, account));
65
73
  this.messagingSystem.subscribe('AccountsController:accountRemoved', (account) => __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_handleOnAccountRemoved).call(this, account));
66
- this.messagingSystem.subscribe('AccountsController:accountBalancesUpdated', (balanceUpdate) => __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_handleOnAccountBalancesUpdated).call(this, balanceUpdate));
74
+ }
75
+ /**
76
+ * Starts the polling process.
77
+ */
78
+ start() {
79
+ __classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").start();
80
+ }
81
+ /**
82
+ * Stops the polling process.
83
+ */
84
+ stop() {
85
+ __classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").stop();
67
86
  }
68
87
  /**
69
88
  * Updates the balances of one account. This method doesn't return
@@ -72,24 +91,20 @@ class MultichainBalancesController extends base_controller_1.BaseController {
72
91
  * @param accountId - The account ID.
73
92
  */
74
93
  async updateBalance(accountId) {
75
- try {
76
- const account = __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_getAccount).call(this, accountId);
77
- if (account.metadata.snap) {
78
- const scope = (0, utils_1.getScopeForAccount)(account);
79
- const assetTypes = _1.NETWORK_ASSETS_MAP[scope];
80
- const accountBalance = await __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_getBalances).call(this, account.id, account.metadata.snap.id, assetTypes);
81
- this.update((state) => {
82
- state.balances[accountId] = accountBalance;
83
- });
84
- }
85
- }
86
- catch (error) {
87
- console.error(`Failed to fetch balances for account ${accountId}:`, error);
88
- }
94
+ // NOTE: No need to track the account here, since we start tracking those when
95
+ // the "AccountsController:accountAdded" is fired.
96
+ await __classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").updateBalance(accountId);
97
+ }
98
+ /**
99
+ * Updates the balances of all supported accounts. This method doesn't return
100
+ * anything, but it updates the state of the controller.
101
+ */
102
+ async updateBalances() {
103
+ await __classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").updateBalances();
89
104
  }
90
105
  }
91
106
  exports.MultichainBalancesController = MultichainBalancesController;
92
- _MultichainBalancesController_instances = new WeakSet(), _MultichainBalancesController_listMultichainAccounts = function _MultichainBalancesController_listMultichainAccounts() {
107
+ _MultichainBalancesController_tracker = new WeakMap(), _MultichainBalancesController_instances = new WeakSet(), _MultichainBalancesController_listMultichainAccounts = function _MultichainBalancesController_listMultichainAccounts() {
93
108
  return this.messagingSystem.call('AccountsController:listMultichainAccounts');
94
109
  }, _MultichainBalancesController_listAccounts = function _MultichainBalancesController_listAccounts() {
95
110
  const accounts = __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_listMultichainAccounts).call(this);
@@ -100,6 +115,23 @@ _MultichainBalancesController_instances = new WeakSet(), _MultichainBalancesCont
100
115
  throw new Error(`Unknown account: ${accountId}`);
101
116
  }
102
117
  return account;
118
+ }, _MultichainBalancesController_updateBalance =
119
+ /**
120
+ * Updates the balances of one account. This method doesn't return
121
+ * anything, but it updates the state of the controller.
122
+ *
123
+ * @param accountId - The account ID.
124
+ */
125
+ async function _MultichainBalancesController_updateBalance(accountId) {
126
+ const account = __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_getAccount).call(this, accountId);
127
+ if (account.metadata.snap) {
128
+ const scope = (0, utils_1.getScopeForAccount)(account);
129
+ const assetTypes = _1.NETWORK_ASSETS_MAP[scope];
130
+ const accountBalance = await __classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_getBalances).call(this, account.id, account.metadata.snap.id, assetTypes);
131
+ this.update((state) => {
132
+ state.balances[accountId] = accountBalance;
133
+ });
134
+ }
103
135
  }, _MultichainBalancesController_isNonEvmAccount = function _MultichainBalancesController_isNonEvmAccount(account) {
104
136
  return (!(0, keyring_api_1.isEvmAccountType)(account.type) &&
105
137
  // Non-EVM accounts are backed by a Snap for now
@@ -112,17 +144,17 @@ _MultichainBalancesController_instances = new WeakSet(), _MultichainBalancesCont
112
144
  */
113
145
  async function _MultichainBalancesController_handleOnAccountAdded(account) {
114
146
  if (!__classPrivateFieldGet(this, _MultichainBalancesController_instances, "m", _MultichainBalancesController_isNonEvmAccount).call(this, account)) {
147
+ // Nothing to do here for EVM accounts
115
148
  return;
116
149
  }
117
- await this.updateBalance(account.id);
118
- }, _MultichainBalancesController_handleOnAccountBalancesUpdated = function _MultichainBalancesController_handleOnAccountBalancesUpdated(balanceUpdate) {
119
- this.update((state) => {
120
- Object.entries(balanceUpdate.balances).forEach(([accountId, assetBalances]) => {
121
- if (accountId in state.balances) {
122
- Object.assign(state.balances[accountId], assetBalances);
123
- }
124
- });
125
- });
150
+ __classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").track(account.id, (0, utils_1.getBlockTimeForAccount)(account.type));
151
+ // NOTE: Unfortunately, we cannot update the balance right away here, because
152
+ // messenger's events are running synchronously and fetching the balance is
153
+ // asynchronous.
154
+ // Updating the balance here would resume at some point but the event emitter
155
+ // will not `await` this (so we have no real control "when" the balance will
156
+ // really be updated), see:
157
+ // - https://github.com/MetaMask/core/blob/v213.0.0/packages/accounts-controller/src/AccountsController.ts#L1036-L1039
126
158
  }, _MultichainBalancesController_handleOnAccountRemoved =
127
159
  /**
128
160
  * Handles changes when a new account has been removed.
@@ -130,6 +162,9 @@ async function _MultichainBalancesController_handleOnAccountAdded(account) {
130
162
  * @param accountId - The account ID being removed.
131
163
  */
132
164
  async function _MultichainBalancesController_handleOnAccountRemoved(accountId) {
165
+ if (__classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").isTracked(accountId)) {
166
+ __classPrivateFieldGet(this, _MultichainBalancesController_tracker, "f").untrack(accountId);
167
+ }
133
168
  if (accountId in this.state.balances) {
134
169
  this.update((state) => {
135
170
  delete state.balances[accountId];