@daloyjs/core 0.35.0 → 0.35.2

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 (188) hide show
  1. package/README.md +145 -29
  2. package/dist/adapters/bun.d.ts +0 -1
  3. package/dist/adapters/bun.js +0 -1
  4. package/dist/adapters/cloudflare.d.ts +0 -1
  5. package/dist/adapters/cloudflare.js +0 -1
  6. package/dist/adapters/deno.d.ts +0 -1
  7. package/dist/adapters/deno.js +0 -1
  8. package/dist/adapters/fastly.d.ts +0 -1
  9. package/dist/adapters/fastly.js +0 -1
  10. package/dist/adapters/lambda.d.ts +0 -1
  11. package/dist/adapters/lambda.js +0 -1
  12. package/dist/adapters/node.d.ts +11 -1
  13. package/dist/adapters/node.js +246 -44
  14. package/dist/adapters/vercel.d.ts +0 -1
  15. package/dist/adapters/vercel.js +0 -1
  16. package/dist/app.d.ts +52 -1
  17. package/dist/app.js +557 -146
  18. package/dist/banner.d.ts +0 -1
  19. package/dist/banner.js +0 -1
  20. package/dist/cli.d.ts +0 -1
  21. package/dist/cli.js +0 -1
  22. package/dist/client.d.ts +0 -1
  23. package/dist/client.js +0 -1
  24. package/dist/combine.d.ts +0 -1
  25. package/dist/combine.js +0 -1
  26. package/dist/compression.d.ts +0 -1
  27. package/dist/compression.js +0 -1
  28. package/dist/config.d.ts +0 -1
  29. package/dist/config.js +0 -1
  30. package/dist/conn-info.d.ts +0 -1
  31. package/dist/conn-info.js +0 -1
  32. package/dist/contract.d.ts +0 -1
  33. package/dist/contract.js +0 -1
  34. package/dist/cookie.d.ts +0 -1
  35. package/dist/cookie.js +0 -1
  36. package/dist/dependency.d.ts +0 -1
  37. package/dist/dependency.js +0 -1
  38. package/dist/discriminator.d.ts +0 -1
  39. package/dist/discriminator.js +0 -1
  40. package/dist/docs.d.ts +0 -1
  41. package/dist/docs.js +0 -1
  42. package/dist/errors.d.ts +0 -1
  43. package/dist/errors.js +6 -3
  44. package/dist/etag.d.ts +0 -1
  45. package/dist/etag.js +0 -1
  46. package/dist/fetch-guard.d.ts +0 -1
  47. package/dist/fetch-guard.js +0 -1
  48. package/dist/hashing.d.ts +0 -1
  49. package/dist/hashing.js +0 -1
  50. package/dist/index.d.ts +0 -1
  51. package/dist/index.js +0 -1
  52. package/dist/ip-restriction.d.ts +0 -1
  53. package/dist/ip-restriction.js +0 -1
  54. package/dist/jwk.d.ts +0 -1
  55. package/dist/jwk.js +0 -1
  56. package/dist/jwt.d.ts +0 -1
  57. package/dist/jwt.js +0 -1
  58. package/dist/load-shedding.d.ts +0 -1
  59. package/dist/load-shedding.js +0 -1
  60. package/dist/logger.d.ts +0 -1
  61. package/dist/logger.js +0 -1
  62. package/dist/middleware.d.ts +0 -1
  63. package/dist/middleware.js +16 -13
  64. package/dist/multipart.d.ts +0 -1
  65. package/dist/multipart.js +0 -1
  66. package/dist/openapi.d.ts +0 -1
  67. package/dist/openapi.js +0 -1
  68. package/dist/rate-limit-redis.d.ts +0 -1
  69. package/dist/rate-limit-redis.js +0 -1
  70. package/dist/router.d.ts +0 -1
  71. package/dist/router.js +0 -1
  72. package/dist/safe-redirect.d.ts +2 -3
  73. package/dist/safe-redirect.js +2 -3
  74. package/dist/sbom.cdx.json +9 -9
  75. package/dist/sbom.spdx.json +5 -5
  76. package/dist/schema.d.ts +0 -1
  77. package/dist/schema.js +0 -1
  78. package/dist/security-schemes.d.ts +0 -1
  79. package/dist/security-schemes.js +0 -1
  80. package/dist/security.d.ts +0 -16
  81. package/dist/security.js +32 -4
  82. package/dist/session.d.ts +0 -1
  83. package/dist/session.js +0 -1
  84. package/dist/streaming.d.ts +0 -1
  85. package/dist/streaming.js +0 -1
  86. package/dist/subdomains.d.ts +0 -1
  87. package/dist/subdomains.js +0 -1
  88. package/dist/time-claims.d.ts +0 -1
  89. package/dist/time-claims.js +0 -1
  90. package/dist/tracing.d.ts +0 -1
  91. package/dist/tracing.js +0 -1
  92. package/dist/types.d.ts +0 -1
  93. package/dist/types.js +0 -1
  94. package/dist/websocket.d.ts +0 -1
  95. package/dist/websocket.js +0 -1
  96. package/package.json +6 -2
  97. package/dist/adapters/bun.d.ts.map +0 -1
  98. package/dist/adapters/bun.js.map +0 -1
  99. package/dist/adapters/cloudflare.d.ts.map +0 -1
  100. package/dist/adapters/cloudflare.js.map +0 -1
  101. package/dist/adapters/deno.d.ts.map +0 -1
  102. package/dist/adapters/deno.js.map +0 -1
  103. package/dist/adapters/fastly.d.ts.map +0 -1
  104. package/dist/adapters/fastly.js.map +0 -1
  105. package/dist/adapters/lambda.d.ts.map +0 -1
  106. package/dist/adapters/lambda.js.map +0 -1
  107. package/dist/adapters/node.d.ts.map +0 -1
  108. package/dist/adapters/node.js.map +0 -1
  109. package/dist/adapters/vercel.d.ts.map +0 -1
  110. package/dist/adapters/vercel.js.map +0 -1
  111. package/dist/app.d.ts.map +0 -1
  112. package/dist/app.js.map +0 -1
  113. package/dist/banner.d.ts.map +0 -1
  114. package/dist/banner.js.map +0 -1
  115. package/dist/cli.d.ts.map +0 -1
  116. package/dist/cli.js.map +0 -1
  117. package/dist/client.d.ts.map +0 -1
  118. package/dist/client.js.map +0 -1
  119. package/dist/combine.d.ts.map +0 -1
  120. package/dist/combine.js.map +0 -1
  121. package/dist/compression.d.ts.map +0 -1
  122. package/dist/compression.js.map +0 -1
  123. package/dist/config.d.ts.map +0 -1
  124. package/dist/config.js.map +0 -1
  125. package/dist/conn-info.d.ts.map +0 -1
  126. package/dist/conn-info.js.map +0 -1
  127. package/dist/contract.d.ts.map +0 -1
  128. package/dist/contract.js.map +0 -1
  129. package/dist/cookie.d.ts.map +0 -1
  130. package/dist/cookie.js.map +0 -1
  131. package/dist/dependency.d.ts.map +0 -1
  132. package/dist/dependency.js.map +0 -1
  133. package/dist/discriminator.d.ts.map +0 -1
  134. package/dist/discriminator.js.map +0 -1
  135. package/dist/docs.d.ts.map +0 -1
  136. package/dist/docs.js.map +0 -1
  137. package/dist/errors.d.ts.map +0 -1
  138. package/dist/errors.js.map +0 -1
  139. package/dist/etag.d.ts.map +0 -1
  140. package/dist/etag.js.map +0 -1
  141. package/dist/fetch-guard.d.ts.map +0 -1
  142. package/dist/fetch-guard.js.map +0 -1
  143. package/dist/hashing.d.ts.map +0 -1
  144. package/dist/hashing.js.map +0 -1
  145. package/dist/index.d.ts.map +0 -1
  146. package/dist/index.js.map +0 -1
  147. package/dist/ip-restriction.d.ts.map +0 -1
  148. package/dist/ip-restriction.js.map +0 -1
  149. package/dist/jwk.d.ts.map +0 -1
  150. package/dist/jwk.js.map +0 -1
  151. package/dist/jwt.d.ts.map +0 -1
  152. package/dist/jwt.js.map +0 -1
  153. package/dist/load-shedding.d.ts.map +0 -1
  154. package/dist/load-shedding.js.map +0 -1
  155. package/dist/logger.d.ts.map +0 -1
  156. package/dist/logger.js.map +0 -1
  157. package/dist/middleware.d.ts.map +0 -1
  158. package/dist/middleware.js.map +0 -1
  159. package/dist/multipart.d.ts.map +0 -1
  160. package/dist/multipart.js.map +0 -1
  161. package/dist/openapi.d.ts.map +0 -1
  162. package/dist/openapi.js.map +0 -1
  163. package/dist/rate-limit-redis.d.ts.map +0 -1
  164. package/dist/rate-limit-redis.js.map +0 -1
  165. package/dist/router.d.ts.map +0 -1
  166. package/dist/router.js.map +0 -1
  167. package/dist/safe-redirect.d.ts.map +0 -1
  168. package/dist/safe-redirect.js.map +0 -1
  169. package/dist/schema.d.ts.map +0 -1
  170. package/dist/schema.js.map +0 -1
  171. package/dist/security-schemes.d.ts.map +0 -1
  172. package/dist/security-schemes.js.map +0 -1
  173. package/dist/security.d.ts.map +0 -1
  174. package/dist/security.js.map +0 -1
  175. package/dist/session.d.ts.map +0 -1
  176. package/dist/session.js.map +0 -1
  177. package/dist/streaming.d.ts.map +0 -1
  178. package/dist/streaming.js.map +0 -1
  179. package/dist/subdomains.d.ts.map +0 -1
  180. package/dist/subdomains.js.map +0 -1
  181. package/dist/time-claims.d.ts.map +0 -1
  182. package/dist/time-claims.js.map +0 -1
  183. package/dist/tracing.d.ts.map +0 -1
  184. package/dist/tracing.js.map +0 -1
  185. package/dist/types.d.ts.map +0 -1
  186. package/dist/types.js.map +0 -1
  187. package/dist/websocket.d.ts.map +0 -1
  188. package/dist/websocket.js.map +0 -1
