@daloyjs/core 0.17.0 → 0.29.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.
Files changed (98) hide show
  1. package/README.md +3 -3
  2. package/dist/adapters/bun.d.ts.map +1 -1
  3. package/dist/adapters/bun.js +38 -7
  4. package/dist/adapters/bun.js.map +1 -1
  5. package/dist/adapters/node.d.ts.map +1 -1
  6. package/dist/adapters/node.js +29 -7
  7. package/dist/adapters/node.js.map +1 -1
  8. package/dist/app.d.ts +322 -3
  9. package/dist/app.d.ts.map +1 -1
  10. package/dist/app.js +715 -29
  11. package/dist/app.js.map +1 -1
  12. package/dist/cli.d.ts +4 -0
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +218 -1
  15. package/dist/cli.js.map +1 -1
  16. package/dist/combine.d.ts +97 -0
  17. package/dist/combine.d.ts.map +1 -0
  18. package/dist/combine.js +247 -0
  19. package/dist/combine.js.map +1 -0
  20. package/dist/compression.d.ts +127 -0
  21. package/dist/compression.d.ts.map +1 -0
  22. package/dist/compression.js +368 -0
  23. package/dist/compression.js.map +1 -0
  24. package/dist/config.d.ts +97 -0
  25. package/dist/config.d.ts.map +1 -0
  26. package/dist/config.js +132 -0
  27. package/dist/config.js.map +1 -0
  28. package/dist/conn-info.d.ts +121 -0
  29. package/dist/conn-info.d.ts.map +1 -0
  30. package/dist/conn-info.js +145 -0
  31. package/dist/conn-info.js.map +1 -0
  32. package/dist/cookie.d.ts +112 -0
  33. package/dist/cookie.d.ts.map +1 -0
  34. package/dist/cookie.js +185 -0
  35. package/dist/cookie.js.map +1 -0
  36. package/dist/dependency.d.ts +47 -0
  37. package/dist/dependency.d.ts.map +1 -0
  38. package/dist/dependency.js +68 -0
  39. package/dist/dependency.js.map +1 -0
  40. package/dist/etag.d.ts +48 -0
  41. package/dist/etag.d.ts.map +1 -0
  42. package/dist/etag.js +117 -0
  43. package/dist/etag.js.map +1 -0
  44. package/dist/index.d.ts +40 -11
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +19 -4
  47. package/dist/index.js.map +1 -1
  48. package/dist/ip-restriction.d.ts +75 -0
  49. package/dist/ip-restriction.d.ts.map +1 -0
  50. package/dist/ip-restriction.js +203 -0
  51. package/dist/ip-restriction.js.map +1 -0
  52. package/dist/jwk.d.ts +82 -0
  53. package/dist/jwk.d.ts.map +1 -0
  54. package/dist/jwk.js +269 -0
  55. package/dist/jwk.js.map +1 -0
  56. package/dist/jwt.d.ts +103 -0
  57. package/dist/jwt.d.ts.map +1 -0
  58. package/dist/jwt.js +437 -0
  59. package/dist/jwt.js.map +1 -0
  60. package/dist/load-shedding.d.ts +73 -0
  61. package/dist/load-shedding.d.ts.map +1 -0
  62. package/dist/load-shedding.js +171 -0
  63. package/dist/load-shedding.js.map +1 -0
  64. package/dist/middleware.d.ts +181 -2
  65. package/dist/middleware.d.ts.map +1 -1
  66. package/dist/middleware.js +367 -77
  67. package/dist/middleware.js.map +1 -1
  68. package/dist/multipart.d.ts +17 -0
  69. package/dist/multipart.d.ts.map +1 -1
  70. package/dist/multipart.js +117 -1
  71. package/dist/multipart.js.map +1 -1
  72. package/dist/openapi.d.ts +8 -0
  73. package/dist/openapi.d.ts.map +1 -1
  74. package/dist/openapi.js +18 -1
  75. package/dist/openapi.js.map +1 -1
  76. package/dist/security-schemes.d.ts +21 -5
  77. package/dist/security-schemes.d.ts.map +1 -1
  78. package/dist/security-schemes.js +32 -5
  79. package/dist/security-schemes.js.map +1 -1
  80. package/dist/session.d.ts +23 -1
  81. package/dist/session.d.ts.map +1 -1
  82. package/dist/session.js +106 -86
  83. package/dist/session.js.map +1 -1
  84. package/dist/subdomains.d.ts +97 -0
  85. package/dist/subdomains.d.ts.map +1 -0
  86. package/dist/subdomains.js +157 -0
  87. package/dist/subdomains.js.map +1 -0
  88. package/dist/time-claims.d.ts +72 -0
  89. package/dist/time-claims.d.ts.map +1 -0
  90. package/dist/time-claims.js +88 -0
  91. package/dist/time-claims.js.map +1 -0
  92. package/dist/types.d.ts +50 -0
  93. package/dist/types.d.ts.map +1 -1
  94. package/dist/websocket.d.ts +51 -34
  95. package/dist/websocket.d.ts.map +1 -1
  96. package/dist/websocket.js +162 -2
  97. package/dist/websocket.js.map +1 -1
  98. package/package.json +31 -3
