@sonicjs-cms/core 2.2.0 → 2.3.0

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 (105) hide show
  1. package/README.md +75 -1
  2. package/dist/app-Db0AfT5F.d.cts +100 -0
  3. package/dist/app-Db0AfT5F.d.ts +100 -0
  4. package/dist/{chunk-R57VFNP3.js → chunk-3ZLCMOCM.js} +441 -433
  5. package/dist/chunk-3ZLCMOCM.js.map +1 -0
  6. package/dist/{chunk-ZUK55KZB.js → chunk-4C433FET.js} +5 -3
  7. package/dist/chunk-4C433FET.js.map +1 -0
  8. package/dist/{chunk-OORGXYDA.js → chunk-5TRX2JHU.js} +5 -32
  9. package/dist/chunk-5TRX2JHU.js.map +1 -0
  10. package/dist/{chunk-K4Z3IHOK.js → chunk-7CXL5K7N.js} +5 -248
  11. package/dist/chunk-7CXL5K7N.js.map +1 -0
  12. package/dist/{chunk-WBX5YMTB.cjs → chunk-7KCDFDRI.cjs} +27 -15
  13. package/dist/chunk-7KCDFDRI.cjs.map +1 -0
  14. package/dist/chunk-CAMM3MJV.js +1550 -0
  15. package/dist/chunk-CAMM3MJV.js.map +1 -0
  16. package/dist/{chunk-HKEK7UNV.js → chunk-CPXAVWCU.js} +3 -3
  17. package/dist/{chunk-HKEK7UNV.js.map → chunk-CPXAVWCU.js.map} +1 -1
  18. package/dist/{chunk-F5ESJXI2.cjs → chunk-DTLB6UIH.cjs} +3 -3
  19. package/dist/{chunk-F5ESJXI2.cjs.map → chunk-DTLB6UIH.cjs.map} +1 -1
  20. package/dist/{chunk-AINTFRTC.cjs → chunk-ES3BRZQJ.cjs} +252 -2
  21. package/dist/chunk-ES3BRZQJ.cjs.map +1 -0
  22. package/dist/chunk-HBJU3I2Y.cjs +1552 -0
  23. package/dist/chunk-HBJU3I2Y.cjs.map +1 -0
  24. package/dist/{chunk-UEYMFNBN.cjs → chunk-KP4DVEX5.cjs} +7 -36
  25. package/dist/chunk-KP4DVEX5.cjs.map +1 -0
  26. package/dist/{chunk-2DIWLDCA.cjs → chunk-MPFSSBIY.cjs} +541 -533
  27. package/dist/chunk-MPFSSBIY.cjs.map +1 -0
  28. package/dist/{chunk-HV2I6API.cjs → chunk-NAYD76QF.cjs} +4 -251
  29. package/dist/chunk-NAYD76QF.cjs.map +1 -0
  30. package/dist/{chunk-L232U757.js → chunk-Q52ZQFMB.js} +249 -3
  31. package/dist/chunk-Q52ZQFMB.js.map +1 -0
  32. package/dist/{chunk-NMVOTNSL.js → chunk-RRKXFGIO.js} +28 -16
  33. package/dist/chunk-RRKXFGIO.js.map +1 -0
  34. package/dist/{chunk-YTMFJLJZ.cjs → chunk-TT266RYM.cjs} +5 -3
  35. package/dist/chunk-TT266RYM.cjs.map +1 -0
  36. package/dist/collection-config-FLlGtsh9.d.cts +107 -0
  37. package/dist/collection-config-FLlGtsh9.d.ts +107 -0
  38. package/dist/filter-bar.template-By4jeiw_.d.cts +140 -0
  39. package/dist/filter-bar.template-By4jeiw_.d.ts +140 -0
  40. package/dist/index.cjs +146 -165
  41. package/dist/index.cjs.map +1 -1
  42. package/dist/index.d.cts +44 -0
  43. package/dist/index.d.ts +43 -5
  44. package/dist/index.js +19 -14
  45. package/dist/index.js.map +1 -1
  46. package/dist/middleware.cjs +24 -33
  47. package/dist/middleware.d.cts +89 -0
  48. package/dist/middleware.d.ts +89 -2
  49. package/dist/middleware.js +3 -4
  50. package/dist/migrations-B2CDNN76.js +4 -0
  51. package/dist/{migrations-IHERIQVD.js.map → migrations-B2CDNN76.js.map} +1 -1
  52. package/dist/migrations-IBKKBIKR.cjs +13 -0
  53. package/dist/{migrations-POFD5KNG.cjs.map → migrations-IBKKBIKR.cjs.map} +1 -1
  54. package/dist/plugin-bootstrap-C0E3jdz-.d.cts +8339 -0
  55. package/dist/plugin-bootstrap-CDh0JHtW.d.ts +8339 -0
  56. package/dist/plugin-manifest-BCMx9CAq.d.cts +35 -0
  57. package/dist/plugin-manifest-BCMx9CAq.d.ts +35 -0
  58. package/dist/plugin-zvZpaiP5.d.cts +357 -0
  59. package/dist/plugin-zvZpaiP5.d.ts +357 -0
  60. package/dist/plugins.cjs +7 -7
  61. package/dist/plugins.d.cts +330 -0
  62. package/dist/plugins.d.ts +330 -2
  63. package/dist/plugins.js +1 -1
  64. package/dist/routes.cjs +27 -27
  65. package/dist/routes.d.cts +224 -0
  66. package/dist/routes.d.ts +224 -2
  67. package/dist/routes.js +7 -7
  68. package/dist/services.cjs +41 -41
  69. package/dist/services.d.cts +236 -0
  70. package/dist/services.d.ts +236 -2
  71. package/dist/services.js +4 -4
  72. package/dist/telemetry-BFBIjBxK.d.cts +36 -0
  73. package/dist/telemetry-BFBIjBxK.d.ts +36 -0
  74. package/dist/templates.d.cts +133 -0
  75. package/dist/templates.d.ts +133 -2
  76. package/dist/types.d.cts +7 -0
  77. package/dist/types.d.ts +7 -2
  78. package/dist/utils.cjs +27 -27
  79. package/dist/utils.d.cts +53 -0
  80. package/dist/utils.d.ts +53 -2
  81. package/dist/utils.js +2 -2
  82. package/dist/version-vktVAxhe.d.cts +195 -0
  83. package/dist/version-vktVAxhe.d.ts +195 -0
  84. package/migrations/001_initial_schema.sql +1 -1
  85. package/package.json +3 -1
  86. package/dist/chunk-2DIWLDCA.cjs.map +0 -1
  87. package/dist/chunk-AINTFRTC.cjs.map +0 -1
  88. package/dist/chunk-HV2I6API.cjs.map +0 -1
  89. package/dist/chunk-K4Z3IHOK.js.map +0 -1
  90. package/dist/chunk-L232U757.js.map +0 -1
  91. package/dist/chunk-NMVOTNSL.js.map +0 -1
  92. package/dist/chunk-OORGXYDA.js.map +0 -1
  93. package/dist/chunk-R57VFNP3.js.map +0 -1
  94. package/dist/chunk-T7IYBGGO.cjs +0 -746
  95. package/dist/chunk-T7IYBGGO.cjs.map +0 -1
  96. package/dist/chunk-UEYMFNBN.cjs.map +0 -1
  97. package/dist/chunk-WBX5YMTB.cjs.map +0 -1
  98. package/dist/chunk-YTMFJLJZ.cjs.map +0 -1
  99. package/dist/chunk-ZPMFT2JW.js +0 -744
  100. package/dist/chunk-ZPMFT2JW.js.map +0 -1
  101. package/dist/chunk-ZUK55KZB.js.map +0 -1
  102. package/dist/migrations-IHERIQVD.js +0 -4
  103. package/dist/migrations-POFD5KNG.cjs +0 -13
  104. package/migrations/013_code_examples_plugin.sql +0 -177
  105. /package/migrations/{021_add_otp_login.sql → 026_add_otp_login.sql} +0 -0
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var chunk7KCDFDRI_cjs = require('./chunk-7KCDFDRI.cjs');
3
4
  var chunkIGJUBJBW_cjs = require('./chunk-IGJUBJBW.cjs');
