{"version":3,"file":"frontend-token.mjs","names":[],"sources":["../../../../../src/astro/routes/api/settings/frontend-token.ts"],"sourcesContent":["/**\n * GET  /_emdash/api/settings/frontend-token         — the frontend service\n *      account's API token + backend URL, for building or developing the\n *      frontend anywhere (container builds, previews, a laptop).\n * POST /_emdash/api/settings/frontend-token/rotate  — replace it.\n *\n * Admins only: the token reads unpublished content.\n */\nimport type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, apiSuccess, handleError } from \"#api/error.js\";\nimport { ensureFrontendServiceAccount, FRONTEND_USER_EMAIL } from \"../../../../auth/frontend-account.js\";\nimport { OptionsRepository } from \"../../../../database/repositories/options.js\";\n\nexport const prerender = false;\n\nexport const GET: APIRoute = async ({ locals, url }) => {\n\tconst { emdash, user } = locals;\n\tconst denied = requirePerm(user, \"settings:manage\");\n\tif (denied) return denied;\n\tif (!emdash?.db) return apiError(\"NOT_AVAILABLE\", \"Database not available\", 503);\n\ttry {\n\t\tconst account = await ensureFrontendServiceAccount(emdash.db);\n\t\tconst siteUrl = await new OptionsRepository(emdash.db).get<string>(\"emdash:site_url\");\n\t\tconst backendUrl = (typeof siteUrl === \"string\" && siteUrl ? siteUrl : url.origin).replace(/\\/+$/, \"\");\n\t\treturn apiSuccess({\n\t\t\tbackendUrl,\n\t\t\ttoken: account.token,\n\t\t\tuser: FRONTEND_USER_EMAIL,\n\t\t\tenv: [`BACKEND_URL=${backendUrl}`, `SITE_URL=${backendUrl}`, `EMDASH_API_TOKEN=${account.token}`].join(\"\\n\"),\n\t\t\tusage: \"EMDASH_API_TOKEN=… node bin/snapshot-to-sqlite.mjs <BACKEND_URL> snapshot.db, then astro dev / astro build\",\n\t\t});\n\t} catch (error) {\n\t\treturn handleError(error);\n\t}\n};\n"],"mappings":";;;;;;;;;;AAeA,MAAa,YAAY;AAEzB,MAAa,MAAgB,OAAO,EAAE,QAAQ,UAAU;CACvD,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,SAAS,YAAY,MAAM,kBAAkB;AACnD,KAAI,OAAQ,QAAO;AACnB,KAAI,CAAC,QAAQ,GAAI,QAAO,SAAS,iBAAiB,0BAA0B,IAAI;AAChF,KAAI;EACH,MAAM,UAAU,MAAM,6BAA6B,OAAO,GAAG;EAC7D,MAAM,UAAU,MAAM,IAAI,kBAAkB,OAAO,GAAG,CAAC,IAAY,kBAAkB;EACrF,MAAM,cAAc,OAAO,YAAY,YAAY,UAAU,UAAU,IAAI,QAAQ,QAAQ,QAAQ,GAAG;AACtG,SAAO,WAAW;GACjB;GACA,OAAO,QAAQ;GACf,MAAM;GACN,KAAK;IAAC,eAAe;IAAc,YAAY;IAAc,oBAAoB,QAAQ;IAAQ,CAAC,KAAK,KAAK;GAC5G,OAAO;GACP,CAAC;UACM,OAAO;AACf,SAAO,YAAY,MAAM"}