@@ -0,0 +1,157 @@
1
+ /**
2
+ * PSL-aware `subdomains()` helper (Wave 6 item 6).
3
+ *
4
+ * Splits a hostname into its registrable base + the subdomain labels above
5
+ * it, using a bundled Public Suffix List snapshot. The helper refuses to
6
+ * read a stale PSL snapshot (`> 90 days` since `PSL_SNAPSHOT_DATE`) in
7
+ * production so adjacent-tenant infrastructure names like `*.s3.amazonaws.com`,
8
+ * `*.github.io`, `*.vercel.app`, `*.workers.dev`, and every
9
+ * preview-deploy environment are split correctly instead of being treated
10
+ * as siblings under the same registrable domain.
11
+ *
12
+ * @since 0.24.0
13
+ */
14
+ /**
15
+ * ISO date the bundled PSL snapshot was generated. Refresh this value when
16
+ * you re-snapshot {@link PSL_PUBLIC_SUFFIXES} from the upstream Public
17
+ * Suffix List at https://publicsuffix.org/list/public_suffix_list.dat
18
+ *
19
+ * @since 0.24.0
20
+ */
21
+ export const PSL_SNAPSHOT_DATE = "2026-05-20";
22
+ /**
23
+ * Bundled subset of the Public Suffix List. Hand-picked entries covering
24
+ * the common cases Daloy users hit (cloud preview deployments, shared
25
+ * hosting platforms, country-code second-level domains). Augment with
26
+ * `subdomains({ extraSuffixes: [...] })` for project-specific TLDs.
27
+ *
28
+ * @since 0.24.0
29
+ */
30
+ export const PSL_PUBLIC_SUFFIXES = [
31
+ // Generic TLDs
32
+ "com",
33
+ "net",
34
+ "org",
35
+ "io",
36
+ "dev",
37
+ "app",
38
+ "ai",
39
+ "co",
40
+ // Country-code TLDs that frequently host commerce subdomains.
41
+ "uk",
42
+ "co.uk",
43
+ "ac.uk",
44
+ "gov.uk",
45
+ "jp",
46
+ "co.jp",
47
+ "ne.jp",
48
+ "ac.jp",
49
+ "au",
50
+ "com.au",
51
+ "net.au",
52
+ "ph",
53
+ "com.ph",
54
+ "no",
55
+ "de",
56
+ "fr",
57
+ "ca",
58
+ // PaaS / preview-deploy registrable suffixes — every entry below is a
59
+ // "subdomain isolates a tenant" surface where treating the suffix as a
60
+ // single registrable domain would name an adjacent tenant.
61
+ "vercel.app",
62
+ "netlify.app",
63
+ "netlify.com",
64
+ "workers.dev",
65
+ "pages.dev",
66
+ "fly.dev",
67
+ "github.io",
68
+ "githubusercontent.com",
69
+ "gitlab.io",
70
+ "herokuapp.com",
71
+ "azurewebsites.net",
72
+ "s3.amazonaws.com",
73
+ "cloudfront.net",
74
+ "appspot.com",
75
+ "firebaseapp.com",
76
+ "web.app",
77
+ "supabase.co",
78
+ "render.com",
79
+ "onrender.com",
80
+ ];
81
+ export const MAX_SNAPSHOT_AGE_DAYS = 90;
82
+ /**
83
+ * Split a hostname into registrable base + subdomain labels using the
84
+ * bundled PSL snapshot. Refuses to read a stale snapshot in production.
85
+ *
86
+ * @example
87
+ * ```ts
88
+ * subdomains("api.tenant.example.co.uk")
89
+ * // => { baseDomain: "example.co.uk", subdomain: "api.tenant", labels: ["api", "tenant"] }
90
+ *
91
+ * subdomains("foo.bar.s3.amazonaws.com")
92
+ * // => { baseDomain: "bar.s3.amazonaws.com", subdomain: "foo", labels: ["foo"] }
93
+ * ```
94
+ *
95
+ * @since 0.24.0
96
+ */
97
+ export function subdomains(hostname, opts = {}) {
98
+ if (typeof hostname !== "string" || hostname.length === 0) {
99
+ throw new Error("subdomains(): hostname must be a non-empty string.");
100
+ }
101
+ // Strip a trailing dot (FQDN form) and lowercase for the PSL match.
102
+ const host = hostname.replace(/\.$/, "").toLowerCase();
103
+ // Production-mode staleness check.
104
+ if (opts.production) {
105
+ const snap = opts._snapshotDate ?? PSL_SNAPSHOT_DATE;
106
+ const now = opts._now ?? new Date();
107
+ const snapMs = Date.parse(snap);
108
+ if (Number.isNaN(snapMs)) {
109
+ throw new Error(`subdomains(): invalid snapshot date ${JSON.stringify(snap)}.`);
110
+ }
111
+ const ageDays = (now.getTime() - snapMs) / 86_400_000;
112
+ if (ageDays > MAX_SNAPSHOT_AGE_DAYS) {
113
+ throw new Error(`subdomains(): bundled Public Suffix List snapshot is ${Math.round(ageDays)} days old ` +
114
+ `(threshold ${MAX_SNAPSHOT_AGE_DAYS} days). Refresh PSL_PUBLIC_SUFFIXES or upgrade @daloyjs/core.`);
115
+ }
116
+ }
117
+ if (opts.baseDomain) {
118
+ const base = opts.baseDomain.toLowerCase();
119
+ if (host !== base && !host.endsWith(`.${base}`)) {
120
+ throw new Error(`subdomains(): host ${JSON.stringify(hostname)} is not under declared baseDomain ${JSON.stringify(opts.baseDomain)}.`);
121
+ }
122
+ return resultFor(host, base);
123
+ }
124
+ const suffixes = new Set([
125
+ ...PSL_PUBLIC_SUFFIXES,
126
+ ...(opts.extraSuffixes ?? []),
127
+ ]);
128
+ const labels = host.split(".");
129
+ // Walk from the longest suffix candidate down to the shortest so the
130
+ // longest match wins (`s3.amazonaws.com` beats `com`).
131
+ let bestSuffixLabels = 0;
132
+ for (let i = 0; i < labels.length; i++) {
133
+ const candidate = labels.slice(i).join(".");
134
+ if (suffixes.has(candidate)) {
135
+ const suffixLabelCount = labels.length - i;
136
+ if (suffixLabelCount > bestSuffixLabels)
137
+ bestSuffixLabels = suffixLabelCount;
138
+ }
139
+ }
140
+ // No PSL match — treat the rightmost label as the public suffix
141
+ // (single-label TLD fallback).
142
+ if (bestSuffixLabels === 0)
143
+ bestSuffixLabels = 1;
144
+ // Registrable base = public suffix + one label to the left.
145
+ const baseLabelCount = Math.min(labels.length, bestSuffixLabels + 1);
146
+ const baseDomain = labels.slice(labels.length - baseLabelCount).join(".");
147
+ return resultFor(host, baseDomain);
148
+ }
149
+ function resultFor(host, baseDomain) {
150
+ if (host === baseDomain) {
151
+ return { baseDomain, subdomain: "", labels: [] };
152
+ }
153
+ const prefix = host.slice(0, host.length - baseDomain.length - 1);
154
+ const labels = prefix.split(".");
155
+ return { baseDomain, subdomain: prefix, labels };
156
+ }
157
+ //# sourceMappingURL=subdomains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subdomains.js","sourceRoot":"","sources":["../src/subdomains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Single source of truth for time-based JWT-style claim validation (Wave 8
3
+ * remaining bake-ins).
4
+ *
5
+ * Every first-party verifier — `createJwtVerifier()`, `jwk()`, and any future
6
+ * session-token verifier — MUST route through {@link assertTemporalClaims}
7
+ * so the framework has exactly one implementation of:
8
+ *
9
+ * - the `exp` (expiration) check;
10
+ * - the `nbf` (not-before) check;
11
+ * - the `iat` (issued-at) future-clock-skew refusal;
12
+ * - the clock-skew tolerance shape (a non-negative number of seconds,
13
+ * applied symmetrically to all three claims).
14
+ *
15
+ * Centralizing the check means a developer that ships a custom JWT-shaped
16
+ * token verifier inside their app reaches for the same helper instead of
17
+ * re-implementing the comparison (and getting the inequality sign wrong on
18
+ * `iat`).
19
+ *
20
+ * @since 0.27.0
21
+ */
22
+ /**
23
+ * Error thrown by {@link assertTemporalClaims}. The `code` is machine
24
+ * readable so callers can map specific failures to RFC-6750-style
25
+ * `WWW-Authenticate` challenges without parsing the message.
26
+ *
27
+ * @since 0.27.0
28
+ */
29
+ export declare class TemporalClaimError extends Error {
30
+ readonly code: TemporalClaimErrorCode;
31
+ constructor(code: TemporalClaimErrorCode, message: string);
32
+ }
33
+ /** @since 0.27.0 */
34
+ export type TemporalClaimErrorCode = "invalid_exp" | "token_expired" | "invalid_nbf" | "token_not_yet_valid" | "invalid_iat" | "iat_in_future" | "invalid_clock_skew";
35
+ /**
36
+ * Subset of a JWT-style payload that participates in temporal validation.
37
+ * All three claims are optional — the verifier only enforces what is
38
+ * present.
39
+ *
40
+ * @since 0.27.0
41
+ */
42
+ export interface TemporalClaims {
43
+ readonly exp?: unknown;
44
+ readonly nbf?: unknown;
45
+ readonly iat?: unknown;
46
+ }
47
+ /** @since 0.27.0 */
48
+ export interface AssertTemporalClaimsOptions {
49
+ /** Current unix-seconds timestamp. Injectable for tests. */
50
+ readonly now: number;
51
+ /**
52
+ * Symmetric clock-skew tolerance applied to `exp` / `nbf` / `iat`. Default
53
+ * `0` — the verifier refuses tokens with no skew tolerance.
54
+ */
55
+ readonly clockSkewSeconds?: number;
56
+ }
57
+ /**
58
+ * Validate the temporal claims (`exp`, `nbf`, `iat`) on a JWT-style
59
+ * payload. Throws {@link TemporalClaimError} on the first violation;
60
+ * returns normally when every present claim passes.
61
+ *
62
+ * Inequalities follow RFC 7519:
63
+ *
64
+ * - `exp` rejected when `now > exp + skew` (the token has expired);
65
+ * - `nbf` rejected when `now + skew < nbf` (not yet valid);
66
+ * - `iat` rejected when `iat - skew > now` (issued in the future — the
67
+ * issuer's clock is wrong, or someone pre-issued a token).
68
+ *
69
+ * @since 0.27.0
70
+ */
71
+ export declare function assertTemporalClaims(claims: TemporalClaims, opts: AssertTemporalClaimsOptions): void;
72
+ //# sourceMappingURL=time-claims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-claims.d.ts","sourceRoot":"","sources":["../src/time-claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;gBAC1B,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM;CAK1D;AAED,oBAAoB;AACpB,MAAM,MAAM,sBAAsB,GAC9B,aAAa,GACb,eAAe,GACf,aAAa,GACb,qBAAqB,GACrB,aAAa,GACb,eAAe,GACf,oBAAoB,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,oBAAoB;AACpB,MAAM,WAAW,2BAA2B;IAC1C,4DAA4D;IAC5D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,2BAA2B,GAChC,IAAI,CAuCN"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Single source of truth for time-based JWT-style claim validation (Wave 8
3
+ * remaining bake-ins).
4
+ *
5
+ * Every first-party verifier — `createJwtVerifier()`, `jwk()`, and any future
6
+ * session-token verifier — MUST route through {@link assertTemporalClaims}
7
+ * so the framework has exactly one implementation of:
8
+ *
9
+ * - the `exp` (expiration) check;
10
+ * - the `nbf` (not-before) check;
11
+ * - the `iat` (issued-at) future-clock-skew refusal;
12
+ * - the clock-skew tolerance shape (a non-negative number of seconds,
13
+ * applied symmetrically to all three claims).
14
+ *
15
+ * Centralizing the check means a developer that ships a custom JWT-shaped
16
+ * token verifier inside their app reaches for the same helper instead of
17
+ * re-implementing the comparison (and getting the inequality sign wrong on
18
+ * `iat`).
19
+ *
20
+ * @since 0.27.0
21
+ */
22
+ /**
23
+ * Error thrown by {@link assertTemporalClaims}. The `code` is machine
24
+ * readable so callers can map specific failures to RFC-6750-style
25
+ * `WWW-Authenticate` challenges without parsing the message.
26
+ *
27
+ * @since 0.27.0
28
+ */
29
+ export class TemporalClaimError extends Error {
30
+ code;
31
+ constructor(code, message) {
32
+ super(message);
33
+ this.name = "TemporalClaimError";
34
+ this.code = code;
35
+ }
36
+ }
37
+ function isFiniteNumber(v) {
38
+ return typeof v === "number" && Number.isFinite(v);
39
+ }
40
+ /**
41
+ * Validate the temporal claims (`exp`, `nbf`, `iat`) on a JWT-style
42
+ * payload. Throws {@link TemporalClaimError} on the first violation;
43
+ * returns normally when every present claim passes.
44
+ *
45
+ * Inequalities follow RFC 7519:
46
+ *
47
+ * - `exp` rejected when `now > exp + skew` (the token has expired);
48
+ * - `nbf` rejected when `now + skew < nbf` (not yet valid);
49
+ * - `iat` rejected when `iat - skew > now` (issued in the future — the
50
+ * issuer's clock is wrong, or someone pre-issued a token).
51
+ *
52
+ * @since 0.27.0
53
+ */
54
+ export function assertTemporalClaims(claims, opts) {
55
+ const skew = opts.clockSkewSeconds ?? 0;
56
+ if (!isFiniteNumber(skew) || skew < 0) {
57
+ throw new TemporalClaimError("invalid_clock_skew", "clockSkewSeconds must be a non-negative finite number.");
58
+ }
59
+ const now = opts.now;
60
+ if (!isFiniteNumber(now)) {
61
+ throw new TemporalClaimError("invalid_clock_skew", "now must be a finite number of unix seconds.");
62
+ }
63
+ if (claims.exp !== undefined) {
64
+ if (!isFiniteNumber(claims.exp)) {
65
+ throw new TemporalClaimError("invalid_exp", "payload.exp is not a finite number.");
66
+ }
67
+ if (now > claims.exp + skew) {
68
+ throw new TemporalClaimError("token_expired", "token has expired (exp).");
69
+ }
70
+ }
71
+ if (claims.nbf !== undefined) {
72
+ if (!isFiniteNumber(claims.nbf)) {
73
+ throw new TemporalClaimError("invalid_nbf", "payload.nbf is not a finite number.");
74
+ }
75
+ if (now + skew < claims.nbf) {
76
+ throw new TemporalClaimError("token_not_yet_valid", "token is not yet valid (nbf).");
77
+ }
78
+ }
79
+ if (claims.iat !== undefined) {
80
+ if (!isFiniteNumber(claims.iat)) {
81
+ throw new TemporalClaimError("invalid_iat", "payload.iat is not a finite number.");
82
+ }
83
+ if (claims.iat - skew > now) {
84
+ throw new TemporalClaimError("iat_in_future", "payload.iat is in the future.");
85
+ }
86
+ }
87
+ }
88
+ //# sourceMappingURL=time-claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-claims.js","sourceRoot":"","sources":["../src/time-claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;GAMG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAyB;IACtC,YAAY,IAA4B,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAoCD,SAAS,cAAc,CAAC,CAAU;IAChC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAsB,EACtB,IAAiC;IAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,kBAAkB,CAC1B,oBAAoB,EACpB,wDAAwD,CACzD,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,kBAAkB,CAC1B,oBAAoB,EACpB,8CAA8C,CAC/C,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,kBAAkB,CAAC,aAAa,EAAE,qCAAqC,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,kBAAkB,CAAC,eAAe,EAAE,0BAA0B,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,kBAAkB,CAAC,aAAa,EAAE,qCAAqC,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,kBAAkB,CAAC,qBAAqB,EAAE,+BAA+B,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,kBAAkB,CAAC,aAAa,EAAE,qCAAqC,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,kBAAkB,CAAC,eAAe,EAAE,+BAA+B,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;AACH,CAAC"}
package/dist/types.d.ts CHANGED
@@ -169,6 +169,16 @@ export interface AuthSpec {
169
169
  scheme: string;
170
170
  /** Optional scopes/permissions, surfaces in OpenAPI security requirement */
171
171
  scopes?: string[];
172
+ /**
173
+ * Route-level payload/body-auth participation. Defaults to `true` when
174
+ * omitted. Setting `false` opts the route out of payload authentication;
175
+ * Daloy refuses that opt-out at route registration time when the referenced
176
+ * security scheme declares `requirePayloadAuth: true` (or the OpenAPI-safe
177
+ * `x-daloy-require-payload-auth: true` extension).
178
+ *
179
+ * @since 0.23.0
180
+ */
181
+ payload?: boolean;
172
182
  }
