@dcl/http-server 2.1.0 → 2.2.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.
package/README.md CHANGED
@@ -2,6 +2,91 @@
2
2
 
3
3
  forked from https://github.com/well-known-components/http-server
4
4
 
5
+ ## Server options
6
+
7
+ `createServerComponent(components, options)` accepts a `Partial<IHttpServerOptions>`
8
+ to tune the underlying Node server:
9
+
10
+ ```ts
11
+ import { createServerComponent } from '@dcl/http-server'
12
+
13
+ const server = await createServerComponent(
14
+ { config, logs },
15
+ {
16
+ // Reject request bodies larger than 1 MiB.
17
+ maxBodySize: 1024 * 1024,
18
+ // Abort a request whose headers + body don't arrive within 30s.
19
+ requestTimeout: 30_000,
20
+ maxHeadersCount: 100,
21
+ maxRequestsPerSocket: 1000,
22
+ cors: { origin: '*' }
23
+ }
24
+ )
25
+ ```
26
+
27
+ | Option | Maps to | Description |
28
+ | --- | --- | --- |
29
+ | `maxBodySize` | _(enforced by this component)_ | Maximum size, in bytes, of an incoming request body. A request that declares a larger `Content-Length` is rejected with `413 Payload Too Large` before the body is read; a body that omits or under-declares its length (e.g. chunked transfer-encoding) is capped with the same `413` while streaming. Unset means no limit. |
30
+ | `cors` | _(CORS middleware)_ | CORS configuration applied as middleware. |
31
+ | `keepAliveTimeout` | `server.keepAliveTimeout` | Idle keep-alive socket timeout in ms (default `70000`). |
32
+ | `headersTimeout` | `server.headersTimeout` | Time to receive the complete headers in ms (default `75000`). |
33
+ | `requestTimeout` | `server.requestTimeout` | Time to receive the entire request in ms. `0` disables it. |
34
+ | `maxHeadersCount` | `server.maxHeadersCount` | Maximum number of request headers. `0` means unlimited. |
35
+ | `maxRequestsPerSocket` | `server.maxRequestsPerSocket` | Max requests served per keep-alive socket. Unset/`0` means unlimited. |
36
+
37
+ A `maxBodySize` rejection produces a `413` that a handler can also surface itself: when
38
+ a handler reads an over-limit body inside the middleware chain (e.g. `await ctx.request.json()`),
39
+ the read rejects and the error middleware maps it to a `413` response.
40
+
41
+ `maxBodySize` must be a positive integer when provided — `createServerComponent` throws on
42
+ `0`, negative or fractional values (omit the option for "no limit"). When `cors` is also
43
+ configured, the up-front `Content-Length` rejection still carries the actual-response CORS
44
+ headers, so a cross-origin client can read the `413`.
45
+
46
+ ### Reading the request body under a `maxBodySize`
47
+
48
+ The streaming limit is enforced as `ctx.request.body` is consumed, so it only turns into a `413`
49
+ if your handler actually reads the body **and propagates stream errors**. Reading it with
50
+ `await ctx.request.json()` / `.text()` / `.arrayBuffer()` or `for await (… of ctx.request.body)`
51
+ does this for you — the read rejects with the `413` and the error middleware maps it to a response.
52
+
53
+ If you instead **pipe** `ctx.request.body` into another stream (e.g. a multipart parser like
54
+ `busboy`), remember that `Readable.prototype.pipe` does **not** forward *source* errors to the
55
+ destination. Attach an error handler to the adapted source, or a body-stream error — a client
56
+ abort *or* the `maxBodySize` limiter emitting its `413` — surfaces as an unhandled error (and can
57
+ crash the process):
58
+
59
+ ```ts
60
+ import { Readable } from 'stream'
61
+
62
+ const body = Readable.fromWeb(ctx.request.body as any)
63
+ // Forward source errors (client abort, or the maxBodySize 413) so the parser rejects cleanly.
64
+ body.on('error', (err) => parser.destroy(err))
65
+ body.pipe(parser)
66
+ ```
67
+
68
+ Requests that declare a `Content-Length` over the limit — the usual case for `multipart/form-data`
69
+ uploads from browsers and `fetch` — are rejected up-front regardless of how the body is consumed.
70
+
71
+ ### Per-route body-size limits
72
+
73
+ `maxBodySize` on `createServerComponent` is server-wide. For a tighter limit on specific routes, use
74
+ `createBodySizeLimitMiddleware(bytes)` and mount it on those routes:
75
+
76
+ ```ts
77
+ import { createBodySizeLimitMiddleware } from '@dcl/http-server'
78
+
79
+ // allow at most 4 KB on this endpoint
80
+ router.post('/v1/notes', createBodySizeLimitMiddleware(4096), notesHandler)
81
+ ```
82
+
83
+ It enforces the same dual check as the server-wide option: a request declaring a larger
84
+ `Content-Length` is rejected up front with `413 Payload Too Large`, and a body that omits or
85
+ under-declares its length (e.g. chunked) is capped while streaming — the body read by downstream
86
+ handlers errors with a `413` once the limit is crossed. Either `413` sets `Connection: close`, so an
87
+ oversized or stalled client can't tie up the socket. `bytes` must be a positive integer or the
88
+ factory throws. It composes with the server-wide `maxBodySize` (the global cap still applies first).
89
+
5
90
  ## Returning a native `Response` from a handler
