{"version":3,"file":"restore.mjs","names":[],"sources":["../../../../../../src/astro/routes/api/revisions/[revisionId]/restore.ts"],"sourcesContent":["/**\n * Restore revision endpoint - injected by EmDash integration\n *\n * POST /_emdash/api/revisions/{revisionId}/restore - Restore revision\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requireOwnerPerm } from \"#api/authorize.js\";\nimport { apiError, mapErrorStatus, unwrapResult } from \"#api/error.js\";\n\nexport const prerender = false;\n\nexport const POST: APIRoute = async ({ params, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst revisionId = params.revisionId!;\n\n\tif (!emdash?.handleRevisionRestore || !emdash?.handleRevisionGet || !emdash?.handleContentGet) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash not configured\", 500);\n\t}\n\n\t// Fetch the revision to discover which content entry it belongs to\n\tconst revision = await emdash.handleRevisionGet(revisionId);\n\tif (!revision.success) {\n\t\treturn apiError(\n\t\t\trevision.error?.code ?? \"UNKNOWN_ERROR\",\n\t\t\trevision.error?.message ?? \"Revision not found\",\n\t\t\tmapErrorStatus(revision.error?.code),\n\t\t);\n\t}\n\n\tconst collection = revision.data?.item?.collection;\n\tconst entryId = revision.data?.item?.entryId;\n\n\tif (!collection || !entryId) {\n\t\treturn apiError(\"INVALID_REVISION\", \"Revision is missing collection or entry reference\", 400);\n\t}\n\n\t// Fetch the content entry to check ownership\n\tconst existing = await emdash.handleContentGet(collection, entryId);\n\tif (!existing.success) {\n\t\treturn apiError(\n\t\t\texisting.error?.code ?? \"UNKNOWN_ERROR\",\n\t\t\texisting.error?.message ?? \"Content not found\",\n\t\t\tmapErrorStatus(existing.error?.code),\n\t\t);\n\t}\n\n\tconst authorId = existing.data?.item?.authorId ?? \"\";\n\n\t// Check ownership: authors can only restore their own content, editors+ can restore any\n\tconst denied = requireOwnerPerm(user, authorId, \"content:edit_own\", \"content:edit_any\");\n\tif (denied) return denied;\n\n\tconst result = await emdash.handleRevisionRestore(revisionId, user!.id);\n\n\treturn unwrapResult(result);\n};\n"],"mappings":";;;;;;;AAWA,MAAa,YAAY;AAEzB,MAAa,OAAiB,OAAO,EAAE,QAAQ,aAAa;CAC3D,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,aAAa,OAAO;AAE1B,KAAI,CAAC,QAAQ,yBAAyB,CAAC,QAAQ,qBAAqB,CAAC,QAAQ,iBAC5E,QAAO,SAAS,kBAAkB,yBAAyB,IAAI;CAIhE,MAAM,WAAW,MAAM,OAAO,kBAAkB,WAAW;AAC3D,KAAI,CAAC,SAAS,QACb,QAAO,SACN,SAAS,OAAO,QAAQ,iBACxB,SAAS,OAAO,WAAW,sBAC3B,eAAe,SAAS,OAAO,KAAK,CACpC;CAGF,MAAM,aAAa,SAAS,MAAM,MAAM;CACxC,MAAM,UAAU,SAAS,MAAM,MAAM;AAErC,KAAI,CAAC,cAAc,CAAC,QACnB,QAAO,SAAS,oBAAoB,qDAAqD,IAAI;CAI9F,MAAM,WAAW,MAAM,OAAO,iBAAiB,YAAY,QAAQ;AACnE,KAAI,CAAC,SAAS,QACb,QAAO,SACN,SAAS,OAAO,QAAQ,iBACxB,SAAS,OAAO,WAAW,qBAC3B,eAAe,SAAS,OAAO,KAAK,CACpC;CAMF,MAAM,SAAS,iBAAiB,MAHf,SAAS,MAAM,MAAM,YAAY,IAGF,oBAAoB,mBAAmB;AACvF,KAAI,OAAQ,QAAO;AAInB,QAAO,aAFQ,MAAM,OAAO,sBAAsB,YAAY,KAAM,GAAG,CAE5C"}