4
5
  var sqliteCore = require('drizzle-orm/sqlite-core');
5
6
  var v4 = require('zod/v4');
@@ -1135,17 +1136,266 @@ var SettingsService = class {
1135
1136
  }
1136
1137
  };
1137
1138
 
1139
+ // src/services/telemetry-service.ts
1140
+ var TelemetryService = class {
1141
+ config;
1142
+ identity = null;
1143
+ client = null;
1144
+ enabled = true;
1145
+ eventQueue = [];
1146
+ isInitialized = false;
1147
+ constructor(config) {
1148
+ this.config = {
1149
+ ...chunk7KCDFDRI_cjs.getTelemetryConfig(),
1150
+ ...config
1151
+ };
1152
+ this.enabled = this.config.enabled;
1153
+ }
1154
+ /**
1155
+ * Initialize the telemetry service
1156
+ */
1157
+ async initialize(identity) {
1158
+ if (!this.enabled) {
1159
+ if (this.config.debug) {
1160
+ console.log("[Telemetry] Disabled via configuration");
1161
+ }
1162
+ return;
1163
+ }
1164
+ try {
1165
+ this.identity = identity;
1166
+ if (this.config.apiKey) {
1167
+ const { PostHog } = await import('posthog-node');
1168
+ this.client = new PostHog(this.config.apiKey, {
1169
+ host: this.config.host,
1170
+ flushAt: 20,
1171
+ // Batch events
1172
+ flushInterval: 1e4
1173
+ // Flush every 10 seconds
1174
+ });
1175
+ if (this.config.debug) {
1176
+ console.log("[Telemetry] Initialized with installation ID:", identity.installationId);
1177
+ }
1178
+ } else if (this.config.debug) {
1179
+ console.log("[Telemetry] No API key provided, tracking will be logged only");
1180
+ }
1181
+ this.isInitialized = true;
1182
+ await this.flushQueue();
1183
+ } catch (error) {
1184
+ if (this.config.debug) {
1185
+ console.error("[Telemetry] Initialization failed:", error);
1186
+ }
1187
+ this.enabled = false;
1188
+ }
1189
+ }
1190
+ /**
1191
+ * Track a telemetry event
1192
+ */
1193
+ async track(event, properties) {
1194
+ if (!this.enabled) return;
1195
+ try {
1196
+ const sanitizedProps = this.sanitizeProperties(properties);
1197
+ const enrichedProps = {
1198
+ ...sanitizedProps,
1199
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1200
+ version: this.getVersion()
1201
+ };
1202
+ if (!this.isInitialized) {
1203
+ this.eventQueue.push({ event, properties: enrichedProps });
1204
+ if (this.config.debug) {
1205
+ console.log("[Telemetry] Queued event:", event, enrichedProps);
1206
+ }
1207
+ return;
1208
+ }
1209
+ if (this.client && this.identity) {
1210
+ this.client.capture({
1211
+ distinctId: this.identity.installationId,
1212
+ event,
1213
+ properties: enrichedProps
1214
+ });
1215
+ if (this.config.debug) {
1216
+ console.log("[Telemetry] Tracked event:", event, enrichedProps);
1217
+ }
1218
+ } else if (this.config.debug) {
1219
+ console.log("[Telemetry] Event (no client):", event, enrichedProps);
1220
+ }
1221
+ } catch (error) {
1222
+ if (this.config.debug) {
1223
+ console.error("[Telemetry] Failed to track event:", error);
1224
+ }
1225
+ }
1226
+ }
1227
+ /**
1228
+ * Track installation started
1229
+ */
1230
+ async trackInstallationStarted(properties) {
1231
+ await this.track("installation_started", properties);
1232
+ }
1233
+ /**
1234
+ * Track installation completed
1235
+ */
1236
+ async trackInstallationCompleted(properties) {
1237
+ await this.track("installation_completed", properties);
1238
+ }
1239
+ /**
1240
+ * Track installation failed
1241
+ */
1242
+ async trackInstallationFailed(error, properties) {
1243
+ await this.track("installation_failed", {
1244
+ ...properties,
1245
+ errorType: chunk7KCDFDRI_cjs.sanitizeErrorMessage(error)
1246
+ });
1247
+ }
1248
+ /**
1249
+ * Track dev server started
1250
+ */
1251
+ async trackDevServerStarted(properties) {
1252
+ await this.track("dev_server_started", properties);
1253
+ }
1254
+ /**
1255
+ * Track page view in admin UI
1256
+ */
1257
+ async trackPageView(route, properties) {
1258
+ await this.track("page_viewed", {
1259
+ ...properties,
1260
+ route: chunk7KCDFDRI_cjs.sanitizeRoute(route)
1261
+ });
1262
+ }
1263
+ /**
1264
+ * Track error (sanitized)
1265
+ */
1266
+ async trackError(error, properties) {
1267
+ await this.track("error_occurred", {
1268
+ ...properties,
1269
+ errorType: chunk7KCDFDRI_cjs.sanitizeErrorMessage(error)
1270
+ });
1271
+ }
1272
+ /**
1273
+ * Track plugin activation
1274
+ */
1275
+ async trackPluginActivated(properties) {
1276
+ await this.track("plugin_activated", properties);
1277
+ }
1278
+ /**
1279
+ * Track migration run
1280
+ */
1281
+ async trackMigrationRun(properties) {
1282
+ await this.track("migration_run", properties);
1283
+ }
1284
+ /**
1285
+ * Flush queued events
1286
+ */
1287
+ async flushQueue() {
1288
+ if (this.eventQueue.length === 0) return;
1289
+ const queue = [...this.eventQueue];
1290
+ this.eventQueue = [];
1291
+ for (const { event, properties } of queue) {
1292
+ await this.track(event, properties);
1293
+ }
1294
+ }
1295
+ /**
1296
+ * Sanitize properties to ensure no PII
1297
+ */
1298
+ sanitizeProperties(properties) {
1299
+ if (!properties) return {};
1300
+ const sanitized = {};
1301
+ for (const [key, value] of Object.entries(properties)) {
1302
+ if (value === void 0) continue;
1303
+ if (key === "route" && typeof value === "string") {
1304
+ sanitized[key] = chunk7KCDFDRI_cjs.sanitizeRoute(value);
1305
+ continue;
1306
+ }
1307
+ if (key.toLowerCase().includes("error") && typeof value === "string") {
1308
+ sanitized[key] = chunk7KCDFDRI_cjs.sanitizeErrorMessage(value);
1309
+ continue;
1310
+ }
1311
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
1312
+ sanitized[key] = value;
1313
+ }
1314
+ }
1315
+ return sanitized;
1316
+ }
1317
+ /**
1318
+ * Get SonicJS version
1319
+ */
1320
+ getVersion() {
1321
+ try {
1322
+ if (typeof process !== "undefined" && process.env) {
1323
+ return process.env.SONICJS_VERSION || "2.0.0";
1324
+ }
1325
+ return "2.0.0";
1326
+ } catch {
1327
+ return "unknown";
1328
+ }
1329
+ }
1330
+ /**
1331
+ * Shutdown the telemetry service
1332
+ */
1333
+ async shutdown() {
1334
+ try {
1335
+ if (this.client) {
1336
+ await this.client.shutdown();
1337
+ }
1338
+ } catch (error) {
1339
+ if (this.config.debug) {
1340
+ console.error("[Telemetry] Shutdown failed:", error);
1341
+ }
1342
+ }
1343
+ }
1344
+ /**
1345
+ * Enable telemetry
1346
+ */
1347
+ enable() {
1348
+ this.enabled = true;
1349
+ }
1350
+ /**
1351
+ * Disable telemetry
1352
+ */
1353
+ disable() {
1354
+ this.enabled = false;
1355
+ }
1356
+ /**
1357
+ * Check if telemetry is enabled
1358
+ */
1359
+ isEnabled() {
1360
+ return this.enabled;
1361
+ }
1362
+ };
1363
+ var telemetryInstance = null;
1364
+ function getTelemetryService(config) {
1365
+ if (!telemetryInstance) {
1366
+ telemetryInstance = new TelemetryService(config);
1367
+ }
1368
+ return telemetryInstance;
1369
+ }
1370
+ async function initTelemetry(identity, config) {
1371
+ const service = getTelemetryService(config);
1372
+ await service.initialize(identity);
1373
+ return service;
1374
+ }
1375
+ function createInstallationIdentity(projectName) {
1376
+ const installationId = chunk7KCDFDRI_cjs.generateInstallationId();
1377
+ const identity = { installationId };
1378
+ if (projectName) {
1379
+ identity.projectId = chunk7KCDFDRI_cjs.generateProjectId(projectName);
1380
+ }
1381
+ return identity;
1382
+ }
1383
+
1138
1384
  exports.CACHE_CONFIGS = CACHE_CONFIGS;
