@sonicjs-cms/core 2.11.0 → 2.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/{app-Ozl9agJG.d.cts → app-COElO4Rm.d.cts} +6 -1
  2. package/dist/{app-Ozl9agJG.d.ts → app-COElO4Rm.d.ts} +6 -1
  3. package/dist/{chunk-JTQBNSZX.js → chunk-3V2CQFIR.js} +4176 -3805
  4. package/dist/chunk-3V2CQFIR.js.map +1 -0
  5. package/dist/{chunk-BUU2US2Z.js → chunk-673VROB3.js} +3 -3
  6. package/dist/{chunk-BUU2US2Z.js.map → chunk-673VROB3.js.map} +1 -1
  7. package/dist/{chunk-H55AYIRI.js → chunk-6C6W54QP.js} +17 -3
  8. package/dist/chunk-6C6W54QP.js.map +1 -0
  9. package/dist/{chunk-JJS7JZCH.js → chunk-76TX6XND.js} +4 -2
  10. package/dist/chunk-76TX6XND.js.map +1 -0
  11. package/dist/{chunk-74XCYEI7.js → chunk-BWZBKLOC.js} +3 -3
  12. package/dist/{chunk-74XCYEI7.js.map → chunk-BWZBKLOC.js.map} +1 -1
  13. package/dist/{chunk-ASAEJ4B7.cjs → chunk-DHTCZZUB.cjs} +4376 -4001
  14. package/dist/chunk-DHTCZZUB.cjs.map +1 -0
  15. package/dist/{chunk-NMLFKXWW.js → chunk-H3XXBAMO.js} +15 -2
  16. package/dist/chunk-H3XXBAMO.js.map +1 -0
  17. package/dist/{chunk-LTKV7AE5.cjs → chunk-H4NHRZ6Y.cjs} +4 -2
  18. package/dist/chunk-H4NHRZ6Y.cjs.map +1 -0
  19. package/dist/{chunk-B2ASV5RD.cjs → chunk-HBUFGLEX.cjs} +10 -10
  20. package/dist/{chunk-B2ASV5RD.cjs.map → chunk-HBUFGLEX.cjs.map} +1 -1
  21. package/dist/{chunk-6BVLPACH.cjs → chunk-I6FFGQIT.cjs} +15 -2
  22. package/dist/chunk-I6FFGQIT.cjs.map +1 -0
  23. package/dist/{chunk-QLPFENZ2.cjs → chunk-IKBAY2M2.cjs} +3 -3
  24. package/dist/{chunk-QLPFENZ2.cjs.map → chunk-IKBAY2M2.cjs.map} +1 -1
  25. package/dist/{chunk-LFAQUR7P.cjs → chunk-NZWFCUDA.cjs} +26 -2
  26. package/dist/chunk-NZWFCUDA.cjs.map +1 -0
  27. package/dist/{chunk-3G7XX4UI.cjs → chunk-RBXFXT7H.cjs} +9 -9
  28. package/dist/{chunk-3G7XX4UI.cjs.map → chunk-RBXFXT7H.cjs.map} +1 -1
  29. package/dist/{chunk-VJCLJH3X.js → chunk-TBJY2FF7.js} +26 -2
  30. package/dist/chunk-TBJY2FF7.js.map +1 -0
  31. package/dist/{chunk-GKRGDJGG.js → chunk-UFWE3MEJ.js} +6 -6
  32. package/dist/{chunk-GKRGDJGG.js.map → chunk-UFWE3MEJ.js.map} +1 -1
  33. package/dist/{chunk-DE5YTNCD.cjs → chunk-XK3TKOLQ.cjs} +17 -3
  34. package/dist/chunk-XK3TKOLQ.cjs.map +1 -0
  35. package/dist/index.cjs +1828 -170
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.d.cts +53 -5
  38. package/dist/index.d.ts +53 -5
  39. package/dist/index.js +1656 -13
  40. package/dist/index.js.map +1 -1
  41. package/dist/middleware.cjs +29 -29
  42. package/dist/middleware.d.cts +1 -1
  43. package/dist/middleware.d.ts +1 -1
  44. package/dist/middleware.js +3 -3
  45. package/dist/migrations-AH2XIFSA.js +4 -0
  46. package/dist/{migrations-UFVJTPVT.js.map → migrations-AH2XIFSA.js.map} +1 -1
  47. package/dist/migrations-MIZFGFNS.cjs +13 -0
  48. package/dist/{migrations-VNYOSUNE.cjs.map → migrations-MIZFGFNS.cjs.map} +1 -1
  49. package/dist/{plugin-bootstrap-DXBAYaqM.d.ts → plugin-bootstrap-CZ1GDum7.d.ts} +802 -1
  50. package/dist/{plugin-bootstrap-DCXpeQVb.d.cts → plugin-bootstrap-DVGLQrcO.d.cts} +802 -1
  51. package/dist/routes.cjs +30 -30
  52. package/dist/routes.d.cts +1 -1
  53. package/dist/routes.d.ts +1 -1
  54. package/dist/routes.js +7 -7
  55. package/dist/services.cjs +39 -39
  56. package/dist/services.d.cts +1 -1
  57. package/dist/services.d.ts +1 -1
  58. package/dist/services.js +3 -3
  59. package/dist/templates.cjs +19 -19
  60. package/dist/templates.js +2 -2
  61. package/dist/utils.cjs +11 -11
  62. package/dist/utils.js +1 -1
  63. package/migrations/032_user_profiles.sql +1 -0
  64. package/migrations/034_security_audit_plugin.sql +27 -0
  65. package/migrations/035_user_profiles_data_column.sql +17 -0
  66. package/package.json +1 -1
  67. package/dist/chunk-6BVLPACH.cjs.map +0 -1
  68. package/dist/chunk-ASAEJ4B7.cjs.map +0 -1
  69. package/dist/chunk-DE5YTNCD.cjs.map +0 -1
  70. package/dist/chunk-H55AYIRI.js.map +0 -1
  71. package/dist/chunk-JJS7JZCH.js.map +0 -1
  72. package/dist/chunk-JTQBNSZX.js.map +0 -1
  73. package/dist/chunk-LFAQUR7P.cjs.map +0 -1
  74. package/dist/chunk-LTKV7AE5.cjs.map +0 -1
  75. package/dist/chunk-NMLFKXWW.js.map +0 -1
  76. package/dist/chunk-VJCLJH3X.js.map +0 -1
  77. package/dist/migrations-UFVJTPVT.js +0 -4
  78. package/dist/migrations-VNYOSUNE.cjs +0 -13
