@sonicjs-cms/core 3.0.0-beta.14 → 3.0.0-beta.15

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 (85) hide show
  1. package/dist/{app-Bo0X1OWX.d.ts → app-01M0dIwt.d.ts} +1 -1
  2. package/dist/{app-Do66yCcV.d.cts → app-aj39TGHB.d.cts} +1 -1
  3. package/dist/{chunk-H5FB6GKR.cjs → chunk-4AB3PQHF.cjs} +2 -2
  4. package/dist/{chunk-H5FB6GKR.cjs.map → chunk-4AB3PQHF.cjs.map} +1 -1
  5. package/dist/{chunk-INE5E3SL.js → chunk-4ENXIP4M.js} +27 -2
  6. package/dist/chunk-4ENXIP4M.js.map +1 -0
  7. package/dist/{chunk-5L6EMI7A.js → chunk-75WXXLAU.js} +4 -4
  8. package/dist/{chunk-5L6EMI7A.js.map → chunk-75WXXLAU.js.map} +1 -1
  9. package/dist/{chunk-SSOP7G4R.cjs → chunk-BDQOPRA3.cjs} +220 -219
  10. package/dist/chunk-BDQOPRA3.cjs.map +1 -0
  11. package/dist/{chunk-U7T5EOHJ.js → chunk-CE6POA7A.js} +4 -4
  12. package/dist/{chunk-U7T5EOHJ.js.map → chunk-CE6POA7A.js.map} +1 -1
  13. package/dist/{chunk-G5LC7MYH.cjs → chunk-FVI3H6RG.cjs} +10 -10
  14. package/dist/{chunk-G5LC7MYH.cjs.map → chunk-FVI3H6RG.cjs.map} +1 -1
  15. package/dist/{chunk-WIV3R2MJ.cjs → chunk-FXZSZ7C7.cjs} +27 -2
  16. package/dist/chunk-FXZSZ7C7.cjs.map +1 -0
  17. package/dist/{chunk-O32IZ6JS.js → chunk-GQXVDFIG.js} +43 -5
  18. package/dist/chunk-GQXVDFIG.js.map +1 -0
  19. package/dist/{chunk-75JKPNUZ.js → chunk-IQZA2OY5.js} +3 -3
  20. package/dist/{chunk-75JKPNUZ.js.map → chunk-IQZA2OY5.js.map} +1 -1
  21. package/dist/{chunk-QNPT6BQP.js → chunk-JRLADH5B.js} +3 -3
  22. package/dist/{chunk-QNPT6BQP.js.map → chunk-JRLADH5B.js.map} +1 -1
  23. package/dist/{chunk-ZTEJHSYS.cjs → chunk-KMCLNO4K.cjs} +5 -5
  24. package/dist/{chunk-ZTEJHSYS.cjs.map → chunk-KMCLNO4K.cjs.map} +1 -1
  25. package/dist/{chunk-HNUGMALL.js → chunk-L3VIH6U4.js} +15 -15
  26. package/dist/chunk-L3VIH6U4.js.map +1 -0
  27. package/dist/{chunk-SIPBHWMG.cjs → chunk-PK3ODTAL.cjs} +4 -4
  28. package/dist/{chunk-SIPBHWMG.cjs.map → chunk-PK3ODTAL.cjs.map} +1 -1
  29. package/dist/{chunk-4YRYGDCQ.cjs → chunk-PTTFLUEX.cjs} +4 -4
  30. package/dist/{chunk-4YRYGDCQ.cjs.map → chunk-PTTFLUEX.cjs.map} +1 -1
  31. package/dist/{chunk-32SDMKZ7.js → chunk-VOAP3KFU.js} +2 -2
  32. package/dist/{chunk-32SDMKZ7.js.map → chunk-VOAP3KFU.js.map} +1 -1
  33. package/dist/{chunk-IESEVHXL.js → chunk-VVYVFCML.js} +12 -3
  34. package/dist/chunk-VVYVFCML.js.map +1 -0
  35. package/dist/{chunk-HIKBY7MS.cjs → chunk-XWVDSM2L.cjs} +12 -3
  36. package/dist/chunk-XWVDSM2L.cjs.map +1 -0
  37. package/dist/{chunk-L3KHLEHL.cjs → chunk-ZBDDZYA3.cjs} +53 -15
  38. package/dist/chunk-ZBDDZYA3.cjs.map +1 -0
  39. package/dist/config-SM2UWSDN.js +6 -0
  40. package/dist/{config-PLJTDINX.js.map → config-SM2UWSDN.js.map} +1 -1
  41. package/dist/config-YCRSU7ZP.cjs +19 -0
  42. package/dist/{config-FLOUCYHH.cjs.map → config-YCRSU7ZP.cjs.map} +1 -1
  43. package/dist/{define-plugin-BzNHc1ZI.d.ts → define-plugin-BYIey6sp.d.ts} +1 -1
  44. package/dist/{define-plugin-IWDKYaVm.d.cts → define-plugin-DsKiGu1q.d.cts} +1 -1
  45. package/dist/index.cjs +754 -296
  46. package/dist/index.cjs.map +1 -1
  47. package/dist/index.d.cts +17 -6
  48. package/dist/index.d.ts +17 -6
  49. package/dist/index.js +512 -56
  50. package/dist/index.js.map +1 -1
  51. package/dist/middleware.cjs +33 -33
  52. package/dist/middleware.d.cts +2 -2
  53. package/dist/middleware.d.ts +2 -2
  54. package/dist/middleware.js +4 -4
  55. package/dist/migrations-6R2N6G2P.js +4 -0
  56. package/dist/{migrations-DOPZXFK3.js.map → migrations-6R2N6G2P.js.map} +1 -1
  57. package/dist/migrations-X3UX24QG.cjs +13 -0
  58. package/dist/{migrations-TYYC66P4.cjs.map → migrations-X3UX24QG.cjs.map} +1 -1
  59. package/dist/plugins.cjs +40 -40
  60. package/dist/plugins.d.cts +2 -2
  61. package/dist/plugins.d.ts +2 -2
  62. package/dist/plugins.js +3 -3
  63. package/dist/routes.cjs +27 -27
  64. package/dist/routes.d.cts +2 -2
  65. package/dist/routes.d.ts +2 -2
  66. package/dist/routes.js +7 -7
  67. package/dist/services.cjs +18 -18
  68. package/dist/services.js +2 -2
  69. package/dist/{types-Dea1eNxU.d.cts → types-DT7XN5TX.d.cts} +1 -1
  70. package/dist/{types-Dea1eNxU.d.ts → types-DT7XN5TX.d.ts} +1 -1
  71. package/dist/utils.cjs +3 -3
  72. package/dist/utils.js +1 -1
  73. package/package.json +2 -2
  74. package/dist/chunk-HIKBY7MS.cjs.map +0 -1
  75. package/dist/chunk-HNUGMALL.js.map +0 -1
  76. package/dist/chunk-IESEVHXL.js.map +0 -1
  77. package/dist/chunk-INE5E3SL.js.map +0 -1
  78. package/dist/chunk-L3KHLEHL.cjs.map +0 -1
  79. package/dist/chunk-O32IZ6JS.js.map +0 -1
  80. package/dist/chunk-SSOP7G4R.cjs.map +0 -1
  81. package/dist/chunk-WIV3R2MJ.cjs.map +0 -1
  82. package/dist/config-FLOUCYHH.cjs +0 -19
  83. package/dist/config-PLJTDINX.js +0 -6
  84. package/dist/migrations-DOPZXFK3.js +0 -4
  85. package/dist/migrations-TYYC66P4.cjs +0 -13
