add providers filter to runBackupCycle
This commit is contained in:
parent
ff09c98f3b
commit
ebfc79756f
@ -110,3 +110,18 @@ export function strcmp(s1: string, s2: string): number {
|
|||||||
export function j2s(x: any): string {
|
export function j2s(x: any): string {
|
||||||
return JSON.stringify(x, undefined, 2);
|
return JSON.stringify(x, undefined, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this to filter null or undefined from an array in a type-safe fashion
|
||||||
|
*
|
||||||
|
* example:
|
||||||
|
* const array: Array<T | undefined> = [undefined, null]
|
||||||
|
* const filtered: Array<T> = array.filter(notEmpty)
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function notEmpty<T>(value: T | null | undefined): value is T {
|
||||||
|
return value !== null && value !== undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ import {
|
|||||||
Codec,
|
Codec,
|
||||||
codecForAmountString,
|
codecForAmountString,
|
||||||
codecForBoolean,
|
codecForBoolean,
|
||||||
|
codecForList,
|
||||||
codecForNumber,
|
codecForNumber,
|
||||||
codecForString,
|
codecForString,
|
||||||
codecOptional,
|
codecOptional,
|
||||||
@ -41,6 +42,7 @@ import {
|
|||||||
getTimestampNow,
|
getTimestampNow,
|
||||||
j2s,
|
j2s,
|
||||||
Logger,
|
Logger,
|
||||||
|
notEmpty,
|
||||||
NotificationType,
|
NotificationType,
|
||||||
PreparePayResultType,
|
PreparePayResultType,
|
||||||
RecoveryLoadRequest,
|
RecoveryLoadRequest,
|
||||||
@ -520,6 +522,19 @@ export async function processBackupForProvider(
|
|||||||
await guardOperationException(run, onOpErr);
|
await guardOperationException(run, onOpErr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface RunBackupCycleRequest {
|
||||||
|
/**
|
||||||
|
* List of providers to backup or empty for all known providers.
|
||||||
|
*/
|
||||||
|
providers?: Array<string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const codecForRunBackupCycle = (): Codec<RunBackupCycleRequest> =>
|
||||||
|
buildCodecForObject<RunBackupCycleRequest>()
|
||||||
|
.property("providers", codecOptional(codecForList(codecForString())))
|
||||||
|
.build("RunBackupCycleRequest");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Do one backup cycle that consists of:
|
* Do one backup cycle that consists of:
|
||||||
* 1. Exporting a backup and try to upload it.
|
* 1. Exporting a backup and try to upload it.
|
||||||
@ -527,11 +542,15 @@ export async function processBackupForProvider(
|
|||||||
* 2. Download, verify and import backups from connected sync accounts.
|
* 2. Download, verify and import backups from connected sync accounts.
|
||||||
* 3. Upload the updated backup blob.
|
* 3. Upload the updated backup blob.
|
||||||
*/
|
*/
|
||||||
export async function runBackupCycle(ws: InternalWalletState): Promise<void> {
|
export async function runBackupCycle(ws: InternalWalletState, req: RunBackupCycleRequest): Promise<void> {
|
||||||
const providers = await ws.db
|
const providers = await ws.db
|
||||||
.mktx((x) => ({ backupProviders: x.backupProviders }))
|
.mktx((x) => ({ backupProviders: x.backupProviders }))
|
||||||
.runReadOnly(async (tx) => {
|
.runReadOnly(async (tx) => {
|
||||||
return await tx.backupProviders.iter().toArray();
|
if (req.providers) {
|
||||||
|
const rs = await Promise.all(req.providers.map(id => tx.backupProviders.get(id)))
|
||||||
|
return rs.filter(notEmpty)
|
||||||
|
}
|
||||||
|
return await tx.backupProviders.iter(req.providers).toArray();
|
||||||
});
|
});
|
||||||
const backupJson = await exportBackup(ws);
|
const backupJson = await exportBackup(ws);
|
||||||
const backupConfig = await provideBackupState(ws);
|
const backupConfig = await provideBackupState(ws);
|
||||||
|
@ -41,6 +41,7 @@ import {
|
|||||||
import {
|
import {
|
||||||
addBackupProvider,
|
addBackupProvider,
|
||||||
codecForAddBackupProviderRequest,
|
codecForAddBackupProviderRequest,
|
||||||
|
codecForRunBackupCycle,
|
||||||
getBackupInfo,
|
getBackupInfo,
|
||||||
getBackupRecovery,
|
getBackupRecovery,
|
||||||
loadBackupRecovery,
|
loadBackupRecovery,
|
||||||
@ -809,7 +810,8 @@ async function dispatchRequestInternal(
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
case "runBackupCycle": {
|
case "runBackupCycle": {
|
||||||
await runBackupCycle(ws);
|
const req = codecForRunBackupCycle().decode(payload);
|
||||||
|
await runBackupCycle(ws, req);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
case "exportBackupRecovery": {
|
case "exportBackupRecovery": {
|
||||||
|
Loading…
Reference in New Issue
Block a user