@sonicjs-cms/core 3.0.0-beta.16 → 3.0.0-beta.17

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 (49) hide show
  1. package/dist/{chunk-KOXFYFOF.cjs → chunk-3RNDJAZ5.cjs} +4 -4
  2. package/dist/{chunk-KOXFYFOF.cjs.map → chunk-3RNDJAZ5.cjs.map} +1 -1
  3. package/dist/{chunk-HYO2MSFI.js → chunk-73KSHGOT.js} +2 -2
  4. package/dist/{chunk-HYO2MSFI.js.map → chunk-73KSHGOT.js.map} +1 -1
  5. package/dist/{chunk-IA24HACT.cjs → chunk-7YMMCIWY.cjs} +2 -2
  6. package/dist/{chunk-IA24HACT.cjs.map → chunk-7YMMCIWY.cjs.map} +1 -1
  7. package/dist/{chunk-KZIBF2EV.cjs → chunk-C3KSTUEA.cjs} +2 -2
  8. package/dist/{chunk-KZIBF2EV.cjs.map → chunk-C3KSTUEA.cjs.map} +1 -1
  9. package/dist/{chunk-UOFRE5PY.js → chunk-CYDEM6SY.js} +13 -13
  10. package/dist/chunk-CYDEM6SY.js.map +1 -0
  11. package/dist/{chunk-3XFA3E2F.cjs → chunk-KDRHGEUF.cjs} +3 -3
  12. package/dist/{chunk-3XFA3E2F.cjs.map → chunk-KDRHGEUF.cjs.map} +1 -1
  13. package/dist/{chunk-IXUNNFZZ.js → chunk-KXTGLSFY.js} +4 -4
  14. package/dist/{chunk-IXUNNFZZ.js.map → chunk-KXTGLSFY.js.map} +1 -1
  15. package/dist/{chunk-LXYDJU6U.cjs → chunk-MJZI3NHR.cjs} +10 -10
  16. package/dist/{chunk-LXYDJU6U.cjs.map → chunk-MJZI3NHR.cjs.map} +1 -1
  17. package/dist/{chunk-SC2WZFNQ.cjs → chunk-NOBU34HS.cjs} +206 -206
  18. package/dist/chunk-NOBU34HS.cjs.map +1 -0
  19. package/dist/{chunk-PA2UIFB7.js → chunk-OSMPF3PU.js} +5 -5
  20. package/dist/{chunk-PA2UIFB7.js.map → chunk-OSMPF3PU.js.map} +1 -1
  21. package/dist/{chunk-JRMBHDGM.js → chunk-RIFCRZYC.js} +3 -3
  22. package/dist/{chunk-JRMBHDGM.js.map → chunk-RIFCRZYC.js.map} +1 -1
  23. package/dist/{chunk-7P2IJM4K.js → chunk-Y34TG4TF.js} +3 -3
  24. package/dist/{chunk-7P2IJM4K.js.map → chunk-Y34TG4TF.js.map} +1 -1
  25. package/dist/{chunk-KIB7K5LV.js → chunk-YA4V4Y5U.js} +2 -2
  26. package/dist/{chunk-KIB7K5LV.js.map → chunk-YA4V4Y5U.js.map} +1 -1
  27. package/dist/{chunk-KMM45BTY.cjs → chunk-ZHQP75SR.cjs} +15 -15
  28. package/dist/{chunk-KMM45BTY.cjs.map → chunk-ZHQP75SR.cjs.map} +1 -1
  29. package/dist/index.cjs +259 -259
  30. package/dist/index.js +13 -13
  31. package/dist/middleware.cjs +33 -33
  32. package/dist/middleware.js +4 -4
  33. package/dist/migrations-7G6QBDSM.js +4 -0
  34. package/dist/{migrations-F4LBAHQN.js.map → migrations-7G6QBDSM.js.map} +1 -1
  35. package/dist/migrations-QIRBSVJJ.cjs +13 -0
  36. package/dist/{migrations-KMCULV6H.cjs.map → migrations-QIRBSVJJ.cjs.map} +1 -1
  37. package/dist/plugins.cjs +40 -40
  38. package/dist/plugins.js +3 -3
  39. package/dist/routes.cjs +26 -26
  40. package/dist/routes.js +6 -6
  41. package/dist/services.cjs +18 -18
  42. package/dist/services.js +2 -2
  43. package/dist/utils.cjs +3 -3
  44. package/dist/utils.js +1 -1
  45. package/package.json +1 -1
  46. package/dist/chunk-SC2WZFNQ.cjs.map +0 -1
  47. package/dist/chunk-UOFRE5PY.js.map +0 -1
  48. package/dist/migrations-F4LBAHQN.js +0 -4
  49. package/dist/migrations-KMCULV6H.cjs +0 -13
@@ -3,18 +3,18 @@
3
3
  var chunkXWVDSM2L_cjs = require('./chunk-XWVDSM2L.cjs');
4
4
  var chunkN32OWET6_cjs = require('./chunk-N32OWET6.cjs');
5
5
  var chunk4BTBSXMR_cjs = require('./chunk-4BTBSXMR.cjs');
6
- var chunkKMM45BTY_cjs = require('./chunk-KMM45BTY.cjs');
6
+ var chunkZHQP75SR_cjs = require('./chunk-ZHQP75SR.cjs');
7
7
  var chunkW36OZTJ5_cjs = require('./chunk-W36OZTJ5.cjs');
8
8
  var chunkJEQ7FLOD_cjs = require('./chunk-JEQ7FLOD.cjs');
9
- var chunkKZIBF2EV_cjs = require('./chunk-KZIBF2EV.cjs');
10
- var chunkIA24HACT_cjs = require('./chunk-IA24HACT.cjs');
9
+ var chunkC3KSTUEA_cjs = require('./chunk-C3KSTUEA.cjs');
10
+ var chunk7YMMCIWY_cjs = require('./chunk-7YMMCIWY.cjs');
11
11
  var chunkPXNTCCPE_cjs = require('./chunk-PXNTCCPE.cjs');
12
12
  var chunkK623Q6WD_cjs = require('./chunk-K623Q6WD.cjs');
13
- var chunkKOXFYFOF_cjs = require('./chunk-KOXFYFOF.cjs');
13
+ var chunk3RNDJAZ5_cjs = require('./chunk-3RNDJAZ5.cjs');
14
14
  var chunkJ6JTWD2A_cjs = require('./chunk-J6JTWD2A.cjs');
15
15
  var chunkIXUHXTHW_cjs = require('./chunk-IXUHXTHW.cjs');
16
16
  var chunkRCQ2HIQD_cjs = require('./chunk-RCQ2HIQD.cjs');
17
- var chunk3XFA3E2F_cjs = require('./chunk-3XFA3E2F.cjs');
17
+ var chunkKDRHGEUF_cjs = require('./chunk-KDRHGEUF.cjs');
18
18
  var chunkMNWKYY5E_cjs = require('./chunk-MNWKYY5E.cjs');
19
19
  var hono = require('hono');
20
20
  var zod = require('zod');