package/dist/banner.d.ts CHANGED
@@ -37,4 +37,3 @@ export declare function formatStartupBanner(options: StartupBannerOptions): stri
37
37
  * replace ad-hoc `console.log("listening on …")` calls in starter templates.
38
38
  */
39
39
  export declare function printStartupBanner(options: StartupBannerOptions, write?: (s: string) => void): void;
40
- //# sourceMappingURL=banner.d.ts.map
package/dist/banner.js CHANGED
@@ -110,4 +110,3 @@ export function formatStartupBanner(options) {
110
110
  export function printStartupBanner(options, write = (s) => process.stdout.write(s)) {
111
111
  write(`\n${formatStartupBanner(options)}\n\n`);
112
112
  }
113
- //# sourceMappingURL=banner.js.map
package/dist/cli.d.ts CHANGED
@@ -146,4 +146,3 @@ export declare function runCli(argv: readonly string[], io: CliIO): Promise<CliR
146
146
  * @since 0.14.0
147
147
  */
148
148
  export declare function buildAiDump(app: App, opts: CliOptions): Record<string, unknown>;
149
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.js CHANGED
@@ -848,4 +848,3 @@ function isApp(value) {
848
848
  typeof value.introspect === "function" &&
849
849
  typeof value.fetch === "function");
850
850
  }
