@sonicjs-cms/core 2.3.9 → 2.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/{chunk-AUU4H5MP.js → chunk-2NTBZ2Y7.js} +4 -4
  2. package/dist/{chunk-AUU4H5MP.js.map → chunk-2NTBZ2Y7.js.map} +1 -1
  3. package/dist/{chunk-Q52ZQFMB.js → chunk-3YNNVSMC.js} +21 -34
  4. package/dist/chunk-3YNNVSMC.js.map +1 -0
  5. package/dist/{chunk-YLFQXTTX.cjs → chunk-5NCBFP37.cjs} +7 -7
  6. package/dist/{chunk-YLFQXTTX.cjs.map → chunk-5NCBFP37.cjs.map} +1 -1
  7. package/dist/{chunk-ES3BRZQJ.cjs → chunk-7FOAMNTI.cjs} +29 -42
  8. package/dist/chunk-7FOAMNTI.cjs.map +1 -0
  9. package/dist/{chunk-T7HDJE2H.cjs → chunk-ARLXQU2S.cjs} +292 -208
  10. package/dist/chunk-ARLXQU2S.cjs.map +1 -0
  11. package/dist/{chunk-5RKQB2JG.js → chunk-DN45O5XV.js} +8 -6
  12. package/dist/chunk-DN45O5XV.js.map +1 -0
  13. package/dist/{chunk-QNWYQZ55.js → chunk-F56JKQTA.js} +3 -3
  14. package/dist/{chunk-QNWYQZ55.js.map → chunk-F56JKQTA.js.map} +1 -1
  15. package/dist/{chunk-HNHKS2XF.js → chunk-FHCN7KR2.js} +11 -7
  16. package/dist/chunk-FHCN7KR2.js.map +1 -0
  17. package/dist/{chunk-NAYD76QF.cjs → chunk-ILZ3DP4I.cjs} +15 -6
  18. package/dist/chunk-ILZ3DP4I.cjs.map +1 -0
  19. package/dist/{chunk-YU6QFFI4.cjs → chunk-MF7DWI5P.cjs} +8 -6
  20. package/dist/chunk-MF7DWI5P.cjs.map +1 -0
  21. package/dist/{chunk-7KCDFDRI.cjs → chunk-P3XDZL6Q.cjs} +3 -4
  22. package/dist/chunk-P3XDZL6Q.cjs.map +1 -0
  23. package/dist/{chunk-I3M6I2FY.js → chunk-RP66TPEJ.js} +110 -26
  24. package/dist/chunk-RP66TPEJ.js.map +1 -0
  25. package/dist/{chunk-7CXL5K7N.js → chunk-SGAG6FD3.js} +15 -6
  26. package/dist/chunk-SGAG6FD3.js.map +1 -0
  27. package/dist/{chunk-624OTQ55.js → chunk-VMEBHBYY.js} +34 -2
  28. package/dist/chunk-VMEBHBYY.js.map +1 -0
  29. package/dist/{chunk-N3EHA3AX.cjs → chunk-W2IAEG4W.cjs} +11 -7
  30. package/dist/chunk-W2IAEG4W.cjs.map +1 -0
  31. package/dist/{chunk-O446Q45G.cjs → chunk-W4CE7XME.cjs} +34 -2
  32. package/dist/chunk-W4CE7XME.cjs.map +1 -0
  33. package/dist/{chunk-RRKXFGIO.js → chunk-X7ZAEI5S.js} +3 -4
  34. package/dist/chunk-X7ZAEI5S.js.map +1 -0
  35. package/dist/{chunk-ZMSYKV62.cjs → chunk-XR6XACXJ.cjs} +5 -5
  36. package/dist/{chunk-ZMSYKV62.cjs.map → chunk-XR6XACXJ.cjs.map} +1 -1
  37. package/dist/index.cjs +145 -145
  38. package/dist/index.js +14 -14
  39. package/dist/middleware.cjs +24 -24
  40. package/dist/middleware.js +3 -3
  41. package/dist/migrations-43GTELB5.js +4 -0
  42. package/dist/{migrations-ALSBVBV5.js.map → migrations-43GTELB5.js.map} +1 -1
  43. package/dist/migrations-ZAYXZXON.cjs +13 -0
  44. package/dist/{migrations-RMI7TLPG.cjs.map → migrations-ZAYXZXON.cjs.map} +1 -1
  45. package/dist/routes.cjs +28 -28
  46. package/dist/routes.js +8 -8
  47. package/dist/services.cjs +29 -29
  48. package/dist/services.d.cts +3 -4
  49. package/dist/services.d.ts +3 -4
  50. package/dist/services.js +4 -4
  51. package/dist/{telemetry-BFBIjBxK.d.cts → telemetry-UiD1i9GS.d.cts} +0 -1
  52. package/dist/{telemetry-BFBIjBxK.d.ts → telemetry-UiD1i9GS.d.ts} +0 -1
  53. package/dist/templates.cjs +17 -17
  54. package/dist/templates.js +2 -2
  55. package/dist/types.d.cts +1 -1
  56. package/dist/types.d.ts +1 -1
  57. package/dist/utils.cjs +20 -20
  58. package/dist/utils.d.cts +1 -1
  59. package/dist/utils.d.ts +1 -1
  60. package/dist/utils.js +2 -2
  61. package/migrations/025_add_easymde_plugin.sql +25 -0
  62. package/package.json +9 -5
  63. package/dist/chunk-5RKQB2JG.js.map +0 -1
  64. package/dist/chunk-624OTQ55.js.map +0 -1
  65. package/dist/chunk-7CXL5K7N.js.map +0 -1
  66. package/dist/chunk-7KCDFDRI.cjs.map +0 -1
  67. package/dist/chunk-ES3BRZQJ.cjs.map +0 -1
  68. package/dist/chunk-HNHKS2XF.js.map +0 -1
  69. package/dist/chunk-I3M6I2FY.js.map +0 -1
  70. package/dist/chunk-N3EHA3AX.cjs.map +0 -1
  71. package/dist/chunk-NAYD76QF.cjs.map +0 -1
  72. package/dist/chunk-O446Q45G.cjs.map +0 -1
  73. package/dist/chunk-Q52ZQFMB.js.map +0 -1
  74. package/dist/chunk-RRKXFGIO.js.map +0 -1
  75. package/dist/chunk-T7HDJE2H.cjs.map +0 -1
  76. package/dist/chunk-YU6QFFI4.cjs.map +0 -1
  77. package/dist/migrations-ALSBVBV5.js +0 -4
  78. package/dist/migrations-RMI7TLPG.cjs +0 -13
@@ -1,5 +1,5 @@
1
- import { syncCollections, PluginBootstrapService } from './chunk-7CXL5K7N.js';
2
- import { MigrationService } from './chunk-624OTQ55.js';
1
+ import { syncCollections, PluginBootstrapService } from './chunk-SGAG6FD3.js';
2
+ import { MigrationService } from './chunk-VMEBHBYY.js';
3
3
  import { metricsTracker } from './chunk-FICTAGD4.js';
4
4
  import { sign, verify } from 'hono/jwt';
5
5
  import { setCookie, getCookie } from 'hono/cookie';
@@ -217,5 +217,5 @@ var getActivePlugins = () => [];
217
217
  var isPluginActive = () => false;
218
218
 
219
219
  export { AuthManager, PermissionManager, bootstrapMiddleware, cacheHeaders, compressionMiddleware, detailedLoggingMiddleware, getActivePlugins, isPluginActive, logActivity, loggingMiddleware, metricsMiddleware, optionalAuth, performanceLoggingMiddleware, requireActivePlugin, requireActivePlugins, requireAnyPermission, requireAuth, requirePermission, requireRole, securityHeaders, securityLoggingMiddleware };
