@rapidrest/service-core 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,6 +20,7 @@ import _ from "lodash-es";
20
20
  import { AuthMiddleware } from "../auth/AuthMiddleware.js";
21
21
  import { RateLimiter } from "../RateLimiter.js";
22
22
  import { NetUtils } from "../NetUtils.js";
23
+ import { verifyCsrfRequest, ensureCsrfCookie } from "../http/csrf/csrf.js";
23
24
  const { Config, Inject, Logger } = ObjectDecorators;
24
25
  /**
25
26
  * Provides a set of utilities for converting Route classes to HTTP middleware.
@@ -31,6 +32,8 @@ export class RouteUtils {
31
32
  this.apiSpec = new OpenApiSpec();
32
33
  this.trustedRoles = ["admin"];
33
34
  this.trustedProxies = [];
35
+ this.csrfConfig = { enabled: true };
36
+ this.corsConfig = {};
34
37
  }
35
38
  /**
36
39
  * Creates a middleware function that checks if the user has elevated privileges and if not
@@ -53,6 +56,46 @@ export class RouteUtils {
53
56
  return next(err);
54
57
  };
55
58
  }
59
+ /**
60
+ * Creates a middleware function that enforces CSRF protection for a state-changing request whose only
61
+ * credential came from the `jwt` cookie (`req.auth?.source === "cookie"`.
62
+ * See `JWTAuthResult`/`JWTStrategy`). A request authenticated via an `Authorization` header, API key,
63
+ * or query-string token never had that cookie automatically attached by the browser, so it was never
64
+ * exposed to this class of forgery and is left untouched here.
65
+ */
66
+ checkCsrf() {
67
+ return (req, res, next) => {
68
+ const options = {
69
+ enabled: this.csrfConfig?.enabled !== false,
70
+ cookieName: this.csrfConfig?.cookieName,
71
+ headerName: this.csrfConfig?.headerName,
72
+ maxAge: this.csrfConfig?.maxAge,
73
+ secure: this.csrfConfig?.secure,
74
+ allowedOrigins: Array.isArray(this.csrfConfig?.allowedOrigins)
75
+ ? this.csrfConfig.allowedOrigins
76
+ : Array.isArray(this.corsConfig?.origins)
77
+ ? this.corsConfig.origins
78
+ : [],
79
+ logger: this.logger,
80
+ };
81
+ // Always ensure the caller holds a cookie to echo back later, regardless of whether this
82
+ // particular request needs to be verified — unless the whole mechanism is switched off, in
83
+ // which case an operator who disabled this deliberately shouldn't see an unexplained cookie.
84
+ if (options.enabled !== false) {
85
+ ensureCsrfCookie(req, res, options);
86
+ }
87
+ if (req.auth?.source !== "cookie") {
88
+ return next();
89
+ }
90
+ try {
91
+ verifyCsrfRequest(req, options);
92
+ return next();
93
+ }
94
+ catch (err) {
95
+ return next(err);
96
+ }
97
+ };
98
+ }
56
99
  /**
57
100
  * Returns a canonical form of a request path for use in rate limit identifiers. The router percent-decodes
58
101
  * `:param` values, so `/clients/%61bc` and `/clients/abc` reach the same handler. Keying on the raw path would
@@ -207,6 +250,32 @@ export class RouteUtils {
207
250
  }
208
251
  };
209
252
  }
253
+ /**
254
+ * Creates a WebSocket-specific error-sanitizing middleware, appended as the last item in every
255
+ * `@WebSocket()` route's handler chain (see `registerRoute()`'s WS branch below). Mirrors what
256
+ * `Server.ts`'s `handleError()`/`serializeError()` already do for ordinary HTTP routes: an
257
+ * `ApiError`'s own status/code/message pass through unchanged (it's meant to reach the client),
258
+ * but anything else — a raw DB driver error, an unexpected throw from `RateLimiter`,
259
+ * `ACLUtils.findACL()`, or any other non-`ApiError` thrown by a middleware in the chain — is
260
+ * replaced with a generic internal error before `runChain()`'s own end-of-chain fallback can turn
261
+ * it into a response.
262
+ *
263
+ * This matters specifically for WebSocket routes because `runChain()`'s fallback response, for a
264
+ * WS route, ends up as the literal WebSocket close reason (`ws.close(1002, message)` — see
265
+ * `Router.ts`/`BunRouter.ts`'s `ws()` `open` handlers), visible to any client via the browser
266
+ * close event's `event.reason`. An ordinary HTTP route gets the same sanitization for free
267
+ * because `Server.ts` registers `handleError` as global middleware, which `registerRoute()`
268
+ * concatenates onto every HTTP route's own handler chain — but `app.ws()` is never given
269
+ * `globalMiddleware` (only the WS-specific chain built here), so WS routes need their own copy of
270
+ * the same safety net.
271
+ */
272
+ sanitizeWsError() {
273
+ return ((err, _req, _res, next) => {
274
+ next(err instanceof ApiError
275
+ ? err
276
+ : new ApiError(ApiErrors.INTERNAL_ERROR, 500, ApiErrorMessages.INTERNAL_ERROR));
277
+ });
278
+ }
210
279
  /**
211
280
  * Converts the given array of string or Function objects to functions bound to the given route object.
212
281
  *
@@ -344,6 +413,7 @@ export class RouteUtils {
344
413
  // 1. Rate Limiter
345
414
  // 2. Requires Elevation
346
415
  // 3. Auth Strategies
416
+ // 3a. CSRF Check
347
417
  // 4. Required Roles
348
418
  // 5. Required Scopes
349
419
  // 6. Required Permissions (Path Matching)
@@ -358,6 +428,7 @@ export class RouteUtils {
358
428
  if (requiresElevation !== undefined) {
359
429
  middleware.push(this.checkElevation(requiresElevation));
360
430
  }
431
+ middleware.push(this.checkCsrf());
361
432
  if (requiresTrustedRole) {
362
433
  middleware.push(this.checkTrusedRoles());
363
434
  }
@@ -419,10 +490,17 @@ export class RouteUtils {
419
490
  // Build a per-path copy of the middleware chain. `middleware` is shared across
420
491
  // every verb/basePath combination for this decorated method (and, once
421
492
  // registered, held by reference by the router), so mutating it in place here
422
- // would corrupt other registrations sharing the same array.
493
+ // would corrupt other registrations sharing the same array. `sanitizeWsError()`
494
+ // is appended last so it sits closest to runChain()'s own end-of-chain fallback —
495
+ // see its doc comment for why WS routes need this even though HTTP routes don't
496
+ // (globalMiddleware, which is where HTTP gets this from, is never given to ws()).
423
497
  const wsMiddleware = this.authMiddleware
424
- ? [this.authMiddleware.authWebSocket(authRequired, authStrategies), ...middleware]
425
- : [...middleware];
498
+ ? [
499
+ this.authMiddleware.authWebSocket(authRequired, authStrategies),
500
+ ...middleware,
501
+ this.sanitizeWsError(),
502
+ ]
503
+ : [...middleware, this.sanitizeWsError()];
426
504
  // Register with the HttpRouter's ws() method; trailing slash handled internally
427
505
  app.ws(path, wsMiddleware, undefined, upgradeAuth);
428
506
  // Update our OpenAPI spec — WebSocket upgrade is a GET request
@@ -671,4 +749,12 @@ __decorate([
671
749
  Config("trusted_proxies", []),
672
750
  __metadata("design:type", Array)
673
751
  ], RouteUtils.prototype, "trustedProxies", void 0);
752
+ __decorate([
753
+ Config("csrf", { enabled: true }),
754
+ __metadata("design:type", Object)
755
+ ], RouteUtils.prototype, "csrfConfig", void 0);
756
+ __decorate([
757
+ Config("cors", {}),
758
+ __metadata("design:type", Object)
759
+ ], RouteUtils.prototype, "corsConfig", void 0);
674
760
  //# sourceMappingURL=RouteUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RouteUtils.js","sourceRoot":"","sources":["../../../src/routes/RouteUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RouteUtils.js","sourceRoot":"","sources":["../../../src/routes/RouteUtils.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@
7
7
  * Accepts either a Server instance (extracts port from server.port) or a port number.
8
8
  */
