@metamask/profile-sync-controller 5.0.0 → 7.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 +27 -1
- package/dist/controllers/authentication/AuthenticationController.cjs.map +1 -1
- package/dist/controllers/authentication/AuthenticationController.d.cts +2 -2
- package/dist/controllers/authentication/AuthenticationController.d.cts.map +1 -1
- package/dist/controllers/authentication/AuthenticationController.d.mts +2 -2
- package/dist/controllers/authentication/AuthenticationController.d.mts.map +1 -1
- package/dist/controllers/authentication/AuthenticationController.mjs.map +1 -1
- package/dist/controllers/authentication/__fixtures__/mockResponses.cjs +0 -5
- package/dist/controllers/authentication/__fixtures__/mockResponses.cjs.map +1 -1
- package/dist/controllers/authentication/__fixtures__/mockResponses.d.cts.map +1 -1
- package/dist/controllers/authentication/__fixtures__/mockResponses.d.mts.map +1 -1
- package/dist/controllers/authentication/__fixtures__/mockResponses.mjs +0 -5
- package/dist/controllers/authentication/__fixtures__/mockResponses.mjs.map +1 -1
- package/dist/controllers/authentication/services.cjs +0 -2
- package/dist/controllers/authentication/services.cjs.map +1 -1
- package/dist/controllers/authentication/services.d.cts +5 -3
- package/dist/controllers/authentication/services.d.cts.map +1 -1
- package/dist/controllers/authentication/services.d.mts +5 -3
- package/dist/controllers/authentication/services.d.mts.map +1 -1
- package/dist/controllers/authentication/services.mjs +0 -2
- package/dist/controllers/authentication/services.mjs.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.cjs +11 -42
- package/dist/controllers/user-storage/UserStorageController.cjs.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.d.cts +8 -15
- package/dist/controllers/user-storage/UserStorageController.d.cts.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.d.mts +8 -15
- package/dist/controllers/user-storage/UserStorageController.d.mts.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.mjs +11 -42
- package/dist/controllers/user-storage/UserStorageController.mjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.cjs +3 -15
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.cjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.cts +10 -10
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.cts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.mts +10 -10
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.mts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.mjs +4 -16
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.mjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.cjs +5 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.cjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.d.cts +4 -0
- package/dist/controllers/user-storage/__fixtures__/mockResponses.d.cts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.d.mts +4 -0
- package/dist/controllers/user-storage/__fixtures__/mockResponses.d.mts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.mjs +5 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.mjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.cjs +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.cjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.d.cts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.d.mts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.mjs +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.mjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/test-utils.cjs +5 -2
- package/dist/controllers/user-storage/__fixtures__/test-utils.cjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/test-utils.d.cts +3 -0
- package/dist/controllers/user-storage/__fixtures__/test-utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/test-utils.d.mts +3 -0
- package/dist/controllers/user-storage/__fixtures__/test-utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/test-utils.mjs +5 -2
- package/dist/controllers/user-storage/__fixtures__/test-utils.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.cjs +2 -0
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.cts +1 -0
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.mts +1 -0
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.mjs +2 -0
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.cjs +3 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.cts +5 -5
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.mts +5 -5
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.mjs +3 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.cjs +4 -2
- 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 +4 -2
- package/dist/controllers/user-storage/account-syncing/controller-integration.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.cjs +3 -6
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.d.cts +1 -0
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.d.mts +1 -0
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.mjs +3 -6
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/sync-utils.cjs +6 -2
- package/dist/controllers/user-storage/account-syncing/sync-utils.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/sync-utils.d.cts +5 -0
- package/dist/controllers/user-storage/account-syncing/sync-utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/sync-utils.d.mts +5 -0
- package/dist/controllers/user-storage/account-syncing/sync-utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/sync-utils.mjs +6 -2
- package/dist/controllers/user-storage/account-syncing/sync-utils.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 +1 -1
- package/dist/controllers/user-storage/account-syncing/types.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/types.d.mts +1 -1
- 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/account-syncing/utils.cjs +3 -1
- package/dist/controllers/user-storage/account-syncing/utils.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/utils.d.cts +2 -0
- package/dist/controllers/user-storage/account-syncing/utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/utils.d.mts +2 -0
- package/dist/controllers/user-storage/account-syncing/utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/utils.mjs +3 -1
- package/dist/controllers/user-storage/account-syncing/utils.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/add-network-utils.cjs +1 -0
- package/dist/controllers/user-storage/network-syncing/add-network-utils.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.cts +1 -0
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.mts +1 -0
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/add-network-utils.mjs +1 -0
- package/dist/controllers/user-storage/network-syncing/add-network-utils.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.cjs +3 -3
- package/dist/controllers/user-storage/network-syncing/controller-integration.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.cts +2 -0
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.mts +2 -0
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.mjs +3 -3
- package/dist/controllers/user-storage/network-syncing/controller-integration.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/services.cjs +5 -0
- package/dist/controllers/user-storage/network-syncing/services.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/services.d.cts +5 -1
- package/dist/controllers/user-storage/network-syncing/services.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/services.d.mts +5 -1
- package/dist/controllers/user-storage/network-syncing/services.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/services.mjs +5 -0
- package/dist/controllers/user-storage/network-syncing/services.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.cjs +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.mjs +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.cjs +3 -0
- package/dist/controllers/user-storage/network-syncing/update-network-utils.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.cts +3 -0
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.mts +3 -0
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.mjs +3 -0
- package/dist/controllers/user-storage/network-syncing/update-network-utils.mjs.map +1 -1
- package/dist/controllers/user-storage/services.cjs +0 -1
- package/dist/controllers/user-storage/services.cjs.map +1 -1
- package/dist/controllers/user-storage/services.d.cts.map +1 -1
- package/dist/controllers/user-storage/services.d.mts.map +1 -1
- package/dist/controllers/user-storage/services.mjs +0 -1
- package/dist/controllers/user-storage/services.mjs.map +1 -1
- package/dist/controllers/user-storage/utils.cjs +2 -0
- package/dist/controllers/user-storage/utils.cjs.map +1 -1
- package/dist/controllers/user-storage/utils.d.cts +2 -0
- package/dist/controllers/user-storage/utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/utils.d.mts +2 -0
- package/dist/controllers/user-storage/utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/utils.mjs +2 -0
- package/dist/controllers/user-storage/utils.mjs.map +1 -1
- package/dist/sdk/__fixtures__/mock-auth.cjs +0 -15
- package/dist/sdk/__fixtures__/mock-auth.cjs.map +1 -1
- package/dist/sdk/__fixtures__/mock-auth.mjs +0 -15
- package/dist/sdk/__fixtures__/mock-auth.mjs.map +1 -1
- package/dist/sdk/__fixtures__/mock-userstorage.cjs +0 -2
- package/dist/sdk/__fixtures__/mock-userstorage.cjs.map +1 -1
- package/dist/sdk/__fixtures__/mock-userstorage.d.cts.map +1 -1
- package/dist/sdk/__fixtures__/mock-userstorage.d.mts.map +1 -1
- package/dist/sdk/__fixtures__/mock-userstorage.mjs +0 -2
- package/dist/sdk/__fixtures__/mock-userstorage.mjs.map +1 -1
- package/dist/sdk/__fixtures__/test-utils.cjs +2 -1
- package/dist/sdk/__fixtures__/test-utils.cjs.map +1 -1
- package/dist/sdk/__fixtures__/test-utils.d.cts +1 -0
- package/dist/sdk/__fixtures__/test-utils.d.cts.map +1 -1
- package/dist/sdk/__fixtures__/test-utils.d.mts +1 -0
- package/dist/sdk/__fixtures__/test-utils.d.mts.map +1 -1
- package/dist/sdk/__fixtures__/test-utils.mjs +2 -1
- package/dist/sdk/__fixtures__/test-utils.mjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.cjs +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.cjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.d.cts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.d.mts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.cjs +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.cjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.d.cts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.d.mts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.mjs +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.mjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.cjs +1 -2
- package/dist/sdk/authentication-jwt-bearer/services.cjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.d.cts +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.d.cts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.d.mts +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.d.mts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.mjs +1 -2
- package/dist/sdk/authentication-jwt-bearer/services.mjs.map +1 -1
- package/dist/sdk/authentication.cjs +0 -3
- package/dist/sdk/authentication.cjs.map +1 -1
- package/dist/sdk/authentication.d.cts.map +1 -1
- package/dist/sdk/authentication.d.mts.map +1 -1
- package/dist/sdk/authentication.mjs +0 -3
- package/dist/sdk/authentication.mjs.map +1 -1
- package/dist/sdk/user-storage.cjs +1 -3
- package/dist/sdk/user-storage.cjs.map +1 -1
- package/dist/sdk/user-storage.d.cts +1 -1
- package/dist/sdk/user-storage.d.cts.map +1 -1
- package/dist/sdk/user-storage.d.mts +1 -1
- package/dist/sdk/user-storage.d.mts.map +1 -1
- package/dist/sdk/user-storage.mjs +1 -3
- package/dist/sdk/user-storage.mjs.map +1 -1
- package/dist/sdk/utils/eip-6963-metamask-provider.cjs +4 -4
- package/dist/sdk/utils/eip-6963-metamask-provider.cjs.map +1 -1
- package/dist/sdk/utils/eip-6963-metamask-provider.mjs +4 -4
- package/dist/sdk/utils/eip-6963-metamask-provider.mjs.map +1 -1
- package/dist/shared/encryption/constants.cjs +0 -2
- package/dist/shared/encryption/constants.cjs.map +1 -1
- package/dist/shared/encryption/constants.d.cts.map +1 -1
- package/dist/shared/encryption/constants.d.mts.map +1 -1
- package/dist/shared/encryption/constants.mjs +0 -2
- package/dist/shared/encryption/constants.mjs.map +1 -1
- package/dist/shared/encryption/encryption.cjs +1 -0
- package/dist/shared/encryption/encryption.cjs.map +1 -1
- package/dist/shared/encryption/encryption.d.cts +1 -0
- package/dist/shared/encryption/encryption.d.cts.map +1 -1
- package/dist/shared/encryption/encryption.d.mts +1 -0
- package/dist/shared/encryption/encryption.d.mts.map +1 -1
- package/dist/shared/encryption/encryption.mjs +1 -0
- package/dist/shared/encryption/encryption.mjs.map +1 -1
- package/package.json +10 -10
|
@@ -6,6 +6,7 @@ const services_1 = require("../services.cjs");
|
|
|
6
6
|
// TODO - parse type, and handle version changes
|
|
7
7
|
/**
|
|
8
8
|
* parses the raw remote data to the NetworkConfiguration shape
|
|
9
|
+
*
|
|
9
10
|
* @todo - improve parsing instead of asserting
|
|
10
11
|
* @todo - improve version handling
|
|
11
12
|
* @param rawData - raw remote user storage data
|
|
@@ -22,6 +23,7 @@ function parseNetworkConfiguration(rawData) {
|
|
|
22
23
|
const isDefined = (value) => value !== undefined && value !== null;
|
|
23
24
|
/**
|
|
24
25
|
* gets all remote networks from user storage
|
|
26
|
+
*
|
|
25
27
|
* @param opts - user storage options/configuration
|
|
26
28
|
* @returns array of all remote networks
|
|
27
29
|
*/
|
|
@@ -38,8 +40,10 @@ async function getAllRemoteNetworks(opts) {
|
|
|
38
40
|
exports.getAllRemoteNetworks = getAllRemoteNetworks;
|
|
39
41
|
/**
|
|
40
42
|
* Upserts a remote network to user storage
|
|
43
|
+
*
|
|
41
44
|
* @param network - network we are updating or inserting
|
|
42
45
|
* @param opts - user storage options/configuration
|
|
46
|
+
* @returns void
|
|
43
47
|
*/
|
|
44
48
|
async function upsertRemoteNetwork(network, opts) {
|
|
45
49
|
const chainId = network.chainId.toString();
|
|
@@ -52,6 +56,7 @@ async function upsertRemoteNetwork(network, opts) {
|
|
|
52
56
|
exports.upsertRemoteNetwork = upsertRemoteNetwork;
|
|
53
57
|
/**
|
|
54
58
|
* Batch upsert a list of remote networks into user storage
|
|
59
|
+
*
|
|
55
60
|
* @param networks - a list of networks to update or insert
|
|
56
61
|
* @param opts - user storage options/configuration
|
|
57
62
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"services.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":";;;AACA,uEAA4E;AAE5E,8CAIqB;AAErB,gDAAgD;AAChD;;;;;;;GAOG;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;;;;;GAKG;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;;;;;;GAMG;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;;;;;GAKG;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 type { RemoteNetworkConfiguration } from './types';\nimport { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema';\nimport type { UserStorageBaseOptions } from '../services';\nimport {\n batchUpsertUserStorage,\n getUserStorageAllFeatureEntries,\n upsertUserStorage,\n} from '../services';\n\n// TODO - parse type, and handle version changes\n/**\n * parses the raw remote data to the NetworkConfiguration shape\n *\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 *\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 *\n * @param network - network we are updating or inserting\n * @param opts - user storage options/configuration\n * @returns void\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 *\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,19 +1,23 @@
|
|
|
1
|
-
import type { UserStorageBaseOptions } from "../services.cjs";
|
|
2
1
|
import type { RemoteNetworkConfiguration } from "./types.cjs";
|
|
2
|
+
import type { UserStorageBaseOptions } from "../services.cjs";
|
|
3
3
|
/**
|
|
4
4
|
* gets all remote networks from user storage
|
|
5
|
+
*
|
|
5
6
|
* @param opts - user storage options/configuration
|
|
6
7
|
* @returns array of all remote networks
|
|
7
8
|
*/
|
|
8
9
|
export declare function getAllRemoteNetworks(opts: UserStorageBaseOptions): Promise<RemoteNetworkConfiguration[]>;
|
|
9
10
|
/**
|
|
10
11
|
* Upserts a remote network to user storage
|
|
12
|
+
*
|
|
11
13
|
* @param network - network we are updating or inserting
|
|
12
14
|
* @param opts - user storage options/configuration
|
|
15
|
+
* @returns void
|
|
13
16
|
*/
|
|
14
17
|
export declare function upsertRemoteNetwork(network: RemoteNetworkConfiguration, opts: UserStorageBaseOptions): Promise<void>;
|
|
15
18
|
/**
|
|
16
19
|
* Batch upsert a list of remote networks into user storage
|
|
20
|
+
*
|
|
17
21
|
* @param networks - a list of networks to update or insert
|
|
18
22
|
* @param opts - user storage options/configuration
|
|
19
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"services.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAgB;AAE1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAoB;AA2B1D;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAYvC;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,EACnC,IAAI,EAAE,sBAAsB,iBAQ7B;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,0BAA0B,EAAE,EACtC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
|
@@ -1,19 +1,23 @@
|
|
|
1
|
-
import type { UserStorageBaseOptions } from "../services.mjs";
|
|
2
1
|
import type { RemoteNetworkConfiguration } from "./types.mjs";
|
|
2
|
+
import type { UserStorageBaseOptions } from "../services.mjs";
|
|
3
3
|
/**
|
|
4
4
|
* gets all remote networks from user storage
|
|
5
|
+
*
|
|
5
6
|
* @param opts - user storage options/configuration
|
|
6
7
|
* @returns array of all remote networks
|
|
7
8
|
*/
|
|
8
9
|
export declare function getAllRemoteNetworks(opts: UserStorageBaseOptions): Promise<RemoteNetworkConfiguration[]>;
|
|
9
10
|
/**
|
|
10
11
|
* Upserts a remote network to user storage
|
|
12
|
+
*
|
|
11
13
|
* @param network - network we are updating or inserting
|
|
12
14
|
* @param opts - user storage options/configuration
|
|
15
|
+
* @returns void
|
|
13
16
|
*/
|
|
14
17
|
export declare function upsertRemoteNetwork(network: RemoteNetworkConfiguration, opts: UserStorageBaseOptions): Promise<void>;
|
|
15
18
|
/**
|
|
16
19
|
* Batch upsert a list of remote networks into user storage
|
|
20
|
+
*
|
|
17
21
|
* @param networks - a list of networks to update or insert
|
|
18
22
|
* @param opts - user storage options/configuration
|
|
19
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"services.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAgB;AAE1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAoB;AA2B1D;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAYvC;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,EACnC,IAAI,EAAE,sBAAsB,iBAQ7B;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,0BAA0B,EAAE,EACtC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
|
@@ -3,6 +3,7 @@ import { batchUpsertUserStorage, getUserStorageAllFeatureEntries, upsertUserStor
|
|
|
3
3
|
// TODO - parse type, and handle version changes
|
|
4
4
|
/**
|
|
5
5
|
* parses the raw remote data to the NetworkConfiguration shape
|
|
6
|
+
*
|
|
6
7
|
* @todo - improve parsing instead of asserting
|
|
7
8
|
* @todo - improve version handling
|
|
8
9
|
* @param rawData - raw remote user storage data
|
|
@@ -19,6 +20,7 @@ function parseNetworkConfiguration(rawData) {
|
|
|
19
20
|
const isDefined = (value) => value !== undefined && value !== null;
|
|
20
21
|
/**
|
|
21
22
|
* gets all remote networks from user storage
|
|
23
|
+
*
|
|
22
24
|
* @param opts - user storage options/configuration
|
|
23
25
|
* @returns array of all remote networks
|
|
24
26
|
*/
|
|
@@ -34,8 +36,10 @@ export async function getAllRemoteNetworks(opts) {
|
|
|
34
36
|
}
|
|
35
37
|
/**
|
|
36
38
|
* Upserts a remote network to user storage
|
|
39
|
+
*
|
|
37
40
|
* @param network - network we are updating or inserting
|
|
38
41
|
* @param opts - user storage options/configuration
|
|
42
|
+
* @returns void
|
|
39
43
|
*/
|
|
40
44
|
export async function upsertRemoteNetwork(network, opts) {
|
|
41
45
|
const chainId = network.chainId.toString();
|
|
@@ -47,6 +51,7 @@ export async function upsertRemoteNetwork(network, opts) {
|
|
|
47
51
|
}
|
|
48
52
|
/**
|
|
49
53
|
* Batch upsert a list of remote networks into user storage
|
|
54
|
+
*
|
|
50
55
|
* @param networks - a list of networks to update or insert
|
|
51
56
|
* @param opts - user storage options/configuration
|
|
52
57
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"services.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/services.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,2CAAuC;AAE5E,OAAO,EACL,sBAAsB,EACtB,+BAA+B,EAC/B,iBAAiB,EAClB,wBAAoB;AAErB,gDAAgD;AAChD;;;;;;;GAOG;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;;;;;GAKG;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;;;;;;GAMG;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;;;;;GAKG;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 type { RemoteNetworkConfiguration } from './types';\nimport { USER_STORAGE_FEATURE_NAMES } from '../../../shared/storage-schema';\nimport type { UserStorageBaseOptions } from '../services';\nimport {\n batchUpsertUserStorage,\n getUserStorageAllFeatureEntries,\n upsertUserStorage,\n} from '../services';\n\n// TODO - parse type, and handle version changes\n/**\n * parses the raw remote data to the NetworkConfiguration shape\n *\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 *\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 *\n * @param network - network we are updating or inserting\n * @param opts - user storage options/configuration\n * @returns void\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 *\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,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.findNetworksToUpdate = exports.getUpdatedNetworkLists = exports.getMissingNetworkLists = exports.checkWhichNetworkIsLatest = exports.getDataStructures = void 0;
|
|
4
|
-
const utils_1 = require("../utils.cjs");
|
|
5
4
|
const types_1 = require("./types.cjs");
|
|
5
|
+
const utils_1 = require("../utils.cjs");
|
|
6
6
|
const createMap = (networks) => {
|
|
7
7
|
return new Map(networks.map((n) => [n.chainId, n]));
|
|
8
8
|
};
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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 {\n toRemoteNetworkConfiguration,\n type RemoteNetworkConfiguration,\n toNetworkConfiguration,\n} from './types';\nimport { setDifference, setIntersection } from '../utils';\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 +1 @@
|
|
|
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;
|
|
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;AAEzE,OAAO,EAEL,KAAK,0BAA0B,EAEhC,oBAAgB;AAGjB,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-all.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-all.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;
|
|
1
|
+
{"version":3,"file":"sync-all.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-all.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;AAEzE,OAAO,EAEL,KAAK,0BAA0B,EAEhC,oBAAgB;AAGjB,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,5 +1,5 @@
|
|
|
1
|
-
import { setDifference, setIntersection } from "../utils.mjs";
|
|
2
1
|
import { toRemoteNetworkConfiguration, toNetworkConfiguration } from "./types.mjs";
|
|
2
|
+
import { setDifference, setIntersection } from "../utils.mjs";
|
|
3
3
|
const createMap = (networks) => {
|
|
4
4
|
return new Map(networks.map((n) => [n.chainId, n]));
|
|
5
5
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-all.mjs","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
|
+
{"version":3,"file":"sync-all.mjs","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 {\n toRemoteNetworkConfiguration,\n type RemoteNetworkConfiguration,\n toNetworkConfiguration,\n} from './types';\nimport { setDifference, setIntersection } from '../utils';\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-mutations.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-mutations.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sync-mutations.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-mutations.ts"],"names":[],"mappings":";;;AAEA,6CAA4E;AAIrE,MAAM,aAAa,GAAG,KAAK,EAChC,OAA6B,EAC7B,IAA4B,EAC5B,EAAE;IACF,OAAO,MAAM,IAAA,8BAAmB,EAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;AAC3E,CAAC,CAAC;AALW,QAAA,aAAa,iBAKxB;AAEW,QAAA,UAAU,GAAG,qBAAa,CAAC;AAEjC,MAAM,aAAa,GAAG,KAAK,EAChC,OAA6B,EAC7B,IAA4B,EAC5B,EAAE;IACF,gFAAgF;IAChF,OAAO,MAAM,IAAA,8BAAmB,EAC9B;QACE,CAAC,EAAE,GAAG;QACN,GAAG,OAAO;QACV,CAAC,EAAE,IAAI;QACP,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,gDAAgD;KAC5E,EACD,IAAI,CACL,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,aAAa,iBAcxB;AAEK,MAAM,mBAAmB,GAAG,KAAK,EACtC,QAA0D,EAC1D,IAA4B,EAC5B,EAAE;IACF,MAAM,cAAc,GAAiC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,CAAC,EAAE,GAAG;QACN,GAAG,CAAC;KACL,CAAC,CAAC,CAAC;IACJ,OAAO,MAAM,IAAA,oCAAyB,EAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC,CAAC;AATW,QAAA,mBAAmB,uBAS9B","sourcesContent":["import type { NetworkConfiguration } from '@metamask/network-controller';\n\nimport { batchUpsertRemoteNetworks, upsertRemoteNetwork } from './services';\nimport type { RemoteNetworkConfiguration } from './types';\nimport type { UserStorageBaseOptions } from '../services';\n\nexport const updateNetwork = async (\n network: NetworkConfiguration,\n opts: UserStorageBaseOptions,\n) => {\n return await upsertRemoteNetwork({ v: '1', ...network, d: false }, opts);\n};\n\nexport const addNetwork = updateNetwork;\n\nexport const deleteNetwork = async (\n network: NetworkConfiguration,\n opts: UserStorageBaseOptions,\n) => {\n // we are soft deleting, as we need to consider devices that have not yet synced\n return await upsertRemoteNetwork(\n {\n v: '1',\n ...network,\n d: true,\n lastUpdatedAt: Date.now(), // Ensures that a deleted entry has a date field\n },\n opts,\n );\n};\n\nexport const batchUpdateNetworks = async (\n networks: (NetworkConfiguration & { deleted?: boolean })[],\n opts: UserStorageBaseOptions,\n) => {\n const remoteNetworks: RemoteNetworkConfiguration[] = networks.map((n) => ({\n v: '1',\n ...n,\n }));\n return await batchUpsertRemoteNetworks(remoteNetworks, opts);\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-mutations.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-mutations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;
|
|
1
|
+
{"version":3,"file":"sync-mutations.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-mutations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;AAIzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAoB;AAE1D,eAAO,MAAM,aAAa,YACf,oBAAoB,QACvB,sBAAsB,kBAG7B,CAAC;AAEF,eAAO,MAAM,UAAU,YANZ,oBAAoB,QACvB,sBAAsB,kBAKS,CAAC;AAExC,eAAO,MAAM,aAAa,YACf,oBAAoB,QACvB,sBAAsB,kBAY7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,aACpB,CAAC,oBAAoB,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EAAE,QACpD,sBAAsB,kBAO7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-mutations.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-mutations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;
|
|
1
|
+
{"version":3,"file":"sync-mutations.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-mutations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;AAIzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAoB;AAE1D,eAAO,MAAM,aAAa,YACf,oBAAoB,QACvB,sBAAsB,kBAG7B,CAAC;AAEF,eAAO,MAAM,UAAU,YANZ,oBAAoB,QACvB,sBAAsB,kBAKS,CAAC;AAExC,eAAO,MAAM,aAAa,YACf,oBAAoB,QACvB,sBAAsB,kBAY7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,aACpB,CAAC,oBAAoB,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EAAE,QACpD,sBAAsB,kBAO7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-mutations.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-mutations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync-mutations.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/sync-mutations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,uBAAmB;AAI5E,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,OAA6B,EAC7B,IAA4B,EAC5B,EAAE;IACF,OAAO,MAAM,mBAAmB,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,OAA6B,EAC7B,IAA4B,EAC5B,EAAE;IACF,gFAAgF;IAChF,OAAO,MAAM,mBAAmB,CAC9B;QACE,CAAC,EAAE,GAAG;QACN,GAAG,OAAO;QACV,CAAC,EAAE,IAAI;QACP,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,gDAAgD;KAC5E,EACD,IAAI,CACL,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,QAA0D,EAC1D,IAA4B,EAC5B,EAAE;IACF,MAAM,cAAc,GAAiC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxE,CAAC,EAAE,GAAG;QACN,GAAG,CAAC;KACL,CAAC,CAAC,CAAC;IACJ,OAAO,MAAM,yBAAyB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC,CAAC","sourcesContent":["import type { NetworkConfiguration } from '@metamask/network-controller';\n\nimport { batchUpsertRemoteNetworks, upsertRemoteNetwork } from './services';\nimport type { RemoteNetworkConfiguration } from './types';\nimport type { UserStorageBaseOptions } from '../services';\n\nexport const updateNetwork = async (\n network: NetworkConfiguration,\n opts: UserStorageBaseOptions,\n) => {\n return await upsertRemoteNetwork({ v: '1', ...network, d: false }, opts);\n};\n\nexport const addNetwork = updateNetwork;\n\nexport const deleteNetwork = async (\n network: NetworkConfiguration,\n opts: UserStorageBaseOptions,\n) => {\n // we are soft deleting, as we need to consider devices that have not yet synced\n return await upsertRemoteNetwork(\n {\n v: '1',\n ...network,\n d: true,\n lastUpdatedAt: Date.now(), // Ensures that a deleted entry has a date field\n },\n opts,\n );\n};\n\nexport const batchUpdateNetworks = async (\n networks: (NetworkConfiguration & { deleted?: boolean })[],\n opts: UserStorageBaseOptions,\n) => {\n const remoteNetworks: RemoteNetworkConfiguration[] = networks.map((n) => ({\n v: '1',\n ...n,\n }));\n return await batchUpsertRemoteNetworks(remoteNetworks, opts);\n};\n"]}
|
|
@@ -34,6 +34,7 @@ exports.getMappedNetworkConfiguration = getMappedNetworkConfiguration;
|
|
|
34
34
|
/**
|
|
35
35
|
* Will insert any missing infura RPCs, as we cannot remove infura RPC
|
|
36
36
|
* Exported for testability
|
|
37
|
+
*
|
|
37
38
|
* @param props - properties
|
|
38
39
|
* @param props.originalNetworkConfiguration - original network configuration
|
|
39
40
|
* @param props.updateNetworkConfiguration - the updated network configuration to use when dispatching `NetworkController:updateNetwork`
|
|
@@ -61,6 +62,7 @@ const appendMissingInfuraNetworks = (props) => {
|
|
|
61
62
|
exports.appendMissingInfuraNetworks = appendMissingInfuraNetworks;
|
|
62
63
|
/**
|
|
63
64
|
* The `NetworkController:updateNetwork` method will require us to pass in a `replacementSelectedRpcEndpointIndex` if the selected RPC is removed or modified
|
|
65
|
+
*
|
|
64
66
|
* @param props - properties
|
|
65
67
|
* @param props.originalNetworkConfiguration - the original network configuration
|
|
66
68
|
* @param props.updateNetworkConfiguration - the new network configuration we will use to update
|
|
@@ -89,6 +91,7 @@ const getNewRPCIndex = (props) => {
|
|
|
89
91
|
exports.getNewRPCIndex = getNewRPCIndex;
|
|
90
92
|
/**
|
|
91
93
|
* create the correct `NetworkController:updateNetwork` parameters
|
|
94
|
+
*
|
|
92
95
|
* @param props - properties
|
|
93
96
|
* @param props.originalNetworkConfiguration - original config
|
|
94
97
|
* @param props.newNetworkConfiguration - new config (from remote)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-network-utils.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/update-network-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n RpcEndpointType,\n type UpdateNetworkFields,\n type NetworkConfiguration,\n} from '@metamask/network-controller';\n\nimport { setDifference } from '../utils';\n\n/**\n * Will map the network configuration we want to update into something valid that `updateNetwork` accepts\n * Exported for testability\n *\n * @param props - properties\n * @param props.originalNetworkConfiguration - original network configuration we will override\n * @param props.newNetworkConfiguration - new network configuration\n * @returns NetworkConfiguration to dispatch to `NetworkController:updateNetwork`\n */\nexport const getMappedNetworkConfiguration = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n newNetworkConfiguration: NetworkConfiguration;\n}): UpdateNetworkFields => {\n const { originalNetworkConfiguration, newNetworkConfiguration } = props;\n\n // Map of URL <> clientId (url is unique)\n const originalRPCUrlMap = new Map(\n originalNetworkConfiguration.rpcEndpoints.map(\n (r) => [r.url, r.networkClientId] as const,\n ),\n );\n\n const updateNetworkConfig = newNetworkConfiguration as UpdateNetworkFields;\n\n updateNetworkConfig.rpcEndpoints = updateNetworkConfig.rpcEndpoints.map(\n (r) => {\n const originalRPCClientId = originalRPCUrlMap.get(r.url);\n\n // This is an existing RPC, so use the clients networkClientId\n if (originalRPCClientId) {\n r.networkClientId = originalRPCClientId;\n return r;\n }\n\n // This is a new RPC, so remove the remote networkClientId\n r.networkClientId = undefined;\n return r;\n },\n );\n\n return updateNetworkConfig;\n};\n\n/**\n * Will insert any missing infura RPCs, as we cannot remove infura RPC\n * Exported for testability\n * @param props - properties\n * @param props.originalNetworkConfiguration - original network configuration\n * @param props.updateNetworkConfiguration - the updated network configuration to use when dispatching `NetworkController:updateNetwork`\n * @returns mutates and returns the updateNetworkConfiguration\n */\nexport const appendMissingInfuraNetworks = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n updateNetworkConfiguration: UpdateNetworkFields;\n}) => {\n const { originalNetworkConfiguration, updateNetworkConfiguration } = props;\n\n // Ensure we have not removed any infura networks (and add them back if they were removed)\n const origInfuraRPCMap = new Map(\n originalNetworkConfiguration.rpcEndpoints\n .filter((r) => r.type === RpcEndpointType.Infura)\n .map((r) => [r.networkClientId, r] as const),\n );\n const newInfuraRPCMap = new Map(\n updateNetworkConfiguration.rpcEndpoints\n .filter((r) => r.type === RpcEndpointType.Infura && r.networkClientId)\n .map((r) => [r.networkClientId as string, r]),\n );\n const missingOrigInfuraRPCs = setDifference(\n new Set(origInfuraRPCMap.keys()),\n new Set(newInfuraRPCMap.keys()),\n );\n\n if (missingOrigInfuraRPCs.size > 0) {\n const missingRPCs: UpdateNetworkFields['rpcEndpoints'] = [];\n missingOrigInfuraRPCs.forEach((clientId) => {\n missingRPCs.push(\n origInfuraRPCMap.get(\n clientId,\n ) as UpdateNetworkFields['rpcEndpoints'][number],\n );\n });\n\n updateNetworkConfiguration.rpcEndpoints.unshift(...missingRPCs);\n }\n\n return updateNetworkConfiguration;\n};\n\n/**\n * The `NetworkController:updateNetwork` method will require us to pass in a `replacementSelectedRpcEndpointIndex` if the selected RPC is removed or modified\n * @param props - properties\n * @param props.originalNetworkConfiguration - the original network configuration\n * @param props.updateNetworkConfiguration - the new network configuration we will use to update\n * @param props.selectedNetworkClientId - the NetworkController's selected network id.\n * @returns the new RPC index if it needs modification\n */\nexport const getNewRPCIndex = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n updateNetworkConfiguration: UpdateNetworkFields;\n selectedNetworkClientId: string;\n}) => {\n const {\n originalNetworkConfiguration,\n updateNetworkConfiguration,\n selectedNetworkClientId,\n } = props;\n\n const isRPCInNewList = updateNetworkConfiguration.rpcEndpoints.some(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n const isRPCInOldList = originalNetworkConfiguration.rpcEndpoints.some(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n\n const getAnyRPCIndex = () =>\n Math.max(\n updateNetworkConfiguration.rpcEndpoints.findIndex((r) =>\n Boolean(r.networkClientId),\n ),\n 0,\n );\n\n // We have removed the selected RPC, so we must point to a new RPC index\n if (isRPCInOldList && !isRPCInNewList) {\n // Try finding an existing index, or default to first RPC.\n const newIndex = getAnyRPCIndex();\n return newIndex;\n }\n\n // We have updated the selected RPC, so we must point to the same RPC index (or a new one)\n if (isRPCInOldList && isRPCInNewList) {\n const existingIndex = updateNetworkConfiguration.rpcEndpoints.findIndex(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n /* istanbul ignore next - the `getAnyRPCIndex` should not be reachable since this is an existing network */\n return existingIndex !== -1 ? existingIndex : getAnyRPCIndex();\n }\n\n return undefined;\n};\n\n/**\n * create the correct `NetworkController:updateNetwork` parameters\n * @param props - properties\n * @param props.originalNetworkConfiguration - original config\n * @param props.newNetworkConfiguration - new config (from remote)\n * @param props.selectedNetworkClientId - the current selected network client id\n * @returns parameters to be used for `NetworkController:updateNetwork` call\n */\nexport const createUpdateNetworkProps = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n newNetworkConfiguration: NetworkConfiguration;\n selectedNetworkClientId: string;\n}) => {\n const {\n originalNetworkConfiguration,\n newNetworkConfiguration,\n selectedNetworkClientId,\n } = props;\n\n // The `NetworkController:updateNetwork` has a strict set of rules to follow\n // New RPCs that we are adding must not have a networkClientId\n // Existing RPCs must point to the correct networkClientId (so we must convert and use this client clientIds set)\n // Removing RPCs are omitted from the list\n // We cannot remove infura RPCs - so ensure that they stay populated\n // If we are removing a selected RPC - then we need to provide `replacementSelectedRpcEndpointIndex` to an index in the new list\n // If we are updating a selected RPC - then we need to provide `replacementSelectedRpcEndpointIndex` to the index in the new list\n\n const mappedNetworkConfiguration = getMappedNetworkConfiguration({\n originalNetworkConfiguration,\n newNetworkConfiguration,\n });\n\n appendMissingInfuraNetworks({\n originalNetworkConfiguration,\n updateNetworkConfiguration: mappedNetworkConfiguration,\n });\n\n const updatedRPCIndex = getNewRPCIndex({\n originalNetworkConfiguration,\n updateNetworkConfiguration: mappedNetworkConfiguration,\n selectedNetworkClientId,\n });\n\n return {\n updateNetworkFields: mappedNetworkConfiguration,\n newSelectedRpcEndpointIndex: updatedRPCIndex,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"update-network-utils.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/update-network-utils.ts"],"names":[],"mappings":";;;AAAA,qEAIsC;AAEtC,wCAAyC;AAEzC;;;;;;;;GAQG;AACI,MAAM,6BAA6B,GAAG,CAAC,KAG7C,EAAuB,EAAE;IACxB,MAAM,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,GAAG,KAAK,CAAC;IAExE,yCAAyC;IACzC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,4BAA4B,CAAC,YAAY,CAAC,GAAG,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,eAAe,CAAU,CAC3C,CACF,CAAC;IAEF,MAAM,mBAAmB,GAAG,uBAA8C,CAAC;IAE3E,mBAAmB,CAAC,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,GAAG,CACrE,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAEzD,8DAA8D;QAC9D,IAAI,mBAAmB,EAAE;YACvB,CAAC,CAAC,eAAe,GAAG,mBAAmB,CAAC;YACxC,OAAO,CAAC,CAAC;SACV;QAED,0DAA0D;QAC1D,CAAC,CAAC,eAAe,GAAG,SAAS,CAAC;QAC9B,OAAO,CAAC,CAAC;IACX,CAAC,CACF,CAAC;IAEF,OAAO,mBAAmB,CAAC;AAC7B,CAAC,CAAC;AAhCW,QAAA,6BAA6B,iCAgCxC;AAEF;;;;;;;;GAQG;AACI,MAAM,2BAA2B,GAAG,CAAC,KAG3C,EAAE,EAAE;IACH,MAAM,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,GAAG,KAAK,CAAC;IAE3E,0FAA0F;IAC1F,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,4BAA4B,CAAC,YAAY;SACtC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,oCAAe,CAAC,MAAM,CAAC;SAChD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAU,CAAC,CAC/C,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,0BAA0B,CAAC,YAAY;SACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,oCAAe,CAAC,MAAM,IAAI,CAAC,CAAC,eAAe,CAAC;SACrE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,eAAyB,EAAE,CAAC,CAAC,CAAC,CAChD,CAAC;IACF,MAAM,qBAAqB,GAAG,IAAA,qBAAa,EACzC,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAChC,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAChC,CAAC;IAEF,IAAI,qBAAqB,CAAC,IAAI,GAAG,CAAC,EAAE;QAClC,MAAM,WAAW,GAAwC,EAAE,CAAC;QAC5D,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACzC,WAAW,CAAC,IAAI,CACd,gBAAgB,CAAC,GAAG,CAClB,QAAQ,CACsC,CACjD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,0BAA0B,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;KACjE;IAED,OAAO,0BAA0B,CAAC;AACpC,CAAC,CAAC;AApCW,QAAA,2BAA2B,+BAoCtC;AAEF;;;;;;;;GAQG;AACI,MAAM,cAAc,GAAG,CAAC,KAI9B,EAAE,EAAE;IACH,MAAM,EACJ,4BAA4B,EAC5B,0BAA0B,EAC1B,uBAAuB,GACxB,GAAG,KAAK,CAAC;IAEV,MAAM,cAAc,GAAG,0BAA0B,CAAC,YAAY,CAAC,IAAI,CACjE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,uBAAuB,CACrD,CAAC;IACF,MAAM,cAAc,GAAG,4BAA4B,CAAC,YAAY,CAAC,IAAI,CACnE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,uBAAuB,CACrD,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE,CAC1B,IAAI,CAAC,GAAG,CACN,0BAA0B,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CACtD,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAC3B,EACD,CAAC,CACF,CAAC;IAEJ,wEAAwE;IACxE,IAAI,cAAc,IAAI,CAAC,cAAc,EAAE;QACrC,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC;KACjB;IAED,0FAA0F;IAC1F,IAAI,cAAc,IAAI,cAAc,EAAE;QACpC,MAAM,aAAa,GAAG,0BAA0B,CAAC,YAAY,CAAC,SAAS,CACrE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,uBAAuB,CACrD,CAAC;QACF,2GAA2G;QAC3G,OAAO,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;KAChE;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AA3CW,QAAA,cAAc,kBA2CzB;AAEF;;;;;;;;GAQG;AACI,MAAM,wBAAwB,GAAG,CAAC,KAIxC,EAAE,EAAE;IACH,MAAM,EACJ,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,GACxB,GAAG,KAAK,CAAC;IAEV,4EAA4E;IAC5E,8DAA8D;IAC9D,iHAAiH;IACjH,0CAA0C;IAC1C,oEAAoE;IACpE,gIAAgI;IAChI,iIAAiI;IAEjI,MAAM,0BAA0B,GAAG,IAAA,qCAA6B,EAAC;QAC/D,4BAA4B;QAC5B,uBAAuB;KACxB,CAAC,CAAC;IAEH,IAAA,mCAA2B,EAAC;QAC1B,4BAA4B;QAC5B,0BAA0B,EAAE,0BAA0B;KACvD,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,IAAA,sBAAc,EAAC;QACrC,4BAA4B;QAC5B,0BAA0B,EAAE,0BAA0B;QACtD,uBAAuB;KACxB,CAAC,CAAC;IAEH,OAAO;QACL,mBAAmB,EAAE,0BAA0B;QAC/C,2BAA2B,EAAE,eAAe;KAC7C,CAAC;AACJ,CAAC,CAAC;AAvCW,QAAA,wBAAwB,4BAuCnC","sourcesContent":["import {\n RpcEndpointType,\n type UpdateNetworkFields,\n type NetworkConfiguration,\n} from '@metamask/network-controller';\n\nimport { setDifference } from '../utils';\n\n/**\n * Will map the network configuration we want to update into something valid that `updateNetwork` accepts\n * Exported for testability\n *\n * @param props - properties\n * @param props.originalNetworkConfiguration - original network configuration we will override\n * @param props.newNetworkConfiguration - new network configuration\n * @returns NetworkConfiguration to dispatch to `NetworkController:updateNetwork`\n */\nexport const getMappedNetworkConfiguration = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n newNetworkConfiguration: NetworkConfiguration;\n}): UpdateNetworkFields => {\n const { originalNetworkConfiguration, newNetworkConfiguration } = props;\n\n // Map of URL <> clientId (url is unique)\n const originalRPCUrlMap = new Map(\n originalNetworkConfiguration.rpcEndpoints.map(\n (r) => [r.url, r.networkClientId] as const,\n ),\n );\n\n const updateNetworkConfig = newNetworkConfiguration as UpdateNetworkFields;\n\n updateNetworkConfig.rpcEndpoints = updateNetworkConfig.rpcEndpoints.map(\n (r) => {\n const originalRPCClientId = originalRPCUrlMap.get(r.url);\n\n // This is an existing RPC, so use the clients networkClientId\n if (originalRPCClientId) {\n r.networkClientId = originalRPCClientId;\n return r;\n }\n\n // This is a new RPC, so remove the remote networkClientId\n r.networkClientId = undefined;\n return r;\n },\n );\n\n return updateNetworkConfig;\n};\n\n/**\n * Will insert any missing infura RPCs, as we cannot remove infura RPC\n * Exported for testability\n *\n * @param props - properties\n * @param props.originalNetworkConfiguration - original network configuration\n * @param props.updateNetworkConfiguration - the updated network configuration to use when dispatching `NetworkController:updateNetwork`\n * @returns mutates and returns the updateNetworkConfiguration\n */\nexport const appendMissingInfuraNetworks = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n updateNetworkConfiguration: UpdateNetworkFields;\n}) => {\n const { originalNetworkConfiguration, updateNetworkConfiguration } = props;\n\n // Ensure we have not removed any infura networks (and add them back if they were removed)\n const origInfuraRPCMap = new Map(\n originalNetworkConfiguration.rpcEndpoints\n .filter((r) => r.type === RpcEndpointType.Infura)\n .map((r) => [r.networkClientId, r] as const),\n );\n const newInfuraRPCMap = new Map(\n updateNetworkConfiguration.rpcEndpoints\n .filter((r) => r.type === RpcEndpointType.Infura && r.networkClientId)\n .map((r) => [r.networkClientId as string, r]),\n );\n const missingOrigInfuraRPCs = setDifference(\n new Set(origInfuraRPCMap.keys()),\n new Set(newInfuraRPCMap.keys()),\n );\n\n if (missingOrigInfuraRPCs.size > 0) {\n const missingRPCs: UpdateNetworkFields['rpcEndpoints'] = [];\n missingOrigInfuraRPCs.forEach((clientId) => {\n missingRPCs.push(\n origInfuraRPCMap.get(\n clientId,\n ) as UpdateNetworkFields['rpcEndpoints'][number],\n );\n });\n\n updateNetworkConfiguration.rpcEndpoints.unshift(...missingRPCs);\n }\n\n return updateNetworkConfiguration;\n};\n\n/**\n * The `NetworkController:updateNetwork` method will require us to pass in a `replacementSelectedRpcEndpointIndex` if the selected RPC is removed or modified\n *\n * @param props - properties\n * @param props.originalNetworkConfiguration - the original network configuration\n * @param props.updateNetworkConfiguration - the new network configuration we will use to update\n * @param props.selectedNetworkClientId - the NetworkController's selected network id.\n * @returns the new RPC index if it needs modification\n */\nexport const getNewRPCIndex = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n updateNetworkConfiguration: UpdateNetworkFields;\n selectedNetworkClientId: string;\n}) => {\n const {\n originalNetworkConfiguration,\n updateNetworkConfiguration,\n selectedNetworkClientId,\n } = props;\n\n const isRPCInNewList = updateNetworkConfiguration.rpcEndpoints.some(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n const isRPCInOldList = originalNetworkConfiguration.rpcEndpoints.some(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n\n const getAnyRPCIndex = () =>\n Math.max(\n updateNetworkConfiguration.rpcEndpoints.findIndex((r) =>\n Boolean(r.networkClientId),\n ),\n 0,\n );\n\n // We have removed the selected RPC, so we must point to a new RPC index\n if (isRPCInOldList && !isRPCInNewList) {\n // Try finding an existing index, or default to first RPC.\n const newIndex = getAnyRPCIndex();\n return newIndex;\n }\n\n // We have updated the selected RPC, so we must point to the same RPC index (or a new one)\n if (isRPCInOldList && isRPCInNewList) {\n const existingIndex = updateNetworkConfiguration.rpcEndpoints.findIndex(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n /* istanbul ignore next - the `getAnyRPCIndex` should not be reachable since this is an existing network */\n return existingIndex !== -1 ? existingIndex : getAnyRPCIndex();\n }\n\n return undefined;\n};\n\n/**\n * create the correct `NetworkController:updateNetwork` parameters\n *\n * @param props - properties\n * @param props.originalNetworkConfiguration - original config\n * @param props.newNetworkConfiguration - new config (from remote)\n * @param props.selectedNetworkClientId - the current selected network client id\n * @returns parameters to be used for `NetworkController:updateNetwork` call\n */\nexport const createUpdateNetworkProps = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n newNetworkConfiguration: NetworkConfiguration;\n selectedNetworkClientId: string;\n}) => {\n const {\n originalNetworkConfiguration,\n newNetworkConfiguration,\n selectedNetworkClientId,\n } = props;\n\n // The `NetworkController:updateNetwork` has a strict set of rules to follow\n // New RPCs that we are adding must not have a networkClientId\n // Existing RPCs must point to the correct networkClientId (so we must convert and use this client clientIds set)\n // Removing RPCs are omitted from the list\n // We cannot remove infura RPCs - so ensure that they stay populated\n // If we are removing a selected RPC - then we need to provide `replacementSelectedRpcEndpointIndex` to an index in the new list\n // If we are updating a selected RPC - then we need to provide `replacementSelectedRpcEndpointIndex` to the index in the new list\n\n const mappedNetworkConfiguration = getMappedNetworkConfiguration({\n originalNetworkConfiguration,\n newNetworkConfiguration,\n });\n\n appendMissingInfuraNetworks({\n originalNetworkConfiguration,\n updateNetworkConfiguration: mappedNetworkConfiguration,\n });\n\n const updatedRPCIndex = getNewRPCIndex({\n originalNetworkConfiguration,\n updateNetworkConfiguration: mappedNetworkConfiguration,\n selectedNetworkClientId,\n });\n\n return {\n updateNetworkFields: mappedNetworkConfiguration,\n newSelectedRpcEndpointIndex: updatedRPCIndex,\n };\n};\n"]}
|
|
@@ -15,6 +15,7 @@ export declare const getMappedNetworkConfiguration: (props: {
|
|
|
15
15
|
/**
|
|
16
16
|
* Will insert any missing infura RPCs, as we cannot remove infura RPC
|
|
17
17
|
* Exported for testability
|
|
18
|
+
*
|
|
18
19
|
* @param props - properties
|
|
19
20
|
* @param props.originalNetworkConfiguration - original network configuration
|
|
20
21
|
* @param props.updateNetworkConfiguration - the updated network configuration to use when dispatching `NetworkController:updateNetwork`
|
|
@@ -26,6 +27,7 @@ export declare const appendMissingInfuraNetworks: (props: {
|
|
|
26
27
|
}) => UpdateNetworkFields;
|
|
27
28
|
/**
|
|
28
29
|
* The `NetworkController:updateNetwork` method will require us to pass in a `replacementSelectedRpcEndpointIndex` if the selected RPC is removed or modified
|
|
30
|
+
*
|
|
29
31
|
* @param props - properties
|
|
30
32
|
* @param props.originalNetworkConfiguration - the original network configuration
|
|
31
33
|
* @param props.updateNetworkConfiguration - the new network configuration we will use to update
|
|
@@ -39,6 +41,7 @@ export declare const getNewRPCIndex: (props: {
|
|
|
39
41
|
}) => number | undefined;
|
|
40
42
|
/**
|
|
41
43
|
* create the correct `NetworkController:updateNetwork` parameters
|
|
44
|
+
*
|
|
42
45
|
* @param props - properties
|
|
43
46
|
* @param props.originalNetworkConfiguration - original config
|
|
44
47
|
* @param props.newNetworkConfiguration - new config (from remote)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-network-utils.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/update-network-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,qCAAqC;AAItC;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,UAAW;IACnD,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,uBAAuB,EAAE,oBAAoB,CAAC;CAC/C,KAAG,mBA6BH,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"update-network-utils.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/update-network-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,qCAAqC;AAItC;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,UAAW;IACnD,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,uBAAuB,EAAE,oBAAoB,CAAC;CAC/C,KAAG,mBA6BH,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,UAAW;IACjD,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,0BAA0B,EAAE,mBAAmB,CAAC;CACjD,wBAiCA,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,UAAW;IACpC,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,0BAA0B,EAAE,mBAAmB,CAAC;IAChD,uBAAuB,EAAE,MAAM,CAAC;CACjC,uBAuCA,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,UAAW;IAC9C,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,uBAAuB,EAAE,oBAAoB,CAAC;IAC9C,uBAAuB,EAAE,MAAM,CAAC;CACjC;;;CAmCA,CAAC"}
|
|
@@ -15,6 +15,7 @@ export declare const getMappedNetworkConfiguration: (props: {
|
|
|
15
15
|
/**
|
|
16
16
|
* Will insert any missing infura RPCs, as we cannot remove infura RPC
|
|
17
17
|
* Exported for testability
|
|
18
|
+
*
|
|
18
19
|
* @param props - properties
|
|
19
20
|
* @param props.originalNetworkConfiguration - original network configuration
|
|
20
21
|
* @param props.updateNetworkConfiguration - the updated network configuration to use when dispatching `NetworkController:updateNetwork`
|
|
@@ -26,6 +27,7 @@ export declare const appendMissingInfuraNetworks: (props: {
|
|
|
26
27
|
}) => UpdateNetworkFields;
|
|
27
28
|
/**
|
|
28
29
|
* The `NetworkController:updateNetwork` method will require us to pass in a `replacementSelectedRpcEndpointIndex` if the selected RPC is removed or modified
|
|
30
|
+
*
|
|
29
31
|
* @param props - properties
|
|
30
32
|
* @param props.originalNetworkConfiguration - the original network configuration
|
|
31
33
|
* @param props.updateNetworkConfiguration - the new network configuration we will use to update
|
|
@@ -39,6 +41,7 @@ export declare const getNewRPCIndex: (props: {
|
|
|
39
41
|
}) => number | undefined;
|
|
40
42
|
/**
|
|
41
43
|
* create the correct `NetworkController:updateNetwork` parameters
|
|
44
|
+
*
|
|
42
45
|
* @param props - properties
|
|
43
46
|
* @param props.originalNetworkConfiguration - original config
|
|
44
47
|
* @param props.newNetworkConfiguration - new config (from remote)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-network-utils.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/update-network-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,qCAAqC;AAItC;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,UAAW;IACnD,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,uBAAuB,EAAE,oBAAoB,CAAC;CAC/C,KAAG,mBA6BH,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"update-network-utils.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/update-network-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,qCAAqC;AAItC;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,UAAW;IACnD,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,uBAAuB,EAAE,oBAAoB,CAAC;CAC/C,KAAG,mBA6BH,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,UAAW;IACjD,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,0BAA0B,EAAE,mBAAmB,CAAC;CACjD,wBAiCA,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,UAAW;IACpC,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,0BAA0B,EAAE,mBAAmB,CAAC;IAChD,uBAAuB,EAAE,MAAM,CAAC;CACjC,uBAuCA,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,UAAW;IAC9C,4BAA4B,EAAE,oBAAoB,CAAC;IACnD,uBAAuB,EAAE,oBAAoB,CAAC;IAC9C,uBAAuB,EAAE,MAAM,CAAC;CACjC;;;CAmCA,CAAC"}
|
|
@@ -30,6 +30,7 @@ export const getMappedNetworkConfiguration = (props) => {
|
|
|
30
30
|
/**
|
|
31
31
|
* Will insert any missing infura RPCs, as we cannot remove infura RPC
|
|
32
32
|
* Exported for testability
|
|
33
|
+
*
|
|
33
34
|
* @param props - properties
|
|
34
35
|
* @param props.originalNetworkConfiguration - original network configuration
|
|
35
36
|
* @param props.updateNetworkConfiguration - the updated network configuration to use when dispatching `NetworkController:updateNetwork`
|
|
@@ -56,6 +57,7 @@ export const appendMissingInfuraNetworks = (props) => {
|
|
|
56
57
|
};
|
|
57
58
|
/**
|
|
58
59
|
* The `NetworkController:updateNetwork` method will require us to pass in a `replacementSelectedRpcEndpointIndex` if the selected RPC is removed or modified
|
|
60
|
+
*
|
|
59
61
|
* @param props - properties
|
|
60
62
|
* @param props.originalNetworkConfiguration - the original network configuration
|
|
61
63
|
* @param props.updateNetworkConfiguration - the new network configuration we will use to update
|
|
@@ -83,6 +85,7 @@ export const getNewRPCIndex = (props) => {
|
|
|
83
85
|
};
|
|
84
86
|
/**
|
|
85
87
|
* create the correct `NetworkController:updateNetwork` parameters
|
|
88
|
+
*
|
|
86
89
|
* @param props - properties
|
|
87
90
|
* @param props.originalNetworkConfiguration - original config
|
|
88
91
|
* @param props.newNetworkConfiguration - new config (from remote)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-network-utils.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/update-network-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n RpcEndpointType,\n type UpdateNetworkFields,\n type NetworkConfiguration,\n} from '@metamask/network-controller';\n\nimport { setDifference } from '../utils';\n\n/**\n * Will map the network configuration we want to update into something valid that `updateNetwork` accepts\n * Exported for testability\n *\n * @param props - properties\n * @param props.originalNetworkConfiguration - original network configuration we will override\n * @param props.newNetworkConfiguration - new network configuration\n * @returns NetworkConfiguration to dispatch to `NetworkController:updateNetwork`\n */\nexport const getMappedNetworkConfiguration = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n newNetworkConfiguration: NetworkConfiguration;\n}): UpdateNetworkFields => {\n const { originalNetworkConfiguration, newNetworkConfiguration } = props;\n\n // Map of URL <> clientId (url is unique)\n const originalRPCUrlMap = new Map(\n originalNetworkConfiguration.rpcEndpoints.map(\n (r) => [r.url, r.networkClientId] as const,\n ),\n );\n\n const updateNetworkConfig = newNetworkConfiguration as UpdateNetworkFields;\n\n updateNetworkConfig.rpcEndpoints = updateNetworkConfig.rpcEndpoints.map(\n (r) => {\n const originalRPCClientId = originalRPCUrlMap.get(r.url);\n\n // This is an existing RPC, so use the clients networkClientId\n if (originalRPCClientId) {\n r.networkClientId = originalRPCClientId;\n return r;\n }\n\n // This is a new RPC, so remove the remote networkClientId\n r.networkClientId = undefined;\n return r;\n },\n );\n\n return updateNetworkConfig;\n};\n\n/**\n * Will insert any missing infura RPCs, as we cannot remove infura RPC\n * Exported for testability\n * @param props - properties\n * @param props.originalNetworkConfiguration - original network configuration\n * @param props.updateNetworkConfiguration - the updated network configuration to use when dispatching `NetworkController:updateNetwork`\n * @returns mutates and returns the updateNetworkConfiguration\n */\nexport const appendMissingInfuraNetworks = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n updateNetworkConfiguration: UpdateNetworkFields;\n}) => {\n const { originalNetworkConfiguration, updateNetworkConfiguration } = props;\n\n // Ensure we have not removed any infura networks (and add them back if they were removed)\n const origInfuraRPCMap = new Map(\n originalNetworkConfiguration.rpcEndpoints\n .filter((r) => r.type === RpcEndpointType.Infura)\n .map((r) => [r.networkClientId, r] as const),\n );\n const newInfuraRPCMap = new Map(\n updateNetworkConfiguration.rpcEndpoints\n .filter((r) => r.type === RpcEndpointType.Infura && r.networkClientId)\n .map((r) => [r.networkClientId as string, r]),\n );\n const missingOrigInfuraRPCs = setDifference(\n new Set(origInfuraRPCMap.keys()),\n new Set(newInfuraRPCMap.keys()),\n );\n\n if (missingOrigInfuraRPCs.size > 0) {\n const missingRPCs: UpdateNetworkFields['rpcEndpoints'] = [];\n missingOrigInfuraRPCs.forEach((clientId) => {\n missingRPCs.push(\n origInfuraRPCMap.get(\n clientId,\n ) as UpdateNetworkFields['rpcEndpoints'][number],\n );\n });\n\n updateNetworkConfiguration.rpcEndpoints.unshift(...missingRPCs);\n }\n\n return updateNetworkConfiguration;\n};\n\n/**\n * The `NetworkController:updateNetwork` method will require us to pass in a `replacementSelectedRpcEndpointIndex` if the selected RPC is removed or modified\n * @param props - properties\n * @param props.originalNetworkConfiguration - the original network configuration\n * @param props.updateNetworkConfiguration - the new network configuration we will use to update\n * @param props.selectedNetworkClientId - the NetworkController's selected network id.\n * @returns the new RPC index if it needs modification\n */\nexport const getNewRPCIndex = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n updateNetworkConfiguration: UpdateNetworkFields;\n selectedNetworkClientId: string;\n}) => {\n const {\n originalNetworkConfiguration,\n updateNetworkConfiguration,\n selectedNetworkClientId,\n } = props;\n\n const isRPCInNewList = updateNetworkConfiguration.rpcEndpoints.some(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n const isRPCInOldList = originalNetworkConfiguration.rpcEndpoints.some(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n\n const getAnyRPCIndex = () =>\n Math.max(\n updateNetworkConfiguration.rpcEndpoints.findIndex((r) =>\n Boolean(r.networkClientId),\n ),\n 0,\n );\n\n // We have removed the selected RPC, so we must point to a new RPC index\n if (isRPCInOldList && !isRPCInNewList) {\n // Try finding an existing index, or default to first RPC.\n const newIndex = getAnyRPCIndex();\n return newIndex;\n }\n\n // We have updated the selected RPC, so we must point to the same RPC index (or a new one)\n if (isRPCInOldList && isRPCInNewList) {\n const existingIndex = updateNetworkConfiguration.rpcEndpoints.findIndex(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n /* istanbul ignore next - the `getAnyRPCIndex` should not be reachable since this is an existing network */\n return existingIndex !== -1 ? existingIndex : getAnyRPCIndex();\n }\n\n return undefined;\n};\n\n/**\n * create the correct `NetworkController:updateNetwork` parameters\n * @param props - properties\n * @param props.originalNetworkConfiguration - original config\n * @param props.newNetworkConfiguration - new config (from remote)\n * @param props.selectedNetworkClientId - the current selected network client id\n * @returns parameters to be used for `NetworkController:updateNetwork` call\n */\nexport const createUpdateNetworkProps = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n newNetworkConfiguration: NetworkConfiguration;\n selectedNetworkClientId: string;\n}) => {\n const {\n originalNetworkConfiguration,\n newNetworkConfiguration,\n selectedNetworkClientId,\n } = props;\n\n // The `NetworkController:updateNetwork` has a strict set of rules to follow\n // New RPCs that we are adding must not have a networkClientId\n // Existing RPCs must point to the correct networkClientId (so we must convert and use this client clientIds set)\n // Removing RPCs are omitted from the list\n // We cannot remove infura RPCs - so ensure that they stay populated\n // If we are removing a selected RPC - then we need to provide `replacementSelectedRpcEndpointIndex` to an index in the new list\n // If we are updating a selected RPC - then we need to provide `replacementSelectedRpcEndpointIndex` to the index in the new list\n\n const mappedNetworkConfiguration = getMappedNetworkConfiguration({\n originalNetworkConfiguration,\n newNetworkConfiguration,\n });\n\n appendMissingInfuraNetworks({\n originalNetworkConfiguration,\n updateNetworkConfiguration: mappedNetworkConfiguration,\n });\n\n const updatedRPCIndex = getNewRPCIndex({\n originalNetworkConfiguration,\n updateNetworkConfiguration: mappedNetworkConfiguration,\n selectedNetworkClientId,\n });\n\n return {\n updateNetworkFields: mappedNetworkConfiguration,\n newSelectedRpcEndpointIndex: updatedRPCIndex,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"update-network-utils.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/network-syncing/update-network-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n RpcEndpointType,\n type UpdateNetworkFields,\n type NetworkConfiguration,\n} from '@metamask/network-controller';\n\nimport { setDifference } from '../utils';\n\n/**\n * Will map the network configuration we want to update into something valid that `updateNetwork` accepts\n * Exported for testability\n *\n * @param props - properties\n * @param props.originalNetworkConfiguration - original network configuration we will override\n * @param props.newNetworkConfiguration - new network configuration\n * @returns NetworkConfiguration to dispatch to `NetworkController:updateNetwork`\n */\nexport const getMappedNetworkConfiguration = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n newNetworkConfiguration: NetworkConfiguration;\n}): UpdateNetworkFields => {\n const { originalNetworkConfiguration, newNetworkConfiguration } = props;\n\n // Map of URL <> clientId (url is unique)\n const originalRPCUrlMap = new Map(\n originalNetworkConfiguration.rpcEndpoints.map(\n (r) => [r.url, r.networkClientId] as const,\n ),\n );\n\n const updateNetworkConfig = newNetworkConfiguration as UpdateNetworkFields;\n\n updateNetworkConfig.rpcEndpoints = updateNetworkConfig.rpcEndpoints.map(\n (r) => {\n const originalRPCClientId = originalRPCUrlMap.get(r.url);\n\n // This is an existing RPC, so use the clients networkClientId\n if (originalRPCClientId) {\n r.networkClientId = originalRPCClientId;\n return r;\n }\n\n // This is a new RPC, so remove the remote networkClientId\n r.networkClientId = undefined;\n return r;\n },\n );\n\n return updateNetworkConfig;\n};\n\n/**\n * Will insert any missing infura RPCs, as we cannot remove infura RPC\n * Exported for testability\n *\n * @param props - properties\n * @param props.originalNetworkConfiguration - original network configuration\n * @param props.updateNetworkConfiguration - the updated network configuration to use when dispatching `NetworkController:updateNetwork`\n * @returns mutates and returns the updateNetworkConfiguration\n */\nexport const appendMissingInfuraNetworks = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n updateNetworkConfiguration: UpdateNetworkFields;\n}) => {\n const { originalNetworkConfiguration, updateNetworkConfiguration } = props;\n\n // Ensure we have not removed any infura networks (and add them back if they were removed)\n const origInfuraRPCMap = new Map(\n originalNetworkConfiguration.rpcEndpoints\n .filter((r) => r.type === RpcEndpointType.Infura)\n .map((r) => [r.networkClientId, r] as const),\n );\n const newInfuraRPCMap = new Map(\n updateNetworkConfiguration.rpcEndpoints\n .filter((r) => r.type === RpcEndpointType.Infura && r.networkClientId)\n .map((r) => [r.networkClientId as string, r]),\n );\n const missingOrigInfuraRPCs = setDifference(\n new Set(origInfuraRPCMap.keys()),\n new Set(newInfuraRPCMap.keys()),\n );\n\n if (missingOrigInfuraRPCs.size > 0) {\n const missingRPCs: UpdateNetworkFields['rpcEndpoints'] = [];\n missingOrigInfuraRPCs.forEach((clientId) => {\n missingRPCs.push(\n origInfuraRPCMap.get(\n clientId,\n ) as UpdateNetworkFields['rpcEndpoints'][number],\n );\n });\n\n updateNetworkConfiguration.rpcEndpoints.unshift(...missingRPCs);\n }\n\n return updateNetworkConfiguration;\n};\n\n/**\n * The `NetworkController:updateNetwork` method will require us to pass in a `replacementSelectedRpcEndpointIndex` if the selected RPC is removed or modified\n *\n * @param props - properties\n * @param props.originalNetworkConfiguration - the original network configuration\n * @param props.updateNetworkConfiguration - the new network configuration we will use to update\n * @param props.selectedNetworkClientId - the NetworkController's selected network id.\n * @returns the new RPC index if it needs modification\n */\nexport const getNewRPCIndex = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n updateNetworkConfiguration: UpdateNetworkFields;\n selectedNetworkClientId: string;\n}) => {\n const {\n originalNetworkConfiguration,\n updateNetworkConfiguration,\n selectedNetworkClientId,\n } = props;\n\n const isRPCInNewList = updateNetworkConfiguration.rpcEndpoints.some(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n const isRPCInOldList = originalNetworkConfiguration.rpcEndpoints.some(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n\n const getAnyRPCIndex = () =>\n Math.max(\n updateNetworkConfiguration.rpcEndpoints.findIndex((r) =>\n Boolean(r.networkClientId),\n ),\n 0,\n );\n\n // We have removed the selected RPC, so we must point to a new RPC index\n if (isRPCInOldList && !isRPCInNewList) {\n // Try finding an existing index, or default to first RPC.\n const newIndex = getAnyRPCIndex();\n return newIndex;\n }\n\n // We have updated the selected RPC, so we must point to the same RPC index (or a new one)\n if (isRPCInOldList && isRPCInNewList) {\n const existingIndex = updateNetworkConfiguration.rpcEndpoints.findIndex(\n (r) => r.networkClientId === selectedNetworkClientId,\n );\n /* istanbul ignore next - the `getAnyRPCIndex` should not be reachable since this is an existing network */\n return existingIndex !== -1 ? existingIndex : getAnyRPCIndex();\n }\n\n return undefined;\n};\n\n/**\n * create the correct `NetworkController:updateNetwork` parameters\n *\n * @param props - properties\n * @param props.originalNetworkConfiguration - original config\n * @param props.newNetworkConfiguration - new config (from remote)\n * @param props.selectedNetworkClientId - the current selected network client id\n * @returns parameters to be used for `NetworkController:updateNetwork` call\n */\nexport const createUpdateNetworkProps = (props: {\n originalNetworkConfiguration: NetworkConfiguration;\n newNetworkConfiguration: NetworkConfiguration;\n selectedNetworkClientId: string;\n}) => {\n const {\n originalNetworkConfiguration,\n newNetworkConfiguration,\n selectedNetworkClientId,\n } = props;\n\n // The `NetworkController:updateNetwork` has a strict set of rules to follow\n // New RPCs that we are adding must not have a networkClientId\n // Existing RPCs must point to the correct networkClientId (so we must convert and use this client clientIds set)\n // Removing RPCs are omitted from the list\n // We cannot remove infura RPCs - so ensure that they stay populated\n // If we are removing a selected RPC - then we need to provide `replacementSelectedRpcEndpointIndex` to an index in the new list\n // If we are updating a selected RPC - then we need to provide `replacementSelectedRpcEndpointIndex` to the index in the new list\n\n const mappedNetworkConfiguration = getMappedNetworkConfiguration({\n originalNetworkConfiguration,\n newNetworkConfiguration,\n });\n\n appendMissingInfuraNetworks({\n originalNetworkConfiguration,\n updateNetworkConfiguration: mappedNetworkConfiguration,\n });\n\n const updatedRPCIndex = getNewRPCIndex({\n originalNetworkConfiguration,\n updateNetworkConfiguration: mappedNetworkConfiguration,\n selectedNetworkClientId,\n });\n\n return {\n updateNetworkFields: mappedNetworkConfiguration,\n newSelectedRpcEndpointIndex: updatedRPCIndex,\n };\n};\n"]}
|