@@ -256,7 +256,7 @@ function getDocumentRequestContext(c) {
256
256
 
257
257
  // src/routes/api-documents.ts
258
258
  async function aclAllowsRead(db, tenantId, principalSet, row, preloadedType) {
259
- const docType = preloadedType ?? await new chunkKMM45BTY_cjs.DocumentTypeRegistry(db).findById(row.type_id);
259
+ const docType = preloadedType ?? await new chunkZHQP75SR_cjs.DocumentTypeRegistry(db).findById(row.type_id);
260
260
  if (!docType) return false;
261
261
  return new DocumentRepository(db, tenantId).isAllowed(principalSet, row.root_id, "read", docType.settings);
262
262
  }
@@ -274,7 +274,7 @@ apiDocumentsRoutes.get("/", async (c) => {
274
274
  if (!typeId) {
275
275
  return c.json({ error: "type query parameter is required" }, 400);
276
276
  }
277
- const registry = new chunkKMM45BTY_cjs.DocumentTypeRegistry(db);
277
+ const registry = new chunkZHQP75SR_cjs.DocumentTypeRegistry(db);
278
278
  const docType = await registry.findById(typeId);
279
279
  if (!docType || !docType.isActive) {
280
280
  return c.json({ error: "Unknown document type" }, 400);
@@ -356,7 +356,7 @@ apiDocumentsRoutes.get("/root/:rootId", async (c) => {
356
356
  AND (expires_at IS NULL OR expires_at > ?) LIMIT 1`
357
357
  ).bind(rootId, now, now).first();
358
358
  if (!row) return c.json({ error: "Not found" }, 404);
359
- const docType = await new chunkKMM45BTY_cjs.DocumentTypeRegistry(db).findById(row.type_id);
359
+ const docType = await new chunkZHQP75SR_cjs.DocumentTypeRegistry(db).findById(row.type_id);
360
360
  const effTenant = effectiveTenantForType(tenantId, docType?.settings);
361
361
  if (row.tenant_id !== effTenant) return c.json({ error: "Not found" }, 404);
362
362
  if (!await aclAllowsRead(db, effTenant, principalSet, row, docType)) {
@@ -392,7 +392,7 @@ apiDocumentsRoutes.get("/:id", async (c) => {
392
392
  AND (expires_at IS NULL OR expires_at > ?) LIMIT 1`
393
393
  ).bind(id, now, now).first();
394
394
  if (!row) return c.json({ error: "Not found" }, 404);
395
- const docType = await new chunkKMM45BTY_cjs.DocumentTypeRegistry(db).findById(row.type_id);
395
+ const docType = await new chunkZHQP75SR_cjs.DocumentTypeRegistry(db).findById(row.type_id);
396
396
  const effTenant = effectiveTenantForType(tenantId, docType?.settings);
397
397
  if (row.tenant_id !== effTenant) return c.json({ error: "Not found" }, 404);
398
398
  if (!await aclAllowsRead(db, effTenant, principalSet, row, docType)) {
@@ -462,17 +462,17 @@ async function resolveDocScope(c, db, by, opts = {}) {
462
462
  const draft = opts.currentDraftOnly ? " AND is_current_draft = 1" : "";
463
463
  const row = await db.prepare(`SELECT type_id, root_id, tenant_id FROM documents WHERE ${col} = ?${draft} LIMIT 1`).bind(val).first();
464
464
  if (!row) return null;
465
- const docType = await new chunkKMM45BTY_cjs.DocumentTypeRegistry(db).findById(row.type_id);
465
+ const docType = await new chunkZHQP75SR_cjs.DocumentTypeRegistry(db).findById(row.type_id);
466
466
  const tenantId = effectiveTenantForType(getRequestTenant(c), docType?.settings);
467
467
  if (row.tenant_id !== tenantId) return null;
468
468
  return { typeId: row.type_id, rootId: row.root_id, tenantId, docType };
469
469
  }
470
470
  var adminDocumentsRoutes = new hono.Hono();
471
- adminDocumentsRoutes.use("*", chunkKMM45BTY_cjs.requireAuth());
472
- adminDocumentsRoutes.use("*", chunkKMM45BTY_cjs.requireRole(["admin", "editor"]));
471
+ adminDocumentsRoutes.use("*", chunkZHQP75SR_cjs.requireAuth());
472
+ adminDocumentsRoutes.use("*", chunkZHQP75SR_cjs.requireRole(["admin", "editor"]));
473
473
  adminDocumentsRoutes.get("/types", async (c) => {
474
474
  try {
475
- const registry = new chunkKMM45BTY_cjs.DocumentTypeRegistry(c.env.DB);
475
+ const registry = new chunkZHQP75SR_cjs.DocumentTypeRegistry(c.env.DB);
476
476
  const types = await registry.findAll();
477
477
  return c.json({ data: types });
478
478
  } catch (error) {
@@ -500,7 +500,7 @@ adminDocumentsRoutes.get("/", async (c) => {
500
500
  if (!typeId) {
501
501
  return c.json({ error: "type query parameter is required" }, 400);
502
502
  }
503
- const registry = new chunkKMM45BTY_cjs.DocumentTypeRegistry(db);
503
+ const registry = new chunkZHQP75SR_cjs.DocumentTypeRegistry(db);
504
504
  const docType = await registry.findById(typeId);
505
505
  if (!docType || !docType.isActive) {
506
506
  return c.json({ error: "Unknown document type" }, 400);
@@ -611,7 +611,7 @@ adminDocumentsRoutes.post("/", async (c) => {
611
611
  const input = validation.data;
612
612
  const db = c.env.DB;
613
613
  const user = c.get("user");
614
- const registry = new chunkKMM45BTY_cjs.DocumentTypeRegistry(db);
614
+ const registry = new chunkZHQP75SR_cjs.DocumentTypeRegistry(db);
615
615
  const docType = await registry.findById(input.typeId);
616
616
  if (!docType || !docType.isActive) {
617
617
  return c.json({ error: "Unknown document type" }, 400);
@@ -743,7 +743,7 @@ adminDocumentsRoutes.post("/types/:typeId/reindex", async (c) => {
743
743
  try {
744
744
  const { typeId } = c.req.param();
745
745
  const db = c.env.DB;
746
- const registry = new chunkKMM45BTY_cjs.DocumentTypeRegistry(db);
746
+ const registry = new chunkZHQP75SR_cjs.DocumentTypeRegistry(db);
747
747
  const docType = await registry.findById(typeId);
748
748
  if (!docType) return c.json({ error: "Unknown document type" }, 400);
749
749
  const reindexTenant = effectiveTenantForType(getRequestTenant(c), docType.settings);
@@ -897,13 +897,13 @@ async function resolveContentVariables(contentData, db) {
897
897
  // src/routes/api-content-crud.ts
898
898
  var apiContentCrudRoutes = new hono.Hono();
899
899
  async function resolveDocBacking(db, collectionIdOrName) {
900
- const registry = chunkKZIBF2EV_cjs.getCollectionRegistry();
900
+ const registry = chunkC3KSTUEA_cjs.getCollectionRegistry();
901
901
  const record = registry.getBySlugOrName(collectionIdOrName) ?? registry.getById(collectionIdOrName);
902
902
  if (record) {
903
- const docType2 = await new chunkKMM45BTY_cjs.DocumentTypeRegistry(db).findById(record.name);
903
+ const docType2 = await new chunkZHQP75SR_cjs.DocumentTypeRegistry(db).findById(record.name);
904
904
  return docType2 ? { coll: { id: record.id, name: record.name }, docType: docType2 } : null;
905
905
  }
906
- const docType = await new chunkKMM45BTY_cjs.DocumentTypeRegistry(db).findById(collectionIdOrName);
906
+ const docType = await new chunkZHQP75SR_cjs.DocumentTypeRegistry(db).findById(collectionIdOrName);
907
907
  if (docType) {
908
908
  return { coll: { id: collectionIdOrName, name: collectionIdOrName }, docType };
909
909
  }
@@ -946,7 +946,7 @@ apiContentCrudRoutes.get("/check-slug", async (c) => {
946
946
  }, 500);
947
947
  }
948
948
  });
949
- apiContentCrudRoutes.get("/:id", chunkKMM45BTY_cjs.optionalAuth(), async (c) => {
949
+ apiContentCrudRoutes.get("/:id", chunkZHQP75SR_cjs.optionalAuth(), async (c) => {
950
950
  try {
951
951
  const id = c.req.param("id");
952
952
  const db = c.env.DB;
@@ -956,7 +956,7 @@ apiContentCrudRoutes.get("/:id", chunkKMM45BTY_cjs.optionalAuth(), async (c) =>
956
956
  ).bind(id, getRequestTenant(c)).first();
957
957
  let transformedContent;
958
958
  if (docRow) {
959
- const coll = chunkKZIBF2EV_cjs.getCollectionRegistry().getByName(docRow.type_id);
959
+ const coll = chunkC3KSTUEA_cjs.getCollectionRegistry().getByName(docRow.type_id);
960
960
  transformedContent = {
961
961
  id: docRow.root_id,
962
962
  title: docRow.title,
@@ -990,7 +990,7 @@ apiContentCrudRoutes.get("/:id", chunkKMM45BTY_cjs.optionalAuth(), async (c) =>
990
990
  }, 500);
991
991
  }
992
992
  });
993
- apiContentCrudRoutes.post("/", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
993
+ apiContentCrudRoutes.post("/", chunkZHQP75SR_cjs.requireAuth(), chunkZHQP75SR_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
994
994
  try {
995
995
  const db = c.env.DB;
996
996
  const user = c.get("user");
@@ -1065,7 +1065,7 @@ apiContentCrudRoutes.post("/", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY_cj
1065
1065
  }, 500);
1066
1066
  }
1067
1067
  });
1068
- apiContentCrudRoutes.put("/:id", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
1068
+ apiContentCrudRoutes.put("/:id", chunkZHQP75SR_cjs.requireAuth(), chunkZHQP75SR_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
1069
1069
  try {
1070
1070
  const id = c.req.param("id");
1071
1071
  const db = c.env.DB;
@@ -1087,7 +1087,7 @@ apiContentCrudRoutes.put("/:id", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY_
1087
1087
  } catch (err) {
1088
1088
  return c.json({ error: "Write cancelled by plugin", details: String(err) }, 400);
1089
1089
  }
1090
- const docType = await new chunkKMM45BTY_cjs.DocumentTypeRegistry(db).findById(docRow.type_id);
1090
+ const docType = await new chunkZHQP75SR_cjs.DocumentTypeRegistry(db).findById(docRow.type_id);
1091
1091
  const svc = new chunkW36OZTJ5_cjs.DocumentsService(db, {
1092
1092
  queryableFields: docType?.queryableFields ?? [],
1093
1093
  typeSchemaVersion: docType?.schemaVersion ?? 1,
@@ -1110,7 +1110,7 @@ apiContentCrudRoutes.put("/:id", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY_
1110
1110
  const cache = chunk4BTBSXMR_cjs.getCacheService(chunk4BTBSXMR_cjs.CACHE_CONFIGS.api);
1111
1111
  await cache.invalidate("content-filtered:*");
1112
1112
  await cache.invalidate("collection-content-filtered:*");
1113
- const coll = chunkKZIBF2EV_cjs.getCollectionRegistry().getByName(docRow.type_id);
1113
+ const coll = chunkC3KSTUEA_cjs.getCollectionRegistry().getByName(docRow.type_id);
1114
1114
  const saved = await db.prepare("SELECT * FROM documents WHERE id = ?").bind(newDraft.id).first();
1115
1115
  const savedData = saved?.data ? JSON.parse(saved.data) : {};
1116
1116
  dispatchHookEvent(c, "content:after:update", { collection: docRow.type_id, id, data: savedData, user: actor }, "fire-and-forget");
@@ -1131,7 +1131,7 @@ apiContentCrudRoutes.put("/:id", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY_
1131
1131
  }, 500);
1132
1132
  }
1133
1133
  });
1134
- apiContentCrudRoutes.delete("/:id", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
1134
+ apiContentCrudRoutes.delete("/:id", chunkZHQP75SR_cjs.requireAuth(), chunkZHQP75SR_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
1135
1135
  try {
1136
1136
  const id = c.req.param("id");
1137
1137
  const db = c.env.DB;
@@ -1257,7 +1257,7 @@ apiRoutes.use("*", async (c, next) => {
1257
1257
  c.header("X-Response-Time", `${totalTime}ms`);
1258
1258
  });
1259
1259
  apiRoutes.use("*", async (c, next) => {
1260
- const cacheEnabled = await chunkKMM45BTY_cjs.isPluginActive(c.env.DB, "core-cache");
1260
+ const cacheEnabled = await chunkZHQP75SR_cjs.isPluginActive(c.env.DB, "core-cache");
1261
1261
  c.set("cacheEnabled", cacheEnabled);
1262
1262
  await next();
1263
1263
  });
@@ -1280,7 +1280,7 @@ apiRoutes.get("/", (c) => {
1280
1280
  openapi: "3.0.0",
1281
1281
  info: {
1282
1282
  title: "SonicJS AI API",
1283
- version: chunk3XFA3E2F_cjs.getCoreVersion(),
1283
+ version: chunkKDRHGEUF_cjs.getCoreVersion(),
1284
1284
  description: "RESTful API for SonicJS headless CMS - a modern, AI-powered content management system built on Cloudflare Workers",
1285
1285
  contact: {
1286
1286
  name: "SonicJS Support",
@@ -1710,8 +1710,8 @@ apiRoutes.get("/collections", async (c) => {
1710
1710
  }
1711
1711
  c.header("X-Cache-Status", "MISS");
1712
1712
  c.header("X-Cache-Source", "registry");
1713
- const records = chunkKZIBF2EV_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal);
1714
- const transformedResults = records.map(chunkKZIBF2EV_cjs.collectionRecordToRow);
1713
+ const records = chunkC3KSTUEA_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal);
1714
+ const transformedResults = records.map(chunkC3KSTUEA_cjs.collectionRecordToRow);
1715
1715
  const responseData = {
1716
1716
  data: transformedResults,
1717
1717
  meta: addTimingMeta(c, {
@@ -1732,7 +1732,7 @@ apiRoutes.get("/collections", async (c) => {
1732
1732
  return c.json({ error: "Failed to fetch collections" }, 500);
1733
1733
  }
1734
1734
  });
1735
- apiRoutes.get("/content", chunkKMM45BTY_cjs.optionalAuth(), async (c) => {
1735
+ apiRoutes.get("/content", chunkZHQP75SR_cjs.optionalAuth(), async (c) => {
1736
1736
  const executionStart = Date.now();
1737
1737
  try {
1738
1738
  const db = c.env.DB;
@@ -1741,7 +1741,7 @@ apiRoutes.get("/content", chunkKMM45BTY_cjs.optionalAuth(), async (c) => {
1741
1741
  const collIdByName = /* @__PURE__ */ new Map();
1742
1742
  let typeId;
1743
1743
  let typeIds;
1744
- const registry = chunkKZIBF2EV_cjs.getCollectionRegistry();
1744
+ const registry = chunkC3KSTUEA_cjs.getCollectionRegistry();
1745
1745
  if (queryParams.collection) {
1746
1746
  const collectionName = queryParams.collection;
1747
1747
  const record = registry.getByName(collectionName);
@@ -1840,13 +1840,13 @@ apiRoutes.get("/content", chunkKMM45BTY_cjs.optionalAuth(), async (c) => {
1840
1840
  }, 500);
1841
1841
  }
1842
1842
  });
1843
- apiRoutes.get("/collections/:collection/content", chunkKMM45BTY_cjs.optionalAuth(), async (c) => {
1843
+ apiRoutes.get("/collections/:collection/content", chunkZHQP75SR_cjs.optionalAuth(), async (c) => {
1844
1844
  const executionStart = Date.now();
1845
1845
  try {
1846
1846
  const collection = c.req.param("collection");
1847
1847
  const db = c.env.DB;
1848
1848
  const queryParams = c.req.query();
1849
- const record = chunkKZIBF2EV_cjs.getCollectionRegistry().getBySlugOrName(collection);
1849
+ const record = chunkC3KSTUEA_cjs.getCollectionRegistry().getBySlugOrName(collection);
1850
1850
  if (!record || record.isActive === false) {
1851
1851
  return c.json({ error: "Collection not found" }, 404);
1852
1852
  }
@@ -1902,7 +1902,7 @@ apiRoutes.get("/collections/:collection/content", chunkKMM45BTY_cjs.optionalAuth
1902
1902
  const responseData = {
1903
1903
  data: transformedResults,
1904
1904
  meta: addTimingMeta(c, {
1905
- ...includeCollection ? { collection: chunkKZIBF2EV_cjs.collectionRecordToRow(record) } : {},
1905
+ ...includeCollection ? { collection: chunkC3KSTUEA_cjs.collectionRecordToRow(record) } : {},
1906
1906
  count: results.length,
1907
1907
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1908
1908
  // D44: echo the caller's filter with the access policy applied (status=published forced for
@@ -1927,13 +1927,13 @@ apiRoutes.get("/collections/:collection/content", chunkKMM45BTY_cjs.optionalAuth
1927
1927
  }
1928
1928
  });
1929
1929
  apiRoutes.route("/content", api_content_crud_default);
1930
- apiRoutes.get("/:collection", chunkKMM45BTY_cjs.optionalAuth(), async (c) => {
1930
+ apiRoutes.get("/:collection", chunkZHQP75SR_cjs.optionalAuth(), async (c) => {
1931
1931
  const executionStart = Date.now();
1932
1932
  try {
1933
1933
  const collection = c.req.param("collection");
1934
1934
  const db = c.env.DB;
1935
1935
  const queryParams = c.req.query();
1936
- const record = chunkKZIBF2EV_cjs.getCollectionRegistry().getBySlugOrName(collection);
1936
+ const record = chunkC3KSTUEA_cjs.getCollectionRegistry().getBySlugOrName(collection);
1937
1937
  if (!record || record.isActive === false) {
1938
1938
  return c.json({ error: "Collection not found" }, 404);
1939
1939
  }
@@ -1973,7 +1973,7 @@ apiRoutes.get("/:collection", chunkKMM45BTY_cjs.optionalAuth(), async (c) => {
1973
1973
  const responseData = {
1974
1974
  data: transformedResults,
1975
1975
  meta: addTimingMeta(c, {
1976
- ...includeCollection ? { collection: chunkKZIBF2EV_cjs.collectionRecordToRow(record) } : {},
1976
+ ...includeCollection ? { collection: chunkC3KSTUEA_cjs.collectionRecordToRow(record) } : {},
1977
1977
  count: results.length,
1978
1978
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1979
1979
  filter: normalizePublicContentFilter(filter, role),
@@ -1991,12 +1991,12 @@ apiRoutes.get("/:collection", chunkKMM45BTY_cjs.optionalAuth(), async (c) => {
1991
1991
  return c.json({ error: "Failed to fetch content", details: error instanceof Error ? error.message : String(error) }, 500);
1992
1992
  }
1993
1993
  });
1994
- apiRoutes.get("/:collection/:id", chunkKMM45BTY_cjs.optionalAuth(), async (c) => {
1994
+ apiRoutes.get("/:collection/:id", chunkZHQP75SR_cjs.optionalAuth(), async (c) => {
1995
1995
  try {
1996
1996
  const collection = c.req.param("collection");
1997
1997
  const id = c.req.param("id");
1998
1998
  const db = c.env.DB;
1999
- const record = chunkKZIBF2EV_cjs.getCollectionRegistry().getBySlugOrName(collection);
1999
+ const record = chunkC3KSTUEA_cjs.getCollectionRegistry().getBySlugOrName(collection);
2000
2000
  if (!record || record.isActive === false) {
2001
2001
  return c.json({ error: "Collection not found" }, 404);
2002
2002
  }
@@ -2005,7 +2005,7 @@ apiRoutes.get("/:collection/:id", chunkKMM45BTY_cjs.optionalAuth(), async (c) =>
2005
2005
  privileged ? "SELECT * FROM documents WHERE root_id = ? AND type_id = ? AND tenant_id = 'default' AND is_current_draft = 1 AND deleted_at IS NULL" : "SELECT * FROM documents WHERE root_id = ? AND type_id = ? AND tenant_id = 'default' AND is_published = 1 AND deleted_at IS NULL"
2006
2006
  ).bind(id, record.name).first();
2007
2007
  if (!docRow) return c.json({ error: "Content not found" }, 404);
2008
- const coll = chunkKZIBF2EV_cjs.getCollectionRegistry().getByName(docRow.type_id);
2008
+ const coll = chunkC3KSTUEA_cjs.getCollectionRegistry().getByName(docRow.type_id);
2009
2009
  const transformedContent = {
2010
2010
  id: docRow.root_id,
2011
2011
  title: docRow.title,
@@ -2023,7 +2023,7 @@ apiRoutes.get("/:collection/:id", chunkKMM45BTY_cjs.optionalAuth(), async (c) =>
2023
2023
  return c.json({ error: "Failed to fetch content", details: error instanceof Error ? error.message : String(error) }, 500);
2024
2024
  }
2025
2025
  });
2026
- apiRoutes.post("/:collection", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
2026
+ apiRoutes.post("/:collection", chunkZHQP75SR_cjs.requireAuth(), chunkZHQP75SR_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
2027
2027
  try {
2028
2028
  const collection = c.req.param("collection");
2029
2029
  const db = c.env.DB;
@@ -2056,14 +2056,14 @@ apiRoutes.post("/:collection", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY_cj
2056
2056
  return c.json({ error: "Failed to create content", details: error instanceof Error ? error.message : String(error) }, 500);
2057
2057
  }
2058
2058
  });
2059
- apiRoutes.put("/:collection/:id", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
2059
+ apiRoutes.put("/:collection/:id", chunkZHQP75SR_cjs.requireAuth(), chunkZHQP75SR_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
2060
2060
  try {
2061
2061
  const collection = c.req.param("collection");
2062
2062
  const id = c.req.param("id");
2063
2063
  const db = c.env.DB;
2064
2064
  const user = c.get("user");
2065
2065
  const body = await c.req.json();
2066
- const collRecord = chunkKZIBF2EV_cjs.getCollectionRegistry().getBySlugOrName(collection);
2066
+ const collRecord = chunkC3KSTUEA_cjs.getCollectionRegistry().getBySlugOrName(collection);
2067
2067
  const typeName = collRecord?.name ?? collection;
2068
2068
  const docRow = await db.prepare("SELECT root_id, type_id FROM documents WHERE root_id = ? AND type_id = ? AND tenant_id = 'default' AND is_current_draft = 1 AND deleted_at IS NULL").bind(id, typeName).first();
2069
2069
  if (!docRow) return c.json({ error: "Content not found" }, 404);
@@ -2075,7 +2075,7 @@ apiRoutes.put("/:collection/:id", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY
2075
2075
  } catch (err) {
2076
2076
  return c.json({ error: "Write cancelled by plugin", details: String(err) }, 400);
2077
2077
  }
2078
- const docType = await new chunkKMM45BTY_cjs.DocumentTypeRegistry(db).findById(docRow.type_id);
2078
+ const docType = await new chunkZHQP75SR_cjs.DocumentTypeRegistry(db).findById(docRow.type_id);
2079
2079
  const svc = new chunkW36OZTJ5_cjs.DocumentsService(db, { queryableFields: docType?.queryableFields ?? [], typeSchemaVersion: docType?.schemaVersion ?? 1, maxVersionsPerRoot: docType?.settings?.maxVersionsPerRoot ?? 50, tenantId: "default", versioning: docType?.settings?.versioning ?? false });
2080
2080
  const input = {};
2081
2081
  if (body.title !== void 0) input.title = body.title;
@@ -2092,7 +2092,7 @@ apiRoutes.put("/:collection/:id", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY
2092
2092
  const cache = chunk4BTBSXMR_cjs.getCacheService(chunk4BTBSXMR_cjs.CACHE_CONFIGS.api);
2093
2093
  await cache.invalidate("content-filtered:*");
2094
2094
  await cache.invalidate("collection-content-filtered:*");
2095
- const coll = chunkKZIBF2EV_cjs.getCollectionRegistry().getByName(docRow.type_id);
2095
+ const coll = chunkC3KSTUEA_cjs.getCollectionRegistry().getByName(docRow.type_id);
2096
2096
  const saved = await db.prepare("SELECT * FROM documents WHERE id = ?").bind(newDraft.id).first();
2097
2097
  const savedData = saved?.data ? JSON.parse(saved.data) : {};
2098
2098
  dispatchHookEvent(c, "content:after:update", { collection: docRow.type_id, id, data: savedData, user: actor }, "fire-and-forget");
@@ -2104,13 +2104,13 @@ apiRoutes.put("/:collection/:id", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY
2104
2104
  return c.json({ error: "Failed to update content", details: error instanceof Error ? error.message : String(error) }, 500);
2105
2105
  }
2106
2106
  });
2107
- apiRoutes.delete("/:collection/:id", chunkKMM45BTY_cjs.requireAuth(), chunkKMM45BTY_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
2107
+ apiRoutes.delete("/:collection/:id", chunkZHQP75SR_cjs.requireAuth(), chunkZHQP75SR_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
2108
2108
  try {
2109
2109
  const collection = c.req.param("collection");
2110
2110
  const id = c.req.param("id");
2111
2111
  const db = c.env.DB;
2112
2112
  const user = c.get("user");
2113
- const collRecord = chunkKZIBF2EV_cjs.getCollectionRegistry().getBySlugOrName(collection);
2113
+ const collRecord = chunkC3KSTUEA_cjs.getCollectionRegistry().getBySlugOrName(collection);
2114
2114
  const typeName = collRecord?.name ?? collection;
2115
2115
  const docRow = await db.prepare("SELECT type_id FROM documents WHERE root_id = ? AND type_id = ? AND tenant_id = 'default' AND deleted_at IS NULL LIMIT 1").bind(id, typeName).first();
2116
2116
  if (!docRow) return c.json({ error: "Content not found" }, 404);
@@ -2325,7 +2325,7 @@ var fileValidationSchema = zod.z.object({
2325
2325
  // 50MB max
2326
2326
  });
2327
2327
  var apiMediaRoutes = new hono.Hono();
2328
- apiMediaRoutes.use("*", chunkKMM45BTY_cjs.requireAuth());
2328
+ apiMediaRoutes.use("*", chunkZHQP75SR_cjs.requireAuth());
2329
2329
  apiMediaRoutes.post("/upload", async (c) => {
2330
2330
  try {
2331
2331
  const user = c.get("user");
@@ -3023,7 +3023,7 @@ apiSystemRoutes.get("/info", (c) => {
3023
3023
  apiSystemRoutes.get("/stats", async (c) => {
3024
3024
  try {
3025
3025
  const db = c.env.DB;
3026
- const typeIds = chunkKZIBF2EV_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal).map((r) => r.name);
3026
+ const typeIds = chunkC3KSTUEA_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal).map((r) => r.name);
3027
3027
  let contentStats = null;
3028
3028
  if (typeIds.length > 0) {
3029
3029
  const placeholders = typeIds.map(() => "?").join(",");
@@ -3098,12 +3098,12 @@ apiSystemRoutes.get("/env", (c) => {
3098
3098
  });
3099
3099
  var api_system_default = apiSystemRoutes;
3100
3100
  var adminApiRoutes = new hono.Hono();
3101
- adminApiRoutes.use("*", chunkKMM45BTY_cjs.requireAuth());
3102
- adminApiRoutes.use("*", chunkKMM45BTY_cjs.requireRole(["admin", "editor"]));
3101
+ adminApiRoutes.use("*", chunkZHQP75SR_cjs.requireAuth());
3102
+ adminApiRoutes.use("*", chunkZHQP75SR_cjs.requireRole(["admin", "editor"]));
3103
3103
  adminApiRoutes.get("/stats", async (c) => {
3104
3104
  try {
3105
3105
  const db = c.env.DB;
3106
- const userCollections = chunkKZIBF2EV_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal);
3106
+ const userCollections = chunkC3KSTUEA_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal);
3107
3107
  const collectionsCount = userCollections.length;
3108
3108
  let contentCount = 0;
3109
3109
  if (userCollections.length > 0) {
@@ -3194,7 +3194,7 @@ adminApiRoutes.get("/collections", async (c) => {
3194
3194
  try {
3195
3195
  const search = c.req.query("search") || "";
3196
3196
  const includeInactive = c.req.query("includeInactive") === "true";
3197
- let records = chunkKZIBF2EV_cjs.getCollectionRegistry().list().filter((r) => !r.internal);
3197
+ let records = chunkC3KSTUEA_cjs.getCollectionRegistry().list().filter((r) => !r.internal);
3198
3198
  if (!includeInactive) records = records.filter((r) => r.isActive !== false);
3199
3199
  if (search) {
3200
3200
  const needle = search.toLowerCase();
@@ -3226,7 +3226,7 @@ adminApiRoutes.get("/collections", async (c) => {
3226
3226
  adminApiRoutes.get("/collections/:id", async (c) => {
3227
3227
  try {
3228
3228
  const id = c.req.param("id");
3229
- const registry = chunkKZIBF2EV_cjs.getCollectionRegistry();
3229
+ const registry = chunkC3KSTUEA_cjs.getCollectionRegistry();
3230
3230
  const record = registry.getById(id) ?? registry.getByName(id);
3231
3231
  if (!record) {
3232
3232
  return c.json({ error: "Collection not found" }, 404);
@@ -3276,7 +3276,7 @@ adminApiRoutes.get("/references", async (c) => {
3276
3276
  if (collectionParams.length === 0) {
3277
3277
  return c.json({ error: "Collection is required" }, 400);
3278
3278
  }
3279
- const registry = chunkKZIBF2EV_cjs.getCollectionRegistry();
3279
+ const registry = chunkC3KSTUEA_cjs.getCollectionRegistry();
3280
3280
  const matched = collectionParams.map((param) => registry.getById(param) ?? registry.getByName(param)).filter((r) => !!r);
3281
3281
  const seen = /* @__PURE__ */ new Set();
3282
3282
  const collections = matched.filter((r) => {
@@ -3391,7 +3391,7 @@ adminApiRoutes.patch("/collections/:id", collectionsReadOnly);
3391
3391
  adminApiRoutes.delete("/collections/:id", collectionsReadOnly);
3392
3392
  adminApiRoutes.get("/migrations/status", async (c) => {
3393
3393
  try {
3394
- const { MigrationService: MigrationService2 } = await import('./migrations-KMCULV6H.cjs');
3394
+ const { MigrationService: MigrationService2 } = await import('./migrations-QIRBSVJJ.cjs');
3395
3395
  const db = c.env.DB;
3396
3396
  const migrationService = new MigrationService2(db);
3397
3397
  const status = await migrationService.getMigrationStatus();
@@ -3434,7 +3434,7 @@ adminApiRoutes.post("/migrations/run", async (c) => {
3434
3434
  });
3435
3435
  adminApiRoutes.get("/migrations/validate", async (c) => {
3436
3436
  try {
3437
- const { MigrationService: MigrationService2 } = await import('./migrations-KMCULV6H.cjs');
3437
+ const { MigrationService: MigrationService2 } = await import('./migrations-QIRBSVJJ.cjs');
3438
3438
  const db = c.env.DB;
3439
3439
  const migrationService = new MigrationService2(db);
3440
3440
  const validation = await migrationService.validateSchema();
@@ -3849,7 +3849,7 @@ function renderRegisterPage(data) {
3849
3849
  }
3850
3850
 
3851
3851
  // src/services/email/email-service-singleton.ts
3852
- var singleton = chunkKOXFYFOF_cjs.createServiceSingleton("EmailService");
3852
+ var singleton = chunk3RNDJAZ5_cjs.createServiceSingleton("EmailService");
3853
3853
  function setEmailService(service2) {
3854
3854
  singleton.set(service2);
3855
3855
  }
@@ -4657,7 +4657,7 @@ function getLexicalInitScript(settings = {}) {
4657
4657
  </script>
4658
4658
  `;
4659
4659
  }
4660
- var lexicalEditorPlugin = chunkKOXFYFOF_cjs.definePlugin({
4660
+ var lexicalEditorPlugin = chunk3RNDJAZ5_cjs.definePlugin({
4661
4661
  id: "lexical-editor",
4662
4662
  version: "1.0.0",
4663
4663
  name: "Lexical Editor",
@@ -7063,7 +7063,7 @@ api.put("/:userId", async (c) => {
7063
7063
  await saveCustomData(db, userId, sanitized);
7064
7064
  return c.json({ success: true });
7065
7065
  });
7066
- var userProfilesPlugin = chunkKOXFYFOF_cjs.definePlugin({
7066
+ var userProfilesPlugin = chunk3RNDJAZ5_cjs.definePlugin({
7067
7067
  id: "user-profiles",
7068
7068
  version: "1.0.0",
7069
7069
  name: "User Profiles",
@@ -7101,8 +7101,8 @@ function renderPasswordResetEmail(resetLink, firstName) {
7101
7101
  async function setCsrfCookie(c, maxAge) {
7102
7102
  const secret = c.env?.JWT_SECRET || JWT_SECRET_FALLBACK;
7103
7103
  const isDev = c.env?.ENVIRONMENT === "development" || !c.env?.ENVIRONMENT;
7104
- const csrfToken = await chunkKMM45BTY_cjs.generateCsrfToken(secret);
7105
- const cookieMaxAge = await chunkKMM45BTY_cjs.getJwtExpirySecondsFromDb(c.env?.DB, c.env);
7104
+ const csrfToken = await chunkZHQP75SR_cjs.generateCsrfToken(secret);
7105
+ const cookieMaxAge = await chunkZHQP75SR_cjs.getJwtExpirySecondsFromDb(c.env?.DB, c.env);
7106
7106
  cookie.setCookie(c, "csrf_token", csrfToken, {
7107
7107
  httpOnly: false,
7108
7108
  secure: !isDev,
@@ -7161,7 +7161,7 @@ var loginSchema = zod.z.object({
7161
7161
  });
7162
7162
  authRoutes.post(
7163
7163
  "/register",
7164
- chunkKMM45BTY_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "register" }),
7164
+ chunkZHQP75SR_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "register" }),
7165
7165
  async (c) => {
7166
7166
  try {
7167
7167
  const db = c.env.DB;
@@ -7197,7 +7197,7 @@ authRoutes.post(
7197
7197
  if (existingUser) {
7198
7198
  return c.json({ error: "User with this email already exists" }, 400);
7199
7199
  }
7200
- const passwordHash = await chunkKMM45BTY_cjs.AuthManager.hashPassword(password);
7200
+ const passwordHash = await chunkZHQP75SR_cjs.AuthManager.hashPassword(password);
7201
7201
  const userId = crypto.randomUUID();
7202
7202
  const now = /* @__PURE__ */ new Date();
7203
7203
  const nowSec = Math.floor(now.getTime() / 1e3);
@@ -7230,8 +7230,8 @@ authRoutes.post(
7230
7230
  { user: { id: userId, email: normalizedEmail, role: "viewer" } },
7231
7231
  "fire-and-forget"
7232
7232
  );
7233
- const tokenTtl = await chunkKMM45BTY_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7234
- const token = await chunkKMM45BTY_cjs.AuthManager.generateToken(userId, normalizedEmail, "viewer", c.env.JWT_SECRET, tokenTtl);
7233
+ const tokenTtl = await chunkZHQP75SR_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7234
+ const token = await chunkZHQP75SR_cjs.AuthManager.generateToken(userId, normalizedEmail, "viewer", c.env.JWT_SECRET, tokenTtl);
7235
7235
  cookie.setCookie(c, "auth_token", token, {
7236
7236
  httpOnly: true,
7237
7237
  secure: true,
@@ -7263,7 +7263,7 @@ authRoutes.post(
7263
7263
  );
7264
7264
  authRoutes.post(
7265
7265
  "/login",
7266
- chunkKMM45BTY_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "login" }),
7266
+ chunkZHQP75SR_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "login" }),
7267
7267
  async (c) => {
7268
7268
  try {
7269
7269
  const body = await c.req.json();
@@ -7295,8 +7295,8 @@ authRoutes.post(
7295
7295
  await setCsrfCookie(c);
7296
7296
  const baBody = await baRes.json();
7297
7297
  const user = baBody.user ?? {};
7298
- const tokenTtl = await chunkKMM45BTY_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7299
- const token = await chunkKMM45BTY_cjs.AuthManager.generateToken(
7298
+ const tokenTtl = await chunkZHQP75SR_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7299
+ const token = await chunkZHQP75SR_cjs.AuthManager.generateToken(
7300
7300
  user.id,
7301
7301
  user.email,
7302
7302
  user.role ?? "viewer",
@@ -7357,7 +7357,7 @@ authRoutes.get("/logout", async (c) => {
7357
7357
  clearCsrfCookie(c);
7358
7358
  return c.redirect("/auth/login?message=You have been logged out successfully");
7359
7359
  });
7360
- authRoutes.get("/me", chunkKMM45BTY_cjs.requireAuth(), async (c) => {
7360
+ authRoutes.get("/me", chunkZHQP75SR_cjs.requireAuth(), async (c) => {
7361
7361
  try {
7362
7362
  const user = c.get("user");
7363
7363
  if (!user) {
@@ -7377,7 +7377,7 @@ authRoutes.get("/me", chunkKMM45BTY_cjs.requireAuth(), async (c) => {
7377
7377
  });
7378
7378
  authRoutes.post(
7379
7379
  "/refresh",
7380
- chunkKMM45BTY_cjs.rateLimit({ max: 60, windowMs: 60 * 1e3, keyPrefix: "refresh" }),
7380
+ chunkZHQP75SR_cjs.rateLimit({ max: 60, windowMs: 60 * 1e3, keyPrefix: "refresh" }),
7381
7381
  async (c) => {
7382
7382
  try {
7383
7383
  let token = c.req.header("Authorization")?.replace("Bearer ", "");
@@ -7386,8 +7386,8 @@ authRoutes.post(
7386
7386
  return c.json({ error: "Authentication required" }, 401);
7387
7387
  }
7388
7388
  const db = c.env.DB;
7389
- const grace = await chunkKMM45BTY_cjs.getJwtRefreshGraceSecondsFromDb(db, c.env);
7390
- const payload = await chunkKMM45BTY_cjs.AuthManager.verifyToken(token, c.env.JWT_SECRET, grace);
7389
+ const grace = await chunkZHQP75SR_cjs.getJwtRefreshGraceSecondsFromDb(db, c.env);
7390
+ const payload = await chunkZHQP75SR_cjs.AuthManager.verifyToken(token, c.env.JWT_SECRET, grace);
7391
7391
  if (!payload) {
7392
7392
  return c.json({ error: "Invalid or expired token" }, 401);
7393
7393
  }
@@ -7395,8 +7395,8 @@ authRoutes.post(
7395
7395
  if (!row || !row.is_active) {
7396
7396
  return c.json({ error: "User is not active" }, 401);
7397
7397
  }
7398
- const tokenTtl = await chunkKMM45BTY_cjs.getJwtExpirySecondsFromDb(db, c.env);
7399
- const newToken = await chunkKMM45BTY_cjs.AuthManager.generateToken(row.id, row.email, row.role, c.env.JWT_SECRET, tokenTtl);
7398
+ const tokenTtl = await chunkZHQP75SR_cjs.getJwtExpirySecondsFromDb(db, c.env);
7399
+ const newToken = await chunkZHQP75SR_cjs.AuthManager.generateToken(row.id, row.email, row.role, c.env.JWT_SECRET, tokenTtl);
7400
7400
  cookie.setCookie(c, "auth_token", newToken, {
7401
7401
  httpOnly: true,
7402
7402
  secure: true,
@@ -7416,7 +7416,7 @@ authRoutes.post(
7416
7416
  );
7417
7417
  authRoutes.post(
7418
7418
  "/register/form",
7419
- chunkKMM45BTY_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "register" }),
7419
+ chunkZHQP75SR_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "register" }),
7420
7420
  async (c) => {
7421
7421
  try {
7422
7422
  const db = c.env.DB;
@@ -7461,7 +7461,7 @@ authRoutes.post(
7461
7461
  </div>
7462
7462
  `);
7463
7463
  }
7464
- const passwordHash = await chunkKMM45BTY_cjs.AuthManager.hashPassword(password);
7464
+ const passwordHash = await chunkZHQP75SR_cjs.AuthManager.hashPassword(password);
7465
7465
  const role = isFirstUser ? "admin" : "viewer";
7466
7466
  const userId = crypto.randomUUID();
7467
7467
  const now = /* @__PURE__ */ new Date();
@@ -7503,8 +7503,8 @@ authRoutes.post(
7503
7503
  { user: { id: userId, email: normalizedEmail, role } },
7504
7504
  "fire-and-forget"
7505
7505
  );
7506
- const tokenTtl = await chunkKMM45BTY_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7507
- const token = await chunkKMM45BTY_cjs.AuthManager.generateToken(userId, normalizedEmail, role, c.env.JWT_SECRET, tokenTtl);
7506
+ const tokenTtl = await chunkZHQP75SR_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7507
+ const token = await chunkZHQP75SR_cjs.AuthManager.generateToken(userId, normalizedEmail, role, c.env.JWT_SECRET, tokenTtl);
7508
7508
  cookie.setCookie(c, "auth_token", token, {
7509
7509
  httpOnly: true,
7510
7510
  secure: false,
@@ -7536,7 +7536,7 @@ authRoutes.post(
7536
7536
  );
7537
7537
  authRoutes.post(
7538
7538
  "/login/form",
7539
- chunkKMM45BTY_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "login" }),
7539
+ chunkZHQP75SR_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "login" }),
7540
7540
  async (c) => {
7541
7541
  try {
7542
7542
  const formData = await c.req.formData();
@@ -7605,14 +7605,14 @@ authRoutes.post(
7605
7605
  );
7606
7606
  authRoutes.post(
7607
7607
  "/seed-admin",
7608
- chunkKMM45BTY_cjs.rateLimit({ max: 10, windowMs: 60 * 1e3, keyPrefix: "seed-admin" }),
7608
+ chunkZHQP75SR_cjs.rateLimit({ max: 10, windowMs: 60 * 1e3, keyPrefix: "seed-admin" }),
7609
7609
  async (c) => {
7610
7610
  try {
7611
7611
  const db = c.env.DB;
7612
7612
  const rbac = new chunkW36OZTJ5_cjs.RbacService(db);
7613
7613
  const results = [];
7614
7614
  const upsertSeedUser = async (opts) => {
7615
- const passwordHash = await chunkKMM45BTY_cjs.AuthManager.hashPassword(opts.password);
7615
+ const passwordHash = await chunkZHQP75SR_cjs.AuthManager.hashPassword(opts.password);
7616
7616
  const nowMs = Date.now();
7617
7617
  const nowSec = Math.floor(nowMs / 1e3);
7618
7618
  const existing = await db.prepare("SELECT id FROM auth_user WHERE email = ?").bind(opts.email).first();
@@ -7837,7 +7837,7 @@ authRoutes.post("/accept-invitation", async (c) => {
7837
7837
  if (invitationAge > maxAge) {
7838
7838
  return c.json({ error: "Invitation has expired" }, 400);
7839
7839
  }
7840
- const passwordHash = await chunkKMM45BTY_cjs.AuthManager.hashPassword(password);
7840
+ const passwordHash = await chunkZHQP75SR_cjs.AuthManager.hashPassword(password);
7841
7841
  const updateStmt = db.prepare(`
7842
7842
  UPDATE auth_user SET
7843
7843
  password_hash = ?,
@@ -7854,8 +7854,8 @@ authRoutes.post("/accept-invitation", async (c) => {
7854
7854
  Date.now(),
7855
7855
  invitedUser.id
7856
7856
  ).run();
7857
- const tokenTtl = await chunkKMM45BTY_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7858
- const authToken = await chunkKMM45BTY_cjs.AuthManager.generateToken(invitedUser.id, invitedUser.email, invitedUser.role, c.env.JWT_SECRET, tokenTtl);
7857
+ const tokenTtl = await chunkZHQP75SR_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7858
+ const authToken = await chunkZHQP75SR_cjs.AuthManager.generateToken(invitedUser.id, invitedUser.email, invitedUser.role, c.env.JWT_SECRET, tokenTtl);
7859
7859
  cookie.setCookie(c, "auth_token", authToken, {
7860
7860
  httpOnly: true,
7861
7861
  secure: true,
@@ -7871,7 +7871,7 @@ authRoutes.post("/accept-invitation", async (c) => {
7871
7871
  });
7872
7872
  authRoutes.post(
7873
7873
  "/request-password-reset",
7874
- chunkKMM45BTY_cjs.rateLimit({ max: 3, windowMs: 15 * 60 * 1e3, keyPrefix: "password-reset" }),
7874
+ chunkZHQP75SR_cjs.rateLimit({ max: 3, windowMs: 15 * 60 * 1e3, keyPrefix: "password-reset" }),
7875
7875
  async (c) => {
7876
7876
  try {
7877
7877
  const formData = await c.req.formData();
@@ -8108,7 +8108,7 @@ authRoutes.post("/reset-password", async (c) => {
8108
8108
  if (Date.now() > user.password_reset_expires) {
8109
8109
  return c.json({ error: "Reset token has expired" }, 400);
8110
8110
  }
8111
- const newPasswordHash = await chunkKMM45BTY_cjs.AuthManager.hashPassword(password);
8111
+ const newPasswordHash = await chunkZHQP75SR_cjs.AuthManager.hashPassword(password);
8112
8112
  try {
8113
8113
  const historyStmt = db.prepare(`
8114
8114
  INSERT INTO auth_password_history (id, user_id, password_hash, created_at)
@@ -8322,7 +8322,7 @@ app.post("/test-seed-defaults", async (c) => {
8322
8322
  var test_cleanup_default = app;
8323
8323
 
8324
8324
  // src/plugins/available/easy-mdx/index.ts
8325
- chunkKOXFYFOF_cjs.definePlugin({
8325
+ chunk3RNDJAZ5_cjs.definePlugin({
8326
8326
  id: "easy-mdx",
8327
8327
  version: "1.0.0",
8328
8328
  name: "EasyMDE Markdown Editor",
@@ -8522,7 +8522,7 @@ function getMDXEditorInitScript(config) {
8522
8522
  }
8523
8523
 
8524
8524
  // src/plugins/available/tinymce-plugin/index.ts
8525
- chunkKOXFYFOF_cjs.definePlugin({
8525
+ chunk3RNDJAZ5_cjs.definePlugin({
8526
8526
  id: "tinymce-plugin",
8527
8527
  version: "1.0.0",
8528
8528
  name: "TinyMCE",
@@ -8792,7 +8792,7 @@ function getQuillCDN(version = "2.0.2") {
8792
8792
  </style>
8793
8793
  `;
8794
8794
  }
8795
- chunkKOXFYFOF_cjs.definePlugin({
8795
+ chunk3RNDJAZ5_cjs.definePlugin({
8796
8796
  id: "quill-editor",
8797
8797
  version: "1.0.0",
8798
8798
  name: "Quill Editor",
@@ -11366,7 +11366,7 @@ function extractFieldData(fields, formData, options = {}) {
11366
11366
  }
11367
11367
  return { data, errors };
11368
11368
  }
11369
- adminContentRoutes.use("*", chunkKMM45BTY_cjs.requireAuth());
11369
+ adminContentRoutes.use("*", chunkZHQP75SR_cjs.requireAuth());
11370
11370
  async function getCollectionFields(db, collectionId) {
11371
11371
  console.log(`[getCollectionFields] Loading fields for collection: ${collectionId}`);
11372
11372
  const collectionStmt = db.prepare("SELECT schema, queryable_fields FROM document_types WHERE id = ?");
@@ -11393,7 +11393,7 @@ async function getCollectionFields(db, collectionId) {
11393
11393
  };
11394
11394
  });
11395
11395
  }
11396
- const codeCollections2 = await chunkKZIBF2EV_cjs.loadCollectionConfigs();
11396
+ const codeCollections2 = await chunkC3KSTUEA_cjs.loadCollectionConfigs();
11397
11397
  const codeMatch = codeCollections2.find((c) => c.name === collectionId);
11398
11398
  if (codeMatch && codeMatch.schema?.properties) {
11399
11399
  console.log(`[getCollectionFields] DB doc type has no properties \u2014 using code collection schema`);
@@ -11425,7 +11425,7 @@ async function getCollectionFields(db, collectionId) {
11425
11425
  }
11426
11426
  }
11427
11427
  console.log(`[getCollectionFields] Not in database, checking code collections`);
11428
- const codeCollections = await chunkKZIBF2EV_cjs.loadCollectionConfigs();
11428
+ const codeCollections = await chunkC3KSTUEA_cjs.loadCollectionConfigs();
11429
11429
  console.log(`[getCollectionFields] Found ${codeCollections.length} code collections`);
11430
11430
  const codeCollection = codeCollections.find((c) => c.name === collectionId);
11431
11431
  if (codeCollection && codeCollection.schema) {
@@ -11479,7 +11479,7 @@ async function getCollection(db, collectionId) {
11479
11479
  };
11480
11480
  }
11481
11481
  console.log(`[getCollection] Not in database, checking code collections`);
11482
- const codeCollections = await chunkKZIBF2EV_cjs.loadCollectionConfigs();
11482
+ const codeCollections = await chunkC3KSTUEA_cjs.loadCollectionConfigs();
11483
11483
  const codeCollection = codeCollections.find((c) => c.name === collectionId);
11484
11484
  if (codeCollection) {
11485
11485
  console.log(`[getCollection] Found code collection: ${collectionId}`);
@@ -11498,7 +11498,7 @@ async function getCollection(db, collectionId) {
11498
11498
  }
11499
11499
  async function getDocBackingType(db, collectionName) {
11500
11500
  if (!collectionName) return null;
11501
- const dt = await new chunkKMM45BTY_cjs.DocumentTypeRegistry(db).findById(collectionName);
11501
+ const dt = await new chunkZHQP75SR_cjs.DocumentTypeRegistry(db).findById(collectionName);
11502
11502
  return dt && dt.isActive ? dt : null;
11503
11503
  }
11504
11504
  async function getCollectionByName(db, name) {
@@ -11515,7 +11515,7 @@ async function getCollectionByName(db, name) {
11515
11515
  };
11516
11516
  }
11517
11517
  console.log(`[getCollectionByName] Not in database, checking code collections`);
11518
- const codeCollections = await chunkKZIBF2EV_cjs.loadCollectionConfigs();
11518
+ const codeCollections = await chunkC3KSTUEA_cjs.loadCollectionConfigs();
11519
11519
  const codeCollection = codeCollections.find((c) => c.name === name);
11520
11520
  if (codeCollection) {
11521
11521
  console.log(`[getCollectionByName] Found code collection: ${name}`);
@@ -11531,7 +11531,7 @@ async function getCollectionByName(db, name) {
11531
11531
  return null;
11532
11532
  }
11533
11533
  async function loadContentEditorFlags(db) {
11534
- const flags = { workflowEnabled: await chunkKMM45BTY_cjs.isPluginActive(db, "workflow") };
11534
+ const flags = { workflowEnabled: await chunkZHQP75SR_cjs.isPluginActive(db, "workflow") };
11535
11535
  const editors = [
11536
11536
  ["tinymce-plugin", "tinymce"],
11537
11537
  ["quill-editor", "quill"],
@@ -11539,10 +11539,10 @@ async function loadContentEditorFlags(db) {
11539
11539
  ["lexical-editor", "lexical"]
11540
11540
  ];
11541
11541
  for (const [plugin, key] of editors) {
11542
- const enabled = await chunkKMM45BTY_cjs.isPluginActive(db, plugin);
11542
+ const enabled = await chunkZHQP75SR_cjs.isPluginActive(db, plugin);
11543
11543
  flags[`${key}Enabled`] = enabled;
11544
11544
  if (enabled) {
11545
- const ps = new chunkKZIBF2EV_cjs.PluginService(db);
11545
+ const ps = new chunkC3KSTUEA_cjs.PluginService(db);
11546
11546
  const p = await ps.getPlugin(plugin);
11547
11547
  flags[`${key}Settings`] = p?.settings;
11548
11548
  }
@@ -11578,9 +11578,9 @@ adminContentRoutes.get("/", async (c) => {
11578
11578
  const offset = (page - 1) * limit;
11579
11579
  const collectionsStmt = db.prepare("SELECT id, name, display_name FROM document_types WHERE is_active = 1 ORDER BY display_name");
11580
11580
  const { results: collectionsResults } = await collectionsStmt.all();
11581
- const codeCollections = await chunkKZIBF2EV_cjs.loadCollectionConfigs();
11581
+ const codeCollections = await chunkC3KSTUEA_cjs.loadCollectionConfigs();
11582
11582
  const codeCollectionMap = new Map(codeCollections.map((c2) => [c2.name, c2]));
11583
- const docTypeRegistry = new chunkKMM45BTY_cjs.DocumentTypeRegistry(db);
11583
+ const docTypeRegistry = new chunkZHQP75SR_cjs.DocumentTypeRegistry(db);
11584
11584
  const docTypes = (await docTypeRegistry.findAll()).filter((dt) => !dt.settings?.internal && !dt.isAuth);
11585
11585
  const visibleTypeIds = new Set(docTypes.map((dt) => dt.id));
11586
11586
  const allCollections = [
@@ -11592,7 +11592,7 @@ adminContentRoutes.get("/", async (c) => {
11592
11592
  ...allCollections.map((c2) => ({ name: c2.name, displayName: c2.displayName })),
11593
11593
  ...docTypes.filter((dt) => !collectionNames.has(dt.id)).map((dt) => ({ name: `doc:${dt.id}`, displayName: dt.displayName }))
11594
11594
  ];
11595
- const newContentCollections = await chunkKZIBF2EV_cjs.getVisibleCollections(db);
11595
+ const newContentCollections = await chunkC3KSTUEA_cjs.getVisibleCollections(db);
11596
11596
  const docBackedCollection = !modelName.startsWith("doc:") && modelName !== "all" ? docTypes.find((dt) => dt.id === modelName) : void 0;
11597
11597
  const isDocModel = modelName.startsWith("doc:") || !!docBackedCollection;
11598
11598
  if (isDocModel) {
@@ -11869,9 +11869,9 @@ adminContentRoutes.get("/new", async (c) => {
11869
11869
  const collectionsStmt = db2.prepare("SELECT id, name, display_name, description FROM document_types WHERE is_active = 1 ORDER BY display_name");
11870
11870
  const { results } = await collectionsStmt.all();
11871
11871
  const visibleTypeIds = new Set(
11872
- (await new chunkKMM45BTY_cjs.DocumentTypeRegistry(db2).findAll()).filter((dt) => !dt.settings?.internal && !dt.isAuth).map((dt) => dt.id)
11872
+ (await new chunkZHQP75SR_cjs.DocumentTypeRegistry(db2).findAll()).filter((dt) => !dt.settings?.internal && !dt.isAuth).map((dt) => dt.id)
11873
11873
  );
11874
- const codeCollections = await chunkKZIBF2EV_cjs.loadCollectionConfigs();
11874
+ const codeCollections = await chunkC3KSTUEA_cjs.loadCollectionConfigs();
11875
11875
  const dbCollectionNames = new Set((results || []).map((r) => r.name));
11876
11876
  const allCollections = [
11877
11877
  ...codeCollections.filter((c2) => !dbCollectionNames.has(c2.name)).map((c2) => ({
@@ -11937,32 +11937,32 @@ adminContentRoutes.get("/new", async (c) => {
11937
11937
  return c.html(renderContentFormPage(formData2));
11938
11938
  }
11939
11939
  const fields = await getCollectionFields(db, collection.id);
11940
- const workflowEnabled = await chunkKMM45BTY_cjs.isPluginActive(db, "workflow");
11941
- const tinymceEnabled = await chunkKMM45BTY_cjs.isPluginActive(db, "tinymce-plugin");
11940
+ const workflowEnabled = await chunkZHQP75SR_cjs.isPluginActive(db, "workflow");
11941
+ const tinymceEnabled = await chunkZHQP75SR_cjs.isPluginActive(db, "tinymce-plugin");
11942
11942
  let tinymceSettings;
11943
11943
  if (tinymceEnabled) {
11944
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
11944
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
11945
11945
  const tinymcePlugin2 = await pluginService.getPlugin("tinymce-plugin");
11946
11946
  tinymceSettings = tinymcePlugin2?.settings;
11947
11947
  }
11948
- const quillEnabled = await chunkKMM45BTY_cjs.isPluginActive(db, "quill-editor");
11948
+ const quillEnabled = await chunkZHQP75SR_cjs.isPluginActive(db, "quill-editor");
11949
11949
  let quillSettings;
11950
11950
  if (quillEnabled) {
11951
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
11951
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
11952
11952
  const quillPlugin = await pluginService.getPlugin("quill-editor");
11953
11953
  quillSettings = quillPlugin?.settings;
11954
11954
  }
11955
- const mdxeditorEnabled = await chunkKMM45BTY_cjs.isPluginActive(db, "easy-mdx");
11955
+ const mdxeditorEnabled = await chunkZHQP75SR_cjs.isPluginActive(db, "easy-mdx");
11956
11956
  let mdxeditorSettings;
11957
11957
  if (mdxeditorEnabled) {
11958
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
11958
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
11959
11959
  const mdxeditorPlugin = await pluginService.getPlugin("easy-mdx");
11960
11960
  mdxeditorSettings = mdxeditorPlugin?.settings;
11961
11961
  }
11962
- const lexicalEnabled = await chunkKMM45BTY_cjs.isPluginActive(db, "lexical-editor");
11962
+ const lexicalEnabled = await chunkZHQP75SR_cjs.isPluginActive(db, "lexical-editor");
11963
11963
  let lexicalSettings;
11964
11964
  if (lexicalEnabled) {
11965
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
11965
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
11966
11966
  const lexicalPlugin = await pluginService.getPlugin("lexical-editor");
11967
11967
  lexicalSettings = lexicalPlugin?.settings;
11968
11968
  }
@@ -12090,32 +12090,32 @@ adminContentRoutes.get("/:id/edit", async (c) => {
12090
12090
  };
12091
12091
  const fields = await getCollectionFields(db, content.collection_id);
12092
12092
  const contentData = content.data ? JSON.parse(content.data) : {};
12093
- const workflowEnabled = await chunkKMM45BTY_cjs.isPluginActive(db, "workflow");
12094
- const tinymceEnabled = await chunkKMM45BTY_cjs.isPluginActive(db, "tinymce-plugin");
12093
+ const workflowEnabled = await chunkZHQP75SR_cjs.isPluginActive(db, "workflow");
12094
+ const tinymceEnabled = await chunkZHQP75SR_cjs.isPluginActive(db, "tinymce-plugin");
12095
12095
  let tinymceSettings;
12096
12096
  if (tinymceEnabled) {
12097
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
12097
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
12098
12098
  const tinymcePlugin2 = await pluginService.getPlugin("tinymce-plugin");
12099
12099
  tinymceSettings = tinymcePlugin2?.settings;
12100
12100
  }
12101
- const quillEnabled = await chunkKMM45BTY_cjs.isPluginActive(db, "quill-editor");
12101
+ const quillEnabled = await chunkZHQP75SR_cjs.isPluginActive(db, "quill-editor");
12102
12102
  let quillSettings;
12103
12103
  if (quillEnabled) {
12104
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
12104
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
12105
12105
  const quillPlugin = await pluginService.getPlugin("quill-editor");
12106
12106
  quillSettings = quillPlugin?.settings;
12107
12107
  }
12108
- const mdxeditorEnabled = await chunkKMM45BTY_cjs.isPluginActive(db, "easy-mdx");
12108
+ const mdxeditorEnabled = await chunkZHQP75SR_cjs.isPluginActive(db, "easy-mdx");
12109
12109
  let mdxeditorSettings;
12110
12110
  if (mdxeditorEnabled) {
12111
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
12111
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
12112
12112
  const mdxeditorPlugin = await pluginService.getPlugin("easy-mdx");
12113
12113
  mdxeditorSettings = mdxeditorPlugin?.settings;
12114
12114
  }
12115
- const lexicalEnabled = await chunkKMM45BTY_cjs.isPluginActive(db, "lexical-editor");
12115
+ const lexicalEnabled = await chunkZHQP75SR_cjs.isPluginActive(db, "lexical-editor");
12116
12116
  let lexicalSettings;
12117
12117
  if (lexicalEnabled) {
12118
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
12118
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
12119
12119
  const lexicalPlugin = await pluginService.getPlugin("lexical-editor");
12120
12120
  lexicalSettings = lexicalPlugin?.settings;
12121
12121
  }
@@ -12488,7 +12488,7 @@ adminContentRoutes.put("/:id", async (c) => {
12488
12488
  `);
12489
12489
  }
12490
12490
  });
12491
- adminContentRoutes.post("/preview", chunkKMM45BTY_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
12491
+ adminContentRoutes.post("/preview", chunkZHQP75SR_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
12492
12492
  try {
12493
12493
  const formData = await c.req.formData();
12494
12494
  const collectionId = formData.get("collection_id");
@@ -12807,7 +12807,7 @@ adminContentRoutes.delete("/:id", async (c) => {
12807
12807
  return c.json({ success: false, error: "Failed to delete content" }, 500);
12808
12808
  }
12809
12809
  });
12810
- adminContentRoutes.get("/:id/version/:version/preview", chunkKMM45BTY_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
12810
+ adminContentRoutes.get("/:id/version/:version/preview", chunkZHQP75SR_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
12811
12811
  try {
12812
12812
  const id = c.req.param("id");
12813
12813
  const version = parseInt(c.req.param("version") || "0");
@@ -12903,7 +12903,7 @@ function parseDocFormData(formData, queryableFields = []) {
12903
12903
  return { title, slug, data };
12904
12904
  }
12905
12905
  async function getDocService(db, typeId, tenantId) {
12906
- const registry = new chunkKMM45BTY_cjs.DocumentTypeRegistry(db);
12906
+ const registry = new chunkZHQP75SR_cjs.DocumentTypeRegistry(db);
12907
12907
  const docType = await registry.findById(typeId);
12908
12908
  const svc = new chunkW36OZTJ5_cjs.DocumentsService(db, {
12909
12909
  queryableFields: docType?.queryableFields ?? [],
@@ -12916,7 +12916,7 @@ async function getDocService(db, typeId, tenantId) {
12916
12916
  }
12917
12917
  adminContentRoutes.get("/documents/:typeId/new", async (c) => {
12918
12918
  const { typeId } = c.req.param();
12919
- const registry = new chunkKMM45BTY_cjs.DocumentTypeRegistry(c.env.DB);
12919
+ const registry = new chunkZHQP75SR_cjs.DocumentTypeRegistry(c.env.DB);
12920
12920
  const docType = await registry.findById(typeId);
12921
12921
  if (!docType) return c.html("<p>Unknown document type.</p>", 404);
12922
12922
  return c.html(chunkN32OWET6_cjs.renderDocumentFormPage({ docType, isEdit: false, user: userCtx(c) }));
@@ -12941,7 +12941,7 @@ adminContentRoutes.post("/documents/:typeId/new", async (c) => {
12941
12941
  }), user?.userId);
12942
12942
  return c.redirect(`/admin/content/documents/${typeId}/${doc.rootId}/edit?message=Created+successfully`);
12943
12943
  } catch (err) {
12944
- const registry = new chunkKMM45BTY_cjs.DocumentTypeRegistry(c.env.DB);
12944
+ const registry = new chunkZHQP75SR_cjs.DocumentTypeRegistry(c.env.DB);
12945
12945
  const docType = await registry.findById(typeId);
12946
12946
  if (!docType) return c.html("<p>Unknown document type.</p>", 404);
12947
12947
  return c.html(chunkN32OWET6_cjs.renderDocumentFormPage({ docType, isEdit: false, user: userCtx(c), message: err?.message ?? "Failed to create", messageType: "error" }));
@@ -12951,7 +12951,7 @@ adminContentRoutes.get("/documents/:typeId/:rootId/edit", async (c) => {
12951
12951
  const { typeId, rootId } = c.req.param();
12952
12952
  const db = c.env.DB;
12953
12953
  const message = c.req.query("message");
12954
- const registry = new chunkKMM45BTY_cjs.DocumentTypeRegistry(db);
12954
+ const registry = new chunkZHQP75SR_cjs.DocumentTypeRegistry(db);
12955
12955
  const docType = await registry.findById(typeId);
12956
12956
  if (!docType) return c.html("<p>Unknown document type.</p>", 404);
12957
12957
  const tenantId = reqTenant(c);
@@ -13064,7 +13064,7 @@ adminContentRoutes.get("/documents/:typeId/:rootId/versions", async (c) => {
13064
13064
  const { typeId, rootId } = c.req.param();
13065
13065
  const db = c.env.DB;
13066
13066
  const { renderVersionHistoryFragment } = await import('./admin-documents-form.template-LSZKGA5J.cjs');
13067
- const registry = new chunkKMM45BTY_cjs.DocumentTypeRegistry(db);
13067
+ const registry = new chunkZHQP75SR_cjs.DocumentTypeRegistry(db);
13068
13068
  const docType = await registry.findById(typeId);
13069
13069
  if (!docType) return c.html("<div>Unknown type.</div>", 404);
13070
13070
  const result = await db.prepare(
@@ -14996,7 +14996,7 @@ var TenantService = class {
14996
14996
  SET name = ?, domain = ?, status = ?, notes = ?, updated_at = ?
14997
14997
  WHERE slug = ?
14998
14998
  `).bind(name, domain, status, notes, now, slug).run();
14999
- chunkKZIBF2EV_cjs.invalidateTenantCache();
14999
+ chunkC3KSTUEA_cjs.invalidateTenantCache();
15000
15000
  const updated = await this.getTenantBySlug(slug);
15001
15001
  if (!updated) throw new Error("Tenant not found");
15002
15002
  return updated;
@@ -15014,7 +15014,7 @@ var TenantService = class {
15014
15014
  throw new Error(`Tenant '${slug}' still owns ${docCount} document(s). Delete or migrate its content first.`);
15015
15015
  }
15016
15016
  await this.db.prepare(`DELETE FROM auth_tenant WHERE slug = ?`).bind(slug).run();
15017
- chunkKZIBF2EV_cjs.invalidateTenantCache();
15017
+ chunkC3KSTUEA_cjs.invalidateTenantCache();
15018
15018
  }
15019
15019
  // ─── Membership (auth_tenant_member) ───────────────────────────────────────
15020
15020
  // Tenant resolution and the admin switcher are gated on membership: an authed user may only
@@ -15258,7 +15258,7 @@ var TenantService = class {
15258
15258
  INSERT INTO auth_tenant (id, name, slug, status, domain, notes, metadata, created_at, updated_at)
15259
15259
  VALUES (?, ?, ?, 'active', ?, ?, '{}', ?, ?)
15260
15260
  `).bind(id, input.name, input.slug, input.domain, input.notes, now, now).run();
15261
- chunkKZIBF2EV_cjs.invalidateTenantCache();
15261
+ chunkC3KSTUEA_cjs.invalidateTenantCache();
15262
15262
  const created = await this.getTenantBySlug(input.slug);
15263
15263
  if (!created) throw new Error("Failed to create tenant");
15264
15264
  return created;
@@ -15282,14 +15282,14 @@ function mapRowToTenant(row) {
15282
15282
 
15283
15283
  // src/routes/admin-users.ts
15284
15284
  var userRoutes = new hono.Hono();
15285
- userRoutes.use("*", chunkKMM45BTY_cjs.requireAuth());
15286
- userRoutes.use("/users/*", chunkKMM45BTY_cjs.requireRole(["admin"]));
15287
- userRoutes.use("/users", chunkKMM45BTY_cjs.requireRole(["admin"]));
15288
- userRoutes.use("/invite-user", chunkKMM45BTY_cjs.requireRole(["admin"]));
15289
- userRoutes.use("/resend-invitation/*", chunkKMM45BTY_cjs.requireRole(["admin"]));
15290
- userRoutes.use("/cancel-invitation/*", chunkKMM45BTY_cjs.requireRole(["admin"]));
15291
- userRoutes.use("/activity-logs", chunkKMM45BTY_cjs.requireRole(["admin"]));
15292
- userRoutes.use("/activity-logs/*", chunkKMM45BTY_cjs.requireRole(["admin"]));
15285
+ userRoutes.use("*", chunkZHQP75SR_cjs.requireAuth());
15286
+ userRoutes.use("/users/*", chunkZHQP75SR_cjs.requireRole(["admin"]));
15287
+ userRoutes.use("/users", chunkZHQP75SR_cjs.requireRole(["admin"]));
15288
+ userRoutes.use("/invite-user", chunkZHQP75SR_cjs.requireRole(["admin"]));
15289
+ userRoutes.use("/resend-invitation/*", chunkZHQP75SR_cjs.requireRole(["admin"]));
15290
+ userRoutes.use("/cancel-invitation/*", chunkZHQP75SR_cjs.requireRole(["admin"]));
15291
+ userRoutes.use("/activity-logs", chunkZHQP75SR_cjs.requireRole(["admin"]));
15292
+ userRoutes.use("/activity-logs/*", chunkZHQP75SR_cjs.requireRole(["admin"]));
15293
15293
  userRoutes.get("/", (c) => {
15294
15294
  return c.redirect("/admin/dashboard");
15295
15295
  });
@@ -15456,7 +15456,7 @@ userRoutes.put("/profile", async (c) => {
15456
15456
  }
15457
15457
  await saveCustomData(db, user.userId, sanitized);
15458
15458
  }
15459
- await chunkKMM45BTY_cjs.logActivity(
15459
+ await chunkZHQP75SR_cjs.logActivity(
15460
15460
  db,
15461
15461
  user.userId,
15462
15462
  "profile.update",
@@ -15519,7 +15519,7 @@ userRoutes.post("/profile/avatar", async (c) => {
15519
15519
  SELECT first_name, last_name FROM auth_user WHERE id = ?
15520
15520
  `);
15521
15521
  const userData = await userStmt.bind(user.userId).first();
15522
- await chunkKMM45BTY_cjs.logActivity(
15522
+ await chunkZHQP75SR_cjs.logActivity(
15523
15523
  db,
15524
15524
  user.userId,
15525
15525
  "profile.avatar_update",
@@ -15590,7 +15590,7 @@ userRoutes.post("/profile/password", async (c) => {
15590
15590
  dismissible: true
15591
15591
  }));
15592
15592
  }
15593
- const validPassword = await chunkKMM45BTY_cjs.AuthManager.verifyPassword(currentPassword, userData.password_hash);
15593
+ const validPassword = await chunkZHQP75SR_cjs.AuthManager.verifyPassword(currentPassword, userData.password_hash);
15594
15594
  if (!validPassword) {
15595
15595
  return c.html(chunkN32OWET6_cjs.renderAlert({
15596
15596
  type: "error",
@@ -15598,7 +15598,7 @@ userRoutes.post("/profile/password", async (c) => {
15598
15598
  dismissible: true
15599
15599
  }));
15600
15600
  }
15601
- const newPasswordHash = await chunkKMM45BTY_cjs.AuthManager.hashPassword(newPassword);
15601
+ const newPasswordHash = await chunkZHQP75SR_cjs.AuthManager.hashPassword(newPassword);
15602
15602
  const historyStmt = db.prepare(`
15603
15603
  INSERT INTO auth_password_history (id, user_id, password_hash, created_at)
15604
15604
  VALUES (?, ?, ?, ?)
@@ -15614,7 +15614,7 @@ userRoutes.post("/profile/password", async (c) => {
15614
15614
  WHERE id = ?
15615
15615
  `);
15616
15616
  await updateStmt.bind(newPasswordHash, Date.now(), user.userId).run();
15617
- await chunkKMM45BTY_cjs.logActivity(
15617
+ await chunkZHQP75SR_cjs.logActivity(
15618
15618
  db,
15619
15619
  user.userId,
15620
15620
  "profile.password_change",
@@ -15681,7 +15681,7 @@ userRoutes.get("/users", async (c) => {
15681
15681
  `);
15682
15682
  const countResult = await countStmt.bind(...params).first();
15683
15683
  const totalUsers = countResult?.total || 0;
15684
- await chunkKMM45BTY_cjs.logActivity(
15684
+ await chunkZHQP75SR_cjs.logActivity(
15685
15685
  db,
15686
15686
  user.userId,
15687
15687
  "users.list_view",
@@ -15862,7 +15862,7 @@ userRoutes.post("/users/new", async (c) => {
15862
15862
  dismissible: true
15863
15863
  }));
15864
15864
  }
15865
- const passwordHash = await chunkKMM45BTY_cjs.AuthManager.hashPassword(password);
15865
+ const passwordHash = await chunkZHQP75SR_cjs.AuthManager.hashPassword(password);
15866
15866
  const userId = crypto.randomUUID();
15867
15867
  const createStmt = db.prepare(`
15868
15868
  INSERT INTO auth_user (
@@ -15887,7 +15887,7 @@ userRoutes.post("/users/new", async (c) => {
15887
15887
  if (sanitizedRegistrationCustom !== null && Object.keys(sanitizedRegistrationCustom).length > 0) {
15888
15888
  await writeProfileData(db, userId, { custom: sanitizedRegistrationCustom }, user.userId);
15889
15889
  }
15890
- await chunkKMM45BTY_cjs.logActivity(
15890
+ await chunkZHQP75SR_cjs.logActivity(
15891
15891
  db,
15892
15892
  user.userId,
15893
15893
  "user!.create",
@@ -15926,7 +15926,7 @@ userRoutes.get("/users/:id", async (c) => {
15926
15926
  if (!userRecord) {
15927
15927
  return c.json({ error: "User not found" }, 404);
15928
15928
  }
15929
- await chunkKMM45BTY_cjs.logActivity(
15929
+ await chunkZHQP75SR_cjs.logActivity(
15930
15930
  db,
15931
15931
  user.userId,
15932
15932
  "user!.view",
@@ -16140,7 +16140,7 @@ userRoutes.put("/users/:id", async (c) => {
16140
16140
  userId
16141
16141
  ).run();
16142
16142
  if (newPassword) {
16143
- const passwordHash = await chunkKMM45BTY_cjs.AuthManager.hashPassword(newPassword);
16143
+ const passwordHash = await chunkZHQP75SR_cjs.AuthManager.hashPassword(newPassword);
16144
16144
  const updatePasswordStmt = db.prepare(`
16145
16145
  UPDATE auth_user SET password_hash = ?, updated_at = ? WHERE id = ?
16146
16146
  `);
@@ -16153,7 +16153,7 @@ userRoutes.put("/users/:id", async (c) => {
16153
16153
  ...sanitizedCustom !== null ? { custom: sanitizedCustom } : {}
16154
16154
  }, user.userId);
16155
16155
  }
16156
- await chunkKMM45BTY_cjs.logActivity(
16156
+ await chunkZHQP75SR_cjs.logActivity(
16157
16157
  db,
16158
16158
  user.userId,
16159
16159
  "user.update",
@@ -16199,7 +16199,7 @@ userRoutes.post("/users/:id/toggle", async (c) => {
16199
16199
  UPDATE auth_user SET is_active = ?, updated_at = ? WHERE id = ?
16200
16200
  `);
16201
16201
  await toggleStmt.bind(active ? 1 : 0, Date.now(), userId).run();
16202
- await chunkKMM45BTY_cjs.logActivity(
16202
+ await chunkZHQP75SR_cjs.logActivity(
16203
16203
  db,
16204
16204
  user.userId,
16205
16205
  active ? "user.activate" : "user.deactivate",
@@ -16240,7 +16240,7 @@ userRoutes.delete("/users/:id", async (c) => {
16240
16240
  DELETE FROM auth_user WHERE id = ?
16241
16241
  `);
16242
16242
  await deleteStmt.bind(userId).run();
16243
- await chunkKMM45BTY_cjs.logActivity(
16243
+ await chunkZHQP75SR_cjs.logActivity(
16244
16244
  db,
16245
16245
  user.userId,
16246
16246
  "user!.hard_delete",
@@ -16259,7 +16259,7 @@ userRoutes.delete("/users/:id", async (c) => {
16259
16259
  UPDATE auth_user SET is_active = 0, updated_at = ? WHERE id = ?
16260
16260
  `);
16261
16261
  await deleteStmt.bind(Date.now(), userId).run();
16262
- await chunkKMM45BTY_cjs.logActivity(
16262
+ await chunkZHQP75SR_cjs.logActivity(
16263
16263
  db,
16264
16264
  user.userId,
16265
16265
  "user!.soft_delete",
@@ -16325,7 +16325,7 @@ userRoutes.post("/invite-user", async (c) => {
16325
16325
  Date.now(),
16326
16326
  Date.now()
16327
16327
  ).run();
16328
- await chunkKMM45BTY_cjs.logActivity(
16328
+ await chunkZHQP75SR_cjs.logActivity(
16329
16329
  db,
16330
16330
  user.userId,
16331
16331
  "user!.invite_sent",
@@ -16382,7 +16382,7 @@ userRoutes.post("/resend-invitation/:id", async (c) => {
16382
16382
  Date.now(),
16383
16383
  userId
16384
16384
  ).run();
16385
- await chunkKMM45BTY_cjs.logActivity(
16385
+ await chunkZHQP75SR_cjs.logActivity(
16386
16386
  db,
16387
16387
  user.userId,
16388
16388
  "user!.invitation_resent",
@@ -16418,7 +16418,7 @@ userRoutes.delete("/cancel-invitation/:id", async (c) => {
16418
16418
  }
16419
16419
  const deleteStmt = db.prepare(`DELETE FROM auth_user WHERE id = ?`);
16420
16420
  await deleteStmt.bind(userId).run();
16421
- await chunkKMM45BTY_cjs.logActivity(
16421
+ await chunkZHQP75SR_cjs.logActivity(
16422
16422
  db,
16423
16423
  user.userId,
16424
16424
  "user!.invitation_cancelled",
@@ -17799,7 +17799,7 @@ var fileValidationSchema2 = zod.z.object({
17799
17799
  // 50MB max
17800
17800
  });
17801
17801
  var adminMediaRoutes = new hono.Hono();
17802
- adminMediaRoutes.use("*", chunkKMM45BTY_cjs.requireAuth());
17802
+ adminMediaRoutes.use("*", chunkZHQP75SR_cjs.requireAuth());
17803
17803
  adminMediaRoutes.get("/", async (c) => {
17804
17804
  try {
17805
17805
  const user = c.get("user");
@@ -17841,7 +17841,7 @@ adminMediaRoutes.get("/selector", async (c) => {
17841
17841
  const { searchParams } = new URL(c.req.url);
17842
17842
  const search = searchParams.get("search") || "";
17843
17843
  const db = c.env.DB;
17844
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
17844
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
17845
17845
  const mediaPlugin = await pluginService.getPlugin("core-media");
17846
17846
  if (!mediaPlugin || mediaPlugin.status !== "active") {
17847
17847
  return c.html(html.html`
@@ -18215,7 +18215,7 @@ adminMediaRoutes.put("/:id", async (c) => {
18215
18215
  `);
18216
18216
  }
18217
18217
  });
18218
- adminMediaRoutes.delete("/cleanup", chunkKMM45BTY_cjs.requireRole("admin"), async (c) => {
18218
+ adminMediaRoutes.delete("/cleanup", chunkZHQP75SR_cjs.requireRole("admin"), async (c) => {
18219
18219
  try {
18220
18220
  const db = c.env.DB;
18221
18221
  const allMediaStmt = db.prepare("SELECT id, r2_key, filename FROM media WHERE deleted_at IS NULL");
@@ -19335,7 +19335,7 @@ function escapeHtmlAttr(value) {
19335
19335
  function renderPluginSettingsPage(data) {
19336
19336
  const { plugin, activity = [], user } = data;
19337
19337
  const hasUserSettings = Object.keys(plugin.settings || {}).some((k) => !k.startsWith("_"));
19338
- const defaultTab = "info";
19338
+ const defaultTab = hasUserSettings ? "settings" : "info";
19339
19339
  const pageContent = `
19340
19340
  <div class="w-full px-4 sm:px-6 lg:px-8 py-6">
19341
19341
  <!-- Header with Back Button -->
@@ -19396,14 +19396,14 @@ function renderPluginSettingsPage(data) {
19396
19396
  <!-- Tabs -->
19397
19397
  <div class="mb-6">
19398
19398
  <nav class="flex space-x-8" aria-label="Tabs">
19399
- <a href="#info" onclick="showTab('info')" id="info-tab" class="tab-button border-b-2 border-transparent py-2 px-1 text-sm font-medium text-gray-400 hover:text-gray-300">
19400
- Information
19401
- </a>
19402
19399
  ${hasUserSettings ? `
19403
19400
  <a href="#settings" onclick="showTab('settings')" id="settings-tab" class="tab-button border-b-2 border-transparent py-2 px-1 text-sm font-medium text-gray-400 hover:text-gray-300">
19404
19401
  Settings
19405
19402
  </a>
19406
19403
  ` : ""}
19404
+ <a href="#info" onclick="showTab('info')" id="info-tab" class="tab-button border-b-2 border-transparent py-2 px-1 text-sm font-medium text-gray-400 hover:text-gray-300">
19405
+ Information
19406
+ </a>
19407
19407
  <a href="#activity" onclick="showTab('activity')" id="activity-tab" class="tab-button border-b-2 border-transparent py-2 px-1 text-sm font-medium text-gray-400 hover:text-gray-300">
19408
19408
  Activity Log
19409
19409
  </a>
@@ -20711,8 +20711,8 @@ defineUserProfile({
20711
20711
 
20712
20712
  // src/routes/admin-plugins.ts
20713
20713
  var adminPluginRoutes = new hono.Hono();
20714
- adminPluginRoutes.use("*", chunkKMM45BTY_cjs.requireAuth());
20715
- var AVAILABLE_PLUGINS = Object.values(chunkKZIBF2EV_cjs.PLUGIN_REGISTRY).map((p) => ({
20714
+ adminPluginRoutes.use("*", chunkZHQP75SR_cjs.requireAuth());
20715
+ var AVAILABLE_PLUGINS = Object.values(chunkC3KSTUEA_cjs.PLUGIN_REGISTRY).map((p) => ({
20716
20716
  id: p.id,
20717
20717
  name: p.codeName,
20718
20718
  display_name: p.displayName,
@@ -20732,7 +20732,7 @@ adminPluginRoutes.get("/", async (c) => {
20732
20732
  if (user?.role !== "admin") {
20733
20733
  return c.text("Access denied", 403);
20734
20734
  }
20735
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
20735
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
20736
20736
  let installedPlugins = [];
20737
20737
  let stats = { total: 0, active: 0, inactive: 0, errors: 0, uninstalled: 0 };
20738
20738
  try {
@@ -20804,10 +20804,10 @@ adminPluginRoutes.get("/:id", async (c) => {
20804
20804
  if (user?.role !== "admin") {
20805
20805
  return c.redirect("/admin/plugins");
20806
20806
  }
20807
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
20807
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
20808
20808
  let plugin = await pluginService.getPlugin(pluginId);
20809
20809
  if (!plugin) {
20810
- const def = chunkKOXFYFOF_cjs.getPluginDefinition(pluginId);
20810
+ const def = chunk3RNDJAZ5_cjs.getPluginDefinition(pluginId);
20811
20811
  if (!def) return c.text("Plugin not found", 404);
20812
20812
  plugin = await pluginService.ensurePlugin(pluginId, {
20813
20813
  displayName: def.displayName ?? pluginId,
@@ -20898,14 +20898,14 @@ adminPluginRoutes.get("/:id/configure", async (c) => {
20898
20898
  const user = c.get("user");
20899
20899
  const pluginId = c.req.param("id");
20900
20900
  if (user?.role !== "admin") return c.redirect("/admin/plugins");
20901
- const def = chunkKOXFYFOF_cjs.getPluginDefinition(pluginId);
20901
+ const def = chunk3RNDJAZ5_cjs.getPluginDefinition(pluginId);
20902
20902
  if (!def?.configSchema) return c.text("No schema-driven settings for this plugin", 404);
20903
20903
  const db = c.env.DB;
20904
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
20904
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
20905
20905
  const plugin = await pluginService.getPlugin(pluginId);
20906
20906
  const stored = plugin?.settings ?? {};
20907
- const values = chunkKOXFYFOF_cjs.applySchemaDefaults(def.configSchema, stored);
20908
- const fieldsHtml = chunkKOXFYFOF_cjs.renderSchemaFields(def.configSchema, values);
20907
+ const values = chunk3RNDJAZ5_cjs.applySchemaDefaults(def.configSchema, stored);
20908
+ const fieldsHtml = chunk3RNDJAZ5_cjs.renderSchemaFields(def.configSchema, values);
20909
20909
  const displayName = plugin?.display_name ?? def.displayName ?? def.id;
20910
20910
  return c.html(`<!DOCTYPE html>
20911
20911
  <html lang="en"><head>
@@ -20932,12 +20932,12 @@ adminPluginRoutes.post("/:id/configure", async (c) => {
20932
20932
  const user = c.get("user");
20933
20933
  const pluginId = c.req.param("id");
20934
20934
  if (user?.role !== "admin") return c.json({ error: "Access denied" }, 403);
20935
- const def = chunkKOXFYFOF_cjs.getPluginDefinition(pluginId);
20935
+ const def = chunk3RNDJAZ5_cjs.getPluginDefinition(pluginId);
20936
20936
  if (!def?.configSchema) return c.text("No schema-driven settings for this plugin", 404);
20937
20937
  const form = await c.req.formData();
20938
- const parsed = chunkKOXFYFOF_cjs.parseFormDataToSettings(def.configSchema, form);
20938
+ const parsed = chunk3RNDJAZ5_cjs.parseFormDataToSettings(def.configSchema, form);
20939
20939
  const db = c.env.DB;
20940
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
20940
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
20941
20941
  await pluginService.ensurePlugin(pluginId, {
20942
20942
  displayName: def.displayName ?? pluginId,
20943
20943
  version: def.version,
@@ -20961,7 +20961,7 @@ adminPluginRoutes.post("/:id/activate", async (c) => {
20961
20961
  if (user?.role !== "admin") {
20962
20962
  return c.json({ error: "Access denied" }, 403);
20963
20963
  }
20964
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
20964
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
20965
20965
  await pluginService.activatePlugin(pluginId);
20966
20966
  return c.json({ success: true });
20967
20967
  } catch (error) {
@@ -20978,7 +20978,7 @@ adminPluginRoutes.post("/:id/deactivate", async (c) => {
20978
20978
  if (user?.role !== "admin") {
20979
20979
  return c.json({ error: "Access denied" }, 403);
20980
20980
  }
20981
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
20981
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
20982
20982
  await pluginService.deactivatePlugin(pluginId);
20983
20983
  return c.json({ success: true });
20984
20984
  } catch (error) {
@@ -20995,8 +20995,8 @@ adminPluginRoutes.post("/install", async (c) => {
20995
20995
  return c.json({ error: "Access denied" }, 403);
20996
20996
  }
20997
20997
  const body = await c.req.json();
20998
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
20999
- const registryEntry = chunkKZIBF2EV_cjs.findPluginByCodeName(body.name) || chunkKZIBF2EV_cjs.PLUGIN_REGISTRY[body.name] || chunkKZIBF2EV_cjs.PLUGIN_REGISTRY[body.id];
20998
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
20999
+ const registryEntry = chunkC3KSTUEA_cjs.findPluginByCodeName(body.name) || chunkC3KSTUEA_cjs.PLUGIN_REGISTRY[body.name] || chunkC3KSTUEA_cjs.PLUGIN_REGISTRY[body.id];
21000
21000
  if (!registryEntry) {
21001
21001
  return c.json({ error: "Plugin not found in registry" }, 404);
21002
21002
  }
@@ -21029,7 +21029,7 @@ adminPluginRoutes.post("/:id/uninstall", async (c) => {
21029
21029
  if (user?.role !== "admin") {
21030
21030
  return c.json({ error: "Access denied" }, 403);
21031
21031
  }
21032
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
21032
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
21033
21033
  await pluginService.uninstallPlugin(pluginId);
21034
21034
  return c.json({ success: true });
21035
21035
  } catch (error) {
@@ -21047,7 +21047,7 @@ adminPluginRoutes.post("/:id/settings", async (c) => {
21047
21047
  return c.json({ error: "Access denied" }, 403);
21048
21048
  }
21049
21049
  const settings = await c.req.json();
21050
- const pluginService = new chunkKZIBF2EV_cjs.PluginService(db);
21050
+ const pluginService = new chunkC3KSTUEA_cjs.PluginService(db);
21051
21051
  await pluginService.updatePluginSettings(pluginId, settings);
21052
21052
  if (pluginId === "core-auth") {
21053
21053
  try {
@@ -21855,7 +21855,7 @@ function renderLogConfigPage(data) {
21855
21855
 
21856
21856
  // src/routes/admin-logs.ts
21857
21857
  var adminLogsRoutes = new hono.Hono();
21858
- adminLogsRoutes.use("*", chunkKMM45BTY_cjs.requireAuth());
21858
+ adminLogsRoutes.use("*", chunkZHQP75SR_cjs.requireAuth());
21859
21859
  adminLogsRoutes.get("/", async (c) => {
21860
21860
  try {
21861
21861
  const user = c.get("user");
@@ -22847,9 +22847,9 @@ function renderStorageUsage(databaseSizeBytes, mediaSizeBytes) {
22847
22847
  }
22848
22848
 
22849
22849
  // src/routes/admin-dashboard.ts
22850
- var VERSION = chunk3XFA3E2F_cjs.getCoreVersion();
22850
+ var VERSION = chunkKDRHGEUF_cjs.getCoreVersion();
22851
22851
  var router = new hono.Hono();
22852
- router.use("*", chunkKMM45BTY_cjs.requireAuth());
22852
+ router.use("*", chunkZHQP75SR_cjs.requireAuth());
22853
22853
  router.get("/", async (c) => {
22854
22854
  const user = c.get("user");
22855
22855
  try {
@@ -24814,7 +24814,7 @@ function renderCollectionFormPage(data) {
24814
24814
  // src/routes/admin-collections.ts
24815
24815
  chunkK623Q6WD_cjs.init_admin_layout_catalyst_template();
24816
24816
  var adminCollectionsRoutes = new hono.Hono();
24817
- adminCollectionsRoutes.use("*", chunkKMM45BTY_cjs.requireAuth());
24817
+ adminCollectionsRoutes.use("*", chunkZHQP75SR_cjs.requireAuth());
24818
24818
  adminCollectionsRoutes.get("/", async (c) => {
24819
24819
  try {
24820
24820
  const user = c.get("user");
@@ -24831,7 +24831,7 @@ adminCollectionsRoutes.get("/", async (c) => {
24831
24831
  results = queryResults.results ?? [];
24832
24832
  } catch (e) {
24833
24833
  }
24834
- const codeCollections = chunkKZIBF2EV_cjs.getCollectionRegistry().list();
24834
+ const codeCollections = chunkC3KSTUEA_cjs.getCollectionRegistry().list();
24835
24835
  const codeCollectionsMap = new Map(
24836
24836
  codeCollections.map((cfg) => {
24837
24837
  const fieldCount = cfg.schema?.properties ? Object.keys(cfg.schema.properties).length : 0;
@@ -24845,7 +24845,7 @@ adminCollectionsRoutes.get("/", async (c) => {
24845
24845
  field_count: fieldCount,
24846
24846
  managed: cfg.managed !== false,
24847
24847
  source_type: "code",
24848
- internal: chunkKZIBF2EV_cjs.isCodeCollectionInternal(cfg),
24848
+ internal: chunkC3KSTUEA_cjs.isCodeCollectionInternal(cfg),
24849
24849
  versioning: cfg.versioning === true
24850
24850
  }];
24851
24851
  })
@@ -24884,7 +24884,7 @@ adminCollectionsRoutes.get("/", async (c) => {
24884
24884
  field_count: fieldCount,
24885
24885
  managed: false,
24886
24886
  source_type: row.source === "code" || row.source === "system" || row.source === "plugin" ? "code" : "user",
24887
- internal: chunkKZIBF2EV_cjs.isDbDocTypeInternal(row.source),
24887
+ internal: chunkC3KSTUEA_cjs.isDbDocTypeInternal(row.source),
24888
24888
  versioning: dbVersioning
24889
24889
  };
24890
24890
  });
@@ -25045,7 +25045,7 @@ export const myPlugin = definePlugin({
25045
25045
  title: "Add a Collection",
25046
25046
  pageTitle: "Add a Collection",
25047
25047
  currentPath: "/admin/collections",
25048
- version: chunk3XFA3E2F_cjs.getCoreVersion(),
25048
+ version: chunkKDRHGEUF_cjs.getCoreVersion(),
25049
25049
  user: u ? { name: u.email ?? "Admin", email: u.email ?? "", role: u.role ?? "admin" } : void 0,
25050
25050
  content
25051
25051
  })
@@ -25062,7 +25062,7 @@ adminCollectionsRoutes.get("/:id", async (c) => {
25062
25062
  collection = await stmt.bind(id).first();
25063
25063
  } catch {
25064
25064
  }
25065
- const registryRecord = chunkKZIBF2EV_cjs.getCollectionRegistry().getById(id) ?? chunkKZIBF2EV_cjs.getCollectionRegistry().getByName(id);
25065
+ const registryRecord = chunkC3KSTUEA_cjs.getCollectionRegistry().getById(id) ?? chunkC3KSTUEA_cjs.getCollectionRegistry().getByName(id);
25066
25066
  if (!collection && !registryRecord) {
25067
25067
  const formData2 = {
25068
25068
  isEdit: true,
@@ -25109,9 +25109,9 @@ adminCollectionsRoutes.get("/:id", async (c) => {
25109
25109
  isCodeDriven = true;
25110
25110
  }
25111
25111
  const [tinymceActive, quillActive, mdxeditorActive] = await Promise.all([
25112
- chunkKMM45BTY_cjs.isPluginActive(db, "tinymce-plugin"),
25113
- chunkKMM45BTY_cjs.isPluginActive(db, "quill-editor"),
25114
- chunkKMM45BTY_cjs.isPluginActive(db, "easy-mdx")
25112
+ chunkZHQP75SR_cjs.isPluginActive(db, "tinymce-plugin"),
25113
+ chunkZHQP75SR_cjs.isPluginActive(db, "quill-editor"),
25114
+ chunkZHQP75SR_cjs.isPluginActive(db, "easy-mdx")
25115
25115
  ]);
25116
25116
  const displayName = collection?.display_name ?? registryRecord?.displayName ?? id;
25117
25117
  const formData = {
@@ -25131,9 +25131,9 @@ adminCollectionsRoutes.get("/:id", async (c) => {
25131
25131
  console.error("Error fetching collection:", error);
25132
25132
  const user = c.get("user");
25133
25133
  const [tinymceActive, quillActive, mdxeditorActive] = await Promise.all([
25134
- chunkKMM45BTY_cjs.isPluginActive(db, "tinymce-plugin"),
25135
- chunkKMM45BTY_cjs.isPluginActive(db, "quill-editor"),
25136
- chunkKMM45BTY_cjs.isPluginActive(db, "easy-mdx")
25134
+ chunkZHQP75SR_cjs.isPluginActive(db, "tinymce-plugin"),
25135
+ chunkZHQP75SR_cjs.isPluginActive(db, "quill-editor"),
25136
+ chunkZHQP75SR_cjs.isPluginActive(db, "easy-mdx")
25137
25137
  ]);
25138
25138
  const formData = {
25139
25139
  isEdit: true,
@@ -26082,7 +26082,7 @@ function renderDatabaseToolsSettings(settings) {
26082
26082
 
26083
26083
  // src/routes/admin-settings.ts
26084
26084
  var adminSettingsRoutes = new hono.Hono();
26085
- adminSettingsRoutes.use("*", chunkKMM45BTY_cjs.requireAuth());
26085
+ adminSettingsRoutes.use("*", chunkZHQP75SR_cjs.requireAuth());
26086
26086
  function getMockSettings(user) {
26087
26087
  return {
26088
26088
  general: {
@@ -26185,7 +26185,7 @@ adminSettingsRoutes.get("/database-tools", (c) => {
26185
26185
  adminSettingsRoutes.get("/api/migrations/status", async (c) => {
26186
26186
  try {
26187
26187
  const db = c.env.DB;
26188
- const migrationService = new chunkIA24HACT_cjs.MigrationService(db);
26188
+ const migrationService = new chunk7YMMCIWY_cjs.MigrationService(db);
26189
26189
  const status = await migrationService.getMigrationStatus();
26190
26190
  return c.json({
26191
26191
  success: true,
@@ -26225,7 +26225,7 @@ adminSettingsRoutes.post("/api/migrations/run", async (c) => {
26225
26225
  adminSettingsRoutes.get("/api/migrations/validate", async (c) => {
26226
26226
  try {
26227
26227
  const db = c.env.DB;
26228
- const migrationService = new chunkIA24HACT_cjs.MigrationService(db);
26228
+ const migrationService = new chunk7YMMCIWY_cjs.MigrationService(db);
26229
26229
  const validation = await migrationService.validateSchema();
26230
26230
  return c.json({
26231
26231
  success: true,
@@ -26818,16 +26818,16 @@ function renderAPIReferencePage(data) {
26818
26818
  }
26819
26819
 
26820
26820
  // src/routes/admin-api-reference.ts
26821
- var VERSION2 = chunk3XFA3E2F_cjs.getCoreVersion();
26821
+ var VERSION2 = chunkKDRHGEUF_cjs.getCoreVersion();
26822
26822
  var router2 = new hono.Hono();
26823
- router2.use("*", chunkKMM45BTY_cjs.requireAuth());
26823
+ router2.use("*", chunkZHQP75SR_cjs.requireAuth());
26824
26824
  router2.get("/", async (c) => {
26825
26825
  const user = c.get("user");
26826
26826
  try {
26827
26827
  const app2 = chunk4BTBSXMR_cjs.getAppInstance();
26828
26828
  const baseEndpoints = chunk4BTBSXMR_cjs.buildRouteList(app2);
26829
26829
  const collectionRoutes = [];
26830
- const collections = chunkKZIBF2EV_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal);
26830
+ const collections = chunkC3KSTUEA_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal);
26831
26831
  const methodOrder = { GET: 0, POST: 1, PUT: 2, PATCH: 3, DELETE: 4 };
26832
26832
  for (const col of collections) {
26833
26833
  const displayName = col.displayName || col.name;
@@ -26944,5 +26944,5 @@ exports.setVariablesCache = setVariablesCache;
26944
26944
  exports.test_cleanup_default = test_cleanup_default;
26945
26945
  exports.userProfilesPlugin = userProfilesPlugin;
26946
26946
  exports.userRoutes = userRoutes;
26947
- //# sourceMappingURL=chunk-SC2WZFNQ.cjs.map
26948
- //# sourceMappingURL=chunk-SC2WZFNQ.cjs.map
26947
+ //# sourceMappingURL=chunk-NOBU34HS.cjs.map
26948
+ //# sourceMappingURL=chunk-NOBU34HS.cjs.map