@morojs/moro 1.6.2 → 1.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/http/http-server.js +12 -9
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/uws-http-server.js +1 -1
- package/dist/core/http/uws-http-server.js.map +1 -1
- package/dist/core/middleware/built-in/auth/core.d.ts +78 -0
- package/dist/core/middleware/built-in/auth/core.js +358 -0
- package/dist/core/middleware/built-in/auth/core.js.map +1 -0
- package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +1 -1
- package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
- package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
- package/dist/core/middleware/built-in/auth/hook.js +99 -0
- package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
- package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
- package/dist/core/middleware/built-in/auth/index.js +15 -0
- package/dist/core/middleware/built-in/auth/index.js.map +1 -0
- package/dist/core/middleware/built-in/{jwt-helpers.js → auth/jwt-helpers.js} +1 -1
- package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
- package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
- package/dist/core/middleware/built-in/auth/middleware.js +71 -0
- package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
- package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +1 -1
- package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.d.ts +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +2 -2
- package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/index.d.ts +0 -2
- package/{src/core/middleware/built-in/adapters/index.ts → dist/core/middleware/built-in/cache/adapters/index.js} +1 -3
- package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
- package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
- package/dist/core/middleware/built-in/cache/core.js +87 -0
- package/dist/core/middleware/built-in/cache/core.js.map +1 -0
- package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +22 -5
- package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cache/index.js +9 -0
- package/dist/core/middleware/built-in/cache/index.js.map +1 -0
- package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/cache/middleware.js +44 -0
- package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +2 -2
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.d.ts +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/index.js +0 -2
- package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
- package/dist/core/middleware/built-in/cdn/core.js +144 -0
- package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
- package/dist/core/middleware/built-in/cdn/hook.js +70 -0
- package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
- package/dist/core/middleware/built-in/cdn/index.js +11 -0
- package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
- package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
- package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
- package/dist/core/middleware/built-in/cookie/core.js +83 -0
- package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/cookie/hook.js +47 -0
- package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cookie/index.js +9 -0
- package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
- package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
- package/dist/core/middleware/built-in/cors/core.js +51 -0
- package/dist/core/middleware/built-in/cors/core.js.map +1 -0
- package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/cors/hook.js +37 -0
- package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cors/index.js +9 -0
- package/dist/core/middleware/built-in/cors/index.js.map +1 -0
- package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/cors/middleware.js +22 -0
- package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
- package/dist/core/middleware/built-in/csp/core.js +88 -0
- package/dist/core/middleware/built-in/csp/core.js.map +1 -0
- package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
- package/dist/core/middleware/built-in/csp/hook.js +47 -0
- package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
- package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
- package/dist/core/middleware/built-in/csp/index.js +9 -0
- package/dist/core/middleware/built-in/csp/index.js.map +1 -0
- package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
- package/dist/core/middleware/built-in/csp/middleware.js +29 -0
- package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
- package/dist/core/middleware/built-in/csrf/core.js +69 -0
- package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/csrf/hook.js +45 -0
- package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
- package/dist/core/middleware/built-in/csrf/index.js +9 -0
- package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
- package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
- package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
- package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
- package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{error-tracker.js → error-tracker/middleware.js} +14 -3
- package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/index.d.ts +25 -59
- package/dist/core/middleware/built-in/index.js +31 -31
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
- package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
- package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
- package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{performance-monitor.js → performance-monitor/middleware.js} +14 -3
- package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
- package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
- package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +22 -16
- package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
- package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
- package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
- package/dist/core/middleware/built-in/request-logger/index.js +4 -0
- package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
- package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{request-logger.js → request-logger/middleware.js} +14 -3
- package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/session/core.d.ts +73 -0
- package/dist/core/middleware/built-in/session/core.js +227 -0
- package/dist/core/middleware/built-in/session/core.js.map +1 -0
- package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/session/hook.js +53 -0
- package/dist/core/middleware/built-in/session/hook.js.map +1 -0
- package/dist/core/middleware/built-in/session/index.d.ts +3 -0
- package/dist/core/middleware/built-in/session/index.js +9 -0
- package/dist/core/middleware/built-in/session/index.js.map +1 -0
- package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/session/middleware.js +38 -0
- package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
- package/dist/core/middleware/built-in/sse/core.js +117 -0
- package/dist/core/middleware/built-in/sse/core.js.map +1 -0
- package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
- package/dist/core/middleware/built-in/sse/hook.js +60 -0
- package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
- package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
- package/dist/core/middleware/built-in/sse/index.js +9 -0
- package/dist/core/middleware/built-in/sse/index.js.map +1 -0
- package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
- package/dist/core/middleware/built-in/sse/middleware.js +43 -0
- package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
- package/dist/core/middleware/built-in/validation/core.js +93 -0
- package/dist/core/middleware/built-in/validation/core.js.map +1 -0
- package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
- package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +14 -3
- package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
- package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
- package/dist/core/middleware/built-in/validation/index.js +9 -0
- package/dist/core/middleware/built-in/validation/index.js.map +1 -0
- package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/validation/middleware.js +27 -0
- package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
- package/dist/core/middleware/index.js +6 -0
- package/dist/core/middleware/index.js.map +1 -1
- package/dist/core/routing/unified-router.d.ts +4 -20
- package/dist/core/routing/unified-router.js +61 -106
- package/dist/core/routing/unified-router.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/moro.js +12 -18
- package/dist/moro.js.map +1 -1
- package/dist/types/hooks.d.ts +3 -0
- package/package.json +2 -6
- package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
- package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
- package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
- package/dist/core/middleware/built-in/auth.d.ts +0 -30
- package/dist/core/middleware/built-in/auth.js +0 -348
- package/dist/core/middleware/built-in/auth.js.map +0 -1
- package/dist/core/middleware/built-in/cache.d.ts +0 -3
- package/dist/core/middleware/built-in/cache.js.map +0 -1
- package/dist/core/middleware/built-in/cdn.d.ts +0 -3
- package/dist/core/middleware/built-in/cdn.js +0 -109
- package/dist/core/middleware/built-in/cdn.js.map +0 -1
- package/dist/core/middleware/built-in/cookie.d.ts +0 -14
- package/dist/core/middleware/built-in/cookie.js +0 -64
- package/dist/core/middleware/built-in/cookie.js.map +0 -1
- package/dist/core/middleware/built-in/cors.d.ts +0 -2
- package/dist/core/middleware/built-in/cors.js +0 -25
- package/dist/core/middleware/built-in/cors.js.map +0 -1
- package/dist/core/middleware/built-in/csp.d.ts +0 -22
- package/dist/core/middleware/built-in/csp.js +0 -68
- package/dist/core/middleware/built-in/csp.js.map +0 -1
- package/dist/core/middleware/built-in/csrf.d.ts +0 -9
- package/dist/core/middleware/built-in/csrf.js +0 -60
- package/dist/core/middleware/built-in/csrf.js.map +0 -1
- package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
- package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
- package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
- package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
- package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
- package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
- package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
- package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
- package/dist/core/middleware/built-in/request-logger.js.map +0 -1
- package/dist/core/middleware/built-in/session.d.ts +0 -41
- package/dist/core/middleware/built-in/session.js +0 -205
- package/dist/core/middleware/built-in/session.js.map +0 -1
- package/dist/core/middleware/built-in/sse.d.ts +0 -6
- package/dist/core/middleware/built-in/sse.js +0 -69
- package/dist/core/middleware/built-in/sse.js.map +0 -1
- package/dist/core/middleware/built-in/validation.d.ts +0 -2
- package/dist/core/middleware/built-in/validation.js.map +0 -1
- package/jest.config.mjs +0 -41
- package/src/core/auth/README.md +0 -339
- package/src/core/auth/morojs-adapter.ts +0 -415
- package/src/core/config/config-manager.ts +0 -133
- package/src/core/config/config-sources.ts +0 -600
- package/src/core/config/config-validator.ts +0 -1116
- package/src/core/config/file-loader.ts +0 -150
- package/src/core/config/index.ts +0 -109
- package/src/core/config/schema.ts +0 -164
- package/src/core/config/utils.ts +0 -244
- package/src/core/database/README.md +0 -238
- package/src/core/database/adapters/drizzle.ts +0 -415
- package/src/core/database/adapters/index.ts +0 -42
- package/src/core/database/adapters/mongodb.ts +0 -317
- package/src/core/database/adapters/mysql.ts +0 -235
- package/src/core/database/adapters/postgresql.ts +0 -226
- package/src/core/database/adapters/redis.ts +0 -379
- package/src/core/database/adapters/sqlite.ts +0 -263
- package/src/core/database/index.ts +0 -3
- package/src/core/docs/index.ts +0 -231
- package/src/core/docs/openapi-generator.ts +0 -576
- package/src/core/docs/schema-to-openapi.ts +0 -145
- package/src/core/docs/simple-docs.ts +0 -295
- package/src/core/docs/swagger-ui.ts +0 -354
- package/src/core/docs/zod-to-openapi.ts +0 -532
- package/src/core/events/event-bus.ts +0 -231
- package/src/core/events/index.ts +0 -12
- package/src/core/framework.ts +0 -885
- package/src/core/http/http-server.ts +0 -1847
- package/src/core/http/index.ts +0 -7
- package/src/core/http/uws-http-server.ts +0 -591
- package/src/core/logger/filters.ts +0 -153
- package/src/core/logger/index.ts +0 -21
- package/src/core/logger/logger.ts +0 -1033
- package/src/core/logger/outputs.ts +0 -132
- package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
- package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
- package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
- package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -114
- package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
- package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
- package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -94
- package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
- package/src/core/middleware/built-in/auth-helpers.ts +0 -401
- package/src/core/middleware/built-in/auth-providers.ts +0 -480
- package/src/core/middleware/built-in/auth.ts +0 -410
- package/src/core/middleware/built-in/cache.ts +0 -213
- package/src/core/middleware/built-in/cdn.ts +0 -124
- package/src/core/middleware/built-in/cookie.ts +0 -85
- package/src/core/middleware/built-in/cors.ts +0 -38
- package/src/core/middleware/built-in/csp.ts +0 -101
- package/src/core/middleware/built-in/csrf.ts +0 -82
- package/src/core/middleware/built-in/error-tracker.ts +0 -16
- package/src/core/middleware/built-in/index.ts +0 -87
- package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
- package/src/core/middleware/built-in/performance-monitor.ts +0 -25
- package/src/core/middleware/built-in/rate-limit.ts +0 -60
- package/src/core/middleware/built-in/request-logger.ts +0 -16
- package/src/core/middleware/built-in/session.ts +0 -287
- package/src/core/middleware/built-in/sse.ts +0 -88
- package/src/core/middleware/built-in/validation.ts +0 -33
- package/src/core/middleware/index.ts +0 -177
- package/src/core/modules/auto-discovery.ts +0 -726
- package/src/core/modules/index.ts +0 -3
- package/src/core/modules/modules.ts +0 -135
- package/src/core/networking/adapters/index.ts +0 -17
- package/src/core/networking/adapters/socketio-adapter.ts +0 -254
- package/src/core/networking/adapters/uws-adapter.ts +0 -619
- package/src/core/networking/adapters/ws-adapter.ts +0 -429
- package/src/core/networking/index.ts +0 -4
- package/src/core/networking/service-discovery.ts +0 -303
- package/src/core/networking/websocket-adapter.ts +0 -217
- package/src/core/networking/websocket-manager.ts +0 -308
- package/src/core/pooling/object-pool-manager.ts +0 -630
- package/src/core/routing/app-integration.ts +0 -164
- package/src/core/routing/index.ts +0 -261
- package/src/core/routing/path-matcher.ts +0 -222
- package/src/core/routing/router.ts +0 -97
- package/src/core/routing/unified-router.ts +0 -870
- package/src/core/runtime/aws-lambda-adapter.ts +0 -147
- package/src/core/runtime/base-adapter.ts +0 -130
- package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
- package/src/core/runtime/index.ts +0 -62
- package/src/core/runtime/node-adapter.ts +0 -202
- package/src/core/runtime/vercel-edge-adapter.ts +0 -114
- package/src/core/utilities/circuit-breaker.ts +0 -46
- package/src/core/utilities/container.ts +0 -736
- package/src/core/utilities/hooks.ts +0 -142
- package/src/core/utilities/index.ts +0 -17
- package/src/core/utilities/package-utils.ts +0 -59
- package/src/core/validation/adapters.ts +0 -147
- package/src/core/validation/index.ts +0 -258
- package/src/core/validation/schema-interface.ts +0 -100
- package/src/index.ts +0 -233
- package/src/moro.ts +0 -1728
- package/src/types/auth.ts +0 -440
- package/src/types/cache.ts +0 -38
- package/src/types/cdn.ts +0 -22
- package/src/types/config.ts +0 -229
- package/src/types/core.ts +0 -58
- package/src/types/database.ts +0 -32
- package/src/types/discovery.ts +0 -7
- package/src/types/events.ts +0 -82
- package/src/types/hooks.ts +0 -47
- package/src/types/http.ts +0 -89
- package/src/types/logger.ts +0 -102
- package/src/types/module.ts +0 -99
- package/src/types/runtime.ts +0 -76
- package/src/types/session.ts +0 -89
- package/tsconfig.json +0 -23
- /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
- /package/dist/core/middleware/built-in/{jwt-helpers.d.ts → auth/jwt-helpers.d.ts} +0 -0
- /package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.js +0 -0
- /package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.js +0 -0
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
// Adapters Index
|
|
2
|
-
export * from './cache/index.js';
|
|
3
2
|
export * from './cdn/index.js';
|
|
4
3
|
// Re-export factory functions for convenience
|
|
5
|
-
export { createCacheAdapter } from './cache/index.js';
|
|
6
4
|
export { createCDNAdapter } from './cdn/index.js';
|
|
7
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/core/middleware/built-in/cdn/adapters/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,cAAc,gBAAgB,CAAC;AAE/B,8CAA8C;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { HttpResponse } from '../../../../types/http.js';
|
|
2
|
+
import { CDNOptions } from '../../../../types/cdn.js';
|
|
3
|
+
/**
|
|
4
|
+
* CDNCore - Core CDN management logic with adapter pattern
|
|
5
|
+
* Used directly by the router for route-based CDN handling
|
|
6
|
+
*/
|
|
7
|
+
export declare class CDNCore {
|
|
8
|
+
private adapter;
|
|
9
|
+
private options;
|
|
10
|
+
constructor(options?: CDNOptions);
|
|
11
|
+
/**
|
|
12
|
+
* Initialize the CDN adapter
|
|
13
|
+
*/
|
|
14
|
+
private initializeAdapter;
|
|
15
|
+
/**
|
|
16
|
+
* Check if adapter is available
|
|
17
|
+
*/
|
|
18
|
+
hasAdapter(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Set CDN headers on response
|
|
21
|
+
*/
|
|
22
|
+
setHeaders(res: HttpResponse): void;
|
|
23
|
+
/**
|
|
24
|
+
* Purge CDN cache for given URLs
|
|
25
|
+
*/
|
|
26
|
+
purge(urls: string[]): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Prefetch URLs to CDN cache
|
|
29
|
+
*/
|
|
30
|
+
prefetch(urls: string[]): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Get CDN statistics
|
|
33
|
+
*/
|
|
34
|
+
getStats(): Promise<any>;
|
|
35
|
+
/**
|
|
36
|
+
* Check if path matches invalidation patterns
|
|
37
|
+
*/
|
|
38
|
+
shouldAutoInvalidate(path: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Auto-invalidate CDN cache for a path if it matches patterns
|
|
41
|
+
*/
|
|
42
|
+
autoInvalidate(path: string): Promise<void>;
|
|
43
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { createCDNAdapter } from '../cdn/adapters/cdn/index.js';
|
|
2
|
+
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
3
|
+
const logger = createFrameworkLogger('CDNCore');
|
|
4
|
+
// ===== Core Logic =====
|
|
5
|
+
/**
|
|
6
|
+
* CDNCore - Core CDN management logic with adapter pattern
|
|
7
|
+
* Used directly by the router for route-based CDN handling
|
|
8
|
+
*/
|
|
9
|
+
export class CDNCore {
|
|
10
|
+
adapter = null;
|
|
11
|
+
options;
|
|
12
|
+
constructor(options = {}) {
|
|
13
|
+
this.options = options;
|
|
14
|
+
this.initializeAdapter();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Initialize the CDN adapter
|
|
18
|
+
*/
|
|
19
|
+
initializeAdapter() {
|
|
20
|
+
if (!this.options.adapter) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
// If adapter is already a CDNAdapter instance
|
|
24
|
+
if (typeof this.options.adapter === 'object' && 'purge' in this.options.adapter) {
|
|
25
|
+
this.adapter = this.options.adapter;
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// If adapter is a string, use factory to create it
|
|
29
|
+
if (typeof this.options.adapter === 'string') {
|
|
30
|
+
try {
|
|
31
|
+
this.adapter = createCDNAdapter(this.options.adapter, this.options.adapterOptions);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
logger.error('Failed to initialize CDN adapter', 'Initialization', { error });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check if adapter is available
|
|
40
|
+
*/
|
|
41
|
+
hasAdapter() {
|
|
42
|
+
return this.adapter !== null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Set CDN headers on response
|
|
46
|
+
*/
|
|
47
|
+
setHeaders(res) {
|
|
48
|
+
if (!this.adapter) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.adapter.setHeaders(res);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Purge CDN cache for given URLs
|
|
55
|
+
*/
|
|
56
|
+
async purge(urls) {
|
|
57
|
+
if (!this.adapter) {
|
|
58
|
+
logger.warn('CDN purge requested but no adapter configured', 'CDNPurge');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
await this.adapter.purge(urls);
|
|
63
|
+
logger.info(`CDN cache purged: ${urls.join(', ')}`, 'CDNPurge');
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
logger.error('CDN purge failed', 'CDNError', { error, urls });
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Prefetch URLs to CDN cache
|
|
72
|
+
*/
|
|
73
|
+
async prefetch(urls) {
|
|
74
|
+
if (!this.adapter) {
|
|
75
|
+
logger.warn('CDN prefetch requested but no adapter configured', 'CDNPrefetch');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (!this.adapter.prefetch) {
|
|
79
|
+
logger.warn('CDN prefetch requested but not supported by adapter', 'CDNPrefetch');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
await this.adapter.prefetch(urls);
|
|
84
|
+
logger.info(`CDN prefetch requested: ${urls.join(', ')}`, 'CDNPrefetch');
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
logger.error('CDN prefetch failed', 'CDNError', { error, urls });
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get CDN statistics
|
|
93
|
+
*/
|
|
94
|
+
async getStats() {
|
|
95
|
+
if (!this.adapter) {
|
|
96
|
+
logger.warn('CDN stats requested but no adapter configured', 'CDNStats');
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
if (!this.adapter.getStats) {
|
|
100
|
+
logger.warn('CDN stats requested but not supported by adapter', 'CDNStats');
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const stats = await this.adapter.getStats();
|
|
105
|
+
logger.debug('CDN stats retrieved', 'CDNStats');
|
|
106
|
+
return stats;
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
logger.error('CDN stats retrieval failed', 'CDNError', { error });
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Check if path matches invalidation patterns
|
|
115
|
+
*/
|
|
116
|
+
shouldAutoInvalidate(path) {
|
|
117
|
+
if (!this.options.autoInvalidate || !this.options.invalidationPatterns) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return this.options.invalidationPatterns.some(pattern => {
|
|
121
|
+
const regex = new RegExp(pattern);
|
|
122
|
+
return regex.test(path);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Auto-invalidate CDN cache for a path if it matches patterns
|
|
127
|
+
*/
|
|
128
|
+
async autoInvalidate(path) {
|
|
129
|
+
if (!this.shouldAutoInvalidate(path)) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (!this.adapter) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
await this.adapter.purge([path]);
|
|
137
|
+
logger.debug(`Auto-invalidated CDN cache for: ${path}`, 'CDNAutoInvalidate');
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
logger.error('CDN auto-invalidation failed', 'CDNError', { error, path });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cdn/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MiddlewareInterface } from '../../../../types/hooks.js';
|
|
2
|
+
import { CDNOptions } from '../../../../types/cdn.js';
|
|
3
|
+
/**
|
|
4
|
+
* CDN hook for global usage
|
|
5
|
+
* Registers with the hooks system for application-wide CDN support
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { cdn } from '@/middleware/built-in/cdn';
|
|
10
|
+
*
|
|
11
|
+
* app.use(cdn({
|
|
12
|
+
* adapter: 'cloudflare',
|
|
13
|
+
* adapterOptions: {
|
|
14
|
+
* zoneId: 'your-zone-id',
|
|
15
|
+
* apiToken: 'your-api-token'
|
|
16
|
+
* },
|
|
17
|
+
* autoInvalidate: true,
|
|
18
|
+
* invalidationPatterns: ['/api/.*']
|
|
19
|
+
* }));
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare const cdn: (options?: CDNOptions) => MiddlewareInterface;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
2
|
+
import { CDNCore } from './core.js';
|
|
3
|
+
const logger = createFrameworkLogger('CDNMiddleware');
|
|
4
|
+
/**
|
|
5
|
+
* CDN hook for global usage
|
|
6
|
+
* Registers with the hooks system for application-wide CDN support
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { cdn } from '@/middleware/built-in/cdn';
|
|
11
|
+
*
|
|
12
|
+
* app.use(cdn({
|
|
13
|
+
* adapter: 'cloudflare',
|
|
14
|
+
* adapterOptions: {
|
|
15
|
+
* zoneId: 'your-zone-id',
|
|
16
|
+
* apiToken: 'your-api-token'
|
|
17
|
+
* },
|
|
18
|
+
* autoInvalidate: true,
|
|
19
|
+
* invalidationPatterns: ['/api/.*']
|
|
20
|
+
* }));
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export const cdn = (options = {}) => ({
|
|
24
|
+
name: 'cdn',
|
|
25
|
+
version: '1.0.0',
|
|
26
|
+
metadata: {
|
|
27
|
+
name: 'cdn',
|
|
28
|
+
version: '1.0.0',
|
|
29
|
+
description: 'Built-in CDN middleware with pluggable provider adapters',
|
|
30
|
+
author: 'MoroJS Team',
|
|
31
|
+
},
|
|
32
|
+
install: async (hooks, middlewareOptions = {}) => {
|
|
33
|
+
logger.debug('Installing CDN middleware', 'Installation');
|
|
34
|
+
const config = { ...options, ...middlewareOptions };
|
|
35
|
+
const cdnCore = new CDNCore(config);
|
|
36
|
+
if (!cdnCore.hasAdapter()) {
|
|
37
|
+
logger.warn('No CDN adapter configured, CDN features will be disabled', 'Installation');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
hooks.before('request', async (context) => {
|
|
41
|
+
const req = context.request;
|
|
42
|
+
const res = context.response;
|
|
43
|
+
// Set CDN headers on all responses
|
|
44
|
+
cdnCore.setHeaders(res);
|
|
45
|
+
// Add CDN methods to response
|
|
46
|
+
res.purgeCDN = async (urls) => {
|
|
47
|
+
const urlsToPurge = urls || [req.path];
|
|
48
|
+
await cdnCore.purge(urlsToPurge);
|
|
49
|
+
};
|
|
50
|
+
res.prefetchCDN = async (urls) => {
|
|
51
|
+
await cdnCore.prefetch(urls);
|
|
52
|
+
};
|
|
53
|
+
res.getCDNStats = async () => {
|
|
54
|
+
return await cdnCore.getStats();
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
// Auto-invalidation on certain patterns
|
|
58
|
+
if (config.autoInvalidate && config.invalidationPatterns) {
|
|
59
|
+
hooks.after('response', async (context) => {
|
|
60
|
+
const req = context.request;
|
|
61
|
+
await cdnCore.autoInvalidate(req.path);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
logger.info('CDN middleware installed', 'Installation', {
|
|
65
|
+
adapter: typeof config.adapter === 'string' ? config.adapter : 'custom',
|
|
66
|
+
autoInvalidate: !!config.autoInvalidate,
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cdn/hook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,MAAM,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;AAEtD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,UAAsB,EAAE,EAAuB,EAAE,CAAC,CAAC;IACrE,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,0DAA0D;QACvE,MAAM,EAAE,aAAa;KACtB;IAED,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,oBAAyB,EAAE,EAAE,EAAE;QACzD,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,cAAc,CAAC,CAAC;QAE1D,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,0DAA0D,EAAE,cAAc,CAAC,CAAC;YACxF,OAAO;QACT,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAoB,EAAE,EAAE;YACrD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAc,CAAC;YACnC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAe,CAAC;YAEpC,mCAAmC;YACnC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAExB,8BAA8B;YAC9B,GAAG,CAAC,QAAQ,GAAG,KAAK,EAAE,IAAe,EAAE,EAAE;gBACvC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACvC,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACnC,CAAC,CAAC;YAEF,GAAG,CAAC,WAAW,GAAG,KAAK,EAAE,IAAc,EAAE,EAAE;gBACzC,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC;YAEF,GAAG,CAAC,WAAW,GAAG,KAAK,IAAI,EAAE;gBAC3B,OAAO,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,wCAAwC;QACxC,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACzD,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,OAAoB,EAAE,EAAE;gBACrD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAc,CAAC;gBACnC,MAAM,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,cAAc,EAAE;YACtD,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;YACvE,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc;SACxC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { CDNCore } from './core.js';
|
|
2
|
+
export { createCDNMiddleware } from './middleware.js';
|
|
3
|
+
export { cdn } from './hook.js';
|
|
4
|
+
export { CloudflareCDNAdapter, CloudFrontCDNAdapter, AzureCDNAdapter, createCDNAdapter, } from '../cdn/adapters/cdn/index.js';
|
|
5
|
+
export type { CDNAdapter, CDNOptions, CDNStats } from '../../../../types/cdn.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// CDN - Main entry point
|
|
2
|
+
// Re-exports all public APIs for the CDN built-in
|
|
3
|
+
// Core (for direct use by router and custom implementations)
|
|
4
|
+
export { CDNCore } from './core.js';
|
|
5
|
+
// Middleware (for middleware chains)
|
|
6
|
+
export { createCDNMiddleware } from './middleware.js';
|
|
7
|
+
// Hook (for global registration)
|
|
8
|
+
export { cdn } from './hook.js';
|
|
9
|
+
// Re-export adapters for convenience
|
|
10
|
+
export { CloudflareCDNAdapter, CloudFrontCDNAdapter, AzureCDNAdapter, createCDNAdapter, } from '../cdn/adapters/cdn/index.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cdn/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,kDAAkD;AAElD,6DAA6D;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,qCAAqC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,iCAAiC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,qCAAqC;AACrC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,GACjB,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { StandardMiddleware } from '../../../../types/hooks.js';
|
|
2
|
+
import { CDNOptions } from '../../../../types/cdn.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create CDN middleware for use in middleware chains
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* const cdnMw = createCDNMiddleware({
|
|
9
|
+
* adapter: 'cloudflare',
|
|
10
|
+
* adapterOptions: {
|
|
11
|
+
* zoneId: 'your-zone-id',
|
|
12
|
+
* apiToken: 'your-api-token'
|
|
13
|
+
* },
|
|
14
|
+
* autoInvalidate: true,
|
|
15
|
+
* invalidationPatterns: ['/api/.*']
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* app.use(cdnMw);
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function createCDNMiddleware(options?: CDNOptions): StandardMiddleware;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { CDNCore } from './core.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create CDN middleware for use in middleware chains
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const cdnMw = createCDNMiddleware({
|
|
8
|
+
* adapter: 'cloudflare',
|
|
9
|
+
* adapterOptions: {
|
|
10
|
+
* zoneId: 'your-zone-id',
|
|
11
|
+
* apiToken: 'your-api-token'
|
|
12
|
+
* },
|
|
13
|
+
* autoInvalidate: true,
|
|
14
|
+
* invalidationPatterns: ['/api/.*']
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* app.use(cdnMw);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export function createCDNMiddleware(options = {}) {
|
|
21
|
+
const cdnCore = new CDNCore(options);
|
|
22
|
+
if (!cdnCore.hasAdapter()) {
|
|
23
|
+
// Return no-op middleware if no adapter configured
|
|
24
|
+
return async (_req, _res, next) => {
|
|
25
|
+
await next();
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return async (req, res, next) => {
|
|
29
|
+
const reqAny = req;
|
|
30
|
+
const resAny = res;
|
|
31
|
+
// Set CDN headers
|
|
32
|
+
cdnCore.setHeaders(res);
|
|
33
|
+
// Add CDN methods to response
|
|
34
|
+
resAny.purgeCDN = async (urls) => {
|
|
35
|
+
const urlsToPurge = urls || [reqAny.path || reqAny.url];
|
|
36
|
+
await cdnCore.purge(urlsToPurge);
|
|
37
|
+
};
|
|
38
|
+
resAny.prefetchCDN = async (urls) => {
|
|
39
|
+
await cdnCore.prefetch(urls);
|
|
40
|
+
};
|
|
41
|
+
resAny.getCDNStats = async () => {
|
|
42
|
+
return await cdnCore.getStats();
|
|
43
|
+
};
|
|
44
|
+
await next();
|
|
45
|
+
// Auto-invalidate after response if configured
|
|
46
|
+
if (options.autoInvalidate) {
|
|
47
|
+
const path = reqAny.path || reqAny.url;
|
|
48
|
+
await cdnCore.autoInvalidate(path);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cdn/middleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAsB,EAAE;IAC1D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QAC1B,mDAAmD;QACnD,OAAO,KAAK,EAAE,IAAiB,EAAE,IAAkB,EAAE,IAAyB,EAAE,EAAE;YAChF,MAAM,IAAI,EAAE,CAAC;QACf,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,EAAE,GAAgB,EAAE,GAAiB,EAAE,IAAyB,EAAE,EAAE;QAC9E,MAAM,MAAM,GAAG,GAAU,CAAC;QAC1B,MAAM,MAAM,GAAG,GAAU,CAAC;QAE1B,kBAAkB;QAClB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAExB,8BAA8B;QAC9B,MAAM,CAAC,QAAQ,GAAG,KAAK,EAAE,IAAe,EAAE,EAAE;YAC1C,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC;QAEF,MAAM,CAAC,WAAW,GAAG,KAAK,EAAE,IAAc,EAAE,EAAE;YAC5C,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,MAAM,CAAC,WAAW,GAAG,KAAK,IAAI,EAAE;YAC9B,OAAO,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClC,CAAC,CAAC;QAEF,MAAM,IAAI,EAAE,CAAC;QAEb,+CAA+C;QAC/C,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC;YACvC,MAAM,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { HttpResponse } from '../../../../types/http.js';
|
|
2
|
+
export interface CookieOptions {
|
|
3
|
+
maxAge?: number;
|
|
4
|
+
expires?: Date;
|
|
5
|
+
httpOnly?: boolean;
|
|
6
|
+
secure?: boolean;
|
|
7
|
+
sameSite?: 'strict' | 'lax' | 'none';
|
|
8
|
+
domain?: string;
|
|
9
|
+
path?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parse cookies from a Cookie header string
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseCookies(cookieHeader: string): Record<string, string>;
|
|
15
|
+
/**
|
|
16
|
+
* Build a Set-Cookie header string from name, value, and options
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildCookieString(name: string, value: string, options?: CookieOptions): string;
|
|
19
|
+
/**
|
|
20
|
+
* CookieCore - Core cookie management logic
|
|
21
|
+
* Used directly by the router for route-based cookie handling
|
|
22
|
+
*/
|
|
23
|
+
export declare class CookieCore {
|
|
24
|
+
constructor();
|
|
25
|
+
/**
|
|
26
|
+
* Parse cookies from request header
|
|
27
|
+
*/
|
|
28
|
+
parseCookies(cookieHeader: string | undefined): Record<string, string>;
|
|
29
|
+
/**
|
|
30
|
+
* Set a cookie on the response
|
|
31
|
+
*/
|
|
32
|
+
setCookie(res: HttpResponse, name: string, value: string, options?: CookieOptions): void;
|
|
33
|
+
/**
|
|
34
|
+
* Clear a cookie by setting its expiration to the past
|
|
35
|
+
*/
|
|
36
|
+
clearCookie(res: HttpResponse, name: string, options?: CookieOptions): void;
|
|
37
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// ===== Core Logic =====
|
|
2
|
+
/**
|
|
3
|
+
* Parse cookies from a Cookie header string
|
|
4
|
+
*/
|
|
5
|
+
export function parseCookies(cookieHeader) {
|
|
6
|
+
const cookies = {};
|
|
7
|
+
if (!cookieHeader) {
|
|
8
|
+
return cookies;
|
|
9
|
+
}
|
|
10
|
+
cookieHeader.split(';').forEach(cookie => {
|
|
11
|
+
const [name, value] = cookie.trim().split('=');
|
|
12
|
+
if (name && value) {
|
|
13
|
+
cookies[name] = decodeURIComponent(value);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
return cookies;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build a Set-Cookie header string from name, value, and options
|
|
20
|
+
*/
|
|
21
|
+
export function buildCookieString(name, value, options = {}) {
|
|
22
|
+
const cookieValue = encodeURIComponent(value);
|
|
23
|
+
let cookieString = `${name}=${cookieValue}`;
|
|
24
|
+
if (options.maxAge !== undefined) {
|
|
25
|
+
cookieString += `; Max-Age=${options.maxAge}`;
|
|
26
|
+
}
|
|
27
|
+
if (options.expires) {
|
|
28
|
+
cookieString += `; Expires=${options.expires.toUTCString()}`;
|
|
29
|
+
}
|
|
30
|
+
if (options.httpOnly) {
|
|
31
|
+
cookieString += '; HttpOnly';
|
|
32
|
+
}
|
|
33
|
+
if (options.secure) {
|
|
34
|
+
cookieString += '; Secure';
|
|
35
|
+
}
|
|
36
|
+
if (options.sameSite) {
|
|
37
|
+
cookieString += `; SameSite=${options.sameSite}`;
|
|
38
|
+
}
|
|
39
|
+
if (options.domain) {
|
|
40
|
+
cookieString += `; Domain=${options.domain}`;
|
|
41
|
+
}
|
|
42
|
+
if (options.path) {
|
|
43
|
+
cookieString += `; Path=${options.path}`;
|
|
44
|
+
}
|
|
45
|
+
return cookieString;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* CookieCore - Core cookie management logic
|
|
49
|
+
* Used directly by the router for route-based cookie handling
|
|
50
|
+
*/
|
|
51
|
+
export class CookieCore {
|
|
52
|
+
constructor() { }
|
|
53
|
+
/**
|
|
54
|
+
* Parse cookies from request header
|
|
55
|
+
*/
|
|
56
|
+
parseCookies(cookieHeader) {
|
|
57
|
+
return parseCookies(cookieHeader || '');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Set a cookie on the response
|
|
61
|
+
*/
|
|
62
|
+
setCookie(res, name, value, options = {}) {
|
|
63
|
+
const cookieString = buildCookieString(name, value, options);
|
|
64
|
+
const existingCookies = res.getHeader('Set-Cookie') || [];
|
|
65
|
+
const cookies = Array.isArray(existingCookies)
|
|
66
|
+
? [...existingCookies]
|
|
67
|
+
: [existingCookies];
|
|
68
|
+
cookies.push(cookieString);
|
|
69
|
+
res.setHeader('Set-Cookie', cookies);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Clear a cookie by setting its expiration to the past
|
|
73
|
+
*/
|
|
74
|
+
clearCookie(res, name, options = {}) {
|
|
75
|
+
const clearOptions = {
|
|
76
|
+
...options,
|
|
77
|
+
expires: new Date(0),
|
|
78
|
+
maxAge: 0,
|
|
79
|
+
};
|
|
80
|
+
this.setCookie(res, name, '', clearOptions);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cookie/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { MiddlewareInterface } from '../../../../types/hooks.js';
|
|
2
|
+
export interface CookieConfig {
|
|
3
|
+
secret?: string;
|
|
4
|
+
signed?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Cookie hook for global usage
|
|
8
|
+
* Registers with the hooks system for application-wide cookie handling
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { cookie } from '@/middleware/built-in/cookie';
|
|
13
|
+
*
|
|
14
|
+
* app.use(cookie({
|
|
15
|
+
* secret: 'my-secret-key',
|
|
16
|
+
* signed: true
|
|
17
|
+
* }));
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare const cookie: (config?: CookieConfig) => MiddlewareInterface;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
2
|
+
import { CookieCore } from './core.js';
|
|
3
|
+
const logger = createFrameworkLogger('CookieMiddleware');
|
|
4
|
+
/**
|
|
5
|
+
* Cookie hook for global usage
|
|
6
|
+
* Registers with the hooks system for application-wide cookie handling
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { cookie } from '@/middleware/built-in/cookie';
|
|
11
|
+
*
|
|
12
|
+
* app.use(cookie({
|
|
13
|
+
* secret: 'my-secret-key',
|
|
14
|
+
* signed: true
|
|
15
|
+
* }));
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export const cookie = (config = {}) => ({
|
|
19
|
+
name: 'cookie',
|
|
20
|
+
version: '1.0.0',
|
|
21
|
+
metadata: {
|
|
22
|
+
name: 'cookie',
|
|
23
|
+
version: '1.0.0',
|
|
24
|
+
description: 'Cookie parsing and setting middleware with security features',
|
|
25
|
+
author: 'MoroJS Team',
|
|
26
|
+
},
|
|
27
|
+
install: async (hooks, middlewareOptions = {}) => {
|
|
28
|
+
logger.debug('Installing cookie middleware', 'Installation');
|
|
29
|
+
const cookieCore = new CookieCore();
|
|
30
|
+
hooks.before('request', async (context) => {
|
|
31
|
+
const req = context.request;
|
|
32
|
+
const res = context.response;
|
|
33
|
+
// Parse cookies from request
|
|
34
|
+
req.cookies = cookieCore.parseCookies(req.headers.cookie);
|
|
35
|
+
// Add cookie methods to response
|
|
36
|
+
res.cookie = (name, value, options = {}) => {
|
|
37
|
+
cookieCore.setCookie(res, name, value, options);
|
|
38
|
+
return res;
|
|
39
|
+
};
|
|
40
|
+
res.clearCookie = (name, options = {}) => {
|
|
41
|
+
cookieCore.clearCookie(res, name, options);
|
|
42
|
+
return res;
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cookie/hook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAsB,MAAM,WAAW,CAAC;AAE3D,MAAM,MAAM,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;AAOzD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,SAAuB,EAAE,EAAuB,EAAE,CAAC,CAAC;IACzE,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,8DAA8D;QAC3E,MAAM,EAAE,aAAa;KACtB;IAED,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,oBAAyB,EAAE,EAAE,EAAE;QACzD,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;QAE7D,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAEpC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAoB,EAAE,EAAE;YACrD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAc,CAAC;YACnC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAe,CAAC;YAEpC,6BAA6B;YAC7B,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE1D,iCAAiC;YACjC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,UAAyB,EAAE,EAAE,EAAE;gBACxE,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBAChD,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;YAEF,GAAG,CAAC,WAAW,GAAG,CAAC,IAAY,EAAE,UAAyB,EAAE,EAAE,EAAE;gBAC9D,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC3C,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Cookie - Main entry point
|
|
2
|
+
// Re-exports all public APIs for the cookie built-in
|
|
3
|
+
// Core (for direct use by router and custom implementations)
|
|
4
|
+
export { CookieCore, parseCookies, buildCookieString } from './core.js';
|
|
5
|
+
// Middleware (for middleware chains)
|
|
6
|
+
export { createCookieMiddleware } from './middleware.js';
|
|
7
|
+
// Hook (for global registration)
|
|
8
|
+
export { cookie } from './hook.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cookie/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,qDAAqD;AAErD,6DAA6D;AAC7D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAsB,MAAM,WAAW,CAAC;AAE5F,qCAAqC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,iCAAiC;AACjC,OAAO,EAAE,MAAM,EAAqB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { StandardMiddleware } from '../../../../types/hooks.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create cookie middleware for use in middleware chains
|
|
4
|
+
* Adds cookie parsing and response methods to req/res
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* const cookieMw = createCookieMiddleware();
|
|
9
|
+
* app.use(cookieMw);
|
|
10
|
+
*
|
|
11
|
+
* // In routes:
|
|
12
|
+
* req.cookies // { sessionId: '123' }
|
|
13
|
+
* res.cookie('user', 'john', { httpOnly: true })
|
|
14
|
+
* res.clearCookie('user')
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare function createCookieMiddleware(): StandardMiddleware;
|