@sonicjs-cms/core 2.19.0 → 3.0.0-beta.10

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 (230) hide show
  1. package/README.md +52 -52
  2. package/dist/admin-documents-form.template-DDSH6ROU.js +6 -0
  3. package/dist/{admin-layout-catalyst.template-UMTIN66R.js.map → admin-documents-form.template-DDSH6ROU.js.map} +1 -1
  4. package/dist/admin-documents-form.template-LSZKGA5J.cjs +19 -0
  5. package/dist/{admin-layout-catalyst.template-HFD37TY5.cjs.map → admin-documents-form.template-LSZKGA5J.cjs.map} +1 -1
  6. package/dist/{filter-bar.template-DlVYMk-T.d.cts → admin-layout-catalyst.template-DrwDUfsE.d.cts} +25 -1
  7. package/dist/{filter-bar.template-DlVYMk-T.d.ts → admin-layout-catalyst.template-DrwDUfsE.d.ts} +25 -1
  8. package/dist/admin-layout-catalyst.template-KDHKVLXR.cjs +21 -0
  9. package/dist/admin-layout-catalyst.template-KDHKVLXR.cjs.map +1 -0
  10. package/dist/admin-layout-catalyst.template-YQ4EMF2J.js +7 -0
  11. package/dist/admin-layout-catalyst.template-YQ4EMF2J.js.map +1 -0
  12. package/dist/app-Bo0X1OWX.d.ts +1268 -0
  13. package/dist/app-Do66yCcV.d.cts +1268 -0
  14. package/dist/cache-DDARE4QE.js +4 -0
  15. package/dist/cache-DDARE4QE.js.map +1 -0
  16. package/dist/cache-LVYS4BPL.cjs +33 -0
  17. package/dist/cache-LVYS4BPL.cjs.map +1 -0
  18. package/dist/chunk-2CB4KY7I.cjs +771 -0
  19. package/dist/chunk-2CB4KY7I.cjs.map +1 -0
  20. package/dist/{chunk-ABB34XUS.cjs → chunk-3KYKEXV7.cjs} +667 -19
  21. package/dist/chunk-3KYKEXV7.cjs.map +1 -0
  22. package/dist/chunk-4BTBSXMR.cjs +912 -0
  23. package/dist/chunk-4BTBSXMR.cjs.map +1 -0
  24. package/dist/{chunk-55RDMDOP.js → chunk-5V62WT6M.js} +181 -57
  25. package/dist/chunk-5V62WT6M.js.map +1 -0
  26. package/dist/{chunk-OCL3HMEG.js → chunk-6OC6MF3C.js} +7004 -9807
  27. package/dist/chunk-6OC6MF3C.js.map +1 -0
  28. package/dist/chunk-AI663NBO.js +821 -0
  29. package/dist/chunk-AI663NBO.js.map +1 -0
  30. package/dist/chunk-ALDRXTUO.js +273 -0
  31. package/dist/chunk-ALDRXTUO.js.map +1 -0
  32. package/dist/{chunk-TFNTM3OA.js → chunk-ATUPB6MN.js} +645 -15
  33. package/dist/chunk-ATUPB6MN.js.map +1 -0
  34. package/dist/chunk-BLMTL57B.js +767 -0
  35. package/dist/chunk-BLMTL57B.js.map +1 -0
  36. package/dist/{chunk-4ZSNJDLS.cjs → chunk-CRGUD4KC.cjs} +9 -9
  37. package/dist/chunk-CRGUD4KC.cjs.map +1 -0
  38. package/dist/chunk-F67UK75A.cjs +158 -0
  39. package/dist/chunk-F67UK75A.cjs.map +1 -0
  40. package/dist/chunk-GCDZZNIN.js +192 -0
  41. package/dist/chunk-GCDZZNIN.js.map +1 -0
  42. package/dist/chunk-HIKBY7MS.cjs +70 -0
  43. package/dist/chunk-HIKBY7MS.cjs.map +1 -0
  44. package/dist/{chunk-4NPCDK6B.js → chunk-IDCZBF35.js} +557 -90
  45. package/dist/chunk-IDCZBF35.js.map +1 -0
  46. package/dist/chunk-IESEVHXL.js +66 -0
  47. package/dist/chunk-IESEVHXL.js.map +1 -0
  48. package/dist/chunk-IGADDMXH.js +387 -0
  49. package/dist/chunk-IGADDMXH.js.map +1 -0
  50. package/dist/chunk-IHTXB7AT.cjs +276 -0
  51. package/dist/chunk-IHTXB7AT.cjs.map +1 -0
  52. package/dist/chunk-IVPRUGTY.js +242 -0
  53. package/dist/chunk-IVPRUGTY.js.map +1 -0
  54. package/dist/{chunk-JZVHLLSI.cjs → chunk-IXUHXTHW.cjs} +2 -151
  55. package/dist/chunk-IXUHXTHW.cjs.map +1 -0
  56. package/dist/chunk-J6JTWD2A.cjs +100 -0
  57. package/dist/chunk-J6JTWD2A.cjs.map +1 -0
  58. package/dist/chunk-JEQ7FLOD.cjs +199 -0
  59. package/dist/chunk-JEQ7FLOD.cjs.map +1 -0
  60. package/dist/{chunk-ON5ZMSU4.js → chunk-JQISFW6U.js} +3 -3
  61. package/dist/chunk-JQISFW6U.js.map +1 -0
  62. package/dist/chunk-K25XHMM3.js +566 -0
  63. package/dist/chunk-K25XHMM3.js.map +1 -0
  64. package/dist/{chunk-UYJ6TJHX.cjs → chunk-K623Q6WD.cjs} +181 -56
  65. package/dist/chunk-K623Q6WD.cjs.map +1 -0
  66. package/dist/{chunk-7A4CB7T3.cjs → chunk-MUNO67TT.cjs} +561 -91
  67. package/dist/chunk-MUNO67TT.cjs.map +1 -0
  68. package/dist/chunk-N32OWET6.cjs +327 -0
  69. package/dist/chunk-N32OWET6.cjs.map +1 -0
  70. package/dist/chunk-NUKJ54GA.cjs +245 -0
  71. package/dist/chunk-NUKJ54GA.cjs.map +1 -0
  72. package/dist/{chunk-XWIA3HVX.js → chunk-OBA2RYZN.js} +6 -1249
  73. package/dist/chunk-OBA2RYZN.js.map +1 -0
  74. package/dist/chunk-PMGOBS6X.cjs +408 -0
  75. package/dist/chunk-PMGOBS6X.cjs.map +1 -0
  76. package/dist/{chunk-OHYBNCVL.cjs → chunk-PXNTCCPE.cjs} +10 -1256
  77. package/dist/chunk-PXNTCCPE.cjs.map +1 -0
  78. package/dist/chunk-PYVFXCSD.js +1828 -0
  79. package/dist/chunk-PYVFXCSD.js.map +1 -0
  80. package/dist/{chunk-BU7SFHGP.js → chunk-QZGABF2M.js} +3 -149
  81. package/dist/chunk-QZGABF2M.js.map +1 -0
  82. package/dist/{chunk-E4YFJBM2.cjs → chunk-R4ILO3W6.cjs} +876 -829
  83. package/dist/chunk-R4ILO3W6.cjs.map +1 -0
  84. package/dist/chunk-RMRJGMDE.js +323 -0
  85. package/dist/chunk-RMRJGMDE.js.map +1 -0
  86. package/dist/chunk-RNZFGN4R.js +88 -0
  87. package/dist/chunk-RNZFGN4R.js.map +1 -0
  88. package/dist/chunk-RQ6N3FTV.js +900 -0
  89. package/dist/chunk-RQ6N3FTV.js.map +1 -0
  90. package/dist/{chunk-R4FOLLFB.cjs → chunk-TO6EY4P7.cjs} +8730 -11520
  91. package/dist/chunk-TO6EY4P7.cjs.map +1 -0
  92. package/dist/chunk-V464XBYS.js +154 -0
  93. package/dist/chunk-V464XBYS.js.map +1 -0
  94. package/dist/chunk-YA3TJ65D.cjs +575 -0
  95. package/dist/chunk-YA3TJ65D.cjs.map +1 -0
  96. package/dist/chunk-YP7GW2G5.cjs +866 -0
  97. package/dist/chunk-YP7GW2G5.cjs.map +1 -0
  98. package/dist/{collection-config-B4PG-AaF.d.cts → collection-config-JgHOpFCG.d.cts} +30 -2
  99. package/dist/{collection-config-B4PG-AaF.d.ts → collection-config-JgHOpFCG.d.ts} +30 -2
  100. package/dist/config-HFXANXCC.js +6 -0
  101. package/dist/config-HFXANXCC.js.map +1 -0
  102. package/dist/config-ON6FNMYX.cjs +19 -0
  103. package/dist/config-ON6FNMYX.cjs.map +1 -0
  104. package/dist/define-plugin-BzNHc1ZI.d.ts +1321 -0
  105. package/dist/define-plugin-IWDKYaVm.d.cts +1321 -0
  106. package/dist/document-projection-TDWRJX3Z.cjs +13 -0
  107. package/dist/document-projection-TDWRJX3Z.cjs.map +1 -0
  108. package/dist/document-projection-YYMC6I4U.js +4 -0
  109. package/dist/document-projection-YYMC6I4U.js.map +1 -0
  110. package/dist/index.cjs +13736 -4326
  111. package/dist/index.cjs.map +1 -1
  112. package/dist/index.d.cts +331 -493
  113. package/dist/index.d.ts +331 -493
  114. package/dist/index.js +13455 -4067
  115. package/dist/index.js.map +1 -1
  116. package/dist/middleware.cjs +38 -32
  117. package/dist/middleware.d.cts +50 -7
  118. package/dist/middleware.d.ts +50 -7
  119. package/dist/middleware.js +9 -3
  120. package/dist/migrations-2XHQEGOQ.cjs +13 -0
  121. package/dist/{migrations-566IIPS2.cjs.map → migrations-2XHQEGOQ.cjs.map} +1 -1
  122. package/dist/migrations-PE3CDVSM.js +4 -0
  123. package/dist/{migrations-H5IXZNCO.js.map → migrations-PE3CDVSM.js.map} +1 -1
  124. package/dist/{plugin-bootstrap-DfVerYV4.d.cts → plugin-bootstrap-B8ThJU21.d.cts} +4315 -1661
  125. package/dist/{plugin-bootstrap-P_ciLp_C.d.ts → plugin-bootstrap-qu8hJgUt.d.ts} +4315 -1661
  126. package/dist/plugins.cjs +171 -12
  127. package/dist/plugins.d.cts +36 -2
  128. package/dist/plugins.d.ts +36 -2
  129. package/dist/plugins.js +5 -2
  130. package/dist/rbac-O73MFKDA.js +5 -0
  131. package/dist/rbac-O73MFKDA.js.map +1 -0
  132. package/dist/rbac-VONLJJKB.cjs +14 -0
  133. package/dist/rbac-VONLJJKB.cjs.map +1 -0
  134. package/dist/routes.cjs +42 -46
  135. package/dist/routes.d.cts +56 -146
  136. package/dist/routes.d.ts +56 -146
  137. package/dist/routes.js +18 -10
  138. package/dist/services.cjs +43 -76
  139. package/dist/services.d.cts +93 -55
  140. package/dist/services.d.ts +93 -55
  141. package/dist/services.js +6 -3
  142. package/dist/{telemetry-B9vIV4wh.d.cts → telemetry-Cku1ax74.d.cts} +1 -1
  143. package/dist/{telemetry-B9vIV4wh.d.ts → telemetry-Cku1ax74.d.ts} +1 -1
  144. package/dist/templates.cjs +17 -29
  145. package/dist/templates.d.cts +2 -89
  146. package/dist/templates.d.ts +2 -89
  147. package/dist/templates.js +3 -3
  148. package/dist/types-Dea1eNxU.d.cts +286 -0
  149. package/dist/types-Dea1eNxU.d.ts +286 -0
  150. package/dist/types.d.cts +2 -2
  151. package/dist/types.d.ts +2 -2
  152. package/dist/utils.cjs +21 -20
  153. package/dist/utils.d.cts +2 -2
  154. package/dist/utils.d.ts +2 -2
  155. package/dist/utils.js +3 -2
  156. package/migrations/0001_core.sql +184 -0
  157. package/migrations/0002_documents.sql +163 -0
  158. package/package.json +12 -7
  159. package/dist/admin-layout-catalyst.template-HFD37TY5.cjs +0 -17
  160. package/dist/admin-layout-catalyst.template-UMTIN66R.js +0 -7
  161. package/dist/app-C9esKLmh.d.cts +0 -112
  162. package/dist/app-C9esKLmh.d.ts +0 -112
  163. package/dist/chunk-4NPCDK6B.js.map +0 -1
  164. package/dist/chunk-4ZSNJDLS.cjs.map +0 -1
  165. package/dist/chunk-55RDMDOP.js.map +0 -1
  166. package/dist/chunk-635JAMSE.cjs +0 -653
  167. package/dist/chunk-635JAMSE.cjs.map +0 -1
  168. package/dist/chunk-7A4CB7T3.cjs.map +0 -1
  169. package/dist/chunk-ABB34XUS.cjs.map +0 -1
  170. package/dist/chunk-BU7SFHGP.js.map +0 -1
  171. package/dist/chunk-E4YFJBM2.cjs.map +0 -1
  172. package/dist/chunk-EXNEW5US.js +0 -648
  173. package/dist/chunk-EXNEW5US.js.map +0 -1
  174. package/dist/chunk-JZV22DEV.js +0 -1783
  175. package/dist/chunk-JZV22DEV.js.map +0 -1
  176. package/dist/chunk-JZVHLLSI.cjs.map +0 -1
  177. package/dist/chunk-OCL3HMEG.js.map +0 -1
  178. package/dist/chunk-OHYBNCVL.cjs.map +0 -1
  179. package/dist/chunk-ON5ZMSU4.js.map +0 -1
  180. package/dist/chunk-QFWHAFEO.js +0 -1843
  181. package/dist/chunk-QFWHAFEO.js.map +0 -1
  182. package/dist/chunk-R4FOLLFB.cjs.map +0 -1
  183. package/dist/chunk-RLMUFFUD.cjs +0 -2219
  184. package/dist/chunk-RLMUFFUD.cjs.map +0 -1
  185. package/dist/chunk-TFNTM3OA.js.map +0 -1
  186. package/dist/chunk-UYJ6TJHX.cjs.map +0 -1
  187. package/dist/chunk-WAEQXGCX.cjs +0 -1898
  188. package/dist/chunk-WAEQXGCX.cjs.map +0 -1
  189. package/dist/chunk-XWIA3HVX.js.map +0 -1
  190. package/dist/chunk-ZYAYUIZE.js +0 -2217
  191. package/dist/chunk-ZYAYUIZE.js.map +0 -1
  192. package/dist/migrations-566IIPS2.cjs +0 -13
  193. package/dist/migrations-H5IXZNCO.js +0 -4
  194. package/dist/plugin-manager-BoM3Q7o7.d.cts +0 -328
  195. package/dist/plugin-manager-Efx9RyDX.d.ts +0 -328
  196. package/migrations/001_initial_schema.sql +0 -170
  197. package/migrations/002_faq_plugin.sql +0 -86
  198. package/migrations/003_stage5_enhancements.sql +0 -121
  199. package/migrations/004_stage6_user_management.sql +0 -183
  200. package/migrations/005_stage7_workflow_automation.sql +0 -294
  201. package/migrations/006_plugin_system.sql +0 -155
  202. package/migrations/007_demo_login_plugin.sql +0 -23
  203. package/migrations/008_fix_slug_validation.sql +0 -22
  204. package/migrations/009_system_logging.sql +0 -57
  205. package/migrations/011_config_managed_collections.sql +0 -15
  206. package/migrations/012_testimonials_plugin.sql +0 -80
  207. package/migrations/013_code_examples_plugin.sql +0 -177
  208. package/migrations/014_fix_plugin_registry.sql +0 -88
  209. package/migrations/015_add_remaining_plugins.sql +0 -89
  210. package/migrations/016_remove_duplicate_cache_plugin.sql +0 -17
  211. package/migrations/017_auth_configurable_fields.sql +0 -49
  212. package/migrations/018_settings_table.sql +0 -23
  213. package/migrations/019_remove_blog_posts_collection.sql +0 -15
  214. package/migrations/020_add_email_plugin.sql +0 -22
  215. package/migrations/021_add_magic_link_auth_plugin.sql +0 -42
  216. package/migrations/022_add_tinymce_plugin.sql +0 -25
  217. package/migrations/023_add_easy_mdx_plugin.sql +0 -25
  218. package/migrations/024_add_quill_editor_plugin.sql +0 -25
  219. package/migrations/025_add_easymde_plugin.sql +0 -25
  220. package/migrations/026_add_otp_login.sql +0 -42
  221. package/migrations/027_fix_slug_field_type.sql +0 -18
  222. package/migrations/028_fix_slug_field_type_in_schemas.sql +0 -30
  223. package/migrations/029_add_forms_system.sql +0 -184
  224. package/migrations/030_add_turnstile_to_forms.sql +0 -14
  225. package/migrations/031_ai_search_plugin.sql +0 -45
  226. package/migrations/032_user_profiles.sql +0 -37
  227. package/migrations/033_form_content_integration.sql +0 -19
  228. package/migrations/034_security_audit_plugin.sql +0 -27
  229. package/migrations/035_user_profiles_data_column.sql +0 -16
  230. package/migrations/036_analytics_events.sql +0 -22