@@ -1,20 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var chunkHIKBY7MS_cjs = require('./chunk-HIKBY7MS.cjs');
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 chunkL3KHLEHL_cjs = require('./chunk-L3KHLEHL.cjs');
6
+ var chunkZBDDZYA3_cjs = require('./chunk-ZBDDZYA3.cjs');
7
7
  var chunkW36OZTJ5_cjs = require('./chunk-W36OZTJ5.cjs');
8
8
  var chunkJEQ7FLOD_cjs = require('./chunk-JEQ7FLOD.cjs');
9
- var chunkWIV3R2MJ_cjs = require('./chunk-WIV3R2MJ.cjs');
10
- var chunkH5FB6GKR_cjs = require('./chunk-H5FB6GKR.cjs');
9
+ var chunkFXZSZ7C7_cjs = require('./chunk-FXZSZ7C7.cjs');
10
+ var chunk4AB3PQHF_cjs = require('./chunk-4AB3PQHF.cjs');
11
11
  var chunkPXNTCCPE_cjs = require('./chunk-PXNTCCPE.cjs');
12
12
  var chunkK623Q6WD_cjs = require('./chunk-K623Q6WD.cjs');
13
- var chunk4YRYGDCQ_cjs = require('./chunk-4YRYGDCQ.cjs');
13
+ var chunkPTTFLUEX_cjs = require('./chunk-PTTFLUEX.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 chunkSIPBHWMG_cjs = require('./chunk-SIPBHWMG.cjs');
17
+ var chunkPK3ODTAL_cjs = require('./chunk-PK3ODTAL.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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db).findById(row.type_id);
259
+ const docType = preloadedType ?? await new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db);
277
+ const registry = new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db).findById(row.type_id);
359
+ const docType = await new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db).findById(row.type_id);
395
+ const docType = await new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db).findById(row.type_id);
465
+ const docType = await new chunkZBDDZYA3_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("*", chunkL3KHLEHL_cjs.requireAuth());
472
- adminDocumentsRoutes.use("*", chunkL3KHLEHL_cjs.requireRole(["admin", "editor"]));
471
+ adminDocumentsRoutes.use("*", chunkZBDDZYA3_cjs.requireAuth());
472
+ adminDocumentsRoutes.use("*", chunkZBDDZYA3_cjs.requireRole(["admin", "editor"]));
473
473
  adminDocumentsRoutes.get("/types", async (c) => {
474
474
  try {
475
- const registry = new chunkL3KHLEHL_cjs.DocumentTypeRegistry(c.env.DB);
475
+ const registry = new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db);
503
+ const registry = new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db);
614
+ const registry = new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db);
746
+ const registry = new chunkZBDDZYA3_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry();
900
+ const registry = chunkFXZSZ7C7_cjs.getCollectionRegistry();
901
901
  const record = registry.getBySlugOrName(collectionIdOrName) ?? registry.getById(collectionIdOrName);
902
902
  if (record) {
903
- const docType2 = await new chunkL3KHLEHL_cjs.DocumentTypeRegistry(db).findById(record.name);
903
+ const docType2 = await new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db).findById(collectionIdOrName);
906
+ const docType = await new chunkZBDDZYA3_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", chunkL3KHLEHL_cjs.optionalAuth(), async (c) => {
949
+ apiContentCrudRoutes.get("/:id", chunkZBDDZYA3_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", chunkL3KHLEHL_cjs.optionalAuth(), async (c) =>
956
956
  ).bind(id, getRequestTenant(c)).first();
957
957
  let transformedContent;
958
958
  if (docRow) {
959
- const coll = chunkWIV3R2MJ_cjs.getCollectionRegistry().getByName(docRow.type_id);
959
+ const coll = chunkFXZSZ7C7_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", chunkL3KHLEHL_cjs.optionalAuth(), async (c) =>
990
990
  }, 500);
991
991
  }
992
992
  });
993
- apiContentCrudRoutes.post("/", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
993
+ apiContentCrudRoutes.post("/", chunkZBDDZYA3_cjs.requireAuth(), chunkZBDDZYA3_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("/", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL_cj
1065
1065
  }, 500);
1066
1066
  }
1067
1067
  });
1068
- apiContentCrudRoutes.put("/:id", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
1068
+ apiContentCrudRoutes.put("/:id", chunkZBDDZYA3_cjs.requireAuth(), chunkZBDDZYA3_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", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL_
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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db).findById(docRow.type_id);
1090
+ const docType = await new chunkZBDDZYA3_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", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL_
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 = chunkWIV3R2MJ_cjs.getCollectionRegistry().getByName(docRow.type_id);
1113
+ const coll = chunkFXZSZ7C7_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", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL_
1131
1131
  }, 500);
1132
1132
  }
1133
1133
  });
1134
- apiContentCrudRoutes.delete("/:id", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
1134
+ apiContentCrudRoutes.delete("/:id", chunkZBDDZYA3_cjs.requireAuth(), chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.isPluginActive(c.env.DB, "core-cache");
1260
+ const cacheEnabled = await chunkZBDDZYA3_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: chunkSIPBHWMG_cjs.getCoreVersion(),
1283
+ version: chunkPK3ODTAL_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal);
1714
- const transformedResults = records.map(chunkWIV3R2MJ_cjs.collectionRecordToRow);
1713
+ const records = chunkFXZSZ7C7_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal);
1714
+ const transformedResults = records.map(chunkFXZSZ7C7_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", chunkL3KHLEHL_cjs.optionalAuth(), async (c) => {
1735
+ apiRoutes.get("/content", chunkZBDDZYA3_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", chunkL3KHLEHL_cjs.optionalAuth(), async (c) => {
1741
1741
  const collIdByName = /* @__PURE__ */ new Map();
1742
1742
  let typeId;
1743
1743
  let typeIds;
1744
- const registry = chunkWIV3R2MJ_cjs.getCollectionRegistry();
1744
+ const registry = chunkFXZSZ7C7_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", chunkL3KHLEHL_cjs.optionalAuth(), async (c) => {
1840
1840
  }, 500);
1841
1841
  }
1842
1842
  });
