@morojs/moro 1.8.0 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -38
- package/dist/core/auth/morojs-adapter.js +95 -45
- package/dist/core/auth/morojs-adapter.js.map +1 -1
- package/dist/core/config/config-manager.js.map +1 -1
- package/dist/core/config/config-sources.js +8 -49
- package/dist/core/config/config-sources.js.map +1 -1
- package/dist/core/config/config-validator.js +2 -3
- package/dist/core/config/config-validator.js.map +1 -1
- package/dist/core/config/file-loader.js.map +1 -1
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/schema.js +4 -1
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/utils.js.map +1 -1
- package/dist/core/database/adapters/drizzle.js +2 -2
- package/dist/core/database/adapters/drizzle.js.map +1 -1
- package/dist/core/database/adapters/index.js.map +1 -1
- package/dist/core/database/adapters/mongodb.d.ts +1 -0
- package/dist/core/database/adapters/mongodb.js +16 -0
- package/dist/core/database/adapters/mongodb.js.map +1 -1
- package/dist/core/database/adapters/mysql.d.ts +1 -0
- package/dist/core/database/adapters/mysql.js +13 -2
- package/dist/core/database/adapters/mysql.js.map +1 -1
- package/dist/core/database/adapters/postgresql.js +2 -2
- package/dist/core/database/adapters/postgresql.js.map +1 -1
- package/dist/core/database/adapters/redis.js.map +1 -1
- package/dist/core/database/adapters/sql-safety.js +5 -4
- package/dist/core/database/adapters/sql-safety.js.map +1 -1
- package/dist/core/database/adapters/sqlite.js.map +1 -1
- package/dist/core/database/index.js.map +1 -1
- package/dist/core/docs/index.js +11 -7
- package/dist/core/docs/index.js.map +1 -1
- package/dist/core/docs/openapi-generator.js +8 -6
- package/dist/core/docs/openapi-generator.js.map +1 -1
- package/dist/core/docs/schema-to-openapi.js +3 -3
- package/dist/core/docs/schema-to-openapi.js.map +1 -1
- package/dist/core/docs/simple-docs.js.map +1 -1
- package/dist/core/docs/swagger-ui.js.map +1 -1
- package/dist/core/docs/zod-to-openapi.js +2 -2
- package/dist/core/docs/zod-to-openapi.js.map +1 -1
- package/dist/core/events/event-bus.js +14 -5
- package/dist/core/events/event-bus.js.map +1 -1
- package/dist/core/events/index.js.map +1 -1
- package/dist/core/framework.d.ts +2 -2
- package/dist/core/framework.js +21 -14
- package/dist/core/framework.js.map +1 -1
- package/dist/core/graphql/adapter.js.map +1 -1
- package/dist/core/graphql/adapters/graphql-js-adapter.js.map +1 -1
- package/dist/core/graphql/core.js.map +1 -1
- package/dist/core/graphql/index.js.map +1 -1
- package/dist/core/graphql/loader.js.map +1 -1
- package/dist/core/graphql/types.js.map +1 -1
- package/dist/core/grpc/adapters/grpc-js-adapter.js +4 -0
- package/dist/core/grpc/adapters/grpc-js-adapter.js.map +1 -1
- package/dist/core/grpc/adapters/index.js.map +1 -1
- package/dist/core/grpc/grpc-adapter.js.map +1 -1
- package/dist/core/grpc/grpc-manager.js.map +1 -1
- package/dist/core/grpc/index.js.map +1 -1
- package/dist/core/grpc/middleware/auth.js +1 -1
- package/dist/core/grpc/middleware/auth.js.map +1 -1
- package/dist/core/grpc/middleware/logging.js.map +1 -1
- package/dist/core/grpc/middleware/validation.js +1 -1
- package/dist/core/grpc/middleware/validation.js.map +1 -1
- package/dist/core/grpc/types.d.ts +7 -7
- package/dist/core/grpc/types.js.map +1 -1
- package/dist/core/http/http-server.d.ts +0 -13
- package/dist/core/http/http-server.js +34 -141
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/http2-server.js +27 -5
- package/dist/core/http/http2-server.js.map +1 -1
- package/dist/core/http/index.js.map +1 -1
- package/dist/core/http/moro-engine-server.d.ts +2 -2
- package/dist/core/http/moro-engine-server.js +44 -21
- package/dist/core/http/moro-engine-server.js.map +1 -1
- package/dist/core/http/utils/compression.js +3 -3
- package/dist/core/http/utils/compression.js.map +1 -1
- package/dist/core/http/utils/lazy-event-emitter.js.map +1 -1
- package/dist/core/http/utils/multipart-parser.js +7 -3
- package/dist/core/http/utils/multipart-parser.js.map +1 -1
- package/dist/core/http/utils/query-parser.js.map +1 -1
- package/dist/core/http/utils/size.js +2 -2
- package/dist/core/http/utils/size.js.map +1 -1
- package/dist/core/http/utils/ssl-config.d.ts +10 -10
- package/dist/core/http/utils/ssl-config.js.map +1 -1
- package/dist/core/http/utils/uws-worker-clustering.js +37 -30
- package/dist/core/http/utils/uws-worker-clustering.js.map +1 -1
- package/dist/core/http/uws-http-server.d.ts +1 -0
- package/dist/core/http/uws-http-server.js +80 -22
- package/dist/core/http/uws-http-server.js.map +1 -1
- package/dist/core/jobs/cron-parser.js +7 -5
- package/dist/core/jobs/cron-parser.js.map +1 -1
- package/dist/core/jobs/index.js.map +1 -1
- package/dist/core/jobs/job-executor.d.ts +1 -1
- package/dist/core/jobs/job-executor.js.map +1 -1
- package/dist/core/jobs/job-scheduler.d.ts +3 -3
- package/dist/core/jobs/job-scheduler.js.map +1 -1
- package/dist/core/jobs/job-state-manager.d.ts +3 -3
- package/dist/core/jobs/job-state-manager.js +25 -4
- package/dist/core/jobs/job-state-manager.js.map +1 -1
- package/dist/core/jobs/leader-election.d.ts +15 -0
- package/dist/core/jobs/leader-election.js +158 -69
- package/dist/core/jobs/leader-election.js.map +1 -1
- package/dist/core/jobs/types.d.ts +4 -4
- package/dist/core/jobs/types.js.map +1 -1
- package/dist/core/jobs/utils.d.ts +1 -1
- package/dist/core/jobs/utils.js +7 -3
- package/dist/core/jobs/utils.js.map +1 -1
- package/dist/core/logger/filters.js +3 -2
- package/dist/core/logger/filters.js.map +1 -1
- package/dist/core/logger/index.js.map +1 -1
- package/dist/core/logger/logger.js +56 -25
- package/dist/core/logger/logger.js.map +1 -1
- package/dist/core/logger/outputs.js.map +1 -1
- package/dist/core/mail/adapters/console-adapter.js.map +1 -1
- package/dist/core/mail/adapters/index.js.map +1 -1
- package/dist/core/mail/adapters/nodemailer-adapter.js.map +1 -1
- package/dist/core/mail/adapters/resend-adapter.js.map +1 -1
- package/dist/core/mail/adapters/sendgrid-adapter.js.map +1 -1
- package/dist/core/mail/adapters/ses-adapter.js.map +1 -1
- package/dist/core/mail/index.js.map +1 -1
- package/dist/core/mail/mail-adapter.js.map +1 -1
- package/dist/core/mail/mail-manager.d.ts +10 -0
- package/dist/core/mail/mail-manager.js +21 -5
- package/dist/core/mail/mail-manager.js.map +1 -1
- package/dist/core/mail/template-engine.js.map +1 -1
- package/dist/core/mail/types.js.map +1 -1
- package/dist/core/middleware/built-in/auth/core.js +3 -3
- package/dist/core/middleware/built-in/auth/core.js.map +1 -1
- package/dist/core/middleware/built-in/auth/helpers.js +4 -4
- package/dist/core/middleware/built-in/auth/helpers.js.map +1 -1
- package/dist/core/middleware/built-in/auth/hook.js.map +1 -1
- package/dist/core/middleware/built-in/auth/index.js.map +1 -1
- package/dist/core/middleware/built-in/auth/jwt-helpers.d.ts +4 -4
- package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -1
- package/dist/core/middleware/built-in/auth/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/auth/providers.js.map +1 -1
- package/dist/core/middleware/built-in/body-parsers/index.js.map +1 -1
- package/dist/core/middleware/built-in/body-size/core.js +2 -2
- package/dist/core/middleware/built-in/body-size/core.js.map +1 -1
- package/dist/core/middleware/built-in/body-size/hook.js.map +1 -1
- package/dist/core/middleware/built-in/body-size/index.js.map +1 -1
- package/dist/core/middleware/built-in/body-size/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js +3 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -1
- 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.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -1
- package/dist/core/middleware/built-in/cache/core.js.map +1 -1
- package/dist/core/middleware/built-in/cache/hook.js +3 -3
- package/dist/core/middleware/built-in/cache/hook.js.map +1 -1
- package/dist/core/middleware/built-in/cache/index.js.map +1 -1
- package/dist/core/middleware/built-in/cache/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -1
- 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.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/core.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/hook.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/index.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/compression/core.js.map +1 -1
- package/dist/core/middleware/built-in/compression/hook.js.map +1 -1
- package/dist/core/middleware/built-in/compression/index.js.map +1 -1
- package/dist/core/middleware/built-in/compression/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/cookie/core.js.map +1 -1
- package/dist/core/middleware/built-in/cookie/hook.js.map +1 -1
- package/dist/core/middleware/built-in/cookie/index.js.map +1 -1
- package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/cors/core.js.map +1 -1
- package/dist/core/middleware/built-in/cors/hook.js.map +1 -1
- package/dist/core/middleware/built-in/cors/index.js.map +1 -1
- package/dist/core/middleware/built-in/cors/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/csp/core.js.map +1 -1
- package/dist/core/middleware/built-in/csp/hook.js.map +1 -1
- package/dist/core/middleware/built-in/csp/index.js.map +1 -1
- package/dist/core/middleware/built-in/csp/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/csrf/core.js +1 -1
- package/dist/core/middleware/built-in/csrf/core.js.map +1 -1
- package/dist/core/middleware/built-in/csrf/hook.js.map +1 -1
- package/dist/core/middleware/built-in/csrf/index.js.map +1 -1
- package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -1
- package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/core.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/helpers.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/hook.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/index.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/subscriptions.js.map +1 -1
- package/dist/core/middleware/built-in/helmet/core.js.map +1 -1
- package/dist/core/middleware/built-in/helmet/hook.js.map +1 -1
- package/dist/core/middleware/built-in/helmet/index.js.map +1 -1
- package/dist/core/middleware/built-in/helmet/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/http2/core.js.map +1 -1
- package/dist/core/middleware/built-in/http2/hook.js.map +1 -1
- package/dist/core/middleware/built-in/http2/index.js.map +1 -1
- package/dist/core/middleware/built-in/http2/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -1
- package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/range/core.js +4 -1
- package/dist/core/middleware/built-in/range/core.js.map +1 -1
- package/dist/core/middleware/built-in/range/hook.js.map +1 -1
- package/dist/core/middleware/built-in/range/index.js.map +1 -1
- package/dist/core/middleware/built-in/range/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -1
- package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -1
- package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -1
- package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/request-logger/index.js.map +1 -1
- package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/session/core.js +4 -4
- package/dist/core/middleware/built-in/session/core.js.map +1 -1
- package/dist/core/middleware/built-in/session/hook.js.map +1 -1
- package/dist/core/middleware/built-in/session/index.js.map +1 -1
- package/dist/core/middleware/built-in/session/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/sse/core.js.map +1 -1
- package/dist/core/middleware/built-in/sse/hook.js.map +1 -1
- package/dist/core/middleware/built-in/sse/index.js.map +1 -1
- package/dist/core/middleware/built-in/sse/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/static/core.js.map +1 -1
- package/dist/core/middleware/built-in/static/hook.js.map +1 -1
- package/dist/core/middleware/built-in/static/index.js.map +1 -1
- package/dist/core/middleware/built-in/static/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/template/core.js +1 -1
- package/dist/core/middleware/built-in/template/core.js.map +1 -1
- package/dist/core/middleware/built-in/template/hook.js.map +1 -1
- package/dist/core/middleware/built-in/template/index.js.map +1 -1
- package/dist/core/middleware/built-in/template/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/upload/core.js.map +1 -1
- package/dist/core/middleware/built-in/upload/hook.js.map +1 -1
- package/dist/core/middleware/built-in/upload/index.js.map +1 -1
- package/dist/core/middleware/built-in/upload/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/validation/core.js.map +1 -1
- package/dist/core/middleware/built-in/validation/hook.js.map +1 -1
- package/dist/core/middleware/built-in/validation/index.js.map +1 -1
- package/dist/core/middleware/built-in/validation/middleware.js.map +1 -1
- package/dist/core/middleware/index.js +2 -2
- package/dist/core/middleware/index.js.map +1 -1
- package/dist/core/modules/auto-discovery.js +11 -7
- package/dist/core/modules/auto-discovery.js.map +1 -1
- package/dist/core/modules/index.js.map +1 -1
- package/dist/core/modules/modules.js +18 -13
- package/dist/core/modules/modules.js.map +1 -1
- package/dist/core/networking/adapters/engine-adapter.js +1 -1
- package/dist/core/networking/adapters/engine-adapter.js.map +1 -1
- package/dist/core/networking/adapters/index.js.map +1 -1
- package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -0
- package/dist/core/networking/adapters/socketio-adapter.js +12 -1
- package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
- package/dist/core/networking/adapters/uws-adapter.js +1 -1
- package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
- package/dist/core/networking/adapters/ws-adapter.d.ts +15 -0
- package/dist/core/networking/adapters/ws-adapter.js +120 -6
- package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
- package/dist/core/networking/index.js.map +1 -1
- package/dist/core/networking/service-discovery.js +7 -5
- package/dist/core/networking/service-discovery.js.map +1 -1
- package/dist/core/networking/websocket-adapter.d.ts +22 -3
- package/dist/core/networking/websocket-adapter.js.map +1 -1
- package/dist/core/networking/websocket-manager.js +70 -67
- package/dist/core/networking/websocket-manager.js.map +1 -1
- package/dist/core/pooling/object-pool-manager.js +6 -0
- package/dist/core/pooling/object-pool-manager.js.map +1 -1
- package/dist/core/queue/adapters/bull-adapter.js.map +1 -1
- package/dist/core/queue/adapters/index.js.map +1 -1
- package/dist/core/queue/adapters/kafka-adapter.js +2 -2
- package/dist/core/queue/adapters/kafka-adapter.js.map +1 -1
- package/dist/core/queue/adapters/memory-adapter.js +6 -6
- package/dist/core/queue/adapters/memory-adapter.js.map +1 -1
- package/dist/core/queue/adapters/rabbitmq-adapter.d.ts +50 -0
- package/dist/core/queue/adapters/rabbitmq-adapter.js +176 -20
- package/dist/core/queue/adapters/rabbitmq-adapter.js.map +1 -1
- package/dist/core/queue/adapters/sqs-adapter.d.ts +12 -2
- package/dist/core/queue/adapters/sqs-adapter.js +75 -24
- package/dist/core/queue/adapters/sqs-adapter.js.map +1 -1
- package/dist/core/queue/index.js.map +1 -1
- package/dist/core/queue/middleware/index.js.map +1 -1
- package/dist/core/queue/middleware/monitoring.d.ts +1 -1
- package/dist/core/queue/middleware/monitoring.js.map +1 -1
- package/dist/core/queue/middleware/priority.js +2 -1
- package/dist/core/queue/middleware/priority.js.map +1 -1
- package/dist/core/queue/middleware/rate-limit.js.map +1 -1
- package/dist/core/queue/queue-adapter.js.map +1 -1
- package/dist/core/queue/queue-manager.js.map +1 -1
- package/dist/core/queue/types.d.ts +8 -8
- package/dist/core/queue/types.js.map +1 -1
- package/dist/core/routing/app-integration.js.map +1 -1
- package/dist/core/routing/create-router.js.map +1 -1
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/routing/path-matcher.js.map +1 -1
- package/dist/core/routing/radix-tree.js.map +1 -1
- package/dist/core/routing/router.js.map +1 -1
- package/dist/core/routing/unified-router.js +12 -4
- package/dist/core/routing/unified-router.js.map +1 -1
- package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
- package/dist/core/runtime/base-adapter.js +2 -2
- package/dist/core/runtime/base-adapter.js.map +1 -1
- package/dist/core/runtime/cloudflare-workers-adapter.js +2 -0
- package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
- package/dist/core/runtime/index.js.map +1 -1
- package/dist/core/runtime/node-adapter.js +19 -17
- package/dist/core/runtime/node-adapter.js.map +1 -1
- package/dist/core/runtime/vercel-edge-adapter.js +2 -0
- package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
- package/dist/core/utilities/circuit-breaker.d.ts +1 -0
- package/dist/core/utilities/circuit-breaker.js +25 -2
- package/dist/core/utilities/circuit-breaker.js.map +1 -1
- package/dist/core/utilities/container.js +9 -9
- package/dist/core/utilities/container.js.map +1 -1
- package/dist/core/utilities/hooks.js +28 -6
- package/dist/core/utilities/hooks.js.map +1 -1
- package/dist/core/utilities/index.js.map +1 -1
- package/dist/core/utilities/module-path.js.map +1 -1
- package/dist/core/utilities/package-utils.js +1 -1
- package/dist/core/utilities/package-utils.js.map +1 -1
- package/dist/core/utilities/response-helpers.js +1 -1
- package/dist/core/utilities/response-helpers.js.map +1 -1
- package/dist/core/validation/adapters.js.map +1 -1
- package/dist/core/validation/error-handler.js.map +1 -1
- package/dist/core/validation/index.js.map +1 -1
- package/dist/core/validation/schema-interface.js.map +1 -1
- package/dist/core/workers/facade.js.map +1 -1
- package/dist/core/workers/index.js.map +1 -1
- package/dist/core/workers/worker-entry.d.ts +1 -0
- package/dist/core/workers/worker-entry.js +12 -0
- package/dist/core/workers/worker-entry.js.map +1 -0
- package/dist/core/workers/worker-manager.d.ts +23 -2
- package/dist/core/workers/worker-manager.js +117 -17
- package/dist/core/workers/worker-manager.js.map +1 -1
- package/dist/core/workers/worker.js +8 -6
- package/dist/core/workers/worker.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +18 -1
- package/dist/moro.js +168 -50
- package/dist/moro.js.map +1 -1
- package/dist/types/auth.d.ts +4 -4
- package/dist/types/auth.js.map +1 -1
- package/dist/types/cache.js.map +1 -1
- package/dist/types/cdn.js.map +1 -1
- package/dist/types/config.d.ts +10 -10
- package/dist/types/config.js.map +1 -1
- package/dist/types/core.js.map +1 -1
- package/dist/types/database.js.map +1 -1
- package/dist/types/discovery.js.map +1 -1
- package/dist/types/events.js.map +1 -1
- package/dist/types/hooks.js.map +1 -1
- package/dist/types/http.js.map +1 -1
- package/dist/types/logger.js.map +1 -1
- package/dist/types/module.js.map +1 -1
- package/dist/types/runtime.js.map +1 -1
- package/dist/types/session.js.map +1 -1
- package/package.json +29 -17
|
@@ -53,6 +53,8 @@ function parseCookieHeader(cookieHeader) {
|
|
|
53
53
|
const cookiePartsLen = cookieParts.length;
|
|
54
54
|
for (let i = 0; i < cookiePartsLen; i++) {
|
|
55
55
|
const cookie = cookieParts[i];
|
|
56
|
+
if (cookie === undefined)
|
|
57
|
+
continue;
|
|
56
58
|
const equalIndex = cookie.indexOf('=');
|
|
57
59
|
if (equalIndex > 0) {
|
|
58
60
|
const name = cookie.substring(0, equalIndex).trim();
|
|
@@ -183,7 +185,7 @@ export class MoroIncomingMessage extends IncomingMessage {
|
|
|
183
185
|
if (v === undefined) {
|
|
184
186
|
const forwardedProto = this.headers['x-forwarded-proto'];
|
|
185
187
|
v = forwardedProto
|
|
186
|
-
? forwardedProto.split(',')[0].trim()
|
|
188
|
+
? (forwardedProto.split(',')[0] ?? '').trim()
|
|
187
189
|
: this.socket?.encrypted
|
|
188
190
|
? 'https'
|
|
189
191
|
: 'http';
|
|
@@ -263,7 +265,7 @@ export class MoroIncomingMessage extends IncomingMessage {
|
|
|
263
265
|
const ct = (this.headers['content-type'] || '');
|
|
264
266
|
if (!ct)
|
|
265
267
|
return false;
|
|
266
|
-
const mime = ct.split(';')[0].trim().toLowerCase();
|
|
268
|
+
const mime = (ct.split(';')[0] ?? '').trim().toLowerCase();
|
|
267
269
|
const t = type.toLowerCase();
|
|
268
270
|
if (t.indexOf('/') === -1) {
|
|
269
271
|
// e.g. 'json' → match */json or +json suffix
|
|
@@ -281,7 +283,7 @@ export class MoroIncomingMessage extends IncomingMessage {
|
|
|
281
283
|
const wanted = Array.isArray(types) ? types : [types];
|
|
282
284
|
if (accept === '*/*' || accept === '')
|
|
283
285
|
return wanted[0] || false;
|
|
284
|
-
const acceptTypes = accept.split(',').map(s => s.split(';')[0].trim().toLowerCase());
|
|
286
|
+
const acceptTypes = accept.split(',').map(s => (s.split(';')[0] ?? '').trim().toLowerCase());
|
|
285
287
|
for (const w of wanted) {
|
|
286
288
|
const wl = w.toLowerCase();
|
|
287
289
|
const wMime = wl.indexOf('/') === -1 ? `application/${wl}` : wl;
|
|
@@ -308,7 +310,7 @@ export class MoroIncomingMessage extends IncomingMessage {
|
|
|
308
310
|
.split(',')
|
|
309
311
|
.map(s => {
|
|
310
312
|
const parts = s.trim().split(';');
|
|
311
|
-
const tag = parts[0].toLowerCase();
|
|
313
|
+
const tag = (parts[0] ?? '').toLowerCase();
|
|
312
314
|
const qPart = parts.find(p => p.trim().startsWith('q='));
|
|
313
315
|
const q = qPart ? parseFloat(qPart.trim().slice(2)) : 1;
|
|
314
316
|
return { tag, q: isNaN(q) ? 0 : q };
|
|
@@ -696,7 +698,9 @@ export class MoroServerResponse extends ServerResponse {
|
|
|
696
698
|
return this;
|
|
697
699
|
}
|
|
698
700
|
for (const key in headers) {
|
|
699
|
-
|
|
701
|
+
const value = headers[key];
|
|
702
|
+
if (value !== undefined)
|
|
703
|
+
this.setHeader(key, value);
|
|
700
704
|
}
|
|
701
705
|
return this;
|
|
702
706
|
}
|
|
@@ -792,10 +796,15 @@ export class MoroServerResponse extends ServerResponse {
|
|
|
792
796
|
// Set Content-Type from extension if not already set
|
|
793
797
|
if (!this.getHeader('Content-Type')) {
|
|
794
798
|
// fire-and-forget mime lookup; not awaited to keep signature chainable
|
|
795
|
-
this._server
|
|
799
|
+
void this._server
|
|
800
|
+
.getMimeType(filename.substring(filename.lastIndexOf('.')))
|
|
801
|
+
.then(mime => {
|
|
796
802
|
if (!this.getHeader('Content-Type') && !this.headersSent) {
|
|
797
803
|
this.setHeader('Content-Type', mime);
|
|
798
804
|
}
|
|
805
|
+
})
|
|
806
|
+
.catch(() => {
|
|
807
|
+
// best-effort content-type inference
|
|
799
808
|
});
|
|
800
809
|
}
|
|
801
810
|
}
|
|
@@ -956,7 +965,8 @@ export class MoroHttpServer {
|
|
|
956
965
|
}
|
|
957
966
|
if (limits?.maxHeaders)
|
|
958
967
|
this.server.maxHeadersCount = limits.maxHeaders;
|
|
959
|
-
|
|
968
|
+
if (limits?.backlog !== undefined)
|
|
969
|
+
this.listenBacklog = limits.backlog;
|
|
960
970
|
}
|
|
961
971
|
// Direct router dispatch - called after global middleware, before the legacy
|
|
962
972
|
// route table. Returning true (or a promise of true) means the request was handled.
|
|
@@ -1235,7 +1245,11 @@ export class MoroHttpServer {
|
|
|
1235
1245
|
const paramNames = route.paramNames;
|
|
1236
1246
|
const paramNamesLen = paramNames.length;
|
|
1237
1247
|
for (let i = 0; i < paramNamesLen; i++) {
|
|
1238
|
-
|
|
1248
|
+
const paramName = paramNames[i];
|
|
1249
|
+
const value = matches[i + 1];
|
|
1250
|
+
if (paramName !== undefined && value !== undefined) {
|
|
1251
|
+
params[paramName] = value;
|
|
1252
|
+
}
|
|
1239
1253
|
}
|
|
1240
1254
|
httpReq.params = params;
|
|
1241
1255
|
}
|
|
@@ -1469,12 +1483,12 @@ export class MoroHttpServer {
|
|
|
1469
1483
|
error.received = contentLength;
|
|
1470
1484
|
return Promise.reject(error);
|
|
1471
1485
|
}
|
|
1472
|
-
//
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
//
|
|
1486
|
+
// Buffer every body up to maxSize and parse it into its real shape. The
|
|
1487
|
+
// incremental limit check below already bounds memory, and every other
|
|
1488
|
+
// backend (uWS, engine) returns the parsed body here - previously bodies
|
|
1489
|
+
// between maxSize/2 and maxSize resolved to a { type, parser } descriptor
|
|
1490
|
+
// object instead, so handlers/validation on the Node backend silently saw
|
|
1491
|
+
// a bogus shape for the exact same request that parsed normally elsewhere.
|
|
1478
1492
|
return new Promise((resolve, reject) => {
|
|
1479
1493
|
const chunks = [];
|
|
1480
1494
|
let totalLength = 0;
|
|
@@ -1496,7 +1510,10 @@ export class MoroHttpServer {
|
|
|
1496
1510
|
try {
|
|
1497
1511
|
// Single-chunk fast path (most JSON bodies arrive in one chunk);
|
|
1498
1512
|
// otherwise concat with the known total length to avoid a re-scan
|
|
1499
|
-
const
|
|
1513
|
+
const firstChunk = chunks[0];
|
|
1514
|
+
const body = chunks.length === 1 && firstChunk !== undefined
|
|
1515
|
+
? firstChunk
|
|
1516
|
+
: Buffer.concat(chunks, totalLength);
|
|
1500
1517
|
if (contentType.includes('application/json')) {
|
|
1501
1518
|
// Empty JSON body -> null (parity with the engine/uWS servers, and
|
|
1502
1519
|
// avoids JSON.parse('') throwing and 500ing an empty POST).
|
|
@@ -1525,132 +1542,6 @@ export class MoroHttpServer {
|
|
|
1525
1542
|
req.on('error', reject);
|
|
1526
1543
|
});
|
|
1527
1544
|
}
|
|
1528
|
-
/**
|
|
1529
|
-
* Create a streaming body parser for large payloads
|
|
1530
|
-
* Returns a streaming interface instead of buffering
|
|
1531
|
-
*/
|
|
1532
|
-
createStreamingBodyParser(req, contentType, maxSize) {
|
|
1533
|
-
let totalLength = 0;
|
|
1534
|
-
const chunks = [];
|
|
1535
|
-
return new Promise((resolve, reject) => {
|
|
1536
|
-
const streamParser = {
|
|
1537
|
-
// Streaming JSON parser for large JSON payloads
|
|
1538
|
-
json: () => this.streamJsonParse(req, maxSize),
|
|
1539
|
-
// Streaming form data parser
|
|
1540
|
-
form: () => this.streamFormParse(req, maxSize),
|
|
1541
|
-
// Raw stream access
|
|
1542
|
-
stream: () => ({
|
|
1543
|
-
onData: (callback) => {
|
|
1544
|
-
req.on('data', (chunk) => {
|
|
1545
|
-
totalLength += chunk.length;
|
|
1546
|
-
if (totalLength > maxSize) {
|
|
1547
|
-
reject(new Error('Request body too large'));
|
|
1548
|
-
return;
|
|
1549
|
-
}
|
|
1550
|
-
callback(chunk);
|
|
1551
|
-
});
|
|
1552
|
-
},
|
|
1553
|
-
onEnd: (callback) => {
|
|
1554
|
-
req.on('end', callback);
|
|
1555
|
-
},
|
|
1556
|
-
onError: (callback) => {
|
|
1557
|
-
req.on('error', callback);
|
|
1558
|
-
},
|
|
1559
|
-
}),
|
|
1560
|
-
// Traditional buffered parsing (fallback)
|
|
1561
|
-
buffer: async () => {
|
|
1562
|
-
return new Promise((resolveBuffer, rejectBuffer) => {
|
|
1563
|
-
req.on('data', (chunk) => {
|
|
1564
|
-
totalLength += chunk.length;
|
|
1565
|
-
if (totalLength > maxSize) {
|
|
1566
|
-
rejectBuffer(new Error('Request body too large'));
|
|
1567
|
-
return;
|
|
1568
|
-
}
|
|
1569
|
-
chunks.push(chunk);
|
|
1570
|
-
});
|
|
1571
|
-
req.on('end', () => {
|
|
1572
|
-
try {
|
|
1573
|
-
const body = Buffer.concat(chunks);
|
|
1574
|
-
if (contentType.includes('application/json')) {
|
|
1575
|
-
resolveBuffer(JSON.parse(body.toString()));
|
|
1576
|
-
}
|
|
1577
|
-
else {
|
|
1578
|
-
resolveBuffer(body.toString());
|
|
1579
|
-
}
|
|
1580
|
-
}
|
|
1581
|
-
catch (error) {
|
|
1582
|
-
rejectBuffer(error);
|
|
1583
|
-
}
|
|
1584
|
-
});
|
|
1585
|
-
req.on('error', rejectBuffer);
|
|
1586
|
-
});
|
|
1587
|
-
},
|
|
1588
|
-
};
|
|
1589
|
-
// Auto-detect and return appropriate parser
|
|
1590
|
-
if (contentType.includes('application/json')) {
|
|
1591
|
-
resolve({ type: 'json', parser: streamParser.json });
|
|
1592
|
-
}
|
|
1593
|
-
else if (contentType.includes('application/x-www-form-urlencoded')) {
|
|
1594
|
-
resolve({ type: 'form', parser: streamParser.form });
|
|
1595
|
-
}
|
|
1596
|
-
else {
|
|
1597
|
-
resolve({ type: 'stream', parser: streamParser.stream });
|
|
1598
|
-
}
|
|
1599
|
-
});
|
|
1600
|
-
}
|
|
1601
|
-
/**
|
|
1602
|
-
* Streaming JSON parser for large payloads
|
|
1603
|
-
*/
|
|
1604
|
-
async streamJsonParse(req, maxSize) {
|
|
1605
|
-
return new Promise((resolve, reject) => {
|
|
1606
|
-
let jsonString = '';
|
|
1607
|
-
let totalLength = 0;
|
|
1608
|
-
req.on('data', (chunk) => {
|
|
1609
|
-
totalLength += chunk.length;
|
|
1610
|
-
if (totalLength > maxSize) {
|
|
1611
|
-
reject(new Error('Request body too large'));
|
|
1612
|
-
return;
|
|
1613
|
-
}
|
|
1614
|
-
jsonString += chunk.toString();
|
|
1615
|
-
});
|
|
1616
|
-
req.on('end', () => {
|
|
1617
|
-
try {
|
|
1618
|
-
// For very large JSON, consider streaming JSON parsing in the future
|
|
1619
|
-
resolve(JSON.parse(jsonString));
|
|
1620
|
-
}
|
|
1621
|
-
catch (error) {
|
|
1622
|
-
reject(error);
|
|
1623
|
-
}
|
|
1624
|
-
});
|
|
1625
|
-
req.on('error', reject);
|
|
1626
|
-
});
|
|
1627
|
-
}
|
|
1628
|
-
/**
|
|
1629
|
-
* Streaming form data parser
|
|
1630
|
-
*/
|
|
1631
|
-
async streamFormParse(req, maxSize) {
|
|
1632
|
-
return new Promise((resolve, reject) => {
|
|
1633
|
-
let formData = '';
|
|
1634
|
-
let totalLength = 0;
|
|
1635
|
-
req.on('data', (chunk) => {
|
|
1636
|
-
totalLength += chunk.length;
|
|
1637
|
-
if (totalLength > maxSize) {
|
|
1638
|
-
reject(new Error('Request body too large'));
|
|
1639
|
-
return;
|
|
1640
|
-
}
|
|
1641
|
-
formData += chunk.toString();
|
|
1642
|
-
});
|
|
1643
|
-
req.on('end', () => {
|
|
1644
|
-
try {
|
|
1645
|
-
resolve(this.parseUrlEncoded(formData));
|
|
1646
|
-
}
|
|
1647
|
-
catch (error) {
|
|
1648
|
-
reject(error);
|
|
1649
|
-
}
|
|
1650
|
-
});
|
|
1651
|
-
req.on('error', reject);
|
|
1652
|
-
});
|
|
1653
|
-
}
|
|
1654
1545
|
parseMultipart(buffer, contentType) {
|
|
1655
1546
|
// Shared implementation - the native engine server parses uploads with
|
|
1656
1547
|
// the exact same code so both transports agree on body/files shape
|
|
@@ -1718,6 +1609,8 @@ export class MoroHttpServer {
|
|
|
1718
1609
|
// Only test routes with matching method and segment count
|
|
1719
1610
|
for (let i = 0; i < candidateLen; i++) {
|
|
1720
1611
|
const candidateRoute = candidateRoutes[i];
|
|
1612
|
+
if (candidateRoute === undefined)
|
|
1613
|
+
continue;
|
|
1721
1614
|
if (candidateRoute.method === method && candidateRoute.pattern.test(normalizedPath)) {
|
|
1722
1615
|
route = candidateRoute;
|
|
1723
1616
|
break;
|