@morojs/moro 1.8.2 → 1.8.4

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 (92) hide show
  1. package/dist/core/config/config-sources.js.map +1 -1
  2. package/dist/core/framework.d.ts +11 -0
  3. package/dist/core/framework.js +107 -36
  4. package/dist/core/framework.js.map +1 -1
  5. package/dist/core/graphql/core.js.map +1 -1
  6. package/dist/core/grpc/types.js.map +1 -1
  7. package/dist/core/http/moro-engine-server.js.map +1 -1
  8. package/dist/core/mail/mail-adapter.js.map +1 -1
  9. package/dist/core/middleware/built-in/cloudwatch/index.d.ts +4 -0
  10. package/dist/core/middleware/built-in/cloudwatch/index.js +5 -0
  11. package/dist/core/middleware/built-in/cloudwatch/index.js.map +1 -0
  12. package/dist/core/middleware/built-in/cloudwatch/middleware.d.ts +31 -0
  13. package/dist/core/middleware/built-in/cloudwatch/middleware.js +52 -0
  14. package/dist/core/middleware/built-in/cloudwatch/middleware.js.map +1 -0
  15. package/dist/core/middleware/built-in/error-tracker/index.d.ts +3 -1
  16. package/dist/core/middleware/built-in/error-tracker/index.js +3 -2
  17. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -1
  18. package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +6 -3
  19. package/dist/core/middleware/built-in/error-tracker/middleware.js +18 -13
  20. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -1
  21. package/dist/core/middleware/built-in/index.d.ts +43 -7
  22. package/dist/core/middleware/built-in/index.js +37 -7
  23. package/dist/core/middleware/built-in/index.js.map +1 -1
  24. package/dist/core/middleware/built-in/performance-monitor/index.d.ts +3 -1
  25. package/dist/core/middleware/built-in/performance-monitor/index.js +3 -2
  26. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -1
  27. package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +3 -3
  28. package/dist/core/middleware/built-in/performance-monitor/middleware.js +19 -17
  29. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -1
  30. package/dist/core/middleware/built-in/prometheus/core.d.ts +27 -0
  31. package/dist/core/middleware/built-in/prometheus/core.js +0 -0
  32. package/dist/core/middleware/built-in/prometheus/core.js.map +1 -0
  33. package/dist/core/middleware/built-in/prometheus/index.d.ts +5 -0
  34. package/dist/core/middleware/built-in/prometheus/index.js +6 -0
  35. package/dist/core/middleware/built-in/prometheus/index.js.map +1 -0
  36. package/dist/core/middleware/built-in/prometheus/middleware.d.ts +15 -0
  37. package/dist/core/middleware/built-in/prometheus/middleware.js +30 -0
  38. package/dist/core/middleware/built-in/prometheus/middleware.js.map +1 -0
  39. package/dist/core/middleware/built-in/request-logger/index.d.ts +3 -1
  40. package/dist/core/middleware/built-in/request-logger/index.js +3 -2
  41. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -1
  42. package/dist/core/middleware/built-in/request-logger/middleware.d.ts +4 -4
  43. package/dist/core/middleware/built-in/request-logger/middleware.js +14 -12
  44. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -1
  45. package/dist/core/middleware/index.d.ts +1 -1
  46. package/dist/core/middleware/index.js +1 -1
  47. package/dist/core/middleware/index.js.map +1 -1
  48. package/dist/core/pooling/index.d.ts +3 -0
  49. package/dist/core/pooling/index.js +5 -0
  50. package/dist/core/pooling/index.js.map +1 -0
  51. package/dist/core/pooling/lru-cache.d.ts +32 -0
  52. package/dist/core/pooling/lru-cache.js +74 -0
  53. package/dist/core/pooling/lru-cache.js.map +1 -0
  54. package/dist/core/pooling/object-pool-manager.d.ts +3 -1
  55. package/dist/core/pooling/object-pool-manager.js +37 -140
  56. package/dist/core/pooling/object-pool-manager.js.map +1 -1
  57. package/dist/core/pooling/object-pool.d.ts +42 -0
  58. package/dist/core/pooling/object-pool.js +78 -0
  59. package/dist/core/pooling/object-pool.js.map +1 -0
  60. package/dist/core/routing/create-router.js.map +1 -1
  61. package/dist/core/routing/path-matcher.js +1 -43
  62. package/dist/core/routing/path-matcher.js.map +1 -1
  63. package/dist/core/utilities/hooks.d.ts +0 -1
  64. package/dist/core/utilities/hooks.js +0 -2
  65. package/dist/core/utilities/hooks.js.map +1 -1
  66. package/dist/core/utilities/index.d.ts +0 -1
  67. package/dist/core/utilities/index.js +0 -2
  68. package/dist/core/utilities/index.js.map +1 -1
  69. package/dist/core/utilities/package-utils.js +7 -0
  70. package/dist/core/utilities/package-utils.js.map +1 -1
  71. package/dist/core/utilities/self-require.d.ts +2 -0
  72. package/dist/core/utilities/self-require.js +13 -0
  73. package/dist/core/utilities/self-require.js.map +1 -0
  74. package/dist/core/workers/facade.d.ts +20 -4
  75. package/dist/core/workers/facade.js +15 -7
  76. package/dist/core/workers/facade.js.map +1 -1
  77. package/dist/core/workers/worker-manager.d.ts +12 -0
  78. package/dist/core/workers/worker-manager.js +27 -0
  79. package/dist/core/workers/worker-manager.js.map +1 -1
  80. package/dist/core/workers/worker.d.ts +17 -1
  81. package/dist/core/workers/worker.js +28 -26
  82. package/dist/core/workers/worker.js.map +1 -1
  83. package/dist/index.d.ts +39 -2
  84. package/dist/index.js +14 -2
  85. package/dist/index.js.map +1 -1
  86. package/dist/moro.js +25 -1
  87. package/dist/moro.js.map +1 -1
  88. package/dist/types/config.js.map +1 -1
  89. package/dist/types/core.d.ts +1 -0
  90. package/dist/types/core.js.map +1 -1
  91. package/dist/types/module.js.map +1 -1
  92. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/core/workers/worker.ts"],"names":[],"mappings":"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","sourcesContent":["// Worker Thread Implementation\n// Runs in worker threads to execute CPU-intensive operations\n\nimport { parentPort } from 'worker_threads';\nimport * as crypto from 'crypto';\nimport * as zlib from 'zlib';\nimport { promisify } from 'util';\nimport { resolveUserPackage, isPackageAvailable } from '../utilities/package-utils.js';\n\n// Optional isolated-vm for true V8 isolate sandboxing of JSON transforms\nlet isolatedVM: any = null;\nconst isolatedVMAvailable = isPackageAvailable('isolated-vm');\nlet jsonTransformWarningShown = false;\n\n// Optional JWT import (may not be available)\nlet jwt: any = null;\nconst jwtAvailable = isPackageAvailable('jsonwebtoken');\n\nconst gzip = promisify(zlib.gzip);\nconst gunzip = promisify(zlib.gunzip);\n\n// Import task types\nimport { WorkerTask, WorkerResult, WORKER_TASKS } from './worker-manager.js';\n\n/**\n * Execute a worker task\n */\nasync function executeTask(task: WorkerTask): Promise<WorkerResult> {\n const startTime = Date.now();\n\n try {\n let result: any;\n\n switch (task.type) {\n case WORKER_TASKS.JWT_VERIFY:\n result = await handleJWTVerify(task.data);\n break;\n\n case WORKER_TASKS.JWT_SIGN:\n result = await handleJWTSign(task.data);\n break;\n\n case WORKER_TASKS.CRYPTO_HASH:\n result = await handleCryptoHash(task.data);\n break;\n\n case WORKER_TASKS.CRYPTO_ENCRYPT:\n result = await handleCryptoEncrypt(task.data);\n break;\n\n case WORKER_TASKS.CRYPTO_DECRYPT:\n result = await handleCryptoDecrypt(task.data);\n break;\n\n case WORKER_TASKS.DATA_COMPRESS:\n result = await handleDataCompress(task.data);\n break;\n\n case WORKER_TASKS.DATA_DECOMPRESS:\n result = await handleDataDecompress(task.data);\n break;\n\n case WORKER_TASKS.HEAVY_COMPUTATION:\n result = await handleHeavyComputation(task.data);\n break;\n\n case WORKER_TASKS.JSON_TRANSFORM:\n result = await handleJSONTransform(task.data);\n break;\n\n default:\n throw new Error(`Unknown task type: ${task.type}`);\n }\n\n return {\n taskId: task.id,\n success: true,\n data: result,\n executionTime: Date.now() - startTime,\n };\n } catch (error) {\n return {\n taskId: task.id,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n executionTime: Date.now() - startTime,\n };\n }\n}\n\n/**\n * JWT verification handler\n */\nasync function handleJWTVerify(data: {\n token: string;\n secret: string;\n options?: any;\n}): Promise<any> {\n if (!jwtAvailable) {\n throw new Error(\n 'JWT verification requires the \"jsonwebtoken\" package. Please install it with: npm install jsonwebtoken @types/jsonwebtoken'\n );\n }\n\n // Lazy load JWT if needed\n if (!jwt) {\n const jwtPath = resolveUserPackage('jsonwebtoken');\n jwt = await import(jwtPath);\n }\n\n const { token, secret, options } = data;\n return jwt.verify(token, secret, options);\n}\n\n/**\n * JWT signing handler\n */\nasync function handleJWTSign(data: {\n payload: any;\n secret: string;\n options?: any;\n}): Promise<string> {\n if (!jwtAvailable) {\n throw new Error(\n 'JWT signing requires the \"jsonwebtoken\" package. Please install it with: npm install jsonwebtoken @types/jsonwebtoken'\n );\n }\n\n // Lazy load JWT if needed\n if (!jwt) {\n const jwtPath = resolveUserPackage('jsonwebtoken');\n jwt = await import(jwtPath);\n }\n\n const { payload, secret, options } = data;\n return jwt.sign(payload, secret, options);\n}\n\n/**\n * Crypto hash handler\n */\nasync function handleCryptoHash(data: { data: string; algorithm?: string }): Promise<string> {\n const { data: inputData, algorithm = 'sha256' } = data;\n return crypto.createHash(algorithm).update(inputData).digest('hex');\n}\n\n/**\n * Crypto encryption handler\n * When no IV is provided, auto-generates a random 16-byte IV and prepends it to the output.\n */\nasync function handleCryptoEncrypt(data: {\n data: string;\n algorithm?: string;\n key: string;\n iv?: string;\n}): Promise<string> {\n const { data: inputData, algorithm = 'aes-256-cbc', key, iv } = data;\n\n let effectiveIv: Buffer;\n let prependIv = false;\n\n if (iv) {\n effectiveIv = Buffer.from(iv, 'hex');\n } else {\n // Auto-generate random IV for security — prepend to output for extraction during decryption\n effectiveIv = crypto.randomBytes(16);\n prependIv = true;\n }\n\n const cipher = crypto.createCipheriv(algorithm, key, effectiveIv);\n let encrypted = cipher.update(inputData, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n\n // Prepend IV to ciphertext so decryption can extract it\n if (prependIv) {\n return effectiveIv.toString('hex') + ':' + encrypted;\n }\n return encrypted;\n}\n\n/**\n * Crypto decryption handler\n * Supports both formats:\n * - New format: \"iv_hex:ciphertext_hex\" (IV prepended, separated by colon)\n * - Legacy format: raw ciphertext_hex (falls back to zero IV for backward compatibility)\n */\nasync function handleCryptoDecrypt(data: {\n data: string;\n algorithm?: string;\n key: string;\n iv?: string;\n}): Promise<string> {\n const { data: encryptedData, algorithm = 'aes-256-cbc', key, iv } = data;\n\n let effectiveIv: Buffer;\n let ciphertext: string;\n\n if (iv) {\n // Explicit IV provided\n effectiveIv = Buffer.from(iv, 'hex');\n ciphertext = encryptedData;\n } else if (encryptedData.includes(':')) {\n // New format: extract prepended IV\n const colonIndex = encryptedData.indexOf(':');\n effectiveIv = Buffer.from(encryptedData.substring(0, colonIndex), 'hex');\n ciphertext = encryptedData.substring(colonIndex + 1);\n } else {\n // Legacy format: fall back to zero IV for backward compatibility\n effectiveIv = Buffer.alloc(16, 0);\n ciphertext = encryptedData;\n }\n\n const decipher = crypto.createDecipheriv(algorithm, key, effectiveIv);\n let decrypted = decipher.update(ciphertext, 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n return decrypted;\n}\n\n/**\n * Data compression handler\n */\nasync function handleDataCompress(data: {\n input: string | Buffer;\n format?: 'gzip' | 'deflate';\n}): Promise<Buffer> {\n const { input, format = 'gzip' } = data;\n\n if (format === 'gzip') {\n return gzip(Buffer.from(input));\n } else {\n return new Promise((resolve, reject) => {\n zlib.deflate(Buffer.from(input), (error, result) => {\n if (error) reject(error);\n else resolve(result);\n });\n });\n }\n}\n\n/**\n * Data decompression handler\n */\nasync function handleDataDecompress(data: {\n input: Buffer;\n format?: 'gzip' | 'deflate';\n}): Promise<Buffer> {\n const { input, format = 'gzip' } = data;\n\n if (format === 'gzip') {\n return gunzip(input);\n } else {\n return new Promise((resolve, reject) => {\n zlib.inflate(input, (error, result) => {\n if (error) reject(error);\n else resolve(result);\n });\n });\n }\n}\n\n/**\n * Heavy computation handler\n */\nasync function handleHeavyComputation(data: any): Promise<any> {\n // This is a placeholder for heavy computation tasks\n // In real applications, this could be:\n // - Complex mathematical calculations\n // - Data processing pipelines\n // - Image processing\n // - Machine learning inference\n // - Large dataset transformations\n\n // Simulate heavy computation\n if (Array.isArray(data)) {\n // Simulate processing a large array\n const result = [];\n for (let i = 0; i < data.length; i++) {\n // Simulate CPU-intensive operation\n let sum = 0;\n for (let j = 0; j < 1000; j++) {\n sum += Math.sin(i) * Math.cos(j) + Math.sqrt(i + j);\n }\n result.push(sum);\n }\n return result;\n }\n\n if (typeof data === 'object' && data.iterations) {\n // Simulate configurable heavy computation\n let result = 0;\n for (let i = 0; i < (data.iterations || 1000000); i++) {\n result += Math.pow(Math.sin(i), 2) + Math.pow(Math.cos(i), 2);\n }\n return { result, iterations: data.iterations };\n }\n\n return data; // Echo back if not recognized\n}\n\n/**\n * Dangerous globals that must be shadowed to prevent access from transformer code.\n * Passed as explicit undefined parameters to new Function() so they shadow the real globals.\n *\n * IMPORTANT: Shadowing alone is NOT sufficient — attackers can bypass it via the prototype\n * chain (e.g., [].constructor.constructor('return process')()). The blocklist patterns\n * below are the primary defense; shadowing is defense-in-depth.\n */\nconst DANGEROUS_GLOBALS = [\n // Node.js core\n 'process',\n 'require',\n 'global',\n 'globalThis',\n 'Buffer',\n 'module',\n // Code execution\n 'eval',\n 'Function',\n // File/module paths\n '__dirname',\n '__filename',\n // Network/IO\n 'fetch',\n 'XMLHttpRequest',\n 'WebSocket',\n // Dynamic import\n 'import',\n // Timer functions (can accept string code like eval)\n 'setTimeout',\n 'setInterval',\n 'setImmediate',\n // Reflection/proxy (can be used to bypass restrictions)\n 'Proxy',\n 'Reflect',\n // Worker thread globals (this file runs in a worker)\n 'parentPort',\n 'workerData',\n // Advanced APIs\n 'WebAssembly',\n 'SharedArrayBuffer',\n];\n\n/**\n * Blocklist patterns that indicate potentially malicious transformer code.\n *\n * These are checked BEFORE execution and are the primary security layer.\n * The prototype chain bypass ([].constructor.constructor) is the #1 attack vector\n * against global shadowing, so we block access to prototype chain navigation.\n */\nconst DANGEROUS_IDENTIFIER_PATTERNS = DANGEROUS_GLOBALS.map(g => new RegExp(`\\\\b${g}\\\\b`));\n\n/**\n * Structural patterns that indicate prototype chain attacks or other bypass attempts.\n * These catch attacks like [].constructor.constructor('return process')().\n */\nconst DANGEROUS_STRUCTURAL_PATTERNS: Array<{ pattern: RegExp; description: string }> = [\n // Prototype chain navigation — the #1 bypass for global shadowing\n // [].constructor.constructor, ''.constructor, ({}).constructor, etc.\n { pattern: /\\.constructor\\b/, description: 'prototype chain access (.constructor)' },\n { pattern: /\\.__proto__\\b/, description: 'prototype chain access (__proto__)' },\n { pattern: /\\.prototype\\b/, description: 'prototype access (.prototype)' },\n // Object reflection methods that can navigate the prototype chain\n { pattern: /\\bgetPrototypeOf\\b/, description: 'prototype chain navigation (getPrototypeOf)' },\n { pattern: /\\bdefineProperty\\b/, description: 'property definition (defineProperty)' },\n { pattern: /\\bsetPrototypeOf\\b/, description: 'prototype mutation (setPrototypeOf)' },\n // Bracket notation with dangerous identifiers — catches obj['constructor'], obj[\"__proto__\"], etc.\n // Narrowly targeted: allows legitimate bracket access like data['first-name'] or ['a','b'] arrays\n {\n pattern:\n /\\[\\s*['\"`]\\s*(constructor|__proto__|prototype|process|require|global|globalThis|eval|Function|import|module|exports|parentPort|workerData)\\s*['\"`]\\s*\\]/,\n description: 'bracket notation access to blocked identifier',\n },\n // String concatenation tricks to reassemble blocked identifiers dynamically\n { pattern: /\\bString\\.fromCharCode\\b/, description: 'dynamic string construction' },\n // Async patterns that could be used for deferred execution\n { pattern: /\\bawait\\b/, description: 'async execution (await)' },\n { pattern: /\\bnew\\s+Promise\\b/, description: 'promise construction' },\n];\n\n/**\n * Validates that transformer code looks like a function expression (arrow or function keyword).\n * Rejects arbitrary statements, assignments to globals, etc.\n */\nfunction validateTransformerShape(code: string): void {\n const trimmed = code.trim();\n\n // Must look like a function expression: starts with ( for arrow/grouped, function keyword,\n // or a single identifier followed by => (arrow shorthand like \"data => data.x\")\n const isArrowShorthand = /^[a-zA-Z_$][a-zA-Z0-9_$]*\\s*=>/.test(trimmed);\n const isArrowParens = trimmed.startsWith('(');\n const isFunctionKeyword = trimmed.startsWith('function');\n\n if (!isArrowShorthand && !isArrowParens && !isFunctionKeyword) {\n throw new Error(\n 'Transformer must be a function expression (arrow function or function keyword)'\n );\n }\n}\n\n/**\n * Checks transformer code against blocklist of dangerous identifiers and structural patterns.\n *\n * Layer 1: Block known dangerous global identifiers (process, require, etc.)\n * Layer 2: Block prototype chain navigation (.constructor, __proto__, etc.)\n * Layer 3: Block bracket notation string access (obj['constructor'] bypass)\n */\nfunction checkDangerousPatterns(code: string): void {\n // Check dangerous global identifiers\n for (let i = 0; i < DANGEROUS_IDENTIFIER_PATTERNS.length; i++) {\n if (DANGEROUS_IDENTIFIER_PATTERNS[i]?.test(code)) {\n throw new Error(\n `Transformer code contains blocked identifier: \"${DANGEROUS_GLOBALS[i]}\". ` +\n 'Transformer functions must be pure data transforms without access to Node.js internals.'\n );\n }\n }\n\n // Check structural bypass patterns (prototype chain, bracket notation, etc.)\n for (const { pattern, description } of DANGEROUS_STRUCTURAL_PATTERNS) {\n if (pattern.test(code)) {\n throw new Error(\n `Transformer code contains blocked pattern: ${description}. ` +\n 'Transformer functions must be pure data transforms using only dot notation on the data parameter.'\n );\n }\n }\n}\n\n/**\n * Execute a transformer in a true V8 isolate sandbox using isolated-vm.\n * This is the secure path — complete memory and CPU isolation.\n *\n * The isolate has no access to Node.js APIs (process, require, fs, etc.)\n * and is limited to 128MB memory with a 10s execution timeout.\n *\n * @see https://www.npmjs.com/package/isolated-vm\n */\nasync function executeInIsolate(inputData: any, transformerCode: string): Promise<any> {\n if (!isolatedVM) {\n const ivmPath = resolveUserPackage('isolated-vm');\n isolatedVM = await import(ivmPath);\n // Handle both default and named exports\n if (isolatedVM.default) {\n isolatedVM = isolatedVM.default;\n }\n }\n\n const isolate = new isolatedVM.Isolate({ memoryLimit: 128 });\n try {\n const context = await isolate.createContext();\n const jail = context.global;\n\n // Copy input data into the isolate via ExternalCopy (deep copy, no shared references).\n // .copyInto() produces a transferable value that can be set on the isolate's global.\n await jail.set('__inputData', new isolatedVM.ExternalCopy(inputData).copyInto());\n\n // Compile the transformer script for execution in the isolate\n const script = await isolate.compileScript(`'use strict'; (${transformerCode})(__inputData);`);\n\n // Execute with timeout and copy the result back out of the isolate.\n // { copy: true } ensures complex objects (arrays, nested objects) are\n // deep-copied back — without it, only primitives transfer.\n const result = await script.run(context, { timeout: 10000, copy: true });\n\n return result;\n } finally {\n isolate.dispose();\n }\n}\n\n/**\n * Execute a transformer using the hardened new Function() path.\n * This is NOT a true sandbox — it is defense-in-depth hardening only.\n */\nfunction executeHardened(inputData: any, transformerCode: string): any {\n // Layer 1: Validate the code looks like a function expression\n validateTransformerShape(transformerCode);\n\n // Layer 2: Check for dangerous global identifiers and structural patterns\n checkDangerousPatterns(transformerCode);\n\n // Layer 3: Create function with dangerous globals explicitly shadowed as undefined\n const transformer = new Function(\n 'data',\n ...DANGEROUS_GLOBALS,\n `'use strict'; return (${transformerCode})(data);`\n );\n\n // Execute with all dangerous globals set to undefined\n return transformer(inputData, ...DANGEROUS_GLOBALS.map(() => undefined));\n}\n\n/**\n * JSON transformation handler.\n *\n * Security model (two paths):\n * 1. If `isolated-vm` is installed: uses a true V8 isolate with memory/CPU limits.\n * This is a real sandbox — the transformer cannot access Node.js APIs.\n * 2. Otherwise: uses a hardened new Function() with layered defenses (shape validation,\n * blocklist, global shadowing, strict mode). This blocks common attacks but is NOT\n * a true sandbox. Do not use this path with untrusted user-provided transformer code.\n *\n * To enable the secure path:\n * npm install isolated-vm\n */\nasync function handleJSONTransform(data: { data: any; transformer: string }): Promise<any> {\n const { data: inputData, transformer: transformerCode } = data;\n\n try {\n if (isolatedVMAvailable) {\n return await executeInIsolate(inputData, transformerCode);\n }\n\n // Hardened fallback — emit a one-time warning\n if (!jsonTransformWarningShown) {\n jsonTransformWarningShown = true;\n // eslint-disable-next-line no-console -- one-time security notice in worker thread\n console.warn(\n '[MoroJS Security] transformJSON is using the hardened fallback (new Function). ' +\n 'This is NOT a secure sandbox for untrusted code. If the transformer or data ' +\n 'originates from user input, install isolated-vm for true V8 isolate sandboxing:\\n' +\n ' npm install isolated-vm\\n' +\n 'See: https://www.npmjs.com/package/isolated-vm'\n );\n }\n\n return executeHardened(inputData, transformerCode);\n } catch (error) {\n throw new Error(\n `Invalid transformer function: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n}\n\n// Worker thread message handling\nif (parentPort) {\n parentPort.on('message', (task: WorkerTask) => {\n void (async () => {\n const result = await executeTask(task);\n\n if (parentPort) {\n parentPort.postMessage(result);\n }\n })();\n });\n}\n"]}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/core/workers/worker.ts"],"names":[],"mappings":"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","sourcesContent":["// Worker Thread Implementation\n// Runs in worker threads to execute CPU-intensive operations\n\nimport { parentPort } from 'worker_threads';\nimport * as crypto from 'crypto';\nimport * as zlib from 'zlib';\nimport { promisify } from 'util';\nimport { resolveUserPackage, isPackageAvailable } from '../utilities/package-utils.js';\n\n// Optional isolated-vm for true V8 isolate sandboxing of JSON transforms\nlet isolatedVM: any = null;\nconst isolatedVMAvailable = isPackageAvailable('isolated-vm');\nlet jsonTransformWarningShown = false;\n\n// Optional JWT import (may not be available)\nlet jwt: any = null;\nconst jwtAvailable = isPackageAvailable('jsonwebtoken');\n\nconst gzip = promisify(zlib.gzip);\nconst gunzip = promisify(zlib.gunzip);\nconst deflate = promisify(zlib.deflate);\nconst inflate = promisify(zlib.inflate);\nconst brotliCompress = promisify(zlib.brotliCompress);\nconst brotliDecompress = promisify(zlib.brotliDecompress);\n\n// Import task types\nimport { WorkerTask, WorkerResult, WORKER_TASKS } from './worker-manager.js';\n\n/**\n * Execute a worker task\n */\nasync function executeTask(task: WorkerTask): Promise<WorkerResult> {\n const startTime = Date.now();\n\n try {\n let result: any;\n\n switch (task.type) {\n case WORKER_TASKS.JWT_VERIFY:\n result = await handleJWTVerify(task.data);\n break;\n\n case WORKER_TASKS.JWT_SIGN:\n result = await handleJWTSign(task.data);\n break;\n\n case WORKER_TASKS.CRYPTO_HASH:\n result = await handleCryptoHash(task.data);\n break;\n\n case WORKER_TASKS.CRYPTO_ENCRYPT:\n result = await handleCryptoEncrypt(task.data);\n break;\n\n case WORKER_TASKS.CRYPTO_DECRYPT:\n result = await handleCryptoDecrypt(task.data);\n break;\n\n case WORKER_TASKS.DATA_COMPRESS:\n result = await handleDataCompress(task.data);\n break;\n\n case WORKER_TASKS.DATA_DECOMPRESS:\n result = await handleDataDecompress(task.data);\n break;\n\n case WORKER_TASKS.HEAVY_COMPUTATION:\n result = await handleHeavyComputation(task.data);\n break;\n\n case WORKER_TASKS.JSON_TRANSFORM:\n result = await handleJSONTransform(task.data);\n break;\n\n default:\n throw new Error(`Unknown task type: ${task.type}`);\n }\n\n return {\n taskId: task.id,\n success: true,\n data: result,\n executionTime: Date.now() - startTime,\n };\n } catch (error) {\n return {\n taskId: task.id,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n executionTime: Date.now() - startTime,\n };\n }\n}\n\n/**\n * JWT verification handler\n */\nasync function handleJWTVerify(data: {\n token: string;\n secret: string;\n options?: any;\n}): Promise<any> {\n if (!jwtAvailable) {\n throw new Error(\n 'JWT verification requires the \"jsonwebtoken\" package. Please install it with: npm install jsonwebtoken @types/jsonwebtoken'\n );\n }\n\n // Lazy load JWT if needed\n if (!jwt) {\n const jwtPath = resolveUserPackage('jsonwebtoken');\n jwt = await import(jwtPath);\n }\n\n const { token, secret, options } = data;\n return jwt.verify(token, secret, options);\n}\n\n/**\n * JWT signing handler\n */\nasync function handleJWTSign(data: {\n payload: any;\n secret: string;\n options?: any;\n}): Promise<string> {\n if (!jwtAvailable) {\n throw new Error(\n 'JWT signing requires the \"jsonwebtoken\" package. Please install it with: npm install jsonwebtoken @types/jsonwebtoken'\n );\n }\n\n // Lazy load JWT if needed\n if (!jwt) {\n const jwtPath = resolveUserPackage('jsonwebtoken');\n jwt = await import(jwtPath);\n }\n\n const { payload, secret, options } = data;\n return jwt.sign(payload, secret, options);\n}\n\n/**\n * Crypto hash handler\n */\nasync function handleCryptoHash(data: { data: string; algorithm?: string }): Promise<string> {\n const { data: inputData, algorithm = 'sha256' } = data;\n return crypto.createHash(algorithm).update(inputData).digest('hex');\n}\n\n/**\n * Crypto encryption handler\n * When no IV is provided, auto-generates a random 16-byte IV and prepends it to the output.\n */\nasync function handleCryptoEncrypt(data: {\n data: string;\n algorithm?: string;\n key: string;\n iv?: string;\n}): Promise<string> {\n const { data: inputData, algorithm = 'aes-256-cbc', key, iv } = data;\n\n let effectiveIv: Buffer;\n let prependIv = false;\n\n if (iv) {\n effectiveIv = Buffer.from(iv, 'hex');\n } else {\n // Auto-generate random IV for security — prepend to output for extraction during decryption\n effectiveIv = crypto.randomBytes(16);\n prependIv = true;\n }\n\n const cipher = crypto.createCipheriv(algorithm, key, effectiveIv);\n let encrypted = cipher.update(inputData, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n\n // Prepend IV to ciphertext so decryption can extract it\n if (prependIv) {\n return effectiveIv.toString('hex') + ':' + encrypted;\n }\n return encrypted;\n}\n\n/**\n * Crypto decryption handler\n * Supports both formats:\n * - New format: \"iv_hex:ciphertext_hex\" (IV prepended, separated by colon)\n * - Legacy format: raw ciphertext_hex (falls back to zero IV for backward compatibility)\n */\nasync function handleCryptoDecrypt(data: {\n data: string;\n algorithm?: string;\n key: string;\n iv?: string;\n}): Promise<string> {\n const { data: encryptedData, algorithm = 'aes-256-cbc', key, iv } = data;\n\n let effectiveIv: Buffer;\n let ciphertext: string;\n\n if (iv) {\n // Explicit IV provided\n effectiveIv = Buffer.from(iv, 'hex');\n ciphertext = encryptedData;\n } else if (encryptedData.includes(':')) {\n // New format: extract prepended IV\n const colonIndex = encryptedData.indexOf(':');\n effectiveIv = Buffer.from(encryptedData.substring(0, colonIndex), 'hex');\n ciphertext = encryptedData.substring(colonIndex + 1);\n } else {\n // Legacy format: fall back to zero IV for backward compatibility\n effectiveIv = Buffer.alloc(16, 0);\n ciphertext = encryptedData;\n }\n\n const decipher = crypto.createDecipheriv(algorithm, key, effectiveIv);\n let decrypted = decipher.update(ciphertext, 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n return decrypted;\n}\n\nexport type CompressionFormat = 'gzip' | 'deflate' | 'brotli';\n\n/**\n * Data compression handler\n * Exported for direct unit testing; normally invoked via the worker task registry.\n */\nexport async function handleDataCompress(data: {\n input: string | Buffer | Uint8Array;\n format?: CompressionFormat;\n}): Promise<Buffer> {\n const { input, format = 'gzip' } = data;\n const buffer = Buffer.from(input as any);\n\n switch (format) {\n case 'gzip':\n return gzip(buffer);\n case 'deflate':\n return deflate(buffer);\n case 'brotli':\n return brotliCompress(buffer);\n default:\n throw new Error(`Unknown compression format: ${format}`);\n }\n}\n\n/**\n * Data decompression handler\n * Exported for direct unit testing; normally invoked via the worker task registry.\n */\nexport async function handleDataDecompress(data: {\n input: Buffer | Uint8Array;\n format?: CompressionFormat;\n}): Promise<Buffer> {\n const { input, format = 'gzip' } = data;\n const buffer = Buffer.from(input as any);\n\n switch (format) {\n case 'gzip':\n return gunzip(buffer);\n case 'deflate':\n return inflate(buffer);\n case 'brotli':\n return brotliDecompress(buffer);\n default:\n throw new Error(`Unknown compression format: ${format}`);\n }\n}\n\n/**\n * Heavy computation handler\n */\nasync function handleHeavyComputation(data: any): Promise<any> {\n // This is a placeholder for heavy computation tasks\n // In real applications, this could be:\n // - Complex mathematical calculations\n // - Data processing pipelines\n // - Image processing\n // - Machine learning inference\n // - Large dataset transformations\n\n // Simulate heavy computation\n if (Array.isArray(data)) {\n // Simulate processing a large array\n const result = [];\n for (let i = 0; i < data.length; i++) {\n // Simulate CPU-intensive operation\n let sum = 0;\n for (let j = 0; j < 1000; j++) {\n sum += Math.sin(i) * Math.cos(j) + Math.sqrt(i + j);\n }\n result.push(sum);\n }\n return result;\n }\n\n if (typeof data === 'object' && data.iterations) {\n // Simulate configurable heavy computation\n let result = 0;\n for (let i = 0; i < (data.iterations || 1000000); i++) {\n result += Math.pow(Math.sin(i), 2) + Math.pow(Math.cos(i), 2);\n }\n return { result, iterations: data.iterations };\n }\n\n return data; // Echo back if not recognized\n}\n\n/**\n * Dangerous globals that must be shadowed to prevent access from transformer code.\n * Passed as explicit undefined parameters to new Function() so they shadow the real globals.\n *\n * IMPORTANT: Shadowing alone is NOT sufficient — attackers can bypass it via the prototype\n * chain (e.g., [].constructor.constructor('return process')()). The blocklist patterns\n * below are the primary defense; shadowing is defense-in-depth.\n */\nconst DANGEROUS_GLOBALS = [\n // Node.js core\n 'process',\n 'require',\n 'global',\n 'globalThis',\n 'Buffer',\n 'module',\n // Code execution\n 'eval',\n 'Function',\n // File/module paths\n '__dirname',\n '__filename',\n // Network/IO\n 'fetch',\n 'XMLHttpRequest',\n 'WebSocket',\n // Dynamic import\n 'import',\n // Timer functions (can accept string code like eval)\n 'setTimeout',\n 'setInterval',\n 'setImmediate',\n // Reflection/proxy (can be used to bypass restrictions)\n 'Proxy',\n 'Reflect',\n // Worker thread globals (this file runs in a worker)\n 'parentPort',\n 'workerData',\n // Advanced APIs\n 'WebAssembly',\n 'SharedArrayBuffer',\n];\n\n/**\n * Blocklist patterns that indicate potentially malicious transformer code.\n *\n * These are checked BEFORE execution and are the primary security layer.\n * The prototype chain bypass ([].constructor.constructor) is the #1 attack vector\n * against global shadowing, so we block access to prototype chain navigation.\n */\nconst DANGEROUS_IDENTIFIER_PATTERNS = DANGEROUS_GLOBALS.map(g => new RegExp(`\\\\b${g}\\\\b`));\n\n/**\n * Structural patterns that indicate prototype chain attacks or other bypass attempts.\n * These catch attacks like [].constructor.constructor('return process')().\n */\nconst DANGEROUS_STRUCTURAL_PATTERNS: Array<{ pattern: RegExp; description: string }> = [\n // Prototype chain navigation — the #1 bypass for global shadowing\n // [].constructor.constructor, ''.constructor, ({}).constructor, etc.\n { pattern: /\\.constructor\\b/, description: 'prototype chain access (.constructor)' },\n { pattern: /\\.__proto__\\b/, description: 'prototype chain access (__proto__)' },\n { pattern: /\\.prototype\\b/, description: 'prototype access (.prototype)' },\n // Object reflection methods that can navigate the prototype chain\n { pattern: /\\bgetPrototypeOf\\b/, description: 'prototype chain navigation (getPrototypeOf)' },\n { pattern: /\\bdefineProperty\\b/, description: 'property definition (defineProperty)' },\n { pattern: /\\bsetPrototypeOf\\b/, description: 'prototype mutation (setPrototypeOf)' },\n // Bracket notation with dangerous identifiers — catches obj['constructor'], obj[\"__proto__\"], etc.\n // Narrowly targeted: allows legitimate bracket access like data['first-name'] or ['a','b'] arrays\n {\n pattern:\n /\\[\\s*['\"`]\\s*(constructor|__proto__|prototype|process|require|global|globalThis|eval|Function|import|module|exports|parentPort|workerData)\\s*['\"`]\\s*\\]/,\n description: 'bracket notation access to blocked identifier',\n },\n // String concatenation tricks to reassemble blocked identifiers dynamically\n { pattern: /\\bString\\.fromCharCode\\b/, description: 'dynamic string construction' },\n // Async patterns that could be used for deferred execution\n { pattern: /\\bawait\\b/, description: 'async execution (await)' },\n { pattern: /\\bnew\\s+Promise\\b/, description: 'promise construction' },\n];\n\n/**\n * Validates that transformer code looks like a function expression (arrow or function keyword).\n * Rejects arbitrary statements, assignments to globals, etc.\n */\nfunction validateTransformerShape(code: string): void {\n const trimmed = code.trim();\n\n // Must look like a function expression: starts with ( for arrow/grouped, function keyword,\n // or a single identifier followed by => (arrow shorthand like \"data => data.x\")\n const isArrowShorthand = /^[a-zA-Z_$][a-zA-Z0-9_$]*\\s*=>/.test(trimmed);\n const isArrowParens = trimmed.startsWith('(');\n const isFunctionKeyword = trimmed.startsWith('function');\n\n if (!isArrowShorthand && !isArrowParens && !isFunctionKeyword) {\n throw new Error(\n 'Transformer must be a function expression (arrow function or function keyword)'\n );\n }\n}\n\n/**\n * Checks transformer code against blocklist of dangerous identifiers and structural patterns.\n *\n * Layer 1: Block known dangerous global identifiers (process, require, etc.)\n * Layer 2: Block prototype chain navigation (.constructor, __proto__, etc.)\n * Layer 3: Block bracket notation string access (obj['constructor'] bypass)\n */\nfunction checkDangerousPatterns(code: string): void {\n // Check dangerous global identifiers\n for (let i = 0; i < DANGEROUS_IDENTIFIER_PATTERNS.length; i++) {\n if (DANGEROUS_IDENTIFIER_PATTERNS[i]?.test(code)) {\n throw new Error(\n `Transformer code contains blocked identifier: \"${DANGEROUS_GLOBALS[i]}\". ` +\n 'Transformer functions must be pure data transforms without access to Node.js internals.'\n );\n }\n }\n\n // Check structural bypass patterns (prototype chain, bracket notation, etc.)\n for (const { pattern, description } of DANGEROUS_STRUCTURAL_PATTERNS) {\n if (pattern.test(code)) {\n throw new Error(\n `Transformer code contains blocked pattern: ${description}. ` +\n 'Transformer functions must be pure data transforms using only dot notation on the data parameter.'\n );\n }\n }\n}\n\n/**\n * Execute a transformer in a true V8 isolate sandbox using isolated-vm.\n * This is the secure path — complete memory and CPU isolation.\n *\n * The isolate has no access to Node.js APIs (process, require, fs, etc.)\n * and is limited to 128MB memory with a 10s execution timeout.\n *\n * @see https://www.npmjs.com/package/isolated-vm\n */\nasync function executeInIsolate(inputData: any, transformerCode: string): Promise<any> {\n if (!isolatedVM) {\n const ivmPath = resolveUserPackage('isolated-vm');\n isolatedVM = await import(ivmPath);\n // Handle both default and named exports\n if (isolatedVM.default) {\n isolatedVM = isolatedVM.default;\n }\n }\n\n const isolate = new isolatedVM.Isolate({ memoryLimit: 128 });\n try {\n const context = await isolate.createContext();\n const jail = context.global;\n\n // Copy input data into the isolate via ExternalCopy (deep copy, no shared references).\n // .copyInto() produces a transferable value that can be set on the isolate's global.\n await jail.set('__inputData', new isolatedVM.ExternalCopy(inputData).copyInto());\n\n // Compile the transformer script for execution in the isolate\n const script = await isolate.compileScript(`'use strict'; (${transformerCode})(__inputData);`);\n\n // Execute with timeout and copy the result back out of the isolate.\n // { copy: true } ensures complex objects (arrays, nested objects) are\n // deep-copied back — without it, only primitives transfer.\n const result = await script.run(context, { timeout: 10000, copy: true });\n\n return result;\n } finally {\n isolate.dispose();\n }\n}\n\n/**\n * Execute a transformer using the hardened new Function() path.\n * This is NOT a true sandbox — it is defense-in-depth hardening only.\n */\nfunction executeHardened(inputData: any, transformerCode: string): any {\n // Layer 1: Validate the code looks like a function expression\n validateTransformerShape(transformerCode);\n\n // Layer 2: Check for dangerous global identifiers and structural patterns\n checkDangerousPatterns(transformerCode);\n\n // Layer 3: Create function with dangerous globals explicitly shadowed as undefined\n const transformer = new Function(\n 'data',\n ...DANGEROUS_GLOBALS,\n `'use strict'; return (${transformerCode})(data);`\n );\n\n // Execute with all dangerous globals set to undefined\n return transformer(inputData, ...DANGEROUS_GLOBALS.map(() => undefined));\n}\n\n/**\n * JSON transformation handler.\n *\n * Security model (two paths):\n * 1. If `isolated-vm` is installed: uses a true V8 isolate with memory/CPU limits.\n * This is a real sandbox — the transformer cannot access Node.js APIs.\n * 2. Otherwise: uses a hardened new Function() with layered defenses (shape validation,\n * blocklist, global shadowing, strict mode). This blocks common attacks but is NOT\n * a true sandbox. Do not use this path with untrusted user-provided transformer code.\n *\n * To enable the secure path:\n * npm install isolated-vm\n */\nasync function handleJSONTransform(data: { data: any; transformer: string }): Promise<any> {\n const { data: inputData, transformer: transformerCode } = data;\n\n try {\n if (isolatedVMAvailable) {\n return await executeInIsolate(inputData, transformerCode);\n }\n\n // Hardened fallback — emit a one-time warning\n if (!jsonTransformWarningShown) {\n jsonTransformWarningShown = true;\n // eslint-disable-next-line no-console -- one-time security notice in worker thread\n console.warn(\n '[MoroJS Security] transformJSON is using the hardened fallback (new Function). ' +\n 'This is NOT a secure sandbox for untrusted code. If the transformer or data ' +\n 'originates from user input, install isolated-vm for true V8 isolate sandboxing:\\n' +\n ' npm install isolated-vm\\n' +\n 'See: https://www.npmjs.com/package/isolated-vm'\n );\n }\n\n return executeHardened(inputData, transformerCode);\n } catch (error) {\n throw new Error(\n `Invalid transformer function: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n}\n\n// Worker thread message handling\nif (parentPort) {\n parentPort.on('message', (task: WorkerTask) => {\n void (async () => {\n const result = await executeTask(task);\n\n if (parentPort) {\n parentPort.postMessage(result);\n }\n })();\n });\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -9,10 +9,47 @@ export { NodeRuntimeAdapter, VercelEdgeAdapter, AWSLambdaAdapter, CloudflareWork
