@sonicjs-cms/core 3.0.0-beta.11 → 3.0.0-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/{chunk-ZUEIQFE5.js → chunk-ALNODOY4.js} +3 -3
  2. package/dist/{chunk-ZUEIQFE5.js.map → chunk-ALNODOY4.js.map} +1 -1
  3. package/dist/{chunk-YJEBDJDV.cjs → chunk-BYLQOBO6.cjs} +13 -13
  4. package/dist/{chunk-YJEBDJDV.cjs.map → chunk-BYLQOBO6.cjs.map} +1 -1
  5. package/dist/{chunk-3PU4WVU6.js → chunk-DMXDQ5YI.js} +4 -4
  6. package/dist/{chunk-3PU4WVU6.js.map → chunk-DMXDQ5YI.js.map} +1 -1
  7. package/dist/{chunk-6H66MSSL.js → chunk-INKP2WNU.js} +2 -2
  8. package/dist/{chunk-6H66MSSL.js.map → chunk-INKP2WNU.js.map} +1 -1
  9. package/dist/{chunk-ORF4CT74.cjs → chunk-KI5KMJH2.cjs} +2 -2
  10. package/dist/{chunk-ORF4CT74.cjs.map → chunk-KI5KMJH2.cjs.map} +1 -1
  11. package/dist/{chunk-QJNKSFDJ.cjs → chunk-LLWLHFTD.cjs} +2 -2
  12. package/dist/{chunk-QJNKSFDJ.cjs.map → chunk-LLWLHFTD.cjs.map} +1 -1
  13. package/dist/{chunk-UHRHZXVR.cjs → chunk-NYLWNR6T.cjs} +4 -4
  14. package/dist/{chunk-UHRHZXVR.cjs.map → chunk-NYLWNR6T.cjs.map} +1 -1
  15. package/dist/{chunk-PDYRDYXI.js → chunk-Q3P7Y5VO.js} +4 -4
  16. package/dist/{chunk-PDYRDYXI.js.map → chunk-Q3P7Y5VO.js.map} +1 -1
  17. package/dist/{chunk-SXLVXD2X.js → chunk-R2O6TTQS.js} +9 -20
  18. package/dist/{chunk-K342JMA3.cjs.map → chunk-R2O6TTQS.js.map} +1 -1
  19. package/dist/{chunk-QLFTG3QJ.js → chunk-SUHGXAII.js} +2 -2
  20. package/dist/{chunk-QLFTG3QJ.js.map → chunk-SUHGXAII.js.map} +1 -1
  21. package/dist/{chunk-MKKGA3C4.cjs → chunk-SY7CBACS.cjs} +10 -10
  22. package/dist/{chunk-MKKGA3C4.cjs.map → chunk-SY7CBACS.cjs.map} +1 -1
  23. package/dist/{chunk-K342JMA3.cjs → chunk-TV7LRFXH.cjs} +200 -211
  24. package/dist/{chunk-SXLVXD2X.js.map → chunk-TV7LRFXH.cjs.map} +1 -1
  25. package/dist/{chunk-KV3CM5RK.cjs → chunk-XGH2FVVR.cjs} +3 -3
  26. package/dist/{chunk-KV3CM5RK.cjs.map → chunk-XGH2FVVR.cjs.map} +1 -1
  27. package/dist/{chunk-HPAJKZAQ.js → chunk-XHBEFQJ3.js} +3 -3
  28. package/dist/{chunk-HPAJKZAQ.js.map → chunk-XHBEFQJ3.js.map} +1 -1
  29. package/dist/index.cjs +283 -252
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.js +44 -13
  32. package/dist/index.js.map +1 -1
  33. package/dist/middleware.cjs +32 -32
  34. package/dist/middleware.js +3 -3
  35. package/dist/migrations-AFSCRO56.cjs +13 -0
  36. package/dist/{migrations-ZXJEUTFA.cjs.map → migrations-AFSCRO56.cjs.map} +1 -1
  37. package/dist/migrations-MLBACCPF.js +4 -0
  38. package/dist/{migrations-XQLBY7E5.js.map → migrations-MLBACCPF.js.map} +1 -1
  39. package/dist/plugins.cjs +40 -40
  40. package/dist/plugins.js +3 -3
  41. package/dist/routes.cjs +26 -26
  42. package/dist/routes.js +6 -6
  43. package/dist/services.cjs +18 -18
  44. package/dist/services.js +2 -2
  45. package/dist/utils.cjs +3 -3
  46. package/dist/utils.js +1 -1
  47. package/package.json +1 -1
  48. package/dist/migrations-XQLBY7E5.js +0 -4
  49. package/dist/migrations-ZXJEUTFA.cjs +0 -13
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { createAuth } from './chunk-IVPRUGTY.js';
2
- import { getEmailService, hasEmailService, setEmailService, invalidateVariablesCache, resolveVariablesInObject, resolveDocScope, denyIfNotAllowed, DocumentRepository, dispatchHookEvent, getCustomData, renderTable, getVariablesCached, setVariablesCache, TenantService, isValidMemberRole, renderConfirmationDialog, getConfirmationDialogScript, VALID_MEMBER_ROLES, userProfilesPlugin, lexicalEditorPlugin, api_media_default, api_system_default, apiDocumentsRoutes, api_default, adminDocumentsRoutes, admin_api_default, adminCollectionsRoutes, adminSettingsRoutes, router2, admin_content_default, adminMediaRoutes, router, adminPluginRoutes, adminLogsRoutes, userRoutes, auth_default, test_cleanup_default } from './chunk-SXLVXD2X.js';
3
- export { ROUTES_INFO, admin_api_default as adminApiRoutes, adminCheckboxRoutes, adminCollectionsRoutes, admin_content_default as adminContentRoutes, router as adminDashboardRoutes, adminLogsRoutes, adminMediaRoutes, adminPluginRoutes, adminSettingsRoutes, userRoutes as adminUsersRoutes, api_content_crud_default as apiContentCrudRoutes, api_media_default as apiMediaRoutes, api_default as apiRoutes, api_system_default as apiSystemRoutes, auth_default as authRoutes, createUserProfilesPlugin, defineUserProfile, getUserProfileConfig, userProfilesPlugin } from './chunk-SXLVXD2X.js';
2
+ import { getEmailService, hasEmailService, setEmailService, invalidateVariablesCache, resolveVariablesInObject, resolveDocScope, denyIfNotAllowed, DocumentRepository, dispatchHookEvent, getCustomData, renderTable, getVariablesCached, setVariablesCache, TenantService, isValidMemberRole, renderConfirmationDialog, getConfirmationDialogScript, VALID_MEMBER_ROLES, userProfilesPlugin, lexicalEditorPlugin, api_media_default, api_system_default, apiDocumentsRoutes, api_default, adminDocumentsRoutes, admin_api_default, adminCollectionsRoutes, adminSettingsRoutes, router2, admin_content_default, adminMediaRoutes, router, adminPluginRoutes, adminLogsRoutes, userRoutes, auth_default, test_cleanup_default } from './chunk-R2O6TTQS.js';
3
+ export { ROUTES_INFO, admin_api_default as adminApiRoutes, adminCheckboxRoutes, adminCollectionsRoutes, admin_content_default as adminContentRoutes, router as adminDashboardRoutes, adminLogsRoutes, adminMediaRoutes, adminPluginRoutes, adminSettingsRoutes, userRoutes as adminUsersRoutes, api_content_crud_default as apiContentCrudRoutes, api_media_default as apiMediaRoutes, api_default as apiRoutes, api_system_default as apiSystemRoutes, auth_default as authRoutes, createUserProfilesPlugin, defineUserProfile, getUserProfileConfig, userProfilesPlugin } from './chunk-R2O6TTQS.js';
4
4
  import './chunk-IESEVHXL.js';
