@daloyjs/core 0.9.1 → 0.12.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.
@@ -44,6 +44,51 @@ export function requestId(opts = {}) {
44
44
  },
45
45
  };
46
46
  }
47
+ const CSP_NONCE_STATE = "cspNonce";
48
+ function generateCspNonce() {
49
+ const cryptoApi = globalThis.crypto;
50
+ if (!cryptoApi?.getRandomValues) {
51
+ throw new Error("secureHeaders(): WebCrypto is required to generate a CSP nonce. " +
52
+ "Run on Node 20+, Bun, Deno, Cloudflare Workers, or Vercel Edge.");
53
+ }
54
+ const nonceBytes = new Uint8Array(16);
55
+ cryptoApi.getRandomValues(nonceBytes);
56
+ let binary = "";
57
+ for (let index = 0; index < nonceBytes.length; index++) {
58
+ binary += String.fromCharCode(nonceBytes[index]);
59
+ }
60
+ // base64url
61
+ return btoa(binary).replace(/=+$/, "").replace(/\+/g, "-").replace(/\//g, "_");
62
+ }
63
+ function buildCspHeader(opt, nonce) {
64
+ const entries = {};
65
+ for (const [directiveName, directiveValue] of Object.entries(opt.directives)) {
66
+ const list = Array.isArray(directiveValue)
67
+ ? directiveValue.slice()
68
+ : directiveValue.split(/\s+/).filter(Boolean);
69
+ if (list.length > 0)
70
+ entries[directiveName] = list;
71
+ }
72
+ if (opt.nonce && nonce) {
73
+ const nonceSrc = `'nonce-${nonce}'`;
74
+ for (const directiveName of ["script-src", "script-src-elem", "style-src", "style-src-elem"]) {
75
+ if (entries[directiveName])
76
+ entries[directiveName].push(nonceSrc);
77
+ }
78
+ }
79
+ if (opt.trustedTypes) {
80
+ entries["require-trusted-types-for"] = ["'script'"];
81
+ const trustedTypes = opt.trustedTypes;
82
+ if (typeof trustedTypes === "object" && trustedTypes.policies?.length) {
83
+ entries["trusted-types"] = trustedTypes.policies.slice();
84
+ }
85
+ }
86
+ const parts = [];
87
+ for (const [directiveName, sources] of Object.entries(entries)) {
88
+ parts.push(`${directiveName} ${sources.join(" ")}`);
89
+ }
90
+ return parts.join("; ");
91
+ }
47
92
  /**
48
93
  * Apply a Helmet-equivalent baseline of secure response headers:
49
94
  * `Content-Security-Policy`, `Strict-Transport-Security`, `X-Frame-Options`,
@@ -70,9 +115,11 @@ export function requestId(opts = {}) {
70
115
  */
71
116
  export function secureHeaders(opts = {}) {
72
117
  const headers = {};
73
- const csp = opts.contentSecurityPolicy ?? "default-src 'self'; frame-ancestors 'none'";
74
- if (csp !== false)
75
- headers["content-security-policy"] = csp;
118
+ const cspOpt = opts.contentSecurityPolicy ?? "default-src 'self'; frame-ancestors 'none'";
119
+ const cspIsDynamic = cspOpt !== false && typeof cspOpt === "object";
120
+ if (cspOpt !== false && typeof cspOpt === "string") {
121
+ headers["content-security-policy"] = cspOpt;
122
+ }
76
123
  const hsts = opts.hsts ?? { maxAgeSeconds: 31536000, includeSubDomains: true };
77
124
  if (hsts !== false) {
78
125
  const hstsParts = [`max-age=${hsts.maxAgeSeconds}`];
@@ -102,6 +149,22 @@ export function secureHeaders(opts = {}) {
102
149
  if (opts.xssProtection ?? false)
103
150
  headers["x-xss-protection"] = "0"; // modern guidance
104
151
  return {
152
+ beforeHandle(ctx) {
153
+ if (cspIsDynamic && cspOpt.nonce) {
154
+ ctx.state[CSP_NONCE_STATE] = generateCspNonce();
155
+ }
156
+ },
157
+ onSend(res, ctx) {
158
+ if (cspIsDynamic && !res.headers.has("content-security-policy")) {
159
+ const nonce = ctx
160
+ ? ctx.state[CSP_NONCE_STATE]
161
+ : undefined;
162
+ const header = buildCspHeader(cspOpt, nonce);
163
+ if (header)
164
+ res.headers.set("content-security-policy", header);
165
+ }
166
+ return undefined;
167
+ },
105
168
  onResponse(res) {
106
169
  for (const [k, v] of Object.entries(headers)) {
107
170
  if (!res.headers.has(k))
@@ -440,22 +503,81 @@ function buildCsrfSetCookie(name, value, opts) {
440
503
  return s;
441
504
  }
442
505
  /**
443
- * Double-submit-cookie CSRF protection.
506
+ * CSRF protection middleware.
507
+ *
508
+ * Two strategies are supported (see {@link CsrfOptions.strategy}):
509
+ *
510
+ * - **`"double-submit"`** (default) — On safe methods (`GET`/`HEAD`/`OPTIONS`)
511
+ * ensures the client has a CSRF cookie; if missing, issues a fresh token
512
+ * and sets it via `Set-Cookie` on the response. The token is exposed on
513
+ * `ctx.state.csrfToken` so handlers can render it into HTML. On mutating
514
+ * methods, requires that an `x-csrf-token` request header (name
515
+ * configurable) matches the cookie value via timing-safe comparison. A
516
+ * missing or mismatched token rejects the request with `403 Forbidden`.
444
517
  *
445
- * On safe methods (default GET/HEAD/OPTIONS), ensures the client has a CSRF
446
- * cookie; if missing, issues a fresh token and sets it via `Set-Cookie` on
447
- * the response. The token is also exposed on `ctx.state.csrfToken` so handlers
448
- * can render it into HTML.
518
+ * - **`"fetch-metadata"`** Tokenless. Requires `Sec-Fetch-Site` to be
519
+ * `same-origin` or `none` on mutating requests. Cross-origin requests with
520
+ * no allowlisted `Origin`/`Referer` are rejected with `403`. No cookie is
521
+ * issued or required. Robust on every browser shipped since 2020.
449
522
  *
450
- * On mutating methods, requires that an `x-csrf-token` request header (name
451
- * configurable) matches the cookie value via timing-safe comparison. A missing
452
- * or mismatched token rejects the request with `403 Forbidden`.
523
+ * - **`"both"`** Requires the fetch-metadata check AND the double-submit
524
+ * cookie check to pass. Useful when you want defense-in-depth.
525
+ *
526
+ * @example Fetch-Metadata mode (recommended for new apps)
527
+ * ```ts
528
+ * app.use(csrf({
529
+ * strategy: "fetch-metadata",
530
+ * allowedOrigins: ["https://app.example.com"],
531
+ * }));
532
+ * ```
453
533
  */
454
534
  export function csrf(opts = {}) {
535
+ const strategy = opts.strategy ?? "double-submit";
536
+ if (strategy !== "double-submit" && strategy !== "fetch-metadata" && strategy !== "both") {
537
+ throw new Error('csrf(): strategy must be "double-submit", "fetch-metadata", or "both".');
538
+ }
455
539
  const cookieName = opts.cookieName ?? "__Host-daloy.csrf";
456
540
  const headerName = sanitizeHeaderName(opts.headerName ?? "x-csrf-token").toLowerCase();
457
541
  const ignore = new Set((opts.ignoreMethods ?? ["GET", "HEAD", "OPTIONS"]).map((m) => m.toUpperCase()));
458
542
  const generator = opts.generator ?? generateCsrfToken;
543
+ const originAllowed = (origin) => {
544
+ if (!origin)
545
+ return false;
546
+ if (Array.isArray(opts.allowedOrigins))
547
+ return opts.allowedOrigins.includes(origin);
548
+ if (typeof opts.allowedOrigins === "function")
549
+ return opts.allowedOrigins(origin);
550
+ return false;
551
+ };
552
+ const checkFetchMetadata = (req) => {
553
+ const site = req.headers.get("sec-fetch-site");
554
+ if (site === "same-origin" || site === "none")
555
+ return;
556
+ if (site !== null) {
557
+ // Browser sent Sec-Fetch-Site and it is same-site/cross-site: reject
558
+ // unless the caller explicitly allowlisted the Origin.
559
+ if (originAllowed(req.headers.get("origin")))
560
+ return;
561
+ throw new ForbiddenError("CSRF: cross-origin request rejected (Sec-Fetch-Site)");
562
+ }
563
+ // Legacy browser without Fetch-Metadata: fall back to Origin/Referer allowlist.
564
+ const origin = req.headers.get("origin");
565
+ if (origin && originAllowed(origin))
566
+ return;
567
+ const referer = req.headers.get("referer");
568
+ if (referer) {
569
+ try {
570
+ const refOrigin = new URL(referer).origin;
571
+ if (originAllowed(refOrigin))
572
+ return;
573
+ }
574
+ catch {
575
+ /* fall through to rejection */
576
+ }
577
+ }
578
+ throw new ForbiddenError("CSRF: request origin could not be verified");
579
+ };
580
+ const wantsDoubleSubmit = strategy === "double-submit" || strategy === "both";
459
581
  const cookieOverrides = opts.cookieOptions ?? {};
460
582
  const cookieOpts = {
461
583
  sameSite: cookieOverrides.sameSite ?? "Lax",
@@ -465,12 +587,19 @@ export function csrf(opts = {}) {
465
587
  maxAgeSeconds: cookieOverrides.maxAgeSeconds ?? 0,
466
588
  partitioned: cookieOverrides.partitioned ?? false,
467
589
  };
468
- validateCsrfCookieOptions(cookieName, cookieOpts);
590
+ if (wantsDoubleSubmit)
591
+ validateCsrfCookieOptions(cookieName, cookieOpts);
469
592
  return {
470
593
  beforeHandle(ctx) {
471
- const existing = parseCookieValue(ctx.request.headers.get("cookie"), cookieName);
472
594
  const method = ctx.request.method.toUpperCase();
473
- if (ignore.has(method)) {
595
+ const isSafe = ignore.has(method);
596
+ if (!isSafe && (strategy === "fetch-metadata" || strategy === "both")) {
597
+ checkFetchMetadata(ctx.request);
598
+ }
599
+ if (!wantsDoubleSubmit)
600
+ return undefined;
601
+ const existing = parseCookieValue(ctx.request.headers.get("cookie"), cookieName);
602
+ if (isSafe) {
474
603
  if (existing) {
475
604
  ctx.state[CSRF_STATE_TOKEN] = existing;
476
605
  }
@@ -491,7 +620,7 @@ export function csrf(opts = {}) {
491
620
  return undefined;
492
621
  },
493
622
  onSend(res, ctx) {
494
- if (!ctx)
623
+ if (!ctx || !wantsDoubleSubmit)
495
624
  return undefined;
496
625
  const issued = ctx.state[CSRF_STATE_ISSUED];
497
626
  if (!issued)
@@ -501,5 +630,105 @@ export function csrf(opts = {}) {
501
630
  },
502
631
  };
503
632
  }
633
+ const BASIC_AUTH_TOKEN_RE = /^Basic\s+([A-Za-z0-9+/=]+)$/i;
634
+ function decodeBasic(token) {
635
+ let binary;
636
+ try {
637
+ binary = atob(token);
638
+ }
639
+ catch {
640
+ return null;
641
+ }
642
+ const bytes = new Uint8Array(binary.length);
643
+ for (let index = 0; index < binary.length; index++)
644
+ bytes[index] = binary.charCodeAt(index);
645
+ let raw;
646
+ try {
647
+ raw = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
648
+ }
649
+ catch {
650
+ return null;
651
+ }
652
+ // Reject embedded NUL: never legal in usernames/passwords.
653
+ if (raw.indexOf("\0") !== -1)
654
+ return null;
655
+ const separatorIndex = raw.indexOf(":");
656
+ if (separatorIndex < 0)
657
+ return null;
658
+ return { user: raw.slice(0, separatorIndex), pass: raw.slice(separatorIndex + 1) };
659
+ }
660
+ function basicAuthChallenge(realm) {
661
+ return new Response(JSON.stringify({
662
+ type: "https://daloyjs.dev/errors/unauthorized",
663
+ title: "Unauthorized",
664
+ status: 401,
665
+ }), {
666
+ status: 401,
667
+ headers: {
668
+ "content-type": "application/problem+json",
669
+ "www-authenticate": `Basic realm="${realm}", charset="UTF-8"`,
670
+ },
671
+ });
672
+ }
673
+ /**
674
+ * HTTP Basic Authentication middleware (RFC 7617).
675
+ *
676
+ * The `verify` callback is the integration point with whatever credential
677
+ * store you use. **It must use a constant-time password comparison** —
678
+ * pair it with {@link timingSafeEqual} or a password-hash library that
679
+ * provides timing-safe verification. Unknown usernames should be
680
+ * indistinguishable from wrong passwords (perform the hash either way).
681
+ *
682
+ * @example
683
+ * ```ts
684
+ * import { basicAuth, timingSafeEqual } from "@daloyjs/core";
685
+ *
686
+ * app.use(basicAuth({
687
+ * realm: "books-api",
688
+ * verify: (user, pass) => {
689
+ * const okUser = timingSafeEqual(user, "admin");
690
+ * const okPass = timingSafeEqual(pass, process.env.ADMIN_PASSWORD ?? "");
691
+ * return okUser && okPass;
692
+ * },
693
+ * }));
694
+ * ```
695
+ *
696
+ * @param opts - Credential verifier, realm, and max credential size.
697
+ * @returns A {@link Hooks} bundle ready for `app.use(...)`.
698
+ * @since 0.12.0
699
+ */
700
+ export function basicAuth(opts) {
701
+ const options = opts;
702
+ if (!options || typeof options.verify !== "function") {
703
+ throw new Error("basicAuth(): verify must be a function.");
704
+ }
705
+ const realm = options.realm ?? "api";
706
+ // Reject CRLF in realm at construction time so it can never reach a
707
+ // response header.
708
+ if (/["\r\n\0]/.test(realm)) {
709
+ throw new Error("basicAuth(): realm must not contain quotes, CR, LF, or NUL bytes.");
710
+ }
711
+ const maxBytes = options.maxCredentialBytes ?? 1024;
712
+ if (!Number.isInteger(maxBytes) || maxBytes < 1) {
713
+ throw new Error("basicAuth(): maxCredentialBytes must be a positive integer.");
714
+ }
715
+ return {
716
+ async beforeHandle(ctx) {
717
+ const header = ctx.request.headers.get("authorization") ?? "";
718
+ const match = BASIC_AUTH_TOKEN_RE.exec(header);
719
+ if (!match || match[1].length > maxBytes)
720
+ return basicAuthChallenge(realm);
721
+ const creds = decodeBasic(match[1]);
722
+ if (!creds)
723
+ return basicAuthChallenge(realm);
724
+ const result = await options.verify(creds.user, creds.pass);
725
+ if (!result)
726
+ return basicAuthChallenge(realm);
727
+ ctx.state.user =
728
+ typeof result === "object" ? result : { username: creds.user };
729
+ return undefined;
730
+ },
731
+ };
732
+ }
504
733
  export { timingSafeEqual };
505
734
  //# sourceMappingURL=middleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,275 @@
1
+ /**
2
+ * WebSocket primitives — runtime-agnostic types, handshake, and RFC 6455
3
+ * frame protocol. Adapter packages (`@daloyjs/core/node`, `@daloyjs/core/bun`)
4
+ * wire these primitives into their respective servers.
5
+ *
6
+ * The public API mirrors the WHATWG `WebSocket` interface where it makes
7
+ * sense for the server side (`readyState`, `send`, `close`, `protocol`,
8
+ * `extensions`, `bufferedAmount`, `binaryType`) and uses Bun-style handler
9
+ * callbacks (`open`, `message`, `close`, `drain`, `error`) so the same
10
+ * handler shape runs on both Node and Bun.
11
+ *
12
+ * ```ts
13
+ * import { App } from "@daloyjs/core";
14
+ * import { serve } from "@daloyjs/core/node";
15
+ *
16
+ * const app = new App();
17
+ *
18
+ * app.ws("/chat/:room", {
19
+ * open(conn, ctx) {
20
+ * conn.data = { user: ctx.query.user ?? "anon", room: ctx.params.room };
21
+ * conn.send(`welcome ${(conn.data as any).user}`);
22
+ * },
23
+ * message(conn, data) {
24
+ * conn.send(typeof data === "string" ? data.toUpperCase() : data);
25
+ * },
26
+ * close(conn, code, reason) {
27
+ * // cleanup
28
+ * },
29
+ * });
30
+ *
31
+ * serve(app, { port: 3000 });
32
+ * ```
33
+ */
34
+ import { type RouteMatch } from "./router.js";
35
+ import type { AppState, PathString, PathParams } from "./types.js";
36
+ /** RFC 6455 magic GUID used to compute `Sec-WebSocket-Accept`. */
37
+ export declare const WS_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
38
+ /** WHATWG `WebSocket.readyState` constants. */
39
+ export declare const WS_READY_STATE: {
40
+ readonly CONNECTING: 0;
41
+ readonly OPEN: 1;
42
+ readonly CLOSING: 2;
43
+ readonly CLOSED: 3;
44
+ };
45
+ /** RFC 6455 opcodes. */
46
+ export declare const WS_OPCODE: {
47
+ readonly CONTINUATION: 0;
48
+ readonly TEXT: 1;
49
+ readonly BINARY: 2;
50
+ readonly CLOSE: 8;
51
+ readonly PING: 9;
52
+ readonly PONG: 10;
53
+ };
54
+ /** Common RFC 6455 / IANA close codes. */
55
+ export declare const WS_CLOSE_CODE: {
56
+ readonly NORMAL_CLOSURE: 1000;
57
+ readonly GOING_AWAY: 1001;
58
+ readonly PROTOCOL_ERROR: 1002;
59
+ readonly UNSUPPORTED_DATA: 1003;
60
+ readonly NO_STATUS_RECEIVED: 1005;
61
+ readonly ABNORMAL_CLOSURE: 1006;
62
+ readonly INVALID_PAYLOAD: 1007;
63
+ readonly POLICY_VIOLATION: 1008;
64
+ readonly MESSAGE_TOO_BIG: 1009;
65
+ readonly INTERNAL_ERROR: 1011;
66
+ };
67
+ /** Maximum payload length permitted on a single control frame (RFC 6455 §5.5). */
68
+ export declare const WS_MAX_CONTROL_PAYLOAD = 125;
69
+ /**
70
+ * Live, server-side view of a WebSocket connection. Implementations are
71
+ * supplied by the runtime adapter; user handlers receive an instance and
72
+ * interact with it via this stable interface.
73
+ */
74
+ export interface WebSocketConnection<TData = unknown> {
75
+ /** WHATWG ready state. */
76
+ readonly readyState: 0 | 1 | 2 | 3;
77
+ /** Negotiated subprotocol (the value of the response `Sec-WebSocket-Protocol`). */
78
+ readonly protocol: string;
79
+ /** Negotiated extensions (the value of the response `Sec-WebSocket-Extensions`). */
80
+ readonly extensions: string;
81
+ /** Bytes queued but not yet flushed to the kernel. */
82
+ readonly bufferedAmount: number;
83
+ /** Hint for how binary `message` payloads are surfaced. */
84
+ binaryType: "arraybuffer" | "nodebuffer";
85
+ /** Free-form user data slot. Persists for the lifetime of the connection. */
86
+ data: TData;
87
+ /** Send a text or binary frame. */
88
+ send(data: string | ArrayBufferLike | ArrayBufferView): void;
89
+ /** Send a CLOSE frame and start the closing handshake. */
90
+ close(code?: number, reason?: string): void;
91
+ /** Send a PING frame (≤ 125 bytes). */
92
+ ping(data?: string | ArrayBufferLike | ArrayBufferView): void;
93
+ /** Send a PONG frame (≤ 125 bytes). */
94
+ pong(data?: string | ArrayBufferLike | ArrayBufferView): void;
95
+ /** Forcefully tear the socket down without a closing handshake. */
96
+ terminate(): void;
97
+ }
98
+ /**
99
+ * Per-upgrade context handed to `beforeUpgrade` and `open`. Mirrors the
100
+ * subset of {@link BaseContext} that makes sense before a request body has
101
+ * been read.
102
+ */
103
+ export interface WebSocketContext<P extends string = string, S = AppState> {
104
+ request: Request;
105
+ params: PathParams<P>;
106
+ query: Record<string, string>;
107
+ headers: Record<string, string>;
108
+ state: S;
109
+ /** Subprotocols offered by the client (parsed from `Sec-WebSocket-Protocol`). */
110
+ protocols: string[];
111
+ }
112
+ /**
113
+ * User-supplied WebSocket lifecycle callbacks.
114
+ *
115
+ * - `beforeUpgrade` may reject the upgrade by returning a `Response`. Returning
116
+ * a string selects that subprotocol. Returning `undefined` accepts the
117
+ * upgrade with no subprotocol.
118
+ * - `open`/`message`/`close`/`error`/`drain` follow Bun's signature so the
119
+ * same handler runs on both Node and Bun.
120
+ */
121
+ export interface WebSocketHandler<P extends string = string, S = AppState, TData = unknown> {
122
+ beforeUpgrade?(request: Request, ctx: WebSocketContext<P, S>): Response | string | undefined | Promise<Response | string | undefined>;
123
+ open?(conn: WebSocketConnection<TData>, ctx: WebSocketContext<P, S>): void | Promise<void>;
124
+ message?(conn: WebSocketConnection<TData>, data: string | Uint8Array | ArrayBuffer, isBinary: boolean): void | Promise<void>;
125
+ close?(conn: WebSocketConnection<TData>, code: number, reason: string): void | Promise<void>;
126
+ error?(conn: WebSocketConnection<TData>, err: unknown): void | Promise<void>;
127
+ drain?(conn: WebSocketConnection<TData>): void | Promise<void>;
128
+ }
129
+ /** Helper for declaring a handler with full type-inference. */
130
+ export declare function defineWebSocket<P extends string, S = AppState, TData = unknown>(handler: WebSocketHandler<P, S, TData>): WebSocketHandler<P, S, TData>;
131
+ export interface WebSocketRouteEntry {
132
+ path: PathString;
133
+ handler: WebSocketHandler<any, any, any>;
134
+ createState: WebSocketStateFactory;
135
+ }
136
+ type WebSocketStateFactory = () => Record<string, unknown>;
137
+ /**
138
+ * Per-app registry of WebSocket routes. Uses the same trie router as HTTP so
139
+ * `:param` and static-route fast paths work identically.
140
+ *
141
+ * Adapters call {@link WebSocketRegistry.find} during the HTTP `upgrade`
142
+ * event (Node) or inside `fetch` (Bun / Workers).
143
+ */
144
+ export declare class WebSocketRegistry {
145
+ private router;
146
+ private _size;
147
+ add(path: PathString, handler: WebSocketHandler<any, any, any>, createState?: WebSocketStateFactory): void;
148
+ find(pathname: string): RouteMatch<WebSocketRouteEntry> | undefined;
149
+ get size(): number;
150
+ }
151
+ /**
152
+ * Compute the `Sec-WebSocket-Accept` response header value for a given
153
+ * `Sec-WebSocket-Key` per RFC 6455 §4.2.2:
154
+ *
155
+ * `base64(SHA1(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"))`
156
+ */
157
+ export declare function computeAcceptKey(key: string): Promise<string>;
158
+ /**
159
+ * Parse the offered subprotocols from a `Sec-WebSocket-Protocol` header.
160
+ * Returns trimmed, non-empty tokens in client preference order.
161
+ */
162
+ export declare function parseSubprotocols(header: string | null | undefined): string[];
163
+ /**
164
+ * Validate a server-selected subprotocol before it is written to the 101
165
+ * response. RFC 6455 requires the value to be one of the client-offered
166
+ * tokens; enforcing it also prevents accidental response-header injection.
167
+ */
168
+ export declare function validateSelectedSubprotocol(protocol: string, offered: readonly string[]): string;
169
+ /**
170
+ * Result of attempting a handshake against an incoming HTTP request.
171
+ * Adapters either send the 101 response and return `{ ok: true }` or send
172
+ * the error response described by {@link HandshakeFailure} and abort.
173
+ */
174
+ export type HandshakeResult = {
175
+ ok: true;
176
+ acceptKey: string;
177
+ protocols: string[];
178
+ } | {
179
+ ok: false;
180
+ status: number;
181
+ reason: string;
182
+ };
183
+ /**
184
+ * Validate the upgrade request headers and compute the accept key when
185
+ * valid. This helper does **not** touch the wire — it only decides whether
186
+ * the handshake should succeed and what the response key should be.
187
+ */
188
+ export declare function validateUpgrade(headers: {
189
+ get(name: string): string | null;
190
+ }): Promise<HandshakeResult>;
191
+ export interface ParsedFrame {
192
+ fin: boolean;
193
+ opcode: number;
194
+ payload: Uint8Array;
195
+ /** Number of bytes consumed from the input buffer (header + payload). */
196
+ consumed: number;
197
+ }
198
+ /** Returned from `parseFrame` when the buffer doesn't yet hold a full frame. */
199
+ export declare const FRAME_INCOMPLETE: unique symbol;
200
+ /**
201
+ * Parse a single frame from `buf` starting at offset 0. Returns
202
+ * {@link FRAME_INCOMPLETE} when the buffer is too short for a complete
203
+ * frame; throws {@link WebSocketProtocolError} for RFC 6455 violations.
204
+ *
205
+ * The parser unmasks payloads in-place when needed. The returned `payload`
206
+ * is a subarray view over `buf`; copy it if you intend to retain it past
207
+ * the next call.
208
+ */
209
+ export declare function parseFrame(buf: Uint8Array, opts?: {
210
+ requireMask?: boolean;
211
+ }): ParsedFrame | typeof FRAME_INCOMPLETE;
212
+ /**
213
+ * Encode a single frame. By default the frame is emitted unmasked (server
214
+ * → client). Pass `mask: true` to generate a client-style masked frame (used
215
+ * mainly for testing).
216
+ */
217
+ export declare function encodeFrame(opts: {
218
+ fin?: boolean;
219
+ opcode: number;
220
+ payload?: Uint8Array;
221
+ mask?: boolean;
222
+ }): Uint8Array;
223
+ /** Encode a CLOSE frame payload (`uint16 code` + optional UTF-8 reason). */
224
+ export declare function encodeClosePayload(code: number, reason?: string): Uint8Array;
225
+ /** Decode a CLOSE frame payload. Returns `{ code: 1005, reason: "" }` when empty. */
226
+ export declare function decodeClosePayload(payload: Uint8Array): {
227
+ code: number;
228
+ reason: string;
229
+ };
230
+ /** Thrown on RFC 6455 violations. Adapters map these to a CLOSE(1002) frame. */
231
+ export declare class WebSocketProtocolError extends Error {
232
+ constructor(message: string);
233
+ }
234
+ /**
235
+ * Incremental parser that buffers bytes from a socket and emits whole
236
+ * frames. Handles fragmentation, interleaved control frames, and UTF-8
237
+ * validation of text messages.
238
+ */
239
+ export interface MessageEvent {
240
+ /** Decoded string for text messages, or the raw byte payload for binary. */
241
+ data: string | Uint8Array;
242
+ /** True when the message was assembled from binary frames. */
243
+ isBinary: boolean;
244
+ }
245
+ export interface FrameSinkEvents {
246
+ onMessage(ev: MessageEvent): void;
247
+ onPing(payload: Uint8Array): void;
248
+ onPong(payload: Uint8Array): void;
249
+ onClose(code: number, reason: string): void;
250
+ onProtocolError(err: WebSocketProtocolError): void;
251
+ }
252
+ /**
253
+ * Stream-oriented assembler. Push chunks via {@link FrameSink.push}; callbacks
254
+ * fire as whole messages and control frames become available. Designed to be
255
+ * driven by an adapter's socket `data` event.
256
+ */
257
+ export declare class FrameSink {
258
+ private readonly opts;
259
+ private buffer;
260
+ private fragments;
261
+ private fragmentOpcode;
262
+ private closed;
263
+ constructor(opts: FrameSinkEvents & {
264
+ requireMask?: boolean;
265
+ });
266
+ push(chunk: Uint8Array): void;
267
+ private handle;
268
+ }
269
+ /** Coerce arbitrary `send()` payloads to a `Uint8Array` + opcode pair. */
270
+ export declare function encodeSendPayload(data: string | ArrayBufferLike | ArrayBufferView): {
271
+ opcode: number;
272
+ payload: Uint8Array;
273
+ };
274
+ export {};
275
+ //# sourceMappingURL=websocket.d.ts.map