@morojs/moro 1.6.0 → 1.6.1
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/README.md +256 -74
- package/dist/core/auth/morojs-adapter.js +20 -20
- package/dist/core/auth/morojs-adapter.js.map +1 -1
- package/dist/core/config/file-loader.d.ts +6 -1
- package/dist/core/config/file-loader.js +249 -19
- package/dist/core/config/file-loader.js.map +1 -1
- package/dist/core/config/index.d.ts +12 -41
- package/dist/core/config/index.js +54 -65
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/loader.d.ts +7 -0
- package/dist/core/config/loader.js +269 -0
- package/dist/core/config/loader.js.map +1 -0
- package/dist/core/config/schema.d.ts +2 -2
- package/dist/core/config/schema.js +44 -52
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/utils.d.ts +3 -10
- package/dist/core/config/utils.js +58 -31
- package/dist/core/config/utils.js.map +1 -1
- package/dist/core/config/validation.d.ts +17 -0
- package/dist/core/config/validation.js +131 -0
- package/dist/core/config/validation.js.map +1 -0
- package/dist/core/database/adapters/drizzle.d.ts +1 -1
- package/dist/core/database/adapters/drizzle.js +11 -18
- package/dist/core/database/adapters/drizzle.js.map +1 -1
- package/dist/core/database/adapters/index.d.ts +7 -7
- package/dist/core/database/adapters/index.js +29 -19
- package/dist/core/database/adapters/index.js.map +1 -1
- package/dist/core/database/adapters/mongodb.d.ts +1 -13
- package/dist/core/database/adapters/mongodb.js +10 -46
- package/dist/core/database/adapters/mongodb.js.map +1 -1
- package/dist/core/database/adapters/mysql.d.ts +1 -14
- package/dist/core/database/adapters/mysql.js +9 -19
- package/dist/core/database/adapters/mysql.js.map +1 -1
- package/dist/core/database/adapters/postgresql.d.ts +2 -12
- package/dist/core/database/adapters/postgresql.js +9 -19
- package/dist/core/database/adapters/postgresql.js.map +1 -1
- package/dist/core/database/adapters/redis.d.ts +1 -12
- package/dist/core/database/adapters/redis.js +13 -48
- package/dist/core/database/adapters/redis.js.map +1 -1
- package/dist/core/database/adapters/sqlite.d.ts +1 -3
- package/dist/core/database/adapters/sqlite.js +8 -19
- package/dist/core/database/adapters/sqlite.js.map +1 -1
- package/dist/core/database/index.d.ts +2 -2
- package/dist/core/database/index.js +18 -2
- package/dist/core/database/index.js.map +1 -1
- package/dist/core/docs/index.d.ts +9 -9
- package/dist/core/docs/index.js +35 -14
- package/dist/core/docs/index.js.map +1 -1
- package/dist/core/docs/openapi-generator.d.ts +2 -2
- package/dist/core/docs/openapi-generator.js +16 -11
- package/dist/core/docs/openapi-generator.js.map +1 -1
- package/dist/core/docs/schema-to-openapi.d.ts +2 -2
- package/dist/core/docs/schema-to-openapi.js +11 -5
- package/dist/core/docs/schema-to-openapi.js.map +1 -1
- package/dist/core/docs/simple-docs.d.ts +1 -1
- package/dist/core/docs/simple-docs.js +9 -4
- package/dist/core/docs/simple-docs.js.map +1 -1
- package/dist/core/docs/swagger-ui.d.ts +2 -2
- package/dist/core/docs/swagger-ui.js +29 -26
- package/dist/core/docs/swagger-ui.js.map +1 -1
- package/dist/core/docs/zod-to-openapi.js +28 -31
- package/dist/core/docs/zod-to-openapi.js.map +1 -1
- package/dist/core/events/event-bus.d.ts +1 -1
- package/dist/core/events/event-bus.js +10 -6
- package/dist/core/events/event-bus.js.map +1 -1
- package/dist/core/events/index.d.ts +2 -2
- package/dist/core/events/index.js +5 -1
- package/dist/core/events/index.js.map +1 -1
- package/dist/core/framework.d.ts +12 -19
- package/dist/core/framework.js +100 -277
- package/dist/core/framework.js.map +1 -1
- package/dist/core/http/http-server.d.ts +1 -13
- package/dist/core/http/http-server.js +85 -175
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/index.d.ts +3 -4
- package/dist/core/http/index.js +8 -3
- package/dist/core/http/index.js.map +1 -1
- package/dist/core/http/router.d.ts +1 -13
- package/dist/core/http/router.js +43 -117
- package/dist/core/http/router.js.map +1 -1
- package/dist/core/logger/filters.d.ts +1 -1
- package/dist/core/logger/filters.js +23 -20
- package/dist/core/logger/filters.js.map +1 -1
- package/dist/core/logger/index.d.ts +3 -3
- package/dist/core/logger/index.js +24 -2
- package/dist/core/logger/index.js.map +1 -1
- package/dist/core/logger/logger.d.ts +14 -30
- package/dist/core/logger/logger.js +223 -398
- package/dist/core/logger/logger.js.map +1 -1
- package/dist/core/logger/outputs.d.ts +1 -1
- package/dist/core/logger/outputs.js +17 -8
- package/dist/core/logger/outputs.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cache/file.js +47 -10
- package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
- package/dist/core/middleware/built-in/adapters/cache/index.js +17 -10
- package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cache/memory.js +7 -3
- package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +1 -3
- package/dist/core/middleware/built-in/adapters/cache/redis.js +9 -11
- package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/azure.js +7 -3
- package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +7 -3
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +1 -3
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +10 -12
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
- package/dist/core/middleware/built-in/adapters/cdn/index.js +17 -10
- package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
- package/dist/core/middleware/built-in/adapters/index.js +23 -4
- package/dist/core/middleware/built-in/adapters/index.js.map +1 -1
- package/dist/core/middleware/built-in/auth-helpers.js +22 -11
- package/dist/core/middleware/built-in/auth-helpers.js.map +1 -1
- package/dist/core/middleware/built-in/auth-providers.d.ts +1 -1
- package/dist/core/middleware/built-in/auth-providers.js +9 -4
- package/dist/core/middleware/built-in/auth-providers.js.map +1 -1
- package/dist/core/middleware/built-in/auth.d.ts +2 -2
- package/dist/core/middleware/built-in/auth.js +26 -93
- package/dist/core/middleware/built-in/auth.js.map +1 -1
- package/dist/core/middleware/built-in/cache.d.ts +2 -2
- package/dist/core/middleware/built-in/cache.js +12 -11
- package/dist/core/middleware/built-in/cache.js.map +1 -1
- package/dist/core/middleware/built-in/cdn.d.ts +2 -2
- package/dist/core/middleware/built-in/cdn.js +9 -5
- package/dist/core/middleware/built-in/cdn.js.map +1 -1
- package/dist/core/middleware/built-in/cookie.d.ts +1 -1
- package/dist/core/middleware/built-in/cookie.js +7 -3
- package/dist/core/middleware/built-in/cookie.js.map +1 -1
- package/dist/core/middleware/built-in/cors.d.ts +1 -1
- package/dist/core/middleware/built-in/cors.js +7 -3
- package/dist/core/middleware/built-in/cors.js.map +1 -1
- package/dist/core/middleware/built-in/csp.d.ts +1 -1
- package/dist/core/middleware/built-in/csp.js +8 -5
- package/dist/core/middleware/built-in/csp.js.map +1 -1
- package/dist/core/middleware/built-in/csrf.d.ts +1 -1
- package/dist/core/middleware/built-in/csrf.js +8 -5
- package/dist/core/middleware/built-in/csrf.js.map +1 -1
- package/dist/core/middleware/built-in/error-tracker.js +7 -3
- package/dist/core/middleware/built-in/error-tracker.js.map +1 -1
- package/dist/core/middleware/built-in/index.d.ts +27 -28
- package/dist/core/middleware/built-in/index.js +78 -48
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/performance-monitor.js +7 -3
- package/dist/core/middleware/built-in/performance-monitor.js.map +1 -1
- package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
- package/dist/core/middleware/built-in/rate-limit.js +7 -3
- package/dist/core/middleware/built-in/rate-limit.js.map +1 -1
- package/dist/core/middleware/built-in/request-logger.js +8 -5
- package/dist/core/middleware/built-in/request-logger.js.map +1 -1
- package/dist/core/middleware/built-in/session.d.ts +2 -2
- package/dist/core/middleware/built-in/session.js +15 -11
- package/dist/core/middleware/built-in/session.js.map +1 -1
- package/dist/core/middleware/built-in/sse.d.ts +1 -1
- package/dist/core/middleware/built-in/sse.js +14 -12
- package/dist/core/middleware/built-in/sse.js.map +1 -1
- package/dist/core/middleware/built-in/validation.d.ts +1 -1
- package/dist/core/middleware/built-in/validation.js +7 -3
- package/dist/core/middleware/built-in/validation.js.map +1 -1
- package/dist/core/middleware/index.d.ts +4 -4
- package/dist/core/middleware/index.js +28 -8
- package/dist/core/middleware/index.js.map +1 -1
- package/dist/core/modules/auto-discovery.d.ts +2 -19
- package/dist/core/modules/auto-discovery.js +74 -391
- package/dist/core/modules/auto-discovery.js.map +1 -1
- package/dist/core/modules/index.d.ts +2 -2
- package/dist/core/modules/index.js +9 -2
- package/dist/core/modules/index.js.map +1 -1
- package/dist/core/modules/modules.d.ts +3 -3
- package/dist/core/modules/modules.js +54 -23
- package/dist/core/modules/modules.js.map +1 -1
- package/dist/core/networking/adapters/index.d.ts +3 -4
- package/dist/core/networking/adapters/index.js +7 -3
- package/dist/core/networking/adapters/index.js.map +1 -1
- package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
- package/dist/core/networking/adapters/socketio-adapter.js +40 -5
- package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
- package/dist/core/networking/adapters/ws-adapter.d.ts +2 -2
- package/dist/core/networking/adapters/ws-adapter.js +43 -8
- package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
- package/dist/core/networking/index.d.ts +2 -3
- package/dist/core/networking/index.js +7 -2
- package/dist/core/networking/index.js.map +1 -1
- package/dist/core/networking/service-discovery.js +12 -8
- package/dist/core/networking/service-discovery.js.map +1 -1
- package/dist/core/networking/websocket-adapter.js +2 -1
- package/dist/core/networking/websocket-adapter.js.map +1 -1
- package/dist/core/networking/websocket-manager.d.ts +3 -3
- package/dist/core/networking/websocket-manager.js +11 -9
- package/dist/core/networking/websocket-manager.js.map +1 -1
- package/dist/core/routing/app-integration.d.ts +2 -2
- package/dist/core/routing/app-integration.js +12 -7
- package/dist/core/routing/app-integration.js.map +1 -1
- package/dist/core/routing/index.d.ts +2 -22
- package/dist/core/routing/index.js +27 -185
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
- package/dist/core/runtime/aws-lambda-adapter.js +6 -2
- package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
- package/dist/core/runtime/base-adapter.d.ts +2 -2
- package/dist/core/runtime/base-adapter.js +7 -3
- package/dist/core/runtime/base-adapter.js.map +1 -1
- package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
- package/dist/core/runtime/cloudflare-workers-adapter.js +6 -2
- package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
- package/dist/core/runtime/index.d.ts +12 -12
- package/dist/core/runtime/index.js +35 -22
- package/dist/core/runtime/index.js.map +1 -1
- package/dist/core/runtime/node-adapter.d.ts +4 -4
- package/dist/core/runtime/node-adapter.js +49 -18
- package/dist/core/runtime/node-adapter.js.map +1 -1
- package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
- package/dist/core/runtime/vercel-edge-adapter.js +6 -2
- package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
- package/dist/core/utilities/circuit-breaker.js +5 -1
- package/dist/core/utilities/circuit-breaker.js.map +1 -1
- package/dist/core/utilities/container.js +22 -12
- package/dist/core/utilities/container.js.map +1 -1
- package/dist/core/utilities/hooks.d.ts +2 -2
- package/dist/core/utilities/hooks.js +12 -7
- package/dist/core/utilities/hooks.js.map +1 -1
- package/dist/core/utilities/index.d.ts +4 -5
- package/dist/core/utilities/index.js +19 -5
- package/dist/core/utilities/index.js.map +1 -1
- package/dist/core/validation/adapters.d.ts +1 -1
- package/dist/core/validation/adapters.js +26 -15
- package/dist/core/validation/adapters.js.map +1 -1
- package/dist/core/validation/index.d.ts +4 -6
- package/dist/core/validation/index.js +28 -57
- package/dist/core/validation/index.js.map +1 -1
- package/dist/core/validation/schema-interface.js +9 -3
- package/dist/core/validation/schema-interface.js.map +1 -1
- package/dist/index.d.ts +52 -51
- package/dist/index.js +132 -23
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +10 -61
- package/dist/moro.js +237 -575
- package/dist/moro.js.map +1 -1
- package/dist/types/auth.js +9 -3
- package/dist/types/auth.js.map +1 -1
- package/dist/types/cache.js +2 -1
- package/dist/types/cdn.js +2 -1
- package/dist/types/config.d.ts +2 -70
- package/dist/types/config.js +2 -1
- package/dist/types/config.js.map +1 -1
- package/dist/types/core.d.ts +42 -36
- package/dist/types/core.js +2 -1
- package/dist/types/database.js +2 -1
- package/dist/types/discovery.js +2 -1
- package/dist/types/events.js +2 -1
- package/dist/types/hooks.d.ts +1 -1
- package/dist/types/hooks.js +2 -1
- package/dist/types/http.d.ts +1 -16
- package/dist/types/http.js +2 -1
- package/dist/types/logger.d.ts +0 -7
- package/dist/types/logger.js +2 -1
- package/dist/types/module.d.ts +0 -11
- package/dist/types/module.js +2 -1
- package/dist/types/runtime.d.ts +1 -1
- package/dist/types/runtime.js +2 -1
- package/dist/types/session.js +2 -1
- package/package.json +52 -19
- package/src/core/auth/morojs-adapter.ts +13 -18
- package/src/core/config/file-loader.ts +273 -13
- package/src/core/config/index.ts +34 -83
- package/src/core/config/loader.ts +633 -0
- package/src/core/config/schema.ts +33 -44
- package/src/core/config/utils.ts +31 -24
- package/src/core/config/validation.ts +140 -0
- package/src/core/database/README.md +16 -26
- package/src/core/database/adapters/drizzle.ts +6 -18
- package/src/core/database/adapters/index.ts +13 -13
- package/src/core/database/adapters/mongodb.ts +5 -53
- package/src/core/database/adapters/mysql.ts +4 -32
- package/src/core/database/adapters/postgresql.ts +5 -30
- package/src/core/database/adapters/redis.ts +8 -61
- package/src/core/database/adapters/sqlite.ts +3 -19
- package/src/core/database/index.ts +2 -2
- package/src/core/docs/index.ts +8 -8
- package/src/core/docs/openapi-generator.ts +4 -4
- package/src/core/docs/schema-to-openapi.ts +6 -3
- package/src/core/docs/simple-docs.ts +2 -2
- package/src/core/docs/swagger-ui.ts +16 -19
- package/src/core/docs/zod-to-openapi.ts +34 -34
- package/src/core/events/event-bus.ts +2 -2
- package/src/core/events/index.ts +2 -2
- package/src/core/framework.ts +67 -311
- package/src/core/http/http-server.ts +45 -190
- package/src/core/http/index.ts +3 -4
- package/src/core/http/router.ts +40 -129
- package/src/core/logger/filters.ts +5 -13
- package/src/core/logger/index.ts +3 -4
- package/src/core/logger/logger.ts +216 -435
- package/src/core/logger/outputs.ts +3 -1
- package/src/core/middleware/built-in/adapters/cache/file.ts +3 -3
- package/src/core/middleware/built-in/adapters/cache/index.ts +7 -7
- package/src/core/middleware/built-in/adapters/cache/memory.ts +2 -2
- package/src/core/middleware/built-in/adapters/cache/redis.ts +4 -18
- package/src/core/middleware/built-in/adapters/cdn/azure.ts +2 -2
- package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +2 -2
- package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +5 -16
- package/src/core/middleware/built-in/adapters/cdn/index.ts +7 -7
- package/src/core/middleware/built-in/adapters/index.ts +4 -4
- package/src/core/middleware/built-in/auth-helpers.ts +1 -1
- package/src/core/middleware/built-in/auth-providers.ts +1 -1
- package/src/core/middleware/built-in/auth.ts +21 -102
- package/src/core/middleware/built-in/cache.ts +6 -8
- package/src/core/middleware/built-in/cdn.ts +4 -4
- package/src/core/middleware/built-in/cookie.ts +2 -2
- package/src/core/middleware/built-in/cors.ts +2 -2
- package/src/core/middleware/built-in/csp.ts +3 -3
- package/src/core/middleware/built-in/csrf.ts +3 -3
- package/src/core/middleware/built-in/error-tracker.ts +1 -1
- package/src/core/middleware/built-in/index.ts +30 -38
- package/src/core/middleware/built-in/performance-monitor.ts +1 -1
- package/src/core/middleware/built-in/rate-limit.ts +2 -2
- package/src/core/middleware/built-in/request-logger.ts +1 -3
- package/src/core/middleware/built-in/session.ts +8 -7
- package/src/core/middleware/built-in/sse.ts +9 -11
- package/src/core/middleware/built-in/validation.ts +2 -2
- package/src/core/middleware/index.ts +6 -6
- package/src/core/modules/auto-discovery.ts +15 -478
- package/src/core/modules/index.ts +2 -2
- package/src/core/modules/modules.ts +12 -23
- package/src/core/networking/adapters/index.ts +3 -4
- package/src/core/networking/adapters/socketio-adapter.ts +3 -5
- package/src/core/networking/adapters/ws-adapter.ts +9 -8
- package/src/core/networking/index.ts +2 -3
- package/src/core/networking/service-discovery.ts +7 -6
- package/src/core/networking/websocket-manager.ts +7 -7
- package/src/core/routing/app-integration.ts +3 -3
- package/src/core/routing/index.ts +17 -201
- package/src/core/runtime/aws-lambda-adapter.ts +3 -3
- package/src/core/runtime/base-adapter.ts +2 -2
- package/src/core/runtime/cloudflare-workers-adapter.ts +3 -3
- package/src/core/runtime/index.ts +13 -13
- package/src/core/runtime/node-adapter.ts +10 -16
- package/src/core/runtime/vercel-edge-adapter.ts +3 -3
- package/src/core/utilities/hooks.ts +3 -3
- package/src/core/utilities/index.ts +4 -5
- package/src/core/validation/adapters.ts +1 -1
- package/src/core/validation/index.ts +16 -68
- package/src/index.ts +66 -73
- package/src/moro.ts +204 -685
- package/src/types/config.ts +2 -71
- package/src/types/core.ts +47 -49
- package/src/types/hooks.ts +1 -1
- package/src/types/http.ts +1 -23
- package/src/types/logger.ts +0 -9
- package/src/types/module.ts +0 -12
- package/src/types/runtime.ts +1 -1
- package/tsconfig.json +2 -4
- package/dist/core/config/config-manager.d.ts +0 -44
- package/dist/core/config/config-manager.js +0 -104
- package/dist/core/config/config-manager.js.map +0 -1
- package/dist/core/config/config-sources.d.ts +0 -21
- package/dist/core/config/config-sources.js +0 -499
- package/dist/core/config/config-sources.js.map +0 -1
- package/dist/core/config/config-validator.d.ts +0 -21
- package/dist/core/config/config-validator.js +0 -788
- package/dist/core/config/config-validator.js.map +0 -1
- package/dist/core/http/uws-http-server.d.ts +0 -64
- package/dist/core/http/uws-http-server.js +0 -688
- package/dist/core/http/uws-http-server.js.map +0 -1
- package/dist/core/middleware/built-in/jwt-helpers.d.ts +0 -118
- package/dist/core/middleware/built-in/jwt-helpers.js +0 -218
- package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
- package/dist/core/networking/adapters/uws-adapter.d.ts +0 -44
- package/dist/core/networking/adapters/uws-adapter.js +0 -513
- package/dist/core/networking/adapters/uws-adapter.js.map +0 -1
- package/dist/core/utilities/package-utils.d.ts +0 -38
- package/dist/core/utilities/package-utils.js +0 -57
- package/dist/core/utilities/package-utils.js.map +0 -1
- package/jest.config.mjs +0 -41
- package/src/core/config/config-manager.ts +0 -133
- package/src/core/config/config-sources.ts +0 -596
- package/src/core/config/config-validator.ts +0 -1113
- package/src/core/http/uws-http-server.ts +0 -794
- package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
- package/src/core/networking/adapters/uws-adapter.ts +0 -619
- package/src/core/utilities/package-utils.ts +0 -59
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@morojs/moro",
|
|
3
|
-
"version": "1.6.
|
|
4
|
-
"description": "High-performance Node.js framework with intelligent routing, automatic middleware ordering, enterprise authentication (Auth.js), type-safe validation, and functional architecture",
|
|
5
|
-
"type": "module",
|
|
3
|
+
"version": "1.6.1",
|
|
4
|
+
"description": "High-performance Node.js framework with intelligent routing, automatic middleware ordering, enterprise authentication (Auth.js), type-safe Zod validation, and functional architecture",
|
|
6
5
|
"main": "dist/index.js",
|
|
7
6
|
"types": "dist/index.d.ts",
|
|
8
7
|
"exports": {
|
|
9
8
|
".": {
|
|
10
9
|
"development": "./src/index.ts",
|
|
11
10
|
"import": "./dist/index.js",
|
|
11
|
+
"require": "./dist/index.js",
|
|
12
12
|
"types": "./dist/index.d.ts"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
@@ -29,22 +29,20 @@
|
|
|
29
29
|
"test:ci": "jest --coverage --watchAll=false --ci --forceExit",
|
|
30
30
|
"test:force": "jest --forceExit",
|
|
31
31
|
"test:all": "npm run test:unit && npm run test:integration && npm run test:e2e",
|
|
32
|
-
"test:dist": "npm run build && node scripts/validate-dist.mjs",
|
|
33
|
-
"test:package": "npm run build && node scripts/validate-package.mjs",
|
|
34
32
|
"lint": "eslint src --ext .ts",
|
|
35
33
|
"lint:fix": "eslint src --ext .ts --fix",
|
|
36
|
-
"format": "prettier --write \"src/**/*.ts\"
|
|
37
|
-
"format:check": "prettier --check \"src/**/*.ts\"
|
|
34
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
35
|
+
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
38
36
|
"lint-staged": "lint-staged",
|
|
39
37
|
"docs:build": "typedoc --out docs-html src/index.ts",
|
|
40
38
|
"docs:serve": "http-server docs-html -p 8080",
|
|
41
39
|
"docs:json": "typedoc --json docs-json/api.json src/index.ts",
|
|
42
40
|
"docs:markdown": "typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts",
|
|
43
41
|
"docs:all": "npm run docs:build && npm run docs:json && npm run docs:markdown",
|
|
44
|
-
"prerelease": "
|
|
45
|
-
"prerelease:patch": "
|
|
46
|
-
"prerelease:minor": "
|
|
47
|
-
"prerelease:major": "
|
|
42
|
+
"prerelease": "node scripts/release.js",
|
|
43
|
+
"prerelease:patch": "node scripts/release.js patch",
|
|
44
|
+
"prerelease:minor": "node scripts/release.js minor",
|
|
45
|
+
"prerelease:major": "node scripts/release.js major"
|
|
48
46
|
},
|
|
49
47
|
"keywords": [
|
|
50
48
|
"nodejs",
|
|
@@ -91,9 +89,8 @@
|
|
|
91
89
|
"pg": "^8.16.3",
|
|
92
90
|
"socket.io": "^4.8.1",
|
|
93
91
|
"swagger-ui-dist": "^5.28.1",
|
|
94
|
-
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.52.0",
|
|
95
92
|
"ws": "^8.18.0",
|
|
96
|
-
"yup": "^1.
|
|
93
|
+
"yup": "^1.0.0"
|
|
97
94
|
},
|
|
98
95
|
"peerDependenciesMeta": {
|
|
99
96
|
"@auth/core": {
|
|
@@ -123,9 +120,6 @@
|
|
|
123
120
|
"socket.io": {
|
|
124
121
|
"optional": true
|
|
125
122
|
},
|
|
126
|
-
"uWebSockets.js": {
|
|
127
|
-
"optional": true
|
|
128
|
-
},
|
|
129
123
|
"ws": {
|
|
130
124
|
"optional": true
|
|
131
125
|
},
|
|
@@ -171,7 +165,6 @@
|
|
|
171
165
|
"typedoc-plugin-markdown": "^4.8.1",
|
|
172
166
|
"typedoc-theme-hierarchy": "^6.0.0",
|
|
173
167
|
"typescript": "^5.9.2",
|
|
174
|
-
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.52.0",
|
|
175
168
|
"ws": "^8.18.3",
|
|
176
169
|
"zod": "^4.1.8"
|
|
177
170
|
},
|
|
@@ -181,9 +174,49 @@
|
|
|
181
174
|
"README.md",
|
|
182
175
|
"LICENSE",
|
|
183
176
|
"API.md",
|
|
184
|
-
"tsconfig.json"
|
|
185
|
-
"jest.config.mjs"
|
|
177
|
+
"tsconfig.json"
|
|
186
178
|
],
|
|
179
|
+
"jest": {
|
|
180
|
+
"preset": "ts-jest",
|
|
181
|
+
"testEnvironment": "node",
|
|
182
|
+
"roots": [
|
|
183
|
+
"<rootDir>/src",
|
|
184
|
+
"<rootDir>/tests"
|
|
185
|
+
],
|
|
186
|
+
"testMatch": [
|
|
187
|
+
"**/tests/**/*.test.ts",
|
|
188
|
+
"**/src/**/*.test.ts"
|
|
189
|
+
],
|
|
190
|
+
"transform": {
|
|
191
|
+
"^.+\\.ts$": [
|
|
192
|
+
"ts-jest",
|
|
193
|
+
{}
|
|
194
|
+
]
|
|
195
|
+
},
|
|
196
|
+
"collectCoverageFrom": [
|
|
197
|
+
"src/**/*.ts",
|
|
198
|
+
"!src/**/*.d.ts",
|
|
199
|
+
"!src/**/*.test.ts",
|
|
200
|
+
"!src/**/index.ts"
|
|
201
|
+
],
|
|
202
|
+
"coverageDirectory": "coverage",
|
|
203
|
+
"coverageReporters": [
|
|
204
|
+
"text",
|
|
205
|
+
"lcov",
|
|
206
|
+
"html"
|
|
207
|
+
],
|
|
208
|
+
"setupFilesAfterEnv": [
|
|
209
|
+
"<rootDir>/tests/setup.ts"
|
|
210
|
+
],
|
|
211
|
+
"testTimeout": 15000,
|
|
212
|
+
"maxWorkers": 1,
|
|
213
|
+
"forceExit": false,
|
|
214
|
+
"detectOpenHandles": true,
|
|
215
|
+
"openHandlesTimeout": 1000,
|
|
216
|
+
"extensionsToTreatAsEsm": [
|
|
217
|
+
".ts"
|
|
218
|
+
]
|
|
219
|
+
},
|
|
187
220
|
"lint-staged": {
|
|
188
221
|
"src/**/*.ts": [
|
|
189
222
|
"prettier --write",
|
|
@@ -8,9 +8,7 @@
|
|
|
8
8
|
* @see https://github.com/nextauthjs/next-auth/tree/main/packages
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
const logger = createFrameworkLogger('AuthAdapter');
|
|
11
|
+
import { logger } from '../logger';
|
|
14
12
|
|
|
15
13
|
// Mock Auth.js types until we have the actual package
|
|
16
14
|
// These would come from @auth/core in a real implementation
|
|
@@ -251,7 +249,7 @@ export async function MoroJSAuth(config: MoroJSAuthConfig): Promise<{
|
|
|
251
249
|
basePath,
|
|
252
250
|
raw: (code: any, ...message: any[]) => {
|
|
253
251
|
if (config.morojs?.debug) {
|
|
254
|
-
logger.debug(`[MoroJS Auth] ${code}:`, 'AuthAdapter', { message });
|
|
252
|
+
logger.debug(`[MoroJS Auth] ${code}:`, 'AuthAdapter', { code, message });
|
|
255
253
|
}
|
|
256
254
|
},
|
|
257
255
|
});
|
|
@@ -265,7 +263,7 @@ export async function MoroJSAuth(config: MoroJSAuthConfig): Promise<{
|
|
|
265
263
|
// Convert Web API response to MoroJS response
|
|
266
264
|
await fromWebResponse(finalResponse, res);
|
|
267
265
|
} catch (error) {
|
|
268
|
-
logger.error('[MoroJS Auth] Error', 'AuthAdapter', {
|
|
266
|
+
logger.error('[MoroJS Auth] Error:', 'AuthAdapter', {
|
|
269
267
|
error: error instanceof Error ? error.message : String(error),
|
|
270
268
|
});
|
|
271
269
|
// Robust error handling - check if response methods exist
|
|
@@ -314,7 +312,7 @@ export async function MoroJSAuth(config: MoroJSAuthConfig): Promise<{
|
|
|
314
312
|
return null;
|
|
315
313
|
} catch (error) {
|
|
316
314
|
if (config.morojs?.debug) {
|
|
317
|
-
logger.error('[MoroJS Auth] Session error', 'AuthAdapter', {
|
|
315
|
+
logger.error('[MoroJS Auth] Session error:', 'AuthAdapter', {
|
|
318
316
|
error: error instanceof Error ? error.message : String(error),
|
|
319
317
|
});
|
|
320
318
|
}
|
|
@@ -330,21 +328,18 @@ export async function MoroJSAuth(config: MoroJSAuthConfig): Promise<{
|
|
|
330
328
|
* This creates a MoroJS-compatible middleware for authentication
|
|
331
329
|
*/
|
|
332
330
|
export function createAuthMiddleware(config: MoroJSAuthConfig) {
|
|
333
|
-
logger.info('createAuthMiddleware called - creating middleware function', 'AuthAdapter');
|
|
331
|
+
logger.info('🏭 createAuthMiddleware called - creating middleware function', 'AuthAdapter');
|
|
334
332
|
// Return a function that MoroJS can call directly
|
|
335
333
|
return async (app: any) => {
|
|
336
|
-
logger.info('Installing Auth.js middleware...', 'AuthAdapter');
|
|
337
|
-
logger.
|
|
338
|
-
appType: typeof app,
|
|
339
|
-
appConstructor: app.constructor.name,
|
|
340
|
-
});
|
|
334
|
+
logger.info('🔧 Installing Auth.js middleware...', 'AuthAdapter');
|
|
335
|
+
logger.info(`📦 App object received: ${typeof app} ${app.constructor.name}`, 'AuthAdapter');
|
|
341
336
|
|
|
342
337
|
// Get the hooks from the app's middleware system
|
|
343
338
|
const hooks =
|
|
344
339
|
(app as any).coreFramework?.middlewareManager?.hooks || (app as any).middlewareManager?.hooks;
|
|
345
340
|
|
|
346
341
|
if (!hooks) {
|
|
347
|
-
logger.error('Could not access MoroJS hooks system', 'AuthAdapter');
|
|
342
|
+
logger.error('❌ Could not access MoroJS hooks system', 'AuthAdapter');
|
|
348
343
|
return;
|
|
349
344
|
}
|
|
350
345
|
|
|
@@ -355,9 +350,9 @@ export function createAuthMiddleware(config: MoroJSAuthConfig) {
|
|
|
355
350
|
|
|
356
351
|
// Register request hook
|
|
357
352
|
hooks.before('request', async (context: any) => {
|
|
358
|
-
logger.debug('Native adapter hook starting', 'AuthAdapter');
|
|
353
|
+
logger.debug('🔒 Native adapter hook starting...', 'AuthAdapter');
|
|
359
354
|
const req = context.request;
|
|
360
|
-
logger.debug(
|
|
355
|
+
logger.debug(`📝 Request path: ${req.path || req.url}`, 'AuthAdapter');
|
|
361
356
|
|
|
362
357
|
try {
|
|
363
358
|
// Just add auth object to request - don't touch response
|
|
@@ -394,16 +389,16 @@ export function createAuthMiddleware(config: MoroJSAuthConfig) {
|
|
|
394
389
|
return { url: signOutUrl };
|
|
395
390
|
},
|
|
396
391
|
};
|
|
397
|
-
logger.debug('Native adapter hook completed successfully', 'AuthAdapter');
|
|
392
|
+
logger.debug('✅ Native adapter hook completed successfully', 'AuthAdapter');
|
|
398
393
|
} catch (error) {
|
|
399
|
-
logger.error('Error in native adapter hook', 'AuthAdapter', {
|
|
394
|
+
logger.error('❌ Error in native adapter hook:', 'AuthAdapter', {
|
|
400
395
|
error: error instanceof Error ? error.message : String(error),
|
|
401
396
|
});
|
|
402
397
|
throw error;
|
|
403
398
|
}
|
|
404
399
|
});
|
|
405
400
|
|
|
406
|
-
logger.info('Auth.js middleware installed successfully!', 'AuthAdapter');
|
|
401
|
+
logger.info('✅ Auth.js middleware installed successfully!', 'AuthAdapter');
|
|
407
402
|
};
|
|
408
403
|
}
|
|
409
404
|
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
// Configuration File Loader - Load moro.config.js/ts files
|
|
2
2
|
import { existsSync } from 'fs';
|
|
3
3
|
import { join } from 'path';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { createFrameworkLogger } from '../logger/index.js';
|
|
4
|
+
import { AppConfig } from './schema';
|
|
5
|
+
import { createFrameworkLogger } from '../logger';
|
|
7
6
|
|
|
8
7
|
const logger = createFrameworkLogger('ConfigFile');
|
|
9
8
|
|
|
10
|
-
// Create require function for ESM to enable synchronous config loading
|
|
11
|
-
// Use process.cwd() as base since we're loading with absolute paths anyway
|
|
12
|
-
const moduleRequire = createRequire(join(process.cwd(), 'index.js'));
|
|
13
|
-
|
|
14
9
|
/**
|
|
15
10
|
* Supported configuration file names in order of preference
|
|
16
11
|
*/
|
|
@@ -28,23 +23,55 @@ export function loadConfigFileSync(cwd: string = process.cwd()): Partial<AppConf
|
|
|
28
23
|
logger.debug('No configuration file found');
|
|
29
24
|
return null;
|
|
30
25
|
}
|
|
26
|
+
// Handle TypeScript files by trying dynamic import (works with tsx/ts-node runtimes)
|
|
27
|
+
if (configFile.endsWith('.ts')) {
|
|
28
|
+
logger.debug('Found TypeScript config file, attempting to load with dynamic import');
|
|
29
|
+
try {
|
|
30
|
+
// When running under tsx/ts-node, dynamic imports work synchronously for TypeScript
|
|
31
|
+
// We can use require() with the current environment that already has TypeScript support
|
|
32
|
+
const config = require(configFile);
|
|
33
|
+
const configData = config.default || config;
|
|
34
|
+
|
|
35
|
+
if (!configData || typeof configData !== 'object') {
|
|
36
|
+
logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
logger.info(`TypeScript configuration loaded from: ${configFile}`);
|
|
41
|
+
return configData;
|
|
42
|
+
} catch (error) {
|
|
43
|
+
logger.debug(
|
|
44
|
+
'TypeScript config loading failed in sync mode, this is expected if not running with tsx/ts-node'
|
|
45
|
+
);
|
|
46
|
+
logger.debug('Error details:', String(error));
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Only .js files use the standard synchronous loading
|
|
52
|
+
if (!configFile.endsWith('.js')) {
|
|
53
|
+
logger.debug(
|
|
54
|
+
'Found config file with unsupported extension. Only .js and .ts files are supported.'
|
|
55
|
+
);
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
31
58
|
|
|
32
59
|
logger.debug(`Loading configuration from: ${configFile}`);
|
|
33
60
|
|
|
34
61
|
try {
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
delete moduleRequire.cache[moduleRequire.resolve(configFile)];
|
|
62
|
+
// Clear module cache to ensure fresh load
|
|
63
|
+
delete require.cache[require.resolve(configFile)];
|
|
38
64
|
|
|
39
|
-
const config =
|
|
65
|
+
const config = require(configFile);
|
|
66
|
+
const configData = config.default || config;
|
|
40
67
|
|
|
41
|
-
if (!
|
|
68
|
+
if (!configData || typeof configData !== 'object') {
|
|
42
69
|
logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
|
|
43
70
|
return null;
|
|
44
71
|
}
|
|
45
72
|
|
|
46
73
|
logger.info(`Configuration loaded from: ${configFile}`);
|
|
47
|
-
return
|
|
74
|
+
return configData;
|
|
48
75
|
} catch (error) {
|
|
49
76
|
logger.error(`Failed to load configuration file ${configFile}:`, String(error));
|
|
50
77
|
logger.warn('Falling back to environment variable configuration');
|
|
@@ -145,3 +172,236 @@ async function setupTypeScriptLoader(): Promise<void> {
|
|
|
145
172
|
// the TypeScript transpilation is already handled by those tools.
|
|
146
173
|
logger.debug('TypeScript config loading delegated to runtime environment');
|
|
147
174
|
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Convert a configuration object to environment variable mappings
|
|
178
|
+
* This function flattens the config object and sets corresponding environment variables
|
|
179
|
+
*/
|
|
180
|
+
export function applyConfigAsEnvironmentVariables(config: Partial<AppConfig>): void {
|
|
181
|
+
if (!config || typeof config !== 'object') {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Apply server configuration
|
|
186
|
+
if (config.server) {
|
|
187
|
+
setEnvIfNotSet('PORT', config.server.port?.toString());
|
|
188
|
+
setEnvIfNotSet('HOST', config.server.host);
|
|
189
|
+
setEnvIfNotSet('NODE_ENV', config.server.environment);
|
|
190
|
+
setEnvIfNotSet('MAX_CONNECTIONS', config.server.maxConnections?.toString());
|
|
191
|
+
setEnvIfNotSet('REQUEST_TIMEOUT', config.server.timeout?.toString());
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Apply database configuration
|
|
195
|
+
if (config.database) {
|
|
196
|
+
setEnvIfNotSet('DATABASE_URL', config.database.url);
|
|
197
|
+
|
|
198
|
+
if (config.database.redis) {
|
|
199
|
+
setEnvIfNotSet('REDIS_URL', config.database.redis.url);
|
|
200
|
+
setEnvIfNotSet('REDIS_MAX_RETRIES', config.database.redis.maxRetries?.toString());
|
|
201
|
+
setEnvIfNotSet('REDIS_RETRY_DELAY', config.database.redis.retryDelay?.toString());
|
|
202
|
+
setEnvIfNotSet('REDIS_KEY_PREFIX', config.database.redis.keyPrefix);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (config.database.mysql) {
|
|
206
|
+
setEnvIfNotSet('MYSQL_HOST', config.database.mysql.host);
|
|
207
|
+
setEnvIfNotSet('MYSQL_PORT', config.database.mysql.port?.toString());
|
|
208
|
+
setEnvIfNotSet('MYSQL_DATABASE', config.database.mysql.database);
|
|
209
|
+
setEnvIfNotSet('MYSQL_USERNAME', config.database.mysql.username);
|
|
210
|
+
setEnvIfNotSet('MYSQL_PASSWORD', config.database.mysql.password);
|
|
211
|
+
setEnvIfNotSet('MYSQL_CONNECTION_LIMIT', config.database.mysql.connectionLimit?.toString());
|
|
212
|
+
setEnvIfNotSet('MYSQL_ACQUIRE_TIMEOUT', config.database.mysql.acquireTimeout?.toString());
|
|
213
|
+
setEnvIfNotSet('MYSQL_TIMEOUT', config.database.mysql.timeout?.toString());
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Apply service discovery configuration
|
|
218
|
+
if (config.serviceDiscovery) {
|
|
219
|
+
setEnvIfNotSet('SERVICE_DISCOVERY_ENABLED', config.serviceDiscovery.enabled?.toString());
|
|
220
|
+
setEnvIfNotSet('DISCOVERY_TYPE', config.serviceDiscovery.type);
|
|
221
|
+
setEnvIfNotSet('CONSUL_URL', config.serviceDiscovery.consulUrl);
|
|
222
|
+
setEnvIfNotSet('K8S_NAMESPACE', config.serviceDiscovery.kubernetesNamespace);
|
|
223
|
+
setEnvIfNotSet(
|
|
224
|
+
'HEALTH_CHECK_INTERVAL',
|
|
225
|
+
config.serviceDiscovery.healthCheckInterval?.toString()
|
|
226
|
+
);
|
|
227
|
+
setEnvIfNotSet('DISCOVERY_RETRY_ATTEMPTS', config.serviceDiscovery.retryAttempts?.toString());
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Apply logging configuration
|
|
231
|
+
if (config.logging) {
|
|
232
|
+
setEnvIfNotSet('LOG_LEVEL', config.logging.level);
|
|
233
|
+
setEnvIfNotSet('LOG_FORMAT', config.logging.format);
|
|
234
|
+
setEnvIfNotSet('LOG_COLORS', config.logging.enableColors?.toString());
|
|
235
|
+
setEnvIfNotSet('LOG_TIMESTAMP', config.logging.enableTimestamp?.toString());
|
|
236
|
+
setEnvIfNotSet('LOG_CONTEXT', config.logging.enableContext?.toString());
|
|
237
|
+
|
|
238
|
+
if (config.logging.outputs) {
|
|
239
|
+
setEnvIfNotSet('LOG_CONSOLE', config.logging.outputs.console?.toString());
|
|
240
|
+
|
|
241
|
+
if (config.logging.outputs.file) {
|
|
242
|
+
setEnvIfNotSet('LOG_FILE_ENABLED', config.logging.outputs.file.enabled?.toString());
|
|
243
|
+
setEnvIfNotSet('LOG_FILE_PATH', config.logging.outputs.file.path);
|
|
244
|
+
setEnvIfNotSet('LOG_FILE_MAX_SIZE', config.logging.outputs.file.maxSize);
|
|
245
|
+
setEnvIfNotSet('LOG_FILE_MAX_FILES', config.logging.outputs.file.maxFiles?.toString());
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (config.logging.outputs.webhook) {
|
|
249
|
+
setEnvIfNotSet('LOG_WEBHOOK_ENABLED', config.logging.outputs.webhook.enabled?.toString());
|
|
250
|
+
setEnvIfNotSet('LOG_WEBHOOK_URL', config.logging.outputs.webhook.url);
|
|
251
|
+
if (config.logging.outputs.webhook.headers) {
|
|
252
|
+
setEnvIfNotSet(
|
|
253
|
+
'LOG_WEBHOOK_HEADERS',
|
|
254
|
+
JSON.stringify(config.logging.outputs.webhook.headers)
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// Apply module defaults
|
|
262
|
+
if (config.modules) {
|
|
263
|
+
if (config.modules.cache) {
|
|
264
|
+
setEnvIfNotSet('CACHE_ENABLED', config.modules.cache.enabled?.toString());
|
|
265
|
+
setEnvIfNotSet('DEFAULT_CACHE_TTL', config.modules.cache.defaultTtl?.toString());
|
|
266
|
+
setEnvIfNotSet('CACHE_MAX_SIZE', config.modules.cache.maxSize?.toString());
|
|
267
|
+
setEnvIfNotSet('CACHE_STRATEGY', config.modules.cache.strategy);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
if (config.modules.rateLimit) {
|
|
271
|
+
setEnvIfNotSet('RATE_LIMIT_ENABLED', config.modules.rateLimit.enabled?.toString());
|
|
272
|
+
setEnvIfNotSet(
|
|
273
|
+
'DEFAULT_RATE_LIMIT_REQUESTS',
|
|
274
|
+
config.modules.rateLimit.defaultRequests?.toString()
|
|
275
|
+
);
|
|
276
|
+
setEnvIfNotSet(
|
|
277
|
+
'DEFAULT_RATE_LIMIT_WINDOW',
|
|
278
|
+
config.modules.rateLimit.defaultWindow?.toString()
|
|
279
|
+
);
|
|
280
|
+
setEnvIfNotSet(
|
|
281
|
+
'RATE_LIMIT_SKIP_SUCCESS',
|
|
282
|
+
config.modules.rateLimit.skipSuccessfulRequests?.toString()
|
|
283
|
+
);
|
|
284
|
+
setEnvIfNotSet(
|
|
285
|
+
'RATE_LIMIT_SKIP_FAILED',
|
|
286
|
+
config.modules.rateLimit.skipFailedRequests?.toString()
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (config.modules.validation) {
|
|
291
|
+
setEnvIfNotSet('VALIDATION_ENABLED', config.modules.validation.enabled?.toString());
|
|
292
|
+
setEnvIfNotSet(
|
|
293
|
+
'VALIDATION_STRIP_UNKNOWN',
|
|
294
|
+
config.modules.validation.stripUnknown?.toString()
|
|
295
|
+
);
|
|
296
|
+
setEnvIfNotSet('VALIDATION_ABORT_EARLY', config.modules.validation.abortEarly?.toString());
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// Apply security configuration
|
|
301
|
+
if (config.security) {
|
|
302
|
+
if (config.security.cors) {
|
|
303
|
+
setEnvIfNotSet('CORS_ENABLED', config.security.cors.enabled?.toString());
|
|
304
|
+
if (typeof config.security.cors.origin === 'string') {
|
|
305
|
+
setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin);
|
|
306
|
+
} else if (Array.isArray(config.security.cors.origin)) {
|
|
307
|
+
setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin.join(','));
|
|
308
|
+
} else if (typeof config.security.cors.origin === 'boolean') {
|
|
309
|
+
setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin.toString());
|
|
310
|
+
}
|
|
311
|
+
setEnvIfNotSet('CORS_METHODS', config.security.cors.methods?.join(','));
|
|
312
|
+
setEnvIfNotSet('CORS_HEADERS', config.security.cors.allowedHeaders?.join(','));
|
|
313
|
+
setEnvIfNotSet('CORS_CREDENTIALS', config.security.cors.credentials?.toString());
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (config.security.helmet) {
|
|
317
|
+
setEnvIfNotSet('HELMET_ENABLED', config.security.helmet.enabled?.toString());
|
|
318
|
+
setEnvIfNotSet('HELMET_CSP', config.security.helmet.contentSecurityPolicy?.toString());
|
|
319
|
+
setEnvIfNotSet('HELMET_HSTS', config.security.helmet.hsts?.toString());
|
|
320
|
+
setEnvIfNotSet('HELMET_NO_SNIFF', config.security.helmet.noSniff?.toString());
|
|
321
|
+
setEnvIfNotSet('HELMET_FRAMEGUARD', config.security.helmet.frameguard?.toString());
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
if (config.security.rateLimit?.global) {
|
|
325
|
+
setEnvIfNotSet(
|
|
326
|
+
'GLOBAL_RATE_LIMIT_ENABLED',
|
|
327
|
+
config.security.rateLimit.global.enabled?.toString()
|
|
328
|
+
);
|
|
329
|
+
setEnvIfNotSet(
|
|
330
|
+
'GLOBAL_RATE_LIMIT_REQUESTS',
|
|
331
|
+
config.security.rateLimit.global.requests?.toString()
|
|
332
|
+
);
|
|
333
|
+
setEnvIfNotSet(
|
|
334
|
+
'GLOBAL_RATE_LIMIT_WINDOW',
|
|
335
|
+
config.security.rateLimit.global.window?.toString()
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// Apply external services configuration
|
|
341
|
+
if (config.external) {
|
|
342
|
+
if (config.external.stripe) {
|
|
343
|
+
setEnvIfNotSet('STRIPE_SECRET_KEY', config.external.stripe.secretKey);
|
|
344
|
+
setEnvIfNotSet('STRIPE_PUBLISHABLE_KEY', config.external.stripe.publishableKey);
|
|
345
|
+
setEnvIfNotSet('STRIPE_WEBHOOK_SECRET', config.external.stripe.webhookSecret);
|
|
346
|
+
setEnvIfNotSet('STRIPE_API_VERSION', config.external.stripe.apiVersion);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
if (config.external.paypal) {
|
|
350
|
+
setEnvIfNotSet('PAYPAL_CLIENT_ID', config.external.paypal.clientId);
|
|
351
|
+
setEnvIfNotSet('PAYPAL_CLIENT_SECRET', config.external.paypal.clientSecret);
|
|
352
|
+
setEnvIfNotSet('PAYPAL_WEBHOOK_ID', config.external.paypal.webhookId);
|
|
353
|
+
setEnvIfNotSet('PAYPAL_ENVIRONMENT', config.external.paypal.environment);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
if (config.external.smtp) {
|
|
357
|
+
setEnvIfNotSet('SMTP_HOST', config.external.smtp.host);
|
|
358
|
+
setEnvIfNotSet('SMTP_PORT', config.external.smtp.port?.toString());
|
|
359
|
+
setEnvIfNotSet('SMTP_SECURE', config.external.smtp.secure?.toString());
|
|
360
|
+
setEnvIfNotSet('SMTP_USERNAME', config.external.smtp.username);
|
|
361
|
+
setEnvIfNotSet('SMTP_PASSWORD', config.external.smtp.password);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Apply performance configuration
|
|
366
|
+
if (config.performance) {
|
|
367
|
+
if (config.performance.compression) {
|
|
368
|
+
setEnvIfNotSet('COMPRESSION_ENABLED', config.performance.compression.enabled?.toString());
|
|
369
|
+
setEnvIfNotSet('COMPRESSION_LEVEL', config.performance.compression.level?.toString());
|
|
370
|
+
setEnvIfNotSet('COMPRESSION_THRESHOLD', config.performance.compression.threshold?.toString());
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
if (config.performance.circuitBreaker) {
|
|
374
|
+
setEnvIfNotSet(
|
|
375
|
+
'CIRCUIT_BREAKER_ENABLED',
|
|
376
|
+
config.performance.circuitBreaker.enabled?.toString()
|
|
377
|
+
);
|
|
378
|
+
setEnvIfNotSet(
|
|
379
|
+
'CIRCUIT_BREAKER_THRESHOLD',
|
|
380
|
+
config.performance.circuitBreaker.failureThreshold?.toString()
|
|
381
|
+
);
|
|
382
|
+
setEnvIfNotSet(
|
|
383
|
+
'CIRCUIT_BREAKER_RESET',
|
|
384
|
+
config.performance.circuitBreaker.resetTimeout?.toString()
|
|
385
|
+
);
|
|
386
|
+
setEnvIfNotSet(
|
|
387
|
+
'CIRCUIT_BREAKER_MONITOR',
|
|
388
|
+
config.performance.circuitBreaker.monitoringPeriod?.toString()
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
if (config.performance.clustering) {
|
|
393
|
+
setEnvIfNotSet('CLUSTERING_ENABLED', config.performance.clustering.enabled?.toString());
|
|
394
|
+
setEnvIfNotSet('CLUSTER_WORKERS', config.performance.clustering.workers?.toString());
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Set environment variable only if it's not already set
|
|
401
|
+
* This ensures environment variables take precedence over config file values
|
|
402
|
+
*/
|
|
403
|
+
function setEnvIfNotSet(key: string, value: string | undefined): void {
|
|
404
|
+
if (value !== undefined && process.env[key] === undefined) {
|
|
405
|
+
process.env[key] = value;
|
|
406
|
+
}
|
|
407
|
+
}
|