package/dist/index.d.cts CHANGED
@@ -1,11 +1,12 @@
1
- export { B as Bindings, S as SonicJSApp, a as SonicJSConfig, V as Variables, c as createSonicJSApp, s as setupCoreMiddleware, b as setupCoreRoutes } from './app-Ozl9agJG.cjs';
2
- import { B as schema } from './plugin-bootstrap-DCXpeQVb.cjs';
3
- export { D as Collection, E as Content, C as CorePlugin, F as DbPlugin, G as DbPluginHook, L as LogCategory, H as LogConfig, a as LogEntry, b as LogFilter, c as LogLevel, d as Logger, I as Media, M as Migration, e as MigrationService, f as MigrationStatus, N as NewCollection, J as NewContent, K as NewLogConfig, O as NewMedia, Q as NewPlugin, R as NewPluginActivityLog, S as NewPluginAsset, T as NewPluginHook, U as NewPluginRoute, V as NewSystemLog, W as NewUser, X as NewWorkflowHistory, Y as PluginActivityLog, Z as PluginAsset, P as PluginBootstrapService, _ as PluginRoute, g as PluginServiceClass, $ as SystemLog, a0 as User, a1 as WorkflowHistory, a2 as apiTokens, h as backfillFormSubmissions, i as cleanupRemovedCollections, a3 as collections, a4 as content, a5 as contentVersions, j as createContentFromSubmission, k as deriveCollectionSchemaFromFormio, l as deriveSubmissionTitle, m as fullCollectionSync, n as getAvailableCollectionNames, o as getLogger, p as getManagedCollections, q as initLogger, a6 as insertCollectionSchema, a7 as insertContentSchema, a8 as insertLogConfigSchema, a9 as insertMediaSchema, aa as insertPluginActivityLogSchema, ab as insertPluginAssetSchema, ac as insertPluginHookSchema, ad as insertPluginRouteSchema, ae as insertPluginSchema, af as insertSystemLogSchema, ag as insertUserSchema, ah as insertWorkflowHistorySchema, r as isCollectionManaged, s as loadCollectionConfig, t as loadCollectionConfigs, ai as logConfig, u as mapFormStatusToContentStatus, aj as media, ak as pluginActivityLog, al as pluginAssets, am as pluginHooks, an as pluginRoutes, ao as plugins, v as registerCollections, ap as selectCollectionSchema, aq as selectContentSchema, ar as selectLogConfigSchema, as as selectMediaSchema, at as selectPluginActivityLogSchema, au as selectPluginAssetSchema, av as selectPluginHookSchema, aw as selectPluginRouteSchema, ax as selectPluginSchema, ay as selectSystemLogSchema, az as selectUserSchema, aA as selectWorkflowHistorySchema, w as syncAllFormCollections, x as syncCollection, y as syncCollections, z as syncFormCollection, aB as systemLogs, aC as users, A as validateCollectionConfig, aD as workflowHistory } from './plugin-bootstrap-DCXpeQVb.cjs';
1
+ export { B as Bindings, a as SonicJSApp, S as SonicJSConfig, V as Variables, c as createSonicJSApp, s as setupCoreMiddleware, b as setupCoreRoutes } from './app-COElO4Rm.cjs';
2
+ import { B as schema } from './plugin-bootstrap-DVGLQrcO.cjs';
3
+ export { D as Collection, E as Content, C as CorePlugin, F as DbPlugin, G as DbPluginHook, L as LogCategory, H as LogConfig, a as LogEntry, b as LogFilter, c as LogLevel, d as Logger, I as Media, M as Migration, e as MigrationService, f as MigrationStatus, N as NewCollection, J as NewContent, K as NewLogConfig, O as NewMedia, Q as NewPlugin, R as NewPluginActivityLog, S as NewPluginAsset, T as NewPluginHook, U as NewPluginRoute, V as NewSystemLog, W as NewUser, X as NewWorkflowHistory, Y as PluginActivityLog, Z as PluginAsset, P as PluginBootstrapService, _ as PluginRoute, g as PluginServiceClass, $ as SystemLog, a0 as User, a1 as WorkflowHistory, a2 as apiTokens, h as backfillFormSubmissions, i as cleanupRemovedCollections, a3 as collections, a4 as content, a5 as contentVersions, j as createContentFromSubmission, k as deriveCollectionSchemaFromFormio, l as deriveSubmissionTitle, m as fullCollectionSync, n as getAvailableCollectionNames, o as getLogger, p as getManagedCollections, q as initLogger, a6 as insertCollectionSchema, a7 as insertContentSchema, a8 as insertLogConfigSchema, a9 as insertMediaSchema, aa as insertPluginActivityLogSchema, ab as insertPluginAssetSchema, ac as insertPluginHookSchema, ad as insertPluginRouteSchema, ae as insertPluginSchema, af as insertSystemLogSchema, ag as insertUserSchema, ah as insertWorkflowHistorySchema, r as isCollectionManaged, s as loadCollectionConfig, t as loadCollectionConfigs, ai as logConfig, u as mapFormStatusToContentStatus, aj as media, ak as pluginActivityLog, al as pluginAssets, am as pluginHooks, an as pluginRoutes, ao as plugins, v as registerCollections, ap as selectCollectionSchema, aq as selectContentSchema, ar as selectLogConfigSchema, as as selectMediaSchema, at as selectPluginActivityLogSchema, au as selectPluginAssetSchema, av as selectPluginHookSchema, aw as selectPluginRouteSchema, ax as selectPluginSchema, ay as selectSystemLogSchema, az as selectUserSchema, aA as selectWorkflowHistorySchema, w as syncAllFormCollections, x as syncCollection, y as syncCollections, z as syncFormCollection, aB as systemLogs, aC as users, A as validateCollectionConfig, aD as workflowHistory } from './plugin-bootstrap-DVGLQrcO.cjs';
4
4
  export { AuthManager, Permission, PermissionManager, UserPermissions, bootstrapMiddleware, cacheHeaders, compressionMiddleware, detailedLoggingMiddleware, getActivePlugins, isPluginActive, logActivity, loggingMiddleware, optionalAuth, performanceLoggingMiddleware, requireActivePlugin, requireActivePlugins, requireAnyPermission, requireAuth, requirePermission, requireRole, securityHeaders, securityLoggingMiddleware } from './middleware.cjs';