5
5
  import './chunk-RMRJGMDE.js';
6
6
  import { SettingsService, setAppInstance } from './chunk-RQ6N3FTV.js';
@@ -8,35 +8,36 @@ export { Logger, getLogger, initLogger } from './chunk-RQ6N3FTV.js';
8
8
  import { getAllCacheStats, CACHE_CONFIGS, getCacheService, clearAllCaches, parseCacheKey } from './chunk-K25XHMM3.js';
9
9
  import { schema_exports } from './chunk-AI663NBO.js';
10
10
  export { apiTokens, content, contentVersions, insertContentSchema, insertLogConfigSchema, insertMediaSchema, insertPluginActivityLogSchema, insertPluginAssetSchema, insertPluginHookSchema, insertPluginRouteSchema, insertPluginSchema, insertSystemLogSchema, insertUserSchema, insertWorkflowHistorySchema, logConfig, media, pluginActivityLog, pluginAssets, pluginHooks, pluginRoutes, plugins, selectContentSchema, selectLogConfigSchema, selectMediaSchema, selectPluginActivityLogSchema, selectPluginAssetSchema, selectPluginHookSchema, selectPluginRouteSchema, selectPluginSchema, selectSystemLogSchema, selectUserSchema, selectWorkflowHistorySchema, systemLogs, users, workflowHistory } from './chunk-AI663NBO.js';
