diff --git a/packages/main/src/backend/configManager/configManager.ts b/packages/main/src/backend/configManager/configManager.ts index 4e618d5f..71dd5f98 100644 --- a/packages/main/src/backend/configManager/configManager.ts +++ b/packages/main/src/backend/configManager/configManager.ts @@ -2,6 +2,7 @@ import { configFilePath } from '@/app-globals'; import { type Config } from '@/backend/commonTypes'; import { decrypt, encrypt } from '@/backend/configManager/encryption/crypto'; import { existsSync, promises as fs } from 'fs'; +import { migrateConfig } from './configMigration/configMigrator'; import configExample from './defaultConfig'; import logger from '/@/logging/logger'; @@ -19,7 +20,7 @@ export async function getConfig(configPath: string = configFilePath): Promise any> = {}; + +export function migrateConfig(config: unknown): Config { + let currentConfig = config; + // original config does not have version key and must be handled separately + if (isOriginalConfig(config)) { + return config as Config; + } + let currentVersion = getConfigVersion(currentConfig); + + while (migrations[currentVersion]) { + currentConfig = migrations[currentVersion](currentConfig); + currentVersion = getConfigVersion(currentConfig); + } + + return latestConfigSchema.parse(currentConfig) as Config; +} + +function getConfigVersion(config: unknown): keyof typeof migrations { + const versionSchema = z.object({ version: z.number().int().positive() }); + return versionSchema.parse(config).version; +}