@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.
- package/CHANGELOG.md +18 -1
- package/dist/controllers/authentication/AuthenticationController.cjs +16 -9
- package/dist/controllers/authentication/AuthenticationController.cjs.map +1 -1
- package/dist/controllers/authentication/AuthenticationController.d.cts +6 -1
- package/dist/controllers/authentication/AuthenticationController.d.cts.map +1 -1
- package/dist/controllers/authentication/AuthenticationController.d.mts +6 -1
- package/dist/controllers/authentication/AuthenticationController.d.mts.map +1 -1
- package/dist/controllers/authentication/AuthenticationController.mjs +16 -9
- package/dist/controllers/authentication/AuthenticationController.mjs.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.cjs +24 -47
- package/dist/controllers/user-storage/UserStorageController.cjs.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.d.cts +16 -49
- package/dist/controllers/user-storage/UserStorageController.d.cts.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.d.mts +16 -49
- package/dist/controllers/user-storage/UserStorageController.d.mts.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.mjs +24 -47
- package/dist/controllers/user-storage/UserStorageController.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.cjs +185 -166
- package/dist/controllers/user-storage/account-syncing/controller-integration.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.d.cts +3 -0
- package/dist/controllers/user-storage/account-syncing/controller-integration.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.d.mts +3 -0
- package/dist/controllers/user-storage/account-syncing/controller-integration.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.mjs +185 -166
- package/dist/controllers/user-storage/account-syncing/controller-integration.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/types.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/types.d.cts +2 -0
- package/dist/controllers/user-storage/account-syncing/types.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/types.d.mts +2 -0
- package/dist/controllers/user-storage/account-syncing/types.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/types.mjs.map +1 -1
- package/dist/controllers/user-storage/constants.cjs +14 -1
- package/dist/controllers/user-storage/constants.cjs.map +1 -1
- package/dist/controllers/user-storage/constants.d.cts +11 -0
- package/dist/controllers/user-storage/constants.d.cts.map +1 -1
- package/dist/controllers/user-storage/constants.d.mts +11 -0
- package/dist/controllers/user-storage/constants.d.mts.map +1 -1
- package/dist/controllers/user-storage/constants.mjs +13 -0
- package/dist/controllers/user-storage/constants.mjs.map +1 -1
- package/dist/controllers/user-storage/contact-syncing/controller-integration.cjs +227 -162
- package/dist/controllers/user-storage/contact-syncing/controller-integration.cjs.map +1 -1
- package/dist/controllers/user-storage/contact-syncing/controller-integration.d.cts +3 -0
- package/dist/controllers/user-storage/contact-syncing/controller-integration.d.cts.map +1 -1
- package/dist/controllers/user-storage/contact-syncing/controller-integration.d.mts +3 -0
- package/dist/controllers/user-storage/contact-syncing/controller-integration.d.mts.map +1 -1
- package/dist/controllers/user-storage/contact-syncing/controller-integration.mjs +227 -162
- package/dist/controllers/user-storage/contact-syncing/controller-integration.mjs.map +1 -1
- package/dist/controllers/user-storage/contact-syncing/types.cjs.map +1 -1
- package/dist/controllers/user-storage/contact-syncing/types.d.cts +2 -0
- package/dist/controllers/user-storage/contact-syncing/types.d.cts.map +1 -1
- package/dist/controllers/user-storage/contact-syncing/types.d.mts +2 -0
- package/dist/controllers/user-storage/contact-syncing/types.d.mts.map +1 -1
- package/dist/controllers/user-storage/contact-syncing/types.mjs.map +1 -1
- package/dist/controllers/user-storage/mocks/mockResponses.cjs +1 -1
- package/dist/controllers/user-storage/mocks/mockResponses.cjs.map +1 -1
- package/dist/controllers/user-storage/mocks/mockResponses.d.cts +9 -9
- package/dist/controllers/user-storage/mocks/mockResponses.d.cts.map +1 -1
- package/dist/controllers/user-storage/mocks/mockResponses.d.mts +9 -9
- package/dist/controllers/user-storage/mocks/mockResponses.d.mts.map +1 -1
- package/dist/controllers/user-storage/mocks/mockResponses.mjs +1 -1
- package/dist/controllers/user-storage/mocks/mockResponses.mjs.map +1 -1
- package/dist/controllers/user-storage/types.cjs.map +1 -1
- package/dist/controllers/user-storage/types.d.cts +3 -3
- package/dist/controllers/user-storage/types.d.cts.map +1 -1
- package/dist/controllers/user-storage/types.d.mts +3 -3
- package/dist/controllers/user-storage/types.d.mts.map +1 -1
- package/dist/controllers/user-storage/types.mjs.map +1 -1
- package/dist/sdk/user-storage.cjs +3 -9
- package/dist/sdk/user-storage.cjs.map +1 -1
- package/dist/sdk/user-storage.d.cts +0 -1
- package/dist/sdk/user-storage.d.cts.map +1 -1
- package/dist/sdk/user-storage.d.mts +0 -1
- package/dist/sdk/user-storage.d.mts.map +1 -1
- package/dist/sdk/user-storage.mjs +3 -9
- package/dist/sdk/user-storage.mjs.map +1 -1
- package/dist/shared/storage-schema.cjs +9 -32
- package/dist/shared/storage-schema.cjs.map +1 -1
- package/dist/shared/storage-schema.d.cts +10 -42
- package/dist/shared/storage-schema.d.cts.map +1 -1
- package/dist/shared/storage-schema.d.mts +10 -42
- package/dist/shared/storage-schema.d.mts.map +1 -1
- package/dist/shared/storage-schema.mjs +8 -31
- package/dist/shared/storage-schema.mjs.map +1 -1
- package/package.json +1 -3
- package/dist/controllers/user-storage/network-syncing/add-network-utils.cjs +0 -36
- package/dist/controllers/user-storage/network-syncing/add-network-utils.cjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.cts +0 -22
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.cts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.mts +0 -22
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.mts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/add-network-utils.mjs +0 -31
- package/dist/controllers/user-storage/network-syncing/add-network-utils.mjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.cjs +0 -193
- package/dist/controllers/user-storage/network-syncing/controller-integration.cjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.cts +0 -57
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.cts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.mts +0 -57
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.mts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.mjs +0 -191
- package/dist/controllers/user-storage/network-syncing/controller-integration.mjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/services.cjs +0 -79
- package/dist/controllers/user-storage/network-syncing/services.cjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/services.d.cts +0 -34
- package/dist/controllers/user-storage/network-syncing/services.d.cts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/services.d.mts +0 -34
- package/dist/controllers/user-storage/network-syncing/services.d.mts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/services.mjs +0 -73
- package/dist/controllers/user-storage/network-syncing/services.mjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.cjs +0 -153
- package/dist/controllers/user-storage/network-syncing/sync-all.cjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.d.cts +0 -32
- package/dist/controllers/user-storage/network-syncing/sync-all.d.cts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.d.mts +0 -32
- package/dist/controllers/user-storage/network-syncing/sync-all.d.mts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.mjs +0 -145
- package/dist/controllers/user-storage/network-syncing/sync-all.mjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.cjs +0 -28
- package/dist/controllers/user-storage/network-syncing/sync-mutations.cjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.d.cts +0 -17
- package/dist/controllers/user-storage/network-syncing/sync-mutations.d.cts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.d.mts +0 -17
- package/dist/controllers/user-storage/network-syncing/sync-mutations.d.mts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.mjs +0 -22
- package/dist/controllers/user-storage/network-syncing/sync-mutations.mjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/types.cjs +0 -16
- package/dist/controllers/user-storage/network-syncing/types.cjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/types.d.cts +0 -15
- package/dist/controllers/user-storage/network-syncing/types.d.cts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/types.d.mts +0 -15
- package/dist/controllers/user-storage/network-syncing/types.d.mts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/types.mjs +0 -11
- package/dist/controllers/user-storage/network-syncing/types.mjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.cjs +0 -129
- package/dist/controllers/user-storage/network-syncing/update-network-utils.cjs.map +0 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.cts +0 -59
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.cts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.mts +0 -59
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.mts.map +0 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.mjs +0 -122
- 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"]}
|