1139
1385
  exports.CacheService = CacheService;
1140
1386
  exports.Logger = Logger;
1141
1387
  exports.SettingsService = SettingsService;
1388
+ exports.TelemetryService = TelemetryService;
1142
1389
  exports.apiTokens = apiTokens;
1143
1390
  exports.collections = collections;
1144
1391
  exports.content = content;
1145
1392
  exports.contentVersions = contentVersions;
1393
+ exports.createInstallationIdentity = createInstallationIdentity;
1146
1394
  exports.getCacheService = getCacheService;
1147
1395
  exports.getLogger = getLogger;
1396
+ exports.getTelemetryService = getTelemetryService;
1148
1397
  exports.initLogger = initLogger;
1398
+ exports.initTelemetry = initTelemetry;
1149
1399
  exports.insertCollectionSchema = insertCollectionSchema;
1150
1400
  exports.insertContentSchema = insertContentSchema;
1151
1401
  exports.insertLogConfigSchema = insertLogConfigSchema;
@@ -1181,5 +1431,5 @@ exports.selectWorkflowHistorySchema = selectWorkflowHistorySchema;
1181
1431
  exports.systemLogs = systemLogs;
1182
1432
  exports.users = users;
1183
1433
  exports.workflowHistory = workflowHistory;
1184
- //# sourceMappingURL=chunk-AINTFRTC.cjs.map
1185
- //# sourceMappingURL=chunk-AINTFRTC.cjs.map
1434
+ //# sourceMappingURL=chunk-ES3BRZQJ.cjs.map
1435
+ //# sourceMappingURL=chunk-ES3BRZQJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/db/schema.ts","../../../node_modules/src/constants.ts","../../../node_modules/src/utils.ts","../../../node_modules/src/column.ts","../../../node_modules/src/schema.ts","../src/services/logger.ts","../src/services/cache.ts","../src/services/settings.ts","../src/services/telemetry-service.ts"],"names":["__export","zod","z","integer","isTable","getTableColumns","getViewSelectedFields","is","Column","SQL","columns","isView","sqliteTable","text","drizzle","inArray","eq","like","gte","lte","and","count","asc","desc","getTelemetryConfig","sanitizeErrorMessage","sanitizeRoute","generateInstallationId","generateProjectId"],"mappings":"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","file":"chunk-ES3BRZQJ.cjs","sourcesContent":["import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod';\n\n// Users table for authentication and user management\nexport const users = sqliteTable('users', {\n id: text('id').primaryKey(),\n email: text('email').notNull().unique(),\n username: text('username').notNull().unique(),\n firstName: text('first_name').notNull(),\n lastName: text('last_name').notNull(),\n passwordHash: text('password_hash'), // Hashed password, nullable for OAuth users\n role: text('role').notNull().default('viewer'), // 'admin', 'editor', 'author', 'viewer'\n avatar: text('avatar'),\n isActive: integer('is_active', { mode: 'boolean' }).notNull().default(true),\n lastLoginAt: integer('last_login_at'),\n createdAt: integer('created_at').notNull(),\n updatedAt: integer('updated_at').notNull(),\n});\n\n// Content collections - dynamic schema definitions\nexport const collections = sqliteTable('collections', {\n id: text('id').primaryKey(),\n name: text('name').notNull().unique(),\n displayName: text('display_name').notNull(),\n description: text('description'),\n schema: text('schema', { mode: 'json' }).notNull(), // JSON schema definition\n isActive: integer('is_active', { mode: 'boolean' }).notNull().default(true),\n managed: integer('managed', { mode: 'boolean' }).notNull().default(false), // Config-managed collections cannot be edited in UI\n createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n});\n\n// Content items - actual content data\nexport const content = sqliteTable('content', {\n id: text('id').primaryKey(),\n collectionId: text('collection_id').notNull().references(() => collections.id),\n slug: text('slug').notNull(),\n title: text('title').notNull(),\n data: text('data', { mode: 'json' }).notNull(), // JSON content data\n status: text('status').notNull().default('draft'), // 'draft', 'published', 'archived'\n publishedAt: integer('published_at', { mode: 'timestamp' }),\n authorId: text('author_id').notNull().references(() => users.id),\n createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n});\n\n// Content versions for versioning system\nexport const contentVersions = sqliteTable('content_versions', {\n id: text('id').primaryKey(),\n contentId: text('content_id').notNull().references(() => content.id),\n version: integer('version').notNull(),\n data: text('data', { mode: 'json' }).notNull(),\n authorId: text('author_id').notNull().references(() => users.id),\n createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n});\n\n// Media/Files table\nexport const media = sqliteTable('media', {\n id: text('id').primaryKey(),\n filename: text('filename').notNull(),\n originalName: text('original_name').notNull(),\n mimeType: text('mime_type').notNull(),\n size: integer('size').notNull(),\n width: integer('width'),\n height: integer('height'),\n folder: text('folder').notNull().default('uploads'),\n r2Key: text('r2_key').notNull(), // R2 storage key\n publicUrl: text('public_url').notNull(), // CDN URL\n thumbnailUrl: text('thumbnail_url'),\n alt: text('alt'),\n caption: text('caption'),\n tags: text('tags', { mode: 'json' }), // JSON array of tags\n uploadedBy: text('uploaded_by').notNull().references(() => users.id),\n uploadedAt: integer('uploaded_at').notNull(),\n updatedAt: integer('updated_at'),\n publishedAt: integer('published_at'),\n scheduledAt: integer('scheduled_at'),\n archivedAt: integer('archived_at'),\n deletedAt: integer('deleted_at'),\n});\n\n// API tokens for programmatic access\nexport const apiTokens = sqliteTable('api_tokens', {\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n token: text('token').notNull().unique(),\n userId: text('user_id').notNull().references(() => users.id),\n permissions: text('permissions', { mode: 'json' }).notNull(), // Array of permissions\n expiresAt: integer('expires_at', { mode: 'timestamp' }),\n lastUsedAt: integer('last_used_at', { mode: 'timestamp' }),\n createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n});\n\n\n// Workflow history for content workflow tracking\nexport const workflowHistory = sqliteTable('workflow_history', {\n id: text('id').primaryKey(),\n contentId: text('content_id').notNull().references(() => content.id),\n action: text('action').notNull(),\n fromStatus: text('from_status').notNull(),\n toStatus: text('to_status').notNull(),\n userId: text('user_id').notNull().references(() => users.id),\n comment: text('comment'),\n createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n});\n\n// Plugin system tables\nexport const plugins = sqliteTable('plugins', {\n id: text('id').primaryKey(),\n name: text('name').notNull().unique(),\n displayName: text('display_name').notNull(),\n description: text('description'),\n version: text('version').notNull(),\n author: text('author').notNull(),\n category: text('category').notNull(),\n icon: text('icon'),\n status: text('status').notNull().default('inactive'), // 'active', 'inactive', 'error'\n isCore: integer('is_core', { mode: 'boolean' }).notNull().default(false),\n settings: text('settings', { mode: 'json' }),\n permissions: text('permissions', { mode: 'json' }),\n dependencies: text('dependencies', { mode: 'json' }),\n downloadCount: integer('download_count').notNull().default(0),\n rating: integer('rating').notNull().default(0),\n installedAt: integer('installed_at').notNull(),\n activatedAt: integer('activated_at'),\n lastUpdated: integer('last_updated').notNull(),\n errorMessage: text('error_message'),\n createdAt: integer('created_at').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),\n updatedAt: integer('updated_at').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),\n});\n\nexport const pluginHooks = sqliteTable('plugin_hooks', {\n id: text('id').primaryKey(),\n pluginId: text('plugin_id').notNull().references(() => plugins.id),\n hookName: text('hook_name').notNull(),\n handlerName: text('handler_name').notNull(),\n priority: integer('priority').notNull().default(10),\n isActive: integer('is_active', { mode: 'boolean' }).notNull().default(true),\n createdAt: integer('created_at').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),\n});\n\nexport const pluginRoutes = sqliteTable('plugin_routes', {\n id: text('id').primaryKey(),\n pluginId: text('plugin_id').notNull().references(() => plugins.id),\n path: text('path').notNull(),\n method: text('method').notNull(),\n handlerName: text('handler_name').notNull(),\n middleware: text('middleware', { mode: 'json' }),\n isActive: integer('is_active', { mode: 'boolean' }).notNull().default(true),\n createdAt: integer('created_at').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),\n});\n\nexport const pluginAssets = sqliteTable('plugin_assets', {\n id: text('id').primaryKey(),\n pluginId: text('plugin_id').notNull().references(() => plugins.id),\n assetType: text('asset_type').notNull(), // 'css', 'js', 'image', 'font'\n assetPath: text('asset_path').notNull(),\n loadOrder: integer('load_order').notNull().default(100),\n loadLocation: text('load_location').notNull().default('footer'), // 'header', 'footer'\n isActive: integer('is_active', { mode: 'boolean' }).notNull().default(true),\n createdAt: integer('created_at').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),\n});\n\nexport const pluginActivityLog = sqliteTable('plugin_activity_log', {\n id: text('id').primaryKey(),\n pluginId: text('plugin_id').notNull().references(() => plugins.id),\n action: text('action').notNull(),\n userId: text('user_id'),\n details: text('details', { mode: 'json' }),\n timestamp: integer('timestamp').notNull().$defaultFn(() => Math.floor(Date.now() / 1000)),\n});\n\n// Zod schemas for validation\nexport const insertUserSchema = createInsertSchema(users, {\n email: (schema: any) => schema.email(),\n firstName: (schema: any) => schema.min(1),\n lastName: (schema: any) => schema.min(1),\n username: (schema: any) => schema.min(3),\n});\n\nexport const selectUserSchema = createSelectSchema(users);\n\nexport const insertCollectionSchema = createInsertSchema(collections, {\n name: (schema: any) => schema.min(1).regex(/^[a-z0-9_]+$/, 'Collection name must be lowercase with underscores'),\n displayName: (schema: any) => schema.min(1),\n});\n\nexport const selectCollectionSchema = createSelectSchema(collections);\n\nexport const insertContentSchema = createInsertSchema(content, {\n slug: (schema: any) => schema.min(1).regex(/^[a-zA-Z0-9_-]+$/, 'Slug must contain only letters, numbers, underscores, and hyphens'),\n title: (schema: any) => schema.min(1),\n status: (schema: any) => schema,\n});\n\nexport const selectContentSchema = createSelectSchema(content);\n\nexport const insertMediaSchema = createInsertSchema(media, {\n filename: (schema: any) => schema.min(1),\n originalName: (schema: any) => schema.min(1),\n mimeType: (schema: any) => schema.min(1),\n size: (schema: any) => schema.positive(),\n r2Key: (schema: any) => schema.min(1),\n publicUrl: (schema: any) => schema.url(),\n folder: (schema: any) => schema.min(1),\n});\n\nexport const selectMediaSchema = createSelectSchema(media);\n\n\nexport const insertWorkflowHistorySchema = createInsertSchema(workflowHistory, {\n action: (schema: any) => schema.min(1),\n fromStatus: (schema: any) => schema.min(1),\n toStatus: (schema: any) => schema.min(1),\n});\n\nexport const selectWorkflowHistorySchema = createSelectSchema(workflowHistory);\n\nexport const insertPluginSchema = createInsertSchema(plugins, {\n name: (schema: any) => schema.min(1),\n displayName: (schema: any) => schema.min(1),\n version: (schema: any) => schema.min(1),\n author: (schema: any) => schema.min(1),\n category: (schema: any) => schema.min(1),\n});\n\nexport const selectPluginSchema = createSelectSchema(plugins);\n\nexport const insertPluginHookSchema = createInsertSchema(pluginHooks, {\n hookName: (schema: any) => schema.min(1),\n handlerName: (schema: any) => schema.min(1),\n});\n\nexport const selectPluginHookSchema = createSelectSchema(pluginHooks);\n\nexport const insertPluginRouteSchema = createInsertSchema(pluginRoutes, {\n path: (schema: any) => schema.min(1),\n method: (schema: any) => schema.min(1),\n handlerName: (schema: any) => schema.min(1),\n});\n\nexport const selectPluginRouteSchema = createSelectSchema(pluginRoutes);\n\nexport const insertPluginAssetSchema = createInsertSchema(pluginAssets, {\n assetType: (schema: any) => schema.min(1),\n assetPath: (schema: any) => schema.min(1),\n});\n\nexport const selectPluginAssetSchema = createSelectSchema(pluginAssets);\n\nexport const insertPluginActivityLogSchema = createInsertSchema(pluginActivityLog, {\n action: (schema: any) => schema.min(1),\n});\n\nexport const selectPluginActivityLogSchema = createSelectSchema(pluginActivityLog);\n\n// System logs table for comprehensive logging\nexport const systemLogs = sqliteTable('system_logs', {\n id: text('id').primaryKey(),\n level: text('level').notNull(), // 'debug', 'info', 'warn', 'error', 'fatal'\n category: text('category').notNull(), // 'auth', 'api', 'workflow', 'plugin', 'media', 'system', etc.\n message: text('message').notNull(),\n data: text('data', { mode: 'json' }), // Additional structured data\n userId: text('user_id').references(() => users.id),\n sessionId: text('session_id'),\n requestId: text('request_id'),\n ipAddress: text('ip_address'),\n userAgent: text('user_agent'),\n method: text('method'), // HTTP method for API logs\n url: text('url'), // Request URL for API logs\n statusCode: integer('status_code'), // HTTP status code for API logs\n duration: integer('duration'), // Request duration in milliseconds\n stackTrace: text('stack_trace'), // Error stack trace for error logs\n tags: text('tags', { mode: 'json' }), // Array of tags for categorization\n source: text('source'), // Source component/module that generated the log\n createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n});\n\n// Log configuration table\nexport const logConfig = sqliteTable('log_config', {\n id: text('id').primaryKey(),\n category: text('category').notNull().unique(),\n enabled: integer('enabled', { mode: 'boolean' }).notNull().default(true),\n level: text('level').notNull().default('info'), // minimum log level to store\n retention: integer('retention').notNull().default(30), // days to keep logs\n maxSize: integer('max_size').default(10000), // max number of logs per category\n createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n});\n\n// Insert and select schemas for system logs\nexport const insertSystemLogSchema = createInsertSchema(systemLogs, {\n level: (schema: any) => schema.min(1),\n category: (schema: any) => schema.min(1),\n message: (schema: any) => schema.min(1),\n});\n\nexport const selectSystemLogSchema = createSelectSchema(systemLogs);\n\nexport const insertLogConfigSchema = createInsertSchema(logConfig, {\n category: (schema: any) => schema.min(1),\n level: (schema: any) => schema.min(1),\n});\n\nexport const selectLogConfigSchema = createSelectSchema(logConfig);\n\n// Type exports\nexport type User = typeof users.$inferSelect;\nexport type NewUser = typeof users.$inferInsert;\nexport type Collection = typeof collections.$inferSelect;\nexport type NewCollection = typeof collections.$inferInsert;\nexport type Content = typeof content.$inferSelect;\nexport type NewContent = typeof content.$inferInsert;\nexport type Media = typeof media.$inferSelect;\nexport type NewMedia = typeof media.$inferInsert;\nexport type WorkflowHistory = typeof workflowHistory.$inferSelect;\nexport type NewWorkflowHistory = typeof workflowHistory.$inferInsert;\nexport type Plugin = typeof plugins.$inferSelect;\nexport type NewPlugin = typeof plugins.$inferInsert;\nexport type PluginHook = typeof pluginHooks.$inferSelect;\nexport type NewPluginHook = typeof pluginHooks.$inferInsert;\nexport type PluginRoute = typeof pluginRoutes.$inferSelect;\nexport type NewPluginRoute = typeof pluginRoutes.$inferInsert;\nexport type PluginAsset = typeof pluginAssets.$inferSelect;\nexport type NewPluginAsset = typeof pluginAssets.$inferInsert;\nexport type PluginActivityLog = typeof pluginActivityLog.$inferSelect;\nexport type NewPluginActivityLog = typeof pluginActivityLog.$inferInsert;\nexport type SystemLog = typeof systemLogs.$inferSelect;\nexport type NewSystemLog = typeof systemLogs.$inferInsert;\nexport type LogConfig = typeof logConfig.$inferSelect;\nexport type NewLogConfig = typeof logConfig.$inferInsert;",null,null,null,null,"import type { D1Database } from '@cloudflare/workers-types'\nimport { systemLogs, logConfig, type NewSystemLog, type LogConfig } from '../db/schema'\nimport { drizzle } from 'drizzle-orm/d1'\nimport { eq, and, gte, lte, desc, asc, count, like, inArray } from 'drizzle-orm'\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal'\nexport type LogCategory = 'auth' | 'api' | 'workflow' | 'plugin' | 'media' | 'system' | 'security' | 'error'\n\nexport interface LogEntry {\n level: LogLevel\n category: LogCategory\n message: string\n data?: any\n userId?: string\n sessionId?: string\n requestId?: string\n ipAddress?: string\n userAgent?: string\n method?: string\n url?: string\n statusCode?: number\n duration?: number\n stackTrace?: string\n tags?: string[]\n source?: string\n}\n\nexport interface LogFilter {\n level?: LogLevel[]\n category?: LogCategory[]\n userId?: string\n source?: string\n search?: string\n startDate?: Date\n endDate?: Date\n tags?: string[]\n limit?: number\n offset?: number\n sortBy?: 'created_at' | 'level' | 'category'\n sortOrder?: 'asc' | 'desc'\n}\n\nexport class Logger {\n private db: ReturnType<typeof drizzle>\n private enabled: boolean = true\n private configCache: Map<string, LogConfig> = new Map()\n private lastConfigRefresh: number = 0\n private configRefreshInterval: number = 60000 // 1 minute\n\n constructor(database: D1Database) {\n this.db = drizzle(database)\n }\n\n /**\n * Log a debug message\n */\n async debug(category: LogCategory, message: string, data?: any, context?: Partial<LogEntry>): Promise<void> {\n return this.log('debug', category, message, data, context)\n }\n\n /**\n * Log an info message\n */\n async info(category: LogCategory, message: string, data?: any, context?: Partial<LogEntry>): Promise<void> {\n return this.log('info', category, message, data, context)\n }\n\n /**\n * Log a warning message\n */\n async warn(category: LogCategory, message: string, data?: any, context?: Partial<LogEntry>): Promise<void> {\n return this.log('warn', category, message, data, context)\n }\n\n /**\n * Log an error message\n */\n async error(category: LogCategory, message: string, error?: Error | any, context?: Partial<LogEntry>): Promise<void> {\n const errorData = error instanceof Error ? {\n name: error.name,\n message: error.message,\n stack: error.stack\n } : error\n\n return this.log('error', category, message, errorData, {\n ...context,\n stackTrace: error instanceof Error ? error.stack : undefined\n })\n }\n\n /**\n * Log a fatal message\n */\n async fatal(category: LogCategory, message: string, error?: Error | any, context?: Partial<LogEntry>): Promise<void> {\n const errorData = error instanceof Error ? {\n name: error.name,\n message: error.message,\n stack: error.stack\n } : error\n\n return this.log('fatal', category, message, errorData, {\n ...context,\n stackTrace: error instanceof Error ? error.stack : undefined\n })\n }\n\n /**\n * Log an API request\n */\n async logRequest(\n method: string,\n url: string,\n statusCode: number,\n duration: number,\n context?: Partial<LogEntry>\n ): Promise<void> {\n const level: LogLevel = statusCode >= 500 ? 'error' : statusCode >= 400 ? 'warn' : 'info'\n \n return this.log(level, 'api', `${method} ${url} - ${statusCode}`, {\n method,\n url,\n statusCode,\n duration\n }, {\n ...context,\n method,\n url,\n statusCode,\n duration\n })\n }\n\n /**\n * Log an authentication event\n */\n async logAuth(action: string, userId?: string, success: boolean = true, context?: Partial<LogEntry>): Promise<void> {\n const level: LogLevel = success ? 'info' : 'warn'\n \n return this.log(level, 'auth', `Authentication ${action}: ${success ? 'success' : 'failed'}`, {\n action,\n success,\n userId\n }, {\n ...context,\n userId,\n tags: ['authentication', action]\n })\n }\n\n /**\n * Log a security event\n */\n async logSecurity(event: string, severity: 'low' | 'medium' | 'high' | 'critical', context?: Partial<LogEntry>): Promise<void> {\n const level: LogLevel = severity === 'critical' ? 'fatal' : severity === 'high' ? 'error' : 'warn'\n \n return this.log(level, 'security', `Security event: ${event}`, {\n event,\n severity\n }, {\n ...context,\n tags: ['security', severity]\n })\n }\n\n /**\n * Core logging method\n */\n private async log(\n level: LogLevel,\n category: LogCategory,\n message: string,\n data?: any,\n context?: Partial<LogEntry>\n ): Promise<void> {\n if (!this.enabled) return\n\n try {\n // Check if logging is enabled for this category and level\n const config = await this.getConfig(category)\n if (!config || !config.enabled || !this.shouldLog(level, config.level)) {\n return\n }\n\n const logEntry: NewSystemLog = {\n id: crypto.randomUUID(),\n level,\n category,\n message,\n data: data ? JSON.stringify(data) : null,\n userId: context?.userId || null,\n sessionId: context?.sessionId || null,\n requestId: context?.requestId || null,\n ipAddress: context?.ipAddress || null,\n userAgent: context?.userAgent || null,\n method: context?.method || null,\n url: context?.url || null,\n statusCode: context?.statusCode || null,\n duration: context?.duration || null,\n stackTrace: context?.stackTrace || null,\n tags: context?.tags ? JSON.stringify(context.tags) : null,\n source: context?.source || null,\n createdAt: new Date()\n }\n\n await this.db.insert(systemLogs).values(logEntry)\n\n // Check if we need to clean up old logs\n if (config.maxSize) {\n await this.cleanupCategory(category, config.maxSize)\n }\n\n } catch (error) {\n // Don't log errors in the logger to avoid infinite loops\n console.error('Logger error:', error)\n }\n }\n\n /**\n * Get logs with filtering and pagination\n */\n async getLogs(filter: LogFilter = {}): Promise<{ logs: any[], total: number }> {\n try {\n const conditions = []\n \n if (filter.level && filter.level.length > 0) {\n conditions.push(inArray(systemLogs.level, filter.level))\n }\n \n if (filter.category && filter.category.length > 0) {\n conditions.push(inArray(systemLogs.category, filter.category))\n }\n \n if (filter.userId) {\n conditions.push(eq(systemLogs.userId, filter.userId))\n }\n \n if (filter.source) {\n conditions.push(eq(systemLogs.source, filter.source))\n }\n \n if (filter.search) {\n conditions.push(\n like(systemLogs.message, `%${filter.search}%`)\n )\n }\n \n if (filter.startDate) {\n conditions.push(gte(systemLogs.createdAt, filter.startDate))\n }\n \n if (filter.endDate) {\n conditions.push(lte(systemLogs.createdAt, filter.endDate))\n }\n\n const whereClause = conditions.length > 0 ? and(...conditions) : undefined\n\n // Get total count\n const totalResult = await this.db\n .select({ count: count() })\n .from(systemLogs)\n .where(whereClause)\n\n const total = totalResult[0]?.count || 0\n\n // Get logs with pagination and sorting\n const sortColumn = filter.sortBy === 'level' ? systemLogs.level :\n filter.sortBy === 'category' ? systemLogs.category :\n systemLogs.createdAt\n\n const sortFn = filter.sortOrder === 'asc' ? asc : desc\n\n const logs = await this.db\n .select()\n .from(systemLogs)\n .where(whereClause)\n .orderBy(sortFn(sortColumn))\n .limit(filter.limit || 50)\n .offset(filter.offset || 0)\n\n return { logs, total }\n } catch (error) {\n console.error('Error getting logs:', error)\n return { logs: [], total: 0 }\n }\n }\n\n /**\n * Get log configuration for a category\n */\n private async getConfig(category: LogCategory): Promise<LogConfig | null> {\n try {\n // Check cache first\n const now = Date.now()\n if (this.configCache.has(category) && (now - this.lastConfigRefresh) < this.configRefreshInterval) {\n return this.configCache.get(category) || null\n }\n\n // Refresh config from database\n const configs = await this.db\n .select()\n .from(logConfig)\n .where(eq(logConfig.category, category))\n\n const config = configs[0] || null\n \n if (config) {\n this.configCache.set(category, config)\n this.lastConfigRefresh = now\n }\n\n return config\n } catch (error) {\n console.error('Error getting log config:', error)\n return null\n }\n }\n\n /**\n * Update log configuration\n */\n async updateConfig(category: LogCategory, updates: Partial<LogConfig>): Promise<void> {\n try {\n await this.db\n .update(logConfig)\n .set({\n ...updates,\n updatedAt: new Date()\n })\n .where(eq(logConfig.category, category))\n\n // Clear cache for this category\n this.configCache.delete(category)\n } catch (error) {\n console.error('Error updating log config:', error)\n }\n }\n\n /**\n * Get all log configurations\n */\n async getAllConfigs(): Promise<LogConfig[]> {\n try {\n return await this.db.select().from(logConfig)\n } catch (error) {\n console.error('Error getting log configs:', error)\n return []\n }\n }\n\n /**\n * Clean up old logs for a category\n */\n private async cleanupCategory(category: LogCategory, maxSize: number): Promise<void> {\n try {\n // Count current logs for this category\n const countResult = await this.db\n .select({ count: count() })\n .from(systemLogs)\n .where(eq(systemLogs.category, category))\n\n const currentCount = countResult[0]?.count || 0\n\n if (currentCount > maxSize) {\n // Get the cutoff date (keep newest maxSize logs)\n const cutoffLogs = await this.db\n .select({ createdAt: systemLogs.createdAt })\n .from(systemLogs)\n .where(eq(systemLogs.category, category))\n .orderBy(desc(systemLogs.createdAt))\n .limit(1)\n .offset(maxSize - 1)\n\n if (cutoffLogs[0]) {\n // Delete older logs\n await this.db\n .delete(systemLogs)\n .where(\n and(\n eq(systemLogs.category, category),\n lte(systemLogs.createdAt, cutoffLogs[0].createdAt)\n )\n )\n }\n }\n } catch (error) {\n console.error('Error cleaning up logs:', error)\n }\n }\n\n /**\n * Clean up logs based on retention policy\n */\n async cleanupByRetention(): Promise<void> {\n try {\n const configs = await this.getAllConfigs()\n \n for (const config of configs) {\n if (config.retention > 0) {\n const cutoffDate = new Date()\n cutoffDate.setDate(cutoffDate.getDate() - config.retention)\n\n await this.db\n .delete(systemLogs)\n .where(\n and(\n eq(systemLogs.category, config.category),\n lte(systemLogs.createdAt, cutoffDate)\n )\n )\n }\n }\n } catch (error) {\n console.error('Error cleaning up logs by retention:', error)\n }\n }\n\n /**\n * Check if a log level should be recorded based on configuration\n */\n private shouldLog(level: LogLevel, configLevel: string): boolean {\n const levels = ['debug', 'info', 'warn', 'error', 'fatal']\n const levelIndex = levels.indexOf(level)\n const configLevelIndex = levels.indexOf(configLevel)\n \n return levelIndex >= configLevelIndex\n }\n\n /**\n * Enable or disable logging\n */\n setEnabled(enabled: boolean): void {\n this.enabled = enabled\n }\n\n /**\n * Check if logging is enabled\n */\n isEnabled(): boolean {\n return this.enabled\n }\n}\n\n// Singleton logger instance\nlet loggerInstance: Logger | null = null\n\n/**\n * Get the logger instance\n */\nexport function getLogger(database?: D1Database): Logger {\n if (!loggerInstance && database) {\n loggerInstance = new Logger(database)\n }\n \n if (!loggerInstance) {\n throw new Error('Logger not initialized. Call getLogger with a database instance first.')\n }\n \n return loggerInstance\n}\n\n/**\n * Initialize the logger with a database\n */\nexport function initLogger(database: D1Database): Logger {\n loggerInstance = new Logger(database)\n return loggerInstance\n}","/**\n * Simple Cache Service\n *\n * Provides basic caching functionality for the core package\n * Can be extended with KV or other storage backends\n */\n\nexport interface CacheConfig {\n ttl: number // Time to live in seconds\n keyPrefix: string\n}\n\nexport class CacheService {\n private config: CacheConfig\n private memoryCache: Map<string, { value: any; expires: number }> = new Map()\n\n constructor(config: CacheConfig) {\n this.config = config\n }\n\n /**\n * Generate cache key with prefix\n */\n generateKey(type: string, identifier?: string): string {\n const parts = [this.config.keyPrefix, type]\n if (identifier) {\n parts.push(identifier)\n }\n return parts.join(':')\n }\n\n /**\n * Get value from cache\n */\n async get<T>(key: string): Promise<T | null> {\n const cached = this.memoryCache.get(key)\n\n if (!cached) {\n return null\n }\n\n // Check if expired\n if (Date.now() > cached.expires) {\n this.memoryCache.delete(key)\n return null\n }\n\n return cached.value as T\n }\n\n /**\n * Get value from cache with source information\n */\n async getWithSource<T>(key: string): Promise<{\n hit: boolean\n data: T | null\n source: string\n ttl?: number\n }> {\n const cached = this.memoryCache.get(key)\n\n if (!cached) {\n return {\n hit: false,\n data: null,\n source: 'none'\n }\n }\n\n // Check if expired\n if (Date.now() > cached.expires) {\n this.memoryCache.delete(key)\n return {\n hit: false,\n data: null,\n source: 'expired'\n }\n }\n\n return {\n hit: true,\n data: cached.value as T,\n source: 'memory',\n ttl: (cached.expires - Date.now()) / 1000 // TTL in seconds\n }\n }\n\n /**\n * Set value in cache\n */\n async set(key: string, value: any, ttl?: number): Promise<void> {\n const expires = Date.now() + ((ttl || this.config.ttl) * 1000)\n this.memoryCache.set(key, { value, expires })\n }\n\n /**\n * Delete specific key from cache\n */\n async delete(key: string): Promise<void> {\n this.memoryCache.delete(key)\n }\n\n /**\n * Invalidate cache keys matching a pattern\n * For memory cache, we do simple string matching\n */\n async invalidate(pattern: string): Promise<void> {\n // Convert glob pattern to regex\n const regexPattern = pattern\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.')\n const regex = new RegExp(`^${regexPattern}$`)\n\n // Find and delete matching keys\n for (const key of this.memoryCache.keys()) {\n if (regex.test(key)) {\n this.memoryCache.delete(key)\n }\n }\n }\n\n /**\n * Clear all cache\n */\n async clear(): Promise<void> {\n this.memoryCache.clear()\n }\n\n /**\n * Get value from cache or set it using a callback\n */\n async getOrSet<T>(key: string, callback: () => Promise<T>, ttl?: number): Promise<T> {\n const cached = await this.get<T>(key)\n\n if (cached !== null) {\n return cached\n }\n\n const value = await callback()\n await this.set(key, value, ttl)\n return value\n }\n}\n\n/**\n * Cache configurations for different data types\n */\nexport const CACHE_CONFIGS = {\n api: {\n ttl: 300, // 5 minutes\n keyPrefix: 'api'\n },\n user: {\n ttl: 600, // 10 minutes\n keyPrefix: 'user'\n },\n content: {\n ttl: 300, // 5 minutes\n keyPrefix: 'content'\n },\n collection: {\n ttl: 600, // 10 minutes\n keyPrefix: 'collection'\n }\n}\n\n/**\n * Get cache service instance for a config\n */\nexport function getCacheService(config: CacheConfig): CacheService {\n return new CacheService(config)\n}\n","export interface Setting {\n id: string\n category: string\n key: string\n value: string // JSON string\n created_at: number\n updated_at: number\n}\n\nexport interface GeneralSettings {\n siteName: string\n siteDescription: string\n adminEmail: string\n timezone: string\n language: string\n maintenanceMode: boolean\n}\n\nexport class SettingsService {\n constructor(private db: D1Database) {}\n\n /**\n * Get a setting value by category and key\n */\n async getSetting(category: string, key: string): Promise<any | null> {\n try {\n const result = await this.db\n .prepare('SELECT value FROM settings WHERE category = ? AND key = ?')\n .bind(category, key)\n .first()\n\n if (!result) {\n return null\n }\n\n return JSON.parse((result as any).value)\n } catch (error) {\n console.error(`Error getting setting ${category}.${key}:`, error)\n return null\n }\n }\n\n /**\n * Get all settings for a category\n */\n async getCategorySettings(category: string): Promise<Record<string, any>> {\n try {\n const { results } = await this.db\n .prepare('SELECT key, value FROM settings WHERE category = ?')\n .bind(category)\n .all()\n\n const settings: Record<string, any> = {}\n for (const row of results || []) {\n const r = row as any\n settings[r.key] = JSON.parse(r.value)\n }\n\n return settings\n } catch (error) {\n console.error(`Error getting category settings for ${category}:`, error)\n return {}\n }\n }\n\n /**\n * Set a setting value\n */\n async setSetting(category: string, key: string, value: any): Promise<boolean> {\n try {\n const now = Date.now()\n const jsonValue = JSON.stringify(value)\n\n await this.db\n .prepare(`\n INSERT INTO settings (id, category, key, value, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(category, key) DO UPDATE SET\n value = excluded.value,\n updated_at = excluded.updated_at\n `)\n .bind(crypto.randomUUID(), category, key, jsonValue, now, now)\n .run()\n\n return true\n } catch (error) {\n console.error(`Error setting ${category}.${key}:`, error)\n return false\n }\n }\n\n /**\n * Set multiple settings at once\n */\n async setMultipleSettings(category: string, settings: Record<string, any>): Promise<boolean> {\n try {\n const now = Date.now()\n\n // Use a transaction-like approach with batch operations\n for (const [key, value] of Object.entries(settings)) {\n const jsonValue = JSON.stringify(value)\n\n await this.db\n .prepare(`\n INSERT INTO settings (id, category, key, value, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?)\n ON CONFLICT(category, key) DO UPDATE SET\n value = excluded.value,\n updated_at = excluded.updated_at\n `)\n .bind(crypto.randomUUID(), category, key, jsonValue, now, now)\n .run()\n }\n\n return true\n } catch (error) {\n console.error(`Error setting multiple settings for ${category}:`, error)\n return false\n }\n }\n\n /**\n * Get general settings with defaults\n */\n async getGeneralSettings(userEmail?: string): Promise<GeneralSettings> {\n const settings = await this.getCategorySettings('general')\n\n return {\n siteName: settings.siteName || 'SonicJS AI',\n siteDescription: settings.siteDescription || 'A modern headless CMS powered by AI',\n adminEmail: settings.adminEmail || userEmail || 'admin@example.com',\n timezone: settings.timezone || 'UTC',\n language: settings.language || 'en',\n maintenanceMode: settings.maintenanceMode || false\n }\n }\n\n /**\n * Save general settings\n */\n async saveGeneralSettings(settings: Partial<GeneralSettings>): Promise<boolean> {\n const settingsToSave: Record<string, any> = {}\n\n if (settings.siteName !== undefined) settingsToSave.siteName = settings.siteName\n if (settings.siteDescription !== undefined) settingsToSave.siteDescription = settings.siteDescription\n if (settings.adminEmail !== undefined) settingsToSave.adminEmail = settings.adminEmail\n if (settings.timezone !== undefined) settingsToSave.timezone = settings.timezone\n if (settings.language !== undefined) settingsToSave.language = settings.language\n if (settings.maintenanceMode !== undefined) settingsToSave.maintenanceMode = settings.maintenanceMode\n\n return await this.setMultipleSettings('general', settingsToSave)\n }\n}\n","/**\n * Telemetry Service\n *\n * Privacy-first telemetry service using PostHog\n * - No PII collection\n * - Opt-out by default\n * - Silent failures (never blocks app)\n */\n\nimport type { TelemetryEvent, TelemetryProperties, TelemetryConfig, TelemetryIdentity } from '../types/telemetry'\nimport { getTelemetryConfig } from '../utils/telemetry-config'\nimport { generateInstallationId, generateProjectId, sanitizeErrorMessage, sanitizeRoute } from '../utils/telemetry-id'\n\n/**\n * TelemetryService class\n *\n * Handles all telemetry tracking in a privacy-conscious way\n */\nexport class TelemetryService {\n private config: TelemetryConfig\n private identity: TelemetryIdentity | null = null\n private client: any = null\n private enabled: boolean = true\n private eventQueue: Array<{ event: TelemetryEvent; properties?: TelemetryProperties }> = []\n private isInitialized: boolean = false\n\n constructor(config?: Partial<TelemetryConfig>) {\n this.config = {\n ...getTelemetryConfig(),\n ...config\n }\n this.enabled = this.config.enabled\n }\n\n /**\n * Initialize the telemetry service\n */\n async initialize(identity: TelemetryIdentity): Promise<void> {\n if (!this.enabled) {\n if (this.config.debug) {\n console.log('[Telemetry] Disabled via configuration')\n }\n return\n }\n\n try {\n this.identity = identity\n\n // Only initialize PostHog if we have an API key\n if (this.config.apiKey) {\n // Dynamic import to avoid bundling if not needed\n const { PostHog } = await import('posthog-node')\n\n this.client = new PostHog(this.config.apiKey, {\n host: this.config.host,\n flushAt: 20, // Batch events\n flushInterval: 10000 // Flush every 10 seconds\n })\n\n if (this.config.debug) {\n console.log('[Telemetry] Initialized with installation ID:', identity.installationId)\n }\n } else if (this.config.debug) {\n console.log('[Telemetry] No API key provided, tracking will be logged only')\n }\n\n this.isInitialized = true\n\n // Flush any queued events\n await this.flushQueue()\n\n } catch (error) {\n // Silent fail - telemetry should never break the app\n if (this.config.debug) {\n console.error('[Telemetry] Initialization failed:', error)\n }\n this.enabled = false\n }\n }\n\n /**\n * Track a telemetry event\n */\n async track(event: TelemetryEvent, properties?: TelemetryProperties): Promise<void> {\n if (!this.enabled) return\n\n try {\n // Sanitize properties\n const sanitizedProps = this.sanitizeProperties(properties)\n\n // Add standard properties\n const enrichedProps = {\n ...sanitizedProps,\n timestamp: new Date().toISOString(),\n version: this.getVersion()\n }\n\n // If not initialized, queue the event\n if (!this.isInitialized) {\n this.eventQueue.push({ event, properties: enrichedProps })\n if (this.config.debug) {\n console.log('[Telemetry] Queued event:', event, enrichedProps)\n }\n return\n }\n\n // Send to PostHog if client is available\n if (this.client && this.identity) {\n this.client.capture({\n distinctId: this.identity.installationId,\n event,\n properties: enrichedProps\n })\n\n if (this.config.debug) {\n console.log('[Telemetry] Tracked event:', event, enrichedProps)\n }\n } else if (this.config.debug) {\n console.log('[Telemetry] Event (no client):', event, enrichedProps)\n }\n\n } catch (error) {\n // Silent fail\n if (this.config.debug) {\n console.error('[Telemetry] Failed to track event:', error)\n }\n }\n }\n\n /**\n * Track installation started\n */\n async trackInstallationStarted(properties?: TelemetryProperties): Promise<void> {\n await this.track('installation_started', properties)\n }\n\n /**\n * Track installation completed\n */\n async trackInstallationCompleted(properties?: TelemetryProperties): Promise<void> {\n await this.track('installation_completed', properties)\n }\n\n /**\n * Track installation failed\n */\n async trackInstallationFailed(error: Error | string, properties?: TelemetryProperties): Promise<void> {\n await this.track('installation_failed', {\n ...properties,\n errorType: sanitizeErrorMessage(error)\n })\n }\n\n /**\n * Track dev server started\n */\n async trackDevServerStarted(properties?: TelemetryProperties): Promise<void> {\n await this.track('dev_server_started', properties)\n }\n\n /**\n * Track page view in admin UI\n */\n async trackPageView(route: string, properties?: TelemetryProperties): Promise<void> {\n await this.track('page_viewed', {\n ...properties,\n route: sanitizeRoute(route)\n })\n }\n\n /**\n * Track error (sanitized)\n */\n async trackError(error: Error | string, properties?: TelemetryProperties): Promise<void> {\n await this.track('error_occurred', {\n ...properties,\n errorType: sanitizeErrorMessage(error)\n })\n }\n\n /**\n * Track plugin activation\n */\n async trackPluginActivated(properties?: TelemetryProperties): Promise<void> {\n await this.track('plugin_activated', properties)\n }\n\n /**\n * Track migration run\n */\n async trackMigrationRun(properties?: TelemetryProperties): Promise<void> {\n await this.track('migration_run', properties)\n }\n\n /**\n * Flush queued events\n */\n private async flushQueue(): Promise<void> {\n if (this.eventQueue.length === 0) return\n\n const queue = [...this.eventQueue]\n this.eventQueue = []\n\n for (const { event, properties } of queue) {\n await this.track(event, properties)\n }\n }\n\n /**\n * Sanitize properties to ensure no PII\n */\n private sanitizeProperties(properties?: TelemetryProperties): TelemetryProperties {\n if (!properties) return {}\n\n const sanitized: TelemetryProperties = {}\n\n for (const [key, value] of Object.entries(properties)) {\n // Skip undefined values\n if (value === undefined) continue\n\n // Sanitize routes\n if (key === 'route' && typeof value === 'string') {\n sanitized[key] = sanitizeRoute(value)\n continue\n }\n\n // Sanitize error messages\n if (key.toLowerCase().includes('error') && typeof value === 'string') {\n sanitized[key] = sanitizeErrorMessage(value)\n continue\n }\n\n // Only allow specific types\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n sanitized[key] = value\n }\n }\n\n return sanitized\n }\n\n /**\n * Get SonicJS version\n */\n private getVersion(): string {\n try {\n // Safe environment access for Cloudflare Workers compatibility\n if (typeof process !== 'undefined' && process.env) {\n return process.env.SONICJS_VERSION || '2.0.0'\n }\n return '2.0.0'\n } catch {\n return 'unknown'\n }\n }\n\n /**\n * Shutdown the telemetry service\n */\n async shutdown(): Promise<void> {\n try {\n if (this.client) {\n await this.client.shutdown()\n }\n } catch (error) {\n // Silent fail\n if (this.config.debug) {\n console.error('[Telemetry] Shutdown failed:', error)\n }\n }\n }\n\n /**\n * Enable telemetry\n */\n enable(): void {\n this.enabled = true\n }\n\n /**\n * Disable telemetry\n */\n disable(): void {\n this.enabled = false\n }\n\n /**\n * Check if telemetry is enabled\n */\n isEnabled(): boolean {\n return this.enabled\n }\n}\n\n// Singleton instance\nlet telemetryInstance: TelemetryService | null = null\n\n/**\n * Get the telemetry service instance\n */\nexport function getTelemetryService(config?: Partial<TelemetryConfig>): TelemetryService {\n if (!telemetryInstance) {\n telemetryInstance = new TelemetryService(config)\n }\n return telemetryInstance\n}\n\n/**\n * Initialize telemetry service\n */\nexport async function initTelemetry(identity: TelemetryIdentity, config?: Partial<TelemetryConfig>): Promise<TelemetryService> {\n const service = getTelemetryService(config)\n await service.initialize(identity)\n return service\n}\n\n/**\n * Create a new installation identity\n */\nexport function createInstallationIdentity(projectName?: string): TelemetryIdentity {\n const installationId = generateInstallationId()\n const identity: TelemetryIdentity = { installationId }\n\n if (projectName) {\n // Generate anonymous project ID\n identity.projectId = generateProjectId(projectName)\n }\n\n return identity\n}\n"]}