@metamask/profile-sync-controller 20.0.0 → 21.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/dist/controllers/authentication/AuthenticationController.cjs +16 -9
  3. package/dist/controllers/authentication/AuthenticationController.cjs.map +1 -1
  4. package/dist/controllers/authentication/AuthenticationController.d.cts +6 -1
  5. package/dist/controllers/authentication/AuthenticationController.d.cts.map +1 -1
  6. package/dist/controllers/authentication/AuthenticationController.d.mts +6 -1
  7. package/dist/controllers/authentication/AuthenticationController.d.mts.map +1 -1
  8. package/dist/controllers/authentication/AuthenticationController.mjs +16 -9
  9. package/dist/controllers/authentication/AuthenticationController.mjs.map +1 -1
  10. package/dist/controllers/user-storage/UserStorageController.cjs +24 -47
  11. package/dist/controllers/user-storage/UserStorageController.cjs.map +1 -1
  12. package/dist/controllers/user-storage/UserStorageController.d.cts +16 -49
  13. package/dist/controllers/user-storage/UserStorageController.d.cts.map +1 -1
  14. package/dist/controllers/user-storage/UserStorageController.d.mts +16 -49
  15. package/dist/controllers/user-storage/UserStorageController.d.mts.map +1 -1
  16. package/dist/controllers/user-storage/UserStorageController.mjs +24 -47
  17. package/dist/controllers/user-storage/UserStorageController.mjs.map +1 -1
  18. package/dist/controllers/user-storage/account-syncing/controller-integration.cjs +185 -166
  19. package/dist/controllers/user-storage/account-syncing/controller-integration.cjs.map +1 -1
  20. package/dist/controllers/user-storage/account-syncing/controller-integration.d.cts +3 -0
  21. package/dist/controllers/user-storage/account-syncing/controller-integration.d.cts.map +1 -1
  22. package/dist/controllers/user-storage/account-syncing/controller-integration.d.mts +3 -0
  23. package/dist/controllers/user-storage/account-syncing/controller-integration.d.mts.map +1 -1
  24. package/dist/controllers/user-storage/account-syncing/controller-integration.mjs +185 -166
  25. package/dist/controllers/user-storage/account-syncing/controller-integration.mjs.map +1 -1
  26. package/dist/controllers/user-storage/account-syncing/types.cjs.map +1 -1
  27. package/dist/controllers/user-storage/account-syncing/types.d.cts +2 -0
  28. package/dist/controllers/user-storage/account-syncing/types.d.cts.map +1 -1
  29. package/dist/controllers/user-storage/account-syncing/types.d.mts +2 -0
  30. package/dist/controllers/user-storage/account-syncing/types.d.mts.map +1 -1
  31. package/dist/controllers/user-storage/account-syncing/types.mjs.map +1 -1
  32. package/dist/controllers/user-storage/constants.cjs +14 -1
  33. package/dist/controllers/user-storage/constants.cjs.map +1 -1
  34. package/dist/controllers/user-storage/constants.d.cts +11 -0
  35. package/dist/controllers/user-storage/constants.d.cts.map +1 -1
  36. package/dist/controllers/user-storage/constants.d.mts +11 -0
  37. package/dist/controllers/user-storage/constants.d.mts.map +1 -1
  38. package/dist/controllers/user-storage/constants.mjs +13 -0
  39. package/dist/controllers/user-storage/constants.mjs.map +1 -1
  40. package/dist/controllers/user-storage/contact-syncing/controller-integration.cjs +227 -162
  41. package/dist/controllers/user-storage/contact-syncing/controller-integration.cjs.map +1 -1
  42. package/dist/controllers/user-storage/contact-syncing/controller-integration.d.cts +3 -0
  43. package/dist/controllers/user-storage/contact-syncing/controller-integration.d.cts.map +1 -1
  44. package/dist/controllers/user-storage/contact-syncing/controller-integration.d.mts +3 -0
  45. package/dist/controllers/user-storage/contact-syncing/controller-integration.d.mts.map +1 -1
  46. package/dist/controllers/user-storage/contact-syncing/controller-integration.mjs +227 -162
  47. package/dist/controllers/user-storage/contact-syncing/controller-integration.mjs.map +1 -1
  48. package/dist/controllers/user-storage/contact-syncing/types.cjs.map +1 -1
  49. package/dist/controllers/user-storage/contact-syncing/types.d.cts +2 -0
  50. package/dist/controllers/user-storage/contact-syncing/types.d.cts.map +1 -1
  51. package/dist/controllers/user-storage/contact-syncing/types.d.mts +2 -0
  52. package/dist/controllers/user-storage/contact-syncing/types.d.mts.map +1 -1
  53. package/dist/controllers/user-storage/contact-syncing/types.mjs.map +1 -1
  54. package/dist/controllers/user-storage/mocks/mockResponses.cjs +1 -1
  55. package/dist/controllers/user-storage/mocks/mockResponses.cjs.map +1 -1
  56. package/dist/controllers/user-storage/mocks/mockResponses.d.cts +9 -9
  57. package/dist/controllers/user-storage/mocks/mockResponses.d.cts.map +1 -1
  58. package/dist/controllers/user-storage/mocks/mockResponses.d.mts +9 -9
  59. package/dist/controllers/user-storage/mocks/mockResponses.d.mts.map +1 -1
  60. package/dist/controllers/user-storage/mocks/mockResponses.mjs +1 -1
  61. package/dist/controllers/user-storage/mocks/mockResponses.mjs.map +1 -1
  62. package/dist/controllers/user-storage/types.cjs.map +1 -1
  63. package/dist/controllers/user-storage/types.d.cts +3 -3
  64. package/dist/controllers/user-storage/types.d.cts.map +1 -1
  65. package/dist/controllers/user-storage/types.d.mts +3 -3
  66. package/dist/controllers/user-storage/types.d.mts.map +1 -1
  67. package/dist/controllers/user-storage/types.mjs.map +1 -1
  68. package/dist/sdk/user-storage.cjs +3 -9
  69. package/dist/sdk/user-storage.cjs.map +1 -1
  70. package/dist/sdk/user-storage.d.cts +0 -1
  71. package/dist/sdk/user-storage.d.cts.map +1 -1
  72. package/dist/sdk/user-storage.d.mts +0 -1
  73. package/dist/sdk/user-storage.d.mts.map +1 -1
  74. package/dist/sdk/user-storage.mjs +3 -9
  75. package/dist/sdk/user-storage.mjs.map +1 -1
  76. package/dist/shared/storage-schema.cjs +9 -32
  77. package/dist/shared/storage-schema.cjs.map +1 -1
  78. package/dist/shared/storage-schema.d.cts +10 -42
  79. package/dist/shared/storage-schema.d.cts.map +1 -1
  80. package/dist/shared/storage-schema.d.mts +10 -42
  81. package/dist/shared/storage-schema.d.mts.map +1 -1
  82. package/dist/shared/storage-schema.mjs +8 -31
  83. package/dist/shared/storage-schema.mjs.map +1 -1
  84. package/package.json +1 -3
  85. package/dist/controllers/user-storage/network-syncing/add-network-utils.cjs +0 -36
  86. package/dist/controllers/user-storage/network-syncing/add-network-utils.cjs.map +0 -1
  87. package/dist/controllers/user-storage/network-syncing/add-network-utils.d.cts +0 -22
  88. package/dist/controllers/user-storage/network-syncing/add-network-utils.d.cts.map +0 -1
  89. package/dist/controllers/user-storage/network-syncing/add-network-utils.d.mts +0 -22
  90. package/dist/controllers/user-storage/network-syncing/add-network-utils.d.mts.map +0 -1
  91. package/dist/controllers/user-storage/network-syncing/add-network-utils.mjs +0 -31
  92. package/dist/controllers/user-storage/network-syncing/add-network-utils.mjs.map +0 -1
  93. package/dist/controllers/user-storage/network-syncing/controller-integration.cjs +0 -193
  94. package/dist/controllers/user-storage/network-syncing/controller-integration.cjs.map +0 -1
  95. package/dist/controllers/user-storage/network-syncing/controller-integration.d.cts +0 -57
  96. package/dist/controllers/user-storage/network-syncing/controller-integration.d.cts.map +0 -1
  97. package/dist/controllers/user-storage/network-syncing/controller-integration.d.mts +0 -57
  98. package/dist/controllers/user-storage/network-syncing/controller-integration.d.mts.map +0 -1
  99. package/dist/controllers/user-storage/network-syncing/controller-integration.mjs +0 -191
  100. package/dist/controllers/user-storage/network-syncing/controller-integration.mjs.map +0 -1
  101. package/dist/controllers/user-storage/network-syncing/services.cjs +0 -79
  102. package/dist/controllers/user-storage/network-syncing/services.cjs.map +0 -1
  103. package/dist/controllers/user-storage/network-syncing/services.d.cts +0 -34
  104. package/dist/controllers/user-storage/network-syncing/services.d.cts.map +0 -1
  105. package/dist/controllers/user-storage/network-syncing/services.d.mts +0 -34
  106. package/dist/controllers/user-storage/network-syncing/services.d.mts.map +0 -1
  107. package/dist/controllers/user-storage/network-syncing/services.mjs +0 -73
  108. package/dist/controllers/user-storage/network-syncing/services.mjs.map +0 -1
  109. package/dist/controllers/user-storage/network-syncing/sync-all.cjs +0 -153
  110. package/dist/controllers/user-storage/network-syncing/sync-all.cjs.map +0 -1
  111. package/dist/controllers/user-storage/network-syncing/sync-all.d.cts +0 -32
  112. package/dist/controllers/user-storage/network-syncing/sync-all.d.cts.map +0 -1
  113. package/dist/controllers/user-storage/network-syncing/sync-all.d.mts +0 -32
  114. package/dist/controllers/user-storage/network-syncing/sync-all.d.mts.map +0 -1
  115. package/dist/controllers/user-storage/network-syncing/sync-all.mjs +0 -145
  116. package/dist/controllers/user-storage/network-syncing/sync-all.mjs.map +0 -1
  117. package/dist/controllers/user-storage/network-syncing/sync-mutations.cjs +0 -28
  118. package/dist/controllers/user-storage/network-syncing/sync-mutations.cjs.map +0 -1
  119. package/dist/controllers/user-storage/network-syncing/sync-mutations.d.cts +0 -17
  120. package/dist/controllers/user-storage/network-syncing/sync-mutations.d.cts.map +0 -1
  121. package/dist/controllers/user-storage/network-syncing/sync-mutations.d.mts +0 -17
  122. package/dist/controllers/user-storage/network-syncing/sync-mutations.d.mts.map +0 -1
  123. package/dist/controllers/user-storage/network-syncing/sync-mutations.mjs +0 -22
  124. package/dist/controllers/user-storage/network-syncing/sync-mutations.mjs.map +0 -1
  125. package/dist/controllers/user-storage/network-syncing/types.cjs +0 -16
  126. package/dist/controllers/user-storage/network-syncing/types.cjs.map +0 -1
  127. package/dist/controllers/user-storage/network-syncing/types.d.cts +0 -15
  128. package/dist/controllers/user-storage/network-syncing/types.d.cts.map +0 -1
  129. package/dist/controllers/user-storage/network-syncing/types.d.mts +0 -15
  130. package/dist/controllers/user-storage/network-syncing/types.d.mts.map +0 -1
  131. package/dist/controllers/user-storage/network-syncing/types.mjs +0 -11
  132. package/dist/controllers/user-storage/network-syncing/types.mjs.map +0 -1
  133. package/dist/controllers/user-storage/network-syncing/update-network-utils.cjs +0 -129
  134. package/dist/controllers/user-storage/network-syncing/update-network-utils.cjs.map +0 -1
  135. package/dist/controllers/user-storage/network-syncing/update-network-utils.d.cts +0 -59
  136. package/dist/controllers/user-storage/network-syncing/update-network-utils.d.cts.map +0 -1
  137. package/dist/controllers/user-storage/network-syncing/update-network-utils.d.mts +0 -59
  138. package/dist/controllers/user-storage/network-syncing/update-network-utils.d.mts.map +0 -1
  139. package/dist/controllers/user-storage/network-syncing/update-network-utils.mjs +0 -122
  140. package/dist/controllers/user-storage/network-syncing/update-network-utils.mjs.map +0 -1
