@daloyjs/core 0.1.2 โ†’ 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,11 +1,13 @@
1
1
  # DaloyJS
2
2
 
3
- > A **runtime-portable TypeScript web framework** with built-in **contract-first routing**, **validation**, **OpenAPI (Hey API)**, **typed client generation**, **large-scale maintainability**, and **highly secured by default (pnpm)**.
3
+ > A **runtime-portable TypeScript web framework** with built-in **contract-first routing**, **validation**, **OpenAPI (Hey API)**, **typed client generation**, **large-scale maintainability**, and **secure-by-default runtime and supply-chain posture**.
4
4
 
5
- ๐Ÿ“š **Documentation site:** [`./daloyjs.dev`](./daloyjs.dev) โ€” a Next.js 16 + shadcn/ui + Tailwind v4 site with the landing page, getting-started guide, ORM integration guides, tutorials, security docs, and full API reference. Run it with:
5
+ DaloyJS is maintained in the GitHub organization at <https://github.com/daloyjs>; the canonical framework repository is <https://github.com/daloyjs/daloy>.
6
+
7
+ ๐Ÿ“š **Documentation site:** [`./website`](./website) โ€” a Next.js 16 + shadcn/ui + Tailwind v4 site with the landing page, getting-started guide, ORM integration guides, tutorials, security docs, and full API reference. Run it with:
6
8
 
7
9
  ```zsh
8
- cd daloyjs.dev
10
+ cd website
9
11
  pnpm install
10
12
  pnpm dev # http://localhost:3000
11
13
  pnpm build # static prerender of every docs route
@@ -22,10 +24,10 @@ DaloyJS exists to be the framework you'd build if you took the best ideas from e
22
24
  | Mature **Swagger / docs / ops** in Node | [Fastify](https://fastify.dev/docs/latest/Reference/) | Encapsulated plugins, structured logger, graceful shutdown, request ids, hooks. |
23
25
  | Modern **TS-first DX**, Bun acceptable | [Elysia](https://elysiajs.com/at-glance.html) | End-to-end typed handlers, typed context, typed client. |
24
26
  | Best-in-class **typed client codegen** for any consumer | [Hey API](https://heyapi.dev/openapi-ts/get-started) | One command (`pnpm gen`) emits a fully-typed fetch SDK from your spec. |
25
- | **Better supply-chain security** than npm | [pnpm](https://pnpm.io/motivation) | Strict, content-addressable installs; reproducible lockfile; per-project `.npmrc` hardening. |
27
+ | **Supply-chain-hardened installs and publishing** | [pnpm](https://pnpm.io/motivation) + hardened CI/CD | `ignore-scripts`, release-age cooldown, explicit build allowlist, SHA-pinned actions, isolated OIDC publish with provenance. |
26
28
 
27
29
  ```
28
- 119/119 framework tests passing ยท 100% line + function coverage ยท clean strict TypeScript 6
30
+ 159/159 framework tests passing ยท 100% line + function coverage ยท clean strict TypeScript 6
29
31
  runs on Node, Bun, Deno, Cloudflare, Vercel
30
32
  ~12.3M static-route ops/sec ยท ~1.5M dynamic-route ops/sec on M-class CPU
31
33
  ```
@@ -56,7 +58,7 @@ DaloyJS combines the wins:
56
58
 
57
59
  ## Install
58
60
 
59
- DaloyJS is distributed via **pnpm** for [supply-chain hygiene](https://pnpm.io/motivation) โ€” strict isolation, content-addressable store, deterministic lockfile, no phantom dependencies.
61
+ DaloyJS is distributed via **pnpm** for [supply-chain hygiene](https://pnpm.io/motivation) and backed by a hardened release pipeline โ€” strict isolation, content-addressable store, deterministic lockfile, no phantom dependencies, SHA-pinned CI actions, and provenance publishing.
60
62
 
61
63
  ```bash
62
64
  pnpm add @daloyjs/core zod@^4
