@c9up/ream 0.1.25 → 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ConfigLoader.d.ts +46 -5
- package/dist/ConfigLoader.d.ts.map +1 -1
- package/dist/ConfigLoader.js +60 -9
- package/dist/ConfigLoader.js.map +1 -1
- package/dist/HttpKernel.d.ts.map +1 -1
- package/dist/HttpKernel.js +46 -6
- package/dist/HttpKernel.js.map +1 -1
- package/dist/Ignitor.d.ts.map +1 -1
- package/dist/Ignitor.js +21 -3
- package/dist/Ignitor.js.map +1 -1
- package/dist/container/Container.d.ts +23 -3
- package/dist/container/Container.d.ts.map +1 -1
- package/dist/container/Container.js +139 -60
- package/dist/container/Container.js.map +1 -1
- package/dist/env/Env.d.ts +29 -4
- package/dist/env/Env.d.ts.map +1 -1
- package/dist/env/Env.js +27 -4
- package/dist/env/Env.js.map +1 -1
- package/dist/env/Secret.d.ts +11 -0
- package/dist/env/Secret.d.ts.map +1 -0
- package/dist/env/Secret.js +36 -0
- package/dist/env/Secret.js.map +1 -0
- package/dist/env/interpolate.d.ts +26 -0
- package/dist/env/interpolate.d.ts.map +1 -0
- package/dist/env/interpolate.js +48 -0
- package/dist/env/interpolate.js.map +1 -0
- package/dist/env/loadEnvFiles.d.ts.map +1 -1
- package/dist/env/loadEnvFiles.js +14 -4
- package/dist/env/loadEnvFiles.js.map +1 -1
- package/dist/env/schema.d.ts +23 -6
- package/dist/env/schema.d.ts.map +1 -1
- package/dist/env/schema.js +67 -33
- package/dist/env/schema.js.map +1 -1
- package/dist/events/Emitter.d.ts +1 -1
- package/dist/events/Emitter.d.ts.map +1 -1
- package/dist/events/Emitter.js +1 -1
- package/dist/events/Emitter.js.map +1 -1
- package/dist/events/EventsProvider.d.ts +2 -2
- package/dist/events/EventsProvider.d.ts.map +1 -1
- package/dist/events/EventsProvider.js +3 -3
- package/dist/events/EventsProvider.js.map +1 -1
- package/dist/graphql/GraphQLEngine.d.ts +1 -1
- package/dist/graphql/GraphQLEngine.d.ts.map +1 -1
- package/dist/graphql/GraphQLEngine.js +2 -2
- package/dist/graphql/GraphQLEngine.js.map +1 -1
- package/dist/graphql/GraphQLProvider.d.ts.map +1 -1
- package/dist/graphql/GraphQLProvider.js +7 -3
- package/dist/graphql/GraphQLProvider.js.map +1 -1
- package/dist/http/Exception.d.ts +63 -1
- package/dist/http/Exception.d.ts.map +1 -1
- package/dist/http/Exception.js +185 -48
- package/dist/http/Exception.js.map +1 -1
- package/dist/http/HttpContext.d.ts +53 -7
- package/dist/http/HttpContext.d.ts.map +1 -1
- package/dist/http/HttpContext.js +56 -15
- package/dist/http/HttpContext.js.map +1 -1
- package/dist/http/RedirectBuilder.d.ts.map +1 -1
- package/dist/http/RedirectBuilder.js +4 -1
- package/dist/http/RedirectBuilder.js.map +1 -1
- package/dist/http/Request.d.ts +141 -10
- package/dist/http/Request.d.ts.map +1 -1
- package/dist/http/Request.js +244 -34
- package/dist/http/Request.js.map +1 -1
- package/dist/http/Response.d.ts +176 -9
- package/dist/http/Response.d.ts.map +1 -1
- package/dist/http/Response.js +404 -16
- package/dist/http/Response.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/middleware/Pipeline.js +1 -1
- package/dist/middleware/Pipeline.js.map +1 -1
- package/dist/openapi/OpenApiProvider.js +4 -4
- package/dist/openapi/OpenApiProvider.js.map +1 -1
- package/dist/router/Router.d.ts +223 -31
- package/dist/router/Router.d.ts.map +1 -1
- package/dist/router/Router.js +520 -102
- package/dist/router/Router.js.map +1 -1
- package/dist/rpc/RpcProvider.d.ts +1 -0
- package/dist/rpc/RpcProvider.d.ts.map +1 -1
- package/dist/rpc/RpcProvider.js +7 -3
- package/dist/rpc/RpcProvider.js.map +1 -1
- package/dist/rpc/RpcRouter.d.ts +2 -2
- package/dist/rpc/RpcRouter.d.ts.map +1 -1
- package/dist/rpc/RpcRouter.js +5 -4
- package/dist/rpc/RpcRouter.js.map +1 -1
- package/dist/scheduler/ScheduleProvider.d.ts.map +1 -1
- package/dist/scheduler/ScheduleProvider.js +7 -15
- package/dist/scheduler/ScheduleProvider.js.map +1 -1
- package/dist/server/Server.d.ts +17 -4
- package/dist/server/Server.d.ts.map +1 -1
- package/dist/server/Server.js +41 -7
- package/dist/server/Server.js.map +1 -1
- package/dist/session/SessionMiddleware.js +3 -3
- package/dist/session/SessionMiddleware.js.map +1 -1
- package/dist/storage/StaticProvider.js +1 -1
- package/dist/storage/StaticProvider.js.map +1 -1
- package/dist/testing/RequestBuilder.d.ts +60 -0
- package/dist/testing/RequestBuilder.d.ts.map +1 -1
- package/dist/testing/RequestBuilder.js +180 -1
- package/dist/testing/RequestBuilder.js.map +1 -1
- package/dist/testing/TestClient.d.ts +22 -1
- package/dist/testing/TestClient.d.ts.map +1 -1
- package/dist/testing/TestClient.js +40 -0
- package/dist/testing/TestClient.js.map +1 -1
- package/dist/utils/Macroable.d.ts +30 -0
- package/dist/utils/Macroable.d.ts.map +1 -0
- package/dist/utils/Macroable.js +43 -0
- package/dist/utils/Macroable.js.map +1 -0
- package/dist/utils/inflect.d.ts +17 -0
- package/dist/utils/inflect.d.ts.map +1 -0
- package/dist/utils/inflect.js +32 -0
- package/dist/utils/inflect.js.map +1 -0
- package/dist/utils/objectPath.d.ts +57 -0
- package/dist/utils/objectPath.d.ts.map +1 -0
- package/dist/utils/objectPath.js +141 -0
- package/dist/utils/objectPath.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 +6 -1
- 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/src/ConfigLoader.ts +72 -9
- package/src/HttpKernel.ts +53 -15
- package/src/Ignitor.ts +24 -3
- package/src/container/Container.ts +145 -61
- package/src/env/Env.ts +49 -5
- package/src/env/Secret.ts +41 -0
- package/src/env/interpolate.ts +54 -0
- package/src/env/loadEnvFiles.ts +12 -4
- package/src/env/schema.ts +109 -35
- package/src/events/Emitter.ts +2 -2
- package/src/events/EventsProvider.ts +5 -5
- package/src/graphql/GraphQLEngine.ts +4 -4
- package/src/graphql/GraphQLProvider.ts +7 -3
- package/src/http/Exception.ts +214 -37
- package/src/http/HttpContext.ts +87 -18
- package/src/http/RedirectBuilder.ts +4 -1
- package/src/http/Request.ts +264 -34
- package/src/http/Response.ts +478 -27
- package/src/index.ts +11 -2
- package/src/middleware/Pipeline.ts +1 -1
- package/src/openapi/OpenApiProvider.ts +4 -4
- package/src/router/Router.ts +631 -113
- package/src/rpc/RpcProvider.ts +6 -2
- package/src/rpc/RpcRouter.ts +7 -6
- package/src/scheduler/ScheduleProvider.ts +7 -15
- package/src/server/Server.ts +49 -10
- package/src/session/SessionMiddleware.ts +4 -4
- package/src/storage/StaticProvider.ts +1 -1
- package/src/testing/RequestBuilder.ts +218 -1
- package/src/testing/TestClient.ts +57 -1
- package/src/utils/Macroable.ts +54 -0
- package/src/utils/inflect.ts +29 -0
- package/src/utils/objectPath.ts +142 -0
- package/dist/decorators/Lazy.d.ts +0 -19
- package/dist/decorators/Lazy.d.ts.map +0 -1
- package/dist/decorators/Lazy.js +0 -53
- package/dist/decorators/Lazy.js.map +0 -1
- package/src/decorators/Lazy.ts +0 -57
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpContext.d.ts","sourceRoot":"","sources":["../../src/http/HttpContext.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,WAAW,SAAS;IACxB,
|
|
1
|
+
{"version":3,"file":"HttpContext.d.ts","sourceRoot":"","sources":["../../src/http/HttpContext.ts"],"names":[],"mappings":"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"}
|
package/dist/http/HttpContext.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* @implements FR21
|
|
8
8
|
*/
|
|
9
9
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
10
|
+
import { Macroable } from '../utils/Macroable.js';
|
|
10
11
|
import { RedirectBuilder } from './RedirectBuilder.js';
|
|
11
12
|
import { Request } from './Request.js';
|
|
12
13
|
import { Response } from './Response.js';
|
|
@@ -25,22 +26,20 @@ function consoleLogger(correlationId) {
|
|
|
25
26
|
fatal: (m, d) => write('fatal', m, d),
|
|
26
27
|
};
|
|
27
28
|
}
|
|
28
|
-
/**
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
base = undefined;
|
|
36
|
-
}
|
|
29
|
+
/**
|
|
30
|
+
* Build a request-scoped logger from the app's base logger, or fall back to
|
|
31
|
+
* console. The base logger is resolved (async) once by HttpKernel and injected
|
|
32
|
+
* via {@link HttpContext.setBaseLogger}; child-scoping here stays synchronous
|
|
33
|
+
* so `ctx.logger` remains a plain getter.
|
|
34
|
+
*/
|
|
35
|
+
function resolveRequestLogger(base, correlationId) {
|
|
37
36
|
if (!base)
|
|
38
37
|
return consoleLogger(correlationId);
|
|
39
38
|
return typeof base.child === 'function' ? base.child({ correlationId }) : base;
|
|
40
39
|
}
|
|
41
40
|
/** Ambient per-request context store (AdonisJS `HttpContext` ALS accessor). */
|
|
42
41
|
const httpContextStorage = new AsyncLocalStorage();
|
|
43
|
-
export class HttpContext {
|
|
42
|
+
export class HttpContext extends Macroable {
|
|
44
43
|
/**
|
|
45
44
|
* @internal Run `fn` with `ctx` as the ambient HttpContext, so code deep in
|
|
46
45
|
* the call stack can reach it via {@link HttpContext.get}/{@link getOrFail}
|
|
@@ -62,6 +61,14 @@ export class HttpContext {
|
|
|
62
61
|
}
|
|
63
62
|
return ctx;
|
|
64
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Run `fn` with the ambient HttpContext temporarily cleared (AdonisJS
|
|
66
|
+
* `HttpContext.runOutsideContext`) — e.g. to detach background work so it
|
|
67
|
+
* doesn't inherit and pin the request's context.
|
|
68
|
+
*/
|
|
69
|
+
static runOutsideContext(fn) {
|
|
70
|
+
return httpContextStorage.exit(fn);
|
|
71
|
+
}
|
|
65
72
|
/** Unique request/correlation ID. */
|
|
66
73
|
id;
|
|
67
74
|
/** Typed HTTP request. */
|
|
@@ -73,7 +80,7 @@ export class HttpContext {
|
|
|
73
80
|
/** Information about the matched route. */
|
|
74
81
|
route;
|
|
75
82
|
/** Authentication state — populated by auth middleware. */
|
|
76
|
-
auth = {
|
|
83
|
+
auth = { isAuthenticated: false };
|
|
77
84
|
/**
|
|
78
85
|
* Request locale — the primary subtag of the first `Accept-Language` entry
|
|
79
86
|
* (e.g. `fr-CH,fr;q=0.9` → `fr`), defaulting to `en`. Middleware (or i18n)
|
|
@@ -111,26 +118,60 @@ export class HttpContext {
|
|
|
111
118
|
containerResolver;
|
|
112
119
|
/** Lazily-built per-request logger (see {@link logger}). */
|
|
113
120
|
#logger;
|
|
121
|
+
/** App base logger, resolved once (async) by HttpKernel and injected. */
|
|
122
|
+
#baseLogger;
|
|
114
123
|
/** Route URL resolver for redirect().toRoute(). */
|
|
115
124
|
#routeUrlResolver;
|
|
116
125
|
/**
|
|
117
|
-
* Per-request logger (AdonisJS `ctx.logger`)
|
|
118
|
-
*
|
|
119
|
-
*
|
|
126
|
+
* Per-request logger (AdonisJS `ctx.logger`) — the injected app logger (e.g.
|
|
127
|
+
* `@c9up/spectrum`) child-scoped to this request's `id`, or a console logger
|
|
128
|
+
* when none is registered. Built once, on first access.
|
|
120
129
|
*/
|
|
121
130
|
get logger() {
|
|
122
131
|
if (!this.#logger) {
|
|
123
|
-
this.#logger = resolveRequestLogger(this
|
|
132
|
+
this.#logger = resolveRequestLogger(this.#baseLogger, this.id);
|
|
124
133
|
}
|
|
125
134
|
return this.#logger;
|
|
126
135
|
}
|
|
136
|
+
/** @internal Inject the app base logger (resolved async by HttpKernel). */
|
|
137
|
+
setBaseLogger(logger) {
|
|
138
|
+
this.#baseLogger = logger;
|
|
139
|
+
}
|
|
140
|
+
/** @internal Inject the APP_KEY cookie signer into request + response (from HttpKernel). */
|
|
141
|
+
setCookieSigner(signer) {
|
|
142
|
+
this.response.setCookieSigner(signer);
|
|
143
|
+
this.request.setCookieSigner(signer);
|
|
144
|
+
}
|
|
145
|
+
/** @internal Inject the APP_KEY signed-URL helper into the request (from HttpKernel). */
|
|
146
|
+
setSignedUrl(signedUrl) {
|
|
147
|
+
this.request.setSignedUrl(signedUrl);
|
|
148
|
+
}
|
|
149
|
+
/** Subdomains of the request host (AdonisJS `ctx.subdomains`). */
|
|
150
|
+
get subdomains() {
|
|
151
|
+
return this.request.subdomains();
|
|
152
|
+
}
|
|
153
|
+
/** Stable identifier for the matched route (`METHOD-pattern`) — AdonisJS `ctx.routeKey`. */
|
|
154
|
+
get routeKey() {
|
|
155
|
+
return `${this.request.method()}-${this.route.pattern}`;
|
|
156
|
+
}
|
|
127
157
|
constructor(id, rawRequest, params, route, containerResolver) {
|
|
158
|
+
super();
|
|
128
159
|
this.id = id;
|
|
129
160
|
this.params = params;
|
|
130
161
|
this.route = route;
|
|
131
162
|
this.containerResolver = containerResolver;
|
|
132
163
|
this.request = new Request(rawRequest, params);
|
|
133
164
|
this.response = new Response();
|
|
165
|
+
// Give the response read access to the request (AdonisJS wires them too) —
|
|
166
|
+
// needed by `response.fresh()` for conditional-GET / ETag revalidation.
|
|
167
|
+
this.response.setRequest(this.request);
|
|
168
|
+
// And the reverse, so `request.fresh()`/`stale()` delegate to it, plus the
|
|
169
|
+
// matched-route info for `request.matchesRoute()`.
|
|
170
|
+
this.request.setResponse(this.response);
|
|
171
|
+
this.request.setRouteInfo({ name: route.name, pattern: route.pattern });
|
|
172
|
+
// APP_KEY-backed encryption / signed-URL services + the base logger are
|
|
173
|
+
// resolved asynchronously by HttpKernel and injected via the setters above
|
|
174
|
+
// (the container is async now, so a constructor can't resolve them itself).
|
|
134
175
|
this.locale = parseAcceptLanguage(this.request.header('accept-language')) ?? 'en';
|
|
135
176
|
// Wire redirect builder with request context
|
|
136
177
|
this.response.setRedirectFactory(() => new RedirectBuilder(this.response, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpContext.js","sourceRoot":"","sources":["../../src/http/HttpContext.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"HttpContext.js","sourceRoot":"","sources":["../../src/http/HttpContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedirectBuilder.d.ts","sourceRoot":"","sources":["../../src/http/RedirectBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"RedirectBuilder.d.ts","sourceRoot":"","sources":["../../src/http/RedirectBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAA;AAiBxF,qBAAa,eAAe;;gBAUxB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;KACpC;IAQH,gCAAgC;IAChC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK1B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IASzC,gDAAgD;IAChD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO1B,iCAAiC;IACjC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ5D;;;;OAIG;IACH,IAAI,CAAC,QAAQ,SAAM,GAAG,IAAI;CAoB3B"}
|
|
@@ -9,7 +9,10 @@
|
|
|
9
9
|
* response.redirect().toRoute('posts.show', { id: '42' })
|
|
10
10
|
*/
|
|
11
11
|
function isSameOriginOrRelative(referer, requestUrl) {
|
|
12
|
-
|
|
12
|
+
// A relative path is trusted only when it starts with a single "/" and has no
|
|
13
|
+
// backslash: browsers normalise "\" to "/", so "/\evil.com" would become the
|
|
14
|
+
// protocol-relative "//evil.com" that a lone `!startsWith("//")` check misses.
|
|
15
|
+
if (referer.startsWith('/') && !referer.startsWith('//') && !referer.includes('\\'))
|
|
13
16
|
return true;
|
|
14
17
|
if (!requestUrl)
|
|
15
18
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedirectBuilder.js","sourceRoot":"","sources":["../../src/http/RedirectBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,SAAS,sBAAsB,CAAC,OAAe,EAAE,UAAmB;IAClE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"RedirectBuilder.js","sourceRoot":"","sources":["../../src/http/RedirectBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,SAAS,sBAAsB,CAAC,OAAe,EAAE,UAAmB;IAClE,8EAA8E;IAC9E,6EAA6E;IAC7E,+EAA+E;IAC/E,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAChG,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAA;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;QAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAA;QAC/B,OAAO,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,MAAM,OAAO,eAAe;IAC1B,SAAS,CAAU;IACnB,OAAO,GAAG,GAAG,CAAA;IACb,GAAG,GAAkC,IAAI,CAAA;IACzC,UAAU,GAAG,KAAK,CAAA;IAClB,WAAW,CAAS;IACpB,eAAe,CAAS;IACxB,iBAAiB,CAAmB;IAEpC,YACE,QAAkB,EAClB,OAIC;QAED,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,UAAU,CAAA;QACtC,IAAI,CAAC,eAAe,GAAG,OAAO,EAAE,cAAc,CAAA;QAC9C,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,gBAAgB,CAAA;IACpD,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2DAA2D;IAC3D,MAAM,CAAC,EAA2B;QAChC,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QACf,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACxB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,gDAAgD;IAChD,MAAM,CAAC,IAAY;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,iCAAiC;IACjC,OAAO,CAAC,IAAY,EAAE,MAA+B;QACnD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;QACvF,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,QAAQ,GAAG,GAAG;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAA;QACpC,IAAI,OAAO,IAAI,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,IAAI,EAAE,GAAG,EAAE,CAAA;QACX,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,EAAE,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC/C,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC3C,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QAC1D,CAAC;QACD,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAA;IAC/D,CAAC;CACF"}
|
package/dist/http/Request.d.ts
CHANGED
|
@@ -6,7 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @implements FR21
|
|
8
8
|
*/
|
|
9
|
+
import type { CookieSigner } from '../security/CookieSigner.js';
|
|
10
|
+
import type { SignedUrl } from '../security/SignedUrl.js';
|
|
9
11
|
import type { Dict } from '../types/helpers.js';
|
|
12
|
+
import { Macroable } from '../utils/Macroable.js';
|
|
10
13
|
export interface RawRequest {
|
|
11
14
|
method: string;
|
|
12
15
|
path: string;
|
|
@@ -23,6 +26,12 @@ export interface RawRequest {
|
|
|
23
26
|
* `ip()` accessor falls back to legacy header parsing.
|
|
24
27
|
*/
|
|
25
28
|
ip?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Connection scheme as seen by the server (`http`/`https`), when the Rust
|
|
31
|
+
* layer ships it. Defaults to `http` in `protocol()` when absent; the
|
|
32
|
+
* `X-Forwarded-Proto` header only overrides it when trust-proxy is enabled.
|
|
33
|
+
*/
|
|
34
|
+
scheme?: 'http' | 'https';
|
|
26
35
|
/**
|
|
27
36
|
* Pre-parsed `multipart/form-data` payload — the HyperServer parses bodies
|
|
28
37
|
* server-side via `multer` and ships fields/files in this typed shape.
|
|
@@ -48,7 +57,7 @@ export interface RawRequest {
|
|
|
48
57
|
*/
|
|
49
58
|
cookies?: Dict;
|
|
50
59
|
}
|
|
51
|
-
export declare class Request {
|
|
60
|
+
export declare class Request extends Macroable {
|
|
52
61
|
#private;
|
|
53
62
|
/**
|
|
54
63
|
* CSRF token for this request (AdonisJS idiom: `request.csrfToken`). Seeded
|
|
@@ -56,9 +65,51 @@ export declare class Request {
|
|
|
56
65
|
* otherwise. Also published to `ctx.store` for templating helpers.
|
|
57
66
|
*/
|
|
58
67
|
csrfToken?: string;
|
|
68
|
+
/**
|
|
69
|
+
* `true` only when CSRF was enabled, the request method guarded, the route not
|
|
70
|
+
* excepted, AND the token validated for this request — set by the
|
|
71
|
+
* `@c9up/blackhole` middleware. Unlike {@link csrfToken} (seeded on every
|
|
72
|
+
* passing request, even when verification was skipped), this is the trustworthy
|
|
73
|
+
* "the request was CSRF-verified" signal a consumer reads to fail-close on
|
|
74
|
+
* state-changing routes. `undefined` when the middleware never ran.
|
|
75
|
+
*/
|
|
76
|
+
csrfProtected?: boolean;
|
|
59
77
|
constructor(raw: RawRequest, params?: Dict);
|
|
60
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* The HTTP method, honouring `_method` form spoofing when enabled (AdonisJS
|
|
80
|
+
* `method`). With spoofing enabled and a real POST, the `_method` field
|
|
81
|
+
* (`PUT`/`PATCH`/`DELETE`) overrides — the classic HTML-form workaround.
|
|
82
|
+
* Spoofing is OFF by default (opt in via {@link setMethodSpoofing}); routing
|
|
83
|
+
* always uses {@link intended}.
|
|
84
|
+
*/
|
|
61
85
|
method(): string;
|
|
86
|
+
/** The real HTTP method, ignoring any `_method` spoofing (AdonisJS `intended`). */
|
|
87
|
+
intended(): string;
|
|
88
|
+
/** @internal Give the request access to its response — wired by HttpContext (for `fresh()`). */
|
|
89
|
+
setResponse(response: {
|
|
90
|
+
fresh(): boolean;
|
|
91
|
+
}): void;
|
|
92
|
+
/** @internal Record the matched route — wired by HttpContext (for `matchesRoute()`). */
|
|
93
|
+
setRouteInfo(info: {
|
|
94
|
+
name?: string;
|
|
95
|
+
pattern: string;
|
|
96
|
+
}): void;
|
|
97
|
+
/**
|
|
98
|
+
* Whether the client's cached copy is still fresh (AdonisJS `fresh`) —
|
|
99
|
+
* delegates to the response's `ETag`/`If-None-Match` revalidation check, so a
|
|
100
|
+
* handler can answer `304 Not Modified`. False before the response is wired.
|
|
101
|
+
*/
|
|
102
|
+
fresh(): boolean;
|
|
103
|
+
/** The negation of {@link fresh} (AdonisJS `stale`). */
|
|
104
|
+
stale(): boolean;
|
|
105
|
+
/** True when the matched route's name or pattern equals `identifier` (AdonisJS `matchesRoute`). */
|
|
106
|
+
matchesRoute(identifier: string): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Enable/disable `_method` form spoofing (AdonisJS gates this behind the
|
|
109
|
+
* `allowMethodSpoofing` config; ream exposes it as an explicit opt-in, off by
|
|
110
|
+
* default, so an attacker can never silently rewrite a POST into a DELETE).
|
|
111
|
+
*/
|
|
112
|
+
setMethodSpoofing(enabled: boolean): void;
|
|
62
113
|
/** Request URL (path + query string). */
|
|
63
114
|
url(includeQs?: boolean): string;
|
|
64
115
|
/** Request path (without query string). */
|
|
@@ -80,6 +131,41 @@ export declare class Request {
|
|
|
80
131
|
* desired resolved value.
|
|
81
132
|
*/
|
|
82
133
|
ip(): string;
|
|
134
|
+
/**
|
|
135
|
+
* Enable/disable trusting proxy headers (`X-Forwarded-Proto`/`-Host`/`-For`)
|
|
136
|
+
* for `protocol()`/`host()`/`ips()`. OFF by default — turning it on when the
|
|
137
|
+
* app is NOT behind a trusted proxy lets clients spoof their scheme/host/IP,
|
|
138
|
+
* so it's an explicit opt-in (same stance as {@link setMethodSpoofing}).
|
|
139
|
+
*/
|
|
140
|
+
setTrustProxy(enabled: boolean): void;
|
|
141
|
+
/**
|
|
142
|
+
* The request host including port (AdonisJS `host`). Honours
|
|
143
|
+
* `X-Forwarded-Host` ONLY when trust-proxy is enabled; otherwise the `Host`
|
|
144
|
+
* header. Returns null when neither is present.
|
|
145
|
+
*/
|
|
146
|
+
host(): string | null;
|
|
147
|
+
/**
|
|
148
|
+
* The request protocol — `http` or `https` (AdonisJS `protocol`). Honours
|
|
149
|
+
* `X-Forwarded-Proto` only under trust-proxy; otherwise the connection scheme
|
|
150
|
+
* the Rust layer reported (defaulting to `http`).
|
|
151
|
+
*/
|
|
152
|
+
protocol(): string;
|
|
153
|
+
/** True when the request protocol is `https` (AdonisJS `secure`). */
|
|
154
|
+
secure(): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* The client IP chain (AdonisJS `ips`). Under trust-proxy, the parsed
|
|
157
|
+
* `X-Forwarded-For` list (left-most = original client); otherwise just the
|
|
158
|
+
* single resolved {@link ip}.
|
|
159
|
+
*/
|
|
160
|
+
ips(): string[];
|
|
161
|
+
/** The request hostname without port (AdonisJS `hostname`), or null. */
|
|
162
|
+
hostname(): string | null;
|
|
163
|
+
/**
|
|
164
|
+
* Subdomains of the hostname (AdonisJS `subdomains`). `offset` drops the
|
|
165
|
+
* registrable domain (default 2 → `example.com`); a leading `www` is removed.
|
|
166
|
+
* Empty for an IP host or a host with no subdomain.
|
|
167
|
+
*/
|
|
168
|
+
subdomains(offset?: number): string[];
|
|
83
169
|
/**
|
|
84
170
|
* Return all cookies sent on this request as a name → value map. The
|
|
85
171
|
* HyperServer parses the `Cookie:` header once via the `cookie` crate
|
|
@@ -88,14 +174,37 @@ export declare class Request {
|
|
|
88
174
|
* header — same tolerant `;`-split with quoted-value passthrough.
|
|
89
175
|
*/
|
|
90
176
|
cookies(): Dict;
|
|
91
|
-
/**
|
|
92
|
-
|
|
177
|
+
/** Inject the APP_KEY-backed cookie signer — wired by HttpContext. */
|
|
178
|
+
setCookieSigner(signer: CookieSigner): void;
|
|
179
|
+
/**
|
|
180
|
+
* Signed cookie value, verified with APP_KEY (AdonisJS default). Returns
|
|
181
|
+
* `defaultValue` (or null) when absent OR when the signature is invalid
|
|
182
|
+
* (tampered / not signed).
|
|
183
|
+
*/
|
|
184
|
+
cookie(name: string, defaultValue?: string): string | null;
|
|
185
|
+
/** Raw (unsigned) cookie value (AdonisJS `plainCookie`), or `defaultValue`/null when absent. */
|
|
186
|
+
plainCookie(name: string, defaultValue?: string): string | null;
|
|
187
|
+
/**
|
|
188
|
+
* Encrypted cookie value, decrypted with APP_KEY (AdonisJS `encryptedCookie`).
|
|
189
|
+
* Returns `defaultValue` (or null) when absent, undecryptable, or no
|
|
190
|
+
* encryption service.
|
|
191
|
+
*/
|
|
192
|
+
encryptedCookie(name: string, defaultValue?: string): string | null;
|
|
193
|
+
/** @internal Inject the APP_KEY-backed signed-URL helper — wired by HttpContext. */
|
|
194
|
+
setSignedUrl(signedUrl: SignedUrl): void;
|
|
195
|
+
/**
|
|
196
|
+
* Verify the request's signed-URL `signature` (AdonisJS `hasValidSignature`).
|
|
197
|
+
* Delegates to the {@link SignedUrl} helper, which recomputes the HMAC over
|
|
198
|
+
* the current path + query, rejects an expired `expires`, and checks the
|
|
199
|
+
* `purpose`. Returns false without an APP_KEY-backed signer.
|
|
200
|
+
*/
|
|
201
|
+
hasValidSignature(purpose?: string): boolean;
|
|
93
202
|
/** Get the raw body as a string (decoded from base64 if binary). */
|
|
94
203
|
raw(): string;
|
|
95
204
|
/** Get the raw body as a Buffer (preserves binary integrity for file uploads). */
|
|
96
205
|
rawBuffer(): Buffer;
|
|
97
|
-
/** Get a single request header (case-insensitive). */
|
|
98
|
-
header(key: string): string | undefined;
|
|
206
|
+
/** Get a single request header (case-insensitive), or `defaultValue` when absent. */
|
|
207
|
+
header(key: string, defaultValue?: string): string | undefined;
|
|
99
208
|
/** Get all request headers. */
|
|
100
209
|
headers(): Readonly<Dict>;
|
|
101
210
|
/** Get a single route parameter. */
|
|
@@ -106,14 +215,36 @@ export declare class Request {
|
|
|
106
215
|
qs(): Dict<unknown>;
|
|
107
216
|
/** Get the parsed request body. */
|
|
108
217
|
body(): unknown;
|
|
109
|
-
/**
|
|
218
|
+
/**
|
|
219
|
+
* Get a single input value from body or query string, by AdonisJS
|
|
220
|
+
* dot-notation (`input('user.address.city')`). Returns `defaultValue` when
|
|
221
|
+
* the path is absent (parity with `lodash.get`, reimplemented dependency-free).
|
|
222
|
+
*/
|
|
110
223
|
input<T = unknown>(key: string, defaultValue?: T): T;
|
|
111
224
|
/** Get all input (query string merged with body). */
|
|
112
225
|
all(): Dict<unknown>;
|
|
113
|
-
/**
|
|
114
|
-
|
|
115
|
-
|
|
226
|
+
/**
|
|
227
|
+
* The original request input, captured once and never mutated (AdonisJS
|
|
228
|
+
* `request.original`) — the basis for flash "old input" on validation errors.
|
|
229
|
+
*/
|
|
230
|
+
original(): Dict<unknown>;
|
|
231
|
+
/**
|
|
232
|
+
* Cherry-pick specific keys from input, honouring dot-notation for nested
|
|
233
|
+
* branches (`only(['user.id'])` → `{ user: { id } }`) — AdonisJS `only`
|
|
234
|
+
* (`lodash.pick`). Absent paths are skipped.
|
|
235
|
+
*/
|
|
236
|
+
only(keys: string[]): Dict<unknown>;
|
|
237
|
+
/**
|
|
238
|
+
* Get all input except specific keys, honouring dot-notation for nested
|
|
239
|
+
* branches — AdonisJS `except` (`lodash.omit`). Never mutates the input.
|
|
240
|
+
*/
|
|
116
241
|
except(keys: string[]): Dict<unknown>;
|
|
242
|
+
/**
|
|
243
|
+
* True when the request carries a body — a `content-length` above zero or a
|
|
244
|
+
* `transfer-encoding` header (AdonisJS `request.hasBody`). Lets a handler
|
|
245
|
+
* branch on "was anything sent" without parsing.
|
|
246
|
+
*/
|
|
247
|
+
hasBody(): boolean;
|
|
117
248
|
/** Check if the request content-type matches any of the given types. */
|
|
118
249
|
is(types: string[]): string | null;
|
|
119
250
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../src/http/Request.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../src/http/Request.ts"],"names":[],"mappings":"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"}
|