9
9
  import axios from "axios";
10
+ import { DEFAULT_CSRF_COOKIE_NAME, DEFAULT_CSRF_HEADER_NAME } from "../http/csrf/csrf.js";
11
+ const SAFE_METHODS = new Set(["GET", "HEAD", "OPTIONS"]);
10
12
  function extractPort(app) {
11
13
  if (typeof app === "number")
12
14
  return app;
@@ -81,6 +83,19 @@ function createRequester(app, jar) {
81
83
  if (cookieHeader)
82
84
  hdrs["Cookie"] = cookieHeader;
83
85
  }
86
+ // Mirrors what a real browser-hosted SPA does (see react-shared's apiFetch()/authApiFetch()):
87
+ // echo the double-submit CSRF cookie back as a header on every mutating request, once the
88
+ // jar has one. A stateless request() call never accumulates cookies across calls, so this
89
+ // only ever applies to agent()'s persistent jar — the same jar that's already standing in
90
+ // for "an authenticated browser session" for cookie-based auth in these tests.
91
+ if (jar &&
92
+ !SAFE_METHODS.has(method.toUpperCase()) &&
93
+ !hdrs[DEFAULT_CSRF_HEADER_NAME] &&
94
+ !hdrs[DEFAULT_CSRF_HEADER_NAME.toUpperCase()]) {
95
+ const csrfToken = jar.get(DEFAULT_CSRF_COOKIE_NAME);
96
+ if (csrfToken)
97
+ hdrs[DEFAULT_CSRF_HEADER_NAME] = csrfToken;
98
+ }
84
99
  return axios
85
100
  .request({
86
101
  method,
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/test/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/test/request.ts"],"names":[],"mappings":"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"}
@@ -19,11 +19,13 @@ export declare enum ApiErrors {
19
19
  SEARCH_OPERATOR_NOT_SUPPORTED = "api-020",
20
20
  BULK_CREATE_FAILURE = "api-021",
21
21
  BULK_UPDATE_FAILURE = "api-022",
22
+ SEARCH_SCOPED_FIELD = "api-023",
22
23
  AUTH_REQUIRED = "api-100",
23
24
  AUTH_FAILED = "api-101",
24
25
  AUTH_PERMISSION_FAILURE = "api-102",
25
26
  AUTH_REQUIRES_TRUSTED_ROLE = "api-103",
26
- AUTH_REQUIRES_ELEVATION = "api-104"
27
+ AUTH_REQUIRES_ELEVATION = "api-104",
28
+ AUTH_CSRF_FAILURE = "api-105"
27
29
  }
28
30
  /**
29
31
  * Defines the default message of all common API errors.
@@ -46,9 +48,11 @@ export declare enum ApiErrorMessages {
46
48
  SEARCH_OPERATOR_NOT_SUPPORTED = "The '{{operator}}' operator is not supported by the configured datasource.",
47
49
  BULK_CREATE_FAILURE = "Failed to create one or more objects.",
48
50
  BULK_UPDATE_FAILURE = "Failed to update one or more objects.",
51
+ SEARCH_SCOPED_FIELD = "Cannot filter, sort or count by scoped field '{{field}}'.",
49
52
  AUTH_REQUIRED = "Authorization is required to access this resource.",
50
53
  AUTH_FAILED = "Invalid or missing authentication token.",
51
54
  AUTH_PERMISSION_FAILURE = "User does not have permission to perform this action.",
52
55
  AUTH_REQUIRES_TRUSTED_ROLE = "User does not have permission to perform this action.",
53
- AUTH_REQUIRES_ELEVATION = "This operation requires elevation."
56
+ AUTH_REQUIRES_ELEVATION = "This operation requires elevation.",
57
+ AUTH_CSRF_FAILURE = "This request is missing a valid CSRF token."
54
58
  }
@@ -17,6 +17,10 @@ export interface AuthResult {
17
17
  state?: string;
18
18
  /** The authenticated user profile, or `undefined` if authentication failed. */
19
19
  user?: JWTUser;
20
+ /**
21
+ * Where this credential was found in the request.
22
+ */
23
+ source?: "cookie" | "header" | "query";
20
24
  }
21
25
  /**
22
26
  * Describes an interface for implementing strategies that will perform authentication.
@@ -59,7 +59,7 @@ export declare class JWTStrategy {
59
59
  /**
60
60
  * Scans the provided request object for an authentication token this strategy can process.
61
61
  * @param req The request to scan for an auth token.
62
- * @returns The auth token if found, otherwise `undefined`.
62
+ * @returns The auth token and which source it was found in, if found, otherwise `undefined`.
63
63
  */
64
64
  private getAuthToken;
65
65
  authenticate(req: HttpRequest, res: HttpResponse): Promise<JWTAuthResult | undefined>;
@@ -152,5 +152,12 @@ export declare function readBunBody(req: BunRequest, rawRequest: Request, maxBod
152
152
  * Destroys the returned stream if the client disconnects mid-upload, via the request's own
153
153
  * `AbortSignal` — mirroring `makeBodyStream()`'s uWS `onAborted`-driven cleanup — so a handler
154
154
  * consuming it via `for await` sees a thrown error instead of hanging forever.
155
+ *
156
+ * A route that never reads the returned stream at all can still trigger that destroy() (the request
157
+ * simply gets aborted independently, e.g. the client navigating away), so a permanent no-op `error`
158
+ * listener is attached — a `Readable` with no active consumer still emits `error` on `destroy(err)`,
159
+ * and Node treats a zero-listener `error` event as fatal (crashes the process). This doesn't swallow
160
+ * anything from a real consumer: EventEmitter calls every registered listener, not just the first, so
161
+ * `for await`/`.pipe()`/an explicit `.on("error")` still see the same event independently.
155
162
  */
156
163
  export declare function makeBunBodyStream(rawRequest: Request): Readable | undefined;
@@ -0,0 +1,117 @@
1
+ import type { HttpRequest, HttpResponse, RequestHandler } from "../types.js";
2
+ /**
3
+ * Double-submit CSRF protection for the `jwt` cookie that `@rapidrest/auth`'s `TokenUtils` issues (see
4
+ * that library's `CsrfUtils`, which rotates this same cookie at login/elevation/logout). This module is
5
+ * the shared, framework-agnostic core: `RouteUtils.checkCsrf()` wires it into every route's middleware
6
+ * chain automatically, and `createCsrfMiddleware()` below offers the same check as a standalone global
7
+ * middleware for a service that doesn't go through `RouteUtils` (or wants it registered once instead of
8
+ * per-route). `auth`'s route handlers that read `req.session` directly instead of going through the
9
+ * `jwt`-cookie auth path (e.g. the OAuth `/authorize/consent` route) call `verifyCsrfRequest()` by hand —
10
+ * see that route's own doc comment for why it can't rely on the automatic, `req.auth`-keyed gate.
11
+ *
12
+ * ## Why this is a host-only cookie, not a naive double-submit
13
+ *
14
+ * The `jwt`/`refresh` cookies `TokenUtils` issues are commonly configured with a wildcard `Domain`
15
+ * (e.g. `.example.com`) so a single sign-in is shared across sibling subdomains (`mail.example.com`,
16
+ * `auth.example.com`, ...) — that's the whole point of a shared SSO cookie. A *naive* double-submit CSRF
17
+ * cookie sharing that same wildcard `Domain` would defeat itself: `document.cookie` on *any* sibling
18
+ * subdomain can read a wildcard-domain cookie, so a same-site page that isn't the app itself (a
19
+ * compromised or merely less-trusted subdomain, a multi-tenant customer subdomain, ...) could read the
20
+ * "secret" double-submit value and echo it right back — exactly the value this scheme exists to keep
21
+ * out of an attacker's hands. `SameSite=Lax` doesn't help here either: it blocks genuine cross-*site*
22
+ * forgery, but `auth.example.com` and `mail.example.com` are cross-*origin*, same-*site* — Lax cookies
23
+ * are still attached.
24
+ *
25
+ * `buildCsrfCookie()` below therefore never emits a `Domain` attribute: the cookie this module issues is
26
+ * always host-only, readable only by script running on the exact host that set it. That closes the
27
+ * sibling-subdomain-reads-the-cookie hole, but it also means a *legitimately* cross-origin caller (e.g.
28
+ * `react-shared`'s `authApiFetch()`, used by an admin console on `mail.example.com` to drive
29
+ * impersonation on `auth.example.com`) can never read this cookie either — there is no way for it to
30
+ * supply a matching header. `verifyCsrfRequest()` handles that case by falling back to an Origin/Referer
31
+ * allow-list check for any request whose Origin doesn't match the host it arrived on: the browser only
32
+ * ever sends such a request in the first place because the target's CORS policy already named that exact
33
+ * origin as trusted (see `Server.ts`'s CORS middleware, which reflects `Access-Control-Allow-Origin` only
34
+ * for an exact, explicitly configured match — never a wildcard-with-credentials), so re-checking the same
35
+ * allow-list server-side is a legitimate, independent proof for a cross-origin request in a way that
36
+ * would not exist for a same-origin one.
37
+ */
38
+ /** Default name of the double-submit CSRF cookie. */
39
+ export declare const DEFAULT_CSRF_COOKIE_NAME = "csrf";
40
+ /** Default name of the request header a caller echoes the CSRF cookie's value back on. */
41
+ export declare const DEFAULT_CSRF_HEADER_NAME = "x-csrf-token";
42
+ /** Cookie-shape options accepted by `buildCsrfCookie()`. */
43
+ export interface CsrfCookieOptions {
44
+ /** The cookie's name. Default `"csrf"` (`DEFAULT_CSRF_COOKIE_NAME`). */
45
+ name?: string;
46
+ /** The `Path` attribute. Default `/`. */
47
+ path?: string;
48
+ /** The `Max-Age` attribute, in seconds. Omitted (session cookie) if not set. */
49
+ maxAge?: number;
50
+ /** The `SameSite` attribute. Default `Lax`. */
51
+ sameSite?: "Strict" | "Lax" | "None";
52
+ /** Set to `false` to omit the `Secure` (HTTPS-only) attribute — only for plain-HTTP local dev. Default `true`. */
53
+ secure?: boolean;
54
+ }
55
+ /** Generates a new, cryptographically random CSRF token, matching `OIDCStrategy`'s own `state`-token style. */
56
+ export declare function generateCsrfToken(): string;
57
+ /**
58
+ * Builds the `Set-Cookie` header value for the CSRF cookie. Pass an empty string for `token` to build a
59
+ * header that immediately clears the cookie instead (mirrors `TokenUtils.buildCookie()`'s own clearing
60
+ * convention in `@rapidrest/auth`).
61
+ *
62
+ * Deliberately never emits a `Domain` attribute, even though the sibling `jwt`/`refresh` cookies often do
63
+ * — see this module's doc comment for why a wide-open `Domain` here would defeat the whole scheme.
64
+ * Deliberately never emits `HttpOnly` either: browser JavaScript reading this cookie and echoing it back
65
+ * as a header is the entire mechanism.
66
+ */
67
+ export declare function buildCsrfCookie(token: string, options?: CsrfCookieOptions): string;
68
+ /** Options shared by `ensureCsrfCookie()`/`verifyCsrfRequest()`/`createCsrfMiddleware()`. */
69
+ export interface CsrfCheckOptions {
70
+ /** Set to `false` to disable the check entirely (still leaves lazy cookie issuance in place). Default `true`. */
71
+ enabled?: boolean;
72
+ /** The CSRF cookie's name. Default `"csrf"`. */
73
+ cookieName?: string;
74
+ /** The header a caller must echo the cookie's value on. Default `"x-csrf-token"`. */
75
+ headerName?: string;
76
+ /** `Max-Age` (seconds) for a lazily-issued cookie. Omitted (session cookie) if not set. */
77
+ maxAge?: number;
78
+ /** Set to `false` to omit `Secure` from a lazily-issued cookie — plain-HTTP local dev only. Default `true`. */
79
+ secure?: boolean;
80
+ /**
81
+ * Explicit allow-list of trusted browser origins (e.g. `["https://mail.example.com"]`), used for the
82
+ * Origin/Referer check described in this module's doc comment. Typically the same list already
83
+ * configured for CORS (`cors:origins`) — callers default to that when this is left unset.
84
+ */
85
+ allowedOrigins?: string[];
86
+ /** Optional logger for a rejected request's reason — never logs the token values themselves. */
87
+ logger?: {
88
+ warn?: (msg: string) => void;
89
+ };
90
+ }
91
+ /**
92
+ * Ensures the caller holds a CSRF cookie, issuing one via `Set-Cookie` if it doesn't already have a valid
93
+ * one — the standard "set on first visit" double-submit pattern (matches Django/Rails), and what lets a
94
+ * service that never itself issues auth cookies (e.g. `server`/`restapi`, which only ever verify a `jwt`
95
+ * cookie someone else set) still adopt this mechanism on its own. Returns the (possibly freshly-generated)
96
+ * token value.
97
+ */
98
+ export declare function ensureCsrfCookie(req: HttpRequest, res: HttpResponse, options?: CsrfCheckOptions): string;
99
+ /**
100
+ * Verifies `req` against the double-submit CSRF cookie plus Origin/Referer allow-list, per the scheme
101
+ * documented at the top of this module. Throws an `ApiError` (`AUTH_CSRF_FAILURE`, 403) on failure. A safe
102
+ * method (`GET`/`HEAD`/`OPTIONS`) or `options.enabled === false` always passes without throwing.
103
+ *
104
+ * This does *not* check `req.auth?.source` — that gate belongs to the caller (see `RouteUtils.checkCsrf()`,
105
+ * which only calls this when `req.auth?.source === "cookie"`). A caller like `BaseOAuthAuthorizeRoute`'s
106
+ * `decideConsent()`, which authenticates via `req.session` instead of a JWT, calls this unconditionally
107
+ * for exactly that reason.
108
+ */
109
+ export declare function verifyCsrfRequest(req: HttpRequest, options?: CsrfCheckOptions): void;
110
+ /**
111
+ * Standalone global-middleware form of the same check `RouteUtils.checkCsrf()` installs automatically on
112
+ * every route. Useful for a service that registers its own middleware chain directly instead of going
113
+ * through `RouteUtils` (or that wants a single global registration instead of a per-route one). Always
114
+ * lazily issues the cookie first (see `ensureCsrfCookie()`), then enforces the check only when
115
+ * `req.auth?.source === "cookie"` — the same gate `RouteUtils.checkCsrf()` uses.
116
+ */
117
+ export declare function createCsrfMiddleware(options?: CsrfCheckOptions): RequestHandler;
@@ -8,6 +8,8 @@ export type { SessionStore } from "./session/SessionStore.js";
8
8
  export { RedisSessionStore } from "./session/RedisSessionStore.js";
9
9
  export { SessionManager } from "./session/SessionManager.js";
10
10
  export { createSessionMiddleware } from "./session/sessionMiddleware.js";
11
+ export { DEFAULT_CSRF_COOKIE_NAME, DEFAULT_CSRF_HEADER_NAME, buildCsrfCookie, createCsrfMiddleware, ensureCsrfCookie, generateCsrfToken, verifyCsrfRequest, } from "./csrf/csrf.js";
12
+ export type { CsrfCheckOptions, CsrfCookieOptions } from "./csrf/csrf.js";
11
13
  export { UWSRequest, UWSResponse, makeBodyStream, readBody } from "./uWS/Adapters.js";
12
14
  export type { HttpRouter } from "./uWS/Router.js";
13
15
  export type { RequestWS } from "./uWS/WebSocket.js";
@@ -71,9 +71,23 @@ export declare class UWSResponse implements HttpResponse {
71
71
  isHead: boolean;
72
72
  /** Intermediate result passed between middleware. */
73
73
  result?: any;
74
+ /**
75
+ * Set by the router via `attachBodyStream()` for a streaming-body route (see
76
+ * `HttpRouteOptions.streamingBody`). `end()` checks `isBodyStreamFullyReceived()` against it —
77
+ * see that function's doc comment and `end()` for the full rationale.
78
+ */
79
+ private _bodyStream?;
74
80
  /** Allow arbitrary per-response properties. */
75
81
  [key: string]: any;
76
82
  constructor(uwsRes: UWSHttpResponse);
83
+ /**
84
+ * Associates this response with a streaming-body route's `req.bodyStream`, so `end()` can detect
85
+ * a response finalizing before uWS has received the whole declared request body and force the
86
+ * connection closed instead of hanging it — see `isBodyStreamFullyReceived()`'s doc comment for
87
+ * the full rationale. Called once, by the router, right after `makeBodyStream()` creates the
88
+ * stream (`HttpRouteOptions.streamingBody` routes only — never called otherwise).
89
+ */
90
+ attachBodyStream(stream: Readable): void;
77
91
  get statusCode(): number;
78
92
  get headersSent(): boolean;
79
93
  get writableEnded(): boolean;
@@ -147,6 +161,21 @@ export declare function readBody(uwsRes: UWSHttpResponse, req: UWSRequest, maxBo
147
161
  * plenty of headroom before the network is throttled.
148
162
  */
149
163
  export declare const STREAMING_BODY_HIGH_WATER_MARK: number;
164
+ /**
165
+ * Returns `true` once uWS has delivered the final chunk of `stream`'s request body — i.e. it is safe
166
+ * to let the underlying connection return to uWS's keep-alive pool — regardless of whether anything
167
+ * has actually consumed the stream. Returns `true` for `undefined` (nothing to wait for) so callers
168
+ * can pass `req.bodyStream` directly without an existence check first.
169
+ *
170
+ * See `UWSResponse.end()`: a streaming route's handler can legitimately respond (an auth failure, a
171
+ * validation error, anything) without ever reading `req.bodyStream`. If the client declared a large
172
+ * `Content-Length` and hasn't actually sent it all yet — or, in the malicious case, never intends to
173
+ * — a plain `uwsRes.end()` at that point leaves the keep-alive connection open indefinitely: uWS
174
+ * won't consider it clean for reuse until it has received every byte of the declared body, and nothing
175
+ * in that scenario ever makes that happen. `end()` uses this check to force the connection closed
176
+ * instead whenever it would otherwise leave that promise unfulfilled.
177
+ */
178
+ export declare function isBodyStreamFullyReceived(stream: Readable | undefined): boolean;
150
179
  /**
151
180
  * Exposes a uWS request body as a Node `Readable` stream instead of buffering it into memory, for a
152
181
  * route registered with `{ streamingBody: true }` (see `HttpRouteOptions`). Does NOT populate
@@ -166,12 +195,23 @@ export declare const STREAMING_BODY_HIGH_WATER_MARK: number;
166
195
  * pause/resume pairing uWS expects. A slow consumer (a route piping to a slow disk, or one simply
167
196
  * not reading yet) still throttles how fast bytes are pulled off the client connection rather than
168
197
  * piling up unbounded data in process memory — the failure mode this whole feature exists to avoid.
198
+ * The same pairing discipline also applies to the final chunk: when a chunk that overflows the
199
+ * buffer also happens to be the last one (`isLast`), `pause()` is skipped entirely — the stream is
200
+ * about to signal EOF via `push(null)` regardless, so Node's `Readable` never calls `_read()` again
201
+ * to issue the matching `resume()`, which would otherwise leave uWS's connection paused forever with
202
+ * nothing left in this function to ever un-pause it.
169
203
  *
170
204
  * The stream is destroyed with an error if the client disconnects mid-upload (wired through the
171
205
  * existing single `onAborted` fan-out via `res.onAbort()`, matching `readBody()`'s own abort
172
206
  * handling) so a handler awaiting `for await (const chunk of req.bodyStream)` sees a thrown error
173
207
  * instead of hanging forever, and can clean up (e.g. delete a partial temp file) in its own
174
- * `catch`/`finally`.
208
+ * `catch`/`finally`. A route that never reads `req.bodyStream` at all can still hit this path — e.g.
209
+ * `UWSResponse.end()` itself calls `uwsRes.close()` (which fires `onAborted`) when finalizing a
210
+ * response before the body was fully received — so a permanent no-op `error` listener is attached
211
+ * below as well: a `Readable` with no active consumer still emits `error` on `destroy(err)`, and
212
+ * Node treats an `error` event with zero listeners as fatal (crashes the process). This listener
213
+ * doesn't swallow anything from a real consumer — `for await`/`.pipe()`/an explicit `.on("error")`
214
+ * all still see the same event; EventEmitter calls every registered listener, not just the first.
175
215
  *
176
216
  * Must be called synchronously, before any `await`, in the same tick as request handling begins —
177
217
  * uWS requires `onData`/`onAborted` to be registered before any asynchronous operation, matching the
@@ -67,6 +67,8 @@ export declare class ModelUtils {
67
67
  private static idPropertyCache;
68
68
  private static readOnlyPropertyCache;
69
69
  private static columnTypeCache;
70
+ /** Caches each class's `@RequiresScope`-decorated property names to their required scopes (see `assertFieldScope()`). */
71
+ private static scopedPropertyCache;
70
72
  /** Sequence used to give every `Raw()` SQL expression's named parameter a unique name within one query. */
71
73
  private static rawParamSeq;
72
74
  /**
@@ -120,6 +122,43 @@ export declare class ModelUtils {
120
122
  * @returns The list of all property names that have the @ReadOnly decorator applied.
121
123
  */
122
124
  static getReadOnlyPropertyNames(modelClass: any): string[];
125
+ /**
126
+ * Returns a map of every `@RequiresScope`-decorated property on `modelClass` to the scope(s) it requires (the
127
+ * exact same `rrst:scopes` metadata `@rapidrest/core`'s `ObjectUtils.deleteScopedProps()` reads to redact a
128
+ * property from an already-fetched result). `undefined` when `modelClass` isn't provided.
129
+ *
130
+ * Deliberately does NOT use `getReadOnlyPropertyNames()`'s prototype-walking-only pattern: a plain class field
131
+ * initializer (`public salary: number = 0`) compiles to an own-INSTANCE assignment, so it never appears on the
132
+ * prototype at all unless its OWN decorator specifically forces a placeholder there (this framework's
133
+ * `@ReadOnly`/`@Identifier` do; `@rapidrest/core`'s `RequiresScope` has no reason to and doesn't). Confirmed
134
+ * empirically: `Object.getOwnPropertyNames(SomeClass.prototype)` for a bare `@RequiresScope("x") salary = 0`
135
+ * field returns only `["constructor"]`. Instead this walks the property names of an actual constructed
136
+ * instance (mirroring `deleteScopedProps()`'s own `Object.getOwnPropertyNames(obj)` over a data object) union
137
+ * the prototype chain (still needed to also catch a property that IS forced onto the prototype, e.g. one
138
+ * additionally decorated with `@ReadOnly`) — metadata itself is always read off `modelClass.prototype`
139
+ * (`Reflect.getMetadata` walks the prototype chain on its own), regardless of which own-properties surfaced
140
+ * the candidate name.
141
+ */
142
+ private static getScopedPropertyNames;
143
+ /**
144
+ * Rejects (400) a search filter, sort or count referencing a `@RequiresScope`-protected property when the
145
+ * requesting user doesn't hold at least one of its required scopes.
146
+ *
147
+ * Without this, `@RequiresScope` was only ever a RESPONSE-time redaction (`ObjectUtils.deleteScopedProps()`,
148
+ * applied after a query already ran) — a scope-restricted field could still drive `WHERE`/`ORDER BY`/count
149
+ * itself, letting a caller who could never READ the field's value still binary-search it out via repeated
150
+ * `gt()`/`lt()`/`range()` filters, turn a `HEAD` request's `Content-Length` into an existence/equality oracle
151
+ * via `count()`, or read its relative ordering via `sort`. Checked at query-BUILD time instead, so a
152
+ * disallowed field never reaches `WHERE`/`ORDER BY`/count in the first place — matches `hasScopes()`'s exact
153
+ * semantics (same function `deleteScopedProps()` uses), so query-time rejection and response-time redaction
154
+ * never disagree about who has access to a given field.
155
+ *
156
+ * Applied uniformly to every field referenced by a filter (regardless of operator — `eq`/`gt`/`like`/`regex`/
157
+ * `exists`/... all pass through this same per-key check) and to every `sort` key, on both SQL and Mongo.
158
+ *
159
+ * @throws {ApiError} 400 `SEARCH_SCOPED_FIELD` if `property` requires a scope `user` doesn't hold.
160
+ */
161
+ private static assertFieldScope;
123
162
  /**
124
163
  * Resolves the declared type of a model property, from an explicit `type` override on `@Column` or (falling
125
164
  * back) the TypeScript design-time type reflected at decoration time. Returns `undefined` when `modelClass`