@@ -1,22 +0,0 @@
1
- import type { NetworkConfiguration } from "@metamask/network-controller";
2
- export declare const MAX_NETWORKS_SIZE = 50;
3
- /**
4
- * Calculates the available space to add new networks
5
- * exported for testability.
6
- *
7
- * @param originalListSize - size of original list
8
- * @param maxSize - max size
9
- * @returns a positive number on the available space
10
- */
11
- export declare const calculateAvailableSpaceToAdd: (originalListSize: number, maxSize: number) => number;
12
- /**
13
- * Returns a bounded number of networks to add (set by a max bound)
14
- * The items will be ordered to give determinism on items to append (not random)
15
- *
16
- * @param originalNetworks - The original list of network configurations.
17
- * @param networksToAdd - The list of network configurations to add.
18
- * @param maxSize - The maximum allowed size of the list. Defaults to MAX_NETWORKS_SIZE.
19
- * @returns The networks to add, sorted by chainId.
20
- */
21
- export declare const getBoundedNetworksToAdd: (originalNetworks: NetworkConfiguration[], networksToAdd: NetworkConfiguration[], maxSize?: number) => NetworkConfiguration[];
22
- //# sourceMappingURL=add-network-utils.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-network-utils.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/add-network-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;AAEzE,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,qBACrB,MAAM,WACf,MAAM,WAGhB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,qBAChB,oBAAoB,EAAE,iBACzB,oBAAoB,EAAE,6CAiBtC,CAAC"}
@@ -1,31 +0,0 @@
1
- export const MAX_NETWORKS_SIZE = 50;
2
- /**
3
- * Calculates the available space to add new networks
4
- * exported for testability.
5
- *
6
- * @param originalListSize - size of original list
7
- * @param maxSize - max size
8
- * @returns a positive number on the available space
9
- */
10
- export const calculateAvailableSpaceToAdd = (originalListSize, maxSize) => {
11
- return Math.max(0, maxSize - originalListSize);
12
- };
13
- /**
14
- * Returns a bounded number of networks to add (set by a max bound)
15
- * The items will be ordered to give determinism on items to append (not random)
16
- *
17
- * @param originalNetworks - The original list of network configurations.
18
- * @param networksToAdd - The list of network configurations to add.
19
- * @param maxSize - The maximum allowed size of the list. Defaults to MAX_NETWORKS_SIZE.
20
- * @returns The networks to add, sorted by chainId.
21
- */
22
- export const getBoundedNetworksToAdd = (originalNetworks, networksToAdd, maxSize = MAX_NETWORKS_SIZE) => {
23
- const availableSpace = calculateAvailableSpaceToAdd(originalNetworks.length, maxSize);
24
- const numberOfNetworksToAppend = Math.min(availableSpace, networksToAdd.length);
25
- // Order and slice the networks to append
26
- // Ordering so we have some determinism on the order of items
27
- return networksToAdd
28
- .sort((a, b) => a.chainId.localeCompare(b.chainId))
29
- .slice(0, numberOfNetworksToAppend);
30
- };
31
- //# sourceMappingURL=add-network-utils.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-network-utils.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/add-network-utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,gBAAwB,EACxB,OAAe,EACf,EAAE;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,gBAAwC,EACxC,aAAqC,EACrC,OAAO,GAAG,iBAAiB,EAC3B,EAAE;IACF,MAAM,cAAc,GAAG,4BAA4B,CACjD,gBAAgB,CAAC,MAAM,EACvB,OAAO,CACR,CAAC;IACF,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,CACvC,cAAc,EACd,aAAa,CAAC,MAAM,CACrB,CAAC;IAEF,yCAAyC;IACzC,6DAA6D;IAC7D,OAAO,aAAa;SACjB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SAClD,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;AACxC,CAAC,CAAC","sourcesContent":["import type { NetworkConfiguration } from '@metamask/network-controller';\n\nexport const MAX_NETWORKS_SIZE = 50;\n\n/**\n * Calculates the available space to add new networks\n * exported for testability.\n *\n * @param originalListSize - size of original list\n * @param maxSize - max size\n * @returns a positive number on the available space\n */\nexport const calculateAvailableSpaceToAdd = (\n originalListSize: number,\n maxSize: number,\n) => {\n return Math.max(0, maxSize - originalListSize);\n};\n\n/**\n * Returns a bounded number of networks to add (set by a max bound)\n * The items will be ordered to give determinism on items to append (not random)\n *\n * @param originalNetworks - The original list of network configurations.\n * @param networksToAdd - The list of network configurations to add.\n * @param maxSize - The maximum allowed size of the list. Defaults to MAX_NETWORKS_SIZE.\n * @returns The networks to add, sorted by chainId.\n */\nexport const getBoundedNetworksToAdd = (\n originalNetworks: NetworkConfiguration[],\n networksToAdd: NetworkConfiguration[],\n maxSize = MAX_NETWORKS_SIZE,\n) => {\n const availableSpace = calculateAvailableSpaceToAdd(\n originalNetworks.length,\n maxSize,\n );\n const numberOfNetworksToAppend = Math.min(\n availableSpace,\n networksToAdd.length,\n );\n\n // Order and slice the networks to append\n // Ordering so we have some determinism on the order of items\n return networksToAdd\n .sort((a, b) => a.chainId.localeCompare(b.chainId))\n .slice(0, numberOfNetworksToAppend);\n};\n"]}
@@ -1,193 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.performMainNetworkSync = exports.dispatchUpdateNetwork = exports.startNetworkSyncing = exports.isMainNetworkSyncInProgress = void 0;
7
- const loglevel_1 = __importDefault(require("loglevel"));
8
- const add_network_utils_1 = require("./add-network-utils.cjs");
9
- const services_1 = require("./services.cjs");
10
- const sync_all_1 = require("./sync-all.cjs");
11
- const sync_mutations_1 = require("./sync-mutations.cjs");
12
- const update_network_utils_1 = require("./update-network-utils.cjs");
13
- /**
14
- * Global in-mem cache to signify that the network syncing is in progress
15
- * Ensures that listeners do not fire during main sync (prevent double requests)
16
- */
17
- // Exported to help testing
18
- // eslint-disable-next-line import-x/no-mutable-exports
19
- exports.isMainNetworkSyncInProgress = false;
20
- /**
21
- * Initialize and setup events to listen to for network syncing
22
- * We will be listening to:
23
- * - Remove Event, to indicate that we need to remote network from remote
24
- *
25
- * We will not be listening to:
26
- * - Add/Update events are not required, as we can sync these during the main sync
27
- *
28
- * @param props - parameters used for initializing and enabling network syncing
29
- */
30
- function startNetworkSyncing(props) {
31
- const { messenger, isMutationSyncBlocked, getUserStorageControllerInstance } = props;
32
- try {
33
- messenger.subscribe('NetworkController:networkRemoved',
34
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
35
- async (networkConfiguration) => {
36
- try {
37
- // If blocked (e.g. we have not yet performed a main-sync), then we should not perform any mutations
38
- if (isMutationSyncBlocked()) {
39
- return;
40
- }
41
- // As main sync is in progress, it will already local and remote networks
42
- // So no need to re-process again.
43
- if (exports.isMainNetworkSyncInProgress) {
44
- return;
45
- }
46
- await (0, sync_mutations_1.deleteNetwork)(networkConfiguration, {
47
- getUserStorageControllerInstance,
48
- });
49
- }
50
- catch {
51
- // Silently fail sync
52
- }
53
- });
54
- }
55
- catch (e) {
56
- loglevel_1.default.warn('NetworkSyncing, event subscription failed', e);
57
- }
58
- }
59
- exports.startNetworkSyncing = startNetworkSyncing;
60
- /**
61
- * method that will dispatch the `NetworkController:updateNetwork` action.
62
- * transforms and corrects the network configuration (and RPCs) we pass through.
63
- *
64
- * @param props - properties
65
- * @param props.messenger - messenger to call the action
66
- * @param props.originalNetworkConfiguration - original network config (from network controller state)
67
- * @param props.newNetworkConfiguration - new network config (from remote)
68
- * @param props.selectedNetworkClientId - currently selected network client id
69
- */
70
- const dispatchUpdateNetwork = async (props) => {
71
- const { messenger, originalNetworkConfiguration, newNetworkConfiguration, selectedNetworkClientId, } = props;
72
- const { updateNetworkFields, newSelectedRpcEndpointIndex } = (0, update_network_utils_1.createUpdateNetworkProps)({
73
- originalNetworkConfiguration,
74
- newNetworkConfiguration,
75
- selectedNetworkClientId,
76
- });
77
- await messenger.call('NetworkController:updateNetwork', updateNetworkFields.chainId, updateNetworkFields, { replacementSelectedRpcEndpointIndex: newSelectedRpcEndpointIndex });
78
- };
79
- exports.dispatchUpdateNetwork = dispatchUpdateNetwork;
80
- /**
81
- * Action to perform the main network sync.
82
- * It will fetch local networks and remote networks, then determines which networks (local and remote) to add/update
83
- *
84
- * @param props - parameters used for this main sync
85
- */
86
- async function performMainNetworkSync(props) {
87
- const { messenger, maxNetworksToAdd, onNetworkAdded, onNetworkRemoved, onNetworkUpdated, getUserStorageControllerInstance, } = props;
88
- // Edge-Case, we do not want to re-run the main-sync if it already is in progress
89
- /* istanbul ignore if - this is not testable */
90
- if (exports.isMainNetworkSyncInProgress) {
91
- return;
92
- }
93
- exports.isMainNetworkSyncInProgress = true;
94
- try {
95
- const networkControllerState = messenger.call('NetworkController:getState');
96
- const localNetworks = Object.values(networkControllerState.networkConfigurationsByChainId ?? {});
97
- const remoteNetworks = await (0, services_1.getAllRemoteNetworks)({
98
- getUserStorageControllerInstance,
99
- });
100
- const networkChanges = (0, sync_all_1.findNetworksToUpdate)({
101
- localNetworks,
102
- remoteNetworks,
103
- });
104
- loglevel_1.default.debug('performMainNetworkSync() - Network Syncing Started', {
105
- localNetworks,
106
- remoteNetworks,
107
- networkChanges,
108
- });
109
- // Update Remote
110
- if (networkChanges?.remoteNetworksToUpdate &&
111
- networkChanges.remoteNetworksToUpdate.length > 0) {
112
- await (0, sync_mutations_1.batchUpdateNetworks)(networkChanges?.remoteNetworksToUpdate, {
113
- getUserStorageControllerInstance,
114
- });
115
- }
116
- // Add missing local networks
117
- const boundedNetworkedToAdd = networkChanges?.missingLocalNetworks &&
118
- (0, add_network_utils_1.getBoundedNetworksToAdd)(localNetworks, networkChanges.missingLocalNetworks, maxNetworksToAdd);
119
- if (boundedNetworkedToAdd && boundedNetworkedToAdd.length > 0) {
120
- const errors = [];
121
- boundedNetworkedToAdd.forEach((n) => {
122
- try {
123
- messenger.call('NetworkController:addNetwork', n);
124
- onNetworkAdded?.(n.chainId);
125
- }
126
- catch (e) {
127
- /* istanbul ignore next - allocates logs, do not need to test */
128
- errors.push(e);
129
- // Silently fail, we can try this again on next main sync
130
- }
131
- });
132
- /* istanbul ignore if - only logs errors, not useful to test */
133
- if (errors.length > 0) {
134
- loglevel_1.default.error('performMainNetworkSync() - NetworkController:addNetwork failures', errors);
135
- }
136
- }
137
- // Update local networks
138
- if (networkChanges?.localNetworksToUpdate &&
139
- networkChanges.localNetworksToUpdate.length > 0) {
140
- const errors = [];
141
- for (const n of networkChanges.localNetworksToUpdate) {
142
- try {
143
- await (0, exports.dispatchUpdateNetwork)({
144
- messenger,
145
- originalNetworkConfiguration: networkControllerState.networkConfigurationsByChainId[n.chainId],
146
- newNetworkConfiguration: n,
147
- selectedNetworkClientId: networkControllerState.selectedNetworkClientId,
148
- });
149
- onNetworkUpdated?.(n.chainId);
150
- }
151
- catch (e) {
152
- /* istanbul ignore next - allocates logs, do not need to test */
153
- errors.push(e);
154
- // Silently fail, we can try this again on next main sync
155
- }
156
- }
157
- /* istanbul ignore if - only logs errors, not useful to test */
158
- if (errors.length > 0) {
159
- loglevel_1.default.error('performMainNetworkSync() - NetworkController:updateNetwork failed', errors);
160
- }
161
- }
162
- // Remove local networks
163
- if (networkChanges?.localNetworksToRemove &&
164
- networkChanges.localNetworksToRemove.length > 0) {
165
- const errors = [];
166
- networkChanges.localNetworksToRemove.forEach((n) => {
167
- try {
168
- messenger.call('NetworkController:removeNetwork', n.chainId);
169
- onNetworkRemoved?.(n.chainId);
170
- }
171
- catch (e) {
172
- /* istanbul ignore next - allocates logs, do not need to test */
173
- errors.push(e);
174
- // Silently fail, we can try this again on next main sync
175
- }
176
- });
177
- /* istanbul ignore if - only logs errors, not useful to test */
178
- if (errors.length > 0) {
179
- loglevel_1.default.error('performMainNetworkSync() - NetworkController:removeNetwork failed', errors);
180
- }
181
- }
182
- }
183
- catch (e) {
184
- /* istanbul ignore next - only logs errors, not useful to test */
185
- loglevel_1.default.error('performMainNetworkSync() failed', e);
186
- // Silently fail sync
187
- }
188
- finally {
189
- exports.isMainNetworkSyncInProgress = false;
190
- }
191
- }
192
- exports.performMainNetworkSync = performMainNetworkSync;
193
- //# sourceMappingURL=controller-integration.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"controller-integration.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/controller-integration.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NetworkConfiguration } from '@metamask/network-controller';\nimport log from 'loglevel';\n\nimport { getBoundedNetworksToAdd } from './add-network-utils';\nimport { getAllRemoteNetworks } from './services';\nimport { findNetworksToUpdate } from './sync-all';\nimport { batchUpdateNetworks, deleteNetwork } from './sync-mutations';\nimport { createUpdateNetworkProps } from './update-network-utils';\nimport type UserStorageController from '../UserStorageController';\nimport type { UserStorageControllerMessenger } from '../UserStorageController';\n\ntype StartNetworkSyncingProps = {\n messenger: UserStorageControllerMessenger;\n getUserStorageControllerInstance: () => UserStorageController;\n isMutationSyncBlocked: () => boolean;\n};\n\ntype PerformMainNetworkSyncProps = {\n messenger: UserStorageControllerMessenger;\n getUserStorageControllerInstance: () => UserStorageController;\n maxNetworksToAdd?: number;\n onNetworkAdded?: (chainId: string) => void;\n onNetworkUpdated?: (chainId: string) => void;\n onNetworkRemoved?: (chainId: string) => void;\n};\n\n/**\n * Global in-mem cache to signify that the network syncing is in progress\n * Ensures that listeners do not fire during main sync (prevent double requests)\n */\n// Exported to help testing\n// eslint-disable-next-line import-x/no-mutable-exports\nexport let isMainNetworkSyncInProgress = false;\n\n/**\n * Initialize and setup events to listen to for network syncing\n * We will be listening to:\n * - Remove Event, to indicate that we need to remote network from remote\n *\n * We will not be listening to:\n * - Add/Update events are not required, as we can sync these during the main sync\n *\n * @param props - parameters used for initializing and enabling network syncing\n */\nexport function startNetworkSyncing(props: StartNetworkSyncingProps) {\n const { messenger, isMutationSyncBlocked, getUserStorageControllerInstance } =\n props;\n try {\n messenger.subscribe(\n 'NetworkController:networkRemoved',\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n async (networkConfiguration) => {\n try {\n // If blocked (e.g. we have not yet performed a main-sync), then we should not perform any mutations\n if (isMutationSyncBlocked()) {\n return;\n }\n\n // As main sync is in progress, it will already local and remote networks\n // So no need to re-process again.\n if (isMainNetworkSyncInProgress) {\n return;\n }\n\n await deleteNetwork(networkConfiguration, {\n getUserStorageControllerInstance,\n });\n } catch {\n // Silently fail sync\n }\n },\n );\n } catch (e) {\n log.warn('NetworkSyncing, event subscription failed', e);\n }\n}\n\n/**\n * method that will dispatch the `NetworkController:updateNetwork` action.\n * transforms and corrects the network configuration (and RPCs) we pass through.\n *\n * @param props - properties\n * @param props.messenger - messenger to call the action\n * @param props.originalNetworkConfiguration - original network config (from network controller state)\n * @param props.newNetworkConfiguration - new network config (from remote)\n * @param props.selectedNetworkClientId - currently selected network client id\n */\nexport const dispatchUpdateNetwork = async (props: {\n messenger: UserStorageControllerMessenger;\n originalNetworkConfiguration: NetworkConfiguration;\n newNetworkConfiguration: NetworkConfiguration;\n selectedNetworkClientId: string;\n}) => {\n const {\n messenger,\n originalNetworkConfiguration,\n newNetworkConfiguration,\n selectedNetworkClientId,\n } = props;\n\n const { updateNetworkFields, newSelectedRpcEndpointIndex } =\n createUpdateNetworkProps({\n originalNetworkConfiguration,\n newNetworkConfiguration,\n selectedNetworkClientId,\n });\n\n await messenger.call(\n 'NetworkController:updateNetwork',\n updateNetworkFields.chainId,\n updateNetworkFields,\n { replacementSelectedRpcEndpointIndex: newSelectedRpcEndpointIndex },\n );\n};\n\n/**\n * Action to perform the main network sync.\n * It will fetch local networks and remote networks, then determines which networks (local and remote) to add/update\n *\n * @param props - parameters used for this main sync\n */\nexport async function performMainNetworkSync(\n props: PerformMainNetworkSyncProps,\n) {\n const {\n messenger,\n maxNetworksToAdd,\n onNetworkAdded,\n onNetworkRemoved,\n onNetworkUpdated,\n getUserStorageControllerInstance,\n } = props;\n\n // Edge-Case, we do not want to re-run the main-sync if it already is in progress\n /* istanbul ignore if - this is not testable */\n if (isMainNetworkSyncInProgress) {\n return;\n }\n\n isMainNetworkSyncInProgress = true;\n try {\n const networkControllerState = messenger.call('NetworkController:getState');\n const localNetworks = Object.values(\n networkControllerState.networkConfigurationsByChainId ?? {},\n );\n\n const remoteNetworks = await getAllRemoteNetworks({\n getUserStorageControllerInstance,\n });\n const networkChanges = findNetworksToUpdate({\n localNetworks,\n remoteNetworks,\n });\n\n log.debug('performMainNetworkSync() - Network Syncing Started', {\n localNetworks,\n remoteNetworks,\n networkChanges,\n });\n\n // Update Remote\n if (\n networkChanges?.remoteNetworksToUpdate &&\n networkChanges.remoteNetworksToUpdate.length > 0\n ) {\n await batchUpdateNetworks(networkChanges?.remoteNetworksToUpdate, {\n getUserStorageControllerInstance,\n });\n }\n\n // Add missing local networks\n const boundedNetworkedToAdd =\n networkChanges?.missingLocalNetworks &&\n getBoundedNetworksToAdd(\n localNetworks,\n networkChanges.missingLocalNetworks,\n maxNetworksToAdd,\n );\n if (boundedNetworkedToAdd && boundedNetworkedToAdd.length > 0) {\n const errors: unknown[] = [];\n boundedNetworkedToAdd.forEach((n) => {\n try {\n messenger.call('NetworkController:addNetwork', n);\n onNetworkAdded?.(n.chainId);\n } catch (e) {\n /* istanbul ignore next - allocates logs, do not need to test */\n errors.push(e);\n // Silently fail, we can try this again on next main sync\n }\n });\n\n /* istanbul ignore if - only logs errors, not useful to test */\n if (errors.length > 0) {\n log.error(\n 'performMainNetworkSync() - NetworkController:addNetwork failures',\n errors,\n );\n }\n }\n\n // Update local networks\n if (\n networkChanges?.localNetworksToUpdate &&\n networkChanges.localNetworksToUpdate.length > 0\n ) {\n const errors: unknown[] = [];\n for (const n of networkChanges.localNetworksToUpdate) {\n try {\n await dispatchUpdateNetwork({\n messenger,\n originalNetworkConfiguration:\n networkControllerState.networkConfigurationsByChainId[n.chainId],\n newNetworkConfiguration: n,\n selectedNetworkClientId:\n networkControllerState.selectedNetworkClientId,\n });\n onNetworkUpdated?.(n.chainId);\n } catch (e) {\n /* istanbul ignore next - allocates logs, do not need to test */\n errors.push(e);\n // Silently fail, we can try this again on next main sync\n }\n }\n\n /* istanbul ignore if - only logs errors, not useful to test */\n if (errors.length > 0) {\n log.error(\n 'performMainNetworkSync() - NetworkController:updateNetwork failed',\n errors,\n );\n }\n }\n\n // Remove local networks\n if (\n networkChanges?.localNetworksToRemove &&\n networkChanges.localNetworksToRemove.length > 0\n ) {\n const errors: unknown[] = [];\n networkChanges.localNetworksToRemove.forEach((n) => {\n try {\n messenger.call('NetworkController:removeNetwork', n.chainId);\n onNetworkRemoved?.(n.chainId);\n } catch (e) {\n /* istanbul ignore next - allocates logs, do not need to test */\n errors.push(e);\n // Silently fail, we can try this again on next main sync\n }\n });\n\n /* istanbul ignore if - only logs errors, not useful to test */\n if (errors.length > 0) {\n log.error(\n 'performMainNetworkSync() - NetworkController:removeNetwork failed',\n errors,\n );\n }\n }\n } catch (e) {\n /* istanbul ignore next - only logs errors, not useful to test */\n log.error('performMainNetworkSync() failed', e);\n // Silently fail sync\n } finally {\n isMainNetworkSyncInProgress = false;\n }\n}\n"]}
@@ -1,57 +0,0 @@
1
- import type { NetworkConfiguration } from "@metamask/network-controller";
2
- import type UserStorageController from "../UserStorageController.cjs";
3
- import type { UserStorageControllerMessenger } from "../UserStorageController.cjs";
4
- type StartNetworkSyncingProps = {
5
- messenger: UserStorageControllerMessenger;
6
- getUserStorageControllerInstance: () => UserStorageController;
7
- isMutationSyncBlocked: () => boolean;
8
- };
9
- type PerformMainNetworkSyncProps = {
10
- messenger: UserStorageControllerMessenger;
11
- getUserStorageControllerInstance: () => UserStorageController;
12
- maxNetworksToAdd?: number;
13
- onNetworkAdded?: (chainId: string) => void;
14
- onNetworkUpdated?: (chainId: string) => void;
15
- onNetworkRemoved?: (chainId: string) => void;
16
- };
17
- /**
18
- * Global in-mem cache to signify that the network syncing is in progress
19
- * Ensures that listeners do not fire during main sync (prevent double requests)
20
- */
21
- export declare let isMainNetworkSyncInProgress: boolean;
22
- /**
23
- * Initialize and setup events to listen to for network syncing
24
- * We will be listening to:
25
- * - Remove Event, to indicate that we need to remote network from remote
26
- *
27
- * We will not be listening to:
28
- * - Add/Update events are not required, as we can sync these during the main sync
29
- *
30
- * @param props - parameters used for initializing and enabling network syncing
31
- */
32
- export declare function startNetworkSyncing(props: StartNetworkSyncingProps): void;
33
- /**
34
- * method that will dispatch the `NetworkController:updateNetwork` action.
35
- * transforms and corrects the network configuration (and RPCs) we pass through.
36
- *
37
- * @param props - properties
38
- * @param props.messenger - messenger to call the action
39
- * @param props.originalNetworkConfiguration - original network config (from network controller state)
40
- * @param props.newNetworkConfiguration - new network config (from remote)
41
- * @param props.selectedNetworkClientId - currently selected network client id
42
- */
43
- export declare const dispatchUpdateNetwork: (props: {
44
- messenger: UserStorageControllerMessenger;
45
- originalNetworkConfiguration: NetworkConfiguration;
46
- newNetworkConfiguration: NetworkConfiguration;
47
- selectedNetworkClientId: string;
48
- }) => Promise<void>;
49
- /**
50
- * Action to perform the main network sync.
51
- * It will fetch local networks and remote networks, then determines which networks (local and remote) to add/update
52
- *
53
- * @param props - parameters used for this main sync
54
- */
55
- export declare function performMainNetworkSync(props: PerformMainNetworkSyncProps): Promise<void>;
56
- export {};
57
- //# sourceMappingURL=controller-integration.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"controller-integration.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/controller-integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;AAQzE,OAAO,KAAK,qBAAqB,qCAAiC;AAClE,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAE/E,KAAK,wBAAwB,GAAG;IAC9B,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;IAC9D,qBAAqB,EAAE,MAAM,OAAO,CAAC;CACtC,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF;;;GAGG;AAGH,eAAO,IAAI,2BAA2B,SAAQ,CAAC;AAE/C;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,QAgClE;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,UAAiB;IACjD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,uBAAuB,EAAE,oBAAoB,CAAC;IAC9C,uBAAuB,EAAE,MAAM,CAAC;CACjC,kBAqBA,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,iBA+InC"}
@@ -1,57 +0,0 @@
1
- import type { NetworkConfiguration } from "@metamask/network-controller";
2
- import type UserStorageController from "../UserStorageController.mjs";
3
- import type { UserStorageControllerMessenger } from "../UserStorageController.mjs";
4
- type StartNetworkSyncingProps = {
5
- messenger: UserStorageControllerMessenger;
6
- getUserStorageControllerInstance: () => UserStorageController;
7
- isMutationSyncBlocked: () => boolean;
8
- };
9
- type PerformMainNetworkSyncProps = {
10
- messenger: UserStorageControllerMessenger;
11
- getUserStorageControllerInstance: () => UserStorageController;
12
- maxNetworksToAdd?: number;
13
- onNetworkAdded?: (chainId: string) => void;
14
- onNetworkUpdated?: (chainId: string) => void;
15
- onNetworkRemoved?: (chainId: string) => void;
16
- };
17
- /**
18
- * Global in-mem cache to signify that the network syncing is in progress
19
- * Ensures that listeners do not fire during main sync (prevent double requests)
20
- */
21
- export declare let isMainNetworkSyncInProgress: boolean;
22
- /**
23
- * Initialize and setup events to listen to for network syncing
24
- * We will be listening to:
25
- * - Remove Event, to indicate that we need to remote network from remote
26
- *
27
- * We will not be listening to:
28
- * - Add/Update events are not required, as we can sync these during the main sync
29
- *
30
- * @param props - parameters used for initializing and enabling network syncing
31
- */
32
- export declare function startNetworkSyncing(props: StartNetworkSyncingProps): void;
33
- /**
34
- * method that will dispatch the `NetworkController:updateNetwork` action.
35
- * transforms and corrects the network configuration (and RPCs) we pass through.
36
- *
37
- * @param props - properties
38
- * @param props.messenger - messenger to call the action
39
- * @param props.originalNetworkConfiguration - original network config (from network controller state)
40
- * @param props.newNetworkConfiguration - new network config (from remote)
41
- * @param props.selectedNetworkClientId - currently selected network client id
42
- */
43
- export declare const dispatchUpdateNetwork: (props: {
44
- messenger: UserStorageControllerMessenger;
45
- originalNetworkConfiguration: NetworkConfiguration;
46
- newNetworkConfiguration: NetworkConfiguration;
47
- selectedNetworkClientId: string;
48
- }) => Promise<void>;
49
- /**
50
- * Action to perform the main network sync.
51
- * It will fetch local networks and remote networks, then determines which networks (local and remote) to add/update
52
- *
53
- * @param props - parameters used for this main sync
54
- */
55
- export declare function performMainNetworkSync(props: PerformMainNetworkSyncProps): Promise<void>;
56
- export {};
57
- //# sourceMappingURL=controller-integration.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"controller-integration.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/controller-integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;AAQzE,OAAO,KAAK,qBAAqB,qCAAiC;AAClE,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAE/E,KAAK,wBAAwB,GAAG;IAC9B,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;IAC9D,qBAAqB,EAAE,MAAM,OAAO,CAAC;CACtC,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF;;;GAGG;AAGH,eAAO,IAAI,2BAA2B,SAAQ,CAAC;AAE/C;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,QAgClE;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,UAAiB;IACjD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,uBAAuB,EAAE,oBAAoB,CAAC;IAC9C,uBAAuB,EAAE,MAAM,CAAC;CACjC,kBAqBA,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,iBA+InC"}
@@ -1,191 +0,0 @@
1
- function $importDefault(module) {
2
- if (module?.__esModule) {
3
- return module.default;
4
- }
5
- return module;
6
- }
7
- import $log from "loglevel";
8
- const log = $importDefault($log);
9
- import { getBoundedNetworksToAdd } from "./add-network-utils.mjs";
10
- import { getAllRemoteNetworks } from "./services.mjs";
11
- import { findNetworksToUpdate } from "./sync-all.mjs";
12
- import { batchUpdateNetworks, deleteNetwork } from "./sync-mutations.mjs";
13
- import { createUpdateNetworkProps } from "./update-network-utils.mjs";
14
- /**
15
- * Global in-mem cache to signify that the network syncing is in progress
16
- * Ensures that listeners do not fire during main sync (prevent double requests)
17
- */
18
- // Exported to help testing
19
- // eslint-disable-next-line import-x/no-mutable-exports
20
- export let isMainNetworkSyncInProgress = false;
21
- /**
22
- * Initialize and setup events to listen to for network syncing
23
- * We will be listening to:
24
- * - Remove Event, to indicate that we need to remote network from remote
25
- *
26
- * We will not be listening to:
27
- * - Add/Update events are not required, as we can sync these during the main sync
28
- *
29
- * @param props - parameters used for initializing and enabling network syncing
30
- */
31
- export function startNetworkSyncing(props) {
32
- const { messenger, isMutationSyncBlocked, getUserStorageControllerInstance } = props;
33
- try {
34
- messenger.subscribe('NetworkController:networkRemoved',
35
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
36
- async (networkConfiguration) => {
37
- try {
38
- // If blocked (e.g. we have not yet performed a main-sync), then we should not perform any mutations
39
- if (isMutationSyncBlocked()) {
40
- return;
41
- }
42
- // As main sync is in progress, it will already local and remote networks
43
- // So no need to re-process again.
44
- if (isMainNetworkSyncInProgress) {
45
- return;
46
- }
47
- await deleteNetwork(networkConfiguration, {
48
- getUserStorageControllerInstance,
49
- });
50
- }
51
- catch {
52
- // Silently fail sync
53
- }
54
- });
55
- }
56
- catch (e) {
57
- log.warn('NetworkSyncing, event subscription failed', e);
58
- }
59
- }
60
- /**
61
- * method that will dispatch the `NetworkController:updateNetwork` action.
62
- * transforms and corrects the network configuration (and RPCs) we pass through.
63
- *
64
- * @param props - properties
65
- * @param props.messenger - messenger to call the action
66
- * @param props.originalNetworkConfiguration - original network config (from network controller state)
67
- * @param props.newNetworkConfiguration - new network config (from remote)
68
- * @param props.selectedNetworkClientId - currently selected network client id
69
- */
70
- export const dispatchUpdateNetwork = async (props) => {
71
- const { messenger, originalNetworkConfiguration, newNetworkConfiguration, selectedNetworkClientId, } = props;
72
- const { updateNetworkFields, newSelectedRpcEndpointIndex } = createUpdateNetworkProps({
73
- originalNetworkConfiguration,
74
- newNetworkConfiguration,
75
- selectedNetworkClientId,
76
- });
77
- await messenger.call('NetworkController:updateNetwork', updateNetworkFields.chainId, updateNetworkFields, { replacementSelectedRpcEndpointIndex: newSelectedRpcEndpointIndex });
78
- };
79
- /**
80
- * Action to perform the main network sync.
81
- * It will fetch local networks and remote networks, then determines which networks (local and remote) to add/update
82
- *
83
- * @param props - parameters used for this main sync
84
- */
85
- export async function performMainNetworkSync(props) {
86
- const { messenger, maxNetworksToAdd, onNetworkAdded, onNetworkRemoved, onNetworkUpdated, getUserStorageControllerInstance, } = props;
87
- // Edge-Case, we do not want to re-run the main-sync if it already is in progress
88
- /* istanbul ignore if - this is not testable */
89
- if (isMainNetworkSyncInProgress) {
90
- return;
91
- }
92
- isMainNetworkSyncInProgress = true;
93
- try {
94
- const networkControllerState = messenger.call('NetworkController:getState');
95
- const localNetworks = Object.values(networkControllerState.networkConfigurationsByChainId ?? {});
96
- const remoteNetworks = await getAllRemoteNetworks({
97
- getUserStorageControllerInstance,
98
- });
99
- const networkChanges = findNetworksToUpdate({
100
- localNetworks,
101
- remoteNetworks,
102
- });
103
- log.debug('performMainNetworkSync() - Network Syncing Started', {
104
- localNetworks,
105
- remoteNetworks,
106
- networkChanges,
107
- });
108
- // Update Remote
109
- if (networkChanges?.remoteNetworksToUpdate &&
110
- networkChanges.remoteNetworksToUpdate.length > 0) {
111
- await batchUpdateNetworks(networkChanges?.remoteNetworksToUpdate, {
112
- getUserStorageControllerInstance,
113
- });
114
- }
115
- // Add missing local networks
116
- const boundedNetworkedToAdd = networkChanges?.missingLocalNetworks &&
117
- getBoundedNetworksToAdd(localNetworks, networkChanges.missingLocalNetworks, maxNetworksToAdd);
118
- if (boundedNetworkedToAdd && boundedNetworkedToAdd.length > 0) {
119
- const errors = [];
120
- boundedNetworkedToAdd.forEach((n) => {
121
- try {
122
- messenger.call('NetworkController:addNetwork', n);
123
- onNetworkAdded?.(n.chainId);
124
- }
125
- catch (e) {
126
- /* istanbul ignore next - allocates logs, do not need to test */
127
- errors.push(e);
128
- // Silently fail, we can try this again on next main sync
129
- }
130
- });
131
- /* istanbul ignore if - only logs errors, not useful to test */
132
- if (errors.length > 0) {
133
- log.error('performMainNetworkSync() - NetworkController:addNetwork failures', errors);
134
- }
135
- }
136
- // Update local networks
137
- if (networkChanges?.localNetworksToUpdate &&
138
- networkChanges.localNetworksToUpdate.length > 0) {
139
- const errors = [];
140
- for (const n of networkChanges.localNetworksToUpdate) {
141
- try {
142
- await dispatchUpdateNetwork({
143
- messenger,
144
- originalNetworkConfiguration: networkControllerState.networkConfigurationsByChainId[n.chainId],
145
- newNetworkConfiguration: n,
146
- selectedNetworkClientId: networkControllerState.selectedNetworkClientId,
147
- });
148
- onNetworkUpdated?.(n.chainId);
149
- }
150
- catch (e) {
151
- /* istanbul ignore next - allocates logs, do not need to test */
152
- errors.push(e);
153
- // Silently fail, we can try this again on next main sync
154
- }
155
- }
156
- /* istanbul ignore if - only logs errors, not useful to test */
157
- if (errors.length > 0) {
158
- log.error('performMainNetworkSync() - NetworkController:updateNetwork failed', errors);
159
- }
160
- }
161
- // Remove local networks
162
- if (networkChanges?.localNetworksToRemove &&
163
- networkChanges.localNetworksToRemove.length > 0) {
164
- const errors = [];
165
- networkChanges.localNetworksToRemove.forEach((n) => {
166
- try {
167
- messenger.call('NetworkController:removeNetwork', n.chainId);
168
- onNetworkRemoved?.(n.chainId);
169
- }
170
- catch (e) {
171
- /* istanbul ignore next - allocates logs, do not need to test */
172
- errors.push(e);
173
- // Silently fail, we can try this again on next main sync
174
- }
175
- });
176
- /* istanbul ignore if - only logs errors, not useful to test */
177
- if (errors.length > 0) {
178
- log.error('performMainNetworkSync() - NetworkController:removeNetwork failed', errors);
179
- }
180
- }
181
- }
182
- catch (e) {
183
- /* istanbul ignore next - only logs errors, not useful to test */
184
- log.error('performMainNetworkSync() failed', e);
185
- // Silently fail sync
186
- }
187
- finally {
188
- isMainNetworkSyncInProgress = false;
189
- }
190
- }
191
- //# sourceMappingURL=controller-integration.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"controller-integration.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/controller-integration.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NetworkConfiguration } from '@metamask/network-controller';\nimport log from 'loglevel';\n\nimport { getBoundedNetworksToAdd } from './add-network-utils';\nimport { getAllRemoteNetworks } from './services';\nimport { findNetworksToUpdate } from './sync-all';\nimport { batchUpdateNetworks, deleteNetwork } from './sync-mutations';\nimport { createUpdateNetworkProps } from './update-network-utils';\nimport type UserStorageController from '../UserStorageController';\nimport type { UserStorageControllerMessenger } from '../UserStorageController';\n\ntype StartNetworkSyncingProps = {\n messenger: UserStorageControllerMessenger;\n getUserStorageControllerInstance: () => UserStorageController;\n isMutationSyncBlocked: () => boolean;\n};\n\ntype PerformMainNetworkSyncProps = {\n messenger: UserStorageControllerMessenger;\n getUserStorageControllerInstance: () => UserStorageController;\n maxNetworksToAdd?: number;\n onNetworkAdded?: (chainId: string) => void;\n onNetworkUpdated?: (chainId: string) => void;\n onNetworkRemoved?: (chainId: string) => void;\n};\n\n/**\n * Global in-mem cache to signify that the network syncing is in progress\n * Ensures that listeners do not fire during main sync (prevent double requests)\n */\n// Exported to help testing\n// eslint-disable-next-line import-x/no-mutable-exports\nexport let isMainNetworkSyncInProgress = false;\n\n/**\n * Initialize and setup events to listen to for network syncing\n * We will be listening to:\n * - Remove Event, to indicate that we need to remote network from remote\n *\n * We will not be listening to:\n * - Add/Update events are not required, as we can sync these during the main sync\n *\n * @param props - parameters used for initializing and enabling network syncing\n */\nexport function startNetworkSyncing(props: StartNetworkSyncingProps) {\n const { messenger, isMutationSyncBlocked, getUserStorageControllerInstance } =\n props;\n try {\n messenger.subscribe(\n 'NetworkController:networkRemoved',\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n async (networkConfiguration) => {\n try {\n // If blocked (e.g. we have not yet performed a main-sync), then we should not perform any mutations\n if (isMutationSyncBlocked()) {\n return;\n }\n\n // As main sync is in progress, it will already local and remote networks\n // So no need to re-process again.\n if (isMainNetworkSyncInProgress) {\n return;\n }\n\n await deleteNetwork(networkConfiguration, {\n getUserStorageControllerInstance,\n });\n } catch {\n // Silently fail sync\n }\n },\n );\n } catch (e) {\n log.warn('NetworkSyncing, event subscription failed', e);\n }\n}\n\n/**\n * method that will dispatch the `NetworkController:updateNetwork` action.\n * transforms and corrects the network configuration (and RPCs) we pass through.\n *\n * @param props - properties\n * @param props.messenger - messenger to call the action\n * @param props.originalNetworkConfiguration - original network config (from network controller state)\n * @param props.newNetworkConfiguration - new network config (from remote)\n * @param props.selectedNetworkClientId - currently selected network client id\n */\nexport const dispatchUpdateNetwork = async (props: {\n messenger: UserStorageControllerMessenger;\n originalNetworkConfiguration: NetworkConfiguration;\n newNetworkConfiguration: NetworkConfiguration;\n selectedNetworkClientId: string;\n}) => {\n const {\n messenger,\n originalNetworkConfiguration,\n newNetworkConfiguration,\n selectedNetworkClientId,\n } = props;\n\n const { updateNetworkFields, newSelectedRpcEndpointIndex } =\n createUpdateNetworkProps({\n originalNetworkConfiguration,\n newNetworkConfiguration,\n selectedNetworkClientId,\n });\n\n await messenger.call(\n 'NetworkController:updateNetwork',\n updateNetworkFields.chainId,\n updateNetworkFields,\n { replacementSelectedRpcEndpointIndex: newSelectedRpcEndpointIndex },\n );\n};\n\n/**\n * Action to perform the main network sync.\n * It will fetch local networks and remote networks, then determines which networks (local and remote) to add/update\n *\n * @param props - parameters used for this main sync\n */\nexport async function performMainNetworkSync(\n props: PerformMainNetworkSyncProps,\n) {\n const {\n messenger,\n maxNetworksToAdd,\n onNetworkAdded,\n onNetworkRemoved,\n onNetworkUpdated,\n getUserStorageControllerInstance,\n } = props;\n\n // Edge-Case, we do not want to re-run the main-sync if it already is in progress\n /* istanbul ignore if - this is not testable */\n if (isMainNetworkSyncInProgress) {\n return;\n }\n\n isMainNetworkSyncInProgress = true;\n try {\n const networkControllerState = messenger.call('NetworkController:getState');\n const localNetworks = Object.values(\n networkControllerState.networkConfigurationsByChainId ?? {},\n );\n\n const remoteNetworks = await getAllRemoteNetworks({\n getUserStorageControllerInstance,\n });\n const networkChanges = findNetworksToUpdate({\n localNetworks,\n remoteNetworks,\n });\n\n log.debug('performMainNetworkSync() - Network Syncing Started', {\n localNetworks,\n remoteNetworks,\n networkChanges,\n });\n\n // Update Remote\n if (\n networkChanges?.remoteNetworksToUpdate &&\n networkChanges.remoteNetworksToUpdate.length > 0\n ) {\n await batchUpdateNetworks(networkChanges?.remoteNetworksToUpdate, {\n getUserStorageControllerInstance,\n });\n }\n\n // Add missing local networks\n const boundedNetworkedToAdd =\n networkChanges?.missingLocalNetworks &&\n getBoundedNetworksToAdd(\n localNetworks,\n networkChanges.missingLocalNetworks,\n maxNetworksToAdd,\n );\n if (boundedNetworkedToAdd && boundedNetworkedToAdd.length > 0) {\n const errors: unknown[] = [];\n boundedNetworkedToAdd.forEach((n) => {\n try {\n messenger.call('NetworkController:addNetwork', n);\n onNetworkAdded?.(n.chainId);\n } catch (e) {\n /* istanbul ignore next - allocates logs, do not need to test */\n errors.push(e);\n // Silently fail, we can try this again on next main sync\n }\n });\n\n /* istanbul ignore if - only logs errors, not useful to test */\n if (errors.length > 0) {\n log.error(\n 'performMainNetworkSync() - NetworkController:addNetwork failures',\n errors,\n );\n }\n }\n\n // Update local networks\n if (\n networkChanges?.localNetworksToUpdate &&\n networkChanges.localNetworksToUpdate.length > 0\n ) {\n const errors: unknown[] = [];\n for (const n of networkChanges.localNetworksToUpdate) {\n try {\n await dispatchUpdateNetwork({\n messenger,\n originalNetworkConfiguration:\n networkControllerState.networkConfigurationsByChainId[n.chainId],\n newNetworkConfiguration: n,\n selectedNetworkClientId:\n networkControllerState.selectedNetworkClientId,\n });\n onNetworkUpdated?.(n.chainId);\n } catch (e) {\n /* istanbul ignore next - allocates logs, do not need to test */\n errors.push(e);\n // Silently fail, we can try this again on next main sync\n }\n }\n\n /* istanbul ignore if - only logs errors, not useful to test */\n if (errors.length > 0) {\n log.error(\n 'performMainNetworkSync() - NetworkController:updateNetwork failed',\n errors,\n );\n }\n }\n\n // Remove local networks\n if (\n networkChanges?.localNetworksToRemove &&\n networkChanges.localNetworksToRemove.length > 0\n ) {\n const errors: unknown[] = [];\n networkChanges.localNetworksToRemove.forEach((n) => {\n try {\n messenger.call('NetworkController:removeNetwork', n.chainId);\n onNetworkRemoved?.(n.chainId);\n } catch (e) {\n /* istanbul ignore next - allocates logs, do not need to test */\n errors.push(e);\n // Silently fail, we can try this again on next main sync\n }\n });\n\n /* istanbul ignore if - only logs errors, not useful to test */\n if (errors.length > 0) {\n log.error(\n 'performMainNetworkSync() - NetworkController:removeNetwork failed',\n errors,\n );\n }\n }\n } catch (e) {\n /* istanbul ignore next - only logs errors, not useful to test */\n log.error('performMainNetworkSync() failed', e);\n // Silently fail sync\n } finally {\n isMainNetworkSyncInProgress = false;\n }\n}\n"]}