Skip to content

Commit 5c3563a

Browse files
[BUG] Handle unexpected errors in all sequential migrations (#2171) (#2172)
* adds error handling to all sequential migrations, adds default storage setters in error handler * removes error handling in migrateTokenIdList which cannot throw
1 parent 1fae3da commit 5c3563a

1 file changed

Lines changed: 83 additions & 63 deletions

File tree

extension/src/background/helpers/dataStorage.ts

Lines changed: 83 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -123,27 +123,31 @@ export const migrateTestnetSorobanRpcUrlNetworkDetails = async () => {
123123
const storageVersion = (await localStore.getItem(STORAGE_VERSION)) as string;
124124

125125
if (shouldRunMigration({ storageVersion, migrationVersion: "2.0.0" })) {
126-
const networksList: NetworkDetails[] =
127-
(await localStore.getItem(NETWORKS_LIST_ID)) || DEFAULT_NETWORKS;
128-
129-
const migratedNetworkList = networksList.map((network) => {
130-
if (network.network === NETWORKS.TESTNET) {
131-
return {
132-
...TESTNET_NETWORK_DETAILS,
133-
sorobanRpcUrl: SOROBAN_RPC_URLS[NETWORKS.TESTNET],
134-
};
135-
}
126+
try {
127+
const networksList: NetworkDetails[] =
128+
(await localStore.getItem(NETWORKS_LIST_ID)) || DEFAULT_NETWORKS;
129+
130+
const migratedNetworkList = networksList.map((network) => {
131+
if (network.network === NETWORKS.TESTNET) {
132+
return {
133+
...TESTNET_NETWORK_DETAILS,
134+
sorobanRpcUrl: SOROBAN_RPC_URLS[NETWORKS.TESTNET],
135+
};
136+
}
137+
138+
return network;
139+
});
136140

137-
return network;
138-
});
141+
const currentNetwork = await localStore.getItem(NETWORK_ID);
139142

140-
const currentNetwork = await localStore.getItem(NETWORK_ID);
143+
if (currentNetwork && currentNetwork.network === NETWORKS.TESTNET) {
144+
await localStore.setItem(NETWORK_ID, TESTNET_NETWORK_DETAILS);
145+
}
141146

142-
if (currentNetwork && currentNetwork.network === NETWORKS.TESTNET) {
143-
await localStore.setItem(NETWORK_ID, TESTNET_NETWORK_DETAILS);
147+
await localStore.setItem(NETWORKS_LIST_ID, migratedNetworkList);
148+
} catch (error) {
149+
await localStore.setItem(NETWORKS_LIST_ID, DEFAULT_NETWORKS);
144150
}
145-
146-
await localStore.setItem(NETWORKS_LIST_ID, migratedNetworkList);
147151
await migrateDataStorageVersion("2.0.0");
148152
}
149153
};
@@ -164,27 +168,31 @@ export const migrateMainnetSorobanRpcUrlNetworkDetails = async () => {
164168
const storageVersion = (await localStore.getItem(STORAGE_VERSION)) as string;
165169

166170
if (shouldRunMigration({ storageVersion, migrationVersion: "4.0.0" })) {
167-
const networksList: NetworkDetails[] =
168-
(await localStore.getItem(NETWORKS_LIST_ID)) || DEFAULT_NETWORKS;
169-
170-
const migratedNetworkList = networksList.map((network) => {
171-
if (network.network === NETWORKS.PUBLIC) {
172-
return {
173-
...MAINNET_NETWORK_DETAILS,
174-
sorobanRpcUrl: SOROBAN_RPC_URLS[NETWORKS.PUBLIC],
175-
};
176-
}
171+
try {
172+
const networksList: NetworkDetails[] =
173+
(await localStore.getItem(NETWORKS_LIST_ID)) || DEFAULT_NETWORKS;
174+
175+
const migratedNetworkList = networksList.map((network) => {
176+
if (network.network === NETWORKS.PUBLIC) {
177+
return {
178+
...MAINNET_NETWORK_DETAILS,
179+
sorobanRpcUrl: SOROBAN_RPC_URLS[NETWORKS.PUBLIC],
180+
};
181+
}
182+
183+
return network;
184+
});
177185

178-
return network;
179-
});
186+
const currentNetwork = await localStore.getItem(NETWORK_ID);
180187

181-
const currentNetwork = await localStore.getItem(NETWORK_ID);
188+
if (currentNetwork && currentNetwork.network === NETWORKS.PUBLIC) {
189+
await localStore.setItem(NETWORK_ID, MAINNET_NETWORK_DETAILS);
190+
}
182191

183-
if (currentNetwork && currentNetwork.network === NETWORKS.PUBLIC) {
184-
await localStore.setItem(NETWORK_ID, MAINNET_NETWORK_DETAILS);
192+
await localStore.setItem(NETWORKS_LIST_ID, migratedNetworkList);
193+
} catch (error) {
194+
await localStore.setItem(NETWORKS_LIST_ID, DEFAULT_NETWORKS);
185195
}
186-
187-
await localStore.setItem(NETWORKS_LIST_ID, migratedNetworkList);
188196
await migrateDataStorageVersion("4.0.0");
189197
}
190198
};
@@ -300,17 +308,25 @@ export const migrateAllowlistToKeyNetworkSchema = async () => {
300308
const lastUsedAccount = await localStore.getItem(LAST_USED_ACCOUNT);
301309
let allowlistByKey = {};
302310

303-
if (currentAllowlist && lastUsedAccount) {
304-
const allowlistArr = currentAllowlist.split(",").slice(1);
305-
306-
allowlistByKey = {
307-
[NETWORK_NAMES.PUBNET]: {},
308-
[NETWORK_NAMES.TESTNET]: {
309-
[lastUsedAccount]: allowlistArr,
310-
},
311-
[NETWORK_NAMES.FUTURENET]: {},
312-
};
313-
} else {
311+
try {
312+
if (currentAllowlist && lastUsedAccount) {
313+
const allowlistArr = currentAllowlist.split(",").slice(1);
314+
315+
allowlistByKey = {
316+
[NETWORK_NAMES.PUBNET]: {},
317+
[NETWORK_NAMES.TESTNET]: {
318+
[lastUsedAccount]: allowlistArr,
319+
},
320+
[NETWORK_NAMES.FUTURENET]: {},
321+
};
322+
} else {
323+
allowlistByKey = {
324+
[NETWORK_NAMES.PUBNET]: {},
325+
[NETWORK_NAMES.TESTNET]: {},
326+
[NETWORK_NAMES.FUTURENET]: {},
327+
};
328+
}
329+
} catch (error) {
314330
allowlistByKey = {
315331
[NETWORK_NAMES.PUBNET]: {},
316332
[NETWORK_NAMES.TESTNET]: {},
@@ -329,30 +345,34 @@ export const migratePubnetRpcUrl = async () => {
329345
const storageVersion = (await localStore.getItem(STORAGE_VERSION)) as string;
330346

331347
if (shouldRunMigration({ storageVersion, migrationVersion: "5.33.5" })) {
332-
const networksList: NetworkDetails[] =
333-
(await localStore.getItem(NETWORKS_LIST_ID)) || DEFAULT_NETWORKS;
348+
try {
349+
const networksList: NetworkDetails[] =
350+
(await localStore.getItem(NETWORKS_LIST_ID)) || DEFAULT_NETWORKS;
351+
352+
const migratedNetworkList = networksList.map((network) => {
353+
if (network.network === NETWORKS.PUBLIC) {
354+
return {
355+
...MAINNET_NETWORK_DETAILS,
356+
sorobanRpcUrl: SOROBAN_RPC_URLS[NETWORKS.PUBLIC],
357+
};
358+
}
359+
360+
return network;
361+
});
334362

335-
const migratedNetworkList = networksList.map((network) => {
336-
if (network.network === NETWORKS.PUBLIC) {
337-
return {
363+
const currentNetwork = await localStore.getItem(NETWORK_ID);
364+
365+
if (currentNetwork && currentNetwork.network === NETWORKS.PUBLIC) {
366+
await localStore.setItem(NETWORK_ID, {
338367
...MAINNET_NETWORK_DETAILS,
339368
sorobanRpcUrl: SOROBAN_RPC_URLS[NETWORKS.PUBLIC],
340-
};
369+
});
341370
}
342371

343-
return network;
344-
});
345-
346-
const currentNetwork = await localStore.getItem(NETWORK_ID);
347-
348-
if (currentNetwork && currentNetwork.network === NETWORKS.PUBLIC) {
349-
await localStore.setItem(NETWORK_ID, {
350-
...MAINNET_NETWORK_DETAILS,
351-
sorobanRpcUrl: SOROBAN_RPC_URLS[NETWORKS.PUBLIC],
352-
});
372+
await localStore.setItem(NETWORKS_LIST_ID, migratedNetworkList);
373+
} catch (error) {
374+
await localStore.setItem(NETWORKS_LIST_ID, DEFAULT_NETWORKS);
353375
}
354-
355-
await localStore.setItem(NETWORKS_LIST_ID, migratedNetworkList);
356376
await migrateDataStorageVersion("5.33.5");
357377
}
358378
};

0 commit comments

Comments
 (0)