@metamask/profile-sync-controller 2.0.0 → 3.1.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 +45 -1
  2. package/dist/controllers/authentication/AuthenticationController.cjs +0 -1
  3. package/dist/controllers/authentication/AuthenticationController.cjs.map +1 -1
  4. package/dist/controllers/authentication/AuthenticationController.d.cts.map +1 -1
  5. package/dist/controllers/authentication/AuthenticationController.d.mts.map +1 -1
  6. package/dist/controllers/authentication/AuthenticationController.mjs +0 -1
  7. package/dist/controllers/authentication/AuthenticationController.mjs.map +1 -1
  8. package/dist/controllers/user-storage/UserStorageController.cjs +55 -22
  9. package/dist/controllers/user-storage/UserStorageController.cjs.map +1 -1
  10. package/dist/controllers/user-storage/UserStorageController.d.cts +32 -15
  11. package/dist/controllers/user-storage/UserStorageController.d.cts.map +1 -1
  12. package/dist/controllers/user-storage/UserStorageController.d.mts +32 -15
  13. package/dist/controllers/user-storage/UserStorageController.d.mts.map +1 -1
  14. package/dist/controllers/user-storage/UserStorageController.mjs +56 -23
  15. package/dist/controllers/user-storage/UserStorageController.mjs.map +1 -1
  16. package/dist/controllers/user-storage/__fixtures__/mockMessenger.cjs +171 -0
  17. package/dist/controllers/user-storage/__fixtures__/mockMessenger.cjs.map +1 -0
  18. package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.cts +102 -0
  19. package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.cts.map +1 -0
  20. package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.mts +102 -0
  21. package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.mts.map +1 -0
  22. package/dist/controllers/user-storage/__fixtures__/mockMessenger.mjs +166 -0
  23. package/dist/controllers/user-storage/__fixtures__/mockMessenger.mjs.map +1 -0
  24. package/dist/controllers/user-storage/__fixtures__/mockResponses.cjs +7 -6
  25. package/dist/controllers/user-storage/__fixtures__/mockResponses.cjs.map +1 -1
  26. package/dist/controllers/user-storage/__fixtures__/mockResponses.d.cts.map +1 -1
  27. package/dist/controllers/user-storage/__fixtures__/mockResponses.d.mts.map +1 -1
  28. package/dist/controllers/user-storage/__fixtures__/mockResponses.mjs +7 -6
  29. package/dist/controllers/user-storage/__fixtures__/mockResponses.mjs.map +1 -1
  30. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.cjs +20 -2
  31. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.cjs.map +1 -1
  32. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.d.cts +8 -1
  33. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.d.cts.map +1 -1
  34. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.d.mts +8 -1
  35. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.d.mts.map +1 -1
  36. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.mjs +17 -1
  37. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.mjs.map +1 -1
  38. package/dist/controllers/user-storage/network-syncing/add-network-utils.cjs +35 -0
  39. package/dist/controllers/user-storage/network-syncing/add-network-utils.cjs.map +1 -0
  40. package/dist/controllers/user-storage/network-syncing/add-network-utils.d.cts +21 -0
  41. package/dist/controllers/user-storage/network-syncing/add-network-utils.d.cts.map +1 -0
  42. package/dist/controllers/user-storage/network-syncing/add-network-utils.d.mts +21 -0
  43. package/dist/controllers/user-storage/network-syncing/add-network-utils.d.mts.map +1 -0
  44. package/dist/controllers/user-storage/network-syncing/add-network-utils.mjs +30 -0
  45. package/dist/controllers/user-storage/network-syncing/add-network-utils.mjs.map +1 -0
  46. package/dist/controllers/user-storage/network-syncing/controller-integration.cjs +157 -29
  47. package/dist/controllers/user-storage/network-syncing/controller-integration.cjs.map +1 -1
  48. package/dist/controllers/user-storage/network-syncing/controller-integration.d.cts +45 -3
  49. package/dist/controllers/user-storage/network-syncing/controller-integration.d.cts.map +1 -1
  50. package/dist/controllers/user-storage/network-syncing/controller-integration.d.mts +45 -3
  51. package/dist/controllers/user-storage/network-syncing/controller-integration.d.mts.map +1 -1
  52. package/dist/controllers/user-storage/network-syncing/controller-integration.mjs +154 -28
  53. package/dist/controllers/user-storage/network-syncing/controller-integration.mjs.map +1 -1
  54. package/dist/controllers/user-storage/network-syncing/services.cjs +9 -4
  55. package/dist/controllers/user-storage/network-syncing/services.cjs.map +1 -1
  56. package/dist/controllers/user-storage/network-syncing/services.d.cts.map +1 -1
  57. package/dist/controllers/user-storage/network-syncing/services.d.mts.map +1 -1
  58. package/dist/controllers/user-storage/network-syncing/services.mjs +10 -5
  59. package/dist/controllers/user-storage/network-syncing/services.mjs.map +1 -1
  60. package/dist/controllers/user-storage/network-syncing/sync-all.cjs +10 -28
  61. package/dist/controllers/user-storage/network-syncing/sync-all.cjs.map +1 -1
  62. package/dist/controllers/user-storage/network-syncing/sync-all.d.cts +5 -8
  63. package/dist/controllers/user-storage/network-syncing/sync-all.d.cts.map +1 -1
  64. package/dist/controllers/user-storage/network-syncing/sync-all.d.mts +5 -8
  65. package/dist/controllers/user-storage/network-syncing/sync-all.d.mts.map +1 -1
  66. package/dist/controllers/user-storage/network-syncing/sync-all.mjs +9 -26
  67. package/dist/controllers/user-storage/network-syncing/sync-all.mjs.map +1 -1
  68. package/dist/controllers/user-storage/network-syncing/sync-mutations.cjs +1 -1
  69. package/dist/controllers/user-storage/network-syncing/sync-mutations.cjs.map +1 -1
  70. package/dist/controllers/user-storage/network-syncing/sync-mutations.d.cts +1 -1
  71. package/dist/controllers/user-storage/network-syncing/sync-mutations.d.cts.map +1 -1
  72. package/dist/controllers/user-storage/network-syncing/sync-mutations.d.mts +1 -1
  73. package/dist/controllers/user-storage/network-syncing/sync-mutations.d.mts.map +1 -1
  74. package/dist/controllers/user-storage/network-syncing/sync-mutations.mjs +1 -1
  75. package/dist/controllers/user-storage/network-syncing/sync-mutations.mjs.map +1 -1
  76. package/dist/controllers/user-storage/network-syncing/types.cjs.map +1 -1
  77. package/dist/controllers/user-storage/network-syncing/types.d.cts +1 -4
  78. package/dist/controllers/user-storage/network-syncing/types.d.cts.map +1 -1
  79. package/dist/controllers/user-storage/network-syncing/types.d.mts +1 -4
  80. package/dist/controllers/user-storage/network-syncing/types.d.mts.map +1 -1
  81. package/dist/controllers/user-storage/network-syncing/types.mjs.map +1 -1
  82. package/dist/controllers/user-storage/network-syncing/update-network-utils.cjs +126 -0
  83. package/dist/controllers/user-storage/network-syncing/update-network-utils.cjs.map +1 -0
  84. package/dist/controllers/user-storage/network-syncing/update-network-utils.d.cts +56 -0
  85. package/dist/controllers/user-storage/network-syncing/update-network-utils.d.cts.map +1 -0
  86. package/dist/controllers/user-storage/network-syncing/update-network-utils.d.mts +56 -0
  87. package/dist/controllers/user-storage/network-syncing/update-network-utils.d.mts.map +1 -0
  88. package/dist/controllers/user-storage/network-syncing/update-network-utils.mjs +119 -0
  89. package/dist/controllers/user-storage/network-syncing/update-network-utils.mjs.map +1 -0
  90. package/dist/controllers/user-storage/services.cjs +49 -1
  91. package/dist/controllers/user-storage/services.cjs.map +1 -1
  92. package/dist/controllers/user-storage/services.d.cts +8 -0
  93. package/dist/controllers/user-storage/services.d.cts.map +1 -1
  94. package/dist/controllers/user-storage/services.d.mts +8 -0
  95. package/dist/controllers/user-storage/services.d.mts.map +1 -1
  96. package/dist/controllers/user-storage/services.mjs +47 -0
  97. package/dist/controllers/user-storage/services.mjs.map +1 -1
  98. package/dist/sdk/__fixtures__/mock-userstorage.cjs +29 -6
  99. package/dist/sdk/__fixtures__/mock-userstorage.cjs.map +1 -1
  100. package/dist/sdk/__fixtures__/mock-userstorage.d.cts +4 -6
  101. package/dist/sdk/__fixtures__/mock-userstorage.d.cts.map +1 -1
  102. package/dist/sdk/__fixtures__/mock-userstorage.d.mts +4 -6
  103. package/dist/sdk/__fixtures__/mock-userstorage.d.mts.map +1 -1
  104. package/dist/sdk/__fixtures__/mock-userstorage.mjs +6 -6
  105. package/dist/sdk/__fixtures__/mock-userstorage.mjs.map +1 -1
  106. package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs +1 -2
  107. package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs.map +1 -1
  108. package/dist/sdk/user-storage.cjs +62 -9
  109. package/dist/sdk/user-storage.cjs.map +1 -1
  110. package/dist/sdk/user-storage.d.cts +5 -1
  111. package/dist/sdk/user-storage.d.cts.map +1 -1
  112. package/dist/sdk/user-storage.d.mts +5 -1
  113. package/dist/sdk/user-storage.d.mts.map +1 -1
  114. package/dist/sdk/user-storage.mjs +62 -9
  115. package/dist/sdk/user-storage.mjs.map +1 -1
  116. package/dist/shared/encryption/cache.cjs +12 -14
  117. package/dist/shared/encryption/cache.cjs.map +1 -1
  118. package/dist/shared/encryption/cache.d.cts +4 -3
  119. package/dist/shared/encryption/cache.d.cts.map +1 -1
  120. package/dist/shared/encryption/cache.d.mts +4 -3
  121. package/dist/shared/encryption/cache.d.mts.map +1 -1
  122. package/dist/shared/encryption/cache.mjs +11 -13
  123. package/dist/shared/encryption/cache.mjs.map +1 -1
  124. package/dist/shared/encryption/constants.cjs +18 -0
  125. package/dist/shared/encryption/constants.cjs.map +1 -0
  126. package/dist/shared/encryption/constants.d.cts +8 -0
  127. package/dist/shared/encryption/constants.d.cts.map +1 -0
  128. package/dist/shared/encryption/constants.d.mts +8 -0
  129. package/dist/shared/encryption/constants.d.mts.map +1 -0
  130. package/dist/shared/encryption/constants.mjs +15 -0
  131. package/dist/shared/encryption/constants.mjs.map +1 -0
  132. package/dist/shared/encryption/encryption.cjs +49 -25
  133. package/dist/shared/encryption/encryption.cjs.map +1 -1
  134. package/dist/shared/encryption/encryption.d.cts +2 -0
  135. package/dist/shared/encryption/encryption.d.cts.map +1 -1
  136. package/dist/shared/encryption/encryption.d.mts +2 -0
  137. package/dist/shared/encryption/encryption.d.mts.map +1 -1
  138. package/dist/shared/encryption/encryption.mjs +38 -14
  139. package/dist/shared/encryption/encryption.mjs.map +1 -1
  140. package/package.json +11 -6