11
- import { requireAuth, DocumentTypeRegistry, requireRbac, requireRole, getJwtExpirySecondsFromDb, AuthManager, metricsMiddleware, bootstrapMiddleware, securityHeadersMiddleware, csrfProtection } from './chunk-3PU4WVU6.js';
12
- export { AuthManager, PermissionManager, bootstrapDocumentTypes, bootstrapMiddleware, cacheHeaders, compressionMiddleware, detailedLoggingMiddleware, getActivePlugins, isPluginActive, logActivity, loggingMiddleware, optionalAuth, performanceLoggingMiddleware, requireActivePlugin, requireActivePlugins, requireAnyPermission, requireAuth, requirePermission, requireRole, securityHeadersMiddleware as securityHeaders, securityLoggingMiddleware } from './chunk-3PU4WVU6.js';
11
+ import { requireAuth, DocumentTypeRegistry, requireRbac, requireRole, getJwtExpirySecondsFromDb, AuthManager, metricsMiddleware, bootstrapMiddleware, securityHeadersMiddleware, csrfProtection } from './chunk-DMXDQ5YI.js';
12
+ export { AuthManager, PermissionManager, bootstrapDocumentTypes, bootstrapMiddleware, cacheHeaders, compressionMiddleware, detailedLoggingMiddleware, getActivePlugins, isPluginActive, logActivity, loggingMiddleware, optionalAuth, performanceLoggingMiddleware, requireActivePlugin, requireActivePlugins, requireAnyPermission, requireAuth, requirePermission, requireRole, securityHeadersMiddleware as securityHeaders, securityLoggingMiddleware } from './chunk-DMXDQ5YI.js';
13
13
  import { RbacService, DocumentsService } from './chunk-BLMTL57B.js';
14
14
  export { RbacService } from './chunk-BLMTL57B.js';
15
15
  import { nanoid } from './chunk-GCDZZNIN.js';
16
- import { PluginService, PLUGIN_REGISTRY, invalidateTenantCache, getCollectionRegistry, TENANT_COOKIE, MULTI_TENANT_PLUGIN_ID, collectionRecordToRow, tenantMiddleware } from './chunk-QLFTG3QJ.js';
17
- export { PluginBootstrapService, PluginService as PluginServiceClass, getAvailableCollectionNames, loadCollectionConfig, loadCollectionConfigs, registerCollections, validateCollectionConfig } from './chunk-QLFTG3QJ.js';
18
- export { MigrationService } from './chunk-6H66MSSL.js';
16
+ import { PluginService, PLUGIN_REGISTRY, invalidateTenantCache, getCollectionRegistry, TENANT_COOKIE, MULTI_TENANT_PLUGIN_ID, collectionRecordToRow, tenantMiddleware } from './chunk-SUHGXAII.js';
17
+ export { PluginBootstrapService, PluginService as PluginServiceClass, getAvailableCollectionNames, loadCollectionConfig, loadCollectionConfigs, registerCollections, validateCollectionConfig } from './chunk-SUHGXAII.js';
18
+ export { MigrationService } from './chunk-INKP2WNU.js';
19
19
  export { renderFilterBar } from './chunk-JQISFW6U.js';