173
183
  /**
174
184
  * **Module-augmentation hook** for typing plugin-provided state.
@@ -193,6 +203,22 @@ export interface AuthSpec {
193
203
  */
194
204
  export interface AppState {
195
205
  }
206
+ /**
207
+ * Scheme-aware auth contract (Wave 6 item 13). Every shipped first-party
208
+ * auth helper writes through to `ctx.state.auth` with a discriminated
209
+ * `scheme` tag so audit logs, revocation hooks, and per-scheme
210
+ * `verify(credentials, ctx)` callbacks know which scheme issued the
211
+ * credential. Prevents the "session-cookie revocation list applied to a
212
+ * bearer-token request" class of cross-scheme confusion.
213
+ *
214
+ * @since 0.24.0
215
+ */
216
+ export type AuthScheme = "bearer" | "basic" | "jwt" | "jwk" | "webhook" | "session" | "apiKey";
217
+ /** @since 0.24.0 */
218
+ export interface AuthContext<TCredentials = unknown> {
219
+ readonly scheme: AuthScheme;
220
+ readonly credentials: TCredentials;
221
+ }
196
222
  /**
197
223
  * The context object passed to every route handler and hook.
198
224
  *
@@ -319,6 +345,30 @@ export interface RouteDefinition<P extends PathString = PathString, M extends Ht
319
345
  * @since 0.16.0
320
346
  */
