diff --git a/packages/shared/src/config-schema.test.ts b/packages/shared/src/config-schema.test.ts new file mode 100644 index 00000000000..9e2a75ccf78 --- /dev/null +++ b/packages/shared/src/config-schema.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from "vitest"; +import { paperclipConfigSchema } from "./config-schema.js"; + +describe("paperclip config schema", () => { + it("defaults omitted runtime paths to legacy instance-root locations", () => { + const parsed = paperclipConfigSchema.parse({ + $meta: { + version: 1, + updatedAt: "2026-05-10T00:00:00.000Z", + source: "configure", + }, + database: { + mode: "embedded-postgres", + }, + logging: { + mode: "file", + }, + server: {}, + }); + + expect(parsed.database.embeddedPostgresDataDir).toBe("~/.paperclip/instances/default/db"); + expect(parsed.database.backup.dir).toBe("~/.paperclip/instances/default/data/backups"); + expect(parsed.logging.logDir).toBe("~/.paperclip/instances/default/logs"); + expect(parsed.storage.localDisk.baseDir).toBe("~/.paperclip/instances/default/data/storage"); + expect(parsed.secrets.localEncrypted.keyFilePath).toBe("~/.paperclip/instances/default/secrets/master.key"); + }); +}); diff --git a/packages/shared/src/config-schema.ts b/packages/shared/src/config-schema.ts index 0264d5f6d08..efa1bdee1d8 100644 --- a/packages/shared/src/config-schema.ts +++ b/packages/shared/src/config-schema.ts @@ -24,25 +24,25 @@ export const databaseBackupConfigSchema = z.object({ enabled: z.boolean().default(true), intervalMinutes: z.number().int().min(1).max(7 * 24 * 60).default(60), retentionDays: z.number().int().min(1).max(3650).default(7), - dir: z.string().default("~/.paperclip/instances/default/spaces/default/data/backups"), + dir: z.string().default("~/.paperclip/instances/default/data/backups"), }); export const databaseConfigSchema = z.object({ mode: z.enum(["embedded-postgres", "postgres"]).default("embedded-postgres"), connectionString: z.string().optional(), - embeddedPostgresDataDir: z.string().default("~/.paperclip/instances/default/spaces/default/db"), + embeddedPostgresDataDir: z.string().default("~/.paperclip/instances/default/db"), embeddedPostgresPort: z.number().int().min(1).max(65535).default(54329), backup: databaseBackupConfigSchema.default({ enabled: true, intervalMinutes: 60, retentionDays: 7, - dir: "~/.paperclip/instances/default/spaces/default/data/backups", + dir: "~/.paperclip/instances/default/data/backups", }), }); export const loggingConfigSchema = z.object({ mode: z.enum(["file", "cloud"]), - logDir: z.string().default("~/.paperclip/instances/default/spaces/default/logs"), + logDir: z.string().default("~/.paperclip/instances/default/logs"), }); export const serverConfigSchema = z.object({ @@ -63,7 +63,7 @@ export const authConfigSchema = z.object({ }); export const storageLocalDiskConfigSchema = z.object({ - baseDir: z.string().default("~/.paperclip/instances/default/spaces/default/data/storage"), + baseDir: z.string().default("~/.paperclip/instances/default/data/storage"), }); export const storageS3ConfigSchema = z.object({ @@ -77,7 +77,7 @@ export const storageS3ConfigSchema = z.object({ export const storageConfigSchema = z.object({ provider: z.enum(STORAGE_PROVIDERS).default("local_disk"), localDisk: storageLocalDiskConfigSchema.default({ - baseDir: "~/.paperclip/instances/default/spaces/default/data/storage", + baseDir: "~/.paperclip/instances/default/data/storage", }), s3: storageS3ConfigSchema.default({ bucket: "paperclip", @@ -88,14 +88,14 @@ export const storageConfigSchema = z.object({ }); export const secretsLocalEncryptedConfigSchema = z.object({ - keyFilePath: z.string().default("~/.paperclip/instances/default/spaces/default/secrets/master.key"), + keyFilePath: z.string().default("~/.paperclip/instances/default/secrets/master.key"), }); export const secretsConfigSchema = z.object({ provider: z.enum(SECRET_PROVIDERS).default("local_encrypted"), strictMode: z.boolean().default(false), localEncrypted: secretsLocalEncryptedConfigSchema.default({ - keyFilePath: "~/.paperclip/instances/default/spaces/default/secrets/master.key", + keyFilePath: "~/.paperclip/instances/default/secrets/master.key", }), }); @@ -118,7 +118,7 @@ export const paperclipConfigSchema = z storage: storageConfigSchema.default({ provider: "local_disk", localDisk: { - baseDir: "~/.paperclip/instances/default/spaces/default/data/storage", + baseDir: "~/.paperclip/instances/default/data/storage", }, s3: { bucket: "paperclip", @@ -131,7 +131,7 @@ export const paperclipConfigSchema = z provider: "local_encrypted", strictMode: false, localEncrypted: { - keyFilePath: "~/.paperclip/instances/default/spaces/default/secrets/master.key", + keyFilePath: "~/.paperclip/instances/default/secrets/master.key", }, }), })