@@ -175,7 +177,7 @@ import { swaggerUiHtml, htmlResponse } from "@daloyjs/core/docs";
175
177
  ```
176
178
 
177
179
  Mount at `/docs` and the UI is always contract-accurate โ€” never stale.
178
- `create-daloy@0.1.8` mounts Swagger UI at `/docs` and the live spec at `/openapi.json` by default.
180
+ `create-daloy@0.1.11` mounts Swagger UI at `/docs` and the live spec at `/openapi.json` by default.
179
181
 
180
182
  ---
181
183
 
@@ -301,18 +303,19 @@ Full, versioned plan: [ROADMAP.md](./ROADMAP.md).
301
303
  - [x] **pnpm-first distribution with hardened `.npmrc`**
302
304
  - [x] **100% line + function coverage** enforced by `pnpm coverage`
303
305
 
304
- **Next (`0.2.0` โ€” see [ROADMAP.md](./ROADMAP.md) for the full plan):**
306
+ **Current (`0.2.x` follow-up โ€” see [ROADMAP.md](./ROADMAP.md) for the full plan):**
305
307
 
306
- - [ ] `onSend` hook for response transformation
308
+ - [x] `onSend` hook for response transformation
307
309
  - [x] GitHub Actions CI for install, typecheck, tests, coverage, build, and audit
308
310
  - [x] `SECURITY.md` and vulnerability disclosure process
309
311
  - [x] `pnpm create daloy` project scaffolder (Node + Vercel Edge + Cloudflare templates)
310
312
  - [x] Docs site discoverability pass: page metadata, sitemap, robots, OpenGraph image, ORM guides
313
+ - [x] Streaming response helpers: SSE + NDJSON with backpressure-safe writers (`sseStream` / `sseResponse` / `ndjsonStream` / `ndjsonResponse`)
311
314
  - [ ] Branch coverage push to `>= 98%`
312
315
  - [ ] Release checklist and publishing docs cleanup
313
316
 
314
- **On deck (`0.3.0` and beyond):** SSE/NDJSON streaming, OpenTelemetry,
315
- multipart/form-data ergonomics, CSRF helper, scaffolder, Redis rate-limit store,
317
+ **On deck (`0.3.0` and beyond):** OpenTelemetry,
318
+ multipart/form-data ergonomics, CSRF helper, Redis rate-limit store,
316
319
  CLI route and schema inspector, WebSockets, and HTTP/2 + HTTP/3 adapters.
317
320
 
318
321
  ## License
package/dist/app.d.ts CHANGED
@@ -73,10 +73,7 @@ export declare class App {
73
73
  }, register: (app: App) => void): this;
74
74
  /** Attach a hook layer to all subsequently-registered routes. */
75
75
  use(hooks: Hooks): this;
76
- /**
77
- * Decorate ctx.state with values available in every handler.
78
- * Typed augmentation surface for plugins.
79
- */
76
+ /** Decorate ctx.state with values available in every handler. */
80
77
  decorate<K extends string, V>(key: K, value: V): this;
81
78
  /** Register cleanup to run once during graceful shutdown. */
82
79
  onClose(hook: () => void | Promise<void>): this;
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
package/dist/app.js CHANGED
@@ -74,10 +74,7 @@ export class App {
74
74
  this.groupHooks.push(hooks);
75
75
  return this;
76
76
  }
77
- /**
78
- * Decorate ctx.state with values available in every handler.
79
- * Typed augmentation surface for plugins.
80
- */
77
+ /** Decorate ctx.state with values available in every handler. */
81
78
  decorate(key, value) {
82
79
  this.decorations[key] = value;
83
80
  return this;
@@ -112,14 +109,7 @@ export class App {
112
109
  return this;
113
110
  }
114
111
  /** Wait for all async plugins to finish initializing. */
115
- async ready() {
116
- const pending = this.__pendingPlugins ?? [];
117
- if (pending.length) {
118
- await Promise.all(pending);
119
- this.__pendingPlugins = [];
120
- }
121
- }
122
- // ---------- runtime ----------
112
+ ready() { const pending = this.__pendingPlugins ?? []; return pending.length === 0 ? Promise.resolve() : Promise.all(pending).then(() => { this.__pendingPlugins = []; }); }
123
113
  fetch = async (request) => {
124
114
  if (this.draining) {
125
115
  return new Response(JSON.stringify({
@@ -135,6 +125,7 @@ export class App {
135
125
  const globalHooks = mergeHooks([this.options.hooks ?? {}]);
136
126
  let activeErrorHook = globalHooks.onError;
137
127
  let activeResponseHook = globalHooks.onResponse;
128
+ let activeSendHook = globalHooks.onSend;
138
129
  try {
139
130
  await globalHooks.onRequest?.(request);
140
131
  const url = new URL(request.url);
@@ -160,14 +151,12 @@ export class App {
160
151
  const intercepted = await preflightHooks.beforeHandle?.(synthCtx);
161
152
  if (intercepted instanceof Response) {
162
153
  copyContextHeaders(synthCtx, intercepted);
163
- await preflightHooks.onResponse?.(intercepted);
164
- return intercepted;
154
+ return await finalizeResponse(intercepted, synthCtx, preflightHooks);
165
155
  }
166
156
  const res = new Response(null, { status: 204, headers: { allow: allowed.join(", ") } });
167
157
  copyContextHeaders(synthCtx, res);
168
158
  res.headers.set("x-request-id", requestId);
169
- await preflightHooks.onResponse?.(res);
170
- return res;
159
+ return await finalizeResponse(res, synthCtx, preflightHooks);
171
160
  }
172
161
  throw new MethodNotAllowedError(allowed);
173
162
  }
@@ -177,6 +166,7 @@ export class App {
177
166
  const allHooks = mergeHooks([globalHooks, hooks]);
178
167
  activeErrorHook = allHooks.onError;
179
168
  activeResponseHook = allHooks.onResponse;
169
+ activeSendHook = allHooks.onSend;
180
170
  await hooks.onRequest?.(request);
181
171
  ctx = await buildContext(request, url, match.params, def, this.options);
182
172
  Object.assign(ctx.state, this.decorations, { requestId, log });
@@ -184,8 +174,7 @@ export class App {
184
174
  const before = await allHooks.beforeHandle?.(ctx);
185
175
  if (before instanceof Response) {
186
176
  copyContextHeaders(ctx, before);
187
- await allHooks.onResponse?.(before);
188
- return before;
177
+ return await finalizeResponse(before, ctx, allHooks);
189
178
  }
190
179
  let result;
191
180
  if (this.options.mockMode) {
@@ -193,9 +182,7 @@ export class App {
193
182
  }
194
183
  else {
195
184
  const handlerPromise = Promise.resolve(def.handler(ctx));
196
- result = this.options.requestTimeoutMs > 0
197
- ? await withTimeout(handlerPromise, this.options.requestTimeoutMs)
198
- : await handlerPromise;
185
+ result = this.options.requestTimeoutMs > 0 ? await withTimeout(handlerPromise, this.options.requestTimeoutMs) : await handlerPromise;
199
186
  }
200
187
  const afterReturn = await allHooks.afterHandle?.(ctx, result);
201
188
  if (afterReturn !== undefined)
@@ -205,8 +192,7 @@ export class App {
205
192
  response = new Response(null, { status: response.status, headers: response.headers });
206
193
  }
207
194
  copyContextHeaders(ctx, response);
208
- await allHooks.onResponse?.(response);
209
- return response;
195
+ return await finalizeResponse(response, ctx, allHooks);
210
196
  }
211
197
  catch (err) {
212
198
  const handled = await activeErrorHook?.(err, ctx);
@@ -215,20 +201,22 @@ export class App {
215
201
  copyContextHeaders(ctx, handled);
216
202
  if (!handled.headers.has("x-request-id"))
217
203
  handled.headers.set("x-request-id", requestId);
218
- await activeResponseHook?.(handled);
219
- return handled;
204
+ return finalizeResponse(handled, ctx, { onSend: activeSendHook, onResponse: activeResponseHook });
220
205
  }
221
- const httpErr = err instanceof HttpError
222
- ? err
223
- : err instanceof Error
224
- ? new InternalError(err.message)
225
- : new InternalError("Unexpected error");
226
- if (httpErr.status >= 500) {
227
- log.error({ err: serializeErr(err) }, httpErr.problem.title);
206
+ let httpErr;
207
+ if (err instanceof HttpError) {
208
+ httpErr = err;
209
+ }
210
+ else if (err instanceof Error) {
211
+ httpErr = new InternalError(err.message);
228
212
  }
229
213
  else {
230
- log.warn({ status: httpErr.status }, httpErr.problem.title);
214
+ httpErr = new InternalError("Unexpected error");
231
215
  }
216
+ if (httpErr.status >= 500)
217
+ log.error({ err: serializeErr(err) }, httpErr.problem.title);
218
+ if (httpErr.status < 500)
219
+ log.warn({ status: httpErr.status }, httpErr.problem.title);
232
220
  const res = httpErr.toResponse({
233
221
  production: this.options.production,
234
222
  requestId,
@@ -237,8 +225,7 @@ export class App {
237
225
  copyContextHeaders(ctx, res);
238
226
  if (!res.headers.has("x-request-id"))
239
227
  res.headers.set("x-request-id", requestId);
240
- await activeResponseHook?.(res);
241
- return res;
228
+ return finalizeResponse(res, ctx, { onSend: activeSendHook, onResponse: activeResponseHook });
242
229
  }
243
230
  finally {
244
231
  this.inflight--;
@@ -251,21 +238,30 @@ export class App {
251
238
  return this.fetch(req);
252
239
  }
253
240
  introspect() {
254
- return this.routes.map((r) => ({
255
- method: r.method,
256
- path: r.path,
257
- operationId: r.operationId,
258
- tags: r.tags,
259
- summary: r.summary,
260
- description: r.description,
261
- deprecated: r.deprecated,
262
- hasBody: !!r.request?.body,
263
- hasQuery: !!r.request?.query,
264
- hasParams: !!r.request?.params,
265
- hasHeaders: !!r.request?.headers,
266
- responses: Object.keys(r.responses).map(Number),
267
- auth: r.auth,
268
- }));
241
+ return this.routes.map((r) => {
242
+ const route = {
243
+ method: r.method,
244
+ path: r.path,
245
+ hasBody: hasRequestSchema(r.request, "body"),
246
+ hasQuery: hasRequestSchema(r.request, "query"),
247
+ hasParams: hasRequestSchema(r.request, "params"),
248
+ hasHeaders: hasRequestSchema(r.request, "headers"),
249
+ responses: Object.keys(r.responses).map(Number),
250
+ };
251
+ if (r.operationId !== undefined)
252
+ route.operationId = r.operationId;
253
+ if (r.tags !== undefined)
254
+ route.tags = r.tags;
255
+ if (r.summary !== undefined)
256
+ route.summary = r.summary;
257
+ if (r.description !== undefined)
258
+ route.description = r.description;
259
+ if (r.deprecated !== undefined)
260
+ route.deprecated = r.deprecated;
261
+ if (r.auth !== undefined)
262
+ route.auth = r.auth;
263
+ return route;
264
+ });
269
265
  }
270
266
  /**
271
267
  * Begin graceful shutdown: stop accepting new requests, wait for in-flight
@@ -302,9 +298,29 @@ function mergeHooks(layers) {
302
298
  beforeHandle: firstResponse(pick("beforeHandle")),
303
299
  afterHandle: pipeline(pick("afterHandle")),
304
300
  onError: firstResponse(pick("onError")),
301
+ onSend: responsePipeline(pick("onSend")),
305
302
  onResponse: chain(pick("onResponse")),
306
303
  };
307
304
  }
305
+ function responsePipeline(fns) {
306
+ if (fns.length === 0)
307
+ return undefined;
308
+ return async (res, ctx) => {
309
+ let current = res;
310
+ for (const fn of fns) {
311
+ const r = await fn(current, ctx);
312
+ if (r instanceof Response)
313
+ current = r;
314
+ }
315
+ return current;
316
+ };
317
+ }
318
+ async function finalizeResponse(res, ctx, hooks) {
319
+ const sent = await hooks.onSend?.(res, ctx);
320
+ const final = sent instanceof Response ? sent : res;
321
+ await hooks.onResponse?.(final);
322
+ return final;
323
+ }
308
324
  function chain(fns) {
309
325
  if (fns.length === 0)
310
326
  return undefined;
@@ -344,6 +360,9 @@ function copyContextHeaders(ctx, res) {
344
360
  res.headers.set(k, v);
345
361
  });
346
362
  }
363
+ function hasRequestSchema(request, key) {
364
+ return !!request && !!request[key];
365
+ }
347
366
  async function buildContext(request, url, rawParams, def, opts) {
348
367
  const set = { headers: new Headers() };
349
368
  const headersObj = headersToObject(request.headers);
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
package/dist/docs.d.ts CHANGED
@@ -9,8 +9,23 @@
9
9
  export interface DocsOptions {
10
10
  specUrl: string;
11
11
  title?: string;
12
+ assets?: {
13
+ scalarScriptUrl?: string;
14
+ swaggerUiCssUrl?: string;
15
+ swaggerUiBundleUrl?: string;
16
+ };
17
+ scriptNonce?: string;
18
+ }
19
+ export interface DocsContentSecurityPolicyOptions {
20
+ assetOrigins?: string[];
21
+ scriptNonce?: string;
22
+ allowInlineStyles?: boolean;
23
+ }
24
+ export interface HtmlResponseOptions extends DocsContentSecurityPolicyOptions {
25
+ contentSecurityPolicy?: string;
12
26
  }
13
27
  export declare function scalarHtml(opts: DocsOptions): string;
14
28
  export declare function swaggerUiHtml(opts: DocsOptions): string;
15
- export declare function htmlResponse(html: string): Response;
29
+ export declare function docsContentSecurityPolicy(opts?: DocsContentSecurityPolicyOptions): string;
30
+ export declare function htmlResponse(html: string, opts?: HtmlResponseOptions): Response;
16
31
  //# sourceMappingURL=docs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAYpD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAcvD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAWnD"}
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gCAAgC;IAC/C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAoB,SAAQ,gCAAgC;IAC3E,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAQD,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAcpD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAiBvD;AAED,wBAAgB,yBAAyB,CAAC,IAAI,GAAE,gCAAqC,GAAG,MAAM,CAgB7F;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,GAAG,QAAQ,CAenF"}
package/dist/docs.js CHANGED
@@ -6,40 +6,71 @@
6
6
  *
7
7
  * (You can self-host the assets if your CSP forbids CDNs.)
8
8
  */
9
+ const JSDELIVR_ORIGIN = "https://cdn.jsdelivr.net";
10
+ function nonceAttr(nonce) {
11
+ return nonce ? ` nonce="${escapeHtml(nonce)}"` : "";
12
+ }
9
13
  export function scalarHtml(opts) {
10
14
  const title = escapeHtml(opts.title ?? "API Reference");
11
15
  const url = escapeHtml(opts.specUrl);
16
+ const scriptUrl = escapeHtml(opts.assets?.scalarScriptUrl ?? `${JSDELIVR_ORIGIN}/npm/@scalar/api-reference`);
17
+ const nonce = nonceAttr(opts.scriptNonce);
12
18
  return `<!doctype html>
