Files
openclaw/src/secrets/migrate.ts
T
2026-02-26 14:47:22 +00:00

64 lines
1.7 KiB
TypeScript

import { applyMigrationPlan } from "./migrate/apply.js";
import {
listSecretsMigrationBackups,
readBackupManifest,
resolveSecretsMigrationBackupRoot,
restoreFromManifest,
} from "./migrate/backup.js";
import { buildMigrationPlan } from "./migrate/plan.js";
import type {
SecretsMigrationRollbackOptions,
SecretsMigrationRollbackResult,
SecretsMigrationRunOptions,
SecretsMigrationRunResult,
} from "./migrate/types.js";
export type {
SecretsMigrationRollbackOptions,
SecretsMigrationRollbackResult,
SecretsMigrationRunOptions,
SecretsMigrationRunResult,
};
export async function runSecretsMigration(
options: SecretsMigrationRunOptions = {},
): Promise<SecretsMigrationRunResult> {
const env = options.env ?? process.env;
const scrubEnv = options.scrubEnv ?? true;
const plan = await buildMigrationPlan({ env, scrubEnv });
if (!options.write) {
return {
mode: "dry-run",
changed: plan.changed,
secretsFilePath: plan.secretsFilePath,
counters: plan.counters,
changedFiles: plan.backupTargets,
};
}
return await applyMigrationPlan({
plan,
env,
now: options.now ?? new Date(),
});
}
export { resolveSecretsMigrationBackupRoot, listSecretsMigrationBackups };
export async function rollbackSecretsMigration(
options: SecretsMigrationRollbackOptions,
): Promise<SecretsMigrationRollbackResult> {
const env = options.env ?? process.env;
const manifest = readBackupManifest({
backupId: options.backupId,
env,
});
const restored = restoreFromManifest(manifest);
return {
backupId: options.backupId,
restoredFiles: restored.restoredFiles,
deletedFiles: restored.deletedFiles,
};
}