@sonicjs-cms/core 2.3.9 → 2.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-Q52ZQFMB.js → chunk-3YNNVSMC.js} +21 -34
- package/dist/chunk-3YNNVSMC.js.map +1 -0
- package/dist/{chunk-HNHKS2XF.js → chunk-74RYBO6J.js} +4 -5
- package/dist/chunk-74RYBO6J.js.map +1 -0
- package/dist/{chunk-ES3BRZQJ.cjs → chunk-7FOAMNTI.cjs} +29 -42
- package/dist/chunk-7FOAMNTI.cjs.map +1 -0
- package/dist/{chunk-AUU4H5MP.js → chunk-EIE35JCC.js} +4 -4
- package/dist/{chunk-AUU4H5MP.js.map → chunk-EIE35JCC.js.map} +1 -1
- package/dist/{chunk-I3M6I2FY.js → chunk-HDSRB23N.js} +18 -16
- package/dist/chunk-HDSRB23N.js.map +1 -0
- package/dist/{chunk-T7HDJE2H.cjs → chunk-HTJLBF6F.cjs} +200 -198
- package/dist/chunk-HTJLBF6F.cjs.map +1 -0
- package/dist/{chunk-N3EHA3AX.cjs → chunk-IB6UBZVD.cjs} +4 -5
- package/dist/chunk-IB6UBZVD.cjs.map +1 -0
- package/dist/{chunk-NAYD76QF.cjs → chunk-ILZ3DP4I.cjs} +15 -6
- package/dist/chunk-ILZ3DP4I.cjs.map +1 -0
- package/dist/{chunk-ZMSYKV62.cjs → chunk-K6BFUYJH.cjs} +5 -5
- package/dist/{chunk-ZMSYKV62.cjs.map → chunk-K6BFUYJH.cjs.map} +1 -1
- package/dist/{chunk-5RKQB2JG.js → chunk-KQCYQKSV.js} +8 -6
- package/dist/chunk-KQCYQKSV.js.map +1 -0
- package/dist/{chunk-624OTQ55.js → chunk-NTXPL746.js} +2 -2
- package/dist/{chunk-624OTQ55.js.map → chunk-NTXPL746.js.map} +1 -1
- package/dist/{chunk-YLFQXTTX.cjs → chunk-OJ5WUCSH.cjs} +7 -7
- package/dist/{chunk-YLFQXTTX.cjs.map → chunk-OJ5WUCSH.cjs.map} +1 -1
- package/dist/{chunk-7KCDFDRI.cjs → chunk-P3XDZL6Q.cjs} +3 -4
- package/dist/chunk-P3XDZL6Q.cjs.map +1 -0
- package/dist/{chunk-O446Q45G.cjs → chunk-P6NMVNJJ.cjs} +2 -2
- package/dist/{chunk-O446Q45G.cjs.map → chunk-P6NMVNJJ.cjs.map} +1 -1
- package/dist/{chunk-QNWYQZ55.js → chunk-REY542YK.js} +3 -3
- package/dist/{chunk-QNWYQZ55.js.map → chunk-REY542YK.js.map} +1 -1
- package/dist/{chunk-YU6QFFI4.cjs → chunk-RIOIKM3Y.cjs} +8 -6
- package/dist/chunk-RIOIKM3Y.cjs.map +1 -0
- package/dist/{chunk-7CXL5K7N.js → chunk-SGAG6FD3.js} +15 -6
- package/dist/chunk-SGAG6FD3.js.map +1 -0
- package/dist/{chunk-RRKXFGIO.js → chunk-X7ZAEI5S.js} +3 -4
- package/dist/chunk-X7ZAEI5S.js.map +1 -0
- package/dist/index.cjs +145 -145
- package/dist/index.js +14 -14
- package/dist/middleware.cjs +24 -24
- package/dist/middleware.js +3 -3
- package/dist/migrations-DQ74P6V4.cjs +13 -0
- package/dist/{migrations-RMI7TLPG.cjs.map → migrations-DQ74P6V4.cjs.map} +1 -1
- package/dist/migrations-YAFC5JVO.js +4 -0
- package/dist/{migrations-ALSBVBV5.js.map → migrations-YAFC5JVO.js.map} +1 -1
- package/dist/routes.cjs +28 -28
- package/dist/routes.js +8 -8
- package/dist/services.cjs +29 -29
- package/dist/services.d.cts +3 -4
- package/dist/services.d.ts +3 -4
- package/dist/services.js +4 -4
- package/dist/{telemetry-BFBIjBxK.d.cts → telemetry-UiD1i9GS.d.cts} +0 -1
- package/dist/{telemetry-BFBIjBxK.d.ts → telemetry-UiD1i9GS.d.ts} +0 -1
- package/dist/templates.cjs +17 -17
- package/dist/templates.js +2 -2
- package/dist/types.d.cts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/utils.cjs +20 -20
- package/dist/utils.d.cts +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +2 -2
- package/package.json +2 -3
- package/dist/chunk-5RKQB2JG.js.map +0 -1
- package/dist/chunk-7CXL5K7N.js.map +0 -1
- package/dist/chunk-7KCDFDRI.cjs.map +0 -1
- package/dist/chunk-ES3BRZQJ.cjs.map +0 -1
- package/dist/chunk-HNHKS2XF.js.map +0 -1
- package/dist/chunk-I3M6I2FY.js.map +0 -1
- package/dist/chunk-N3EHA3AX.cjs.map +0 -1
- package/dist/chunk-NAYD76QF.cjs.map +0 -1
- package/dist/chunk-Q52ZQFMB.js.map +0 -1
- package/dist/chunk-RRKXFGIO.js.map +0 -1
- package/dist/chunk-T7HDJE2H.cjs.map +0 -1
- package/dist/chunk-YU6QFFI4.cjs.map +0 -1
- package/dist/migrations-ALSBVBV5.js +0 -4
- package/dist/migrations-RMI7TLPG.cjs +0 -13
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getTelemetryConfig, sanitizeErrorMessage, sanitizeRoute, generateInstallationId, generateProjectId } from './chunk-
|
|
1
|
+
import { getTelemetryConfig, sanitizeErrorMessage, sanitizeRoute, generateInstallationId, generateProjectId } from './chunk-X7ZAEI5S.js';
|
|
2
2
|
import { __export } from './chunk-V4OQ3NZ2.js';
|
|
3
3
|
import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core';
|
|
4
4
|
import { z } from 'zod/v4';
|
|
@@ -1138,7 +1138,6 @@ var SettingsService = class {
|
|
|
1138
1138
|
var TelemetryService = class {
|
|
1139
1139
|
config;
|
|
1140
1140
|
identity = null;
|
|
1141
|
-
client = null;
|
|
1142
1141
|
enabled = true;
|
|
1143
1142
|
eventQueue = [];
|
|
1144
1143
|
isInitialized = false;
|
|
@@ -1161,20 +1160,8 @@ var TelemetryService = class {
|
|
|
1161
1160
|
}
|
|
1162
1161
|
try {
|
|
1163
1162
|
this.identity = identity;
|
|
1164
|
-
if (this.config.
|
|
1165
|
-
|
|
1166
|
-
this.client = new PostHog(this.config.apiKey, {
|
|
1167
|
-
host: this.config.host,
|
|
1168
|
-
flushAt: 20,
|
|
1169
|
-
// Batch events
|
|
1170
|
-
flushInterval: 1e4
|
|
1171
|
-
// Flush every 10 seconds
|
|
1172
|
-
});
|
|
1173
|
-
if (this.config.debug) {
|
|
1174
|
-
console.log("[Telemetry] Initialized with installation ID:", identity.installationId);
|
|
1175
|
-
}
|
|
1176
|
-
} else if (this.config.debug) {
|
|
1177
|
-
console.log("[Telemetry] No API key provided, tracking will be logged only");
|
|
1163
|
+
if (this.config.debug) {
|
|
1164
|
+
console.log("[Telemetry] Initialized with installation ID:", identity.installationId);
|
|
1178
1165
|
}
|
|
1179
1166
|
this.isInitialized = true;
|
|
1180
1167
|
await this.flushQueue();
|
|
@@ -1204,17 +1191,26 @@ var TelemetryService = class {
|
|
|
1204
1191
|
}
|
|
1205
1192
|
return;
|
|
1206
1193
|
}
|
|
1207
|
-
if (this.
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1194
|
+
if (this.identity && this.config.host) {
|
|
1195
|
+
const payload = {
|
|
1196
|
+
data: {
|
|
1197
|
+
installation_id: this.identity.installationId,
|
|
1198
|
+
event_type: event,
|
|
1199
|
+
properties: enrichedProps,
|
|
1200
|
+
timestamp: enrichedProps.timestamp
|
|
1201
|
+
}
|
|
1202
|
+
};
|
|
1203
|
+
fetch(`${this.config.host}/v1/events`, {
|
|
1204
|
+
method: "POST",
|
|
1205
|
+
headers: { "Content-Type": "application/json" },
|
|
1206
|
+
body: JSON.stringify(payload)
|
|
1207
|
+
}).catch(() => {
|
|
1212
1208
|
});
|
|
1213
1209
|
if (this.config.debug) {
|
|
1214
1210
|
console.log("[Telemetry] Tracked event:", event, enrichedProps);
|
|
1215
1211
|
}
|
|
1216
1212
|
} else if (this.config.debug) {
|
|
1217
|
-
console.log("[Telemetry] Event (no
|
|
1213
|
+
console.log("[Telemetry] Event (no endpoint):", event, enrichedProps);
|
|
1218
1214
|
}
|
|
1219
1215
|
} catch (error) {
|
|
1220
1216
|
if (this.config.debug) {
|
|
@@ -1326,18 +1322,9 @@ var TelemetryService = class {
|
|
|
1326
1322
|
}
|
|
1327
1323
|
}
|
|
1328
1324
|
/**
|
|
1329
|
-
* Shutdown the telemetry service
|
|
1325
|
+
* Shutdown the telemetry service (no-op for fetch-based telemetry)
|
|
1330
1326
|
*/
|
|
1331
1327
|
async shutdown() {
|
|
1332
|
-
try {
|
|
1333
|
-
if (this.client) {
|
|
1334
|
-
await this.client.shutdown();
|
|
1335
|
-
}
|
|
1336
|
-
} catch (error) {
|
|
1337
|
-
if (this.config.debug) {
|
|
1338
|
-
console.error("[Telemetry] Shutdown failed:", error);
|
|
1339
|
-
}
|
|
1340
|
-
}
|
|
1341
1328
|
}
|
|
1342
1329
|
/**
|
|
1343
1330
|
* Enable telemetry
|
|
@@ -1380,5 +1367,5 @@ function createInstallationIdentity(projectName) {
|
|
|
1380
1367
|
}
|
|
1381
1368
|
|
|
1382
1369
|
export { CACHE_CONFIGS, CacheService, Logger, SettingsService, TelemetryService, apiTokens, collections, content, contentVersions, createInstallationIdentity, getCacheService, getLogger, getTelemetryService, initLogger, initTelemetry, insertCollectionSchema, insertContentSchema, insertLogConfigSchema, insertMediaSchema, insertPluginActivityLogSchema, insertPluginAssetSchema, insertPluginHookSchema, insertPluginRouteSchema, insertPluginSchema, insertSystemLogSchema, insertUserSchema, insertWorkflowHistorySchema, logConfig, media, pluginActivityLog, pluginAssets, pluginHooks, pluginRoutes, plugins, schema_exports, selectCollectionSchema, selectContentSchema, selectLogConfigSchema, selectMediaSchema, selectPluginActivityLogSchema, selectPluginAssetSchema, selectPluginHookSchema, selectPluginRouteSchema, selectPluginSchema, selectSystemLogSchema, selectUserSchema, selectWorkflowHistorySchema, systemLogs, users, workflowHistory };
|
|
1383
|
-
//# sourceMappingURL=chunk-
|
|
1384
|
-
//# sourceMappingURL=chunk-
|
|
1370
|
+
//# sourceMappingURL=chunk-3YNNVSMC.js.map
|
|
1371
|
+
//# sourceMappingURL=chunk-3YNNVSMC.js.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":["zod","z","integer","columns"],"mappings":"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","file":"chunk-3YNNVSMC.js","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 custom SonicJS stats endpoint\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 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 if (this.config.debug) {\n console.log('[Telemetry] Initialized with installation ID:', identity.installationId)\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 custom SonicJS stats endpoint\n if (this.identity && this.config.host) {\n const payload = {\n data: {\n installation_id: this.identity.installationId,\n event_type: event,\n properties: enrichedProps,\n timestamp: enrichedProps.timestamp\n }\n }\n\n // Fire and forget - don't block on response\n fetch(`${this.config.host}/v1/events`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload)\n }).catch(() => {}) // Silent fail\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 endpoint):', 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 (no-op for fetch-based telemetry)\n */\n async shutdown(): Promise<void> {\n // No-op - fetch requests are fire and forget\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"]}
|
|
@@ -413,7 +413,7 @@ function buildQuery(table, filter) {
|
|
|
413
413
|
// package.json
|
|
414
414
|
var package_default = {
|
|
415
415
|
name: "@sonicjs-cms/core",
|
|
416
|
-
version: "2.3.
|
|
416
|
+
version: "2.3.12",
|
|
417
417
|
description: "Core framework for SonicJS headless CMS - Edge-first, TypeScript-native CMS built for Cloudflare Workers",
|
|
418
418
|
type: "module",
|
|
419
419
|
main: "./dist/index.cjs",
|
|
@@ -515,8 +515,7 @@ var package_default = {
|
|
|
515
515
|
"drizzle-zod": "^0.8.3",
|
|
516
516
|
marked: "^16.4.1",
|
|
517
517
|
"highlight.js": "^11.11.1",
|
|
518
|
-
semver: "^7.7.3"
|
|
519
|
-
"posthog-node": "^4.0.0"
|
|
518
|
+
semver: "^7.7.3"
|
|
520
519
|
},
|
|
521
520
|
devDependencies: {
|
|
522
521
|
"@cloudflare/workers-types": "^4.20251014.0",
|
|
@@ -544,5 +543,5 @@ function getCoreVersion() {
|
|
|
544
543
|
}
|
|
545
544
|
|
|
546
545
|
export { QueryFilterBuilder, SONICJS_VERSION, TemplateRenderer, buildQuery, escapeHtml, getCoreVersion, package_default, renderTemplate, sanitizeInput, sanitizeObject, templateRenderer };
|
|
547
|
-
//# sourceMappingURL=chunk-
|
|
548
|
-
//# sourceMappingURL=chunk-
|
|
546
|
+
//# sourceMappingURL=chunk-74RYBO6J.js.map
|
|
547
|
+
//# sourceMappingURL=chunk-74RYBO6J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/sanitize.ts","../src/utils/template-renderer.ts","../src/utils/query-filter.ts","../package.json","../src/utils/version.ts"],"names":[],"mappings":"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","file":"chunk-74RYBO6J.js","sourcesContent":["/**\n * HTML sanitization utilities for preventing XSS attacks\n */\n\n/**\n * Escapes HTML special characters to prevent XSS attacks\n * @param text - The text to escape\n * @returns The escaped text safe for HTML output\n */\nexport function escapeHtml(text: string): string {\n if (typeof text !== 'string') {\n return ''\n }\n\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n }\n\n return text.replace(/[&<>\"']/g, (char) => map[char] || char)\n}\n\n/**\n * Sanitizes user input by escaping HTML special characters\n * This should be used for all user-provided text fields to prevent XSS\n * @param input - The input string to sanitize\n * @returns The sanitized string\n */\nexport function sanitizeInput(input: string | null | undefined): string {\n if (!input) {\n return ''\n }\n return escapeHtml(String(input).trim())\n}\n\n/**\n * Sanitizes an object's string properties\n * @param obj - Object with string properties to sanitize\n * @param fields - Array of field names to sanitize\n * @returns New object with sanitized fields\n */\nexport function sanitizeObject<T extends Record<string, any>>(\n obj: T,\n fields: (keyof T)[]\n): T {\n const sanitized = { ...obj }\n\n for (const field of fields) {\n if (typeof obj[field] === 'string') {\n sanitized[field] = sanitizeInput(obj[field]) as T[keyof T]\n }\n }\n\n return sanitized\n}\n","// Template renderer compatible with Cloudflare Workers\n// No filesystem access available\n\ninterface TemplateData {\n [key: string]: any\n}\n\nexport class TemplateRenderer {\n private templateCache = new Map<string, string>()\n\n constructor() {\n // Cloudflare Workers compatible - no filesystem access\n }\n\n /**\n * Simple Handlebars-like template engine\n */\n private renderTemplate(template: string, data: TemplateData): string {\n let rendered = template\n\n // Handle each loops - process outermost loops first for proper nesting\n rendered = rendered.replace(/\\{\\{#each\\s+([^}]+)\\}\\}([\\s\\S]*?)\\{\\{\\/each\\}\\}/g, (_match, arrayName, content) => {\n const array = this.getNestedValue(data, arrayName.trim())\n if (!Array.isArray(array)) return ''\n \n return array.map((item, index) => {\n // Create context with array item and special variables\n const itemContext = {\n ...data,\n // Handle primitive items (for {{.}} syntax)\n '.': item,\n // Spread item properties if it's an object\n ...(typeof item === 'object' && item !== null ? item : {}),\n '@index': index,\n '@first': index === 0,\n '@last': index === array.length - 1\n }\n return this.renderTemplate(content, itemContext)\n }).join('')\n })\n\n // Second pass: Handle conditionals\n let ifCount = 0\n while (rendered.includes('{{#if ') && ifCount < 100) {\n const previousRendered = rendered\n rendered = rendered.replace(/\\{\\{#if\\s+([^}]+)\\}\\}([\\s\\S]*?)\\{\\{\\/if\\}\\}/g, (_match, condition, content) => {\n const value = this.getNestedValue(data, condition.trim())\n // Handle boolean values properly - @first/@last are explicitly boolean\n const isTruthy = value === true || (value && value !== 0 && value !== '' && value !== null && value !== undefined)\n return isTruthy ? this.renderTemplate(content, data) : ''\n })\n if (previousRendered === rendered) break\n ifCount++\n }\n\n // Third pass: Handle triple braces for raw HTML {{{variable}}}\n rendered = rendered.replace(/\\{\\{\\{([^}]+)\\}\\}\\}/g, (_match, variable) => {\n const value = this.getNestedValue(data, variable.trim())\n return value !== undefined && value !== null ? String(value) : ''\n })\n\n // Fourth pass: Handle helper functions like {{titleCase field}}\n rendered = rendered.replace(/\\{\\{([^}#\\/]+)\\s+([^}]+)\\}\\}/g, (match, helper, variable) => {\n const helperName = helper.trim()\n const varName = variable.trim()\n \n if (helperName === 'titleCase') {\n const value = this.getNestedValue(data, varName)\n if (value !== undefined && value !== null) {\n return this.titleCase(String(value))\n }\n }\n \n return match // Return original if helper not found\n })\n\n // Final pass: Handle simple variables {{variable}}\n rendered = rendered.replace(/\\{\\{([^}#\\/]+)\\}\\}/g, (match, variable) => {\n const trimmed = variable.trim()\n \n // Skip if it's a helper function (has spaces)\n if (trimmed.includes(' ')) {\n return match\n }\n \n const value = this.getNestedValue(data, trimmed)\n if (value === null) return ''\n if (value === undefined) return ''\n return String(value)\n })\n\n return rendered\n }\n\n /**\n * Get nested value from object using dot notation\n */\n private getNestedValue(obj: any, path: string): any {\n if (!obj || path === '') return undefined\n \n return path.split('.').reduce((current, key) => {\n if (current === null || current === undefined) return undefined\n return current[key]\n }, obj)\n }\n\n /**\n * Title case helper function\n */\n private titleCase(str: string): string {\n return str\n .replace(/_/g, ' ')\n .replace(/\\b\\w/g, l => l.toUpperCase())\n }\n\n /**\n * Render a template string with data\n */\n render(template: string, data: TemplateData = {}): string {\n return this.renderTemplate(template, data)\n }\n\n /**\n * Clear template cache (useful for development)\n */\n clearCache(): void {\n this.templateCache.clear()\n }\n}\n\n// Export singleton instance\nexport const templateRenderer = new TemplateRenderer()\n\n// Utility function to render template strings directly\nexport function renderTemplate(template: string, data: TemplateData = {}): string {\n return templateRenderer.render(template, data)\n}","/**\n * Query Filter Builder for SonicJS AI\n * Supports comprehensive filtering with AND/OR logic\n * Compatible with D1 Database (SQLite)\n */\n\nexport type FilterOperator =\n | 'equals'\n | 'not_equals'\n | 'greater_than'\n | 'greater_than_equal'\n | 'less_than'\n | 'less_than_equal'\n | 'like'\n | 'contains'\n | 'in'\n | 'not_in'\n | 'all'\n | 'exists'\n | 'near'\n | 'within'\n | 'intersects'\n\nexport interface FilterCondition {\n field: string\n operator: FilterOperator\n value: any\n}\n\nexport interface FilterGroup {\n and?: FilterCondition[]\n or?: FilterCondition[]\n}\n\nexport interface QueryFilter {\n where?: FilterGroup\n limit?: number\n offset?: number\n sort?: {\n field: string\n order: 'asc' | 'desc'\n }[]\n}\n\nexport interface QueryResult {\n sql: string\n params: any[]\n errors: string[]\n}\n\n/**\n * Query Filter Builder\n * Converts filter objects into SQL WHERE clauses with parameterized queries\n */\nexport class QueryFilterBuilder {\n private params: any[] = []\n private errors: string[] = []\n\n /**\n * Build a complete SQL query from filter object\n */\n build(baseTable: string, filter: QueryFilter): QueryResult {\n this.params = []\n this.errors = []\n\n let sql = `SELECT * FROM ${baseTable}`\n\n // Build WHERE clause\n if (filter.where) {\n const whereClause = this.buildWhereClause(filter.where)\n if (whereClause) {\n sql += ` WHERE ${whereClause}`\n }\n }\n\n // Build ORDER BY clause\n if (filter.sort && filter.sort.length > 0) {\n const orderClauses = filter.sort\n .map(s => `${this.sanitizeFieldName(s.field)} ${s.order.toUpperCase()}`)\n .join(', ')\n sql += ` ORDER BY ${orderClauses}`\n }\n\n // Build LIMIT clause\n if (filter.limit) {\n sql += ` LIMIT ?`\n this.params.push(filter.limit)\n }\n\n // Build OFFSET clause\n if (filter.offset) {\n sql += ` OFFSET ?`\n this.params.push(filter.offset)\n }\n\n return {\n sql,\n params: this.params,\n errors: this.errors\n }\n }\n\n /**\n * Build WHERE clause from filter group\n */\n private buildWhereClause(group: FilterGroup): string {\n const clauses: string[] = []\n\n // Handle AND conditions\n if (group.and && group.and.length > 0) {\n const andClauses = group.and\n .map(condition => this.buildCondition(condition))\n .filter(clause => clause !== null)\n\n if (andClauses.length > 0) {\n clauses.push(`(${andClauses.join(' AND ')})`)\n }\n }\n\n // Handle OR conditions\n if (group.or && group.or.length > 0) {\n const orClauses = group.or\n .map(condition => this.buildCondition(condition))\n .filter(clause => clause !== null)\n\n if (orClauses.length > 0) {\n clauses.push(`(${orClauses.join(' OR ')})`)\n }\n }\n\n return clauses.join(' AND ')\n }\n\n /**\n * Build a single condition\n */\n private buildCondition(condition: FilterCondition): string | null {\n const field = this.sanitizeFieldName(condition.field)\n\n switch (condition.operator) {\n case 'equals':\n return this.buildEquals(field, condition.value)\n\n case 'not_equals':\n return this.buildNotEquals(field, condition.value)\n\n case 'greater_than':\n return this.buildComparison(field, '>', condition.value)\n\n case 'greater_than_equal':\n return this.buildComparison(field, '>=', condition.value)\n\n case 'less_than':\n return this.buildComparison(field, '<', condition.value)\n\n case 'less_than_equal':\n return this.buildComparison(field, '<=', condition.value)\n\n case 'like':\n return this.buildLike(field, condition.value)\n\n case 'contains':\n return this.buildContains(field, condition.value)\n\n case 'in':\n return this.buildIn(field, condition.value)\n\n case 'not_in':\n return this.buildNotIn(field, condition.value)\n\n case 'all':\n return this.buildAll(field, condition.value)\n\n case 'exists':\n return this.buildExists(field, condition.value)\n\n case 'near':\n this.errors.push(`'near' operator not supported in SQLite. Use spatial extension or application-level filtering.`)\n return null\n\n case 'within':\n this.errors.push(`'within' operator not supported in SQLite. Use spatial extension or application-level filtering.`)\n return null\n\n case 'intersects':\n this.errors.push(`'intersects' operator not supported in SQLite. Use spatial extension or application-level filtering.`)\n return null\n\n default:\n this.errors.push(`Unknown operator: ${condition.operator}`)\n return null\n }\n }\n\n /**\n * Build equals condition\n */\n private buildEquals(field: string, value: any): string {\n if (value === null) {\n return `${field} IS NULL`\n }\n this.params.push(value)\n return `${field} = ?`\n }\n\n /**\n * Build not equals condition\n */\n private buildNotEquals(field: string, value: any): string {\n if (value === null) {\n return `${field} IS NOT NULL`\n }\n this.params.push(value)\n return `${field} != ?`\n }\n\n /**\n * Build comparison condition (>, >=, <, <=)\n */\n private buildComparison(field: string, operator: string, value: any): string {\n this.params.push(value)\n return `${field} ${operator} ?`\n }\n\n /**\n * Build LIKE condition (case-insensitive, all words must be present)\n */\n private buildLike(field: string, value: string): string {\n const words = value.split(/\\s+/).filter(w => w.length > 0)\n\n if (words.length === 0) {\n return `1=1` // No-op condition\n }\n\n const conditions = words.map(word => {\n this.params.push(`%${word}%`)\n return `${field} LIKE ?`\n })\n\n return `(${conditions.join(' AND ')})`\n }\n\n /**\n * Build CONTAINS condition (case-insensitive substring)\n */\n private buildContains(field: string, value: string): string {\n this.params.push(`%${value}%`)\n return `${field} LIKE ?`\n }\n\n /**\n * Build IN condition\n */\n private buildIn(field: string, value: any): string {\n let values: any[]\n\n if (typeof value === 'string') {\n // Parse comma-delimited string\n values = value.split(',').map(v => v.trim()).filter(v => v.length > 0)\n } else if (Array.isArray(value)) {\n values = value\n } else {\n values = [value]\n }\n\n if (values.length === 0) {\n return `1=0` // No values means no matches\n }\n\n const placeholders = values.map(v => {\n this.params.push(v)\n return '?'\n }).join(', ')\n\n return `${field} IN (${placeholders})`\n }\n\n /**\n * Build NOT IN condition\n */\n private buildNotIn(field: string, value: any): string {\n let values: any[]\n\n if (typeof value === 'string') {\n // Parse comma-delimited string\n values = value.split(',').map(v => v.trim()).filter(v => v.length > 0)\n } else if (Array.isArray(value)) {\n values = value\n } else {\n values = [value]\n }\n\n if (values.length === 0) {\n return `1=1` // No values means all match\n }\n\n const placeholders = values.map(v => {\n this.params.push(v)\n return '?'\n }).join(', ')\n\n return `${field} NOT IN (${placeholders})`\n }\n\n /**\n * Build ALL condition (value must contain all items in list)\n * For SQLite, we'll check if a JSON array contains all values\n */\n private buildAll(field: string, value: any): string {\n let values: any[]\n\n if (typeof value === 'string') {\n values = value.split(',').map(v => v.trim()).filter(v => v.length > 0)\n } else if (Array.isArray(value)) {\n values = value\n } else {\n values = [value]\n }\n\n if (values.length === 0) {\n return `1=1`\n }\n\n // For SQLite, check if field contains all values using JSON functions\n // This assumes the field is a JSON array or comma-separated string\n const conditions = values.map(val => {\n this.params.push(`%${val}%`)\n return `${field} LIKE ?`\n })\n\n return `(${conditions.join(' AND ')})`\n }\n\n /**\n * Build EXISTS condition\n */\n private buildExists(field: string, value: boolean): string {\n if (value) {\n return `${field} IS NOT NULL AND ${field} != ''`\n } else {\n return `(${field} IS NULL OR ${field} = '')`\n }\n }\n\n /**\n * Sanitize field names to prevent SQL injection\n */\n private sanitizeFieldName(field: string): string {\n // Allow alphanumeric, underscores, dots (for JSON fields)\n const sanitized = field.replace(/[^a-zA-Z0-9_$.]/g, '')\n\n // Handle JSON field access (e.g., data.title -> json_extract(data, '$.title'))\n if (sanitized.includes('.')) {\n const [table, ...path] = sanitized.split('.')\n return `json_extract(${table}, '$.${path.join('.')}')`\n }\n\n return sanitized\n }\n\n /**\n * Parse filter from query string\n */\n static parseFromQuery(query: Record<string, any>): QueryFilter {\n const filter: QueryFilter = {}\n\n // Parse where clause from 'where' parameter (JSON string)\n if (query.where) {\n try {\n filter.where = typeof query.where === 'string'\n ? JSON.parse(query.where)\n : query.where\n } catch (e) {\n console.error('Failed to parse where clause:', e)\n }\n }\n\n // Initialize where clause if not present\n if (!filter.where) {\n filter.where = { and: [] }\n }\n if (!filter.where.and) {\n filter.where.and = []\n }\n\n // Parse simple field filters (status, collection_id, etc.)\n // These are convenience parameters that get converted to WHERE conditions\n const simpleFieldMappings: Record<string, string> = {\n 'status': 'status',\n 'collection_id': 'collection_id'\n }\n\n for (const [queryParam, dbField] of Object.entries(simpleFieldMappings)) {\n if (query[queryParam]) {\n filter.where.and.push({\n field: dbField,\n operator: 'equals',\n value: query[queryParam]\n })\n }\n }\n\n // Parse limit\n if (query.limit) {\n filter.limit = Math.min(parseInt(query.limit), 1000) // Max 1000\n }\n\n // Parse offset\n if (query.offset) {\n filter.offset = parseInt(query.offset)\n }\n\n // Parse sort\n if (query.sort) {\n try {\n filter.sort = typeof query.sort === 'string'\n ? JSON.parse(query.sort)\n : query.sort\n } catch (e) {\n console.error('Failed to parse sort clause:', e)\n }\n }\n\n return filter\n }\n}\n\n/**\n * Helper function to build query from filter\n */\nexport function buildQuery(table: string, filter: QueryFilter): QueryResult {\n const builder = new QueryFilterBuilder()\n return builder.build(table, filter)\n}\n","{\n \"name\": \"@sonicjs-cms/core\",\n \"version\": \"2.3.12\",\n \"description\": \"Core framework for SonicJS headless CMS - Edge-first, TypeScript-native CMS built for Cloudflare Workers\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"sonicjs-db-reset\": \"./bin/db-reset.js\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./services\": {\n \"types\": \"./dist/services.d.ts\",\n \"import\": \"./dist/services.js\",\n \"require\": \"./dist/services.cjs\"\n },\n \"./middleware\": {\n \"types\": \"./dist/middleware.d.ts\",\n \"import\": \"./dist/middleware.js\",\n \"require\": \"./dist/middleware.cjs\"\n },\n \"./routes\": {\n \"types\": \"./dist/routes.d.ts\",\n \"import\": \"./dist/routes.js\",\n \"require\": \"./dist/routes.cjs\"\n },\n \"./templates\": {\n \"types\": \"./dist/templates.d.ts\",\n \"import\": \"./dist/templates.js\",\n \"require\": \"./dist/templates.cjs\"\n },\n \"./plugins\": {\n \"types\": \"./dist/plugins.d.ts\",\n \"import\": \"./dist/plugins.js\",\n \"require\": \"./dist/plugins.cjs\"\n },\n \"./utils\": {\n \"types\": \"./dist/utils.d.ts\",\n \"import\": \"./dist/utils.js\",\n \"require\": \"./dist/utils.cjs\"\n },\n \"./types\": {\n \"types\": \"./dist/types.d.ts\",\n \"import\": \"./dist/types.js\",\n \"require\": \"./dist/types.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"bin\",\n \"dist\",\n \"migrations\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"scripts\": {\n \"generate:migrations\": \"npx tsx scripts/generate-migrations.ts\",\n \"prebuild\": \"npm run generate:migrations\",\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"type-check\": \"tsc --noEmit\",\n \"test\": \"vitest --run\",\n \"test:watch\": \"vitest\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"keywords\": [\n \"cms\",\n \"headless-cms\",\n \"cloudflare\",\n \"workers\",\n \"edge\",\n \"typescript\",\n \"hono\",\n \"content-management\",\n \"api\",\n \"sonicjs\"\n ],\n \"author\": \"SonicJS Team\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/sonicjs/sonicjs.git\",\n \"directory\": \"packages/core\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/sonicjs/sonicjs/issues\"\n },\n \"homepage\": \"https://sonicjs.com\",\n \"peerDependencies\": {\n \"@cloudflare/workers-types\": \"^4.0.0\",\n \"hono\": \"^4.0.0\",\n \"drizzle-orm\": \"^0.44.0\",\n \"zod\": \"^3.0.0 || ^4.0.0\"\n },\n \"dependencies\": {\n \"drizzle-zod\": \"^0.8.3\",\n \"marked\": \"^16.4.1\",\n \"highlight.js\": \"^11.11.1\",\n \"semver\": \"^7.7.3\"\n },\n \"devDependencies\": {\n \"@cloudflare/workers-types\": \"^4.20251014.0\",\n \"@types/node\": \"^24.9.2\",\n \"drizzle-orm\": \"^0.44.7\",\n \"hono\": \"^4.10.4\",\n \"tsup\": \"^8.5.0\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.5\",\n \"zod\": \"^4.1.12\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","/**\n * Version utility\n *\n * Provides the current version of @sonicjs-cms/core package\n */\n\nimport pkg from '../../package.json'\n\nexport const SONICJS_VERSION = pkg.version\n\n/**\n * Get the current SonicJS core version\n */\nexport function getCoreVersion(): string {\n return SONICJS_VERSION\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkP3XDZL6Q_cjs = require('./chunk-P3XDZL6Q.cjs');
|
|
4
4
|
var chunkIGJUBJBW_cjs = require('./chunk-IGJUBJBW.cjs');
|
|
5
5
|
var sqliteCore = require('drizzle-orm/sqlite-core');
|
|
6
6
|
var v4 = require('zod/v4');
|
|
@@ -1140,13 +1140,12 @@ var SettingsService = class {
|
|
|
1140
1140
|
var TelemetryService = class {
|
|
1141
1141
|
config;
|
|
1142
1142
|
identity = null;
|
|
1143
|
-
client = null;
|
|
1144
1143
|
enabled = true;
|
|
1145
1144
|
eventQueue = [];
|
|
1146
1145
|
isInitialized = false;
|
|
1147
1146
|
constructor(config) {
|
|
1148
1147
|
this.config = {
|
|
1149
|
-
...
|
|
1148
|
+
...chunkP3XDZL6Q_cjs.getTelemetryConfig(),
|
|
1150
1149
|
...config
|
|
1151
1150
|
};
|
|
1152
1151
|
this.enabled = this.config.enabled;
|
|
@@ -1163,20 +1162,8 @@ var TelemetryService = class {
|
|
|
1163
1162
|
}
|
|
1164
1163
|
try {
|
|
1165
1164
|
this.identity = identity;
|
|
1166
|
-
if (this.config.
|
|
1167
|
-
|
|
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");
|
|
1165
|
+
if (this.config.debug) {
|
|
1166
|
+
console.log("[Telemetry] Initialized with installation ID:", identity.installationId);
|
|
1180
1167
|
}
|
|
1181
1168
|
this.isInitialized = true;
|
|
1182
1169
|
await this.flushQueue();
|
|
@@ -1206,17 +1193,26 @@ var TelemetryService = class {
|
|
|
1206
1193
|
}
|
|
1207
1194
|
return;
|
|
1208
1195
|
}
|
|
1209
|
-
if (this.
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1196
|
+
if (this.identity && this.config.host) {
|
|
1197
|
+
const payload = {
|
|
1198
|
+
data: {
|
|
1199
|
+
installation_id: this.identity.installationId,
|
|
1200
|
+
event_type: event,
|
|
1201
|
+
properties: enrichedProps,
|
|
1202
|
+
timestamp: enrichedProps.timestamp
|
|
1203
|
+
}
|
|
1204
|
+
};
|
|
1205
|
+
fetch(`${this.config.host}/v1/events`, {
|
|
1206
|
+
method: "POST",
|
|
1207
|
+
headers: { "Content-Type": "application/json" },
|
|
1208
|
+
body: JSON.stringify(payload)
|
|
1209
|
+
}).catch(() => {
|
|
1214
1210
|
});
|
|
1215
1211
|
if (this.config.debug) {
|
|
1216
1212
|
console.log("[Telemetry] Tracked event:", event, enrichedProps);
|
|
1217
1213
|
}
|
|
1218
1214
|
} else if (this.config.debug) {
|
|
1219
|
-
console.log("[Telemetry] Event (no
|
|
1215
|
+
console.log("[Telemetry] Event (no endpoint):", event, enrichedProps);
|
|
1220
1216
|
}
|
|
1221
1217
|
} catch (error) {
|
|
1222
1218
|
if (this.config.debug) {
|
|
@@ -1242,7 +1238,7 @@ var TelemetryService = class {
|
|
|
1242
1238
|
async trackInstallationFailed(error, properties) {
|
|
1243
1239
|
await this.track("installation_failed", {
|
|
1244
1240
|
...properties,
|
|
1245
|
-
errorType:
|
|
1241
|
+
errorType: chunkP3XDZL6Q_cjs.sanitizeErrorMessage(error)
|
|
1246
1242
|
});
|
|
1247
1243
|
}
|
|
1248
1244
|
/**
|
|
@@ -1257,7 +1253,7 @@ var TelemetryService = class {
|
|
|
1257
1253
|
async trackPageView(route, properties) {
|
|
1258
1254
|
await this.track("page_viewed", {
|
|
1259
1255
|
...properties,
|
|
1260
|
-
route:
|
|
1256
|
+
route: chunkP3XDZL6Q_cjs.sanitizeRoute(route)
|
|
1261
1257
|
});
|
|
1262
1258
|
}
|
|
1263
1259
|
/**
|
|
@@ -1266,7 +1262,7 @@ var TelemetryService = class {
|
|
|
1266
1262
|
async trackError(error, properties) {
|
|
1267
1263
|
await this.track("error_occurred", {
|
|
1268
1264
|
...properties,
|
|
1269
|
-
errorType:
|
|
1265
|
+
errorType: chunkP3XDZL6Q_cjs.sanitizeErrorMessage(error)
|
|
1270
1266
|
});
|
|
1271
1267
|
}
|
|
1272
1268
|
/**
|
|
@@ -1301,11 +1297,11 @@ var TelemetryService = class {
|
|
|
1301
1297
|
for (const [key, value] of Object.entries(properties)) {
|
|
1302
1298
|
if (value === void 0) continue;
|
|
1303
1299
|
if (key === "route" && typeof value === "string") {
|
|
1304
|
-
sanitized[key] =
|
|
1300
|
+
sanitized[key] = chunkP3XDZL6Q_cjs.sanitizeRoute(value);
|
|
1305
1301
|
continue;
|
|
1306
1302
|
}
|
|
1307
1303
|
if (key.toLowerCase().includes("error") && typeof value === "string") {
|
|
1308
|
-
sanitized[key] =
|
|
1304
|
+
sanitized[key] = chunkP3XDZL6Q_cjs.sanitizeErrorMessage(value);
|
|
1309
1305
|
continue;
|
|
1310
1306
|
}
|
|
1311
1307
|
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
@@ -1328,18 +1324,9 @@ var TelemetryService = class {
|
|
|
1328
1324
|
}
|
|
1329
1325
|
}
|
|
1330
1326
|
/**
|
|
1331
|
-
* Shutdown the telemetry service
|
|
1327
|
+
* Shutdown the telemetry service (no-op for fetch-based telemetry)
|
|
1332
1328
|
*/
|
|
1333
1329
|
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
1330
|
}
|
|
1344
1331
|
/**
|
|
1345
1332
|
* Enable telemetry
|
|
@@ -1373,10 +1360,10 @@ async function initTelemetry(identity, config) {
|
|
|
1373
1360
|
return service;
|
|
1374
1361
|
}
|
|
1375
1362
|
function createInstallationIdentity(projectName) {
|
|
1376
|
-
const installationId =
|
|
1363
|
+
const installationId = chunkP3XDZL6Q_cjs.generateInstallationId();
|
|
1377
1364
|
const identity = { installationId };
|
|
1378
1365
|
if (projectName) {
|
|
1379
|
-
identity.projectId =
|
|
1366
|
+
identity.projectId = chunkP3XDZL6Q_cjs.generateProjectId(projectName);
|
|
1380
1367
|
}
|
|
1381
1368
|
return identity;
|
|
1382
1369
|
}
|
|
@@ -1431,5 +1418,5 @@ exports.selectWorkflowHistorySchema = selectWorkflowHistorySchema;
|
|
|
1431
1418
|
exports.systemLogs = systemLogs;
|
|
1432
1419
|
exports.users = users;
|
|
1433
1420
|
exports.workflowHistory = workflowHistory;
|
|
1434
|
-
//# sourceMappingURL=chunk-
|
|
1435
|
-
//# sourceMappingURL=chunk-
|
|
1421
|
+
//# sourceMappingURL=chunk-7FOAMNTI.cjs.map
|
|
1422
|
+
//# sourceMappingURL=chunk-7FOAMNTI.cjs.map
|