13
19
  <html><head>
14
20
  <meta charset="utf-8" />
15
21
  <meta name="viewport" content="width=device-width, initial-scale=1" />
16
22
  <title>${title}</title>
17
23
  </head><body>
18
- <script id="api-reference" data-url="${url}"></script>
19
- <script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
24
+ <script id="api-reference" data-url="${url}"${nonce}></script>
25
+ <script src="${scriptUrl}"${nonce}></script>
20
26
  </body></html>`;
21
27
  }
22
28
  export function swaggerUiHtml(opts) {
23
29
  const title = escapeHtml(opts.title ?? "API Docs");
24
30
  const url = escapeHtml(opts.specUrl);
31
+ const cssUrl = escapeHtml(opts.assets?.swaggerUiCssUrl ?? `${JSDELIVR_ORIGIN}/npm/swagger-ui-dist/swagger-ui.css`);
32
+ const bundleUrl = escapeHtml(opts.assets?.swaggerUiBundleUrl ?? `${JSDELIVR_ORIGIN}/npm/swagger-ui-dist/swagger-ui-bundle.js`);
33
+ const nonce = nonceAttr(opts.scriptNonce);
25
34
  return `<!doctype html>
26
35
  <html><head>
27
36
  <meta charset="utf-8" />
28
37
  <meta name="viewport" content="width=device-width, initial-scale=1" />