20
20
  import { renderAdminLayout } from './chunk-OBA2RYZN.js';
21
21
  export { getConfirmationDialogScript, renderAlert, renderConfirmationDialog, renderForm, renderFormField, renderPagination, renderTable } from './chunk-OBA2RYZN.js';
22
22
  import { init_admin_layout_catalyst_template, renderAdminLayoutCatalyst } from './chunk-5V62WT6M.js';
23
23
  export { renderAdminLayoutCatalyst } from './chunk-5V62WT6M.js';
24
- import { TurnstileService, HookSystemImpl, createPluginWirer, registerPluginRoutes, setPluginMenu } from './chunk-PDYRDYXI.js';
25
- export { HookSystemImpl, HookUtils, PluginDependencyCycleError, PluginManager as PluginManagerClass, PluginRegistryImpl, PluginValidator as PluginValidatorClass, RegisterPluginsError, ScopedHookSystem as ScopedHookSystemClass, collectCronSchedules, collectCrons, createScheduledHandler, dispatchCronTick, getPluginMenu, registerPlugins, resetPluginMenu, resolvePluginMenuItems, setPluginMenu, topoSort } from './chunk-PDYRDYXI.js';
26
- import { definePlugin, setPluginDefinitions } from './chunk-HPAJKZAQ.js';
27
- export { applySchemaDefaults, definePlugin, isDefinedPlugin, parseConfigSchema, parseFormDataToSettings, renderSchemaFields } from './chunk-HPAJKZAQ.js';
24
+ import { TurnstileService, HookSystemImpl, createPluginWirer, registerPluginRoutes, setPluginMenu } from './chunk-Q3P7Y5VO.js';
25
+ export { HookSystemImpl, HookUtils, PluginDependencyCycleError, PluginManager as PluginManagerClass, PluginRegistryImpl, PluginValidator as PluginValidatorClass, RegisterPluginsError, ScopedHookSystem as ScopedHookSystemClass, collectCronSchedules, collectCrons, createScheduledHandler, dispatchCronTick, getPluginMenu, registerPlugins, resetPluginMenu, resolvePluginMenuItems, setPluginMenu, topoSort } from './chunk-Q3P7Y5VO.js';
26
+ import { definePlugin, setPluginDefinitions } from './chunk-XHBEFQJ3.js';
27
+ export { applySchemaDefaults, definePlugin, isDefinedPlugin, parseConfigSchema, parseFormDataToSettings, renderSchemaFields } from './chunk-XHBEFQJ3.js';
28
28
  import { setHookSystem } from './chunk-RNZFGN4R.js';
29
29
  export { getHookSystem, getTypedHooks, hasHookSystem, resetHookSystem, setHookSystem } from './chunk-RNZFGN4R.js';
30
30
  export { QueryFilterBuilder, TemplateRenderer, buildQuery, renderTemplate, templateRenderer } from './chunk-QZGABF2M.js';
31
31
  export { metricsTracker } from './chunk-FICTAGD4.js';
32
32
  import './chunk-X7ZAEI5S.js';
33
- import { getCoreVersion, package_default } from './chunk-ZUEIQFE5.js';
34
- export { SONICJS_VERSION, getCoreVersion } from './chunk-ZUEIQFE5.js';
33
+ import { getCoreVersion, package_default } from './chunk-ALNODOY4.js';
34
+ export { SONICJS_VERSION, getCoreVersion } from './chunk-ALNODOY4.js';
35
35
  import { escapeHtml, sanitizeInput } from './chunk-TQABQWOP.js';