321
347
  accepts?: string[];
348
+ /**
349
+ * Mark a route as internal. Requests reaching the route via the public
350
+ * `app.fetch(...)` entry point (i.e. any deployed adapter) receive a
351
+ * `404 Not Found` so existence cannot be probed, while in-process callers
352
+ * that go through `app.inject(...)` execute the handler normally. Pair
353
+ * with admin/cron endpoints, debugging shims, or platform-specific
354
+ * health probes that should never be reachable from the network.
355
+ *
356
+ * @example
357
+ * ```ts
358
+ * app.route({
359
+ * method: "POST",
360
+ * path: "/__admin/reindex",
361
+ * internal: true,
362
+ * responses: { 204: { description: "Started" } },
363
+ * handler: () => ({ status: 204 }),
364
+ * });
365
+ *
366
+ * await app.inject(new Request("http://app/__admin/reindex", { method: "POST" }));
367
+ * ```
368
+ *
369
+ * @since 0.19.0
370
+ */
371
+ internal?: boolean;
322
372
  /**
323
373
  * Optional OpenAPI 3.1 callbacks (out-of-band requests this operation may
324
374
  * trigger on the consumer). Each callback name maps to one or more runtime
@@ -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":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,MAAM,GACN,SAAS,CAAC;AAEd;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,MAAM,EAAE,CAAC;AAEtC;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,IACnC,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,GAC9C,KAAK,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,GAC5B,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,KAAK,EAAE,GACpC,KAAK,GACL,KAAK,CAAC;AAEZ;;;;;GAKG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI;KACxC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM;CAC3B,CAAC;AAIF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,gBAAgB,GAChD,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,GAC/B,SAAS,CAAC;AAEd;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,GAAG,SAAS,EAAE,CAAC,SAAS,MAAM,IAAI;IACjF,MAAM,EAAE,CAAC,SAAS;QAAE,MAAM,EAAE,gBAAgB,CAAA;KAAE,GAC1C,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GACzC,UAAU,CAAC,CAAC,CAAC,CAAC;IAClB,KAAK,EAAE,CAAC,SAAS;QAAE,KAAK,EAAE,gBAAgB,CAAA;KAAE,GACxC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IAClD,OAAO,EAAE,CAAC,SAAS;QAAE,OAAO,EAAE,gBAAgB,CAAA;KAAE,GAC5C,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACvC,IAAI,EAAE,CAAC,SAAS;QAAE,IAAI,EAAE,gBAAgB,CAAA;KAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC;CAC5E,CAAC;AAIF;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,GAAG;KACxB,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE,YAAY;CAClC,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AAExE;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,YAAY,IAAI;KACjD,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;QAClB,MAAM,EAAE,CAAC,CAAC;QACV,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAAE,IAAI,EAAE,gBAAgB,CAAA;SAAE,GACzC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,GACzE,OAAO,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC;CACF,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAIf;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,QAAQ;IACvB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,QAAQ;CAAG;AAE5B;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,OAAO,GACP,KAAK,GACL,KAAK,GACL,SAAS,GACT,SAAS,GACT,QAAQ,CAAC;AAEb,oBAAoB;AACpB,MAAM,WAAW,WAAW,CAAC,YAAY,GAAG,OAAO;IACjD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;CACpC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,cAAc,GAAG,SAAS;IACjF,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrC,KAAK,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACjC,sEAAsE;IACtE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,sEAAsE;IACtE,GAAG,EAAE;QACH,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,KAAK;IACpB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAC1F,WAAW,CAAC,EAAE,CACZ,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAC1B,MAAM,EAAE,OAAO,KACZ,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,KAAK,IAAI,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAC/G;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CACP,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,KACnC,IAAI,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAChD,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,eAAe,CAC9B,CAAC,SAAS,UAAU,GAAG,UAAU,EACjC,CAAC,SAAS,UAAU,GAAG,UAAU,EACjC,GAAG,SAAS,cAAc,GAAG,SAAS,GAAG,SAAS,EAClD,GAAG,SAAS,YAAY,GAAG,YAAY;IAEvC,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,EAAE,CAAC,CAAC;IAGR,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,SAAS,EAAE,GAAG,CAAC;IAEf,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC;IAExB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,OAAO,EAAE,CACP,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,KACrB,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;CACvD;AAID;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,YAAY,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CACrC,MAAM,EACN,iBAAiB,GAAG,iBAAiB,EAAE,CACxC,CAAC;AAEF,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC;CACpC;AAID;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CACH;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC"}
@@ -1,37 +1,6 @@
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
- */
1
+ import { type RateLimitOptions } from "./middleware.js";
34
2
  import { type RouteMatch } from "./router.js";