6
91
 
7
92
  Handlers return the structural `IResponse` (Node `Readable`/`Buffer`/string/JSON
@@ -0,0 +1,19 @@
1
+ import { IHttpServerComponent } from '@dcl/core-commons';
2
+ /**
3
+ * Creates a per-route middleware that rejects request bodies larger than `maxBodySize` bytes with
4
+ * `413 Payload Too Large`.
5
+ *
6
+ * - A request that declares a larger `Content-Length` is rejected up front, before its body is read.
7
+ * - A body that omits or under-declares its length (e.g. chunked transfer-encoding) is capped while
8
+ * streaming: once a downstream handler reads past the limit the body errors, and the middleware
9
+ * turns that into a `413` and closes the connection so the client can't keep streaming.
10
+ *
11
+ * Either way the `413` carries `Connection: close` so an oversized or stalled request can't tie up
12
+ * the socket.
13
+ *
14
+ * Unlike the server-wide `maxBodySize` option (enforced at the transport layer for the whole
15
+ * server), this middleware can be applied to individual routes for tighter, per-endpoint limits.
16
+ *
17
+ * @public
18
+ */
19
+ export declare function createBodySizeLimitMiddleware<Context extends object = {}>(maxBodySize: number): IHttpServerComponent.IRequestHandler<Context>;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBodySizeLimitMiddleware = createBodySizeLimitMiddleware;
4
+ const logic_1 = require("./logic");
5
+ /**
6
+ * Builds a web `TransformStream` that errors with a `413` once more than `maxBodySize` bytes have
7
+ * passed through it, invoking `onExceeded` so the caller can react (e.g. tear the connection down).
8
+ * Used to cap a request body that omits or under-declares its `Content-Length`.
9
+ */
10
+ function createBodyStreamLimiter(maxBodySize, onExceeded) {
11
+ let received = 0;
12
+ return new TransformStream({
13
+ transform(chunk, controller) {
14
+ received += chunk.byteLength;
15
+ if (received > maxBodySize) {
16
+ onExceeded();
17
+ controller.error((0, logic_1.payloadTooLargeError)());
18
+ }
19
+ else {
20
+ controller.enqueue(chunk);
21
+ }
22
+ }
23
+ });
24
+ }
25
+ // The `413` returned for an oversized body. `Connection: close` frees the socket: the rest of the
26
+ // body is never going to be read, so without it a client can keep streaming (or stall) and tie up
27
+ // the connection — Node won't reuse it but also won't tear it down on its own once a response is sent.
28
+ function payloadTooLargeResponse() {
29
+ return { status: 413, headers: { connection: 'close' }, body: 'Payload Too Large' };
30
+ }
31
+ /**
32
+ * Creates a per-route middleware that rejects request bodies larger than `maxBodySize` bytes with
33
+ * `413 Payload Too Large`.
34
+ *
35
+ * - A request that declares a larger `Content-Length` is rejected up front, before its body is read.
36
+ * - A body that omits or under-declares its length (e.g. chunked transfer-encoding) is capped while
37
+ * streaming: once a downstream handler reads past the limit the body errors, and the middleware
38
+ * turns that into a `413` and closes the connection so the client can't keep streaming.
39
+ *
40
+ * Either way the `413` carries `Connection: close` so an oversized or stalled request can't tie up
41
+ * the socket.
42
+ *
43
+ * Unlike the server-wide `maxBodySize` option (enforced at the transport layer for the whole
44
+ * server), this middleware can be applied to individual routes for tighter, per-endpoint limits.
45
+ *
46
+ * @public
47
+ */
48
+ function createBodySizeLimitMiddleware(maxBodySize) {
49
+ (0, logic_1.assertValidMaxBodySize)(maxBodySize);
50
+ return async (context, next) => {
51
+ if ((0, logic_1.exceedsContentLength)(context.request.headers.get('content-length'), maxBodySize)) {
52
+ return payloadTooLargeResponse();
53
+ }
54
+ const body = context.request.body;
55
+ if (!body) {
56
+ return next();
57
+ }
58
+ // Route the body through the limiter and replace the request so any downstream read flows
59
+ // through it. `duplex: 'half'` is required by the fetch spec when constructing a `Request`
60
+ // with a streaming body.
61
+ let exceeded = false;
62
+ context.request = new Request(context.request.url, {
63
+ method: context.request.method,
64
+ headers: context.request.headers,
65
+ body: body.pipeThrough(createBodyStreamLimiter(maxBodySize, () => {
66
+ exceeded = true;
67
+ })),
68
+ duplex: 'half'
69
+ });
70
+ // The limiter errors the body stream when the limit is crossed. A handler that reads the body
71
+ // surfaces that as a thrown `413` (which would otherwise propagate to the error middleware
72
+ // *without* `Connection: close`, leaving the socket open while the client keeps streaming). By
73
+ // catching it here we guarantee the `413`-with-close response whenever the limit was exceeded,
74
+ // regardless of whether the handler rethrew or swallowed the read error.
75
+ try {
76
+ const response = await next();
77
+ return exceeded ? payloadTooLargeResponse() : response;
78
+ }
79
+ catch (error) {
80
+ if (exceeded) {
81
+ return payloadTooLargeResponse();
82
+ }
83
+ throw error;
84
+ }
85
+ };
86
+ }
87
+ //# sourceMappingURL=body-size-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body-size-limiter.js","sourceRoot":"","sources":["../src/body-size-limiter.ts"],"names":[],"mappings":";;AAkDA,sEA6CC;AA9FD,mCAA4F;AAE5F;;;;GAIG;AACH,SAAS,uBAAuB,CAC9B,WAAmB,EACnB,UAAsB;IAEtB,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,OAAO,IAAI,eAAe,CAAC;QACzB,SAAS,CAAC,KAAK,EAAE,UAAU;YACzB,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAA;YAC5B,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;gBAC3B,UAAU,EAAE,CAAA;gBACZ,UAAU,CAAC,KAAK,CAAC,IAAA,4BAAoB,GAAE,CAAC,CAAA;YAC1C,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,kGAAkG;AAClG,kGAAkG;AAClG,uGAAuG;AACvG,SAAS,uBAAuB;IAC9B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAA;AACrF,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,6BAA6B,CAC3C,WAAmB;IAEnB,IAAA,8BAAsB,EAAC,WAAW,CAAC,CAAA;IAEnC,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7B,IAAI,IAAA,4BAAoB,EAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;YACrF,OAAO,uBAAuB,EAAE,CAAA;QAClC,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAA;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,EAAE,CAAA;QACf,CAAC;QAED,0FAA0F;QAC1F,2FAA2F;QAC3F,yBAAyB;QACzB,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,OAAO,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YACjD,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;YAChC,IAAI,EAAE,IAAI,CAAC,WAAW,CACpB,uBAAuB,CAAC,WAAW,EAAE,GAAG,EAAE;gBACxC,QAAQ,GAAG,IAAI,CAAA;YACjB,CAAC,CAAC,CACH;YACD,MAAM,EAAE,MAAM;SACqB,CAAC,CAAA;QAEtC,8FAA8F;QAC9F,2FAA2F;QAC3F,+FAA+F;QAC/F,+FAA+F;QAC/F,yEAAyE;QACzE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAA;YAC7B,OAAO,QAAQ,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAA;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,uBAAuB,EAAE,CAAA;YAClC,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
package/dist/cors.d.ts CHANGED
@@ -30,5 +30,12 @@ export interface CorsOptions {
30
30
  */
31
31
  optionsSuccessStatus?: number;
32
32
  }
33
+ /**
34
+ * Builds the CORS headers that apply to an actual (non-preflight) response for `request`. Returns
35
+ * an empty `Headers` when the request carries no `Origin`, since there is nothing to add. Shared by
36
+ * the CORS middleware and by paths that respond before the middleware runs (e.g. an early
37
+ * body-size rejection), so cross-origin clients can still read those responses.
38
+ */
39
+ export declare function getActualResponseCorsHeaders(options: CorsOptions, request: Request): Headers;
33
40
  export declare function createCorsMiddleware<Context>(options: CorsOptions): IHttpServerComponent.IRequestHandler<Context>;
34
41
  export {};
package/dist/cors.js CHANGED
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.corsHeaders = void 0;
5
5
  exports.handleOptions = handleOptions;
6
+ exports.getActualResponseCorsHeaders = getActualResponseCorsHeaders;
6
7
  exports.createCorsMiddleware = createCorsMiddleware;
7
8
  const helpers_1 = require("./helpers");
8
9
  exports.corsHeaders = {
@@ -101,6 +102,22 @@ function configureMaxAge(options, req, headers) {
101
102
  headers.set('Access-Control-Max-Age', options.maxAge.toString());
102
103
  }
103
104
  }
105
+ /**
106
+ * Builds the CORS headers that apply to an actual (non-preflight) response for `request`. Returns
107
+ * an empty `Headers` when the request carries no `Origin`, since there is nothing to add. Shared by
108
+ * the CORS middleware and by paths that respond before the middleware runs (e.g. an early
109
+ * body-size rejection), so cross-origin clients can still read those responses.
110
+ */
111
+ function getActualResponseCorsHeaders(options, request) {
112
+ const headers = new Headers();
113
+ if (!request.headers.has('origin')) {
114
+ return headers;
115
+ }
116
+ configureOrigin(options, request, headers);
117
+ configureCredentials(options, request, headers);
118
+ configureExposedHeaders(options, request, headers);
119
+ return headers;
120
+ }
104
121
  function createCorsMiddleware(options) {
105
122
  return async function handleCors(event, next) {
106
123
  const request = event.request;
@@ -136,9 +153,7 @@ function createCorsMiddleware(options) {
136
153
  const base = r instanceof Response ? (0, helpers_1.fromNativeResponse)(r) : r;
137
154
  // actual response
138
155
  const headers = new Headers(base.headers);
139
- configureOrigin(options, request, headers);
140
- configureCredentials(options, request, headers);
141
- configureExposedHeaders(options, request, headers);
156
+ getActualResponseCorsHeaders(options, request).forEach((value, key) => headers.set(key, value));
142
157
  return { ...base, headers };
143
158
  }
144
159
  };
package/dist/cors.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cors.js","sourceRoot":"","sources":["../src/cors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cors.js","sourceRoot":"","sources":["../src/cors.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './server';
2
+ export * from './body-size-limiter';
2
3
  export * from './injectors';
3
4
  export * from './test-component';
4
5
  export * from './types';
package/dist/index.js CHANGED
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./server"), exports);
18
+ __exportStar(require("./body-size-limiter"), exports);
18
19
  __exportStar(require("./injectors"), exports);
19
20
  __exportStar(require("./test-component"), exports);
20
21
  __exportStar(require("./types"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,8CAA2B;AAC3B,mDAAgC;AAChC,0CAAuB;AACvB,kDAA+B;AAC/B,4CAAyB;AACzB,2CAAwB;AACxB,4CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,sDAAmC;AACnC,8CAA2B;AAC3B,mDAAgC;AAChC,0CAAuB;AACvB,kDAA+B;AAC/B,4CAAyB;AACzB,2CAAwB;AACxB,4CAAyB"}
package/dist/logic.d.ts CHANGED
@@ -3,7 +3,7 @@ import type { IHttpServerComponent } from '@dcl/core-commons';
3
3
  import { Middleware } from './middleware';
4
4
  export declare const getRequestFromNodeMessage: <T extends http.IncomingMessage & {
5
5
  originalUrl?: string;
6
- }>(request: T, host: string) => IHttpServerComponent.IRequest;
6
+ }>(request: T, host: string, maxBodySize?: number, onBodyExceeded?: () => void) => IHttpServerComponent.IRequest;
7
7
  export declare const coerceErrorsMiddleware: Middleware<any>;
8
8
  /**
9
9
  * Default middleware
package/dist/logic.js CHANGED
@@ -38,6 +38,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.coerceErrorsMiddleware = exports.getRequestFromNodeMessage = exports.isBlob = void 0;
40
40
  exports.getServer = getServer;
41
+ exports.payloadTooLargeError = payloadTooLargeError;
42
+ exports.assertValidMaxBodySize = assertValidMaxBodySize;
43
+ exports.exceedsContentLength = exceedsContentLength;
44
+ exports.createBodySizeLimiter = createBodySizeLimiter;
41
45
  exports.success = success;
42
46
  exports.getDefaultMiddlewares = getDefaultMiddlewares;
43
47
  exports.defaultHandler = defaultHandler;
@@ -48,7 +52,7 @@ const http = __importStar(require("http"));
48
52
  const https = __importStar(require("https"));
49
53
  const destroy_1 = __importDefault(require("destroy"));
50
54
  const on_finished_1 = __importDefault(require("on-finished"));
51
- const http_errors_1 = require("http-errors");
55
+ const http_errors_1 = __importStar(require("http-errors"));
52
56
  const ws_1 = require("./ws");
53
57
  const helpers_1 = require("./helpers");
54
58
  /**
@@ -56,16 +60,90 @@ const helpers_1 = require("./helpers");
56
60
  */
57
61
  function getServer(options, listener) {
58
62
  let server;
59
- if ('https' in options && options.https)
63
+ // Note: these branches must be mutually exclusive. A plain `if (https) ... if (http) ... else`
64
+ // would let the trailing `else` overwrite an https server whenever `http` is absent.
65
+ if ('https' in options && options.https) {
60
66
  server = https.createServer(options.https, listener);
61
- if ('http' in options && options.http)
67
+ }
68
+ else if ('http' in options && options.http) {
62
69
  server = http.createServer(options.http, listener);
63
- else
70
+ }
71
+ else {
64
72
  server = http.createServer(listener);
73
+ }
65
74
  server.keepAliveTimeout = options.keepAliveTimeout ?? 70000;
66
75
  server.headersTimeout = options.headersTimeout ?? 75000;
76
+ if (options.requestTimeout !== undefined)
77
+ server.requestTimeout = options.requestTimeout;
78
+ if (options.maxHeadersCount !== undefined)
79
+ server.maxHeadersCount = options.maxHeadersCount;
80
+ if (options.maxRequestsPerSocket !== undefined)
81
+ server.maxRequestsPerSocket = options.maxRequestsPerSocket;
67
82
  return server;
68
83
  }
84
+ /**
85
+ * @internal
86
+ * Builds the error thrown when a request body exceeds the configured `maxBodySize`. It is an
87
+ * `HttpError`, so `coerceErrorsMiddleware` maps it to a `413 Payload Too Large` response when a
88
+ * handler reads the body within the middleware chain.
89
+ */
90
+ function payloadTooLargeError() {
91
+ return (0, http_errors_1.default)(413, 'Payload Too Large');
92
+ }
93
+ /**
94
+ * @internal
95
+ * Validates a `maxBodySize` option, throwing if it is defined but not a positive integer number of
96
+ * bytes. A negative, fractional or zero limit would silently reject every request body.
97
+ */
98
+ function assertValidMaxBodySize(maxBodySize) {
99
+ if (maxBodySize !== undefined && (!Number.isInteger(maxBodySize) || maxBodySize < 1)) {
100
+ throw new Error(`Invalid maxBodySize: expected a positive integer number of bytes, got ${maxBodySize}`);
101
+ }
102
+ }
103
+ /**
104
+ * @internal
105
+ * Parses an incoming `Content-Length` header and reports whether it declares a body larger than
106
+ * `maxBodySize`. The comparison is strict (`>`), so a declared length of exactly `maxBodySize` is
107
+ * allowed. A missing, empty or non-numeric header is treated as "not exceeding" — those bodies
108
+ * (including chunked transfer-encoding) are caught instead by {@link createBodySizeLimiter} while
109
+ * streaming.
110
+ */
111
+ function exceedsContentLength(contentLength, maxBodySize) {
112
+ if (contentLength === null || contentLength === undefined || contentLength === '')
113
+ return false;
114
+ const declared = Number(contentLength);
115
+ return Number.isFinite(declared) && declared > maxBodySize;
116
+ }
117
+ /**
118
+ * @internal
119
+ * Wraps a Node request stream so it errors with a `413` once more than `maxBodySize` bytes have
120
+ * flowed through, invoking `onExceeded` so the caller can react (e.g. close the connection). This
121
+ * guards against bodies that omit or under-declare `Content-Length` (e.g. chunked transfer-encoding),
122
+ * which the up-front header check cannot catch. A handler that reads the body within the middleware
123
+ * chain surfaces the error as a clean `413` (via `coerceErrorsMiddleware`).
124
+ */
125
+ function createBodySizeLimiter(source, maxBodySize, onExceeded) {
126
+ let received = 0;
127
+ const limiter = new stream_1.Transform({
128
+ transform(chunk, _encoding, callback) {
129
+ received += chunk.length;
130
+ if (received > maxBodySize) {
131
+ onExceeded?.();
132
+ callback(payloadTooLargeError());
133
+ }
134
+ else {
135
+ callback(null, chunk);
136
+ }
137
+ }
138
+ });
139
+ // Forward a failure of the underlying request (e.g. a client abort) to the limiter so the
140
+ // handler's body read rejects. The reverse is intentionally not wired: destroying `source` on a
141
+ // limiter error would tear down the socket and prevent the `413` response from being written —
142
+ // `pipe` already unpipes `source` when the limiter errors, which stops it from feeding more data.
143
+ source.once('error', (err) => limiter.destroy(err));
144
+ source.pipe(limiter);
145
+ return limiter;
146
+ }
69
147
  const NAME = Symbol.toStringTag;
70
148
  /**
71
149
  * Check if `object` is a W3C `Blob` object (which `File` inherits from)
@@ -128,7 +206,7 @@ function getDefaultMiddlewares() {
128
206
  // it instead of re-parsing `request.url` on every request. Weakly keyed, so an entry
129
207
  // disappears together with its request.
130
208
  const parsedUrlByRequest = new WeakMap();
131
- const getRequestFromNodeMessage = (request, host) => {
209
+ const getRequestFromNodeMessage = (request, host, maxBodySize, onBodyExceeded) => {
132
210
  const headers = new Headers();
133
211
  for (let key in request.headers) {
134
212
  if (request.headers.hasOwnProperty(key)) {
@@ -156,7 +234,10 @@ const getRequestFromNodeMessage = (request, host) => {
156
234
  if (method != 'GET' && method != 'HEAD' && !bodyAlreadyConsumed) {
157
235
  // The native `Request` body must be a web `ReadableStream`. Adapt the incoming Node message
158
236
  // stream; `duplex: 'half'` is required by the fetch spec when streaming a request body.
159
- requestInit.body = stream_1.Readable.toWeb(request);
237
+ // When a `maxBodySize` is configured the stream is first routed through a limiter that errors
238
+ // once the body exceeds it, catching bodies that omit or under-declare `Content-Length`.
239
+ const bodySource = maxBodySize === undefined ? request : createBodySizeLimiter(request, maxBodySize, onBodyExceeded);
240
+ requestInit.body = stream_1.Readable.toWeb(bodySource);
160
241
  requestInit.duplex = 'half';
161
242
  }
162
243
  const protocol = headers.get('X-Forwarded-Proto') == 'https' ? 'https' : 'http';
package/dist/logic.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"logic.js","sourceRoot":"","sources":["../src/logic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logic.js","sourceRoot":"","sources":["../src/logic.ts"],"names":[],"mappings":"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"}
package/dist/metrics.js CHANGED
@@ -109,6 +109,15 @@ async function instrumentHttpServerWithPromClientRegistry(options) {
109
109
  try {
110
110
  return (res = await next());
111
111
  }
112
+ catch (error) {
113
+ // A thrown error is turned into a response by `coerceErrorsMiddleware`, which runs *outside*
114
+ // this middleware, so the final response object never reaches us here. Derive the status the
115
+ // same way it does, so the metric is labelled with the real code (e.g. a thrown `413` or
116
+ // `404`, or `500` for an unmapped error) instead of defaulting to `200`. Coerce to a number so
117
+ // a non-numeric `.status`/`.statusCode` can't leak into a high-cardinality Prometheus label.
118
+ labels.code = Number(error?.status || error?.statusCode) || 500;
119
+ throw error;
120
+ }
112
121
  finally {
113
122
  labels.code = (res && res.status) || labels.code;
114
123
  if (ctx.routerPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -46,6 +46,19 @@ const terminator_1 = require("./terminator");
46
46
  const ws_1 = require("./ws");
47
47
  const destroy_1 = __importDefault(require("destroy"));
48
48
  const cors_1 = require("./cors");
49
+ /**
50
+ * Builds a throwaway web `Request` carrying only the incoming `Origin` header, so the CORS helpers
51
+ * (which read `request.headers.get('origin')`) can run on the early body-size rejection path
52
+ * without adapting the request body.
53
+ */
54
+ function corsRequestFromNodeMessage(req) {
55
+ const headers = new Headers();
56
+ const origin = req.headers.origin;
57
+ if (typeof origin === 'string') {
58
+ headers.set('origin', origin);
59
+ }
60
+ return new Request('http://cors.invalid/', { headers });
61
+ }
49
62
  /**
50
63
  * Creates a http-server component
51
64
  * @public
@@ -56,6 +69,10 @@ async function createServerComponent(components, options) {
56
69
  // config
57
70
  const port = await config.requireNumber('HTTP_SERVER_PORT');
58
71
  const host = await config.requireString('HTTP_SERVER_HOST');
72
+ const maxBodySize = options.maxBodySize;
73
+ // Catch misconfiguration early: a negative, fractional, NaN or zero limit would silently reject
74
+ // every request body rather than do something useful. Omit the option for "no limit".
75
+ (0, logic_1.assertValidMaxBodySize)(maxBodySize);
59
76
  let handlerFn = handler;
60
77
  const server = (0, logic_1.getServer)(options, handlerFn);
61
78
  let listen;
@@ -109,8 +126,45 @@ async function createServerComponent(components, options) {
109
126
  resetMiddlewares: serverHandler.resetMiddlewares
110
127
  };
111
128
  async function asyncHandle(req, res) {
112
- const request = (0, logic_1.getRequestFromNodeMessage)(req, host);
129
+ // Reject oversized bodies up-front, before reading them, when the client declares its size.
130
+ // Bodies that omit or under-declare `Content-Length` are still capped while streaming by the
131
+ // limiter in `getRequestFromNodeMessage`.
132
+ if (maxBodySize !== undefined && (0, logic_1.exceedsContentLength)(req.headers['content-length'], maxBodySize)) {
133
+ // This path responds before the middleware chain, so it never reaches the metrics middleware.
134
+ // Log it so the rejection is at least observable (e.g. for log-based alerting).
135
+ logger.warn('Rejected request: body exceeds maxBodySize', {
136
+ method: req.method ?? '',
137
+ contentLength: req.headers['content-length'] ?? '',
138
+ maxBodySize
139
+ });
140
+ res.statusCode = 413;
141
+ res.setHeader('content-type', 'text/plain; charset=utf-8');
142
+ // Close the connection: the declared body is never read, so the socket can't be reused.
143
+ // With `Connection: close` Node tears the socket down after the response instead of waiting
144
+ // for the (never-arriving) body.
145
+ res.setHeader('connection', 'close');
146
+ // This path responds before the middleware chain runs, so the CORS middleware never sees it.
147
+ // Add the actual-response CORS headers here so a cross-origin client can read the 413.
148
+ if (options.cors) {
149
+ (0, cors_1.getActualResponseCorsHeaders)(options.cors, corsRequestFromNodeMessage(req)).forEach((value, key) => {
150
+ res.setHeader(key, value);
151
+ });
152
+ }
153
+ res.end('Payload Too Large');
154
+ return;
155
+ }
156
+ // If the streaming limiter trips (a chunked/under-declared body that exceeds `maxBodySize`), the
157
+ // handler's body read rejects and the error middleware produces the `413` — but through the
158
+ // normal response path, which wouldn't close the connection. Flag it here so we can add
159
+ // `Connection: close` and stop the client from continuing to stream into a doomed request.
160
+ let bodyExceeded = false;
161
+ const request = (0, logic_1.getRequestFromNodeMessage)(req, host, maxBodySize, () => {
162
+ bodyExceeded = true;
163
+ });
113
164
  const response = await serverHandler.processRequest(configuredContext, request);
165
+ if (bodyExceeded) {
166
+ res.setHeader('connection', 'close');
167
+ }
114
168
  (0, logic_1.success)(response, res);
115
169
  }
116
170
  async function handleUpgrade(req, socket, head) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -23,8 +23,42 @@ export type ServerComponents = {
23
23
  */
24
24
  export type IHttpServerOptions = {
25
25
  cors?: CorsOptions;
26
+ /**
27
+ * Milliseconds an idle keep-alive socket is kept open waiting for the next request before the
28
+ * server closes it. Maps to Node's `server.keepAliveTimeout`.
29
+ * @defaultValue 70000
30
+ */
26
31
  keepAliveTimeout?: number;
32
+ /**
33
+ * Milliseconds the server waits to receive the complete request headers before aborting the
34
+ * connection. Maps to Node's `server.headersTimeout` and should stay above `keepAliveTimeout`.
35
+ * @defaultValue 75000
36
+ */
27
37
  headersTimeout?: number;
38
+ /**
39
+ * Maximum allowed size, in bytes, of an incoming request body. Requests whose `Content-Length`
40
+ * exceeds it are rejected with `413 Payload Too Large` before the body is read; bodies that
41
+ * exceed it while streaming (e.g. chunked transfer-encoding or an under-declared `Content-Length`)
42
+ * have their stream torn down with the same `413`. The limit is inclusive — a body of exactly
43
+ * `maxBodySize` bytes is allowed, only larger ones are rejected. Must be a positive integer when
44
+ * provided; unset means no limit is enforced.
45
+ */
46
+ maxBodySize?: number;
47
+ /**
48
+ * Milliseconds the server waits to receive the entire request (headers and body) from the client
49
+ * before aborting it. Maps to Node's `server.requestTimeout`. `0` disables the timeout.
50
+ */
51
+ requestTimeout?: number;
52
+ /**
53
+ * Maximum number of request headers allowed. Requests with more headers are rejected. Maps to
54
+ * Node's `server.maxHeadersCount`. `0` means unlimited.
55
+ */
56
+ maxHeadersCount?: number;
57
+ /**
58
+ * Maximum number of requests a single keep-alive socket may serve before the server closes it.
59
+ * Maps to Node's `server.maxRequestsPerSocket`. Unset (or `0`) means unlimited.
60
+ */
61
+ maxRequestsPerSocket?: number;
28
62
  } & ({
29
63
  https: https.ServerOptions;
30
64
  } | {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl/http-server",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "http server component",
5
5
  "repository": {
6
6
  "type": "git",