5
5
  export { H as HookSystemImpl, a as HookUtils, P as PluginManagerClass, b as PluginRegistryImpl, c as PluginValidatorClass, S as ScopedHookSystemClass } from './plugin-manager-BoM3Q7o7.cjs';
6
6
  export { ROUTES_INFO, adminApiRoutes, adminCheckboxRoutes, adminCodeExamplesRoutes, adminCollectionsRoutes, adminContentRoutes, adminDashboardRoutes, adminDesignRoutes, adminLogsRoutes, adminMediaRoutes, adminPluginRoutes, adminSettingsRoutes, adminTestimonialsRoutes, adminUsersRoutes, apiContentCrudRoutes, apiMediaRoutes, apiRoutes, apiSystemRoutes, authRoutes } from './routes.cjs';
7
7
  export { A as AlertData, C as ConfirmationDialogOptions, F as Filter, a as FilterBarData, b as FilterOption, c as FormData, d as FormField, P as PaginationData, T as TableColumn, e as TableData, g as getConfirmationDialogScript, r as renderAlert, f as renderConfirmationDialog, h as renderFilterBar, i as renderForm, j as renderFormField, k as renderPagination, l as renderTable } from './filter-bar.template-DlVYMk-T.cjs';
8
- export { C as CollectionConfig, b as CollectionConfigModule, c as CollectionSchema, d as CollectionSyncResult, F as FieldConfig, e as FieldType } from './collection-config-B4PG-AaF.cjs';
8
+ import { e as FieldType } from './collection-config-B4PG-AaF.cjs';
9
+ export { C as CollectionConfig, b as CollectionConfigModule, c as CollectionSchema, d as CollectionSyncResult, F as FieldConfig } from './collection-config-B4PG-AaF.cjs';
9
10
  export { A as AuthService, C as ContentService, H as HOOKS, a as HookContext, b as HookHandler, c as HookName, d as HookSystem, M as MediaService, P as Plugin, f as PluginAdminPage, g as PluginBuilderOptions, h as PluginComponent, i as PluginConfig, j as PluginContext, k as PluginHook, l as PluginLogger, m as PluginManager, n as PluginMenuItem, o as PluginMiddleware, p as PluginModel, q as PluginRegistry, r as PluginRoutes, s as PluginService, t as PluginStatus, u as PluginValidationResult, v as PluginValidator, S as ScopedHookSystem } from './plugin-DDYetMF-.cjs';
