@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
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
// Advanced Logger Outputs
|
|
2
|
-
import { writeFile, appendFile, mkdir } from 'fs/promises';
|
|
3
|
-
import { join, dirname } from 'path';
|
|
4
|
-
import { LogEntry, LogOutput } from '../../types/logger.js';
|
|
5
|
-
|
|
6
|
-
// File output for persistent logging
|
|
7
|
-
export class FileOutput implements LogOutput {
|
|
8
|
-
name = 'file';
|
|
9
|
-
|
|
10
|
-
constructor(
|
|
11
|
-
private filePath: string,
|
|
12
|
-
private options: {
|
|
13
|
-
format?: 'json' | 'pretty';
|
|
14
|
-
maxSize?: number; // MB
|
|
15
|
-
rotate?: boolean;
|
|
16
|
-
} = {}
|
|
17
|
-
) {}
|
|
18
|
-
|
|
19
|
-
async write(entry: LogEntry): Promise<void> {
|
|
20
|
-
try {
|
|
21
|
-
// Ensure directory exists
|
|
22
|
-
await mkdir(dirname(this.filePath), { recursive: true });
|
|
23
|
-
|
|
24
|
-
const format = this.options.format || 'json';
|
|
25
|
-
const line =
|
|
26
|
-
format === 'json' ? JSON.stringify(entry) + '\n' : this.formatPretty(entry) + '\n';
|
|
27
|
-
|
|
28
|
-
await appendFile(this.filePath, line, 'utf8');
|
|
29
|
-
|
|
30
|
-
// TODO: Implement log rotation if needed
|
|
31
|
-
} catch (error) {
|
|
32
|
-
console.error('File logger error:', error);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
private formatPretty(entry: LogEntry): string {
|
|
37
|
-
const timestamp = entry.timestamp.toISOString();
|
|
38
|
-
const level = entry.level.toUpperCase().padEnd(5);
|
|
39
|
-
const context = entry.context ? `[${entry.context}] ` : '';
|
|
40
|
-
const metadata =
|
|
41
|
-
entry.metadata && Object.keys(entry.metadata).length > 0
|
|
42
|
-
? ` ${JSON.stringify(entry.metadata)}`
|
|
43
|
-
: '';
|
|
44
|
-
|
|
45
|
-
return `${timestamp} ${level} ${context}${entry.message}${metadata}`;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// HTTP webhook output for external logging services
|
|
50
|
-
export class WebhookOutput implements LogOutput {
|
|
51
|
-
name = 'webhook';
|
|
52
|
-
|
|
53
|
-
constructor(
|
|
54
|
-
private url: string,
|
|
55
|
-
private options: {
|
|
56
|
-
headers?: Record<string, string>;
|
|
57
|
-
batch?: boolean;
|
|
58
|
-
batchSize?: number;
|
|
59
|
-
timeout?: number;
|
|
60
|
-
} = {}
|
|
61
|
-
) {}
|
|
62
|
-
|
|
63
|
-
async write(entry: LogEntry): Promise<void> {
|
|
64
|
-
try {
|
|
65
|
-
const response = await fetch(this.url, {
|
|
66
|
-
method: 'POST',
|
|
67
|
-
headers: {
|
|
68
|
-
'Content-Type': 'application/json',
|
|
69
|
-
...this.options.headers,
|
|
70
|
-
},
|
|
71
|
-
body: JSON.stringify(entry),
|
|
72
|
-
signal: AbortSignal.timeout(this.options.timeout || 5000),
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
if (!response.ok) {
|
|
76
|
-
throw new Error(`Webhook failed: ${response.status}`);
|
|
77
|
-
}
|
|
78
|
-
} catch (error) {
|
|
79
|
-
console.error('Webhook logger error:', error);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Memory buffer output for testing and debugging
|
|
85
|
-
export class MemoryOutput implements LogOutput {
|
|
86
|
-
name = 'memory';
|
|
87
|
-
private buffer: LogEntry[] = [];
|
|
88
|
-
|
|
89
|
-
constructor(private maxSize: number = 1000) {}
|
|
90
|
-
|
|
91
|
-
write(entry: LogEntry): void {
|
|
92
|
-
this.buffer.push(entry);
|
|
93
|
-
if (this.buffer.length > this.maxSize) {
|
|
94
|
-
this.buffer.shift();
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
getEntries(): LogEntry[] {
|
|
99
|
-
return [...this.buffer];
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
clear(): void {
|
|
103
|
-
this.buffer = [];
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// Stream output for custom processing
|
|
108
|
-
export class StreamOutput implements LogOutput {
|
|
109
|
-
name = 'stream';
|
|
110
|
-
format?: 'pretty' | 'json' | 'compact';
|
|
111
|
-
|
|
112
|
-
constructor(
|
|
113
|
-
private stream: NodeJS.WritableStream,
|
|
114
|
-
format: 'json' | 'pretty' = 'json'
|
|
115
|
-
) {
|
|
116
|
-
this.format = format;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
write(entry: LogEntry): void {
|
|
120
|
-
const data =
|
|
121
|
-
this.format === 'json' ? JSON.stringify(entry) + '\n' : this.formatPretty(entry) + '\n';
|
|
122
|
-
|
|
123
|
-
this.stream.write(data);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
private formatPretty(entry: LogEntry): string {
|
|
127
|
-
const timestamp = entry.timestamp.toISOString();
|
|
128
|
-
const level = entry.level.toUpperCase().padEnd(5);
|
|
129
|
-
const context = entry.context ? `[${entry.context}] ` : '';
|
|
130
|
-
return `${timestamp} ${level} ${context}${entry.message}`;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
// File System Cache Adapter
|
|
2
|
-
import { CacheAdapter } from '../../../../../types/cache.js';
|
|
3
|
-
import { createFrameworkLogger } from '../../../../logger/index.js';
|
|
4
|
-
import crypto from 'crypto';
|
|
5
|
-
|
|
6
|
-
const logger = createFrameworkLogger('FileCacheAdapter');
|
|
7
|
-
|
|
8
|
-
export class FileCacheAdapter implements CacheAdapter {
|
|
9
|
-
private cacheDir: string;
|
|
10
|
-
|
|
11
|
-
constructor(options: { cacheDir?: string } = {}) {
|
|
12
|
-
this.cacheDir = options.cacheDir || './cache';
|
|
13
|
-
this.ensureCacheDir();
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
private async ensureCacheDir(): Promise<void> {
|
|
17
|
-
const fs = await import('fs/promises');
|
|
18
|
-
try {
|
|
19
|
-
await fs.mkdir(this.cacheDir, { recursive: true });
|
|
20
|
-
} catch (error) {
|
|
21
|
-
logger.error('Failed to create cache directory', 'FileCache', { error });
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
private getFilePath(key: string): string {
|
|
26
|
-
const hash = crypto.createHash('md5').update(key).digest('hex');
|
|
27
|
-
return `${this.cacheDir}/${hash}.json`;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async get(key: string): Promise<any> {
|
|
31
|
-
try {
|
|
32
|
-
const fs = await import('fs/promises');
|
|
33
|
-
const filePath = this.getFilePath(key);
|
|
34
|
-
const data = await fs.readFile(filePath, 'utf-8');
|
|
35
|
-
const parsed = JSON.parse(data);
|
|
36
|
-
|
|
37
|
-
if (Date.now() > parsed.expires) {
|
|
38
|
-
await this.del(key);
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return parsed.value;
|
|
43
|
-
} catch (error) {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
async set(key: string, value: any, ttl: number = 3600): Promise<void> {
|
|
49
|
-
try {
|
|
50
|
-
const fs = await import('fs/promises');
|
|
51
|
-
const filePath = this.getFilePath(key);
|
|
52
|
-
const expires = Date.now() + ttl * 1000;
|
|
53
|
-
const data = JSON.stringify({ value, expires });
|
|
54
|
-
|
|
55
|
-
await fs.writeFile(filePath, data);
|
|
56
|
-
logger.debug(`Cached item to file: ${key} (TTL: ${ttl}s)`, 'FileCache');
|
|
57
|
-
} catch (error) {
|
|
58
|
-
logger.error('File cache set error', 'FileCache', { key, error });
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
async del(key: string): Promise<void> {
|
|
63
|
-
try {
|
|
64
|
-
const fs = await import('fs/promises');
|
|
65
|
-
const filePath = this.getFilePath(key);
|
|
66
|
-
await fs.unlink(filePath);
|
|
67
|
-
logger.debug(`Deleted file cache item: ${key}`, 'FileCache');
|
|
68
|
-
} catch (error) {
|
|
69
|
-
// File might not exist, which is okay
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
async clear(): Promise<void> {
|
|
74
|
-
try {
|
|
75
|
-
const fs = await import('fs/promises');
|
|
76
|
-
const files = await fs.readdir(this.cacheDir);
|
|
77
|
-
|
|
78
|
-
await Promise.all(files.map(file => fs.unlink(`${this.cacheDir}/${file}`)));
|
|
79
|
-
|
|
80
|
-
logger.debug('Cleared all file cache items', 'FileCache');
|
|
81
|
-
} catch (error) {
|
|
82
|
-
logger.error('File cache clear error', 'FileCache', { error });
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
async exists(key: string): Promise<boolean> {
|
|
87
|
-
const value = await this.get(key);
|
|
88
|
-
return value !== null;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
async ttl(key: string): Promise<number> {
|
|
92
|
-
try {
|
|
93
|
-
const fs = await import('fs/promises');
|
|
94
|
-
const filePath = this.getFilePath(key);
|
|
95
|
-
const data = await fs.readFile(filePath, 'utf-8');
|
|
96
|
-
const parsed = JSON.parse(data);
|
|
97
|
-
|
|
98
|
-
const remaining = Math.floor((parsed.expires - Date.now()) / 1000);
|
|
99
|
-
return remaining > 0 ? remaining : -1;
|
|
100
|
-
} catch (error) {
|
|
101
|
-
return -1;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
// Cache Adapters
|
|
2
|
-
export { MemoryCacheAdapter } from './memory.js';
|
|
3
|
-
export { RedisCacheAdapter } from './redis.js';
|
|
4
|
-
export { FileCacheAdapter } from './file.js';
|
|
5
|
-
|
|
6
|
-
import { MemoryCacheAdapter } from './memory.js';
|
|
7
|
-
import { RedisCacheAdapter } from './redis.js';
|
|
8
|
-
import { FileCacheAdapter } from './file.js';
|
|
9
|
-
import { CacheAdapter } from '../../../../../types/cache.js';
|
|
10
|
-
|
|
11
|
-
// Adapter factory function for auto-loading
|
|
12
|
-
export function createCacheAdapter(type: string, options: any = {}): CacheAdapter {
|
|
13
|
-
switch (type.toLowerCase()) {
|
|
14
|
-
case 'memory':
|
|
15
|
-
return new MemoryCacheAdapter();
|
|
16
|
-
case 'redis':
|
|
17
|
-
return new RedisCacheAdapter(options);
|
|
18
|
-
case 'file':
|
|
19
|
-
return new FileCacheAdapter(options);
|
|
20
|
-
default:
|
|
21
|
-
throw new Error(`Unknown cache adapter type: ${type}`);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
// Memory Cache Adapter
|
|
2
|
-
import { CacheAdapter } from '../../../../../types/cache.js';
|
|
3
|
-
import { createFrameworkLogger } from '../../../../logger/index.js';
|
|
4
|
-
|
|
5
|
-
const logger = createFrameworkLogger('MemoryCacheAdapter');
|
|
6
|
-
|
|
7
|
-
export class MemoryCacheAdapter implements CacheAdapter {
|
|
8
|
-
private cache = new Map<string, { value: any; expires: number }>();
|
|
9
|
-
private timers = new Map<string, NodeJS.Timeout>();
|
|
10
|
-
|
|
11
|
-
async get(key: string): Promise<any> {
|
|
12
|
-
const item = this.cache.get(key);
|
|
13
|
-
if (!item) return null;
|
|
14
|
-
|
|
15
|
-
if (Date.now() > item.expires) {
|
|
16
|
-
await this.del(key);
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
return item.value;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async set(key: string, value: any, ttl: number = 3600): Promise<void> {
|
|
24
|
-
const expires = Date.now() + ttl * 1000;
|
|
25
|
-
|
|
26
|
-
// Clear existing timer
|
|
27
|
-
const existingTimer = this.timers.get(key);
|
|
28
|
-
if (existingTimer) {
|
|
29
|
-
clearTimeout(existingTimer);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Set new value
|
|
33
|
-
this.cache.set(key, { value, expires });
|
|
34
|
-
|
|
35
|
-
// Set expiration timer
|
|
36
|
-
const timer = setTimeout(() => {
|
|
37
|
-
this.cache.delete(key);
|
|
38
|
-
this.timers.delete(key);
|
|
39
|
-
}, ttl * 1000);
|
|
40
|
-
|
|
41
|
-
this.timers.set(key, timer);
|
|
42
|
-
logger.debug(`Cached item: ${key} (TTL: ${ttl}s)`, 'MemoryCache');
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
async del(key: string): Promise<void> {
|
|
46
|
-
this.cache.delete(key);
|
|
47
|
-
const timer = this.timers.get(key);
|
|
48
|
-
if (timer) {
|
|
49
|
-
clearTimeout(timer);
|
|
50
|
-
this.timers.delete(key);
|
|
51
|
-
}
|
|
52
|
-
logger.debug(`Deleted cache item: ${key}`, 'MemoryCache');
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
async clear(): Promise<void> {
|
|
56
|
-
this.cache.clear();
|
|
57
|
-
this.timers.forEach(timer => clearTimeout(timer));
|
|
58
|
-
this.timers.clear();
|
|
59
|
-
logger.debug('Cleared all cache items', 'MemoryCache');
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
async exists(key: string): Promise<boolean> {
|
|
63
|
-
return this.cache.has(key) && Date.now() <= this.cache.get(key)!.expires;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
async ttl(key: string): Promise<number> {
|
|
67
|
-
const item = this.cache.get(key);
|
|
68
|
-
if (!item) return -1;
|
|
69
|
-
|
|
70
|
-
const remaining = Math.floor((item.expires - Date.now()) / 1000);
|
|
71
|
-
return remaining > 0 ? remaining : -1;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
// Redis Cache Adapter
|
|
2
|
-
import { CacheAdapter } from '../../../../../types/cache.js';
|
|
3
|
-
import { createFrameworkLogger } from '../../../../logger/index.js';
|
|
4
|
-
import { resolveUserPackage } from '../../../../utilities/package-utils.js';
|
|
5
|
-
|
|
6
|
-
const logger = createFrameworkLogger('RedisCacheAdapter');
|
|
7
|
-
|
|
8
|
-
export class RedisCacheAdapter implements CacheAdapter {
|
|
9
|
-
private client: any;
|
|
10
|
-
|
|
11
|
-
constructor(
|
|
12
|
-
options: {
|
|
13
|
-
host?: string;
|
|
14
|
-
port?: number;
|
|
15
|
-
password?: string;
|
|
16
|
-
db?: number;
|
|
17
|
-
keyPrefix?: string;
|
|
18
|
-
} = {}
|
|
19
|
-
) {
|
|
20
|
-
this.initPromise = this.initialize(options);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
private initPromise: Promise<void>;
|
|
24
|
-
|
|
25
|
-
private async initialize(options: {
|
|
26
|
-
host?: string;
|
|
27
|
-
port?: number;
|
|
28
|
-
password?: string;
|
|
29
|
-
db?: number;
|
|
30
|
-
keyPrefix?: string;
|
|
31
|
-
}): Promise<void> {
|
|
32
|
-
try {
|
|
33
|
-
const redisPath = resolveUserPackage('redis');
|
|
34
|
-
const redis = await import(redisPath);
|
|
35
|
-
this.client = redis.default.createClient({
|
|
36
|
-
host: options.host || 'localhost',
|
|
37
|
-
port: options.port || 6379,
|
|
38
|
-
password: options.password,
|
|
39
|
-
db: options.db || 0,
|
|
40
|
-
key_prefix: options.keyPrefix || 'moro:cache:',
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
this.client.on('error', (err: Error) => {
|
|
44
|
-
logger.error('Redis cache error', 'RedisCache', { error: err.message });
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
logger.info('Redis cache adapter initialized', 'RedisCache');
|
|
48
|
-
} catch (error) {
|
|
49
|
-
logger.error('Redis not available, falling back to memory cache', 'RedisCache');
|
|
50
|
-
throw new Error('Redis package not installed. Run: npm install redis');
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
async get(key: string): Promise<any> {
|
|
55
|
-
try {
|
|
56
|
-
const value = await this.client.get(key);
|
|
57
|
-
return value ? JSON.parse(value) : null;
|
|
58
|
-
} catch (error) {
|
|
59
|
-
logger.error('Redis get error', 'RedisCache', { key, error });
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
async set(key: string, value: any, ttl: number = 3600): Promise<void> {
|
|
65
|
-
try {
|
|
66
|
-
const serialized = JSON.stringify(value);
|
|
67
|
-
if (ttl > 0) {
|
|
68
|
-
await this.client.setex(key, ttl, serialized);
|
|
69
|
-
} else {
|
|
70
|
-
await this.client.set(key, serialized);
|
|
71
|
-
}
|
|
72
|
-
logger.debug(`Cached item in Redis: ${key} (TTL: ${ttl}s)`, 'RedisCache');
|
|
73
|
-
} catch (error) {
|
|
74
|
-
logger.error('Redis set error', 'RedisCache', { key, error });
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
async del(key: string): Promise<void> {
|
|
79
|
-
try {
|
|
80
|
-
await this.client.del(key);
|
|
81
|
-
logger.debug(`Deleted Redis cache item: ${key}`, 'RedisCache');
|
|
82
|
-
} catch (error) {
|
|
83
|
-
logger.error('Redis del error', 'RedisCache', { key, error });
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
async clear(): Promise<void> {
|
|
88
|
-
try {
|
|
89
|
-
await this.client.flushdb();
|
|
90
|
-
logger.debug('Cleared all Redis cache items', 'RedisCache');
|
|
91
|
-
} catch (error) {
|
|
92
|
-
logger.error('Redis clear error', 'RedisCache', { error });
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
async exists(key: string): Promise<boolean> {
|
|
97
|
-
try {
|
|
98
|
-
const exists = await this.client.exists(key);
|
|
99
|
-
return exists === 1;
|
|
100
|
-
} catch (error) {
|
|
101
|
-
logger.error('Redis exists error', 'RedisCache', { key, error });
|
|
102
|
-
return false;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
async ttl(key: string): Promise<number> {
|
|
107
|
-
try {
|
|
108
|
-
return await this.client.ttl(key);
|
|
109
|
-
} catch (error) {
|
|
110
|
-
logger.error('Redis TTL error', 'RedisCache', { key, error });
|
|
111
|
-
return -1;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
// Azure CDN Adapter
|
|
2
|
-
import { CDNAdapter } from '../../../../../types/cdn.js';
|
|
3
|
-
import { createFrameworkLogger } from '../../../../logger/index.js';
|
|
4
|
-
|
|
5
|
-
const logger = createFrameworkLogger('AzureCDNAdapter');
|
|
6
|
-
|
|
7
|
-
export class AzureCDNAdapter implements CDNAdapter {
|
|
8
|
-
private endpoint: string;
|
|
9
|
-
private subscriptionId: string;
|
|
10
|
-
private resourceGroup: string;
|
|
11
|
-
private profileName: string;
|
|
12
|
-
private endpointName: string;
|
|
13
|
-
|
|
14
|
-
constructor(options: {
|
|
15
|
-
subscriptionId: string;
|
|
16
|
-
resourceGroup: string;
|
|
17
|
-
profileName: string;
|
|
18
|
-
endpointName: string;
|
|
19
|
-
endpoint: string;
|
|
20
|
-
clientId?: string;
|
|
21
|
-
clientSecret?: string;
|
|
22
|
-
tenantId?: string;
|
|
23
|
-
}) {
|
|
24
|
-
this.subscriptionId = options.subscriptionId;
|
|
25
|
-
this.resourceGroup = options.resourceGroup;
|
|
26
|
-
this.profileName = options.profileName;
|
|
27
|
-
this.endpointName = options.endpointName;
|
|
28
|
-
this.endpoint = options.endpoint;
|
|
29
|
-
|
|
30
|
-
logger.info('Azure CDN adapter initialized', 'AzureCDN');
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
async purge(urls: string[]): Promise<void> {
|
|
34
|
-
try {
|
|
35
|
-
const purgeUrl = `https://management.azure.com/subscriptions/${this.subscriptionId}/resourceGroups/${this.resourceGroup}/providers/Microsoft.Cdn/profiles/${this.profileName}/endpoints/${this.endpointName}/purge`;
|
|
36
|
-
|
|
37
|
-
const purgeData = {
|
|
38
|
-
contentPaths: urls.map(url => (url.startsWith('/') ? url : `/${url}`)),
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
logger.info(`Azure CDN cache purge requested: ${urls.length} URLs`, 'AzureCDN');
|
|
42
|
-
|
|
43
|
-
// Implementation would use Azure SDK or REST API calls
|
|
44
|
-
// const response = await fetch(purgeUrl, { method: 'POST', body: JSON.stringify(purgeData) });
|
|
45
|
-
} catch (error) {
|
|
46
|
-
logger.error('Azure CDN purge failed', 'AzureCDN', { error, urls });
|
|
47
|
-
throw error;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
async prefetch(urls: string[]): Promise<void> {
|
|
52
|
-
logger.debug(`Azure CDN prefetch requested for ${urls.length} URLs`, 'AzureCDN');
|
|
53
|
-
// Azure CDN prefetch implementation
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
setHeaders(response: any): void {
|
|
57
|
-
response.setHeader('Cache-Control', 'public, max-age=3600');
|
|
58
|
-
response.setHeader('Azure-CDN-Edge-Location', 'US-East');
|
|
59
|
-
}
|
|
60
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
// Cloudflare CDN Adapter
|
|
2
|
-
import { CDNAdapter } from '../../../../../types/cdn.js';
|
|
3
|
-
import { createFrameworkLogger } from '../../../../logger/index.js';
|
|
4
|
-
|
|
5
|
-
const logger = createFrameworkLogger('CloudflareCDNAdapter');
|
|
6
|
-
|
|
7
|
-
export class CloudflareCDNAdapter implements CDNAdapter {
|
|
8
|
-
private apiToken: string;
|
|
9
|
-
private zoneId: string;
|
|
10
|
-
|
|
11
|
-
constructor(options: { apiToken: string; zoneId: string }) {
|
|
12
|
-
this.apiToken = options.apiToken;
|
|
13
|
-
this.zoneId = options.zoneId;
|
|
14
|
-
|
|
15
|
-
logger.info('Cloudflare CDN adapter initialized', 'Cloudflare');
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
async purge(urls: string[]): Promise<void> {
|
|
19
|
-
try {
|
|
20
|
-
const response = await this.cfRequest('POST', `/zones/${this.zoneId}/purge_cache`, {
|
|
21
|
-
files: urls,
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
if (response.success) {
|
|
25
|
-
logger.info(`Cloudflare cache purged: ${urls.length} URLs`, 'Cloudflare');
|
|
26
|
-
} else {
|
|
27
|
-
throw new Error('Cloudflare purge failed');
|
|
28
|
-
}
|
|
29
|
-
} catch (error) {
|
|
30
|
-
logger.error('Cloudflare purge failed', 'Cloudflare', { error, urls });
|
|
31
|
-
throw error;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async prefetch(urls: string[]): Promise<void> {
|
|
36
|
-
try {
|
|
37
|
-
logger.debug(`Cloudflare prefetch requested for ${urls.length} URLs`, 'Cloudflare');
|
|
38
|
-
// Cloudflare doesn't have direct prefetch, but we can use preload links
|
|
39
|
-
for (const url of urls) {
|
|
40
|
-
// Implementation would depend on Cloudflare Workers or edge functions
|
|
41
|
-
}
|
|
42
|
-
} catch (error) {
|
|
43
|
-
logger.error('Cloudflare prefetch failed', 'Cloudflare', { error, urls });
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
async getStats(): Promise<any> {
|
|
48
|
-
try {
|
|
49
|
-
const response = await this.cfRequest('GET', `/zones/${this.zoneId}/analytics/dashboard`);
|
|
50
|
-
return response.result;
|
|
51
|
-
} catch (error) {
|
|
52
|
-
logger.error('Cloudflare stats failed', 'Cloudflare', { error });
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
setHeaders(response: any): void {
|
|
58
|
-
response.setHeader('Cache-Control', 'public, max-age=3600');
|
|
59
|
-
response.setHeader('CF-Cache-Status', 'DYNAMIC');
|
|
60
|
-
response.setHeader('CF-Ray', `${Math.random().toString(36)}-DFW`);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
private async cfRequest(method: string, endpoint: string, data?: any): Promise<any> {
|
|
64
|
-
const url = `https://api.cloudflare.com/client/v4${endpoint}`;
|
|
65
|
-
|
|
66
|
-
try {
|
|
67
|
-
// In a real implementation, you'd use fetch or axios
|
|
68
|
-
const response = {
|
|
69
|
-
success: true,
|
|
70
|
-
result: data || {},
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
return response;
|
|
74
|
-
} catch (error) {
|
|
75
|
-
logger.error('Cloudflare API request failed', 'Cloudflare', {
|
|
76
|
-
error,
|
|
77
|
-
method,
|
|
78
|
-
endpoint,
|
|
79
|
-
});
|
|
80
|
-
throw error;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
// AWS CloudFront CDN Adapter
|
|
2
|
-
import { CDNAdapter } from '../../../../../types/cdn.js';
|
|
3
|
-
import { createFrameworkLogger } from '../../../../logger/index.js';
|
|
4
|
-
import { resolveUserPackage } from '../../../../utilities/package-utils.js';
|
|
5
|
-
|
|
6
|
-
const logger = createFrameworkLogger('CloudFrontCDNAdapter');
|
|
7
|
-
|
|
8
|
-
export class CloudFrontCDNAdapter implements CDNAdapter {
|
|
9
|
-
private cloudfront: any;
|
|
10
|
-
private distributionId: string;
|
|
11
|
-
|
|
12
|
-
constructor(options: {
|
|
13
|
-
accessKeyId: string;
|
|
14
|
-
secretAccessKey: string;
|
|
15
|
-
region: string;
|
|
16
|
-
distributionId: string;
|
|
17
|
-
}) {
|
|
18
|
-
this.distributionId = options.distributionId;
|
|
19
|
-
this.initPromise = this.initialize(options);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
private initPromise: Promise<void>;
|
|
23
|
-
|
|
24
|
-
private async initialize(options: {
|
|
25
|
-
accessKeyId: string;
|
|
26
|
-
secretAccessKey: string;
|
|
27
|
-
region: string;
|
|
28
|
-
}): Promise<void> {
|
|
29
|
-
try {
|
|
30
|
-
const awsPath = resolveUserPackage('aws-sdk');
|
|
31
|
-
const AWS = await import(awsPath);
|
|
32
|
-
AWS.default.config.update({
|
|
33
|
-
accessKeyId: options.accessKeyId,
|
|
34
|
-
secretAccessKey: options.secretAccessKey,
|
|
35
|
-
region: options.region,
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
this.cloudfront = new AWS.default.CloudFront();
|
|
39
|
-
logger.info('CloudFront CDN adapter initialized', 'CloudFront');
|
|
40
|
-
} catch (error) {
|
|
41
|
-
logger.error('AWS SDK not available', 'CloudFront');
|
|
42
|
-
throw new Error('AWS SDK not installed. Run: npm install aws-sdk');
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async purge(urls: string[]): Promise<void> {
|
|
47
|
-
try {
|
|
48
|
-
const params = {
|
|
49
|
-
DistributionId: this.distributionId,
|
|
50
|
-
InvalidationBatch: {
|
|
51
|
-
CallerReference: `moro-${Date.now()}`,
|
|
52
|
-
Paths: {
|
|
53
|
-
Quantity: urls.length,
|
|
54
|
-
Items: urls.map(url => (url.startsWith('/') ? url : `/${url}`)),
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const result = await this.cloudfront.createInvalidation(params).promise();
|
|
60
|
-
logger.info(`CloudFront cache purged: ${urls.length} URLs`, 'CloudFront', {
|
|
61
|
-
invalidationId: result.Invalidation.Id,
|
|
62
|
-
});
|
|
63
|
-
} catch (error) {
|
|
64
|
-
logger.error('CloudFront purge failed', 'CloudFront', { error, urls });
|
|
65
|
-
throw error;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
async prefetch(urls: string[]): Promise<void> {
|
|
70
|
-
logger.debug(`CloudFront prefetch requested for ${urls.length} URLs`, 'CloudFront');
|
|
71
|
-
// CloudFront doesn't have direct prefetch, but we can simulate with requests
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
async getStats(): Promise<any> {
|
|
75
|
-
try {
|
|
76
|
-
const params = { Id: this.distributionId };
|
|
77
|
-
const distribution = await this.cloudfront.getDistribution(params).promise();
|
|
78
|
-
|
|
79
|
-
return {
|
|
80
|
-
status: distribution.Distribution.Status,
|
|
81
|
-
domainName: distribution.Distribution.DomainName,
|
|
82
|
-
enabled: distribution.Distribution.DistributionConfig.Enabled,
|
|
83
|
-
};
|
|
84
|
-
} catch (error) {
|
|
85
|
-
logger.error('CloudFront stats failed', 'CloudFront', { error });
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
setHeaders(response: any): void {
|
|
91
|
-
response.setHeader('Cache-Control', 'public, max-age=3600');
|
|
92
|
-
response.setHeader('CloudFront-Viewer-Country', 'US');
|
|
93
|
-
}
|
|
94
|
-
}
|