851
- //# sourceMappingURL=cli.js.map
package/dist/client.d.ts CHANGED
@@ -74,4 +74,3 @@ export interface ClientOptions {
74
74
  */
75
75
  export declare function createClient<A extends App>(app: A, opts: ClientOptions): ClientFor<A>;
76
76
  export {};
77
- //# sourceMappingURL=client.d.ts.map
package/dist/client.js CHANGED
@@ -85,4 +85,3 @@ function safeJson(text) {
85
85
  return text;
86
86
  }
87
87
  }
88
- //# sourceMappingURL=client.js.map
package/dist/combine.d.ts CHANGED
@@ -94,4 +94,3 @@ export type ExceptPredicate = string | string[] | ((ctx: BaseContext<any, any>)
94
94
  * @since 0.19.0
95
95
  */
96
96
  export declare function except(when: ExceptPredicate, hooks: Hooks): Hooks;
97
- //# sourceMappingURL=combine.d.ts.map
package/dist/combine.js CHANGED
@@ -244,4 +244,3 @@ function mergeCombineHooks(layers) {
244
244
  }
245
245
  return merged;
246
246
  }
247
- //# sourceMappingURL=combine.js.map
@@ -124,4 +124,3 @@ export declare function _resetCompressionRuntimeProbeForTests(): void;
124
124
  * @since 0.25.0
125
125
  */
126
126
  export declare function compression(opts?: CompressionOptions): Hooks;
127
- //# sourceMappingURL=compression.d.ts.map
@@ -365,4 +365,3 @@ export function compression(opts = {}) {
365
365
  hooks[COMPRESSION_HOOK_MARKER] = true;
366
366
  return hooks;
367
367
  }
368
- //# sourceMappingURL=compression.js.map
package/dist/config.d.ts CHANGED
@@ -95,4 +95,3 @@ export interface DefineConfigOptions<S extends StandardSchemaV1> {
95
95
  * @since 0.20.0
96
96
  */
97
97
  export declare function defineConfig<S extends StandardSchemaV1>(opts: DefineConfigOptions<S>): Promise<StandardSchemaV1.InferOutput<S>>;
98
- //# sourceMappingURL=config.d.ts.map
package/dist/config.js CHANGED
@@ -130,4 +130,3 @@ export async function defineConfig(opts) {
130
130
  }
131
131
  return result.value;
132
132
  }
133
- //# sourceMappingURL=config.js.map
@@ -118,4 +118,3 @@ export declare function readRemotePort(ctx: BaseContext<any, any>): number | und
118
118
  /** @internal Test-only helper. */
119
119
  export declare function _makeConnInfoForTests(info: ConnInfo): MutableConnInfo;
120
120
  export {};