9
9
  export type { LambdaEvent, LambdaContext, LambdaResponse, } from './core/runtime/aws-lambda-adapter.js';
10
10
  export type { WorkersEnv, WorkersContext } from './core/runtime/cloudflare-workers-adapter.js';
11
11
  export { MoroHttpServer, UWebSocketsHttpServer, MoroEngineServer } from './core/http/index.js';
12
- export { builtInMiddleware, simpleMiddleware } from './core/middleware/built-in/index.js';
12
+ export { middleware } from './core/middleware/built-in/index.js';
13
+ /** @deprecated Use `middleware` instead. `builtInMiddleware` will be removed in a future release. */
14
+ export declare const builtInMiddleware: {
15
+ auth: (options: import("./types/auth.js").AuthOptions) => import("./types/hooks.js").MiddlewareInterface;
16
+ rateLimit: (options?: {
17
+ windowMs?: number;
18
+ max?: number;
19
+ message?: string;
20
+ }) => import("./types/hooks.js").MiddlewareInterface;
21
+ cors: (options?: import("./core/middleware/built-in/cors/core.js").CORSOptions) => import("./types/hooks.js").MiddlewareInterface;
22
+ validation: () => import("./types/hooks.js").MiddlewareInterface;
23
+ requestLogger: typeof import("./core/middleware/index.js").createRequestLoggerMiddleware;
24
+ performanceMonitor: typeof import("./core/middleware/index.js").createPerformanceMonitorMiddleware;
25
+ errorTracker: typeof import("./core/middleware/index.js").createErrorTrackerMiddleware;
26
+ prometheus: typeof import("./core/middleware/index.js").createPrometheusMiddleware;
27
+ cloudWatch: typeof import("./core/middleware/index.js").createCloudWatchMiddleware;
28
+ cookie: (_config?: import("./core/middleware/built-in/cookie/hook.js").CookieConfig) => import("./types/hooks.js").MiddlewareInterface;
29
+ csrf: (options?: import("./core/middleware/built-in/csrf/core.js").CSRFOptions) => import("./types/hooks.js").MiddlewareInterface;
30
+ csp: (options?: import("./core/middleware/built-in/csp/core.js").CSPOptions) => import("./types/hooks.js").MiddlewareInterface;
31
+ sse: (options?: import("./core/middleware/built-in/sse/core.js").SSEOptions) => import("./types/hooks.js").MiddlewareInterface;
32
+ session: (options?: import("./core/middleware/built-in/session/core.js").SessionOptions) => import("./types/hooks.js").MiddlewareInterface;
33
+ cache: (options?: import("./types/cache.js").CacheOptions) => import("./types/hooks.js").MiddlewareInterface;
34
+ cdn: (options?: import("./types/cdn.js").CDNOptions) => import("./types/hooks.js").MiddlewareInterface;
35
+ graphql: (options: import("./core/graphql/types.js").GraphQLOptions) => import("./types/hooks.js").MiddlewareInterface;
36
+ http2: {
37
+ push: typeof import("./core/middleware/built-in/http2/middleware.js").createHttp2PushMiddleware;
38
+ };
39
+ helmet: typeof import("./core/middleware/built-in/helmet/middleware.js").createHelmetMiddleware;
40
+ compression: typeof import("./core/middleware/built-in/compression/middleware.js").createCompressionMiddleware;
41
+ bodySize: typeof import("./core/middleware/built-in/body-size/middleware.js").createBodySizeMiddleware;
42
+ staticFiles: typeof import("./core/middleware/built-in/static/middleware.js").createStaticMiddleware;
43
+ upload: typeof import("./core/middleware/built-in/upload/middleware.js").createUploadMiddleware;
44
+ template: typeof import("./core/middleware/built-in/template/middleware.js").createTemplateMiddleware;
45
+ range: typeof import("./core/middleware/built-in/range/middleware.js").createRangeMiddleware;
46
+ };
47
+ export { WorkerManager, getWorkerManager, workerTasks } from './core/workers/index.js';
48
+ export type { WorkerTask, WorkerResult } from './core/workers/index.js';
49
+ export { ObjectPool, LRUCache, ObjectPoolManager } from './core/pooling/index.js';
13
50
  export { WebSocketManager, ServiceRegistry } from './core/networking/index.js';
