@morojs/moro 1.6.6 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -4
- package/dist/core/auth/morojs-adapter.js +33 -20
- package/dist/core/auth/morojs-adapter.js.map +1 -1
- package/dist/core/config/config-sources.js +71 -15
- package/dist/core/config/config-sources.js.map +1 -1
- package/dist/core/config/config-validator.js +201 -6
- package/dist/core/config/config-validator.js.map +1 -1
- package/dist/core/database/adapters/drizzle.js +5 -5
- package/dist/core/database/adapters/drizzle.js.map +1 -1
- package/dist/core/database/adapters/mongodb.js +5 -1
- package/dist/core/database/adapters/mongodb.js.map +1 -1
- package/dist/core/database/adapters/mysql.js +5 -1
- package/dist/core/database/adapters/mysql.js.map +1 -1
- package/dist/core/database/adapters/postgresql.js +1 -1
- package/dist/core/database/adapters/postgresql.js.map +1 -1
- package/dist/core/database/adapters/redis.js +2 -2
- package/dist/core/database/adapters/redis.js.map +1 -1
- package/dist/core/database/adapters/sqlite.js +5 -1
- package/dist/core/database/adapters/sqlite.js.map +1 -1
- package/dist/core/docs/index.js.map +1 -1
- package/dist/core/docs/openapi-generator.js +8 -9
- package/dist/core/docs/openapi-generator.js.map +1 -1
- package/dist/core/docs/simple-docs.js +2 -1
- package/dist/core/docs/simple-docs.js.map +1 -1
- package/dist/core/docs/swagger-ui.js +1 -0
- package/dist/core/docs/swagger-ui.js.map +1 -1
- package/dist/core/docs/zod-to-openapi.js +4 -0
- package/dist/core/docs/zod-to-openapi.js.map +1 -1
- package/dist/core/events/event-bus.d.ts +1 -1
- package/dist/core/events/event-bus.js +2 -1
- package/dist/core/events/event-bus.js.map +1 -1
- package/dist/core/framework.d.ts +5 -3
- package/dist/core/framework.js +28 -25
- package/dist/core/framework.js.map +1 -1
- package/dist/core/graphql/adapter.d.ts +73 -0
- package/dist/core/graphql/adapter.js +2 -0
- package/dist/core/graphql/adapter.js.map +1 -0
- package/dist/core/graphql/adapters/graphql-js-adapter.d.ts +26 -0
- package/dist/core/graphql/adapters/graphql-js-adapter.js +229 -0
- package/dist/core/graphql/adapters/graphql-js-adapter.js.map +1 -0
- package/dist/core/graphql/core.d.ts +60 -0
- package/dist/core/graphql/core.js +191 -0
- package/dist/core/graphql/core.js.map +1 -0
- package/dist/core/graphql/index.d.ts +4 -0
- package/dist/core/graphql/index.js +4 -0
- package/dist/core/graphql/index.js.map +1 -0
- package/dist/core/graphql/loader.d.ts +9 -0
- package/dist/core/graphql/loader.js +32 -0
- package/dist/core/graphql/loader.js.map +1 -0
- package/dist/core/graphql/types.d.ts +211 -0
- package/dist/core/graphql/types.js +2 -0
- package/dist/core/graphql/types.js.map +1 -0
- package/dist/core/grpc/adapters/grpc-js-adapter.d.ts +28 -0
- package/dist/core/grpc/adapters/grpc-js-adapter.js +449 -0
- package/dist/core/grpc/adapters/grpc-js-adapter.js.map +1 -0
- package/dist/core/grpc/adapters/index.d.ts +1 -0
- package/dist/core/grpc/adapters/index.js +6 -0
- package/dist/core/grpc/adapters/index.js.map +1 -0
- package/dist/core/grpc/grpc-adapter.d.ts +47 -0
- package/dist/core/grpc/grpc-adapter.js +4 -0
- package/dist/core/grpc/grpc-adapter.js.map +1 -0
- package/dist/core/grpc/grpc-manager.d.ts +59 -0
- package/dist/core/grpc/grpc-manager.js +218 -0
- package/dist/core/grpc/grpc-manager.js.map +1 -0
- package/dist/core/grpc/index.d.ts +7 -0
- package/dist/core/grpc/index.js +10 -0
- package/dist/core/grpc/index.js.map +1 -0
- package/dist/core/grpc/middleware/auth.d.ts +22 -0
- package/dist/core/grpc/middleware/auth.js +126 -0
- package/dist/core/grpc/middleware/auth.js.map +1 -0
- package/dist/core/grpc/middleware/logging.d.ts +19 -0
- package/dist/core/grpc/middleware/logging.js +57 -0
- package/dist/core/grpc/middleware/logging.js.map +1 -0
- package/dist/core/grpc/middleware/validation.d.ts +18 -0
- package/dist/core/grpc/middleware/validation.js +126 -0
- package/dist/core/grpc/middleware/validation.js.map +1 -0
- package/dist/core/grpc/types.d.ts +233 -0
- package/dist/core/grpc/types.js +36 -0
- package/dist/core/grpc/types.js.map +1 -0
- package/dist/core/http/http-server.d.ts +13 -84
- package/dist/core/http/http-server.js +216 -781
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/http2-server.d.ts +131 -0
- package/dist/core/http/http2-server.js +803 -0
- package/dist/core/http/http2-server.js.map +1 -0
- package/dist/core/http/index.d.ts +3 -1
- package/dist/core/http/index.js +2 -1
- package/dist/core/http/index.js.map +1 -1
- package/dist/core/http/utils/uws-worker-clustering.d.ts +28 -0
- package/dist/core/http/utils/uws-worker-clustering.js +313 -0
- package/dist/core/http/utils/uws-worker-clustering.js.map +1 -0
- package/dist/core/http/uws-http-server.d.ts +3 -1
- package/dist/core/http/uws-http-server.js +58 -34
- package/dist/core/http/uws-http-server.js.map +1 -1
- package/dist/core/jobs/cron-parser.d.ts +62 -0
- package/dist/core/jobs/cron-parser.js +239 -0
- package/dist/core/jobs/cron-parser.js.map +1 -0
- package/dist/core/jobs/index.d.ts +12 -0
- package/dist/core/jobs/index.js +9 -0
- package/dist/core/jobs/index.js.map +1 -0
- package/dist/core/jobs/job-executor.d.ts +134 -0
- package/dist/core/jobs/job-executor.js +418 -0
- package/dist/core/jobs/job-executor.js.map +1 -0
- package/dist/core/jobs/job-scheduler.d.ts +214 -0
- package/dist/core/jobs/job-scheduler.js +554 -0
- package/dist/core/jobs/job-scheduler.js.map +1 -0
- package/dist/core/jobs/job-state-manager.d.ts +158 -0
- package/dist/core/jobs/job-state-manager.js +444 -0
- package/dist/core/jobs/job-state-manager.js.map +1 -0
- package/dist/core/jobs/leader-election.d.ts +124 -0
- package/dist/core/jobs/leader-election.js +482 -0
- package/dist/core/jobs/leader-election.js.map +1 -0
- package/dist/core/jobs/types.d.ts +151 -0
- package/dist/core/jobs/types.js +4 -0
- package/dist/core/jobs/types.js.map +1 -0
- package/dist/core/jobs/utils.d.ts +95 -0
- package/dist/core/jobs/utils.js +258 -0
- package/dist/core/jobs/utils.js.map +1 -0
- package/dist/core/logger/filters.js +2 -0
- package/dist/core/logger/filters.js.map +1 -1
- package/dist/core/logger/logger.js +48 -21
- package/dist/core/logger/logger.js.map +1 -1
- package/dist/core/logger/outputs.js +11 -3
- package/dist/core/logger/outputs.js.map +1 -1
- package/dist/core/mail/adapters/console-adapter.d.ts +14 -0
- package/dist/core/mail/adapters/console-adapter.js +89 -0
- package/dist/core/mail/adapters/console-adapter.js.map +1 -0
- package/dist/core/mail/adapters/index.d.ts +5 -0
- package/dist/core/mail/adapters/index.js +8 -0
- package/dist/core/mail/adapters/index.js.map +1 -0
- package/dist/core/mail/adapters/nodemailer-adapter.d.ts +18 -0
- package/dist/core/mail/adapters/nodemailer-adapter.js +188 -0
- package/dist/core/mail/adapters/nodemailer-adapter.js.map +1 -0
- package/dist/core/mail/adapters/resend-adapter.d.ts +18 -0
- package/dist/core/mail/adapters/resend-adapter.js +169 -0
- package/dist/core/mail/adapters/resend-adapter.js.map +1 -0
- package/dist/core/mail/adapters/sendgrid-adapter.d.ts +19 -0
- package/dist/core/mail/adapters/sendgrid-adapter.js +186 -0
- package/dist/core/mail/adapters/sendgrid-adapter.js.map +1 -0
- package/dist/core/mail/adapters/ses-adapter.d.ts +18 -0
- package/dist/core/mail/adapters/ses-adapter.js +167 -0
- package/dist/core/mail/adapters/ses-adapter.js.map +1 -0
- package/dist/core/mail/index.d.ts +5 -0
- package/dist/core/mail/index.js +8 -0
- package/dist/core/mail/index.js.map +1 -0
- package/dist/core/mail/mail-adapter.d.ts +62 -0
- package/dist/core/mail/mail-adapter.js +83 -0
- package/dist/core/mail/mail-adapter.js.map +1 -0
- package/dist/core/mail/mail-manager.d.ts +63 -0
- package/dist/core/mail/mail-manager.js +302 -0
- package/dist/core/mail/mail-manager.js.map +1 -0
- package/dist/core/mail/template-engine.d.ts +43 -0
- package/dist/core/mail/template-engine.js +239 -0
- package/dist/core/mail/template-engine.js.map +1 -0
- package/dist/core/mail/types.d.ts +237 -0
- package/dist/core/mail/types.js +4 -0
- package/dist/core/mail/types.js.map +1 -0
- package/dist/core/middleware/built-in/auth/helpers.js +1 -1
- package/dist/core/middleware/built-in/auth/helpers.js.map +1 -1
- package/dist/core/middleware/built-in/auth/jwt-helpers.js +1 -1
- package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -1
- package/dist/core/middleware/built-in/auth/providers.js +1 -1
- package/dist/core/middleware/built-in/auth/providers.js.map +1 -1
- package/dist/core/middleware/built-in/body-size/core.d.ts +12 -0
- package/dist/core/middleware/built-in/body-size/core.js +52 -0
- package/dist/core/middleware/built-in/body-size/core.js.map +1 -0
- package/dist/core/middleware/built-in/body-size/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/body-size/hook.js +12 -0
- package/dist/core/middleware/built-in/body-size/hook.js.map +1 -0
- package/dist/core/middleware/built-in/body-size/index.d.ts +6 -0
- package/dist/core/middleware/built-in/body-size/index.js +7 -0
- package/dist/core/middleware/built-in/body-size/index.js.map +1 -0
- package/dist/core/middleware/built-in/body-size/middleware.d.ts +14 -0
- package/dist/core/middleware/built-in/body-size/middleware.js +22 -0
- package/dist/core/middleware/built-in/body-size/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js +3 -3
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/memory.js +1 -0
- package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/redis.js +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -1
- package/dist/core/middleware/built-in/cache/core.d.ts +20 -1
- package/dist/core/middleware/built-in/cache/core.js.map +1 -1
- package/dist/core/middleware/built-in/cache/hook.d.ts +38 -1
- package/dist/core/middleware/built-in/cache/hook.js +202 -16
- package/dist/core/middleware/built-in/cache/hook.js.map +1 -1
- package/dist/core/middleware/built-in/cache/index.js +1 -1
- package/dist/core/middleware/built-in/cache/index.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.d.ts +8 -0
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js +100 -7
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.d.ts +6 -0
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js +97 -13
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -1
- package/dist/core/middleware/built-in/compression/core.d.ts +16 -0
- package/dist/core/middleware/built-in/compression/core.js +75 -0
- package/dist/core/middleware/built-in/compression/core.js.map +1 -0
- package/dist/core/middleware/built-in/compression/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/compression/hook.js +14 -0
- package/dist/core/middleware/built-in/compression/hook.js.map +1 -0
- package/dist/core/middleware/built-in/compression/index.d.ts +6 -0
- package/dist/core/middleware/built-in/compression/index.js +7 -0
- package/dist/core/middleware/built-in/compression/index.js.map +1 -0
- package/dist/core/middleware/built-in/compression/middleware.d.ts +20 -0
- package/dist/core/middleware/built-in/compression/middleware.js +28 -0
- package/dist/core/middleware/built-in/compression/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/core.js +37 -9
- package/dist/core/middleware/built-in/cookie/core.js.map +1 -1
- package/dist/core/middleware/built-in/cookie/hook.d.ts +1 -1
- package/dist/core/middleware/built-in/cookie/hook.js +2 -2
- package/dist/core/middleware/built-in/cookie/hook.js.map +1 -1
- package/dist/core/middleware/built-in/csrf/core.js +1 -0
- package/dist/core/middleware/built-in/csrf/core.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/core.d.ts +11 -0
- package/dist/core/middleware/built-in/graphql/core.js +24 -0
- package/dist/core/middleware/built-in/graphql/core.js.map +1 -0
- package/dist/core/middleware/built-in/graphql/helpers.d.ts +69 -0
- package/dist/core/middleware/built-in/graphql/helpers.js +187 -0
- package/dist/core/middleware/built-in/graphql/helpers.js.map +1 -0
- package/dist/core/middleware/built-in/graphql/hook.d.ts +7 -0
- package/dist/core/middleware/built-in/graphql/hook.js +78 -0
- package/dist/core/middleware/built-in/graphql/hook.js.map +1 -0
- package/dist/core/middleware/built-in/graphql/index.d.ts +5 -0
- package/dist/core/middleware/built-in/graphql/index.js +5 -0
- package/dist/core/middleware/built-in/graphql/index.js.map +1 -0
- package/dist/core/middleware/built-in/graphql/middleware.d.ts +7 -0
- package/dist/core/middleware/built-in/graphql/middleware.js +54 -0
- package/dist/core/middleware/built-in/graphql/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/graphql/subscriptions.d.ts +20 -0
- package/dist/core/middleware/built-in/graphql/subscriptions.js +37 -0
- package/dist/core/middleware/built-in/graphql/subscriptions.js.map +1 -0
- package/dist/core/middleware/built-in/helmet/core.d.ts +19 -0
- package/dist/core/middleware/built-in/helmet/core.js +70 -0
- package/dist/core/middleware/built-in/helmet/core.js.map +1 -0
- package/dist/core/middleware/built-in/helmet/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/helmet/hook.js +12 -0
- package/dist/core/middleware/built-in/helmet/hook.js.map +1 -0
- package/dist/core/middleware/built-in/helmet/index.d.ts +6 -0
- package/dist/core/middleware/built-in/helmet/index.js +7 -0
- package/dist/core/middleware/built-in/helmet/index.js.map +1 -0
- package/dist/core/middleware/built-in/helmet/middleware.d.ts +22 -0
- package/dist/core/middleware/built-in/helmet/middleware.js +28 -0
- package/dist/core/middleware/built-in/helmet/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/http2/core.d.ts +35 -0
- package/dist/core/middleware/built-in/http2/core.js +128 -0
- package/dist/core/middleware/built-in/http2/core.js.map +1 -0
- package/dist/core/middleware/built-in/http2/hook.d.ts +5 -0
- package/dist/core/middleware/built-in/http2/hook.js +34 -0
- package/dist/core/middleware/built-in/http2/hook.js.map +1 -0
- package/dist/core/middleware/built-in/http2/index.d.ts +8 -0
- package/dist/core/middleware/built-in/http2/index.js +10 -0
- package/dist/core/middleware/built-in/http2/index.js.map +1 -0
- package/dist/core/middleware/built-in/http2/middleware.d.ts +20 -0
- package/dist/core/middleware/built-in/http2/middleware.js +31 -0
- package/dist/core/middleware/built-in/http2/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/index.d.ts +20 -1
- package/dist/core/middleware/built-in/index.js +31 -0
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/range/core.d.ts +16 -0
- package/dist/core/middleware/built-in/range/core.js +112 -0
- package/dist/core/middleware/built-in/range/core.js.map +1 -0
- package/dist/core/middleware/built-in/range/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/range/hook.js +12 -0
- package/dist/core/middleware/built-in/range/hook.js.map +1 -0
- package/dist/core/middleware/built-in/range/index.d.ts +6 -0
- package/dist/core/middleware/built-in/range/index.js +7 -0
- package/dist/core/middleware/built-in/range/index.js.map +1 -0
- package/dist/core/middleware/built-in/range/middleware.d.ts +21 -0
- package/dist/core/middleware/built-in/range/middleware.js +27 -0
- package/dist/core/middleware/built-in/range/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/session/core.js +14 -1
- package/dist/core/middleware/built-in/session/core.js.map +1 -1
- package/dist/core/middleware/built-in/static/core.d.ts +20 -0
- package/dist/core/middleware/built-in/static/core.js +143 -0
- package/dist/core/middleware/built-in/static/core.js.map +1 -0
- package/dist/core/middleware/built-in/static/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/static/hook.js +12 -0
- package/dist/core/middleware/built-in/static/hook.js.map +1 -0
- package/dist/core/middleware/built-in/static/index.d.ts +6 -0
- package/dist/core/middleware/built-in/static/index.js +7 -0
- package/dist/core/middleware/built-in/static/index.js.map +1 -0
- package/dist/core/middleware/built-in/static/middleware.d.ts +18 -0
- package/dist/core/middleware/built-in/static/middleware.js +26 -0
- package/dist/core/middleware/built-in/static/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/template/core.d.ts +19 -0
- package/dist/core/middleware/built-in/template/core.js +108 -0
- package/dist/core/middleware/built-in/template/core.js.map +1 -0
- package/dist/core/middleware/built-in/template/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/template/hook.js +12 -0
- package/dist/core/middleware/built-in/template/hook.js.map +1 -0
- package/dist/core/middleware/built-in/template/index.d.ts +6 -0
- package/dist/core/middleware/built-in/template/index.js +7 -0
- package/dist/core/middleware/built-in/template/index.js.map +1 -0
- package/dist/core/middleware/built-in/template/middleware.d.ts +21 -0
- package/dist/core/middleware/built-in/template/middleware.js +27 -0
- package/dist/core/middleware/built-in/template/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/upload/core.d.ts +29 -0
- package/dist/core/middleware/built-in/upload/core.js +66 -0
- package/dist/core/middleware/built-in/upload/core.js.map +1 -0
- package/dist/core/middleware/built-in/upload/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/upload/hook.js +25 -0
- package/dist/core/middleware/built-in/upload/hook.js.map +1 -0
- package/dist/core/middleware/built-in/upload/index.d.ts +6 -0
- package/dist/core/middleware/built-in/upload/index.js +7 -0
- package/dist/core/middleware/built-in/upload/index.js.map +1 -0
- package/dist/core/middleware/built-in/upload/middleware.d.ts +18 -0
- package/dist/core/middleware/built-in/upload/middleware.js +41 -0
- package/dist/core/middleware/built-in/upload/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/validation/core.js +4 -2
- package/dist/core/middleware/built-in/validation/core.js.map +1 -1
- package/dist/core/middleware/built-in/validation/middleware.js +2 -1
- package/dist/core/middleware/built-in/validation/middleware.js.map +1 -1
- package/dist/core/middleware/index.js +1 -0
- package/dist/core/middleware/index.js.map +1 -1
- package/dist/core/modules/auto-discovery.js +5 -4
- package/dist/core/modules/auto-discovery.js.map +1 -1
- package/dist/core/modules/modules.js.map +1 -1
- package/dist/core/networking/adapters/socketio-adapter.js +1 -1
- package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
- package/dist/core/networking/adapters/uws-adapter.js +61 -8
- package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
- package/dist/core/networking/adapters/ws-adapter.js +61 -19
- package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
- package/dist/core/networking/websocket-manager.js +2 -0
- package/dist/core/networking/websocket-manager.js.map +1 -1
- package/dist/core/pooling/object-pool-manager.js +12 -1
- package/dist/core/pooling/object-pool-manager.js.map +1 -1
- package/dist/core/queue/adapters/bull-adapter.d.ts +86 -0
- package/dist/core/queue/adapters/bull-adapter.js +330 -0
- package/dist/core/queue/adapters/bull-adapter.js.map +1 -0
- package/dist/core/queue/adapters/index.d.ts +9 -0
- package/dist/core/queue/adapters/index.js +10 -0
- package/dist/core/queue/adapters/index.js.map +1 -0
- package/dist/core/queue/adapters/kafka-adapter.d.ts +86 -0
- package/dist/core/queue/adapters/kafka-adapter.js +462 -0
- package/dist/core/queue/adapters/kafka-adapter.js.map +1 -0
- package/dist/core/queue/adapters/memory-adapter.d.ts +87 -0
- package/dist/core/queue/adapters/memory-adapter.js +415 -0
- package/dist/core/queue/adapters/memory-adapter.js.map +1 -0
- package/dist/core/queue/adapters/rabbitmq-adapter.d.ts +86 -0
- package/dist/core/queue/adapters/rabbitmq-adapter.js +436 -0
- package/dist/core/queue/adapters/rabbitmq-adapter.js.map +1 -0
- package/dist/core/queue/adapters/sqs-adapter.d.ts +102 -0
- package/dist/core/queue/adapters/sqs-adapter.js +522 -0
- package/dist/core/queue/adapters/sqs-adapter.js.map +1 -0
- package/dist/core/queue/index.d.ts +11 -0
- package/dist/core/queue/index.js +14 -0
- package/dist/core/queue/index.js.map +1 -0
- package/dist/core/queue/middleware/index.d.ts +7 -0
- package/dist/core/queue/middleware/index.js +8 -0
- package/dist/core/queue/middleware/index.js.map +1 -0
- package/dist/core/queue/middleware/monitoring.d.ts +84 -0
- package/dist/core/queue/middleware/monitoring.js +145 -0
- package/dist/core/queue/middleware/monitoring.js.map +1 -0
- package/dist/core/queue/middleware/priority.d.ts +61 -0
- package/dist/core/queue/middleware/priority.js +90 -0
- package/dist/core/queue/middleware/priority.js.map +1 -0
- package/dist/core/queue/middleware/rate-limit.d.ts +34 -0
- package/dist/core/queue/middleware/rate-limit.js +109 -0
- package/dist/core/queue/middleware/rate-limit.js.map +1 -0
- package/dist/core/queue/queue-adapter.d.ts +73 -0
- package/dist/core/queue/queue-adapter.js +20 -0
- package/dist/core/queue/queue-adapter.js.map +1 -0
- package/dist/core/queue/queue-manager.d.ts +92 -0
- package/dist/core/queue/queue-manager.js +327 -0
- package/dist/core/queue/queue-manager.js.map +1 -0
- package/dist/core/queue/types.d.ts +205 -0
- package/dist/core/queue/types.js +6 -0
- package/dist/core/queue/types.js.map +1 -0
- package/dist/core/routing/app-integration.d.ts +3 -3
- package/dist/core/routing/app-integration.js +1 -1
- package/dist/core/routing/app-integration.js.map +1 -1
- package/dist/core/routing/index.d.ts +1 -1
- package/dist/core/routing/index.js +42 -11
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/routing/radix-tree.d.ts +48 -0
- package/dist/core/routing/radix-tree.js +211 -0
- package/dist/core/routing/radix-tree.js.map +1 -0
- package/dist/core/routing/router.d.ts +10 -9
- package/dist/core/routing/router.js +3 -1
- package/dist/core/routing/router.js.map +1 -1
- package/dist/core/routing/unified-router.d.ts +18 -12
- package/dist/core/routing/unified-router.js +220 -163
- package/dist/core/routing/unified-router.js.map +1 -1
- package/dist/core/runtime/aws-lambda-adapter.js +21 -10
- package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
- package/dist/core/runtime/base-adapter.js +18 -8
- package/dist/core/runtime/base-adapter.js.map +1 -1
- package/dist/core/runtime/cloudflare-workers-adapter.js +36 -13
- package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
- package/dist/core/runtime/node-adapter.d.ts +1 -1
- package/dist/core/runtime/node-adapter.js +7 -4
- package/dist/core/runtime/node-adapter.js.map +1 -1
- package/dist/core/runtime/vercel-edge-adapter.js +17 -6
- package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
- package/dist/core/utilities/circuit-breaker.d.ts +9 -2
- package/dist/core/utilities/circuit-breaker.js +32 -3
- package/dist/core/utilities/circuit-breaker.js.map +1 -1
- package/dist/core/utilities/container.js +9 -1
- package/dist/core/utilities/container.js.map +1 -1
- package/dist/core/utilities/hooks.js +4 -0
- package/dist/core/utilities/hooks.js.map +1 -1
- package/dist/core/validation/index.js +6 -1
- package/dist/core/validation/index.js.map +1 -1
- package/dist/core/workers/facade.d.ts +74 -0
- package/dist/core/workers/facade.js +98 -0
- package/dist/core/workers/facade.js.map +1 -0
- package/dist/core/workers/index.d.ts +2 -0
- package/dist/core/workers/index.js +6 -0
- package/dist/core/workers/index.js.map +1 -0
- package/dist/core/workers/worker-manager.d.ts +124 -0
- package/dist/core/workers/worker-manager.js +299 -0
- package/dist/core/workers/worker-manager.js.map +1 -0
- package/dist/core/workers/worker.d.ts +1 -0
- package/dist/core/workers/worker.js +225 -0
- package/dist/core/workers/worker.js.map +1 -0
- package/dist/index.d.ts +14 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +486 -1
- package/dist/moro.js +1194 -28
- package/dist/moro.js.map +1 -1
- package/dist/types/cache.d.ts +4 -0
- package/dist/types/config.d.ts +70 -0
- package/dist/types/core.d.ts +19 -1
- package/dist/types/events.d.ts +1 -1
- package/dist/types/events.js +1 -0
- package/dist/types/events.js.map +1 -1
- package/dist/types/module.d.ts +2 -2
- package/package.json +110 -16
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { GraphQLSchema } from 'graphql';
|
|
2
|
+
/**
|
|
3
|
+
* Check if Pothos is available
|
|
4
|
+
*/
|
|
5
|
+
export declare function isPothosAvailable(): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Create Pothos schema builder instance
|
|
8
|
+
* Users should use this to create their schema builder
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { createPothosBuilder } from '@morojs/moro';
|
|
13
|
+
*
|
|
14
|
+
* const builder = createPothosBuilder({
|
|
15
|
+
* plugins: ['relay', 'errors'],
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* builder.queryType({
|
|
19
|
+
* fields: (t) => ({
|
|
20
|
+
* hello: t.string({
|
|
21
|
+
* resolve: () => 'Hello World!'
|
|
22
|
+
* })
|
|
23
|
+
* })
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* const schema = builder.toSchema();
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function createPothosBuilder(options?: any): Promise<any>;
|
|
30
|
+
/**
|
|
31
|
+
* Helper to check if value is a Pothos schema
|
|
32
|
+
*/
|
|
33
|
+
export declare function isPothosSchema(value: any): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Extract GraphQL schema from Pothos builder
|
|
36
|
+
*/
|
|
37
|
+
export declare function pothosToSchema(pothosBuilder: any): GraphQLSchema;
|
|
38
|
+
/**
|
|
39
|
+
* GraphQL query complexity calculator
|
|
40
|
+
* Helps prevent expensive queries from overloading the server
|
|
41
|
+
*
|
|
42
|
+
* Note: This is a basic implementation. For production use, consider
|
|
43
|
+
* installing graphql-query-complexity package for full features.
|
|
44
|
+
*/
|
|
45
|
+
export declare function createComplexityPlugin(options?: {
|
|
46
|
+
maximumComplexity: number;
|
|
47
|
+
onComplete?: (complexity: number) => void;
|
|
48
|
+
estimators?: any[];
|
|
49
|
+
}): any;
|
|
50
|
+
/**
|
|
51
|
+
* GraphQL depth limit validator
|
|
52
|
+
* Prevents deeply nested queries
|
|
53
|
+
*
|
|
54
|
+
* Note: This is a basic implementation. For production use, consider
|
|
55
|
+
* installing graphql-depth-limit package for full features.
|
|
56
|
+
*/
|
|
57
|
+
export declare function createDepthLimitPlugin(options?: {
|
|
58
|
+
maxDepth: number;
|
|
59
|
+
callback?: (depth: number) => void;
|
|
60
|
+
}): any;
|
|
61
|
+
/**
|
|
62
|
+
* DataLoader helper for batching
|
|
63
|
+
* Prevents N+1 query problems
|
|
64
|
+
*/
|
|
65
|
+
export declare function createDataLoader<K, V>(batchFn: (keys: readonly K[]) => Promise<(V | Error)[]>, options?: {
|
|
66
|
+
batch?: boolean;
|
|
67
|
+
maxBatchSize?: number;
|
|
68
|
+
cache?: boolean;
|
|
69
|
+
}): Promise<any>;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
// GraphQL Helpers - Pothos integration and utilities
|
|
2
|
+
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
3
|
+
import { isPackageAvailable } from '../../../utilities/package-utils.js';
|
|
4
|
+
const logger = createFrameworkLogger('GraphQLHelpers');
|
|
5
|
+
/**
|
|
6
|
+
* Check if Pothos is available
|
|
7
|
+
*/
|
|
8
|
+
export function isPothosAvailable() {
|
|
9
|
+
return isPackageAvailable('@pothos/core');
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Create Pothos schema builder instance
|
|
13
|
+
* Users should use this to create their schema builder
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { createPothosBuilder } from '@morojs/moro';
|
|
18
|
+
*
|
|
19
|
+
* const builder = createPothosBuilder({
|
|
20
|
+
* plugins: ['relay', 'errors'],
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* builder.queryType({
|
|
24
|
+
* fields: (t) => ({
|
|
25
|
+
* hello: t.string({
|
|
26
|
+
* resolve: () => 'Hello World!'
|
|
27
|
+
* })
|
|
28
|
+
* })
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* const schema = builder.toSchema();
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export async function createPothosBuilder(options = {}) {
|
|
35
|
+
if (!isPothosAvailable()) {
|
|
36
|
+
throw new Error('Pothos support requires @pothos/core to be installed.\n' +
|
|
37
|
+
'Install it with: npm install @pothos/core\n' +
|
|
38
|
+
'For TypeScript-first GraphQL, also consider: @pothos/plugin-relay @pothos/plugin-errors');
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
// Use dynamic import for ESM compatibility
|
|
42
|
+
const pothosModule = await import('@pothos/core');
|
|
43
|
+
const SchemaBuilder = pothosModule.default;
|
|
44
|
+
logger.info('Creating Pothos schema builder', 'Pothos', { plugins: options.plugins || [] });
|
|
45
|
+
return new SchemaBuilder(options);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
logger.error('Failed to create Pothos schema builder', 'Pothos', { error });
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Helper to check if value is a Pothos schema
|
|
54
|
+
*/
|
|
55
|
+
export function isPothosSchema(value) {
|
|
56
|
+
return value && typeof value === 'object' && typeof value.toSchema === 'function';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Extract GraphQL schema from Pothos builder
|
|
60
|
+
*/
|
|
61
|
+
export function pothosToSchema(pothosBuilder) {
|
|
62
|
+
if (!pothosBuilder) {
|
|
63
|
+
throw new Error('Pothos builder is required');
|
|
64
|
+
}
|
|
65
|
+
if (typeof pothosBuilder.toSchema !== 'function') {
|
|
66
|
+
throw new Error('Invalid Pothos builder - missing toSchema() method');
|
|
67
|
+
}
|
|
68
|
+
return pothosBuilder.toSchema();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* GraphQL query complexity calculator
|
|
72
|
+
* Helps prevent expensive queries from overloading the server
|
|
73
|
+
*
|
|
74
|
+
* Note: This is a basic implementation. For production use, consider
|
|
75
|
+
* installing graphql-query-complexity package for full features.
|
|
76
|
+
*/
|
|
77
|
+
export function createComplexityPlugin(options = { maximumComplexity: 1000 }) {
|
|
78
|
+
logger.info('Creating query complexity plugin', 'Complexity', {
|
|
79
|
+
maxComplexity: options.maximumComplexity,
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
name: 'complexity',
|
|
83
|
+
requestDidStart: () => ({
|
|
84
|
+
didResolveOperation({ document, operationName }) {
|
|
85
|
+
// Basic complexity check - counts fields in query
|
|
86
|
+
let complexity = 0;
|
|
87
|
+
const visit = (node) => {
|
|
88
|
+
if (node.kind === 'Field') {
|
|
89
|
+
complexity++;
|
|
90
|
+
}
|
|
91
|
+
if (node.selectionSet) {
|
|
92
|
+
node.selectionSet.selections.forEach(visit);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
if (document.definitions) {
|
|
96
|
+
document.definitions.forEach((def) => {
|
|
97
|
+
if (def.selectionSet) {
|
|
98
|
+
def.selectionSet.selections.forEach(visit);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
logger.debug('Query complexity calculated', 'Complexity', {
|
|
103
|
+
operationName,
|
|
104
|
+
complexity,
|
|
105
|
+
maxComplexity: options.maximumComplexity,
|
|
106
|
+
});
|
|
107
|
+
if (options.onComplete) {
|
|
108
|
+
options.onComplete(complexity);
|
|
109
|
+
}
|
|
110
|
+
if (complexity > options.maximumComplexity) {
|
|
111
|
+
throw new Error(`Query complexity of ${complexity} exceeds maximum allowed complexity of ${options.maximumComplexity}`);
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* GraphQL depth limit validator
|
|
119
|
+
* Prevents deeply nested queries
|
|
120
|
+
*
|
|
121
|
+
* Note: This is a basic implementation. For production use, consider
|
|
122
|
+
* installing graphql-depth-limit package for full features.
|
|
123
|
+
*/
|
|
124
|
+
export function createDepthLimitPlugin(options = { maxDepth: 10 }) {
|
|
125
|
+
logger.info('Creating depth limit plugin', 'DepthLimit', {
|
|
126
|
+
maxDepth: options.maxDepth,
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
name: 'depthLimit',
|
|
130
|
+
requestDidStart: () => ({
|
|
131
|
+
didResolveOperation({ document, operationName }) {
|
|
132
|
+
// Basic depth check - traverses query tree
|
|
133
|
+
let maxDepthFound = 0;
|
|
134
|
+
const calculateDepth = (node, currentDepth = 0) => {
|
|
135
|
+
if (!node)
|
|
136
|
+
return currentDepth;
|
|
137
|
+
let depth = currentDepth;
|
|
138
|
+
if (node.kind === 'Field') {
|
|
139
|
+
depth = currentDepth + 1;
|
|
140
|
+
maxDepthFound = Math.max(maxDepthFound, depth);
|
|
141
|
+
}
|
|
142
|
+
if (node.selectionSet?.selections) {
|
|
143
|
+
for (const selection of node.selectionSet.selections) {
|
|
144
|
+
calculateDepth(selection, depth);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return depth;
|
|
148
|
+
};
|
|
149
|
+
if (document.definitions) {
|
|
150
|
+
document.definitions.forEach((def) => {
|
|
151
|
+
if (def.selectionSet) {
|
|
152
|
+
def.selectionSet.selections.forEach((selection) => {
|
|
153
|
+
calculateDepth(selection, 0);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
logger.debug('Query depth calculated', 'DepthLimit', {
|
|
159
|
+
operationName,
|
|
160
|
+
depth: maxDepthFound,
|
|
161
|
+
maxDepth: options.maxDepth,
|
|
162
|
+
});
|
|
163
|
+
if (options.callback) {
|
|
164
|
+
options.callback(maxDepthFound);
|
|
165
|
+
}
|
|
166
|
+
if (maxDepthFound > options.maxDepth) {
|
|
167
|
+
throw new Error(`Query depth of ${maxDepthFound} exceeds maximum allowed depth of ${options.maxDepth}`);
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
}),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* DataLoader helper for batching
|
|
175
|
+
* Prevents N+1 query problems
|
|
176
|
+
*/
|
|
177
|
+
export async function createDataLoader(batchFn, options = {}) {
|
|
178
|
+
if (!isPackageAvailable('dataloader')) {
|
|
179
|
+
throw new Error('DataLoader support requires dataloader package.\n' +
|
|
180
|
+
'Install it with: npm install dataloader');
|
|
181
|
+
}
|
|
182
|
+
// Use dynamic import for ESM compatibility
|
|
183
|
+
const DataLoaderModule = await import('dataloader');
|
|
184
|
+
const DataLoader = DataLoaderModule.default;
|
|
185
|
+
return new DataLoader(batchFn, options);
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/graphql/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MiddlewareInterface } from '../../index.js';
|
|
2
|
+
import type { GraphQLOptions } from '../../../graphql/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* GraphQL Hook Middleware
|
|
5
|
+
* Provides hook-based GraphQL integration with MoroJS middleware system
|
|
6
|
+
*/
|
|
7
|
+
export declare const graphql: (options: GraphQLOptions) => MiddlewareInterface;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// GraphQL Middleware - Hook-based integration
|
|
2
|
+
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
3
|
+
import { GraphQLCore } from '../../../graphql/core.js';
|
|
4
|
+
const logger = createFrameworkLogger('GraphQLHook');
|
|
5
|
+
/**
|
|
6
|
+
* GraphQL Hook Middleware
|
|
7
|
+
* Provides hook-based GraphQL integration with MoroJS middleware system
|
|
8
|
+
*/
|
|
9
|
+
export const graphql = (options) => ({
|
|
10
|
+
name: 'graphql',
|
|
11
|
+
version: '1.0.0',
|
|
12
|
+
metadata: {
|
|
13
|
+
name: 'graphql',
|
|
14
|
+
version: '1.0.0',
|
|
15
|
+
description: 'GraphQL middleware with Pothos support and GraphQL-JIT performance optimization',
|
|
16
|
+
author: 'MoroJS Team',
|
|
17
|
+
dependencies: ['graphql'],
|
|
18
|
+
tags: ['graphql', 'api', 'pothos', 'performance'],
|
|
19
|
+
},
|
|
20
|
+
install: async (hooks, middlewareOptions = {}) => {
|
|
21
|
+
logger.debug('Installing GraphQL middleware', 'Installation', { options: middlewareOptions });
|
|
22
|
+
const config = { ...options, ...middlewareOptions };
|
|
23
|
+
const graphqlCore = new GraphQLCore(config);
|
|
24
|
+
// Initialize GraphQL
|
|
25
|
+
await graphqlCore.initialize();
|
|
26
|
+
const graphqlPath = config.path || '/graphql';
|
|
27
|
+
const playgroundPath = config.playgroundPath || `${graphqlPath}/playground`;
|
|
28
|
+
const enablePlayground = config.enablePlayground !== false && process.env.NODE_ENV !== 'production';
|
|
29
|
+
logger.info('GraphQL endpoint configured', 'Configuration', {
|
|
30
|
+
graphqlPath,
|
|
31
|
+
playgroundPath: enablePlayground ? playgroundPath : 'disabled',
|
|
32
|
+
jit: graphqlCore.getStats()?.jit?.enabled || false,
|
|
33
|
+
});
|
|
34
|
+
// Register hooks for request processing
|
|
35
|
+
hooks.before('request', async (context) => {
|
|
36
|
+
const req = context.request;
|
|
37
|
+
const res = context.response;
|
|
38
|
+
// Handle GraphQL Playground
|
|
39
|
+
if (enablePlayground && req.path === playgroundPath && req.method === 'GET') {
|
|
40
|
+
logger.debug('Serving GraphQL Playground', 'Playground');
|
|
41
|
+
res.setHeader('Content-Type', 'text/html');
|
|
42
|
+
res.status(200).send(graphqlCore.getPlaygroundHTML());
|
|
43
|
+
return; // Stop processing
|
|
44
|
+
}
|
|
45
|
+
// Handle GraphQL endpoint
|
|
46
|
+
if (req.path === graphqlPath) {
|
|
47
|
+
logger.debug('Processing GraphQL request', 'Request', {
|
|
48
|
+
method: req.method,
|
|
49
|
+
operationName: req.body?.operationName,
|
|
50
|
+
});
|
|
51
|
+
// Handle OPTIONS for CORS
|
|
52
|
+
if (req.method === 'OPTIONS') {
|
|
53
|
+
res.status(200).end();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Only allow GET and POST
|
|
57
|
+
if (req.method !== 'GET' && req.method !== 'POST') {
|
|
58
|
+
res.status(405).json({
|
|
59
|
+
errors: [{ message: 'GraphQL only supports GET and POST requests' }],
|
|
60
|
+
});
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Execute GraphQL request
|
|
64
|
+
await graphqlCore.handleRequest(req, res);
|
|
65
|
+
return; // Stop processing
|
|
66
|
+
}
|
|
67
|
+
// Not a GraphQL request, continue
|
|
68
|
+
});
|
|
69
|
+
// Expose GraphQL stats via context
|
|
70
|
+
hooks.after('request', async (context) => {
|
|
71
|
+
const req = context.request;
|
|
72
|
+
if (req.path === graphqlPath && req.graphqlMetrics) {
|
|
73
|
+
logger.debug('GraphQL request completed', 'Metrics', req.graphqlMetrics);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/graphql/hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { graphql } from './hook.js';
|
|
2
|
+
export { createGraphQLMiddleware } from './middleware.js';
|
|
3
|
+
export { GraphQLCore, getSharedGraphQLCore, resetSharedGraphQLCore } from './core.js';
|
|
4
|
+
export type * from '../../../graphql/types.js';
|
|
5
|
+
export type { GraphQLSchema, GraphQLObjectType, GraphQLFieldResolver, GraphQLResolveInfo, GraphQLError, } from 'graphql';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/graphql/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StandardMiddleware } from '../../../../types/hooks.js';
|
|
2
|
+
import type { GraphQLOptions } from '../../../graphql/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create GraphQL standard middleware
|
|
5
|
+
* For use in standard middleware chains (req, res, next)
|
|
6
|
+
*/
|
|
7
|
+
export declare function createGraphQLMiddleware(options: GraphQLOptions): StandardMiddleware;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { GraphQLCore } from '../../../graphql/core.js';
|
|
2
|
+
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
3
|
+
const logger = createFrameworkLogger('GraphQLMiddleware');
|
|
4
|
+
/**
|
|
5
|
+
* Create GraphQL standard middleware
|
|
6
|
+
* For use in standard middleware chains (req, res, next)
|
|
7
|
+
*/
|
|
8
|
+
export function createGraphQLMiddleware(options) {
|
|
9
|
+
const graphqlCore = new GraphQLCore(options);
|
|
10
|
+
let initialized = false;
|
|
11
|
+
const graphqlPath = options.path || '/graphql';
|
|
12
|
+
const playgroundPath = options.playgroundPath || `${graphqlPath}/playground`;
|
|
13
|
+
const enablePlayground = options.enablePlayground !== false && process.env.NODE_ENV !== 'production';
|
|
14
|
+
return async (req, res, next) => {
|
|
15
|
+
// Initialize on first request
|
|
16
|
+
if (!initialized) {
|
|
17
|
+
await graphqlCore.initialize();
|
|
18
|
+
initialized = true;
|
|
19
|
+
logger.info('GraphQL middleware initialized', 'Initialization', {
|
|
20
|
+
graphqlPath,
|
|
21
|
+
playgroundPath: enablePlayground ? playgroundPath : 'disabled',
|
|
22
|
+
jit: graphqlCore.getStats()?.jit?.enabled || false,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
const reqAny = req;
|
|
26
|
+
// Handle GraphQL Playground
|
|
27
|
+
if (enablePlayground && reqAny.path === playgroundPath && req.method === 'GET') {
|
|
28
|
+
res.setHeader('Content-Type', 'text/html');
|
|
29
|
+
res.status(200).send(graphqlCore.getPlaygroundHTML());
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Handle GraphQL endpoint
|
|
33
|
+
if (reqAny.path === graphqlPath) {
|
|
34
|
+
// Handle OPTIONS for CORS
|
|
35
|
+
if (req.method === 'OPTIONS') {
|
|
36
|
+
res.status(200).end();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// Only allow GET and POST
|
|
40
|
+
if (req.method !== 'GET' && req.method !== 'POST') {
|
|
41
|
+
res.status(405).json({
|
|
42
|
+
errors: [{ message: 'GraphQL only supports GET and POST requests' }],
|
|
43
|
+
});
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Execute GraphQL request
|
|
47
|
+
await graphqlCore.handleRequest(req, res);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Not a GraphQL request, continue
|
|
51
|
+
await next();
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/graphql/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,MAAM,MAAM,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;AAE1D;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAuB;IAC7D,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC;IAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,GAAG,WAAW,aAAa,CAAC;IAC7E,MAAM,gBAAgB,GACpB,OAAO,CAAC,gBAAgB,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAE9E,OAAO,KAAK,EAAE,GAAgB,EAAE,GAAiB,EAAE,IAAyB,EAAE,EAAE;QAC9E,8BAA8B;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,WAAW,CAAC,UAAU,EAAE,CAAC;YAC/B,WAAW,GAAG,IAAI,CAAC;YAEnB,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,gBAAgB,EAAE;gBAC9D,WAAW;gBACX,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU;gBAC9D,GAAG,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,IAAI,KAAK;aACnD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,GAAU,CAAC;QAE1B,4BAA4B;QAC5B,IAAI,gBAAgB,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC9E,GAAW,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YACnD,GAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,0BAA0B;YAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC5B,GAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YAED,0BAA0B;YAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACjD,GAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC5B,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC;iBACrE,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,0BAA0B;YAC1B,MAAM,WAAW,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphQL Subscription Manager
|
|
3
|
+
* Handles WebSocket-based GraphQL subscriptions
|
|
4
|
+
*
|
|
5
|
+
* NOTE: This needs to be refactored to use the new adapter pattern.
|
|
6
|
+
* For now, subscriptions are disabled pending refactor.
|
|
7
|
+
*/
|
|
8
|
+
export declare class GraphQLSubscriptionManager {
|
|
9
|
+
private subscriptions;
|
|
10
|
+
constructor(_schema: any, _contextFactory?: any);
|
|
11
|
+
subscribe(): Promise<void>;
|
|
12
|
+
unsubscribe(): void;
|
|
13
|
+
cleanup(): void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Setup GraphQL subscriptions on WebSocket
|
|
17
|
+
*
|
|
18
|
+
* NOTE: Temporarily disabled pending refactor to adapter pattern
|
|
19
|
+
*/
|
|
20
|
+
export declare function setupGraphQLSubscriptions(_websocketManager: any, schema: any, _options?: any): GraphQLSubscriptionManager;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// GraphQL WebSocket Subscriptions Support
|
|
2
|
+
// TODO: Refactor to use adapter pattern
|
|
3
|
+
import { createFrameworkLogger } from '../../../logger/index.js';
|
|
4
|
+
const logger = createFrameworkLogger('GraphQLSubscriptions');
|
|
5
|
+
/**
|
|
6
|
+
* GraphQL Subscription Manager
|
|
7
|
+
* Handles WebSocket-based GraphQL subscriptions
|
|
8
|
+
*
|
|
9
|
+
* NOTE: This needs to be refactored to use the new adapter pattern.
|
|
10
|
+
* For now, subscriptions are disabled pending refactor.
|
|
11
|
+
*/
|
|
12
|
+
export class GraphQLSubscriptionManager {
|
|
13
|
+
subscriptions = new Map();
|
|
14
|
+
constructor(_schema, _contextFactory) {
|
|
15
|
+
logger.warn('GraphQL subscriptions are temporarily disabled pending adapter refactor', 'Subscriptions');
|
|
16
|
+
}
|
|
17
|
+
// Placeholder methods
|
|
18
|
+
async subscribe() {
|
|
19
|
+
throw new Error('GraphQL subscriptions temporarily disabled');
|
|
20
|
+
}
|
|
21
|
+
unsubscribe() {
|
|
22
|
+
// no-op
|
|
23
|
+
}
|
|
24
|
+
cleanup() {
|
|
25
|
+
this.subscriptions.clear();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Setup GraphQL subscriptions on WebSocket
|
|
30
|
+
*
|
|
31
|
+
* NOTE: Temporarily disabled pending refactor to adapter pattern
|
|
32
|
+
*/
|
|
33
|
+
export function setupGraphQLSubscriptions(_websocketManager, schema, _options = {}) {
|
|
34
|
+
logger.warn('GraphQL subscriptions setup called but feature is temporarily disabled', 'Subscriptions');
|
|
35
|
+
return new GraphQLSubscriptionManager(schema);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=subscriptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/graphql/subscriptions.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,wCAAwC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,MAAM,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,OAAO,0BAA0B;IAC7B,aAAa,GAAG,IAAI,GAAG,EAAe,CAAC;IAE/C,YAAY,OAAY,EAAE,eAAqB;QAC7C,MAAM,CAAC,IAAI,CACT,yEAAyE,EACzE,eAAe,CAChB,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,WAAW;QACT,QAAQ;IACV,CAAC;IAED,OAAO;QACL,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,iBAAsB,EACtB,MAAW,EACX,WAAgB,EAAE;IAElB,MAAM,CAAC,IAAI,CACT,wEAAwE,EACxE,eAAe,CAChB,CAAC;IACF,OAAO,IAAI,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { HttpRequest, HttpResponse } from '../../../../types/http.js';
|
|
2
|
+
export interface HelmetOptions {
|
|
3
|
+
contentSecurityPolicy?: boolean | Record<string, string[]>;
|
|
4
|
+
xFrameOptions?: boolean | 'DENY' | 'SAMEORIGIN';
|
|
5
|
+
xContentTypeOptions?: boolean;
|
|
6
|
+
xXssProtection?: boolean;
|
|
7
|
+
referrerPolicy?: boolean | string;
|
|
8
|
+
strictTransportSecurity?: boolean | {
|
|
9
|
+
maxAge?: number;
|
|
10
|
+
includeSubDomains?: boolean;
|
|
11
|
+
};
|
|
12
|
+
xDownloadOptions?: boolean;
|
|
13
|
+
xPermittedCrossDomainPolicies?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare class HelmetCore {
|
|
16
|
+
private options;
|
|
17
|
+
constructor(options?: HelmetOptions);
|
|
18
|
+
applyHeaders(req: HttpRequest, res: HttpResponse): void;
|
|
19
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export class HelmetCore {
|
|
2
|
+
options;
|
|
3
|
+
constructor(options = {}) {
|
|
4
|
+
this.options = {
|
|
5
|
+
contentSecurityPolicy: options.contentSecurityPolicy ?? true,
|
|
6
|
+
xFrameOptions: options.xFrameOptions ?? 'DENY',
|
|
7
|
+
xContentTypeOptions: options.xContentTypeOptions ?? true,
|
|
8
|
+
xXssProtection: options.xXssProtection ?? true,
|
|
9
|
+
referrerPolicy: options.referrerPolicy ?? 'strict-origin-when-cross-origin',
|
|
10
|
+
strictTransportSecurity: options.strictTransportSecurity ?? {
|
|
11
|
+
maxAge: 31536000,
|
|
12
|
+
includeSubDomains: true,
|
|
13
|
+
},
|
|
14
|
+
xDownloadOptions: options.xDownloadOptions ?? true,
|
|
15
|
+
xPermittedCrossDomainPolicies: options.xPermittedCrossDomainPolicies ?? true,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
applyHeaders(req, res) {
|
|
19
|
+
// X-Content-Type-Options
|
|
20
|
+
if (this.options.xContentTypeOptions) {
|
|
21
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
22
|
+
}
|
|
23
|
+
// X-Frame-Options
|
|
24
|
+
if (this.options.xFrameOptions) {
|
|
25
|
+
const value = typeof this.options.xFrameOptions === 'string' ? this.options.xFrameOptions : 'DENY';
|
|
26
|
+
res.setHeader('X-Frame-Options', value);
|
|
27
|
+
}
|
|
28
|
+
// X-XSS-Protection
|
|
29
|
+
if (this.options.xXssProtection) {
|
|
30
|
+
res.setHeader('X-XSS-Protection', '1; mode=block');
|
|
31
|
+
}
|
|
32
|
+
// Referrer-Policy
|
|
33
|
+
if (this.options.referrerPolicy) {
|
|
34
|
+
const value = typeof this.options.referrerPolicy === 'string'
|
|
35
|
+
? this.options.referrerPolicy
|
|
36
|
+
: 'strict-origin-when-cross-origin';
|
|
37
|
+
res.setHeader('Referrer-Policy', value);
|
|
38
|
+
}
|
|
39
|
+
// Strict-Transport-Security (HSTS)
|
|
40
|
+
if (this.options.strictTransportSecurity) {
|
|
41
|
+
const hsts = typeof this.options.strictTransportSecurity === 'object'
|
|
42
|
+
? this.options.strictTransportSecurity
|
|
43
|
+
: { maxAge: 31536000, includeSubDomains: true };
|
|
44
|
+
const value = `max-age=${hsts.maxAge || 31536000}${hsts.includeSubDomains ? '; includeSubDomains' : ''}`;
|
|
45
|
+
res.setHeader('Strict-Transport-Security', value);
|
|
46
|
+
}
|
|
47
|
+
// Content-Security-Policy
|
|
48
|
+
if (this.options.contentSecurityPolicy) {
|
|
49
|
+
let cspValue = "default-src 'self'";
|
|
50
|
+
if (typeof this.options.contentSecurityPolicy === 'object') {
|
|
51
|
+
const directives = [];
|
|
52
|
+
for (const [directive, sources] of Object.entries(this.options.contentSecurityPolicy)) {
|
|
53
|
+
const kebabDirective = directive.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
54
|
+
directives.push(`${kebabDirective} ${sources.join(' ')}`);
|
|
55
|
+
}
|
|
56
|
+
cspValue = directives.join('; ');
|
|
57
|
+
}
|
|
58
|
+
res.setHeader('Content-Security-Policy', cspValue);
|
|
59
|
+
}
|
|
60
|
+
// X-Download-Options
|
|
61
|
+
if (this.options.xDownloadOptions) {
|
|
62
|
+
res.setHeader('X-Download-Options', 'noopen');
|
|
63
|
+
}
|
|
64
|
+
// X-Permitted-Cross-Domain-Policies
|
|
65
|
+
if (this.options.xPermittedCrossDomainPolicies) {
|
|
66
|
+
res.setHeader('X-Permitted-Cross-Domain-Policies', 'none');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/helmet/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Helmet Hook Integration
|
|
2
|
+
import { HelmetCore } from './core.js';
|
|
3
|
+
export function registerHelmetHooks(hookManager, options = {}) {
|
|
4
|
+
const core = new HelmetCore(options);
|
|
5
|
+
hookManager.on('request', async (context) => {
|
|
6
|
+
const { request, response } = context;
|
|
7
|
+
if (!request || !response)
|
|
8
|
+
return;
|
|
9
|
+
core.applyHeaders(request, response);
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../../../src/core/middleware/built-in/helmet/hook.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AAEtD,MAAM,UAAU,mBAAmB,CAAC,WAAgB,EAAE,UAAyB,EAAE;IAC/E,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IAErC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAAY,EAAE,EAAE;QAC/C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QACtC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE,OAAO;QAElC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { HelmetCore } from './core.js';
|
|
2
|
+
export type { HelmetOptions } from './core.js';
|
|
3
|
+
export { createHelmetMiddleware } from './middleware.js';
|
|
4
|
+
export { registerHelmetHooks } from './hook.js';
|
|
5
|
+
import { createHelmetMiddleware } from './middleware.js';
|
|
6
|
+
export declare const helmet: typeof createHelmetMiddleware;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Helmet Middleware - Centralized Exports
|
|
2
|
+
export { HelmetCore } from './core.js';
|
|
3
|
+
export { createHelmetMiddleware } from './middleware.js';
|
|
4
|
+
export { registerHelmetHooks } from './hook.js';
|
|
5
|
+
import { createHelmetMiddleware } from './middleware.js';
|
|
6
|
+
export const helmet = createHelmetMiddleware;
|
|
7
|
+
//# sourceMappingURL=index.js.map
|