@morojs/moro 1.6.2 → 1.6.3
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
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { CookieCore } from './core.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 function createCookieMiddleware() {
|
|
18
|
+
const cookieCore = new CookieCore();
|
|
19
|
+
return async (req, res, next) => {
|
|
20
|
+
const reqAny = req;
|
|
21
|
+
const resAny = res;
|
|
22
|
+
// Parse cookies from request
|
|
23
|
+
reqAny.cookies = cookieCore.parseCookies(req.headers.cookie);
|
|
24
|
+
// Add cookie methods to response
|
|
25
|
+
resAny.cookie = (name, value, options = {}) => {
|
|
26
|
+
cookieCore.setCookie(res, name, value, options);
|
|
27
|
+
return res;
|
|
28
|
+
};
|
|
29
|
+
resAny.clearCookie = (name, options = {}) => {
|
|
30
|
+
cookieCore.clearCookie(res, name, options);
|
|
31
|
+
return res;
|
|
32
|
+
};
|
|
33
|
+
await next();
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cookie/middleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAsB,MAAM,WAAW,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IAEpC,OAAO,KAAK,EAAE,GAAgB,EAAE,GAAiB,EAAE,IAAyB,EAAE,EAAE;QAC9E,MAAM,MAAM,GAAG,GAAU,CAAC;QAC1B,MAAM,MAAM,GAAG,GAAU,CAAC;QAE1B,6BAA6B;QAC7B,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7D,iCAAiC;QACjC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,UAAyB,EAAE,EAAE,EAAE;YAC3E,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,CAAC,WAAW,GAAG,CAAC,IAAY,EAAE,UAAyB,EAAE,EAAE,EAAE;YACjE,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { HttpResponse } from '../../../../types/http.js';
|
|
2
|
+
export interface CORSOptions {
|
|
3
|
+
origin?: string | string[];
|
|
4
|
+
methods?: string | string[];
|
|
5
|
+
headers?: string | string[];
|
|
6
|
+
credentials?: boolean;
|
|
7
|
+
maxAge?: number;
|
|
8
|
+
exposedHeaders?: string[];
|
|
9
|
+
preflightContinue?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* CORSCore - Core CORS header management logic
|
|
13
|
+
* Used directly by the router for route-based CORS
|
|
14
|
+
* Can be instantiated for use in middleware or hooks
|
|
15
|
+
*/
|
|
16
|
+
export declare class CORSCore {
|
|
17
|
+
private options;
|
|
18
|
+
constructor(options?: CORSOptions);
|
|
19
|
+
/**
|
|
20
|
+
* Apply CORS headers to response
|
|
21
|
+
*/
|
|
22
|
+
applyCORS(res: HttpResponse): void;
|
|
23
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// ===== Core Logic =====
|
|
2
|
+
/**
|
|
3
|
+
* CORSCore - Core CORS header management logic
|
|
4
|
+
* Used directly by the router for route-based CORS
|
|
5
|
+
* Can be instantiated for use in middleware or hooks
|
|
6
|
+
*/
|
|
7
|
+
export class CORSCore {
|
|
8
|
+
options;
|
|
9
|
+
constructor(options = {}) {
|
|
10
|
+
this.options = {
|
|
11
|
+
origin: '*',
|
|
12
|
+
methods: 'GET,POST,PUT,DELETE,OPTIONS',
|
|
13
|
+
headers: 'Content-Type,Authorization',
|
|
14
|
+
credentials: false,
|
|
15
|
+
...options,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Apply CORS headers to response
|
|
20
|
+
*/
|
|
21
|
+
applyCORS(res) {
|
|
22
|
+
// Origin
|
|
23
|
+
const origin = Array.isArray(this.options.origin)
|
|
24
|
+
? this.options.origin.join(',')
|
|
25
|
+
: this.options.origin || '*';
|
|
26
|
+
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
27
|
+
// Methods
|
|
28
|
+
const methods = Array.isArray(this.options.methods)
|
|
29
|
+
? this.options.methods.join(',')
|
|
30
|
+
: this.options.methods || 'GET,POST,PUT,DELETE,OPTIONS';
|
|
31
|
+
res.setHeader('Access-Control-Allow-Methods', methods);
|
|
32
|
+
// Headers
|
|
33
|
+
const headers = Array.isArray(this.options.headers)
|
|
34
|
+
? this.options.headers.join(',')
|
|
35
|
+
: this.options.headers || 'Content-Type,Authorization';
|
|
36
|
+
res.setHeader('Access-Control-Allow-Headers', headers);
|
|
37
|
+
// Credentials
|
|
38
|
+
if (this.options.credentials) {
|
|
39
|
+
res.setHeader('Access-Control-Allow-Credentials', 'true');
|
|
40
|
+
}
|
|
41
|
+
// Max Age
|
|
42
|
+
if (this.options.maxAge) {
|
|
43
|
+
res.setHeader('Access-Control-Max-Age', String(this.options.maxAge));
|
|
44
|
+
}
|
|
45
|
+
// Exposed Headers
|
|
46
|
+
if (this.options.exposedHeaders && this.options.exposedHeaders.length > 0) {
|
|
47
|
+
res.setHeader('Access-Control-Expose-Headers', this.options.exposedHeaders.join(','));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cors/core.ts"],"names":[],"mappings":"AAeA,yBAAyB;AAEzB;;;;GAIG;AACH,MAAM,OAAO,QAAQ;IACX,OAAO,CAAc;IAE7B,YAAY,UAAuB,EAAE;QACnC,IAAI,CAAC,OAAO,GAAG;YACb,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,6BAA6B;YACtC,OAAO,EAAE,4BAA4B;YACrC,WAAW,EAAE,KAAK;YAClB,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,GAAiB;QACzB,SAAS;QACT,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAC/B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC;QAC/B,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;QAErD,UAAU;QACV,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YACjD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,6BAA6B,CAAC;QAC1D,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;QAEvD,UAAU;QACV,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YACjD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,4BAA4B,CAAC;QACzD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;QAEvD,cAAc;QACd,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC;QAED,UAAU;QACV,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { MiddlewareInterface } from '../../../../types/hooks.js';
|
|
2
|
+
import { type CORSOptions } from './core.js';
|
|
3
|
+
/**
|
|
4
|
+
* CORS hook for global usage
|
|
5
|
+
* Registers with the hooks system for application-wide CORS
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { cors } from '@/middleware/built-in/cors';
|
|
10
|
+
*
|
|
11
|
+
* app.use(cors({
|
|
12
|
+
* origin: 'https://example.com',
|
|
13
|
+
* credentials: true
|
|
14
|
+
* }));
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare const cors: (options?: CORSOptions) => MiddlewareInterface;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
2
|
+
import { CORSCore } from './core.js';
|
|
3
|
+
const logger = createFrameworkLogger('CorsMiddleware');
|
|
4
|
+
/**
|
|
5
|
+
* CORS hook for global usage
|
|
6
|
+
* Registers with the hooks system for application-wide CORS
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { cors } from '@/middleware/built-in/cors';
|
|
11
|
+
*
|
|
12
|
+
* app.use(cors({
|
|
13
|
+
* origin: 'https://example.com',
|
|
14
|
+
* credentials: true
|
|
15
|
+
* }));
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export const cors = (options = {}) => ({
|
|
19
|
+
name: 'cors',
|
|
20
|
+
version: '1.0.0',
|
|
21
|
+
metadata: {
|
|
22
|
+
name: 'cors',
|
|
23
|
+
version: '1.0.0',
|
|
24
|
+
description: 'Cross-Origin Resource Sharing middleware',
|
|
25
|
+
author: 'MoroJS Team',
|
|
26
|
+
},
|
|
27
|
+
install: async (hooks, middlewareOptions = {}) => {
|
|
28
|
+
logger.debug('Installing CORS middleware', 'Installation', { options: middlewareOptions });
|
|
29
|
+
const config = { ...options, ...middlewareOptions };
|
|
30
|
+
const corsCore = new CORSCore(config);
|
|
31
|
+
hooks.before('request', async (context) => {
|
|
32
|
+
const response = context.response;
|
|
33
|
+
corsCore.applyCORS(response);
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cors/hook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAoB,MAAM,WAAW,CAAC;AAEvD,MAAM,MAAM,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,UAAuB,EAAE,EAAuB,EAAE,CAAC,CAAC;IACvE,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,0CAA0C;QACvD,MAAM,EAAE,aAAa;KACtB;IAED,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,oBAAyB,EAAE,EAAE,EAAE;QACzD,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAE3F,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEtC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAoB,EAAE,EAAE;YACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAe,CAAC;YACzC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// CORS - Main entry point
|
|
2
|
+
// Re-exports all public APIs for the CORS built-in
|
|
3
|
+
// Core (for direct use by router and custom implementations)
|
|
4
|
+
export { CORSCore } from './core.js';
|
|
5
|
+
// Middleware (for middleware chains)
|
|
6
|
+
export { createCORSMiddleware } from './middleware.js';
|
|
7
|
+
// Hook (for global registration)
|
|
8
|
+
export { cors } from './hook.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cors/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,mDAAmD;AAEnD,6DAA6D;AAC7D,OAAO,EAAE,QAAQ,EAAoB,MAAM,WAAW,CAAC;AAEvD,qCAAqC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,iCAAiC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { StandardMiddleware } from '../../../../types/hooks.js';
|
|
2
|
+
import { type CORSOptions } from './core.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create CORS middleware for use in middleware chains
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* const corsMw = createCORSMiddleware({
|
|
9
|
+
* origin: 'https://example.com',
|
|
10
|
+
* credentials: true
|
|
11
|
+
* });
|
|
12
|
+
*
|
|
13
|
+
* app.use(corsMw);
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare function createCORSMiddleware(options?: CORSOptions): StandardMiddleware;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CORSCore } from './core.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create CORS middleware for use in middleware chains
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const corsMw = createCORSMiddleware({
|
|
8
|
+
* origin: 'https://example.com',
|
|
9
|
+
* credentials: true
|
|
10
|
+
* });
|
|
11
|
+
*
|
|
12
|
+
* app.use(corsMw);
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export function createCORSMiddleware(options = {}) {
|
|
16
|
+
const corsCore = new CORSCore(options);
|
|
17
|
+
return async (_req, res, next) => {
|
|
18
|
+
corsCore.applyCORS(res);
|
|
19
|
+
await next();
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/cors/middleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAoB,MAAM,WAAW,CAAC;AAEvD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAuB,EAAE;IAC5D,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEvC,OAAO,KAAK,EAAE,IAAiB,EAAE,GAAiB,EAAE,IAAyB,EAAE,EAAE;QAC/E,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { HttpResponse } from '../../../../types/http.js';
|
|
2
|
+
export interface CSPDirectives {
|
|
3
|
+
defaultSrc?: string[];
|
|
4
|
+
scriptSrc?: string[];
|
|
5
|
+
styleSrc?: string[];
|
|
6
|
+
imgSrc?: string[];
|
|
7
|
+
connectSrc?: string[];
|
|
8
|
+
fontSrc?: string[];
|
|
9
|
+
objectSrc?: string[];
|
|
10
|
+
mediaSrc?: string[];
|
|
11
|
+
frameSrc?: string[];
|
|
12
|
+
childSrc?: string[];
|
|
13
|
+
workerSrc?: string[];
|
|
14
|
+
formAction?: string[];
|
|
15
|
+
upgradeInsecureRequests?: boolean;
|
|
16
|
+
blockAllMixedContent?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface CSPOptions {
|
|
19
|
+
directives?: CSPDirectives;
|
|
20
|
+
reportOnly?: boolean;
|
|
21
|
+
reportUri?: string;
|
|
22
|
+
nonce?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generate a cryptographically secure nonce for CSP
|
|
26
|
+
*/
|
|
27
|
+
export declare function generateNonce(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Build CSP header value from directives
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildCSPHeader(directives: CSPDirectives, nonce?: string, reportUri?: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* CSPCore - Core Content Security Policy management logic
|
|
34
|
+
* Used directly by the router for route-based CSP
|
|
35
|
+
*/
|
|
36
|
+
export declare class CSPCore {
|
|
37
|
+
private options;
|
|
38
|
+
private defaultDirectives;
|
|
39
|
+
constructor(options?: CSPOptions);
|
|
40
|
+
/**
|
|
41
|
+
* Apply CSP header to response
|
|
42
|
+
* Returns the generated nonce if nonce support is enabled
|
|
43
|
+
*/
|
|
44
|
+
applyCSP(res: HttpResponse): string | undefined;
|
|
45
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// CSP Core - Reusable Content Security Policy logic
|
|
2
|
+
import crypto from 'crypto';
|
|
3
|
+
// ===== Core Logic =====
|
|
4
|
+
/**
|
|
5
|
+
* Generate a cryptographically secure nonce for CSP
|
|
6
|
+
*/
|
|
7
|
+
export function generateNonce() {
|
|
8
|
+
return crypto.randomBytes(16).toString('base64');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Convert camelCase directive name to kebab-case
|
|
12
|
+
*/
|
|
13
|
+
function toKebabCase(str) {
|
|
14
|
+
return str.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build CSP header value from directives
|
|
18
|
+
*/
|
|
19
|
+
export function buildCSPHeader(directives, nonce, reportUri) {
|
|
20
|
+
const cspParts = [];
|
|
21
|
+
for (const [directive, sources] of Object.entries(directives)) {
|
|
22
|
+
if (directive === 'upgradeInsecureRequests' && sources === true) {
|
|
23
|
+
cspParts.push('upgrade-insecure-requests');
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (directive === 'blockAllMixedContent' && sources === true) {
|
|
27
|
+
cspParts.push('block-all-mixed-content');
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (Array.isArray(sources)) {
|
|
31
|
+
let sourceList = sources.join(' ');
|
|
32
|
+
// Add nonce to script-src and style-src if enabled
|
|
33
|
+
if (nonce && (directive === 'scriptSrc' || directive === 'styleSrc')) {
|
|
34
|
+
sourceList += ` 'nonce-${nonce}'`;
|
|
35
|
+
}
|
|
36
|
+
// Convert camelCase to kebab-case
|
|
37
|
+
const kebabDirective = toKebabCase(directive);
|
|
38
|
+
cspParts.push(`${kebabDirective} ${sourceList}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Add report-uri if specified
|
|
42
|
+
if (reportUri) {
|
|
43
|
+
cspParts.push(`report-uri ${reportUri}`);
|
|
44
|
+
}
|
|
45
|
+
return cspParts.join('; ');
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* CSPCore - Core Content Security Policy management logic
|
|
49
|
+
* Used directly by the router for route-based CSP
|
|
50
|
+
*/
|
|
51
|
+
export class CSPCore {
|
|
52
|
+
options;
|
|
53
|
+
defaultDirectives;
|
|
54
|
+
constructor(options = {}) {
|
|
55
|
+
this.options = options;
|
|
56
|
+
this.defaultDirectives = {
|
|
57
|
+
defaultSrc: ["'self'"],
|
|
58
|
+
scriptSrc: ["'self'"],
|
|
59
|
+
styleSrc: ["'self'", "'unsafe-inline'"],
|
|
60
|
+
imgSrc: ["'self'", 'data:', 'https:'],
|
|
61
|
+
connectSrc: ["'self'"],
|
|
62
|
+
fontSrc: ["'self'"],
|
|
63
|
+
objectSrc: ["'none'"],
|
|
64
|
+
mediaSrc: ["'self'"],
|
|
65
|
+
frameSrc: ["'none'"],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Apply CSP header to response
|
|
70
|
+
* Returns the generated nonce if nonce support is enabled
|
|
71
|
+
*/
|
|
72
|
+
applyCSP(res) {
|
|
73
|
+
const directives = this.options.directives || this.defaultDirectives;
|
|
74
|
+
// Generate nonce if requested
|
|
75
|
+
let nonce;
|
|
76
|
+
if (this.options.nonce) {
|
|
77
|
+
nonce = generateNonce();
|
|
78
|
+
}
|
|
79
|
+
// Build CSP header value
|
|
80
|
+
const cspValue = buildCSPHeader(directives, nonce, this.options.reportUri);
|
|
81
|
+
const headerName = this.options.reportOnly
|
|
82
|
+
? 'Content-Security-Policy-Report-Only'
|
|
83
|
+
: 'Content-Security-Policy';
|
|
84
|
+
res.setHeader(headerName, cspValue);
|
|
85
|
+
return nonce;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/csp/core.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,OAAO,MAAM,MAAM,QAAQ,CAAC;AA6B5B,yBAAyB;AAEzB;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,UAAyB,EACzB,KAAc,EACd,SAAkB;IAElB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,IAAI,SAAS,KAAK,yBAAyB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC3C,SAAS;QACX,CAAC;QAED,IAAI,SAAS,KAAK,sBAAsB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7D,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACzC,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEnC,mDAAmD;YACnD,IAAI,KAAK,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,UAAU,CAAC,EAAE,CAAC;gBACrE,UAAU,IAAI,WAAW,KAAK,GAAG,CAAC;YACpC,CAAC;YAED,kCAAkC;YAClC,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC,GAAG,cAAc,IAAI,UAAU,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,OAAO;IACV,OAAO,CAAa;IACpB,iBAAiB,CAAgB;IAEzC,YAAY,UAAsB,EAAE;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,iBAAiB,GAAG;YACvB,UAAU,EAAE,CAAC,QAAQ,CAAC;YACtB,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,QAAQ,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC;YACvC,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;YACrC,UAAU,EAAE,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE,CAAC,QAAQ,CAAC;YACnB,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,GAAiB;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC;QAErE,8BAA8B;QAC9B,IAAI,KAAyB,CAAC;QAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACvB,KAAK,GAAG,aAAa,EAAE,CAAC;QAC1B,CAAC;QAED,yBAAyB;QACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE3E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;YACxC,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,yBAAyB,CAAC;QAE9B,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEpC,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MiddlewareInterface } from '../../../../types/hooks.js';
|
|
2
|
+
import { type CSPOptions } from './core.js';
|
|
3
|
+
/**
|
|
4
|
+
* CSP hook for global usage
|
|
5
|
+
* Registers with the hooks system for application-wide Content Security Policy
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { csp } from '@/middleware/built-in/csp';
|
|
10
|
+
*
|
|
11
|
+
* app.use(csp({
|
|
12
|
+
* directives: {
|
|
13
|
+
* defaultSrc: ["'self'"],
|
|
14
|
+
* scriptSrc: ["'self'", 'https://cdn.example.com'],
|
|
15
|
+
* styleSrc: ["'self'", "'unsafe-inline'"]
|
|
16
|
+
* },
|
|
17
|
+
* nonce: true,
|
|
18
|
+
* reportUri: '/csp-report'
|
|
19
|
+
* }));
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare const csp: (options?: CSPOptions) => MiddlewareInterface;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
2
|
+
import { CSPCore } from './core.js';
|
|
3
|
+
const logger = createFrameworkLogger('CSPMiddleware');
|
|
4
|
+
/**
|
|
5
|
+
* CSP hook for global usage
|
|
6
|
+
* Registers with the hooks system for application-wide Content Security Policy
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { csp } from '@/middleware/built-in/csp';
|
|
11
|
+
*
|
|
12
|
+
* app.use(csp({
|
|
13
|
+
* directives: {
|
|
14
|
+
* defaultSrc: ["'self'"],
|
|
15
|
+
* scriptSrc: ["'self'", 'https://cdn.example.com'],
|
|
16
|
+
* styleSrc: ["'self'", "'unsafe-inline'"]
|
|
17
|
+
* },
|
|
18
|
+
* nonce: true,
|
|
19
|
+
* reportUri: '/csp-report'
|
|
20
|
+
* }));
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export const csp = (options = {}) => ({
|
|
24
|
+
name: 'csp',
|
|
25
|
+
version: '1.0.0',
|
|
26
|
+
metadata: {
|
|
27
|
+
name: 'csp',
|
|
28
|
+
version: '1.0.0',
|
|
29
|
+
description: 'Content Security Policy middleware with nonce support and violation reporting',
|
|
30
|
+
author: 'MoroJS Team',
|
|
31
|
+
},
|
|
32
|
+
install: async (hooks, middlewareOptions = {}) => {
|
|
33
|
+
logger.debug('Installing CSP middleware', 'Installation', { options: middlewareOptions });
|
|
34
|
+
const config = { ...options, ...middlewareOptions };
|
|
35
|
+
const cspCore = new CSPCore(config);
|
|
36
|
+
hooks.before('request', async (context) => {
|
|
37
|
+
const req = context.request;
|
|
38
|
+
const res = context.response;
|
|
39
|
+
const nonce = cspCore.applyCSP(res);
|
|
40
|
+
// Attach nonce to request if generated
|
|
41
|
+
if (nonce) {
|
|
42
|
+
req.cspNonce = nonce;
|
|
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/csp/hook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,OAAO,EAAmB,MAAM,WAAW,CAAC;AAErD,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,+EAA+E;QAC5F,MAAM,EAAE,aAAa;KACtB;IAED,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,oBAAyB,EAAE,EAAE,EAAE;QACzD,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAE1F,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,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,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAEpC,uCAAuC;YACvC,IAAI,KAAK,EAAE,CAAC;gBACV,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// CSP - Main entry point
|
|
2
|
+
// Re-exports all public APIs for the CSP built-in
|
|
3
|
+
// Core (for direct use by router and custom implementations)
|
|
4
|
+
export { CSPCore, generateNonce, buildCSPHeader, } from './core.js';
|
|
5
|
+
// Middleware (for middleware chains)
|
|
6
|
+
export { createCSPMiddleware } from './middleware.js';
|
|
7
|
+
// Hook (for global registration)
|
|
8
|
+
export { csp } from './hook.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/csp/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,kDAAkD;AAElD,6DAA6D;AAC7D,OAAO,EACL,OAAO,EACP,aAAa,EACb,cAAc,GAGf,MAAM,WAAW,CAAC;AAEnB,qCAAqC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,iCAAiC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { StandardMiddleware } from '../../../../types/hooks.js';
|
|
2
|
+
import { type CSPOptions } from './core.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create CSP middleware for use in middleware chains
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* const cspMw = createCSPMiddleware({
|
|
9
|
+
* directives: {
|
|
10
|
+
* defaultSrc: ["'self'"],
|
|
11
|
+
* scriptSrc: ["'self'", "'unsafe-inline'"]
|
|
12
|
+
* },
|
|
13
|
+
* nonce: true
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* app.use(cspMw);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function createCSPMiddleware(options?: CSPOptions): StandardMiddleware;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CSPCore } from './core.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create CSP middleware for use in middleware chains
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const cspMw = createCSPMiddleware({
|
|
8
|
+
* directives: {
|
|
9
|
+
* defaultSrc: ["'self'"],
|
|
10
|
+
* scriptSrc: ["'self'", "'unsafe-inline'"]
|
|
11
|
+
* },
|
|
12
|
+
* nonce: true
|
|
13
|
+
* });
|
|
14
|
+
*
|
|
15
|
+
* app.use(cspMw);
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function createCSPMiddleware(options = {}) {
|
|
19
|
+
const cspCore = new CSPCore(options);
|
|
20
|
+
return async (req, res, next) => {
|
|
21
|
+
const nonce = cspCore.applyCSP(res);
|
|
22
|
+
// Attach nonce to request if generated
|
|
23
|
+
if (nonce) {
|
|
24
|
+
req.cspNonce = nonce;
|
|
25
|
+
}
|
|
26
|
+
await next();
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/csp/middleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAmB,MAAM,WAAW,CAAC;AAErD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAsB,EAAE;IAC1D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO,KAAK,EAAE,GAAgB,EAAE,GAAiB,EAAE,IAAyB,EAAE,EAAE;QAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEpC,uCAAuC;QACvC,IAAI,KAAK,EAAE,CAAC;YACT,GAAW,CAAC,QAAQ,GAAG,KAAK,CAAC;QAChC,CAAC;QAED,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { HttpRequest, HttpResponse } from '../../../../types/http.js';
|
|
2
|
+
export interface CSRFOptions {
|
|
3
|
+
secret?: string;
|
|
4
|
+
tokenLength?: number;
|
|
5
|
+
cookieName?: string;
|
|
6
|
+
headerName?: string;
|
|
7
|
+
ignoreMethods?: string[];
|
|
8
|
+
sameSite?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* CSRFCore - Core CSRF protection logic
|
|
12
|
+
* Used directly by the router for route-based CSRF protection
|
|
13
|
+
* Can be instantiated for use in middleware or hooks
|
|
14
|
+
*/
|
|
15
|
+
export declare class CSRFCore {
|
|
16
|
+
private secret;
|
|
17
|
+
private tokenLength;
|
|
18
|
+
private cookieName;
|
|
19
|
+
private headerName;
|
|
20
|
+
private ignoreMethods;
|
|
21
|
+
private sameSite;
|
|
22
|
+
constructor(options?: CSRFOptions);
|
|
23
|
+
generateToken(): string;
|
|
24
|
+
verifyToken(token: string, sessionToken: string): boolean;
|
|
25
|
+
attachToken(req: HttpRequest, res: HttpResponse): Promise<string>;
|
|
26
|
+
validateToken(req: HttpRequest): Promise<void>;
|
|
27
|
+
getCookieName(): string;
|
|
28
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// CSRF Core - Reusable CSRF protection logic
|
|
2
|
+
import crypto from 'crypto';
|
|
3
|
+
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
4
|
+
const logger = createFrameworkLogger('CSRFCore');
|
|
5
|
+
// ===== Core Logic =====
|
|
6
|
+
/**
|
|
7
|
+
* CSRFCore - Core CSRF protection logic
|
|
8
|
+
* Used directly by the router for route-based CSRF protection
|
|
9
|
+
* Can be instantiated for use in middleware or hooks
|
|
10
|
+
*/
|
|
11
|
+
export class CSRFCore {
|
|
12
|
+
secret;
|
|
13
|
+
tokenLength;
|
|
14
|
+
cookieName;
|
|
15
|
+
headerName;
|
|
16
|
+
ignoreMethods;
|
|
17
|
+
sameSite;
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
this.secret = options.secret || 'moro-csrf-secret';
|
|
20
|
+
this.tokenLength = options.tokenLength || 32;
|
|
21
|
+
this.cookieName = options.cookieName || '_csrf';
|
|
22
|
+
this.headerName = options.headerName || 'x-csrf-token';
|
|
23
|
+
this.ignoreMethods = options.ignoreMethods || ['GET', 'HEAD', 'OPTIONS'];
|
|
24
|
+
this.sameSite = options.sameSite !== false;
|
|
25
|
+
}
|
|
26
|
+
generateToken() {
|
|
27
|
+
return crypto.randomBytes(this.tokenLength).toString('hex');
|
|
28
|
+
}
|
|
29
|
+
verifyToken(token, sessionToken) {
|
|
30
|
+
return !!(token && sessionToken && token === sessionToken);
|
|
31
|
+
}
|
|
32
|
+
async attachToken(req, res) {
|
|
33
|
+
let token = req._csrfToken;
|
|
34
|
+
if (!token) {
|
|
35
|
+
token = this.generateToken();
|
|
36
|
+
req._csrfToken = token;
|
|
37
|
+
// Set token in cookie
|
|
38
|
+
res.cookie(this.cookieName, token, {
|
|
39
|
+
httpOnly: true,
|
|
40
|
+
sameSite: this.sameSite ? 'strict' : undefined,
|
|
41
|
+
secure: req.headers['x-forwarded-proto'] === 'https' || req.socket.encrypted,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return token;
|
|
45
|
+
}
|
|
46
|
+
async validateToken(req) {
|
|
47
|
+
// Skip verification for safe methods
|
|
48
|
+
const method = req.method || 'GET';
|
|
49
|
+
if (this.ignoreMethods.includes(method)) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// Get token from header or body
|
|
53
|
+
const token = req.headers[this.headerName] ||
|
|
54
|
+
(req.body && req.body._csrf) ||
|
|
55
|
+
(req.query && req.query._csrf);
|
|
56
|
+
// Get session token from cookie
|
|
57
|
+
const sessionToken = req.cookies?.[this.cookieName];
|
|
58
|
+
if (!this.verifyToken(token, sessionToken || '')) {
|
|
59
|
+
const error = new Error('Invalid CSRF token');
|
|
60
|
+
error.status = 403;
|
|
61
|
+
error.code = 'CSRF_TOKEN_MISMATCH';
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
getCookieName() {
|
|
66
|
+
return this.cookieName;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/csrf/core.ts"],"names":[],"mappings":"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"}
|