{"version":3,"file":"update.mjs","names":[],"sources":["../../../../../../../src/astro/routes/api/admin/plugins/[id]/update.ts"],"sourcesContent":["/**\n * Marketplace plugin update endpoint\n *\n * POST /_emdash/api/admin/plugins/:id/update - Update a marketplace plugin\n */\n\nimport type { APIRoute } from \"astro\";\nimport { z } from \"zod\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, unwrapResult } from \"#api/error.js\";\nimport { handleMarketplaceUpdate } from \"#api/index.js\";\nimport { checkMediaUsageActivationWriteFence } from \"#api/media-usage-write-fence.js\";\nimport { isParseError, parseOptionalBody } from \"#api/parse.js\";\n\nexport const prerender = false;\n\nconst updateBodySchema = z.object({\n\tversion: z.string().min(1).optional(),\n\tconfirmCapabilityChanges: z.boolean().optional(),\n\tconfirmRouteVisibilityChanges: z.boolean().optional(),\n\tconfirmMcpTools: z.boolean().optional(),\n});\n\nexport const POST: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst { id } = params;\n\n\tif (!emdash?.db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\n\tconst denied = requirePerm(user, \"plugins:manage\");\n\tif (denied) return denied;\n\n\tconst activationFence = await checkMediaUsageActivationWriteFence(emdash.db);\n\tif (activationFence) return activationFence;\n\n\tif (!id) {\n\t\treturn apiError(\"INVALID_REQUEST\", \"Plugin ID required\", 400);\n\t}\n\n\tconst body = await parseOptionalBody(request, updateBodySchema, {});\n\tif (isParseError(body)) return body;\n\n\tconst result = await handleMarketplaceUpdate(\n\t\temdash.db,\n\t\temdash.storage,\n\t\temdash.getSandboxRunner(),\n\t\temdash.config.marketplace,\n\t\tid,\n\t\t{\n\t\t\tversion: body.version,\n\t\t\tconfirmCapabilityChanges: body.confirmCapabilityChanges,\n\t\t\tconfirmRouteVisibilityChanges: body.confirmRouteVisibilityChanges,\n\t\t\tconfirmMcpTools: body.confirmMcpTools,\n\t\t\tsandboxBypassed: emdash.isSandboxBypassed(),\n\t\t},\n\t);\n\n\tif (!result.success) return unwrapResult(result);\n\n\tawait emdash.syncMarketplacePlugins();\n\n\treturn unwrapResult(result);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAa,YAAY;AAEzB,MAAM,mBAAmB,EAAE,OAAO;CACjC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACrC,0BAA0B,EAAE,SAAS,CAAC,UAAU;CAChD,+BAA+B,EAAE,SAAS,CAAC,UAAU;CACrD,iBAAiB,EAAE,SAAS,CAAC,UAAU;CACvC,CAAC;AAEF,MAAa,OAAiB,OAAO,EAAE,QAAQ,SAAS,aAAa;CACpE,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,EAAE,OAAO;AAEf,KAAI,CAAC,QAAQ,GACZ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;CAGpE,MAAM,SAAS,YAAY,MAAM,iBAAiB;AAClD,KAAI,OAAQ,QAAO;CAEnB,MAAM,kBAAkB,MAAM,oCAAoC,OAAO,GAAG;AAC5E,KAAI,gBAAiB,QAAO;AAE5B,KAAI,CAAC,GACJ,QAAO,SAAS,mBAAmB,sBAAsB,IAAI;CAG9D,MAAM,OAAO,MAAM,kBAAkB,SAAS,kBAAkB,EAAE,CAAC;AACnE,KAAI,aAAa,KAAK,CAAE,QAAO;CAE/B,MAAM,SAAS,MAAM,wBACpB,OAAO,IACP,OAAO,SACP,OAAO,kBAAkB,EACzB,OAAO,OAAO,aACd,IACA;EACC,SAAS,KAAK;EACd,0BAA0B,KAAK;EAC/B,+BAA+B,KAAK;EACpC,iBAAiB,KAAK;EACtB,iBAAiB,OAAO,mBAAmB;EAC3C,CACD;AAED,KAAI,CAAC,OAAO,QAAS,QAAO,aAAa,OAAO;AAEhD,OAAM,OAAO,wBAAwB;AAErC,QAAO,aAAa,OAAO"}