10
11
  export { P as PluginManifest } from './plugin-manifest-Dpy8wxIB.cjs';
11
12
  export { F as FilterCondition, a as FilterGroup, b as FilterOperator, Q as QueryFilter, c as QueryFilterBuilder, d as QueryResult, S as SONICJS_VERSION, T as TemplateRenderer, e as buildQuery, f as escapeHtml, g as getCoreVersion, m as metricsTracker, r as renderTemplate, s as sanitizeInput, h as sanitizeObject, t as templateRenderer } from './version-ChpccWQ1.cjs';
@@ -636,6 +637,53 @@ declare class OAuthService {
636
637
  generateState(): string;
637
638
  }
638
639
 
640
+ /**
641
+ * User Profile Config Registry
642
+ *
643
+ * Global singleton storing developer-defined custom profile field definitions.
644
+ * Set once at app boot via defineUserProfile(), queried by routes and templates.
645
+ */
646
+
647
+ interface ProfileFieldDefinition {
648
+ name: string;
649
+ label: string;
650
+ type: FieldType;
651
+ options?: string[];
652
+ default?: any;
653
+ required?: boolean;
654
+ placeholder?: string;
655
+ helpText?: string;
656
+ hidden?: boolean;
657
+ fields?: ProfileFieldDefinition[];
658
+ validation?: {
659
+ min?: number;
660
+ max?: number;
661
+ pattern?: string;
662
+ };
663
+ }
664
+ interface UserProfileConfig {
665
+ fields: ProfileFieldDefinition[];
666
+ registrationFields?: string[];
667
+ }
668
+ declare function defineUserProfile(config: UserProfileConfig): void;
669
+ declare function getUserProfileConfig(): UserProfileConfig | null;
670
+
671
+ /**
672
+ * User Profiles Plugin
673
+ *
674
+ * Configurable custom profile fields for users.
675
+ * Developers call defineUserProfile() at app boot to declare custom fields
676
+ * that are stored as JSON in user_profiles.data and rendered in the admin UI.
677
+ *
678
+ * API Routes:
679
+ * GET /api/user-profiles/schema → Public field definitions
680
+ * GET /api/user-profiles/:userId → Get custom data for a user (auth required)
681
+ * PUT /api/user-profiles/:userId → Update custom data for a user (auth required)
682
+ */
683
+
684
+ declare function createUserProfilesPlugin(): Plugin;
685
+ declare const userProfilesPlugin: Plugin;
686
+
639
687
  /**
640
688
  * @sonicjs/core - Main Entry Point
641
689
  *
@@ -656,4 +704,4 @@ declare class OAuthService {
656
704
 
657
705
  declare const VERSION: string;
658
706
 
659
- export { BUILT_IN_PROVIDERS, OAuthService, PluginBuilder, PluginHelpers, VERSION, createDb, createOAuthProvidersPlugin, oauthProvidersPlugin };
707
+ export { BUILT_IN_PROVIDERS, FieldType, OAuthService, PluginBuilder, PluginHelpers, type ProfileFieldDefinition, type UserProfileConfig, VERSION, createDb, createOAuthProvidersPlugin, createUserProfilesPlugin, defineUserProfile, getUserProfileConfig, oauthProvidersPlugin, userProfilesPlugin };
package/dist/index.d.ts CHANGED
@@ -1,11 +1,12 @@
1
- export { B as Bindings, S as SonicJSApp, a as SonicJSConfig, V as Variables, c as createSonicJSApp, s as setupCoreMiddleware, b as setupCoreRoutes } from './app-Ozl9agJG.js';
2
- import { B as schema } from './plugin-bootstrap-DXBAYaqM.js';
3
- export { D as Collection, E as Content, C as CorePlugin, F as DbPlugin, G as DbPluginHook, L as LogCategory, H as LogConfig, a as LogEntry, b as LogFilter, c as LogLevel, d as Logger, I as Media, M as Migration, e as MigrationService, f as MigrationStatus, N as NewCollection, J as NewContent, K as NewLogConfig, O as NewMedia, Q as NewPlugin, R as NewPluginActivityLog, S as NewPluginAsset, T as NewPluginHook, U as NewPluginRoute, V as NewSystemLog, W as NewUser, X as NewWorkflowHistory, Y as PluginActivityLog, Z as PluginAsset, P as PluginBootstrapService, _ as PluginRoute, g as PluginServiceClass, $ as SystemLog, a0 as User, a1 as WorkflowHistory, a2 as apiTokens, h as backfillFormSubmissions, i as cleanupRemovedCollections, a3 as collections, a4 as content, a5 as contentVersions, j as createContentFromSubmission, k as deriveCollectionSchemaFromFormio, l as deriveSubmissionTitle, m as fullCollectionSync, n as getAvailableCollectionNames, o as getLogger, p as getManagedCollections, q as initLogger, a6 as insertCollectionSchema, a7 as insertContentSchema, a8 as insertLogConfigSchema, a9 as insertMediaSchema, aa as insertPluginActivityLogSchema, ab as insertPluginAssetSchema, ac as insertPluginHookSchema, ad as insertPluginRouteSchema, ae as insertPluginSchema, af as insertSystemLogSchema, ag as insertUserSchema, ah as insertWorkflowHistorySchema, r as isCollectionManaged, s as loadCollectionConfig, t as loadCollectionConfigs, ai as logConfig, u as mapFormStatusToContentStatus, aj as media, ak as pluginActivityLog, al as pluginAssets, am as pluginHooks, an as pluginRoutes, ao as plugins, v as registerCollections, ap as selectCollectionSchema, aq as selectContentSchema, ar as selectLogConfigSchema, as as selectMediaSchema, at as selectPluginActivityLogSchema, au as selectPluginAssetSchema, av as selectPluginHookSchema, aw as selectPluginRouteSchema, ax as selectPluginSchema, ay as selectSystemLogSchema, az as selectUserSchema, aA as selectWorkflowHistorySchema, w as syncAllFormCollections, x as syncCollection, y as syncCollections, z as syncFormCollection, aB as systemLogs, aC as users, A as validateCollectionConfig, aD as workflowHistory } from './plugin-bootstrap-DXBAYaqM.js';
1
+ export { B as Bindings, a as SonicJSApp, S as SonicJSConfig, V as Variables, c as createSonicJSApp, s as setupCoreMiddleware, b as setupCoreRoutes } from './app-COElO4Rm.js';
2
+ import { B as schema } from './plugin-bootstrap-CZ1GDum7.js';
3
+ export { D as Collection, E as Content, C as CorePlugin, F as DbPlugin, G as DbPluginHook, L as LogCategory, H as LogConfig, a as LogEntry, b as LogFilter, c as LogLevel, d as Logger, I as Media, M as Migration, e as MigrationService, f as MigrationStatus, N as NewCollection, J as NewContent, K as NewLogConfig, O as NewMedia, Q as NewPlugin, R as NewPluginActivityLog, S as NewPluginAsset, T as NewPluginHook, U as NewPluginRoute, V as NewSystemLog, W as NewUser, X as NewWorkflowHistory, Y as PluginActivityLog, Z as PluginAsset, P as PluginBootstrapService, _ as PluginRoute, g as PluginServiceClass, $ as SystemLog, a0 as User, a1 as WorkflowHistory, a2 as apiTokens, h as backfillFormSubmissions, i as cleanupRemovedCollections, a3 as collections, a4 as content, a5 as contentVersions, j as createContentFromSubmission, k as deriveCollectionSchemaFromFormio, l as deriveSubmissionTitle, m as fullCollectionSync, n as getAvailableCollectionNames, o as getLogger, p as getManagedCollections, q as initLogger, a6 as insertCollectionSchema, a7 as insertContentSchema, a8 as insertLogConfigSchema, a9 as insertMediaSchema, aa as insertPluginActivityLogSchema, ab as insertPluginAssetSchema, ac as insertPluginHookSchema, ad as insertPluginRouteSchema, ae as insertPluginSchema, af as insertSystemLogSchema, ag as insertUserSchema, ah as insertWorkflowHistorySchema, r as isCollectionManaged, s as loadCollectionConfig, t as loadCollectionConfigs, ai as logConfig, u as mapFormStatusToContentStatus, aj as media, ak as pluginActivityLog, al as pluginAssets, am as pluginHooks, an as pluginRoutes, ao as plugins, v as registerCollections, ap as selectCollectionSchema, aq as selectContentSchema, ar as selectLogConfigSchema, as as selectMediaSchema, at as selectPluginActivityLogSchema, au as selectPluginAssetSchema, av as selectPluginHookSchema, aw as selectPluginRouteSchema, ax as selectPluginSchema, ay as selectSystemLogSchema, az as selectUserSchema, aA as selectWorkflowHistorySchema, w as syncAllFormCollections, x as syncCollection, y as syncCollections, z as syncFormCollection, aB as systemLogs, aC as users, A as validateCollectionConfig, aD as workflowHistory } from './plugin-bootstrap-CZ1GDum7.js';
4
4
  export { AuthManager, Permission, PermissionManager, UserPermissions, bootstrapMiddleware, cacheHeaders, compressionMiddleware, detailedLoggingMiddleware, getActivePlugins, isPluginActive, logActivity, loggingMiddleware, optionalAuth, performanceLoggingMiddleware, requireActivePlugin, requireActivePlugins, requireAnyPermission, requireAuth, requirePermission, requireRole, securityHeaders, securityLoggingMiddleware } from './middleware.js';
5
5
  export { H as HookSystemImpl, a as HookUtils, P as PluginManagerClass, b as PluginRegistryImpl, c as PluginValidatorClass, S as ScopedHookSystemClass } from './plugin-manager-Efx9RyDX.js';
6
6
  export { ROUTES_INFO, adminApiRoutes, adminCheckboxRoutes, adminCodeExamplesRoutes, adminCollectionsRoutes, adminContentRoutes, adminDashboardRoutes, adminDesignRoutes, adminLogsRoutes, adminMediaRoutes, adminPluginRoutes, adminSettingsRoutes, adminTestimonialsRoutes, adminUsersRoutes, apiContentCrudRoutes, apiMediaRoutes, apiRoutes, apiSystemRoutes, authRoutes } from './routes.js';
7
7
  export { A as AlertData, C as ConfirmationDialogOptions, F as Filter, a as FilterBarData, b as FilterOption, c as FormData, d as FormField, P as PaginationData, T as TableColumn, e as TableData, g as getConfirmationDialogScript, r as renderAlert, f as renderConfirmationDialog, h as renderFilterBar, i as renderForm, j as renderFormField, k as renderPagination, l as renderTable } from './filter-bar.template-DlVYMk-T.js';
8
- export { C as CollectionConfig, b as CollectionConfigModule, c as CollectionSchema, d as CollectionSyncResult, F as FieldConfig, e as FieldType } from './collection-config-B4PG-AaF.js';
8
+ import { e as FieldType } from './collection-config-B4PG-AaF.js';
9
+ export { C as CollectionConfig, b as CollectionConfigModule, c as CollectionSchema, d as CollectionSyncResult, F as FieldConfig } from './collection-config-B4PG-AaF.js';
9
10
  export { A as AuthService, C as ContentService, H as HOOKS, a as HookContext, b as HookHandler, c as HookName, d as HookSystem, M as MediaService, P as Plugin, f as PluginAdminPage, g as PluginBuilderOptions, h as PluginComponent, i as PluginConfig, j as PluginContext, k as PluginHook, l as PluginLogger, m as PluginManager, n as PluginMenuItem, o as PluginMiddleware, p as PluginModel, q as PluginRegistry, r as PluginRoutes, s as PluginService, t as PluginStatus, u as PluginValidationResult, v as PluginValidator, S as ScopedHookSystem } from './plugin-DDYetMF-.js';
10
11
  export { P as PluginManifest } from './plugin-manifest-Dpy8wxIB.js';
11
12
  export { F as FilterCondition, a as FilterGroup, b as FilterOperator, Q as QueryFilter, c as QueryFilterBuilder, d as QueryResult, S as SONICJS_VERSION, T as TemplateRenderer, e as buildQuery, f as escapeHtml, g as getCoreVersion, m as metricsTracker, r as renderTemplate, s as sanitizeInput, h as sanitizeObject, t as templateRenderer } from './version-ChpccWQ1.js';
@@ -636,6 +637,53 @@ declare class OAuthService {
636
637
  generateState(): string;
637
638
  }
638
639
 
640
+ /**
641
+ * User Profile Config Registry
642
+ *
643
+ * Global singleton storing developer-defined custom profile field definitions.
644
+ * Set once at app boot via defineUserProfile(), queried by routes and templates.
645
+ */
646
+
647
+ interface ProfileFieldDefinition {
648
+ name: string;
649
+ label: string;
650
+ type: FieldType;
651
+ options?: string[];
652
+ default?: any;
653
+ required?: boolean;
654
+ placeholder?: string;
655
+ helpText?: string;
656
+ hidden?: boolean;
657
+ fields?: ProfileFieldDefinition[];
658
+ validation?: {
659
+ min?: number;
660
+ max?: number;
661
+ pattern?: string;
662
+ };
663
+ }
664
+ interface UserProfileConfig {
665
+ fields: ProfileFieldDefinition[];
666
+ registrationFields?: string[];
667
+ }
668
+ declare function defineUserProfile(config: UserProfileConfig): void;
669
+ declare function getUserProfileConfig(): UserProfileConfig | null;
670
+
671
+ /**
672
+ * User Profiles Plugin
673
+ *
674
+ * Configurable custom profile fields for users.
675
+ * Developers call defineUserProfile() at app boot to declare custom fields
676
+ * that are stored as JSON in user_profiles.data and rendered in the admin UI.
677
+ *
678
+ * API Routes:
679
+ * GET /api/user-profiles/schema → Public field definitions
680
+ * GET /api/user-profiles/:userId → Get custom data for a user (auth required)
681
+ * PUT /api/user-profiles/:userId → Update custom data for a user (auth required)
682
+ */
683
+
684
+ declare function createUserProfilesPlugin(): Plugin;
685
+ declare const userProfilesPlugin: Plugin;
686
+
639
687
  /**
640
688
  * @sonicjs/core - Main Entry Point
641
689
  *
@@ -656,4 +704,4 @@ declare class OAuthService {
656
704
 
657
705
  declare const VERSION: string;
658
706
 
659
- export { BUILT_IN_PROVIDERS, OAuthService, PluginBuilder, PluginHelpers, VERSION, createDb, createOAuthProvidersPlugin, oauthProvidersPlugin };
707
+ export { BUILT_IN_PROVIDERS, FieldType, OAuthService, PluginBuilder, PluginHelpers, type ProfileFieldDefinition, type UserProfileConfig, VERSION, createDb, createOAuthProvidersPlugin, createUserProfilesPlugin, defineUserProfile, getUserProfileConfig, oauthProvidersPlugin, userProfilesPlugin };