{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/settings/backups/index.ts"],"sourcesContent":["/**\n * Backup settings + archive listing\n *\n * GET /_emdash/api/settings/backups — scheduled-backup settings, stored\n *   archives, and whether a storage backend is available.\n * PUT /_emdash/api/settings/backups — update scheduled-backup settings.\n */\n\nimport type { APIRoute } from \"astro\";\nimport { z } from \"zod\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, apiSuccess, handleError, unwrapResult } from \"#api/error.js\";\nimport { ErrorCode } from \"#api/errors.js\";\nimport {\n\tBACKUP_RETENTION_MAX,\n\tBACKUP_RETENTION_MIN,\n\tgetBackupSettings,\n\tlistBackupArchives,\n\tupdateBackupSettings,\n\ttype BackupArchive,\n} from \"#api/handlers/backup.js\";\nimport { isParseError, parseBody } from \"#api/parse.js\";\n\nexport const prerender = false;\n\nexport const GET: APIRoute = async ({ locals }) => {\n\tconst { emdash, user } = locals;\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\tconst denied = requirePerm(user, \"backups:manage\");\n\tif (denied) return denied;\n\n\ttry {\n\t\tconst settings = await getBackupSettings(emdash.db);\n\n\t\tlet archives: BackupArchive[] = [];\n\t\tconst storageAvailable = !!emdash.storage;\n\t\tif (emdash.storage) {\n\t\t\tconst listed = await listBackupArchives(emdash.storage);\n\t\t\tif (listed.success) archives = listed.data;\n\t\t}\n\n\t\treturn apiSuccess({ settings, archives, storageAvailable });\n\t} catch (error) {\n\t\treturn handleError(\n\t\t\terror,\n\t\t\t\"Failed to load backup settings\",\n\t\t\tErrorCode.BACKUP_SETTINGS_READ_ERROR,\n\t\t);\n\t}\n};\n\nconst settingsBody = z.object({\n\tenabled: z.boolean(),\n\tretention: z.number().int().min(BACKUP_RETENTION_MIN).max(BACKUP_RETENTION_MAX),\n});\n\nexport const PUT: APIRoute = async ({ request, locals }) => {\n\tconst { emdash, user } = locals;\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\tconst denied = requirePerm(user, \"backups:manage\");\n\tif (denied) return denied;\n\n\tconst body = await parseBody(request, settingsBody);\n\tif (isParseError(body)) return body;\n\n\treturn unwrapResult(await updateBackupSettings(emdash.db, body));\n};\n"],"mappings":";;;;;;;;;;;;AAwBA,MAAa,YAAY;AAEzB,MAAa,MAAgB,OAAO,EAAE,aAAa;CAClD,MAAM,EAAE,QAAQ,SAAS;AAEzB,KAAI,CAAC,QAAQ,GACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;CAGpE,MAAM,SAAS,YAAY,MAAM,iBAAiB;AAClD,KAAI,OAAQ,QAAO;AAEnB,KAAI;EACH,MAAM,WAAW,MAAM,kBAAkB,OAAO,GAAG;EAEnD,IAAI,WAA4B,EAAE;EAClC,MAAM,mBAAmB,CAAC,CAAC,OAAO;AAClC,MAAI,OAAO,SAAS;GACnB,MAAM,SAAS,MAAM,mBAAmB,OAAO,QAAQ;AACvD,OAAI,OAAO,QAAS,YAAW,OAAO;;AAGvC,SAAO,WAAW;GAAE;GAAU;GAAU;GAAkB,CAAC;UACnD,OAAO;AACf,SAAO,YACN,OACA,kCACA,UAAU,2BACV;;;AAIH,MAAM,eAAe,EAAE,OAAO;CAC7B,SAAS,EAAE,SAAS;CACpB,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,qBAAqB,CAAC,IAAI,qBAAqB;CAC/E,CAAC;AAEF,MAAa,MAAgB,OAAO,EAAE,SAAS,aAAa;CAC3D,MAAM,EAAE,QAAQ,SAAS;AAEzB,KAAI,CAAC,QAAQ,GACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;CAGpE,MAAM,SAAS,YAAY,MAAM,iBAAiB;AAClD,KAAI,OAAQ,QAAO;CAEnB,MAAM,OAAO,MAAM,UAAU,SAAS,aAAa;AACnD,KAAI,aAAa,KAAK,CAAE,QAAO;AAE/B,QAAO,aAAa,MAAM,qBAAqB,OAAO,IAAI,KAAK,CAAC"}