@@ -0,0 +1,866 @@
1
+ 'use strict';
2
+
3
+ var chunkIGJUBJBW_cjs = require('./chunk-IGJUBJBW.cjs');
4
+ var sqliteCore = require('drizzle-orm/sqlite-core');
5
+ var v4 = require('zod/v4');
6
+ var drizzleOrm = require('drizzle-orm');
7
+
8
+ // src/db/schema.ts
9
+ var schema_exports = {};
10
+ chunkIGJUBJBW_cjs.__export(schema_exports, {
11
+ account: () => account,
12
+ apiTokens: () => apiTokens,
13
+ authAccount: () => authAccount,
14
+ authSession: () => authSession,
15
+ authTenant: () => authTenant,
16
+ authTenantInvitation: () => authTenantInvitation,
17
+ authTenantMember: () => authTenantMember,
18
+ authTenantTeam: () => authTenantTeam,
19
+ authUser: () => authUser,
20
+ authVerification: () => authVerification,
21
+ content: () => content,
22
+ contentVersions: () => contentVersions,
23
+ emailLog: () => emailLog,
24
+ formFiles: () => formFiles,
25
+ formSubmissions: () => formSubmissions,
26
+ forms: () => forms,
27
+ insertContentSchema: () => insertContentSchema,
28
+ insertEmailLogSchema: () => insertEmailLogSchema,
29
+ insertFormFileSchema: () => insertFormFileSchema,
30
+ insertFormSchema: () => insertFormSchema,
31
+ insertFormSubmissionSchema: () => insertFormSubmissionSchema,
32
+ insertLogConfigSchema: () => insertLogConfigSchema,
33
+ insertMediaSchema: () => insertMediaSchema,
34
+ insertPluginActivityLogSchema: () => insertPluginActivityLogSchema,
35
+ insertPluginAssetSchema: () => insertPluginAssetSchema,
36
+ insertPluginHookSchema: () => insertPluginHookSchema,
37
+ insertPluginRouteSchema: () => insertPluginRouteSchema,
38
+ insertPluginSchema: () => insertPluginSchema,
39
+ insertSecurityEventSchema: () => insertSecurityEventSchema,
40
+ insertSystemLogSchema: () => insertSystemLogSchema,
41
+ insertUserSchema: () => insertUserSchema,
42
+ insertWorkflowHistorySchema: () => insertWorkflowHistorySchema,
43
+ logConfig: () => logConfig,
44
+ media: () => media,
45
+ pluginActivityLog: () => pluginActivityLog,
46
+ pluginAssets: () => pluginAssets,
47
+ pluginHooks: () => pluginHooks,
48
+ pluginRoutes: () => pluginRoutes,
49
+ plugins: () => plugins,
50
+ securityEvents: () => securityEvents,
51
+ selectContentSchema: () => selectContentSchema,
52
+ selectEmailLogSchema: () => selectEmailLogSchema,
53
+ selectFormFileSchema: () => selectFormFileSchema,
54
+ selectFormSchema: () => selectFormSchema,
55
+ selectFormSubmissionSchema: () => selectFormSubmissionSchema,
56
+ selectLogConfigSchema: () => selectLogConfigSchema,
57
+ selectMediaSchema: () => selectMediaSchema,
58
+ selectPluginActivityLogSchema: () => selectPluginActivityLogSchema,
59
+ selectPluginAssetSchema: () => selectPluginAssetSchema,
60
+ selectPluginHookSchema: () => selectPluginHookSchema,
61
+ selectPluginRouteSchema: () => selectPluginRouteSchema,
62
+ selectPluginSchema: () => selectPluginSchema,
63
+ selectSecurityEventSchema: () => selectSecurityEventSchema,
64
+ selectSystemLogSchema: () => selectSystemLogSchema,
65
+ selectUserSchema: () => selectUserSchema,
66
+ selectWorkflowHistorySchema: () => selectWorkflowHistorySchema,
67
+ session: () => session,
68
+ systemLogs: () => systemLogs,
69
+ users: () => users,
70
+ verification: () => verification,
71
+ workflowHistory: () => workflowHistory
72
+ });
73
+ var CONSTANTS = {
74
+ INT8_MIN: -128,
75
+ INT8_MAX: 127,
76
+ INT8_UNSIGNED_MAX: 255,
77
+ INT16_MIN: -32768,
78
+ INT16_MAX: 32767,
79
+ INT16_UNSIGNED_MAX: 65535,
80
+ INT24_MIN: -8388608,
81
+ INT24_MAX: 8388607,
82
+ INT24_UNSIGNED_MAX: 16777215,
83
+ INT32_MIN: -2147483648,
84
+ INT32_MAX: 2147483647,
85
+ INT32_UNSIGNED_MAX: 4294967295,
86
+ INT48_MIN: -140737488355328,
87
+ INT48_MAX: 140737488355327,
88
+ INT48_UNSIGNED_MAX: 281474976710655,
89
+ INT64_MIN: -9223372036854775808n,
90
+ INT64_MAX: 9223372036854775807n,
91
+ INT64_UNSIGNED_MAX: 18446744073709551615n
92
+ };
93
+ function isColumnType(column, columnTypes) {
94
+ return columnTypes.includes(column.columnType);
95
+ }
96
+ function isWithEnum(column) {
97
+ return "enumValues" in column && Array.isArray(column.enumValues) && column.enumValues.length > 0;
98
+ }
99
+ var isPgEnum = isWithEnum;
100
+ var literalSchema = v4.z.union([v4.z.string(), v4.z.number(), v4.z.boolean(), v4.z.null()]);
101
+ var jsonSchema = v4.z.union([
102
+ literalSchema,
103
+ v4.z.record(v4.z.string(), v4.z.any()),
104
+ v4.z.array(v4.z.any())
105
+ ]);
106
+ var bufferSchema = v4.z.custom((v) => v instanceof Buffer);
107
+ function columnToSchema(column, factory) {
108
+ const z$1 = v4.z;
109
+ const coerce = {};
110
+ let schema;
111
+ if (isWithEnum(column)) {
112
+ schema = column.enumValues.length ? z$1.enum(column.enumValues) : z$1.string();
113
+ }
114
+ if (!schema) {
115
+ if (isColumnType(column, ["PgGeometry", "PgPointTuple"])) {
116
+ schema = z$1.tuple([z$1.number(), z$1.number()]);
117
+ } else if (isColumnType(column, ["PgGeometryObject", "PgPointObject"])) {
118
+ schema = z$1.object({ x: z$1.number(), y: z$1.number() });
119
+ } else if (isColumnType(column, ["PgHalfVector", "PgVector"])) {
120
+ schema = z$1.array(z$1.number());
121
+ schema = column.dimensions ? schema.length(column.dimensions) : schema;
122
+ } else if (isColumnType(column, ["PgLine"])) {
123
+ schema = z$1.tuple([z$1.number(), z$1.number(), z$1.number()]);
124
+ } else if (isColumnType(column, ["PgLineABC"])) {
125
+ schema = z$1.object({
126
+ a: z$1.number(),
127
+ b: z$1.number(),
128
+ c: z$1.number()
129
+ });
130
+ } else if (isColumnType(column, ["PgArray"])) {
131
+ schema = z$1.array(columnToSchema(column.baseColumn));
132
+ schema = column.size ? schema.length(column.size) : schema;
133
+ } else if (column.dataType === "array") {
134
+ schema = z$1.array(z$1.any());
135
+ } else if (column.dataType === "number") {
136
+ schema = numberColumnToSchema(column, z$1, coerce);
137
+ } else if (column.dataType === "bigint") {
138
+ schema = bigintColumnToSchema(column, z$1, coerce);
139
+ } else if (column.dataType === "boolean") {
140
+ schema = coerce === true || coerce.boolean ? z$1.coerce.boolean() : z$1.boolean();
141
+ } else if (column.dataType === "date") {
142
+ schema = coerce === true || coerce.date ? z$1.coerce.date() : z$1.date();
143
+ } else if (column.dataType === "string") {
144
+ schema = stringColumnToSchema(column, z$1, coerce);
145
+ } else if (column.dataType === "json") {
146
+ schema = jsonSchema;
147
+ } else if (column.dataType === "custom") {
148
+ schema = z$1.any();
149
+ } else if (column.dataType === "buffer") {
150
+ schema = bufferSchema;
151
+ }
152
+ }
153
+ if (!schema) {
154
+ schema = z$1.any();
155
+ }
156
+ return schema;
157
+ }
158
+ function numberColumnToSchema(column, z2, coerce) {
159
+ let unsigned = column.getSQLType().includes("unsigned");
160
+ let min;
161
+ let max;
162
+ let integer2 = false;
163
+ if (isColumnType(column, ["MySqlTinyInt", "SingleStoreTinyInt"])) {
164
+ min = unsigned ? 0 : CONSTANTS.INT8_MIN;
165
+ max = unsigned ? CONSTANTS.INT8_UNSIGNED_MAX : CONSTANTS.INT8_MAX;
166
+ integer2 = true;
167
+ } else if (isColumnType(column, [
168
+ "PgSmallInt",
169
+ "PgSmallSerial",
170
+ "MySqlSmallInt",
171
+ "SingleStoreSmallInt"
172
+ ])) {
173
+ min = unsigned ? 0 : CONSTANTS.INT16_MIN;
174
+ max = unsigned ? CONSTANTS.INT16_UNSIGNED_MAX : CONSTANTS.INT16_MAX;
175
+ integer2 = true;
176
+ } else if (isColumnType(column, [
177
+ "PgReal",
178
+ "MySqlFloat",
179
+ "MySqlMediumInt",
180
+ "SingleStoreMediumInt",
181
+ "SingleStoreFloat"
182
+ ])) {
183
+ min = unsigned ? 0 : CONSTANTS.INT24_MIN;
184
+ max = unsigned ? CONSTANTS.INT24_UNSIGNED_MAX : CONSTANTS.INT24_MAX;
185
+ integer2 = isColumnType(column, ["MySqlMediumInt", "SingleStoreMediumInt"]);
186
+ } else if (isColumnType(column, [
187
+ "PgInteger",
188
+ "PgSerial",
189
+ "MySqlInt",
190
+ "SingleStoreInt"
191
+ ])) {
192
+ min = unsigned ? 0 : CONSTANTS.INT32_MIN;
193
+ max = unsigned ? CONSTANTS.INT32_UNSIGNED_MAX : CONSTANTS.INT32_MAX;
194
+ integer2 = true;
195
+ } else if (isColumnType(column, [
196
+ "PgDoublePrecision",
197
+ "MySqlReal",
198
+ "MySqlDouble",
199
+ "SingleStoreReal",
200
+ "SingleStoreDouble",
201
+ "SQLiteReal"
202
+ ])) {
203
+ min = unsigned ? 0 : CONSTANTS.INT48_MIN;
204
+ max = unsigned ? CONSTANTS.INT48_UNSIGNED_MAX : CONSTANTS.INT48_MAX;
205
+ } else if (isColumnType(column, [
206
+ "PgBigInt53",
207
+ "PgBigSerial53",
208
+ "MySqlBigInt53",
209
+ "MySqlSerial",
210
+ "SingleStoreBigInt53",
211
+ "SingleStoreSerial",
212
+ "SQLiteInteger"
213
+ ])) {
214
+ unsigned = unsigned || isColumnType(column, ["MySqlSerial", "SingleStoreSerial"]);
215
+ min = unsigned ? 0 : Number.MIN_SAFE_INTEGER;
216
+ max = Number.MAX_SAFE_INTEGER;
217
+ integer2 = true;
218
+ } else if (isColumnType(column, ["MySqlYear", "SingleStoreYear"])) {
219
+ min = 1901;
220
+ max = 2155;
221
+ integer2 = true;
222
+ } else {
223
+ min = Number.MIN_SAFE_INTEGER;
224
+ max = Number.MAX_SAFE_INTEGER;
225
+ }
226
+ let schema = coerce === true || coerce?.number ? integer2 ? z2.coerce.number() : z2.coerce.number().int() : integer2 ? z2.int() : z2.number();
227
+ schema = schema.gte(min).lte(max);
228
+ return schema;
229
+ }
230
+ function bigintColumnToSchema(column, z2, coerce) {
231
+ const unsigned = column.getSQLType().includes("unsigned");
232
+ const min = unsigned ? 0n : CONSTANTS.INT64_MIN;
233
+ const max = unsigned ? CONSTANTS.INT64_UNSIGNED_MAX : CONSTANTS.INT64_MAX;
234
+ const schema = coerce === true || coerce?.bigint ? z2.coerce.bigint() : z2.bigint();
235
+ return schema.gte(min).lte(max);
236
+ }
237
+ function stringColumnToSchema(column, z2, coerce) {
238
+ if (isColumnType(column, ["PgUUID"])) {
239
+ return z2.uuid();
240
+ }
241
+ let max;
242
+ let regex;
243
+ let fixed = false;
244
+ if (isColumnType(column, ["PgVarchar", "SQLiteText"])) {
245
+ max = column.length;
246
+ } else if (isColumnType(column, ["MySqlVarChar", "SingleStoreVarChar"])) {
247
+ max = column.length ?? CONSTANTS.INT16_UNSIGNED_MAX;
248
+ } else if (isColumnType(column, ["MySqlText", "SingleStoreText"])) {
249
+ if (column.textType === "longtext") {
250
+ max = CONSTANTS.INT32_UNSIGNED_MAX;
251
+ } else if (column.textType === "mediumtext") {
252
+ max = CONSTANTS.INT24_UNSIGNED_MAX;
253
+ } else if (column.textType === "text") {
254
+ max = CONSTANTS.INT16_UNSIGNED_MAX;
255
+ } else {
256
+ max = CONSTANTS.INT8_UNSIGNED_MAX;
257
+ }
258
+ }
259
+ if (isColumnType(column, [
260
+ "PgChar",
261
+ "MySqlChar",
262
+ "SingleStoreChar"
263
+ ])) {
264
+ max = column.length;
265
+ fixed = true;
266
+ }
267
+ if (isColumnType(column, ["PgBinaryVector"])) {
268
+ regex = /^[01]+$/;
269
+ max = column.dimensions;
270
+ }
271
+ let schema = coerce === true || coerce?.string ? z2.coerce.string() : z2.string();
272
+ schema = regex ? schema.regex(regex) : schema;
273
+ return max && fixed ? schema.length(max) : max ? schema.max(max) : schema;
274
+ }
275
+ function getColumns(tableLike) {
276
+ return drizzleOrm.isTable(tableLike) ? drizzleOrm.getTableColumns(tableLike) : drizzleOrm.getViewSelectedFields(tableLike);
277
+ }
278
+ function handleColumns(columns, refinements, conditions, factory) {
279
+ const columnSchemas = {};
280
+ for (const [key, selected] of Object.entries(columns)) {
281
+ if (!drizzleOrm.is(selected, drizzleOrm.Column) && !drizzleOrm.is(selected, drizzleOrm.SQL) && !drizzleOrm.is(selected, drizzleOrm.SQL.Aliased) && typeof selected === "object") {
282
+ const columns2 = drizzleOrm.isTable(selected) || drizzleOrm.isView(selected) ? getColumns(selected) : selected;
283
+ columnSchemas[key] = handleColumns(columns2, refinements[key] ?? {}, conditions);
284
+ continue;
285
+ }
286
+ const refinement = refinements[key];
287
+ if (refinement !== void 0 && typeof refinement !== "function") {
288
+ columnSchemas[key] = refinement;
289
+ continue;
290
+ }
291
+ const column = drizzleOrm.is(selected, drizzleOrm.Column) ? selected : void 0;
292
+ const schema = column ? columnToSchema(column) : v4.z.any();
293
+ const refined = typeof refinement === "function" ? refinement(schema) : schema;
294
+ if (conditions.never(column)) {
295
+ continue;
296
+ } else {
297
+ columnSchemas[key] = refined;
298
+ }
299
+ if (column) {
300
+ if (conditions.nullable(column)) {
301
+ columnSchemas[key] = columnSchemas[key].nullable();
302
+ }
303
+ if (conditions.optional(column)) {
304
+ columnSchemas[key] = columnSchemas[key].optional();
305
+ }
306
+ }
307
+ }
308
+ return v4.z.object(columnSchemas);
309
+ }
310
+ function handleEnum(enum_, factory) {
311
+ const zod = v4.z;
312
+ return zod.enum(enum_.enumValues);
313
+ }
314
+ var selectConditions = {
315
+ never: () => false,
316
+ optional: () => false,
317
+ nullable: (column) => !column.notNull
318
+ };
319
+ var insertConditions = {
320
+ never: (column) => column?.generated?.type === "always" || column?.generatedIdentity?.type === "always",
321
+ optional: (column) => !column.notNull || column.notNull && column.hasDefault,
322
+ nullable: (column) => !column.notNull
323
+ };
324
+ var createSelectSchema = (entity, refine) => {
325
+ if (isPgEnum(entity)) {
326
+ return handleEnum(entity);
327
+ }
328
+ const columns = getColumns(entity);
329
+ return handleColumns(columns, {}, selectConditions);
330
+ };
331
+ var createInsertSchema = (entity, refine) => {
332
+ const columns = getColumns(entity);
333
+ return handleColumns(columns, refine ?? {}, insertConditions);
334
+ };
335
+
336
+ // src/db/schema.ts
337
+ var authUser = sqliteCore.sqliteTable("auth_user", {
338
+ id: sqliteCore.text("id").primaryKey(),
339
+ email: sqliteCore.text("email").notNull().unique(),
340
+ firstName: sqliteCore.text("first_name").notNull(),
341
+ lastName: sqliteCore.text("last_name").notNull(),
342
+ passwordHash: sqliteCore.text("password_hash"),
343
+ // Hashed password, nullable for OAuth users
344
+ name: sqliteCore.text("name"),
345
+ // Better Auth display name (required by Better Auth for registration)
346
+ emailVerified: sqliteCore.integer("email_verified", { mode: "boolean" }).notNull().default(false),
347
+ // Better Auth
348
+ role: sqliteCore.text("role").notNull().default("viewer"),
349
+ // 'admin', 'editor', 'author', 'viewer'
350
+ // Platform super-admin: bypasses the multi-tenant membership gate. Opt-in, default false.
351
+ isSuperAdmin: sqliteCore.integer("is_super_admin", { mode: "boolean" }).notNull().default(false),
352
+ avatar: sqliteCore.text("avatar"),
353
+ isActive: sqliteCore.integer("is_active", { mode: "boolean" }).notNull().default(true),
354
+ lastLoginAt: sqliteCore.integer("last_login_at"),
355
+ // Password reset (routes/auth.ts)
356
+ passwordResetToken: sqliteCore.text("password_reset_token"),
357
+ passwordResetExpires: sqliteCore.integer("password_reset_expires"),
358
+ // Invitation flow (routes/auth.ts accept-invitation)
359
+ invitationToken: sqliteCore.text("invitation_token"),
360
+ invitedAt: sqliteCore.integer("invited_at"),
361
+ acceptedInvitationAt: sqliteCore.integer("accepted_invitation_at"),
362
+ // Account lockout: reset on success; set on threshold failures
363
+ failedLoginCount: sqliteCore.integer("failed_login_count").notNull().default(0),
364
+ lockedUntil: sqliteCore.integer("locked_until"),
365
+ // 2FA enrollment flag (twoFactor BA plugin)
366
+ twoFactorEnabled: sqliteCore.integer("two_factor_enabled").notNull().default(0),
367
+ // timestamp_ms so Better Auth's Date values round-trip; matches SonicJS's
368
+ // existing Date.now() (ms) convention for these columns.
369
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp_ms" }).notNull(),
370
+ updatedAt: sqliteCore.integer("updated_at", { mode: "timestamp_ms" }).notNull()
371
+ });
372
+ var users = authUser;
373
+ var authSession = sqliteCore.sqliteTable("auth_session", {
374
+ id: sqliteCore.text("id").primaryKey(),
375
+ userId: sqliteCore.text("user_id").notNull().references(() => authUser.id, { onDelete: "cascade" }),
376
+ token: sqliteCore.text("token").notNull().unique(),
377
+ expiresAt: sqliteCore.integer("expires_at", { mode: "timestamp_ms" }).notNull(),
378
+ ipAddress: sqliteCore.text("ip_address"),
379
+ userAgent: sqliteCore.text("user_agent"),
380
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp_ms" }).notNull(),
381
+ updatedAt: sqliteCore.integer("updated_at", { mode: "timestamp_ms" }).notNull()
382
+ });
383
+ var authAccount = sqliteCore.sqliteTable("auth_account", {
384
+ id: sqliteCore.text("id").primaryKey(),
385
+ userId: sqliteCore.text("user_id").notNull().references(() => authUser.id, { onDelete: "cascade" }),
386
+ accountId: sqliteCore.text("account_id").notNull(),
387
+ providerId: sqliteCore.text("provider_id").notNull(),
388
+ accessToken: sqliteCore.text("access_token"),
389
+ refreshToken: sqliteCore.text("refresh_token"),
390
+ accessTokenExpiresAt: sqliteCore.integer("access_token_expires_at", { mode: "timestamp_ms" }),
391
+ refreshTokenExpiresAt: sqliteCore.integer("refresh_token_expires_at", { mode: "timestamp_ms" }),
392
+ scope: sqliteCore.text("scope"),
393
+ idToken: sqliteCore.text("id_token"),
394
+ password: sqliteCore.text("password"),
395
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp_ms" }).notNull(),
396
+ updatedAt: sqliteCore.integer("updated_at", { mode: "timestamp_ms" }).notNull()
397
+ });
398
+ var authVerification = sqliteCore.sqliteTable("auth_verification", {
399
+ id: sqliteCore.text("id").primaryKey(),
400
+ identifier: sqliteCore.text("identifier").notNull(),
401
+ value: sqliteCore.text("value").notNull(),
402
+ expiresAt: sqliteCore.integer("expires_at", { mode: "timestamp_ms" }).notNull(),
403
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp_ms" }).notNull(),
404
+ updatedAt: sqliteCore.integer("updated_at", { mode: "timestamp_ms" }).notNull()
405
+ });
406
+ var session = authSession;
407
+ var account = authAccount;
408
+ var verification = authVerification;
409
+ var authTenant = sqliteCore.sqliteTable("auth_tenant", {
410
+ id: sqliteCore.text("id").primaryKey(),
411
+ name: sqliteCore.text("name").notNull(),
412
+ slug: sqliteCore.text("slug").notNull().unique(),
413
+ logo: sqliteCore.text("logo"),
414
+ metadata: sqliteCore.text("metadata"),
415
+ status: sqliteCore.text("status").notNull().default("active"),
416
+ domain: sqliteCore.text("domain"),
417
+ notes: sqliteCore.text("notes").notNull().default(""),
418
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp_ms" }).notNull(),
419
+ updatedAt: sqliteCore.integer("updated_at", { mode: "timestamp_ms" }).notNull()
420
+ });
421
+ var authTenantMember = sqliteCore.sqliteTable("auth_tenant_member", {
422
+ id: sqliteCore.text("id").primaryKey(),
423
+ tenantId: sqliteCore.text("tenant_id").notNull().references(() => authTenant.id, { onDelete: "cascade" }),
424
+ userId: sqliteCore.text("user_id").notNull().references(() => authUser.id, { onDelete: "cascade" }),
425
+ role: sqliteCore.text("role").notNull().default("member"),
426
+ email: sqliteCore.text("email"),
427
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp_ms" }).notNull(),
428
+ updatedAt: sqliteCore.integer("updated_at", { mode: "timestamp_ms" }).notNull()
429
+ });
430
+ var authTenantInvitation = sqliteCore.sqliteTable("auth_tenant_invitation", {
431
+ id: sqliteCore.text("id").primaryKey(),
432
+ tenantId: sqliteCore.text("tenant_id").notNull().references(() => authTenant.id, { onDelete: "cascade" }),
433
+ email: sqliteCore.text("email").notNull(),
434
+ role: sqliteCore.text("role").notNull().default("member"),
435
+ status: sqliteCore.text("status").notNull().default("pending"),
436
+ expiresAt: sqliteCore.integer("expires_at", { mode: "timestamp_ms" }).notNull(),
437
+ inviterId: sqliteCore.text("inviter_id").references(() => authUser.id, { onDelete: "set null" }),
438
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp_ms" }).notNull(),
439
+ updatedAt: sqliteCore.integer("updated_at", { mode: "timestamp_ms" }).notNull()
440
+ });
441
+ var authTenantTeam = sqliteCore.sqliteTable("auth_tenant_team", {
442
+ id: sqliteCore.text("id").primaryKey(),
443
+ name: sqliteCore.text("name").notNull(),
444
+ tenantId: sqliteCore.text("tenant_id").notNull().references(() => authTenant.id, { onDelete: "cascade" }),
445
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp_ms" }).notNull(),
446
+ updatedAt: sqliteCore.integer("updated_at", { mode: "timestamp_ms" }).notNull()
447
+ });
448
+ var content = sqliteCore.sqliteTable("content", {
449
+ id: sqliteCore.text("id").primaryKey(),
450
+ collectionId: sqliteCore.text("collection_id").notNull(),
451
+ slug: sqliteCore.text("slug").notNull(),
452
+ title: sqliteCore.text("title").notNull(),
453
+ data: sqliteCore.text("data", { mode: "json" }).notNull(),
454
+ // JSON content data
455
+ status: sqliteCore.text("status").notNull().default("draft"),
456
+ // 'draft', 'published', 'archived'
457
+ publishedAt: sqliteCore.integer("published_at", { mode: "timestamp" }),
458
+ authorId: sqliteCore.text("author_id").notNull().references(() => authUser.id),
459
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp" }).notNull().$defaultFn(() => /* @__PURE__ */ new Date()),
460
+ updatedAt: sqliteCore.integer("updated_at", { mode: "timestamp" }).notNull().$defaultFn(() => /* @__PURE__ */ new Date())
461
+ });
462
+ var contentVersions = sqliteCore.sqliteTable("content_versions", {
463
+ id: sqliteCore.text("id").primaryKey(),
464
+ contentId: sqliteCore.text("content_id").notNull().references(() => content.id),
465
+ version: sqliteCore.integer("version").notNull(),
466
+ data: sqliteCore.text("data", { mode: "json" }).notNull(),
467
+ authorId: sqliteCore.text("author_id").notNull().references(() => authUser.id),
468
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp" }).notNull().$defaultFn(() => /* @__PURE__ */ new Date())
469
+ });
470
+ var media = sqliteCore.sqliteTable("media", {
471
+ id: sqliteCore.text("id").primaryKey(),
472
+ filename: sqliteCore.text("filename").notNull(),
473
+ originalName: sqliteCore.text("original_name").notNull(),
474
+ mimeType: sqliteCore.text("mime_type").notNull(),
475
+ size: sqliteCore.integer("size").notNull(),
476
+ width: sqliteCore.integer("width"),
477
+ height: sqliteCore.integer("height"),
478
+ folder: sqliteCore.text("folder").notNull().default("uploads"),
479
+ r2Key: sqliteCore.text("r2_key").notNull(),
480
+ // R2 storage key
481
+ publicUrl: sqliteCore.text("public_url").notNull(),
482
+ // CDN URL
483
+ thumbnailUrl: sqliteCore.text("thumbnail_url"),
484
+ alt: sqliteCore.text("alt"),
485
+ caption: sqliteCore.text("caption"),
486
+ tags: sqliteCore.text("tags", { mode: "json" }),
487
+ // JSON array of tags
488
+ uploadedBy: sqliteCore.text("uploaded_by").notNull().references(() => authUser.id),
489
+ uploadedAt: sqliteCore.integer("uploaded_at").notNull(),
490
+ updatedAt: sqliteCore.integer("updated_at"),
491
+ publishedAt: sqliteCore.integer("published_at"),
492
+ scheduledAt: sqliteCore.integer("scheduled_at"),
493
+ archivedAt: sqliteCore.integer("archived_at"),
494
+ deletedAt: sqliteCore.integer("deleted_at")
495
+ });
496
+ var apiTokens = sqliteCore.sqliteTable("auth_api_tokens", {
497
+ id: sqliteCore.text("id").primaryKey(),
498
+ name: sqliteCore.text("name").notNull(),
499
+ token: sqliteCore.text("token").notNull().unique(),
500
+ userId: sqliteCore.text("user_id").notNull().references(() => authUser.id),
501
+ permissions: sqliteCore.text("permissions", { mode: "json" }).notNull(),
502
+ // Array of permissions
503
+ expiresAt: sqliteCore.integer("expires_at", { mode: "timestamp" }),
504
+ lastUsedAt: sqliteCore.integer("last_used_at", { mode: "timestamp" }),
505
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp" }).notNull().$defaultFn(() => /* @__PURE__ */ new Date())
506
+ });
507
+ var workflowHistory = sqliteCore.sqliteTable("workflow_history", {
508
+ id: sqliteCore.text("id").primaryKey(),
509
+ contentId: sqliteCore.text("content_id").notNull().references(() => content.id),
510
+ action: sqliteCore.text("action").notNull(),
511
+ fromStatus: sqliteCore.text("from_status").notNull(),
512
+ toStatus: sqliteCore.text("to_status").notNull(),
513
+ userId: sqliteCore.text("user_id").notNull().references(() => authUser.id),
514
+ comment: sqliteCore.text("comment"),
515
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp" }).notNull().$defaultFn(() => /* @__PURE__ */ new Date())
516
+ });
517
+ var plugins = sqliteCore.sqliteTable("plugins", {
518
+ id: sqliteCore.text("id").primaryKey(),
519
+ name: sqliteCore.text("name").notNull().unique(),
520
+ displayName: sqliteCore.text("display_name").notNull(),
521
+ description: sqliteCore.text("description"),
522
+ version: sqliteCore.text("version").notNull(),
523
+ author: sqliteCore.text("author").notNull(),
524
+ category: sqliteCore.text("category").notNull(),
525
+ icon: sqliteCore.text("icon"),
526
+ status: sqliteCore.text("status").notNull().default("inactive"),
527
+ // 'active', 'inactive', 'error'
528
+ isCore: sqliteCore.integer("is_core", { mode: "boolean" }).notNull().default(false),
529
+ settings: sqliteCore.text("settings", { mode: "json" }),
530
+ permissions: sqliteCore.text("permissions", { mode: "json" }),
531
+ dependencies: sqliteCore.text("dependencies", { mode: "json" }),
532
+ downloadCount: sqliteCore.integer("download_count").notNull().default(0),
533
+ rating: sqliteCore.integer("rating").notNull().default(0),
534
+ installedAt: sqliteCore.integer("installed_at").notNull(),
535
+ activatedAt: sqliteCore.integer("activated_at"),
536
+ lastUpdated: sqliteCore.integer("last_updated").notNull(),
537
+ errorMessage: sqliteCore.text("error_message"),
538
+ createdAt: sqliteCore.integer("created_at").notNull().$defaultFn(() => Math.floor(Date.now() / 1e3)),
539
+ updatedAt: sqliteCore.integer("updated_at").notNull().$defaultFn(() => Math.floor(Date.now() / 1e3))
540
+ });
541
+ var pluginHooks = sqliteCore.sqliteTable("plugin_hooks", {
542
+ id: sqliteCore.text("id").primaryKey(),
543
+ pluginId: sqliteCore.text("plugin_id").notNull().references(() => plugins.id),
544
+ hookName: sqliteCore.text("hook_name").notNull(),
545
+ handlerName: sqliteCore.text("handler_name").notNull(),
546
+ priority: sqliteCore.integer("priority").notNull().default(10),
547
+ isActive: sqliteCore.integer("is_active", { mode: "boolean" }).notNull().default(true),
548
+ createdAt: sqliteCore.integer("created_at").notNull().$defaultFn(() => Math.floor(Date.now() / 1e3))
549
+ });
550
+ var pluginRoutes = sqliteCore.sqliteTable("plugin_routes", {
551
+ id: sqliteCore.text("id").primaryKey(),
552
+ pluginId: sqliteCore.text("plugin_id").notNull().references(() => plugins.id),
553
+ path: sqliteCore.text("path").notNull(),
554
+ method: sqliteCore.text("method").notNull(),
555
+ handlerName: sqliteCore.text("handler_name").notNull(),
556
+ middleware: sqliteCore.text("middleware", { mode: "json" }),
557
+ isActive: sqliteCore.integer("is_active", { mode: "boolean" }).notNull().default(true),
558
+ createdAt: sqliteCore.integer("created_at").notNull().$defaultFn(() => Math.floor(Date.now() / 1e3))
559
+ });
560
+ var pluginAssets = sqliteCore.sqliteTable("plugin_assets", {
561
+ id: sqliteCore.text("id").primaryKey(),
562
+ pluginId: sqliteCore.text("plugin_id").notNull().references(() => plugins.id),
563
+ assetType: sqliteCore.text("asset_type").notNull(),
564
+ // 'css', 'js', 'image', 'font'
565
+ assetPath: sqliteCore.text("asset_path").notNull(),
566
+ loadOrder: sqliteCore.integer("load_order").notNull().default(100),
567
+ loadLocation: sqliteCore.text("load_location").notNull().default("footer"),
568
+ // 'header', 'footer'
569
+ isActive: sqliteCore.integer("is_active", { mode: "boolean" }).notNull().default(true),
570
+ createdAt: sqliteCore.integer("created_at").notNull().$defaultFn(() => Math.floor(Date.now() / 1e3))
571
+ });
572
+ var pluginActivityLog = sqliteCore.sqliteTable("plugin_activity_log", {
573
+ id: sqliteCore.text("id").primaryKey(),
574
+ pluginId: sqliteCore.text("plugin_id").notNull().references(() => plugins.id),
575
+ action: sqliteCore.text("action").notNull(),
576
+ userId: sqliteCore.text("user_id"),
577
+ details: sqliteCore.text("details", { mode: "json" }),
578
+ timestamp: sqliteCore.integer("timestamp").notNull().$defaultFn(() => Math.floor(Date.now() / 1e3))
579
+ });
580
+ var insertUserSchema = createInsertSchema(authUser, {
581
+ email: (schema) => schema.email(),
582
+ firstName: (schema) => schema.min(1),
583
+ lastName: (schema) => schema.min(1)
584
+ });
585
+ var selectUserSchema = createSelectSchema(authUser);
586
+ var insertContentSchema = createInsertSchema(content, {
587
+ slug: (schema) => schema.min(1).regex(/^[a-zA-Z0-9_-]+$/, "Slug must contain only letters, numbers, underscores, and hyphens"),
588
+ title: (schema) => schema.min(1),
589
+ status: (schema) => schema
590
+ });
591
+ var selectContentSchema = createSelectSchema(content);
592
+ var insertMediaSchema = createInsertSchema(media, {
593
+ filename: (schema) => schema.min(1),
594
+ originalName: (schema) => schema.min(1),
595
+ mimeType: (schema) => schema.min(1),
596
+ size: (schema) => schema.positive(),
597
+ r2Key: (schema) => schema.min(1),
598
+ publicUrl: (schema) => schema.url(),
599
+ folder: (schema) => schema.min(1)
600
+ });
601
+ var selectMediaSchema = createSelectSchema(media);
602
+ var insertWorkflowHistorySchema = createInsertSchema(workflowHistory, {
603
+ action: (schema) => schema.min(1),
604
+ fromStatus: (schema) => schema.min(1),
605
+ toStatus: (schema) => schema.min(1)
606
+ });
607
+ var selectWorkflowHistorySchema = createSelectSchema(workflowHistory);
608
+ var insertPluginSchema = createInsertSchema(plugins, {
609
+ name: (schema) => schema.min(1),
610
+ displayName: (schema) => schema.min(1),
611
+ version: (schema) => schema.min(1),
612
+ author: (schema) => schema.min(1),
613
+ category: (schema) => schema.min(1)
614
+ });
615
+ var selectPluginSchema = createSelectSchema(plugins);
616
+ var insertPluginHookSchema = createInsertSchema(pluginHooks, {
617
+ hookName: (schema) => schema.min(1),
618
+ handlerName: (schema) => schema.min(1)
619
+ });
620
+ var selectPluginHookSchema = createSelectSchema(pluginHooks);
621
+ var insertPluginRouteSchema = createInsertSchema(pluginRoutes, {
622
+ path: (schema) => schema.min(1),
623
+ method: (schema) => schema.min(1),
624
+ handlerName: (schema) => schema.min(1)
625
+ });
626
+ var selectPluginRouteSchema = createSelectSchema(pluginRoutes);
627
+ var insertPluginAssetSchema = createInsertSchema(pluginAssets, {
628
+ assetType: (schema) => schema.min(1),
629
+ assetPath: (schema) => schema.min(1)
630
+ });
631
+ var selectPluginAssetSchema = createSelectSchema(pluginAssets);
632
+ var insertPluginActivityLogSchema = createInsertSchema(pluginActivityLog, {
633
+ action: (schema) => schema.min(1)
634
+ });
635
+ var selectPluginActivityLogSchema = createSelectSchema(pluginActivityLog);
636
+ var systemLogs = sqliteCore.sqliteTable("system_logs", {
637
+ id: sqliteCore.text("id").primaryKey(),
638
+ level: sqliteCore.text("level").notNull(),
639
+ // 'debug', 'info', 'warn', 'error', 'fatal'
640
+ category: sqliteCore.text("category").notNull(),
641
+ // 'auth', 'api', 'workflow', 'plugin', 'media', 'system', etc.
642
+ message: sqliteCore.text("message").notNull(),
643
+ data: sqliteCore.text("data", { mode: "json" }),
644
+ // Additional structured data
645
+ userId: sqliteCore.text("user_id").references(() => authUser.id),
646
+ sessionId: sqliteCore.text("session_id"),
647
+ requestId: sqliteCore.text("request_id"),
648
+ ipAddress: sqliteCore.text("ip_address"),
649
+ userAgent: sqliteCore.text("user_agent"),
650
+ method: sqliteCore.text("method"),
651
+ // HTTP method for API logs
652
+ url: sqliteCore.text("url"),
653
+ // Request URL for API logs
654
+ statusCode: sqliteCore.integer("status_code"),
655
+ // HTTP status code for API logs
656
+ duration: sqliteCore.integer("duration"),
657
+ // Request duration in milliseconds
658
+ stackTrace: sqliteCore.text("stack_trace"),
659
+ // Error stack trace for error logs
660
+ tags: sqliteCore.text("tags", { mode: "json" }),
661
+ // Array of tags for categorization
662
+ source: sqliteCore.text("source"),
663
+ // Source component/module that generated the log
664
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp" }).notNull().$defaultFn(() => /* @__PURE__ */ new Date())
665
+ });
666
+ var logConfig = sqliteCore.sqliteTable("log_config", {
667
+ id: sqliteCore.text("id").primaryKey(),
668
+ category: sqliteCore.text("category").notNull().unique(),
669
+ enabled: sqliteCore.integer("enabled", { mode: "boolean" }).notNull().default(true),
670
+ level: sqliteCore.text("level").notNull().default("info"),
671
+ // minimum log level to store
672
+ retention: sqliteCore.integer("retention").notNull().default(30),
673
+ // days to keep logs
674
+ maxSize: sqliteCore.integer("max_size").default(1e4),
675
+ // max number of logs per category
676
+ createdAt: sqliteCore.integer("created_at", { mode: "timestamp" }).notNull().$defaultFn(() => /* @__PURE__ */ new Date()),
677
+ updatedAt: sqliteCore.integer("updated_at", { mode: "timestamp" }).notNull().$defaultFn(() => /* @__PURE__ */ new Date())
678
+ });
679
+ var insertSystemLogSchema = createInsertSchema(systemLogs, {
680
+ level: (schema) => schema.min(1),
681
+ category: (schema) => schema.min(1),
682
+ message: (schema) => schema.min(1)
683
+ });
684
+ var selectSystemLogSchema = createSelectSchema(systemLogs);
685
+ var insertLogConfigSchema = createInsertSchema(logConfig, {
686
+ category: (schema) => schema.min(1),
687
+ level: (schema) => schema.min(1)
688
+ });
689
+ var selectLogConfigSchema = createSelectSchema(logConfig);
690
+ var emailLog = sqliteCore.sqliteTable("email_log", {
691
+ id: sqliteCore.text("id").primaryKey(),
692
+ toEmail: sqliteCore.text("to_email").notNull(),
693
+ // comma-joined recipients
694
+ fromEmail: sqliteCore.text("from_email").notNull(),
695
+ subject: sqliteCore.text("subject").notNull(),
696
+ status: sqliteCore.text("status").notNull().default("pending"),
697
+ // 'pending' | 'sent' | 'failed'
698
+ provider: sqliteCore.text("provider"),
699
+ // 'resend' | 'sendgrid' | 'console' | custom
700
+ providerId: sqliteCore.text("provider_id"),
701
+ // provider-side message id
702
+ error: sqliteCore.text("error"),
703
+ flow: sqliteCore.text("flow"),
704
+ // 'password-reset' | 'otp' | 'magic-link' | 'welcome' | 'test' | ...
705
+ metadata: sqliteCore.text("metadata", { mode: "json" }),
706
+ failedAtSend: sqliteCore.integer("failed_at_send"),
707
+ // epoch ms; set when the send failed immediately
708
+ deliveryState: sqliteCore.text("delivery_state"),
709
+ // populated by the reconciliation cron
710
+ deliverySyncedAt: sqliteCore.integer("delivery_synced_at"),
711
+ // epoch ms; reconciliation sync marker
712
+ createdAt: sqliteCore.integer("created_at").notNull()
713
+ // epoch ms
714
+ });
715
+ var insertEmailLogSchema = createInsertSchema(emailLog);
716
+ var selectEmailLogSchema = createSelectSchema(emailLog);
717
+ var securityEvents = sqliteCore.sqliteTable("security_events", {
718
+ id: sqliteCore.text("id").primaryKey(),
719
+ eventType: sqliteCore.text("event_type").notNull(),
720
+ severity: sqliteCore.text("severity").notNull().default("info"),
721
+ userId: sqliteCore.text("user_id"),
722
+ email: sqliteCore.text("email"),
723
+ ipAddress: sqliteCore.text("ip_address"),
724
+ userAgent: sqliteCore.text("user_agent"),
725
+ countryCode: sqliteCore.text("country_code"),
726
+ requestPath: sqliteCore.text("request_path"),
727
+ requestMethod: sqliteCore.text("request_method"),
728
+ details: sqliteCore.text("details", { mode: "json" }),
729
+ fingerprint: sqliteCore.text("fingerprint"),
730
+ blocked: sqliteCore.integer("blocked").notNull().default(0),
731
+ createdAt: sqliteCore.integer("created_at").notNull().$defaultFn(() => Date.now())
732
+ });
733
+ var insertSecurityEventSchema = createInsertSchema(securityEvents, {
734
+ eventType: (schema) => schema.min(1),
735
+ severity: (schema) => schema.min(1)
736
+ });
737
+ var selectSecurityEventSchema = createSelectSchema(securityEvents);
738
+ var forms = sqliteCore.sqliteTable("forms", {
739
+ id: sqliteCore.text("id").primaryKey(),
740
+ name: sqliteCore.text("name").notNull().unique(),
741
+ // Machine name (e.g., "contact-form")
742
+ displayName: sqliteCore.text("display_name").notNull(),
743
+ // Human name (e.g., "Contact Form")
744
+ description: sqliteCore.text("description"),
745
+ category: sqliteCore.text("category").notNull().default("general"),
746
+ // contact, survey, registration, etc.
747
+ // Form.io schema (JSON)
748
+ formioSchema: sqliteCore.text("formio_schema", { mode: "json" }).notNull(),
749
+ // Complete Form.io JSON schema
750
+ // Settings (JSON)
751
+ settings: sqliteCore.text("settings", { mode: "json" }),
752
+ // emailNotifications, successMessage, etc.
753
+ // Status & Management
754
+ isActive: sqliteCore.integer("is_active", { mode: "boolean" }).notNull().default(true),
755
+ isPublic: sqliteCore.integer("is_public", { mode: "boolean" }).notNull().default(true),
756
+ managed: sqliteCore.integer("managed", { mode: "boolean" }).notNull().default(false),
757
+ // Metadata
758
+ icon: sqliteCore.text("icon"),
759
+ color: sqliteCore.text("color"),
760
+ tags: sqliteCore.text("tags", { mode: "json" }),
761
+ // JSON array
762
+ // Stats
763
+ submissionCount: sqliteCore.integer("submission_count").notNull().default(0),
764
+ viewCount: sqliteCore.integer("view_count").notNull().default(0),
765
+ // Ownership
766
+ createdBy: sqliteCore.text("created_by").references(() => authUser.id),
767
+ updatedBy: sqliteCore.text("updated_by").references(() => authUser.id),
768
+ // Timestamps
769
+ createdAt: sqliteCore.integer("created_at").notNull(),
770
+ updatedAt: sqliteCore.integer("updated_at").notNull()
771
+ });
772
+ var formSubmissions = sqliteCore.sqliteTable("form_submissions", {
773
+ id: sqliteCore.text("id").primaryKey(),
774
+ formId: sqliteCore.text("form_id").notNull().references(() => forms.id, { onDelete: "cascade" }),
775
+ // Submission data
776
+ submissionData: sqliteCore.text("submission_data", { mode: "json" }).notNull(),
777
+ // The actual form data
778
+ // Submission metadata
779
+ status: sqliteCore.text("status").notNull().default("pending"),
780
+ // pending, reviewed, approved, rejected, spam
781
+ submissionNumber: sqliteCore.integer("submission_number"),
782
+ // User information
783
+ userId: sqliteCore.text("user_id").references(() => authUser.id),
784
+ userEmail: sqliteCore.text("user_email"),
785
+ // Tracking
786
+ ipAddress: sqliteCore.text("ip_address"),
787
+ userAgent: sqliteCore.text("user_agent"),
788
+ referrer: sqliteCore.text("referrer"),
789
+ utmSource: sqliteCore.text("utm_source"),
790
+ utmMedium: sqliteCore.text("utm_medium"),
791
+ utmCampaign: sqliteCore.text("utm_campaign"),
792
+ // Review/Processing
793
+ reviewedBy: sqliteCore.text("reviewed_by").references(() => authUser.id),
794
+ reviewedAt: sqliteCore.integer("reviewed_at"),
795
+ reviewNotes: sqliteCore.text("review_notes"),
796
+ // Flags
797
+ isSpam: sqliteCore.integer("is_spam", { mode: "boolean" }).notNull().default(false),
798
+ isArchived: sqliteCore.integer("is_archived", { mode: "boolean" }).notNull().default(false),
799
+ // Content integration
800
+ contentId: sqliteCore.text("content_id").references(() => content.id),
801
+ // Links submission to its content item
802
+ // Timestamps
803
+ submittedAt: sqliteCore.integer("submitted_at").notNull(),
804
+ updatedAt: sqliteCore.integer("updated_at").notNull()
805
+ });
806
+ var formFiles = sqliteCore.sqliteTable("form_files", {
807
+ id: sqliteCore.text("id").primaryKey(),
808
+ submissionId: sqliteCore.text("submission_id").notNull().references(() => formSubmissions.id, { onDelete: "cascade" }),
809
+ mediaId: sqliteCore.text("media_id").notNull().references(() => media.id, { onDelete: "cascade" }),
810
+ fieldName: sqliteCore.text("field_name").notNull(),
811
+ // Form field that uploaded this file
812
+ uploadedAt: sqliteCore.integer("uploaded_at").notNull()
813
+ });
814
+ var insertFormSchema = createInsertSchema(forms);
815
+ var selectFormSchema = createSelectSchema(forms);
816
+ var insertFormSubmissionSchema = createInsertSchema(formSubmissions);
817
+ var selectFormSubmissionSchema = createSelectSchema(formSubmissions);
818
+ var insertFormFileSchema = createInsertSchema(formFiles);
819
+ var selectFormFileSchema = createSelectSchema(formFiles);
820
+
821
+ exports.apiTokens = apiTokens;
822
+ exports.authAccount = authAccount;
823
+ exports.authSession = authSession;
824
+ exports.authTenant = authTenant;
825
+ exports.authTenantInvitation = authTenantInvitation;
826
+ exports.authTenantMember = authTenantMember;
827
+ exports.authTenantTeam = authTenantTeam;
828
+ exports.authUser = authUser;
829
+ exports.authVerification = authVerification;
830
+ exports.content = content;
831
+ exports.contentVersions = contentVersions;
832
+ exports.insertContentSchema = insertContentSchema;
833
+ exports.insertLogConfigSchema = insertLogConfigSchema;
834
+ exports.insertMediaSchema = insertMediaSchema;
835
+ exports.insertPluginActivityLogSchema = insertPluginActivityLogSchema;
836
+ exports.insertPluginAssetSchema = insertPluginAssetSchema;
837
+ exports.insertPluginHookSchema = insertPluginHookSchema;
838
+ exports.insertPluginRouteSchema = insertPluginRouteSchema;
839
+ exports.insertPluginSchema = insertPluginSchema;
840
+ exports.insertSystemLogSchema = insertSystemLogSchema;
841
+ exports.insertUserSchema = insertUserSchema;
842
+ exports.insertWorkflowHistorySchema = insertWorkflowHistorySchema;
843
+ exports.logConfig = logConfig;
844
+ exports.media = media;
845
+ exports.pluginActivityLog = pluginActivityLog;
846
+ exports.pluginAssets = pluginAssets;
847
+ exports.pluginHooks = pluginHooks;
848
+ exports.pluginRoutes = pluginRoutes;
849
+ exports.plugins = plugins;
850
+ exports.schema_exports = schema_exports;
851
+ exports.selectContentSchema = selectContentSchema;
852
+ exports.selectLogConfigSchema = selectLogConfigSchema;
853
+ exports.selectMediaSchema = selectMediaSchema;
854
+ exports.selectPluginActivityLogSchema = selectPluginActivityLogSchema;
855
+ exports.selectPluginAssetSchema = selectPluginAssetSchema;
856
+ exports.selectPluginHookSchema = selectPluginHookSchema;
857
+ exports.selectPluginRouteSchema = selectPluginRouteSchema;
858
+ exports.selectPluginSchema = selectPluginSchema;
859
+ exports.selectSystemLogSchema = selectSystemLogSchema;
860
+ exports.selectUserSchema = selectUserSchema;
861
+ exports.selectWorkflowHistorySchema = selectWorkflowHistorySchema;
862
+ exports.systemLogs = systemLogs;
863
+ exports.users = users;
864
+ exports.workflowHistory = workflowHistory;
865
+ //# sourceMappingURL=chunk-YP7GW2G5.cjs.map
866
+ //# sourceMappingURL=chunk-YP7GW2G5.cjs.map