@@ -1,13 +1,55 @@
1
+ import type { NetworkConfiguration } from "@metamask/network-controller";
1
2
  import type { UserStorageBaseOptions } from "../services.mjs";
2
3
  import type { UserStorageControllerMessenger } from "../UserStorageController.mjs";
3
- type SetupNetworkSyncingProps = {
4
+ type StartNetworkSyncingProps = {
4
5
  messenger: UserStorageControllerMessenger;
5
- getStorageConfig: () => Promise<UserStorageBaseOptions>;
6
+ getStorageConfig: () => Promise<UserStorageBaseOptions | null>;
7
+ isMutationSyncBlocked: () => boolean;
8
+ };
9
+ type PerformMainNetworkSyncProps = {
10
+ messenger: UserStorageControllerMessenger;
11
+ getStorageConfig: () => Promise<UserStorageBaseOptions | null>;
12
+ maxNetworksToAdd?: number;
13
+ onNetworkAdded?: (chainId: string) => void;
14
+ onNetworkUpdated?: (chainId: string) => void;
15
+ onNetworkRemoved?: (chainId: string) => void;
6
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;
7
22
  /**
8
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
+ *
9
30
  * @param props - parameters used for initializing and enabling network syncing
10
31
  */
11
- export declare function startNetworkSyncing(props: SetupNetworkSyncingProps): void;
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
+ * @param props - properties
37
+ * @param props.messenger - messenger to call the action
38
+ * @param props.originalNetworkConfiguration - original network config (from network controller state)
39
+ * @param props.newNetworkConfiguration - new network config (from remote)
40
+ * @param props.selectedNetworkClientId - currently selected network client id
41
+ */
42
+ export declare const dispatchUpdateNetwork: (props: {
43
+ messenger: UserStorageControllerMessenger;
44
+ originalNetworkConfiguration: NetworkConfiguration;
45
+ newNetworkConfiguration: NetworkConfiguration;
46
+ selectedNetworkClientId: string;
47
+ }) => Promise<void>;
48
+ /**
49
+ * Action to perform the main network sync.
50
+ * It will fetch local networks and remote networks, then determines which networks (local and remote) to add/update
51
+ * @param props - parameters used for this main sync
52
+ */
53
+ export declare function performMainNetworkSync(props: PerformMainNetworkSyncProps): Promise<void>;
12
54
  export {};
13
55
  //# sourceMappingURL=controller-integration.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"controller-integration.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/controller-integration.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAoB;AAC1D,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAG/E,KAAK,wBAAwB,GAAG;IAC9B,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gBAAgB,EAAE,MAAM,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACzD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,QAqDlE"}
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;AAGzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAoB;AAC1D,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAO/E,KAAK,wBAAwB,GAAG;IAC9B,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gBAAgB,EAAE,MAAM,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAC/D,qBAAqB,EAAE,MAAM,OAAO,CAAC;CACtC,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gBAAgB,EAAE,MAAM,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAC/D,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;;;;;;;;GAQG;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;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,iBAgJnC"}
@@ -6,20 +6,49 @@ function $importDefault(module) {
6
6
  }
7
7
  import $log from "loglevel";
8
8
  const log = $importDefault($log);
9
- import { addNetwork, deleteNetwork, updateNetwork } from "./sync-mutations.mjs";
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/no-mutable-exports
20
+ export let isMainNetworkSyncInProgress = false;
10
21
  /**
11
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
+ *
12
29
  * @param props - parameters used for initializing and enabling network syncing
13
30
  */
14
31
  export function startNetworkSyncing(props) {
15
- const { messenger, getStorageConfig } = props;
32
+ const { messenger, getStorageConfig, isMutationSyncBlocked } = props;
16
33
  try {
17
- messenger.subscribe('NetworkController:networkAdded',
34
+ messenger.subscribe('NetworkController:networkRemoved',
18
35
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
19
36
  async (networkConfiguration) => {
20
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
+ }
21
47
  const opts = await getStorageConfig();
22
- await addNetwork(networkConfiguration, opts);
48
+ if (!opts) {
49
+ return;
50
+ }
51
+ await deleteNetwork(networkConfiguration, opts);
23
52
  }
24
53
  catch {
25
54
  // Silently fail sync
@@ -29,37 +58,134 @@ export function startNetworkSyncing(props) {
29
58
  catch (e) {
30
59
  log.warn('NetworkSyncing, event subscription failed', e);
31
60
  }
61
+ }
62
+ /**
63
+ * method that will dispatch the `NetworkController:updateNetwork` action.
64
+ * transforms and corrects the network configuration (and RPCs) we pass through.
65
+ * @param props - properties
66
+ * @param props.messenger - messenger to call the action
67
+ * @param props.originalNetworkConfiguration - original network config (from network controller state)
68
+ * @param props.newNetworkConfiguration - new network config (from remote)
69
+ * @param props.selectedNetworkClientId - currently selected network client id
70
+ */
71
+ export const dispatchUpdateNetwork = async (props) => {
72
+ const { messenger, originalNetworkConfiguration, newNetworkConfiguration, selectedNetworkClientId, } = props;
73
+ const { updateNetworkFields, newSelectedRpcEndpointIndex } = createUpdateNetworkProps({
74
+ originalNetworkConfiguration,
75
+ newNetworkConfiguration,
76
+ selectedNetworkClientId,
77
+ });
78
+ await messenger.call('NetworkController:updateNetwork', updateNetworkFields.chainId, updateNetworkFields, { replacementSelectedRpcEndpointIndex: newSelectedRpcEndpointIndex });
79
+ };
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
+ * @param props - parameters used for this main sync
84
+ */
85
+ export async function performMainNetworkSync(props) {
86
+ const { messenger, getStorageConfig, maxNetworksToAdd, onNetworkAdded, onNetworkRemoved, onNetworkUpdated, } = 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;
32
93
  try {
33
- messenger.subscribe('NetworkController:networkDeleted',
34
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
35
- async (networkConfiguration) => {
36
- try {
37
- const opts = await getStorageConfig();
38
- await deleteNetwork(networkConfiguration, opts);
94
+ const opts = await getStorageConfig();
95
+ if (!opts) {
96
+ return;
97
+ }
98
+ const networkControllerState = messenger.call('NetworkController:getState');
99
+ const localNetworks = Object.values(networkControllerState.networkConfigurationsByChainId ?? {});
100
+ const remoteNetworks = await getAllRemoteNetworks(opts);
101
+ const networkChanges = findNetworksToUpdate({
102
+ localNetworks,
103
+ remoteNetworks,
104
+ });
105
+ log.debug('performMainNetworkSync() - Network Syncing Started', {
106
+ localNetworks,
107
+ remoteNetworks,
108
+ networkChanges,
109
+ });
110
+ // Update Remote
111
+ if (networkChanges?.remoteNetworksToUpdate &&
112
+ networkChanges.remoteNetworksToUpdate.length > 0) {
113
+ await batchUpdateNetworks(networkChanges?.remoteNetworksToUpdate, opts);
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);
39
134
  }
40
- catch {
41
- // Silently fail sync
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
+ }
42
155
  }
43
- });
44
- }
45
- catch (e) {
46
- log.warn('NetworkSyncing, event subscription failed', e);
47
- }
48
- try {
49
- messenger.subscribe('NetworkController:networkChanged',
50
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
51
- async (networkConfiguration) => {
52
- try {
53
- const opts = await getStorageConfig();
54
- await updateNetwork(networkConfiguration, opts);
156
+ /* istanbul ignore if - only logs errors, not useful to test */
157
+ if (errors.length > 0) {
158
+ log.error('performMainNetworkSync() - NetworkController:updateNetwork failed', errors);
55
159
  }
56
- catch {
57
- // Silently fail sync
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);
58
179
  }
59
- });
180
+ }
60
181
  }
61
182
  catch (e) {
62
- log.warn('NetworkSyncing, event subscription failed', 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;
63
189
  }
64
190
  }
65
191
  //# sourceMappingURL=controller-integration.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"controller-integration.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/controller-integration.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,IAAG,iBAAiB;;AAI3B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,6BAAyB;AAO5E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IACjE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAE9C,IAAI;QACF,SAAS,CAAC,SAAS,CACjB,gCAAgC;QAChC,kEAAkE;QAClE,KAAK,EAAE,oBAAoB,EAAE,EAAE;YAC7B,IAAI;gBACF,MAAM,IAAI,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBACtC,MAAM,UAAU,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;aAC9C;YAAC,MAAM;gBACN,qBAAqB;aACtB;QACH,CAAC,CACF,CAAC;KACH;IAAC,OAAO,CAAC,EAAE;QACV,GAAG,CAAC,IAAI,CAAC,2CAA2C,EAAE,CAAC,CAAC,CAAC;KAC1D;IAED,IAAI;QACF,SAAS,CAAC,SAAS,CACjB,kCAAkC;QAClC,kEAAkE;QAClE,KAAK,EAAE,oBAAoB,EAAE,EAAE;YAC7B,IAAI;gBACF,MAAM,IAAI,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBACtC,MAAM,aAAa,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;aACjD;YAAC,MAAM;gBACN,qBAAqB;aACtB;QACH,CAAC,CACF,CAAC;KACH;IAAC,OAAO,CAAC,EAAE;QACV,GAAG,CAAC,IAAI,CAAC,2CAA2C,EAAE,CAAC,CAAC,CAAC;KAC1D;IAED,IAAI;QACF,SAAS,CAAC,SAAS,CACjB,kCAAkC;QAClC,kEAAkE;QAClE,KAAK,EAAE,oBAAoB,EAAE,EAAE;YAC7B,IAAI;gBACF,MAAM,IAAI,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBACtC,MAAM,aAAa,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;aACjD;YAAC,MAAM;gBACN,qBAAqB;aACtB;QACH,CAAC,CACF,CAAC;KACH;IAAC,OAAO,CAAC,EAAE;QACV,GAAG,CAAC,IAAI,CAAC,2CAA2C,EAAE,CAAC,CAAC,CAAC;KAC1D;AACH,CAAC","sourcesContent":["import log from 'loglevel';\n\nimport type { UserStorageBaseOptions } from '../services';\nimport type { UserStorageControllerMessenger } from '../UserStorageController';\nimport { addNetwork, deleteNetwork, updateNetwork } from './sync-mutations';\n\ntype SetupNetworkSyncingProps = {\n messenger: UserStorageControllerMessenger;\n getStorageConfig: () => Promise<UserStorageBaseOptions>;\n};\n\n/**\n * Initialize and setup events to listen to for network syncing\n * @param props - parameters used for initializing and enabling network syncing\n */\nexport function startNetworkSyncing(props: SetupNetworkSyncingProps) {\n const { messenger, getStorageConfig } = props;\n\n try {\n messenger.subscribe(\n 'NetworkController:networkAdded',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n async (networkConfiguration) => {\n try {\n const opts = await getStorageConfig();\n await addNetwork(networkConfiguration, opts);\n } catch {\n // Silently fail sync\n }\n },\n );\n } catch (e) {\n log.warn('NetworkSyncing, event subscription failed', e);\n }\n\n try {\n messenger.subscribe(\n 'NetworkController:networkDeleted',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n async (networkConfiguration) => {\n try {\n const opts = await getStorageConfig();\n await deleteNetwork(networkConfiguration, opts);\n } catch {\n // Silently fail sync\n }\n },\n );\n } catch (e) {\n log.warn('NetworkSyncing, event subscription failed', e);\n }\n\n try {\n messenger.subscribe(\n 'NetworkController:networkChanged',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n async (networkConfiguration) => {\n try {\n const opts = await getStorageConfig();\n await updateNetwork(networkConfiguration, opts);\n } catch {\n // Silently fail sync\n }\n },\n );\n } catch (e) {\n log.warn('NetworkSyncing, event subscription failed', e);\n }\n}\n"]}
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 type { UserStorageBaseOptions } from '../services';\nimport type { UserStorageControllerMessenger } from '../UserStorageController';\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';\n\ntype StartNetworkSyncingProps = {\n messenger: UserStorageControllerMessenger;\n getStorageConfig: () => Promise<UserStorageBaseOptions | null>;\n isMutationSyncBlocked: () => boolean;\n};\n\ntype PerformMainNetworkSyncProps = {\n messenger: UserStorageControllerMessenger;\n getStorageConfig: () => Promise<UserStorageBaseOptions | null>;\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/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, getStorageConfig, isMutationSyncBlocked } = props;\n try {\n messenger.subscribe(\n 'NetworkController:networkRemoved',\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 const opts = await getStorageConfig();\n if (!opts) {\n return;\n }\n await deleteNetwork(networkConfiguration, opts);\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 * @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 * @param props - parameters used for this main sync\n */\nexport async function performMainNetworkSync(\n props: PerformMainNetworkSyncProps,\n) {\n const {\n messenger,\n getStorageConfig,\n maxNetworksToAdd,\n onNetworkAdded,\n onNetworkRemoved,\n onNetworkUpdated,\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 opts = await getStorageConfig();\n if (!opts) {\n return;\n }\n\n const networkControllerState = messenger.call('NetworkController:getState');\n const localNetworks = Object.values(\n networkControllerState.networkConfigurationsByChainId ?? {},\n );\n\n const remoteNetworks = await getAllRemoteNetworks(opts);\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, opts);\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"]}
@@ -56,10 +56,15 @@ exports.upsertRemoteNetwork = upsertRemoteNetwork;
56
56
  * @param opts - user storage options/configuration
57
57
  */
58
58
  async function batchUpsertRemoteNetworks(networks, opts) {
59
- // TODO - this has not yet been provided by the backend team
60
- // we will replace this with a batch endpoint in near future
61
- const promises = networks.map((n) => upsertRemoteNetwork(n, opts));
62
- await Promise.allSettled(promises);
59
+ const networkPathAndValues = networks.map((n) => {
60
+ const path = n.chainId;
61
+ const data = JSON.stringify(n);
62
+ return [path, data];
63
+ });
64
+ await (0, services_1.batchUpsertUserStorage)(networkPathAndValues, {
65
+ path: 'networks',
66
+ ...opts,
67
+ });
63
68
  }
64
69
  exports.batchUpsertRemoteNetworks = batchUpsertRemoteNetworks;
65
70
  //# sourceMappingURL=services.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"services.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":";;;AAAA,uEAA4E;AAE5E,8CAGqB;AAGrB,gDAAgD;AAChD;;;;;;GAMG;AACH,SAAS,yBAAyB,CAAC,OAAe;IAChD,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA+B,CAAC;KAC1D;IAAC,MAAM;QACN,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAED,MAAM,SAAS,GAAG,CAAQ,KAA+B,EAAkB,EAAE,CAC3E,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAExC;;;;GAIG;AACI,KAAK,UAAU,oBAAoB,CACxC,IAA4B;IAE5B,MAAM,UAAU,GACd,CAAC,MAAM,IAAA,0CAA+B,EAAC;QACrC,GAAG,IAAI;QACP,IAAI,EAAE,2CAA0B,CAAC,QAAQ;KAC1C,CAAC,CAAC,IAAI,EAAE,CAAC;IAEZ,MAAM,OAAO,GAAG,UAAU;SACvB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;SACpD,MAAM,CAAC,SAAS,CAAC,CAAC;IAErB,OAAO,OAAO,CAAC;AACjB,CAAC;AAdD,oDAcC;AAED;;;;GAIG;AACI,KAAK,UAAU,mBAAmB,CACvC,OAAmC,EACnC,IAA4B;IAE5B,MAAM,OAAO,GAAW,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,MAAM,IAAA,4BAAiB,EAAC,IAAI,EAAE;QACnC,GAAG,IAAI;QACP,IAAI,EAAE,YAAY,OAAO,EAAE;KAC5B,CAAC,CAAC;AACL,CAAC;AAVD,kDAUC;AAED;;;;GAIG;AACI,KAAK,UAAU,yBAAyB,CAC7C,QAAsC,EACtC,IAA4B;IAE5B,4DAA4D;IAC5D,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AARD,8DAQC","sourcesContent":["import { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema';\nimport type { UserStorageBaseOptions } from '../services';\nimport {\n getUserStorageAllFeatureEntries,\n upsertUserStorage,\n} from '../services';\nimport type { RemoteNetworkConfiguration } from './types';\n\n// TODO - parse type, and handle version changes\n/**\n * parses the raw remote data to the NetworkConfiguration shape\n * @todo - improve parsing instead of asserting\n * @todo - improve version handling\n * @param rawData - raw remote user storage data\n * @returns NetworkConfiguration or undefined if failed to parse\n */\nfunction parseNetworkConfiguration(rawData: string) {\n try {\n return JSON.parse(rawData) as RemoteNetworkConfiguration;\n } catch {\n return undefined;\n }\n}\n\nconst isDefined = <Value>(value: Value | null | undefined): value is Value =>\n value !== undefined && value !== null;\n\n/**\n * gets all remote networks from user storage\n * @param opts - user storage options/configuration\n * @returns array of all remote networks\n */\nexport async function getAllRemoteNetworks(\n opts: UserStorageBaseOptions,\n): Promise<RemoteNetworkConfiguration[]> {\n const rawResults =\n (await getUserStorageAllFeatureEntries({\n ...opts,\n path: USER_STORAGE_FEATURE_NAMES.networks,\n })) ?? [];\n\n const results = rawResults\n .map((rawData) => parseNetworkConfiguration(rawData))\n .filter(isDefined);\n\n return results;\n}\n\n/**\n * Upserts a remote network to user storage\n * @param network - network we are updating or inserting\n * @param opts - user storage options/configuration\n */\nexport async function upsertRemoteNetwork(\n network: RemoteNetworkConfiguration,\n opts: UserStorageBaseOptions,\n) {\n const chainId: string = network.chainId.toString();\n const data = JSON.stringify(network);\n return await upsertUserStorage(data, {\n ...opts,\n path: `networks.${chainId}`,\n });\n}\n\n/**\n * Batch upsert a list of remote networks into user storage\n * @param networks - a list of networks to update or insert\n * @param opts - user storage options/configuration\n */\nexport async function batchUpsertRemoteNetworks(\n networks: RemoteNetworkConfiguration[],\n opts: UserStorageBaseOptions,\n): Promise<void> {\n // TODO - this has not yet been provided by the backend team\n // we will replace this with a batch endpoint in near future\n const promises = networks.map((n) => upsertRemoteNetwork(n, opts));\n await Promise.allSettled(promises);\n}\n"]}
1
+ {"version":3,"file":"services.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":";;;AAAA,uEAA4E;AAE5E,8CAIqB;AAGrB,gDAAgD;AAChD;;;;;;GAMG;AACH,SAAS,yBAAyB,CAAC,OAAe;IAChD,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA+B,CAAC;KAC1D;IAAC,MAAM;QACN,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAED,MAAM,SAAS,GAAG,CAAQ,KAA+B,EAAkB,EAAE,CAC3E,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAExC;;;;GAIG;AACI,KAAK,UAAU,oBAAoB,CACxC,IAA4B;IAE5B,MAAM,UAAU,GACd,CAAC,MAAM,IAAA,0CAA+B,EAAC;QACrC,GAAG,IAAI;QACP,IAAI,EAAE,2CAA0B,CAAC,QAAQ;KAC1C,CAAC,CAAC,IAAI,EAAE,CAAC;IAEZ,MAAM,OAAO,GAAG,UAAU;SACvB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;SACpD,MAAM,CAAC,SAAS,CAAC,CAAC;IAErB,OAAO,OAAO,CAAC;AACjB,CAAC;AAdD,oDAcC;AAED;;;;GAIG;AACI,KAAK,UAAU,mBAAmB,CACvC,OAAmC,EACnC,IAA4B;IAE5B,MAAM,OAAO,GAAW,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,MAAM,IAAA,4BAAiB,EAAC,IAAI,EAAE;QACnC,GAAG,IAAI;QACP,IAAI,EAAE,YAAY,OAAO,EAAE;KAC5B,CAAC,CAAC;AACL,CAAC;AAVD,kDAUC;AAED;;;;GAIG;AACI,KAAK,UAAU,yBAAyB,CAC7C,QAAsC,EACtC,IAA4B;IAE5B,MAAM,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,EAAE,IAAI,CAAqB,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,IAAA,iCAAsB,EAAC,oBAAoB,EAAE;QACjD,IAAI,EAAE,UAAU;QAChB,GAAG,IAAI;KACR,CAAC,CAAC;AACL,CAAC;AAdD,8DAcC","sourcesContent":["import { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema';\nimport type { UserStorageBaseOptions } from '../services';\nimport {\n batchUpsertUserStorage,\n getUserStorageAllFeatureEntries,\n upsertUserStorage,\n} from '../services';\nimport type { RemoteNetworkConfiguration } from './types';\n\n// TODO - parse type, and handle version changes\n/**\n * parses the raw remote data to the NetworkConfiguration shape\n * @todo - improve parsing instead of asserting\n * @todo - improve version handling\n * @param rawData - raw remote user storage data\n * @returns NetworkConfiguration or undefined if failed to parse\n */\nfunction parseNetworkConfiguration(rawData: string) {\n try {\n return JSON.parse(rawData) as RemoteNetworkConfiguration;\n } catch {\n return undefined;\n }\n}\n\nconst isDefined = <Value>(value: Value | null | undefined): value is Value =>\n value !== undefined && value !== null;\n\n/**\n * gets all remote networks from user storage\n * @param opts - user storage options/configuration\n * @returns array of all remote networks\n */\nexport async function getAllRemoteNetworks(\n opts: UserStorageBaseOptions,\n): Promise<RemoteNetworkConfiguration[]> {\n const rawResults =\n (await getUserStorageAllFeatureEntries({\n ...opts,\n path: USER_STORAGE_FEATURE_NAMES.networks,\n })) ?? [];\n\n const results = rawResults\n .map((rawData) => parseNetworkConfiguration(rawData))\n .filter(isDefined);\n\n return results;\n}\n\n/**\n * Upserts a remote network to user storage\n * @param network - network we are updating or inserting\n * @param opts - user storage options/configuration\n */\nexport async function upsertRemoteNetwork(\n network: RemoteNetworkConfiguration,\n opts: UserStorageBaseOptions,\n) {\n const chainId: string = network.chainId.toString();\n const data = JSON.stringify(network);\n return await upsertUserStorage(data, {\n ...opts,\n path: `networks.${chainId}`,\n });\n}\n\n/**\n * Batch upsert a list of remote networks into user storage\n * @param networks - a list of networks to update or insert\n * @param opts - user storage options/configuration\n */\nexport async function batchUpsertRemoteNetworks(\n networks: RemoteNetworkConfiguration[],\n opts: UserStorageBaseOptions,\n): Promise<void> {\n const networkPathAndValues = networks.map((n) => {\n const path = n.chainId;\n const data = JSON.stringify(n);\n return [path, data] as [string, string];\n });\n\n await batchUpsertUserStorage(networkPathAndValues, {\n path: 'networks',\n ...opts,\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"services.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAoB;AAK1D,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAgB;AAqB1D;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAYvC;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,EACnC,IAAI,EAAE,sBAAsB,iBAQ7B;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,0BAA0B,EAAE,EACtC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAKf"}
1
+ {"version":3,"file":"services.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAoB;AAM1D,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAgB;AAqB1D;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAYvC;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,EACnC,IAAI,EAAE,sBAAsB,iBAQ7B;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,0BAA0B,EAAE,EACtC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -1 +1 @@
1
- {"version":3,"file":"services.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAoB;AAK1D,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAgB;AAqB1D;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAYvC;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,EACnC,IAAI,EAAE,sBAAsB,iBAQ7B;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,0BAA0B,EAAE,EACtC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAKf"}
1
+ {"version":3,"file":"services.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAoB;AAM1D,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAgB;AAqB1D;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAYvC;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,EACnC,IAAI,EAAE,sBAAsB,iBAQ7B;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,0BAA0B,EAAE,EACtC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -1,5 +1,5 @@
1
1
  import { USER_STORAGE_FEATURE_NAMES } from "../../../shared/storage-schema.mjs";
2
- import { getUserStorageAllFeatureEntries, upsertUserStorage } from "../services.mjs";
2
+ import { batchUpsertUserStorage, getUserStorageAllFeatureEntries, upsertUserStorage } from "../services.mjs";
3
3
  // TODO - parse type, and handle version changes
4
4
  /**
5
5
  * parses the raw remote data to the NetworkConfiguration shape
@@ -51,9 +51,14 @@ export async function upsertRemoteNetwork(network, opts) {
51
51
  * @param opts - user storage options/configuration
52
52
  */
53
53
  export async function batchUpsertRemoteNetworks(networks, opts) {
54
- // TODO - this has not yet been provided by the backend team
55
- // we will replace this with a batch endpoint in near future
56
- const promises = networks.map((n) => upsertRemoteNetwork(n, opts));
57
- await Promise.allSettled(promises);
54
+ const networkPathAndValues = networks.map((n) => {
55
+ const path = n.chainId;
56
+ const data = JSON.stringify(n);
57
+ return [path, data];
58
+ });
59
+ await batchUpsertUserStorage(networkPathAndValues, {
60
+ path: 'networks',
61
+ ...opts,
62
+ });
58
63
  }
59
64
  //# sourceMappingURL=services.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"services.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,2CAAuC;AAE5E,OAAO,EACL,+BAA+B,EAC/B,iBAAiB,EAClB,wBAAoB;AAGrB,gDAAgD;AAChD;;;;;;GAMG;AACH,SAAS,yBAAyB,CAAC,OAAe;IAChD,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA+B,CAAC;KAC1D;IAAC,MAAM;QACN,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAED,MAAM,SAAS,GAAG,CAAQ,KAA+B,EAAkB,EAAE,CAC3E,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAA4B;IAE5B,MAAM,UAAU,GACd,CAAC,MAAM,+BAA+B,CAAC;QACrC,GAAG,IAAI;QACP,IAAI,EAAE,0BAA0B,CAAC,QAAQ;KAC1C,CAAC,CAAC,IAAI,EAAE,CAAC;IAEZ,MAAM,OAAO,GAAG,UAAU;SACvB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;SACpD,MAAM,CAAC,SAAS,CAAC,CAAC;IAErB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAmC,EACnC,IAA4B;IAE5B,MAAM,OAAO,GAAW,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,MAAM,iBAAiB,CAAC,IAAI,EAAE;QACnC,GAAG,IAAI;QACP,IAAI,EAAE,YAAY,OAAO,EAAE;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAAsC,EACtC,IAA4B;IAE5B,4DAA4D;IAC5D,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema';\nimport type { UserStorageBaseOptions } from '../services';\nimport {\n getUserStorageAllFeatureEntries,\n upsertUserStorage,\n} from '../services';\nimport type { RemoteNetworkConfiguration } from './types';\n\n// TODO - parse type, and handle version changes\n/**\n * parses the raw remote data to the NetworkConfiguration shape\n * @todo - improve parsing instead of asserting\n * @todo - improve version handling\n * @param rawData - raw remote user storage data\n * @returns NetworkConfiguration or undefined if failed to parse\n */\nfunction parseNetworkConfiguration(rawData: string) {\n try {\n return JSON.parse(rawData) as RemoteNetworkConfiguration;\n } catch {\n return undefined;\n }\n}\n\nconst isDefined = <Value>(value: Value | null | undefined): value is Value =>\n value !== undefined && value !== null;\n\n/**\n * gets all remote networks from user storage\n * @param opts - user storage options/configuration\n * @returns array of all remote networks\n */\nexport async function getAllRemoteNetworks(\n opts: UserStorageBaseOptions,\n): Promise<RemoteNetworkConfiguration[]> {\n const rawResults =\n (await getUserStorageAllFeatureEntries({\n ...opts,\n path: USER_STORAGE_FEATURE_NAMES.networks,\n })) ?? [];\n\n const results = rawResults\n .map((rawData) => parseNetworkConfiguration(rawData))\n .filter(isDefined);\n\n return results;\n}\n\n/**\n * Upserts a remote network to user storage\n * @param network - network we are updating or inserting\n * @param opts - user storage options/configuration\n */\nexport async function upsertRemoteNetwork(\n network: RemoteNetworkConfiguration,\n opts: UserStorageBaseOptions,\n) {\n const chainId: string = network.chainId.toString();\n const data = JSON.stringify(network);\n return await upsertUserStorage(data, {\n ...opts,\n path: `networks.${chainId}`,\n });\n}\n\n/**\n * Batch upsert a list of remote networks into user storage\n * @param networks - a list of networks to update or insert\n * @param opts - user storage options/configuration\n */\nexport async function batchUpsertRemoteNetworks(\n networks: RemoteNetworkConfiguration[],\n opts: UserStorageBaseOptions,\n): Promise<void> {\n // TODO - this has not yet been provided by the backend team\n // we will replace this with a batch endpoint in near future\n const promises = networks.map((n) => upsertRemoteNetwork(n, opts));\n await Promise.allSettled(promises);\n}\n"]}
1
+ {"version":3,"file":"services.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,2CAAuC;AAE5E,OAAO,EACL,sBAAsB,EACtB,+BAA+B,EAC/B,iBAAiB,EAClB,wBAAoB;AAGrB,gDAAgD;AAChD;;;;;;GAMG;AACH,SAAS,yBAAyB,CAAC,OAAe;IAChD,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA+B,CAAC;KAC1D;IAAC,MAAM;QACN,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAED,MAAM,SAAS,GAAG,CAAQ,KAA+B,EAAkB,EAAE,CAC3E,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAA4B;IAE5B,MAAM,UAAU,GACd,CAAC,MAAM,+BAA+B,CAAC;QACrC,GAAG,IAAI;QACP,IAAI,EAAE,0BAA0B,CAAC,QAAQ;KAC1C,CAAC,CAAC,IAAI,EAAE,CAAC;IAEZ,MAAM,OAAO,GAAG,UAAU;SACvB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;SACpD,MAAM,CAAC,SAAS,CAAC,CAAC;IAErB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAmC,EACnC,IAA4B;IAE5B,MAAM,OAAO,GAAW,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,MAAM,iBAAiB,CAAC,IAAI,EAAE;QACnC,GAAG,IAAI;QACP,IAAI,EAAE,YAAY,OAAO,EAAE;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAAsC,EACtC,IAA4B;IAE5B,MAAM,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,EAAE,IAAI,CAAqB,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,sBAAsB,CAAC,oBAAoB,EAAE;QACjD,IAAI,EAAE,UAAU;QAChB,GAAG,IAAI;KACR,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema';\nimport type { UserStorageBaseOptions } from '../services';\nimport {\n batchUpsertUserStorage,\n getUserStorageAllFeatureEntries,\n upsertUserStorage,\n} from '../services';\nimport type { RemoteNetworkConfiguration } from './types';\n\n// TODO - parse type, and handle version changes\n/**\n * parses the raw remote data to the NetworkConfiguration shape\n * @todo - improve parsing instead of asserting\n * @todo - improve version handling\n * @param rawData - raw remote user storage data\n * @returns NetworkConfiguration or undefined if failed to parse\n */\nfunction parseNetworkConfiguration(rawData: string) {\n try {\n return JSON.parse(rawData) as RemoteNetworkConfiguration;\n } catch {\n return undefined;\n }\n}\n\nconst isDefined = <Value>(value: Value | null | undefined): value is Value =>\n value !== undefined && value !== null;\n\n/**\n * gets all remote networks from user storage\n * @param opts - user storage options/configuration\n * @returns array of all remote networks\n */\nexport async function getAllRemoteNetworks(\n opts: UserStorageBaseOptions,\n): Promise<RemoteNetworkConfiguration[]> {\n const rawResults =\n (await getUserStorageAllFeatureEntries({\n ...opts,\n path: USER_STORAGE_FEATURE_NAMES.networks,\n })) ?? [];\n\n const results = rawResults\n .map((rawData) => parseNetworkConfiguration(rawData))\n .filter(isDefined);\n\n return results;\n}\n\n/**\n * Upserts a remote network to user storage\n * @param network - network we are updating or inserting\n * @param opts - user storage options/configuration\n */\nexport async function upsertRemoteNetwork(\n network: RemoteNetworkConfiguration,\n opts: UserStorageBaseOptions,\n) {\n const chainId: string = network.chainId.toString();\n const data = JSON.stringify(network);\n return await upsertUserStorage(data, {\n ...opts,\n path: `networks.${chainId}`,\n });\n}\n\n/**\n * Batch upsert a list of remote networks into user storage\n * @param networks - a list of networks to update or insert\n * @param opts - user storage options/configuration\n */\nexport async function batchUpsertRemoteNetworks(\n networks: RemoteNetworkConfiguration[],\n opts: UserStorageBaseOptions,\n): Promise<void> {\n const networkPathAndValues = networks.map((n) => {\n const path = n.chainId;\n const data = JSON.stringify(n);\n return [path, data] as [string, string];\n });\n\n await batchUpsertUserStorage(networkPathAndValues, {\n path: 'networks',\n ...opts,\n });\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findNetworksToUpdate = exports.getNewLocalNetworks = exports.getUpdatedNetworkLists = exports.getMissingNetworkLists = exports.checkWhichNetworkIsLatest = exports.getDataStructures = void 0;
3
+ exports.findNetworksToUpdate = exports.getUpdatedNetworkLists = exports.getMissingNetworkLists = exports.checkWhichNetworkIsLatest = exports.getDataStructures = void 0;
4
4
  const utils_1 = require("../utils.cjs");
5
5
  const types_1 = require("./types.cjs");
6
6
  const createMap = (networks) => {
@@ -49,6 +49,8 @@ const checkWhichNetworkIsLatest = (localNetwork, remoteNetwork) => {
49
49
  ? 'Local Wins'
50
50
  : 'Remote Wins';
51
51
  }
52
+ // Unreachable statement
53
+ /* istanbul ignore next */
52
54
  return 'Do Nothing';
53
55
  };
54
56
  exports.checkWhichNetworkIsLatest = checkWhichNetworkIsLatest;
@@ -90,6 +92,9 @@ const getUpdatedNetworkLists = (ds) => {
90
92
  const localNetwork = localMap.get(chain);
91
93
  const remoteNetwork = remoteMap.get(chain);
92
94
  if (!localNetwork || !remoteNetwork) {
95
+ // This should be unreachable as we know the Maps created will have the values
96
+ // This is to satisfy types
97
+ /* istanbul ignore next */
93
98
  return;
94
99
  }
95
100
  const whichIsLatest = (0, exports.checkWhichNetworkIsLatest)(localNetwork, remoteNetwork);
@@ -116,26 +121,6 @@ const getUpdatedNetworkLists = (ds) => {
116
121
  };
117
122
  };
118
123
  exports.getUpdatedNetworkLists = getUpdatedNetworkLists;
119
- const getNewLocalNetworks = (props) => {
120
- let newList = [...props.originalList];
121
- newList.push(...props.missingLocalNetworks);
122
- const updateMap = createMap(props.localNetworksToUpdate);
123
- const remoteMap = createMap(props.localNetworksToRemove);
124
- newList = newList
125
- .map((n) => {
126
- if (remoteMap.has(n.chainId)) {
127
- return undefined;
128
- }
129
- const updatedNetwork = updateMap.get(n.chainId);
130
- if (updatedNetwork) {
131
- return updatedNetwork;
132
- }
133
- return n;
134
- })
135
- .filter((n) => n !== undefined);
136
- return newList;
137
- };
138
- exports.getNewLocalNetworks = getNewLocalNetworks;
139
124
  const findNetworksToUpdate = (props) => {
140
125
  try {
141
126
  const { localNetworks, remoteNetworks } = props;
@@ -150,21 +135,18 @@ const findNetworksToUpdate = (props) => {
150
135
  ...missingNetworks.missingRemoteNetworks,
151
136
  ...updatedNetworks.remoteNetworksToUpdate,
152
137
  ];
153
- // List of new local networks
154
- const newLocalNetworks = (0, exports.getNewLocalNetworks)({
155
- originalList: localNetworks,
138
+ return {
139
+ remoteNetworksToUpdate,
156
140
  missingLocalNetworks: missingNetworks.missingLocalNetworks,
157
141
  localNetworksToRemove: updatedNetworks.localNetworksToRemove,
158
142
  localNetworksToUpdate: updatedNetworks.localNetworksToUpdate,
159
- });
160
- return {
161
- remoteNetworksToUpdate,
162
- newLocalNetworks,
163
143
  };
164
144
  }
165
145
  catch {
166
146
  // Unable to perform sync, silently fail
167
147
  }
148
+ // Unreachable statement
149
+ /* istanbul ignore next */
168
150
  return undefined;
169
151
  };
170
152
  exports.findNetworksToUpdate = findNetworksToUpdate;
@@ -1 +1 @@
1
- {"version":3,"file":"sync-all.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-all.ts"],"names":[],"mappings":";;;AAAA,wCAA0D;AAC1D,uCAKiB;AAOjB,MAAM,SAAS,GAAG,CAGhB,QAAmB,EACG,EAAE;IACxB,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAGnB,QAAmB,EACnB,SAAmC,EACtB,EAAE;IACf,MAAM,gBAAgB,GAAG,SAAS;QAChC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,QAAQ,CAAC;IACb,OAAO,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAC/B,aAAqC,EACrC,cAA4C,EAC5C,EAAE;IACF,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;IAClD,MAAM,oBAAoB,GAAG,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,OAAO;QACL,QAAQ;QACR,SAAS;QACT,WAAW;QACX,YAAY;QACZ,oBAAoB;KACrB,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,iBAAiB,qBAiB5B;AAGK,MAAM,yBAAyB,GAAG,CACvC,YAAkC,EAClC,aAAyC,EAC3B,EAAE;IAChB,wEAAwE;IACxE,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;QAC/D,OAAO,YAAY,CAAC;KACrB;IAED,iCAAiC;IACjC,IAAI,YAAY,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;QAC9D,OAAO,YAAY,CAAC;KACrB;IAED,kCAAkC;IAClC,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,aAAa,CAAC,aAAa,EAAE;QAC9D,OAAO,aAAa,CAAC;KACtB;IAED,gDAAgD;IAChD,IAAI,YAAY,CAAC,aAAa,IAAI,aAAa,CAAC,aAAa,EAAE;QAC7D,IAAI,YAAY,CAAC,aAAa,KAAK,aAAa,CAAC,aAAa,EAAE;YAC9D,OAAO,YAAY,CAAC;SACrB;QAED,OAAO,YAAY,CAAC,aAAa,GAAG,aAAa,CAAC,aAAa;YAC7D,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,aAAa,CAAC;KACnB;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AA/BW,QAAA,yBAAyB,6BA+BpC;AAEK,MAAM,sBAAsB,GAAG,CACpC,EAAwC,EACxC,EAAE;IACF,MAAM,EACJ,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,oBAAoB,GACrB,GAAG,EAAE,CAAC;IAEP,MAAM,oBAAoB,GAA2B,EAAE,CAAC;IACxD,MAAM,qBAAqB,GAAiC,EAAE,CAAC;IAE/D,gDAAgD;IAChD,MAAM,wBAAwB,GAAG,IAAA,qBAAa,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC1E,wBAAwB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE;YACL,qBAAqB,CAAC,IAAI,CAAC,IAAA,oCAA4B,EAAC,CAAC,CAAC,CAAC,CAAC;SAC7D;IACH,CAAC,CAAC,CAAC;IAEH,8DAA8D;IAC9D,MAAM,uBAAuB,GAAG,IAAA,qBAAa,EAC3C,oBAAoB,EACpB,WAAW,CACZ,CAAC;IACF,uBAAuB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE;YACL,oBAAoB,CAAC,IAAI,CAAC,IAAA,8BAAsB,EAAC,CAAC,CAAC,CAAC,CAAC;SACtD;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,oBAAoB;QACpB,qBAAqB;KACtB,CAAC;AACJ,CAAC,CAAC;AAvCW,QAAA,sBAAsB,0BAuCjC;AAEK,MAAM,sBAAsB,GAAG,CACpC,EAAwC,EACxC,EAAE;IACF,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAE9D,MAAM,sBAAsB,GAAiC,EAAE,CAAC;IAChE,MAAM,qBAAqB,GAA2B,EAAE,CAAC;IACzD,MAAM,qBAAqB,GAA2B,EAAE,CAAC;IAEzD,0DAA0D;IAC1D,6CAA6C;IAC7C,MAAM,cAAc,GAAG,IAAA,uBAAe,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAClE,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE;YACnC,OAAO;SACR;QAED,MAAM,aAAa,GAAG,IAAA,iCAAyB,EAC7C,YAAY,EACZ,aAAa,CACd,CAAC;QAEF,sCAAsC;QACtC,IAAI,aAAa,KAAK,YAAY,EAAE;YAClC,sBAAsB,CAAC,IAAI,CAAC,IAAA,oCAA4B,EAAC,YAAY,CAAC,CAAC,CAAC;SACzE;QAED,iBAAiB;QACjB,IAAI,aAAa,KAAK,aAAa,EAAE;YACnC,IAAI,aAAa,CAAC,CAAC,EAAE;gBACnB,sDAAsD;gBACtD,qBAAqB,CAAC,IAAI,CAAC,IAAA,8BAAsB,EAAC,aAAa,CAAC,CAAC,CAAC;aACnE;iBAAM;gBACL,oDAAoD;gBACpD,qBAAqB,CAAC,IAAI,CAAC,IAAA,8BAAsB,EAAC,aAAa,CAAC,CAAC,CAAC;aACnE;SACF;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,sBAAsB;QACtB,qBAAqB;QACrB,qBAAqB;KACtB,CAAC;AACJ,CAAC,CAAC;AA9CW,QAAA,sBAAsB,0BA8CjC;AAEK,MAAM,mBAAmB,GAAG,CAAC,KAKnC,EAAE,EAAE;IACH,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAEzD,OAAO,GAAG,OAAO;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;YAC5B,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,cAAc,EAAE;YAClB,OAAO,cAAc,CAAC;SACvB;QAED,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAA6B,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IAE7D,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AA3BW,QAAA,mBAAmB,uBA2B9B;AAEK,MAAM,oBAAoB,GAAG,CAAC,KAAgC,EAAE,EAAE;IACvE,IAAI;QACF,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;QAEhD,sBAAsB;QACtB,MAAM,EAAE,GAAG,IAAA,yBAAiB,EAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAE5D,wBAAwB;QACxB,MAAM,eAAe,GAAG,IAAA,8BAAsB,EAAC,EAAE,CAAC,CAAC;QAEnD,wBAAwB;QACxB,MAAM,eAAe,GAAG,IAAA,8BAAsB,EAAC,EAAE,CAAC,CAAC;QAEnD,qCAAqC;QACrC,MAAM,sBAAsB,GAAG;YAC7B,GAAG,eAAe,CAAC,qBAAqB;YACxC,GAAG,eAAe,CAAC,sBAAsB;SAC1C,CAAC;QAEF,6BAA6B;QAC7B,MAAM,gBAAgB,GAAG,IAAA,2BAAmB,EAAC;YAC3C,YAAY,EAAE,aAAa;YAC3B,oBAAoB,EAAE,eAAe,CAAC,oBAAoB;YAC1D,qBAAqB,EAAE,eAAe,CAAC,qBAAqB;YAC5D,qBAAqB,EAAE,eAAe,CAAC,qBAAqB;SAC7D,CAAC,CAAC;QAEH,OAAO;YACL,sBAAsB;YACtB,gBAAgB;SACjB,CAAC;KACH;IAAC,MAAM;QACN,wCAAwC;KACzC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AApCW,QAAA,oBAAoB,wBAoC/B","sourcesContent":["import { setDifference, setIntersection } from '../utils';\nimport {\n toRemoteNetworkConfiguration,\n type NetworkConfiguration,\n type RemoteNetworkConfiguration,\n toNetworkConfiguration,\n} from './types';\n\ntype FindNetworksToUpdateProps = {\n localNetworks: NetworkConfiguration[];\n remoteNetworks: RemoteNetworkConfiguration[];\n};\n\nconst createMap = <\n Network extends NetworkConfiguration | RemoteNetworkConfiguration,\n>(\n networks: Network[],\n): Map<string, Network> => {\n return new Map(networks.map((n) => [n.chainId, n]));\n};\n\nconst createKeySet = <\n Network extends NetworkConfiguration | RemoteNetworkConfiguration,\n>(\n networks: Network[],\n predicate?: (n: Network) => boolean,\n): Set<string> => {\n const filteredNetworks = predicate\n ? networks.filter((n) => predicate(n))\n : networks;\n return new Set(filteredNetworks.map((n) => n.chainId));\n};\n\nexport const getDataStructures = (\n localNetworks: NetworkConfiguration[],\n remoteNetworks: RemoteNetworkConfiguration[],\n) => {\n const localMap = createMap(localNetworks);\n const remoteMap = createMap(remoteNetworks);\n const localKeySet = createKeySet(localNetworks);\n const remoteKeySet = createKeySet(remoteNetworks);\n const existingRemoteKeySet = createKeySet(remoteNetworks, (n) => !n.d);\n\n return {\n localMap,\n remoteMap,\n localKeySet,\n remoteKeySet,\n existingRemoteKeySet,\n };\n};\n\ntype MatrixResult = 'Do Nothing' | 'Local Wins' | 'Remote Wins';\nexport const checkWhichNetworkIsLatest = (\n localNetwork: NetworkConfiguration,\n remoteNetwork: RemoteNetworkConfiguration,\n): MatrixResult => {\n // Neither network has updatedAt field (indicating no changes were made)\n if (!localNetwork.lastUpdatedAt && !remoteNetwork.lastUpdatedAt) {\n return 'Do Nothing';\n }\n\n // Local only has updatedAt field\n if (localNetwork.lastUpdatedAt && !remoteNetwork.lastUpdatedAt) {\n return 'Local Wins';\n }\n\n // Remote only has updatedAt field\n if (!localNetwork.lastUpdatedAt && remoteNetwork.lastUpdatedAt) {\n return 'Remote Wins';\n }\n\n // Both have updatedAt field, perform comparison\n if (localNetwork.lastUpdatedAt && remoteNetwork.lastUpdatedAt) {\n if (localNetwork.lastUpdatedAt === remoteNetwork.lastUpdatedAt) {\n return 'Do Nothing';\n }\n\n return localNetwork.lastUpdatedAt > remoteNetwork.lastUpdatedAt\n ? 'Local Wins'\n : 'Remote Wins';\n }\n\n return 'Do Nothing';\n};\n\nexport const getMissingNetworkLists = (\n ds: ReturnType<typeof getDataStructures>,\n) => {\n const {\n localKeySet,\n localMap,\n remoteKeySet,\n remoteMap,\n existingRemoteKeySet,\n } = ds;\n\n const missingLocalNetworks: NetworkConfiguration[] = [];\n const missingRemoteNetworks: RemoteNetworkConfiguration[] = [];\n\n // Networks that are in local, but not in remote\n const missingRemoteNetworkKeys = setDifference(localKeySet, remoteKeySet);\n missingRemoteNetworkKeys.forEach((chain) => {\n const n = localMap.get(chain);\n if (n) {\n missingRemoteNetworks.push(toRemoteNetworkConfiguration(n));\n }\n });\n\n // Networks that are in remote (not deleted), but not in local\n const missingLocalNetworkKeys = setDifference(\n existingRemoteKeySet,\n localKeySet,\n );\n missingLocalNetworkKeys.forEach((chain) => {\n const n = remoteMap.get(chain);\n if (n) {\n missingLocalNetworks.push(toNetworkConfiguration(n));\n }\n });\n\n return {\n missingLocalNetworks,\n missingRemoteNetworks,\n };\n};\n\nexport const getUpdatedNetworkLists = (\n ds: ReturnType<typeof getDataStructures>,\n) => {\n const { localKeySet, localMap, remoteKeySet, remoteMap } = ds;\n\n const remoteNetworksToUpdate: RemoteNetworkConfiguration[] = [];\n const localNetworksToUpdate: NetworkConfiguration[] = [];\n const localNetworksToRemove: NetworkConfiguration[] = [];\n\n // Get networks in both, these need to be compared against\n // each other to see which network to update.\n const networksInBoth = setIntersection(localKeySet, remoteKeySet);\n networksInBoth.forEach((chain) => {\n const localNetwork = localMap.get(chain);\n const remoteNetwork = remoteMap.get(chain);\n if (!localNetwork || !remoteNetwork) {\n return;\n }\n\n const whichIsLatest = checkWhichNetworkIsLatest(\n localNetwork,\n remoteNetwork,\n );\n\n // Local Wins -> Need to update remote\n if (whichIsLatest === 'Local Wins') {\n remoteNetworksToUpdate.push(toRemoteNetworkConfiguration(localNetwork));\n }\n\n // Remote Wins...\n if (whichIsLatest === 'Remote Wins') {\n if (remoteNetwork.d) {\n // ...and is deleted -> Need to remove from local list\n localNetworksToRemove.push(toNetworkConfiguration(remoteNetwork));\n } else {\n // ...and isn't deleted -> Need to update local list\n localNetworksToUpdate.push(toNetworkConfiguration(remoteNetwork));\n }\n }\n });\n\n return {\n remoteNetworksToUpdate,\n localNetworksToUpdate,\n localNetworksToRemove,\n };\n};\n\nexport const getNewLocalNetworks = (props: {\n originalList: NetworkConfiguration[];\n missingLocalNetworks: NetworkConfiguration[];\n localNetworksToUpdate: NetworkConfiguration[];\n localNetworksToRemove: NetworkConfiguration[];\n}) => {\n let newList = [...props.originalList];\n newList.push(...props.missingLocalNetworks);\n const updateMap = createMap(props.localNetworksToUpdate);\n const remoteMap = createMap(props.localNetworksToRemove);\n\n newList = newList\n .map((n) => {\n if (remoteMap.has(n.chainId)) {\n return undefined;\n }\n\n const updatedNetwork = updateMap.get(n.chainId);\n if (updatedNetwork) {\n return updatedNetwork;\n }\n\n return n;\n })\n .filter((n): n is NetworkConfiguration => n !== undefined);\n\n return newList;\n};\n\nexport const findNetworksToUpdate = (props: FindNetworksToUpdateProps) => {\n try {\n const { localNetworks, remoteNetworks } = props;\n\n // Get Maps & Key Sets\n const ds = getDataStructures(localNetworks, remoteNetworks);\n\n // Calc Missing Networks\n const missingNetworks = getMissingNetworkLists(ds);\n\n // Calc Updated Networks\n const updatedNetworks = getUpdatedNetworkLists(ds);\n\n // List of networks we need to update\n const remoteNetworksToUpdate = [\n ...missingNetworks.missingRemoteNetworks,\n ...updatedNetworks.remoteNetworksToUpdate,\n ];\n\n // List of new local networks\n const newLocalNetworks = getNewLocalNetworks({\n originalList: localNetworks,\n missingLocalNetworks: missingNetworks.missingLocalNetworks,\n localNetworksToRemove: updatedNetworks.localNetworksToRemove,\n localNetworksToUpdate: updatedNetworks.localNetworksToUpdate,\n });\n\n return {\n remoteNetworksToUpdate,\n newLocalNetworks,\n };\n } catch {\n // Unable to perform sync, silently fail\n }\n\n return undefined;\n};\n"]}
1
+ {"version":3,"file":"sync-all.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-all.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NetworkConfiguration } from '@metamask/network-controller';\n\nimport { setDifference, setIntersection } from '../utils';\nimport {\n toRemoteNetworkConfiguration,\n type RemoteNetworkConfiguration,\n toNetworkConfiguration,\n} from './types';\n\ntype FindNetworksToUpdateProps = {\n localNetworks: NetworkConfiguration[];\n remoteNetworks: RemoteNetworkConfiguration[];\n};\n\nconst createMap = <\n Network extends NetworkConfiguration | RemoteNetworkConfiguration,\n>(\n networks: Network[],\n): Map<string, Network> => {\n return new Map(networks.map((n) => [n.chainId, n]));\n};\n\nconst createKeySet = <\n Network extends NetworkConfiguration | RemoteNetworkConfiguration,\n>(\n networks: Network[],\n predicate?: (n: Network) => boolean,\n): Set<string> => {\n const filteredNetworks = predicate\n ? networks.filter((n) => predicate(n))\n : networks;\n return new Set(filteredNetworks.map((n) => n.chainId));\n};\n\nexport const getDataStructures = (\n localNetworks: NetworkConfiguration[],\n remoteNetworks: RemoteNetworkConfiguration[],\n) => {\n const localMap = createMap(localNetworks);\n const remoteMap = createMap(remoteNetworks);\n const localKeySet = createKeySet(localNetworks);\n const remoteKeySet = createKeySet(remoteNetworks);\n const existingRemoteKeySet = createKeySet(remoteNetworks, (n) => !n.d);\n\n return {\n localMap,\n remoteMap,\n localKeySet,\n remoteKeySet,\n existingRemoteKeySet,\n };\n};\n\ntype MatrixResult = 'Do Nothing' | 'Local Wins' | 'Remote Wins';\nexport const checkWhichNetworkIsLatest = (\n localNetwork: NetworkConfiguration,\n remoteNetwork: RemoteNetworkConfiguration,\n): MatrixResult => {\n // Neither network has updatedAt field (indicating no changes were made)\n if (!localNetwork.lastUpdatedAt && !remoteNetwork.lastUpdatedAt) {\n return 'Do Nothing';\n }\n\n // Local only has updatedAt field\n if (localNetwork.lastUpdatedAt && !remoteNetwork.lastUpdatedAt) {\n return 'Local Wins';\n }\n\n // Remote only has updatedAt field\n if (!localNetwork.lastUpdatedAt && remoteNetwork.lastUpdatedAt) {\n return 'Remote Wins';\n }\n\n // Both have updatedAt field, perform comparison\n if (localNetwork.lastUpdatedAt && remoteNetwork.lastUpdatedAt) {\n if (localNetwork.lastUpdatedAt === remoteNetwork.lastUpdatedAt) {\n return 'Do Nothing';\n }\n\n return localNetwork.lastUpdatedAt > remoteNetwork.lastUpdatedAt\n ? 'Local Wins'\n : 'Remote Wins';\n }\n\n // Unreachable statement\n /* istanbul ignore next */\n return 'Do Nothing';\n};\n\nexport const getMissingNetworkLists = (\n ds: ReturnType<typeof getDataStructures>,\n) => {\n const {\n localKeySet,\n localMap,\n remoteKeySet,\n remoteMap,\n existingRemoteKeySet,\n } = ds;\n\n const missingLocalNetworks: NetworkConfiguration[] = [];\n const missingRemoteNetworks: RemoteNetworkConfiguration[] = [];\n\n // Networks that are in local, but not in remote\n const missingRemoteNetworkKeys = setDifference(localKeySet, remoteKeySet);\n missingRemoteNetworkKeys.forEach((chain) => {\n const n = localMap.get(chain);\n if (n) {\n missingRemoteNetworks.push(toRemoteNetworkConfiguration(n));\n }\n });\n\n // Networks that are in remote (not deleted), but not in local\n const missingLocalNetworkKeys = setDifference(\n existingRemoteKeySet,\n localKeySet,\n );\n missingLocalNetworkKeys.forEach((chain) => {\n const n = remoteMap.get(chain);\n if (n) {\n missingLocalNetworks.push(toNetworkConfiguration(n));\n }\n });\n\n return {\n missingLocalNetworks,\n missingRemoteNetworks,\n };\n};\n\nexport const getUpdatedNetworkLists = (\n ds: ReturnType<typeof getDataStructures>,\n) => {\n const { localKeySet, localMap, remoteKeySet, remoteMap } = ds;\n\n const remoteNetworksToUpdate: RemoteNetworkConfiguration[] = [];\n const localNetworksToUpdate: NetworkConfiguration[] = [];\n const localNetworksToRemove: NetworkConfiguration[] = [];\n\n // Get networks in both, these need to be compared against\n // each other to see which network to update.\n const networksInBoth = setIntersection(localKeySet, remoteKeySet);\n networksInBoth.forEach((chain) => {\n const localNetwork = localMap.get(chain);\n const remoteNetwork = remoteMap.get(chain);\n if (!localNetwork || !remoteNetwork) {\n // This should be unreachable as we know the Maps created will have the values\n // This is to satisfy types\n /* istanbul ignore next */\n return;\n }\n\n const whichIsLatest = checkWhichNetworkIsLatest(\n localNetwork,\n remoteNetwork,\n );\n\n // Local Wins -> Need to update remote\n if (whichIsLatest === 'Local Wins') {\n remoteNetworksToUpdate.push(toRemoteNetworkConfiguration(localNetwork));\n }\n\n // Remote Wins...\n if (whichIsLatest === 'Remote Wins') {\n if (remoteNetwork.d) {\n // ...and is deleted -> Need to remove from local list\n localNetworksToRemove.push(toNetworkConfiguration(remoteNetwork));\n } else {\n // ...and isn't deleted -> Need to update local list\n localNetworksToUpdate.push(toNetworkConfiguration(remoteNetwork));\n }\n }\n });\n\n return {\n remoteNetworksToUpdate,\n localNetworksToUpdate,\n localNetworksToRemove,\n };\n};\n\nexport const findNetworksToUpdate = (props: FindNetworksToUpdateProps) => {\n try {\n const { localNetworks, remoteNetworks } = props;\n\n // Get Maps & Key Sets\n const ds = getDataStructures(localNetworks, remoteNetworks);\n\n // Calc Missing Networks\n const missingNetworks = getMissingNetworkLists(ds);\n\n // Calc Updated Networks\n const updatedNetworks = getUpdatedNetworkLists(ds);\n\n // List of networks we need to update\n const remoteNetworksToUpdate = [\n ...missingNetworks.missingRemoteNetworks,\n ...updatedNetworks.remoteNetworksToUpdate,\n ];\n\n return {\n remoteNetworksToUpdate,\n missingLocalNetworks: missingNetworks.missingLocalNetworks,\n localNetworksToRemove: updatedNetworks.localNetworksToRemove,\n localNetworksToUpdate: updatedNetworks.localNetworksToUpdate,\n };\n } catch {\n // Unable to perform sync, silently fail\n }\n\n // Unreachable statement\n /* istanbul ignore next */\n return undefined;\n};\n"]}
@@ -1,4 +1,5 @@
1
- import { type NetworkConfiguration, type RemoteNetworkConfiguration } from "./types.cjs";
1
+ import type { NetworkConfiguration } from "@metamask/network-controller";
2
+ import { type RemoteNetworkConfiguration } from "./types.cjs";
2
3
  type FindNetworksToUpdateProps = {
3
4
  localNetworks: NetworkConfiguration[];
4
5
  remoteNetworks: RemoteNetworkConfiguration[];
@@ -21,15 +22,11 @@ export declare const getUpdatedNetworkLists: (ds: ReturnType<typeof getDataStruc
21
22
  localNetworksToUpdate: NetworkConfiguration[];
22
23
  localNetworksToRemove: NetworkConfiguration[];
23
24
  };
24
- export declare const getNewLocalNetworks: (props: {
25
- originalList: NetworkConfiguration[];
26
- missingLocalNetworks: NetworkConfiguration[];
27
- localNetworksToUpdate: NetworkConfiguration[];
28
- localNetworksToRemove: NetworkConfiguration[];
29
- }) => NetworkConfiguration[];
30
25
  export declare const findNetworksToUpdate: (props: FindNetworksToUpdateProps) => {
31
26
  remoteNetworksToUpdate: RemoteNetworkConfiguration[];
32
- newLocalNetworks: NetworkConfiguration[];
27
+ missingLocalNetworks: NetworkConfiguration[];
28
+ localNetworksToRemove: NetworkConfiguration[];
29
+ localNetworksToUpdate: NetworkConfiguration[];
33
30
  } | undefined;
34
31
  export {};
35
32
  //# sourceMappingURL=sync-all.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync-all.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-all.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAEhC,oBAAgB;AAEjB,KAAK,yBAAyB,GAAG;IAC/B,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,cAAc,EAAE,0BAA0B,EAAE,CAAC;CAC9C,CAAC;AAsBF,eAAO,MAAM,iBAAiB,kBACb,oBAAoB,EAAE,kBACrB,0BAA0B,EAAE;;;;;;CAe7C,CAAC;AAEF,KAAK,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;AAChE,eAAO,MAAM,yBAAyB,iBACtB,oBAAoB,iBACnB,0BAA0B,KACxC,YA4BF,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAC7B,WAAW,wBAAwB,CAAC;;;CAsCzC,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAC7B,WAAW,wBAAwB,CAAC;;;;CA6CzC,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAAW;IACzC,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;IAC7C,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;CAC/C,2BAsBA,CAAC;AAEF,eAAO,MAAM,oBAAoB,UAAW,yBAAyB;;;aAoCpE,CAAC"}
1
+ {"version":3,"file":"sync-all.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-all.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;AAGzE,OAAO,EAEL,KAAK,0BAA0B,EAEhC,oBAAgB;AAEjB,KAAK,yBAAyB,GAAG;IAC/B,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,cAAc,EAAE,0BAA0B,EAAE,CAAC;CAC9C,CAAC;AAsBF,eAAO,MAAM,iBAAiB,kBACb,oBAAoB,EAAE,kBACrB,0BAA0B,EAAE;;;;;;CAe7C,CAAC;AAEF,KAAK,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;AAChE,eAAO,MAAM,yBAAyB,iBACtB,oBAAoB,iBACnB,0BAA0B,KACxC,YA8BF,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAC7B,WAAW,wBAAwB,CAAC;;;CAsCzC,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAC7B,WAAW,wBAAwB,CAAC;;;;CAgDzC,CAAC;AAEF,eAAO,MAAM,oBAAoB,UAAW,yBAAyB;;;;;aAgCpE,CAAC"}
@@ -1,4 +1,5 @@
1
- import { type NetworkConfiguration, type RemoteNetworkConfiguration } from "./types.mjs";
1
+ import type { NetworkConfiguration } from "@metamask/network-controller";
2
+ import { type RemoteNetworkConfiguration } from "./types.mjs";
2
3
  type FindNetworksToUpdateProps = {
3
4
  localNetworks: NetworkConfiguration[];
4
5
  remoteNetworks: RemoteNetworkConfiguration[];
@@ -21,15 +22,11 @@ export declare const getUpdatedNetworkLists: (ds: ReturnType<typeof getDataStruc
21
22
  localNetworksToUpdate: NetworkConfiguration[];
22
23
  localNetworksToRemove: NetworkConfiguration[];
23
24
  };
24
- export declare const getNewLocalNetworks: (props: {
25
- originalList: NetworkConfiguration[];
26
- missingLocalNetworks: NetworkConfiguration[];
27
- localNetworksToUpdate: NetworkConfiguration[];
28
- localNetworksToRemove: NetworkConfiguration[];
29
- }) => NetworkConfiguration[];
30
25
  export declare const findNetworksToUpdate: (props: FindNetworksToUpdateProps) => {
31
26
  remoteNetworksToUpdate: RemoteNetworkConfiguration[];
32
- newLocalNetworks: NetworkConfiguration[];
27
+ missingLocalNetworks: NetworkConfiguration[];
28
+ localNetworksToRemove: NetworkConfiguration[];
29
+ localNetworksToUpdate: NetworkConfiguration[];
33
30
  } | undefined;
34
31
  export {};
35
32
  //# sourceMappingURL=sync-all.d.mts.map