@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
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Module System - Definition and Loading
|
|
2
2
|
import { promises as fs } from 'fs';
|
|
3
3
|
import path from 'path';
|
|
4
|
-
import { Container } from '../utilities
|
|
5
|
-
import { ModuleConfig } from '../../types/module
|
|
6
|
-
import { ModuleDefinition, ModuleRoute, ModuleSocket } from '../../types/module
|
|
7
|
-
import { createFrameworkLogger } from '../logger
|
|
4
|
+
import { Container } from '../utilities';
|
|
5
|
+
import { ModuleConfig } from '../../types/module';
|
|
6
|
+
import { ModuleDefinition, ModuleRoute, ModuleSocket } from '../../types/module';
|
|
7
|
+
import { logger, createFrameworkLogger } from '../logger';
|
|
8
8
|
|
|
9
9
|
// Module Definition Function
|
|
10
10
|
export function defineModule(definition: ModuleDefinition): ModuleConfig {
|
|
@@ -24,21 +24,6 @@ export function defineModule(definition: ModuleDefinition): ModuleConfig {
|
|
|
24
24
|
cache: route.cache,
|
|
25
25
|
rateLimit: route.rateLimit,
|
|
26
26
|
middleware: route.middleware,
|
|
27
|
-
// Copy all additional properties for extensibility
|
|
28
|
-
...Object.fromEntries(
|
|
29
|
-
Object.entries(route).filter(
|
|
30
|
-
([key]) =>
|
|
31
|
-
![
|
|
32
|
-
'method',
|
|
33
|
-
'path',
|
|
34
|
-
'handler',
|
|
35
|
-
'validation',
|
|
36
|
-
'cache',
|
|
37
|
-
'rateLimit',
|
|
38
|
-
'middleware',
|
|
39
|
-
].includes(key)
|
|
40
|
-
)
|
|
41
|
-
),
|
|
42
27
|
}));
|
|
43
28
|
|
|
44
29
|
// Store the actual route handler functions
|
|
@@ -109,14 +94,18 @@ export class ModuleLoader {
|
|
|
109
94
|
}
|
|
110
95
|
}
|
|
111
96
|
} catch (error) {
|
|
112
|
-
this.moduleLogger.warn(
|
|
113
|
-
|
|
114
|
-
|
|
97
|
+
this.moduleLogger.warn(
|
|
98
|
+
`⚠️ Could not load module from ${modulePath}:`,
|
|
99
|
+
'ModuleLoader',
|
|
100
|
+
{
|
|
101
|
+
error: error instanceof Error ? error.message : String(error),
|
|
102
|
+
}
|
|
103
|
+
);
|
|
115
104
|
}
|
|
116
105
|
}
|
|
117
106
|
}
|
|
118
107
|
} catch (error) {
|
|
119
|
-
this.moduleLogger.error('Failed to discover modules', '
|
|
108
|
+
this.moduleLogger.error('Failed to discover modules:', 'ModuleLoader', {
|
|
120
109
|
error: error instanceof Error ? error.message : String(error),
|
|
121
110
|
});
|
|
122
111
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
// WebSocket Adapters for Moro Framework
|
|
2
2
|
// Export all available adapters from this centralized location
|
|
3
3
|
|
|
4
|
-
export { SocketIOAdapter } from './socketio-adapter
|
|
5
|
-
export { WSAdapter } from './ws-adapter
|
|
6
|
-
export { UWebSocketsAdapter } from './uws-adapter.js';
|
|
4
|
+
export { SocketIOAdapter } from './socketio-adapter';
|
|
5
|
+
export { WSAdapter } from './ws-adapter';
|
|
7
6
|
|
|
8
7
|
// Re-export the adapter interface for convenience
|
|
9
8
|
export type {
|
|
@@ -14,4 +13,4 @@ export type {
|
|
|
14
13
|
WebSocketEmitter,
|
|
15
14
|
WebSocketMiddleware,
|
|
16
15
|
WebSocketEventHandler,
|
|
17
|
-
} from '../websocket-adapter
|
|
16
|
+
} from '../websocket-adapter';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Socket.IO WebSocket Adapter for Moro Framework
|
|
2
2
|
// Implements the WebSocket adapter interface using Socket.IO
|
|
3
3
|
|
|
4
|
-
import { resolveUserPackage } from '../../utilities/package-utils.js';
|
|
5
4
|
import {
|
|
6
5
|
WebSocketAdapter,
|
|
7
6
|
WebSocketAdapterOptions,
|
|
@@ -9,7 +8,7 @@ import {
|
|
|
9
8
|
WebSocketConnection,
|
|
10
9
|
WebSocketEmitter,
|
|
11
10
|
WebSocketMiddleware,
|
|
12
|
-
} from '../websocket-adapter
|
|
11
|
+
} from '../websocket-adapter';
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
14
|
* Socket.IO adapter implementation
|
|
@@ -20,9 +19,8 @@ export class SocketIOAdapter implements WebSocketAdapter {
|
|
|
20
19
|
|
|
21
20
|
async initialize(httpServer: any, options: WebSocketAdapterOptions = {}): Promise<void> {
|
|
22
21
|
try {
|
|
23
|
-
// Dynamic import
|
|
24
|
-
const
|
|
25
|
-
const { Server } = await import(socketIOPath);
|
|
22
|
+
// Dynamic import to avoid requiring socket.io as a hard dependency
|
|
23
|
+
const { Server } = await import('socket.io');
|
|
26
24
|
|
|
27
25
|
this.io = new Server(httpServer, {
|
|
28
26
|
cors: options.cors || { origin: '*' },
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Native WebSocket Adapter for Moro Framework
|
|
2
2
|
// Implements the WebSocket adapter interface using the 'ws' library
|
|
3
3
|
|
|
4
|
-
import { resolveUserPackage } from '../../utilities/package-utils.js';
|
|
5
4
|
import {
|
|
6
5
|
WebSocketAdapter,
|
|
7
6
|
WebSocketAdapterOptions,
|
|
@@ -9,8 +8,8 @@ import {
|
|
|
9
8
|
WebSocketConnection,
|
|
10
9
|
WebSocketEmitter,
|
|
11
10
|
WebSocketMiddleware,
|
|
12
|
-
} from '../websocket-adapter
|
|
13
|
-
import { createFrameworkLogger } from '../../logger
|
|
11
|
+
} from '../websocket-adapter';
|
|
12
|
+
import { createFrameworkLogger } from '../../logger';
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
15
|
* Native WebSocket adapter using the 'ws' library
|
|
@@ -20,15 +19,14 @@ export class WSAdapter implements WebSocketAdapter {
|
|
|
20
19
|
private wss: any; // WebSocket server instance
|
|
21
20
|
private namespaces = new Map<string, WSNamespaceWrapper>();
|
|
22
21
|
private connections = new Map<string, WSConnectionWrapper>();
|
|
23
|
-
private wsLogger = createFrameworkLogger('WEBSOCKET_ADAPTER');
|
|
24
22
|
private customIdGenerator?: () => string;
|
|
25
23
|
private connectionCounter = 0;
|
|
24
|
+
private wsLogger = createFrameworkLogger('WEBSOCKET_ADAPTER');
|
|
26
25
|
|
|
27
26
|
async initialize(httpServer: any, options: WebSocketAdapterOptions = {}): Promise<void> {
|
|
28
27
|
try {
|
|
29
|
-
// Dynamic import
|
|
30
|
-
const
|
|
31
|
-
const { WebSocketServer } = await import(wsPath);
|
|
28
|
+
// Dynamic import to avoid requiring ws as a hard dependency
|
|
29
|
+
const { WebSocketServer } = await import('ws');
|
|
32
30
|
|
|
33
31
|
this.wss = new WebSocketServer({
|
|
34
32
|
server: httpServer,
|
|
@@ -102,7 +100,10 @@ export class WSAdapter implements WebSocketAdapter {
|
|
|
102
100
|
// ws library handles compression at the browser level
|
|
103
101
|
// This is a no-op but kept for interface compatibility
|
|
104
102
|
if (enabled) {
|
|
105
|
-
this.wsLogger.warn(
|
|
103
|
+
this.wsLogger.warn(
|
|
104
|
+
'Compression is handled automatically by the ws library and browsers',
|
|
105
|
+
'WSAdapter'
|
|
106
|
+
);
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
109
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
// Networking System - Centralized Exports
|
|
2
|
-
export { WebSocketManager } from './websocket-manager
|
|
3
|
-
export { ServiceRegistry } from './service-discovery
|
|
4
|
-
export type { ServiceInfo, ServiceDiscoveryOptions } from './service-discovery.js';
|
|
2
|
+
export { WebSocketManager } from './websocket-manager';
|
|
3
|
+
export { ServiceRegistry, ServiceInfo, ServiceDiscoveryOptions } from './service-discovery';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Service Discovery Client for Microservices
|
|
2
2
|
// Supports Consul, Kubernetes, and in-memory registry
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
import { logger, createFrameworkLogger } from '../logger';
|
|
4
5
|
|
|
5
6
|
export interface ServiceInfo {
|
|
6
7
|
name: string;
|
|
@@ -123,7 +124,7 @@ export class ServiceRegistry {
|
|
|
123
124
|
throw new Error(`Consul registration failed: ${response.statusText}`);
|
|
124
125
|
}
|
|
125
126
|
} catch (error) {
|
|
126
|
-
this.serviceLogger.error('Failed to register with Consul', '
|
|
127
|
+
this.serviceLogger.error('Failed to register with Consul:', 'ServiceRegistry', {
|
|
127
128
|
error: error instanceof Error ? error.message : String(error),
|
|
128
129
|
});
|
|
129
130
|
// Fallback to in-memory
|
|
@@ -154,7 +155,7 @@ export class ServiceRegistry {
|
|
|
154
155
|
metadata: entry.Service.Meta,
|
|
155
156
|
}));
|
|
156
157
|
} catch (error) {
|
|
157
|
-
this.serviceLogger.error('Failed to discover from Consul', '
|
|
158
|
+
this.serviceLogger.error('Failed to discover from Consul:', 'ServiceRegistry', {
|
|
158
159
|
error: error instanceof Error ? error.message : String(error),
|
|
159
160
|
});
|
|
160
161
|
return this.discoverFromMemory(serviceName);
|
|
@@ -169,7 +170,7 @@ export class ServiceRegistry {
|
|
|
169
170
|
method: 'PUT',
|
|
170
171
|
});
|
|
171
172
|
} catch (error) {
|
|
172
|
-
this.serviceLogger.error('Failed to deregister from Consul', '
|
|
173
|
+
this.serviceLogger.error('Failed to deregister from Consul:', 'ServiceRegistry', {
|
|
173
174
|
error: error instanceof Error ? error.message : String(error),
|
|
174
175
|
});
|
|
175
176
|
}
|
|
@@ -204,7 +205,7 @@ export class ServiceRegistry {
|
|
|
204
205
|
},
|
|
205
206
|
];
|
|
206
207
|
} catch (error) {
|
|
207
|
-
this.serviceLogger.error('Failed to discover from Kubernetes', '
|
|
208
|
+
this.serviceLogger.error('Failed to discover from Kubernetes:', 'ServiceRegistry', {
|
|
208
209
|
error: error instanceof Error ? error.message : String(error),
|
|
209
210
|
});
|
|
210
211
|
return this.discoverFromMemory(serviceName);
|
|
@@ -241,7 +242,7 @@ export class ServiceRegistry {
|
|
|
241
242
|
this.removeUnhealthyService(serviceName, service);
|
|
242
243
|
}
|
|
243
244
|
} catch (error) {
|
|
244
|
-
this.serviceLogger.warn(`Health check failed for ${serviceName}
|
|
245
|
+
this.serviceLogger.warn(`Health check failed for ${serviceName}:`, 'ServiceRegistry', {
|
|
245
246
|
error: error instanceof Error ? error.message : String(error),
|
|
246
247
|
});
|
|
247
248
|
this.removeUnhealthyService(serviceName, service);
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
// WebSocket Manager for Moro Framework
|
|
2
2
|
// Manages WebSocket connections using pluggable adapters
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { createFrameworkLogger } from '../logger/index.js';
|
|
9
|
-
import { normalizeValidationError } from '../validation/schema-interface.js';
|
|
3
|
+
import { Container } from '../utilities';
|
|
4
|
+
import { CircuitBreaker } from '../utilities';
|
|
5
|
+
import { ModuleConfig, WebSocketDefinition } from '../../types/module';
|
|
6
|
+
import { WebSocketAdapter, WebSocketNamespace, WebSocketConnection } from './websocket-adapter';
|
|
7
|
+
import { createFrameworkLogger } from '../logger';
|
|
10
8
|
|
|
11
9
|
export class WebSocketManager {
|
|
12
10
|
private circuitBreakers = new Map<string, CircuitBreaker>();
|
|
@@ -136,6 +134,7 @@ export class WebSocketManager {
|
|
|
136
134
|
data = await wsConfig.validation.parseAsync(data);
|
|
137
135
|
} catch (validationError: any) {
|
|
138
136
|
// Handle universal validation errors
|
|
137
|
+
const { normalizeValidationError } = require('../validation/schema-interface');
|
|
139
138
|
const normalizedError = normalizeValidationError(validationError);
|
|
140
139
|
const error = {
|
|
141
140
|
success: false,
|
|
@@ -265,6 +264,7 @@ export class WebSocketManager {
|
|
|
265
264
|
if (buffer[0] === 0x1f && buffer[1] === 0x8b) {
|
|
266
265
|
// This is gzipped data
|
|
267
266
|
try {
|
|
267
|
+
const zlib = require('zlib');
|
|
268
268
|
return zlib.gunzipSync(buffer);
|
|
269
269
|
} catch {
|
|
270
270
|
return buffer;
|
|
@@ -8,9 +8,9 @@ import {
|
|
|
8
8
|
createRoute,
|
|
9
9
|
defineRoute,
|
|
10
10
|
HttpMethod,
|
|
11
|
-
} from './index
|
|
12
|
-
import { HttpRequest, HttpResponse } from '../http
|
|
13
|
-
import { createFrameworkLogger } from '../logger
|
|
11
|
+
} from './index';
|
|
12
|
+
import { HttpRequest, HttpResponse } from '../http';
|
|
13
|
+
import { createFrameworkLogger } from '../logger';
|
|
14
14
|
|
|
15
15
|
const logger = createFrameworkLogger('AppIntegration');
|
|
16
16
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Intelligent Routing System for Moro Framework
|
|
2
2
|
// Schema-first with automatic middleware ordering and chainable API
|
|
3
3
|
|
|
4
|
-
import { ValidationSchema } from '../validation/schema-interface
|
|
5
|
-
import { HttpRequest, HttpResponse } from '../http
|
|
6
|
-
import { createFrameworkLogger } from '../logger
|
|
4
|
+
import { ValidationSchema } from '../validation/schema-interface';
|
|
5
|
+
import { HttpRequest, HttpResponse } from '../http';
|
|
6
|
+
import { createFrameworkLogger } from '../logger';
|
|
7
7
|
|
|
8
8
|
const logger = createFrameworkLogger('IntelligentRouting');
|
|
9
9
|
|
|
@@ -256,91 +256,20 @@ export class IntelligentRouteBuilder implements RouteBuilder {
|
|
|
256
256
|
|
|
257
257
|
// Executable route with intelligent middleware ordering
|
|
258
258
|
export class ExecutableRoute implements CompiledRoute {
|
|
259
|
-
|
|
260
|
-
private readonly requiresAuth: boolean;
|
|
261
|
-
private readonly requiresValidation: boolean;
|
|
262
|
-
private readonly requiresRateLimit: boolean;
|
|
263
|
-
private readonly requiresCache: boolean;
|
|
264
|
-
private readonly hasBeforeMiddleware: boolean;
|
|
265
|
-
private readonly hasAfterMiddleware: boolean;
|
|
266
|
-
private readonly hasTransformMiddleware: boolean;
|
|
267
|
-
private readonly isFastPath: boolean;
|
|
268
|
-
|
|
269
|
-
constructor(public readonly schema: RouteSchema) {
|
|
270
|
-
// Pre-calculate what this route actually needs
|
|
271
|
-
this.requiresAuth = !!this.schema.auth;
|
|
272
|
-
this.requiresValidation = !!this.schema.validation;
|
|
273
|
-
this.requiresRateLimit = !!this.schema.rateLimit;
|
|
274
|
-
this.requiresCache = !!this.schema.cache;
|
|
275
|
-
this.hasBeforeMiddleware = !!this.schema.middleware?.before?.length;
|
|
276
|
-
this.hasAfterMiddleware = !!this.schema.middleware?.after?.length;
|
|
277
|
-
this.hasTransformMiddleware = !!this.schema.middleware?.transform?.length;
|
|
278
|
-
|
|
279
|
-
// Fast path: no middleware, no auth, no validation, no rate limiting
|
|
280
|
-
this.isFastPath =
|
|
281
|
-
!this.requiresAuth &&
|
|
282
|
-
!this.requiresValidation &&
|
|
283
|
-
!this.requiresRateLimit &&
|
|
284
|
-
!this.requiresCache &&
|
|
285
|
-
!this.hasBeforeMiddleware &&
|
|
286
|
-
!this.hasAfterMiddleware &&
|
|
287
|
-
!this.hasTransformMiddleware;
|
|
288
|
-
|
|
289
|
-
// Log fast path routes for monitoring
|
|
290
|
-
if (this.isFastPath) {
|
|
291
|
-
logger.debug(`Fast path route: ${this.schema.method} ${this.schema.path}`, 'FastPath');
|
|
292
|
-
}
|
|
293
|
-
}
|
|
259
|
+
constructor(public readonly schema: RouteSchema) {}
|
|
294
260
|
|
|
295
261
|
async execute(req: HttpRequest, res: HttpResponse): Promise<void> {
|
|
296
262
|
const validatedReq = req as ValidatedRequest;
|
|
297
263
|
|
|
298
264
|
try {
|
|
299
|
-
//
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
// Optimized middleware execution - only run what's needed
|
|
310
|
-
if (this.hasBeforeMiddleware) {
|
|
311
|
-
await this.executePhase('before', validatedReq, res);
|
|
312
|
-
if (res.headersSent) return;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
if (this.requiresRateLimit) {
|
|
316
|
-
await this.executePhase('rateLimit', validatedReq, res);
|
|
317
|
-
if (res.headersSent) return;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
if (this.requiresAuth) {
|
|
321
|
-
await this.executePhase('auth', validatedReq, res);
|
|
322
|
-
if (res.headersSent) return;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
if (this.requiresValidation) {
|
|
326
|
-
await this.executePhase('validation', validatedReq, res);
|
|
327
|
-
if (res.headersSent) return;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
if (this.hasTransformMiddleware) {
|
|
331
|
-
await this.executePhase('transform', validatedReq, res);
|
|
332
|
-
if (res.headersSent) return;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
if (this.requiresCache) {
|
|
336
|
-
await this.executePhase('cache', validatedReq, res);
|
|
337
|
-
if (res.headersSent) return;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
if (this.hasAfterMiddleware) {
|
|
341
|
-
await this.executePhase('after', validatedReq, res);
|
|
342
|
-
if (res.headersSent) return;
|
|
343
|
-
}
|
|
265
|
+
// Execute middleware in intelligent order
|
|
266
|
+
await this.executePhase('before', validatedReq, res);
|
|
267
|
+
await this.executePhase('rateLimit', validatedReq, res);
|
|
268
|
+
await this.executePhase('auth', validatedReq, res);
|
|
269
|
+
await this.executePhase('validation', validatedReq, res);
|
|
270
|
+
await this.executePhase('transform', validatedReq, res);
|
|
271
|
+
await this.executePhase('cache', validatedReq, res);
|
|
272
|
+
await this.executePhase('after', validatedReq, res);
|
|
344
273
|
|
|
345
274
|
// Execute handler last
|
|
346
275
|
if (!res.headersSent) {
|
|
@@ -432,32 +361,15 @@ export class ExecutableRoute implements CompiledRoute {
|
|
|
432
361
|
req: HttpRequest,
|
|
433
362
|
res: HttpResponse
|
|
434
363
|
): Promise<void> {
|
|
435
|
-
// PERFORMANCE OPTIMIZATION: Reduce Promise overhead
|
|
436
364
|
return new Promise((resolve, reject) => {
|
|
437
|
-
let resolved = false;
|
|
438
|
-
|
|
439
|
-
const next = () => {
|
|
440
|
-
if (!resolved) {
|
|
441
|
-
resolved = true;
|
|
442
|
-
resolve();
|
|
443
|
-
}
|
|
444
|
-
};
|
|
445
|
-
|
|
446
365
|
try {
|
|
366
|
+
const next = () => resolve();
|
|
447
367
|
const result = middleware(req, res, next);
|
|
448
368
|
if (result instanceof Promise) {
|
|
449
|
-
result.then(() =>
|
|
450
|
-
} else {
|
|
451
|
-
// Synchronous middleware - call next immediately if not called
|
|
452
|
-
if (!resolved) {
|
|
453
|
-
next();
|
|
454
|
-
}
|
|
369
|
+
result.then(() => resolve()).catch(reject);
|
|
455
370
|
}
|
|
456
371
|
} catch (error) {
|
|
457
|
-
|
|
458
|
-
resolved = true;
|
|
459
|
-
reject(error);
|
|
460
|
-
}
|
|
372
|
+
reject(error);
|
|
461
373
|
}
|
|
462
374
|
});
|
|
463
375
|
}
|
|
@@ -471,90 +383,10 @@ export class ExecutableRoute implements CompiledRoute {
|
|
|
471
383
|
}
|
|
472
384
|
|
|
473
385
|
private async executeAuth(req: ValidatedRequest, res: HttpResponse): Promise<void> {
|
|
474
|
-
|
|
475
|
-
const auth = req.auth;
|
|
476
|
-
|
|
477
|
-
// This should never happen since executeAuth is only called when auth config exists
|
|
478
|
-
if (!authConfig) {
|
|
479
|
-
logger.error('executeAuth called without auth config', 'Auth');
|
|
480
|
-
return;
|
|
481
|
-
}
|
|
482
|
-
|
|
386
|
+
// Authentication implementation will be added
|
|
483
387
|
logger.debug('Auth check', 'Auth', {
|
|
484
|
-
config:
|
|
485
|
-
isAuthenticated: auth?.isAuthenticated,
|
|
486
|
-
userRoles: auth?.user?.roles,
|
|
388
|
+
config: this.schema.auth,
|
|
487
389
|
});
|
|
488
|
-
|
|
489
|
-
// Check if auth middleware ran
|
|
490
|
-
if (!auth) {
|
|
491
|
-
res.status(500);
|
|
492
|
-
res.json({
|
|
493
|
-
success: false,
|
|
494
|
-
error: 'Authentication middleware not configured',
|
|
495
|
-
message: 'Auth middleware must be installed before using route-level auth',
|
|
496
|
-
});
|
|
497
|
-
return;
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
// Check authentication requirement (default is required unless optional: true)
|
|
501
|
-
if (!authConfig.optional && !auth.isAuthenticated) {
|
|
502
|
-
res.status(401);
|
|
503
|
-
res.json({
|
|
504
|
-
success: false,
|
|
505
|
-
error: 'Authentication required',
|
|
506
|
-
message: 'You must be logged in to access this resource',
|
|
507
|
-
});
|
|
508
|
-
return;
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
// Skip further checks if not authenticated but optional
|
|
512
|
-
if (!auth.isAuthenticated && authConfig.optional) {
|
|
513
|
-
return; // Continue to handler
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
// Only check roles/permissions if user is authenticated
|
|
517
|
-
if (auth.isAuthenticated) {
|
|
518
|
-
const user = auth.user;
|
|
519
|
-
|
|
520
|
-
// Check roles if specified
|
|
521
|
-
if (authConfig.roles && authConfig.roles.length > 0) {
|
|
522
|
-
const userRoles = user?.roles || [];
|
|
523
|
-
const hasRole = authConfig.roles.some((role: string) => userRoles.includes(role));
|
|
524
|
-
|
|
525
|
-
if (!hasRole) {
|
|
526
|
-
res.status(403);
|
|
527
|
-
res.json({
|
|
528
|
-
success: false,
|
|
529
|
-
error: 'Insufficient permissions',
|
|
530
|
-
message: `Required roles: ${authConfig.roles.join(', ')}`,
|
|
531
|
-
userRoles,
|
|
532
|
-
});
|
|
533
|
-
return;
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
// Check permissions if specified
|
|
538
|
-
if (authConfig.permissions && authConfig.permissions.length > 0) {
|
|
539
|
-
const userPermissions = user?.permissions || [];
|
|
540
|
-
const hasPermission = authConfig.permissions.every((permission: string) =>
|
|
541
|
-
userPermissions.includes(permission)
|
|
542
|
-
);
|
|
543
|
-
|
|
544
|
-
if (!hasPermission) {
|
|
545
|
-
res.status(403);
|
|
546
|
-
res.json({
|
|
547
|
-
success: false,
|
|
548
|
-
error: 'Insufficient permissions',
|
|
549
|
-
message: `Required permissions: ${authConfig.permissions.join(', ')}`,
|
|
550
|
-
userPermissions,
|
|
551
|
-
});
|
|
552
|
-
return;
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
// All auth checks passed
|
|
558
390
|
}
|
|
559
391
|
|
|
560
392
|
private async executeValidation(req: ValidatedRequest, res: HttpResponse): Promise<void> {
|
|
@@ -643,22 +475,6 @@ export class ExecutableRoute implements CompiledRoute {
|
|
|
643
475
|
config: this.schema.cache,
|
|
644
476
|
});
|
|
645
477
|
}
|
|
646
|
-
|
|
647
|
-
// Performance monitoring
|
|
648
|
-
getPerformanceInfo() {
|
|
649
|
-
return {
|
|
650
|
-
path: this.schema.path,
|
|
651
|
-
method: this.schema.method,
|
|
652
|
-
isFastPath: this.isFastPath,
|
|
653
|
-
requiresAuth: this.requiresAuth,
|
|
654
|
-
requiresValidation: this.requiresValidation,
|
|
655
|
-
requiresRateLimit: this.requiresRateLimit,
|
|
656
|
-
requiresCache: this.requiresCache,
|
|
657
|
-
hasBeforeMiddleware: this.hasBeforeMiddleware,
|
|
658
|
-
hasAfterMiddleware: this.hasAfterMiddleware,
|
|
659
|
-
hasTransformMiddleware: this.hasTransformMiddleware,
|
|
660
|
-
};
|
|
661
|
-
}
|
|
662
478
|
}
|
|
663
479
|
|
|
664
480
|
// Factory functions for creating routes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// AWS Lambda runtime adapter
|
|
2
|
-
import { BaseRuntimeAdapter } from './base-adapter
|
|
3
|
-
import { HttpRequest, HttpResponse } from '../../types/http
|
|
4
|
-
import { RuntimeHttpResponse } from '../../types/runtime
|
|
2
|
+
import { BaseRuntimeAdapter } from './base-adapter';
|
|
3
|
+
import { HttpRequest, HttpResponse } from '../../types/http';
|
|
4
|
+
import { RuntimeHttpResponse } from '../../types/runtime';
|
|
5
5
|
|
|
6
6
|
export interface LambdaEvent {
|
|
7
7
|
httpMethod: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Base runtime adapter with common functionality
|
|
2
|
-
import { RuntimeAdapter, RuntimeType, RuntimeHttpResponse } from '../../types/runtime
|
|
3
|
-
import { HttpRequest, HttpResponse } from '../../types/http
|
|
2
|
+
import { RuntimeAdapter, RuntimeType, RuntimeHttpResponse } from '../../types/runtime';
|
|
3
|
+
import { HttpRequest, HttpResponse } from '../../types/http';
|
|
4
4
|
import { randomBytes } from 'crypto';
|
|
5
5
|
|
|
6
6
|
export abstract class BaseRuntimeAdapter implements RuntimeAdapter {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Cloudflare Workers runtime adapter
|
|
2
|
-
import { BaseRuntimeAdapter } from './base-adapter
|
|
3
|
-
import { HttpRequest, HttpResponse } from '../../types/http
|
|
4
|
-
import { RuntimeHttpResponse } from '../../types/runtime
|
|
2
|
+
import { BaseRuntimeAdapter } from './base-adapter';
|
|
3
|
+
import { HttpRequest, HttpResponse } from '../../types/http';
|
|
4
|
+
import { RuntimeHttpResponse } from '../../types/runtime';
|
|
5
5
|
|
|
6
6
|
export interface WorkersEnv {
|
|
7
7
|
[key: string]: any;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Runtime adapters export
|
|
2
|
-
export { BaseRuntimeAdapter } from './base-adapter
|
|
3
|
-
export { NodeRuntimeAdapter } from './node-adapter
|
|
4
|
-
export { VercelEdgeAdapter } from './vercel-edge-adapter
|
|
5
|
-
export { AWSLambdaAdapter } from './aws-lambda-adapter
|
|
6
|
-
export { CloudflareWorkersAdapter } from './cloudflare-workers-adapter
|
|
2
|
+
export { BaseRuntimeAdapter } from './base-adapter';
|
|
3
|
+
export { NodeRuntimeAdapter } from './node-adapter';
|
|
4
|
+
export { VercelEdgeAdapter } from './vercel-edge-adapter';
|
|
5
|
+
export { AWSLambdaAdapter } from './aws-lambda-adapter';
|
|
6
|
+
export { CloudflareWorkersAdapter } from './cloudflare-workers-adapter';
|
|
7
7
|
|
|
8
8
|
// Re-export types
|
|
9
9
|
export type {
|
|
@@ -12,18 +12,18 @@ export type {
|
|
|
12
12
|
RuntimeConfig,
|
|
13
13
|
RuntimeMoroOptions,
|
|
14
14
|
RuntimeHttpResponse,
|
|
15
|
-
} from '../../types/runtime
|
|
15
|
+
} from '../../types/runtime';
|
|
16
16
|
|
|
17
17
|
// Re-export specific runtime types
|
|
18
|
-
export type { LambdaEvent, LambdaContext, LambdaResponse } from './aws-lambda-adapter
|
|
19
|
-
export type { WorkersEnv, WorkersContext } from './cloudflare-workers-adapter
|
|
18
|
+
export type { LambdaEvent, LambdaContext, LambdaResponse } from './aws-lambda-adapter';
|
|
19
|
+
export type { WorkersEnv, WorkersContext } from './cloudflare-workers-adapter';
|
|
20
20
|
|
|
21
21
|
// Runtime factory functions
|
|
22
|
-
import { NodeRuntimeAdapter } from './node-adapter
|
|
23
|
-
import { VercelEdgeAdapter } from './vercel-edge-adapter
|
|
24
|
-
import { AWSLambdaAdapter } from './aws-lambda-adapter
|
|
25
|
-
import { CloudflareWorkersAdapter } from './cloudflare-workers-adapter
|
|
26
|
-
import { RuntimeType, RuntimeAdapter } from '../../types/runtime
|
|
22
|
+
import { NodeRuntimeAdapter } from './node-adapter';
|
|
23
|
+
import { VercelEdgeAdapter } from './vercel-edge-adapter';
|
|
24
|
+
import { AWSLambdaAdapter } from './aws-lambda-adapter';
|
|
25
|
+
import { CloudflareWorkersAdapter } from './cloudflare-workers-adapter';
|
|
26
|
+
import { RuntimeType, RuntimeAdapter } from '../../types/runtime';
|
|
27
27
|
|
|
28
28
|
export function createRuntimeAdapter(type: RuntimeType): RuntimeAdapter {
|
|
29
29
|
switch (type) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Node.js runtime adapter
|
|
2
2
|
import { IncomingMessage, ServerResponse } from 'http';
|
|
3
|
-
import { BaseRuntimeAdapter } from './base-adapter
|
|
4
|
-
import { HttpRequest, HttpResponse } from '../../types/http
|
|
5
|
-
import { RuntimeHttpResponse } from '../../types/runtime
|
|
6
|
-
import { MoroHttpServer } from '../http/http-server
|
|
3
|
+
import { BaseRuntimeAdapter } from './base-adapter';
|
|
4
|
+
import { HttpRequest, HttpResponse } from '../../types/http';
|
|
5
|
+
import { RuntimeHttpResponse } from '../../types/runtime';
|
|
6
|
+
import { MoroHttpServer } from '../http/http-server';
|
|
7
7
|
|
|
8
8
|
export class NodeRuntimeAdapter extends BaseRuntimeAdapter {
|
|
9
9
|
readonly type = 'node' as const;
|
|
@@ -138,30 +138,24 @@ export class NodeRuntimeAdapter extends BaseRuntimeAdapter {
|
|
|
138
138
|
|
|
139
139
|
if (!enhanced.cookie) {
|
|
140
140
|
enhanced.cookie = function (name: string, value: string, options?: any) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
this.setHeader('Set-Cookie', cookieString);
|
|
144
|
-
}
|
|
141
|
+
const cookieString = `${name}=${value}`;
|
|
142
|
+
this.setHeader('Set-Cookie', cookieString);
|
|
145
143
|
return this;
|
|
146
144
|
};
|
|
147
145
|
}
|
|
148
146
|
|
|
149
147
|
if (!enhanced.clearCookie) {
|
|
150
148
|
enhanced.clearCookie = function (name: string, options?: any) {
|
|
151
|
-
|
|
152
|
-
this.setHeader('Set-Cookie', `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`);
|
|
153
|
-
}
|
|
149
|
+
this.setHeader('Set-Cookie', `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`);
|
|
154
150
|
return this;
|
|
155
151
|
};
|
|
156
152
|
}
|
|
157
153
|
|
|
158
154
|
if (!enhanced.redirect) {
|
|
159
155
|
enhanced.redirect = function (url: string, status?: number) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
this.end();
|
|
164
|
-
}
|
|
156
|
+
this.statusCode = status || 302;
|
|
157
|
+
this.setHeader('Location', url);
|
|
158
|
+
this.end();
|
|
165
159
|
};
|
|
166
160
|
}
|
|
167
161
|
|