29
38
  <title>${title}</title>
30
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swagger-ui-dist/swagger-ui.css" />
39
+ <link rel="stylesheet" href="${cssUrl}" />
31
40
  </head><body>
32
41
  <div id="swagger"></div>
33
- <script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist/swagger-ui-bundle.js"></script>
34
- <script>window.onload=()=>SwaggerUIBundle({url:"${url}",dom_id:"#swagger"});</script>
42
+ <script src="${bundleUrl}"${nonce}></script>
43
+ <script${nonce}>window.onload=()=>SwaggerUIBundle({url:"${url}",dom_id:"#swagger"});</script>
35
44
  </body></html>`;
36
45
  }
37
- export function htmlResponse(html) {
46
+ export function docsContentSecurityPolicy(opts = {}) {
47
+ const assetOrigins = opts.assetOrigins ?? [JSDELIVR_ORIGIN];
48
+ const scriptSrc = ["'self'", ...assetOrigins];
49
+ if (opts.scriptNonce)
50
+ scriptSrc.push(`'nonce-${opts.scriptNonce}'`);
51
+ else
52
+ scriptSrc.push("'unsafe-inline'");
53
+ const styleSrc = ["'self'", ...assetOrigins];
54
+ if (opts.allowInlineStyles !== false)
55
+ styleSrc.push("'unsafe-inline'");
56
+ return [
57
+ "default-src 'self'",
58
+ `script-src ${scriptSrc.join(" ")}`,
59
+ `style-src ${styleSrc.join(" ")}`,
60
+ "img-src 'self' data: https:",
61
+ "connect-src 'self'",
62
+ ].join("; ");
63
+ }
64
+ export function htmlResponse(html, opts = {}) {
38
65
  return new Response(html, {
39
66
  headers: {
40
67
  "content-type": "text/html; charset=utf-8",
41
- // Docs pages are intentionally permissive about external scripts; lock to those CDNs.
42
- "content-security-policy": "default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; img-src 'self' data: https:; connect-src 'self'",
68
+ "content-security-policy": opts.contentSecurityPolicy ??
69
+ docsContentSecurityPolicy({
70
+ assetOrigins: opts.assetOrigins,
71
+ scriptNonce: opts.scriptNonce,
72
+ allowInlineStyles: opts.allowInlineStyles,
73
+ }),
43
74
  "x-content-type-options": "nosniff",
44
75
  "referrer-policy": "no-referrer",
45
76
  },
package/dist/docs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,UAAU,UAAU,CAAC,IAAiB;IAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO;;;;SAIA,KAAK;;uCAEyB,GAAG;;eAE3B,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAiB;IAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO;;;;SAIA,KAAK;;;;;kDAKoC,GAAG;eACtC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxB,OAAO,EAAE;YACP,cAAc,EAAE,0BAA0B;YAC1C,sFAAsF;YACtF,yBAAyB,EACvB,4LAA4L;YAC9L,wBAAwB,EAAE,SAAS;YACnC,iBAAiB,EAAE,aAAa;SACjC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;AACrH,CAAC"}
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -10,4 +10,6 @@ export { requestId, secureHeaders, cors, rateLimit, timing, bearerAuth, } from "
10
10
  export type { RequestIdOptions, SecureHeadersOptions, CorsOptions, RateLimitOptions, RateLimitStore, } from "./middleware.js";
11
11
  export { createLogger, noopLogger } from "./logger.js";
12
12
  export type { Logger, LogLevel, ConsoleLoggerOptions } from "./logger.js";
13
+ export { sseStream, sseResponse, ndjsonStream, ndjsonResponse, } from "./streaming.js";
14
+ export type { SSEMessage, StreamOptions, SSEStreamOptions, SSEResponseOptions, NDJSONResponseOptions, } from "./streaming.js";
13
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE9D,YAAY,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,WAAW,EACX,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,aAAa,EACb,IAAI,EACJ,SAAS,EACT,MAAM,EACN,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE9D,YAAY,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,WAAW,EACX,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,aAAa,EACb,IAAI,EACJ,SAAS,EACT,MAAM,EACN,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE1E,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -4,4 +4,5 @@ export { validate, isStandardSchema } from "./schema.js";
4
4
  export { readBodyLimited, safeJsonParse, sanitizeHeaderName, sanitizeHeaderValue, timingSafeEqual, randomId, } from "./security.js";
5
5
  export { requestId, secureHeaders, cors, rateLimit, timing, bearerAuth, } from "./middleware.js";
6
6
  export { createLogger, noopLogger } from "./logger.js";
7
+ export { sseStream, sseResponse, ndjsonStream, ndjsonResponse, } from "./streaming.js";
7
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAoB/B,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,aAAa,EACb,IAAI,EACJ,SAAS,EACT,MAAM,EACN,UAAU,GACX,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAoB/B,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,aAAa,EACb,IAAI,EACJ,SAAS,EACT,MAAM,EACN,UAAU,GACX,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,gBAAgB,CAAC"}
@@ -49,6 +49,12 @@ export interface RateLimitOptions {
49
49
  max: number;
50
50
  keyGenerator?: (ctx: BaseContext<any, any>) => string;
51
51
  store?: RateLimitStore;
52
+ /**
53
+ * Trust x-forwarded-for / x-real-ip when deriving the default key.
54
+ * Off by default because those headers are client-spoofable unless your
55
+ * reverse proxy strips and rewrites them.
56
+ */
57
+ trustProxyHeaders?: boolean;
52
58
  /** When true, set Retry-After header on 429. Default: true. */
53
59
  retryAfter?: boolean;
54
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAY,eAAe,EAAE,MAAM,eAAe,CAAC;AAI1D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED,wBAAgB,SAAS,CAAC,IAAI,GAAE,gBAAqB,GAAG,KAAK,CAgB5D;AAID,MAAM,WAAW,oBAAoB;IACnC,qBAAqB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvC,IAAI,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,KAAK,CAAC;IACzF,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACzC,yBAAyB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,aAAa,CAAC,IAAI,GAAE,oBAAyB,GAAG,KAAK,CAsCpE;AAID,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,KAAK,CA2D7C;AAID,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;IACtD,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAqBD,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,KAAK,CAwBvD;AAID,wBAAgB,MAAM,CAAC,UAAU,SAAkB,GAAG,KAAK,CAe1D;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,KAAK,CA0BR;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAY,eAAe,EAAE,MAAM,eAAe,CAAC;AAI1D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED,wBAAgB,SAAS,CAAC,IAAI,GAAE,gBAAqB,GAAG,KAAK,CAgB5D;AAID,MAAM,WAAW,oBAAoB;IACnC,qBAAqB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvC,IAAI,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,KAAK,CAAC;IACzF,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACnC,uBAAuB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACzC,yBAAyB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,aAAa,CAAC,IAAI,GAAE,oBAAyB,GAAG,KAAK,CAsCpE;AAID,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,KAAK,CA2D7C;AAID,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;IACtD,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAqBD,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,KAAK,CA8BvD;AAID,wBAAgB,MAAM,CAAC,UAAU,SAAkB,GAAG,KAAK,CAe1D;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,KAAK,CA0BR;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -65,6 +65,8 @@ export function secureHeaders(opts = {}) {
65
65
  },
66
66
  };
67
67
  }
68
+ const DEFAULT_CORS_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"];
69
+ const DEFAULT_CORS_ALLOWED_HEADERS = ["content-type", "authorization"];
68
70
  export function cors(opts) {
69
71
  // Reject the classic CORS footgun up front. Browsers will refuse to attach
70
72
  // credentials to a wildcard origin (the spec literally forbids
@@ -89,8 +91,8 @@ export function cors(opts) {
89
91
  return opts.origin.includes(origin) ? origin : null;
90
92
  return opts.origin(origin) ? origin : null;
91
93
  };
92
- const methods = (opts.methods ?? ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]).join(", ");
93
- const allowedHeaders = (opts.allowedHeaders ?? ["content-type", "authorization"]).join(", ");
94
+ const methods = (opts.methods ?? DEFAULT_CORS_METHODS).join(", ");
95
+ const allowedHeaders = (opts.allowedHeaders ?? DEFAULT_CORS_ALLOWED_HEADERS).join(", ");
94
96
  const exposed = opts.exposedHeaders?.join(", ");
95
97
  const maxAge = String(opts.maxAgeSeconds ?? 600);
96
98
  return {
@@ -150,9 +152,14 @@ class MemoryStore {
150
152
  export function rateLimit(opts) {
151
153
  const store = opts.store ?? new MemoryStore();
152
154
  const keyOf = opts.keyGenerator ??
153
- ((ctx) => ctx.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim() ||
154
- ctx.request.headers.get("x-real-ip") ||
155
- "global");
155
+ ((ctx) => {
156
+ if (opts.trustProxyHeaders) {
157
+ return (ctx.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim() ||
158
+ ctx.request.headers.get("x-real-ip") ||
159
+ "global");
160
+ }
161
+ return "global";
162
+ });
156
163
  return {
157
164
  async beforeHandle(ctx) {
158
165
  const key = keyOf(ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAW1D,MAAM,UAAU,SAAS,CAAC,OAAyB,EAAE;IACnD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC;IACvC,OAAO;QACL,YAAY,CAAC,GAAG;YACd,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7E,MAAM,EAAE,GAAG,QAAQ,IAAI,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YAClF,GAAG,CAAC,KAAiC,CAAC,SAAS,GAAG,EAAE,CAAC;YACtD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,UAAU,CAAC,GAAG;YACZ,qEAAqE;YACrE,0BAA0B;YAC1B,KAAK,GAAG,CAAC;QACX,CAAC;KACF,CAAC;AACJ,CAAC;AAgBD,MAAM,UAAU,aAAa,CAAC,OAA6B,EAAE;IAC3D,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,IAAI,4CAA4C,CAAC;IACvF,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,GAAG,CAAC;IAE5D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAC/E,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,iBAAiB;YAAE,CAAC,IAAI,qBAAqB,CAAC;QACvD,IAAI,IAAI,CAAC,OAAO;YAAE,CAAC,IAAI,WAAW,CAAC;QACnC,OAAO,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC;IAC1C,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC;IAExD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,IAAI,aAAa,CAAC;IACjD,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC;IAEpD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,IAAI,0CAA0C,CAAC;IAClF,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;IAEzD,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,IAAI,aAAa,CAAC;IAC3D,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,4BAA4B,CAAC,GAAG,IAAI,CAAC;IAEjE,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,IAAI,aAAa,CAAC;IAC7D,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,8BAA8B,CAAC,GAAG,IAAI,CAAC;IAEnE,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAAC;IAC1E,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK;QAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,CAAC,kBAAkB;IAEtF,OAAO;QACL,UAAU,CAAC,GAAG;YACZ,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAaD,MAAM,UAAU,IAAI,CAAC,IAAiB;IACpC,2EAA2E;IAC3E,+DAA+D;IAC/D,iDAAiD;IACjD,wEAAwE;IACxE,wEAAwE;IACxE,uCAAuC;IACvC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,gBAAgB,GACpB,IAAI,CAAC,MAAM,KAAK,GAAG;YACnB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,mEAAmE;gBACjE,+FAA+F,CAClG,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAqB,EAAiB,EAAE;QACrD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/G,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClG,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,CAAC;IAEjD,OAAO;QACL,YAAY,CAAC,GAAG;YACd,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,OAAO,EAAE,CAAC;gBACZ,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;gBAC5D,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACtC,IAAI,IAAI,CAAC,WAAW;oBAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;gBACtF,IAAI,OAAO;oBAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;oBAC9C,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBACxB,IAAI,IAAI,CAAC,WAAW;wBAAE,CAAC,CAAC,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;gBAC1E,CAAC;gBACD,CAAC,CAAC,GAAG,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;gBAC/C,CAAC,CAAC,GAAG,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;gBACtD,CAAC,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;gBACxC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,UAAU,CAAC,GAAG;YACZ,8CAA8C;YAC9C,8BAA8B;YAC9B,KAAK,GAAG,CAAC;QACX,CAAC;KACF,CAAC;AACJ,CAAC;AAiBD,MAAM,WAAW;IACP,OAAO,GAAG,IAAI,GAAG,EAA8C,CAAC;IACxE,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,QAAgB;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC;YACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7B,6DAA6D;YAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;gBAC/B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO;oBAAE,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG;wBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAC,IAAsB;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,WAAW,EAAE,CAAC;IAC9C,MAAM,KAAK,GACT,IAAI,CAAC,YAAY;QACjB,CAAC,CAAC,GAA0B,EAAE,EAAE,CAC9B,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;YACjE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;YACpC,QAAQ,CAAC,CAAC;IAEd,OAAO;QACL,KAAK,CAAC,YAAY,CAAC,GAAG;YACpB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;YAChD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAChE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;gBACvD,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAChF,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+BAA+B;AAE/B,MAAM,UAAU,MAAM,CAAC,UAAU,GAAG,eAAe;IACjD,MAAM,GAAG,GAAG,GAAW,EAAE,CACvB,OAAO,WAAW,KAAK,WAAW,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACzF,OAAO;QACL,YAAY,CAAC,GAAG;YACb,GAAG,CAAC,KAAiC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;QACzD,CAAC;QACD,WAAW,CAAC,GAAG,EAAE,KAAK;YACpB,MAAM,KAAK,GAAI,GAAG,CAAC,KAAiC,CAAC,OAA6B,CAAC;YACnF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AAED,2CAA2C;AAE3C,MAAM,UAAU,UAAU,CAAC,IAG1B;IACC,OAAO;QACL,KAAK,CAAC,YAAY,CAAC,GAAG;YACpB,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACzD,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,yCAAyC;oBAC/C,KAAK,EAAE,cAAc;oBACrB,MAAM,EAAE,GAAG;iBACZ,CAAC,EACF;oBACE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE;wBACP,cAAc,EAAE,0BAA0B;wBAC1C,kBAAkB,EAAE,iBAAiB,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG;qBAC5D;iBACF,CACF,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;YACtC,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;YACnD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Streaming response helpers โ€” Server-Sent Events (SSE) and NDJSON.
3
+ *
4
+ * Both helpers return a `ReadableStream<Uint8Array>` (or, in the `*Response`
5
+ * forms, a `Response`) that is **backpressure-safe**: data is only pulled
6
+ * from the underlying `AsyncIterable`/generator when the consumer asks for
7
+ * the next chunk. They also honor an optional `AbortSignal` and call
8
+ * `iterator.return()` so caller-owned resources (DB cursors, fetches, queues)
9
+ * are released when the client disconnects.
10
+ *
11
+ * ```ts
12
+ * import { sseStream } from "@daloyjs/core";
13
+ *
14
+ * app.route({
15
+ * method: "GET",
16
+ * path: "/events",
17
+ * operationId: "events",
18
+ * responses: { 200: { description: "SSE stream" } },
19
+ * handler: ({ request }) => ({
20
+ * status: 200,
21
+ * headers: { "content-type": "text/event-stream" },
22
+ * body: sseStream(async function* () {
23
+ * yield { event: "ping", data: { now: Date.now() } };
24
+ * }, { signal: request.signal }),
25
+ * }),
26
+ * });
27
+ * ```
28
+ *
29
+ * For NDJSON, each yielded value is JSON-encoded and terminated with `\n`.
30
+ */
31
+ /** A single SSE event. `data` may be a string or any JSON-serializable value. */
32
+ export interface SSEMessage {
33
+ data: unknown;
34
+ event?: string;
35
+ id?: string;
36
+ /** Reconnection delay in milliseconds. */
37
+ retry?: number;
38
+ /** Comment line (sent as `: <comment>`). Useful for keep-alive pings. */
39
+ comment?: string;
40
+ }
41
+ export interface StreamOptions {
42
+ /** Abort the stream when this signal fires. */
43
+ signal?: AbortSignal;
44
+ }
45
+ export interface SSEStreamOptions extends StreamOptions {
46
+ /**
47
+ * Send a comment (`:keep-alive`) every N milliseconds to keep the
48
+ * connection open through proxies. Set to `0`/`undefined` to disable.
49
+ */
50
+ keepAliveMs?: number;
51
+ }
52
+ export interface SSEResponseOptions extends SSEStreamOptions {
53
+ status?: number;
54
+ headers?: HeadersInit;
55
+ }
56
+ export interface NDJSONResponseOptions extends StreamOptions {
57
+ status?: number;
58
+ headers?: HeadersInit;
59
+ }
60
+ type IterableSource<T> = AsyncIterable<T> | Iterable<T> | (() => AsyncIterable<T> | Iterable<T>);
61
+ /**
62
+ * Build a backpressure-safe `ReadableStream` from an async iterable of SSE
63
+ * messages. The iterator is only advanced when the consumer pulls the next
64
+ * chunk, so a slow client cannot cause unbounded buffering.
65
+ */
66
+ export declare function sseStream(source: IterableSource<SSEMessage | string>, opts?: SSEStreamOptions): ReadableStream<Uint8Array>;
67
+ /**
68
+ * Wrap `sseStream` in a `Response` with the proper SSE headers
69
+ * (`text/event-stream`, no caching, keep-alive). Caller-supplied headers win.
70
+ */
71
+ export declare function sseResponse(source: IterableSource<SSEMessage | string>, opts?: SSEResponseOptions): Response;
72
+ /**
73
+ * Build a backpressure-safe `ReadableStream` of NDJSON (newline-delimited
74
+ * JSON) records from an async iterable. Each yielded value is encoded with
75
+ * `JSON.stringify` and terminated with `\n`. Values that stringify to
76
+ * `undefined` throw because they cannot be represented as valid NDJSON.
77
+ */
78
+ export declare function ndjsonStream<T>(source: IterableSource<T>, opts?: StreamOptions): ReadableStream<Uint8Array>;
79
+ /**
80
+ * Wrap `ndjsonStream` in a `Response` with `application/x-ndjson` and
81
+ * cache-busting headers. Caller-supplied headers win.
82
+ */
83
+ export declare function ndjsonResponse<T>(source: IterableSource<T>, opts?: NDJSONResponseOptions): Response;
84
+ export {};
85
+ //# sourceMappingURL=streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,KAAK,cAAc,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AA2DjG;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,cAAc,CAAC,UAAU,GAAG,MAAM,CAAC,EAC3C,IAAI,GAAE,gBAAqB,GAC1B,cAAc,CAAC,UAAU,CAAC,CAuE5B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,cAAc,CAAC,UAAU,GAAG,MAAM,CAAC,EAC3C,IAAI,GAAE,kBAAuB,GAC5B,QAAQ,CASV;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,IAAI,GAAE,aAAkB,GACvB,cAAc,CAAC,UAAU,CAAC,CAuD5B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,IAAI,GAAE,qBAA0B,GAC/B,QAAQ,CAOV"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Streaming response helpers โ€” Server-Sent Events (SSE) and NDJSON.
3
+ *
4
+ * Both helpers return a `ReadableStream<Uint8Array>` (or, in the `*Response`
5
+ * forms, a `Response`) that is **backpressure-safe**: data is only pulled
6
+ * from the underlying `AsyncIterable`/generator when the consumer asks for
7
+ * the next chunk. They also honor an optional `AbortSignal` and call
8
+ * `iterator.return()` so caller-owned resources (DB cursors, fetches, queues)
9
+ * are released when the client disconnects.
10
+ *
11
+ * ```ts
12
+ * import { sseStream } from "@daloyjs/core";
13
+ *
14
+ * app.route({
15
+ * method: "GET",
16
+ * path: "/events",
17
+ * operationId: "events",
18
+ * responses: { 200: { description: "SSE stream" } },
19
+ * handler: ({ request }) => ({
20
+ * status: 200,
21
+ * headers: { "content-type": "text/event-stream" },
22
+ * body: sseStream(async function* () {
23
+ * yield { event: "ping", data: { now: Date.now() } };
24
+ * }, { signal: request.signal }),
25
+ * }),
26
+ * });
27
+ * ```
28
+ *
29
+ * For NDJSON, each yielded value is JSON-encoded and terminated with `\n`.
30
+ */
31
+ const TEXT_ENCODER = new TextEncoder();
32
+ function getAsyncIterator(src) {
33
+ const it = typeof src === "function" ? src() : src;
34
+ if (it == null) {
35
+ throw new TypeError("Streaming source is null/undefined");
36
+ }
37
+ if (typeof it[Symbol.asyncIterator] === "function") {
38
+ return it[Symbol.asyncIterator]();
39
+ }
40
+ if (typeof it[Symbol.iterator] === "function") {
41
+ const sync = it[Symbol.iterator]();
42
+ const wrapped = {
43
+ next: async () => sync.next(),
44
+ };
45
+ if (sync.return) {
46
+ wrapped.return = async (value) => sync.return(value);
47
+ }
48
+ return wrapped;
49
+ }
50
+ throw new TypeError("Streaming source is not iterable");
51
+ }
52
+ function encodeSSE(msg) {
53
+ const message = typeof msg === "string" ? { data: msg } : msg;
54
+ let out = "";
55
+ if (message.comment) {
56
+ for (const line of String(message.comment).split(/\r?\n/)) {
57
+ out += `: ${line}\n`;
58
+ }
59
+ }
60
+ if (message.event !== undefined) {
61
+ // Event names cannot contain newlines per the spec.
62
+ out += `event: ${String(message.event).replace(/[\r\n]+/g, " ")}\n`;
63
+ }
64
+ if (message.id !== undefined) {
65
+ out += `id: ${String(message.id).replace(/[\r\n]+/g, " ")}\n`;
66
+ }
67
+ if (message.retry !== undefined && Number.isFinite(message.retry)) {
68
+ out += `retry: ${Math.max(0, Math.floor(message.retry))}\n`;
69
+ }
70
+ if (message.data !== undefined) {
71
+ const raw = typeof message.data === "string" ? message.data : JSON.stringify(message.data);
72
+ for (const line of raw.split(/\r?\n/)) {
73
+ out += `data: ${line}\n`;
74
+ }
75
+ }
76
+ out += "\n";
77
+ return TEXT_ENCODER.encode(out);
78
+ }
79
+ function encodeNDJSON(value) {
80
+ const line = JSON.stringify(value);
81
+ if (line === undefined) {
82
+ throw new TypeError("NDJSON values must be JSON-serializable");
83
+ }
84
+ return TEXT_ENCODER.encode(line + "\n");
85
+ }
86
+ /**
87
+ * Build a backpressure-safe `ReadableStream` from an async iterable of SSE
88
+ * messages. The iterator is only advanced when the consumer pulls the next
89
+ * chunk, so a slow client cannot cause unbounded buffering.
90
+ */
91
+ export function sseStream(source, opts = {}) {
92
+ const iterator = getAsyncIterator(source);
93
+ let keepAliveTimer;
94
+ let abortHandler;
95
+ const cleanup = async (cancelValue) => {
96
+ if (keepAliveTimer !== undefined) {
97
+ clearInterval(keepAliveTimer);
98
+ keepAliveTimer = undefined;
99
+ }
100
+ if (opts.signal && abortHandler) {
101
+ opts.signal.removeEventListener("abort", abortHandler);
102
+ abortHandler = undefined;
103
+ }
104
+ if (typeof iterator.return === "function") {
105
+ try {
106
+ await iterator.return(cancelValue);
107
+ }
108
+ catch {
109
+ /* swallow โ€” the consumer is already gone */
110
+ }
111
+ }
112
+ };
113
+ return new ReadableStream({
114
+ start(controller) {
115
+ if (opts.signal?.aborted) {
116
+ controller.close();
117
+ void cleanup();
118
+ return;
119
+ }
120
+ if (opts.signal) {
121
+ abortHandler = () => {
122
+ try {
123
+ controller.close();
124
+ }
125
+ catch {
126
+ /* already closed */
127
+ }
128
+ void cleanup();
129
+ };
130
+ opts.signal.addEventListener("abort", abortHandler, { once: true });
131
+ }
132
+ if (opts.keepAliveMs && opts.keepAliveMs > 0) {
133
+ keepAliveTimer = setInterval(() => {
134
+ try {
135
+ if ((controller.desiredSize ?? 0) > 0) {
136
+ controller.enqueue(TEXT_ENCODER.encode(": keep-alive\n\n"));
137
+ }
138
+ }
139
+ catch {
140
+ /* stream closed โ€” interval will be cleared on cancel */
141
+ }
142
+ }, opts.keepAliveMs);
143
+ }
144
+ },
145
+ async pull(controller) {
146
+ try {
147
+ const { value, done } = await iterator.next();
148
+ if (done) {
149
+ controller.close();
150
+ await cleanup();
151
+ return;
152
+ }
153
+ controller.enqueue(encodeSSE(value));
154
+ }
155
+ catch (err) {
156
+ controller.error(err);
157
+ await cleanup(err);
158
+ }
159
+ },
160
+ async cancel(reason) {
161
+ await cleanup(reason);
162
+ },
163
+ });
164
+ }
165
+ /**
166
+ * Wrap `sseStream` in a `Response` with the proper SSE headers
167
+ * (`text/event-stream`, no caching, keep-alive). Caller-supplied headers win.
168
+ */
169
+ export function sseResponse(source, opts = {}) {
170
+ const stream = sseStream(source, opts);
171
+ const headers = new Headers(opts.headers);
172
+ if (!headers.has("content-type"))
173
+ headers.set("content-type", "text/event-stream; charset=utf-8");
174
+ if (!headers.has("cache-control"))
175
+ headers.set("cache-control", "no-cache, no-transform");
176
+ if (!headers.has("connection"))
177
+ headers.set("connection", "keep-alive");
178
+ // Disable proxy buffering (nginx).
179
+ if (!headers.has("x-accel-buffering"))
180
+ headers.set("x-accel-buffering", "no");
181
+ return new Response(stream, { status: opts.status ?? 200, headers });
182
+ }
183
+ /**
184
+ * Build a backpressure-safe `ReadableStream` of NDJSON (newline-delimited
185
+ * JSON) records from an async iterable. Each yielded value is encoded with
186
+ * `JSON.stringify` and terminated with `\n`. Values that stringify to
187
+ * `undefined` throw because they cannot be represented as valid NDJSON.
188
+ */
189
+ export function ndjsonStream(source, opts = {}) {
190
+ const iterator = getAsyncIterator(source);
191
+ let abortHandler;
192
+ const cleanup = async (cancelValue) => {
193
+ if (opts.signal && abortHandler) {
194
+ opts.signal.removeEventListener("abort", abortHandler);
195
+ abortHandler = undefined;
196
+ }
197
+ if (typeof iterator.return === "function") {
198
+ try {
199
+ await iterator.return(cancelValue);
200
+ }
201
+ catch {
202
+ /* swallow */
203
+ }
204
+ }
205
+ };
206
+ return new ReadableStream({
207
+ start(controller) {
208
+ if (opts.signal?.aborted) {
209
+ controller.close();
210
+ void cleanup();
211
+ return;
212
+ }
213
+ if (opts.signal) {
214
+ abortHandler = () => {
215
+ try {
216
+ controller.close();
217
+ }
218
+ catch {
219
+ /* already closed */
220
+ }
221
+ void cleanup();
222
+ };
223
+ opts.signal.addEventListener("abort", abortHandler, { once: true });
224
+ }
225
+ },
226
+ async pull(controller) {
227
+ try {
228
+ const { value, done } = await iterator.next();
229
+ if (done) {
230
+ controller.close();
231
+ await cleanup();
232
+ return;
233
+ }
234
+ controller.enqueue(encodeNDJSON(value));
235
+ }
236
+ catch (err) {
237
+ controller.error(err);
238
+ await cleanup(err);
239
+ }
240
+ },
241
+ async cancel(reason) {
242
+ await cleanup(reason);
243
+ },
244
+ });
245
+ }
246
+ /**
247
+ * Wrap `ndjsonStream` in a `Response` with `application/x-ndjson` and
248
+ * cache-busting headers. Caller-supplied headers win.
249
+ */
250
+ export function ndjsonResponse(source, opts = {}) {
251
+ const stream = ndjsonStream(source, opts);
252
+ const headers = new Headers(opts.headers);
253
+ if (!headers.has("content-type"))
254
+ headers.set("content-type", "application/x-ndjson; charset=utf-8");
255
+ if (!headers.has("cache-control"))
256
+ headers.set("cache-control", "no-cache, no-transform");
257
+ if (!headers.has("x-accel-buffering"))
258
+ headers.set("x-accel-buffering", "no");
259
+ return new Response(stream, { status: opts.status ?? 200, headers });
260
+ }
261
+ //# sourceMappingURL=streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -83,6 +83,14 @@ export interface Hooks {
83
83
  beforeHandle?: (ctx: BaseContext<any, any>) => void | Response | Promise<void | Response>;
84
84
  afterHandle?: (ctx: BaseContext<any, any>, result: unknown) => void | unknown | Promise<void | unknown>;
85
85
  onError?: (err: unknown, ctx: BaseContext<any, any> | undefined) => void | Response | Promise<void | Response>;
86
+ /**
87
+ * Symmetric to `beforeHandle`, but for outgoing responses. Runs after the Response
88
+ * is built (success, error, and OPTIONS preflight paths) and after request-scoped
89
+ * headers are merged, but before `onResponse`. Mutate `res.headers` in place, or
90
+ * return a brand-new `Response` to replace it. Returning `void`/`undefined` keeps
91
+ * the existing response. Multiple `onSend` hooks compose pipeline-style.
92
+ */
93
+ onSend?: (res: Response, ctx: BaseContext<any, any> | undefined) => void | Response | Promise<void | Response>;
86
94
  onResponse?: (res: Response) => void | Promise<void>;
87
95
  }
88
96
  export interface RouteDefinition<P extends PathString = PathString, M extends HttpMethod = HttpMethod, Req extends RequestSchemas | undefined = undefined, Res extends ResponsesMap = ResponsesMap> {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daloyjs/core",
3
- "version": "0.1.2",
3
+ "version": "0.3.0",
4
4
  "description": "DaloyJS is a runtime-portable, contract-first TypeScript web framework with built-in OpenAPI (Hey API), typed client generation, large-scale maintainability, and security-first defaults. Hono-grade portability, Elysia-grade DX, FastAPI-grade docs, Fastify-grade ops โ€” distributed via pnpm.",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -17,7 +17,6 @@
17
17
  "author": "DaloyJS",
18
18
  "main": "./dist/index.js",
19
19
  "types": "./dist/index.d.ts",
20
- "packageManager": "pnpm@11.1.2",
21
20
  "engines": {
22
21
  "node": ">=20.10.0",
23
22
  "pnpm": ">=9.0.0"
@@ -62,26 +61,16 @@
62
61
  "./contract": {
63
62
  "types": "./dist/contract.d.ts",
64
63
  "import": "./dist/contract.js"
64
+ },
65
+ "./streaming": {
66
+ "types": "./dist/streaming.d.ts",
67
+ "import": "./dist/streaming.js"
65
68
  }
66
69
  },
67
70
  "files": [
68
71
  "dist",
69
72
  "README.md"
70
73
  ],
71
- "scripts": {
72
- "build": "tsc -p tsconfig.json",
73
- "dev": "tsc -w -p tsconfig.json",
74
- "example": "node --import tsx examples/basic.ts",
75
- "bench": "node --import tsx bench/router.bench.ts",
76
- "test": "node --import tsx --test tests/**/*.test.ts",
77
- "coverage": "node --import tsx --test --experimental-test-coverage --test-coverage-include='src/**' --test-coverage-lines=100 --test-coverage-functions=100 tests/**/*.test.ts",
78
- "typecheck": "tsc --noEmit",
79
- "gen:openapi": "node --import tsx scripts/dump-openapi.ts",
80
- "gen:client": "openapi-ts",
81
- "gen": "pnpm gen:openapi && pnpm gen:client",
82
- "audit": "pnpm audit --prod",
83
- "prepublishOnly": "pnpm build"
84
- },
85
74
  "keywords": [
86
75
  "framework",
87
76
  "http",
@@ -106,12 +95,17 @@
106
95
  "typescript": "^6.0.3",
107
96
  "zod": "^4.4.3"
108
97
  },
109
- "pnpm": {
110
- "minimumReleaseAge": 1440,
111
- "minimumReleaseAgeExclude": [],
112
- "onlyBuiltDependencies": [
113
- "esbuild"
114
- ],
115
- "neverBuiltDependencies": []
98
+ "scripts": {
99
+ "build": "tsc -p tsconfig.json",
100
+ "dev": "tsc -w -p tsconfig.json",
101
+ "example": "node --import tsx examples/basic.ts",
102
+ "bench": "node --import tsx bench/router.bench.ts",
103
+ "test": "node --import tsx --test tests/**/*.test.ts",
104
+ "coverage": "node --import tsx --test --experimental-test-coverage --test-coverage-include='src/**' --test-coverage-lines=100 --test-coverage-functions=100 tests/**/*.test.ts",
105
+ "typecheck": "tsc --noEmit",
106
+ "gen:openapi": "node --import tsx scripts/dump-openapi.ts",
107
+ "gen:client": "openapi-ts",
108
+ "gen": "pnpm gen:openapi && pnpm gen:client",
109
+ "audit": "pnpm audit --prod"
116
110
  }
117
- }
111
+ }