3
+ import type { StandardSchemaV1 } from "./schema.js";
35
4
  import type { AppState, PathString, PathParams } from "./types.js";
36
5
  /** RFC 6455 magic GUID used to compute `Sec-WebSocket-Accept`. */
37
6
  export declare const WS_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
@@ -66,6 +35,9 @@ export declare const WS_CLOSE_CODE: {
66
35
  };
67
36
  /** Maximum payload length permitted on a single control frame (RFC 6455 §5.5). */
68
37
  export declare const WS_MAX_CONTROL_PAYLOAD = 125;
38
+ export declare const DEFAULT_WS_BACKPRESSURE_LIMIT: number;
39
+ export declare const DEFAULT_WS_MAX_PAYLOAD_LENGTH: number;
40
+ export declare const DEFAULT_WS_IDLE_TIMEOUT_SECONDS = 120;
69
41
  /**
70
42
  * Live, server-side view of a WebSocket connection. Implementations are
71
43
  * supplied by the runtime adapter; user handlers receive an instance and
@@ -119,6 +91,20 @@ export interface WebSocketContext<P extends string = string, S = AppState> {
119
91
  * same handler runs on both Node and Bun.
120
92
  */
121
93
  export interface WebSocketHandler<P extends string = string, S = AppState, TData = unknown> {
94
+ /** Optional schema used for payload-size consistency checks. */
95
+ request?: {
96
+ body?: StandardSchemaV1;
97
+ };
98
+ /** Close the connection when queued outbound bytes exceed backpressureLimit. Default: true. */
99
+ closeOnBackpressureLimit?: boolean;
100
+ /** Maximum queued outbound bytes before backpressure handling triggers. Default: 1 MiB. */
101
+ backpressureLimit?: number;
102
+ /** Per-message compression. Default: false; refused in production secureDefaults. */
103
+ perMessageDeflate?: boolean;
104
+ /** Idle timeout in seconds. Default: 120; `0` is refused. */
105
+ idleTimeout?: number;
106
+ /** Maximum inbound message payload length in bytes. Default: 1 MiB. */
107
+ maxPayloadLength?: number;
122
108
  beforeUpgrade?(request: Request, ctx: WebSocketContext<P, S>): Response | string | undefined | Promise<Response | string | undefined>;
123
109
  open?(conn: WebSocketConnection<TData>, ctx: WebSocketContext<P, S>): void | Promise<void>;
124
110
  message?(conn: WebSocketConnection<TData>, data: string | Uint8Array | ArrayBuffer, isBinary: boolean): void | Promise<void>;
@@ -126,12 +112,33 @@ export interface WebSocketHandler<P extends string = string, S = AppState, TData
126
112
  error?(conn: WebSocketConnection<TData>, err: unknown): void | Promise<void>;
127
113
  drain?(conn: WebSocketConnection<TData>): void | Promise<void>;
128
114
  }
