@morojs/moro 1.7.30 → 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 +89 -46
- 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 +119 -48
- package/dist/core/config/config-sources.js.map +1 -1
- package/dist/core/config/config-validator.js +189 -8
- 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 +35 -4
- 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 +41 -3
- package/dist/core/framework.js +342 -95
- 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 +17 -23
- package/dist/core/http/http-server.js +109 -249
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/http2-server.d.ts +6 -16
- package/dist/core/http/http2-server.js +40 -83
- package/dist/core/http/http2-server.js.map +1 -1
- package/dist/core/http/index.d.ts +1 -0
- package/dist/core/http/index.js +3 -0
- package/dist/core/http/index.js.map +1 -1
- package/dist/core/http/moro-engine-server.d.ts +263 -0
- package/dist/core/http/moro-engine-server.js +1962 -0
- package/dist/core/http/moro-engine-server.js.map +1 -0
- package/dist/core/http/utils/compression.d.ts +47 -0
- package/dist/core/http/utils/compression.js +132 -0
- package/dist/core/http/utils/compression.js.map +1 -0
- package/dist/core/http/utils/lazy-event-emitter.d.ts +11 -0
- package/dist/core/http/utils/lazy-event-emitter.js +69 -0
- package/dist/core/http/utils/lazy-event-emitter.js.map +1 -0
- package/dist/core/http/utils/multipart-parser.d.ts +32 -0
- package/dist/core/http/utils/multipart-parser.js +215 -0
- package/dist/core/http/utils/multipart-parser.js.map +1 -0
- package/dist/core/http/utils/query-parser.d.ts +1 -0
- package/dist/core/http/utils/query-parser.js +44 -0
- package/dist/core/http/utils/query-parser.js.map +1 -0
- package/dist/core/http/utils/size.d.ts +33 -0
- package/dist/core/http/utils/size.js +37 -0
- package/dist/core/http/utils/size.js.map +1 -0
- package/dist/core/http/utils/ssl-config.d.ts +69 -0
- package/dist/core/http/utils/ssl-config.js +116 -0
- package/dist/core/http/utils/ssl-config.js.map +1 -0
- package/dist/core/http/utils/uws-worker-clustering.js +45 -32
- package/dist/core/http/utils/uws-worker-clustering.js.map +1 -1
- package/dist/core/http/uws-http-server.d.ts +25 -3
- package/dist/core/http/uws-http-server.js +465 -86
- 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.d.ts +3 -0
- package/dist/core/middleware/built-in/compression/core.js +28 -34
- 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.d.ts +23 -0
- package/dist/core/networking/adapters/engine-adapter.js +365 -0
- package/dist/core/networking/adapters/engine-adapter.js.map +1 -0
- package/dist/core/networking/adapters/index.d.ts +1 -0
- package/dist/core/networking/adapters/index.js +1 -0
- 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 +27 -16
- 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.d.ts +68 -0
- package/dist/core/utilities/package-utils.js +198 -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 +2 -2
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +20 -1
- package/dist/moro.js +230 -70
- 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 +100 -15
- 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 +32 -17
package/README.md
CHANGED
|
@@ -21,28 +21,20 @@
|
|
|
21
21
|
Build high-performance APIs with intelligent routing that automatically orders middleware execution. Deploy anywhere: Node.js, Vercel Edge, AWS Lambda, or Cloudflare Workers - same code, zero configuration.
|
|
22
22
|
|
|
23
23
|
**Key Features:**
|
|
24
|
-
|
|
24
|
+
|
|
25
|
+
- **Native C++ Engine** - ~102k req/s real-world through the full framework, 572k pipelined, on a single thread
|
|
25
26
|
- **Intelligent Routing** - Automatic middleware ordering, no configuration needed
|
|
26
|
-
- **Enterprise Auth** - Built-in Auth
|
|
27
|
+
- **Enterprise Auth** - Built-in Better Auth with OAuth & RBAC
|
|
27
28
|
- **Universal Validation** - Works with Zod, Joi, Yup, or Class Validator
|
|
28
29
|
- **Message Queues** - Production-ready queues (Bull, RabbitMQ, SQS, Kafka)
|
|
29
30
|
- **gRPC Support** - Native gRPC for high-performance microservices
|
|
30
31
|
- **Multi-Runtime** - Deploy to Node.js, Edge, Lambda, or Workers
|
|
31
32
|
- **Powerful CLI** - Scaffold projects, generate modules, deploy with one command
|
|
32
|
-
- **Zero
|
|
33
|
+
- **Zero third-party dependencies** - lightweight core (just Moro's own native engine) with optional integrations
|
|
33
34
|
|
|
34
35
|
## Performance
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|-----------|---------|---------|--------|-------|
|
|
38
|
-
| **Moro + uWebSockets.js** | **200,000+** | **3.93ms** | **25MB** | Single core |
|
|
39
|
-
| **Moro (Clustering)** | **190,000+** | **3.62ms** | **24MB** | Multi-core |
|
|
40
|
-
| **Moro (Standard)** | **87,000** | **7.8ms** | **14MB** | Single core |
|
|
41
|
-
| Fastify | 38,120 | 2.9ms | 35MB | Single core |
|
|
42
|
-
| Express | 28,540 | 3.8ms | 45MB | Single core |
|
|
43
|
-
| NestJS | 22,100 | 4.5ms | 58MB | Single core |
|
|
44
|
-
|
|
45
|
-
> **uWebSockets.js** achieves multi-core performance on a single core - perfect for WebSockets and serverless. **Clustering** scales across CPU cores for traditional HTTP workloads.
|
|
37
|
+
MoroJS is the fastest Node.js framework we've measured (not just because its ours) — its native engine beats uWebSockets.js in both benchmark profiles while running the **full framework** (routing, validation, middleware): **~102k req/s real-world at 0.9 ms latency** and **572k req/s pipelined**, on a single thread. That's ~1.5× Fastify and ~2× Express out of the box. Full comparison tables, methodology, and saved results live in the **[MoroJS Benchmark repo](https://github.com/Moro-JS/benchmark)**.
|
|
46
38
|
|
|
47
39
|
## Quick Start
|
|
48
40
|
|
|
@@ -50,26 +42,33 @@ Build high-performance APIs with intelligent routing that automatically orders m
|
|
|
50
42
|
|
|
51
43
|
```bash
|
|
52
44
|
npm install @morojs/moro
|
|
45
|
+
npm install zod # peer dependency used by the `z` validation helper below
|
|
53
46
|
```
|
|
54
47
|
|
|
55
48
|
```typescript
|
|
56
49
|
import { createApp, z } from '@morojs/moro';
|
|
57
50
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
51
|
+
// createApp() is async — await it inside an async context
|
|
52
|
+
(async () => {
|
|
53
|
+
const app = await createApp();
|
|
54
|
+
|
|
55
|
+
// Intelligent routing - order doesn't matter!
|
|
56
|
+
app
|
|
57
|
+
.post('/users')
|
|
58
|
+
.body(
|
|
59
|
+
z.object({
|
|
60
|
+
name: z.string().min(2),
|
|
61
|
+
email: z.string().email(),
|
|
62
|
+
})
|
|
63
|
+
)
|
|
64
|
+
.rateLimit({ requests: 10, window: 60000 })
|
|
65
|
+
.handler((req, res) => {
|
|
66
|
+
// req.body is fully typed and validated
|
|
67
|
+
return { success: true, data: req.body };
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
app.listen(3000);
|
|
71
|
+
})();
|
|
73
72
|
```
|
|
74
73
|
|
|
75
74
|
### Or Use the CLI
|
|
@@ -85,31 +84,74 @@ npm run dev
|
|
|
85
84
|
|
|
86
85
|
Learn more at [morojs.com/cli](https://morojs.com/cli)
|
|
87
86
|
|
|
88
|
-
###
|
|
87
|
+
### HTTP Engine
|
|
88
|
+
|
|
89
|
+
Moro ships its own native HTTP engine (`@morojs/engine`) and uses it by default,
|
|
90
|
+
falling back to the Node.js http server wherever a prebuilt binary isn't
|
|
91
|
+
available. Pick the backend with `server.engine`:
|
|
89
92
|
|
|
90
93
|
```typescript
|
|
91
|
-
//
|
|
92
|
-
const app = createApp({
|
|
94
|
+
// createApp() is async — top-level await (ESM) or wrap in an async function
|
|
95
|
+
const app = await createApp({
|
|
93
96
|
server: {
|
|
94
|
-
|
|
95
|
-
|
|
97
|
+
engine: 'moro', // default - Moro's native engine (Node.js fallback if it can't load)
|
|
98
|
+
// engine: 'node' - the Node.js http server (no native engine)
|
|
99
|
+
// engine: 'uws' - opt in to uWebSockets.js
|
|
100
|
+
},
|
|
96
101
|
});
|
|
97
102
|
|
|
98
|
-
//
|
|
99
|
-
|
|
103
|
+
// Check which engine actually booted (logged at startup too)
|
|
104
|
+
app.engine; // { server, enginePackage?, engineVersion?, protocols?, fallbackReason? }
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
#### TLS / HTTPS (unified config)
|
|
108
|
+
|
|
109
|
+
One `server.ssl` config flows to whichever runtime serves — the Moro engine terminates TLS in-process, as do the Node https server, uWebSockets.js (file paths only), and the HTTP/2 server. Both shapes are accepted:
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
// Inline PEM (node-style) — works on engine, node, http2
|
|
113
|
+
createApp({ server: { engine: 'moro', ssl: { key, cert, ca } } });
|
|
114
|
+
|
|
115
|
+
// File paths — works on every runtime incl. uWS
|
|
116
|
+
createApp({ server: { engine: 'moro', ssl: { keyFile: './key.pem', certFile: './cert.pem' } } });
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
#### HTTP/2
|
|
120
|
+
|
|
121
|
+
`http2: true` serves ALPN h2 + http/1.1. When `engine: 'moro'` and the engine
|
|
122
|
+
build supports h2 it is served natively; otherwise Moro uses its dedicated
|
|
123
|
+
HTTP/2 server. Requires TLS.
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
createApp({ server: { engine: 'moro', http2: true, ssl: { key, cert } } });
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
#### Configurable limits (no arbitrary caps)
|
|
130
|
+
|
|
131
|
+
Every limit is a documented default you can override; values flow through to
|
|
132
|
+
the engine. Nothing is silently capped.
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
createApp({
|
|
100
136
|
server: {
|
|
101
|
-
|
|
137
|
+
bodySizeLimit: '10mb', // maxUploadSize: '100mb' for multipart
|
|
138
|
+
maxConnections: 0, // 0 = unlimited
|
|
139
|
+
timeouts: { request: 30000, idle: 0, keepAlive: 5000, headers: 6000 },
|
|
140
|
+
limits: {
|
|
141
|
+
maxHeaderSize: '64kb',
|
|
142
|
+
maxHeaders: 100,
|
|
143
|
+
wsMaxMessageSize: '16mb',
|
|
144
|
+
wsBackpressureLimit: '1mb',
|
|
145
|
+
multipart: { maxParts: 1000, maxFiles: 20, maxFileSize: '25mb' },
|
|
146
|
+
},
|
|
102
147
|
},
|
|
103
|
-
performance: {
|
|
104
|
-
clustering: {
|
|
105
|
-
enabled: true,
|
|
106
|
-
workers: 4 // or 'auto' for CPU count
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
148
|
});
|
|
110
149
|
```
|
|
111
150
|
|
|
112
|
-
See [
|
|
151
|
+
See [HTTP Engine Guide](./docs/UWEBSOCKETS_GUIDE.md),
|
|
152
|
+
[HTTP/2 Guide](./docs/HTTP2_GUIDE.md), and the
|
|
153
|
+
[Configuration Reference](./docs/CONFIGURATION_REFERENCE.md) for the full
|
|
154
|
+
defaults table.
|
|
113
155
|
|
|
114
156
|
## Deploy Everywhere
|
|
115
157
|
|
|
@@ -144,9 +186,10 @@ export default { fetch: app.getHandler() };
|
|
|
144
186
|
## Examples
|
|
145
187
|
|
|
146
188
|
Check out [working examples](https://github.com/Moro-JS/examples) for:
|
|
189
|
+
|
|
147
190
|
- REST APIs with validation
|
|
148
191
|
- Real-time WebSocket apps
|
|
149
|
-
- Auth
|
|
192
|
+
- Better Auth integration
|
|
150
193
|
- Multi-runtime deployment
|
|
151
194
|
- Database integration
|
|
152
195
|
- And more...
|
|
@@ -155,9 +198,9 @@ Check out [working examples](https://github.com/Moro-JS/examples) for:
|
|
|
155
198
|
|
|
156
199
|
**vs Express** - Intelligent middleware ordering eliminates configuration complexity and race conditions
|
|
157
200
|
|
|
158
|
-
**vs Fastify** -
|
|
201
|
+
**vs Fastify** - ~1.5x the throughput out of the box (Moro's native engine), plus multi-runtime deployment without adapters
|
|
159
202
|
|
|
160
|
-
**vs NestJS** - Functional architecture without decorators,
|
|
203
|
+
**vs NestJS** - Functional architecture without decorators, with a fraction of the per-request overhead
|
|
161
204
|
|
|
162
205
|
## Contributing
|
|
163
206
|
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @see https://better-auth.com/
|
|
8
8
|
*/
|
|
9
|
+
import { randomBytes } from 'crypto';
|
|
9
10
|
import { createFrameworkLogger } from '../logger/index.js';
|
|
10
11
|
import { resolveUserPackage } from '../utilities/package-utils.js';
|
|
11
12
|
const logger = createFrameworkLogger('AuthAdapter');
|
|
@@ -67,62 +68,84 @@ function toWebRequest(req, basePath) {
|
|
|
67
68
|
return new Request(url.toString(), {
|
|
68
69
|
method: req.method || 'GET',
|
|
69
70
|
headers,
|
|
70
|
-
body,
|
|
71
|
+
...(body !== undefined ? { body } : {}),
|
|
71
72
|
});
|
|
72
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Parse a single Set-Cookie header value and apply it to the MoroJS response.
|
|
76
|
+
*/
|
|
77
|
+
function applySetCookie(moroResponse, cookie) {
|
|
78
|
+
const [nameValue, ...options] = cookie.split('; ');
|
|
79
|
+
if (nameValue === undefined)
|
|
80
|
+
return;
|
|
81
|
+
const eq = nameValue.indexOf('=');
|
|
82
|
+
if (eq <= 0)
|
|
83
|
+
return;
|
|
84
|
+
const name = nameValue.slice(0, eq);
|
|
85
|
+
const cookieValue = nameValue.slice(eq + 1);
|
|
86
|
+
const cookieOptions = {};
|
|
87
|
+
options.forEach(option => {
|
|
88
|
+
const optEq = option.indexOf('=');
|
|
89
|
+
const optKey = (optEq === -1 ? option : option.slice(0, optEq)).toLowerCase();
|
|
90
|
+
const optValue = optEq === -1 ? '' : option.slice(optEq + 1);
|
|
91
|
+
switch (optKey) {
|
|
92
|
+
case 'max-age':
|
|
93
|
+
cookieOptions.maxAge = parseInt(optValue, 10);
|
|
94
|
+
break;
|
|
95
|
+
case 'expires':
|
|
96
|
+
cookieOptions.expires = new Date(optValue);
|
|
97
|
+
break;
|
|
98
|
+
case 'httponly':
|
|
99
|
+
cookieOptions.httpOnly = true;
|
|
100
|
+
break;
|
|
101
|
+
case 'secure':
|
|
102
|
+
cookieOptions.secure = true;
|
|
103
|
+
break;
|
|
104
|
+
case 'samesite':
|
|
105
|
+
cookieOptions.sameSite = optValue;
|
|
106
|
+
break;
|
|
107
|
+
case 'path':
|
|
108
|
+
cookieOptions.path = optValue;
|
|
109
|
+
break;
|
|
110
|
+
case 'domain':
|
|
111
|
+
cookieOptions.domain = optValue;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
moroResponse.cookie(name, cookieValue, cookieOptions);
|
|
116
|
+
}
|
|
73
117
|
/**
|
|
74
118
|
* Convert Auth.js Web API Response to MoroJS response
|
|
75
119
|
*/
|
|
76
120
|
async function fromWebResponse(webResponse, moroResponse) {
|
|
77
121
|
// Set status
|
|
78
122
|
moroResponse.status(webResponse.status);
|
|
79
|
-
// Set
|
|
123
|
+
// Set-Cookie is multi-valued and MUST be read via getSetCookie(): the Fetch
|
|
124
|
+
// Headers.forEach() folds multiple Set-Cookie headers into a single
|
|
125
|
+
// comma-joined string, and splitting that on ', ' corrupts any cookie whose
|
|
126
|
+
// Expires attribute contains a comma ("Expires=Wed, 21 Oct 2025 ..."),
|
|
127
|
+
// silently dropping or garbling auth cookies.
|
|
128
|
+
const getSetCookie = webResponse.headers.getSetCookie;
|
|
129
|
+
const setCookies = typeof getSetCookie === 'function' ? getSetCookie.call(webResponse.headers) : [];
|
|
130
|
+
for (const cookie of setCookies) {
|
|
131
|
+
applySetCookie(moroResponse, cookie);
|
|
132
|
+
}
|
|
133
|
+
// Set remaining headers
|
|
80
134
|
webResponse.headers.forEach((value, key) => {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const cookieOptions = {};
|
|
89
|
-
options.forEach(option => {
|
|
90
|
-
const [optKey, optValue] = option.split('=');
|
|
91
|
-
switch (optKey.toLowerCase()) {
|
|
92
|
-
case 'max-age':
|
|
93
|
-
cookieOptions.maxAge = parseInt(optValue, 10);
|
|
94
|
-
break;
|
|
95
|
-
case 'expires':
|
|
96
|
-
cookieOptions.expires = new Date(optValue);
|
|
97
|
-
break;
|
|
98
|
-
case 'httponly':
|
|
99
|
-
cookieOptions.httpOnly = true;
|
|
100
|
-
break;
|
|
101
|
-
case 'secure':
|
|
102
|
-
cookieOptions.secure = true;
|
|
103
|
-
break;
|
|
104
|
-
case 'samesite':
|
|
105
|
-
cookieOptions.sameSite = optValue;
|
|
106
|
-
break;
|
|
107
|
-
case 'path':
|
|
108
|
-
cookieOptions.path = optValue;
|
|
109
|
-
break;
|
|
110
|
-
case 'domain':
|
|
111
|
-
cookieOptions.domain = optValue;
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
moroResponse.cookie(name, cookieValue, cookieOptions);
|
|
116
|
-
});
|
|
135
|
+
const lower = key.toLowerCase();
|
|
136
|
+
if (lower === 'set-cookie') {
|
|
137
|
+
// Handled above via getSetCookie(). Fallback for legacy runtimes without
|
|
138
|
+
// it: apply the (best-effort) folded value as a single cookie.
|
|
139
|
+
if (setCookies.length === 0 && value)
|
|
140
|
+
applySetCookie(moroResponse, value);
|
|
141
|
+
return;
|
|
117
142
|
}
|
|
118
|
-
|
|
143
|
+
if (lower === 'location') {
|
|
119
144
|
// Handle redirects
|
|
120
145
|
moroResponse.redirect(value);
|
|
121
146
|
return;
|
|
122
147
|
}
|
|
123
|
-
|
|
124
|
-
moroResponse.setHeader(key, value);
|
|
125
|
-
}
|
|
148
|
+
moroResponse.setHeader(key, value);
|
|
126
149
|
});
|
|
127
150
|
// Handle response body
|
|
128
151
|
const contentType = webResponse.headers.get('content-type');
|
|
@@ -172,12 +195,39 @@ export async function MoroJSAuth(config) {
|
|
|
172
195
|
};
|
|
173
196
|
}
|
|
174
197
|
}
|
|
198
|
+
// Resolve the auth secret. Never fall back to an empty string: an empty
|
|
199
|
+
// secret disables the signing/encryption Better Auth relies on. Fail fast in
|
|
200
|
+
// production, and warn-plus-generate elsewhere (matching the built-in auth
|
|
201
|
+
// middleware's behavior).
|
|
202
|
+
const secret = config.secret ||
|
|
203
|
+
process.env.AUTH_SECRET ||
|
|
204
|
+
(() => {
|
|
205
|
+
if (process.env.NODE_ENV === 'production') {
|
|
206
|
+
throw new Error('[MoroJS Security] No auth secret configured. Set config.secret or the AUTH_SECRET environment variable before starting in production.');
|
|
207
|
+
}
|
|
208
|
+
const generated = randomBytes(32).toString('hex');
|
|
209
|
+
logger.warn('[MoroJS Security] No auth secret configured. A random secret was generated — sessions will NOT survive restarts. Set config.secret or AUTH_SECRET for production use.', 'AuthAdapter');
|
|
210
|
+
return generated;
|
|
211
|
+
})();
|
|
212
|
+
const baseURL = config.baseURL || process.env.BASE_URL || process.env.AUTH_URL || 'http://localhost:3000';
|
|
213
|
+
// Default trustedOrigins to the app's own origin instead of a wildcard.
|
|
214
|
+
// trustedOrigins is Better Auth's origin/CSRF defense for state-changing auth
|
|
215
|
+
// routes and its callback/redirect-URL allowlist; ['*'] trusts every origin.
|
|
216
|
+
// Users can override or extend it via config.trustedOrigins.
|
|
217
|
+
let defaultOrigin;
|
|
218
|
+
try {
|
|
219
|
+
defaultOrigin = new URL(baseURL).origin;
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
defaultOrigin = baseURL;
|
|
223
|
+
}
|
|
224
|
+
const trustedOrigins = config.trustedOrigins ?? [defaultOrigin];
|
|
175
225
|
// Initialize Better Auth
|
|
176
226
|
const betterAuthInstance = betterAuth({
|
|
177
|
-
secret
|
|
178
|
-
baseURL
|
|
227
|
+
secret,
|
|
228
|
+
baseURL,
|
|
179
229
|
basePath,
|
|
180
|
-
trustedOrigins
|
|
230
|
+
trustedOrigins,
|
|
181
231
|
session: {
|
|
182
232
|
expiresIn: config.session?.maxAge || 30 * 24 * 60 * 60,
|
|
183
233
|
updateAge: config.session?.updateAge || 24 * 60 * 60,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"morojs-adapter.js","sourceRoot":"","sources":["../../../src/core/auth/morojs-adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"morojs-adapter.js","sourceRoot":"","sources":["../../../src/core/auth/morojs-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Better Auth Adapter for MoroJS\n *\n * This adapter allows Better Auth to work seamlessly with MoroJS framework.\n * Maintains compatibility with the original Auth.js API.\n *\n * @see https://better-auth.com/\n */\n\nimport { randomBytes } from 'crypto';\nimport { createFrameworkLogger } from '../logger/index.js';\nimport { resolveUserPackage } from '../utilities/package-utils.js';\n\nconst logger = createFrameworkLogger('AuthAdapter');\n\n// Lazy load Better Auth (optional dependency)\nlet betterAuthModule: any = null;\n\n/**\n * Dynamically load Better Auth from user's node_modules\n * This ensures it's only required when actually used\n */\nasync function loadBetterAuth() {\n if (betterAuthModule) {\n return betterAuthModule;\n }\n\n try {\n const betterAuthPath = resolveUserPackage('better-auth');\n betterAuthModule = await import(betterAuthPath);\n return betterAuthModule;\n } catch {\n throw new Error(\n 'Better Auth package not found. Install it with: npm install better-auth\\n' +\n 'See: https://better-auth.com/ for setup instructions'\n );\n }\n}\n\n// Auth types (compatible with Auth.js)\nexport interface AuthConfig {\n providers: any[];\n secret?: string;\n session?: any;\n callbacks?: any;\n events?: any;\n pages?: any;\n adapter?: any;\n debug?: boolean;\n basePath?: string;\n [key: string]: any;\n}\n\nexport interface Session {\n user: {\n id: string;\n name?: string | null;\n email?: string | null;\n image?: string | null;\n [key: string]: any;\n };\n expires: string;\n [key: string]: any;\n}\n\nexport type AuthAction = 'signin' | 'signout' | 'callback' | 'session' | 'providers' | 'csrf';\n\n// MoroJS-specific types\nexport interface MoroJSAuthConfig extends Omit<AuthConfig, 'raw'> {\n /**\n * Base path for auth routes in MoroJS\n * @default \"/api/auth\"\n */\n basePath?: string;\n\n /**\n * MoroJS-specific options\n */\n morojs?: {\n /**\n * Enable MoroJS-specific logging\n * @default false\n */\n debug?: boolean;\n\n /**\n * Custom request/response transformers\n */\n transformers?: {\n request?: (req: any) => any;\n response?: (res: any) => any;\n };\n };\n}\n\nexport interface MoroJSRequest {\n url?: string;\n method?: string;\n headers?: Record<string, string>;\n body?: any;\n query?: Record<string, string>;\n cookies?: Record<string, string>;\n}\n\nexport interface MoroJSResponse {\n status(code: number): MoroJSResponse;\n json(data: any): Promise<void>;\n redirect(url: string): void;\n setHeader(name: string, value: string): void;\n cookie(name: string, value: string, options?: any): void;\n send(data: any): void;\n end(data?: any): void;\n headersSent: boolean;\n}\n\n/**\n * Convert MoroJS request to Auth.js Web API Request\n */\nfunction toWebRequest(req: MoroJSRequest, basePath: string): Request {\n const url = new URL(req.url || '/', 'http://localhost:3000');\n\n // Handle auth routes\n if (url.pathname.startsWith(basePath)) {\n url.pathname = url.pathname.replace(basePath, '');\n }\n\n const headers = new Headers();\n if (req.headers) {\n Object.entries(req.headers).forEach(([key, value]) => {\n headers.set(key, value);\n });\n }\n\n // Add cookies to headers if not present - check first key instead of length\n if (req.cookies) {\n let hasCookies = false;\n let cookieHeader = '';\n for (const name in req.cookies) {\n if (Object.prototype.hasOwnProperty.call(req.cookies, name)) {\n if (hasCookies) {\n cookieHeader += `; ${name}=${req.cookies[name]}`;\n } else {\n cookieHeader = `${name}=${req.cookies[name]}`;\n hasCookies = true;\n }\n }\n }\n\n if (hasCookies && !headers.has('cookie')) {\n headers.set('cookie', cookieHeader);\n }\n }\n\n const body = req.body ? JSON.stringify(req.body) : undefined;\n\n return new Request(url.toString(), {\n method: req.method || 'GET',\n headers,\n ...(body !== undefined ? { body } : {}),\n });\n}\n\n/**\n * Parse a single Set-Cookie header value and apply it to the MoroJS response.\n */\nfunction applySetCookie(moroResponse: MoroJSResponse, cookie: string): void {\n const [nameValue, ...options] = cookie.split('; ');\n if (nameValue === undefined) return;\n const eq = nameValue.indexOf('=');\n if (eq <= 0) return;\n const name = nameValue.slice(0, eq);\n const cookieValue = nameValue.slice(eq + 1);\n\n const cookieOptions: any = {};\n options.forEach(option => {\n const optEq = option.indexOf('=');\n const optKey = (optEq === -1 ? option : option.slice(0, optEq)).toLowerCase();\n const optValue = optEq === -1 ? '' : option.slice(optEq + 1);\n switch (optKey) {\n case 'max-age':\n cookieOptions.maxAge = parseInt(optValue, 10);\n break;\n case 'expires':\n cookieOptions.expires = new Date(optValue);\n break;\n case 'httponly':\n cookieOptions.httpOnly = true;\n break;\n case 'secure':\n cookieOptions.secure = true;\n break;\n case 'samesite':\n cookieOptions.sameSite = optValue;\n break;\n case 'path':\n cookieOptions.path = optValue;\n break;\n case 'domain':\n cookieOptions.domain = optValue;\n break;\n }\n });\n\n moroResponse.cookie(name, cookieValue, cookieOptions);\n}\n\n/**\n * Convert Auth.js Web API Response to MoroJS response\n */\nasync function fromWebResponse(webResponse: Response, moroResponse: MoroJSResponse): Promise<void> {\n // Set status\n moroResponse.status(webResponse.status);\n\n // Set-Cookie is multi-valued and MUST be read via getSetCookie(): the Fetch\n // Headers.forEach() folds multiple Set-Cookie headers into a single\n // comma-joined string, and splitting that on ', ' corrupts any cookie whose\n // Expires attribute contains a comma (\"Expires=Wed, 21 Oct 2025 ...\"),\n // silently dropping or garbling auth cookies.\n const getSetCookie = (webResponse.headers as any).getSetCookie;\n const setCookies: string[] =\n typeof getSetCookie === 'function' ? getSetCookie.call(webResponse.headers) : [];\n for (const cookie of setCookies) {\n applySetCookie(moroResponse, cookie);\n }\n\n // Set remaining headers\n webResponse.headers.forEach((value, key) => {\n const lower = key.toLowerCase();\n if (lower === 'set-cookie') {\n // Handled above via getSetCookie(). Fallback for legacy runtimes without\n // it: apply the (best-effort) folded value as a single cookie.\n if (setCookies.length === 0 && value) applySetCookie(moroResponse, value);\n return;\n }\n if (lower === 'location') {\n // Handle redirects\n moroResponse.redirect(value);\n return;\n }\n moroResponse.setHeader(key, value);\n });\n\n // Handle response body\n const contentType = webResponse.headers.get('content-type');\n\n if (webResponse.status >= 300 && webResponse.status < 400) {\n // Redirect - already handled above\n return;\n } else if (contentType?.includes('application/json')) {\n const data = await webResponse.json();\n await moroResponse.json(data);\n } else {\n const text = await webResponse.text();\n moroResponse.send(text);\n }\n}\n\n/**\n * Main MoroJS Better Auth handler\n *\n * This is the core function that integrates Better Auth with MoroJS\n * Maintains API compatibility with the original Auth.js implementation\n */\nexport async function MoroJSAuth(config: MoroJSAuthConfig): Promise<{\n handler: (req: MoroJSRequest, res: MoroJSResponse) => Promise<void>;\n auth: (req: MoroJSRequest) => Promise<Session | null>;\n}> {\n const basePath = config.basePath || '/api/auth';\n\n // Lazy load Better Auth\n const betterAuthModule = await loadBetterAuth();\n const { betterAuth } = betterAuthModule;\n\n // Convert providers to Better Auth format\n const socialProviders: Record<string, any> = {};\n for (const provider of config.providers || []) {\n if (provider.id === 'google' && provider.clientId && provider.clientSecret) {\n socialProviders.google = {\n clientId: provider.clientId,\n clientSecret: provider.clientSecret,\n };\n } else if (provider.id === 'github' && provider.clientId && provider.clientSecret) {\n socialProviders.github = {\n clientId: provider.clientId,\n clientSecret: provider.clientSecret,\n };\n } else if (provider.id === 'discord' && provider.clientId && provider.clientSecret) {\n socialProviders.discord = {\n clientId: provider.clientId,\n clientSecret: provider.clientSecret,\n };\n }\n }\n\n // Resolve the auth secret. Never fall back to an empty string: an empty\n // secret disables the signing/encryption Better Auth relies on. Fail fast in\n // production, and warn-plus-generate elsewhere (matching the built-in auth\n // middleware's behavior).\n const secret =\n config.secret ||\n process.env.AUTH_SECRET ||\n (() => {\n if (process.env.NODE_ENV === 'production') {\n throw new Error(\n '[MoroJS Security] No auth secret configured. Set config.secret or the AUTH_SECRET environment variable before starting in production.'\n );\n }\n const generated = randomBytes(32).toString('hex');\n logger.warn(\n '[MoroJS Security] No auth secret configured. A random secret was generated — sessions will NOT survive restarts. Set config.secret or AUTH_SECRET for production use.',\n 'AuthAdapter'\n );\n return generated;\n })();\n\n const baseURL =\n config.baseURL || process.env.BASE_URL || process.env.AUTH_URL || 'http://localhost:3000';\n\n // Default trustedOrigins to the app's own origin instead of a wildcard.\n // trustedOrigins is Better Auth's origin/CSRF defense for state-changing auth\n // routes and its callback/redirect-URL allowlist; ['*'] trusts every origin.\n // Users can override or extend it via config.trustedOrigins.\n let defaultOrigin: string;\n try {\n defaultOrigin = new URL(baseURL).origin;\n } catch {\n defaultOrigin = baseURL;\n }\n const trustedOrigins = config.trustedOrigins ?? [defaultOrigin];\n\n // Initialize Better Auth\n const betterAuthInstance = betterAuth({\n secret,\n baseURL,\n basePath,\n trustedOrigins,\n session: {\n expiresIn: config.session?.maxAge || 30 * 24 * 60 * 60,\n updateAge: config.session?.updateAge || 24 * 60 * 60,\n },\n socialProviders,\n });\n\n return {\n /**\n * Main request handler for auth routes\n */\n handler: async (req: MoroJSRequest, res: MoroJSResponse) => {\n try {\n // Convert MoroJS request to Web API request\n const webRequest = toWebRequest(req, basePath);\n\n // Apply request transformer if provided\n let transformedRequest = webRequest;\n if (config.morojs?.transformers?.request) {\n transformedRequest = config.morojs.transformers.request(webRequest);\n }\n\n // Call Better Auth handler\n const authResponse = await betterAuthInstance.handler(transformedRequest);\n\n // Apply response transformer if provided\n let finalResponse = authResponse;\n if (config.morojs?.transformers?.response) {\n finalResponse = config.morojs.transformers.response(authResponse);\n }\n\n // Convert Web API response to MoroJS response\n await fromWebResponse(finalResponse, res);\n } catch (error) {\n logger.error('[MoroJS Auth] Error', 'AuthAdapter', {\n error: error instanceof Error ? error.message : String(error),\n });\n // Robust error handling - check if response methods exist\n if (typeof (res as any).status === 'function' && typeof (res as any).json === 'function') {\n (res as any).status(500).json({\n error: 'Internal server error',\n message: config.morojs?.debug ? (error as Error).message : 'Authentication error',\n });\n } else {\n // Fallback to basic Node.js response methods\n (res as any).statusCode = 500;\n (res as any).setHeader('Content-Type', 'application/json');\n (res as any).end(\n JSON.stringify({\n error: 'Internal server error',\n message: config.morojs?.debug ? (error as Error).message : 'Authentication error',\n })\n );\n }\n }\n },\n\n /**\n * Get session for the current request\n */\n auth: async (req: MoroJSRequest): Promise<Session | null> => {\n try {\n // Convert MoroJS request to Web API request\n const webRequest = toWebRequest(req, basePath);\n\n // Get session from Better Auth\n const session = await betterAuthInstance.api.getSession({\n headers: webRequest.headers,\n });\n\n if (session?.user) {\n return {\n user: {\n id: session.user.id,\n name: session.user.name || null,\n email: session.user.email || null,\n image: session.user.image || null,\n },\n expires: new Date(\n session.session?.expiresAt || Date.now() + 30 * 24 * 60 * 60 * 1000\n ).toISOString(),\n };\n }\n\n return null;\n } catch (error) {\n if (config.morojs?.debug) {\n logger.error('[MoroJS Auth] Session error', 'AuthAdapter', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n return null;\n }\n },\n };\n}\n\n/**\n * MoroJS Auth middleware factory\n *\n * This creates a MoroJS-compatible middleware for authentication\n * Uses Better Auth internally while maintaining the same API\n */\nexport function createAuthMiddleware(config: MoroJSAuthConfig) {\n logger.info('createAuthMiddleware called - creating middleware function', 'AuthAdapter');\n // Return a function that MoroJS can call directly\n return async (app: any) => {\n logger.info('Installing Better Auth middleware...', 'AuthAdapter');\n logger.debug('App object received', 'AuthAdapter', {\n appType: typeof app,\n appConstructor: app.constructor.name,\n });\n\n // Get the hooks from the app's middleware system\n const hooks =\n (app as any).coreFramework?.middlewareManager?.hooks || (app as any).middlewareManager?.hooks;\n\n if (!hooks) {\n logger.error('Could not access MoroJS hooks system', 'AuthAdapter');\n return;\n }\n\n const options = {};\n const mergedConfig = { ...config, ...options };\n const authHandlers = await MoroJSAuth(mergedConfig);\n const basePath = mergedConfig.basePath || '/api/auth';\n\n // Register request hook\n hooks.before('request', async (context: any) => {\n logger.debug('Native adapter hook starting', 'AuthAdapter');\n const req = context.request;\n logger.debug('Request path', 'AuthAdapter', { path: req.path || req.url });\n\n try {\n // Get session from Better Auth\n const session = await authHandlers.auth(req);\n\n // Add auth object to request\n req.auth = {\n session: session,\n user: session?.user || null,\n isAuthenticated: !!session?.user,\n\n // Helper methods\n getSession: async () => session,\n getUser: () => session?.user || null,\n\n // Sign in/out helpers (redirect to auth routes)\n signIn: (provider?: string, options?: any) => {\n const params = new URLSearchParams();\n if (provider) params.set('provider', provider);\n if (options?.callbackUrl) params.set('callbackUrl', options.callbackUrl);\n\n const signInUrl = `${basePath}/signin${provider ? `/${provider}` : ''}${\n params.toString() ? `?${params.toString()}` : ''\n }`;\n\n return { url: signInUrl };\n },\n\n signOut: (options?: any) => {\n const params = new URLSearchParams();\n if (options?.callbackUrl) params.set('callbackUrl', options.callbackUrl);\n\n const signOutUrl = `${basePath}/signout${\n params.toString() ? `?${params.toString()}` : ''\n }`;\n\n return { url: signOutUrl };\n },\n };\n logger.debug('Native adapter hook completed successfully', 'AuthAdapter');\n } catch (error) {\n logger.error('Error in native adapter hook', 'AuthAdapter', {\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n });\n\n logger.info('Better Auth middleware installed successfully!', 'AuthAdapter');\n };\n}\n\n// Types are already exported above, no need to re-export\n\n/**\n * Default export for convenience\n */\nexport default MoroJSAuth;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/core/config/config-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/core/config/config-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Configuration Manager - Immutable Single Source of Truth\n *\n * This module provides centralized, immutable configuration state management.\n * Configuration is locked at createApp() initialization and cannot be changed afterward.\n *\n * Precedence: Environment Variables > createApp Options > Config File > Defaults\n */\n\nimport { AppConfig } from '../../types/config.js';\nimport { createFrameworkLogger } from '../logger/index.js';\n\nconst logger = createFrameworkLogger('ConfigManager');\n\n/**\n * Global configuration state - immutable after initialization\n */\nlet globalConfig: Readonly<AppConfig> | null = null;\nlet isLocked = false;\n\n/**\n * Initialize and lock global configuration state\n * This should only be called once during createApp() initialization\n */\nexport function initializeAndLockConfig(config: AppConfig): void {\n if (isLocked) {\n throw new Error(\n 'Configuration is already locked and cannot be changed. ' +\n 'Configuration can only be set once during createApp() initialization.'\n );\n }\n\n // Deep freeze the configuration to make it truly immutable\n globalConfig = deepFreeze(config);\n isLocked = true;\n\n logger.info(\n `Configuration locked and initialized: ${process.env.NODE_ENV || 'development'}:${config.server.port}`\n );\n}\n\n/**\n * Get the current global configuration\n * Throws if configuration hasn't been initialized\n */\nexport function getGlobalConfig(): Readonly<AppConfig> {\n if (!globalConfig || !isLocked) {\n throw new Error(\n 'Configuration not initialized. Call createApp() to initialize the configuration system.'\n );\n }\n return globalConfig;\n}\n\n/**\n * Check if configuration has been initialized and locked\n */\nexport function isConfigLocked(): boolean {\n return isLocked && globalConfig !== null;\n}\n\n/**\n * Reset configuration state (for testing only)\n * @internal - This should only be used in tests\n */\nexport function resetConfigForTesting(): void {\n if (\n process.env.NODE_ENV !== 'test' &&\n !process.env.MORO_ALLOW_CONFIG_RESET &&\n !process.env.JEST_WORKER_ID\n ) {\n throw new Error(\n 'Configuration reset is only allowed in test environments. ' +\n 'Set MORO_ALLOW_CONFIG_RESET=true to override this check.'\n );\n }\n\n globalConfig = null;\n isLocked = false;\n logger.debug('Configuration state reset for testing');\n}\n\n/**\n * Deep freeze an object to make it truly immutable\n * This prevents any accidental mutations to the configuration\n */\nfunction deepFreeze<T>(obj: T): Readonly<T> {\n // Get property names\n const propNames = Object.getOwnPropertyNames(obj);\n\n // Freeze properties before freezing self\n for (const name of propNames) {\n const value = (obj as any)[name];\n\n if (value && typeof value === 'object') {\n deepFreeze(value);\n }\n }\n\n return Object.freeze(obj);\n}\n\n/**\n * Get a specific configuration value using dot notation\n * This provides a safe way to access nested config values\n *\n * @example\n * getConfigValue('server.port') // Returns the server port\n * getConfigValue('database.redis.url') // Returns the Redis URL\n */\nexport function getConfigValue<T = any>(path: string): T | undefined {\n const config = getGlobalConfig();\n\n return path.split('.').reduce((obj: any, key: string) => {\n return obj && obj[key] !== undefined ? obj[key] : undefined;\n }, config);\n}\n\n/**\n * Utility functions for common environment checks\n * These now read NODE_ENV directly for consistency with Node.js ecosystem\n */\nexport function isDevelopment(): boolean {\n return process.env.NODE_ENV === 'development';\n}\n\nexport function isProduction(): boolean {\n return process.env.NODE_ENV === 'production';\n}\n\nexport function isStaging(): boolean {\n return process.env.NODE_ENV === 'staging';\n}\n"]}
|