1843
- apiRoutes.get("/collections/:collection/content", chunkL3KHLEHL_cjs.optionalAuth(), async (c) => {
1843
+ apiRoutes.get("/collections/:collection/content", chunkZBDDZYA3_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry().getBySlugOrName(collection);
1849
+ const record = chunkFXZSZ7C7_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", chunkL3KHLEHL_cjs.optionalAuth
1902
1902
  const responseData = {
1903
1903
  data: transformedResults,
1904
1904
  meta: addTimingMeta(c, {
1905
- ...includeCollection ? { collection: chunkWIV3R2MJ_cjs.collectionRecordToRow(record) } : {},
1905
+ ...includeCollection ? { collection: chunkFXZSZ7C7_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", chunkL3KHLEHL_cjs.optionalAuth
1927
1927
  }
1928
1928
  });
1929
1929
  apiRoutes.route("/content", api_content_crud_default);
1930
- apiRoutes.get("/:collection", chunkL3KHLEHL_cjs.optionalAuth(), async (c) => {
1930
+ apiRoutes.get("/:collection", chunkZBDDZYA3_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry().getBySlugOrName(collection);
1936
+ const record = chunkFXZSZ7C7_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", chunkL3KHLEHL_cjs.optionalAuth(), async (c) => {
1973
1973
  const responseData = {
1974
1974
  data: transformedResults,
1975
1975
  meta: addTimingMeta(c, {
1976
- ...includeCollection ? { collection: chunkWIV3R2MJ_cjs.collectionRecordToRow(record) } : {},
1976
+ ...includeCollection ? { collection: chunkFXZSZ7C7_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", chunkL3KHLEHL_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", chunkL3KHLEHL_cjs.optionalAuth(), async (c) => {
1994
+ apiRoutes.get("/:collection/:id", chunkZBDDZYA3_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry().getBySlugOrName(collection);
1999
+ const record = chunkFXZSZ7C7_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", chunkL3KHLEHL_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry().getByName(docRow.type_id);
2008
+ const coll = chunkFXZSZ7C7_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", chunkL3KHLEHL_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", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
2026
+ apiRoutes.post("/:collection", chunkZBDDZYA3_cjs.requireAuth(), chunkZBDDZYA3_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", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL_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", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
2059
+ apiRoutes.put("/:collection/:id", chunkZBDDZYA3_cjs.requireAuth(), chunkZBDDZYA3_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry().getBySlugOrName(collection);
2066
+ const collRecord = chunkFXZSZ7C7_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", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL
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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db).findById(docRow.type_id);
2078
+ const docType = await new chunkZBDDZYA3_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", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL
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 = chunkWIV3R2MJ_cjs.getCollectionRegistry().getByName(docRow.type_id);
2095
+ const coll = chunkFXZSZ7C7_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", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL
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", chunkL3KHLEHL_cjs.requireAuth(), chunkL3KHLEHL_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
2107
+ apiRoutes.delete("/:collection/:id", chunkZBDDZYA3_cjs.requireAuth(), chunkZBDDZYA3_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry().getBySlugOrName(collection);
2113
+ const collRecord = chunkFXZSZ7C7_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("*", chunkL3KHLEHL_cjs.requireAuth());
2328
+ apiMediaRoutes.use("*", chunkZBDDZYA3_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal).map((r) => r.name);
3026
+ const typeIds = chunkFXZSZ7C7_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("*", chunkL3KHLEHL_cjs.requireAuth());
3102
- adminApiRoutes.use("*", chunkL3KHLEHL_cjs.requireRole(["admin", "editor"]));
3101
+ adminApiRoutes.use("*", chunkZBDDZYA3_cjs.requireAuth());
3102
+ adminApiRoutes.use("*", chunkZBDDZYA3_cjs.requireRole(["admin", "editor"]));
3103
3103
  adminApiRoutes.get("/stats", async (c) => {
3104
3104
  try {
3105
3105
  const db = c.env.DB;
3106
- const userCollections = chunkWIV3R2MJ_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal);
3106
+ const userCollections = chunkFXZSZ7C7_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry().list().filter((r) => !r.internal);
3197
+ let records = chunkFXZSZ7C7_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry();
3229
+ const registry = chunkFXZSZ7C7_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 = chunkWIV3R2MJ_cjs.getCollectionRegistry();
3279
+ const registry = chunkFXZSZ7C7_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-TYYC66P4.cjs');
3394
+ const { MigrationService: MigrationService2 } = await import('./migrations-X3UX24QG.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-TYYC66P4.cjs');
3437
+ const { MigrationService: MigrationService2 } = await import('./migrations-X3UX24QG.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 = chunk4YRYGDCQ_cjs.createServiceSingleton("EmailService");
3852
+ var singleton = chunkPTTFLUEX_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 = chunk4YRYGDCQ_cjs.definePlugin({
4660
+ var lexicalEditorPlugin = chunkPTTFLUEX_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 = chunk4YRYGDCQ_cjs.definePlugin({
7066
+ var userProfilesPlugin = chunkPTTFLUEX_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 chunkL3KHLEHL_cjs.generateCsrfToken(secret);
7105
- const cookieMaxAge = await chunkL3KHLEHL_cjs.getJwtExpirySecondsFromDb(c.env?.DB, c.env);
7104
+ const csrfToken = await chunkZBDDZYA3_cjs.generateCsrfToken(secret);
7105
+ const cookieMaxAge = await chunkZBDDZYA3_cjs.getJwtExpirySecondsFromDb(c.env?.DB, c.env);
7106
7106
  cookie.setCookie(c, "csrf_token", csrfToken, {
7107
7107
  httpOnly: false,
7108
7108
  secure: !isDev,
@@ -7142,9 +7142,9 @@ authRoutes.get("/login", async (c) => {
7142
7142
  });
7143
7143
  authRoutes.get("/register", async (c) => {
7144
7144
  const db = c.env.DB;
7145
- const isFirstUser = await chunkHIKBY7MS_cjs.isFirstUserRegistration(db);
7145
+ const isFirstUser = await chunkXWVDSM2L_cjs.isFirstUserRegistration(db);
7146
7146
  if (!isFirstUser) {
7147
- const registrationEnabled = await chunkHIKBY7MS_cjs.isRegistrationEnabled(db);
7147
+ const registrationEnabled = await chunkXWVDSM2L_cjs.isRegistrationEnabled(db);
7148
7148
  if (!registrationEnabled) {
7149
7149
  return c.redirect("/auth/login?error=Registration is currently disabled");
7150
7150
  }
@@ -7161,13 +7161,13 @@ var loginSchema = zod.z.object({
7161
7161
  });
7162
7162
  authRoutes.post(
7163
7163
  "/register",
7164
- chunkL3KHLEHL_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "register" }),
7164
+ chunkZBDDZYA3_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "register" }),
7165
7165
  async (c) => {
7166
7166
  try {
7167
7167
  const db = c.env.DB;
7168
- const isFirstUser = await chunkHIKBY7MS_cjs.isFirstUserRegistration(db);
7168
+ const isFirstUser = await chunkXWVDSM2L_cjs.isFirstUserRegistration(db);
7169
7169
  if (!isFirstUser) {
7170
- const registrationEnabled = await chunkHIKBY7MS_cjs.isRegistrationEnabled(db);
7170
+ const registrationEnabled = await chunkXWVDSM2L_cjs.isRegistrationEnabled(db);
7171
7171
  if (!registrationEnabled) {
7172
7172
  return c.json({ error: "Registration is currently disabled" }, 403);
7173
7173
  }
@@ -7178,7 +7178,7 @@ authRoutes.post(
7178
7178
  } catch (parseError) {
7179
7179
  return c.json({ error: "Invalid JSON in request body" }, 400);
7180
7180
  }
7181
- const validationSchema = await chunkHIKBY7MS_cjs.authValidationService.buildRegistrationSchema(db);
7181
+ const validationSchema = await chunkXWVDSM2L_cjs.authValidationService.buildRegistrationSchema(db);
7182
7182
  let validatedData;
7183
7183
  try {
7184
7184
  validatedData = await validationSchema.parseAsync(requestData);
@@ -7190,14 +7190,14 @@ authRoutes.post(
7190
7190
  }
7191
7191
  const email = validatedData.email;
7192
7192
  const password = validatedData.password;
7193
- const firstName = validatedData.firstName || chunkHIKBY7MS_cjs.authValidationService.generateDefaultValue("firstName", validatedData);
7194
- const lastName = validatedData.lastName || chunkHIKBY7MS_cjs.authValidationService.generateDefaultValue("lastName", validatedData);
7193
+ const firstName = validatedData.firstName || chunkXWVDSM2L_cjs.authValidationService.generateDefaultValue("firstName", validatedData);
7194
+ const lastName = validatedData.lastName || chunkXWVDSM2L_cjs.authValidationService.generateDefaultValue("lastName", validatedData);
7195
7195
  const normalizedEmail = email.toLowerCase();
7196
7196
  const existingUser = await db.prepare("SELECT id FROM auth_user WHERE email = ?").bind(normalizedEmail).first();
7197
7197
  if (existingUser) {
7198
7198
  return c.json({ error: "User with this email already exists" }, 400);
7199
7199
  }
7200
- const passwordHash = await chunkL3KHLEHL_cjs.AuthManager.hashPassword(password);
7200
+ const passwordHash = await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7234
- const token = await chunkL3KHLEHL_cjs.AuthManager.generateToken(userId, normalizedEmail, "viewer", c.env.JWT_SECRET, tokenTtl);
7233
+ const tokenTtl = await chunkZBDDZYA3_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7234
+ const token = await chunkZBDDZYA3_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
- chunkL3KHLEHL_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "login" }),
7266
+ chunkZBDDZYA3_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "login" }),
7267
7267
  async (c) => {
7268
7268
  try {
7269
7269
  const body = await c.req.json();
@@ -7273,7 +7273,7 @@ authRoutes.post(
7273
7273
  }
7274
7274
  const { email, password } = validation.data;
7275
7275
  const normalizedEmail = email.toLowerCase();
7276
- const { createAuth } = await import('./config-FLOUCYHH.cjs');
7276
+ const { createAuth } = await import('./config-YCRSU7ZP.cjs');
7277
7277
  const auth = createAuth(c.env);
7278
7278
  const baReq = new Request(new URL("/auth/sign-in/email", c.req.url).href, {
7279
7279
  method: "POST",
@@ -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 chunkL3KHLEHL_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7299
- const token = await chunkL3KHLEHL_cjs.AuthManager.generateToken(
7298
+ const tokenTtl = await chunkZBDDZYA3_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7299
+ const token = await chunkZBDDZYA3_cjs.AuthManager.generateToken(
7300
7300
  user.id,
7301
7301
  user.email,
7302
7302
  user.role ?? "viewer",
@@ -7327,7 +7327,7 @@ authRoutes.post(
7327
7327
  );
7328
7328
  authRoutes.post("/logout", async (c) => {
7329
7329
  try {
7330
- const { createAuth } = await import('./config-FLOUCYHH.cjs');
7330
+ const { createAuth } = await import('./config-YCRSU7ZP.cjs');
7331
7331
  const auth = createAuth(c.env);
7332
7332
  const baReq = new Request(new URL("/auth/sign-out", c.req.url).href, {
7333
7333
  method: "POST",
@@ -7343,7 +7343,7 @@ authRoutes.post("/logout", async (c) => {
7343
7343
  });
7344
7344
  authRoutes.get("/logout", async (c) => {
7345
7345
  try {
7346
- const { createAuth } = await import('./config-FLOUCYHH.cjs');
7346
+ const { createAuth } = await import('./config-YCRSU7ZP.cjs');
7347
7347
  const auth = createAuth(c.env);
7348
7348
  const baReq = new Request(new URL("/auth/sign-out", c.req.url).href, {
7349
7349
  method: "POST",
@@ -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", chunkL3KHLEHL_cjs.requireAuth(), async (c) => {
7360
+ authRoutes.get("/me", chunkZBDDZYA3_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", chunkL3KHLEHL_cjs.requireAuth(), async (c) => {
7377
7377
  });
7378
7378
  authRoutes.post(
7379
7379
  "/refresh",
7380
- chunkL3KHLEHL_cjs.rateLimit({ max: 60, windowMs: 60 * 1e3, keyPrefix: "refresh" }),
7380
+ chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.getJwtRefreshGraceSecondsFromDb(db, c.env);
7390
- const payload = await chunkL3KHLEHL_cjs.AuthManager.verifyToken(token, c.env.JWT_SECRET, grace);
7389
+ const grace = await chunkZBDDZYA3_cjs.getJwtRefreshGraceSecondsFromDb(db, c.env);
7390
+ const payload = await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.getJwtExpirySecondsFromDb(db, c.env);
7399
- const newToken = await chunkL3KHLEHL_cjs.AuthManager.generateToken(row.id, row.email, row.role, c.env.JWT_SECRET, tokenTtl);
7398
+ const tokenTtl = await chunkZBDDZYA3_cjs.getJwtExpirySecondsFromDb(db, c.env);
7399
+ const newToken = await chunkZBDDZYA3_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,13 +7416,13 @@ authRoutes.post(
7416
7416
  );
7417
7417
  authRoutes.post(
7418
7418
  "/register/form",
7419
- chunkL3KHLEHL_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "register" }),
7419
+ chunkZBDDZYA3_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "register" }),
7420
7420
  async (c) => {
7421
7421
  try {
7422
7422
  const db = c.env.DB;
7423
- const isFirstUser = await chunkHIKBY7MS_cjs.isFirstUserRegistration(db);
7423
+ const isFirstUser = await chunkXWVDSM2L_cjs.isFirstUserRegistration(db);
7424
7424
  if (!isFirstUser) {
7425
- const registrationEnabled = await chunkHIKBY7MS_cjs.isRegistrationEnabled(db);
7425
+ const registrationEnabled = await chunkXWVDSM2L_cjs.isRegistrationEnabled(db);
7426
7426
  if (!registrationEnabled) {
7427
7427
  return c.html(html.html`
7428
7428
  <div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded">
@@ -7440,7 +7440,7 @@ authRoutes.post(
7440
7440
  };
7441
7441
  const normalizedEmail = requestData.email?.toLowerCase();
7442
7442
  requestData.email = normalizedEmail;
7443
- const validationSchema = await chunkHIKBY7MS_cjs.authValidationService.buildRegistrationSchema(db);
7443
+ const validationSchema = await chunkXWVDSM2L_cjs.authValidationService.buildRegistrationSchema(db);
7444
7444
  const validation = await validationSchema.safeParseAsync(requestData);
7445
7445
  if (!validation.success) {
7446
7446
  return c.html(html.html`
@@ -7451,8 +7451,8 @@ authRoutes.post(
7451
7451
  }
7452
7452
  const validatedData = validation.data;
7453
7453
  const password = validatedData.password;
7454
- const firstName = validatedData.firstName || chunkHIKBY7MS_cjs.authValidationService.generateDefaultValue("firstName", validatedData);
7455
- const lastName = validatedData.lastName || chunkHIKBY7MS_cjs.authValidationService.generateDefaultValue("lastName", validatedData);
7454
+ const firstName = validatedData.firstName || chunkXWVDSM2L_cjs.authValidationService.generateDefaultValue("firstName", validatedData);
7455
+ const lastName = validatedData.lastName || chunkXWVDSM2L_cjs.authValidationService.generateDefaultValue("lastName", validatedData);
7456
7456
  const existingUser = await db.prepare("SELECT id FROM auth_user WHERE email = ?").bind(normalizedEmail).first();
7457
7457
  if (existingUser) {
7458
7458
  return c.html(html.html`
@@ -7461,7 +7461,7 @@ authRoutes.post(
7461
7461
  </div>
7462
7462
  `);
7463
7463
  }
7464
- const passwordHash = await chunkL3KHLEHL_cjs.AuthManager.hashPassword(password);
7464
+ const passwordHash = await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7507
- const token = await chunkL3KHLEHL_cjs.AuthManager.generateToken(userId, normalizedEmail, role, c.env.JWT_SECRET, tokenTtl);
7506
+ const tokenTtl = await chunkZBDDZYA3_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7507
+ const token = await chunkZBDDZYA3_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
- chunkL3KHLEHL_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "login" }),
7539
+ chunkZBDDZYA3_cjs.rateLimit({ max: 30, windowMs: 60 * 1e3, keyPrefix: "login" }),
7540
7540
  async (c) => {
7541
7541
  try {
7542
7542
  const formData = await c.req.formData();
@@ -7550,7 +7550,7 @@ authRoutes.post(
7550
7550
  </div>
7551
7551
  `);
7552
7552
  }
7553
- const { createAuth } = await import('./config-FLOUCYHH.cjs');
7553
+ const { createAuth } = await import('./config-YCRSU7ZP.cjs');
7554
7554
  const auth = createAuth(c.env);
7555
7555
  const baReq = new Request(new URL("/auth/sign-in/email", c.req.url).href, {
7556
7556
  method: "POST",
@@ -7605,14 +7605,14 @@ authRoutes.post(
7605
7605
  );
7606
7606
  authRoutes.post(
7607
7607
  "/seed-admin",
7608
- chunkL3KHLEHL_cjs.rateLimit({ max: 10, windowMs: 60 * 1e3, keyPrefix: "seed-admin" }),
7608
+ chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.AuthManager.hashPassword(opts.password);
7615
+ const passwordHash = await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.AuthManager.hashPassword(password);
7840
+ const passwordHash = await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7858
- const authToken = await chunkL3KHLEHL_cjs.AuthManager.generateToken(invitedUser.id, invitedUser.email, invitedUser.role, c.env.JWT_SECRET, tokenTtl);
7857
+ const tokenTtl = await chunkZBDDZYA3_cjs.getJwtExpirySecondsFromDb(c.env.DB, c.env);
7858
+ const authToken = await chunkZBDDZYA3_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
- chunkL3KHLEHL_cjs.rateLimit({ max: 3, windowMs: 15 * 60 * 1e3, keyPrefix: "password-reset" }),
7874
+ chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.AuthManager.hashPassword(password);
8111
+ const newPasswordHash = await chunkZBDDZYA3_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
- chunk4YRYGDCQ_cjs.definePlugin({
8325
+ chunkPTTFLUEX_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
- chunk4YRYGDCQ_cjs.definePlugin({
8525
+ chunkPTTFLUEX_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
- chunk4YRYGDCQ_cjs.definePlugin({
8795
+ chunkPTTFLUEX_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("*", chunkL3KHLEHL_cjs.requireAuth());
11369
+ adminContentRoutes.use("*", chunkZBDDZYA3_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 chunkWIV3R2MJ_cjs.loadCollectionConfigs();
11396
+ const codeCollections2 = await chunkFXZSZ7C7_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 chunkWIV3R2MJ_cjs.loadCollectionConfigs();
11428
+ const codeCollections = await chunkFXZSZ7C7_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 chunkWIV3R2MJ_cjs.loadCollectionConfigs();
11482
+ const codeCollections = await chunkFXZSZ7C7_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db).findById(collectionName);
11501
+ const dt = await new chunkZBDDZYA3_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 chunkWIV3R2MJ_cjs.loadCollectionConfigs();
11518
+ const codeCollections = await chunkFXZSZ7C7_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 chunkL3KHLEHL_cjs.isPluginActive(db, "workflow") };
11534
+ const flags = { workflowEnabled: await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.isPluginActive(db, plugin);
11542
+ const enabled = await chunkZBDDZYA3_cjs.isPluginActive(db, plugin);
11543
11543
  flags[`${key}Enabled`] = enabled;
11544
11544
  if (enabled) {
11545
- const ps = new chunkWIV3R2MJ_cjs.PluginService(db);
11545
+ const ps = new chunkFXZSZ7C7_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 chunkWIV3R2MJ_cjs.loadCollectionConfigs();
11581
+ const codeCollections = await chunkFXZSZ7C7_cjs.loadCollectionConfigs();
11582
11582
  const codeCollectionMap = new Map(codeCollections.map((c2) => [c2.name, c2]));
11583
- const docTypeRegistry = new chunkL3KHLEHL_cjs.DocumentTypeRegistry(db);
11583
+ const docTypeRegistry = new chunkZBDDZYA3_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 chunkWIV3R2MJ_cjs.getVisibleCollections(db);
11595
+ const newContentCollections = await chunkFXZSZ7C7_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db2).findAll()).filter((dt) => !dt.settings?.internal && !dt.isAuth).map((dt) => dt.id)
11872
+ (await new chunkZBDDZYA3_cjs.DocumentTypeRegistry(db2).findAll()).filter((dt) => !dt.settings?.internal && !dt.isAuth).map((dt) => dt.id)
11873
11873
  );
11874
- const codeCollections = await chunkWIV3R2MJ_cjs.loadCollectionConfigs();
11874
+ const codeCollections = await chunkFXZSZ7C7_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 chunkL3KHLEHL_cjs.isPluginActive(db, "workflow");
11941
- const tinymceEnabled = await chunkL3KHLEHL_cjs.isPluginActive(db, "tinymce-plugin");
11940
+ const workflowEnabled = await chunkZBDDZYA3_cjs.isPluginActive(db, "workflow");
11941
+ const tinymceEnabled = await chunkZBDDZYA3_cjs.isPluginActive(db, "tinymce-plugin");
11942
11942
  let tinymceSettings;
11943
11943
  if (tinymceEnabled) {
11944
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
11944
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
11945
11945
  const tinymcePlugin2 = await pluginService.getPlugin("tinymce-plugin");
11946
11946
  tinymceSettings = tinymcePlugin2?.settings;
11947
11947
  }
11948
- const quillEnabled = await chunkL3KHLEHL_cjs.isPluginActive(db, "quill-editor");
11948
+ const quillEnabled = await chunkZBDDZYA3_cjs.isPluginActive(db, "quill-editor");
11949
11949
  let quillSettings;
11950
11950
  if (quillEnabled) {
11951
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
11951
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
11952
11952
  const quillPlugin = await pluginService.getPlugin("quill-editor");
11953
11953
  quillSettings = quillPlugin?.settings;
11954
11954
  }
11955
- const mdxeditorEnabled = await chunkL3KHLEHL_cjs.isPluginActive(db, "easy-mdx");
11955
+ const mdxeditorEnabled = await chunkZBDDZYA3_cjs.isPluginActive(db, "easy-mdx");
11956
11956
  let mdxeditorSettings;
11957
11957
  if (mdxeditorEnabled) {
11958
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
11958
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
11959
11959
  const mdxeditorPlugin = await pluginService.getPlugin("easy-mdx");
11960
11960
  mdxeditorSettings = mdxeditorPlugin?.settings;
11961
11961
  }
11962
- const lexicalEnabled = await chunkL3KHLEHL_cjs.isPluginActive(db, "lexical-editor");
11962
+ const lexicalEnabled = await chunkZBDDZYA3_cjs.isPluginActive(db, "lexical-editor");
11963
11963
  let lexicalSettings;
11964
11964
  if (lexicalEnabled) {
11965
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
11965
+ const pluginService = new chunkFXZSZ7C7_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 chunkL3KHLEHL_cjs.isPluginActive(db, "workflow");
12094
- const tinymceEnabled = await chunkL3KHLEHL_cjs.isPluginActive(db, "tinymce-plugin");
12093
+ const workflowEnabled = await chunkZBDDZYA3_cjs.isPluginActive(db, "workflow");
12094
+ const tinymceEnabled = await chunkZBDDZYA3_cjs.isPluginActive(db, "tinymce-plugin");
12095
12095
  let tinymceSettings;
12096
12096
  if (tinymceEnabled) {
12097
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
12097
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
12098
12098
  const tinymcePlugin2 = await pluginService.getPlugin("tinymce-plugin");
12099
12099
  tinymceSettings = tinymcePlugin2?.settings;
12100
12100
  }
12101
- const quillEnabled = await chunkL3KHLEHL_cjs.isPluginActive(db, "quill-editor");
12101
+ const quillEnabled = await chunkZBDDZYA3_cjs.isPluginActive(db, "quill-editor");
12102
12102
  let quillSettings;
12103
12103
  if (quillEnabled) {
12104
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
12104
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
12105
12105
  const quillPlugin = await pluginService.getPlugin("quill-editor");
12106
12106
  quillSettings = quillPlugin?.settings;
12107
12107
  }
12108
- const mdxeditorEnabled = await chunkL3KHLEHL_cjs.isPluginActive(db, "easy-mdx");
12108
+ const mdxeditorEnabled = await chunkZBDDZYA3_cjs.isPluginActive(db, "easy-mdx");
12109
12109
  let mdxeditorSettings;
12110
12110
  if (mdxeditorEnabled) {
12111
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
12111
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
12112
12112
  const mdxeditorPlugin = await pluginService.getPlugin("easy-mdx");
12113
12113
  mdxeditorSettings = mdxeditorPlugin?.settings;
12114
12114
  }
12115
- const lexicalEnabled = await chunkL3KHLEHL_cjs.isPluginActive(db, "lexical-editor");
12115
+ const lexicalEnabled = await chunkZBDDZYA3_cjs.isPluginActive(db, "lexical-editor");
12116
12116
  let lexicalSettings;
12117
12117
  if (lexicalEnabled) {
12118
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
12118
+ const pluginService = new chunkFXZSZ7C7_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", chunkL3KHLEHL_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
12491
+ adminContentRoutes.post("/preview", chunkZBDDZYA3_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", chunkL3KHLEHL_cjs.requireRole(["admin", "editor", "author"]), async (c) => {
12810
+ adminContentRoutes.get("/:id/version/:version/preview", chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db);
12906
+ const registry = new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(c.env.DB);
12919
+ const registry = new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(c.env.DB);
12944
+ const registry = new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db);
12954
+ const registry = new chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.DocumentTypeRegistry(db);
13067
+ const registry = new chunkZBDDZYA3_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
- chunkWIV3R2MJ_cjs.invalidateTenantCache();
14999
+ chunkFXZSZ7C7_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
- chunkWIV3R2MJ_cjs.invalidateTenantCache();
15017
+ chunkFXZSZ7C7_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
- chunkWIV3R2MJ_cjs.invalidateTenantCache();
15261
+ chunkFXZSZ7C7_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("*", chunkL3KHLEHL_cjs.requireAuth());
15286
- userRoutes.use("/users/*", chunkL3KHLEHL_cjs.requireRole(["admin"]));
15287
- userRoutes.use("/users", chunkL3KHLEHL_cjs.requireRole(["admin"]));
15288
- userRoutes.use("/invite-user", chunkL3KHLEHL_cjs.requireRole(["admin"]));
15289
- userRoutes.use("/resend-invitation/*", chunkL3KHLEHL_cjs.requireRole(["admin"]));
15290
- userRoutes.use("/cancel-invitation/*", chunkL3KHLEHL_cjs.requireRole(["admin"]));
15291
- userRoutes.use("/activity-logs", chunkL3KHLEHL_cjs.requireRole(["admin"]));
15292
- userRoutes.use("/activity-logs/*", chunkL3KHLEHL_cjs.requireRole(["admin"]));
15285
+ userRoutes.use("*", chunkZBDDZYA3_cjs.requireAuth());
15286
+ userRoutes.use("/users/*", chunkZBDDZYA3_cjs.requireRole(["admin"]));
15287
+ userRoutes.use("/users", chunkZBDDZYA3_cjs.requireRole(["admin"]));
15288
+ userRoutes.use("/invite-user", chunkZBDDZYA3_cjs.requireRole(["admin"]));
15289
+ userRoutes.use("/resend-invitation/*", chunkZBDDZYA3_cjs.requireRole(["admin"]));
15290
+ userRoutes.use("/cancel-invitation/*", chunkZBDDZYA3_cjs.requireRole(["admin"]));
15291
+ userRoutes.use("/activity-logs", chunkZBDDZYA3_cjs.requireRole(["admin"]));
15292
+ userRoutes.use("/activity-logs/*", chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
15459
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
15522
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.AuthManager.verifyPassword(currentPassword, userData.password_hash);
15593
+ const validPassword = await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.AuthManager.hashPassword(newPassword);
15601
+ const newPasswordHash = await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
15617
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
15684
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.AuthManager.hashPassword(password);
15865
+ const passwordHash = await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
15890
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
15929
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.AuthManager.hashPassword(newPassword);
16143
+ const passwordHash = await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
16156
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
16202
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
16243
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
16262
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
16328
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
16385
+ await chunkZBDDZYA3_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 chunkL3KHLEHL_cjs.logActivity(
16421
+ await chunkZBDDZYA3_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("*", chunkL3KHLEHL_cjs.requireAuth());
17802
+ adminMediaRoutes.use("*", chunkZBDDZYA3_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 chunkWIV3R2MJ_cjs.PluginService(db);
17844
+ const pluginService = new chunkFXZSZ7C7_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", chunkL3KHLEHL_cjs.requireRole("admin"), async (c) => {
18218
+ adminMediaRoutes.delete("/cleanup", chunkZBDDZYA3_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");
@@ -20648,8 +20648,8 @@ defineUserProfile({
20648
20648
 
20649
20649
  // src/routes/admin-plugins.ts
20650
20650
  var adminPluginRoutes = new hono.Hono();
20651
- adminPluginRoutes.use("*", chunkL3KHLEHL_cjs.requireAuth());
20652
- var AVAILABLE_PLUGINS = Object.values(chunkWIV3R2MJ_cjs.PLUGIN_REGISTRY).map((p) => ({
20651
+ adminPluginRoutes.use("*", chunkZBDDZYA3_cjs.requireAuth());
20652
+ var AVAILABLE_PLUGINS = Object.values(chunkFXZSZ7C7_cjs.PLUGIN_REGISTRY).map((p) => ({
20653
20653
  id: p.id,
20654
20654
  name: p.codeName,
20655
20655
  display_name: p.displayName,
@@ -20669,7 +20669,7 @@ adminPluginRoutes.get("/", async (c) => {
20669
20669
  if (user?.role !== "admin") {
20670
20670
  return c.text("Access denied", 403);
20671
20671
  }
20672
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
20672
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
20673
20673
  let installedPlugins = [];
20674
20674
  let stats = { total: 0, active: 0, inactive: 0, errors: 0, uninstalled: 0 };
20675
20675
  try {
@@ -20741,10 +20741,10 @@ adminPluginRoutes.get("/:id", async (c) => {
20741
20741
  if (user?.role !== "admin") {
20742
20742
  return c.redirect("/admin/plugins");
20743
20743
  }
20744
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
20744
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
20745
20745
  let plugin = await pluginService.getPlugin(pluginId);
20746
20746
  if (!plugin) {
20747
- const def = chunk4YRYGDCQ_cjs.getPluginDefinition(pluginId);
20747
+ const def = chunkPTTFLUEX_cjs.getPluginDefinition(pluginId);
20748
20748
  if (!def) return c.text("Plugin not found", 404);
20749
20749
  plugin = await pluginService.ensurePlugin(pluginId, {
20750
20750
  displayName: def.displayName ?? pluginId,
@@ -20835,14 +20835,14 @@ adminPluginRoutes.get("/:id/configure", async (c) => {
20835
20835
  const user = c.get("user");
20836
20836
  const pluginId = c.req.param("id");
20837
20837
  if (user?.role !== "admin") return c.redirect("/admin/plugins");
20838
- const def = chunk4YRYGDCQ_cjs.getPluginDefinition(pluginId);
20838
+ const def = chunkPTTFLUEX_cjs.getPluginDefinition(pluginId);
20839
20839
  if (!def?.configSchema) return c.text("No schema-driven settings for this plugin", 404);
20840
20840
  const db = c.env.DB;
20841
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
20841
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
20842
20842
  const plugin = await pluginService.getPlugin(pluginId);
20843
20843
  const stored = plugin?.settings ?? {};
20844
- const values = chunk4YRYGDCQ_cjs.applySchemaDefaults(def.configSchema, stored);
20845
- const fieldsHtml = chunk4YRYGDCQ_cjs.renderSchemaFields(def.configSchema, values);
20844
+ const values = chunkPTTFLUEX_cjs.applySchemaDefaults(def.configSchema, stored);
20845
+ const fieldsHtml = chunkPTTFLUEX_cjs.renderSchemaFields(def.configSchema, values);
20846
20846
  const displayName = plugin?.display_name ?? def.displayName ?? def.id;
20847
20847
  return c.html(`<!DOCTYPE html>
20848
20848
  <html lang="en"><head>
@@ -20869,12 +20869,12 @@ adminPluginRoutes.post("/:id/configure", async (c) => {
20869
20869
  const user = c.get("user");
20870
20870
  const pluginId = c.req.param("id");
20871
20871
  if (user?.role !== "admin") return c.json({ error: "Access denied" }, 403);
20872
- const def = chunk4YRYGDCQ_cjs.getPluginDefinition(pluginId);
20872
+ const def = chunkPTTFLUEX_cjs.getPluginDefinition(pluginId);
20873
20873
  if (!def?.configSchema) return c.text("No schema-driven settings for this plugin", 404);
20874
20874
  const form = await c.req.formData();
20875
- const parsed = chunk4YRYGDCQ_cjs.parseFormDataToSettings(def.configSchema, form);
20875
+ const parsed = chunkPTTFLUEX_cjs.parseFormDataToSettings(def.configSchema, form);
20876
20876
  const db = c.env.DB;
20877
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
20877
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
20878
20878
  await pluginService.ensurePlugin(pluginId, {
20879
20879
  displayName: def.displayName ?? pluginId,
20880
20880
  version: def.version,
@@ -20896,7 +20896,7 @@ adminPluginRoutes.post("/:id/activate", async (c) => {
20896
20896
  if (user?.role !== "admin") {
20897
20897
  return c.json({ error: "Access denied" }, 403);
20898
20898
  }
20899
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
20899
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
20900
20900
  await pluginService.activatePlugin(pluginId);
20901
20901
  return c.json({ success: true });
20902
20902
  } catch (error) {
@@ -20913,7 +20913,7 @@ adminPluginRoutes.post("/:id/deactivate", async (c) => {
20913
20913
  if (user?.role !== "admin") {
20914
20914
  return c.json({ error: "Access denied" }, 403);
20915
20915
  }
20916
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
20916
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
20917
20917
  await pluginService.deactivatePlugin(pluginId);
20918
20918
  return c.json({ success: true });
20919
20919
  } catch (error) {
@@ -20930,8 +20930,8 @@ adminPluginRoutes.post("/install", async (c) => {
20930
20930
  return c.json({ error: "Access denied" }, 403);
20931
20931
  }
20932
20932
  const body = await c.req.json();
20933
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
20934
- const registryEntry = chunkWIV3R2MJ_cjs.findPluginByCodeName(body.name) || chunkWIV3R2MJ_cjs.PLUGIN_REGISTRY[body.name] || chunkWIV3R2MJ_cjs.PLUGIN_REGISTRY[body.id];
20933
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
20934
+ const registryEntry = chunkFXZSZ7C7_cjs.findPluginByCodeName(body.name) || chunkFXZSZ7C7_cjs.PLUGIN_REGISTRY[body.name] || chunkFXZSZ7C7_cjs.PLUGIN_REGISTRY[body.id];
20935
20935
  if (!registryEntry) {
20936
20936
  return c.json({ error: "Plugin not found in registry" }, 404);
20937
20937
  }
@@ -20964,7 +20964,7 @@ adminPluginRoutes.post("/:id/uninstall", async (c) => {
20964
20964
  if (user?.role !== "admin") {
20965
20965
  return c.json({ error: "Access denied" }, 403);
20966
20966
  }
20967
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
20967
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
20968
20968
  await pluginService.uninstallPlugin(pluginId);
20969
20969
  return c.json({ success: true });
20970
20970
  } catch (error) {
@@ -20982,7 +20982,7 @@ adminPluginRoutes.post("/:id/settings", async (c) => {
20982
20982
  return c.json({ error: "Access denied" }, 403);
20983
20983
  }
20984
20984
  const settings = await c.req.json();
20985
- const pluginService = new chunkWIV3R2MJ_cjs.PluginService(db);
20985
+ const pluginService = new chunkFXZSZ7C7_cjs.PluginService(db);
20986
20986
  await pluginService.updatePluginSettings(pluginId, settings);
20987
20987
  if (pluginId === "core-auth") {
20988
20988
  try {
@@ -21790,7 +21790,7 @@ function renderLogConfigPage(data) {
21790
21790
 
21791
21791
  // src/routes/admin-logs.ts
21792
21792
  var adminLogsRoutes = new hono.Hono();
21793
- adminLogsRoutes.use("*", chunkL3KHLEHL_cjs.requireAuth());
21793
+ adminLogsRoutes.use("*", chunkZBDDZYA3_cjs.requireAuth());
21794
21794
  adminLogsRoutes.get("/", async (c) => {
21795
21795
  try {
21796
21796
  const user = c.get("user");
@@ -22782,9 +22782,9 @@ function renderStorageUsage(databaseSizeBytes, mediaSizeBytes) {
22782
22782
  }
22783
22783
 
22784
22784
  // src/routes/admin-dashboard.ts
22785
- var VERSION = chunkSIPBHWMG_cjs.getCoreVersion();
22785
+ var VERSION = chunkPK3ODTAL_cjs.getCoreVersion();
22786
22786
  var router = new hono.Hono();
22787
- router.use("*", chunkL3KHLEHL_cjs.requireAuth());
22787
+ router.use("*", chunkZBDDZYA3_cjs.requireAuth());
22788
22788
  router.get("/", async (c) => {
22789
22789
  const user = c.get("user");
22790
22790
  try {
@@ -24749,7 +24749,7 @@ function renderCollectionFormPage(data) {
24749
24749
  // src/routes/admin-collections.ts
24750
24750
  chunkK623Q6WD_cjs.init_admin_layout_catalyst_template();
24751
24751
  var adminCollectionsRoutes = new hono.Hono();
24752
- adminCollectionsRoutes.use("*", chunkL3KHLEHL_cjs.requireAuth());
24752
+ adminCollectionsRoutes.use("*", chunkZBDDZYA3_cjs.requireAuth());
24753
24753
  adminCollectionsRoutes.get("/", async (c) => {
24754
24754
  try {
24755
24755
  const user = c.get("user");
@@ -24766,7 +24766,7 @@ adminCollectionsRoutes.get("/", async (c) => {
24766
24766
  results = queryResults.results ?? [];
24767
24767
  } catch (e) {
24768
24768
  }
24769
- const codeCollections = chunkWIV3R2MJ_cjs.getCollectionRegistry().list();
24769
+ const codeCollections = chunkFXZSZ7C7_cjs.getCollectionRegistry().list();
24770
24770
  const codeCollectionsMap = new Map(
24771
24771
  codeCollections.map((cfg) => {
24772
24772
  const fieldCount = cfg.schema?.properties ? Object.keys(cfg.schema.properties).length : 0;
@@ -24780,7 +24780,7 @@ adminCollectionsRoutes.get("/", async (c) => {
24780
24780
  field_count: fieldCount,
24781
24781
  managed: cfg.managed !== false,
24782
24782
  source_type: "code",
24783
- internal: chunkWIV3R2MJ_cjs.isCodeCollectionInternal(cfg),
24783
+ internal: chunkFXZSZ7C7_cjs.isCodeCollectionInternal(cfg),
24784
24784
  versioning: cfg.versioning === true
24785
24785
  }];
24786
24786
  })
@@ -24819,7 +24819,7 @@ adminCollectionsRoutes.get("/", async (c) => {
24819
24819
  field_count: fieldCount,
24820
24820
  managed: false,
24821
24821
  source_type: row.source === "code" || row.source === "system" || row.source === "plugin" ? "code" : "user",
24822
- internal: chunkWIV3R2MJ_cjs.isDbDocTypeInternal(row.source),
24822
+ internal: chunkFXZSZ7C7_cjs.isDbDocTypeInternal(row.source),
24823
24823
  versioning: dbVersioning
24824
24824
  };
24825
24825
  });
@@ -24980,7 +24980,7 @@ export const myPlugin = definePlugin({
24980
24980
  title: "Add a Collection",
24981
24981
  pageTitle: "Add a Collection",
24982
24982
  currentPath: "/admin/collections",
24983
- version: chunkSIPBHWMG_cjs.getCoreVersion(),
24983
+ version: chunkPK3ODTAL_cjs.getCoreVersion(),
24984
24984
  user: u ? { name: u.email ?? "Admin", email: u.email ?? "", role: u.role ?? "admin" } : void 0,
24985
24985
  content
24986
24986
  })
@@ -24997,7 +24997,7 @@ adminCollectionsRoutes.get("/:id", async (c) => {
24997
24997
  collection = await stmt.bind(id).first();
24998
24998
  } catch {
24999
24999
  }
25000
- const registryRecord = chunkWIV3R2MJ_cjs.getCollectionRegistry().getById(id) ?? chunkWIV3R2MJ_cjs.getCollectionRegistry().getByName(id);
25000
+ const registryRecord = chunkFXZSZ7C7_cjs.getCollectionRegistry().getById(id) ?? chunkFXZSZ7C7_cjs.getCollectionRegistry().getByName(id);
25001
25001
  if (!collection && !registryRecord) {
25002
25002
  const formData2 = {
25003
25003
  isEdit: true,
@@ -25044,9 +25044,9 @@ adminCollectionsRoutes.get("/:id", async (c) => {
25044
25044
  isCodeDriven = true;
25045
25045
  }
25046
25046
  const [tinymceActive, quillActive, mdxeditorActive] = await Promise.all([
25047
- chunkL3KHLEHL_cjs.isPluginActive(db, "tinymce-plugin"),
25048
- chunkL3KHLEHL_cjs.isPluginActive(db, "quill-editor"),
25049
- chunkL3KHLEHL_cjs.isPluginActive(db, "easy-mdx")
25047
+ chunkZBDDZYA3_cjs.isPluginActive(db, "tinymce-plugin"),
25048
+ chunkZBDDZYA3_cjs.isPluginActive(db, "quill-editor"),
25049
+ chunkZBDDZYA3_cjs.isPluginActive(db, "easy-mdx")
25050
25050
  ]);
25051
25051
  const displayName = collection?.display_name ?? registryRecord?.displayName ?? id;
25052
25052
  const formData = {
@@ -25066,9 +25066,9 @@ adminCollectionsRoutes.get("/:id", async (c) => {
25066
25066
  console.error("Error fetching collection:", error);
25067
25067
  const user = c.get("user");
25068
25068
  const [tinymceActive, quillActive, mdxeditorActive] = await Promise.all([
25069
- chunkL3KHLEHL_cjs.isPluginActive(db, "tinymce-plugin"),
25070
- chunkL3KHLEHL_cjs.isPluginActive(db, "quill-editor"),
25071
- chunkL3KHLEHL_cjs.isPluginActive(db, "easy-mdx")
25069
+ chunkZBDDZYA3_cjs.isPluginActive(db, "tinymce-plugin"),
25070
+ chunkZBDDZYA3_cjs.isPluginActive(db, "quill-editor"),
25071
+ chunkZBDDZYA3_cjs.isPluginActive(db, "easy-mdx")
25072
25072
  ]);
25073
25073
  const formData = {
25074
25074
  isEdit: true,
@@ -26017,7 +26017,7 @@ function renderDatabaseToolsSettings(settings) {
26017
26017
 
26018
26018
  // src/routes/admin-settings.ts
26019
26019
  var adminSettingsRoutes = new hono.Hono();
26020
- adminSettingsRoutes.use("*", chunkL3KHLEHL_cjs.requireAuth());
26020
+ adminSettingsRoutes.use("*", chunkZBDDZYA3_cjs.requireAuth());
26021
26021
  function getMockSettings(user) {
26022
26022
  return {
26023
26023
  general: {
@@ -26120,7 +26120,7 @@ adminSettingsRoutes.get("/database-tools", (c) => {
26120
26120
  adminSettingsRoutes.get("/api/migrations/status", async (c) => {
26121
26121
  try {
26122
26122
  const db = c.env.DB;
26123
- const migrationService = new chunkH5FB6GKR_cjs.MigrationService(db);
26123
+ const migrationService = new chunk4AB3PQHF_cjs.MigrationService(db);
26124
26124
  const status = await migrationService.getMigrationStatus();
26125
26125
  return c.json({
26126
26126
  success: true,
@@ -26160,7 +26160,7 @@ adminSettingsRoutes.post("/api/migrations/run", async (c) => {
26160
26160
  adminSettingsRoutes.get("/api/migrations/validate", async (c) => {
26161
26161
  try {
26162
26162
  const db = c.env.DB;
26163
- const migrationService = new chunkH5FB6GKR_cjs.MigrationService(db);
26163
+ const migrationService = new chunk4AB3PQHF_cjs.MigrationService(db);
26164
26164
  const validation = await migrationService.validateSchema();
26165
26165
  return c.json({
26166
26166
  success: true,
@@ -26753,16 +26753,16 @@ function renderAPIReferencePage(data) {
26753
26753
  }
26754
26754
 
26755
26755
  // src/routes/admin-api-reference.ts
26756
- var VERSION2 = chunkSIPBHWMG_cjs.getCoreVersion();
26756
+ var VERSION2 = chunkPK3ODTAL_cjs.getCoreVersion();
26757
26757
  var router2 = new hono.Hono();
26758
- router2.use("*", chunkL3KHLEHL_cjs.requireAuth());
26758
+ router2.use("*", chunkZBDDZYA3_cjs.requireAuth());
26759
26759
  router2.get("/", async (c) => {
26760
26760
  const user = c.get("user");
26761
26761
  try {
26762
26762
  const app2 = chunk4BTBSXMR_cjs.getAppInstance();
26763
26763
  const baseEndpoints = chunk4BTBSXMR_cjs.buildRouteList(app2);
26764
26764
  const collectionRoutes = [];
26765
- const collections = chunkWIV3R2MJ_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal);
26765
+ const collections = chunkFXZSZ7C7_cjs.getCollectionRegistry().listActive().filter((r) => !r.internal);
26766
26766
  const methodOrder = { GET: 0, POST: 1, PUT: 2, PATCH: 3, DELETE: 4 };
26767
26767
  for (const col of collections) {
26768
26768
  const displayName = col.displayName || col.name;
@@ -26854,6 +26854,7 @@ exports.api_default = api_default;
26854
26854
  exports.api_media_default = api_media_default;
26855
26855
  exports.api_system_default = api_system_default;
26856
26856
  exports.auth_default = auth_default;
26857
+ exports.createDocumentSchema = createDocumentSchema;
26857
26858
  exports.createUserProfilesPlugin = createUserProfilesPlugin;
26858
26859
  exports.defineUserProfile = defineUserProfile;
26859
26860
  exports.denyIfNotAllowed = denyIfNotAllowed;
@@ -26878,5 +26879,5 @@ exports.setVariablesCache = setVariablesCache;
26878
26879
  exports.test_cleanup_default = test_cleanup_default;
26879
26880
  exports.userProfilesPlugin = userProfilesPlugin;
26880
26881
  exports.userRoutes = userRoutes;
26881
- //# sourceMappingURL=chunk-SSOP7G4R.cjs.map
26882
- //# sourceMappingURL=chunk-SSOP7G4R.cjs.map
26882
+ //# sourceMappingURL=chunk-BDQOPRA3.cjs.map
26883
+ //# sourceMappingURL=chunk-BDQOPRA3.cjs.map