36
36
  export { escapeHtml, sanitizeInput, sanitizeObject } from './chunk-TQABQWOP.js';
37
37
  export { HOOKS } from './chunk-QXOZI5Q2.js';
38
38
  import './chunk-V4OQ3NZ2.js';
39
39
  import { Hono } from 'hono';
40
+ import { cors } from 'hono/cors';
40
41
  import { z } from 'zod';
41
42
  import { setCookie, getCookie } from 'hono/cookie';
42
43
  import { html } from 'hono/html';
@@ -9715,6 +9716,7 @@ function renderFormCreatePage(data) {
9715
9716
  }
9716
9717
 
9717
9718
  // src/routes/admin-forms.ts
9719
+ var isTableMissing = (err) => String(err?.message ?? err?.cause?.message ?? "").includes("no such table: forms");
9718
9720
  var adminFormsRoutes = new Hono();
9719
9721
  adminFormsRoutes.use("*", requireAuth());
9720
9722
  adminFormsRoutes.get("/", async (c) => {
@@ -9756,6 +9758,14 @@ adminFormsRoutes.get("/", async (c) => {
9756
9758
  };
9757
9759
  return c.html(renderFormsListPage(pageData));
9758
9760
  } catch (error) {
9761
+ if (isTableMissing(error)) {
9762
+ const user = c.get("user");
9763
+ return c.html(renderFormsListPage({
9764
+ forms: [],
9765
+ user: user ? { name: user.email, email: user.email, role: user.role } : void 0,
9766
+ version: c.get("appVersion")
9767
+ }));
9768
+ }
9759
9769
  console.error("Error listing forms:", error);
9760
9770
  return c.html("<p>Error loading forms</p>", 500);
9761
9771
  }
@@ -9866,6 +9876,7 @@ adminFormsRoutes.post("/", async (c) => {
9866
9876
  ).run();
9867
9877
  return c.redirect(`/admin/forms/${formId}/builder`);
9868
9878
  } catch (error) {
9879
+ if (isTableMissing(error)) return c.json({ error: "Forms storage not configured \u2014 run database migrations" }, 503);
9869
9880
  console.error("Error creating form:", error);
9870
9881
  return c.json({ error: "Failed to create form" }, 500);
9871
9882
  }
@@ -9903,6 +9914,7 @@ adminFormsRoutes.get("/:id/builder", async (c) => {
9903
9914
  };
9904
9915
  return c.html(renderFormBuilderPage(pageData));
9905
9916
  } catch (error) {
9917
+ if (isTableMissing(error)) return c.html("<p>Forms storage not configured \u2014 run database migrations</p>", 503);
9906
9918
  console.error("Error showing form builder:", error);
9907
9919
  return c.html("<p>Error loading form builder</p>", 500);
9908
9920
  }
@@ -9932,6 +9944,7 @@ adminFormsRoutes.put("/:id", async (c) => {
9932
9944
  ).run();
9933
9945
  return c.json({ success: true, message: "Form saved successfully" });
9934
9946
  } catch (error) {
9947
+ if (isTableMissing(error)) return c.json({ error: "Forms storage not configured \u2014 run database migrations" }, 503);
9935
9948
  console.error("Error updating form:", error);
9936
9949
  return c.json({ error: "Failed to save form" }, 500);
9937
9950
  }
@@ -9953,6 +9966,7 @@ adminFormsRoutes.delete("/:id", async (c) => {
9953
9966
  await db.prepare("DELETE FROM forms WHERE id = ?").bind(formId).run();
9954
9967
  return c.json({ success: true, message: "Form deleted successfully" });
9955
9968
  } catch (error) {
9969
+ if (isTableMissing(error)) return c.json({ error: "Forms storage not configured \u2014 run database migrations" }, 503);
9956
9970
  console.error("Error deleting form:", error);
9957
9971
  return c.json({ error: "Failed to delete form" }, 500);
9958
9972
  }
@@ -10013,6 +10027,7 @@ adminFormsRoutes.get("/:id/submissions", async (c) => {
10013
10027
  `;
10014
10028
  return c.html(html4);
10015
10029
  } catch (error) {
10030
+ if (isTableMissing(error)) return c.html("<p>Forms storage not configured \u2014 run database migrations</p>", 503);
10016
10031
  console.error("Error loading submissions:", error);
10017
10032
  return c.html("<p>Error loading submissions</p>", 500);
10018
10033
  }
@@ -10033,6 +10048,7 @@ function sanitizeDeep(value) {
10033
10048
  }
10034
10049
  return value;
10035
10050
  }
10051
+ var isTableMissing2 = (err) => String(err?.message ?? err?.cause?.message ?? "").includes("no such table: form");
10036
10052
  var publicFormsRoutes = new Hono();
10037
10053
  publicFormsRoutes.get("/:identifier/turnstile-config", async (c) => {
10038
10054
  try {
@@ -10060,6 +10076,7 @@ publicFormsRoutes.get("/:identifier/turnstile-config", async (c) => {
10060
10076
  appearance: formSettings.appearance || globalSettings.appearance || "always"
10061
10077
  });
10062
10078
  } catch (error) {
10079
+ if (isTableMissing2(error)) return c.json({ enabled: false });
10063
10080
  console.error("Error fetching Turnstile config:", error);
10064
10081
  return c.json({ error: "Failed to fetch config" }, 500);
10065
10082
  }
@@ -10087,6 +10104,7 @@ publicFormsRoutes.get("/:identifier/schema", async (c) => {
10087
10104
  submitUrl: `/api/forms/${form.id}/submit`
10088
10105
  });
10089
10106
  } catch (error) {
10107
+ if (isTableMissing2(error)) return c.json({ error: "Form not found" }, 404);
10090
10108
  console.error("Error fetching form schema:", error);
10091
10109
  return c.json({ error: "Failed to fetch form schema" }, 500);
10092
10110
  }
@@ -10453,6 +10471,7 @@ publicFormsRoutes.get("/:name", async (c) => {
10453
10471
  `;
10454
10472
  return c.html(html4);
10455
10473
  } catch (error) {
10474
+ if (isTableMissing2(error)) return c.html("<h1>Form not found</h1><p>This form does not exist or is not publicly available.</p>", 404);
10456
10475
  console.error("Error rendering form:", error);
10457
10476
  return c.html("<p>Error loading form</p>", 500);
10458
10477
  }
@@ -10526,6 +10545,7 @@ publicFormsRoutes.post("/:identifier/submit", async (c) => {
10526
10545
  message: "Form submitted successfully"
10527
10546
  });
10528
10547
  } catch (error) {
10548
+ if (isTableMissing2(error)) return c.json({ error: "Form not found" }, 404);
10529
10549
  console.error("Error submitting form:", error);
10530
10550
  return c.json({ error: "Failed to submit form" }, 500);
10531
10551
  }
@@ -16156,6 +16176,17 @@ function createSonicJSApp(config = {}) {
16156
16176
  app2.use("*", async (_c, next) => {
16157
16177
  await next();
16158
16178
  });
16179
+ app2.use("*", cors({
16180
+ origin: (origin, c) => {
16181
+ const allowed = c.env?.CORS_ORIGINS;
16182
+ if (!allowed) return null;
16183
+ const list = allowed.split(",").map((s) => s.trim());
16184
+ return list.includes(origin) ? origin : null;
16185
+ },
16186
+ allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
16187
+ allowHeaders: ["Content-Type", "Authorization", "X-API-Key"],
16188
+ credentials: true
16189
+ }));
16159
16190
  app2.use("*", securityHeadersMiddleware());
16160
16191
  app2.use("*", csrfProtection());
16161
16192
  app2.use("*", async (c, next) => {