14
51
  export type { ServiceInfo, ServiceDiscoveryOptions } from './core/networking/service-discovery.js';
15
- export { Container, FunctionalContainer, TypedServiceReference, ServiceScope, ServiceLifecycle, withLogging, withCaching, withRetry, withTimeout, CircuitBreaker, HookManager, HOOK_EVENTS, middleware, isPackageAvailable, resolveUserPackage, createUserRequire, response, ResponseBuilder, } from './core/utilities/index.js';
52
+ export { Container, FunctionalContainer, TypedServiceReference, ServiceScope, ServiceLifecycle, withLogging, withCaching, withRetry, withTimeout, CircuitBreaker, HookManager, HOOK_EVENTS, isPackageAvailable, resolveUserPackage, createUserRequire, response, ResponseBuilder, } from './core/utilities/index.js';
16
53
  export type { ApiSuccessResponse, ApiErrorResponse, ApiResponse, ResponseValidationErrorDetail, } from './core/utilities/index.js';
17
54
  export { MoroEventBus } from './core/events/index.js';
18
55
  export type { EventContext, EventPayload, EventBusOptions, ModuleEventBus, GlobalEventBus, EventMetrics, SystemEvents, EventHandler, } from './types/events.js';
package/dist/index.js CHANGED
@@ -10,11 +10,23 @@ requireAuth, requireRole, requirePermission, requireAdmin, authUtils, authRespon
10
10
  export { NodeRuntimeAdapter, VercelEdgeAdapter, AWSLambdaAdapter, CloudflareWorkersAdapter, createRuntimeAdapter, createNodeHandler, createEdgeHandler, createLambdaHandler, createWorkerHandler, } from './core/runtime/index.js';
