@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 +85 -0
- package/dist/body-size-limiter.d.ts +19 -0
- package/dist/body-size-limiter.js +87 -0
- package/dist/body-size-limiter.js.map +1 -0
- package/dist/cors.d.ts +7 -0
- package/dist/cors.js +18 -3
- package/dist/cors.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/logic.d.ts +1 -1
- package/dist/logic.js +87 -6
- package/dist/logic.js.map +1 -1
- package/dist/metrics.js +9 -0
- package/dist/metrics.js.map +1 -1
- package/dist/server.js +55 -1
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +34 -0
- package/package.json +1 -1
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
|
-
|
|
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":";AAAA,6FAA6F;;;AAqB7F,sCAIC;
|
|
1
|
+
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../src/cors.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
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 (
|
|
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
|
-
|
|
67
|
+
}
|
|
68
|
+
else if ('http' in options && options.http) {
|
|
62
69
|
server = http.createServer(options.http, listener);
|
|
63
|
-
|
|
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
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,8BAqBC;AAQD,oDAEC;AAOD,wDAIC;AAUD,oDAIC;AAUD,sDAsBC;AAuBD,0BAkCC;AAGD,sDAEC;AA2ID,wCAEC;AAGD,sDAsEC;AAKD,gDAUC;AAxZD,mCAAoD;AACpD,2CAA4B;AAC5B,6CAA8B;AAC9B,sDAA6B;AAC7B,8DAAoC;AAGpC,2DAAwD;AAExD,6BAA4F;AAC5F,uCAA8C;AAgB9C;;GAEG;AACH,SAAgB,SAAS,CACvB,OAAoC,EACpC,QAA8B;IAE9B,IAAI,MAAkC,CAAA;IACtC,+FAA+F;IAC/F,qFAAqF;IACrF,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACtD,CAAC;SAAM,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACpD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,KAAM,CAAA;IAC5D,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAM,CAAA;IACxD,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS;QAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;IACxF,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;QAAE,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;IAC3F,IAAI,OAAO,CAAC,oBAAoB,KAAK,SAAS;QAAE,MAAM,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAA;IAC1G,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB;IAClC,OAAO,IAAA,qBAAe,EAAC,GAAG,EAAE,mBAAmB,CAAC,CAAA;AAClD,CAAC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CAAC,WAA+B;IACpE,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,yEAAyE,WAAW,EAAE,CAAC,CAAA;IACzG,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,oBAAoB,CAAC,aAAwC,EAAE,WAAmB;IAChG,IAAI,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IAC/F,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;IACtC,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,WAAW,CAAA;AAC5D,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CAAC,MAAgB,EAAE,WAAmB,EAAE,UAAuB;IAClG,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,MAAM,OAAO,GAAG,IAAI,kBAAS,CAAC;QAC5B,SAAS,CAAC,KAAa,EAAE,SAAS,EAAE,QAAQ;YAC1C,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAA;YACxB,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;gBAC3B,UAAU,EAAE,EAAE,CAAA;gBACd,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAA;YAClC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEF,0FAA0F;IAC1F,gGAAgG;IAChG,+FAA+F;IAC/F,kGAAkG;IAClG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;IACnD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEpB,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAA;AAC/B;;;;GAIG;AACI,MAAM,MAAM,GAAG,CAAC,MAAW,EAAkB,EAAE;IACpD,OAAO,CACL,MAAM,KAAK,IAAI;QACf,OAAO,MAAM,KAAK,QAAQ;QAC1B,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU;QACxC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAC/B,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU;QACnC,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU;QACxC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CACnC,CAAA;AACH,CAAC,CAAA;AAVY,QAAA,MAAM,UAUlB;AAED;;GAEG;AACH,SAAgB,OAAO,CAAC,IAAwB,EAAE,GAAwB;IACxE,IAAI,IAAI,CAAC,UAAU;QAAE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAA;IACxD,IAAI,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;IAE7C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;QAClD,uFAAuF;QACvF,6FAA6F;QAC7F,2CAA2C;QAC3C,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YACzB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,kGAAkG;IAClG,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACrG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IACzC,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IAEtB,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;SAAM,IAAI,IAAI,IAAI,OAAQ,IAAiB,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEd,kGAAkG;QAClG,IAAA,qBAAU,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAA,iBAAO,EAAC,IAAI,CAAC,CAAC,CAAA;IACtC,CAAC;SAAM,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAC1C,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,YAAY;AACZ,SAAgB,qBAAqB;IACnC,OAAO,CAAC,8BAAsB,CAAC,CAAA;AACjC,CAAC;AAED,qFAAqF;AACrF,qFAAqF;AACrF,wCAAwC;AACxC,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAsC,CAAA;AAErE,MAAM,yBAAyB,GAAG,CACvC,OAAU,EACV,IAAY,EACZ,WAAoB,EACpB,cAA2B,EACI,EAAE;IACjC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAE7B,KAAK,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC9B,IAAI,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACxB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAO,CAAC,WAAW,EAAE,CAAA;IAC5C,MAAM,WAAW,GAAsC;QACrD,OAAO;QACP,MAAM;KACP,CAAA;IAED,8EAA8E;IAC9E,gFAAgF;IAChF,wEAAwE;IACxE,gFAAgF;IAChF,+EAA+E;IAC/E,sCAAsC;IACtC,MAAM,mBAAmB,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,eAAe,CAAA;IAC5E,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChE,4FAA4F;QAC5F,wFAAwF;QACxF,8FAA8F;QAC9F,yFAAyF;QACzF,MAAM,UAAU,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;QACpH,WAAW,CAAC,IAAI,GAAG,iBAAQ,CAAC,KAAK,CAAC,UAAU,CAA8B,CAAA;QAC1E,WAAW,CAAC,MAAM,GAAG,MAAM,CAAA;IAC7B,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;IAC/E,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC,CAAA;IAEhH,mEAAmE;IACnE,+DAA+D;IAC/D,yDAAyD;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAI,CAAA;IACvD,iFAAiF;IACjF,8EAA8E;IAC9E,IAAI,GAAQ,CAAA;IACZ,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,GAAG,WAAW,CAAC,CAAA;IACtC,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,CAAA;IAEpD,+EAA+E;IAC/E,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAEhC,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AA/DY,QAAA,yBAAyB,6BA+DrC;AAEM,MAAM,sBAAsB,GAAoB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;IACvE,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAA;IACrB,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IACE,CAAC,YAAY,uBAAS;YACtB,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,QAAQ,IAAI,OAAO,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC,EAC1G,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU;gBAChC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO;gBACzB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAA;QACH,CAAC;QACD,MAAM,CAAC,CAAA;IACT,CAAC;AACH,CAAC,CAAA;AAhBY,QAAA,sBAAsB,0BAgBlC;AAED,SAAS,aAAa,CACpB,MAAyC,EACzC,QAAwC,EACxC,cAAuB;IAEvB,aAAa;IACb,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAqB,CAAC,CAAA;IAClF,cAAc,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/D,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAA;AACpG,CAAC;AAED,SAAS,WAAW,CAClB,IAAS,EACT,QAAwC,EACxC,cAAuB;IAEvB,aAAa;IACb,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACxC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;AACtE,CAAC;AAED,SAAS,aAAa,CACpB,GAAW,EACX,QAAwC,EACxC,cAAuB;IAEvB,aAAa;IACb,wBAAwB;IACxB,MAAM,cAAc,GAAG,OAAO,CAAA;IAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAElD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACxC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,uBAAuB,cAAc,EAAE,CAAC,CAAA;IAC7E,CAAC;IAED,OAAO,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;AAC3D,CAAC;AAED,MAAM,eAAe,GAAmC;IACtD,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,WAAW;CAClB,CAAA;AAED;;;GAGG;AACI,KAAK,UAAU,cAAc;IAClC,OAAO,eAAe,CAAA;AACxB,CAAC;AAED,YAAY;AACZ,SAAgB,qBAAqB,CACnC,OAAsC,EACtC,QAAwC;IAExC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,kBAAkB;QAClB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,yCAAyC,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,EAAE,CAAA;IACvG,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAA,yBAAoB,EAAC,QAAQ,CAAC,CAAA;QACzC,OAAO,IAAA,0BAAqB,EAC1B,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAsB,CAAC,EAAwB,EAC5F,EAAE,CACH,CAAA;IACH,CAAC;IAED,IAAI,QAAQ,YAAY,QAAQ,EAAE,CAAC;QACjC,iFAAiF;QACjF,8EAA8E;QAC9E,OAAO,qBAAqB,CAAC,OAAO,EAAE,IAAA,4BAAkB,EAAC,QAAQ,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAA;IAChF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAA;IACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAA;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAA;IAEvC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAsB,CAAC,CAAA;IAEnE,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QACnB,4BAA4B;QAC5B,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QACrC,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;QACvC,cAAc,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAC5C,CAAC;IAED,gEAAgE;IAChE,0EAA0E;IAC1E,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACtC,4BAA4B;QAC5B,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAA;IAC9F,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;IAC/D,CAAC;SAAM,IAAI,QAAQ,CAAC,IAAI,YAAY,WAAW,IAAI,QAAQ,CAAC,IAAI,YAAY,UAAU,EAAE,CAAC;QACvF,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;IAC/D,CAAC;SAAM,IAAI,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5C,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;IAC/D,CAAC;SAAM,IAAI,QAAQ,CAAC,IAAI,YAAY,eAAM,EAAE,CAAC;QAC3C,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,QAAQ,CAAC,IAAgB;SAChC,CAAA;IACH,CAAC;SAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QACtC,aAAa;QACb,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;IAC7D,CAAC;IAED,4EAA4E;IAC5E,uEAAuE;IACvE,kEAAkE;IAClE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1C,cAAc,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAA;IAC3C,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAA;AAC9F,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAqB,OAAY,EAAE,OAAsC;IACzG,MAAM,UAAU,GAA6C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAEnF,mCAAmC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAA;IAC5B,mFAAmF;IACnF,uFAAuF;IACvF,UAAU,CAAC,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAExE,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
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) {
|
package/dist/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":";;AAgDA,sDAEC;AAoBD,
|
|
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
|
-
|
|
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) {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,sDA+LC;AAhPD,kEAK0C;AAE1C,2CAAkD;AAClD,mCAAqH;AAErH,qDAAsD;AACtD,2CAA4B;AAC5B,6CAAqD;AAErD,6BAA2C;AAC3C,sDAA6B;AAC7B,iCAA2E;AAe3E;;;;GAIG;AACH,SAAS,0BAA0B,CAAC,GAAyB;IAC3D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAA;IACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC/B,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;AACzD,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,qBAAqB,CACzC,UAA4B,EAC5B,OAAoC;IAEpC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,UAAU,CAAA;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IAE5C,SAAS;IACT,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAA;IAC3D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAA;IAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;IAEvC,gGAAgG;IAChG,sFAAsF;IACtF,IAAA,8BAAsB,EAAC,WAAW,CAAC,CAAA;IAEnC,IAAI,SAAS,GAAyB,OAAO,CAAA;IAE7C,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IAE5C,IAAI,MAA0C,CAAA;IAE9C,MAAM,UAAU,GAAG,IAAA,mCAAsB,EAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAA;IAEjE,KAAK,UAAU,KAAK;QAClB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;YAC7C,MAAM,MAAM,CAAA;YACZ,OAAM;QACR,CAAC;QAED,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvC,MAAM,YAAY,GAAG,CAAC,GAAU,EAAE,EAAE;gBAClC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACjB,MAAM,CAAC,GAAG,CAAC,CAAA;YACb,CAAC,CAAA;YAED,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;gBAC5B,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,IAAI,EAAE,CAAC,CAAA;gBACxC,OAAO,CAAC,MAAM,CAAC,CAAA;gBACf,MAAO,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;YACpC,CAAC,CAAC,CAAA;YAEF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACjE,CAAC,CAAC,CAAA;QAEF,MAAM,MAAM,CAAA;IACd,CAAC;IAED,KAAK,UAAU,IAAI;QACjB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC7B,MAAM,UAAU,CAAC,SAAS,EAAE,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI,iBAAiB,GAAY,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAElD,MAAM,aAAa,GAAG,IAAA,oCAAmB,GAAW,CAAA;IAEpD,MAAM,GAAG,GAAqC;QAC5C,iBAAiB;QACjB,KAAK;QACL,IAAI;QACJ,CAAC,4BAAe,CAAC,EAAE,KAAK;QACxB,CAAC,2BAAc,CAAC,EAAE,IAAI;QACtB,+BAA+B;QAC/B,KAAK,CAAC,YAAY;YAChB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,KAAK,CAAC,cAAc;YAClB,OAAO,MAAM,CAAC,SAAS,CAAA;QACzB,CAAC;QACD,uBAAuB;QACvB,GAAG,EAAE,aAAa,CAAC,GAAG;QACtB,UAAU,CAAC,OAAO;YAChB,iBAAiB,GAAG,OAAO,CAAA;QAC7B,CAAC;QAED,QAAQ;QACR,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;KACjD,CAAA;IAED,KAAK,UAAU,WAAW,CAAC,GAAyB,EAAE,GAAwB;QAC5E,4FAA4F;QAC5F,6FAA6F;QAC7F,0CAA0C;QAC1C,IAAI,WAAW,KAAK,SAAS,IAAI,IAAA,4BAAoB,EAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;YAClG,8FAA8F;YAC9F,gFAAgF;YAChF,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE;gBACxD,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;gBACxB,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE;gBAClD,WAAW;aACZ,CAAC,CAAA;YACF,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;YACpB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,2BAA2B,CAAC,CAAA;YAC1D,wFAAwF;YACxF,4FAA4F;YAC5F,iCAAiC;YACjC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;YACpC,6FAA6F;YAC7F,uFAAuF;YACvF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,IAAA,mCAA4B,EAAC,OAAO,CAAC,IAAI,EAAE,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACjG,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;gBAC3B,CAAC,CAAC,CAAA;YACJ,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;YAC5B,OAAM;QACR,CAAC;QAED,iGAAiG;QACjG,4FAA4F;QAC5F,wFAAwF;QACxF,2FAA2F;QAC3F,IAAI,YAAY,GAAG,KAAK,CAAA;QACxB,MAAM,OAAO,GAAG,IAAA,iCAAyB,EAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;YACrE,YAAY,GAAG,IAAI,CAAA;QACrB,CAAC,CAAC,CAAA;QACF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAA;QAE/E,IAAI,YAAY,EAAE,CAAC;YACjB,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QACtC,CAAC;QAED,IAAA,eAAO,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,KAAK,UAAU,aAAa,CAAC,GAAyB,EAAE,MAAc,EAAE,IAAY;QAClF,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,iCAAyB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACpD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAA;QAE/E,MAAM,gBAAgB,GAAG,IAAA,yBAAoB,EAAC,QAAQ,CAAC,CAAA;QAEvD,IAAI,gBAAgB,EAAE,CAAC;YACrB,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACrD,IAAI,CAAC;oBACH,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAA;gBAClC,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;oBACjB,IAAA,iBAAO,EAAC,MAAM,CAAC,CAAA;gBACjB,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAA;gBACjE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,WAAW,CAAA;gBAC/D,MAAM,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,WAAW,IAAI,UAAU,IAAI,UAAU,UAAU,CAAC,CAAA;YAC3E,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,EAAE,CAAA;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAyB,EAAE,MAAc,EAAE,IAAY,EAAE,EAAE;YAC/E,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACpD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACjB,IAAA,iBAAO,EAAC,MAAM,CAAC,CAAA;YACjB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,OAAO,CAAC,OAA6B,EAAE,QAA6B;QAC3E,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAEnB,IAAI,KAAK,CAAC,IAAI,IAAI,iBAAiB,EAAE,CAAC;gBACpC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;gBACzB,QAAQ,CAAC,GAAG,EAAE,CAAA;YAChB,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAA;gBACzB,QAAQ,CAAC,GAAG,EAAE,CAAA;YAChB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAA,gCAAoB,EAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QACnC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QACrD,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,MAAO,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,GAAG,CAAC,GAAG,CAAC,IAAA,2BAAoB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
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
|
} | {
|