220
- //# sourceMappingURL=chunk-AUU4H5MP.js.map
221
- //# sourceMappingURL=chunk-AUU4H5MP.js.map
220
+ //# sourceMappingURL=chunk-2NTBZ2Y7.js.map
221
+ //# sourceMappingURL=chunk-2NTBZ2Y7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/middleware/bootstrap.ts","../src/middleware/auth.ts","../src/middleware/metrics.ts","../src/middleware/index.ts"],"names":[],"mappings":"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","file":"chunk-AUU4H5MP.js","sourcesContent":["import { Context, Next } from \"hono\";\nimport { syncCollections } from \"../services/collection-sync\";\nimport { MigrationService } from \"../services/migrations\";\nimport { PluginBootstrapService } from \"../services/plugin-bootstrap\";\nimport type { SonicJSConfig } from \"../app\";\n\ntype Bindings = {\n DB: D1Database;\n KV: KVNamespace;\n};\n\n// Track if bootstrap has been run in this worker instance\nlet bootstrapComplete = false;\n\n/**\n * Bootstrap middleware that ensures system initialization\n * Runs once per worker instance\n */\nexport function bootstrapMiddleware(config: SonicJSConfig = {}) {\n return async (c: Context<{ Bindings: Bindings }>, next: Next) => {\n // Skip if already bootstrapped in this worker instance\n if (bootstrapComplete) {\n return next();\n }\n\n // Skip bootstrap for static assets and health checks\n const path = c.req.path;\n if (\n path.startsWith(\"/images/\") ||\n path.startsWith(\"/assets/\") ||\n path === \"/health\" ||\n path.endsWith(\".js\") ||\n path.endsWith(\".css\") ||\n path.endsWith(\".png\") ||\n path.endsWith(\".jpg\") ||\n path.endsWith(\".ico\")\n ) {\n return next();\n }\n\n try {\n console.log(\"[Bootstrap] Starting system initialization...\");\n\n // 1. Run database migrations first\n console.log(\"[Bootstrap] Running database migrations...\");\n const migrationService = new MigrationService(c.env.DB);\n await migrationService.runPendingMigrations();\n\n // 2. Sync collection configurations\n console.log(\"[Bootstrap] Syncing collection configurations...\");\n try {\n await syncCollections(c.env.DB);\n } catch (error) {\n console.error(\"[Bootstrap] Error syncing collections:\", error);\n // Continue bootstrap even if collection sync fails\n }\n\n // 3. Bootstrap core plugins (unless disableAll is set)\n if (!config.plugins?.disableAll) {\n console.log(\"[Bootstrap] Bootstrapping core plugins...\");\n const bootstrapService = new PluginBootstrapService(c.env.DB);\n\n // Check if bootstrap is needed\n const needsBootstrap = await bootstrapService.isBootstrapNeeded();\n if (needsBootstrap) {\n await bootstrapService.bootstrapCorePlugins();\n }\n } else {\n console.log(\"[Bootstrap] Plugin bootstrap skipped (disableAll is true)\");\n }\n\n // Mark bootstrap as complete for this worker instance\n bootstrapComplete = true;\n console.log(\"[Bootstrap] System initialization completed\");\n } catch (error) {\n console.error(\"[Bootstrap] Error during system initialization:\", error);\n // Don't prevent the app from starting, but log the error\n }\n\n return next();\n };\n}\n\n/**\n * Reset bootstrap flag (useful for testing)\n */\nexport function resetBootstrap() {\n bootstrapComplete = false;\n}\n","import { sign, verify } from 'hono/jwt'\nimport { Context, Next } from 'hono'\nimport { getCookie, setCookie } from 'hono/cookie'\n\ntype JWTPayload = {\n userId: string\n email: string\n role: string\n exp: number\n iat: number\n}\n\n// JWT secret - in production this should come from environment variables\nconst JWT_SECRET = 'your-super-secret-jwt-key-change-in-production'\n\nexport class AuthManager {\n static async generateToken(userId: string, email: string, role: string): Promise<string> {\n const payload: JWTPayload = {\n userId,\n email,\n role,\n exp: Math.floor(Date.now() / 1000) + (60 * 60 * 24), // 24 hours\n iat: Math.floor(Date.now() / 1000)\n }\n \n return await sign(payload, JWT_SECRET)\n }\n\n static async verifyToken(token: string): Promise<JWTPayload | null> {\n try {\n const payload = await verify(token, JWT_SECRET) as JWTPayload\n \n // Check if token is expired\n if (payload.exp < Math.floor(Date.now() / 1000)) {\n return null\n }\n \n return payload\n } catch (error) {\n console.error('Token verification failed:', error)\n return null\n }\n }\n\n static async hashPassword(password: string): Promise<string> {\n // In Cloudflare Workers, we'll use Web Crypto API\n const encoder = new TextEncoder()\n const data = encoder.encode(password + 'salt-change-in-production')\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')\n }\n\n static async verifyPassword(password: string, hash: string): Promise<boolean> {\n const passwordHash = await this.hashPassword(password)\n return passwordHash === hash\n }\n\n /**\n * Set authentication cookie - useful for plugins implementing alternative auth methods\n * @param c - Hono context\n * @param token - JWT token to set in cookie\n * @param options - Optional cookie configuration\n */\n static setAuthCookie(c: Context, token: string, options?: {\n maxAge?: number\n secure?: boolean\n httpOnly?: boolean\n sameSite?: 'Strict' | 'Lax' | 'None'\n }): void {\n setCookie(c, 'auth_token', token, {\n httpOnly: options?.httpOnly ?? true,\n secure: options?.secure ?? true,\n sameSite: options?.sameSite ?? 'Strict',\n maxAge: options?.maxAge ?? (60 * 60 * 24) // 24 hours default\n })\n }\n}\n\n// Middleware to require authentication\nexport const requireAuth = () => {\n return async (c: Context, next: Next) => {\n try {\n // Try to get token from Authorization header\n let token = c.req.header('Authorization')?.replace('Bearer ', '')\n\n // If no header token, try cookie\n if (!token) {\n token = getCookie(c, 'auth_token')\n }\n\n if (!token) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Please login to access the admin area')\n }\n return c.json({ error: 'Authentication required' }, 401)\n }\n\n // Try to get cached token verification from KV\n const kv = c.env?.KV\n let payload: JWTPayload | null = null\n\n if (kv) {\n const cacheKey = `auth:${token.substring(0, 20)}` // Use token prefix as key\n const cached = await kv.get(cacheKey, 'json')\n if (cached) {\n payload = cached as JWTPayload\n }\n }\n\n // If not cached, verify token\n if (!payload) {\n payload = await AuthManager.verifyToken(token)\n\n // Cache the verified payload for 5 minutes\n if (payload && kv) {\n const cacheKey = `auth:${token.substring(0, 20)}`\n await kv.put(cacheKey, JSON.stringify(payload), { expirationTtl: 300 })\n }\n }\n\n if (!payload) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Your session has expired, please login again')\n }\n return c.json({ error: 'Invalid or expired token' }, 401)\n }\n\n // Add user info to context\n c.set('user', payload)\n\n return await next()\n } catch (error) {\n console.error('Auth middleware error:', error)\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Authentication failed, please login again')\n }\n return c.json({ error: 'Authentication failed' }, 401)\n }\n }\n}\n\n// Middleware to require specific role\nexport const requireRole = (requiredRole: string | string[]) => {\n return async (c: Context, next: Next) => {\n const user = c.get('user') as JWTPayload\n \n if (!user) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Please login to access the admin area')\n }\n return c.json({ error: 'Authentication required' }, 401)\n }\n \n const roles = Array.isArray(requiredRole) ? requiredRole : [requiredRole]\n \n if (!roles.includes(user.role)) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=You do not have permission to access this area')\n }\n return c.json({ error: 'Insufficient permissions' }, 403)\n }\n \n return await next()\n }\n}\n\n// Optional auth middleware (doesn't block if no token)\nexport const optionalAuth = () => {\n return async (c: Context, next: Next) => {\n try {\n let token = c.req.header('Authorization')?.replace('Bearer ', '')\n \n if (!token) {\n token = getCookie(c, 'auth_token')\n }\n \n if (token) {\n const payload = await AuthManager.verifyToken(token)\n if (payload) {\n c.set('user', payload)\n }\n }\n \n return await next()\n } catch (error) {\n // Don't block on auth errors in optional auth\n console.error('Optional auth error:', error)\n return await next()\n }\n }\n}","import { MiddlewareHandler } from 'hono'\nimport { metricsTracker } from '../utils/metrics'\n\n/**\n * Middleware to track all HTTP requests for real-time analytics\n * Excludes the metrics endpoint itself to avoid inflating the count\n */\nexport const metricsMiddleware = (): MiddlewareHandler => {\n return async (c, next) => {\n const path = new URL(c.req.url).pathname\n\n // Don't track the metrics endpoint itself to avoid self-inflating counts\n if (path !== '/admin/dashboard/api/metrics') {\n metricsTracker.recordRequest()\n }\n\n // Continue with the request\n await next()\n }\n}\n","/**\n * Middleware Module Exports\n *\n * Request processing middleware for SonicJS\n *\n * Note: Most middleware is currently in the monolith and will be migrated later.\n * For now, we only export the bootstrap middleware which is used for system initialization.\n */\n\n// Bootstrap middleware\nexport { bootstrapMiddleware } from './bootstrap'\n\n// Auth middleware\nexport { AuthManager, requireAuth, requireRole, optionalAuth } from './auth'\n\n// Metrics middleware\nexport { metricsMiddleware } from './metrics'\n\n// Re-export types and functions that are referenced but implemented in monolith\n// These are placeholder exports to maintain API compatibility\nexport type Permission = string\nexport type UserPermissions = {\n userId: string\n permissions: Permission[]\n}\n\n// Middleware stubs - these return pass-through middleware that call next()\nexport const loggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const detailedLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const securityLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const performanceLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const cacheHeaders: any = () => async (_c: any, next: any) => await next()\nexport const compressionMiddleware: any = async (_c: any, next: any) => await next()\nexport const securityHeaders: any = () => async (_c: any, next: any) => await next()\n\n// Other stubs\nexport const PermissionManager: any = {}\nexport const requirePermission: any = () => async (_c: any, next: any) => await next()\nexport const requireAnyPermission: any = () => async (_c: any, next: any) => await next()\nexport const logActivity: any = () => {}\nexport const requireActivePlugin: any = () => async (_c: any, next: any) => await next()\nexport const requireActivePlugins: any = () => async (_c: any, next: any) => await next()\nexport const getActivePlugins: any = () => []\nexport const isPluginActive: any = () => false\n"]}
1
+ {"version":3,"sources":["../src/middleware/bootstrap.ts","../src/middleware/auth.ts","../src/middleware/metrics.ts","../src/middleware/index.ts"],"names":[],"mappings":"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","file":"chunk-2NTBZ2Y7.js","sourcesContent":["import { Context, Next } from \"hono\";\nimport { syncCollections } from \"../services/collection-sync\";\nimport { MigrationService } from \"../services/migrations\";\nimport { PluginBootstrapService } from \"../services/plugin-bootstrap\";\nimport type { SonicJSConfig } from \"../app\";\n\ntype Bindings = {\n DB: D1Database;\n KV: KVNamespace;\n};\n\n// Track if bootstrap has been run in this worker instance\nlet bootstrapComplete = false;\n\n/**\n * Bootstrap middleware that ensures system initialization\n * Runs once per worker instance\n */\nexport function bootstrapMiddleware(config: SonicJSConfig = {}) {\n return async (c: Context<{ Bindings: Bindings }>, next: Next) => {\n // Skip if already bootstrapped in this worker instance\n if (bootstrapComplete) {\n return next();\n }\n\n // Skip bootstrap for static assets and health checks\n const path = c.req.path;\n if (\n path.startsWith(\"/images/\") ||\n path.startsWith(\"/assets/\") ||\n path === \"/health\" ||\n path.endsWith(\".js\") ||\n path.endsWith(\".css\") ||\n path.endsWith(\".png\") ||\n path.endsWith(\".jpg\") ||\n path.endsWith(\".ico\")\n ) {\n return next();\n }\n\n try {\n console.log(\"[Bootstrap] Starting system initialization...\");\n\n // 1. Run database migrations first\n console.log(\"[Bootstrap] Running database migrations...\");\n const migrationService = new MigrationService(c.env.DB);\n await migrationService.runPendingMigrations();\n\n // 2. Sync collection configurations\n console.log(\"[Bootstrap] Syncing collection configurations...\");\n try {\n await syncCollections(c.env.DB);\n } catch (error) {\n console.error(\"[Bootstrap] Error syncing collections:\", error);\n // Continue bootstrap even if collection sync fails\n }\n\n // 3. Bootstrap core plugins (unless disableAll is set)\n if (!config.plugins?.disableAll) {\n console.log(\"[Bootstrap] Bootstrapping core plugins...\");\n const bootstrapService = new PluginBootstrapService(c.env.DB);\n\n // Check if bootstrap is needed\n const needsBootstrap = await bootstrapService.isBootstrapNeeded();\n if (needsBootstrap) {\n await bootstrapService.bootstrapCorePlugins();\n }\n } else {\n console.log(\"[Bootstrap] Plugin bootstrap skipped (disableAll is true)\");\n }\n\n // Mark bootstrap as complete for this worker instance\n bootstrapComplete = true;\n console.log(\"[Bootstrap] System initialization completed\");\n } catch (error) {\n console.error(\"[Bootstrap] Error during system initialization:\", error);\n // Don't prevent the app from starting, but log the error\n }\n\n return next();\n };\n}\n\n/**\n * Reset bootstrap flag (useful for testing)\n */\nexport function resetBootstrap() {\n bootstrapComplete = false;\n}\n","import { sign, verify } from 'hono/jwt'\nimport { Context, Next } from 'hono'\nimport { getCookie, setCookie } from 'hono/cookie'\n\ntype JWTPayload = {\n userId: string\n email: string\n role: string\n exp: number\n iat: number\n}\n\n// JWT secret - in production this should come from environment variables\nconst JWT_SECRET = 'your-super-secret-jwt-key-change-in-production'\n\nexport class AuthManager {\n static async generateToken(userId: string, email: string, role: string): Promise<string> {\n const payload: JWTPayload = {\n userId,\n email,\n role,\n exp: Math.floor(Date.now() / 1000) + (60 * 60 * 24), // 24 hours\n iat: Math.floor(Date.now() / 1000)\n }\n \n return await sign(payload, JWT_SECRET)\n }\n\n static async verifyToken(token: string): Promise<JWTPayload | null> {\n try {\n const payload = await verify(token, JWT_SECRET) as JWTPayload\n \n // Check if token is expired\n if (payload.exp < Math.floor(Date.now() / 1000)) {\n return null\n }\n \n return payload\n } catch (error) {\n console.error('Token verification failed:', error)\n return null\n }\n }\n\n static async hashPassword(password: string): Promise<string> {\n // In Cloudflare Workers, we'll use Web Crypto API\n const encoder = new TextEncoder()\n const data = encoder.encode(password + 'salt-change-in-production')\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')\n }\n\n static async verifyPassword(password: string, hash: string): Promise<boolean> {\n const passwordHash = await this.hashPassword(password)\n return passwordHash === hash\n }\n\n /**\n * Set authentication cookie - useful for plugins implementing alternative auth methods\n * @param c - Hono context\n * @param token - JWT token to set in cookie\n * @param options - Optional cookie configuration\n */\n static setAuthCookie(c: Context, token: string, options?: {\n maxAge?: number\n secure?: boolean\n httpOnly?: boolean\n sameSite?: 'Strict' | 'Lax' | 'None'\n }): void {\n setCookie(c, 'auth_token', token, {\n httpOnly: options?.httpOnly ?? true,\n secure: options?.secure ?? true,\n sameSite: options?.sameSite ?? 'Strict',\n maxAge: options?.maxAge ?? (60 * 60 * 24) // 24 hours default\n })\n }\n}\n\n// Middleware to require authentication\nexport const requireAuth = () => {\n return async (c: Context, next: Next) => {\n try {\n // Try to get token from Authorization header\n let token = c.req.header('Authorization')?.replace('Bearer ', '')\n\n // If no header token, try cookie\n if (!token) {\n token = getCookie(c, 'auth_token')\n }\n\n if (!token) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Please login to access the admin area')\n }\n return c.json({ error: 'Authentication required' }, 401)\n }\n\n // Try to get cached token verification from KV\n const kv = c.env?.KV\n let payload: JWTPayload | null = null\n\n if (kv) {\n const cacheKey = `auth:${token.substring(0, 20)}` // Use token prefix as key\n const cached = await kv.get(cacheKey, 'json')\n if (cached) {\n payload = cached as JWTPayload\n }\n }\n\n // If not cached, verify token\n if (!payload) {\n payload = await AuthManager.verifyToken(token)\n\n // Cache the verified payload for 5 minutes\n if (payload && kv) {\n const cacheKey = `auth:${token.substring(0, 20)}`\n await kv.put(cacheKey, JSON.stringify(payload), { expirationTtl: 300 })\n }\n }\n\n if (!payload) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Your session has expired, please login again')\n }\n return c.json({ error: 'Invalid or expired token' }, 401)\n }\n\n // Add user info to context\n c.set('user', payload)\n\n return await next()\n } catch (error) {\n console.error('Auth middleware error:', error)\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Authentication failed, please login again')\n }\n return c.json({ error: 'Authentication failed' }, 401)\n }\n }\n}\n\n// Middleware to require specific role\nexport const requireRole = (requiredRole: string | string[]) => {\n return async (c: Context, next: Next) => {\n const user = c.get('user') as JWTPayload\n \n if (!user) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Please login to access the admin area')\n }\n return c.json({ error: 'Authentication required' }, 401)\n }\n \n const roles = Array.isArray(requiredRole) ? requiredRole : [requiredRole]\n \n if (!roles.includes(user.role)) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=You do not have permission to access this area')\n }\n return c.json({ error: 'Insufficient permissions' }, 403)\n }\n \n return await next()\n }\n}\n\n// Optional auth middleware (doesn't block if no token)\nexport const optionalAuth = () => {\n return async (c: Context, next: Next) => {\n try {\n let token = c.req.header('Authorization')?.replace('Bearer ', '')\n \n if (!token) {\n token = getCookie(c, 'auth_token')\n }\n \n if (token) {\n const payload = await AuthManager.verifyToken(token)\n if (payload) {\n c.set('user', payload)\n }\n }\n \n return await next()\n } catch (error) {\n // Don't block on auth errors in optional auth\n console.error('Optional auth error:', error)\n return await next()\n }\n }\n}","import { MiddlewareHandler } from 'hono'\nimport { metricsTracker } from '../utils/metrics'\n\n/**\n * Middleware to track all HTTP requests for real-time analytics\n * Excludes the metrics endpoint itself to avoid inflating the count\n */\nexport const metricsMiddleware = (): MiddlewareHandler => {\n return async (c, next) => {\n const path = new URL(c.req.url).pathname\n\n // Don't track the metrics endpoint itself to avoid self-inflating counts\n if (path !== '/admin/dashboard/api/metrics') {\n metricsTracker.recordRequest()\n }\n\n // Continue with the request\n await next()\n }\n}\n","/**\n * Middleware Module Exports\n *\n * Request processing middleware for SonicJS\n *\n * Note: Most middleware is currently in the monolith and will be migrated later.\n * For now, we only export the bootstrap middleware which is used for system initialization.\n */\n\n// Bootstrap middleware\nexport { bootstrapMiddleware } from './bootstrap'\n\n// Auth middleware\nexport { AuthManager, requireAuth, requireRole, optionalAuth } from './auth'\n\n// Metrics middleware\nexport { metricsMiddleware } from './metrics'\n\n// Re-export types and functions that are referenced but implemented in monolith\n// These are placeholder exports to maintain API compatibility\nexport type Permission = string\nexport type UserPermissions = {\n userId: string\n permissions: Permission[]\n}\n\n// Middleware stubs - these return pass-through middleware that call next()\nexport const loggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const detailedLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const securityLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const performanceLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const cacheHeaders: any = () => async (_c: any, next: any) => await next()\nexport const compressionMiddleware: any = async (_c: any, next: any) => await next()\nexport const securityHeaders: any = () => async (_c: any, next: any) => await next()\n\n// Other stubs\nexport const PermissionManager: any = {}\nexport const requirePermission: any = () => async (_c: any, next: any) => await next()\nexport const requireAnyPermission: any = () => async (_c: any, next: any) => await next()\nexport const logActivity: any = () => {}\nexport const requireActivePlugin: any = () => async (_c: any, next: any) => await next()\nexport const requireActivePlugins: any = () => async (_c: any, next: any) => await next()\nexport const getActivePlugins: any = () => []\nexport const isPluginActive: any = () => false\n"]}
@@ -1,4 +1,4 @@
1
- import { getTelemetryConfig, sanitizeErrorMessage, sanitizeRoute, generateInstallationId, generateProjectId } from './chunk-RRKXFGIO.js';
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.apiKey) {
1165
- const { PostHog } = await import('posthog-node');
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.client && this.identity) {
1208
- this.client.capture({
1209
- distinctId: this.identity.installationId,
1210
- event,
1211
- properties: enrichedProps
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 client):", event, enrichedProps);
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-Q52ZQFMB.js.map
1384
- //# sourceMappingURL=chunk-Q52ZQFMB.js.map
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"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkNAYD76QF_cjs = require('./chunk-NAYD76QF.cjs');
4
- var chunkO446Q45G_cjs = require('./chunk-O446Q45G.cjs');
3
+ var chunkILZ3DP4I_cjs = require('./chunk-ILZ3DP4I.cjs');
4
+ var chunkW4CE7XME_cjs = require('./chunk-W4CE7XME.cjs');
5
5
  var chunkRCQ2HIQD_cjs = require('./chunk-RCQ2HIQD.cjs');
6
6
  var jwt = require('hono/jwt');
7
7
  var cookie = require('hono/cookie');
@@ -20,17 +20,17 @@ function bootstrapMiddleware(config = {}) {
20
20
  try {
21
21
  console.log("[Bootstrap] Starting system initialization...");
22
22
  console.log("[Bootstrap] Running database migrations...");
23
- const migrationService = new chunkO446Q45G_cjs.MigrationService(c.env.DB);
23
+ const migrationService = new chunkW4CE7XME_cjs.MigrationService(c.env.DB);
24
24
  await migrationService.runPendingMigrations();
25
25
  console.log("[Bootstrap] Syncing collection configurations...");
26
26
  try {
27
- await chunkNAYD76QF_cjs.syncCollections(c.env.DB);
27
+ await chunkILZ3DP4I_cjs.syncCollections(c.env.DB);
28
28
  } catch (error) {
29
29
  console.error("[Bootstrap] Error syncing collections:", error);
30
30
  }
31
31
  if (!config.plugins?.disableAll) {
32
32
  console.log("[Bootstrap] Bootstrapping core plugins...");
33
- const bootstrapService = new chunkNAYD76QF_cjs.PluginBootstrapService(c.env.DB);
33
+ const bootstrapService = new chunkILZ3DP4I_cjs.PluginBootstrapService(c.env.DB);
34
34
  const needsBootstrap = await bootstrapService.isBootstrapNeeded();
35
35
  if (needsBootstrap) {
36
36
  await bootstrapService.bootstrapCorePlugins();
@@ -239,5 +239,5 @@ exports.requirePermission = requirePermission;
239
239
  exports.requireRole = requireRole;
240
240
  exports.securityHeaders = securityHeaders;
241
241
  exports.securityLoggingMiddleware = securityLoggingMiddleware;
242
- //# sourceMappingURL=chunk-YLFQXTTX.cjs.map
243
- //# sourceMappingURL=chunk-YLFQXTTX.cjs.map
242
+ //# sourceMappingURL=chunk-5NCBFP37.cjs.map
243
+ //# sourceMappingURL=chunk-5NCBFP37.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/middleware/bootstrap.ts","../src/middleware/auth.ts","../src/middleware/metrics.ts","../src/middleware/index.ts"],"names":["MigrationService","syncCollections","PluginBootstrapService","sign","verify","setCookie","getCookie","metricsTracker"],"mappings":"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","file":"chunk-YLFQXTTX.cjs","sourcesContent":["import { Context, Next } from \"hono\";\nimport { syncCollections } from \"../services/collection-sync\";\nimport { MigrationService } from \"../services/migrations\";\nimport { PluginBootstrapService } from \"../services/plugin-bootstrap\";\nimport type { SonicJSConfig } from \"../app\";\n\ntype Bindings = {\n DB: D1Database;\n KV: KVNamespace;\n};\n\n// Track if bootstrap has been run in this worker instance\nlet bootstrapComplete = false;\n\n/**\n * Bootstrap middleware that ensures system initialization\n * Runs once per worker instance\n */\nexport function bootstrapMiddleware(config: SonicJSConfig = {}) {\n return async (c: Context<{ Bindings: Bindings }>, next: Next) => {\n // Skip if already bootstrapped in this worker instance\n if (bootstrapComplete) {\n return next();\n }\n\n // Skip bootstrap for static assets and health checks\n const path = c.req.path;\n if (\n path.startsWith(\"/images/\") ||\n path.startsWith(\"/assets/\") ||\n path === \"/health\" ||\n path.endsWith(\".js\") ||\n path.endsWith(\".css\") ||\n path.endsWith(\".png\") ||\n path.endsWith(\".jpg\") ||\n path.endsWith(\".ico\")\n ) {\n return next();\n }\n\n try {\n console.log(\"[Bootstrap] Starting system initialization...\");\n\n // 1. Run database migrations first\n console.log(\"[Bootstrap] Running database migrations...\");\n const migrationService = new MigrationService(c.env.DB);\n await migrationService.runPendingMigrations();\n\n // 2. Sync collection configurations\n console.log(\"[Bootstrap] Syncing collection configurations...\");\n try {\n await syncCollections(c.env.DB);\n } catch (error) {\n console.error(\"[Bootstrap] Error syncing collections:\", error);\n // Continue bootstrap even if collection sync fails\n }\n\n // 3. Bootstrap core plugins (unless disableAll is set)\n if (!config.plugins?.disableAll) {\n console.log(\"[Bootstrap] Bootstrapping core plugins...\");\n const bootstrapService = new PluginBootstrapService(c.env.DB);\n\n // Check if bootstrap is needed\n const needsBootstrap = await bootstrapService.isBootstrapNeeded();\n if (needsBootstrap) {\n await bootstrapService.bootstrapCorePlugins();\n }\n } else {\n console.log(\"[Bootstrap] Plugin bootstrap skipped (disableAll is true)\");\n }\n\n // Mark bootstrap as complete for this worker instance\n bootstrapComplete = true;\n console.log(\"[Bootstrap] System initialization completed\");\n } catch (error) {\n console.error(\"[Bootstrap] Error during system initialization:\", error);\n // Don't prevent the app from starting, but log the error\n }\n\n return next();\n };\n}\n\n/**\n * Reset bootstrap flag (useful for testing)\n */\nexport function resetBootstrap() {\n bootstrapComplete = false;\n}\n","import { sign, verify } from 'hono/jwt'\nimport { Context, Next } from 'hono'\nimport { getCookie, setCookie } from 'hono/cookie'\n\ntype JWTPayload = {\n userId: string\n email: string\n role: string\n exp: number\n iat: number\n}\n\n// JWT secret - in production this should come from environment variables\nconst JWT_SECRET = 'your-super-secret-jwt-key-change-in-production'\n\nexport class AuthManager {\n static async generateToken(userId: string, email: string, role: string): Promise<string> {\n const payload: JWTPayload = {\n userId,\n email,\n role,\n exp: Math.floor(Date.now() / 1000) + (60 * 60 * 24), // 24 hours\n iat: Math.floor(Date.now() / 1000)\n }\n \n return await sign(payload, JWT_SECRET)\n }\n\n static async verifyToken(token: string): Promise<JWTPayload | null> {\n try {\n const payload = await verify(token, JWT_SECRET) as JWTPayload\n \n // Check if token is expired\n if (payload.exp < Math.floor(Date.now() / 1000)) {\n return null\n }\n \n return payload\n } catch (error) {\n console.error('Token verification failed:', error)\n return null\n }\n }\n\n static async hashPassword(password: string): Promise<string> {\n // In Cloudflare Workers, we'll use Web Crypto API\n const encoder = new TextEncoder()\n const data = encoder.encode(password + 'salt-change-in-production')\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')\n }\n\n static async verifyPassword(password: string, hash: string): Promise<boolean> {\n const passwordHash = await this.hashPassword(password)\n return passwordHash === hash\n }\n\n /**\n * Set authentication cookie - useful for plugins implementing alternative auth methods\n * @param c - Hono context\n * @param token - JWT token to set in cookie\n * @param options - Optional cookie configuration\n */\n static setAuthCookie(c: Context, token: string, options?: {\n maxAge?: number\n secure?: boolean\n httpOnly?: boolean\n sameSite?: 'Strict' | 'Lax' | 'None'\n }): void {\n setCookie(c, 'auth_token', token, {\n httpOnly: options?.httpOnly ?? true,\n secure: options?.secure ?? true,\n sameSite: options?.sameSite ?? 'Strict',\n maxAge: options?.maxAge ?? (60 * 60 * 24) // 24 hours default\n })\n }\n}\n\n// Middleware to require authentication\nexport const requireAuth = () => {\n return async (c: Context, next: Next) => {\n try {\n // Try to get token from Authorization header\n let token = c.req.header('Authorization')?.replace('Bearer ', '')\n\n // If no header token, try cookie\n if (!token) {\n token = getCookie(c, 'auth_token')\n }\n\n if (!token) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Please login to access the admin area')\n }\n return c.json({ error: 'Authentication required' }, 401)\n }\n\n // Try to get cached token verification from KV\n const kv = c.env?.KV\n let payload: JWTPayload | null = null\n\n if (kv) {\n const cacheKey = `auth:${token.substring(0, 20)}` // Use token prefix as key\n const cached = await kv.get(cacheKey, 'json')\n if (cached) {\n payload = cached as JWTPayload\n }\n }\n\n // If not cached, verify token\n if (!payload) {\n payload = await AuthManager.verifyToken(token)\n\n // Cache the verified payload for 5 minutes\n if (payload && kv) {\n const cacheKey = `auth:${token.substring(0, 20)}`\n await kv.put(cacheKey, JSON.stringify(payload), { expirationTtl: 300 })\n }\n }\n\n if (!payload) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Your session has expired, please login again')\n }\n return c.json({ error: 'Invalid or expired token' }, 401)\n }\n\n // Add user info to context\n c.set('user', payload)\n\n return await next()\n } catch (error) {\n console.error('Auth middleware error:', error)\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Authentication failed, please login again')\n }\n return c.json({ error: 'Authentication failed' }, 401)\n }\n }\n}\n\n// Middleware to require specific role\nexport const requireRole = (requiredRole: string | string[]) => {\n return async (c: Context, next: Next) => {\n const user = c.get('user') as JWTPayload\n \n if (!user) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Please login to access the admin area')\n }\n return c.json({ error: 'Authentication required' }, 401)\n }\n \n const roles = Array.isArray(requiredRole) ? requiredRole : [requiredRole]\n \n if (!roles.includes(user.role)) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=You do not have permission to access this area')\n }\n return c.json({ error: 'Insufficient permissions' }, 403)\n }\n \n return await next()\n }\n}\n\n// Optional auth middleware (doesn't block if no token)\nexport const optionalAuth = () => {\n return async (c: Context, next: Next) => {\n try {\n let token = c.req.header('Authorization')?.replace('Bearer ', '')\n \n if (!token) {\n token = getCookie(c, 'auth_token')\n }\n \n if (token) {\n const payload = await AuthManager.verifyToken(token)\n if (payload) {\n c.set('user', payload)\n }\n }\n \n return await next()\n } catch (error) {\n // Don't block on auth errors in optional auth\n console.error('Optional auth error:', error)\n return await next()\n }\n }\n}","import { MiddlewareHandler } from 'hono'\nimport { metricsTracker } from '../utils/metrics'\n\n/**\n * Middleware to track all HTTP requests for real-time analytics\n * Excludes the metrics endpoint itself to avoid inflating the count\n */\nexport const metricsMiddleware = (): MiddlewareHandler => {\n return async (c, next) => {\n const path = new URL(c.req.url).pathname\n\n // Don't track the metrics endpoint itself to avoid self-inflating counts\n if (path !== '/admin/dashboard/api/metrics') {\n metricsTracker.recordRequest()\n }\n\n // Continue with the request\n await next()\n }\n}\n","/**\n * Middleware Module Exports\n *\n * Request processing middleware for SonicJS\n *\n * Note: Most middleware is currently in the monolith and will be migrated later.\n * For now, we only export the bootstrap middleware which is used for system initialization.\n */\n\n// Bootstrap middleware\nexport { bootstrapMiddleware } from './bootstrap'\n\n// Auth middleware\nexport { AuthManager, requireAuth, requireRole, optionalAuth } from './auth'\n\n// Metrics middleware\nexport { metricsMiddleware } from './metrics'\n\n// Re-export types and functions that are referenced but implemented in monolith\n// These are placeholder exports to maintain API compatibility\nexport type Permission = string\nexport type UserPermissions = {\n userId: string\n permissions: Permission[]\n}\n\n// Middleware stubs - these return pass-through middleware that call next()\nexport const loggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const detailedLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const securityLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const performanceLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const cacheHeaders: any = () => async (_c: any, next: any) => await next()\nexport const compressionMiddleware: any = async (_c: any, next: any) => await next()\nexport const securityHeaders: any = () => async (_c: any, next: any) => await next()\n\n// Other stubs\nexport const PermissionManager: any = {}\nexport const requirePermission: any = () => async (_c: any, next: any) => await next()\nexport const requireAnyPermission: any = () => async (_c: any, next: any) => await next()\nexport const logActivity: any = () => {}\nexport const requireActivePlugin: any = () => async (_c: any, next: any) => await next()\nexport const requireActivePlugins: any = () => async (_c: any, next: any) => await next()\nexport const getActivePlugins: any = () => []\nexport const isPluginActive: any = () => false\n"]}
1
+ {"version":3,"sources":["../src/middleware/bootstrap.ts","../src/middleware/auth.ts","../src/middleware/metrics.ts","../src/middleware/index.ts"],"names":["MigrationService","syncCollections","PluginBootstrapService","sign","verify","setCookie","getCookie","metricsTracker"],"mappings":";;;;;;;;;AAYA,IAAI,iBAAA,GAAoB,KAAA;AAMjB,SAAS,mBAAA,CAAoB,MAAA,GAAwB,EAAC,EAAG;AAC9D,EAAA,OAAO,OAAO,GAAoC,IAAA,KAAe;AAE/D,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,OAAO,IAAA,EAAK;AAAA,IACd;AAGA,IAAA,MAAM,IAAA,GAAO,EAAE,GAAA,CAAI,IAAA;AACnB,IAAA,IACE,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,IAC1B,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,IAC1B,IAAA,KAAS,SAAA,IACT,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IACnB,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,IACpB,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,IACpB,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,IACpB,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EACpB;AACA,MAAA,OAAO,IAAA,EAAK;AAAA,IACd;AAEA,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,IAAI,+CAA+C,CAAA;AAG3D,MAAA,OAAA,CAAQ,IAAI,4CAA4C,CAAA;AACxD,MAAA,MAAM,gBAAA,GAAmB,IAAIA,kCAAA,CAAiB,CAAA,CAAE,IAAI,EAAE,CAAA;AACtD,MAAA,MAAM,iBAAiB,oBAAA,EAAqB;AAG5C,MAAA,OAAA,CAAQ,IAAI,kDAAkD,CAAA;AAC9D,MAAA,IAAI;AACF,QAAA,MAAMC,iCAAA,CAAgB,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA;AAAA,MAChC,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAM,0CAA0C,KAAK,CAAA;AAAA,MAE/D;AAGA,MAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,UAAA,EAAY;AAC/B,QAAA,OAAA,CAAQ,IAAI,2CAA2C,CAAA;AACvD,QAAA,MAAM,gBAAA,GAAmB,IAAIC,wCAAA,CAAuB,CAAA,CAAE,IAAI,EAAE,CAAA;AAG5D,QAAA,MAAM,cAAA,GAAiB,MAAM,gBAAA,CAAiB,iBAAA,EAAkB;AAChE,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,MAAM,iBAAiB,oBAAA,EAAqB;AAAA,QAC9C;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAI,2DAA2D,CAAA;AAAA,MACzE;AAGA,MAAA,iBAAA,GAAoB,IAAA;AACpB,MAAA,OAAA,CAAQ,IAAI,6CAA6C,CAAA;AAAA,IAC3D,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,mDAAmD,KAAK,CAAA;AAAA,IAExE;AAEA,IAAA,OAAO,IAAA,EAAK;AAAA,EACd,CAAA;AACF;ACpEA,IAAM,UAAA,GAAa,gDAAA;AAEZ,IAAM,cAAN,MAAkB;AAAA,EACvB,aAAa,aAAA,CAAc,MAAA,EAAgB,KAAA,EAAe,IAAA,EAA+B;AACvF,IAAA,MAAM,OAAA,GAAsB;AAAA,MAC1B,MAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAA,EAAK,KAAK,KAAA,CAAM,IAAA,CAAK,KAAI,GAAI,GAAI,CAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA;AAAA;AAAA,MAChD,KAAK,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI;AAAA,KACnC;AAEA,IAAA,OAAO,MAAMC,QAAA,CAAK,OAAA,EAAS,UAAU,CAAA;AAAA,EACvC;AAAA,EAEA,aAAa,YAAY,KAAA,EAA2C;AAClE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAMC,UAAA,CAAO,KAAA,EAAO,UAAU,CAAA;AAG9C,MAAA,IAAI,OAAA,CAAQ,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,GAAA,EAAI,GAAI,GAAI,CAAA,EAAG;AAC/C,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,OAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,KAAK,CAAA;AACjD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,aAAa,aAAa,QAAA,EAAmC;AAE3D,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,CAAO,QAAA,GAAW,2BAA2B,CAAA;AAClE,IAAA,MAAM,aAAa,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,WAAW,IAAI,CAAA;AAC7D,IAAA,MAAM,YAAY,KAAA,CAAM,IAAA,CAAK,IAAI,UAAA,CAAW,UAAU,CAAC,CAAA;AACvD,IAAA,OAAO,SAAA,CAAU,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,EACpE;AAAA,EAEA,aAAa,cAAA,CAAe,QAAA,EAAkB,IAAA,EAAgC;AAC5E,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA;AACrD,IAAA,OAAO,YAAA,KAAiB,IAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,aAAA,CAAc,CAAA,EAAY,KAAA,EAAe,OAAA,EAKvC;AACP,IAAAC,gBAAA,CAAU,CAAA,EAAG,cAAc,KAAA,EAAO;AAAA,MAChC,QAAA,EAAU,SAAS,QAAA,IAAY,IAAA;AAAA,MAC/B,MAAA,EAAQ,SAAS,MAAA,IAAU,IAAA;AAAA,MAC3B,QAAA,EAAU,SAAS,QAAA,IAAY,QAAA;AAAA,MAC/B,MAAA,EAAQ,OAAA,EAAS,MAAA,IAAW,EAAA,GAAK,EAAA,GAAK;AAAA;AAAA,KACvC,CAAA;AAAA,EACH;AACF;AAGO,IAAM,cAAc,MAAM;AAC/B,EAAA,OAAO,OAAO,GAAY,IAAA,KAAe;AACvC,IAAA,IAAI;AAEF,MAAA,IAAI,KAAA,GAAQ,EAAE,GAAA,CAAI,MAAA,CAAO,eAAe,CAAA,EAAG,OAAA,CAAQ,WAAW,EAAE,CAAA;AAGhE,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,KAAA,GAAQC,gBAAA,CAAU,GAAG,YAAY,CAAA;AAAA,MACnC;AAEA,MAAA,IAAI,CAAC,KAAA,EAAO;AAEV,QAAA,MAAM,YAAA,GAAe,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,IAAK,EAAA;AAC/C,QAAA,IAAI,YAAA,CAAa,QAAA,CAAS,WAAW,CAAA,EAAG;AACtC,UAAA,OAAO,CAAA,CAAE,SAAS,yDAAyD,CAAA;AAAA,QAC7E;AACA,QAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,yBAAA,IAA6B,GAAG,CAAA;AAAA,MACzD;AAGA,MAAA,MAAM,EAAA,GAAK,EAAE,GAAA,EAAK,EAAA;AAClB,MAAA,IAAI,OAAA,GAA6B,IAAA;AAEjC,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,MAAM,WAAW,CAAA,KAAA,EAAQ,KAAA,CAAM,SAAA,CAAU,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAC/C,QAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,GAAA,CAAI,UAAU,MAAM,CAAA;AAC5C,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,OAAA,GAAU,MAAA;AAAA,QACZ;AAAA,MACF;AAGA,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,OAAA,GAAU,MAAM,WAAA,CAAY,WAAA,CAAY,KAAK,CAAA;AAG7C,QAAA,IAAI,WAAW,EAAA,EAAI;AACjB,UAAA,MAAM,WAAW,CAAA,KAAA,EAAQ,KAAA,CAAM,SAAA,CAAU,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAC/C,UAAA,MAAM,EAAA,CAAG,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,EAAG,EAAE,aAAA,EAAe,GAAA,EAAK,CAAA;AAAA,QACxE;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,OAAA,EAAS;AAEZ,QAAA,MAAM,YAAA,GAAe,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,IAAK,EAAA;AAC/C,QAAA,IAAI,YAAA,CAAa,QAAA,CAAS,WAAW,CAAA,EAAG;AACtC,UAAA,OAAO,CAAA,CAAE,SAAS,gEAAgE,CAAA;AAAA,QACpF;AACA,QAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,0BAAA,IAA8B,GAAG,CAAA;AAAA,MAC1D;AAGA,MAAA,CAAA,CAAE,GAAA,CAAI,QAAQ,OAAO,CAAA;AAErB,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAE7C,MAAA,MAAM,YAAA,GAAe,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,IAAK,EAAA;AAC/C,MAAA,IAAI,YAAA,CAAa,QAAA,CAAS,WAAW,CAAA,EAAG;AACtC,QAAA,OAAO,CAAA,CAAE,SAAS,6DAA6D,CAAA;AAAA,MACjF;AACA,MAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,uBAAA,IAA2B,GAAG,CAAA;AAAA,IACvD;AAAA,EACF,CAAA;AACF;AAGO,IAAM,WAAA,GAAc,CAAC,YAAA,KAAoC;AAC9D,EAAA,OAAO,OAAO,GAAY,IAAA,KAAe;AACvC,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AAEzB,IAAA,IAAI,CAAC,IAAA,EAAM;AAET,MAAA,MAAM,YAAA,GAAe,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,IAAK,EAAA;AAC/C,MAAA,IAAI,YAAA,CAAa,QAAA,CAAS,WAAW,CAAA,EAAG;AACtC,QAAA,OAAO,CAAA,CAAE,SAAS,yDAAyD,CAAA;AAAA,MAC7E;AACA,MAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,yBAAA,IAA6B,GAAG,CAAA;AAAA,IACzD;AAEA,IAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,GAAI,YAAA,GAAe,CAAC,YAAY,CAAA;AAExE,IAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AAE9B,MAAA,MAAM,YAAA,GAAe,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,IAAK,EAAA;AAC/C,MAAA,IAAI,YAAA,CAAa,QAAA,CAAS,WAAW,CAAA,EAAG;AACtC,QAAA,OAAO,CAAA,CAAE,SAAS,kEAAkE,CAAA;AAAA,MACtF;AACA,MAAA,OAAO,EAAE,IAAA,CAAK,EAAE,KAAA,EAAO,0BAAA,IAA8B,GAAG,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA,EACpB,CAAA;AACF;AAGO,IAAM,eAAe,MAAM;AAChC,EAAA,OAAO,OAAO,GAAY,IAAA,KAAe;AACvC,IAAA,IAAI;AACF,MAAA,IAAI,KAAA,GAAQ,EAAE,GAAA,CAAI,MAAA,CAAO,eAAe,CAAA,EAAG,OAAA,CAAQ,WAAW,EAAE,CAAA;AAEhE,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,KAAA,GAAQA,gBAAA,CAAU,GAAG,YAAY,CAAA;AAAA,MACnC;AAEA,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,WAAA,CAAY,KAAK,CAAA;AACnD,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,CAAA,CAAE,GAAA,CAAI,QAAQ,OAAO,CAAA;AAAA,QACvB;AAAA,MACF;AAEA,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,KAAA,CAAM,wBAAwB,KAAK,CAAA;AAC3C,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AAAA,EACF,CAAA;AACF;;;AClMO,IAAM,oBAAoB,MAAyB;AACxD,EAAA,OAAO,OAAO,GAAG,IAAA,KAAS;AACxB,IAAA,MAAM,OAAO,IAAI,GAAA,CAAI,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA;AAGhC,IAAA,IAAI,SAAS,8BAAA,EAAgC;AAC3C,MAAAC,gCAAA,CAAe,aAAA,EAAc;AAAA,IAC/B;AAGA,IAAA,MAAM,IAAA,EAAK;AAAA,EACb,CAAA;AACF;;;ACQO,IAAM,oBAAyB,MAAM,OAAO,EAAA,EAAS,IAAA,KAAc,MAAM,IAAA;AACzE,IAAM,4BAAiC,MAAM,OAAO,EAAA,EAAS,IAAA,KAAc,MAAM,IAAA;AACjF,IAAM,4BAAiC,MAAM,OAAO,EAAA,EAAS,IAAA,KAAc,MAAM,IAAA;AACjF,IAAM,+BAAoC,MAAM,OAAO,EAAA,EAAS,IAAA,KAAc,MAAM,IAAA;AACpF,IAAM,eAAoB,MAAM,OAAO,EAAA,EAAS,IAAA,KAAc,MAAM,IAAA;AACpE,IAAM,qBAAA,GAA6B,OAAO,EAAA,EAAS,IAAA,KAAc,MAAM,IAAA;AACvE,IAAM,kBAAuB,MAAM,OAAO,EAAA,EAAS,IAAA,KAAc,MAAM,IAAA;AAGvE,IAAM,oBAAyB;AAC/B,IAAM,oBAAyB,MAAM,OAAO,EAAA,EAAS,IAAA,KAAc,MAAM,IAAA;AACzE,IAAM,uBAA4B,MAAM,OAAO,EAAA,EAAS,IAAA,KAAc,MAAM,IAAA;AAC5E,IAAM,cAAmB,MAAM;AAAC;AAChC,IAAM,sBAA2B,MAAM,OAAO,EAAA,EAAS,IAAA,KAAc,MAAM,IAAA;AAC3E,IAAM,uBAA4B,MAAM,OAAO,EAAA,EAAS,IAAA,KAAc,MAAM,IAAA;AAC5E,IAAM,gBAAA,GAAwB,MAAM;AACpC,IAAM,iBAAsB,MAAM","file":"chunk-5NCBFP37.cjs","sourcesContent":["import { Context, Next } from \"hono\";\nimport { syncCollections } from \"../services/collection-sync\";\nimport { MigrationService } from \"../services/migrations\";\nimport { PluginBootstrapService } from \"../services/plugin-bootstrap\";\nimport type { SonicJSConfig } from \"../app\";\n\ntype Bindings = {\n DB: D1Database;\n KV: KVNamespace;\n};\n\n// Track if bootstrap has been run in this worker instance\nlet bootstrapComplete = false;\n\n/**\n * Bootstrap middleware that ensures system initialization\n * Runs once per worker instance\n */\nexport function bootstrapMiddleware(config: SonicJSConfig = {}) {\n return async (c: Context<{ Bindings: Bindings }>, next: Next) => {\n // Skip if already bootstrapped in this worker instance\n if (bootstrapComplete) {\n return next();\n }\n\n // Skip bootstrap for static assets and health checks\n const path = c.req.path;\n if (\n path.startsWith(\"/images/\") ||\n path.startsWith(\"/assets/\") ||\n path === \"/health\" ||\n path.endsWith(\".js\") ||\n path.endsWith(\".css\") ||\n path.endsWith(\".png\") ||\n path.endsWith(\".jpg\") ||\n path.endsWith(\".ico\")\n ) {\n return next();\n }\n\n try {\n console.log(\"[Bootstrap] Starting system initialization...\");\n\n // 1. Run database migrations first\n console.log(\"[Bootstrap] Running database migrations...\");\n const migrationService = new MigrationService(c.env.DB);\n await migrationService.runPendingMigrations();\n\n // 2. Sync collection configurations\n console.log(\"[Bootstrap] Syncing collection configurations...\");\n try {\n await syncCollections(c.env.DB);\n } catch (error) {\n console.error(\"[Bootstrap] Error syncing collections:\", error);\n // Continue bootstrap even if collection sync fails\n }\n\n // 3. Bootstrap core plugins (unless disableAll is set)\n if (!config.plugins?.disableAll) {\n console.log(\"[Bootstrap] Bootstrapping core plugins...\");\n const bootstrapService = new PluginBootstrapService(c.env.DB);\n\n // Check if bootstrap is needed\n const needsBootstrap = await bootstrapService.isBootstrapNeeded();\n if (needsBootstrap) {\n await bootstrapService.bootstrapCorePlugins();\n }\n } else {\n console.log(\"[Bootstrap] Plugin bootstrap skipped (disableAll is true)\");\n }\n\n // Mark bootstrap as complete for this worker instance\n bootstrapComplete = true;\n console.log(\"[Bootstrap] System initialization completed\");\n } catch (error) {\n console.error(\"[Bootstrap] Error during system initialization:\", error);\n // Don't prevent the app from starting, but log the error\n }\n\n return next();\n };\n}\n\n/**\n * Reset bootstrap flag (useful for testing)\n */\nexport function resetBootstrap() {\n bootstrapComplete = false;\n}\n","import { sign, verify } from 'hono/jwt'\nimport { Context, Next } from 'hono'\nimport { getCookie, setCookie } from 'hono/cookie'\n\ntype JWTPayload = {\n userId: string\n email: string\n role: string\n exp: number\n iat: number\n}\n\n// JWT secret - in production this should come from environment variables\nconst JWT_SECRET = 'your-super-secret-jwt-key-change-in-production'\n\nexport class AuthManager {\n static async generateToken(userId: string, email: string, role: string): Promise<string> {\n const payload: JWTPayload = {\n userId,\n email,\n role,\n exp: Math.floor(Date.now() / 1000) + (60 * 60 * 24), // 24 hours\n iat: Math.floor(Date.now() / 1000)\n }\n \n return await sign(payload, JWT_SECRET)\n }\n\n static async verifyToken(token: string): Promise<JWTPayload | null> {\n try {\n const payload = await verify(token, JWT_SECRET) as JWTPayload\n \n // Check if token is expired\n if (payload.exp < Math.floor(Date.now() / 1000)) {\n return null\n }\n \n return payload\n } catch (error) {\n console.error('Token verification failed:', error)\n return null\n }\n }\n\n static async hashPassword(password: string): Promise<string> {\n // In Cloudflare Workers, we'll use Web Crypto API\n const encoder = new TextEncoder()\n const data = encoder.encode(password + 'salt-change-in-production')\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')\n }\n\n static async verifyPassword(password: string, hash: string): Promise<boolean> {\n const passwordHash = await this.hashPassword(password)\n return passwordHash === hash\n }\n\n /**\n * Set authentication cookie - useful for plugins implementing alternative auth methods\n * @param c - Hono context\n * @param token - JWT token to set in cookie\n * @param options - Optional cookie configuration\n */\n static setAuthCookie(c: Context, token: string, options?: {\n maxAge?: number\n secure?: boolean\n httpOnly?: boolean\n sameSite?: 'Strict' | 'Lax' | 'None'\n }): void {\n setCookie(c, 'auth_token', token, {\n httpOnly: options?.httpOnly ?? true,\n secure: options?.secure ?? true,\n sameSite: options?.sameSite ?? 'Strict',\n maxAge: options?.maxAge ?? (60 * 60 * 24) // 24 hours default\n })\n }\n}\n\n// Middleware to require authentication\nexport const requireAuth = () => {\n return async (c: Context, next: Next) => {\n try {\n // Try to get token from Authorization header\n let token = c.req.header('Authorization')?.replace('Bearer ', '')\n\n // If no header token, try cookie\n if (!token) {\n token = getCookie(c, 'auth_token')\n }\n\n if (!token) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Please login to access the admin area')\n }\n return c.json({ error: 'Authentication required' }, 401)\n }\n\n // Try to get cached token verification from KV\n const kv = c.env?.KV\n let payload: JWTPayload | null = null\n\n if (kv) {\n const cacheKey = `auth:${token.substring(0, 20)}` // Use token prefix as key\n const cached = await kv.get(cacheKey, 'json')\n if (cached) {\n payload = cached as JWTPayload\n }\n }\n\n // If not cached, verify token\n if (!payload) {\n payload = await AuthManager.verifyToken(token)\n\n // Cache the verified payload for 5 minutes\n if (payload && kv) {\n const cacheKey = `auth:${token.substring(0, 20)}`\n await kv.put(cacheKey, JSON.stringify(payload), { expirationTtl: 300 })\n }\n }\n\n if (!payload) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Your session has expired, please login again')\n }\n return c.json({ error: 'Invalid or expired token' }, 401)\n }\n\n // Add user info to context\n c.set('user', payload)\n\n return await next()\n } catch (error) {\n console.error('Auth middleware error:', error)\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Authentication failed, please login again')\n }\n return c.json({ error: 'Authentication failed' }, 401)\n }\n }\n}\n\n// Middleware to require specific role\nexport const requireRole = (requiredRole: string | string[]) => {\n return async (c: Context, next: Next) => {\n const user = c.get('user') as JWTPayload\n \n if (!user) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=Please login to access the admin area')\n }\n return c.json({ error: 'Authentication required' }, 401)\n }\n \n const roles = Array.isArray(requiredRole) ? requiredRole : [requiredRole]\n \n if (!roles.includes(user.role)) {\n // Check if this is a browser request (HTML accept header)\n const acceptHeader = c.req.header('Accept') || ''\n if (acceptHeader.includes('text/html')) {\n return c.redirect('/auth/login?error=You do not have permission to access this area')\n }\n return c.json({ error: 'Insufficient permissions' }, 403)\n }\n \n return await next()\n }\n}\n\n// Optional auth middleware (doesn't block if no token)\nexport const optionalAuth = () => {\n return async (c: Context, next: Next) => {\n try {\n let token = c.req.header('Authorization')?.replace('Bearer ', '')\n \n if (!token) {\n token = getCookie(c, 'auth_token')\n }\n \n if (token) {\n const payload = await AuthManager.verifyToken(token)\n if (payload) {\n c.set('user', payload)\n }\n }\n \n return await next()\n } catch (error) {\n // Don't block on auth errors in optional auth\n console.error('Optional auth error:', error)\n return await next()\n }\n }\n}","import { MiddlewareHandler } from 'hono'\nimport { metricsTracker } from '../utils/metrics'\n\n/**\n * Middleware to track all HTTP requests for real-time analytics\n * Excludes the metrics endpoint itself to avoid inflating the count\n */\nexport const metricsMiddleware = (): MiddlewareHandler => {\n return async (c, next) => {\n const path = new URL(c.req.url).pathname\n\n // Don't track the metrics endpoint itself to avoid self-inflating counts\n if (path !== '/admin/dashboard/api/metrics') {\n metricsTracker.recordRequest()\n }\n\n // Continue with the request\n await next()\n }\n}\n","/**\n * Middleware Module Exports\n *\n * Request processing middleware for SonicJS\n *\n * Note: Most middleware is currently in the monolith and will be migrated later.\n * For now, we only export the bootstrap middleware which is used for system initialization.\n */\n\n// Bootstrap middleware\nexport { bootstrapMiddleware } from './bootstrap'\n\n// Auth middleware\nexport { AuthManager, requireAuth, requireRole, optionalAuth } from './auth'\n\n// Metrics middleware\nexport { metricsMiddleware } from './metrics'\n\n// Re-export types and functions that are referenced but implemented in monolith\n// These are placeholder exports to maintain API compatibility\nexport type Permission = string\nexport type UserPermissions = {\n userId: string\n permissions: Permission[]\n}\n\n// Middleware stubs - these return pass-through middleware that call next()\nexport const loggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const detailedLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const securityLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const performanceLoggingMiddleware: any = () => async (_c: any, next: any) => await next()\nexport const cacheHeaders: any = () => async (_c: any, next: any) => await next()\nexport const compressionMiddleware: any = async (_c: any, next: any) => await next()\nexport const securityHeaders: any = () => async (_c: any, next: any) => await next()\n\n// Other stubs\nexport const PermissionManager: any = {}\nexport const requirePermission: any = () => async (_c: any, next: any) => await next()\nexport const requireAnyPermission: any = () => async (_c: any, next: any) => await next()\nexport const logActivity: any = () => {}\nexport const requireActivePlugin: any = () => async (_c: any, next: any) => await next()\nexport const requireActivePlugins: any = () => async (_c: any, next: any) => await next()\nexport const getActivePlugins: any = () => []\nexport const isPluginActive: any = () => false\n"]}