121
- //# sourceMappingURL=conn-info.d.ts.map
package/dist/conn-info.js CHANGED
@@ -142,4 +142,3 @@ export function readRemotePort(ctx) {
142
142
  export function _makeConnInfoForTests(info) {
143
143
  return { ...info };
144
144
  }
145
- //# sourceMappingURL=conn-info.js.map
@@ -47,4 +47,3 @@ export interface ContractTestOptions {
47
47
  * @returns A {@link ContractReport}. In CI, exit non-zero when `report.ok` is `false`.
48
48
  */
49
49
  export declare function runContractTests(app: App, opts?: ContractTestOptions): Promise<ContractReport>;
50
- //# sourceMappingURL=contract.d.ts.map
package/dist/contract.js CHANGED
@@ -133,4 +133,3 @@ export async function runContractTests(app, opts = {}) {
133
133
  issues,
134
134
  };
135
135
  }
136
- //# sourceMappingURL=contract.js.map
package/dist/cookie.d.ts CHANGED
@@ -123,4 +123,3 @@ export declare function serializeClearCookie(name: string, attributes?: CookieAt
123
123
  export declare function readRequestCookie(header: string | null | undefined, name: string): string | null;
124
124
  /** @internal Re-exported for tests. */
125
125
  export declare const __COOKIE_FRAMEWORK_PREFIX__ = "daloy.cookie";
126
- //# sourceMappingURL=cookie.d.ts.map
package/dist/cookie.js CHANGED
@@ -202,4 +202,3 @@ export function readRequestCookie(header, name) {
202
202
  }
203
203
  /** @internal Re-exported for tests. */
204
204
  export const __COOKIE_FRAMEWORK_PREFIX__ = FRAMEWORK_PREFIX;
205
- //# sourceMappingURL=cookie.js.map
@@ -45,4 +45,3 @@ export interface DependencyHooks extends Hooks {
45
45
  * @since 0.24.0
46
46
  */
47
47
  export declare function defineDependency<TName extends string, TValue, TStateKey extends string = TName>(opts: DependencyOptions<TName, TValue, TStateKey>): DependencyHooks;
48
- //# sourceMappingURL=dependency.d.ts.map
@@ -65,4 +65,3 @@ export function defineDependency(opts) {
65
65
  });
66
66
  return hooks;
67
67
  }
68
- //# sourceMappingURL=dependency.js.map
@@ -71,4 +71,3 @@ export type DiscriminatedUnion<V extends Record<string, StandardSchemaV1>> = Sta
71
71
  */
72
72
  export declare function discriminatedUnion<P extends string, V extends Record<string, StandardSchemaV1>>(propertyName: P, variants: V, opts?: DiscriminatedUnionOptions): DiscriminatedUnion<V>;
73
73
  export {};
74
- //# sourceMappingURL=discriminator.d.ts.map
@@ -111,4 +111,3 @@ function variantToJsonSchema(schema) {
111
111
  }
112
112
  return {};
113
113
  }