115
+ export interface NormalizedWebSocketOptions {
116
+ closeOnBackpressureLimit: boolean;
117
+ backpressureLimit: number;
118
+ perMessageDeflate: boolean;
119
+ idleTimeout: number;
120
+ maxPayloadLength: number;
121
+ }
122
+ export declare function normalizeWebSocketOptions(handler: WebSocketHandler<any, any, any>, context: {
123
+ production: boolean;
124
+ secureDefaults: boolean;
125
+ }): NormalizedWebSocketOptions;
126
+ export type WebSocketBeforeUpgrade<P extends string = string, S = AppState> = NonNullable<WebSocketHandler<P, S>["beforeUpgrade"]>;
127
+ /**
128
+ * Adapt `rateLimit({ groupId })` to the WebSocket upgrade boundary. Use it as
129
+ * a `beforeUpgrade` handler to spend from the same shared buckets as HTTP
130
+ * routes (for example, login and WebSocket session-establishment endpoints).
131
+ *
132
+ * @since 0.23.0
133
+ */
134
+ export declare function wsRateLimit<P extends string = string, S = AppState>(options: RateLimitOptions): WebSocketBeforeUpgrade<P, S>;
129
135
  /** Helper for declaring a handler with full type-inference. */
130
136
  export declare function defineWebSocket<P extends string, S = AppState, TData = unknown>(handler: WebSocketHandler<P, S, TData>): WebSocketHandler<P, S, TData>;