11
11
  // Core exports
12
12
  export { MoroHttpServer, UWebSocketsHttpServer, MoroEngineServer } from './core/http/index.js';
13
- export { builtInMiddleware, simpleMiddleware } from './core/middleware/built-in/index.js';
13
+ export { middleware } from './core/middleware/built-in/index.js';
14
+ // Re-declared (not re-exported) so the @deprecated tag reaches consumers:
15
+ // TypeScript does not propagate deprecation through `export { x } from '...'`,
16
+ // only through an actual declaration. Framework-internal code imports
17
+ // builtInMiddleware from ./core/middleware/built-in/index.js directly, where
18
+ // the declaration carries no tag, so this flags user code only.
19
+ import { builtInMiddleware as builtInMiddlewareImpl } from './core/middleware/built-in/index.js';
20
+ /** @deprecated Use `middleware` instead. `builtInMiddleware` will be removed in a future release. */
21
+ export const builtInMiddleware = builtInMiddlewareImpl;
22
+ // Worker Threads (CPU-intensive task offloading)
23
+ export { WorkerManager, getWorkerManager, workerTasks } from './core/workers/index.js';
24
+ // Object Pooling & Caching
25
+ export { ObjectPool, LRUCache, ObjectPoolManager } from './core/pooling/index.js';
14
26
  // Networking System
