emdash 0.28.0 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/api/route-utils.mjs +2 -2
  2. package/dist/api/schemas/index.d.mts +1 -1
  3. package/dist/{api-BFURZn1i.mjs → api-DxFSorgk.mjs} +2 -2
  4. package/dist/{api-BFURZn1i.mjs.map → api-DxFSorgk.mjs.map} +1 -1
  5. package/dist/{apply-Bu-8nYHL.mjs → apply-CDJqIjPU.mjs} +8 -8
  6. package/dist/{apply-Bu-8nYHL.mjs.map → apply-CDJqIjPU.mjs.map} +1 -1
  7. package/dist/astro/index.d.mts +1 -1
  8. package/dist/astro/index.mjs +1 -1
  9. package/dist/astro/middleware/auth.d.mts +1 -1
  10. package/dist/astro/middleware.mjs +15 -15
  11. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +1 -1
  12. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +1 -1
  13. package/dist/astro/routes/api/admin/bylines/index.mjs +1 -1
  14. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +6 -6
  15. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +6 -6
  16. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +6 -6
  17. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +6 -6
  18. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +6 -6
  19. package/dist/astro/routes/api/admin/plugins/index.mjs +6 -6
  20. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +6 -6
  21. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +6 -6
  22. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +6 -6
  23. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +6 -6
  24. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +7 -7
  25. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +6 -6
  26. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +7 -7
  27. package/dist/astro/routes/api/admin/plugins/updates.mjs +6 -6
  28. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +6 -6
  29. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +6 -6
  30. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +1 -1
  31. package/dist/astro/routes/api/import/wordpress/execute.d.mts +1 -1
  32. package/dist/astro/routes/api/import/wordpress/execute.mjs +2 -2
  33. package/dist/astro/routes/api/import/wordpress/media.d.mts +1 -1
  34. package/dist/astro/routes/api/import/wordpress/prepare.mjs +1 -1
  35. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +1 -1
  36. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +2 -2
  37. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +1 -1
  38. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +3 -3
  39. package/dist/astro/routes/api/manifest.mjs +1 -1
  40. package/dist/astro/routes/api/mcp.mjs +14 -14
  41. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts.map +1 -1
  42. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +2 -10
  43. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
  44. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +6 -6
  45. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +6 -6
  46. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +6 -6
  47. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +6 -6
  48. package/dist/astro/routes/api/schema/collections/index.mjs +6 -6
  49. package/dist/astro/routes/api/schema/index.mjs +2 -2
  50. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +6 -6
  51. package/dist/astro/routes/api/schema/orphans/index.mjs +6 -6
  52. package/dist/astro/routes/api/setup/dev-bypass.mjs +3 -3
  53. package/dist/astro/routes/api/setup/index.mjs +3 -3
  54. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +2 -2
  55. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +2 -2
  56. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +2 -2
  57. package/dist/astro/routes/api/taxonomies/index.mjs +2 -2
  58. package/dist/astro/routes/api/typegen.mjs +2 -2
  59. package/dist/astro/types.d.mts +1 -1
  60. package/dist/{byline-fields-Cgrt9-aL.d.mts → byline-fields-CHE8UStY.d.mts} +3 -3
  61. package/dist/{byline-fields-Cgrt9-aL.d.mts.map → byline-fields-CHE8UStY.d.mts.map} +1 -1
  62. package/dist/{bylines-Woq87129.mjs → bylines-CAZxGSrm.mjs} +2 -2
  63. package/dist/{bylines-Woq87129.mjs.map → bylines-CAZxGSrm.mjs.map} +1 -1
  64. package/dist/cli/index.mjs +3 -3
  65. package/dist/{content-refresh-CA4uKwzH.mjs → content-refresh-Br4gMzh8.mjs} +13 -7
  66. package/dist/content-refresh-Br4gMzh8.mjs.map +1 -0
  67. package/dist/{context-CUsR9dXL.mjs → context-BRIpHARC.mjs} +2 -2
  68. package/dist/{context-CUsR9dXL.mjs.map → context-BRIpHARC.mjs.map} +1 -1
  69. package/dist/index.d.mts +1 -1
  70. package/dist/index.mjs +11 -11
  71. package/dist/media/local-runtime.d.mts +1 -1
  72. package/dist/{menus-CsZ2ZEK2.mjs → menus-b2T4clbO.mjs} +2 -2
  73. package/dist/{menus-CsZ2ZEK2.mjs.map → menus-b2T4clbO.mjs.map} +1 -1
  74. package/dist/plugin-utils.d.mts +1 -1
  75. package/dist/plugins/adapt-sandbox-entry.d.mts +1 -1
  76. package/dist/{query-ByGq6ver.mjs → query-1Cp6U9oo.mjs} +5 -5
  77. package/dist/{query-ByGq6ver.mjs.map → query-1Cp6U9oo.mjs.map} +1 -1
  78. package/dist/{registry-B65mUtPa.mjs → registry-B57vp_X9.mjs} +2 -2
  79. package/dist/{registry-B65mUtPa.mjs.map → registry-B57vp_X9.mjs.map} +1 -1
  80. package/dist/runtime.d.mts +1 -1
  81. package/dist/{schema-Blhoxp3P.mjs → schema-CX9cfNkZ.mjs} +2 -2
  82. package/dist/{schema-Blhoxp3P.mjs.map → schema-CX9cfNkZ.mjs.map} +1 -1
  83. package/dist/seed/index.mjs +3 -3
  84. package/dist/{taxonomies-BGBd16Eu.mjs → taxonomies-Bs13SN-F.mjs} +2 -2
  85. package/dist/{taxonomies-BGBd16Eu.mjs.map → taxonomies-Bs13SN-F.mjs.map} +1 -1
  86. package/dist/{taxonomies-Cnb4F-Pb.mjs → taxonomies-kH9ABDUF.mjs} +2 -2
  87. package/dist/{taxonomies-Cnb4F-Pb.mjs.map → taxonomies-kH9ABDUF.mjs.map} +1 -1
  88. package/dist/{validation-c8WjhH8z.mjs → validation-0l8-RYj4.mjs} +3 -3
  89. package/dist/{validation-c8WjhH8z.mjs.map → validation-0l8-RYj4.mjs.map} +1 -1
  90. package/dist/version-qmeO1XZY.mjs +7 -0
  91. package/dist/{version-CaccU7DM.mjs.map → version-qmeO1XZY.mjs.map} +1 -1
  92. package/dist/{wxr-taxonomies-BC3OYpvx.mjs → wxr-taxonomies-CNFcsNCr.mjs} +2 -2
  93. package/dist/{wxr-taxonomies-BC3OYpvx.mjs.map → wxr-taxonomies-CNFcsNCr.mjs.map} +1 -1
  94. package/package.json +5 -5
  95. package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +17 -15
  96. package/src/database/repositories/media-usage.ts +25 -3
  97. package/src/media/usage/content-repair.ts +206 -22
  98. package/src/media/usage/content-snapshots.ts +4 -0
  99. package/dist/content-refresh-CA4uKwzH.mjs.map +0 -1
  100. package/dist/version-CaccU7DM.mjs +0 -7
@@ -2,7 +2,7 @@ import "../../../base64-CmWvODNW.mjs";
2
2
  import "../../../types-CuW0zWDA.mjs";
3
3
  import { t as OptionsRepository } from "../../../options-DTTML-Tx.mjs";
4
4
  import { r as handleError } from "../../../error-CkAseSqZ.mjs";
5
- import { n as VERSION, t as COMMIT } from "../../../version-CaccU7DM.mjs";
5
+ import { n as VERSION, t as COMMIT } from "../../../version-qmeO1XZY.mjs";
6
6
  import { t as getAuthMode } from "../../../mode-BM9QgEmt.mjs";
7
7
 
8
8
  //#region src/astro/routes/api/manifest.ts
@@ -157,7 +157,7 @@ function getEmDash(extra) {
157
157
  }
