@nmtjs/http-transport 0.17.0-beta.6 → 0.17.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/runtimes/bun.js +2 -0
- package/dist/runtimes/bun.js.map +1 -1
- package/dist/runtimes/node.d.ts +8 -0
- package/dist/runtimes/node.js +58 -18
- package/dist/runtimes/node.js.map +1 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.js +115 -21
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +15 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +5 -0
- package/dist/utils.js.map +1 -1
- package/package.json +11 -11
- package/src/constants.ts +3 -0
- package/src/runtimes/bun.ts +3 -0
- package/src/runtimes/node.ts +62 -21
- package/src/server.ts +118 -20
- package/src/types.ts +15 -0
- package/src/utils.ts +6 -0
package/dist/constants.d.ts
CHANGED
package/dist/constants.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { createMeta } from '@nmtjs/application';
|
|
2
2
|
import { ErrorCode } from '@nmtjs/protocol';
|
|
3
|
+
// Matches Bun's maxRequestBodySize default so all runtimes behave the same
|
|
4
|
+
export const DEFAULT_MAX_REQUEST_BODY_SIZE = 128 * 1024 * 1024;
|
|
3
5
|
export var HttpStatus;
|
|
4
6
|
(function (HttpStatus) {
|
|
5
7
|
HttpStatus[HttpStatus["Continue"] = 100] = "Continue";
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/runtimes/bun.js
CHANGED
|
@@ -10,6 +10,8 @@ function adapterFactory(params) {
|
|
|
10
10
|
: {};
|
|
11
11
|
return globalThis.Bun.serve({
|
|
12
12
|
...params.runtime,
|
|
13
|
+
// Bun's own default (128MiB) applies when neither option is set
|
|
14
|
+
maxRequestBodySize: params.runtime?.maxRequestBodySize ?? params.maxRequestBodySize,
|
|
13
15
|
unix: params.listen.unix,
|
|
14
16
|
port: params.listen.port ?? 0,
|
|
15
17
|
hostname: params.listen.hostname,
|
package/dist/runtimes/bun.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun.js","sourceRoot":"","sources":["../../src/runtimes/bun.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bun.js","sourceRoot":"","sources":["../../src/runtimes/bun.ts"],"names":[],"mappings":"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"}
|
package/dist/runtimes/node.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import type { ApplicationTransport } from '@nmtjs/application';
|
|
2
2
|
import type { ConnectionType } from '@nmtjs/protocol';
|
|
3
3
|
import { ProxyableTransportType } from '@nmtjs/gateway';
|
|
4
|
+
import { App } from 'uWebSockets.js';
|
|
4
5
|
import type { HttpTransportOptions } from '../types.ts';
|
|
5
6
|
import * as injectables from '../injectables.ts';
|
|
7
|
+
type UwsResponse = Parameters<Parameters<ReturnType<typeof App>['any']>[1]>[0] & {
|
|
8
|
+
aborted?: boolean;
|
|
9
|
+
wakeWritable?: () => void;
|
|
10
|
+
cancelBody?: () => void;
|
|
11
|
+
};
|
|
12
|
+
export declare function handleChunkedStream(res: UwsResponse, body: ReadableStream<Uint8Array>): Promise<void>;
|
|
6
13
|
export declare const HttpTransport: ApplicationTransport<ConnectionType.Unidirectional, HttpTransportOptions<'node'>, typeof injectables, ProxyableTransportType.HTTP>;
|
|
14
|
+
export {};
|
package/dist/runtimes/node.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import {} from 'node:dns';
|
|
2
2
|
import { ProxyableTransportType } from '@nmtjs/gateway';
|
|
3
3
|
import { App, SSLApp, us_socket_local_port } from 'uWebSockets.js';
|
|
4
|
+
import { DEFAULT_MAX_REQUEST_BODY_SIZE } from '../constants.js';
|
|
4
5
|
import * as injectables from '../injectables.js';
|
|
5
6
|
import { createHTTPTransportWorker } from '../server.js';
|
|
6
|
-
import { InternalServerErrorHttpResponse, NotFoundHttpResponse, OkResponse, } from '../utils.js';
|
|
7
|
+
import { InternalServerErrorHttpResponse, NotFoundHttpResponse, OkResponse, PayloadTooLargeError, } from '../utils.js';
|
|
7
8
|
const statusResponse = OkResponse();
|
|
8
9
|
const statusResponseBuffer = await statusResponse.arrayBuffer();
|
|
9
10
|
function adapterFactory(params) {
|
|
11
|
+
const maxBodySize = params.maxRequestBodySize ?? DEFAULT_MAX_REQUEST_BODY_SIZE;
|
|
10
12
|
const server = params.tls
|
|
11
13
|
? SSLApp({
|
|
12
14
|
passphrase: params.tls.passphrase,
|
|
@@ -30,6 +32,8 @@ function adapterFactory(params) {
|
|
|
30
32
|
res.onAborted(() => {
|
|
31
33
|
aborted = true;
|
|
32
34
|
uwsRes.aborted = true;
|
|
35
|
+
uwsRes.wakeWritable?.();
|
|
36
|
+
uwsRes.cancelBody?.();
|
|
33
37
|
requestController.abort();
|
|
34
38
|
try {
|
|
35
39
|
bodyController?.error(requestController.signal.reason);
|
|
@@ -41,17 +45,34 @@ function adapterFactory(params) {
|
|
|
41
45
|
const method = req.getMethod();
|
|
42
46
|
req.forEach((k, v) => headers.append(k, v));
|
|
43
47
|
const host = headers.get('host') || 'localhost';
|
|
44
|
-
const
|
|
48
|
+
const forwardedProto = headers.get('x-forwarded-proto');
|
|
49
|
+
const proto = forwardedProto
|
|
50
|
+
? forwardedProto === 'https'
|
|
51
|
+
? 'https'
|
|
52
|
+
: 'http'
|
|
53
|
+
: params.tls
|
|
54
|
+
? 'https'
|
|
55
|
+
: 'http';
|
|
45
56
|
const url = new URL(req.getUrl(), `${proto}://${host}`);
|
|
46
57
|
url.search = req.getQuery() ? `?${req.getQuery()}` : '';
|
|
47
58
|
try {
|
|
59
|
+
// uWS delivers chunks without backpressure, so cap what gets copied
|
|
60
|
+
// into memory before the whole body arrives
|
|
61
|
+
let received = 0;
|
|
62
|
+
let capped = false;
|
|
48
63
|
const body = new ReadableStream({
|
|
49
64
|
start(controller) {
|
|
50
65
|
bodyController = controller;
|
|
51
66
|
res.onDataV2((chunk, maxRemainingBodyLength) => {
|
|
52
|
-
if (aborted)
|
|
67
|
+
if (aborted || capped)
|
|
53
68
|
return;
|
|
54
69
|
if (chunk) {
|
|
70
|
+
received += chunk.byteLength;
|
|
71
|
+
if (received > maxBodySize) {
|
|
72
|
+
capped = true;
|
|
73
|
+
controller.error(new PayloadTooLargeError());
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
55
76
|
const copy = Buffer.allocUnsafe(chunk.byteLength);
|
|
56
77
|
copy.set(new Uint8Array(chunk));
|
|
57
78
|
controller.enqueue(copy);
|
|
@@ -169,8 +190,34 @@ async function handleFixedLengthStream(res, body, totalSize) {
|
|
|
169
190
|
reader.releaseLock();
|
|
170
191
|
}
|
|
171
192
|
}
|
|
172
|
-
|
|
193
|
+
// exported for tests: the waiter dispatch is timing-sensitive and needs
|
|
194
|
+
// deterministic coverage against a controlled response double
|
|
195
|
+
export async function handleChunkedStream(res, body) {
|
|
173
196
|
const reader = body.getReader();
|
|
197
|
+
// abort must also cancel a pending read(): a stalled source would otherwise
|
|
198
|
+
// keep the pump and the reader lock alive forever
|
|
199
|
+
res.cancelBody = () => {
|
|
200
|
+
reader.cancel().catch(() => { });
|
|
201
|
+
};
|
|
202
|
+
// uWS honors only the first onWritable registration per response, so a
|
|
203
|
+
// single handler dispatches drain (and abort) events to the pending waiter
|
|
204
|
+
let writableHandlerRegistered = false;
|
|
205
|
+
const waitWritable = () => new Promise((resolve, reject) => {
|
|
206
|
+
if (!writableHandlerRegistered) {
|
|
207
|
+
writableHandlerRegistered = true;
|
|
208
|
+
res.onWritable(() => {
|
|
209
|
+
res.wakeWritable?.();
|
|
210
|
+
return true;
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
res.wakeWritable = () => {
|
|
214
|
+
res.wakeWritable = undefined;
|
|
215
|
+
if (res.aborted)
|
|
216
|
+
reject(new Error('Response aborted'));
|
|
217
|
+
else
|
|
218
|
+
resolve();
|
|
219
|
+
};
|
|
220
|
+
});
|
|
174
221
|
try {
|
|
175
222
|
while (!res.aborted) {
|
|
176
223
|
const { done, value } = await reader.read();
|
|
@@ -178,14 +225,19 @@ async function handleChunkedStream(res, body) {
|
|
|
178
225
|
break;
|
|
179
226
|
if (value.byteLength === 0)
|
|
180
227
|
continue;
|
|
181
|
-
|
|
228
|
+
// cork() returns the response object, not write()'s backpressure flag
|
|
229
|
+
let ok = true;
|
|
230
|
+
res.cork(() => {
|
|
231
|
+
ok = res.write(value);
|
|
232
|
+
});
|
|
182
233
|
if (!ok)
|
|
183
|
-
await waitWritable(
|
|
234
|
+
await waitWritable();
|
|
184
235
|
}
|
|
185
236
|
if (!res.aborted)
|
|
186
237
|
res.cork(() => res.end());
|
|
187
238
|
}
|
|
188
239
|
finally {
|
|
240
|
+
res.cancelBody = undefined;
|
|
189
241
|
reader.releaseLock();
|
|
190
242
|
}
|
|
191
243
|
}
|
|
@@ -215,18 +267,6 @@ function handleFixedChunk(res, chunk, totalSize) {
|
|
|
215
267
|
write(chunkOffset);
|
|
216
268
|
});
|
|
217
269
|
}
|
|
218
|
-
function waitWritable(res) {
|
|
219
|
-
return new Promise((resolve, reject) => {
|
|
220
|
-
res.onWritable(() => {
|
|
221
|
-
if (res.aborted) {
|
|
222
|
-
reject(new Error('Response aborted'));
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
resolve();
|
|
226
|
-
return true;
|
|
227
|
-
});
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
270
|
function getContentLength(headers) {
|
|
231
271
|
const raw = headers.get('content-length');
|
|
232
272
|
if (!raw)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/runtimes/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAA;AAIzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAOlE,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EACL,+BAA+B,EAC/B,oBAAoB,EACpB,UAAU,
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/runtimes/node.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export declare class HttpTransportServer implements TransportWorker<ConnectionTy
|
|
|
12
12
|
start(hooks: TransportWorkerParams<ConnectionType.Unidirectional, ApplicationResolvedProcedure>): Promise<string>;
|
|
13
13
|
stop(): Promise<void>;
|
|
14
14
|
httpHandler(request: HttpTransportServerRequest, body: ReadableStream | null, requestSignal: AbortSignal): Promise<Response>;
|
|
15
|
+
private createBodySizeGuard;
|
|
15
16
|
private applyCors;
|
|
16
17
|
private createServer;
|
|
17
18
|
}
|
package/dist/server.js
CHANGED
|
@@ -51,17 +51,20 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
|
|
|
51
51
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
52
|
});
|
|
53
53
|
import { Buffer } from 'node:buffer';
|
|
54
|
-
import { Duplex, Readable } from 'node:stream';
|
|
54
|
+
import { Duplex, Readable, Transform } from 'node:stream';
|
|
55
|
+
import { pipeline } from 'node:stream/promises';
|
|
55
56
|
import { anyAbortSignal, isAbortError, isAsyncIterable } from '@nmtjs/common';
|
|
56
57
|
import { provision } from '@nmtjs/core';
|
|
57
58
|
import { ConnectionType, ErrorCode, ProtocolBlob, ProtocolVersion, } from '@nmtjs/protocol';
|
|
58
59
|
import { ProtocolClientStream, ProtocolError, UnsupportedContentTypeError, UnsupportedFormatError, } from '@nmtjs/protocol/server';
|
|
59
|
-
import { AllowedHttpMethod, HttpCodeMap, HttpStatus, HttpStatusText, } from './constants.js';
|
|
60
|
+
import { AllowedHttpMethod, DEFAULT_MAX_REQUEST_BODY_SIZE, HttpCodeMap, HttpStatus, HttpStatusText, } from './constants.js';
|
|
60
61
|
import * as injections from './injectables.js';
|
|
62
|
+
import { PayloadTooLargeError } from './utils.js';
|
|
61
63
|
const NEEMATA_BLOB_HEADER = 'X-Neemata-Blob';
|
|
62
64
|
const DEFAULT_ALLOWED_METHODS = Object.freeze(['post']);
|
|
65
|
+
// No allowCredentials here: reflecting arbitrary origins with credentials
|
|
66
|
+
// would let any website make cookie-authed requests
|
|
63
67
|
const DEFAULT_CORS_PARAMS = Object.freeze({
|
|
64
|
-
allowCredentials: 'true',
|
|
65
68
|
allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
|
66
69
|
allowHeaders: [
|
|
67
70
|
'Content-Type',
|
|
@@ -76,6 +79,11 @@ const DEFAULT_CORS_PARAMS = Object.freeze({
|
|
|
76
79
|
exposeHeaders: [],
|
|
77
80
|
requestHeaders: [],
|
|
78
81
|
});
|
|
82
|
+
// Credentials are safe to allow when the user explicitly vetted the origin
|
|
83
|
+
const EXPLICIT_ORIGIN_CORS_PARAMS = Object.freeze({
|
|
84
|
+
...DEFAULT_CORS_PARAMS,
|
|
85
|
+
allowCredentials: 'true',
|
|
86
|
+
});
|
|
79
87
|
const CORS_HEADERS_MAP = {
|
|
80
88
|
origin: 'Access-Control-Allow-Origin',
|
|
81
89
|
allowMethods: 'Access-Control-Allow-Methods',
|
|
@@ -94,12 +102,15 @@ export class HttpTransportServer {
|
|
|
94
102
|
options;
|
|
95
103
|
#server;
|
|
96
104
|
#corsOptions;
|
|
105
|
+
#maxRequestBodySize;
|
|
97
106
|
params;
|
|
98
107
|
constructor(adapterFactory, options) {
|
|
99
108
|
this.adapterFactory = adapterFactory;
|
|
100
109
|
this.options = options;
|
|
101
110
|
this.#server = this.createServer();
|
|
102
111
|
this.#corsOptions = this.options.cors;
|
|
112
|
+
this.#maxRequestBodySize =
|
|
113
|
+
this.options.maxRequestBodySize ?? DEFAULT_MAX_REQUEST_BODY_SIZE;
|
|
103
114
|
}
|
|
104
115
|
async start(hooks) {
|
|
105
116
|
this.params = hooks;
|
|
@@ -116,6 +127,10 @@ export class HttpTransportServer {
|
|
|
116
127
|
const method = request.method.toLowerCase();
|
|
117
128
|
const origin = request.headers.get('origin');
|
|
118
129
|
const responseHeaders = new Headers();
|
|
130
|
+
// CORS makes responses origin-dependent (even denials), so shared caches
|
|
131
|
+
// must key on Origin to avoid serving them across origins
|
|
132
|
+
if (this.#corsOptions)
|
|
133
|
+
responseHeaders.append('Vary', 'Origin');
|
|
119
134
|
if (origin)
|
|
120
135
|
this.applyCors(origin, request, responseHeaders);
|
|
121
136
|
// Handle preflight requests
|
|
@@ -131,8 +146,14 @@ export class HttpTransportServer {
|
|
|
131
146
|
const isBlob = request.headers.get(NEEMATA_BLOB_HEADER) === 'true';
|
|
132
147
|
const contentType = request.headers.get('content-type');
|
|
133
148
|
const accept = request.headers.get('accept') || '*/*';
|
|
149
|
+
// GET endpoints are reachable via browser navigation, which sends HTML
|
|
150
|
+
// Accept headers; fall back to the default format only when the client's
|
|
151
|
+
// Accept can't be negotiated
|
|
152
|
+
const negotiableAccept = canHaveBody || this.params.formats.supportsEncoder(accept)
|
|
153
|
+
? accept
|
|
154
|
+
: '*/*';
|
|
134
155
|
const connection = __addDisposableResource(env_1, await this.params.onConnect({
|
|
135
|
-
accept:
|
|
156
|
+
accept: negotiableAccept,
|
|
136
157
|
contentType: isBlob || !contentType ? '*/*' : contentType,
|
|
137
158
|
data: request,
|
|
138
159
|
protocolVersion: ProtocolVersion.v1,
|
|
@@ -146,7 +167,6 @@ export class HttpTransportServer {
|
|
|
146
167
|
}
|
|
147
168
|
let payload;
|
|
148
169
|
if (canHaveBody && body) {
|
|
149
|
-
const bodyStream = Readable.fromWeb(body);
|
|
150
170
|
const cannotDecode = !contentType || !this.params.formats.supportsDecoder(contentType);
|
|
151
171
|
if (isBlob || cannotDecode) {
|
|
152
172
|
const type = contentType || 'application/octet-stream';
|
|
@@ -154,11 +174,31 @@ export class HttpTransportServer {
|
|
|
154
174
|
const size = contentLength
|
|
155
175
|
? Number.parseInt(contentLength, 10)
|
|
156
176
|
: undefined;
|
|
157
|
-
|
|
158
|
-
|
|
177
|
+
// Declared size over the cap: reject before reading anything
|
|
178
|
+
if (size !== undefined && size > this.#maxRequestBodySize) {
|
|
179
|
+
throw new PayloadTooLargeError();
|
|
180
|
+
}
|
|
181
|
+
const clientStream = new ProtocolClientStream(-1, { size, type });
|
|
182
|
+
// The rpc may never read the payload; without a handler a capped
|
|
183
|
+
// upload would crash the process with an unhandled 'error'
|
|
184
|
+
clientStream.on('error', () => { });
|
|
185
|
+
payload = clientStream;
|
|
186
|
+
// pipeline (unlike pipe) propagates source errors; the cap error is
|
|
187
|
+
// re-surfaced on the payload stream so its consumer rejects with it
|
|
188
|
+
pipeline(Readable.fromWeb(body), this.createBodySizeGuard(), clientStream).catch((error) => clientStream.destroy(error));
|
|
159
189
|
}
|
|
160
190
|
else {
|
|
161
|
-
const
|
|
191
|
+
const chunks = [];
|
|
192
|
+
let received = 0;
|
|
193
|
+
for await (const chunk of Readable.fromWeb(body)) {
|
|
194
|
+
received += chunk.byteLength;
|
|
195
|
+
// Reject mid-stream to avoid buffering unbounded payloads
|
|
196
|
+
if (received > this.#maxRequestBodySize) {
|
|
197
|
+
throw new PayloadTooLargeError();
|
|
198
|
+
}
|
|
199
|
+
chunks.push(chunk);
|
|
200
|
+
}
|
|
201
|
+
const buffer = Buffer.concat(chunks);
|
|
162
202
|
if (buffer.byteLength > 0) {
|
|
163
203
|
payload = connection.decoder.decode(buffer);
|
|
164
204
|
}
|
|
@@ -167,7 +207,12 @@ export class HttpTransportServer {
|
|
|
167
207
|
else {
|
|
168
208
|
const querystring = url.searchParams.get('payload');
|
|
169
209
|
if (querystring) {
|
|
170
|
-
|
|
210
|
+
try {
|
|
211
|
+
payload = JSON.parse(querystring);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
throw new ProtocolError(ErrorCode.BadRequest, 'Invalid payload');
|
|
215
|
+
}
|
|
171
216
|
}
|
|
172
217
|
}
|
|
173
218
|
const result = await this.params.onRpc(connection, {
|
|
@@ -178,7 +223,11 @@ export class HttpTransportServer {
|
|
|
178
223
|
if (result instanceof Response) {
|
|
179
224
|
const { status, statusText, headers, body } = result;
|
|
180
225
|
headers.forEach((value, key) => {
|
|
181
|
-
|
|
226
|
+
// Merge Vary so the cors Origin entry isn't lost to shared caches
|
|
227
|
+
if (key.toLowerCase() === 'vary')
|
|
228
|
+
responseHeaders.append(key, value);
|
|
229
|
+
else
|
|
230
|
+
responseHeaders.set(key, value);
|
|
182
231
|
});
|
|
183
232
|
return new Response(body, {
|
|
184
233
|
status,
|
|
@@ -191,7 +240,8 @@ export class HttpTransportServer {
|
|
|
191
240
|
const { type } = metadata;
|
|
192
241
|
responseHeaders.set(NEEMATA_BLOB_HEADER, 'true');
|
|
193
242
|
responseHeaders.set('Content-Type', type);
|
|
194
|
-
|
|
243
|
+
// nullish check — zero is a valid size for empty blobs
|
|
244
|
+
if (metadata.size !== undefined) {
|
|
195
245
|
responseHeaders.set('Content-Length', metadata.size.toString());
|
|
196
246
|
}
|
|
197
247
|
if (metadata.filename) {
|
|
@@ -246,7 +296,10 @@ export class HttpTransportServer {
|
|
|
246
296
|
}
|
|
247
297
|
else {
|
|
248
298
|
// Handle regular responses
|
|
249
|
-
|
|
299
|
+
// void results respond with an empty body — encode rejects undefined
|
|
300
|
+
const buffer = typeof result === 'undefined'
|
|
301
|
+
? undefined
|
|
302
|
+
: connection.encoder.encode(result);
|
|
250
303
|
responseHeaders.set('Content-Type', connection.encoder.contentType);
|
|
251
304
|
// @ts-expect-error
|
|
252
305
|
return new Response(buffer, {
|
|
@@ -257,6 +310,15 @@ export class HttpTransportServer {
|
|
|
257
310
|
}
|
|
258
311
|
}
|
|
259
312
|
catch (error) {
|
|
313
|
+
if (error instanceof PayloadTooLargeError) {
|
|
314
|
+
const status = HttpStatus.PayloadTooLarge;
|
|
315
|
+
const text = HttpStatusText[status];
|
|
316
|
+
return new Response(text, {
|
|
317
|
+
status,
|
|
318
|
+
statusText: text,
|
|
319
|
+
headers: responseHeaders,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
260
322
|
if (error instanceof UnsupportedFormatError) {
|
|
261
323
|
const status = error instanceof UnsupportedContentTypeError
|
|
262
324
|
? HttpStatus.UnsupportedMediaType
|
|
@@ -305,6 +367,20 @@ export class HttpTransportServer {
|
|
|
305
367
|
await result_1;
|
|
306
368
|
}
|
|
307
369
|
}
|
|
370
|
+
createBodySizeGuard() {
|
|
371
|
+
const maxSize = this.#maxRequestBodySize;
|
|
372
|
+
let received = 0;
|
|
373
|
+
return new Transform({
|
|
374
|
+
transform(chunk, _encoding, callback) {
|
|
375
|
+
received += chunk.byteLength;
|
|
376
|
+
// Enforce the cap even when the declared content-length lies
|
|
377
|
+
if (received > maxSize)
|
|
378
|
+
callback(new PayloadTooLargeError());
|
|
379
|
+
else
|
|
380
|
+
callback(null, chunk);
|
|
381
|
+
},
|
|
382
|
+
});
|
|
383
|
+
}
|
|
308
384
|
applyCors(origin, request, headers) {
|
|
309
385
|
if (!this.#corsOptions)
|
|
310
386
|
return;
|
|
@@ -314,34 +390,52 @@ export class HttpTransportServer {
|
|
|
314
390
|
}
|
|
315
391
|
else if (Array.isArray(this.#corsOptions)) {
|
|
316
392
|
if (this.#corsOptions.includes(origin)) {
|
|
317
|
-
params = { ...
|
|
393
|
+
params = { ...EXPLICIT_ORIGIN_CORS_PARAMS };
|
|
318
394
|
}
|
|
319
395
|
}
|
|
320
396
|
else if (typeof this.#corsOptions === 'object') {
|
|
321
397
|
if (this.#corsOptions.origin === true ||
|
|
322
398
|
this.#corsOptions.origin.includes(origin)) {
|
|
323
|
-
params =
|
|
324
|
-
|
|
399
|
+
params =
|
|
400
|
+
this.#corsOptions.origin === true
|
|
401
|
+
? { ...DEFAULT_CORS_PARAMS }
|
|
402
|
+
: { ...EXPLICIT_ORIGIN_CORS_PARAMS };
|
|
403
|
+
for (const key in params) {
|
|
325
404
|
const value = this.#corsOptions[key];
|
|
326
405
|
if (value !== undefined) {
|
|
327
406
|
params[key] = value;
|
|
328
407
|
}
|
|
329
408
|
}
|
|
409
|
+
// This explicit opt-in restores credentialed origin reflection without
|
|
410
|
+
// weakening the safe `cors: true` default.
|
|
411
|
+
if (this.#corsOptions.allowCredentials !== undefined) {
|
|
412
|
+
params.allowCredentials = this.#corsOptions.allowCredentials;
|
|
413
|
+
}
|
|
330
414
|
}
|
|
331
415
|
}
|
|
332
416
|
else if (typeof this.#corsOptions === 'function') {
|
|
333
417
|
const result = this.#corsOptions(origin, request);
|
|
334
418
|
if (typeof result === 'boolean') {
|
|
335
419
|
if (result) {
|
|
336
|
-
params = { ...
|
|
420
|
+
params = { ...EXPLICIT_ORIGIN_CORS_PARAMS };
|
|
337
421
|
}
|
|
338
422
|
}
|
|
339
423
|
else if (typeof result === 'object') {
|
|
340
|
-
params
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
424
|
+
// Returned params must still match the requesting origin, otherwise
|
|
425
|
+
// any origin would get reflected (with credentials for allowlists)
|
|
426
|
+
if (result.origin === true || result.origin.includes(origin)) {
|
|
427
|
+
params =
|
|
428
|
+
result.origin === true
|
|
429
|
+
? { ...DEFAULT_CORS_PARAMS }
|
|
430
|
+
: { ...EXPLICIT_ORIGIN_CORS_PARAMS };
|
|
431
|
+
for (const key in params) {
|
|
432
|
+
const value = result[key];
|
|
433
|
+
if (value !== undefined) {
|
|
434
|
+
params[key] = value;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
if (result.allowCredentials !== undefined) {
|
|
438
|
+
params.allowCredentials = result.allowCredentials;
|
|
345
439
|
}
|
|
346
440
|
}
|
|
347
441
|
}
|
package/dist/server.js.map
CHANGED
|
@@ -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
|
@@ -8,12 +8,26 @@ export type HttpTransportOptions<R extends keyof HttpTransportRuntimes = keyof H
|
|
|
8
8
|
listen: HttpTransportListenOptions;
|
|
9
9
|
cors?: HttpTransportCorsOptions;
|
|
10
10
|
tls?: HttpTransportTlsOptions;
|
|
11
|
+
/**
|
|
12
|
+
* Maximum request body size in bytes. Requests exceeding it are rejected
|
|
13
|
+
* with 413 Payload Too Large. Defaults to 128MiB (Bun's own default, kept
|
|
14
|
+
* consistent across runtimes).
|
|
15
|
+
*/
|
|
16
|
+
maxRequestBodySize?: number;
|
|
11
17
|
runtime?: HttpTransportRuntimes[R];
|
|
12
18
|
};
|
|
13
19
|
export type HttpTransportCorsCustomParams = {
|
|
20
|
+
/**
|
|
21
|
+
* `true` reflects any request origin, an array is an explicit allowlist.
|
|
22
|
+
* Credentials default on only for allowlisted origins.
|
|
23
|
+
*/
|
|
14
24
|
origin: true | string[];
|
|
15
25
|
allowMethods?: string[];
|
|
16
26
|
allowHeaders?: string[];
|
|
27
|
+
/**
|
|
28
|
+
* Explicitly enables credentials when reflecting request origins. Only use
|
|
29
|
+
* this when the API should accept credentialed requests from any website.
|
|
30
|
+
*/
|
|
17
31
|
allowCredentials?: string;
|
|
18
32
|
maxAge?: string;
|
|
19
33
|
exposeHeaders?: string[];
|
|
@@ -58,6 +72,7 @@ export type HttpAdapterParams<R extends keyof HttpTransportRuntimes = keyof Http
|
|
|
58
72
|
fetchHandler: (request: HttpTransportServerRequest, body: ReadableStream | null, signal: AbortSignal) => MaybePromise<Response>;
|
|
59
73
|
cors?: HttpTransportCorsOptions;
|
|
60
74
|
tls?: HttpTransportTlsOptions;
|
|
75
|
+
maxRequestBodySize?: number;
|
|
61
76
|
runtime?: HttpTransportRuntimes[R];
|
|
62
77
|
};
|
|
63
78
|
export type DenoServer = ReturnType<typeof globalThis.Deno.serve>;
|
package/dist/utils.d.ts
CHANGED
|
@@ -6,3 +6,6 @@ export declare const RequestTimeoutError: (message?: string) => ProtocolError;
|
|
|
6
6
|
export declare const NotFoundHttpResponse: () => Response;
|
|
7
7
|
export declare const InternalServerErrorHttpResponse: () => Response;
|
|
8
8
|
export declare const OkResponse: () => Response;
|
|
9
|
+
export declare class PayloadTooLargeError extends Error {
|
|
10
|
+
constructor(message?: string);
|
|
11
|
+
}
|
package/dist/utils.js
CHANGED
|
@@ -13,4 +13,9 @@ export const InternalServerErrorHttpResponse = () => new Response('Internal Serv
|
|
|
13
13
|
headers: { 'Content-Type': 'text/plain' },
|
|
14
14
|
});
|
|
15
15
|
export const OkResponse = () => new Response('OK', { status: 200 });
|
|
16
|
+
export class PayloadTooLargeError extends Error {
|
|
17
|
+
constructor(message = 'Payload Too Large') {
|
|
18
|
+
super(message);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
16
21
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,GAAG,uBAAuB,EAAE,EAAE,CACjE,IAAI,aAAa,CAAC,SAAS,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAA;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,GAAG,WAAW,EAAE,EAAE,CACrD,IAAI,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;AAEhD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAO,GAAG,WAAW,EAAE,EAAE,CACtD,IAAI,aAAa,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAO,GAAG,iBAAiB,EAAE,EAAE,CACjE,IAAI,aAAa,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CACvC,IAAI,QAAQ,CAAC,WAAW,EAAE;IACxB,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;CAC1C,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,EAAE,CAClD,IAAI,QAAQ,CAAC,uBAAuB,EAAE;IACpC,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;CAC1C,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,GAAG,uBAAuB,EAAE,EAAE,CACjE,IAAI,aAAa,CAAC,SAAS,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAA;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,GAAG,WAAW,EAAE,EAAE,CACrD,IAAI,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;AAEhD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAO,GAAG,WAAW,EAAE,EAAE,CACtD,IAAI,aAAa,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAO,GAAG,iBAAiB,EAAE,EAAE,CACjE,IAAI,aAAa,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CACvC,IAAI,QAAQ,CAAC,WAAW,EAAE;IACxB,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;CAC1C,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,EAAE,CAClD,IAAI,QAAQ,CAAC,uBAAuB,EAAE;IACpC,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;CAC1C,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;AAEnE,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAO,GAAG,mBAAmB;QACvC,KAAK,CAAC,OAAO,CAAC,CAAA;IAChB,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -26,22 +26,22 @@
|
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.67.0",
|
|
29
|
-
"@nmtjs/
|
|
30
|
-
"@nmtjs/
|
|
31
|
-
"@nmtjs/gateway": "0.17.0-beta.
|
|
32
|
-
"@nmtjs/
|
|
33
|
-
"@nmtjs/
|
|
29
|
+
"@nmtjs/client": "0.17.0-beta.8",
|
|
30
|
+
"@nmtjs/application": "0.17.0-beta.8",
|
|
31
|
+
"@nmtjs/gateway": "0.17.0-beta.8",
|
|
32
|
+
"@nmtjs/protocol": "0.17.0-beta.8",
|
|
33
|
+
"@nmtjs/common": "0.17.0-beta.8"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"@types/bun": "^1.3.0",
|
|
37
37
|
"@types/deno": "^2.3.0",
|
|
38
38
|
"@types/node": "^24.13.2",
|
|
39
39
|
"uWebSockets.js": "^20.67.0",
|
|
40
|
-
"@nmtjs/
|
|
41
|
-
"@nmtjs/
|
|
42
|
-
"@nmtjs/
|
|
43
|
-
"@nmtjs/
|
|
44
|
-
"@nmtjs/protocol": "0.17.0-beta.
|
|
40
|
+
"@nmtjs/common": "0.17.0-beta.8",
|
|
41
|
+
"@nmtjs/core": "0.17.0-beta.8",
|
|
42
|
+
"@nmtjs/gateway": "0.17.0-beta.8",
|
|
43
|
+
"@nmtjs/application": "0.17.0-beta.8",
|
|
44
|
+
"@nmtjs/protocol": "0.17.0-beta.8"
|
|
45
45
|
},
|
|
46
46
|
"peerDependenciesMeta": {
|
|
47
47
|
"@types/bun": {
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"LICENSE.md",
|
|
69
69
|
"README.md"
|
|
70
70
|
],
|
|
71
|
-
"version": "0.17.0-beta.
|
|
71
|
+
"version": "0.17.0-beta.8",
|
|
72
72
|
"repository": {
|
|
73
73
|
"type": "git",
|
|
74
74
|
"url": "https://github.com/neematajs/neemata"
|
package/src/constants.ts
CHANGED
|
@@ -2,6 +2,9 @@ import type { MetadataKind } from '@nmtjs/application'
|
|
|
2
2
|
import { createMeta } from '@nmtjs/application'
|
|
3
3
|
import { ErrorCode } from '@nmtjs/protocol'
|
|
4
4
|
|
|
5
|
+
// Matches Bun's maxRequestBodySize default so all runtimes behave the same
|
|
6
|
+
export const DEFAULT_MAX_REQUEST_BODY_SIZE = 128 * 1024 * 1024
|
|
7
|
+
|
|
5
8
|
export enum HttpStatus {
|
|
6
9
|
Continue = 100,
|
|
7
10
|
SwitchingProtocols = 101,
|
package/src/runtimes/bun.ts
CHANGED
|
@@ -26,6 +26,9 @@ function adapterFactory(params: HttpAdapterParams<'bun'>): HttpAdapterServer {
|
|
|
26
26
|
|
|
27
27
|
return globalThis.Bun.serve({
|
|
28
28
|
...params.runtime,
|
|
29
|
+
// Bun's own default (128MiB) applies when neither option is set
|
|
30
|
+
maxRequestBodySize:
|
|
31
|
+
params.runtime?.maxRequestBodySize ?? params.maxRequestBodySize,
|
|
29
32
|
unix: params.listen.unix as string,
|
|
30
33
|
port: params.listen.port ?? 0,
|
|
31
34
|
hostname: params.listen.hostname,
|
package/src/runtimes/node.ts
CHANGED
|
@@ -10,12 +10,14 @@ import type {
|
|
|
10
10
|
HttpAdapterServer,
|
|
11
11
|
HttpTransportOptions,
|
|
12
12
|
} from '../types.ts'
|
|
13
|
+
import { DEFAULT_MAX_REQUEST_BODY_SIZE } from '../constants.ts'
|
|
13
14
|
import * as injectables from '../injectables.ts'
|
|
14
15
|
import { createHTTPTransportWorker } from '../server.ts'
|
|
15
16
|
import {
|
|
16
17
|
InternalServerErrorHttpResponse,
|
|
17
18
|
NotFoundHttpResponse,
|
|
18
19
|
OkResponse,
|
|
20
|
+
PayloadTooLargeError,
|
|
19
21
|
} from '../utils.ts'
|
|
20
22
|
|
|
21
23
|
const statusResponse = OkResponse()
|
|
@@ -23,9 +25,14 @@ const statusResponseBuffer = await statusResponse.arrayBuffer()
|
|
|
23
25
|
|
|
24
26
|
type UwsResponse = Parameters<
|
|
25
27
|
Parameters<ReturnType<typeof App>['any']>[1]
|
|
26
|
-
>[0] & {
|
|
28
|
+
>[0] & {
|
|
29
|
+
aborted?: boolean
|
|
30
|
+
wakeWritable?: () => void
|
|
31
|
+
cancelBody?: () => void
|
|
32
|
+
}
|
|
27
33
|
|
|
28
34
|
function adapterFactory(params: HttpAdapterParams<'node'>): HttpAdapterServer {
|
|
35
|
+
const maxBodySize = params.maxRequestBodySize ?? DEFAULT_MAX_REQUEST_BODY_SIZE
|
|
29
36
|
const server = params.tls
|
|
30
37
|
? SSLApp({
|
|
31
38
|
passphrase: params.tls.passphrase,
|
|
@@ -51,6 +58,8 @@ function adapterFactory(params: HttpAdapterParams<'node'>): HttpAdapterServer {
|
|
|
51
58
|
res.onAborted(() => {
|
|
52
59
|
aborted = true
|
|
53
60
|
uwsRes.aborted = true
|
|
61
|
+
uwsRes.wakeWritable?.()
|
|
62
|
+
uwsRes.cancelBody?.()
|
|
54
63
|
requestController.abort()
|
|
55
64
|
|
|
56
65
|
try {
|
|
@@ -65,17 +74,33 @@ function adapterFactory(params: HttpAdapterParams<'node'>): HttpAdapterServer {
|
|
|
65
74
|
req.forEach((k, v) => headers.append(k, v))
|
|
66
75
|
|
|
67
76
|
const host = headers.get('host') || 'localhost'
|
|
68
|
-
const
|
|
69
|
-
|
|
77
|
+
const forwardedProto = headers.get('x-forwarded-proto')
|
|
78
|
+
const proto = forwardedProto
|
|
79
|
+
? forwardedProto === 'https'
|
|
80
|
+
? 'https'
|
|
81
|
+
: 'http'
|
|
82
|
+
: params.tls
|
|
83
|
+
? 'https'
|
|
84
|
+
: 'http'
|
|
70
85
|
const url = new URL(req.getUrl(), `${proto}://${host}`)
|
|
71
86
|
url.search = req.getQuery() ? `?${req.getQuery()}` : ''
|
|
72
87
|
try {
|
|
88
|
+
// uWS delivers chunks without backpressure, so cap what gets copied
|
|
89
|
+
// into memory before the whole body arrives
|
|
90
|
+
let received = 0
|
|
91
|
+
let capped = false
|
|
73
92
|
const body = new ReadableStream<Buffer>({
|
|
74
93
|
start(controller) {
|
|
75
94
|
bodyController = controller
|
|
76
95
|
res.onDataV2((chunk, maxRemainingBodyLength) => {
|
|
77
|
-
if (aborted) return
|
|
96
|
+
if (aborted || capped) return
|
|
78
97
|
if (chunk) {
|
|
98
|
+
received += chunk.byteLength
|
|
99
|
+
if (received > maxBodySize) {
|
|
100
|
+
capped = true
|
|
101
|
+
controller.error(new PayloadTooLargeError())
|
|
102
|
+
return
|
|
103
|
+
}
|
|
79
104
|
const copy = Buffer.allocUnsafe(chunk.byteLength)
|
|
80
105
|
copy.set(new Uint8Array(chunk))
|
|
81
106
|
controller.enqueue(copy)
|
|
@@ -202,23 +227,53 @@ async function handleFixedLengthStream(
|
|
|
202
227
|
}
|
|
203
228
|
}
|
|
204
229
|
|
|
205
|
-
|
|
230
|
+
// exported for tests: the waiter dispatch is timing-sensitive and needs
|
|
231
|
+
// deterministic coverage against a controlled response double
|
|
232
|
+
export async function handleChunkedStream(
|
|
206
233
|
res: UwsResponse,
|
|
207
234
|
body: ReadableStream<Uint8Array>,
|
|
208
235
|
): Promise<void> {
|
|
209
236
|
const reader = body.getReader()
|
|
237
|
+
// abort must also cancel a pending read(): a stalled source would otherwise
|
|
238
|
+
// keep the pump and the reader lock alive forever
|
|
239
|
+
res.cancelBody = () => {
|
|
240
|
+
reader.cancel().catch(() => {})
|
|
241
|
+
}
|
|
242
|
+
// uWS honors only the first onWritable registration per response, so a
|
|
243
|
+
// single handler dispatches drain (and abort) events to the pending waiter
|
|
244
|
+
let writableHandlerRegistered = false
|
|
245
|
+
const waitWritable = () =>
|
|
246
|
+
new Promise<void>((resolve, reject) => {
|
|
247
|
+
if (!writableHandlerRegistered) {
|
|
248
|
+
writableHandlerRegistered = true
|
|
249
|
+
res.onWritable(() => {
|
|
250
|
+
res.wakeWritable?.()
|
|
251
|
+
return true
|
|
252
|
+
})
|
|
253
|
+
}
|
|
254
|
+
res.wakeWritable = () => {
|
|
255
|
+
res.wakeWritable = undefined
|
|
256
|
+
if (res.aborted) reject(new Error('Response aborted'))
|
|
257
|
+
else resolve()
|
|
258
|
+
}
|
|
259
|
+
})
|
|
210
260
|
try {
|
|
211
261
|
while (!res.aborted) {
|
|
212
262
|
const { done, value } = await reader.read()
|
|
213
263
|
if (done) break
|
|
214
264
|
if (value.byteLength === 0) continue
|
|
215
265
|
|
|
216
|
-
|
|
217
|
-
|
|
266
|
+
// cork() returns the response object, not write()'s backpressure flag
|
|
267
|
+
let ok = true
|
|
268
|
+
res.cork(() => {
|
|
269
|
+
ok = res.write(value)
|
|
270
|
+
})
|
|
271
|
+
if (!ok) await waitWritable()
|
|
218
272
|
}
|
|
219
273
|
|
|
220
274
|
if (!res.aborted) res.cork(() => res.end())
|
|
221
275
|
} finally {
|
|
276
|
+
res.cancelBody = undefined
|
|
222
277
|
reader.releaseLock()
|
|
223
278
|
}
|
|
224
279
|
}
|
|
@@ -260,20 +315,6 @@ function handleFixedChunk(
|
|
|
260
315
|
})
|
|
261
316
|
}
|
|
262
317
|
|
|
263
|
-
function waitWritable(res: UwsResponse): Promise<void> {
|
|
264
|
-
return new Promise((resolve, reject) => {
|
|
265
|
-
res.onWritable(() => {
|
|
266
|
-
if (res.aborted) {
|
|
267
|
-
reject(new Error('Response aborted'))
|
|
268
|
-
return false
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
resolve()
|
|
272
|
-
return true
|
|
273
|
-
})
|
|
274
|
-
})
|
|
275
|
-
}
|
|
276
|
-
|
|
277
318
|
function getContentLength(headers: Headers): number | undefined {
|
|
278
319
|
const raw = headers.get('content-length')
|
|
279
320
|
if (!raw) return undefined
|
package/src/server.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Buffer } from 'node:buffer'
|
|
2
|
-
import { Duplex, Readable } from 'node:stream'
|
|
2
|
+
import { Duplex, Readable, Transform } from 'node:stream'
|
|
3
|
+
import { pipeline } from 'node:stream/promises'
|
|
3
4
|
|
|
4
5
|
import type { ApplicationResolvedProcedure } from '@nmtjs/application'
|
|
5
6
|
import type { TransportWorker, TransportWorkerParams } from '@nmtjs/gateway'
|
|
@@ -28,16 +29,19 @@ import type {
|
|
|
28
29
|
} from './types.ts'
|
|
29
30
|
import {
|
|
30
31
|
AllowedHttpMethod,
|
|
32
|
+
DEFAULT_MAX_REQUEST_BODY_SIZE,
|
|
31
33
|
HttpCodeMap,
|
|
32
34
|
HttpStatus,
|
|
33
35
|
HttpStatusText,
|
|
34
36
|
} from './constants.ts'
|
|
35
37
|
import * as injections from './injectables.ts'
|
|
38
|
+
import { PayloadTooLargeError } from './utils.ts'
|
|
36
39
|
|
|
37
40
|
const NEEMATA_BLOB_HEADER = 'X-Neemata-Blob'
|
|
38
41
|
const DEFAULT_ALLOWED_METHODS = Object.freeze(['post']) as ('get' | 'post')[]
|
|
42
|
+
// No allowCredentials here: reflecting arbitrary origins with credentials
|
|
43
|
+
// would let any website make cookie-authed requests
|
|
39
44
|
const DEFAULT_CORS_PARAMS = Object.freeze({
|
|
40
|
-
allowCredentials: 'true',
|
|
41
45
|
allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
|
42
46
|
allowHeaders: [
|
|
43
47
|
'Content-Type',
|
|
@@ -52,6 +56,11 @@ const DEFAULT_CORS_PARAMS = Object.freeze({
|
|
|
52
56
|
exposeHeaders: [],
|
|
53
57
|
requestHeaders: [],
|
|
54
58
|
}) satisfies Omit<HttpTransportCorsCustomParams, 'origin'>
|
|
59
|
+
// Credentials are safe to allow when the user explicitly vetted the origin
|
|
60
|
+
const EXPLICIT_ORIGIN_CORS_PARAMS = Object.freeze({
|
|
61
|
+
...DEFAULT_CORS_PARAMS,
|
|
62
|
+
allowCredentials: 'true',
|
|
63
|
+
}) satisfies Omit<HttpTransportCorsCustomParams, 'origin'>
|
|
55
64
|
const CORS_HEADERS_MAP: Record<
|
|
56
65
|
keyof HttpTransportCorsCustomParams | 'origin',
|
|
57
66
|
string
|
|
@@ -82,6 +91,7 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
82
91
|
> {
|
|
83
92
|
#server: HttpAdapterServer
|
|
84
93
|
#corsOptions?: HttpTransportOptions['cors']
|
|
94
|
+
#maxRequestBodySize: number
|
|
85
95
|
|
|
86
96
|
params!: TransportWorkerParams<
|
|
87
97
|
ConnectionType.Unidirectional,
|
|
@@ -94,6 +104,8 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
94
104
|
) {
|
|
95
105
|
this.#server = this.createServer()
|
|
96
106
|
this.#corsOptions = this.options.cors
|
|
107
|
+
this.#maxRequestBodySize =
|
|
108
|
+
this.options.maxRequestBodySize ?? DEFAULT_MAX_REQUEST_BODY_SIZE
|
|
97
109
|
}
|
|
98
110
|
|
|
99
111
|
async start(
|
|
@@ -120,6 +132,9 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
120
132
|
const method = request.method.toLowerCase()
|
|
121
133
|
const origin = request.headers.get('origin')
|
|
122
134
|
const responseHeaders = new Headers()
|
|
135
|
+
// CORS makes responses origin-dependent (even denials), so shared caches
|
|
136
|
+
// must key on Origin to avoid serving them across origins
|
|
137
|
+
if (this.#corsOptions) responseHeaders.append('Vary', 'Origin')
|
|
123
138
|
if (origin) this.applyCors(origin, request, responseHeaders)
|
|
124
139
|
|
|
125
140
|
// Handle preflight requests
|
|
@@ -136,9 +151,16 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
136
151
|
const isBlob = request.headers.get(NEEMATA_BLOB_HEADER) === 'true'
|
|
137
152
|
const contentType = request.headers.get('content-type')
|
|
138
153
|
const accept = request.headers.get('accept') || '*/*'
|
|
154
|
+
// GET endpoints are reachable via browser navigation, which sends HTML
|
|
155
|
+
// Accept headers; fall back to the default format only when the client's
|
|
156
|
+
// Accept can't be negotiated
|
|
157
|
+
const negotiableAccept =
|
|
158
|
+
canHaveBody || this.params.formats.supportsEncoder(accept)
|
|
159
|
+
? accept
|
|
160
|
+
: '*/*'
|
|
139
161
|
|
|
140
162
|
await using connection = await this.params.onConnect({
|
|
141
|
-
accept:
|
|
163
|
+
accept: negotiableAccept,
|
|
142
164
|
contentType: isBlob || !contentType ? '*/*' : contentType,
|
|
143
165
|
data: request,
|
|
144
166
|
protocolVersion: ProtocolVersion.v1,
|
|
@@ -158,7 +180,6 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
158
180
|
let payload: any
|
|
159
181
|
|
|
160
182
|
if (canHaveBody && body) {
|
|
161
|
-
const bodyStream = Readable.fromWeb(body as any)
|
|
162
183
|
const cannotDecode =
|
|
163
184
|
!contentType || !this.params.formats.supportsDecoder(contentType)
|
|
164
185
|
if (isBlob || cannotDecode) {
|
|
@@ -167,10 +188,34 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
167
188
|
const size = contentLength
|
|
168
189
|
? Number.parseInt(contentLength, 10)
|
|
169
190
|
: undefined
|
|
170
|
-
|
|
171
|
-
|
|
191
|
+
// Declared size over the cap: reject before reading anything
|
|
192
|
+
if (size !== undefined && size > this.#maxRequestBodySize) {
|
|
193
|
+
throw new PayloadTooLargeError()
|
|
194
|
+
}
|
|
195
|
+
const clientStream = new ProtocolClientStream(-1, { size, type })
|
|
196
|
+
// The rpc may never read the payload; without a handler a capped
|
|
197
|
+
// upload would crash the process with an unhandled 'error'
|
|
198
|
+
clientStream.on('error', () => {})
|
|
199
|
+
payload = clientStream
|
|
200
|
+
// pipeline (unlike pipe) propagates source errors; the cap error is
|
|
201
|
+
// re-surfaced on the payload stream so its consumer rejects with it
|
|
202
|
+
pipeline(
|
|
203
|
+
Readable.fromWeb(body as any),
|
|
204
|
+
this.createBodySizeGuard(),
|
|
205
|
+
clientStream,
|
|
206
|
+
).catch((error) => clientStream.destroy(error))
|
|
172
207
|
} else {
|
|
173
|
-
const
|
|
208
|
+
const chunks: Buffer[] = []
|
|
209
|
+
let received = 0
|
|
210
|
+
for await (const chunk of Readable.fromWeb(body as any)) {
|
|
211
|
+
received += chunk.byteLength
|
|
212
|
+
// Reject mid-stream to avoid buffering unbounded payloads
|
|
213
|
+
if (received > this.#maxRequestBodySize) {
|
|
214
|
+
throw new PayloadTooLargeError()
|
|
215
|
+
}
|
|
216
|
+
chunks.push(chunk)
|
|
217
|
+
}
|
|
218
|
+
const buffer = Buffer.concat(chunks)
|
|
174
219
|
if (buffer.byteLength > 0) {
|
|
175
220
|
payload = connection.decoder.decode(buffer)
|
|
176
221
|
}
|
|
@@ -178,7 +223,11 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
178
223
|
} else {
|
|
179
224
|
const querystring = url.searchParams.get('payload')
|
|
180
225
|
if (querystring) {
|
|
181
|
-
|
|
226
|
+
try {
|
|
227
|
+
payload = JSON.parse(querystring)
|
|
228
|
+
} catch {
|
|
229
|
+
throw new ProtocolError(ErrorCode.BadRequest, 'Invalid payload')
|
|
230
|
+
}
|
|
182
231
|
}
|
|
183
232
|
}
|
|
184
233
|
|
|
@@ -196,7 +245,9 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
196
245
|
if (result instanceof Response) {
|
|
197
246
|
const { status, statusText, headers, body } = result
|
|
198
247
|
headers.forEach((value, key) => {
|
|
199
|
-
|
|
248
|
+
// Merge Vary so the cors Origin entry isn't lost to shared caches
|
|
249
|
+
if (key.toLowerCase() === 'vary') responseHeaders.append(key, value)
|
|
250
|
+
else responseHeaders.set(key, value)
|
|
200
251
|
})
|
|
201
252
|
|
|
202
253
|
return new Response(body, {
|
|
@@ -210,7 +261,8 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
210
261
|
|
|
211
262
|
responseHeaders.set(NEEMATA_BLOB_HEADER, 'true')
|
|
212
263
|
responseHeaders.set('Content-Type', type)
|
|
213
|
-
|
|
264
|
+
// nullish check — zero is a valid size for empty blobs
|
|
265
|
+
if (metadata.size !== undefined) {
|
|
214
266
|
responseHeaders.set('Content-Length', metadata.size.toString())
|
|
215
267
|
}
|
|
216
268
|
if (metadata.filename) {
|
|
@@ -271,7 +323,11 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
271
323
|
})
|
|
272
324
|
} else {
|
|
273
325
|
// Handle regular responses
|
|
274
|
-
|
|
326
|
+
// void results respond with an empty body — encode rejects undefined
|
|
327
|
+
const buffer =
|
|
328
|
+
typeof result === 'undefined'
|
|
329
|
+
? undefined
|
|
330
|
+
: connection.encoder.encode(result)
|
|
275
331
|
responseHeaders.set('Content-Type', connection.encoder.contentType)
|
|
276
332
|
|
|
277
333
|
// @ts-expect-error
|
|
@@ -282,6 +338,17 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
282
338
|
})
|
|
283
339
|
}
|
|
284
340
|
} catch (error) {
|
|
341
|
+
if (error instanceof PayloadTooLargeError) {
|
|
342
|
+
const status = HttpStatus.PayloadTooLarge
|
|
343
|
+
const text = HttpStatusText[status]
|
|
344
|
+
|
|
345
|
+
return new Response(text, {
|
|
346
|
+
status,
|
|
347
|
+
statusText: text,
|
|
348
|
+
headers: responseHeaders,
|
|
349
|
+
})
|
|
350
|
+
}
|
|
351
|
+
|
|
285
352
|
if (error instanceof UnsupportedFormatError) {
|
|
286
353
|
const status =
|
|
287
354
|
error instanceof UnsupportedContentTypeError
|
|
@@ -334,6 +401,19 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
334
401
|
}
|
|
335
402
|
}
|
|
336
403
|
|
|
404
|
+
private createBodySizeGuard() {
|
|
405
|
+
const maxSize = this.#maxRequestBodySize
|
|
406
|
+
let received = 0
|
|
407
|
+
return new Transform({
|
|
408
|
+
transform(chunk: Buffer, _encoding, callback) {
|
|
409
|
+
received += chunk.byteLength
|
|
410
|
+
// Enforce the cap even when the declared content-length lies
|
|
411
|
+
if (received > maxSize) callback(new PayloadTooLargeError())
|
|
412
|
+
else callback(null, chunk)
|
|
413
|
+
},
|
|
414
|
+
})
|
|
415
|
+
}
|
|
416
|
+
|
|
337
417
|
private applyCors(
|
|
338
418
|
origin: string,
|
|
339
419
|
request: HttpTransportServerRequest,
|
|
@@ -347,33 +427,51 @@ export class HttpTransportServer implements TransportWorker<
|
|
|
347
427
|
params = { ...DEFAULT_CORS_PARAMS }
|
|
348
428
|
} else if (Array.isArray(this.#corsOptions)) {
|
|
349
429
|
if (this.#corsOptions.includes(origin)) {
|
|
350
|
-
params = { ...
|
|
430
|
+
params = { ...EXPLICIT_ORIGIN_CORS_PARAMS }
|
|
351
431
|
}
|
|
352
432
|
} else if (typeof this.#corsOptions === 'object') {
|
|
353
433
|
if (
|
|
354
434
|
this.#corsOptions.origin === true ||
|
|
355
435
|
this.#corsOptions.origin.includes(origin)
|
|
356
436
|
) {
|
|
357
|
-
params =
|
|
358
|
-
|
|
437
|
+
params =
|
|
438
|
+
this.#corsOptions.origin === true
|
|
439
|
+
? { ...DEFAULT_CORS_PARAMS }
|
|
440
|
+
: { ...EXPLICIT_ORIGIN_CORS_PARAMS }
|
|
441
|
+
for (const key in params) {
|
|
359
442
|
const value = this.#corsOptions[key]
|
|
360
443
|
if (value !== undefined) {
|
|
361
444
|
params[key] = value
|
|
362
445
|
}
|
|
363
446
|
}
|
|
447
|
+
// This explicit opt-in restores credentialed origin reflection without
|
|
448
|
+
// weakening the safe `cors: true` default.
|
|
449
|
+
if (this.#corsOptions.allowCredentials !== undefined) {
|
|
450
|
+
params.allowCredentials = this.#corsOptions.allowCredentials
|
|
451
|
+
}
|
|
364
452
|
}
|
|
365
453
|
} else if (typeof this.#corsOptions === 'function') {
|
|
366
454
|
const result = this.#corsOptions(origin, request)
|
|
367
455
|
if (typeof result === 'boolean') {
|
|
368
456
|
if (result) {
|
|
369
|
-
params = { ...
|
|
457
|
+
params = { ...EXPLICIT_ORIGIN_CORS_PARAMS }
|
|
370
458
|
}
|
|
371
459
|
} else if (typeof result === 'object') {
|
|
372
|
-
params
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
460
|
+
// Returned params must still match the requesting origin, otherwise
|
|
461
|
+
// any origin would get reflected (with credentials for allowlists)
|
|
462
|
+
if (result.origin === true || result.origin.includes(origin)) {
|
|
463
|
+
params =
|
|
464
|
+
result.origin === true
|
|
465
|
+
? { ...DEFAULT_CORS_PARAMS }
|
|
466
|
+
: { ...EXPLICIT_ORIGIN_CORS_PARAMS }
|
|
467
|
+
for (const key in params) {
|
|
468
|
+
const value = result[key]
|
|
469
|
+
if (value !== undefined) {
|
|
470
|
+
params[key] = value
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
if (result.allowCredentials !== undefined) {
|
|
474
|
+
params.allowCredentials = result.allowCredentials
|
|
377
475
|
}
|
|
378
476
|
}
|
|
379
477
|
}
|
package/src/types.ts
CHANGED
|
@@ -12,13 +12,27 @@ export type HttpTransportOptions<
|
|
|
12
12
|
listen: HttpTransportListenOptions
|
|
13
13
|
cors?: HttpTransportCorsOptions
|
|
14
14
|
tls?: HttpTransportTlsOptions
|
|
15
|
+
/**
|
|
16
|
+
* Maximum request body size in bytes. Requests exceeding it are rejected
|
|
17
|
+
* with 413 Payload Too Large. Defaults to 128MiB (Bun's own default, kept
|
|
18
|
+
* consistent across runtimes).
|
|
19
|
+
*/
|
|
20
|
+
maxRequestBodySize?: number
|
|
15
21
|
runtime?: HttpTransportRuntimes[R]
|
|
16
22
|
}
|
|
17
23
|
|
|
18
24
|
export type HttpTransportCorsCustomParams = {
|
|
25
|
+
/**
|
|
26
|
+
* `true` reflects any request origin, an array is an explicit allowlist.
|
|
27
|
+
* Credentials default on only for allowlisted origins.
|
|
28
|
+
*/
|
|
19
29
|
origin: true | string[]
|
|
20
30
|
allowMethods?: string[]
|
|
21
31
|
allowHeaders?: string[]
|
|
32
|
+
/**
|
|
33
|
+
* Explicitly enables credentials when reflecting request origins. Only use
|
|
34
|
+
* this when the API should accept credentialed requests from any website.
|
|
35
|
+
*/
|
|
22
36
|
allowCredentials?: string
|
|
23
37
|
maxAge?: string
|
|
24
38
|
exposeHeaders?: string[]
|
|
@@ -83,6 +97,7 @@ export type HttpAdapterParams<
|
|
|
83
97
|
) => MaybePromise<Response>
|
|
84
98
|
cors?: HttpTransportCorsOptions
|
|
85
99
|
tls?: HttpTransportTlsOptions
|
|
100
|
+
maxRequestBodySize?: number
|
|
86
101
|
runtime?: HttpTransportRuntimes[R]
|
|
87
102
|
}
|
|
88
103
|
|
package/src/utils.ts
CHANGED
|
@@ -26,3 +26,9 @@ export const InternalServerErrorHttpResponse = () =>
|
|
|
26
26
|
})
|
|
27
27
|
|
|
28
28
|
export const OkResponse = () => new Response('OK', { status: 200 })
|
|
29
|
+
|
|
30
|
+
export class PayloadTooLargeError extends Error {
|
|
31
|
+
constructor(message = 'Payload Too Large') {
|
|
32
|
+
super(message)
|
|
33
|
+
}
|
|
34
|
+
}
|