@daloyjs/core 0.14.2 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/dist/app.d.ts +29 -2
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +37 -11
- package/dist/app.js.map +1 -1
- package/dist/hashing.d.ts +59 -0
- package/dist/hashing.d.ts.map +1 -0
- package/dist/hashing.js +154 -0
- package/dist/hashing.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +53 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +100 -1
- package/dist/logger.js.map +1 -1
- package/dist/security.d.ts +86 -0
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +185 -0
- package/dist/security.js.map +1 -1
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -380,7 +380,7 @@ What works today, at a glance:
|
|
|
380
380
|
|
|
381
381
|
- Contract-first routing, Standard Schema validation (Zod 4 / Valibot / ArkType / TypeBox), and OpenAPI 3.1 from a single source of truth.
|
|
382
382
|
- Adapters for Node (Heroku/Railway/Render/Fly.io), Bun, Deno, Cloudflare Workers, Vercel Node / Edge / Next.js / Netlify Edge, Fastly Compute, and AWS Lambda / Netlify Functions / Lambda Function URLs.
|
|
383
|
-
- Built-in security primitives (body limits, prototype-pollution-safe JSON, path-traversal guard, request timeouts, header injection guards) plus first-party middleware (`secureHeaders` with CSP nonce + Trusted Types, `cors`, `rateLimit`, `requestId`, `bearerAuth`, `basicAuth`, `csrf` with **double-submit cookie** + **Fetch-Metadata** strategies, `session`, `timing` / `timingSafeEqual`).
|
|
383
|
+
- Built-in security primitives (body limits, prototype-pollution-safe JSON, path-traversal guard, request timeouts, header injection guards, **duplicate `Host` / `Content-Length` rejection**, **stripped `Server` / `X-Powered-By` headers by default**, **structured-log redaction defaults** for authorization / cookie / password / token / JWT-shaped values) plus first-party middleware (`secureHeaders` with CSP nonce + Trusted Types, `cors`, `rateLimit`, `requestId`, `bearerAuth`, `basicAuth`, `csrf` with **double-submit cookie** + **Fetch-Metadata** strategies, `session`, `timing` / `timingSafeEqual`) and **zero-knob crypto helpers** (`passwordHash` / `passwordVerify` at `@daloyjs/core/hashing`, `verifyWebhookSignature` / `signWebhookPayload`).
|
|
384
384
|
- Streaming helpers (SSE + NDJSON), multipart ergonomics, OpenTelemetry-compatible tracing, signed-cookie sessions with pluggable stores, and a Redis-backed rate-limit store at `@daloyjs/core/rate-limit-redis`.
|
|
385
385
|
- WebSocket primitives with the same Bun-style handler shape (`open`/`message`/`close`/`drain`/`error`) running on both Node and Bun adapters, plus typed `app.ws(path, handler)` registration and route-table awareness so the upgrade listener is only installed when WS routes exist.
|
|
386
386
|
- Pretty `printStartupBanner()` / `formatStartupBanner()` startup helpers at `@daloyjs/core/banner`, used by every starter template so `pnpm dev` greets you with a colorized boxed panel (TTY + `NO_COLOR` / `FORCE_COLOR` aware, with an ASCII fallback for dumb terminals).
|
|
@@ -396,6 +396,14 @@ What works today, at a glance:
|
|
|
396
396
|
|
|
397
397
|
Roadmap, version-by-version plan, and shipped/in-progress checklists live in [ROADMAP.md](./ROADMAP.md).
|
|
398
398
|
|
|
399
|
+
## Contributing
|
|
400
|
+
|
|
401
|
+
DaloyJS is **public and MIT-licensed, but contributions-closed**. Pull requests
|
|
402
|
+
from accounts that are not invited maintainers or explicit repository
|
|
403
|
+
collaborators are closed automatically. Bug reports, feature requests, and
|
|
404
|
+
security disclosures are very welcome; see [CONTRIBUTING.md](./CONTRIBUTING.md)
|
|
405
|
+
and [SECURITY.md](./SECURITY.md) for the channels that *are* open.
|
|
406
|
+
|
|
399
407
|
## License
|
|
400
408
|
|
|
401
409
|
MIT
|
package/dist/app.d.ts
CHANGED
|
@@ -38,6 +38,26 @@ export interface AppOptions {
|
|
|
38
38
|
};
|
|
39
39
|
/** Production mode hides 5xx detail in error responses. Default: NODE_ENV === "production". */
|
|
40
40
|
production?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Explicit runtime environment. Takes precedence over `NODE_ENV` and
|
|
43
|
+
* {@link AppOptions.production}. When set, a one-time `warn` is logged if
|
|
44
|
+
* the value disagrees with `process.env.NODE_ENV` so deploy mismatches
|
|
45
|
+
* surface loudly instead of silently shipping a misconfigured production
|
|
46
|
+
* build. Accepted values mirror the canonical Node ecosystem strings.
|
|
47
|
+
*
|
|
48
|
+
* @since 0.15.0
|
|
49
|
+
*/
|
|
50
|
+
env?: "development" | "production" | "test";
|
|
51
|
+
/**
|
|
52
|
+
* Strip the `Server` and `X-Powered-By` response headers from every
|
|
53
|
+
* response (including those produced by user middleware). Defaults to
|
|
54
|
+
* `true` — fingerprinting parity with the rest of the secure-by-default
|
|
55
|
+
* surface. Set `false` only when you need the headers for downstream
|
|
56
|
+
* observability tooling.
|
|
57
|
+
*
|
|
58
|
+
* @since 0.15.0
|
|
59
|
+
*/
|
|
60
|
+
stripServerHeaders?: boolean;
|
|
41
61
|
/** Pluggable logger. Default: structured JSON logger at "info" (or noop in test). */
|
|
42
62
|
logger?: Logger | {
|
|
43
63
|
level?: "trace" | "debug" | "info" | "warn" | "error" | "fatal";
|
|
@@ -260,10 +280,17 @@ export declare class App {
|
|
|
260
280
|
private inflight;
|
|
261
281
|
private draining;
|
|
262
282
|
constructor(options?: AppOptions);
|
|
283
|
+
/**
|
|
284
|
+
* Emit a one-time `warn` when the explicit {@link AppOptions.env} option
|
|
285
|
+
* disagrees with `process.env.NODE_ENV`. Silent when either signal is
|
|
286
|
+
* missing — surfacing only real misconfiguration.
|
|
287
|
+
*/
|
|
288
|
+
private warnOnEnvMismatch;
|
|
263
289
|
/**
|
|
264
290
|
* Resolve whether the app is running in production. Honours the explicit
|
|
265
|
-
*
|
|
266
|
-
*
|
|
291
|
+
* {@link AppOptions.env} option first, then {@link AppOptions.production},
|
|
292
|
+
* then falls back to `NODE_ENV === "production"`. Used by the docs
|
|
293
|
+
* auto-mount and error response detail stripping.
|
|
267
294
|
*/
|
|
268
295
|
private isProduction;
|
|
269
296
|
/**
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAc1E,OAAO,EAA4B,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAEV,UAAU,EACV,KAAK,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAIL,KAAK,gCAAgC,EACrC,KAAK,4BAA4B,EAClC,MAAM,WAAW,CAAC;AAEnB;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mGAAmG;IACnG,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE/B,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE;QACV,mEAAmE;QACnE,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,yEAAyE;QACzE,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,yEAAyE;QACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF,+FAA+F;IAC/F,UAAU,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/app.js
CHANGED
|
@@ -2,7 +2,7 @@ import { Router } from "./router.js";
|
|
|
2
2
|
import { WebSocketRegistry } from "./websocket.js";
|
|
3
3
|
import { BadRequestError, HttpError, InternalError, MethodNotAllowedError, NotFoundError, PayloadTooLargeError, RequestTimeoutError, UnsupportedMediaTypeError, ValidationError, } from "./errors.js";
|
|
4
4
|
import { validate } from "./schema.js";
|
|
5
|
-
import { readBodyLimited, safeJsonParse, randomId } from "./security.js";
|
|
5
|
+
import { readBodyLimited, safeJsonParse, randomId, assertNoDuplicateSingletonHeaders } from "./security.js";
|
|
6
6
|
import { createLogger, noopLogger } from "./logger.js";
|
|
7
7
|
import { generateOpenAPI, openapiToYAML, } from "./openapi.js";
|
|
8
8
|
import { docsContentSecurityPolicy, scalarHtml, swaggerUiHtml, } from "./docs.js";
|
|
@@ -98,14 +98,34 @@ export class App {
|
|
|
98
98
|
typeof options.logger.info === "function"
|
|
99
99
|
? options.logger
|
|
100
100
|
: createLogger({ level: options.logger?.level ?? "info" });
|
|
101
|
+
this.warnOnEnvMismatch();
|
|
101
102
|
this.maybeMountDocs();
|
|
102
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Emit a one-time `warn` when the explicit {@link AppOptions.env} option
|
|
106
|
+
* disagrees with `process.env.NODE_ENV`. Silent when either signal is
|
|
107
|
+
* missing — surfacing only real misconfiguration.
|
|
108
|
+
*/
|
|
109
|
+
warnOnEnvMismatch() {
|
|
110
|
+
const env = this.options.env;
|
|
111
|
+
if (env === undefined)
|
|
112
|
+
return;
|
|
113
|
+
const nodeEnv = typeof process !== "undefined" && typeof process.env !== "undefined"
|
|
114
|
+
? process.env.NODE_ENV
|
|
115
|
+
: undefined;
|
|
116
|
+
if (nodeEnv && nodeEnv !== env) {
|
|
117
|
+
this.log.warn({ event: "env.mismatch", env, nodeEnv }, `app({ env: "${env}" }) disagrees with NODE_ENV="${nodeEnv}"`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
103
120
|
/**
|
|
104
121
|
* Resolve whether the app is running in production. Honours the explicit
|
|
105
|
-
*
|
|
106
|
-
*
|
|
122
|
+
* {@link AppOptions.env} option first, then {@link AppOptions.production},
|
|
123
|
+
* then falls back to `NODE_ENV === "production"`. Used by the docs
|
|
124
|
+
* auto-mount and error response detail stripping.
|
|
107
125
|
*/
|
|
108
126
|
isProduction() {
|
|
127
|
+
if (this.options.env !== undefined)
|
|
128
|
+
return this.options.env === "production";
|
|
109
129
|
if (this.options.production !== undefined)
|
|
110
130
|
return this.options.production;
|
|
111
131
|
return (typeof process !== "undefined" &&
|
|
@@ -546,12 +566,14 @@ export class App {
|
|
|
546
566
|
method: request.method,
|
|
547
567
|
url: request.url,
|
|
548
568
|
});
|
|
569
|
+
const stripFingerprint = this.options.stripServerHeaders !== false;
|
|
549
570
|
let ctx;
|
|
550
571
|
const globalHooks = mergeHooks([this.options.hooks ?? {}]);
|
|
551
572
|
let activeErrorHook = globalHooks.onError;
|
|
552
573
|
let activeResponseHook = globalHooks.onResponse;
|
|
553
574
|
let activeSendHook = globalHooks.onSend;
|
|
554
575
|
try {
|
|
576
|
+
assertNoDuplicateSingletonHeaders(request.headers);
|
|
555
577
|
await globalHooks.onRequest?.(request);
|
|
556
578
|
const url = new URL(request.url);
|
|
557
579
|
const method = request.method;
|
|
@@ -590,7 +612,7 @@ export class App {
|
|
|
590
612
|
const intercepted = await preflightHooks.beforeHandle?.(synthCtx);
|
|
591
613
|
if (intercepted instanceof Response) {
|
|
592
614
|
copyContextHeaders(synthCtx, intercepted);
|
|
593
|
-
return await finalizeResponse(intercepted, synthCtx, preflightHooks);
|
|
615
|
+
return await finalizeResponse(intercepted, synthCtx, preflightHooks, stripFingerprint);
|
|
594
616
|
}
|
|
595
617
|
const res = new Response(null, {
|
|
596
618
|
status: 204,
|
|
@@ -598,7 +620,7 @@ export class App {
|
|
|
598
620
|
});
|
|
599
621
|
copyContextHeaders(synthCtx, res);
|
|
600
622
|
res.headers.set("x-request-id", requestId);
|
|
601
|
-
return await finalizeResponse(res, synthCtx, preflightHooks);
|
|
623
|
+
return await finalizeResponse(res, synthCtx, preflightHooks, stripFingerprint);
|
|
602
624
|
}
|
|
603
625
|
throw new MethodNotAllowedError(allowed);
|
|
604
626
|
}
|
|
@@ -616,7 +638,7 @@ export class App {
|
|
|
616
638
|
const before = await allHooks.beforeHandle?.(ctx);
|
|
617
639
|
if (before instanceof Response) {
|
|
618
640
|
copyContextHeaders(ctx, before);
|
|
619
|
-
return await finalizeResponse(before, ctx, allHooks);
|
|
641
|
+
return await finalizeResponse(before, ctx, allHooks, stripFingerprint);
|
|
620
642
|
}
|
|
621
643
|
let result = this.options.mockMode
|
|
622
644
|
? mockResponseFor(def)
|
|
@@ -632,7 +654,7 @@ export class App {
|
|
|
632
654
|
});
|
|
633
655
|
}
|
|
634
656
|
copyContextHeaders(ctx, response);
|
|
635
|
-
return await finalizeResponse(response, ctx, allHooks);
|
|
657
|
+
return await finalizeResponse(response, ctx, allHooks, stripFingerprint);
|
|
636
658
|
}
|
|
637
659
|
catch (err) {
|
|
638
660
|
const handled = await activeErrorHook?.(err, ctx);
|
|
@@ -644,7 +666,7 @@ export class App {
|
|
|
644
666
|
return finalizeResponse(handled, ctx, {
|
|
645
667
|
onSend: activeSendHook,
|
|
646
668
|
onResponse: activeResponseHook,
|
|
647
|
-
});
|
|
669
|
+
}, stripFingerprint);
|
|
648
670
|
}
|
|
649
671
|
const httpErr = err instanceof HttpError
|
|
650
672
|
? err
|
|
@@ -654,7 +676,7 @@ export class App {
|
|
|
654
676
|
if (httpErr.status < 500)
|
|
655
677
|
log.warn({ status: httpErr.status }, httpErr.problem.title);
|
|
656
678
|
const res = httpErr.toResponse({
|
|
657
|
-
production: this.
|
|
679
|
+
production: this.isProduction(),
|
|
658
680
|
requestId,
|
|
659
681
|
});
|
|
660
682
|
if (ctx)
|
|
@@ -664,7 +686,7 @@ export class App {
|
|
|
664
686
|
return finalizeResponse(res, ctx, {
|
|
665
687
|
onSend: activeSendHook,
|
|
666
688
|
onResponse: activeResponseHook,
|
|
667
|
-
});
|
|
689
|
+
}, stripFingerprint);
|
|
668
690
|
}
|
|
669
691
|
finally {
|
|
670
692
|
this.inflight--;
|
|
@@ -804,9 +826,13 @@ function responsePipeline(fns) {
|
|
|
804
826
|
return current;
|
|
805
827
|
};
|
|
806
828
|
}
|
|
807
|
-
async function finalizeResponse(res, ctx, hooks) {
|
|
829
|
+
async function finalizeResponse(res, ctx, hooks, stripFingerprint = true) {
|
|
808
830
|
const sent = await hooks.onSend?.(res, ctx);
|
|
809
831
|
const final = sent instanceof Response ? sent : res;
|
|
832
|
+
if (stripFingerprint) {
|
|
833
|
+
final.headers.delete("server");
|
|
834
|
+
final.headers.delete("x-powered-by");
|
|
835
|
+
}
|
|
810
836
|
await hooks.onResponse?.(final);
|
|
811
837
|
return final;
|
|
812
838
|
}
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Password hashing helpers with no knobs.
|
|
3
|
+
*
|
|
4
|
+
* Daloy's secure-by-default initiative ships exactly one correct way to
|
|
5
|
+
* hash a password. There is no algorithm switch, no cost-factor argument,
|
|
6
|
+
* no salt management — the API is two functions: {@link passwordHash} and
|
|
7
|
+
* {@link passwordVerify}.
|
|
8
|
+
*
|
|
9
|
+
* The implementation uses Node's built-in `crypto.scrypt` with parameters
|
|
10
|
+
* aligned with the OWASP Password Storage Cheat Sheet for scrypt
|
|
11
|
+
* (`N = 2^17`, `r = 8`, `p = 1`, 32-byte key, 16-byte salt). scrypt is
|
|
12
|
+
* memory-hard like Argon2 and ships in Node core, so this helper has no
|
|
13
|
+
* runtime dependencies. The output is a self-describing PHC-style string
|
|
14
|
+
* — verifying a hash never requires re-supplying the parameters.
|
|
15
|
+
*
|
|
16
|
+
* Argon2id is the preferred OWASP recommendation but requires a native
|
|
17
|
+
* binding that Daloy explicitly refuses to ship in `dependencies`. Apps
|
|
18
|
+
* that need Argon2id should pull `argon2` themselves; this helper
|
|
19
|
+
* intentionally uses scrypt to keep the install surface zero.
|
|
20
|
+
*
|
|
21
|
+
* Subpath: `@daloyjs/core/hashing`.
|
|
22
|
+
*
|
|
23
|
+
* @since 0.15.0
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Hash a password and return a self-describing PHC-style string. The
|
|
27
|
+
* returned string encodes the algorithm, parameters, salt, and digest so
|
|
28
|
+
* {@link passwordVerify} needs nothing else.
|
|
29
|
+
*
|
|
30
|
+
* Format: `$scrypt$N=131072,r=8,p=1$<salt-base64>$<hash-base64>`
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* import { passwordHash, passwordVerify } from "@daloyjs/core/hashing";
|
|
35
|
+
*
|
|
36
|
+
* const hash = await passwordHash("hunter2");
|
|
37
|
+
* await passwordVerify("hunter2", hash); // true
|
|
38
|
+
* await passwordVerify("wrong", hash); // false
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @param password - The plaintext password. UTF-8 encoded internally.
|
|
42
|
+
* @returns A PHC-style hash string safe to store in a database column.
|
|
43
|
+
* @throws {TypeError} When `password` is empty.
|
|
44
|
+
* @since 0.15.0
|
|
45
|
+
*/
|
|
46
|
+
export declare function passwordHash(password: string): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Verify a plaintext password against a PHC-style hash produced by
|
|
49
|
+
* {@link passwordHash} in constant time. Returns `false` (never throws)
|
|
50
|
+
* for any malformed input so the caller cannot distinguish "bad hash
|
|
51
|
+
* format" from "wrong password" through exception side channels.
|
|
52
|
+
*
|
|
53
|
+
* @param password - The plaintext password to check.
|
|
54
|
+
* @param storedHash - The PHC-style hash returned from {@link passwordHash}.
|
|
55
|
+
* @returns `true` when the password matches, `false` otherwise.
|
|
56
|
+
* @since 0.15.0
|
|
57
|
+
*/
|
|
58
|
+
export declare function passwordVerify(password: string, storedHash: string): Promise<boolean>;
|
|
59
|
+
//# sourceMappingURL=hashing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../src/hashing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AA2CH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOpE;AAgCD;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAuBlB"}
|
package/dist/hashing.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Password hashing helpers with no knobs.
|
|
3
|
+
*
|
|
4
|
+
* Daloy's secure-by-default initiative ships exactly one correct way to
|
|
5
|
+
* hash a password. There is no algorithm switch, no cost-factor argument,
|
|
6
|
+
* no salt management — the API is two functions: {@link passwordHash} and
|
|
7
|
+
* {@link passwordVerify}.
|
|
8
|
+
*
|
|
9
|
+
* The implementation uses Node's built-in `crypto.scrypt` with parameters
|
|
10
|
+
* aligned with the OWASP Password Storage Cheat Sheet for scrypt
|
|
11
|
+
* (`N = 2^17`, `r = 8`, `p = 1`, 32-byte key, 16-byte salt). scrypt is
|
|
12
|
+
* memory-hard like Argon2 and ships in Node core, so this helper has no
|
|
13
|
+
* runtime dependencies. The output is a self-describing PHC-style string
|
|
14
|
+
* — verifying a hash never requires re-supplying the parameters.
|
|
15
|
+
*
|
|
16
|
+
* Argon2id is the preferred OWASP recommendation but requires a native
|
|
17
|
+
* binding that Daloy explicitly refuses to ship in `dependencies`. Apps
|
|
18
|
+
* that need Argon2id should pull `argon2` themselves; this helper
|
|
19
|
+
* intentionally uses scrypt to keep the install surface zero.
|
|
20
|
+
*
|
|
21
|
+
* Subpath: `@daloyjs/core/hashing`.
|
|
22
|
+
*
|
|
23
|
+
* @since 0.15.0
|
|
24
|
+
*/
|
|
25
|
+
import { randomBytes, scrypt as scryptCb, timingSafeEqual as nodeTimingSafeEqual } from "node:crypto";
|
|
26
|
+
// OWASP-aligned scrypt parameters (Password Storage Cheat Sheet, 2024).
|
|
27
|
+
const SCRYPT_N = 1 << 17; // 131072
|
|
28
|
+
const SCRYPT_R = 8;
|
|
29
|
+
const SCRYPT_P = 1;
|
|
30
|
+
const SCRYPT_KEYLEN = 32;
|
|
31
|
+
const SCRYPT_SALTLEN = 16;
|
|
32
|
+
// Generous max — covers OWASP's recommended `N = 2^17` at `r = 8`, `p = 1`.
|
|
33
|
+
const SCRYPT_MAXMEM = 192 * 1024 * 1024;
|
|
34
|
+
function scryptAsync(password, salt, keylen) {
|
|
35
|
+
return new Promise((resolve, reject) => {
|
|
36
|
+
scryptCb(password, salt, keylen, { N: SCRYPT_N, r: SCRYPT_R, p: SCRYPT_P, maxmem: SCRYPT_MAXMEM }, (err, key) => {
|
|
37
|
+
if (err)
|
|
38
|
+
reject(err);
|
|
39
|
+
else
|
|
40
|
+
resolve(key);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function toBase64(b) {
|
|
45
|
+
return b.toString("base64").replace(/=+$/, "");
|
|
46
|
+
}
|
|
47
|
+
function fromBase64(s) {
|
|
48
|
+
if (s.length === 0 || s.length % 4 === 1)
|
|
49
|
+
return null;
|
|
50
|
+
if (!/^[A-Za-z0-9+/]+$/.test(s))
|
|
51
|
+
return null;
|
|
52
|
+
try {
|
|
53
|
+
const pad = s.length % 4 === 0 ? "" : "=".repeat(4 - (s.length % 4));
|
|
54
|
+
return Buffer.from(s + pad, "base64");
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Hash a password and return a self-describing PHC-style string. The
|
|
62
|
+
* returned string encodes the algorithm, parameters, salt, and digest so
|
|
63
|
+
* {@link passwordVerify} needs nothing else.
|
|
64
|
+
*
|
|
65
|
+
* Format: `$scrypt$N=131072,r=8,p=1$<salt-base64>$<hash-base64>`
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* import { passwordHash, passwordVerify } from "@daloyjs/core/hashing";
|
|
70
|
+
*
|
|
71
|
+
* const hash = await passwordHash("hunter2");
|
|
72
|
+
* await passwordVerify("hunter2", hash); // true
|
|
73
|
+
* await passwordVerify("wrong", hash); // false
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* @param password - The plaintext password. UTF-8 encoded internally.
|
|
77
|
+
* @returns A PHC-style hash string safe to store in a database column.
|
|
78
|
+
* @throws {TypeError} When `password` is empty.
|
|
79
|
+
* @since 0.15.0
|
|
80
|
+
*/
|
|
81
|
+
export async function passwordHash(password) {
|
|
82
|
+
if (typeof password !== "string" || password.length === 0) {
|
|
83
|
+
throw new TypeError("password must be a non-empty string");
|
|
84
|
+
}
|
|
85
|
+
const salt = randomBytes(SCRYPT_SALTLEN);
|
|
86
|
+
const key = await scryptAsync(Buffer.from(password, "utf8"), salt, SCRYPT_KEYLEN);
|
|
87
|
+
return `$scrypt$N=${SCRYPT_N},r=${SCRYPT_R},p=${SCRYPT_P}$${toBase64(salt)}$${toBase64(key)}`;
|
|
88
|
+
}
|
|
89
|
+
function parsePhc(s) {
|
|
90
|
+
// $scrypt$N=...,r=...,p=...$salt$hash
|
|
91
|
+
if (typeof s !== "string" || s.length < 32)
|
|
92
|
+
return null;
|
|
93
|
+
const parts = s.split("$");
|
|
94
|
+
if (parts.length !== 5)
|
|
95
|
+
return null;
|
|
96
|
+
if (parts[0] !== "" || parts[1] !== "scrypt")
|
|
97
|
+
return null;
|
|
98
|
+
const paramSection = parts[2] ?? "";
|
|
99
|
+
const paramMatch = /^N=(\d+),r=(\d+),p=(\d+)$/.exec(paramSection);
|
|
100
|
+
if (!paramMatch)
|
|
101
|
+
return null;
|
|
102
|
+
const N = Number(paramMatch[1]);
|
|
103
|
+
const r = Number(paramMatch[2]);
|
|
104
|
+
const p = Number(paramMatch[3]);
|
|
105
|
+
if (!Number.isInteger(N) || N <= 1 || (N & (N - 1)) !== 0)
|
|
106
|
+
return null;
|
|
107
|
+
if (!Number.isInteger(r) || r < 1)
|
|
108
|
+
return null;
|
|
109
|
+
if (!Number.isInteger(p) || p < 1)
|
|
110
|
+
return null;
|
|
111
|
+
if (N !== SCRYPT_N || r !== SCRYPT_R || p !== SCRYPT_P)
|
|
112
|
+
return null;
|
|
113
|
+
const salt = fromBase64(parts[3] ?? "");
|
|
114
|
+
const hash = fromBase64(parts[4] ?? "");
|
|
115
|
+
if (!salt || !hash || salt.length !== SCRYPT_SALTLEN || hash.length !== SCRYPT_KEYLEN)
|
|
116
|
+
return null;
|
|
117
|
+
return { N, r, p, salt, hash };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Verify a plaintext password against a PHC-style hash produced by
|
|
121
|
+
* {@link passwordHash} in constant time. Returns `false` (never throws)
|
|
122
|
+
* for any malformed input so the caller cannot distinguish "bad hash
|
|
123
|
+
* format" from "wrong password" through exception side channels.
|
|
124
|
+
*
|
|
125
|
+
* @param password - The plaintext password to check.
|
|
126
|
+
* @param storedHash - The PHC-style hash returned from {@link passwordHash}.
|
|
127
|
+
* @returns `true` when the password matches, `false` otherwise.
|
|
128
|
+
* @since 0.15.0
|
|
129
|
+
*/
|
|
130
|
+
export async function passwordVerify(password, storedHash) {
|
|
131
|
+
if (typeof password !== "string" || password.length === 0)
|
|
132
|
+
return false;
|
|
133
|
+
const parsed = parsePhc(storedHash);
|
|
134
|
+
if (!parsed)
|
|
135
|
+
return false;
|
|
136
|
+
let derived;
|
|
137
|
+
try {
|
|
138
|
+
derived = await new Promise((resolve, reject) => {
|
|
139
|
+
scryptCb(Buffer.from(password, "utf8"), parsed.salt, parsed.hash.length, { N: parsed.N, r: parsed.r, p: parsed.p, maxmem: SCRYPT_MAXMEM }, (err, key) => {
|
|
140
|
+
if (err)
|
|
141
|
+
reject(err);
|
|
142
|
+
else
|
|
143
|
+
resolve(key);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
if (derived.length !== parsed.hash.length)
|
|
151
|
+
return false;
|
|
152
|
+
return nodeTimingSafeEqual(derived, parsed.hash);
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=hashing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashing.js","sourceRoot":"","sources":["../src/hashing.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,11 +7,12 @@ export { HttpError, BadRequestError, ValidationError, NotFoundError, Unauthorize
|
|
|
7
7
|
export type { ProblemDetails, ProblemRenderOptions } from "./errors.js";
|
|
8
8
|
export type { StandardSchemaV1 } from "./schema.js";
|
|
9
9
|
export { validate, isStandardSchema } from "./schema.js";
|
|
10
|
-
export { readBodyLimited, safeJsonParse, sanitizeHeaderName, sanitizeHeaderValue, timingSafeEqual, randomId, } from "./security.js";
|
|
10
|
+
export { readBodyLimited, safeJsonParse, sanitizeHeaderName, sanitizeHeaderValue, timingSafeEqual, randomId, assertNoDuplicateSingletonHeaders, SMUGGLING_SINGLETON_HEADERS, verifyWebhookSignature, signWebhookPayload, } from "./security.js";
|
|
11
|
+
export type { WebhookHmacAlgorithm } from "./security.js";
|
|
11
12
|
export { requestId, secureHeaders, cors, rateLimit, timing, bearerAuth, basicAuth, csrf, } from "./middleware.js";
|
|
12
13
|
export type { RequestIdOptions, SecureHeadersOptions, CspDirectivesOptions, CorsOptions, RateLimitOptions, RateLimitStore, CsrfOptions, CsrfCookieOptions, BasicAuthOptions, } from "./middleware.js";
|
|
13
|
-
export { createLogger, noopLogger } from "./logger.js";
|
|
14
|
-
export type { Logger, LogLevel, ConsoleLoggerOptions } from "./logger.js";
|
|
14
|
+
export { createLogger, noopLogger, DEFAULT_REDACT_KEYS } from "./logger.js";
|
|
15
|
+
export type { Logger, LogLevel, ConsoleLoggerOptions, LoggerRedactionOptions, } from "./logger.js";
|
|
15
16
|
export type { ScalarJsonPrimitive, ScalarJsonValue, ScalarReferenceConfiguration, ScalarTheme, } from "./docs.js";
|
|
16
17
|
export { formatStartupBanner, printStartupBanner } from "./banner.js";
|
|
17
18
|
export type { StartupBannerLink, StartupBannerOptions } from "./banner.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,8BAA8B,EAAE,MAAM,UAAU,CAAC;AAC1D,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,GACd,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,WAAW,EACX,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,9 +3,9 @@ export { createApp } from "./app.js";
|
|
|
3
3
|
export { _resetPackageJsonCacheForTests } from "./app.js";
|
|
4
4
|
export { HttpError, BadRequestError, ValidationError, NotFoundError, UnauthorizedError, ForbiddenError, MethodNotAllowedError, PayloadTooLargeError, UnsupportedMediaTypeError, TooManyRequestsError, RequestTimeoutError, InternalError, } from "./errors.js";
|
|
5
5
|
export { validate, isStandardSchema } from "./schema.js";
|
|
6
|
-
export { readBodyLimited, safeJsonParse, sanitizeHeaderName, sanitizeHeaderValue, timingSafeEqual, randomId, } from "./security.js";
|
|
6
|
+
export { readBodyLimited, safeJsonParse, sanitizeHeaderName, sanitizeHeaderValue, timingSafeEqual, randomId, assertNoDuplicateSingletonHeaders, SMUGGLING_SINGLETON_HEADERS, verifyWebhookSignature, signWebhookPayload, } from "./security.js";
|
|
7
7
|
export { requestId, secureHeaders, cors, rateLimit, timing, bearerAuth, basicAuth, csrf, } from "./middleware.js";
|
|
8
|
-
export { createLogger, noopLogger } from "./logger.js";
|
|
8
|
+
export { createLogger, noopLogger, DEFAULT_REDACT_KEYS } from "./logger.js";
|
|
9
9
|
export { formatStartupBanner, printStartupBanner } from "./banner.js";
|
|
10
10
|
export { sseStream, sseResponse, ndjsonStream, ndjsonResponse, } from "./streaming.js";
|
|
11
11
|
export { httpBearerScheme, httpBasicScheme, apiKeyScheme, oauth2Scheme, openIdConnectScheme, } from "./security-schemes.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,8BAA8B,EAAE,MAAM,UAAU,CAAC;AAgC1D,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,8BAA8B,EAAE,MAAM,UAAU,CAAC;AAgC1D,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,QAAQ,EACR,iCAAiC,EACjC,2BAA2B,EAC3B,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,SAAS,EACT,aAAa,EACb,IAAI,EACJ,SAAS,EACT,MAAM,EACN,UAAU,EACV,SAAS,EACT,IAAI,GACL,MAAM,iBAAiB,CAAC;AAazB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAe5E,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtE,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,gBAAgB,CAAC;AASxB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAqB/B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAOvE,OAAO,EACL,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAUtB,OAAO,EACL,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AASxB,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAUtB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,OAAO,EACP,cAAc,EACd,SAAS,EACT,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,EACf,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
|
package/dist/logger.d.ts
CHANGED
|
@@ -15,12 +15,64 @@ export interface Logger {
|
|
|
15
15
|
fatal(obj: object | string, msg?: string): void;
|
|
16
16
|
child(bindings: Record<string, unknown>): Logger;
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Redaction configuration for {@link createLogger}. Keys are matched
|
|
20
|
+
* case-insensitively at any depth. Pass `false` to disable the safe
|
|
21
|
+
* defaults. When omitted, the secure-by-default set
|
|
22
|
+
* ({@link DEFAULT_REDACT_KEYS}) is used and string values shaped like a JWT
|
|
23
|
+
* (`eyJ...`) are also replaced.
|
|
24
|
+
*
|
|
25
|
+
* @since 0.15.0
|
|
26
|
+
*/
|
|
27
|
+
export interface LoggerRedactionOptions {
|
|
28
|
+
/** Additional case-insensitive keys to redact. Merged with the defaults unless `useDefaults` is `false`. */
|
|
29
|
+
keys?: readonly string[];
|
|
30
|
+
/** Replacement string. Default: `"[REDACTED]"`. */
|
|
31
|
+
censor?: string;
|
|
32
|
+
/** Include the {@link DEFAULT_REDACT_KEYS} list. Default: `true`. */
|
|
33
|
+
useDefaults?: boolean;
|
|
34
|
+
/** Replace string values shaped like a JWT (`eyJ...`) regardless of key. Default: `true`. */
|
|
35
|
+
redactJwtLikeStrings?: boolean;
|
|
36
|
+
/** Maximum recursion depth when walking nested objects. Default: 6. */
|
|
37
|
+
maxDepth?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Default set of header / field names redacted from every structured log
|
|
41
|
+
* record. These are the keys most commonly observed leaking credentials
|
|
42
|
+
* into log aggregators in real-world incidents. Matched case-insensitively.
|
|
43
|
+
*
|
|
44
|
+
* @since 0.15.0
|
|
45
|
+
*/
|
|
46
|
+
export declare const DEFAULT_REDACT_KEYS: readonly string[];
|
|
18
47
|
export interface ConsoleLoggerOptions {
|
|
19
48
|
level?: LogLevel;
|
|
20
49
|
bindings?: Record<string, unknown>;
|
|
21
50
|
/** Where to write. Defaults to process.stdout.write or console.log. */
|
|
22
51
|
write?: (line: string) => void;
|
|
52
|
+
/**
|
|
53
|
+
* Redact sensitive fields from log records before serialization. Pass
|
|
54
|
+
* `false` to disable the default redaction; pass an options object to
|
|
55
|
+
* extend it. Default: on, with {@link DEFAULT_REDACT_KEYS}.
|
|
56
|
+
*
|
|
57
|
+
* @since 0.15.0
|
|
58
|
+
*/
|
|
59
|
+
redact?: LoggerRedactionOptions | false;
|
|
60
|
+
}
|
|
61
|
+
interface ResolvedRedaction {
|
|
62
|
+
keys: Set<string>;
|
|
63
|
+
censor: string;
|
|
64
|
+
redactJwt: boolean;
|
|
65
|
+
maxDepth: number;
|
|
23
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Walk `record` in place, replacing any value whose key (case-insensitive)
|
|
69
|
+
* matches `cfg.keys` and any string value shaped like a JWT (when
|
|
70
|
+
* `cfg.redactJwt` is on) with `cfg.censor`. Exported for direct use by
|
|
71
|
+
* custom logger implementations that want the same defaults.
|
|
72
|
+
*
|
|
73
|
+
* @since 0.15.0
|
|
74
|
+
*/
|
|
75
|
+
export declare function redactRecord(record: Record<string, unknown>, cfg: ResolvedRedaction): Record<string, unknown>;
|
|
24
76
|
/**
|
|
25
77
|
* Build a structured JSON logger writing one record per line to stdout (or
|
|
26
78
|
* any sink you supply). Records always include `level`, `time`, and the
|
|
@@ -49,4 +101,5 @@ export declare function createLogger(opts?: ConsoleLoggerOptions): Logger;
|
|
|
49
101
|
* @since 0.1.0
|
|
50
102
|
*/
|
|
51
103
|
export declare const noopLogger: Logger;
|
|
104
|
+
export {};
|
|
52
105
|
//# sourceMappingURL=logger.d.ts.map
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE/E,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CAClD;AAWD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,uEAAuE;IACvE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE/E,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CAClD;AAWD;;;;;;;;GAQG;AACH,MAAM,WAAW,sBAAsB;IACrC,4GAA4G;IAC5G,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6FAA6F;IAC7F,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAe/C,CAAC;AAEH,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,uEAAuE;IACvE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,sBAAsB,GAAG,KAAK,CAAC;CACzC;AAID,UAAU,iBAAiB;IACzB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAmBD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,iBAAiB,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGzB;AAuCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,IAAI,GAAE,oBAAyB,GAAG,MAAM,CAoDpE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,MAWxB,CAAC"}
|
package/dist/logger.js
CHANGED
|
@@ -12,6 +12,97 @@ const LEVELS = {
|
|
|
12
12
|
error: 50,
|
|
13
13
|
fatal: 60,
|
|
14
14
|
};
|
|
15
|
+
/**
|
|
16
|
+
* Default set of header / field names redacted from every structured log
|
|
17
|
+
* record. These are the keys most commonly observed leaking credentials
|
|
18
|
+
* into log aggregators in real-world incidents. Matched case-insensitively.
|
|
19
|
+
*
|
|
20
|
+
* @since 0.15.0
|
|
21
|
+
*/
|
|
22
|
+
export const DEFAULT_REDACT_KEYS = Object.freeze([
|
|
23
|
+
"authorization",
|
|
24
|
+
"cookie",
|
|
25
|
+
"set-cookie",
|
|
26
|
+
"x-api-key",
|
|
27
|
+
"api-key",
|
|
28
|
+
"apikey",
|
|
29
|
+
"password",
|
|
30
|
+
"passwd",
|
|
31
|
+
"secret",
|
|
32
|
+
"token",
|
|
33
|
+
"access_token",
|
|
34
|
+
"refresh_token",
|
|
35
|
+
"id_token",
|
|
36
|
+
"client_secret",
|
|
37
|
+
]);
|
|
38
|
+
const JWT_LIKE_RE = /^eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/;
|
|
39
|
+
function resolveRedaction(opt) {
|
|
40
|
+
if (opt === false)
|
|
41
|
+
return null;
|
|
42
|
+
const cfg = opt ?? {};
|
|
43
|
+
const useDefaults = cfg.useDefaults ?? true;
|
|
44
|
+
const keys = new Set();
|
|
45
|
+
if (useDefaults)
|
|
46
|
+
for (const k of DEFAULT_REDACT_KEYS)
|
|
47
|
+
keys.add(k.toLowerCase());
|
|
48
|
+
if (cfg.keys)
|
|
49
|
+
for (const k of cfg.keys)
|
|
50
|
+
keys.add(k.toLowerCase());
|
|
51
|
+
return {
|
|
52
|
+
keys,
|
|
53
|
+
censor: cfg.censor ?? "[REDACTED]",
|
|
54
|
+
redactJwt: cfg.redactJwtLikeStrings ?? true,
|
|
55
|
+
maxDepth: cfg.maxDepth ?? 6,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Walk `record` in place, replacing any value whose key (case-insensitive)
|
|
60
|
+
* matches `cfg.keys` and any string value shaped like a JWT (when
|
|
61
|
+
* `cfg.redactJwt` is on) with `cfg.censor`. Exported for direct use by
|
|
62
|
+
* custom logger implementations that want the same defaults.
|
|
63
|
+
*
|
|
64
|
+
* @since 0.15.0
|
|
65
|
+
*/
|
|
66
|
+
export function redactRecord(record, cfg) {
|
|
67
|
+
walkRedact(record, cfg, 0, new WeakSet());
|
|
68
|
+
return record;
|
|
69
|
+
}
|
|
70
|
+
function walkRedact(node, cfg, depth, seen) {
|
|
71
|
+
if (depth > cfg.maxDepth)
|
|
72
|
+
return;
|
|
73
|
+
if (node === null || typeof node !== "object")
|
|
74
|
+
return;
|
|
75
|
+
if (seen.has(node))
|
|
76
|
+
return;
|
|
77
|
+
seen.add(node);
|
|
78
|
+
if (Array.isArray(node)) {
|
|
79
|
+
for (let i = 0; i < node.length; i++) {
|
|
80
|
+
const v = node[i];
|
|
81
|
+
if (cfg.redactJwt && typeof v === "string" && JWT_LIKE_RE.test(v)) {
|
|
82
|
+
node[i] = cfg.censor;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
walkRedact(v, cfg, depth + 1, seen);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const obj = node;
|
|
91
|
+
for (const key of Object.keys(obj)) {
|
|
92
|
+
const lower = key.toLowerCase();
|
|
93
|
+
if (cfg.keys.has(lower)) {
|
|
94
|
+
obj[key] = cfg.censor;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const v = obj[key];
|
|
98
|
+
if (cfg.redactJwt && typeof v === "string" && JWT_LIKE_RE.test(v)) {
|
|
99
|
+
obj[key] = cfg.censor;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
walkRedact(v, cfg, depth + 1, seen);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
15
106
|
/**
|
|
16
107
|
* Build a structured JSON logger writing one record per line to stdout (or
|
|
17
108
|
* any sink you supply). Records always include `level`, `time`, and the
|
|
@@ -35,6 +126,7 @@ export function createLogger(opts = {}) {
|
|
|
35
126
|
const level = opts.level ?? "info";
|
|
36
127
|
const threshold = LEVELS[level];
|
|
37
128
|
const bindings = opts.bindings ?? {};
|
|
129
|
+
const redaction = resolveRedaction(opts.redact);
|
|
38
130
|
const write = opts.write ??
|
|
39
131
|
(typeof process !== "undefined" && process.stdout?.write
|
|
40
132
|
? (line) => {
|
|
@@ -57,6 +149,8 @@ export function createLogger(opts = {}) {
|
|
|
57
149
|
if (msg !== undefined)
|
|
58
150
|
base.msg = msg;
|
|
59
151
|
}
|
|
152
|
+
if (redaction)
|
|
153
|
+
redactRecord(base, redaction);
|
|
60
154
|
try {
|
|
61
155
|
write(JSON.stringify(base));
|
|
62
156
|
}
|
|
@@ -73,7 +167,12 @@ export function createLogger(opts = {}) {
|
|
|
73
167
|
error: (o, m) => emit("error", o, m),
|
|
74
168
|
fatal: (o, m) => emit("fatal", o, m),
|
|
75
169
|
child(extra) {
|
|
76
|
-
return createLogger({
|
|
170
|
+
return createLogger({
|
|
171
|
+
level,
|
|
172
|
+
bindings: { ...bindings, ...extra },
|
|
173
|
+
write,
|
|
174
|
+
redact: opts.redact,
|
|
175
|
+
});
|
|
77
176
|
},
|
|
78
177
|
};
|
|
79
178
|
return logger;
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,MAAM,MAAM,GAA6B;IACvC,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;CACV,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/security.d.ts
CHANGED
|
@@ -87,4 +87,90 @@ export declare function timingSafeEqual(a: string, b: string): boolean;
|
|
|
87
87
|
* @since 0.1.0
|
|
88
88
|
*/
|
|
89
89
|
export declare function randomId(): string;
|
|
90
|
+
/**
|
|
91
|
+
* Header names that MUST appear at most once on a request per RFC 7230.
|
|
92
|
+
* Duplicate values for these headers are a classic HTTP-request-smuggling
|
|
93
|
+
* vector — front-end and back-end proxies can disagree on which value
|
|
94
|
+
* "wins", letting an attacker desync the connection.
|
|
95
|
+
*
|
|
96
|
+
* Exported for adapter authors that need the same set.
|
|
97
|
+
*
|
|
98
|
+
* @since 0.15.0
|
|
99
|
+
*/
|
|
100
|
+
export declare const SMUGGLING_SINGLETON_HEADERS: readonly string[];
|
|
101
|
+
/**
|
|
102
|
+
* Reject requests that carry more than one value for any header in
|
|
103
|
+
* {@link SMUGGLING_SINGLETON_HEADERS}. Because the standard `Headers`
|
|
104
|
+
* collection normalizes duplicates to a comma-joined string for these
|
|
105
|
+
* fields, the check is "value contains a comma at the top level".
|
|
106
|
+
*
|
|
107
|
+
* Throws {@link BadRequestError} so the framework returns a structured
|
|
108
|
+
* `400 problem+json` instead of forwarding a smuggling-class request.
|
|
109
|
+
*
|
|
110
|
+
* @since 0.15.0
|
|
111
|
+
*/
|
|
112
|
+
export declare function assertNoDuplicateSingletonHeaders(headers: Headers): void;
|
|
113
|
+
/**
|
|
114
|
+
* Supported HMAC digest algorithms for {@link verifyWebhookSignature} and
|
|
115
|
+
* {@link signWebhookPayload}. SHA-1 is deliberately excluded — it is
|
|
116
|
+
* cryptographically broken for adversarial collision resistance and
|
|
117
|
+
* unnecessary for new webhook integrations.
|
|
118
|
+
*
|
|
119
|
+
* @since 0.15.0
|
|
120
|
+
*/
|
|
121
|
+
export type WebhookHmacAlgorithm = "sha256" | "sha384" | "sha512";
|
|
122
|
+
/**
|
|
123
|
+
* Verify an HMAC signature for a webhook payload in constant time.
|
|
124
|
+
*
|
|
125
|
+
* Accepts the four common signature shapes seen in the wild:
|
|
126
|
+
*
|
|
127
|
+
* - Raw hex (`"a1b2..."`)
|
|
128
|
+
* - Raw base64 / base64url (`"oRY..."`, with or without padding)
|
|
129
|
+
* - Matching GitHub-style prefixed (`"sha256=..."`, `"sha384=..."`, `"sha512=..."`)
|
|
130
|
+
* - A `Uint8Array` of raw signature bytes
|
|
131
|
+
*
|
|
132
|
+
* Returns `false` for every malformed input — never throws on bad
|
|
133
|
+
* signatures so the caller cannot distinguish "wrong format" from "wrong
|
|
134
|
+
* key" through exception side channels.
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```ts
|
|
138
|
+
* import { verifyWebhookSignature } from "@daloyjs/core";
|
|
139
|
+
*
|
|
140
|
+
* app.route({
|
|
141
|
+
* method: "POST",
|
|
142
|
+
* path: "/webhook",
|
|
143
|
+
* handler: async ({ request }) => {
|
|
144
|
+
* const raw = new Uint8Array(await request.arrayBuffer());
|
|
145
|
+
* const sig = request.headers.get("x-hub-signature-256") ?? "";
|
|
146
|
+
* if (!await verifyWebhookSignature({
|
|
147
|
+
* payload: raw, signature: sig, secret: process.env.WEBHOOK_SECRET!,
|
|
148
|
+
* })) {
|
|
149
|
+
* return { status: 401 as const, body: { ok: false } };
|
|
150
|
+
* }
|
|
151
|
+
* // safe to parse
|
|
152
|
+
* },
|
|
153
|
+
* });
|
|
154
|
+
* ```
|
|
155
|
+
*
|
|
156
|
+
* @since 0.15.0
|
|
157
|
+
*/
|
|
158
|
+
export declare function verifyWebhookSignature(opts: {
|
|
159
|
+
payload: Uint8Array | string;
|
|
160
|
+
signature: string | Uint8Array;
|
|
161
|
+
secret: string | Uint8Array;
|
|
162
|
+
algorithm?: WebhookHmacAlgorithm;
|
|
163
|
+
}): Promise<boolean>;
|
|
164
|
+
/**
|
|
165
|
+
* Compute an HMAC signature over `payload` and return it hex-encoded. The
|
|
166
|
+
* companion of {@link verifyWebhookSignature}; useful for tests, for
|
|
167
|
+
* outbound webhook senders, and for diffing implementations.
|
|
168
|
+
*
|
|
169
|
+
* @since 0.15.0
|
|
170
|
+
*/
|
|
171
|
+
export declare function signWebhookPayload(opts: {
|
|
172
|
+
payload: Uint8Array | string;
|
|
173
|
+
secret: string | Uint8Array;
|
|
174
|
+
algorithm?: WebhookHmacAlgorithm;
|
|
175
|
+
}): Promise<string>;
|
|
90
176
|
//# sourceMappingURL=security.d.ts.map
|
package/dist/security.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC,CAsCrB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUnD;AAID;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAO7D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAUjC"}
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC,CAsCrB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUnD;AAID;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAO7D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAUjC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAGvD,CAAC;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAOxE;AAqFD;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC;IAC/B,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAClC,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BnB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAClC,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBlB"}
|
package/dist/security.js
CHANGED
|
@@ -173,4 +173,189 @@ export function randomId() {
|
|
|
173
173
|
// Last-resort fallback (should never trigger on Node 20+/Bun/Deno/Workers).
|
|
174
174
|
return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
175
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Header names that MUST appear at most once on a request per RFC 7230.
|
|
178
|
+
* Duplicate values for these headers are a classic HTTP-request-smuggling
|
|
179
|
+
* vector — front-end and back-end proxies can disagree on which value
|
|
180
|
+
* "wins", letting an attacker desync the connection.
|
|
181
|
+
*
|
|
182
|
+
* Exported for adapter authors that need the same set.
|
|
183
|
+
*
|
|
184
|
+
* @since 0.15.0
|
|
185
|
+
*/
|
|
186
|
+
export const SMUGGLING_SINGLETON_HEADERS = Object.freeze([
|
|
187
|
+
"host",
|
|
188
|
+
"content-length",
|
|
189
|
+
]);
|
|
190
|
+
/**
|
|
191
|
+
* Reject requests that carry more than one value for any header in
|
|
192
|
+
* {@link SMUGGLING_SINGLETON_HEADERS}. Because the standard `Headers`
|
|
193
|
+
* collection normalizes duplicates to a comma-joined string for these
|
|
194
|
+
* fields, the check is "value contains a comma at the top level".
|
|
195
|
+
*
|
|
196
|
+
* Throws {@link BadRequestError} so the framework returns a structured
|
|
197
|
+
* `400 problem+json` instead of forwarding a smuggling-class request.
|
|
198
|
+
*
|
|
199
|
+
* @since 0.15.0
|
|
200
|
+
*/
|
|
201
|
+
export function assertNoDuplicateSingletonHeaders(headers) {
|
|
202
|
+
for (const name of SMUGGLING_SINGLETON_HEADERS) {
|
|
203
|
+
const v = headers.get(name);
|
|
204
|
+
if (v !== null && v.indexOf(",") !== -1) {
|
|
205
|
+
throw new BadRequestError(`Duplicate ${name} header rejected`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const HEX_RE = /^[0-9a-fA-F]+$/;
|
|
210
|
+
const WEBHOOK_HMAC_ALGORITHMS = {
|
|
211
|
+
sha256: { hashName: "SHA-256", signatureBytes: 32 },
|
|
212
|
+
sha384: { hashName: "SHA-384", signatureBytes: 48 },
|
|
213
|
+
sha512: { hashName: "SHA-512", signatureBytes: 64 },
|
|
214
|
+
};
|
|
215
|
+
function resolveWebhookAlgorithm(algorithm) {
|
|
216
|
+
if (algorithm !== "sha256" && algorithm !== "sha384" && algorithm !== "sha512") {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
return { name: algorithm, ...WEBHOOK_HMAC_ALGORITHMS[algorithm] };
|
|
220
|
+
}
|
|
221
|
+
function hexToBytes(hex) {
|
|
222
|
+
if (hex.length === 0 || hex.length % 2 !== 0 || !HEX_RE.test(hex))
|
|
223
|
+
return null;
|
|
224
|
+
const out = new Uint8Array(hex.length / 2);
|
|
225
|
+
for (let i = 0; i < out.length; i++) {
|
|
226
|
+
out[i] = parseInt(hex.substr(i * 2, 2), 16);
|
|
227
|
+
}
|
|
228
|
+
return out;
|
|
229
|
+
}
|
|
230
|
+
function base64ToBytes(b64) {
|
|
231
|
+
// Accept both standard and URL-safe base64, with or without padding.
|
|
232
|
+
if (b64.length === 0 || b64.length % 4 === 1)
|
|
233
|
+
return null;
|
|
234
|
+
if (!/^[A-Za-z0-9+/_-]+={0,2}$/.test(b64))
|
|
235
|
+
return null;
|
|
236
|
+
try {
|
|
237
|
+
const normalized = b64.replace(/-/g, "+").replace(/_/g, "/");
|
|
238
|
+
const pad = normalized.length % 4 === 0 ? "" : "=".repeat(4 - (normalized.length % 4));
|
|
239
|
+
const bin = atob(normalized + pad);
|
|
240
|
+
const out = new Uint8Array(bin.length);
|
|
241
|
+
for (let i = 0; i < bin.length; i++)
|
|
242
|
+
out[i] = bin.charCodeAt(i);
|
|
243
|
+
return out;
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function bytesToHex(buf) {
|
|
250
|
+
let s = "";
|
|
251
|
+
for (let i = 0; i < buf.length; i++)
|
|
252
|
+
s += (buf[i] ?? 0).toString(16).padStart(2, "0");
|
|
253
|
+
return s;
|
|
254
|
+
}
|
|
255
|
+
function timingSafeEqualBytes(a, b) {
|
|
256
|
+
const len = Math.max(a.length, b.length);
|
|
257
|
+
let mismatch = a.length ^ b.length;
|
|
258
|
+
for (let i = 0; i < len; i++) {
|
|
259
|
+
mismatch |= (a[i] ?? 0) ^ (b[i] ?? 0);
|
|
260
|
+
}
|
|
261
|
+
return mismatch === 0;
|
|
262
|
+
}
|
|
263
|
+
function decodeWebhookSignature(signature, expected, expectedBytes) {
|
|
264
|
+
if (signature instanceof Uint8Array) {
|
|
265
|
+
return signature.length === expectedBytes ? signature : null;
|
|
266
|
+
}
|
|
267
|
+
let value = signature.trim();
|
|
268
|
+
const prefixed = /^(sha1|sha256|sha384|sha512)=/i.exec(value);
|
|
269
|
+
if (prefixed) {
|
|
270
|
+
const prefix = prefixed[1]?.toLowerCase();
|
|
271
|
+
if (prefix !== expected)
|
|
272
|
+
return null;
|
|
273
|
+
value = value.slice(prefixed[0].length);
|
|
274
|
+
}
|
|
275
|
+
const hex = hexToBytes(value);
|
|
276
|
+
if (hex && hex.length === expectedBytes)
|
|
277
|
+
return hex;
|
|
278
|
+
const b64 = base64ToBytes(value);
|
|
279
|
+
return b64 && b64.length === expectedBytes ? b64 : null;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Verify an HMAC signature for a webhook payload in constant time.
|
|
283
|
+
*
|
|
284
|
+
* Accepts the four common signature shapes seen in the wild:
|
|
285
|
+
*
|
|
286
|
+
* - Raw hex (`"a1b2..."`)
|
|
287
|
+
* - Raw base64 / base64url (`"oRY..."`, with or without padding)
|
|
288
|
+
* - Matching GitHub-style prefixed (`"sha256=..."`, `"sha384=..."`, `"sha512=..."`)
|
|
289
|
+
* - A `Uint8Array` of raw signature bytes
|
|
290
|
+
*
|
|
291
|
+
* Returns `false` for every malformed input — never throws on bad
|
|
292
|
+
* signatures so the caller cannot distinguish "wrong format" from "wrong
|
|
293
|
+
* key" through exception side channels.
|
|
294
|
+
*
|
|
295
|
+
* @example
|
|
296
|
+
* ```ts
|
|
297
|
+
* import { verifyWebhookSignature } from "@daloyjs/core";
|
|
298
|
+
*
|
|
299
|
+
* app.route({
|
|
300
|
+
* method: "POST",
|
|
301
|
+
* path: "/webhook",
|
|
302
|
+
* handler: async ({ request }) => {
|
|
303
|
+
* const raw = new Uint8Array(await request.arrayBuffer());
|
|
304
|
+
* const sig = request.headers.get("x-hub-signature-256") ?? "";
|
|
305
|
+
* if (!await verifyWebhookSignature({
|
|
306
|
+
* payload: raw, signature: sig, secret: process.env.WEBHOOK_SECRET!,
|
|
307
|
+
* })) {
|
|
308
|
+
* return { status: 401 as const, body: { ok: false } };
|
|
309
|
+
* }
|
|
310
|
+
* // safe to parse
|
|
311
|
+
* },
|
|
312
|
+
* });
|
|
313
|
+
* ```
|
|
314
|
+
*
|
|
315
|
+
* @since 0.15.0
|
|
316
|
+
*/
|
|
317
|
+
export async function verifyWebhookSignature(opts) {
|
|
318
|
+
const algo = resolveWebhookAlgorithm(opts.algorithm ?? "sha256");
|
|
319
|
+
if (!algo)
|
|
320
|
+
return false;
|
|
321
|
+
const payloadBytes = typeof opts.payload === "string"
|
|
322
|
+
? new TextEncoder().encode(opts.payload)
|
|
323
|
+
: opts.payload;
|
|
324
|
+
const secretBytes = typeof opts.secret === "string"
|
|
325
|
+
? new TextEncoder().encode(opts.secret)
|
|
326
|
+
: opts.secret;
|
|
327
|
+
const providedBytes = decodeWebhookSignature(opts.signature, algo.name, algo.signatureBytes);
|
|
328
|
+
if (!providedBytes)
|
|
329
|
+
return false;
|
|
330
|
+
const c = globalThis.crypto;
|
|
331
|
+
if (!c?.subtle)
|
|
332
|
+
return false;
|
|
333
|
+
const key = await c.subtle.importKey("raw", secretBytes, { name: "HMAC", hash: algo.hashName }, false, ["sign"]);
|
|
334
|
+
const computed = new Uint8Array(await c.subtle.sign("HMAC", key, payloadBytes));
|
|
335
|
+
return timingSafeEqualBytes(computed, providedBytes);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Compute an HMAC signature over `payload` and return it hex-encoded. The
|
|
339
|
+
* companion of {@link verifyWebhookSignature}; useful for tests, for
|
|
340
|
+
* outbound webhook senders, and for diffing implementations.
|
|
341
|
+
*
|
|
342
|
+
* @since 0.15.0
|
|
343
|
+
*/
|
|
344
|
+
export async function signWebhookPayload(opts) {
|
|
345
|
+
const algo = resolveWebhookAlgorithm(opts.algorithm ?? "sha256");
|
|
346
|
+
if (!algo)
|
|
347
|
+
throw new TypeError("unsupported webhook HMAC algorithm");
|
|
348
|
+
const payloadBytes = typeof opts.payload === "string"
|
|
349
|
+
? new TextEncoder().encode(opts.payload)
|
|
350
|
+
: opts.payload;
|
|
351
|
+
const secretBytes = typeof opts.secret === "string"
|
|
352
|
+
? new TextEncoder().encode(opts.secret)
|
|
353
|
+
: opts.secret;
|
|
354
|
+
const c = globalThis.crypto;
|
|
355
|
+
if (!c?.subtle)
|
|
356
|
+
throw new Error("WebCrypto unavailable: cannot sign webhook payload");
|
|
357
|
+
const key = await c.subtle.importKey("raw", secretBytes, { name: "HMAC", hash: algo.hashName }, false, ["sign"]);
|
|
358
|
+
const computed = new Uint8Array(await c.subtle.sign("HMAC", key, payloadBytes));
|
|
359
|
+
return bytesToHex(computed);
|
|
360
|
+
}
|
|
176
361
|
//# sourceMappingURL=security.js.map
|
package/dist/security.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAY,EACZ,KAAa;IAEb,iDAAiD;IACjD,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,wBAAwB,CAAC,CAAC;QACtF,IAAI,CAAC,GAAG,KAAK;YAAE,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAExC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACpC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,iDAAiD;IACjD,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI;YAAE,MAAM;QAChB,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;QAC1B,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;YACD,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACnB,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAE1E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACrC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAG,gCAAgC,CAAC;AAExD;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,eAAe,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,qEAAqE;IACrE,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,eAAe,CAAC,sBAAsB,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,CAAS;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,QAAQ,KAAK,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,QAAQ;IACtB,MAAM,CAAC,GAAwB,UAAkB,CAAC,MAAM,CAAC;IACzD,IAAI,CAAC,EAAE,UAAU;QAAE,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;IACzC,IAAI,CAAC,EAAE,eAAe,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,4EAA4E;IAC5E,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC"}
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@daloyjs/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "DaloyJS is a runtime-portable, contract-first TypeScript web framework with built-in OpenAPI (Hey API), typed client generation, large-scale maintainability, and security-first defaults. Hono-grade portability, Elysia-grade DX, FastAPI-grade docs, Fastify-grade ops — distributed via pnpm.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -120,6 +120,10 @@
|
|
|
120
120
|
"./banner": {
|
|
121
121
|
"types": "./dist/banner.d.ts",
|
|
122
122
|
"import": "./dist/banner.js"
|
|
123
|
+
},
|
|
124
|
+
"./hashing": {
|
|
125
|
+
"types": "./dist/hashing.d.ts",
|
|
126
|
+
"import": "./dist/hashing.js"
|
|
123
127
|
}
|
|
124
128
|
},
|
|
125
129
|
"devDependencies": {
|
|
@@ -143,7 +147,7 @@
|
|
|
143
147
|
"bench": "node --import tsx bench/router.bench.ts",
|
|
144
148
|
"test": "node --import tsx --test tests/**/*.test.ts",
|
|
145
149
|
"coverage": "node --import tsx --test --experimental-test-coverage --test-coverage-include='src/**' --test-coverage-lines=99.9 --test-coverage-functions=100 tests/**/*.test.ts",
|
|
146
|
-
"coverage:branches": "tsc -p tsconfig.coverage.json && node --test --experimental-test-coverage --test-coverage-include='dist-coverage/src/**' --test-coverage-branches=
|
|
150
|
+
"coverage:branches": "tsc -p tsconfig.coverage.json && node --test --experimental-test-coverage --test-coverage-include='dist-coverage/src/**' --test-coverage-branches=93 dist-coverage/tests/**/*.test.js",
|
|
147
151
|
"typecheck": "tsc --noEmit",
|
|
148
152
|
"gen:openapi": "node --import tsx scripts/dump-openapi.ts",
|
|
149
153
|
"gen:client": "openapi-ts",
|