@metamask-previews/multichain-network-controller 3.2.4-preview-5b293ee50 → 3.2.4-preview-3866c0ff1

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 (97) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/MultichainNetworkController/{MultichainNetworkController-method-action-types.d.mts → MultichainNetworkController-method-action-types.d.ts} +2 -2
  3. package/dist/MultichainNetworkController/MultichainNetworkController-method-action-types.d.ts.map +1 -0
  4. package/dist/MultichainNetworkController/{MultichainNetworkController-method-action-types.mjs → MultichainNetworkController-method-action-types.js} +1 -1
  5. package/dist/MultichainNetworkController/MultichainNetworkController-method-action-types.js.map +1 -0
  6. package/dist/MultichainNetworkController/{MultichainNetworkController.d.cts → MultichainNetworkController.d.ts} +8 -8
  7. package/dist/MultichainNetworkController/MultichainNetworkController.d.ts.map +1 -0
  8. package/dist/MultichainNetworkController/MultichainNetworkController.js +218 -0
  9. package/dist/MultichainNetworkController/MultichainNetworkController.js.map +1 -0
  10. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.d.ts +7 -0
  11. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.d.ts.map +1 -0
  12. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.js +2 -0
  13. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.js.map +1 -0
  14. package/dist/MultichainNetworkService/{MultichainNetworkService.d.cts → MultichainNetworkService.d.ts} +3 -3
  15. package/dist/MultichainNetworkService/MultichainNetworkService.d.ts.map +1 -0
  16. package/dist/MultichainNetworkService/MultichainNetworkService.js +71 -0
  17. package/dist/MultichainNetworkService/MultichainNetworkService.js.map +1 -0
  18. package/dist/api/{accounts-api.d.mts → accounts-api.d.ts} +4 -4
  19. package/dist/api/accounts-api.d.ts.map +1 -0
  20. package/dist/api/{accounts-api.mjs → accounts-api.js} +4 -4
  21. package/dist/api/accounts-api.js.map +1 -0
  22. package/dist/{constants.d.cts → constants.d.ts} +3 -3
  23. package/dist/constants.d.ts.map +1 -0
  24. package/dist/{constants.mjs → constants.js} +3 -3
  25. package/dist/constants.js.map +1 -0
  26. package/dist/{index.d.cts → index.d.ts} +8 -8
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +5 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/{types.d.cts → types.d.ts} +9 -9
  31. package/dist/types.d.ts.map +1 -0
  32. package/dist/{types.mjs → types.js} +1 -1
  33. package/dist/types.js.map +1 -0
  34. package/dist/{utils.d.mts → utils.d.ts} +5 -5
  35. package/dist/utils.d.ts.map +1 -0
  36. package/dist/{utils.mjs → utils.js} +3 -3
  37. package/dist/utils.js.map +1 -0
  38. package/package.json +14 -18
  39. package/dist/MultichainNetworkController/MultichainNetworkController-method-action-types.cjs +0 -7
  40. package/dist/MultichainNetworkController/MultichainNetworkController-method-action-types.cjs.map +0 -1
  41. package/dist/MultichainNetworkController/MultichainNetworkController-method-action-types.d.cts +0 -30
  42. package/dist/MultichainNetworkController/MultichainNetworkController-method-action-types.d.cts.map +0 -1
  43. package/dist/MultichainNetworkController/MultichainNetworkController-method-action-types.d.mts.map +0 -1
  44. package/dist/MultichainNetworkController/MultichainNetworkController-method-action-types.mjs.map +0 -1
  45. package/dist/MultichainNetworkController/MultichainNetworkController.cjs +0 -208
  46. package/dist/MultichainNetworkController/MultichainNetworkController.cjs.map +0 -1
  47. package/dist/MultichainNetworkController/MultichainNetworkController.d.cts.map +0 -1
  48. package/dist/MultichainNetworkController/MultichainNetworkController.d.mts +0 -42
  49. package/dist/MultichainNetworkController/MultichainNetworkController.d.mts.map +0 -1
  50. package/dist/MultichainNetworkController/MultichainNetworkController.mjs +0 -204
  51. package/dist/MultichainNetworkController/MultichainNetworkController.mjs.map +0 -1
  52. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.cjs +0 -3
  53. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.cjs.map +0 -1
  54. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.d.cts +0 -7
  55. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.d.cts.map +0 -1
  56. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.d.mts +0 -7
  57. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.d.mts.map +0 -1
  58. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.mjs +0 -2
  59. package/dist/MultichainNetworkService/AbstractMultichainNetworkService.mjs.map +0 -1
  60. package/dist/MultichainNetworkService/MultichainNetworkService.cjs +0 -89
  61. package/dist/MultichainNetworkService/MultichainNetworkService.cjs.map +0 -1
  62. package/dist/MultichainNetworkService/MultichainNetworkService.d.cts.map +0 -1
  63. package/dist/MultichainNetworkService/MultichainNetworkService.d.mts +0 -22
  64. package/dist/MultichainNetworkService/MultichainNetworkService.d.mts.map +0 -1
  65. package/dist/MultichainNetworkService/MultichainNetworkService.mjs +0 -86
  66. package/dist/MultichainNetworkService/MultichainNetworkService.mjs.map +0 -1
  67. package/dist/api/accounts-api.cjs +0 -90
  68. package/dist/api/accounts-api.cjs.map +0 -1
  69. package/dist/api/accounts-api.d.cts +0 -55
  70. package/dist/api/accounts-api.d.cts.map +0 -1
  71. package/dist/api/accounts-api.d.mts.map +0 -1
  72. package/dist/api/accounts-api.mjs.map +0 -1
  73. package/dist/constants.cjs +0 -222
  74. package/dist/constants.cjs.map +0 -1
  75. package/dist/constants.d.cts.map +0 -1
  76. package/dist/constants.d.mts +0 -79
  77. package/dist/constants.d.mts.map +0 -1
  78. package/dist/constants.mjs.map +0 -1
  79. package/dist/index.cjs +0 -19
  80. package/dist/index.cjs.map +0 -1
  81. package/dist/index.d.cts.map +0 -1
  82. package/dist/index.d.mts +0 -8
  83. package/dist/index.d.mts.map +0 -1
  84. package/dist/index.mjs +0 -5
  85. package/dist/index.mjs.map +0 -1
  86. package/dist/types.cjs +0 -5
  87. package/dist/types.cjs.map +0 -1
  88. package/dist/types.d.cts.map +0 -1
  89. package/dist/types.d.mts +0 -118
  90. package/dist/types.d.mts.map +0 -1
  91. package/dist/types.mjs.map +0 -1
  92. package/dist/utils.cjs +0 -106
  93. package/dist/utils.cjs.map +0 -1
  94. package/dist/utils.d.cts +0 -63
  95. package/dist/utils.d.cts.map +0 -1
  96. package/dist/utils.d.mts.map +0 -1
  97. package/dist/utils.mjs.map +0 -1
