@morojs/moro 1.6.2 → 1.6.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.
- package/dist/core/http/http-server.js +12 -9
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/uws-http-server.js +1 -1
- package/dist/core/http/uws-http-server.js.map +1 -1
- package/dist/core/middleware/built-in/auth/core.d.ts +78 -0
- package/dist/core/middleware/built-in/auth/core.js +358 -0
- package/dist/core/middleware/built-in/auth/core.js.map +1 -0
- package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +1 -1
- package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
- package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
- package/dist/core/middleware/built-in/auth/hook.js +99 -0
- package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
- package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
- package/dist/core/middleware/built-in/auth/index.js +15 -0
- package/dist/core/middleware/built-in/auth/index.js.map +1 -0
- package/dist/core/middleware/built-in/{jwt-helpers.js → auth/jwt-helpers.js} +1 -1
- package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
- package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
- package/dist/core/middleware/built-in/auth/middleware.js +71 -0
- package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
- package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +1 -1
- package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.d.ts +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +2 -2
- package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/index.d.ts +0 -2
- package/{src/core/middleware/built-in/adapters/index.ts → dist/core/middleware/built-in/cache/adapters/index.js} +1 -3
- package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
- package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
- package/dist/core/middleware/built-in/cache/core.js +87 -0
- package/dist/core/middleware/built-in/cache/core.js.map +1 -0
- package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +22 -5
- package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cache/index.js +9 -0
- package/dist/core/middleware/built-in/cache/index.js.map +1 -0
- package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/cache/middleware.js +44 -0
- package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +2 -2
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.d.ts +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/index.js +0 -2
- package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
- package/dist/core/middleware/built-in/cdn/core.js +144 -0
- package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
- package/dist/core/middleware/built-in/cdn/hook.js +70 -0
- package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
- package/dist/core/middleware/built-in/cdn/index.js +11 -0
- package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
- package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
- package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
- package/dist/core/middleware/built-in/cookie/core.js +83 -0
- package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/cookie/hook.js +47 -0
- package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cookie/index.js +9 -0
- package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
- package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
- package/dist/core/middleware/built-in/cors/core.js +51 -0
- package/dist/core/middleware/built-in/cors/core.js.map +1 -0
- package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/cors/hook.js +37 -0
- package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cors/index.js +9 -0
- package/dist/core/middleware/built-in/cors/index.js.map +1 -0
- package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/cors/middleware.js +22 -0
- package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
- package/dist/core/middleware/built-in/csp/core.js +88 -0
- package/dist/core/middleware/built-in/csp/core.js.map +1 -0
- package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
- package/dist/core/middleware/built-in/csp/hook.js +47 -0
- package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
- package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
- package/dist/core/middleware/built-in/csp/index.js +9 -0
- package/dist/core/middleware/built-in/csp/index.js.map +1 -0
- package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
- package/dist/core/middleware/built-in/csp/middleware.js +29 -0
- package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
- package/dist/core/middleware/built-in/csrf/core.js +69 -0
- package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/csrf/hook.js +45 -0
- package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
- package/dist/core/middleware/built-in/csrf/index.js +9 -0
- package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
- package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
- package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
- package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
- package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{error-tracker.js → error-tracker/middleware.js} +14 -3
- package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/index.d.ts +25 -59
- package/dist/core/middleware/built-in/index.js +31 -31
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
- package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
- package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
- package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{performance-monitor.js → performance-monitor/middleware.js} +14 -3
- package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
- package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
- package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +22 -16
- package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
- package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
- package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
- package/dist/core/middleware/built-in/request-logger/index.js +4 -0
- package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
- package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{request-logger.js → request-logger/middleware.js} +14 -3
- package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/session/core.d.ts +73 -0
- package/dist/core/middleware/built-in/session/core.js +227 -0
- package/dist/core/middleware/built-in/session/core.js.map +1 -0
- package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/session/hook.js +53 -0
- package/dist/core/middleware/built-in/session/hook.js.map +1 -0
- package/dist/core/middleware/built-in/session/index.d.ts +3 -0
- package/dist/core/middleware/built-in/session/index.js +9 -0
- package/dist/core/middleware/built-in/session/index.js.map +1 -0
- package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/session/middleware.js +38 -0
- package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
- package/dist/core/middleware/built-in/sse/core.js +117 -0
- package/dist/core/middleware/built-in/sse/core.js.map +1 -0
- package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
- package/dist/core/middleware/built-in/sse/hook.js +60 -0
- package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
- package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
- package/dist/core/middleware/built-in/sse/index.js +9 -0
- package/dist/core/middleware/built-in/sse/index.js.map +1 -0
- package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
- package/dist/core/middleware/built-in/sse/middleware.js +43 -0
- package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
- package/dist/core/middleware/built-in/validation/core.js +93 -0
- package/dist/core/middleware/built-in/validation/core.js.map +1 -0
- package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
- package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +14 -3
- package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
- package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
- package/dist/core/middleware/built-in/validation/index.js +9 -0
- package/dist/core/middleware/built-in/validation/index.js.map +1 -0
- package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/validation/middleware.js +27 -0
- package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
- package/dist/core/middleware/index.js +6 -0
- package/dist/core/middleware/index.js.map +1 -1
- package/dist/core/routing/unified-router.d.ts +4 -20
- package/dist/core/routing/unified-router.js +61 -106
- package/dist/core/routing/unified-router.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/moro.js +12 -18
- package/dist/moro.js.map +1 -1
- package/dist/types/hooks.d.ts +3 -0
- package/package.json +2 -6
- package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
- package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
- package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
- package/dist/core/middleware/built-in/auth.d.ts +0 -30
- package/dist/core/middleware/built-in/auth.js +0 -348
- package/dist/core/middleware/built-in/auth.js.map +0 -1
- package/dist/core/middleware/built-in/cache.d.ts +0 -3
- package/dist/core/middleware/built-in/cache.js.map +0 -1
- package/dist/core/middleware/built-in/cdn.d.ts +0 -3
- package/dist/core/middleware/built-in/cdn.js +0 -109
- package/dist/core/middleware/built-in/cdn.js.map +0 -1
- package/dist/core/middleware/built-in/cookie.d.ts +0 -14
- package/dist/core/middleware/built-in/cookie.js +0 -64
- package/dist/core/middleware/built-in/cookie.js.map +0 -1
- package/dist/core/middleware/built-in/cors.d.ts +0 -2
- package/dist/core/middleware/built-in/cors.js +0 -25
- package/dist/core/middleware/built-in/cors.js.map +0 -1
- package/dist/core/middleware/built-in/csp.d.ts +0 -22
- package/dist/core/middleware/built-in/csp.js +0 -68
- package/dist/core/middleware/built-in/csp.js.map +0 -1
- package/dist/core/middleware/built-in/csrf.d.ts +0 -9
- package/dist/core/middleware/built-in/csrf.js +0 -60
- package/dist/core/middleware/built-in/csrf.js.map +0 -1
- package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
- package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
- package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
- package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
- package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
- package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
- package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
- package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
- package/dist/core/middleware/built-in/request-logger.js.map +0 -1
- package/dist/core/middleware/built-in/session.d.ts +0 -41
- package/dist/core/middleware/built-in/session.js +0 -205
- package/dist/core/middleware/built-in/session.js.map +0 -1
- package/dist/core/middleware/built-in/sse.d.ts +0 -6
- package/dist/core/middleware/built-in/sse.js +0 -69
- package/dist/core/middleware/built-in/sse.js.map +0 -1
- package/dist/core/middleware/built-in/validation.d.ts +0 -2
- package/dist/core/middleware/built-in/validation.js.map +0 -1
- package/jest.config.mjs +0 -41
- package/src/core/auth/README.md +0 -339
- package/src/core/auth/morojs-adapter.ts +0 -415
- package/src/core/config/config-manager.ts +0 -133
- package/src/core/config/config-sources.ts +0 -600
- package/src/core/config/config-validator.ts +0 -1116
- package/src/core/config/file-loader.ts +0 -150
- package/src/core/config/index.ts +0 -109
- package/src/core/config/schema.ts +0 -164
- package/src/core/config/utils.ts +0 -244
- package/src/core/database/README.md +0 -238
- package/src/core/database/adapters/drizzle.ts +0 -415
- package/src/core/database/adapters/index.ts +0 -42
- package/src/core/database/adapters/mongodb.ts +0 -317
- package/src/core/database/adapters/mysql.ts +0 -235
- package/src/core/database/adapters/postgresql.ts +0 -226
- package/src/core/database/adapters/redis.ts +0 -379
- package/src/core/database/adapters/sqlite.ts +0 -263
- package/src/core/database/index.ts +0 -3
- package/src/core/docs/index.ts +0 -231
- package/src/core/docs/openapi-generator.ts +0 -576
- package/src/core/docs/schema-to-openapi.ts +0 -145
- package/src/core/docs/simple-docs.ts +0 -295
- package/src/core/docs/swagger-ui.ts +0 -354
- package/src/core/docs/zod-to-openapi.ts +0 -532
- package/src/core/events/event-bus.ts +0 -231
- package/src/core/events/index.ts +0 -12
- package/src/core/framework.ts +0 -885
- package/src/core/http/http-server.ts +0 -1847
- package/src/core/http/index.ts +0 -7
- package/src/core/http/uws-http-server.ts +0 -591
- package/src/core/logger/filters.ts +0 -153
- package/src/core/logger/index.ts +0 -21
- package/src/core/logger/logger.ts +0 -1033
- package/src/core/logger/outputs.ts +0 -132
- package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
- package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
- package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
- package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -114
- package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
- package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
- package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -94
- package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
- package/src/core/middleware/built-in/auth-helpers.ts +0 -401
- package/src/core/middleware/built-in/auth-providers.ts +0 -480
- package/src/core/middleware/built-in/auth.ts +0 -410
- package/src/core/middleware/built-in/cache.ts +0 -213
- package/src/core/middleware/built-in/cdn.ts +0 -124
- package/src/core/middleware/built-in/cookie.ts +0 -85
- package/src/core/middleware/built-in/cors.ts +0 -38
- package/src/core/middleware/built-in/csp.ts +0 -101
- package/src/core/middleware/built-in/csrf.ts +0 -82
- package/src/core/middleware/built-in/error-tracker.ts +0 -16
- package/src/core/middleware/built-in/index.ts +0 -87
- package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
- package/src/core/middleware/built-in/performance-monitor.ts +0 -25
- package/src/core/middleware/built-in/rate-limit.ts +0 -60
- package/src/core/middleware/built-in/request-logger.ts +0 -16
- package/src/core/middleware/built-in/session.ts +0 -287
- package/src/core/middleware/built-in/sse.ts +0 -88
- package/src/core/middleware/built-in/validation.ts +0 -33
- package/src/core/middleware/index.ts +0 -177
- package/src/core/modules/auto-discovery.ts +0 -726
- package/src/core/modules/index.ts +0 -3
- package/src/core/modules/modules.ts +0 -135
- package/src/core/networking/adapters/index.ts +0 -17
- package/src/core/networking/adapters/socketio-adapter.ts +0 -254
- package/src/core/networking/adapters/uws-adapter.ts +0 -619
- package/src/core/networking/adapters/ws-adapter.ts +0 -429
- package/src/core/networking/index.ts +0 -4
- package/src/core/networking/service-discovery.ts +0 -303
- package/src/core/networking/websocket-adapter.ts +0 -217
- package/src/core/networking/websocket-manager.ts +0 -308
- package/src/core/pooling/object-pool-manager.ts +0 -630
- package/src/core/routing/app-integration.ts +0 -164
- package/src/core/routing/index.ts +0 -261
- package/src/core/routing/path-matcher.ts +0 -222
- package/src/core/routing/router.ts +0 -97
- package/src/core/routing/unified-router.ts +0 -870
- package/src/core/runtime/aws-lambda-adapter.ts +0 -147
- package/src/core/runtime/base-adapter.ts +0 -130
- package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
- package/src/core/runtime/index.ts +0 -62
- package/src/core/runtime/node-adapter.ts +0 -202
- package/src/core/runtime/vercel-edge-adapter.ts +0 -114
- package/src/core/utilities/circuit-breaker.ts +0 -46
- package/src/core/utilities/container.ts +0 -736
- package/src/core/utilities/hooks.ts +0 -142
- package/src/core/utilities/index.ts +0 -17
- package/src/core/utilities/package-utils.ts +0 -59
- package/src/core/validation/adapters.ts +0 -147
- package/src/core/validation/index.ts +0 -258
- package/src/core/validation/schema-interface.ts +0 -100
- package/src/index.ts +0 -233
- package/src/moro.ts +0 -1728
- package/src/types/auth.ts +0 -440
- package/src/types/cache.ts +0 -38
- package/src/types/cdn.ts +0 -22
- package/src/types/config.ts +0 -229
- package/src/types/core.ts +0 -58
- package/src/types/database.ts +0 -32
- package/src/types/discovery.ts +0 -7
- package/src/types/events.ts +0 -82
- package/src/types/hooks.ts +0 -47
- package/src/types/http.ts +0 -89
- package/src/types/logger.ts +0 -102
- package/src/types/module.ts +0 -99
- package/src/types/runtime.ts +0 -76
- package/src/types/session.ts +0 -89
- package/tsconfig.json +0 -23
- /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
- /package/dist/core/middleware/built-in/{jwt-helpers.d.ts → auth/jwt-helpers.d.ts} +0 -0
- /package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.js +0 -0
- /package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.js +0 -0
|
@@ -1,415 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auth.js Adapter for MoroJS
|
|
3
|
-
*
|
|
4
|
-
* This adapter allows Auth.js to work seamlessly with MoroJS framework.
|
|
5
|
-
* It can be contributed to the Auth.js project as @auth/morojs
|
|
6
|
-
*
|
|
7
|
-
* @see https://authjs.dev/guides/adapters/creating-a-custom-adapter
|
|
8
|
-
* @see https://github.com/nextauthjs/next-auth/tree/main/packages
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { createFrameworkLogger } from '../logger/index.js';
|
|
12
|
-
|
|
13
|
-
const logger = createFrameworkLogger('AuthAdapter');
|
|
14
|
-
|
|
15
|
-
// Mock Auth.js types until we have the actual package
|
|
16
|
-
// These would come from @auth/core in a real implementation
|
|
17
|
-
export interface AuthConfig {
|
|
18
|
-
providers: any[];
|
|
19
|
-
secret?: string;
|
|
20
|
-
session?: any;
|
|
21
|
-
callbacks?: any;
|
|
22
|
-
events?: any;
|
|
23
|
-
pages?: any;
|
|
24
|
-
adapter?: any;
|
|
25
|
-
debug?: boolean;
|
|
26
|
-
basePath?: string;
|
|
27
|
-
[key: string]: any;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export interface Session {
|
|
31
|
-
user: {
|
|
32
|
-
id: string;
|
|
33
|
-
name?: string | null;
|
|
34
|
-
email?: string | null;
|
|
35
|
-
image?: string | null;
|
|
36
|
-
[key: string]: any;
|
|
37
|
-
};
|
|
38
|
-
expires: string;
|
|
39
|
-
[key: string]: any;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export type AuthAction = 'signin' | 'signout' | 'callback' | 'session' | 'providers' | 'csrf';
|
|
43
|
-
|
|
44
|
-
// Mock Auth function - would be imported from @auth/core
|
|
45
|
-
const Auth = async (request: Request, config: any): Promise<Response> => {
|
|
46
|
-
// This is a placeholder implementation
|
|
47
|
-
// In the real version, this would be the actual Auth.js core function
|
|
48
|
-
const url = new URL(request.url);
|
|
49
|
-
const pathname = url.pathname;
|
|
50
|
-
|
|
51
|
-
if (pathname === '/session') {
|
|
52
|
-
return new Response(JSON.stringify({ user: null }), {
|
|
53
|
-
status: 200,
|
|
54
|
-
headers: { 'content-type': 'application/json' },
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return new Response('Not implemented', { status: 501 });
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
// MoroJS-specific types
|
|
62
|
-
export interface MoroJSAuthConfig extends Omit<AuthConfig, 'raw'> {
|
|
63
|
-
/**
|
|
64
|
-
* Base path for auth routes in MoroJS
|
|
65
|
-
* @default "/api/auth"
|
|
66
|
-
*/
|
|
67
|
-
basePath?: string;
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* MoroJS-specific options
|
|
71
|
-
*/
|
|
72
|
-
morojs?: {
|
|
73
|
-
/**
|
|
74
|
-
* Enable MoroJS-specific logging
|
|
75
|
-
* @default false
|
|
76
|
-
*/
|
|
77
|
-
debug?: boolean;
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Custom request/response transformers
|
|
81
|
-
*/
|
|
82
|
-
transformers?: {
|
|
83
|
-
request?: (req: any) => any;
|
|
84
|
-
response?: (res: any) => any;
|
|
85
|
-
};
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export interface MoroJSRequest {
|
|
90
|
-
url?: string;
|
|
91
|
-
method?: string;
|
|
92
|
-
headers?: Record<string, string>;
|
|
93
|
-
body?: any;
|
|
94
|
-
query?: Record<string, string>;
|
|
95
|
-
cookies?: Record<string, string>;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export interface MoroJSResponse {
|
|
99
|
-
status(code: number): MoroJSResponse;
|
|
100
|
-
json(data: any): Promise<void>;
|
|
101
|
-
redirect(url: string): void;
|
|
102
|
-
setHeader(name: string, value: string): void;
|
|
103
|
-
cookie(name: string, value: string, options?: any): void;
|
|
104
|
-
send(data: any): void;
|
|
105
|
-
end(data?: any): void;
|
|
106
|
-
headersSent: boolean;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Convert MoroJS request to Auth.js Web API Request
|
|
111
|
-
*/
|
|
112
|
-
function toWebRequest(req: MoroJSRequest, basePath: string): Request {
|
|
113
|
-
const url = new URL(req.url || '/', 'http://localhost:3000');
|
|
114
|
-
|
|
115
|
-
// Handle auth routes
|
|
116
|
-
if (url.pathname.startsWith(basePath)) {
|
|
117
|
-
url.pathname = url.pathname.replace(basePath, '');
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const headers = new Headers();
|
|
121
|
-
if (req.headers) {
|
|
122
|
-
Object.entries(req.headers).forEach(([key, value]) => {
|
|
123
|
-
headers.set(key, value);
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Add cookies to headers if not present
|
|
128
|
-
if (req.cookies && Object.keys(req.cookies).length > 0) {
|
|
129
|
-
const cookieHeader = Object.entries(req.cookies)
|
|
130
|
-
.map(([name, value]) => `${name}=${value}`)
|
|
131
|
-
.join('; ');
|
|
132
|
-
|
|
133
|
-
if (!headers.has('cookie')) {
|
|
134
|
-
headers.set('cookie', cookieHeader);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
const body = req.body ? JSON.stringify(req.body) : undefined;
|
|
139
|
-
|
|
140
|
-
return new Request(url.toString(), {
|
|
141
|
-
method: req.method || 'GET',
|
|
142
|
-
headers,
|
|
143
|
-
body,
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Convert Auth.js Web API Response to MoroJS response
|
|
149
|
-
*/
|
|
150
|
-
async function fromWebResponse(webResponse: Response, moroResponse: MoroJSResponse): Promise<void> {
|
|
151
|
-
// Set status
|
|
152
|
-
moroResponse.status(webResponse.status);
|
|
153
|
-
|
|
154
|
-
// Set headers
|
|
155
|
-
webResponse.headers.forEach((value, key) => {
|
|
156
|
-
if (key.toLowerCase() === 'set-cookie') {
|
|
157
|
-
// Handle cookies specially for MoroJS
|
|
158
|
-
const cookies = value.split(', ');
|
|
159
|
-
cookies.forEach(cookie => {
|
|
160
|
-
const [nameValue, ...options] = cookie.split('; ');
|
|
161
|
-
const [name, cookieValue] = nameValue.split('=');
|
|
162
|
-
|
|
163
|
-
// Parse cookie options
|
|
164
|
-
const cookieOptions: any = {};
|
|
165
|
-
options.forEach(option => {
|
|
166
|
-
const [optKey, optValue] = option.split('=');
|
|
167
|
-
switch (optKey.toLowerCase()) {
|
|
168
|
-
case 'max-age':
|
|
169
|
-
cookieOptions.maxAge = parseInt(optValue, 10);
|
|
170
|
-
break;
|
|
171
|
-
case 'expires':
|
|
172
|
-
cookieOptions.expires = new Date(optValue);
|
|
173
|
-
break;
|
|
174
|
-
case 'httponly':
|
|
175
|
-
cookieOptions.httpOnly = true;
|
|
176
|
-
break;
|
|
177
|
-
case 'secure':
|
|
178
|
-
cookieOptions.secure = true;
|
|
179
|
-
break;
|
|
180
|
-
case 'samesite':
|
|
181
|
-
cookieOptions.sameSite = optValue;
|
|
182
|
-
break;
|
|
183
|
-
case 'path':
|
|
184
|
-
cookieOptions.path = optValue;
|
|
185
|
-
break;
|
|
186
|
-
case 'domain':
|
|
187
|
-
cookieOptions.domain = optValue;
|
|
188
|
-
break;
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
moroResponse.cookie(name, cookieValue, cookieOptions);
|
|
193
|
-
});
|
|
194
|
-
} else if (key.toLowerCase() === 'location') {
|
|
195
|
-
// Handle redirects
|
|
196
|
-
moroResponse.redirect(value);
|
|
197
|
-
return;
|
|
198
|
-
} else {
|
|
199
|
-
moroResponse.setHeader(key, value);
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
// Handle response body
|
|
204
|
-
const contentType = webResponse.headers.get('content-type');
|
|
205
|
-
|
|
206
|
-
if (webResponse.status >= 300 && webResponse.status < 400) {
|
|
207
|
-
// Redirect - already handled above
|
|
208
|
-
return;
|
|
209
|
-
} else if (contentType?.includes('application/json')) {
|
|
210
|
-
const data = await webResponse.json();
|
|
211
|
-
await moroResponse.json(data);
|
|
212
|
-
} else {
|
|
213
|
-
const text = await webResponse.text();
|
|
214
|
-
moroResponse.send(text);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* Main MoroJS Auth.js handler
|
|
220
|
-
*
|
|
221
|
-
* This is the core function that integrates Auth.js with MoroJS
|
|
222
|
-
*/
|
|
223
|
-
export async function MoroJSAuth(config: MoroJSAuthConfig): Promise<{
|
|
224
|
-
handler: (req: MoroJSRequest, res: MoroJSResponse) => Promise<void>;
|
|
225
|
-
auth: (req: MoroJSRequest) => Promise<Session | null>;
|
|
226
|
-
}> {
|
|
227
|
-
const basePath = config.basePath || '/api/auth';
|
|
228
|
-
|
|
229
|
-
return {
|
|
230
|
-
/**
|
|
231
|
-
* Main request handler for auth routes
|
|
232
|
-
*/
|
|
233
|
-
handler: async (req: MoroJSRequest, res: MoroJSResponse) => {
|
|
234
|
-
try {
|
|
235
|
-
// Convert MoroJS request to Web API request
|
|
236
|
-
const webRequest = toWebRequest(req, basePath);
|
|
237
|
-
|
|
238
|
-
// Determine the auth action from the URL
|
|
239
|
-
const url = new URL(webRequest.url);
|
|
240
|
-
const action = (url.pathname.split('/')[1] as AuthAction) || 'session';
|
|
241
|
-
|
|
242
|
-
// Apply request transformer if provided
|
|
243
|
-
let transformedRequest = webRequest;
|
|
244
|
-
if (config.morojs?.transformers?.request) {
|
|
245
|
-
transformedRequest = config.morojs.transformers.request(webRequest);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// Call Auth.js core
|
|
249
|
-
const authResponse = await Auth(transformedRequest, {
|
|
250
|
-
...config,
|
|
251
|
-
basePath,
|
|
252
|
-
raw: (code: any, ...message: any[]) => {
|
|
253
|
-
if (config.morojs?.debug) {
|
|
254
|
-
logger.debug(`[MoroJS Auth] ${code}:`, 'AuthAdapter', { message });
|
|
255
|
-
}
|
|
256
|
-
},
|
|
257
|
-
});
|
|
258
|
-
|
|
259
|
-
// Apply response transformer if provided
|
|
260
|
-
let finalResponse = authResponse;
|
|
261
|
-
if (config.morojs?.transformers?.response) {
|
|
262
|
-
finalResponse = config.morojs.transformers.response(authResponse);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
// Convert Web API response to MoroJS response
|
|
266
|
-
await fromWebResponse(finalResponse, res);
|
|
267
|
-
} catch (error) {
|
|
268
|
-
logger.error('[MoroJS Auth] Error', 'AuthAdapter', {
|
|
269
|
-
error: error instanceof Error ? error.message : String(error),
|
|
270
|
-
});
|
|
271
|
-
// Robust error handling - check if response methods exist
|
|
272
|
-
if (typeof (res as any).status === 'function' && typeof (res as any).json === 'function') {
|
|
273
|
-
(res as any).status(500).json({
|
|
274
|
-
error: 'Internal server error',
|
|
275
|
-
message: config.morojs?.debug ? (error as Error).message : 'Authentication error',
|
|
276
|
-
});
|
|
277
|
-
} else {
|
|
278
|
-
// Fallback to basic Node.js response methods
|
|
279
|
-
(res as any).statusCode = 500;
|
|
280
|
-
(res as any).setHeader('Content-Type', 'application/json');
|
|
281
|
-
(res as any).end(
|
|
282
|
-
JSON.stringify({
|
|
283
|
-
error: 'Internal server error',
|
|
284
|
-
message: config.morojs?.debug ? (error as Error).message : 'Authentication error',
|
|
285
|
-
})
|
|
286
|
-
);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
},
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Get session for the current request
|
|
293
|
-
*/
|
|
294
|
-
auth: async (req: MoroJSRequest): Promise<Session | null> => {
|
|
295
|
-
try {
|
|
296
|
-
// Create a session request
|
|
297
|
-
const sessionUrl = new URL('/session', 'http://localhost:3000');
|
|
298
|
-
const sessionRequest = new Request(sessionUrl.toString(), {
|
|
299
|
-
method: 'GET',
|
|
300
|
-
headers: req.headers ? new Headers(req.headers) : new Headers(),
|
|
301
|
-
});
|
|
302
|
-
|
|
303
|
-
// Get session from Auth.js
|
|
304
|
-
const response = await Auth(sessionRequest, {
|
|
305
|
-
...config,
|
|
306
|
-
basePath,
|
|
307
|
-
});
|
|
308
|
-
|
|
309
|
-
if (response.status === 200) {
|
|
310
|
-
const session = await response.json();
|
|
311
|
-
return session as Session;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
return null;
|
|
315
|
-
} catch (error) {
|
|
316
|
-
if (config.morojs?.debug) {
|
|
317
|
-
logger.error('[MoroJS Auth] Session error', 'AuthAdapter', {
|
|
318
|
-
error: error instanceof Error ? error.message : String(error),
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
return null;
|
|
322
|
-
}
|
|
323
|
-
},
|
|
324
|
-
};
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/**
|
|
328
|
-
* MoroJS Auth middleware factory
|
|
329
|
-
*
|
|
330
|
-
* This creates a MoroJS-compatible middleware for authentication
|
|
331
|
-
*/
|
|
332
|
-
export function createAuthMiddleware(config: MoroJSAuthConfig) {
|
|
333
|
-
logger.info('createAuthMiddleware called - creating middleware function', 'AuthAdapter');
|
|
334
|
-
// Return a function that MoroJS can call directly
|
|
335
|
-
return async (app: any) => {
|
|
336
|
-
logger.info('Installing Auth.js middleware...', 'AuthAdapter');
|
|
337
|
-
logger.debug('App object received', 'AuthAdapter', {
|
|
338
|
-
appType: typeof app,
|
|
339
|
-
appConstructor: app.constructor.name,
|
|
340
|
-
});
|
|
341
|
-
|
|
342
|
-
// Get the hooks from the app's middleware system
|
|
343
|
-
const hooks =
|
|
344
|
-
(app as any).coreFramework?.middlewareManager?.hooks || (app as any).middlewareManager?.hooks;
|
|
345
|
-
|
|
346
|
-
if (!hooks) {
|
|
347
|
-
logger.error('Could not access MoroJS hooks system', 'AuthAdapter');
|
|
348
|
-
return;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
const options = {};
|
|
352
|
-
const mergedConfig = { ...config, ...options };
|
|
353
|
-
const { handler, auth } = await MoroJSAuth(mergedConfig);
|
|
354
|
-
const basePath = mergedConfig.basePath || '/api/auth';
|
|
355
|
-
|
|
356
|
-
// Register request hook
|
|
357
|
-
hooks.before('request', async (context: any) => {
|
|
358
|
-
logger.debug('Native adapter hook starting', 'AuthAdapter');
|
|
359
|
-
const req = context.request;
|
|
360
|
-
logger.debug('Request path', 'AuthAdapter', { path: req.path || req.url });
|
|
361
|
-
|
|
362
|
-
try {
|
|
363
|
-
// Just add auth object to request - don't touch response
|
|
364
|
-
req.auth = {
|
|
365
|
-
session: null,
|
|
366
|
-
user: null,
|
|
367
|
-
isAuthenticated: false,
|
|
368
|
-
|
|
369
|
-
// Helper methods
|
|
370
|
-
getSession: () => Promise.resolve(null),
|
|
371
|
-
getUser: () => null,
|
|
372
|
-
|
|
373
|
-
// Sign in/out helpers (redirect to auth routes)
|
|
374
|
-
signIn: (provider?: string, options?: any) => {
|
|
375
|
-
const params = new URLSearchParams();
|
|
376
|
-
if (provider) params.set('provider', provider);
|
|
377
|
-
if (options?.callbackUrl) params.set('callbackUrl', options.callbackUrl);
|
|
378
|
-
|
|
379
|
-
const signInUrl = `${basePath}/signin${provider ? `/${provider}` : ''}${
|
|
380
|
-
params.toString() ? `?${params.toString()}` : ''
|
|
381
|
-
}`;
|
|
382
|
-
|
|
383
|
-
return { url: signInUrl };
|
|
384
|
-
},
|
|
385
|
-
|
|
386
|
-
signOut: (options?: any) => {
|
|
387
|
-
const params = new URLSearchParams();
|
|
388
|
-
if (options?.callbackUrl) params.set('callbackUrl', options.callbackUrl);
|
|
389
|
-
|
|
390
|
-
const signOutUrl = `${basePath}/signout${
|
|
391
|
-
params.toString() ? `?${params.toString()}` : ''
|
|
392
|
-
}`;
|
|
393
|
-
|
|
394
|
-
return { url: signOutUrl };
|
|
395
|
-
},
|
|
396
|
-
};
|
|
397
|
-
logger.debug('Native adapter hook completed successfully', 'AuthAdapter');
|
|
398
|
-
} catch (error) {
|
|
399
|
-
logger.error('Error in native adapter hook', 'AuthAdapter', {
|
|
400
|
-
error: error instanceof Error ? error.message : String(error),
|
|
401
|
-
});
|
|
402
|
-
throw error;
|
|
403
|
-
}
|
|
404
|
-
});
|
|
405
|
-
|
|
406
|
-
logger.info('Auth.js middleware installed successfully!', 'AuthAdapter');
|
|
407
|
-
};
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
// Types are already exported above, no need to re-export
|
|
411
|
-
|
|
412
|
-
/**
|
|
413
|
-
* Default export for convenience
|
|
414
|
-
*/
|
|
415
|
-
export default MoroJSAuth;
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration Manager - Immutable Single Source of Truth
|
|
3
|
-
*
|
|
4
|
-
* This module provides centralized, immutable configuration state management.
|
|
5
|
-
* Configuration is locked at createApp() initialization and cannot be changed afterward.
|
|
6
|
-
*
|
|
7
|
-
* Precedence: Environment Variables > createApp Options > Config File > Defaults
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { AppConfig } from '../../types/config.js';
|
|
11
|
-
import { createFrameworkLogger } from '../logger/index.js';
|
|
12
|
-
|
|
13
|
-
const logger = createFrameworkLogger('ConfigManager');
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Global configuration state - immutable after initialization
|
|
17
|
-
*/
|
|
18
|
-
let globalConfig: Readonly<AppConfig> | null = null;
|
|
19
|
-
let isLocked = false;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Initialize and lock global configuration state
|
|
23
|
-
* This should only be called once during createApp() initialization
|
|
24
|
-
*/
|
|
25
|
-
export function initializeAndLockConfig(config: AppConfig): void {
|
|
26
|
-
if (isLocked) {
|
|
27
|
-
throw new Error(
|
|
28
|
-
'Configuration is already locked and cannot be changed. ' +
|
|
29
|
-
'Configuration can only be set once during createApp() initialization.'
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Deep freeze the configuration to make it truly immutable
|
|
34
|
-
globalConfig = deepFreeze(config);
|
|
35
|
-
isLocked = true;
|
|
36
|
-
|
|
37
|
-
logger.info(
|
|
38
|
-
`Configuration locked and initialized: ${process.env.NODE_ENV || 'development'}:${config.server.port}`
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Get the current global configuration
|
|
44
|
-
* Throws if configuration hasn't been initialized
|
|
45
|
-
*/
|
|
46
|
-
export function getGlobalConfig(): Readonly<AppConfig> {
|
|
47
|
-
if (!globalConfig || !isLocked) {
|
|
48
|
-
throw new Error(
|
|
49
|
-
'Configuration not initialized. Call createApp() to initialize the configuration system.'
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
return globalConfig;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Check if configuration has been initialized and locked
|
|
57
|
-
*/
|
|
58
|
-
export function isConfigLocked(): boolean {
|
|
59
|
-
return isLocked && globalConfig !== null;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Reset configuration state (for testing only)
|
|
64
|
-
* @internal - This should only be used in tests
|
|
65
|
-
*/
|
|
66
|
-
export function resetConfigForTesting(): void {
|
|
67
|
-
if (
|
|
68
|
-
process.env.NODE_ENV !== 'test' &&
|
|
69
|
-
!process.env.MORO_ALLOW_CONFIG_RESET &&
|
|
70
|
-
!process.env.JEST_WORKER_ID
|
|
71
|
-
) {
|
|
72
|
-
throw new Error(
|
|
73
|
-
'Configuration reset is only allowed in test environments. ' +
|
|
74
|
-
'Set MORO_ALLOW_CONFIG_RESET=true to override this check.'
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
globalConfig = null;
|
|
79
|
-
isLocked = false;
|
|
80
|
-
logger.debug('Configuration state reset for testing');
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Deep freeze an object to make it truly immutable
|
|
85
|
-
* This prevents any accidental mutations to the configuration
|
|
86
|
-
*/
|
|
87
|
-
function deepFreeze<T>(obj: T): Readonly<T> {
|
|
88
|
-
// Get property names
|
|
89
|
-
const propNames = Object.getOwnPropertyNames(obj);
|
|
90
|
-
|
|
91
|
-
// Freeze properties before freezing self
|
|
92
|
-
for (const name of propNames) {
|
|
93
|
-
const value = (obj as any)[name];
|
|
94
|
-
|
|
95
|
-
if (value && typeof value === 'object') {
|
|
96
|
-
deepFreeze(value);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return Object.freeze(obj);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Get a specific configuration value using dot notation
|
|
105
|
-
* This provides a safe way to access nested config values
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
* getConfigValue('server.port') // Returns the server port
|
|
109
|
-
* getConfigValue('database.redis.url') // Returns the Redis URL
|
|
110
|
-
*/
|
|
111
|
-
export function getConfigValue<T = any>(path: string): T | undefined {
|
|
112
|
-
const config = getGlobalConfig();
|
|
113
|
-
|
|
114
|
-
return path.split('.').reduce((obj: any, key: string) => {
|
|
115
|
-
return obj && obj[key] !== undefined ? obj[key] : undefined;
|
|
116
|
-
}, config);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Utility functions for common environment checks
|
|
121
|
-
* These now read NODE_ENV directly for consistency with Node.js ecosystem
|
|
122
|
-
*/
|
|
123
|
-
export function isDevelopment(): boolean {
|
|
124
|
-
return process.env.NODE_ENV === 'development';
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
export function isProduction(): boolean {
|
|
128
|
-
return process.env.NODE_ENV === 'production';
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
export function isStaging(): boolean {
|
|
132
|
-
return process.env.NODE_ENV === 'staging';
|
|
133
|
-
}
|