@c9up/ream 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +70 -0
- package/dist/Application.d.ts +71 -0
- package/dist/Application.d.ts.map +1 -0
- package/dist/Application.js +151 -0
- package/dist/Application.js.map +1 -0
- package/dist/Codemods.d.ts +16 -0
- package/dist/Codemods.d.ts.map +1 -0
- package/dist/Codemods.js +277 -0
- package/dist/Codemods.js.map +1 -0
- package/dist/ConfigLoader.d.ts +29 -0
- package/dist/ConfigLoader.d.ts.map +1 -0
- package/dist/ConfigLoader.js +43 -0
- package/dist/ConfigLoader.js.map +1 -0
- package/dist/ErrorBoundary.d.ts +51 -0
- package/dist/ErrorBoundary.d.ts.map +1 -0
- package/dist/ErrorBoundary.js +122 -0
- package/dist/ErrorBoundary.js.map +1 -0
- package/dist/GracefulShutdown.d.ts +28 -0
- package/dist/GracefulShutdown.d.ts.map +1 -0
- package/dist/GracefulShutdown.js +55 -0
- package/dist/GracefulShutdown.js.map +1 -0
- package/dist/HealthCheck.d.ts +42 -0
- package/dist/HealthCheck.d.ts.map +1 -0
- package/dist/HealthCheck.js +65 -0
- package/dist/HealthCheck.js.map +1 -0
- package/dist/HotReload.d.ts +28 -0
- package/dist/HotReload.d.ts.map +1 -0
- package/dist/HotReload.js +60 -0
- package/dist/HotReload.js.map +1 -0
- package/dist/HttpKernel.d.ts +62 -0
- package/dist/HttpKernel.d.ts.map +1 -0
- package/dist/HttpKernel.js +210 -0
- package/dist/HttpKernel.js.map +1 -0
- package/dist/Ignitor.d.ts +195 -0
- package/dist/Ignitor.d.ts.map +1 -0
- package/dist/Ignitor.js +505 -0
- package/dist/Ignitor.js.map +1 -0
- package/dist/Provider.d.ts +54 -0
- package/dist/Provider.d.ts.map +1 -0
- package/dist/Provider.js +37 -0
- package/dist/Provider.js.map +1 -0
- package/dist/bodyparser/BodyParserMiddleware.d.ts +38 -0
- package/dist/bodyparser/BodyParserMiddleware.d.ts.map +1 -0
- package/dist/bodyparser/BodyParserMiddleware.js +143 -0
- package/dist/bodyparser/BodyParserMiddleware.js.map +1 -0
- package/dist/bodyparser/MultipartFile.d.ts +77 -0
- package/dist/bodyparser/MultipartFile.d.ts.map +1 -0
- package/dist/bodyparser/MultipartFile.js +138 -0
- package/dist/bodyparser/MultipartFile.js.map +1 -0
- package/dist/bodyparser/parseSize.d.ts +6 -0
- package/dist/bodyparser/parseSize.d.ts.map +1 -0
- package/dist/bodyparser/parseSize.js +21 -0
- package/dist/bodyparser/parseSize.js.map +1 -0
- package/dist/bootstrap/hyper-server.d.ts +27 -0
- package/dist/bootstrap/hyper-server.d.ts.map +1 -0
- package/dist/bootstrap/hyper-server.js +63 -0
- package/dist/bootstrap/hyper-server.js.map +1 -0
- package/dist/console/CommandRunner.d.ts +18 -0
- package/dist/console/CommandRunner.d.ts.map +1 -0
- package/dist/console/CommandRunner.js +65 -0
- package/dist/console/CommandRunner.js.map +1 -0
- package/dist/container/Container.d.ts +60 -0
- package/dist/container/Container.d.ts.map +1 -0
- package/dist/container/Container.js +329 -0
- package/dist/container/Container.js.map +1 -0
- package/dist/container/types.d.ts +25 -0
- package/dist/container/types.d.ts.map +1 -0
- package/dist/container/types.js +6 -0
- package/dist/container/types.js.map +1 -0
- package/dist/decorators/Lazy.d.ts +19 -0
- package/dist/decorators/Lazy.d.ts.map +1 -0
- package/dist/decorators/Lazy.js +53 -0
- package/dist/decorators/Lazy.js.map +1 -0
- package/dist/decorators/Service.d.ts +48 -0
- package/dist/decorators/Service.d.ts.map +1 -0
- package/dist/decorators/Service.js +70 -0
- package/dist/decorators/Service.js.map +1 -0
- package/dist/errors/FuzzyMatcher.d.ts +41 -0
- package/dist/errors/FuzzyMatcher.d.ts.map +1 -0
- package/dist/errors/FuzzyMatcher.js +81 -0
- package/dist/errors/FuzzyMatcher.js.map +1 -0
- package/dist/errors/ModuleErrors.d.ts +41 -0
- package/dist/errors/ModuleErrors.d.ts.map +1 -0
- package/dist/errors/ModuleErrors.js +65 -0
- package/dist/errors/ModuleErrors.js.map +1 -0
- package/dist/errors/PipelineStageError.d.ts +31 -0
- package/dist/errors/PipelineStageError.d.ts.map +1 -0
- package/dist/errors/PipelineStageError.js +77 -0
- package/dist/errors/PipelineStageError.js.map +1 -0
- package/dist/errors/ReamError.d.ts +50 -0
- package/dist/errors/ReamError.d.ts.map +1 -0
- package/dist/errors/ReamError.js +108 -0
- package/dist/errors/ReamError.js.map +1 -0
- package/dist/events/Emitter.d.ts +124 -0
- package/dist/events/Emitter.d.ts.map +1 -0
- package/dist/events/Emitter.js +271 -0
- package/dist/events/Emitter.js.map +1 -0
- package/dist/events/EventsProvider.d.ts +28 -0
- package/dist/events/EventsProvider.d.ts.map +1 -0
- package/dist/events/EventsProvider.js +36 -0
- package/dist/events/EventsProvider.js.map +1 -0
- package/dist/events/config.d.ts +8 -0
- package/dist/events/config.d.ts.map +1 -0
- package/dist/events/config.js +4 -0
- package/dist/events/config.js.map +1 -0
- package/dist/events/configure.d.ts +10 -0
- package/dist/events/configure.d.ts.map +1 -0
- package/dist/events/configure.js +11 -0
- package/dist/events/configure.js.map +1 -0
- package/dist/events/helix/helpers.d.ts +62 -0
- package/dist/events/helix/helpers.d.ts.map +1 -0
- package/dist/events/helix/helpers.js +187 -0
- package/dist/events/helix/helpers.js.map +1 -0
- package/dist/events/index.d.ts +17 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +15 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/native.d.ts +21 -0
- package/dist/events/native.d.ts.map +1 -0
- package/dist/events/native.js +17 -0
- package/dist/events/native.js.map +1 -0
- package/dist/events/services/main.d.ts +18 -0
- package/dist/events/services/main.d.ts.map +1 -0
- package/dist/events/services/main.js +31 -0
- package/dist/events/services/main.js.map +1 -0
- package/dist/events/testing/FakeBus.d.ts +66 -0
- package/dist/events/testing/FakeBus.d.ts.map +1 -0
- package/dist/events/testing/FakeBus.js +356 -0
- package/dist/events/testing/FakeBus.js.map +1 -0
- package/dist/graphql/GraphQLEngine.d.ts +69 -0
- package/dist/graphql/GraphQLEngine.d.ts.map +1 -0
- package/dist/graphql/GraphQLEngine.js +309 -0
- package/dist/graphql/GraphQLEngine.js.map +1 -0
- package/dist/graphql/GraphQLProvider.d.ts +32 -0
- package/dist/graphql/GraphQLProvider.d.ts.map +1 -0
- package/dist/graphql/GraphQLProvider.js +49 -0
- package/dist/graphql/GraphQLProvider.js.map +1 -0
- package/dist/helpers/base64.d.ts +40 -0
- package/dist/helpers/base64.d.ts.map +1 -0
- package/dist/helpers/base64.js +70 -0
- package/dist/helpers/base64.js.map +1 -0
- package/dist/helpers/index.d.ts +7 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +5 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/is.d.ts +101 -0
- package/dist/helpers/is.d.ts.map +1 -0
- package/dist/helpers/is.js +151 -0
- package/dist/helpers/is.js.map +1 -0
- package/dist/helpers/napi-loader.d.ts +46 -0
- package/dist/helpers/napi-loader.d.ts.map +1 -0
- package/dist/helpers/napi-loader.js +69 -0
- package/dist/helpers/napi-loader.js.map +1 -0
- package/dist/helpers/safeEqual.d.ts +9 -0
- package/dist/helpers/safeEqual.d.ts.map +1 -0
- package/dist/helpers/safeEqual.js +16 -0
- package/dist/helpers/safeEqual.js.map +1 -0
- package/dist/helpers/string.d.ts +161 -0
- package/dist/helpers/string.d.ts.map +1 -0
- package/dist/helpers/string.js +429 -0
- package/dist/helpers/string.js.map +1 -0
- package/dist/helpers/types.d.ts +83 -0
- package/dist/helpers/types.d.ts.map +1 -0
- package/dist/helpers/types.js +6 -0
- package/dist/helpers/types.js.map +1 -0
- package/dist/http/Exception.d.ts +103 -0
- package/dist/http/Exception.d.ts.map +1 -0
- package/dist/http/Exception.js +228 -0
- package/dist/http/Exception.js.map +1 -0
- package/dist/http/HttpContext.d.ts +69 -0
- package/dist/http/HttpContext.d.ts.map +1 -0
- package/dist/http/HttpContext.js +55 -0
- package/dist/http/HttpContext.js.map +1 -0
- package/dist/http/RedirectBuilder.d.ts +31 -0
- package/dist/http/RedirectBuilder.d.ts.map +1 -0
- package/dist/http/RedirectBuilder.js +75 -0
- package/dist/http/RedirectBuilder.js.map +1 -0
- package/dist/http/Request.d.ts +160 -0
- package/dist/http/Request.d.ts.map +1 -0
- package/dist/http/Request.js +484 -0
- package/dist/http/Request.js.map +1 -0
- package/dist/http/Response.d.ts +114 -0
- package/dist/http/Response.d.ts.map +1 -0
- package/dist/http/Response.js +303 -0
- package/dist/http/Response.js.map +1 -0
- package/dist/http/SseStream.d.ts +89 -0
- package/dist/http/SseStream.d.ts.map +1 -0
- package/dist/http/SseStream.js +228 -0
- package/dist/http/SseStream.js.map +1 -0
- package/dist/http/urlDecode.d.ts +8 -0
- package/dist/http/urlDecode.d.ts.map +1 -0
- package/dist/http/urlDecode.js +18 -0
- package/dist/http/urlDecode.js.map +1 -0
- package/dist/index.d.ts +92 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/Pipeline.d.ts +36 -0
- package/dist/middleware/Pipeline.d.ts.map +1 -0
- package/dist/middleware/Pipeline.js +104 -0
- package/dist/middleware/Pipeline.js.map +1 -0
- package/dist/openapi/OpenApiGenerator.d.ts +58 -0
- package/dist/openapi/OpenApiGenerator.d.ts.map +1 -0
- package/dist/openapi/OpenApiGenerator.js +192 -0
- package/dist/openapi/OpenApiGenerator.js.map +1 -0
- package/dist/openapi/OpenApiMiddleware.d.ts +24 -0
- package/dist/openapi/OpenApiMiddleware.d.ts.map +1 -0
- package/dist/openapi/OpenApiMiddleware.js +78 -0
- package/dist/openapi/OpenApiMiddleware.js.map +1 -0
- package/dist/openapi/OpenApiProvider.d.ts +36 -0
- package/dist/openapi/OpenApiProvider.d.ts.map +1 -0
- package/dist/openapi/OpenApiProvider.js +42 -0
- package/dist/openapi/OpenApiProvider.js.map +1 -0
- package/dist/resources/ApiResource.d.ts +45 -0
- package/dist/resources/ApiResource.d.ts.map +1 -0
- package/dist/resources/ApiResource.js +58 -0
- package/dist/resources/ApiResource.js.map +1 -0
- package/dist/router/Router.d.ts +205 -0
- package/dist/router/Router.d.ts.map +1 -0
- package/dist/router/Router.js +552 -0
- package/dist/router/Router.js.map +1 -0
- package/dist/rpc/RpcProvider.d.ts +34 -0
- package/dist/rpc/RpcProvider.d.ts.map +1 -0
- package/dist/rpc/RpcProvider.js +37 -0
- package/dist/rpc/RpcProvider.js.map +1 -0
- package/dist/rpc/RpcRouter.d.ts +61 -0
- package/dist/rpc/RpcRouter.d.ts.map +1 -0
- package/dist/rpc/RpcRouter.js +187 -0
- package/dist/rpc/RpcRouter.js.map +1 -0
- package/dist/scheduler/Schedule.d.ts +53 -0
- package/dist/scheduler/Schedule.d.ts.map +1 -0
- package/dist/scheduler/Schedule.js +76 -0
- package/dist/scheduler/Schedule.js.map +1 -0
- package/dist/scheduler/ScheduleProvider.d.ts +56 -0
- package/dist/scheduler/ScheduleProvider.d.ts.map +1 -0
- package/dist/scheduler/ScheduleProvider.js +145 -0
- package/dist/scheduler/ScheduleProvider.js.map +1 -0
- package/dist/scheduler/Scheduler.d.ts +209 -0
- package/dist/scheduler/Scheduler.d.ts.map +1 -0
- package/dist/scheduler/Scheduler.js +432 -0
- package/dist/scheduler/Scheduler.js.map +1 -0
- package/dist/scheduler/index.d.ts +14 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +6 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/locks/LockBackend.d.ts +37 -0
- package/dist/scheduler/locks/LockBackend.d.ts.map +1 -0
- package/dist/scheduler/locks/LockBackend.js +13 -0
- package/dist/scheduler/locks/LockBackend.js.map +1 -0
- package/dist/scheduler/locks/MemoryLockBackend.d.ts +39 -0
- package/dist/scheduler/locks/MemoryLockBackend.d.ts.map +1 -0
- package/dist/scheduler/locks/MemoryLockBackend.js +71 -0
- package/dist/scheduler/locks/MemoryLockBackend.js.map +1 -0
- package/dist/scheduler/observability/ErrorReporter.d.ts +15 -0
- package/dist/scheduler/observability/ErrorReporter.d.ts.map +1 -0
- package/dist/scheduler/observability/ErrorReporter.js +13 -0
- package/dist/scheduler/observability/ErrorReporter.js.map +1 -0
- package/dist/scheduler/observability/ScheduleEvent.d.ts +57 -0
- package/dist/scheduler/observability/ScheduleEvent.d.ts.map +1 -0
- package/dist/scheduler/observability/ScheduleEvent.js +12 -0
- package/dist/scheduler/observability/ScheduleEvent.js.map +1 -0
- package/dist/scheduler/observability/ScheduleEventSink.d.ts +20 -0
- package/dist/scheduler/observability/ScheduleEventSink.d.ts.map +1 -0
- package/dist/scheduler/observability/ScheduleEventSink.js +17 -0
- package/dist/scheduler/observability/ScheduleEventSink.js.map +1 -0
- package/dist/scheduler/observability/StatsTracker.d.ts +50 -0
- package/dist/scheduler/observability/StatsTracker.d.ts.map +1 -0
- package/dist/scheduler/observability/StatsTracker.js +96 -0
- package/dist/scheduler/observability/StatsTracker.js.map +1 -0
- package/dist/security/CookieSigner.d.ts +13 -0
- package/dist/security/CookieSigner.d.ts.map +1 -0
- package/dist/security/CookieSigner.js +51 -0
- package/dist/security/CookieSigner.js.map +1 -0
- package/dist/security/SignedUrl.d.ts +17 -0
- package/dist/security/SignedUrl.d.ts.map +1 -0
- package/dist/security/SignedUrl.js +63 -0
- package/dist/security/SignedUrl.js.map +1 -0
- package/dist/security/crypto.d.ts +25 -0
- package/dist/security/crypto.d.ts.map +1 -0
- package/dist/security/crypto.js +82 -0
- package/dist/security/crypto.js.map +1 -0
- package/dist/server/HyperServer.d.ts +64 -0
- package/dist/server/HyperServer.d.ts.map +1 -0
- package/dist/server/HyperServer.js +54 -0
- package/dist/server/HyperServer.js.map +1 -0
- package/dist/server/Server.d.ts +68 -0
- package/dist/server/Server.d.ts.map +1 -0
- package/dist/server/Server.js +113 -0
- package/dist/server/Server.js.map +1 -0
- package/dist/services/app.d.ts +14 -0
- package/dist/services/app.d.ts.map +1 -0
- package/dist/services/app.js +27 -0
- package/dist/services/app.js.map +1 -0
- package/dist/services/router.d.ts +21 -0
- package/dist/services/router.d.ts.map +1 -0
- package/dist/services/router.js +36 -0
- package/dist/services/router.js.map +1 -0
- package/dist/services/server.d.ts +16 -0
- package/dist/services/server.d.ts.map +1 -0
- package/dist/services/server.js +32 -0
- package/dist/services/server.js.map +1 -0
- package/dist/session/Session.d.ts +88 -0
- package/dist/session/Session.d.ts.map +1 -0
- package/dist/session/Session.js +186 -0
- package/dist/session/Session.js.map +1 -0
- package/dist/session/SessionMiddleware.d.ts +16 -0
- package/dist/session/SessionMiddleware.d.ts.map +1 -0
- package/dist/session/SessionMiddleware.js +132 -0
- package/dist/session/SessionMiddleware.js.map +1 -0
- package/dist/session/drivers/CookieDriver.d.ts +17 -0
- package/dist/session/drivers/CookieDriver.d.ts.map +1 -0
- package/dist/session/drivers/CookieDriver.js +42 -0
- package/dist/session/drivers/CookieDriver.js.map +1 -0
- package/dist/session/drivers/MemoryDriver.d.ts +9 -0
- package/dist/session/drivers/MemoryDriver.d.ts.map +1 -0
- package/dist/session/drivers/MemoryDriver.js +24 -0
- package/dist/session/drivers/MemoryDriver.js.map +1 -0
- package/dist/storage/S3Driver.d.ts +27 -0
- package/dist/storage/S3Driver.d.ts.map +1 -0
- package/dist/storage/S3Driver.js +135 -0
- package/dist/storage/S3Driver.js.map +1 -0
- package/dist/storage/StaticMiddleware.d.ts +27 -0
- package/dist/storage/StaticMiddleware.d.ts.map +1 -0
- package/dist/storage/StaticMiddleware.js +153 -0
- package/dist/storage/StaticMiddleware.js.map +1 -0
- package/dist/storage/StaticProvider.d.ts +26 -0
- package/dist/storage/StaticProvider.d.ts.map +1 -0
- package/dist/storage/StaticProvider.js +31 -0
- package/dist/storage/StaticProvider.js.map +1 -0
- package/dist/storage/StorageManager.d.ts +31 -0
- package/dist/storage/StorageManager.d.ts.map +1 -0
- package/dist/storage/StorageManager.js +120 -0
- package/dist/storage/StorageManager.js.map +1 -0
- package/dist/testing/RequestBuilder.d.ts +67 -0
- package/dist/testing/RequestBuilder.d.ts.map +1 -0
- package/dist/testing/RequestBuilder.js +202 -0
- package/dist/testing/RequestBuilder.js.map +1 -0
- package/dist/testing/TestClient.d.ts +96 -0
- package/dist/testing/TestClient.d.ts.map +1 -0
- package/dist/testing/TestClient.js +263 -0
- package/dist/testing/TestClient.js.map +1 -0
- package/dist/types/helpers.d.ts +47 -0
- package/dist/types/helpers.d.ts.map +1 -0
- package/dist/types/helpers.js +5 -0
- package/dist/types/helpers.js.map +1 -0
- package/events.darwin-arm64.node +0 -0
- package/events.darwin-x64.node +0 -0
- package/events.linux-arm64-gnu.node +0 -0
- package/events.linux-x64-gnu.node +0 -0
- package/events.win32-x64-msvc.node +0 -0
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +106 -0
- package/scheduler.darwin-arm64.node +0 -0
- package/scheduler.darwin-x64.node +0 -0
- package/scheduler.linux-arm64-gnu.node +0 -0
- package/scheduler.linux-x64-gnu.node +0 -0
- package/scheduler.win32-x64-msvc.node +0 -0
- package/scripts/copy-napi.mjs +113 -0
- package/src/Application.ts +177 -0
- package/src/Codemods.ts +343 -0
- package/src/ConfigLoader.ts +49 -0
- package/src/ErrorBoundary.ts +157 -0
- package/src/GracefulShutdown.ts +80 -0
- package/src/HealthCheck.ts +96 -0
- package/src/HotReload.ts +78 -0
- package/src/HttpKernel.ts +305 -0
- package/src/Ignitor.ts +656 -0
- package/src/Provider.ts +74 -0
- package/src/bodyparser/BodyParserMiddleware.ts +183 -0
- package/src/bodyparser/MultipartFile.ts +181 -0
- package/src/bodyparser/parseSize.ts +19 -0
- package/src/bootstrap/hyper-server.ts +78 -0
- package/src/console/CommandRunner.ts +82 -0
- package/src/container/Container.ts +383 -0
- package/src/container/types.ts +30 -0
- package/src/decorators/Lazy.ts +57 -0
- package/src/decorators/Service.ts +85 -0
- package/src/errors/FuzzyMatcher.ts +93 -0
- package/src/errors/ModuleErrors.ts +73 -0
- package/src/errors/PipelineStageError.ts +97 -0
- package/src/errors/ReamError.ts +138 -0
- package/src/events/Emitter.ts +333 -0
- package/src/events/EventsProvider.ts +58 -0
- package/src/events/config.ts +10 -0
- package/src/events/configure.ts +19 -0
- package/src/events/helix/helpers.ts +260 -0
- package/src/events/index.ts +22 -0
- package/src/events/native.ts +37 -0
- package/src/events/services/main.ts +39 -0
- package/src/events/testing/FakeBus.ts +420 -0
- package/src/graphql/GraphQLEngine.ts +421 -0
- package/src/graphql/GraphQLProvider.ts +59 -0
- package/src/helpers/base64.ts +72 -0
- package/src/helpers/index.ts +6 -0
- package/src/helpers/is.ts +162 -0
- package/src/helpers/napi-loader.ts +106 -0
- package/src/helpers/safeEqual.ts +15 -0
- package/src/helpers/string.ts +469 -0
- package/src/helpers/types.ts +100 -0
- package/src/http/Exception.ts +272 -0
- package/src/http/HttpContext.ts +108 -0
- package/src/http/RedirectBuilder.ts +89 -0
- package/src/http/Request.ts +540 -0
- package/src/http/Response.ts +351 -0
- package/src/http/SseStream.ts +250 -0
- package/src/http/urlDecode.ts +18 -0
- package/src/index.ts +263 -0
- package/src/middleware/Pipeline.ts +136 -0
- package/src/openapi/OpenApiGenerator.ts +254 -0
- package/src/openapi/OpenApiMiddleware.ts +101 -0
- package/src/openapi/OpenApiProvider.ts +67 -0
- package/src/resources/ApiResource.ts +79 -0
- package/src/router/Router.ts +733 -0
- package/src/rpc/RpcProvider.ts +54 -0
- package/src/rpc/RpcRouter.ts +243 -0
- package/src/scheduler/Schedule.ts +96 -0
- package/src/scheduler/ScheduleProvider.ts +177 -0
- package/src/scheduler/Scheduler.ts +601 -0
- package/src/scheduler/index.ts +24 -0
- package/src/scheduler/locks/LockBackend.ts +38 -0
- package/src/scheduler/locks/MemoryLockBackend.ts +85 -0
- package/src/scheduler/observability/ErrorReporter.ts +13 -0
- package/src/scheduler/observability/ScheduleEvent.ts +61 -0
- package/src/scheduler/observability/ScheduleEventSink.ts +21 -0
- package/src/scheduler/observability/StatsTracker.ts +134 -0
- package/src/security/CookieSigner.ts +54 -0
- package/src/security/SignedUrl.ts +71 -0
- package/src/security/crypto.ts +98 -0
- package/src/server/HyperServer.ts +121 -0
- package/src/server/Server.ts +147 -0
- package/src/services/app.ts +34 -0
- package/src/services/router.ts +44 -0
- package/src/services/server.ts +40 -0
- package/src/session/Session.ts +231 -0
- package/src/session/SessionMiddleware.ts +153 -0
- package/src/session/drivers/CookieDriver.ts +48 -0
- package/src/session/drivers/MemoryDriver.ts +29 -0
- package/src/storage/S3Driver.ts +171 -0
- package/src/storage/StaticMiddleware.ts +182 -0
- package/src/storage/StaticProvider.ts +40 -0
- package/src/storage/StorageManager.ts +142 -0
- package/src/testing/RequestBuilder.ts +275 -0
- package/src/testing/TestClient.ts +344 -0
- package/src/types/helpers.ts +52 -0
- package/swcrc.app.json +17 -0
- package/tsconfig.app.json +21 -0
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request — wraps raw HTTP request data from the NAPI layer.
|
|
3
|
+
*
|
|
4
|
+
* Provides a fluent, AdonisJS-compatible API for reading request data.
|
|
5
|
+
* JSON body parsing is lazy — deferred until first access via input()/all()/body().
|
|
6
|
+
*
|
|
7
|
+
* @implements FR21
|
|
8
|
+
*/
|
|
9
|
+
export class Request {
|
|
10
|
+
#raw;
|
|
11
|
+
#params;
|
|
12
|
+
#parsedBody;
|
|
13
|
+
#parsedQs;
|
|
14
|
+
#merged;
|
|
15
|
+
#files = new Map();
|
|
16
|
+
/**
|
|
17
|
+
* CSRF token for this request (AdonisJS idiom: `request.csrfToken`). Seeded
|
|
18
|
+
* by the `@c9up/blackhole` middleware when CSRF is enabled; `undefined`
|
|
19
|
+
* otherwise. Also published to `ctx.store` for templating helpers.
|
|
20
|
+
*/
|
|
21
|
+
csrfToken;
|
|
22
|
+
constructor(raw, params = {}) {
|
|
23
|
+
this.#raw = raw;
|
|
24
|
+
this.#params = params;
|
|
25
|
+
}
|
|
26
|
+
// ─── HTTP accessors ───────────────────────────────────────
|
|
27
|
+
/** HTTP method (GET, POST, etc.). */
|
|
28
|
+
method() {
|
|
29
|
+
return this.#raw.method;
|
|
30
|
+
}
|
|
31
|
+
/** Request URL (path + query string). */
|
|
32
|
+
url(includeQs = true) {
|
|
33
|
+
if (includeQs && this.#raw.query) {
|
|
34
|
+
return `${this.#raw.path}?${this.#raw.query}`;
|
|
35
|
+
}
|
|
36
|
+
return this.#raw.path;
|
|
37
|
+
}
|
|
38
|
+
/** Request path (without query string). */
|
|
39
|
+
path() {
|
|
40
|
+
return this.#raw.path;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolved client IP. The HyperServer computes this once per request from
|
|
44
|
+
* the socket peer + `X-Forwarded-For` / `X-Real-IP` headers, gated by the
|
|
45
|
+
* configured trusted-proxy CIDR list, and ships the resolved value on
|
|
46
|
+
* `request.ip`. JS reads that field as-is.
|
|
47
|
+
*
|
|
48
|
+
* When `#raw.ip` is missing — only happens in test fixtures that
|
|
49
|
+
* hand-build `RawRequest` without going through the Rust pipeline — fall
|
|
50
|
+
* back to the socket peer (`remoteAddr`). Do NOT consult `X-Forwarded-For`
|
|
51
|
+
* or `X-Real-IP` here: those headers are attacker-controlled on direct
|
|
52
|
+
* requests and the trusted-proxy gate lives in Rust. Honouring them in
|
|
53
|
+
* the TS fallback would let test fixtures masking real spoofing
|
|
54
|
+
* regressions (two semantics for the same API). Fixtures that need to
|
|
55
|
+
* simulate a proxy-resolved IP must set `#raw.ip` directly to the
|
|
56
|
+
* desired resolved value.
|
|
57
|
+
*/
|
|
58
|
+
ip() {
|
|
59
|
+
if (this.#raw.ip)
|
|
60
|
+
return this.#raw.ip;
|
|
61
|
+
return this.#raw.remoteAddr ?? '127.0.0.1';
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Return all cookies sent on this request as a name → value map. The
|
|
65
|
+
* HyperServer parses the `Cookie:` header once via the `cookie` crate
|
|
66
|
+
* (RFC 6265) and ships the result on `RawRequest.cookies`. Test fixtures
|
|
67
|
+
* that don't pre-fill the field fall back to inline parsing of the raw
|
|
68
|
+
* header — same tolerant `;`-split with quoted-value passthrough.
|
|
69
|
+
*/
|
|
70
|
+
cookies() {
|
|
71
|
+
if (this.#raw.cookies)
|
|
72
|
+
return { ...this.#raw.cookies };
|
|
73
|
+
const header = this.#raw.headers.cookie;
|
|
74
|
+
if (!header)
|
|
75
|
+
return {};
|
|
76
|
+
const result = {};
|
|
77
|
+
for (const pair of header.split(';')) {
|
|
78
|
+
const trimmed = pair.trim();
|
|
79
|
+
if (!trimmed)
|
|
80
|
+
continue;
|
|
81
|
+
const eqIdx = trimmed.indexOf('=');
|
|
82
|
+
if (eqIdx === -1)
|
|
83
|
+
continue;
|
|
84
|
+
const k = trimmed.slice(0, eqIdx).trim();
|
|
85
|
+
const v = trimmed.slice(eqIdx + 1);
|
|
86
|
+
// Empty value (`name=`) is valid per RFC 6265 — used in session/logout
|
|
87
|
+
// flows that explicitly clear cookies. Only the key being empty is
|
|
88
|
+
// grounds to skip. Aligns the fallback with the pre-parsed path
|
|
89
|
+
// (HyperServer's cookie crate also accepts empty values).
|
|
90
|
+
if (k)
|
|
91
|
+
result[k] = v;
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
/** Pre-parsed cookie value by name, or `null` when absent. */
|
|
96
|
+
cookie(name) {
|
|
97
|
+
const cookies = this.#raw.cookies ?? this.cookies();
|
|
98
|
+
return cookies[name] ?? null;
|
|
99
|
+
}
|
|
100
|
+
/** Get the raw body as a string (decoded from base64 if binary). */
|
|
101
|
+
raw() {
|
|
102
|
+
if (this.#raw.bodyEncoding === 'base64') {
|
|
103
|
+
return Buffer.from(this.#raw.body, 'base64').toString('utf8');
|
|
104
|
+
}
|
|
105
|
+
return this.#raw.body;
|
|
106
|
+
}
|
|
107
|
+
/** Get the raw body as a Buffer (preserves binary integrity for file uploads). */
|
|
108
|
+
rawBuffer() {
|
|
109
|
+
if (this.#raw.bodyEncoding === 'base64') {
|
|
110
|
+
return Buffer.from(this.#raw.body, 'base64');
|
|
111
|
+
}
|
|
112
|
+
return Buffer.from(this.#raw.body, 'utf8');
|
|
113
|
+
}
|
|
114
|
+
// ─── Headers ──────────────────────────────────────────────
|
|
115
|
+
/** Get a single request header (case-insensitive). */
|
|
116
|
+
header(key) {
|
|
117
|
+
return this.#raw.headers[key.toLowerCase()];
|
|
118
|
+
}
|
|
119
|
+
/** Get all request headers. */
|
|
120
|
+
headers() {
|
|
121
|
+
return this.#raw.headers;
|
|
122
|
+
}
|
|
123
|
+
// ─── Route params ─────────────────────────────────────────
|
|
124
|
+
/** Get a single route parameter. */
|
|
125
|
+
param(key, defaultValue) {
|
|
126
|
+
return this.#params[key] ?? defaultValue;
|
|
127
|
+
}
|
|
128
|
+
/** Get all route parameters. */
|
|
129
|
+
params() {
|
|
130
|
+
return this.#params;
|
|
131
|
+
}
|
|
132
|
+
// ─── Query string ─────────────────────────────────────────
|
|
133
|
+
/** Get parsed query string as an object. */
|
|
134
|
+
qs() {
|
|
135
|
+
if (!this.#parsedQs) {
|
|
136
|
+
this.#parsedQs = parseQueryString(this.#raw.query);
|
|
137
|
+
}
|
|
138
|
+
return { ...this.#parsedQs };
|
|
139
|
+
}
|
|
140
|
+
// ─── Body ─────────────────────────────────────────────────
|
|
141
|
+
/** Get the parsed request body. */
|
|
142
|
+
body() {
|
|
143
|
+
this.#ensureParsedBody();
|
|
144
|
+
return this.#parsedBody;
|
|
145
|
+
}
|
|
146
|
+
// ─── Merged input (body + qs) ─────────────────────────────
|
|
147
|
+
/** Get a single input value from body or query string. */
|
|
148
|
+
input(key, defaultValue) {
|
|
149
|
+
const merged = this.all();
|
|
150
|
+
if (key in merged) {
|
|
151
|
+
// biome-ignore lint/suspicious/noExplicitAny: generic accessor — caller brands the value type via T
|
|
152
|
+
return merged[key];
|
|
153
|
+
}
|
|
154
|
+
// biome-ignore lint/suspicious/noExplicitAny: generic default — caller brands the value type via T
|
|
155
|
+
return defaultValue;
|
|
156
|
+
}
|
|
157
|
+
/** Get all input (query string merged with body). */
|
|
158
|
+
all() {
|
|
159
|
+
if (!this.#merged) {
|
|
160
|
+
this.#ensureParsedBody();
|
|
161
|
+
this.#merged = { ...this.qs(), ...this.#parsedBody };
|
|
162
|
+
}
|
|
163
|
+
return { ...this.#merged };
|
|
164
|
+
}
|
|
165
|
+
/** Cherry-pick specific keys from input. */
|
|
166
|
+
only(keys) {
|
|
167
|
+
const merged = this.all();
|
|
168
|
+
const result = {};
|
|
169
|
+
for (const key of keys) {
|
|
170
|
+
if (key in merged) {
|
|
171
|
+
result[key] = merged[key];
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
/** Get all input except specific keys. */
|
|
177
|
+
except(keys) {
|
|
178
|
+
const merged = this.all();
|
|
179
|
+
const keySet = new Set(keys);
|
|
180
|
+
const result = {};
|
|
181
|
+
for (const [k, v] of Object.entries(merged)) {
|
|
182
|
+
if (!keySet.has(k))
|
|
183
|
+
result[k] = v;
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
// ─── Content negotiation ──────────────────────────────────
|
|
188
|
+
/** Check if the request content-type matches any of the given types. */
|
|
189
|
+
is(types) {
|
|
190
|
+
const ct = this.#raw.headers['content-type'] ?? '';
|
|
191
|
+
for (const type of types) {
|
|
192
|
+
if (type === 'json' && ct.includes('application/json'))
|
|
193
|
+
return 'json';
|
|
194
|
+
if (type === 'html' && ct.includes('text/html'))
|
|
195
|
+
return 'html';
|
|
196
|
+
if (type === 'xml' && ct.includes('xml'))
|
|
197
|
+
return 'xml';
|
|
198
|
+
if (type === 'multipart' && ct.includes('multipart/form-data'))
|
|
199
|
+
return 'multipart';
|
|
200
|
+
if (ct.includes(type))
|
|
201
|
+
return type;
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Content negotiation — which of the offered types does the client accept,
|
|
207
|
+
* honouring RFC 7231 §5.3.2 quality values?
|
|
208
|
+
*
|
|
209
|
+
* Walks the parsed Accept header in descending q-order and returns the
|
|
210
|
+
* first server-offered type that matches. The server's preference order
|
|
211
|
+
* (`types` argument) is the tiebreaker only when multiple client entries
|
|
212
|
+
* share the same q. A bare `accepts(types)` therefore respects the
|
|
213
|
+
* client's stated priorities (`application/json;q=0.9, text/html;q=0.1`
|
|
214
|
+
* beats a server passing `['html', 'json']`).
|
|
215
|
+
*
|
|
216
|
+
* Aliases (`'json'` ↔ `application/json`, `'html'` ↔ `text/html`,
|
|
217
|
+
* `'xml'` ↔ any subtype containing `xml`) are honoured.
|
|
218
|
+
*/
|
|
219
|
+
accepts(types) {
|
|
220
|
+
const header = this.#raw.headers.accept ?? '*/*';
|
|
221
|
+
const entries = parseAcceptHeader(header);
|
|
222
|
+
if (entries.length === 0)
|
|
223
|
+
return null;
|
|
224
|
+
// Group by q so the highest q always wins; within one q-bucket, server
|
|
225
|
+
// offer order is the tiebreaker (devs control that order intentionally).
|
|
226
|
+
const buckets = bucketByQ(entries);
|
|
227
|
+
for (const bucket of buckets) {
|
|
228
|
+
for (const type of types) {
|
|
229
|
+
for (const entry of bucket) {
|
|
230
|
+
if (acceptMatches(entry.value, type))
|
|
231
|
+
return type;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Language negotiation from Accept-Language honouring RFC 4647 / 7231
|
|
239
|
+
* quality values. Returns the first offered language whose tag (or its
|
|
240
|
+
* primary subtag) matches the highest-q client entry, falling back to
|
|
241
|
+
* `langs[0]` when nothing matches and the client header is empty/absent.
|
|
242
|
+
*/
|
|
243
|
+
language(langs) {
|
|
244
|
+
const header = this.#raw.headers['accept-language'] ?? '';
|
|
245
|
+
if (!header.trim())
|
|
246
|
+
return langs[0] ?? null;
|
|
247
|
+
const entries = parseAcceptHeader(header);
|
|
248
|
+
if (entries.length === 0)
|
|
249
|
+
return null;
|
|
250
|
+
const buckets = bucketByQ(entries);
|
|
251
|
+
for (const bucket of buckets) {
|
|
252
|
+
for (const lang of langs) {
|
|
253
|
+
for (const entry of bucket) {
|
|
254
|
+
if (languageMatches(entry.value, lang))
|
|
255
|
+
return lang;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
// ─── Internals ────────────────────────────────────────────
|
|
262
|
+
// ─── Files ─────────────────────────────────────────────────
|
|
263
|
+
/** Get an uploaded file by field name. */
|
|
264
|
+
file(fieldName, options) {
|
|
265
|
+
const files = this.#files.get(fieldName);
|
|
266
|
+
if (!files || files.length === 0)
|
|
267
|
+
return null;
|
|
268
|
+
const file = files[0];
|
|
269
|
+
if (options)
|
|
270
|
+
file.validate(options);
|
|
271
|
+
return file;
|
|
272
|
+
}
|
|
273
|
+
/** Get all uploaded files for a field name. */
|
|
274
|
+
files(fieldName, options) {
|
|
275
|
+
const files = this.#files.get(fieldName) ?? [];
|
|
276
|
+
if (options) {
|
|
277
|
+
for (const f of files)
|
|
278
|
+
f.validate(options);
|
|
279
|
+
}
|
|
280
|
+
return files;
|
|
281
|
+
}
|
|
282
|
+
/** Get all uploaded files. */
|
|
283
|
+
allFiles() {
|
|
284
|
+
return this.#files;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Pre-parsed `multipart/form-data` payload as the HyperServer wrote it.
|
|
288
|
+
* Returns `undefined` when the request wasn't multipart (or the test
|
|
289
|
+
* fixture didn't fill the field). BodyParser hydrates `MultipartFile`
|
|
290
|
+
* instances from this — application code should keep using
|
|
291
|
+
* `request.file()` / `request.files()`.
|
|
292
|
+
*/
|
|
293
|
+
multipart() {
|
|
294
|
+
return this.#raw.multipart;
|
|
295
|
+
}
|
|
296
|
+
/** @internal Set files (called by BodyParser middleware). */
|
|
297
|
+
setFiles(files) {
|
|
298
|
+
this.#files.clear();
|
|
299
|
+
for (const file of files) {
|
|
300
|
+
const existing = this.#files.get(file.fieldName) ?? [];
|
|
301
|
+
existing.push(file);
|
|
302
|
+
this.#files.set(file.fieldName, existing);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// ─── Internals ────────────────────────────────────────────
|
|
306
|
+
/** @internal Set the parsed body (called by BodyParser middleware). */
|
|
307
|
+
setParsedBody(body) {
|
|
308
|
+
this.#parsedBody = body;
|
|
309
|
+
this.#merged = undefined; // reset merged cache
|
|
310
|
+
}
|
|
311
|
+
#ensureParsedBody() {
|
|
312
|
+
if (this.#parsedBody !== undefined)
|
|
313
|
+
return;
|
|
314
|
+
const raw = this.#raw.body;
|
|
315
|
+
if (!raw || raw.length === 0) {
|
|
316
|
+
this.#parsedBody = {};
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
try {
|
|
320
|
+
const parsed = JSON.parse(raw);
|
|
321
|
+
this.#parsedBody = isPlainObject(parsed) ? parsed : { _body: parsed };
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
this.#parsedBody = {};
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/** Parse a query string (key=value&key2=value2) into an object. */
|
|
329
|
+
/**
|
|
330
|
+
* Test whether an IPv4 address is within a CIDR range. Bare IP entries
|
|
331
|
+
* (`10.0.0.42`) are accepted as `/32`. IPv6 falls back to string equality
|
|
332
|
+
* — a full v6 implementation isn't required by the current security tests.
|
|
333
|
+
*/
|
|
334
|
+
/**
|
|
335
|
+
* Type guard for plain JSON-decoded objects. Excludes `null` (which is
|
|
336
|
+
* `typeof === 'object'`) and arrays so consumers can index by string key
|
|
337
|
+
* without a separate runtime check.
|
|
338
|
+
*/
|
|
339
|
+
function isPlainObject(value) {
|
|
340
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Decode a percent-encoded segment without throwing on malformed input.
|
|
344
|
+
* Browsers happily send `q=%E0%A4%A` (truncated UTF-8 sequences) — refusing
|
|
345
|
+
* the whole request would let any client knock the route handler offline.
|
|
346
|
+
*/
|
|
347
|
+
function safeDecode(value) {
|
|
348
|
+
try {
|
|
349
|
+
return decodeURIComponent(value);
|
|
350
|
+
}
|
|
351
|
+
catch {
|
|
352
|
+
return value;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
function parseQueryString(qs) {
|
|
356
|
+
if (!qs)
|
|
357
|
+
return {};
|
|
358
|
+
const result = {};
|
|
359
|
+
for (const pair of qs.split('&')) {
|
|
360
|
+
const eqIdx = pair.indexOf('=');
|
|
361
|
+
if (eqIdx === -1) {
|
|
362
|
+
result[safeDecode(pair)] = '';
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
const key = safeDecode(pair.slice(0, eqIdx));
|
|
366
|
+
const value = safeDecode(pair.slice(eqIdx + 1));
|
|
367
|
+
result[key] = value;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return result;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Parse an Accept-style header (Accept, Accept-Language, Accept-Encoding…)
|
|
374
|
+
* into entries sorted by descending q-value, with the client's original
|
|
375
|
+
* order as a stable tiebreaker. Entries with `q=0` are dropped (RFC 7231:
|
|
376
|
+
* "the value 0 means not acceptable"). A bare wildcard entry is preserved.
|
|
377
|
+
*/
|
|
378
|
+
function parseAcceptHeader(header) {
|
|
379
|
+
const entries = [];
|
|
380
|
+
let index = 0;
|
|
381
|
+
for (const raw of header.split(',')) {
|
|
382
|
+
const part = raw.trim();
|
|
383
|
+
if (!part)
|
|
384
|
+
continue;
|
|
385
|
+
const [valueRaw, ...params] = part.split(';');
|
|
386
|
+
const value = (valueRaw ?? '').trim().toLowerCase();
|
|
387
|
+
if (!value)
|
|
388
|
+
continue;
|
|
389
|
+
let q = 1;
|
|
390
|
+
for (const param of params) {
|
|
391
|
+
const [k, v] = param.split('=');
|
|
392
|
+
if ((k ?? '').trim().toLowerCase() === 'q') {
|
|
393
|
+
const parsed = Number.parseFloat((v ?? '').trim());
|
|
394
|
+
if (Number.isFinite(parsed))
|
|
395
|
+
q = parsed;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
if (q <= 0)
|
|
399
|
+
continue;
|
|
400
|
+
entries.push({ value, q, index });
|
|
401
|
+
index += 1;
|
|
402
|
+
}
|
|
403
|
+
entries.sort((a, b) => b.q - a.q || a.index - b.index);
|
|
404
|
+
return entries;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Match an Accept entry value (already lowercased) against an offered
|
|
408
|
+
* type. Honours short aliases (`json` ↔ `application/json`, `html` ↔
|
|
409
|
+
* `text/html`, `xml` ↔ any subtype containing `xml`) and the full
|
|
410
|
+
* wildcard (matches anything). A `type/<wildcard>` entry matches any
|
|
411
|
+
* subtype with the same primary type.
|
|
412
|
+
*/
|
|
413
|
+
function acceptMatches(entry, offered) {
|
|
414
|
+
if (entry === '*/*' || entry === '*')
|
|
415
|
+
return true;
|
|
416
|
+
const o = offered.trim().toLowerCase();
|
|
417
|
+
if (entry === o)
|
|
418
|
+
return true;
|
|
419
|
+
// Expand short aliases to their canonical media-type so the wildcard
|
|
420
|
+
// and exact-match checks below see the full type.
|
|
421
|
+
const expanded = expandAlias(o);
|
|
422
|
+
if (expanded && entry === expanded)
|
|
423
|
+
return true;
|
|
424
|
+
if (o === 'xml' && entry.includes('xml'))
|
|
425
|
+
return true;
|
|
426
|
+
// type/<wildcard> entry (e.g. `text/*` matches `text/html`).
|
|
427
|
+
if (entry.endsWith('/*')) {
|
|
428
|
+
const prefix = entry.slice(0, -1); // keep trailing slash
|
|
429
|
+
if (expanded?.startsWith(prefix))
|
|
430
|
+
return true;
|
|
431
|
+
return o.startsWith(prefix);
|
|
432
|
+
}
|
|
433
|
+
return false;
|
|
434
|
+
}
|
|
435
|
+
function expandAlias(short) {
|
|
436
|
+
if (short === 'json')
|
|
437
|
+
return 'application/json';
|
|
438
|
+
if (short === 'html')
|
|
439
|
+
return 'text/html';
|
|
440
|
+
if (short === 'text')
|
|
441
|
+
return 'text/plain';
|
|
442
|
+
if (short === 'form')
|
|
443
|
+
return 'application/x-www-form-urlencoded';
|
|
444
|
+
if (short === 'multipart')
|
|
445
|
+
return 'multipart/form-data';
|
|
446
|
+
return null;
|
|
447
|
+
}
|
|
448
|
+
function bucketByQ(entries) {
|
|
449
|
+
const buckets = [];
|
|
450
|
+
let current = [];
|
|
451
|
+
let lastQ = Number.POSITIVE_INFINITY;
|
|
452
|
+
for (const entry of entries) {
|
|
453
|
+
if (entry.q !== lastQ) {
|
|
454
|
+
if (current.length > 0)
|
|
455
|
+
buckets.push(current);
|
|
456
|
+
current = [];
|
|
457
|
+
lastQ = entry.q;
|
|
458
|
+
}
|
|
459
|
+
current.push(entry);
|
|
460
|
+
}
|
|
461
|
+
if (current.length > 0)
|
|
462
|
+
buckets.push(current);
|
|
463
|
+
return buckets;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Language tag match. Returns true when the Accept-Language entry equals
|
|
467
|
+
* the offered tag (case-insensitive), or when the entry's primary subtag
|
|
468
|
+
* matches the offered tag (RFC 4647 basic filtering: `en` matches `en-US`
|
|
469
|
+
* but not vice versa). Wildcard `*` matches anything.
|
|
470
|
+
*/
|
|
471
|
+
function languageMatches(entry, offered) {
|
|
472
|
+
if (entry === '*')
|
|
473
|
+
return true;
|
|
474
|
+
const o = offered.trim().toLowerCase();
|
|
475
|
+
if (entry === o)
|
|
476
|
+
return true;
|
|
477
|
+
if (entry.startsWith(`${o}-`))
|
|
478
|
+
return true;
|
|
479
|
+
const primary = entry.split('-')[0];
|
|
480
|
+
if (primary && primary === o.split('-')[0])
|
|
481
|
+
return true;
|
|
482
|
+
return false;
|
|
483
|
+
}
|
|
484
|
+
//# sourceMappingURL=Request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Request.js","sourceRoot":"","sources":["../../src/http/Request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response — accumulates HTTP response state with a fluent API.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the same { status, headers, body } wire format expected by the NAPI layer.
|
|
5
|
+
* Provides AdonisJS-compatible methods: json(), send(), status(), header(), etc.
|
|
6
|
+
*
|
|
7
|
+
* @implements FR21
|
|
8
|
+
*/
|
|
9
|
+
import type { RedirectBuilder } from './RedirectBuilder.js';
|
|
10
|
+
import { type SseStream, type SseStreamOptions, type StreamBackend } from './SseStream.js';
|
|
11
|
+
export declare class Response {
|
|
12
|
+
#private;
|
|
13
|
+
/**
|
|
14
|
+
* CSP nonce for this request (AdonisJS idiom: `response.nonce`). Seeded by
|
|
15
|
+
* the `@c9up/blackhole` middleware when the CSP uses `@nonce`; `undefined`
|
|
16
|
+
* otherwise. Also published to `ctx.store` as `cspNonce` for templating.
|
|
17
|
+
*/
|
|
18
|
+
nonce?: string;
|
|
19
|
+
/** Set the HTTP status code. Chainable. */
|
|
20
|
+
status(code: number): this;
|
|
21
|
+
/** Set status only if not already set (still 200). */
|
|
22
|
+
safeStatus(code: number): this;
|
|
23
|
+
/** Set a response header. Chainable. */
|
|
24
|
+
header(key: string, value: string): this;
|
|
25
|
+
/** Append to a response header (for multi-value like Set-Cookie). */
|
|
26
|
+
append(key: string, value: string): this;
|
|
27
|
+
/** Remove a response header. */
|
|
28
|
+
removeHeader(key: string): this;
|
|
29
|
+
/** Set the Content-Type header. Chainable. */
|
|
30
|
+
type(contentType: string): this;
|
|
31
|
+
/** Send a JSON response. Sets content-type and stringifies. */
|
|
32
|
+
json(data: unknown): void;
|
|
33
|
+
/** Send a response body. Auto-detects content type if not set. */
|
|
34
|
+
send(data: unknown): void;
|
|
35
|
+
/**
|
|
36
|
+
* Send a binary body as-is. Encodes to base64 across the NAPI bridge
|
|
37
|
+
* with the `x-ream-body-encoding: base64` marker so the Rust HTTP
|
|
38
|
+
* layer decodes it before writing to the socket. The marker header is
|
|
39
|
+
* stripped server-side and never leaks to the client.
|
|
40
|
+
*
|
|
41
|
+
* Use this for any non-UTF-8 payload (images, PDFs, archives, etc.) —
|
|
42
|
+
* `send()` auto-routes Buffers here, but call directly when intent is
|
|
43
|
+
* unambiguous.
|
|
44
|
+
*/
|
|
45
|
+
sendBuffer(buffer: Buffer): void;
|
|
46
|
+
/** Send 204 No Content. */
|
|
47
|
+
noContent(): void;
|
|
48
|
+
/** Get a redirect builder. */
|
|
49
|
+
redirect(): RedirectBuilder;
|
|
50
|
+
/** @internal Set the redirect builder factory (injected by HttpContext). */
|
|
51
|
+
setRedirectFactory(factory: () => RedirectBuilder): void;
|
|
52
|
+
/** @internal Wire the SSE backend (HyperServer NAPI). Injected by HttpKernel. */
|
|
53
|
+
setStreamBackend(backend: StreamBackend): void;
|
|
54
|
+
/**
|
|
55
|
+
* Open a Server-Sent Events stream. The returned `SseStream` lets the
|
|
56
|
+
* handler push named events for as long as the client stays
|
|
57
|
+
* connected. Headers are pre-set to the SSE wire format; the host
|
|
58
|
+
* router serializes the response with the reserved stream id so the
|
|
59
|
+
* Rust HyperServer keeps the connection open.
|
|
60
|
+
*
|
|
61
|
+
* const sse = await ctx.response.sse()
|
|
62
|
+
* sse.send('connected', { uid: caller.id })
|
|
63
|
+
* onTaskAssigned((evt) => sse.send('task.assigned', evt))
|
|
64
|
+
*
|
|
65
|
+
* Throws `STREAMING_UNSUPPORTED` if the underlying HyperServer host
|
|
66
|
+
* does not implement the streaming NAPI (e.g. a mock server in unit
|
|
67
|
+
* tests). The host capability is opt-in: implement
|
|
68
|
+
* `registerStream`/`writeStream`/`closeStream`/`onStreamDisconnect`
|
|
69
|
+
* to participate.
|
|
70
|
+
*/
|
|
71
|
+
sse(options?: SseStreamOptions): Promise<SseStream>;
|
|
72
|
+
/** Set a response cookie. */
|
|
73
|
+
cookie(name: string, value: string, options?: {
|
|
74
|
+
maxAge?: number;
|
|
75
|
+
path?: string;
|
|
76
|
+
httpOnly?: boolean;
|
|
77
|
+
secure?: boolean;
|
|
78
|
+
sameSite?: 'lax' | 'strict' | 'none';
|
|
79
|
+
}): this;
|
|
80
|
+
/** @internal Get the accumulated status code. */
|
|
81
|
+
getStatus(): number;
|
|
82
|
+
/** @internal Get all accumulated headers (Set-Cookie as separate entries joined by newline). */
|
|
83
|
+
getHeaders(): Record<string, string>;
|
|
84
|
+
/**
|
|
85
|
+
* Read a single accumulated response header by name (case-insensitive).
|
|
86
|
+
* Returns `undefined` when not set — used by middleware that conditionally
|
|
87
|
+
* inspects the outgoing content-type before sanitisation.
|
|
88
|
+
*/
|
|
89
|
+
getHeader(name: string): string | undefined;
|
|
90
|
+
/** @internal Get the accumulated body string. */
|
|
91
|
+
getBody(): string;
|
|
92
|
+
/** @internal Check if response has been finalized. */
|
|
93
|
+
isFinished(): boolean;
|
|
94
|
+
/** @internal Set body directly (used by redirect, exception handler). */
|
|
95
|
+
setBody(body: string): void;
|
|
96
|
+
/**
|
|
97
|
+
* @internal Streaming-response handle, set by `sse()`. The host
|
|
98
|
+
* router forwards this id to the Rust HyperServer so the connection
|
|
99
|
+
* stays open and chunks flow from the JS-side writer.
|
|
100
|
+
*/
|
|
101
|
+
getStreamId(): string | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* @internal Tear down a stream the handler opened via `sse()` but
|
|
104
|
+
* then abandoned by throwing. Closes the backend registry slot and
|
|
105
|
+
* clears the stream id + finished flag so the kernel's error path
|
|
106
|
+
* serializes a normal buffered error response instead of emitting
|
|
107
|
+
* `streamId` alongside an error body (which would leave the
|
|
108
|
+
* HyperServer feeding a dead/empty stream forever). Best-effort: a
|
|
109
|
+
* closeStream failure is swallowed — the slot's TTL/disconnect will
|
|
110
|
+
* reclaim it.
|
|
111
|
+
*/
|
|
112
|
+
abortStream(): Promise<void>;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=Response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Response.d.ts","sourceRoot":"","sources":["../../src/http/Response.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAA;AAgBvB,qBAAa,QAAQ;;IAUnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAId,2CAA2C;IAC3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK1B,sDAAsD;IACtD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS9B,wCAAwC;IACxC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxC,qEAAqE;IACrE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAgBxC,gCAAgC;IAChC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK/B,8CAA8C;IAC9C,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAU/B,+DAA+D;IAC/D,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAMzB,kEAAkE;IAClE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAwBzB;;;;;;;;;OASG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAShC,2BAA2B;IAC3B,SAAS,IAAI,IAAI;IAQjB,8BAA8B;IAC9B,QAAQ,IAAI,eAAe;IAS3B,4EAA4E;IAC5E,kBAAkB,CAAC,OAAO,EAAE,MAAM,eAAe,GAAG,IAAI;IAIxD,iFAAiF;IACjF,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAM9C;;;;;;;;;;;;;;;;OAgBG;IACG,GAAG,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IA2BzD,6BAA6B;IAC7B,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;KACrC,GACA,IAAI;IAkCP,iDAAiD;IACjD,SAAS,IAAI,MAAM;IAInB,gGAAgG;IAChG,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IASpC;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C,iDAAiD;IACjD,OAAO,IAAI,MAAM;IAIjB,sDAAsD;IACtD,UAAU,IAAI,OAAO;IAIrB,yEAAyE;IACzE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B;;;;OAIG;IACH,WAAW,IAAI,MAAM,GAAG,SAAS;IAIjC;;;;;;;;;OASG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAanC"}
|