158
158
  async function getCollectionFields(ec, collection) {
159
159
  try {
160
- const { SchemaRegistry } = await import("../../../schema-Blhoxp3P.mjs").then((n) => n.t);
160
+ const { SchemaRegistry } = await import("../../../schema-CX9cfNkZ.mjs").then((n) => n.t);
161
161
  const col = await new SchemaRegistry(ec.db).getCollectionWithFields(collection);
162
162
  return col ? col.fields : null;
163
163
  } catch {
@@ -186,7 +186,7 @@ async function applyReadMarkdown(ec, collection, items) {
186
186
  for (const item of items) if (item.data && typeof item.data === "object") item.data = convertDataForRead(item.data, fields, false);
187
187
  }
188
188
  async function invalidateBylines() {
189
- const { invalidateBylineCache } = await import("../../../bylines-Woq87129.mjs").then((n) => n.t);
189
+ const { invalidateBylineCache } = await import("../../../bylines-CAZxGSrm.mjs").then((n) => n.t);
190
190
  invalidateBylineCache();
191
191
  }
192
192
  /**
@@ -813,7 +813,7 @@ function createMcpServer() {
813
813
  requireRole(extra, Role.EDITOR);
814
814
  const ec = getEmDash(extra);
815
815
  try {
816
- const { SchemaRegistry } = await import("../../../schema-Blhoxp3P.mjs").then((n) => n.t);
816
+ const { SchemaRegistry } = await import("../../../schema-CX9cfNkZ.mjs").then((n) => n.t);
817
817
  return jsonResult({ items: await new SchemaRegistry(ec.db).listCollections() });
818
818
  } catch (error) {
819
819
  return respondHandlerError(error, "SCHEMA_LIST_ERROR");
@@ -829,7 +829,7 @@ function createMcpServer() {
829
829
  requireRole(extra, Role.EDITOR);
830
830
  const ec = getEmDash(extra);
831
831
  try {
832
- const { SchemaRegistry } = await import("../../../schema-Blhoxp3P.mjs").then((n) => n.t);
832
+ const { SchemaRegistry } = await import("../../../schema-CX9cfNkZ.mjs").then((n) => n.t);
833
833
  const collection = await new SchemaRegistry(ec.db).getCollectionWithFields(args.slug);
834
834
  if (!collection) return respondError("NOT_FOUND", `Collection '${args.slug}' not found`);
835
835
  return jsonResult(collection);
@@ -859,7 +859,7 @@ function createMcpServer() {
859
859
  requireRole(extra, Role.ADMIN);
860
860
  const ec = getEmDash(extra);
861
861
  try {
862
- const { SchemaRegistry } = await import("../../../schema-Blhoxp3P.mjs").then((n) => n.t);
862
+ const { SchemaRegistry } = await import("../../../schema-CX9cfNkZ.mjs").then((n) => n.t);
863
863
  const collection = await new SchemaRegistry(ec.db).createCollection({
864
864
  slug: args.slug,
865
865
  label: args.label,
@@ -887,7 +887,7 @@ function createMcpServer() {
887
887
  requireRole(extra, Role.ADMIN);
888
888
  const ec = getEmDash(extra);
889
889
  try {
890
- const { SchemaRegistry } = await import("../../../schema-Blhoxp3P.mjs").then((n) => n.t);
890
+ const { SchemaRegistry } = await import("../../../schema-CX9cfNkZ.mjs").then((n) => n.t);
891
891
  await new SchemaRegistry(ec.db).deleteCollection(args.slug, { force: args.force });
892
892
  ec.invalidateUrlPatternCache();
893
893
  return jsonResult({ deleted: args.slug });
@@ -941,7 +941,7 @@ function createMcpServer() {
941
941
  requireRole(extra, Role.ADMIN);
942
942
  const ec = getEmDash(extra);
943
943
  try {
944
- const { SchemaRegistry } = await import("../../../schema-Blhoxp3P.mjs").then((n) => n.t);
944
+ const { SchemaRegistry } = await import("../../../schema-CX9cfNkZ.mjs").then((n) => n.t);
945
945
  return jsonResult(await new SchemaRegistry(ec.db).createField(args.collection, {
946
946
  slug: args.slug,
947
947
  label: args.label,
@@ -971,7 +971,7 @@ function createMcpServer() {
971
971
  requireRole(extra, Role.ADMIN);
972
972
  const ec = getEmDash(extra);
973
973
  try {
974
- const { SchemaRegistry } = await import("../../../schema-Blhoxp3P.mjs").then((n) => n.t);
974
+ const { SchemaRegistry } = await import("../../../schema-CX9cfNkZ.mjs").then((n) => n.t);
975
975
  await new SchemaRegistry(ec.db).deleteField(args.collection, args.fieldSlug);
976
976
  return jsonResult({
977
977
  deleted: args.fieldSlug,
@@ -1111,7 +1111,7 @@ function createMcpServer() {
1111
1111
  requireScope(extra, "content:read");
1112
1112
  const ec = getEmDash(extra);
1113
1113
  try {
1114
- const { handleTaxonomyList } = await import("../../../taxonomies-BGBd16Eu.mjs").then((n) => n.l);
1114
+ const { handleTaxonomyList } = await import("../../../taxonomies-Bs13SN-F.mjs").then((n) => n.l);
1115
1115
  return unwrap(await handleTaxonomyList(ec.db, { locale: args.locale }));
1116
1116
  } catch (error) {
1117
1117
  return respondHandlerError(error, "TAXONOMY_LIST_ERROR");
@@ -1131,7 +1131,7 @@ function createMcpServer() {
1131
1131
  requireScope(extra, "content:read");
1132
1132
  const ec = getEmDash(extra);
1133
1133
  try {
1134
- const { handleTaxonomyList } = await import("../../../taxonomies-BGBd16Eu.mjs").then((n) => n.l);
1134
+ const { handleTaxonomyList } = await import("../../../taxonomies-Bs13SN-F.mjs").then((n) => n.l);
1135
1135
  const listResult = await handleTaxonomyList(ec.db, { locale: args.locale });
1136
1136
  if (!listResult.success) return unwrap(listResult);
1137
1137
  if (!listResult.data.taxonomies.find((t) => t.name === args.taxonomy)) return respondError("NOT_FOUND", `Taxonomy '${args.taxonomy}' not found`);
@@ -1190,7 +1190,7 @@ function createMcpServer() {
1190
1190
  requireRole(extra, Role.EDITOR);
1191
1191
  const ec = getEmDash(extra);
1192
1192
  try {
1193
- const { handleTermCreate } = await import("../../../taxonomies-BGBd16Eu.mjs").then((n) => n.l);
1193
+ const { handleTermCreate } = await import("../../../taxonomies-Bs13SN-F.mjs").then((n) => n.l);
1194
1194
  return unwrap(await handleTermCreate(ec.db, args.taxonomy, {
1195
1195
  slug: args.slug,
1196
1196
  label: args.label,
@@ -1219,7 +1219,7 @@ function createMcpServer() {
1219
1219
  requireRole(extra, Role.EDITOR);
1220
1220
  const ec = getEmDash(extra);
1221
1221
  try {
1222
- const { handleTermUpdate } = await import("../../../taxonomies-BGBd16Eu.mjs").then((n) => n.l);
1222
+ const { handleTermUpdate } = await import("../../../taxonomies-Bs13SN-F.mjs").then((n) => n.l);
1223
1223
  return unwrap(await handleTermUpdate(ec.db, args.taxonomy, args.termSlug, {
1224
1224
  slug: args.slug,
1225
1225
  label: args.label,
@@ -1243,7 +1243,7 @@ function createMcpServer() {
1243
1243
  requireRole(extra, Role.EDITOR);
1244
1244
  const ec = getEmDash(extra);
1245
1245
  try {
1246
- const { handleTermDelete } = await import("../../../taxonomies-BGBd16Eu.mjs").then((n) => n.l);
1246
+ const { handleTermDelete } = await import("../../../taxonomies-Bs13SN-F.mjs").then((n) => n.l);
1247
1247
  return unwrap(await handleTermDelete(ec.db, args.taxonomy, args.termSlug));
1248
1248
  } catch (error) {
1249
1249
  return respondHandlerError(error, "TAXONOMY_TERM_DELETE_ERROR");
@@ -1258,7 +1258,7 @@ function createMcpServer() {
1258
1258
  requireScope(extra, "content:read");
1259
1259
  const ec = getEmDash(extra);
1260
1260
  try {
1261
- const { handleTermTranslations } = await import("../../../taxonomies-BGBd16Eu.mjs").then((n) => n.l);
1261
+ const { handleTermTranslations } = await import("../../../taxonomies-Bs13SN-F.mjs").then((n) => n.l);
1262
1262
  return unwrap(await handleTermTranslations(ec.db, args.id));
1263
1263
  } catch (error) {
1264
1264
  return respondHandlerError(error, "TERM_TRANSLATIONS_ERROR");
@@ -1 +1 @@
1
- {"version":3,"file":"_...path_.d.mts","names":[],"sources":["../../../../../../src/astro/routes/api/plugins/[pluginId]/[...path].ts"],"mappings":";;;cAiBa,SAAA;AAAA,cAsEA,GAAA,EAAG,QAAA;AAAA,cACH,IAAA,EAAI,QAAA;AAAA,cACJ,GAAA,EAAG,QAAA;AAAA,cACH,KAAA,EAAK,QAAA;AAAA,cACL,MAAA,EAAM,QAAA"}
1
+ {"version":3,"file":"_...path_.d.mts","names":[],"sources":["../../../../../../src/astro/routes/api/plugins/[pluginId]/[...path].ts"],"mappings":";;;cAiBa,SAAA;AAAA,cAwEA,GAAA,EAAG,QAAA;AAAA,cACH,IAAA,EAAI,QAAA;AAAA,cACJ,GAAA,EAAG,QAAA;AAAA,cACH,KAAA,EAAK,QAAA;AAAA,cACL,MAAA,EAAM,QAAA"}
@@ -46,19 +46,11 @@ const handleRequest = async ({ params, request, locals }) => {
46
46
  const routeMeta = emdash.getPluginRouteMeta(pluginId, `/${path}`);
47
47
  if (!routeMeta) return apiError("NOT_FOUND", "Plugin route not found", 404);
48
48
  if (!routeMeta.public) {
49
- const denied = requirePerm(user, [
50
- "GET",
51
- "HEAD",
52
- "OPTIONS"
53
- ].includes(method) ? "plugins:read" : "plugins:manage");
49
+ const denied = requirePerm(user, "plugins:manage");
54
50
  if (denied) return denied;
55
51
  const scopeError = requireScope(locals, "admin");
56
52
  if (scopeError) return scopeError;
57
- if (![
58
- "GET",
59
- "HEAD",
60
- "OPTIONS"
61
- ].includes(method) && !locals.tokenScopes && request.headers.get("X-EmDash-Request") !== "1") return apiError("CSRF_REJECTED", "Missing required header", 403);
53
+ if (!locals.tokenScopes && request.headers.get("X-EmDash-Request") !== "1") return apiError("CSRF_REJECTED", "Missing required header", 403);
62
54
  }
63
55
  const result = await emdash.handlePluginApiRoute(pluginId, method, `/${path}`, request);
64
56
  if (!result.success) {
@@ -1 +1 @@
1
- {"version":3,"file":"_...path_.mjs","names":[],"sources":["../../../../../../src/auth/scopes.ts","../../../../../../src/astro/routes/api/plugins/[pluginId]/[...path].ts"],"sourcesContent":["/**\n * Scope enforcement for API token authentication.\n *\n * Routes call `requireScope(locals, \"content:write\")` alongside role checks.\n * Session-authenticated requests have no scope restrictions (implicit full access).\n * Token-authenticated requests must have the required scope (or \"admin\").\n */\n\nimport { hasScope } from \"./api-tokens.js\";\n\n/**\n * Check if the request has a required scope.\n * Returns a 403 Response if the scope is missing, or null if OK.\n *\n * For session-authenticated users (no tokenScopes), always returns null\n * since session auth has implicit full scope.\n */\nexport function requireScope(locals: { tokenScopes?: string[] }, scope: string): Response | null {\n\t// Session auth = no scope restrictions\n\tif (!locals.tokenScopes) return null;\n\n\tif (hasScope(locals.tokenScopes, scope)) return null;\n\n\treturn new Response(\n\t\tJSON.stringify({\n\t\t\terror: {\n\t\t\t\tcode: \"INSUFFICIENT_SCOPE\",\n\t\t\t\tmessage: `Token lacks required scope: ${scope}`,\n\t\t\t},\n\t\t}),\n\t\t{ status: 403, headers: { \"Content-Type\": \"application/json\" } },\n\t);\n}\n","/**\n * Plugin API routes - dynamic handler for plugin-defined endpoints\n *\n * Routes are mounted at /_emdash/api/plugins/{pluginId}/*\n * Plugins register routes like \"POST /do-something\" which becomes\n * POST /_emdash/api/plugins/{pluginId}/do-something\n *\n * Routes marked as `public: true` skip authentication and CSRF checks.\n * Private routes (the default) require authentication and appropriate permissions.\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, apiSuccess } from \"#api/error.js\";\nimport { requireScope } from \"#auth/scopes.js\";\n\nexport const prerender = false;\n\n/**\n * Handle all methods by matching against plugin-defined routes\n */\nconst handleRequest: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst pluginId = params.pluginId!;\n\tconst path = params.path || \"\";\n\tconst method = request.method.toUpperCase();\n\n\tif (!emdash?.handlePluginApiRoute) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash not configured\", 500);\n\t}\n\n\t// Resolve route metadata to decide auth before dispatch\n\tconst routeMeta = emdash.getPluginRouteMeta(pluginId, `/${path}`);\n\n\tif (!routeMeta) {\n\t\treturn apiError(\"NOT_FOUND\", \"Plugin route not found\", 404);\n\t}\n\n\t// Public routes skip auth, CSRF, and scope checks entirely\n\tif (!routeMeta.public) {\n\t\t// Private routes require authentication and permission checks\n\t\tconst permission = [\"GET\", \"HEAD\", \"OPTIONS\"].includes(method)\n\t\t\t? \"plugins:read\"\n\t\t\t: \"plugins:manage\";\n\t\tconst denied = requirePerm(user, permission);\n\t\tif (denied) return denied;\n\n\t\t// Token scope enforcement — plugin routes require \"admin\" scope.\n\t\t// Session auth is implicitly full-access (requireScope returns null).\n\t\tconst scopeError = requireScope(locals, \"admin\");\n\t\tif (scopeError) return scopeError;\n\n\t\t// CSRF protection for state-changing requests on private routes.\n\t\t// Plugin routes use soft auth in the middleware (user resolved but not required),\n\t\t// so the middleware's CSRF check doesn't run. We enforce it here for private routes.\n\t\t// Token-authed requests (which set tokenScopes) are exempt — tokens aren't\n\t\t// ambient credentials like cookies.\n\t\tif (\n\t\t\t![\"GET\", \"HEAD\", \"OPTIONS\"].includes(method) &&\n\t\t\t!locals.tokenScopes &&\n\t\t\trequest.headers.get(\"X-EmDash-Request\") !== \"1\"\n\t\t) {\n\t\t\treturn apiError(\"CSRF_REJECTED\", \"Missing required header\", 403);\n\t\t}\n\t}\n\n\tconst result = await emdash.handlePluginApiRoute(pluginId, method, `/${path}`, request);\n\n\tif (!result.success) {\n\t\tconst code = result.error?.code ?? \"PLUGIN_ERROR\";\n\t\t// Pass through messages from known plugin errors (PluginRouteError),\n\t\t// but mask internal errors (unhandled exceptions) to avoid leaking\n\t\t// database errors, file paths, etc. from sandboxed plugins.\n\t\tconst message =\n\t\t\tcode === \"INTERNAL_ERROR\"\n\t\t\t\t? \"Plugin route error\"\n\t\t\t\t: (result.error?.message ?? \"Plugin route error\");\n\t\t// PluginRouteError status is returned at the top level of the result\n\t\tconst status = (result as { status?: number }).status ?? (code === \"NOT_FOUND\" ? 404 : 400);\n\t\treturn apiError(code, message, status);\n\t}\n\n\treturn apiSuccess(result.data);\n};\n\n// Export handlers for all HTTP methods\nexport const GET = handleRequest;\nexport const POST = handleRequest;\nexport const PUT = handleRequest;\nexport const PATCH = handleRequest;\nexport const DELETE = handleRequest;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiBA,SAAgB,aAAa,QAAoC,OAAgC;AAEhG,KAAI,CAAC,OAAO,YAAa,QAAO;AAEhC,KAAI,SAAS,OAAO,aAAa,MAAM,CAAE,QAAO;AAEhD,QAAO,IAAI,SACV,KAAK,UAAU,EACd,OAAO;EACN,MAAM;EACN,SAAS,+BAA+B;EACxC,EACD,CAAC,EACF;EAAE,QAAQ;EAAK,SAAS,EAAE,gBAAgB,oBAAoB;EAAE,CAChE;;;;;ACdF,MAAa,YAAY;;;;AAKzB,MAAM,gBAA0B,OAAO,EAAE,QAAQ,SAAS,aAAa;CACtE,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,WAAW,OAAO;CACxB,MAAM,OAAO,OAAO,QAAQ;CAC5B,MAAM,SAAS,QAAQ,OAAO,aAAa;AAE3C,KAAI,CAAC,QAAQ,qBACZ,QAAO,SAAS,kBAAkB,yBAAyB,IAAI;CAIhE,MAAM,YAAY,OAAO,mBAAmB,UAAU,IAAI,OAAO;AAEjE,KAAI,CAAC,UACJ,QAAO,SAAS,aAAa,0BAA0B,IAAI;AAI5D,KAAI,CAAC,UAAU,QAAQ;EAKtB,MAAM,SAAS,YAAY,MAHR;GAAC;GAAO;GAAQ;GAAU,CAAC,SAAS,OAAO,GAC3D,iBACA,iBACyC;AAC5C,MAAI,OAAQ,QAAO;EAInB,MAAM,aAAa,aAAa,QAAQ,QAAQ;AAChD,MAAI,WAAY,QAAO;AAOvB,MACC,CAAC;GAAC;GAAO;GAAQ;GAAU,CAAC,SAAS,OAAO,IAC5C,CAAC,OAAO,eACR,QAAQ,QAAQ,IAAI,mBAAmB,KAAK,IAE5C,QAAO,SAAS,iBAAiB,2BAA2B,IAAI;;CAIlE,MAAM,SAAS,MAAM,OAAO,qBAAqB,UAAU,QAAQ,IAAI,QAAQ,QAAQ;AAEvF,KAAI,CAAC,OAAO,SAAS;EACpB,MAAM,OAAO,OAAO,OAAO,QAAQ;AAUnC,SAAO,SAAS,MALf,SAAS,mBACN,uBACC,OAAO,OAAO,WAAW,sBAEd,OAA+B,WAAW,SAAS,cAAc,MAAM,KACjD;;AAGvC,QAAO,WAAW,OAAO,KAAK;;AAI/B,MAAa,MAAM;AACnB,MAAa,OAAO;AACpB,MAAa,MAAM;AACnB,MAAa,QAAQ;AACrB,MAAa,SAAS"}
1
+ {"version":3,"file":"_...path_.mjs","names":[],"sources":["../../../../../../src/auth/scopes.ts","../../../../../../src/astro/routes/api/plugins/[pluginId]/[...path].ts"],"sourcesContent":["/**\n * Scope enforcement for API token authentication.\n *\n * Routes call `requireScope(locals, \"content:write\")` alongside role checks.\n * Session-authenticated requests have no scope restrictions (implicit full access).\n * Token-authenticated requests must have the required scope (or \"admin\").\n */\n\nimport { hasScope } from \"./api-tokens.js\";\n\n/**\n * Check if the request has a required scope.\n * Returns a 403 Response if the scope is missing, or null if OK.\n *\n * For session-authenticated users (no tokenScopes), always returns null\n * since session auth has implicit full scope.\n */\nexport function requireScope(locals: { tokenScopes?: string[] }, scope: string): Response | null {\n\t// Session auth = no scope restrictions\n\tif (!locals.tokenScopes) return null;\n\n\tif (hasScope(locals.tokenScopes, scope)) return null;\n\n\treturn new Response(\n\t\tJSON.stringify({\n\t\t\terror: {\n\t\t\t\tcode: \"INSUFFICIENT_SCOPE\",\n\t\t\t\tmessage: `Token lacks required scope: ${scope}`,\n\t\t\t},\n\t\t}),\n\t\t{ status: 403, headers: { \"Content-Type\": \"application/json\" } },\n\t);\n}\n","/**\n * Plugin API routes - dynamic handler for plugin-defined endpoints\n *\n * Routes are mounted at /_emdash/api/plugins/{pluginId}/*\n * Plugins register routes like \"POST /do-something\" which becomes\n * POST /_emdash/api/plugins/{pluginId}/do-something\n *\n * Routes marked as `public: true` skip authentication and CSRF checks.\n * Private routes (the default) require authentication and appropriate permissions.\n */\n\nimport type { APIRoute } from \"astro\";\n\nimport { requirePerm } from \"#api/authorize.js\";\nimport { apiError, apiSuccess } from \"#api/error.js\";\nimport { requireScope } from \"#auth/scopes.js\";\n\nexport const prerender = false;\n\n/**\n * Handle all methods by matching against plugin-defined routes\n */\nconst handleRequest: APIRoute = async ({ params, request, locals }) => {\n\tconst { emdash, user } = locals;\n\tconst pluginId = params.pluginId!;\n\tconst path = params.path || \"\";\n\tconst method = request.method.toUpperCase();\n\n\tif (!emdash?.handlePluginApiRoute) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash not configured\", 500);\n\t}\n\n\t// Resolve route metadata to decide auth before dispatch\n\tconst routeMeta = emdash.getPluginRouteMeta(pluginId, `/${path}`);\n\n\tif (!routeMeta) {\n\t\treturn apiError(\"NOT_FOUND\", \"Plugin route not found\", 404);\n\t}\n\n\t// Public routes skip auth, CSRF, and scope checks entirely\n\tif (!routeMeta.public) {\n\t\t// Plugin routes are dispatched by name only — the HTTP method never\n\t\t// selects a different handler, so a route reached via GET or HEAD runs\n\t\t// exactly the same code (and side effects) as one reached via POST.\n\t\t// Method-based tiering is therefore unsafe: gating GET/HEAD/OPTIONS on\n\t\t// `plugins:read` with no CSRF let an editor (or a cross-origin page,\n\t\t// since HEAD is CORS-safe) invoke a mutating admin route by choosing the\n\t\t// method (#1853). Astro also dispatches HEAD to the GET export, so no\n\t\t// explicit HEAD handler is needed to reach a \"GET\" route. Gate every\n\t\t// private invocation on `plugins:manage` + CSRF regardless of method.\n\t\tconst denied = requirePerm(user, \"plugins:manage\");\n\t\tif (denied) return denied;\n\n\t\t// Token scope enforcement — plugin routes require \"admin\" scope.\n\t\t// Session auth is implicitly full-access (requireScope returns null).\n\t\tconst scopeError = requireScope(locals, \"admin\");\n\t\tif (scopeError) return scopeError;\n\n\t\t// CSRF protection on private routes. Plugin routes use soft auth in the\n\t\t// middleware (user resolved but not required), so the middleware's CSRF\n\t\t// check doesn't run enforce it here. Applied to every method because\n\t\t// any method can trigger a state change (see above). Token-authed\n\t\t// requests (which set tokenScopes) are exempt — tokens aren't ambient\n\t\t// credentials like cookies.\n\t\tif (!locals.tokenScopes && request.headers.get(\"X-EmDash-Request\") !== \"1\") {\n\t\t\treturn apiError(\"CSRF_REJECTED\", \"Missing required header\", 403);\n\t\t}\n\t}\n\n\tconst result = await emdash.handlePluginApiRoute(pluginId, method, `/${path}`, request);\n\n\tif (!result.success) {\n\t\tconst code = result.error?.code ?? \"PLUGIN_ERROR\";\n\t\t// Pass through messages from known plugin errors (PluginRouteError),\n\t\t// but mask internal errors (unhandled exceptions) to avoid leaking\n\t\t// database errors, file paths, etc. from sandboxed plugins.\n\t\tconst message =\n\t\t\tcode === \"INTERNAL_ERROR\"\n\t\t\t\t? \"Plugin route error\"\n\t\t\t\t: (result.error?.message ?? \"Plugin route error\");\n\t\t// PluginRouteError status is returned at the top level of the result\n\t\tconst status = (result as { status?: number }).status ?? (code === \"NOT_FOUND\" ? 404 : 400);\n\t\treturn apiError(code, message, status);\n\t}\n\n\treturn apiSuccess(result.data);\n};\n\n// Export handlers for all HTTP methods\nexport const GET = handleRequest;\nexport const POST = handleRequest;\nexport const PUT = handleRequest;\nexport const PATCH = handleRequest;\nexport const DELETE = handleRequest;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiBA,SAAgB,aAAa,QAAoC,OAAgC;AAEhG,KAAI,CAAC,OAAO,YAAa,QAAO;AAEhC,KAAI,SAAS,OAAO,aAAa,MAAM,CAAE,QAAO;AAEhD,QAAO,IAAI,SACV,KAAK,UAAU,EACd,OAAO;EACN,MAAM;EACN,SAAS,+BAA+B;EACxC,EACD,CAAC,EACF;EAAE,QAAQ;EAAK,SAAS,EAAE,gBAAgB,oBAAoB;EAAE,CAChE;;;;;ACdF,MAAa,YAAY;;;;AAKzB,MAAM,gBAA0B,OAAO,EAAE,QAAQ,SAAS,aAAa;CACtE,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,WAAW,OAAO;CACxB,MAAM,OAAO,OAAO,QAAQ;CAC5B,MAAM,SAAS,QAAQ,OAAO,aAAa;AAE3C,KAAI,CAAC,QAAQ,qBACZ,QAAO,SAAS,kBAAkB,yBAAyB,IAAI;CAIhE,MAAM,YAAY,OAAO,mBAAmB,UAAU,IAAI,OAAO;AAEjE,KAAI,CAAC,UACJ,QAAO,SAAS,aAAa,0BAA0B,IAAI;AAI5D,KAAI,CAAC,UAAU,QAAQ;EAUtB,MAAM,SAAS,YAAY,MAAM,iBAAiB;AAClD,MAAI,OAAQ,QAAO;EAInB,MAAM,aAAa,aAAa,QAAQ,QAAQ;AAChD,MAAI,WAAY,QAAO;AAQvB,MAAI,CAAC,OAAO,eAAe,QAAQ,QAAQ,IAAI,mBAAmB,KAAK,IACtE,QAAO,SAAS,iBAAiB,2BAA2B,IAAI;;CAIlE,MAAM,SAAS,MAAM,OAAO,qBAAqB,UAAU,QAAQ,IAAI,QAAQ,QAAQ;AAEvF,KAAI,CAAC,OAAO,SAAS;EACpB,MAAM,OAAO,OAAO,OAAO,QAAQ;AAUnC,SAAO,SAAS,MALf,SAAS,mBACN,uBACC,OAAO,OAAO,WAAW,sBAEd,OAA+B,WAAW,SAAS,cAAc,MAAM,KACjD;;AAGvC,QAAO,WAAW,OAAO,KAAK;;AAI/B,MAAa,MAAM;AACnB,MAAa,OAAO;AACpB,MAAa,MAAM;AACnB,MAAa,QAAQ;AACrB,MAAa,SAAS"}
@@ -16,21 +16,21 @@ import "../../../../../../../byline-registry-BOjqDOim.mjs";
16
16
  import "../../../../../../../field-defs-cache-WUI88LX5.mjs";
17
17
  import "../../../../../../../byline-Bm8ZgUP9.mjs";
18
18
  import "../../../../../../../seo-DXu2UQnC.mjs";
19
- import { F as handleSchemaFieldUpdate, M as handleSchemaFieldGet, j as handleSchemaFieldDelete } from "../../../../../../../api-BFURZn1i.mjs";
19
+ import { F as handleSchemaFieldUpdate, M as handleSchemaFieldGet, j as handleSchemaFieldDelete } from "../../../../../../../api-DxFSorgk.mjs";
20
20
  import "../../../../../../../dashboard-EvEKF5en.mjs";
21
- import "../../../../../../../content-refresh-CA4uKwzH.mjs";
21
+ import "../../../../../../../content-refresh-Br4gMzh8.mjs";
22
22
  import "../../../../../../../fts-manager-BbFaF_V8.mjs";
23
- import "../../../../../../../registry-B65mUtPa.mjs";
23
+ import "../../../../../../../registry-B57vp_X9.mjs";
24
24
  import "../../../../../../../loader-CB6YHeul.mjs";
25
- import "../../../../../../../schema-Blhoxp3P.mjs";
25
+ import "../../../../../../../schema-CX9cfNkZ.mjs";
26
26
  import "../../../../../../../zod-generator-CacrR-i8.mjs";
27
27
  import "../../../../../../../seo-89-53DDs.mjs";
28
28
  import "../../../../../../../sections-CpF5SaGr.mjs";
29
29
  import "../../../../../../../settings-zhmdKyJQ.mjs";
30
30
  import "../../../../../../../settings-rZyHEcNT.mjs";
31
31
  import "../../../../../../../resolve-DR3wqMTy.mjs";
32
- import "../../../../../../../taxonomies-Cnb4F-Pb.mjs";
33
- import "../../../../../../../taxonomies-BGBd16Eu.mjs";
32
+ import "../../../../../../../taxonomies-kH9ABDUF.mjs";
33
+ import "../../../../../../../taxonomies-Bs13SN-F.mjs";
34
34
  import "../../../../../../../manifest-schema-BHlgZM1W.mjs";
35
35
  import "../../../../../../../types-DROWRxYV.mjs";
36
36
  import "../../../../../../../ssrf-1g7usGBg.mjs";
@@ -16,21 +16,21 @@ import "../../../../../../../byline-registry-BOjqDOim.mjs";
16
16
  import "../../../../../../../field-defs-cache-WUI88LX5.mjs";
17
17
  import "../../../../../../../byline-Bm8ZgUP9.mjs";
18
18
  import "../../../../../../../seo-DXu2UQnC.mjs";
19
- import { A as handleSchemaFieldCreate, N as handleSchemaFieldList } from "../../../../../../../api-BFURZn1i.mjs";
19
+ import { A as handleSchemaFieldCreate, N as handleSchemaFieldList } from "../../../../../../../api-DxFSorgk.mjs";
20
20
  import "../../../../../../../dashboard-EvEKF5en.mjs";
21
- import "../../../../../../../content-refresh-CA4uKwzH.mjs";
21
+ import "../../../../../../../content-refresh-Br4gMzh8.mjs";
22
22
  import "../../../../../../../fts-manager-BbFaF_V8.mjs";
23
- import "../../../../../../../registry-B65mUtPa.mjs";
23
+ import "../../../../../../../registry-B57vp_X9.mjs";
24
24
  import "../../../../../../../loader-CB6YHeul.mjs";
25
- import "../../../../../../../schema-Blhoxp3P.mjs";
25
+ import "../../../../../../../schema-CX9cfNkZ.mjs";
26
26
  import "../../../../../../../zod-generator-CacrR-i8.mjs";
27
27
  import "../../../../../../../seo-89-53DDs.mjs";
28
28
  import "../../../../../../../sections-CpF5SaGr.mjs";
29
29
  import "../../../../../../../settings-zhmdKyJQ.mjs";
30
30
  import "../../../../../../../settings-rZyHEcNT.mjs";
31
31
  import "../../../../../../../resolve-DR3wqMTy.mjs";
32
- import "../../../../../../../taxonomies-Cnb4F-Pb.mjs";
33
- import "../../../../../../../taxonomies-BGBd16Eu.mjs";
32
+ import "../../../../../../../taxonomies-kH9ABDUF.mjs";
33
+ import "../../../../../../../taxonomies-Bs13SN-F.mjs";
34
34
  import "../../../../../../../manifest-schema-BHlgZM1W.mjs";
35
35
  import "../../../../../../../types-DROWRxYV.mjs";
36
36
  import "../../../../../../../ssrf-1g7usGBg.mjs";
@@ -16,21 +16,21 @@ import "../../../../../../../byline-registry-BOjqDOim.mjs";
16
16
  import "../../../../../../../field-defs-cache-WUI88LX5.mjs";
17
17
  import "../../../../../../../byline-Bm8ZgUP9.mjs";
18
18
  import "../../../../../../../seo-DXu2UQnC.mjs";
19
- import { P as handleSchemaFieldReorder } from "../../../../../../../api-BFURZn1i.mjs";
19
+ import { P as handleSchemaFieldReorder } from "../../../../../../../api-DxFSorgk.mjs";
20
20
  import "../../../../../../../dashboard-EvEKF5en.mjs";
21
- import "../../../../../../../content-refresh-CA4uKwzH.mjs";
21
+ import "../../../../../../../content-refresh-Br4gMzh8.mjs";
22
22
  import "../../../../../../../fts-manager-BbFaF_V8.mjs";
23
- import "../../../../../../../registry-B65mUtPa.mjs";
23
+ import "../../../../../../../registry-B57vp_X9.mjs";
24
24
  import "../../../../../../../loader-CB6YHeul.mjs";
25
- import "../../../../../../../schema-Blhoxp3P.mjs";
25
+ import "../../../../../../../schema-CX9cfNkZ.mjs";
26
26
  import "../../../../../../../zod-generator-CacrR-i8.mjs";
27
27
  import "../../../../../../../seo-89-53DDs.mjs";
28
28
  import "../../../../../../../sections-CpF5SaGr.mjs";
29
29
  import "../../../../../../../settings-zhmdKyJQ.mjs";
30
30
  import "../../../../../../../settings-rZyHEcNT.mjs";
31
31
  import "../../../../../../../resolve-DR3wqMTy.mjs";
32
- import "../../../../../../../taxonomies-Cnb4F-Pb.mjs";
33
- import "../../../../../../../taxonomies-BGBd16Eu.mjs";
32
+ import "../../../../../../../taxonomies-kH9ABDUF.mjs";
33
+ import "../../../../../../../taxonomies-Bs13SN-F.mjs";
34
34
  import "../../../../../../../manifest-schema-BHlgZM1W.mjs";
35
35
  import "../../../../../../../types-DROWRxYV.mjs";
36
36
  import "../../../../../../../ssrf-1g7usGBg.mjs";
@@ -16,21 +16,21 @@ import "../../../../../../byline-registry-BOjqDOim.mjs";
16
16
  import "../../../../../../field-defs-cache-WUI88LX5.mjs";
17
17
  import "../../../../../../byline-Bm8ZgUP9.mjs";
18
18
  import "../../../../../../seo-DXu2UQnC.mjs";
19
- import { D as handleSchemaCollectionGet, E as handleSchemaCollectionDelete, k as handleSchemaCollectionUpdate } from "../../../../../../api-BFURZn1i.mjs";
19
+ import { D as handleSchemaCollectionGet, E as handleSchemaCollectionDelete, k as handleSchemaCollectionUpdate } from "../../../../../../api-DxFSorgk.mjs";
20
20
  import "../../../../../../dashboard-EvEKF5en.mjs";
21
- import "../../../../../../content-refresh-CA4uKwzH.mjs";
21
+ import "../../../../../../content-refresh-Br4gMzh8.mjs";
22
22
  import "../../../../../../fts-manager-BbFaF_V8.mjs";
23
- import "../../../../../../registry-B65mUtPa.mjs";
23
+ import "../../../../../../registry-B57vp_X9.mjs";
24
24
  import "../../../../../../loader-CB6YHeul.mjs";
25
- import "../../../../../../schema-Blhoxp3P.mjs";
25
+ import "../../../../../../schema-CX9cfNkZ.mjs";
26
26
  import "../../../../../../zod-generator-CacrR-i8.mjs";
27
27
  import "../../../../../../seo-89-53DDs.mjs";
28
28
  import "../../../../../../sections-CpF5SaGr.mjs";
29
29
  import "../../../../../../settings-zhmdKyJQ.mjs";
30
30
  import "../../../../../../settings-rZyHEcNT.mjs";
31
31
  import "../../../../../../resolve-DR3wqMTy.mjs";
32
- import "../../../../../../taxonomies-Cnb4F-Pb.mjs";
33
- import "../../../../../../taxonomies-BGBd16Eu.mjs";
32
+ import "../../../../../../taxonomies-kH9ABDUF.mjs";
33
+ import "../../../../../../taxonomies-Bs13SN-F.mjs";
34
34
  import "../../../../../../manifest-schema-BHlgZM1W.mjs";
35
35
  import "../../../../../../types-DROWRxYV.mjs";
36
36
  import "../../../../../../ssrf-1g7usGBg.mjs";
@@ -16,21 +16,21 @@ import "../../../../../byline-registry-BOjqDOim.mjs";
16
16
  import "../../../../../field-defs-cache-WUI88LX5.mjs";
17
17
  import "../../../../../byline-Bm8ZgUP9.mjs";
18
18
  import "../../../../../seo-DXu2UQnC.mjs";
19
- import { O as handleSchemaCollectionList, T as handleSchemaCollectionCreate } from "../../../../../api-BFURZn1i.mjs";
19
+ import { O as handleSchemaCollectionList, T as handleSchemaCollectionCreate } from "../../../../../api-DxFSorgk.mjs";
20
20
  import "../../../../../dashboard-EvEKF5en.mjs";
21
- import "../../../../../content-refresh-CA4uKwzH.mjs";
21
+ import "../../../../../content-refresh-Br4gMzh8.mjs";
22
22
  import "../../../../../fts-manager-BbFaF_V8.mjs";
23
- import "../../../../../registry-B65mUtPa.mjs";
23
+ import "../../../../../registry-B57vp_X9.mjs";
24
24
  import "../../../../../loader-CB6YHeul.mjs";
25
- import "../../../../../schema-Blhoxp3P.mjs";
25
+ import "../../../../../schema-CX9cfNkZ.mjs";
26
26
  import "../../../../../zod-generator-CacrR-i8.mjs";
27
27
  import "../../../../../seo-89-53DDs.mjs";
28
28
  import "../../../../../sections-CpF5SaGr.mjs";
29
29
  import "../../../../../settings-zhmdKyJQ.mjs";
30
30
  import "../../../../../settings-rZyHEcNT.mjs";
31
31
  import "../../../../../resolve-DR3wqMTy.mjs";
32
- import "../../../../../taxonomies-Cnb4F-Pb.mjs";
33
- import "../../../../../taxonomies-BGBd16Eu.mjs";
32
+ import "../../../../../taxonomies-kH9ABDUF.mjs";
33
+ import "../../../../../taxonomies-Bs13SN-F.mjs";
34
34
  import "../../../../../manifest-schema-BHlgZM1W.mjs";
35
35
  import "../../../../../types-DROWRxYV.mjs";
36
36
  import "../../../../../ssrf-1g7usGBg.mjs";
@@ -1,9 +1,9 @@
1
1
  import "../../../../dialect-helpers-DRI5pyY3.mjs";
2
2
  import "../../../../base64-CmWvODNW.mjs";
3
3
  import "../../../../types-CuW0zWDA.mjs";
4
- import "../../../../content-refresh-CA4uKwzH.mjs";
4
+ import "../../../../content-refresh-Br4gMzh8.mjs";
5
5
  import "../../../../fts-manager-BbFaF_V8.mjs";
6
- import { n as SchemaRegistry$1 } from "../../../../registry-B65mUtPa.mjs";
6
+ import { n as SchemaRegistry$1 } from "../../../../registry-B57vp_X9.mjs";
7
7
  import { r as uniqueInterfaceNames, t as generateTypeScript } from "../../../../zod-generator-CacrR-i8.mjs";
8
8
  import { i as requireDb, n as apiSuccess, r as handleError } from "../../../../error-CkAseSqZ.mjs";
9
9
  import { n as requirePerm } from "../../../../authorize-Dz88F_Fw.mjs";
@@ -16,21 +16,21 @@ import "../../../../../byline-registry-BOjqDOim.mjs";
16
16
  import "../../../../../field-defs-cache-WUI88LX5.mjs";
17
17
  import "../../../../../byline-Bm8ZgUP9.mjs";
18
18
  import "../../../../../seo-DXu2UQnC.mjs";
19
- import { w as handleOrphanedTableRegister } from "../../../../../api-BFURZn1i.mjs";
19
+ import { w as handleOrphanedTableRegister } from "../../../../../api-DxFSorgk.mjs";
20
20
  import "../../../../../dashboard-EvEKF5en.mjs";
21
- import "../../../../../content-refresh-CA4uKwzH.mjs";
21
+ import "../../../../../content-refresh-Br4gMzh8.mjs";
22
22
  import "../../../../../fts-manager-BbFaF_V8.mjs";
23
- import "../../../../../registry-B65mUtPa.mjs";
23
+ import "../../../../../registry-B57vp_X9.mjs";
24
24
  import "../../../../../loader-CB6YHeul.mjs";
25
- import "../../../../../schema-Blhoxp3P.mjs";
25
+ import "../../../../../schema-CX9cfNkZ.mjs";
26
26
  import "../../../../../zod-generator-CacrR-i8.mjs";
27
27
  import "../../../../../seo-89-53DDs.mjs";
28
28
  import "../../../../../sections-CpF5SaGr.mjs";
29
29
  import "../../../../../settings-zhmdKyJQ.mjs";
30
30
  import "../../../../../settings-rZyHEcNT.mjs";
31
31
  import "../../../../../resolve-DR3wqMTy.mjs";
32
- import "../../../../../taxonomies-Cnb4F-Pb.mjs";
33
- import "../../../../../taxonomies-BGBd16Eu.mjs";
32
+ import "../../../../../taxonomies-kH9ABDUF.mjs";
33
+ import "../../../../../taxonomies-Bs13SN-F.mjs";
34
34
  import "../../../../../manifest-schema-BHlgZM1W.mjs";
35
35
  import "../../../../../types-DROWRxYV.mjs";
36
36
  import "../../../../../ssrf-1g7usGBg.mjs";
@@ -16,21 +16,21 @@ import "../../../../../byline-registry-BOjqDOim.mjs";
16
16
  import "../../../../../field-defs-cache-WUI88LX5.mjs";
17
17
  import "../../../../../byline-Bm8ZgUP9.mjs";
18
18
  import "../../../../../seo-DXu2UQnC.mjs";
19
- import { C as handleOrphanedTableList } from "../../../../../api-BFURZn1i.mjs";
19
+ import { C as handleOrphanedTableList } from "../../../../../api-DxFSorgk.mjs";
20
20
  import "../../../../../dashboard-EvEKF5en.mjs";
21
- import "../../../../../content-refresh-CA4uKwzH.mjs";
21
+ import "../../../../../content-refresh-Br4gMzh8.mjs";
22
22
  import "../../../../../fts-manager-BbFaF_V8.mjs";
23
- import "../../../../../registry-B65mUtPa.mjs";
23
+ import "../../../../../registry-B57vp_X9.mjs";
24
24
  import "../../../../../loader-CB6YHeul.mjs";
25
- import "../../../../../schema-Blhoxp3P.mjs";
25
+ import "../../../../../schema-CX9cfNkZ.mjs";
26
26
  import "../../../../../zod-generator-CacrR-i8.mjs";
27
27
  import "../../../../../seo-89-53DDs.mjs";
28
28
  import "../../../../../sections-CpF5SaGr.mjs";
29
29
  import "../../../../../settings-zhmdKyJQ.mjs";
30
30
  import "../../../../../settings-rZyHEcNT.mjs";
31
31
  import "../../../../../resolve-DR3wqMTy.mjs";
32
- import "../../../../../taxonomies-Cnb4F-Pb.mjs";
33
- import "../../../../../taxonomies-BGBd16Eu.mjs";
32
+ import "../../../../../taxonomies-kH9ABDUF.mjs";
33
+ import "../../../../../taxonomies-Bs13SN-F.mjs";
34
34
  import "../../../../../manifest-schema-BHlgZM1W.mjs";
35
35
  import "../../../../../types-DROWRxYV.mjs";
36
36
  import "../../../../../ssrf-1g7usGBg.mjs";
@@ -13,16 +13,16 @@ import "../../../../request-cache-KCNHp_RJ.mjs";
13
13
  import "../../../../byline-registry-BOjqDOim.mjs";
14
14
  import "../../../../field-defs-cache-WUI88LX5.mjs";
15
15
  import "../../../../byline-Bm8ZgUP9.mjs";
16
- import "../../../../content-refresh-CA4uKwzH.mjs";
16
+ import "../../../../content-refresh-Br4gMzh8.mjs";
17
17
  import "../../../../fts-manager-BbFaF_V8.mjs";
18
- import "../../../../registry-B65mUtPa.mjs";
18
+ import "../../../../registry-B57vp_X9.mjs";
19
19
  import "../../../../loader-CB6YHeul.mjs";
20
20
  import "../../../../settings-zhmdKyJQ.mjs";
21
21
  import "../../../../ssrf-1g7usGBg.mjs";
22
22
  import { n as apiSuccess, r as handleError, t as apiError } from "../../../../error-CkAseSqZ.mjs";
23
23
  import "../../../../ssrf-CmuGgCq3.mjs";
24
24
  import { t as validateSeed } from "../../../../validate-CWSnKVIJ.mjs";
25
- import { t as applySeed } from "../../../../apply-Bu-8nYHL.mjs";
25
+ import { t as applySeed } from "../../../../apply-CDJqIjPU.mjs";
26
26
  import { t as loadSeed } from "../../../../load-Djn3HWQS.mjs";
27
27
  import { n as getPublicOrigin } from "../../../../public-url-Danv47cS.mjs";
28
28
  import "../../../../api-tokens-DsvvCtdh.mjs";
@@ -13,9 +13,9 @@ import "../../../../request-cache-KCNHp_RJ.mjs";
13
13
  import "../../../../byline-registry-BOjqDOim.mjs";
14
14
  import "../../../../field-defs-cache-WUI88LX5.mjs";
15
15
  import "../../../../byline-Bm8ZgUP9.mjs";
16
- import "../../../../content-refresh-CA4uKwzH.mjs";
16
+ import "../../../../content-refresh-Br4gMzh8.mjs";
17
17
  import "../../../../fts-manager-BbFaF_V8.mjs";
18
- import "../../../../registry-B65mUtPa.mjs";
18
+ import "../../../../registry-B57vp_X9.mjs";
19
19
  import "../../../../loader-CB6YHeul.mjs";
20
20
  import "../../../../settings-zhmdKyJQ.mjs";
21
21
  import "../../../../ssrf-1g7usGBg.mjs";
@@ -27,7 +27,7 @@ import "../../../../status-CqJQX1QN.mjs";
27
27
  import "../../../../api/schemas/index.mjs";
28
28
  import "../../../../ssrf-CmuGgCq3.mjs";
29
29
  import { t as validateSeed } from "../../../../validate-CWSnKVIJ.mjs";
30
- import { t as applySeed } from "../../../../apply-Bu-8nYHL.mjs";
30
+ import { t as applySeed } from "../../../../apply-CDJqIjPU.mjs";
31
31
  import { t as loadSeed } from "../../../../load-Djn3HWQS.mjs";
32
32
  import { n as getPublicOrigin } from "../../../../public-url-Danv47cS.mjs";
33
33
  import { t as getAuthMode } from "../../../../mode-BM9QgEmt.mjs";
@@ -7,8 +7,8 @@ import "../../../../../../../taxonomy-BxGxZZdu.mjs";
7
7
  import "../../../../../../../request-cache-KCNHp_RJ.mjs";
8
8
  import "../../../../../../../loader-CB6YHeul.mjs";
9
9
  import "../../../../../../../resolve-DR3wqMTy.mjs";
10
- import "../../../../../../../taxonomies-Cnb4F-Pb.mjs";
11
- import { a as handleTermGet, r as handleTermCreate, s as handleTermTranslations } from "../../../../../../../taxonomies-BGBd16Eu.mjs";
10
+ import "../../../../../../../taxonomies-kH9ABDUF.mjs";
11
+ import { a as handleTermGet, r as handleTermCreate, s as handleTermTranslations } from "../../../../../../../taxonomies-Bs13SN-F.mjs";
12
12
  import { a as unwrapResult, i as requireDb, r as handleError, t as apiError } from "../../../../../../../error-CkAseSqZ.mjs";
13
13
  import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../../../../parse-GmjecGct.mjs";
14
14
  import { Fn as localeFilterQuery } from "../../../../../../../redirects-DXEXBAII.mjs";
@@ -7,8 +7,8 @@ import "../../../../../../taxonomy-BxGxZZdu.mjs";
7
7
  import "../../../../../../request-cache-KCNHp_RJ.mjs";
8
8
  import "../../../../../../loader-CB6YHeul.mjs";
9
9
  import "../../../../../../resolve-DR3wqMTy.mjs";
10
- import "../../../../../../taxonomies-Cnb4F-Pb.mjs";
11
- import { a as handleTermGet, c as handleTermUpdate, i as handleTermDelete } from "../../../../../../taxonomies-BGBd16Eu.mjs";
10
+ import "../../../../../../taxonomies-kH9ABDUF.mjs";
11
+ import { a as handleTermGet, c as handleTermUpdate, i as handleTermDelete } from "../../../../../../taxonomies-Bs13SN-F.mjs";
12
12
  import { a as unwrapResult, i as requireDb, r as handleError, t as apiError } from "../../../../../../error-CkAseSqZ.mjs";
13
13
  import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../../../parse-GmjecGct.mjs";
14
14
  import { Fn as localeFilterQuery, Q as updateTermBody } from "../../../../../../redirects-DXEXBAII.mjs";
@@ -7,8 +7,8 @@ import "../../../../../../taxonomy-BxGxZZdu.mjs";
7
7
  import "../../../../../../request-cache-KCNHp_RJ.mjs";
8
8
  import "../../../../../../loader-CB6YHeul.mjs";
9
9
  import "../../../../../../resolve-DR3wqMTy.mjs";
10
- import "../../../../../../taxonomies-Cnb4F-Pb.mjs";
11
- import { o as handleTermList, r as handleTermCreate } from "../../../../../../taxonomies-BGBd16Eu.mjs";
10
+ import "../../../../../../taxonomies-kH9ABDUF.mjs";
11
+ import { o as handleTermList, r as handleTermCreate } from "../../../../../../taxonomies-Bs13SN-F.mjs";
12
12
  import { a as unwrapResult, i as requireDb, r as handleError, t as apiError } from "../../../../../../error-CkAseSqZ.mjs";
13
13
  import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../../../parse-GmjecGct.mjs";
14
14
  import { Fn as localeFilterQuery, H as createTermBody } from "../../../../../../redirects-DXEXBAII.mjs";
@@ -7,8 +7,8 @@ import "../../../../taxonomy-BxGxZZdu.mjs";
7
7
  import "../../../../request-cache-KCNHp_RJ.mjs";
8
8
  import "../../../../loader-CB6YHeul.mjs";
9
9
  import "../../../../resolve-DR3wqMTy.mjs";
10
- import "../../../../taxonomies-Cnb4F-Pb.mjs";
11
- import { n as handleTaxonomyList, t as handleTaxonomyCreate } from "../../../../taxonomies-BGBd16Eu.mjs";
10
+ import "../../../../taxonomies-kH9ABDUF.mjs";
11
+ import { n as handleTaxonomyList, t as handleTaxonomyCreate } from "../../../../taxonomies-Bs13SN-F.mjs";
12
12
  import { a as unwrapResult, i as requireDb, r as handleError } from "../../../../error-CkAseSqZ.mjs";
13
13
  import { i as parseQuery, n as parseBody, t as isParseError } from "../../../../parse-GmjecGct.mjs";
14
14
  import { Fn as localeFilterQuery, V as createTaxonomyDefBody } from "../../../../redirects-DXEXBAII.mjs";
@@ -42,7 +42,7 @@ const GET = async ({ locals }) => {
42
42
  const { emdash } = locals;
43
43
  if (!emdash?.db) return apiError("NOT_CONFIGURED", "EmDash not configured", 500);
44
44
  try {
45
- const { SchemaRegistry } = await import("../../../registry-B65mUtPa.mjs").then((n) => n.r);
45
+ const { SchemaRegistry } = await import("../../../registry-B57vp_X9.mjs").then((n) => n.r);
46
46
  const { types } = await generateTypes(new SchemaRegistry(emdash.db));
47
47
  return new Response(types, {
48
48
  status: 200,
@@ -66,7 +66,7 @@ const POST = async ({ locals }) => {
66
66
  const { emdash } = locals;
67
67
  if (!emdash?.db) return apiError("NOT_CONFIGURED", "EmDash not configured", 500);
68
68
  try {
69
- const { SchemaRegistry } = await import("../../../registry-B65mUtPa.mjs").then((n) => n.r);
69
+ const { SchemaRegistry } = await import("../../../registry-B57vp_X9.mjs").then((n) => n.r);
70
70
  return apiSuccess(await generateTypes(new SchemaRegistry(emdash.db)));
71
71
  } catch (error) {
72
72
  return handleError(error, "Typegen failed", "TYPEGEN_ERROR");
@@ -2,7 +2,7 @@ import { i as ContentItem } from "../types-BcLUUbbR.mjs";
2
2
  import { d as ContentListResponse, f as ContentResponse } from "../options-iMpRRxIe.mjs";
3
3
  import { t as Database } from "../types-_HFLRzTn.mjs";
4
4
  import { Lt as Element, Tt as ResolvedPlugin, et as PageFragmentContribution, rt as PageMetadataContribution, xt as PublicPageContext } from "../types-CGbYowGQ.mjs";
5
- import "../byline-fields-Cgrt9-aL.mjs";
5
+ import "../byline-fields-CHE8UStY.mjs";
6
6
  import { f as MediaProvider, p as MediaProviderCapabilities } from "../placeholder-BSKwzRe4.mjs";
7
7
  import { $n as HookPipeline, Jn as SandboxedPluginEntry, Qn as EmailPipeline, Sr as MediaResponse, fi as MediaItem, fr as EmDashConfig, sr as SandboxRunner, xr as MediaListResponse } from "../index-B9sIxwe4.mjs";
8
8
  import "../runner-DvFWoz8-.mjs";
@@ -1212,8 +1212,8 @@ declare const authMeActionBody: z.ZodObject<{
1212
1212
  * from `referenceCollection` + `referenceId` (a translation_group id).
1213
1213
  */
1214
1214
  declare const menuItemTypeEnum: z.ZodEnum<{
1215
- collection: "collection";
1216
1215
  custom: "custom";
1216
+ collection: "collection";
1217
1217
  page: "page";
1218
1218
  post: "post";
1219
1219
  taxonomy: "taxonomy";
@@ -1229,8 +1229,8 @@ declare const updateMenuBody: z.ZodObject<{
1229
1229
  }, z.core.$strict>;
1230
1230
  declare const createMenuItemBody: z.ZodObject<{
1231
1231
  type: z.ZodEnum<{
1232
- collection: "collection";
1233
1232
  custom: "custom";
1233
+ collection: "collection";
1234
1234
  page: "page";
1235
1235
  post: "post";
1236
1236
  taxonomy: "taxonomy";
@@ -2227,4 +2227,4 @@ declare const bylineFieldUsageResponseSchema: z.ZodObject<{
2227
2227
  }, z.core.$strip>;
2228
2228
  //#endregion
2229
2229
  export { wpRewriteUrlsBody as $, trashedContentItemSchema as $n, commentSchema as $t, reorderWidgetsBody as A, mediaProviderListQuery as An, menuSchema as At, userSchema as B, contentListQuery as Bn, magicLinkSendBody as Bt, notFoundSummarySchema as C, formatFileSize as Cn, termWithCountSchema as Ct, updateRedirectBody as D, mediaItemSchema as Dn, menuItemSchema as Dt, redirectsListQuery as E, mediaExistingResponseSchema as En, createMenuItemBody as Et, widgetSchema as F, contentAuthorSchema as Fn, updateMenuItemBody as Ft, setupAdminVerifyBody as G, contentScheduleBody as Gn, passkeyVerifyBody as Gt, usersListQuery as H, contentPreviewUrlBody as Hn, passkeyRegisterOptionsBody as Ht, allowedDomainCreateBody as I, contentAuthorsResponseSchema as In, authMeActionBody as It, importProbeBody as J, contentTermsBody as Jn, adminCommentListResponseSchema as Jt, setupAtprotoAdminBody as K, contentSeoInput as Kn, signupCompleteBody as Kt, allowedDomainUpdateBody as L, contentCompareResponseSchema as Ln, inviteCompleteBody as Lt, widgetAreaSchema as M, mediaUpdateBody as Mn, menuWithItemsSchema as Mt, widgetAreaWithWidgetsAndCountSchema as N, mediaUploadUrlBody as Nn, reorderMenuItemsBody as Nt, createWidgetAreaBody as O, mediaListQuery as On, menuItemTypeEnum as Ot, widgetAreaWithWidgetsSchema as P, mediaUploadUrlResponseSchema as Pn, updateMenuBody as Pt, wpPrepareBody as Q, contentUpdateBody as Qn, commentListQuery as Qt, userDetailSchema as R, contentCreateBody as Rn, inviteCreateBody as Rt, notFoundSummaryResponseSchema as S, DEFAULT_MAX_UPLOAD_SIZE as Sn, termTranslationsSchema as St, redirectSchema as T, mediaConfirmResponseSchema as Tn, createMenuBody as Tt, atprotoLoginBody as U, contentPublishBody as Un, passkeyRegisterVerifyBody as Ut, userUpdateBody as V, contentListResponseSchema as Vn, passkeyOptionsBody as Vt, setupAdminBody as W, contentResponseSchema as Wn, passkeyRenameBody as Wt, wpPluginAnalyzeBody as X, contentTranslationsResponseSchema as Xn, commentBulkResponseSchema as Xt, wpMediaImportBody as Y, contentTranslationSchema as Yn, commentBulkBody as Yt, wpPluginExecuteBody as Z, contentTrashQuery as Zn, commentCountsResponseSchema as Zt, notFoundEntrySchema as _, orphanedTableListResponseSchema as _n, taxonomyListResponseSchema as _t, bylineFieldUpdateBody as a, collectionGetQuery as an, deleteResponseSchema as ar, searchSuggestQuery as at, notFoundPruneBody as b, updateCollectionBody as bn, termResponseSchema as bt, bylineCreditSchema as c, collectionSchema as cn, localeFilterQuery as cr, createSectionBody as ct, bylineTranslationCreateBody as d, createFieldBody as dn, slugPattern as dr, sectionsListQuery as dt, commentStatusBody as en, trashedContentListResponseSchema as er, searchEnableBody as et, bylineTranslationsResponseSchema as f, fieldListResponseSchema as fn, successEnvelope as fr, updateSectionBody as ft, createRedirectBody as g, orphanRegisterBody as gn, taxonomyDefTranslationsSchema as gt, contentBylineInputSchema as h, fieldSchema as hn, taxonomyDefSchema as ht, bylineFieldReorderBody as i, publicCommentSchema as in, cursorPaginationQuery as ir, searchResultSchema as it, updateWidgetBody as j, mediaResponseSchema as jn, menuTranslationsSchema as jt, createWidgetBody as k, mediaListResponseSchema as kn, menuListItemSchema as kt, bylineListResponseSchema as l, collectionWithFieldsResponseSchema as ln, offsetPaginationQuery as lr, sectionListResponseSchema as lt, bylinesListQuery as m, fieldResponseSchema as mn, createTermBody as mt, bylineFieldDefinitionSchema as n, createReactionBody as nn, apiErrorSchema as nr, searchRebuildBody as nt, bylineFieldUsageResponseSchema as o, collectionListResponseSchema as on, httpUrl as or, settingsUpdateBody as ot, bylineUpdateBody as p, fieldReorderBody as pn, createTaxonomyDefBody as pt, setupBody as q, contentSeoSchema as qn, signupRequestBody as qt, bylineFieldListResponseSchema as r, publicCommentListResponseSchema as rn, countResponseSchema as rr, searchResponseSchema as rt, bylineCreateBody as s, collectionResponseSchema as sn, localeCode as sr, siteSettingsSchema as st, bylineFieldCreateBody as t, createCommentBody as tn, VALID_ROLE_LEVELS as tr, searchQuery as tt, bylineSummarySchema as u, createCollectionBody as un, roleLevel as ur, sectionSchema as ut, notFoundListQuery as v, orphanedTableSchema as vn, termGetResponseSchema as vt, redirectListResponseSchema as w, mediaConfirmBody as wn, updateTermBody as wt, notFoundSummaryQuery as x, updateFieldBody as xn, termSchema as xt, notFoundListResponseSchema as y, schemaExportQuery as yn, termListResponseSchema as yt, userListResponseSchema as z, contentItemSchema as zn, inviteRegisterOptionsBody as zt };
2230
- //# sourceMappingURL=byline-fields-Cgrt9-aL.d.mts.map
2230
+ //# sourceMappingURL=byline-fields-CHE8UStY.d.mts.map