114
- //# sourceMappingURL=discriminator.js.map
package/dist/docs.d.ts CHANGED
@@ -153,4 +153,3 @@ export declare function docsContentSecurityPolicy(opts?: DocsContentSecurityPoli
153
153
  * {@link docsContentSecurityPolicy} (or a caller-supplied override).
154
154
  */
155
155
  export declare function htmlResponse(html: string, opts?: HtmlResponseOptions): Response;
156
- //# sourceMappingURL=docs.d.ts.map
package/dist/docs.js CHANGED
@@ -113,4 +113,3 @@ function scalarConfigurationAttr(specUrl, configuration) {
113
113
  const { content: _content, fetch: _fetch, plugins: _plugins, sources: _sources, spec: _spec, url: _url, ...uiConfiguration } = configuration;
114
114
  return ` data-configuration='${escapeHtml(JSON.stringify({ ...uiConfiguration, url: specUrl }))}'`;
115
115
  }
116
- //# sourceMappingURL=docs.js.map
package/dist/errors.d.ts CHANGED
@@ -327,4 +327,3 @@ export declare class RequestTimeoutError extends HttpError {
327
327
  export declare class InternalError extends HttpError {
328
328
  constructor(detail?: string);
329
329
  }
330
- //# sourceMappingURL=errors.d.ts.map
package/dist/errors.js CHANGED
@@ -202,8 +202,12 @@ export class HttpError extends Error {
202
202
  if (opts.requestId)
203
203
  out.instance = `urn:request:${opts.requestId}`;
204
204
  const headers = new Headers({ "content-type": "application/problem+json" });
205
- for (const [name, value] of Object.entries(this.headers ?? {})) {
206
- headers.set(name, value);
205
+ // Skip the Object.entries({}) churn on the common case where the
206
+ // error was constructed without extra response headers.
207
+ if (this.headers !== undefined) {
208
+ for (const [name, value] of Object.entries(this.headers)) {
209
+ headers.set(name, value);
210
+ }
207
211
  }
208
212
  // Merge Context.set.headers (CSRF rotation, session renewal,
209
213
  // request-id, secureHeaders output) without overriding headers the
@@ -444,4 +448,3 @@ export class InternalError extends HttpError {
444
448
  this.name = "InternalError";
445
449
  }
446
450
  }
447
- //# sourceMappingURL=errors.js.map
package/dist/etag.d.ts CHANGED
@@ -45,4 +45,3 @@ export interface ETagOptions {
45
45
  * @since 0.21.0
46
46
  */
47
47
  export declare function etag(opts?: ETagOptions): Hooks;
48
- //# sourceMappingURL=etag.d.ts.map
package/dist/etag.js CHANGED
@@ -114,4 +114,3 @@ export function etag(opts = {}) {
114
114
  },
115
115
  };
116
116
  }
117
- //# sourceMappingURL=etag.js.map
@@ -205,4 +205,3 @@ export interface FetchGuardOptions {
205
205
  * @since 0.34.0
206
206
  */
207
207
  export declare function fetchGuard(options?: FetchGuardOptions): typeof fetch;
208
- //# sourceMappingURL=fetch-guard.d.ts.map
@@ -328,4 +328,3 @@ function createDefaultResolver() {
328
328
  return results.map((r) => r.address);
329
329
  };
330
330
  }
331
- //# sourceMappingURL=fetch-guard.js.map
package/dist/hashing.d.ts CHANGED
@@ -56,4 +56,3 @@ export declare function passwordHash(password: string): Promise<string>;
56
56
  * @since 0.15.0
57
57
  */
58
58
  export declare function passwordVerify(password: string, storedHash: string): Promise<boolean>;
59
- //# sourceMappingURL=hashing.d.ts.map
package/dist/hashing.js CHANGED
@@ -151,4 +151,3 @@ export async function passwordVerify(password, storedHash) {
151
151
  return false;
152
152
  return nodeTimingSafeEqual(derived, parsed.hash);
153
153
  }
154
- //# sourceMappingURL=hashing.js.map
package/dist/index.d.ts CHANGED
@@ -63,4 +63,3 @@ export { otelTracing, TRACING_SPAN_KIND_SERVER, TRACING_SPAN_STATUS_UNSET, TRACI
63
63
  export type { OtelTracingOptions, TracingAttributes, TracingAttributeValue, TracingSpan, TracingStartSpanOptions, TracingTracer, } from "./tracing.js";
64
64
  export { defineWebSocket, WebSocketRegistry, WebSocketProtocolError, WebSocketPayloadTooLargeError, WS_GUID, WS_READY_STATE, WS_OPCODE, WS_CLOSE_CODE, WS_MAX_CONTROL_PAYLOAD, DEFAULT_WS_BACKPRESSURE_LIMIT, DEFAULT_WS_MAX_PAYLOAD_LENGTH, DEFAULT_WS_IDLE_TIMEOUT_SECONDS, computeAcceptKey, parseSubprotocols, validateSelectedSubprotocol, validateUpgrade, checkWebSocketOrigin, parseFrame, encodeFrame, encodeClosePayload, decodeClosePayload, encodeSendPayload, normalizeWebSocketOptions, wsRateLimit, FrameSink, FRAME_INCOMPLETE, } from "./websocket.js";
65
65
  export type { WebSocketConnection, WebSocketContext, WebSocketHandler, WebSocketRouteEntry, NormalizedWebSocketOptions, WebSocketBeforeUpgrade, HandshakeResult, ParsedFrame, MessageEvent as WebSocketMessageEvent, FrameSinkEvents, } from "./websocket.js";
66
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -31,4 +31,3 @@ export { session, rotateSession, signValue, verifySignedValue, MemorySessionStor
31
31
  export { fileField, multipartObject, isFileFieldSchema, isMultipartObjectSchema, } from "./multipart.js";
32
32
  export { otelTracing, TRACING_SPAN_KIND_SERVER, TRACING_SPAN_STATUS_UNSET, TRACING_SPAN_STATUS_OK, TRACING_SPAN_STATUS_ERROR, } from "./tracing.js";
33
33
  export { defineWebSocket, WebSocketRegistry, WebSocketProtocolError, WebSocketPayloadTooLargeError, WS_GUID, WS_READY_STATE, WS_OPCODE, WS_CLOSE_CODE, WS_MAX_CONTROL_PAYLOAD, DEFAULT_WS_BACKPRESSURE_LIMIT, DEFAULT_WS_MAX_PAYLOAD_LENGTH, DEFAULT_WS_IDLE_TIMEOUT_SECONDS, computeAcceptKey, parseSubprotocols, validateSelectedSubprotocol, validateUpgrade, checkWebSocketOrigin, parseFrame, encodeFrame, encodeClosePayload, decodeClosePayload, encodeSendPayload, normalizeWebSocketOptions, wsRateLimit, FrameSink, FRAME_INCOMPLETE, } from "./websocket.js";
34
- //# sourceMappingURL=index.js.map
@@ -89,4 +89,3 @@ export declare function matchesMatcher(ip: ParsedIp, m: IpMatcher): boolean;
89
89
  export declare function compileCidrMatcher(input: string): IpMatcher;
90
90
  /** @internal */
91
91
  export declare function parseIp(input: string): ParsedIp | undefined;
92
- //# sourceMappingURL=ip-restriction.d.ts.map
@@ -203,4 +203,3 @@ function parseIPv6(input) {
203
203
  }
204
204
  return { bytes, family: 6 };
205
205
  }
206
- //# sourceMappingURL=ip-restriction.js.map
package/dist/jwk.d.ts CHANGED
@@ -79,4 +79,3 @@ export interface JwkOptions {
79
79
  * @since 0.22.0
80
80
  */
81
81
  export declare function jwk(opts: JwkOptions): Hooks;
82
- //# sourceMappingURL=jwk.d.ts.map
package/dist/jwk.js CHANGED
@@ -266,4 +266,3 @@ function extractScopes(payload) {
266
266
  }
267
267
  return out;
268
268
  }
269
- //# sourceMappingURL=jwk.js.map
package/dist/jwt.d.ts CHANGED
@@ -115,4 +115,3 @@ export declare function createJwtSigner(opts: JwtSignerOptions): {
115
115
  export declare function createJwtVerifier(opts: JwtVerifierOptions): {
116
116
  verify(token: string): Promise<JwtVerified>;
117
117
  };
118
- //# sourceMappingURL=jwt.d.ts.map
package/dist/jwt.js CHANGED
@@ -500,4 +500,3 @@ async function verifyInternal(token, r) {
500
500
  }
501
501
  return { header, payload };
502
502
  }
503
- //# sourceMappingURL=jwt.js.map
@@ -70,4 +70,3 @@ export declare function loadShedding(opts?: LoadSheddingOptions): Hooks;
70
70
  * @internal
71
71
  */
72
72
  export declare const LOAD_SHEDDING_MARKER: unique symbol;
73
- //# sourceMappingURL=load-shedding.d.ts.map
@@ -168,4 +168,3 @@ export function loadShedding(opts = {}) {
168
168
  * @internal
169
169
  */
170
170
  export const LOAD_SHEDDING_MARKER = Symbol.for("daloyjs.loadShedding");
171
- //# sourceMappingURL=load-shedding.js.map
package/dist/logger.d.ts CHANGED
@@ -121,4 +121,3 @@ export declare function createLogger(opts?: ConsoleLoggerOptions): Logger;
121
121
  */
122
122
  export declare const noopLogger: Logger;
123
123
  export {};
124
- //# sourceMappingURL=logger.d.ts.map
package/dist/logger.js CHANGED
@@ -258,4 +258,3 @@ export const noopLogger = {
258
258
  return noopLogger;
259
259
  },
260
260
  };
261
- //# sourceMappingURL=logger.js.map
@@ -727,4 +727,3 @@ export declare const REQUIRE_SCOPES_HOOK_MARKER: unique symbol;
727
727
  */
728
728
  export declare function requireScopes(scopes: readonly string[]): Hooks;
729
729
  export { timingSafeEqual };
730
- //# sourceMappingURL=middleware.d.ts.map
@@ -223,7 +223,7 @@ export function secureHeaders(opts = {}) {
223
223
  const ref = opts.referrerPolicy ?? "no-referrer";
224
224
  if (ref !== false)
225
225
  headers["referrer-policy"] = ref;
226
- const perm = opts.permissionsPolicy ?? "camera=(), microphone=(), geolocation=()";
226
+ const perm = opts.permissionsPolicy ?? "camera=(), microphone=(), geolocation=(), clipboard-write=()";
227
227
  if (perm !== false)
228
228
  headers["permissions-policy"] = perm;
229
229
  const coop = opts.crossOriginOpenerPolicy ?? "same-origin";
@@ -259,14 +259,16 @@ export function secureHeaders(opts = {}) {
259
259
  .join(", ");
260
260
  }
261
261
  }
262
- const hooks = {
263
- beforeHandle(ctx) {
264
- if (cspIsDynamic && cspOpt.nonce) {
262
+ const headerEntries = Object.entries(headers);
263
+ const hooks = {};
264
+ if (cspIsDynamic) {
265
+ hooks.beforeHandle = (ctx) => {
266
+ if (cspOpt.nonce) {
265
267
  ctx.state[CSP_NONCE_STATE] = generateCspNonce();
266
268
  }
267
- },
268
- onSend(res, ctx) {
269
- if (cspIsDynamic && !res.headers.has("content-security-policy")) {
269
+ };
270
+ hooks.onSend = (res, ctx) => {
271
+ if (!res.headers.has("content-security-policy")) {
270
272
  const nonce = ctx
271
273
  ? ctx.state[CSP_NONCE_STATE]
272
274
  : undefined;
@@ -275,14 +277,16 @@ export function secureHeaders(opts = {}) {
275
277
  res.headers.set("content-security-policy", header);
276
278
  }
277
279
  return undefined;
278
- },
279
- onResponse(res) {
280
- for (const [k, v] of Object.entries(headers)) {
280
+ };
281
+ }
282
+ if (headerEntries.length > 0) {
283
+ hooks.onResponse = (res) => {
284
+ for (const [k, v] of headerEntries) {
281
285
  if (!res.headers.has(k))
282
286
  res.headers.set(k, v);
283
287
  }
284
- },
285
- };
288
+ };
289
+ }
286
290
  hooks[SECURE_HEADERS_MARKER] = true;
287
291
  return hooks;
288
292
  }
@@ -1248,4 +1252,3 @@ export function requireScopes(scopes) {
1248
1252
  return hooks;
1249
1253
  }
1250
1254
  export { timingSafeEqual };
1251
- //# sourceMappingURL=middleware.js.map
@@ -166,4 +166,3 @@ export declare function getMultipartShape(s: unknown): {
166
166
  /** Internal: read the file-field options used for OpenAPI documentation. */
167
167
  export declare function getFileFieldOptions(s: unknown): (Required<Pick<FileFieldOptions, "format">> & FileFieldOptions) | undefined;
168
168
  export {};
169
- //# sourceMappingURL=multipart.d.ts.map
package/dist/multipart.js CHANGED
@@ -384,4 +384,3 @@ export function getFileFieldOptions(s) {
384
384
  return undefined;
385
385
  return s[FILE_FIELD_MARKER];
386
386
  }
387
- //# sourceMappingURL=multipart.js.map
package/dist/openapi.d.ts CHANGED
@@ -125,4 +125,3 @@ export declare function generateOpenAPI(app: App, options: OpenAPIOptions): Reco
125
125
  * artifacts. Reads/writes nothing; pure transform.
126
126
  */
127
127
  export declare function openapiToYAML(doc: Record<string, unknown>): string;
128
- //# sourceMappingURL=openapi.d.ts.map
package/dist/openapi.js CHANGED
@@ -498,4 +498,3 @@ export function openapiToYAML(doc) {
498
498
  const result = yamlEmit(doc, "");
499
499
  return result.startsWith("\n") ? result.slice(1) : result;
500
500
  }
501
- //# sourceMappingURL=openapi.js.map
@@ -98,4 +98,3 @@ export interface NodeRedisLike {
98
98
  }
99
99
  /** Wrap a [`node-redis`](https://github.com/redis/node-redis) v4+ client. */
100
100
  export declare function nodeRedisAdapter(client: NodeRedisLike): RedisCommands;
101
- //# sourceMappingURL=rate-limit-redis.d.ts.map
@@ -114,4 +114,3 @@ export function nodeRedisAdapter(client) {
114
114
  },
115
115
  };
116
116
  }
117
- //# sourceMappingURL=rate-limit-redis.js.map
package/dist/router.d.ts CHANGED
@@ -36,4 +36,3 @@ export declare class Router<T> {
36
36
  allowedMethods(path: string): HttpMethod[];
37
37
  private walk;
38
38
  }
39
- //# sourceMappingURL=router.d.ts.map
package/dist/router.js CHANGED
@@ -136,4 +136,3 @@ function splitPath(path) {
136
136
  return [];
137
137
  return clean.replace(/^\//, "").split("/");
138
138
  }
139
- //# sourceMappingURL=router.js.map
@@ -38,7 +38,7 @@
38
38
  * });
39
39
  * ```
40
40
  *
41
- * @since 0.35.0
41
+ * @since 0.35.2
42
42
  */
43
43
  /** Reason an open-redirect candidate was refused. */
44
44
  export type SafeRedirectBlockReason = "empty-target" | "invalid-control-characters" | "protocol-relative" | "backslash-path" | "path-not-allowed" | "origin-not-allowed" | "scheme-not-allowed" | "parse-failed";
@@ -86,7 +86,6 @@ export interface SafeRedirectOptions {
86
86
  * @param target - User-supplied URL candidate (path or absolute URL).
87
87
  * @param options - Allowlist + response configuration.
88
88
  *
89
- * @since 0.35.0
89
+ * @since 0.35.2
90
90
  */
91
91
  export declare function safeRedirect(target: string, options?: SafeRedirectOptions): Response;
92
- //# sourceMappingURL=safe-redirect.d.ts.map
@@ -38,7 +38,7 @@
38
38
  * });
39
39
  * ```
40
40
  *
41
- * @since 0.35.0
41
+ * @since 0.35.2
42
42
  */
43
43
  /** Thrown when {@link safeRedirect} refuses a candidate URL and no `fallback` is configured. */
44
44
  export class OpenRedirectBlockedError extends Error {
@@ -126,7 +126,7 @@ function classify(target, allowedPaths, allowedOrigins) {
126
126
  * @param target - User-supplied URL candidate (path or absolute URL).
127
127
  * @param options - Allowlist + response configuration.
128
128
  *
129
- * @since 0.35.0
129
+ * @since 0.35.2
130
130
  */
131
131
  export function safeRedirect(target, options = {}) {
132
132
  const allowedPaths = options.allowedPaths ?? [];
@@ -166,4 +166,3 @@ export function safeRedirect(target, options = {}) {
166
166
  }
167
167
  throw new OpenRedirectBlockedError(result.reason, target);
168
168
  }
169
- //# sourceMappingURL=safe-redirect.js.map
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.5",
4
- "serialNumber": "urn:uuid:c41e526d-a8c9-5e8a-bef4-4d616a1ee814",
4
+ "serialNumber": "urn:uuid:1d9fa950-874b-5a89-9b39-98f1bbdfdb30",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2026-05-24T23:40:26.023Z",
7
+ "timestamp": "2026-05-28T07:51:16.251Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "DaloyJS",
11
11
  "name": "daloy-generate-sbom",
12
- "version": "0.35.0"
12
+ "version": "0.35.2"
13
13
  }
14
14
  ],
15
15
  "authors": [
@@ -19,11 +19,11 @@
19
19
  ],
20
20
  "component": {
21
21
  "type": "library",
22
- "bom-ref": "pkg:npm/@daloyjs/core@0.35.0",
22
+ "bom-ref": "pkg:npm/@daloyjs/core@0.35.2",
23
23
  "name": "@daloyjs/core",
24
- "version": "0.35.0",
24
+ "version": "0.35.2",
25
25
  "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.",
26
- "purl": "pkg:npm/@daloyjs/core@0.35.0",
26
+ "purl": "pkg:npm/@daloyjs/core@0.35.2",
27
27
  "licenses": [
28
28
  {
29
29
  "license": {
@@ -46,9 +46,9 @@
46
46
  }
47
47
  ],
48
48
  "swid": {
49
- "tagId": "swidtag--daloyjs-core-0.35.0",
49
+ "tagId": "swidtag--daloyjs-core-0.35.2",
50
50
  "name": "@daloyjs/core",
51
- "version": "0.35.0",
51
+ "version": "0.35.2",
52
52
  "tagVersion": 0,
53
53
  "patch": false
54
54
  }
@@ -57,7 +57,7 @@
57
57
  "components": [],
58
58
  "dependencies": [
59
59
  {
60
- "ref": "pkg:npm/@daloyjs/core@0.35.0",
60
+ "ref": "pkg:npm/@daloyjs/core@0.35.2",
61
61
  "dependsOn": []
62
62
  }
63
63
  ]
@@ -2,10 +2,10 @@
2
2
  "spdxVersion": "SPDX-2.3",
3
3
  "dataLicense": "CC0-1.0",
4
4
  "SPDXID": "SPDXRef-DOCUMENT",
5
- "name": "@daloyjs/core-0.35.0",
6
- "documentNamespace": "https://github.com/daloyjs/daloy/sbom/@daloyjs/core-0.35.0-c41e526d-a8c9-5e8a-bef4-4d616a1ee814",
5
+ "name": "@daloyjs/core-0.35.2",
6
+ "documentNamespace": "https://github.com/daloyjs/daloy/sbom/@daloyjs/core-0.35.2-1d9fa950-874b-5a89-9b39-98f1bbdfdb30",
7
7
  "creationInfo": {
8
- "created": "2026-05-24T23:40:26.023Z",
8
+ "created": "2026-05-28T07:51:16.251Z",
9
9
  "creators": [
10
10
  "Tool: daloy-generate-sbom",
11
11
  "Organization: DaloyJS"
@@ -16,7 +16,7 @@
16
16
  {
17
17
  "SPDXID": "SPDXRef-Package--daloyjs-core",
18
18
  "name": "@daloyjs/core",
19
- "versionInfo": "0.35.0",
19
+ "versionInfo": "0.35.2",
20
20
  "downloadLocation": "https://github.com/daloyjs/daloy",
21
21
  "filesAnalyzed": false,
22
22
  "licenseConcluded": "MIT",
@@ -27,7 +27,7 @@
27
27
  {
28
28
  "referenceCategory": "PACKAGE-MANAGER",
29
29
  "referenceType": "purl",
30
- "referenceLocator": "pkg:npm/@daloyjs/core@0.35.0"
30
+ "referenceLocator": "pkg:npm/@daloyjs/core@0.35.2"
31
31
  }
32
32
  ]
33
33
  }
package/dist/schema.d.ts CHANGED
@@ -73,4 +73,3 @@ export declare function validate<S extends StandardSchemaV1>(schema: S, value: u
73
73
  * @since 0.1.0
74
74
  */
75
75
  export declare function isStandardSchema(x: unknown): x is StandardSchemaV1;
76
- //# sourceMappingURL=schema.d.ts.map
package/dist/schema.js CHANGED
@@ -41,4 +41,3 @@ export function isStandardSchema(x) {
41
41
  "~standard" in x &&
42
42
  typeof x["~standard"]?.validate === "function");
43
43
  }
44
- //# sourceMappingURL=schema.js.map
@@ -210,4 +210,3 @@ export declare function oauth2Scheme(options: OAuth2SchemeOptions): OAuth2Scheme
210
210
  * @since 0.1.0
211
211
  */
212
212
  export declare function openIdConnectScheme(options: OpenIdConnectSchemeOptions): OpenIdConnectScheme;
213
- //# sourceMappingURL=security-schemes.d.ts.map
@@ -177,4 +177,3 @@ export function openIdConnectScheme(options) {
177
177
  scheme.description = options.description;
178
178
  return markRequirePayloadAuth(scheme, options);
179
179
  }
180
- //# sourceMappingURL=security-schemes.js.map
@@ -85,21 +85,6 @@ export declare function sanitizeHeaderValue(value: string): string;
85
85
  * @since 0.1.0
86
86
  */
87
87
  export declare function timingSafeEqual(a: string, b: string): boolean;
88
- /**
89
- * Generate a cryptographically strong, URL-safe identifier (~22 chars).
90
- *
91
- * Uses Web Crypto's `crypto.randomUUID()` when available, falling back to
92
- * 16 random bytes via `crypto.getRandomValues()`. The last-resort fallback
93
- * (timestamp + `Math.random()`) only triggers in environments without
94
- * WebCrypto, which is none of Node 20+/Bun/Deno/Cloudflare Workers/Vercel
95
- * Edge.
96
- *
97
- * Suitable for request ids, session ids, and short-lived correlation tokens.
98
- * Do not use for long-lived secrets unless you also sign or wrap them.
99
- *
100
- * @returns A random URL-safe id string.
101
- * @since 0.1.0
102
- */
103
88
  export declare function randomId(): string;
104
89
  /**
105
90
  * Header names that MUST appear at most once on a request per RFC 7230.
@@ -388,4 +373,3 @@ export declare function hasMongoOperatorKeys(value: unknown): boolean;
388
373
  * @since 0.35.0
389
374
  */
390
375
  export declare function assertNoMongoOperators(value: unknown): void;
391
- //# sourceMappingURL=security.d.ts.map