15
27
  export { WebSocketManager, ServiceRegistry } from './core/networking/index.js';
16
28
  // Utilities and Container System
17
- export { Container, FunctionalContainer, TypedServiceReference, ServiceScope, ServiceLifecycle, withLogging, withCaching, withRetry, withTimeout, CircuitBreaker, HookManager, HOOK_EVENTS, middleware, isPackageAvailable, resolveUserPackage, createUserRequire,
29
+ export { Container, FunctionalContainer, TypedServiceReference, ServiceScope, ServiceLifecycle, withLogging, withCaching, withRetry, withTimeout, CircuitBreaker, HookManager, HOOK_EVENTS, isPackageAvailable, resolveUserPackage, createUserRequire,
18
30
  // Standardized Response Helpers (namespace object only)
19
31
  response, ResponseBuilder, } from './core/utilities/index.js';
20
32
  // Event System
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// MoroJS Framework - Main Entry Point\nexport {\n Moro,\n Moro as MoroCore,\n createApp,\n createAppNode,\n createAppEdge,\n createAppLambda,\n createAppWorker,\n getApp,\n RouteGroup,\n} from './moro.js';\n\nexport type { MoroOptions } from './core/framework.js';\n\n// Export auth types and middleware\nexport type {\n AuthOptions,\n AuthProvider,\n AuthUser,\n AuthSession,\n AuthRequest,\n AuthAccount,\n AuthJWT,\n AuthCallbacks,\n AuthEvents,\n AuthPages,\n AuthAdapter,\n OAuthProvider,\n CredentialsProvider,\n EmailProvider,\n SignInOptions,\n SignOutOptions,\n} from './types/auth.js';\n\n// Export native @auth/morojs adapter\nexport { createAuthMiddleware, MoroJSAuth } from './core/auth/morojs-adapter.js';\n\n// Export Auth middleware and providers\nexport {\n auth,\n providers,\n twoFactor,\n organization,\n anonymous,\n accountLinking,\n rateLimit,\n bearerToken,\n // Route guards and helpers (referenced by the auth docs as package-root\n // imports; must be re-exported here to be part of the public API).\n requireAuth,\n requireRole,\n requirePermission,\n requireAdmin,\n authUtils,\n authResponses,\n extendedProviders,\n enterpriseProviders,\n} from './core/middleware/built-in/auth/index.js';\nexport type {\n TwoFactorAuthOptions,\n OrganizationOptions,\n AnonymousOptions,\n AccountLinkingOptions,\n RateLimitOptions,\n BearerTokenOptions,\n} from './core/middleware/built-in/auth/index.js';\n\n// Runtime system exports\nexport type {\n RuntimeType,\n RuntimeAdapter,\n RuntimeConfig,\n RuntimeHttpResponse,\n} from './types/runtime.js';\n\nexport {\n NodeRuntimeAdapter,\n VercelEdgeAdapter,\n AWSLambdaAdapter,\n CloudflareWorkersAdapter,\n createRuntimeAdapter,\n createNodeHandler,\n createEdgeHandler,\n createLambdaHandler,\n createWorkerHandler,\n} from './core/runtime/index.js';\n\n// Runtime-specific types\nexport type {\n LambdaEvent,\n LambdaContext,\n LambdaResponse,\n} from './core/runtime/aws-lambda-adapter.js';\nexport type { WorkersEnv, WorkersContext } from './core/runtime/cloudflare-workers-adapter.js';\n\n// Core exports\nexport { MoroHttpServer, UWebSocketsHttpServer, MoroEngineServer } from './core/http/index.js';\nexport { builtInMiddleware, simpleMiddleware } from './core/middleware/built-in/index.js';\n\n// Networking System\nexport { WebSocketManager, ServiceRegistry } from './core/networking/index.js';\nexport type { ServiceInfo, ServiceDiscoveryOptions } from './core/networking/service-discovery.js';\n\n// Utilities and Container System\nexport {\n Container,\n FunctionalContainer,\n TypedServiceReference,\n ServiceScope,\n ServiceLifecycle,\n withLogging,\n withCaching,\n withRetry,\n withTimeout,\n CircuitBreaker,\n HookManager,\n HOOK_EVENTS,\n middleware,\n isPackageAvailable,\n resolveUserPackage,\n createUserRequire,\n // Standardized Response Helpers (namespace object only)\n response,\n ResponseBuilder,\n} from './core/utilities/index.js';\n\n// Response helper types\nexport type {\n ApiSuccessResponse,\n ApiErrorResponse,\n ApiResponse,\n ResponseValidationErrorDetail,\n} from './core/utilities/index.js';\n\n// Event System\nexport { MoroEventBus } from './core/events/index.js';\nexport type {\n EventContext,\n EventPayload,\n EventBusOptions,\n ModuleEventBus,\n GlobalEventBus,\n EventMetrics,\n SystemEvents,\n EventHandler,\n} from './types/events.js';\n\n// Logger System\nexport { createFrameworkLogger, logger } from './core/logger/index.js';\n\n// Universal Validation System\nexport {\n validate,\n body,\n query,\n params,\n combineSchemas,\n z,\n handleValidationError,\n normalizeErrors,\n} from './core/validation/index.js';\n\nexport type {\n ValidationConfig,\n ValidationResult,\n ValidationErrorDetail,\n ValidatedRequest,\n ValidationErrorHandler,\n ValidationErrorContext,\n ValidationErrorResponse,\n ValidationErrorDetailType,\n} from './core/validation/index.js';\n\n// Validation Interfaces and Adapters\nexport type {\n ValidationSchema,\n ValidationError,\n InferSchemaType,\n} from './core/validation/schema-interface.js';\nexport { normalizeValidationError } from './core/validation/schema-interface.js';\nexport { joi, yup, fn as customValidator, classValidator } from './core/validation/adapters.js';\n\n// Module System\nexport {\n defineModule,\n ModuleLoader,\n ModuleDiscovery,\n autoDiscoverModuleDirectories,\n} from './core/modules/index.js';\nexport type { ModuleDefinition, ModuleRoute, ModuleSocket, ModuleConfig } from './types/module.js';\n\n// WebSocket Adapter System\nexport type {\n WebSocketAdapter,\n WebSocketAdapterOptions,\n WebSocketNamespace,\n WebSocketConnection,\n WebSocketEmitter,\n WebSocketMiddleware,\n WebSocketEventHandler,\n} from './core/networking/websocket-adapter.js';\n\n// Built-in WebSocket Adapters\nexport {\n SocketIOAdapter,\n WSAdapter,\n UWebSocketsAdapter,\n} from './core/networking/adapters/index.js';\n\n// Intelligent Routing System\nexport { createRoute, defineRoute, EXECUTION_PHASES } from './core/routing/index.js';\nexport { IntelligentRoutingManager, RouteRegistry } from './core/routing/app-integration.js';\nexport type {\n RouteBuilder,\n RouteSchema,\n CompiledRoute,\n HttpMethod,\n AuthConfig,\n RateLimitConfig,\n CacheConfig,\n MiddlewarePhases,\n ExecutionPhase,\n} from './core/routing/index.js';\n\n// Documentation System\nexport {\n DocumentationSystem,\n AppDocumentationManager,\n createDocumentationSystem,\n generateDocsFromIntelligentRoutes,\n} from './core/docs/index.js';\nexport type { DocsConfig } from './core/docs/index.js';\n\n// Configuration utilities\nexport {\n getConfig,\n createModuleConfig,\n getEnvVar,\n getEnvArray,\n getEnvJson,\n isDevelopment,\n isProduction,\n isStaging,\n requireEnvVars,\n envVar,\n getConfigValue,\n} from './core/config/utils.js';\n\nexport {\n initializeConfig,\n getGlobalConfig,\n isConfigInitialized,\n resetConfig,\n} from './core/config/index.js';\n\n// Export configuration types for TypeScript users\nexport type { AppConfig, DeepPartial, OriginFunction } from './core/config/index.js';\n\n// GraphQL System - Only export types and adapter\n// The core classes are lazy-loaded internally via app.graphqlInit()\nexport type {\n GraphQLContext,\n GraphQLResolver,\n GraphQLSubscriptionResolver,\n GraphQLSchemaBuilderOptions,\n GraphQLResolvers,\n GraphQLExecutionOptions,\n GraphQLOptions,\n GraphQLPlugin,\n GraphQLRequestContext,\n GraphQLRequestListener,\n GraphQLRequest,\n GraphQLResponse,\n GraphQLMetrics,\n GraphQLSubscriptionOptions,\n DataLoaderOptions,\n ComplexityEstimator,\n QueryComplexityOptions,\n DepthLimitOptions,\n} from './core/graphql/types.js';\n\nexport type { GraphQLAdapter, GraphQLStats } from './core/graphql/adapter.js';\nexport { GraphQLJsAdapter } from './core/graphql/adapters/graphql-js-adapter.js';\n\n// GraphQL helpers (these don't import graphql directly at module level)\nexport {\n createPothosBuilder,\n isPothosAvailable,\n isPothosSchema,\n pothosToSchema,\n createComplexityPlugin,\n createDepthLimitPlugin,\n createDataLoader,\n} from './core/middleware/built-in/graphql/helpers.js';\n\n// Job System\nexport {\n JobScheduler,\n JobHealthChecker,\n CronParser,\n parseInterval,\n formatDuration,\n everyInterval,\n cronSchedule,\n oneTimeAt,\n createJob,\n} from './core/jobs/index.js';\n\nexport type {\n JobSchedule,\n JobOptions,\n SimpleJobOptions,\n JobFunction,\n JobMetrics,\n SchedulerStats,\n JobHealth,\n JobHealthStatus,\n JobContext,\n JobExecution,\n JobState,\n JobSchedulerOptions,\n ExecutionContext,\n ExecutionResult,\n} from './core/jobs/index.js';\n\n// Middleware System\nexport { MiddlewareManager } from './core/middleware/index.js';\nexport type { MiddlewareInterface, MoroMiddleware } from './core/middleware/index.js';\n\n// Body parsers\nexport { json, urlencoded } from './core/middleware/built-in/body-parsers/index.js';\n\n// Standalone router — `createRouter()` is the canonical factory; `Router` is an\n// alias kept callable without `new` so Express-style named imports\n// (`import { Router } from '...'`; `const r = Router();`) work unchanged.\nexport { createRouter, createRouter as Router, MoroRouter } from './core/routing/create-router.js';\n\n// Types\nexport type * from './types/core.js';\nexport type * from './types/http.js';\nexport type * from './types/hooks.js';\nexport type * from './types/cache.js';\nexport type * from './types/cdn.js';\nexport type * from './types/database.js';\nexport type * from './types/logger.js';\nexport type * from './types/session.js';\nexport type * from './types/discovery.js';\n\n// Adapters\nexport * from './core/middleware/built-in/cache/adapters/index.js';\nexport * from './core/middleware/built-in/cdn/adapters/index.js';\nexport * from './core/database/adapters/index.js';\n\n// Re-export commonly used types for convenience\nexport type { CacheAdapter, CacheOptions, CacheStrategy } from './types/cache.js';\nexport type { CDNAdapter, CDNOptions } from './types/cdn.js';\nexport type { DatabaseAdapter, DatabaseTransaction, DatabaseConfig } from './types/database.js';\nexport type { CookieOptions } from './types/http.js';\n\n// gRPC System - Lazy loaded, only types exported\nexport type {\n GrpcOptions,\n GrpcCall,\n GrpcCallback,\n GrpcMetadata,\n GrpcError,\n GrpcStatusCode,\n GrpcCredentials,\n GrpcServer,\n GrpcClient,\n GrpcClientOptions,\n GrpcInterceptor,\n ServiceImplementation,\n ServiceDefinition,\n ServiceRegistration,\n MethodDefinition,\n UnaryHandler,\n ServerStreamingHandler,\n ClientStreamingHandler,\n BidirectionalStreamingHandler,\n GrpcHandler,\n GrpcStats,\n HealthCheckStatus,\n HealthCheckResponse,\n ProtoLoadOptions,\n} from './core/grpc/types.js';\n\nexport type { GrpcAdapter } from './core/grpc/grpc-adapter.js';\nexport { GrpcJsAdapter } from './core/grpc/adapters/index.js';\n\n// gRPC Middleware\nexport {\n grpcAuth,\n grpcRequirePermission,\n grpcRequireRole,\n extractTokenFromMetadata,\n grpcLogger,\n grpcSimpleLogger,\n grpcDetailedLogger,\n grpcValidate,\n grpcValidateHandler,\n} from './core/grpc/index.js';\n\n// Mail System - Lazy loaded, only types exported\nexport type {\n MailConfig,\n MailOptions,\n MailResult,\n MailAdapter,\n MailAdapterType,\n EmailAddress,\n EmailAttachment,\n TemplateConfig,\n TemplateEngine,\n MailQueueConfig,\n NodemailerConnection,\n SendGridConnection,\n SESConnection,\n ResendConnection,\n} from './core/mail/types.js';\n\nexport { BaseMailAdapter } from './core/mail/mail-adapter.js';\nexport {\n ConsoleAdapter,\n NodemailerAdapter,\n SendGridAdapter,\n SESAdapter,\n ResendAdapter,\n} from './core/mail/adapters/index.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// MoroJS Framework - Main Entry Point\nexport {\n Moro,\n Moro as MoroCore,\n createApp,\n createAppNode,\n createAppEdge,\n createAppLambda,\n createAppWorker,\n getApp,\n RouteGroup,\n} from './moro.js';\n\nexport type { MoroOptions } from './core/framework.js';\n\n// Export auth types and middleware\nexport type {\n AuthOptions,\n AuthProvider,\n AuthUser,\n AuthSession,\n AuthRequest,\n AuthAccount,\n AuthJWT,\n AuthCallbacks,\n AuthEvents,\n AuthPages,\n AuthAdapter,\n OAuthProvider,\n CredentialsProvider,\n EmailProvider,\n SignInOptions,\n SignOutOptions,\n} from './types/auth.js';\n\n// Export native @auth/morojs adapter\nexport { createAuthMiddleware, MoroJSAuth } from './core/auth/morojs-adapter.js';\n\n// Export Auth middleware and providers\nexport {\n auth,\n providers,\n twoFactor,\n organization,\n anonymous,\n accountLinking,\n rateLimit,\n bearerToken,\n // Route guards and helpers (referenced by the auth docs as package-root\n // imports; must be re-exported here to be part of the public API).\n requireAuth,\n requireRole,\n requirePermission,\n requireAdmin,\n authUtils,\n authResponses,\n extendedProviders,\n enterpriseProviders,\n} from './core/middleware/built-in/auth/index.js';\nexport type {\n TwoFactorAuthOptions,\n OrganizationOptions,\n AnonymousOptions,\n AccountLinkingOptions,\n RateLimitOptions,\n BearerTokenOptions,\n} from './core/middleware/built-in/auth/index.js';\n\n// Runtime system exports\nexport type {\n RuntimeType,\n RuntimeAdapter,\n RuntimeConfig,\n RuntimeHttpResponse,\n} from './types/runtime.js';\n\nexport {\n NodeRuntimeAdapter,\n VercelEdgeAdapter,\n AWSLambdaAdapter,\n CloudflareWorkersAdapter,\n createRuntimeAdapter,\n createNodeHandler,\n createEdgeHandler,\n createLambdaHandler,\n createWorkerHandler,\n} from './core/runtime/index.js';\n\n// Runtime-specific types\nexport type {\n LambdaEvent,\n LambdaContext,\n LambdaResponse,\n} from './core/runtime/aws-lambda-adapter.js';\nexport type { WorkersEnv, WorkersContext } from './core/runtime/cloudflare-workers-adapter.js';\n\n// Core exports\nexport { MoroHttpServer, UWebSocketsHttpServer, MoroEngineServer } from './core/http/index.js';\nexport { middleware } from './core/middleware/built-in/index.js';\n\n// Re-declared (not re-exported) so the @deprecated tag reaches consumers:\n// TypeScript does not propagate deprecation through `export { x } from '...'`,\n// only through an actual declaration. Framework-internal code imports\n// builtInMiddleware from ./core/middleware/built-in/index.js directly, where\n// the declaration carries no tag, so this flags user code only.\nimport { builtInMiddleware as builtInMiddlewareImpl } from './core/middleware/built-in/index.js';\n/** @deprecated Use `middleware` instead. `builtInMiddleware` will be removed in a future release. */\nexport const builtInMiddleware = builtInMiddlewareImpl;\n\n// Worker Threads (CPU-intensive task offloading)\nexport { WorkerManager, getWorkerManager, workerTasks } from './core/workers/index.js';\nexport type { WorkerTask, WorkerResult } from './core/workers/index.js';\n\n// Object Pooling & Caching\nexport { ObjectPool, LRUCache, ObjectPoolManager } from './core/pooling/index.js';\n\n// Networking System\nexport { WebSocketManager, ServiceRegistry } from './core/networking/index.js';\nexport type { ServiceInfo, ServiceDiscoveryOptions } from './core/networking/service-discovery.js';\n\n// Utilities and Container System\nexport {\n Container,\n FunctionalContainer,\n TypedServiceReference,\n ServiceScope,\n ServiceLifecycle,\n withLogging,\n withCaching,\n withRetry,\n withTimeout,\n CircuitBreaker,\n HookManager,\n HOOK_EVENTS,\n isPackageAvailable,\n resolveUserPackage,\n createUserRequire,\n // Standardized Response Helpers (namespace object only)\n response,\n ResponseBuilder,\n} from './core/utilities/index.js';\n\n// Response helper types\nexport type {\n ApiSuccessResponse,\n ApiErrorResponse,\n ApiResponse,\n ResponseValidationErrorDetail,\n} from './core/utilities/index.js';\n\n// Event System\nexport { MoroEventBus } from './core/events/index.js';\nexport type {\n EventContext,\n EventPayload,\n EventBusOptions,\n ModuleEventBus,\n GlobalEventBus,\n EventMetrics,\n SystemEvents,\n EventHandler,\n} from './types/events.js';\n\n// Logger System\nexport { createFrameworkLogger, logger } from './core/logger/index.js';\n\n// Universal Validation System\nexport {\n validate,\n body,\n query,\n params,\n combineSchemas,\n z,\n handleValidationError,\n normalizeErrors,\n} from './core/validation/index.js';\n\nexport type {\n ValidationConfig,\n ValidationResult,\n ValidationErrorDetail,\n ValidatedRequest,\n ValidationErrorHandler,\n ValidationErrorContext,\n ValidationErrorResponse,\n ValidationErrorDetailType,\n} from './core/validation/index.js';\n\n// Validation Interfaces and Adapters\nexport type {\n ValidationSchema,\n ValidationError,\n InferSchemaType,\n} from './core/validation/schema-interface.js';\nexport { normalizeValidationError } from './core/validation/schema-interface.js';\nexport { joi, yup, fn as customValidator, classValidator } from './core/validation/adapters.js';\n\n// Module System\nexport {\n defineModule,\n ModuleLoader,\n ModuleDiscovery,\n autoDiscoverModuleDirectories,\n} from './core/modules/index.js';\nexport type { ModuleDefinition, ModuleRoute, ModuleSocket, ModuleConfig } from './types/module.js';\n\n// WebSocket Adapter System\nexport type {\n WebSocketAdapter,\n WebSocketAdapterOptions,\n WebSocketNamespace,\n WebSocketConnection,\n WebSocketEmitter,\n WebSocketMiddleware,\n WebSocketEventHandler,\n} from './core/networking/websocket-adapter.js';\n\n// Built-in WebSocket Adapters\nexport {\n SocketIOAdapter,\n WSAdapter,\n UWebSocketsAdapter,\n} from './core/networking/adapters/index.js';\n\n// Intelligent Routing System\nexport { createRoute, defineRoute, EXECUTION_PHASES } from './core/routing/index.js';\nexport { IntelligentRoutingManager, RouteRegistry } from './core/routing/app-integration.js';\nexport type {\n RouteBuilder,\n RouteSchema,\n CompiledRoute,\n HttpMethod,\n AuthConfig,\n RateLimitConfig,\n CacheConfig,\n MiddlewarePhases,\n ExecutionPhase,\n} from './core/routing/index.js';\n\n// Documentation System\nexport {\n DocumentationSystem,\n AppDocumentationManager,\n createDocumentationSystem,\n generateDocsFromIntelligentRoutes,\n} from './core/docs/index.js';\nexport type { DocsConfig } from './core/docs/index.js';\n\n// Configuration utilities\nexport {\n getConfig,\n createModuleConfig,\n getEnvVar,\n getEnvArray,\n getEnvJson,\n isDevelopment,\n isProduction,\n isStaging,\n requireEnvVars,\n envVar,\n getConfigValue,\n} from './core/config/utils.js';\n\nexport {\n initializeConfig,\n getGlobalConfig,\n isConfigInitialized,\n resetConfig,\n} from './core/config/index.js';\n\n// Export configuration types for TypeScript users\nexport type { AppConfig, DeepPartial, OriginFunction } from './core/config/index.js';\n\n// GraphQL System - Only export types and adapter\n// The core classes are lazy-loaded internally via app.graphqlInit()\nexport type {\n GraphQLContext,\n GraphQLResolver,\n GraphQLSubscriptionResolver,\n GraphQLSchemaBuilderOptions,\n GraphQLResolvers,\n GraphQLExecutionOptions,\n GraphQLOptions,\n GraphQLPlugin,\n GraphQLRequestContext,\n GraphQLRequestListener,\n GraphQLRequest,\n GraphQLResponse,\n GraphQLMetrics,\n GraphQLSubscriptionOptions,\n DataLoaderOptions,\n ComplexityEstimator,\n QueryComplexityOptions,\n DepthLimitOptions,\n} from './core/graphql/types.js';\n\nexport type { GraphQLAdapter, GraphQLStats } from './core/graphql/adapter.js';\nexport { GraphQLJsAdapter } from './core/graphql/adapters/graphql-js-adapter.js';\n\n// GraphQL helpers (these don't import graphql directly at module level)\nexport {\n createPothosBuilder,\n isPothosAvailable,\n isPothosSchema,\n pothosToSchema,\n createComplexityPlugin,\n createDepthLimitPlugin,\n createDataLoader,\n} from './core/middleware/built-in/graphql/helpers.js';\n\n// Job System\nexport {\n JobScheduler,\n JobHealthChecker,\n CronParser,\n parseInterval,\n formatDuration,\n everyInterval,\n cronSchedule,\n oneTimeAt,\n createJob,\n} from './core/jobs/index.js';\n\nexport type {\n JobSchedule,\n JobOptions,\n SimpleJobOptions,\n JobFunction,\n JobMetrics,\n SchedulerStats,\n JobHealth,\n JobHealthStatus,\n JobContext,\n JobExecution,\n JobState,\n JobSchedulerOptions,\n ExecutionContext,\n ExecutionResult,\n} from './core/jobs/index.js';\n\n// Middleware System\nexport { MiddlewareManager } from './core/middleware/index.js';\nexport type { MiddlewareInterface, MoroMiddleware } from './core/middleware/index.js';\n\n// Body parsers\nexport { json, urlencoded } from './core/middleware/built-in/body-parsers/index.js';\n\n// Standalone router — `createRouter()` is the canonical factory; `Router` is an\n// alias kept callable without `new` so Express-style named imports\n// (`import { Router } from '...'`; `const r = Router();`) work unchanged.\nexport { createRouter, createRouter as Router, MoroRouter } from './core/routing/create-router.js';\n\n// Types\nexport type * from './types/core.js';\nexport type * from './types/http.js';\nexport type * from './types/hooks.js';\nexport type * from './types/cache.js';\nexport type * from './types/cdn.js';\nexport type * from './types/database.js';\nexport type * from './types/logger.js';\nexport type * from './types/session.js';\nexport type * from './types/discovery.js';\n\n// Adapters\nexport * from './core/middleware/built-in/cache/adapters/index.js';\nexport * from './core/middleware/built-in/cdn/adapters/index.js';\nexport * from './core/database/adapters/index.js';\n\n// Re-export commonly used types for convenience\nexport type { CacheAdapter, CacheOptions, CacheStrategy } from './types/cache.js';\nexport type { CDNAdapter, CDNOptions } from './types/cdn.js';\nexport type { DatabaseAdapter, DatabaseTransaction, DatabaseConfig } from './types/database.js';\nexport type { CookieOptions } from './types/http.js';\n\n// gRPC System - Lazy loaded, only types exported\nexport type {\n GrpcOptions,\n GrpcCall,\n GrpcCallback,\n GrpcMetadata,\n GrpcError,\n GrpcStatusCode,\n GrpcCredentials,\n GrpcServer,\n GrpcClient,\n GrpcClientOptions,\n GrpcInterceptor,\n ServiceImplementation,\n ServiceDefinition,\n ServiceRegistration,\n MethodDefinition,\n UnaryHandler,\n ServerStreamingHandler,\n ClientStreamingHandler,\n BidirectionalStreamingHandler,\n GrpcHandler,\n GrpcStats,\n HealthCheckStatus,\n HealthCheckResponse,\n ProtoLoadOptions,\n} from './core/grpc/types.js';\n\nexport type { GrpcAdapter } from './core/grpc/grpc-adapter.js';\nexport { GrpcJsAdapter } from './core/grpc/adapters/index.js';\n\n// gRPC Middleware\nexport {\n grpcAuth,\n grpcRequirePermission,\n grpcRequireRole,\n extractTokenFromMetadata,\n grpcLogger,\n grpcSimpleLogger,\n grpcDetailedLogger,\n grpcValidate,\n grpcValidateHandler,\n} from './core/grpc/index.js';\n\n// Mail System - Lazy loaded, only types exported\nexport type {\n MailConfig,\n MailOptions,\n MailResult,\n MailAdapter,\n MailAdapterType,\n EmailAddress,\n EmailAttachment,\n TemplateConfig,\n TemplateEngine,\n MailQueueConfig,\n NodemailerConnection,\n SendGridConnection,\n SESConnection,\n ResendConnection,\n} from './core/mail/types.js';\n\nexport { BaseMailAdapter } from './core/mail/mail-adapter.js';\nexport {\n ConsoleAdapter,\n NodemailerAdapter,\n SendGridAdapter,\n SESAdapter,\n ResendAdapter,\n} from './core/mail/adapters/index.js';\n"]}
package/dist/moro.js CHANGED
@@ -3,7 +3,7 @@
3
3
  // Event-driven • Modular • Enterprise-ready • Developer-first
4
4
  import { Moro as MoroCore } from './core/framework.js';
5
5
  import { createFrameworkLogger, applyLoggingConfiguration } from './core/logger/index.js';
6
- import { MiddlewareManager } from './core/middleware/index.js';
6
+ import { MiddlewareManager, MIDDLEWARE_FACTORY } from './core/middleware/index.js';
7
7
  import { IntelligentRoutingManager } from './core/routing/app-integration.js';
8
8
  import { UnifiedRouter, } from './core/routing/unified-router.js';
9
9
  import { PathMatcher } from './core/routing/path-matcher.js';
@@ -223,6 +223,9 @@ export class Moro extends EventEmitter {
223
223
  this.coreFramework = new MoroCore(frameworkOptions);
224
224
  // Initialize middleware system
225
225
  this.middlewareManager = new MiddlewareManager();
226
+ // Expose the manager to the core framework so module routes can resolve
227
+ // user-installed middleware by name (middleware: ['myMiddleware'])
228
+ this.coreFramework.getContainer().register('middlewareManager', () => this.middlewareManager);
226
229
  // Integrate hooks system with HTTP server
227
230
  const httpServer = this.coreFramework.httpServer;
228
231
  if (httpServer && httpServer.setHookManager) {
@@ -275,6 +278,19 @@ export class Moro extends EventEmitter {
275
278
  }
276
279
  // Initialize worker threads facade (optional - lazy loaded)
277
280
  this.workerFacade = new WorkerThreadsFacade();
281
+ // Eagerly initialize the worker pool when configured via createApp options.
282
+ // Without this option the pool is created lazily on first worker usage.
283
+ if (options.workers && options.workers.enabled !== false) {
284
+ const workerOptions = {
285
+ ...(options.workers.count !== undefined ? { workerCount: options.workers.count } : {}),
286
+ ...(options.workers.maxQueueSize !== undefined
287
+ ? { maxQueueSize: options.workers.maxQueueSize }
288
+ : {}),
289
+ };
290
+ void this.workerFacade.ensureInitialized(workerOptions).then(() => {
291
+ this.logger.info('Worker thread pool initialized', 'Workers', workerOptions);
292
+ });
293
+ }
278
294
  // Setup default middleware if enabled - use config defaults with options override
279
295
  this.setupDefaultMiddleware({
280
296
  ...this.getDefaultOptionsFromConfig(),
@@ -504,6 +520,14 @@ export class Moro extends EventEmitter {
504
520
  middlewareOrFunction.mount(this, '');
505
521
  return this;
506
522
  }
523
+ // Built-in factory passed uncalled (app.use(middleware.helmet) instead of
524
+ // app.use(middleware.helmet())). The arity dispatch below would misroute it
525
+ // as an app-plugin and silently discard the result — fail loudly instead.
526
+ if (typeof middlewareOrFunction === 'function' &&
527
+ middlewareOrFunction[MIDDLEWARE_FACTORY]) {
528
+ throw new Error(`Built-in middleware factory '${middlewareOrFunction.name || 'unknown'}' was passed uncalled. ` +
529
+ `Call it first: app.use(factory(options)) — e.g. app.use(middleware.helmet()).`);
530
+ }
507
531
  // Standard middleware integration (req, res, next pattern)
508
532
  if (typeof middlewareOrFunction === 'function' && middlewareOrFunction.length >= 3) {
509
533
  this.coreFramework.addMiddleware(middlewareOrFunction);