@@ -1,204 +0,0 @@
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 _MultichainNetworkController_instances, _MultichainNetworkController_networkService, _MultichainNetworkController_setActiveEvmNetwork, _MultichainNetworkController_setActiveNonEvmNetwork, _MultichainNetworkController_removeEvmNetwork, _MultichainNetworkController_removeNonEvmNetwork, _MultichainNetworkController_handleOnSelectedAccountChange, _MultichainNetworkController_subscribeToMessageEvents, _MultichainNetworkController_registerMessageHandlers;
13
- import { BaseController } from "@metamask/base-controller";
14
- import { isEvmAccountType } from "@metamask/keyring-api";
15
- import { isCaipChainId } from "@metamask/utils";
16
- import { toAllowedCaipAccountIds, toActiveNetworksByAddress } from "../api/accounts-api.mjs";
17
- import { AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS, MULTICHAIN_NETWORK_CONTROLLER_METADATA, getDefaultMultichainNetworkControllerState } from "../constants.mjs";
18
- import { MULTICHAIN_NETWORK_CONTROLLER_NAME } from "../types.mjs";
19
- import { checkIfSupportedCaipChainId, getChainIdForNonEvm, convertEvmCaipToHexChainId, isEvmCaipChainId } from "../utils.mjs";
20
- const MESSENGER_EXPOSED_METHODS = [
21
- 'setActiveNetwork',
22
- 'getNetworksWithTransactionActivityByAccounts',
23
- ];
24
- /**
25
- * The MultichainNetworkController is responsible for fetching and caching account
26
- * balances.
27
- */
28
- export class MultichainNetworkController extends BaseController {
29
- constructor({ messenger, state, networkService, }) {
30
- super({
31
- messenger,
32
- name: MULTICHAIN_NETWORK_CONTROLLER_NAME,
33
- metadata: MULTICHAIN_NETWORK_CONTROLLER_METADATA,
34
- state: {
35
- ...getDefaultMultichainNetworkControllerState(),
36
- ...state,
37
- // We can keep the current network as a hardcoded value
38
- // since it is not expected to add/remove networks yet.
39
- multichainNetworkConfigurationsByChainId: AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,
40
- },
41
- });
42
- _MultichainNetworkController_instances.add(this);
43
- _MultichainNetworkController_networkService.set(this, void 0);
44
- __classPrivateFieldSet(this, _MultichainNetworkController_networkService, networkService, "f");
45
- __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_subscribeToMessageEvents).call(this);
46
- __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_registerMessageHandlers).call(this);
47
- }
48
- /**
49
- * Sets the active network.
50
- *
51
- * @param id - The non-EVM Caip chain ID or EVM client ID of the network to set active.
52
- * @returns - A promise that resolves when the network is set active.
53
- */
54
- async setActiveNetwork(id) {
55
- if (isCaipChainId(id)) {
56
- const isSupportedCaipChainId = checkIfSupportedCaipChainId(id);
57
- if (!isSupportedCaipChainId) {
58
- throw new Error(`Unsupported Caip chain ID: ${String(id)}`);
59
- }
60
- return __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_setActiveNonEvmNetwork).call(this, id);
61
- }
62
- return await __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_setActiveEvmNetwork).call(this, id);
63
- }
64
- /**
65
- * Returns the active networks for the available EVM addresses (non-EVM networks will be supported in the future).
66
- * Fetches the data from the API and caches it in state.
67
- *
68
- * @returns A promise that resolves to the active networks for the available addresses
69
- */
70
- async getNetworksWithTransactionActivityByAccounts() {
71
- // TODO: We are filtering out non-EVN accounts for now
72
- // Support for non-EVM networks will be added in the coming weeks
73
- const evmAccounts = this.messenger
74
- .call('AccountsController:listMultichainAccounts')
75
- .filter((account) => isEvmAccountType(account.type));
76
- if (!evmAccounts || evmAccounts.length === 0) {
77
- return this.state.networksWithTransactionActivity;
78
- }
79
- const formattedAccounts = evmAccounts
80
- .map((account) => toAllowedCaipAccountIds(account))
81
- .flat();
82
- const activeNetworks = await __classPrivateFieldGet(this, _MultichainNetworkController_networkService, "f").fetchNetworkActivity(formattedAccounts);
83
- const formattedNetworks = toActiveNetworksByAddress(activeNetworks);
84
- this.update((state) => {
85
- state.networksWithTransactionActivity = formattedNetworks;
86
- });
87
- return this.state.networksWithTransactionActivity;
88
- }
89
- /**
90
- * Removes a network from the list of networks.
91
- * It only supports EVM networks.
92
- *
93
- * @param chainId - The chain ID of the network to remove.
94
- * @returns - A promise that resolves when the network is removed.
95
- */
96
- async removeNetwork(chainId) {
97
- if (isEvmCaipChainId(chainId)) {
98
- return await __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_removeEvmNetwork).call(this, chainId);
99
- }
100
- return __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_removeNonEvmNetwork).call(this, chainId);
101
- }
102
- }
103
- _MultichainNetworkController_networkService = new WeakMap(), _MultichainNetworkController_instances = new WeakSet(), _MultichainNetworkController_setActiveEvmNetwork =
104
- /**
105
- * Sets the active EVM network.
106
- *
107
- * @param id - The client ID of the EVM network to set active.
108
- */
109
- async function _MultichainNetworkController_setActiveEvmNetwork(id) {
110
- const { selectedNetworkClientId } = this.messenger.call('NetworkController:getState');
111
- const shouldSetEvmActive = !this.state.isEvmSelected;
112
- const shouldNotifyNetworkChange = id !== selectedNetworkClientId;
113
- // No changes needed if EVM is active and network is already selected
114
- if (!shouldSetEvmActive && !shouldNotifyNetworkChange) {
115
- return;
116
- }
117
- // Update EVM selection state if needed
118
- if (shouldSetEvmActive) {
119
- this.update((state) => {
120
- state.isEvmSelected = true;
121
- });
122
- }
123
- // Only notify the network controller if the selected evm network is different
124
- if (shouldNotifyNetworkChange) {
125
- await this.messenger.call('NetworkController:setActiveNetwork', id);
126
- }
127
- // Only publish the networkDidChange event if either the EVM network is different or we're switching between EVM and non-EVM networks
128
- if (shouldSetEvmActive || shouldNotifyNetworkChange) {
129
- this.messenger.publish('MultichainNetworkController:networkDidChange', id);
130
- }
131
- }, _MultichainNetworkController_setActiveNonEvmNetwork = function _MultichainNetworkController_setActiveNonEvmNetwork(id) {
132
- if (id === this.state.selectedMultichainNetworkChainId &&
133
- !this.state.isEvmSelected) {
134
- // Same non-EVM network is already selected, no need to update
135
- return;
136
- }
137
- this.update((state) => {
138
- state.selectedMultichainNetworkChainId = id;
139
- state.isEvmSelected = false;
140
- });
141
- // Notify listeners that the network changed
142
- this.messenger.publish('MultichainNetworkController:networkDidChange', id);
143
- }, _MultichainNetworkController_removeEvmNetwork =
144
- /**
145
- * Removes an EVM network from the list of networks.
146
- * This method re-directs the request to the network-controller.
147
- *
148
- * @param chainId - The chain ID of the network to remove.
149
- * @returns - A promise that resolves when the network is removed.
150
- */
151
- async function _MultichainNetworkController_removeEvmNetwork(chainId) {
152
- const hexChainId = convertEvmCaipToHexChainId(chainId);
153
- const selectedChainId = this.messenger.call('NetworkController:getSelectedChainId');
154
- if (selectedChainId === hexChainId) {
155
- // We prevent removing the currently selected network.
156
- if (this.state.isEvmSelected) {
157
- throw new Error('Cannot remove the currently selected network');
158
- }
159
- // If a non-EVM network is selected, we can delete the currently EVM selected network, but
160
- // we automatically switch to EVM mainnet.
161
- const ethereumMainnetHexChainId = '0x1'; // TODO: Should probably be a constant.
162
- const clientId = this.messenger.call('NetworkController:findNetworkClientIdByChainId', ethereumMainnetHexChainId);
163
- await this.messenger.call('NetworkController:setActiveNetwork', clientId);
164
- }
165
- this.messenger.call('NetworkController:removeNetwork', hexChainId);
166
- }, _MultichainNetworkController_removeNonEvmNetwork = function _MultichainNetworkController_removeNonEvmNetwork(_chainId) {
167
- throw new Error('Removal of non-EVM networks is not supported');
168
- }, _MultichainNetworkController_handleOnSelectedAccountChange = function _MultichainNetworkController_handleOnSelectedAccountChange(account) {
169
- const { type: accountType, scopes } = account;
170
- const isEvmAccount = isEvmAccountType(accountType);
171
- // Handle switching to EVM network
172
- if (isEvmAccount) {
173
- if (this.state.isEvmSelected) {
174
- // No need to update if already on evm network
175
- return;
176
- }
177
- // Make EVM network active
178
- this.update((state) => {
179
- state.isEvmSelected = true;
180
- });
181
- return;
182
- }
183
- // Handle switching to non-EVM network
184
- if (scopes.includes(this.state.selectedMultichainNetworkChainId)) {
185
- // No need to update if the account's scope includes the active network
186
- this.update((state) => {
187
- state.isEvmSelected = false;
188
- });
189
- return;
190
- }
191
- const nonEvmChainId = getChainIdForNonEvm(scopes);
192
- this.update((state) => {
193
- state.selectedMultichainNetworkChainId = nonEvmChainId;
194
- state.isEvmSelected = false;
195
- });
196
- // No need to publish NetworkController:setActiveNetwork because EVM accounts falls back to use the last selected EVM network
197
- // DO NOT publish MultichainNetworkController:networkDidChange to prevent circular listener loops
198
- }, _MultichainNetworkController_subscribeToMessageEvents = function _MultichainNetworkController_subscribeToMessageEvents() {
199
- // Handle network switch when account is changed
200
- this.messenger.subscribe('AccountsController:selectedAccountChange', (account) => __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_handleOnSelectedAccountChange).call(this, account));
201
- }, _MultichainNetworkController_registerMessageHandlers = function _MultichainNetworkController_registerMessageHandlers() {
202
- this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
203
- };
204
- //# sourceMappingURL=MultichainNetworkController.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MultichainNetworkController.mjs","sourceRoot":"","sources":["../../src/MultichainNetworkController/MultichainNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseController } from '@metamask/base-controller';\nimport { isEvmAccountType } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport { isCaipChainId } from '@metamask/utils';\nimport type { CaipChainId } from '@metamask/utils';\n\nimport {\n toAllowedCaipAccountIds,\n toActiveNetworksByAddress,\n} from '../api/accounts-api.js';\nimport type { ActiveNetworksByAddress } from '../api/accounts-api.js';\nimport {\n AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,\n MULTICHAIN_NETWORK_CONTROLLER_METADATA,\n getDefaultMultichainNetworkControllerState,\n} from '../constants.js';\nimport type { AbstractMultichainNetworkService } from '../MultichainNetworkService/AbstractMultichainNetworkService.js';\nimport { MULTICHAIN_NETWORK_CONTROLLER_NAME } from '../types.js';\nimport type {\n MultichainNetworkControllerState,\n MultichainNetworkControllerMessenger,\n SupportedCaipChainId,\n} from '../types.js';\nimport {\n checkIfSupportedCaipChainId,\n getChainIdForNonEvm,\n convertEvmCaipToHexChainId,\n isEvmCaipChainId,\n} from '../utils.js';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'setActiveNetwork',\n 'getNetworksWithTransactionActivityByAccounts',\n] as const;\n\n/**\n * The MultichainNetworkController is responsible for fetching and caching account\n * balances.\n */\nexport class MultichainNetworkController extends BaseController<\n typeof MULTICHAIN_NETWORK_CONTROLLER_NAME,\n MultichainNetworkControllerState,\n MultichainNetworkControllerMessenger\n> {\n readonly #networkService: AbstractMultichainNetworkService;\n\n constructor({\n messenger,\n state,\n networkService,\n }: {\n messenger: MultichainNetworkControllerMessenger;\n state?: Omit<\n Partial<MultichainNetworkControllerState>,\n 'multichainNetworkConfigurationsByChainId'\n >;\n networkService: AbstractMultichainNetworkService;\n }) {\n super({\n messenger,\n name: MULTICHAIN_NETWORK_CONTROLLER_NAME,\n metadata: MULTICHAIN_NETWORK_CONTROLLER_METADATA,\n state: {\n ...getDefaultMultichainNetworkControllerState(),\n ...state,\n // We can keep the current network as a hardcoded value\n // since it is not expected to add/remove networks yet.\n multichainNetworkConfigurationsByChainId:\n AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,\n },\n });\n\n this.#networkService = networkService;\n this.#subscribeToMessageEvents();\n this.#registerMessageHandlers();\n }\n\n /**\n * Sets the active EVM network.\n *\n * @param id - The client ID of the EVM network to set active.\n */\n async #setActiveEvmNetwork(id: NetworkClientId): Promise<void> {\n const { selectedNetworkClientId } = this.messenger.call(\n 'NetworkController:getState',\n );\n\n const shouldSetEvmActive = !this.state.isEvmSelected;\n const shouldNotifyNetworkChange = id !== selectedNetworkClientId;\n\n // No changes needed if EVM is active and network is already selected\n if (!shouldSetEvmActive && !shouldNotifyNetworkChange) {\n return;\n }\n\n // Update EVM selection state if needed\n if (shouldSetEvmActive) {\n this.update((state) => {\n state.isEvmSelected = true;\n });\n }\n\n // Only notify the network controller if the selected evm network is different\n if (shouldNotifyNetworkChange) {\n await this.messenger.call('NetworkController:setActiveNetwork', id);\n }\n\n // Only publish the networkDidChange event if either the EVM network is different or we're switching between EVM and non-EVM networks\n if (shouldSetEvmActive || shouldNotifyNetworkChange) {\n this.messenger.publish(\n 'MultichainNetworkController:networkDidChange',\n id,\n );\n }\n }\n\n /**\n * Sets the active non-EVM network.\n *\n * @param id - The chain ID of the non-EVM network to set active.\n */\n #setActiveNonEvmNetwork(id: SupportedCaipChainId): void {\n if (\n id === this.state.selectedMultichainNetworkChainId &&\n !this.state.isEvmSelected\n ) {\n // Same non-EVM network is already selected, no need to update\n return;\n }\n\n this.update((state) => {\n state.selectedMultichainNetworkChainId = id;\n state.isEvmSelected = false;\n });\n\n // Notify listeners that the network changed\n this.messenger.publish('MultichainNetworkController:networkDidChange', id);\n }\n\n /**\n * Sets the active network.\n *\n * @param id - The non-EVM Caip chain ID or EVM client ID of the network to set active.\n * @returns - A promise that resolves when the network is set active.\n */\n async setActiveNetwork(\n id: SupportedCaipChainId | NetworkClientId,\n ): Promise<void> {\n if (isCaipChainId(id)) {\n const isSupportedCaipChainId = checkIfSupportedCaipChainId(id);\n if (!isSupportedCaipChainId) {\n throw new Error(`Unsupported Caip chain ID: ${String(id)}`);\n }\n return this.#setActiveNonEvmNetwork(id);\n }\n\n return await this.#setActiveEvmNetwork(id);\n }\n\n /**\n * Returns the active networks for the available EVM addresses (non-EVM networks will be supported in the future).\n * Fetches the data from the API and caches it in state.\n *\n * @returns A promise that resolves to the active networks for the available addresses\n */\n async getNetworksWithTransactionActivityByAccounts(): Promise<ActiveNetworksByAddress> {\n // TODO: We are filtering out non-EVN accounts for now\n // Support for non-EVM networks will be added in the coming weeks\n const evmAccounts = this.messenger\n .call('AccountsController:listMultichainAccounts')\n .filter((account) => isEvmAccountType(account.type));\n\n if (!evmAccounts || evmAccounts.length === 0) {\n return this.state.networksWithTransactionActivity;\n }\n\n const formattedAccounts = evmAccounts\n .map((account: InternalAccount) => toAllowedCaipAccountIds(account))\n .flat();\n\n const activeNetworks =\n await this.#networkService.fetchNetworkActivity(formattedAccounts);\n const formattedNetworks = toActiveNetworksByAddress(activeNetworks);\n\n this.update((state) => {\n state.networksWithTransactionActivity = formattedNetworks;\n });\n\n return this.state.networksWithTransactionActivity;\n }\n\n /**\n * Removes an EVM network from the list of networks.\n * This method re-directs the request to the network-controller.\n *\n * @param chainId - The chain ID of the network to remove.\n * @returns - A promise that resolves when the network is removed.\n */\n async #removeEvmNetwork(chainId: CaipChainId): Promise<void> {\n const hexChainId = convertEvmCaipToHexChainId(chainId);\n const selectedChainId = this.messenger.call(\n 'NetworkController:getSelectedChainId',\n );\n\n if (selectedChainId === hexChainId) {\n // We prevent removing the currently selected network.\n if (this.state.isEvmSelected) {\n throw new Error('Cannot remove the currently selected network');\n }\n\n // If a non-EVM network is selected, we can delete the currently EVM selected network, but\n // we automatically switch to EVM mainnet.\n const ethereumMainnetHexChainId = '0x1'; // TODO: Should probably be a constant.\n const clientId = this.messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n ethereumMainnetHexChainId,\n );\n\n await this.messenger.call('NetworkController:setActiveNetwork', clientId);\n }\n\n this.messenger.call('NetworkController:removeNetwork', hexChainId);\n }\n\n /**\n * Removes a non-EVM network from the list of networks.\n * This method is not supported and throws an error.\n *\n * @param _chainId - The chain ID of the network to remove.\n * @throws - An error indicating that removal of non-EVM networks is not supported.\n */\n #removeNonEvmNetwork(_chainId: CaipChainId): void {\n throw new Error('Removal of non-EVM networks is not supported');\n }\n\n /**\n * Removes a network from the list of networks.\n * It only supports EVM networks.\n *\n * @param chainId - The chain ID of the network to remove.\n * @returns - A promise that resolves when the network is removed.\n */\n async removeNetwork(chainId: CaipChainId): Promise<void> {\n if (isEvmCaipChainId(chainId)) {\n return await this.#removeEvmNetwork(chainId);\n }\n\n return this.#removeNonEvmNetwork(chainId);\n }\n\n /**\n * Handles switching between EVM and non-EVM networks when an account is changed\n *\n * @param account - The account that was changed\n */\n #handleOnSelectedAccountChange(account: InternalAccount): void {\n const { type: accountType, scopes } = account;\n const isEvmAccount = isEvmAccountType(accountType);\n\n // Handle switching to EVM network\n if (isEvmAccount) {\n if (this.state.isEvmSelected) {\n // No need to update if already on evm network\n return;\n }\n\n // Make EVM network active\n this.update((state) => {\n state.isEvmSelected = true;\n });\n\n return;\n }\n\n // Handle switching to non-EVM network\n if (scopes.includes(this.state.selectedMultichainNetworkChainId)) {\n // No need to update if the account's scope includes the active network\n this.update((state) => {\n state.isEvmSelected = false;\n });\n return;\n }\n\n const nonEvmChainId = getChainIdForNonEvm(scopes);\n this.update((state) => {\n state.selectedMultichainNetworkChainId = nonEvmChainId;\n state.isEvmSelected = false;\n });\n\n // No need to publish NetworkController:setActiveNetwork because EVM accounts falls back to use the last selected EVM network\n // DO NOT publish MultichainNetworkController:networkDidChange to prevent circular listener loops\n }\n\n /**\n * Subscribes to message events.\n */\n #subscribeToMessageEvents(): void {\n // Handle network switch when account is changed\n this.messenger.subscribe(\n 'AccountsController:selectedAccountChange',\n (account) => this.#handleOnSelectedAccountChange(account),\n );\n }\n\n /**\n * Registers message handlers.\n */\n #registerMessageHandlers(): void {\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n }\n}\n"]}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=AbstractMultichainNetworkService.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractMultichainNetworkService.cjs","sourceRoot":"","sources":["../../src/MultichainNetworkService/AbstractMultichainNetworkService.ts"],"names":[],"mappings":"","sourcesContent":["import type { PublicInterface } from '@metamask/utils';\n\nimport type { MultichainNetworkService } from './MultichainNetworkService.js';\n\n/**\n * A service object which is responsible for fetching network activity data.\n */\nexport type AbstractMultichainNetworkService =\n PublicInterface<MultichainNetworkService>;\n"]}
@@ -1,7 +0,0 @@
1
- import type { PublicInterface } from "@metamask/utils";
2
- import type { MultichainNetworkService } from "./MultichainNetworkService.cjs";
3
- /**
4
- * A service object which is responsible for fetching network activity data.
5
- */
6
- export type AbstractMultichainNetworkService = PublicInterface<MultichainNetworkService>;
7
- //# sourceMappingURL=AbstractMultichainNetworkService.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractMultichainNetworkService.d.cts","sourceRoot":"","sources":["../../src/MultichainNetworkService/AbstractMultichainNetworkService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB;AAEvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,uCAAsC;AAE9E;;GAEG;AACH,MAAM,MAAM,gCAAgC,GAC1C,eAAe,CAAC,wBAAwB,CAAC,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { PublicInterface } from "@metamask/utils";
2
- import type { MultichainNetworkService } from "./MultichainNetworkService.mjs";
3
- /**
4
- * A service object which is responsible for fetching network activity data.
5
- */
6
- export type AbstractMultichainNetworkService = PublicInterface<MultichainNetworkService>;
7
- //# sourceMappingURL=AbstractMultichainNetworkService.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractMultichainNetworkService.d.mts","sourceRoot":"","sources":["../../src/MultichainNetworkService/AbstractMultichainNetworkService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB;AAEvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,uCAAsC;AAE9E;;GAEG;AACH,MAAM,MAAM,gCAAgC,GAC1C,eAAe,CAAC,wBAAwB,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=AbstractMultichainNetworkService.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractMultichainNetworkService.mjs","sourceRoot":"","sources":["../../src/MultichainNetworkService/AbstractMultichainNetworkService.ts"],"names":[],"mappings":"","sourcesContent":["import type { PublicInterface } from '@metamask/utils';\n\nimport type { MultichainNetworkService } from './MultichainNetworkService.js';\n\n/**\n * A service object which is responsible for fetching network activity data.\n */\nexport type AbstractMultichainNetworkService =\n PublicInterface<MultichainNetworkService>;\n"]}
@@ -1,89 +0,0 @@
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 _MultichainNetworkService_instances, _MultichainNetworkService_fetch, _MultichainNetworkService_batchSize, _MultichainNetworkService_fetchNetworkActivityBatch;
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.MultichainNetworkService = void 0;
16
- const superstruct_1 = require("@metamask/superstruct");
17
- const lodash_1 = require("lodash");
18
- const accounts_api_js_1 = require("../api/accounts-api.cjs");
19
- /**
20
- * Service responsible for fetching network activity data from the API.
21
- */
22
- class MultichainNetworkService {
23
- constructor({ fetch: fetchFunction, batchSize, }) {
24
- _MultichainNetworkService_instances.add(this);
25
- _MultichainNetworkService_fetch.set(this, void 0);
26
- _MultichainNetworkService_batchSize.set(this, void 0);
27
- __classPrivateFieldSet(this, _MultichainNetworkService_fetch, fetchFunction, "f");
28
- __classPrivateFieldSet(this, _MultichainNetworkService_batchSize, batchSize ?? 20, "f");
29
- }
30
- /**
31
- * Fetches active networks for the given account IDs.
32
- * Automatically handles batching requests to comply with URL length limitations.
33
- *
34
- * @param accountIds - Array of CAIP-10 account IDs to fetch activity for.
35
- * @returns Promise resolving to the combined active networks response.
36
- * @throws Error if the response format is invalid or the request fails.
37
- */
38
- async fetchNetworkActivity(accountIds) {
39
- if (accountIds.length === 0) {
40
- return { activeNetworks: [] };
41
- }
42
- if (accountIds.length <= __classPrivateFieldGet(this, _MultichainNetworkService_batchSize, "f")) {
43
- return __classPrivateFieldGet(this, _MultichainNetworkService_instances, "m", _MultichainNetworkService_fetchNetworkActivityBatch).call(this, accountIds);
44
- }
45
- const batches = (0, lodash_1.chunk)(accountIds, __classPrivateFieldGet(this, _MultichainNetworkService_batchSize, "f"));
46
- const batchResults = await Promise.all(batches.map((batch) => __classPrivateFieldGet(this, _MultichainNetworkService_instances, "m", _MultichainNetworkService_fetchNetworkActivityBatch).call(this, batch)));
47
- const combinedResponse = {
48
- activeNetworks: batchResults.flatMap((response) => response.activeNetworks),
49
- };
50
- return combinedResponse;
51
- }
52
- }
53
- exports.MultichainNetworkService = MultichainNetworkService;
54
- _MultichainNetworkService_fetch = new WeakMap(), _MultichainNetworkService_batchSize = new WeakMap(), _MultichainNetworkService_instances = new WeakSet(), _MultichainNetworkService_fetchNetworkActivityBatch =
55
- /**
56
- * Internal method to fetch a single batch of account IDs.
57
- *
58
- * @param accountIds - Batch of account IDs to fetch
59
- * @returns Promise resolving to the active networks response for this batch
60
- * @throws Error if the response format is invalid or the request fails
61
- */
62
- async function _MultichainNetworkService_fetchNetworkActivityBatch(accountIds) {
63
- try {
64
- const url = (0, accounts_api_js_1.buildActiveNetworksUrl)(accountIds);
65
- const response = await __classPrivateFieldGet(this, _MultichainNetworkService_fetch, "f").call(this, url.toString(), {
66
- method: 'GET',
67
- headers: {
68
- [accounts_api_js_1.MULTICHAIN_ACCOUNTS_CLIENT_HEADER]: accounts_api_js_1.MULTICHAIN_ACCOUNTS_CLIENT_ID,
69
- Accept: 'application/json',
70
- },
71
- });
72
- if (!response.ok) {
73
- throw new Error(`HTTP error! status: ${response.status}`);
74
- }
75
- const data = await response.json();
76
- (0, superstruct_1.assert)(data, accounts_api_js_1.ActiveNetworksResponseStruct);
77
- return data;
78
- }
79
- catch (error) {
80
- if (error instanceof Error) {
81
- if (error.name === 'AbortError') {
82
- throw new Error('Request timeout: Failed to fetch active networks');
83
- }
84
- throw error;
85
- }
86
- throw new Error(`Failed to fetch active networks: ${String(error)}`);
87
- }
88
- };
89
- //# sourceMappingURL=MultichainNetworkService.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MultichainNetworkService.cjs","sourceRoot":"","sources":["../../src/MultichainNetworkService/MultichainNetworkService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uDAA+C;AAE/C,mCAA+B;AAE/B,6DAKgC;AAGhC;;GAEG;AACH,MAAa,wBAAwB;IAKnC,YAAY,EACV,KAAK,EAAE,aAAa,EACpB,SAAS,GAIV;;QAVQ,kDAAqB;QAErB,sDAAmB;QAS1B,uBAAA,IAAI,mCAAU,aAAa,MAAA,CAAC;QAC5B,uBAAA,IAAI,uCAAc,SAAS,IAAI,EAAE,MAAA,CAAC;IACpC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,oBAAoB,CACxB,UAA2B;QAE3B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,IAAI,uBAAA,IAAI,2CAAW,EAAE,CAAC;YACzC,OAAO,uBAAA,IAAI,gGAA2B,MAA/B,IAAI,EAA4B,UAAU,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,cAAK,EAAC,UAAU,EAAE,uBAAA,IAAI,2CAAW,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAA,IAAI,gGAA2B,MAA/B,IAAI,EAA4B,KAAK,CAAC,CAAC,CAC/D,CAAC;QAEF,MAAM,gBAAgB,GAA2B;YAC/C,cAAc,EAAE,YAAY,CAAC,OAAO,CAClC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CACtC;SACF,CAAC;QAEF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;CA0CF;AAzFD,4DAyFC;;AAxCC;;;;;;GAMG;AACH,KAAK,8DACH,UAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,wCAAsB,EAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAG,MAAM,uBAAA,IAAI,uCAAO,MAAX,IAAI,EAAQ,GAAG,CAAC,QAAQ,EAAE,EAAE;YACjD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,CAAC,mDAAiC,CAAC,EAAE,+CAA6B;gBAClE,MAAM,EAAE,kBAAkB;aAC3B;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE5C,IAAA,oBAAM,EAAC,IAAI,EAAE,8CAA4B,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC","sourcesContent":["import { assert } from '@metamask/superstruct';\nimport type { CaipAccountId } from '@metamask/utils';\nimport { chunk } from 'lodash';\n\nimport {\n ActiveNetworksResponseStruct,\n buildActiveNetworksUrl,\n MULTICHAIN_ACCOUNTS_CLIENT_HEADER,\n MULTICHAIN_ACCOUNTS_CLIENT_ID,\n} from '../api/accounts-api.js';\nimport type { ActiveNetworksResponse } from '../api/accounts-api.js';\n\n/**\n * Service responsible for fetching network activity data from the API.\n */\nexport class MultichainNetworkService {\n readonly #fetch: typeof fetch;\n\n readonly #batchSize: number;\n\n constructor({\n fetch: fetchFunction,\n batchSize,\n }: {\n fetch: typeof fetch;\n batchSize?: number;\n }) {\n this.#fetch = fetchFunction;\n this.#batchSize = batchSize ?? 20;\n }\n\n /**\n * Fetches active networks for the given account IDs.\n * Automatically handles batching requests to comply with URL length limitations.\n *\n * @param accountIds - Array of CAIP-10 account IDs to fetch activity for.\n * @returns Promise resolving to the combined active networks response.\n * @throws Error if the response format is invalid or the request fails.\n */\n async fetchNetworkActivity(\n accountIds: CaipAccountId[],\n ): Promise<ActiveNetworksResponse> {\n if (accountIds.length === 0) {\n return { activeNetworks: [] };\n }\n\n if (accountIds.length <= this.#batchSize) {\n return this.#fetchNetworkActivityBatch(accountIds);\n }\n\n const batches = chunk(accountIds, this.#batchSize);\n const batchResults = await Promise.all(\n batches.map((batch) => this.#fetchNetworkActivityBatch(batch)),\n );\n\n const combinedResponse: ActiveNetworksResponse = {\n activeNetworks: batchResults.flatMap(\n (response) => response.activeNetworks,\n ),\n };\n\n return combinedResponse;\n }\n\n /**\n * Internal method to fetch a single batch of account IDs.\n *\n * @param accountIds - Batch of account IDs to fetch\n * @returns Promise resolving to the active networks response for this batch\n * @throws Error if the response format is invalid or the request fails\n */\n async #fetchNetworkActivityBatch(\n accountIds: CaipAccountId[],\n ): Promise<ActiveNetworksResponse> {\n try {\n const url = buildActiveNetworksUrl(accountIds);\n\n const response = await this.#fetch(url.toString(), {\n method: 'GET',\n headers: {\n [MULTICHAIN_ACCOUNTS_CLIENT_HEADER]: MULTICHAIN_ACCOUNTS_CLIENT_ID,\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data: unknown = await response.json();\n\n assert(data, ActiveNetworksResponseStruct);\n return data;\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new Error('Request timeout: Failed to fetch active networks');\n }\n throw error;\n }\n\n throw new Error(`Failed to fetch active networks: ${String(error)}`);\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MultichainNetworkService.d.cts","sourceRoot":"","sources":["../../src/MultichainNetworkService/MultichainNetworkService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB;AASrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,gCAA+B;AAErE;;GAEG;AACH,qBAAa,wBAAwB;;gBAKvB,EACV,KAAK,EAAE,aAAa,EACpB,SAAS,GACV,EAAE;QACD,KAAK,EAAE,OAAO,KAAK,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;IAKD;;;;;;;OAOG;IACG,oBAAoB,CACxB,UAAU,EAAE,aAAa,EAAE,GAC1B,OAAO,CAAC,sBAAsB,CAAC;CA+DnC"}
@@ -1,22 +0,0 @@
1
- import type { CaipAccountId } from "@metamask/utils";
2
- import type { ActiveNetworksResponse } from "../api/accounts-api.mjs";
3
- /**
4
- * Service responsible for fetching network activity data from the API.
5
- */
6
- export declare class MultichainNetworkService {
7
- #private;
8
- constructor({ fetch: fetchFunction, batchSize, }: {
9
- fetch: typeof fetch;
10
- batchSize?: number;
11
- });
12
- /**
13
- * Fetches active networks for the given account IDs.
14
- * Automatically handles batching requests to comply with URL length limitations.
15
- *
16
- * @param accountIds - Array of CAIP-10 account IDs to fetch activity for.
17
- * @returns Promise resolving to the combined active networks response.
18
- * @throws Error if the response format is invalid or the request fails.
19
- */
20
- fetchNetworkActivity(accountIds: CaipAccountId[]): Promise<ActiveNetworksResponse>;
21
- }
22
- //# sourceMappingURL=MultichainNetworkService.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MultichainNetworkService.d.mts","sourceRoot":"","sources":["../../src/MultichainNetworkService/MultichainNetworkService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB;AASrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,gCAA+B;AAErE;;GAEG;AACH,qBAAa,wBAAwB;;gBAKvB,EACV,KAAK,EAAE,aAAa,EACpB,SAAS,GACV,EAAE;QACD,KAAK,EAAE,OAAO,KAAK,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB;IAKD;;;;;;;OAOG;IACG,oBAAoB,CACxB,UAAU,EAAE,aAAa,EAAE,GAC1B,OAAO,CAAC,sBAAsB,CAAC;CA+DnC"}
@@ -1,86 +0,0 @@
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 _MultichainNetworkService_instances, _MultichainNetworkService_fetch, _MultichainNetworkService_batchSize, _MultichainNetworkService_fetchNetworkActivityBatch;
13
- import { assert } from "@metamask/superstruct";
14
- import $lodash from "lodash";
15
- const { chunk } = $lodash;
16
- import { ActiveNetworksResponseStruct, buildActiveNetworksUrl, MULTICHAIN_ACCOUNTS_CLIENT_HEADER, MULTICHAIN_ACCOUNTS_CLIENT_ID } from "../api/accounts-api.mjs";
17
- /**
18
- * Service responsible for fetching network activity data from the API.
19
- */
20
- export class MultichainNetworkService {
21
- constructor({ fetch: fetchFunction, batchSize, }) {
22
- _MultichainNetworkService_instances.add(this);
23
- _MultichainNetworkService_fetch.set(this, void 0);
24
- _MultichainNetworkService_batchSize.set(this, void 0);
25
- __classPrivateFieldSet(this, _MultichainNetworkService_fetch, fetchFunction, "f");
26
- __classPrivateFieldSet(this, _MultichainNetworkService_batchSize, batchSize ?? 20, "f");
27
- }
28
- /**
29
- * Fetches active networks for the given account IDs.
30
- * Automatically handles batching requests to comply with URL length limitations.
31
- *
32
- * @param accountIds - Array of CAIP-10 account IDs to fetch activity for.
33
- * @returns Promise resolving to the combined active networks response.
34
- * @throws Error if the response format is invalid or the request fails.
35
- */
36
- async fetchNetworkActivity(accountIds) {
37
- if (accountIds.length === 0) {
38
- return { activeNetworks: [] };
39
- }
40
- if (accountIds.length <= __classPrivateFieldGet(this, _MultichainNetworkService_batchSize, "f")) {
41
- return __classPrivateFieldGet(this, _MultichainNetworkService_instances, "m", _MultichainNetworkService_fetchNetworkActivityBatch).call(this, accountIds);
42
- }
43
- const batches = chunk(accountIds, __classPrivateFieldGet(this, _MultichainNetworkService_batchSize, "f"));
44
- const batchResults = await Promise.all(batches.map((batch) => __classPrivateFieldGet(this, _MultichainNetworkService_instances, "m", _MultichainNetworkService_fetchNetworkActivityBatch).call(this, batch)));
45
- const combinedResponse = {
46
- activeNetworks: batchResults.flatMap((response) => response.activeNetworks),
47
- };
48
- return combinedResponse;
49
- }
50
- }
51
- _MultichainNetworkService_fetch = new WeakMap(), _MultichainNetworkService_batchSize = new WeakMap(), _MultichainNetworkService_instances = new WeakSet(), _MultichainNetworkService_fetchNetworkActivityBatch =
52
- /**
53
- * Internal method to fetch a single batch of account IDs.
54
- *
55
- * @param accountIds - Batch of account IDs to fetch
56
- * @returns Promise resolving to the active networks response for this batch
57
- * @throws Error if the response format is invalid or the request fails
58
- */
59
- async function _MultichainNetworkService_fetchNetworkActivityBatch(accountIds) {
60
- try {
61
- const url = buildActiveNetworksUrl(accountIds);
62
- const response = await __classPrivateFieldGet(this, _MultichainNetworkService_fetch, "f").call(this, url.toString(), {
63
- method: 'GET',
64
- headers: {
65
- [MULTICHAIN_ACCOUNTS_CLIENT_HEADER]: MULTICHAIN_ACCOUNTS_CLIENT_ID,
66
- Accept: 'application/json',
67
- },
68
- });
69
- if (!response.ok) {
70
- throw new Error(`HTTP error! status: ${response.status}`);
71
- }
72
- const data = await response.json();
73
- assert(data, ActiveNetworksResponseStruct);
74
- return data;
75
- }
76
- catch (error) {
77
- if (error instanceof Error) {
78
- if (error.name === 'AbortError') {
79
- throw new Error('Request timeout: Failed to fetch active networks');
80
- }
81
- throw error;
82
- }
83
- throw new Error(`Failed to fetch active networks: ${String(error)}`);
84
- }
85
- };
86
- //# sourceMappingURL=MultichainNetworkService.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MultichainNetworkService.mjs","sourceRoot":"","sources":["../../src/MultichainNetworkService/MultichainNetworkService.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,8BAA8B;;;AAI/C,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,EACtB,iCAAiC,EACjC,6BAA6B,EAC9B,gCAA+B;AAGhC;;GAEG;AACH,MAAM,OAAO,wBAAwB;IAKnC,YAAY,EACV,KAAK,EAAE,aAAa,EACpB,SAAS,GAIV;;QAVQ,kDAAqB;QAErB,sDAAmB;QAS1B,uBAAA,IAAI,mCAAU,aAAa,MAAA,CAAC;QAC5B,uBAAA,IAAI,uCAAc,SAAS,IAAI,EAAE,MAAA,CAAC;IACpC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,oBAAoB,CACxB,UAA2B;QAE3B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,IAAI,uBAAA,IAAI,2CAAW,EAAE,CAAC;YACzC,OAAO,uBAAA,IAAI,gGAA2B,MAA/B,IAAI,EAA4B,UAAU,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,uBAAA,IAAI,2CAAW,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAA,IAAI,gGAA2B,MAA/B,IAAI,EAA4B,KAAK,CAAC,CAAC,CAC/D,CAAC;QAEF,MAAM,gBAAgB,GAA2B;YAC/C,cAAc,EAAE,YAAY,CAAC,OAAO,CAClC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CACtC;SACF,CAAC;QAEF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;CA0CF;;AAxCC;;;;;;GAMG;AACH,KAAK,8DACH,UAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAG,MAAM,uBAAA,IAAI,uCAAO,MAAX,IAAI,EAAQ,GAAG,CAAC,QAAQ,EAAE,EAAE;YACjD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,CAAC,iCAAiC,CAAC,EAAE,6BAA6B;gBAClE,MAAM,EAAE,kBAAkB;aAC3B;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE5C,MAAM,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC","sourcesContent":["import { assert } from '@metamask/superstruct';\nimport type { CaipAccountId } from '@metamask/utils';\nimport { chunk } from 'lodash';\n\nimport {\n ActiveNetworksResponseStruct,\n buildActiveNetworksUrl,\n MULTICHAIN_ACCOUNTS_CLIENT_HEADER,\n MULTICHAIN_ACCOUNTS_CLIENT_ID,\n} from '../api/accounts-api.js';\nimport type { ActiveNetworksResponse } from '../api/accounts-api.js';\n\n/**\n * Service responsible for fetching network activity data from the API.\n */\nexport class MultichainNetworkService {\n readonly #fetch: typeof fetch;\n\n readonly #batchSize: number;\n\n constructor({\n fetch: fetchFunction,\n batchSize,\n }: {\n fetch: typeof fetch;\n batchSize?: number;\n }) {\n this.#fetch = fetchFunction;\n this.#batchSize = batchSize ?? 20;\n }\n\n /**\n * Fetches active networks for the given account IDs.\n * Automatically handles batching requests to comply with URL length limitations.\n *\n * @param accountIds - Array of CAIP-10 account IDs to fetch activity for.\n * @returns Promise resolving to the combined active networks response.\n * @throws Error if the response format is invalid or the request fails.\n */\n async fetchNetworkActivity(\n accountIds: CaipAccountId[],\n ): Promise<ActiveNetworksResponse> {\n if (accountIds.length === 0) {\n return { activeNetworks: [] };\n }\n\n if (accountIds.length <= this.#batchSize) {\n return this.#fetchNetworkActivityBatch(accountIds);\n }\n\n const batches = chunk(accountIds, this.#batchSize);\n const batchResults = await Promise.all(\n batches.map((batch) => this.#fetchNetworkActivityBatch(batch)),\n );\n\n const combinedResponse: ActiveNetworksResponse = {\n activeNetworks: batchResults.flatMap(\n (response) => response.activeNetworks,\n ),\n };\n\n return combinedResponse;\n }\n\n /**\n * Internal method to fetch a single batch of account IDs.\n *\n * @param accountIds - Batch of account IDs to fetch\n * @returns Promise resolving to the active networks response for this batch\n * @throws Error if the response format is invalid or the request fails\n */\n async #fetchNetworkActivityBatch(\n accountIds: CaipAccountId[],\n ): Promise<ActiveNetworksResponse> {\n try {\n const url = buildActiveNetworksUrl(accountIds);\n\n const response = await this.#fetch(url.toString(), {\n method: 'GET',\n headers: {\n [MULTICHAIN_ACCOUNTS_CLIENT_HEADER]: MULTICHAIN_ACCOUNTS_CLIENT_ID,\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data: unknown = await response.json();\n\n assert(data, ActiveNetworksResponseStruct);\n return data;\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new Error('Request timeout: Failed to fetch active networks');\n }\n throw error;\n }\n\n throw new Error(`Failed to fetch active networks: ${String(error)}`);\n }\n }\n}\n"]}
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildActiveNetworksUrl = exports.toActiveNetworksByAddress = exports.toAllowedCaipAccountIds = exports.MULTICHAIN_ALLOWED_ACTIVE_NETWORK_SCOPES = exports.MULTICHAIN_ACCOUNTS_CLIENT_ID = exports.MULTICHAIN_ACCOUNTS_CLIENT_HEADER = exports.MULTICHAIN_ACCOUNTS_BASE_URL = exports.ActiveNetworksResponseStruct = void 0;
4
- const keyring_api_1 = require("@metamask/keyring-api");
5
- const superstruct_1 = require("@metamask/superstruct");
6
- const utils_1 = require("@metamask/utils");
7
- exports.ActiveNetworksResponseStruct = (0, superstruct_1.object)({
8
- activeNetworks: (0, superstruct_1.array)(utils_1.CaipAccountIdStruct),
9
- });
10
- /**
11
- * The domain for multichain accounts API.
12
- */
13
- exports.MULTICHAIN_ACCOUNTS_BASE_URL = 'https://accounts.api.cx.metamask.io';
14
- /**
15
- * The client header for the multichain accounts API.
16
- */
17
- exports.MULTICHAIN_ACCOUNTS_CLIENT_HEADER = 'x-metamask-clientproduct';
18
- /**
19
- * The client ID for the multichain accounts API.
20
- */
21
- exports.MULTICHAIN_ACCOUNTS_CLIENT_ID = 'metamask-multichain-network-controller';
22
- /**
23
- * The allowed active network scopes for the multichain network controller.
24
- */
25
- exports.MULTICHAIN_ALLOWED_ACTIVE_NETWORK_SCOPES = [
26
- String(keyring_api_1.BtcScope.Mainnet),
27
- String(keyring_api_1.BtcScope.Testnet),
28
- String(keyring_api_1.BtcScope.Testnet4),
29
- String(keyring_api_1.BtcScope.Signet),
30
- String(keyring_api_1.BtcScope.Regtest),
31
- String(keyring_api_1.SolScope.Mainnet),
32
- String(keyring_api_1.SolScope.Devnet),
33
- String(keyring_api_1.EthScope.Mainnet),
34
- String(keyring_api_1.EthScope.Testnet),
35
- String(keyring_api_1.EthScope.Eoa),
36
- String(keyring_api_1.TrxScope.Mainnet),
37
- String(keyring_api_1.TrxScope.Nile),
38
- String(keyring_api_1.TrxScope.Shasta),
39
- ];
40
- /**
41
- * Converts an internal account to an array of CAIP-10 account IDs.
42
- *
43
- * @param account - The internal account to convert
44
- * @returns The CAIP-10 account IDs
45
- */
46
- function toAllowedCaipAccountIds(account) {
47
- const formattedAccounts = [];
48
- for (const scope of account.scopes) {
49
- if (exports.MULTICHAIN_ALLOWED_ACTIVE_NETWORK_SCOPES.includes(scope)) {
50
- formattedAccounts.push(`${scope}:${account.address}`);
51
- }
52
- }
53
- return formattedAccounts;
54
- }
55
- exports.toAllowedCaipAccountIds = toAllowedCaipAccountIds;
56
- /**
57
- * Formats the API response into our state structure.
58
- * Example input: ["eip155:1:0x123...", "eip155:137:0x123...", "solana:1:0xabc..."]
59
- *
60
- * @param response - The raw API response
61
- * @returns Formatted networks by address
62
- */
63
- function toActiveNetworksByAddress(response) {
64
- const networksByAddress = {};
65
- response.activeNetworks.forEach((network) => {
66
- const { address, chain: { namespace, reference }, } = (0, utils_1.parseCaipAccountId)(network);
67
- if (!networksByAddress[address]) {
68
- networksByAddress[address] = {
69
- namespace,
70
- activeChains: [],
71
- };
72
- }
73
- networksByAddress[address].activeChains.push(reference);
74
- });
75
- return networksByAddress;
76
- }
77
- exports.toActiveNetworksByAddress = toActiveNetworksByAddress;
78
- /**
79
- * Constructs the URL for the active networks API endpoint.
80
- *
81
- * @param accountIds - Array of account IDs
82
- * @returns URL object for the API endpoint
83
- */
84
- function buildActiveNetworksUrl(accountIds) {
85
- const url = new URL(`${exports.MULTICHAIN_ACCOUNTS_BASE_URL}/v2/activeNetworks`);
86
- url.searchParams.append('accountIds', accountIds.join(','));
87
- return url;
88
- }
89
- exports.buildActiveNetworksUrl = buildActiveNetworksUrl;
90
- //# sourceMappingURL=accounts-api.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"accounts-api.cjs","sourceRoot":"","sources":["../../src/api/accounts-api.ts"],"names":[],"mappings":";;;AAAA,uDAA+E;AAE/E,uDAAsD;AAEtD,2CAA0E;AAQ7D,QAAA,4BAA4B,GAAG,IAAA,oBAAM,EAAC;IACjD,cAAc,EAAE,IAAA,mBAAK,EAAC,2BAAmB,CAAC;CAC3C,CAAC,CAAC;AAiBH;;GAEG;AACU,QAAA,4BAA4B,GACvC,qCAAqC,CAAC;AAExC;;GAEG;AACU,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAE5E;;GAEG;AACU,QAAA,6BAA6B,GACxC,wCAAwC,CAAC;AAE3C;;GAEG;AACU,QAAA,wCAAwC,GAAG;IACtD,MAAM,CAAC,sBAAQ,CAAC,OAAO,CAAC;IACxB,MAAM,CAAC,sBAAQ,CAAC,OAAO,CAAC;IACxB,MAAM,CAAC,sBAAQ,CAAC,QAAQ,CAAC;IACzB,MAAM,CAAC,sBAAQ,CAAC,MAAM,CAAC;IACvB,MAAM,CAAC,sBAAQ,CAAC,OAAO,CAAC;IACxB,MAAM,CAAC,sBAAQ,CAAC,OAAO,CAAC;IACxB,MAAM,CAAC,sBAAQ,CAAC,MAAM,CAAC;IACvB,MAAM,CAAC,sBAAQ,CAAC,OAAO,CAAC;IACxB,MAAM,CAAC,sBAAQ,CAAC,OAAO,CAAC;IACxB,MAAM,CAAC,sBAAQ,CAAC,GAAG,CAAC;IACpB,MAAM,CAAC,sBAAQ,CAAC,OAAO,CAAC;IACxB,MAAM,CAAC,sBAAQ,CAAC,IAAI,CAAC;IACrB,MAAM,CAAC,sBAAQ,CAAC,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,OAAwB;IAExB,MAAM,iBAAiB,GAAoB,EAAE,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,gDAAwC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,iBAAiB,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAXD,0DAWC;AAED;;;;;;GAMG;AACH,SAAgB,yBAAyB,CACvC,QAAgC;IAEhC,MAAM,iBAAiB,GAA4B,EAAE,CAAC;IAEtD,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC1C,MAAM,EACJ,OAAO,EACP,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAChC,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC;QAEhC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,iBAAiB,CAAC,OAAO,CAAC,GAAG;gBAC3B,SAAS;gBACT,YAAY,EAAE,EAAE;aACjB,CAAC;QACJ,CAAC;QACD,iBAAiB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AArBD,8DAqBC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CAAC,UAA2B;IAChE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,oCAA4B,oBAAoB,CAAC,CAAC;IACzE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,OAAO,GAAG,CAAC;AACb,CAAC;AAJD,wDAIC","sourcesContent":["import { BtcScope, SolScope, EthScope, TrxScope } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport { array, object } from '@metamask/superstruct';\nimport type { Infer } from '@metamask/superstruct';\nimport { CaipAccountIdStruct, parseCaipAccountId } from '@metamask/utils';\nimport type {\n CaipAccountAddress,\n CaipAccountId,\n CaipNamespace,\n CaipReference,\n} from '@metamask/utils';\n\nexport const ActiveNetworksResponseStruct = object({\n activeNetworks: array(CaipAccountIdStruct),\n});\n\nexport type ActiveNetworksResponse = Infer<typeof ActiveNetworksResponseStruct>;\n\n/**\n * The active networks for the currently selected account.\n */\nexport type ActiveNetworksByAddress = Record<\n CaipAccountAddress,\n {\n // CAIP-2 namespace of the network.\n namespace: CaipNamespace;\n // Active chain IDs (CAIP-2 references) on that network (primarily used for EVM networks).\n activeChains: CaipReference[];\n }\n>;\n\n/**\n * The domain for multichain accounts API.\n */\nexport const MULTICHAIN_ACCOUNTS_BASE_URL =\n 'https://accounts.api.cx.metamask.io';\n\n/**\n * The client header for the multichain accounts API.\n */\nexport const MULTICHAIN_ACCOUNTS_CLIENT_HEADER = 'x-metamask-clientproduct';\n\n/**\n * The client ID for the multichain accounts API.\n */\nexport const MULTICHAIN_ACCOUNTS_CLIENT_ID =\n 'metamask-multichain-network-controller';\n\n/**\n * The allowed active network scopes for the multichain network controller.\n */\nexport const MULTICHAIN_ALLOWED_ACTIVE_NETWORK_SCOPES = [\n String(BtcScope.Mainnet),\n String(BtcScope.Testnet),\n String(BtcScope.Testnet4),\n String(BtcScope.Signet),\n String(BtcScope.Regtest),\n String(SolScope.Mainnet),\n String(SolScope.Devnet),\n String(EthScope.Mainnet),\n String(EthScope.Testnet),\n String(EthScope.Eoa),\n String(TrxScope.Mainnet),\n String(TrxScope.Nile),\n String(TrxScope.Shasta),\n];\n\n/**\n * Converts an internal account to an array of CAIP-10 account IDs.\n *\n * @param account - The internal account to convert\n * @returns The CAIP-10 account IDs\n */\nexport function toAllowedCaipAccountIds(\n account: InternalAccount,\n): CaipAccountId[] {\n const formattedAccounts: CaipAccountId[] = [];\n for (const scope of account.scopes) {\n if (MULTICHAIN_ALLOWED_ACTIVE_NETWORK_SCOPES.includes(scope)) {\n formattedAccounts.push(`${scope}:${account.address}`);\n }\n }\n\n return formattedAccounts;\n}\n\n/**\n * Formats the API response into our state structure.\n * Example input: [\"eip155:1:0x123...\", \"eip155:137:0x123...\", \"solana:1:0xabc...\"]\n *\n * @param response - The raw API response\n * @returns Formatted networks by address\n */\nexport function toActiveNetworksByAddress(\n response: ActiveNetworksResponse,\n): ActiveNetworksByAddress {\n const networksByAddress: ActiveNetworksByAddress = {};\n\n response.activeNetworks.forEach((network) => {\n const {\n address,\n chain: { namespace, reference },\n } = parseCaipAccountId(network);\n\n if (!networksByAddress[address]) {\n networksByAddress[address] = {\n namespace,\n activeChains: [],\n };\n }\n networksByAddress[address].activeChains.push(reference);\n });\n\n return networksByAddress;\n}\n\n/**\n * Constructs the URL for the active networks API endpoint.\n *\n * @param accountIds - Array of account IDs\n * @returns URL object for the API endpoint\n */\nexport function buildActiveNetworksUrl(accountIds: CaipAccountId[]): URL {\n const url = new URL(`${MULTICHAIN_ACCOUNTS_BASE_URL}/v2/activeNetworks`);\n url.searchParams.append('accountIds', accountIds.join(','));\n return url;\n}\n"]}