131
137
  export interface WebSocketRouteEntry {
132
138
  path: PathString;
133
139
  handler: WebSocketHandler<any, any, any>;
134
140
  createState: WebSocketStateFactory;
141
+ options: NormalizedWebSocketOptions;
135
142
  }
136
143
  type WebSocketStateFactory = () => Record<string, unknown>;
137
144
  /**
@@ -144,9 +151,11 @@ type WebSocketStateFactory = () => Record<string, unknown>;
144
151
  export declare class WebSocketRegistry {
145
152
  private router;
146
153
  private _size;
147
- add(path: PathString, handler: WebSocketHandler<any, any, any>, createState?: WebSocketStateFactory): void;
154
+ private entries;
155
+ add(path: PathString, handler: WebSocketHandler<any, any, any>, createState?: WebSocketStateFactory, options?: NormalizedWebSocketOptions): void;
148
156
  find(pathname: string): RouteMatch<WebSocketRouteEntry> | undefined;
149
157
  get size(): number;
158
+ runtimeOptions(): NormalizedWebSocketOptions;
150
159
  }
151
160
  /**
152
161
  * Compute the `Sec-WebSocket-Accept` response header value for a given
@@ -231,6 +240,11 @@ export declare function decodeClosePayload(payload: Uint8Array): {
231
240
  export declare class WebSocketProtocolError extends Error {
232
241
  constructor(message: string);
233
242
  }
243
+ export declare class WebSocketPayloadTooLargeError extends WebSocketProtocolError {
244
+ readonly limit: number;
245
+ readonly actual: number;
246
+ constructor(limit: number, actual: number);
247
+ }
234
248
  /**
235
249
  * Incremental parser that buffers bytes from a socket and emits whole
236
250
  * frames. Handles fragmentation, interleaved control frames, and UTF-8
@@ -259,12 +273,15 @@ export declare class FrameSink {
259
273
  private buffer;
260
274
  private fragments;
261
275
  private fragmentOpcode;
276
+ private fragmentBytes;
262
277
  private closed;
263
278
  constructor(opts: FrameSinkEvents & {
264
279
  requireMask?: boolean;
280
+ maxPayloadLength?: number;
265
281
  });
266
282
  push(chunk: Uint8Array): void;
267
283
  private handle;
284
+ private assertMessageSize;
268
285
  }
269
286
  /** Coerce arbitrary `send()` payloads to a `Uint8Array` + opcode pair. */
270
287
  export declare function encodeSendPayload(data: string | ArrayBufferLike | ArrayBufferView): {
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}