@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.
@@ -1,4 +1,5 @@
1
1
  import type { MetadataKind } from '@nmtjs/application';
2
+ export declare const DEFAULT_MAX_REQUEST_BODY_SIZE: number;
2
3
  export declare enum HttpStatus {
3
4
  Continue = 100,
4
5
  SwitchingProtocols = 101,
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";
@@ -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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"}
@@ -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,
@@ -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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"}
@@ -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 {};
@@ -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 proto = headers.get('x-forwarded-proto') || params.tls ? 'https' : 'http';
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
- async function handleChunkedStream(res, body) {
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
- const ok = res.cork(() => res.write(value));
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(res);
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":"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"}
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: canHaveBody ? 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
- payload = new ProtocolClientStream(-1, { size, type });
158
- bodyStream.pipe(payload);
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 buffer = Buffer.concat(await bodyStream.toArray());
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
- payload = JSON.parse(querystring);
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
- responseHeaders.set(key, value);
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
- if (metadata.size) {
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
- const buffer = connection.encoder.encode(result);
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 = { ...DEFAULT_CORS_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 = { ...DEFAULT_CORS_PARAMS };
324
- for (const key in DEFAULT_CORS_PARAMS) {
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 = { ...DEFAULT_CORS_PARAMS };
420
+ params = { ...EXPLICIT_ORIGIN_CORS_PARAMS };
337
421
  }
338
422
  }
339
423
  else if (typeof result === 'object') {
340
- params = { ...DEFAULT_CORS_PARAMS };
341
- for (const key in DEFAULT_CORS_PARAMS) {
342
- const value = result[key];
343
- if (value !== undefined) {
344
- params[key] = value;
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
  }
@@ -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/application": "0.17.0-beta.6",
30
- "@nmtjs/common": "0.17.0-beta.6",
31
- "@nmtjs/gateway": "0.17.0-beta.6",
32
- "@nmtjs/client": "0.17.0-beta.6",
33
- "@nmtjs/protocol": "0.17.0-beta.6"
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/application": "0.17.0-beta.6",
41
- "@nmtjs/common": "0.17.0-beta.6",
42
- "@nmtjs/core": "0.17.0-beta.6",
43
- "@nmtjs/gateway": "0.17.0-beta.6",
44
- "@nmtjs/protocol": "0.17.0-beta.6"
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.6",
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,
@@ -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,
@@ -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] & { aborted?: boolean }
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 proto =
69
- headers.get('x-forwarded-proto') || params.tls ? 'https' : 'http'
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
- async function handleChunkedStream(
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
- const ok = res.cork(() => res.write(value))
217
- if (!ok) await waitWritable(res)
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: canHaveBody ? 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
- payload = new ProtocolClientStream(-1, { size, type })
171
- bodyStream.pipe(payload)
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 buffer = Buffer.concat(await bodyStream.toArray())
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
- payload = JSON.parse(querystring)
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
- responseHeaders.set(key, value)
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
- if (metadata.size) {
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
- const buffer = connection.encoder.encode(result)
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 = { ...DEFAULT_CORS_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 = { ...DEFAULT_CORS_PARAMS }
358
- for (const key in DEFAULT_CORS_PARAMS) {
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 = { ...DEFAULT_CORS_PARAMS }
457
+ params = { ...EXPLICIT_ORIGIN_CORS_PARAMS }
370
458
  }
371
459
  } else if (typeof result === 'object') {
372
- params = { ...DEFAULT_CORS_PARAMS }
373
- for (const key in DEFAULT_CORS_PARAMS) {
374
- const value = result[key]
375
- if (value !== undefined) {
376
- params[key] = value
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
+ }