dbsc-toolkit 2.14.0 → 2.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/dist/client/index.d.ts +3 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +33 -15
- package/dist/client/index.js.map +1 -1
- package/dist/client/installFetchInterceptor.d.ts +2 -0
- package/dist/client/installFetchInterceptor.d.ts.map +1 -1
- package/dist/client/installFetchInterceptor.js +1 -0
- package/dist/client/installFetchInterceptor.js.map +1 -1
- package/dist/client/wrapFetch.d.ts +7 -0
- package/dist/client/wrapFetch.d.ts.map +1 -1
- package/dist/client/wrapFetch.js +4 -2
- package/dist/client/wrapFetch.js.map +1 -1
- package/dist/core/bound/proof.d.ts +7 -0
- package/dist/core/bound/proof.d.ts.map +1 -1
- package/dist/core/bound/proof.js +29 -3
- package/dist/core/bound/proof.js.map +1 -1
- package/dist/core/bound/registration.d.ts +8 -1
- package/dist/core/bound/registration.d.ts.map +1 -1
- package/dist/core/bound/registration.js +30 -11
- package/dist/core/bound/registration.js.map +1 -1
- package/dist/core/bound/verify.d.ts.map +1 -1
- package/dist/core/bound/verify.js +3 -0
- package/dist/core/bound/verify.js.map +1 -1
- package/dist/core/crypto/jwk.d.ts.map +1 -1
- package/dist/core/crypto/jwk.js +9 -0
- package/dist/core/crypto/jwk.js.map +1 -1
- package/dist/core/dpop/guard.d.ts +9 -0
- package/dist/core/dpop/guard.d.ts.map +1 -1
- package/dist/core/dpop/guard.js +18 -2
- package/dist/core/dpop/guard.js.map +1 -1
- package/dist/core/errors.d.ts +2 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +6 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/index.d.ts +6 -5
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +4 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/protect-policy.d.ts +30 -28
- package/dist/core/protect-policy.d.ts.map +1 -1
- package/dist/core/protect-policy.js +25 -0
- package/dist/core/protect-policy.js.map +1 -1
- package/dist/core/protocol/body.d.ts +9 -0
- package/dist/core/protocol/body.d.ts.map +1 -0
- package/dist/core/protocol/body.js +44 -0
- package/dist/core/protocol/body.js.map +1 -0
- package/dist/core/protocol/registration.d.ts.map +1 -1
- package/dist/core/protocol/registration.js +7 -5
- package/dist/core/protocol/registration.js.map +1 -1
- package/dist/core/protocol/start-binding.d.ts +16 -0
- package/dist/core/protocol/start-binding.d.ts.map +1 -0
- package/dist/core/protocol/start-binding.js +21 -0
- package/dist/core/protocol/start-binding.js.map +1 -0
- package/dist/core/types.d.ts +17 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/electron/index.d.ts +7 -0
- package/dist/electron/index.d.ts.map +1 -1
- package/dist/electron/index.js +13 -2
- package/dist/electron/index.js.map +1 -1
- package/dist/express/create-dbsc.d.ts +1 -1
- package/dist/express/create-dbsc.d.ts.map +1 -1
- package/dist/express/index.d.ts +0 -7
- package/dist/express/index.d.ts.map +1 -1
- package/dist/express/index.js +20 -23
- package/dist/express/index.js.map +1 -1
- package/dist/express/proof.d.ts +2 -0
- package/dist/express/proof.d.ts.map +1 -1
- package/dist/express/proof.js +8 -14
- package/dist/express/proof.js.map +1 -1
- package/dist/express/require-dpop.js +2 -1
- package/dist/express/require-dpop.js.map +1 -1
- package/dist/express/require-proof.d.ts +2 -2
- package/dist/express/require-proof.d.ts.map +1 -1
- package/dist/express/require-proof.js +8 -62
- package/dist/express/require-proof.js.map +1 -1
- package/dist/fastify/create-dbsc.d.ts +1 -1
- package/dist/fastify/create-dbsc.d.ts.map +1 -1
- package/dist/fastify/index.d.ts +0 -3
- package/dist/fastify/index.d.ts.map +1 -1
- package/dist/fastify/index.js +18 -23
- package/dist/fastify/index.js.map +1 -1
- package/dist/fastify/proof.d.ts +2 -0
- package/dist/fastify/proof.d.ts.map +1 -1
- package/dist/fastify/proof.js +6 -14
- package/dist/fastify/proof.js.map +1 -1
- package/dist/fastify/require-dpop.d.ts.map +1 -1
- package/dist/fastify/require-dpop.js +1 -0
- package/dist/fastify/require-dpop.js.map +1 -1
- package/dist/fastify/require-proof.d.ts +2 -2
- package/dist/fastify/require-proof.d.ts.map +1 -1
- package/dist/fastify/require-proof.js +4 -43
- package/dist/fastify/require-proof.js.map +1 -1
- package/dist/hono/create-dbsc.d.ts +1 -1
- package/dist/hono/create-dbsc.d.ts.map +1 -1
- package/dist/hono/index.d.ts +0 -3
- package/dist/hono/index.d.ts.map +1 -1
- package/dist/hono/index.js +31 -29
- package/dist/hono/index.js.map +1 -1
- package/dist/hono/proof.d.ts +2 -0
- package/dist/hono/proof.d.ts.map +1 -1
- package/dist/hono/proof.js +2 -2
- package/dist/hono/proof.js.map +1 -1
- package/dist/hono/require-dpop.d.ts.map +1 -1
- package/dist/hono/require-dpop.js +1 -0
- package/dist/hono/require-dpop.js.map +1 -1
- package/dist/hono/require-proof.d.ts +2 -2
- package/dist/hono/require-proof.d.ts.map +1 -1
- package/dist/hono/require-proof.js +4 -42
- package/dist/hono/require-proof.js.map +1 -1
- package/dist/koa/create-dbsc.d.ts +1 -1
- package/dist/koa/create-dbsc.d.ts.map +1 -1
- package/dist/koa/require-proof.d.ts +4 -2
- package/dist/koa/require-proof.d.ts.map +1 -1
- package/dist/koa/require-proof.js +21 -48
- package/dist/koa/require-proof.js.map +1 -1
- package/dist/nestjs/index.d.ts +1 -1
- package/dist/nestjs/index.d.ts.map +1 -1
- package/dist/nestjs/index.js +12 -50
- package/dist/nestjs/index.js.map +1 -1
- package/dist/nextjs/index.d.ts.map +1 -1
- package/dist/nextjs/index.js +37 -26
- package/dist/nextjs/index.js.map +1 -1
- package/dist/nextjs/proof.d.ts +2 -0
- package/dist/nextjs/proof.d.ts.map +1 -1
- package/dist/nextjs/proof.js +2 -2
- package/dist/nextjs/proof.js.map +1 -1
- package/dist/nextjs/require-dpop.d.ts.map +1 -1
- package/dist/nextjs/require-dpop.js +1 -0
- package/dist/nextjs/require-dpop.js.map +1 -1
- package/dist/nextjs/require-proof.d.ts +1 -1
- package/dist/nextjs/require-proof.d.ts.map +1 -1
- package/dist/nextjs/require-proof.js +12 -43
- package/dist/nextjs/require-proof.js.map +1 -1
- package/dist/node/create-dbsc.d.ts +1 -1
- package/dist/node/create-dbsc.d.ts.map +1 -1
- package/dist/node/index.d.ts +13 -4
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +45 -30
- package/dist/node/index.js.map +1 -1
- package/dist/node/require-dpop.d.ts.map +1 -1
- package/dist/node/require-dpop.js +1 -0
- package/dist/node/require-dpop.js.map +1 -1
- package/dist/node/require-proof.d.ts +3 -1
- package/dist/node/require-proof.d.ts.map +1 -1
- package/dist/node/require-proof.js +25 -58
- package/dist/node/require-proof.js.map +1 -1
- package/dist/storage/memory/index.d.ts +1 -1
- package/dist/storage/memory/index.d.ts.map +1 -1
- package/dist/storage/memory/index.js +7 -3
- package/dist/storage/memory/index.js.map +1 -1
- package/dist/storage/postgres/index.d.ts +7 -0
- package/dist/storage/postgres/index.d.ts.map +1 -1
- package/dist/storage/postgres/index.js +17 -1
- package/dist/storage/postgres/index.js.map +1 -1
- package/dist/storage/redis/index.d.ts +3 -0
- package/dist/storage/redis/index.d.ts.map +1 -1
- package/dist/storage/redis/index.js +31 -2
- package/dist/storage/redis/index.js.map +1 -1
- package/dist/sveltekit/index.d.ts +0 -3
- package/dist/sveltekit/index.d.ts.map +1 -1
- package/dist/sveltekit/index.js +31 -24
- package/dist/sveltekit/index.js.map +1 -1
- package/dist/sveltekit/require-dpop.d.ts.map +1 -1
- package/dist/sveltekit/require-dpop.js +1 -0
- package/dist/sveltekit/require-dpop.js.map +1 -1
- package/dist/sveltekit/require-proof.d.ts +3 -8
- package/dist/sveltekit/require-proof.d.ts.map +1 -1
- package/dist/sveltekit/require-proof.js +6 -62
- package/dist/sveltekit/require-proof.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/protocol/native-proof-guard.d.ts +0 -58
- package/dist/core/protocol/native-proof-guard.d.ts.map +0 -1
- package/dist/core/protocol/native-proof-guard.js +0 -60
- package/dist/core/protocol/native-proof-guard.js.map +0 -1
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type { CookieScope, CookieScopeOptions } from "../cookies/options.js";
|
|
2
|
-
import type { StorageAdapter } from "../types.js";
|
|
3
|
-
/** Shared TTL for the `__Host-dbsc-challenge` cookie the handshake round-trips. */
|
|
4
|
-
export declare const FRESH_PROOF_CHALLENGE_TTL_MS: number;
|
|
5
|
-
export interface FreshProofScope {
|
|
6
|
-
secure: boolean;
|
|
7
|
-
cookieScope?: CookieScope;
|
|
8
|
-
cookieDomain?: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Resolve whether the native fresh-proof handshake should run for this request.
|
|
12
|
-
* Default on when the polyfill is off (no bound key to verify per request);
|
|
13
|
-
* the explicit `freshProof` option overrides; an explicit `allowDbscWithoutProof:
|
|
14
|
-
* true` forces relax. Adapters call this so the policy is identical everywhere.
|
|
15
|
-
*/
|
|
16
|
-
export declare function freshProofActive(args: {
|
|
17
|
-
tier: string;
|
|
18
|
-
boundEnabled: boolean | undefined;
|
|
19
|
-
freshProof: boolean | undefined;
|
|
20
|
-
allowDbscWithoutProof: boolean | undefined;
|
|
21
|
-
}): boolean;
|
|
22
|
-
/** The challenge cookie name for a given scope (`__Host-dbsc-challenge` / `dbsc-challenge`). */
|
|
23
|
-
export declare function challengeCookieName(scope: CookieScopeOptions): string;
|
|
24
|
-
export interface NativeProofGuardRequest {
|
|
25
|
-
sessionId: string;
|
|
26
|
-
/** The `Secure-Session-Response` JWS the browser sent on retry, if any. */
|
|
27
|
-
secSessionResponseHeader: string | undefined;
|
|
28
|
-
/** The challenge JTI the browser was previously handed (from the challenge cookie). */
|
|
29
|
-
expectedJti: string | undefined;
|
|
30
|
-
}
|
|
31
|
-
export type NativeProofGuardResult =
|
|
32
|
-
/** Proof verified against the native key; let the request through. */
|
|
33
|
-
{
|
|
34
|
-
kind: "pass";
|
|
35
|
-
}
|
|
36
|
-
/** No proof yet (or no prior challenge). Send 403 + this challenge so Chrome refreshes and retries. */
|
|
37
|
-
| {
|
|
38
|
-
kind: "challenge";
|
|
39
|
-
jti: string;
|
|
40
|
-
}
|
|
41
|
-
/** A proof was sent but failed verification. Reject; do not re-challenge (avoids loops). */
|
|
42
|
-
| {
|
|
43
|
-
kind: "reject";
|
|
44
|
-
error: string;
|
|
45
|
-
code: string;
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* Framework-agnostic core of `requireProof({ freshProof: true })` on a native
|
|
49
|
-
* `dbsc` session. Drives the W3C 403-challenge handshake: when no proof is
|
|
50
|
-
* present it issues a challenge for the adapter to return as 403 +
|
|
51
|
-
* `Secure-Session-Challenge`; when a proof is present it verifies it against the
|
|
52
|
-
* stored native key by reusing `handleRefresh` (single source of truth for
|
|
53
|
-
* native-proof verification — including challenge single-use and demoting the
|
|
54
|
-
* session to `none` on a bad signature). A stolen cookie cannot produce a valid
|
|
55
|
-
* proof, so it ends up rejected per request.
|
|
56
|
-
*/
|
|
57
|
-
export declare function guardNativeProof(req: NativeProofGuardRequest, storage: StorageAdapter): Promise<NativeProofGuardResult>;
|
|
58
|
-
//# sourceMappingURL=native-proof-guard.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"native-proof-guard.d.ts","sourceRoot":"","sources":["../../../src/core/protocol/native-proof-guard.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,mFAAmF;AACnF,eAAO,MAAM,4BAA4B,QAAgB,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,qBAAqB,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5C,GAAG,OAAO,CAIV;AAED,gGAAgG;AAChG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAErE;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,uFAAuF;IACvF,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,MAAM,sBAAsB;AAChC,sEAAsE;AACpE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;AAClB,uGAAuG;GACrG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE;AACpC,4FAA4F;GAC1F;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,uBAAuB,EAC5B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,sBAAsB,CAAC,CA4BjC"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { handleRefresh } from "./refresh.js";
|
|
2
|
-
import { issueChallenge } from "./challenge.js";
|
|
3
|
-
import { cookieNames } from "../cookies/options.js";
|
|
4
|
-
import { DbscVerificationError } from "../errors.js";
|
|
5
|
-
/** Shared TTL for the `__Host-dbsc-challenge` cookie the handshake round-trips. */
|
|
6
|
-
export const FRESH_PROOF_CHALLENGE_TTL_MS = 5 * 60 * 1000;
|
|
7
|
-
/**
|
|
8
|
-
* Resolve whether the native fresh-proof handshake should run for this request.
|
|
9
|
-
* Default on when the polyfill is off (no bound key to verify per request);
|
|
10
|
-
* the explicit `freshProof` option overrides; an explicit `allowDbscWithoutProof:
|
|
11
|
-
* true` forces relax. Adapters call this so the policy is identical everywhere.
|
|
12
|
-
*/
|
|
13
|
-
export function freshProofActive(args) {
|
|
14
|
-
if (args.tier !== "dbsc")
|
|
15
|
-
return false;
|
|
16
|
-
if (args.allowDbscWithoutProof === true)
|
|
17
|
-
return false;
|
|
18
|
-
return args.freshProof ?? args.boundEnabled === false;
|
|
19
|
-
}
|
|
20
|
-
/** The challenge cookie name for a given scope (`__Host-dbsc-challenge` / `dbsc-challenge`). */
|
|
21
|
-
export function challengeCookieName(scope) {
|
|
22
|
-
return cookieNames(scope).challenge;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Framework-agnostic core of `requireProof({ freshProof: true })` on a native
|
|
26
|
-
* `dbsc` session. Drives the W3C 403-challenge handshake: when no proof is
|
|
27
|
-
* present it issues a challenge for the adapter to return as 403 +
|
|
28
|
-
* `Secure-Session-Challenge`; when a proof is present it verifies it against the
|
|
29
|
-
* stored native key by reusing `handleRefresh` (single source of truth for
|
|
30
|
-
* native-proof verification — including challenge single-use and demoting the
|
|
31
|
-
* session to `none` on a bad signature). A stolen cookie cannot produce a valid
|
|
32
|
-
* proof, so it ends up rejected per request.
|
|
33
|
-
*/
|
|
34
|
-
export async function guardNativeProof(req, storage) {
|
|
35
|
-
// No proof header, or no prior challenge to verify against → issue one and ask
|
|
36
|
-
// the browser to refresh. Chrome signs it with the hardware key and retries.
|
|
37
|
-
if (!req.secSessionResponseHeader || !req.expectedJti) {
|
|
38
|
-
const challenge = await issueChallenge(req.sessionId, storage);
|
|
39
|
-
return { kind: "challenge", jti: challenge.jti };
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
await handleRefresh({
|
|
43
|
-
sessionId: req.sessionId,
|
|
44
|
-
secSessionResponseHeader: req.secSessionResponseHeader,
|
|
45
|
-
expectedJti: req.expectedJti,
|
|
46
|
-
}, storage);
|
|
47
|
-
return { kind: "pass" };
|
|
48
|
-
}
|
|
49
|
-
catch (err) {
|
|
50
|
-
// Proof present but invalid (forged/expired/replayed). handleRefresh already
|
|
51
|
-
// consumed the challenge and, on a bad signature, demoted the session to
|
|
52
|
-
// `none`. Reject without re-challenging so a broken or hostile client can't
|
|
53
|
-
// loop; the next request sees `none` and 403s at the tier check.
|
|
54
|
-
if (err instanceof DbscVerificationError) {
|
|
55
|
-
return { kind: "reject", error: err.message, code: err.code };
|
|
56
|
-
}
|
|
57
|
-
throw err;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=native-proof-guard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"native-proof-guard.js","sourceRoot":"","sources":["../../../src/core/protocol/native-proof-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAGrD,mFAAmF;AACnF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAQ1D;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAKhC;IACC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC;AACxD,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,mBAAmB,CAAC,KAAyB;IAC3D,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AACtC,CAAC;AAkBD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAA4B,EAC5B,OAAuB;IAEvB,+EAA+E;IAC/E,6EAA6E;IAC7E,IAAI,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;IACnD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,CACjB;YACE,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,wBAAwB,EAAE,GAAG,CAAC,wBAAwB;YACtD,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B,EACD,OAAO,CACR,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6EAA6E;QAC7E,yEAAyE;QACzE,4EAA4E;QAC5E,iEAAiE;QACjE,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;YACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QAChE,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|