@hearth-auth/sdk 3.0.0 → 3.1.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 +99 -36
- package/dist/browser-auth.d.ts +40 -7
- package/dist/browser-auth.js +93 -58
- package/dist/browser-auth.js.map +1 -1
- package/dist/generated/admin/schema.d.ts +2 -0
- package/dist/hearth-client.d.ts +15 -3
- package/dist/hearth-client.js +14 -6
- package/dist/hearth-client.js.map +1 -1
- package/dist/hearth.d.ts +38 -24
- package/dist/hearth.js +45 -59
- package/dist/hearth.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/jwks-client.d.ts +24 -9
- package/dist/jwks-client.js +28 -7
- package/dist/jwks-client.js.map +1 -1
- package/dist/react.d.ts +6 -6
- package/dist/react.js +41 -14
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
package/dist/hearth-client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AuthorizationModeMismatchError, ConfigurationError, DiscoveryError, OAuthFlowError, TokenExpiredError, } from "./errors.js";
|
|
2
|
-
import { JwksClient } from "./jwks-client.js";
|
|
2
|
+
import { DEFAULT_AUDIENCE, JwksClient } from "./jwks-client.js";
|
|
3
3
|
import { IntrospectionClient } from "./introspection-client.js";
|
|
4
4
|
import { buildAuthorizationUrl, generateCodeChallenge, generateCodeVerifier } from "./pkce.js";
|
|
5
5
|
/**
|
|
@@ -17,6 +17,8 @@ export class HearthClient {
|
|
|
17
17
|
issuerUrl;
|
|
18
18
|
clientId;
|
|
19
19
|
clientSecret;
|
|
20
|
+
/** Expected `aud` of verified access tokens. Default `"hearth"`. */
|
|
21
|
+
audience;
|
|
20
22
|
jwksTtl;
|
|
21
23
|
introspectionEndpointOverride;
|
|
22
24
|
/** HTTP timeout in milliseconds applied to all outbound fetch calls. */
|
|
@@ -42,6 +44,10 @@ export class HearthClient {
|
|
|
42
44
|
this.issuerUrl = config.issuerUrl.replace(/\/$/, "");
|
|
43
45
|
this.clientId = config.clientId;
|
|
44
46
|
this.clientSecret = config.clientSecret;
|
|
47
|
+
if (config.audience === "") {
|
|
48
|
+
throw new ConfigurationError('audience must not be empty — leave it unset for the default "hearth"');
|
|
49
|
+
}
|
|
50
|
+
this.audience = config.audience ?? DEFAULT_AUDIENCE;
|
|
45
51
|
this.jwksTtl = config.jwksTtl;
|
|
46
52
|
this.introspectionEndpointOverride = config.introspectionEndpoint;
|
|
47
53
|
this.httpTimeout = config.httpTimeout ?? 10_000;
|
|
@@ -121,7 +127,7 @@ export class HearthClient {
|
|
|
121
127
|
// Pin iss/aud on the client itself, so a caller who reaches for the
|
|
122
128
|
// exported JwksClient still gets them checked.
|
|
123
129
|
issuer: this.issuerUrl,
|
|
124
|
-
audience: this.
|
|
130
|
+
audience: this.audience,
|
|
125
131
|
ttl: this.jwksTtl,
|
|
126
132
|
httpTimeout: this.httpTimeout,
|
|
127
133
|
});
|
|
@@ -230,21 +236,23 @@ export class HearthClient {
|
|
|
230
236
|
* 2. `exp` claim (rejects expired tokens).
|
|
231
237
|
* 3. `nbf` claim (rejects post-dated tokens).
|
|
232
238
|
* 4. `iss` claim (must match configured `issuerUrl`).
|
|
233
|
-
* 5. `aud` claim (
|
|
239
|
+
* 5. `aud` claim (must contain the configured `audience`, default `"hearth"`).
|
|
240
|
+
* 6. `iat` claim (rejects a token issued in the future).
|
|
234
241
|
*
|
|
235
|
-
* `exp` and `
|
|
242
|
+
* `exp`, `nbf` and `iat` allow a 5-second clock skew.
|
|
236
243
|
*
|
|
237
244
|
* @throws {@link TokenExpiredError} — token is expired.
|
|
245
|
+
* @throws {@link TokenNotYetValidError} — `nbf` or `iat` is in the future.
|
|
238
246
|
* @throws {@link TokenInvalidError} — signature invalid or JWT malformed.
|
|
239
247
|
* @throws {@link TokenIssuerError} — issuer does not match `issuerUrl`.
|
|
240
|
-
* @throws {@link TokenAudienceError} — audience does not include `
|
|
248
|
+
* @throws {@link TokenAudienceError} — audience does not include `audience`.
|
|
241
249
|
* @throws {@link JWKSFetchError} — JWKS endpoint unreachable.
|
|
242
250
|
*/
|
|
243
251
|
async verifyToken(token) {
|
|
244
252
|
const jc = await this.jwksClient();
|
|
245
253
|
return jc.verify(token, {
|
|
246
254
|
issuer: this.issuerUrl,
|
|
247
|
-
audience: this.
|
|
255
|
+
audience: this.audience,
|
|
248
256
|
});
|
|
249
257
|
}
|
|
250
258
|
// ── §4.5 — OAuth Flows ───────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hearth-client.js","sourceRoot":"","sources":["../src/hearth-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hearth-client.js","sourceRoot":"","sources":["../src/hearth-client.ts"],"names":[],"mappings":"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"}
|
package/dist/hearth.d.ts
CHANGED
|
@@ -6,11 +6,22 @@ export interface HearthOptions {
|
|
|
6
6
|
/** Realm ID to scope all requests to. */
|
|
7
7
|
realmId: string;
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* The realm's issuer URL, e.g. `https://hearth.example.com/realms/acme`.
|
|
10
|
+
* Tokens are verified against the JWKS this issuer publishes, and their
|
|
11
|
+
* `iss` must equal it.
|
|
12
12
|
*/
|
|
13
|
-
|
|
13
|
+
issuerUrl: string;
|
|
14
|
+
/**
|
|
15
|
+
* Expected `aud` of the token: the name of the API that checks it
|
|
16
|
+
* (RFC 9068 §4). Default `"hearth"`, the audience Hearth mints when a
|
|
17
|
+
* client names no resource. The check is always on.
|
|
18
|
+
*/
|
|
19
|
+
audience?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Called on every `hasPermission` / `hasRole` / `inGroup` / `inOrg`
|
|
22
|
+
* check. Return `null`/`undefined` when the caller is unauthenticated.
|
|
23
|
+
*/
|
|
24
|
+
getToken: () => string | null | undefined | Promise<string | null | undefined>;
|
|
14
25
|
/**
|
|
15
26
|
* Optional session-version cache configuration (RFC HEA-930 § 13).
|
|
16
27
|
*
|
|
@@ -40,42 +51,45 @@ export interface HearthHttpClient {
|
|
|
40
51
|
/**
|
|
41
52
|
* RBAC claim-oriented facade over the Hearth SDK.
|
|
42
53
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
54
|
+
* Every predicate verifies the token returned by `getToken()` before it
|
|
55
|
+
* reads a claim: the EdDSA signature against the realm JWKS (fetched once,
|
|
56
|
+
* then cached), plus `exp`, `nbf`, `iat`, `iss` and `aud`. A token that is
|
|
57
|
+
* absent or does not verify holds nothing, and the predicate resolves to
|
|
58
|
+
* `false`.
|
|
47
59
|
*
|
|
48
60
|
* When `sessionVersions.enabled` is `true`, the predicates additionally
|
|
49
|
-
* validate the `sv` claim and may
|
|
50
|
-
* or {@link SessionVersionCacheStaleError}
|
|
61
|
+
* validate the `sv` claim and may reject with
|
|
62
|
+
* {@link SessionVersionRevokedError} or {@link SessionVersionCacheStaleError}
|
|
63
|
+
* (see RFC HEA-930 § 8).
|
|
51
64
|
*/
|
|
52
65
|
export interface HearthFacade {
|
|
53
66
|
/**
|
|
54
|
-
*
|
|
67
|
+
* Resolves `true` iff the token verifies and its `permissions` claim
|
|
68
|
+
* contains `permission`.
|
|
55
69
|
*
|
|
56
|
-
* May
|
|
70
|
+
* May reject with {@link SessionVersionRevokedError} or
|
|
57
71
|
* {@link SessionVersionCacheStaleError} when session-version tracking
|
|
58
72
|
* is enabled and the token's `sv` claim fails validation.
|
|
59
73
|
*/
|
|
60
|
-
hasPermission(permission: string): boolean
|
|
74
|
+
hasPermission(permission: string): Promise<boolean>;
|
|
61
75
|
/**
|
|
62
|
-
*
|
|
76
|
+
* Resolves `true` iff the token verifies and its `roles` claim contains `role`.
|
|
63
77
|
*
|
|
64
|
-
* Same session-version
|
|
78
|
+
* Same session-version semantics as {@link hasPermission}.
|
|
65
79
|
*/
|
|
66
|
-
hasRole(role: string): boolean
|
|
80
|
+
hasRole(role: string): Promise<boolean>;
|
|
67
81
|
/**
|
|
68
|
-
*
|
|
82
|
+
* Resolves `true` iff the token verifies and its `groups` claim contains `group`.
|
|
69
83
|
*
|
|
70
|
-
* Same session-version
|
|
84
|
+
* Same session-version semantics as {@link hasPermission}.
|
|
71
85
|
*/
|
|
72
|
-
inGroup(group: string): boolean
|
|
86
|
+
inGroup(group: string): Promise<boolean>;
|
|
73
87
|
/**
|
|
74
|
-
*
|
|
88
|
+
* Resolves `true` iff the token verifies and its `oid` claim equals `org`.
|
|
75
89
|
*
|
|
76
|
-
* Same session-version
|
|
90
|
+
* Same session-version semantics as {@link hasPermission}.
|
|
77
91
|
*/
|
|
78
|
-
inOrg(org: string): boolean
|
|
92
|
+
inOrg(org: string): Promise<boolean>;
|
|
79
93
|
/**
|
|
80
94
|
* Returns the age of the session-version cache in milliseconds.
|
|
81
95
|
*
|
|
@@ -95,8 +109,8 @@ export interface HearthFacade {
|
|
|
95
109
|
client: HearthHttpClient;
|
|
96
110
|
}
|
|
97
111
|
/**
|
|
98
|
-
* Create a {@link HearthFacade} over the RBAC
|
|
99
|
-
*
|
|
112
|
+
* Create a {@link HearthFacade} over the RBAC claims of the token returned
|
|
113
|
+
* by `opts.getToken()`. Each check verifies that token first.
|
|
100
114
|
*
|
|
101
115
|
* When `opts.sessionVersions.enabled` is `true` the facade additionally
|
|
102
116
|
* starts a background session-version poll loop. Call `facade.stop()` to
|
package/dist/hearth.js
CHANGED
|
@@ -1,41 +1,26 @@
|
|
|
1
|
-
import { decodeJwt } from "jose";
|
|
2
1
|
import { HearthApiClient } from "./client.js";
|
|
2
|
+
import { HearthClient } from "./hearth-client.js";
|
|
3
3
|
import { SessionVersionCache } from "./session-version-cache.js";
|
|
4
|
-
/**
|
|
5
|
-
* Decode the middle JWT segment using `jose.decodeJwt`. Returns `null`
|
|
6
|
-
* when the token is missing, malformed, or cannot be parsed as JSON.
|
|
7
|
-
* Signature is NOT verified — the app trusts its own token.
|
|
8
|
-
*/
|
|
9
|
-
function safeDecode(token) {
|
|
10
|
-
if (!token || typeof token !== "string")
|
|
11
|
-
return null;
|
|
12
|
-
try {
|
|
13
|
-
return decodeJwt(token);
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
4
|
function arrayContains(claim, value) {
|
|
20
5
|
return Array.isArray(claim) && claim.includes(value);
|
|
21
6
|
}
|
|
22
7
|
/** Extract the `sv` claim as `bigint`, or `undefined` if absent/non-numeric. */
|
|
23
8
|
function extractSv(c) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return c.sv;
|
|
9
|
+
const sv = c.get("sv");
|
|
10
|
+
if (typeof sv === "number")
|
|
11
|
+
return BigInt(Math.trunc(sv));
|
|
12
|
+
if (typeof sv === "bigint")
|
|
13
|
+
return sv;
|
|
30
14
|
return undefined;
|
|
31
15
|
}
|
|
32
16
|
/** Extract the `sid` claim as `string`, or `undefined` if absent. */
|
|
33
17
|
function extractSid(c) {
|
|
34
|
-
|
|
18
|
+
const sid = c.get("sid");
|
|
19
|
+
return typeof sid === "string" ? sid : undefined;
|
|
35
20
|
}
|
|
36
21
|
/**
|
|
37
|
-
* Create a {@link HearthFacade} over the RBAC
|
|
38
|
-
*
|
|
22
|
+
* Create a {@link HearthFacade} over the RBAC claims of the token returned
|
|
23
|
+
* by `opts.getToken()`. Each check verifies that token first.
|
|
39
24
|
*
|
|
40
25
|
* When `opts.sessionVersions.enabled` is `true` the facade additionally
|
|
41
26
|
* starts a background session-version poll loop. Call `facade.stop()` to
|
|
@@ -46,48 +31,49 @@ export function createHearth(opts) {
|
|
|
46
31
|
baseUrl: opts.baseUrl,
|
|
47
32
|
realmId: opts.realmId,
|
|
48
33
|
});
|
|
34
|
+
// Discovery and the JWKS are fetched on the first check and cached.
|
|
35
|
+
const verifier = new HearthClient({ issuerUrl: opts.issuerUrl, audience: opts.audience });
|
|
49
36
|
let svCache = null;
|
|
50
37
|
if (opts.sessionVersions?.enabled) {
|
|
51
38
|
svCache = new SessionVersionCache(opts.baseUrl, opts.realmId, opts.sessionVersions);
|
|
52
39
|
svCache.start();
|
|
53
40
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
41
|
+
/**
|
|
42
|
+
* The verified claims of the current token, or `null` when there is no
|
|
43
|
+
* token or it does not verify. Runs the `sv` check on verified claims; that
|
|
44
|
+
* check throws on a revoked or stale session.
|
|
45
|
+
*/
|
|
46
|
+
async function verifiedClaims() {
|
|
47
|
+
const token = await opts.getToken();
|
|
48
|
+
if (!token || typeof token !== "string")
|
|
49
|
+
return null;
|
|
50
|
+
let claims;
|
|
51
|
+
try {
|
|
52
|
+
claims = await verifier.verifyToken(token);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
61
56
|
}
|
|
57
|
+
svCache?.validateSv(extractSv(claims), extractSid(claims));
|
|
58
|
+
return claims;
|
|
62
59
|
}
|
|
63
60
|
return {
|
|
64
|
-
hasPermission(permission) {
|
|
65
|
-
const c =
|
|
66
|
-
|
|
67
|
-
return false;
|
|
68
|
-
assertSv(c);
|
|
69
|
-
return arrayContains(c.permissions, permission);
|
|
61
|
+
async hasPermission(permission) {
|
|
62
|
+
const c = await verifiedClaims();
|
|
63
|
+
return c !== null && arrayContains(c.get("permissions"), permission);
|
|
70
64
|
},
|
|
71
|
-
hasRole(role) {
|
|
72
|
-
const c =
|
|
73
|
-
|
|
74
|
-
return false;
|
|
75
|
-
assertSv(c);
|
|
76
|
-
return arrayContains(c.roles, role);
|
|
65
|
+
async hasRole(role) {
|
|
66
|
+
const c = await verifiedClaims();
|
|
67
|
+
return c !== null && arrayContains(c.get("roles"), role);
|
|
77
68
|
},
|
|
78
|
-
inGroup(group) {
|
|
79
|
-
const c =
|
|
80
|
-
|
|
81
|
-
return false;
|
|
82
|
-
assertSv(c);
|
|
83
|
-
return arrayContains(c.groups, group);
|
|
69
|
+
async inGroup(group) {
|
|
70
|
+
const c = await verifiedClaims();
|
|
71
|
+
return c !== null && arrayContains(c.get("groups"), group);
|
|
84
72
|
},
|
|
85
|
-
inOrg(org) {
|
|
86
|
-
const c =
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
assertSv(c);
|
|
90
|
-
return typeof c.oid === "string" && c.oid === org;
|
|
73
|
+
async inOrg(org) {
|
|
74
|
+
const c = await verifiedClaims();
|
|
75
|
+
const oid = c?.get("oid");
|
|
76
|
+
return typeof oid === "string" && oid === org;
|
|
91
77
|
},
|
|
92
78
|
sessionVersionCacheAge() {
|
|
93
79
|
return svCache?.age() ?? Number.POSITIVE_INFINITY;
|
|
@@ -96,10 +82,10 @@ export function createHearth(opts) {
|
|
|
96
82
|
svCache?.stop();
|
|
97
83
|
},
|
|
98
84
|
client: {
|
|
99
|
-
permissions() {
|
|
100
|
-
const token = opts.getToken();
|
|
85
|
+
async permissions() {
|
|
86
|
+
const token = await opts.getToken();
|
|
101
87
|
if (!token) {
|
|
102
|
-
|
|
88
|
+
throw new Error("getToken() returned no token; cannot call permissions()");
|
|
103
89
|
}
|
|
104
90
|
return http.permissions(token);
|
|
105
91
|
},
|
package/dist/hearth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hearth.js","sourceRoot":"","sources":["../src/hearth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hearth.js","sourceRoot":"","sources":["../src/hearth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAmHjE,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa;IAClD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,gFAAgF;AAChF,SAAS,SAAS,CAAC,CAAS;IAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACtC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,qEAAqE;AACrE,SAAS,UAAU,CAAC,CAAS;IAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAAmB;IAC9C,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;QAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;IACH,oEAAoE;IACpE,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE1F,IAAI,OAAO,GAA+B,IAAI,CAAC;IAC/C,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;QAClC,OAAO,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACpF,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,KAAK,UAAU,cAAc;QAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACrD,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,KAAK,CAAC,aAAa,CAAC,UAAkB;YACpC,MAAM,CAAC,GAAG,MAAM,cAAc,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,IAAI,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,CAAC;QACvE,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,IAAY;YACxB,MAAM,CAAC,GAAG,MAAM,cAAc,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,IAAI,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,KAAa;YACzB,MAAM,CAAC,GAAG,MAAM,cAAc,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,IAAI,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,GAAW;YACrB,MAAM,CAAC,GAAG,MAAM,cAAc,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,GAAG,CAAC;QAChD,CAAC;QACD,sBAAsB;YACpB,OAAO,OAAO,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,iBAAiB,CAAC;QACpD,CAAC;QACD,IAAI;YACF,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC;QACD,MAAM,EAAE;YACN,KAAK,CAAC,WAAW;gBACf,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;gBAC7E,CAAC;gBACD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { HearthClient } from "./hearth-client.js";
|
|
|
2
2
|
export { generateCodeVerifier, generateCodeChallenge, buildAuthorizationUrl, startLogin, } from "./pkce.js";
|
|
3
3
|
export type { BuildAuthorizationUrlOptions, AuthorizationUrlResult, StartLoginOptions, StartLoginResult, } from "./pkce.js";
|
|
4
4
|
export type { HearthClientConfig, OidcConfiguration } from "./hearth-client.js";
|
|
5
|
-
export { JwksClient } from "./jwks-client.js";
|
|
5
|
+
export { DEFAULT_AUDIENCE, JwksClient } from "./jwks-client.js";
|
|
6
6
|
export type { JwksClientConfig, VerifyOptions } from "./jwks-client.js";
|
|
7
7
|
export { IntrospectionClient } from "./introspection-client.js";
|
|
8
8
|
export type { IntrospectionClientConfig, IntrospectionResult } from "./introspection-client.js";
|
|
@@ -20,5 +20,5 @@ export { HearthContext, HearthProvider, useHasPermission, useHasRole, useInGroup
|
|
|
20
20
|
export type { HearthProviderProps } from "./react.js";
|
|
21
21
|
export type { AccessTokenAuthorizationMode, AuthorizeParams, AuthorizePermissionOptions, AuthorizeResponse, BootstrapResponse, CreateUserParams, ExchangeCodeOptions, JwksDocument, JsonWebKey, LoginBeginResult, MePermissionsResponse, OAuthClient, PageOptions, PageResponse, RegisterClientParams, Realm, SessionVersionConfig, StepUpAssertion, StepUpProof, SvDeltaEntry, SvDeltaResponse, SvSnapshotResponse, TokenExchangeParams, DeviceAuthorizationResponse, TokenResponse, UpdateRealmParams, UpdateUserParams, UserStatus, User, UserInfoResponse, WebAuthnAllowCredential, WebAuthnRegistrationBeginResponse, WebAuthnRegistrationCompleteRequest, WebAuthnRegistrationCompleteResponse, WebAuthnAuthenticationBeginResponse, WebAuthnAuthenticationCompleteRequest, } from "./types.js";
|
|
22
22
|
export { SessionVersionCache } from "./session-version-cache.js";
|
|
23
|
-
export {
|
|
24
|
-
export type { AuthConfig, HearthBrowserAuth } from "./browser-auth.js";
|
|
23
|
+
export { createHearthAuth } from "./browser-auth.js";
|
|
24
|
+
export type { AuthConfig, AuthStorage, HearthBrowserAuth, TokenStorage } from "./browser-auth.js";
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ export { HearthClient } from "./hearth-client.js";
|
|
|
3
3
|
// PKCE browser utilities (RFC 7636).
|
|
4
4
|
export { generateCodeVerifier, generateCodeChallenge, buildAuthorizationUrl, startLogin, } from "./pkce.js";
|
|
5
5
|
// Lower-level primitives (JWKS and introspection).
|
|
6
|
-
export { JwksClient } from "./jwks-client.js";
|
|
6
|
+
export { DEFAULT_AUDIENCE, JwksClient } from "./jwks-client.js";
|
|
7
7
|
export { IntrospectionClient } from "./introspection-client.js";
|
|
8
8
|
// Error types (spec §5).
|
|
9
9
|
export { AuthorizationModeMismatchError, ConfigurationError, DiscoveryError, HearthSdkError, IntrospectionError, JWKSFetchError, OAuthFlowError, RequiredActionError, SessionVersionCacheStaleError, SessionVersionRevokedError, TokenAudienceError, TokenExpiredError, TokenInvalidError, TokenIssuerError, TokenNotYetValidError, TokenVerificationError, } from "./errors.js";
|
|
@@ -18,6 +18,6 @@ export { AdminClient } from "./admin.js";
|
|
|
18
18
|
export { createHearth } from "./hearth.js";
|
|
19
19
|
export { HearthContext, HearthProvider, useHasPermission, useHasRole, useInGroup, useInOrg, } from "./react.js";
|
|
20
20
|
export { SessionVersionCache } from "./session-version-cache.js";
|
|
21
|
-
// Browser auth:
|
|
22
|
-
export {
|
|
21
|
+
// Browser auth: PKCE login facade for SPAs; token getters live on the returned object.
|
|
22
|
+
export { createHearthAuth } from "./browser-auth.js";
|
|
23
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qCAAqC;AACrC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,GACX,MAAM,WAAW,CAAC;AASnB,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,qCAAqC;AACrC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,GACX,MAAM,WAAW,CAAC;AASnB,mDAAmD;AACnD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGhE,yBAAyB;AACzB,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB,iEAAiE;AACjE,wFAAwF;AACxF,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAazB,wBAAwB;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,6DAA6D;AAC7D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAezC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,GACT,MAAM,YAAY,CAAC;AAwCpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,uFAAuF;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/jwks-client.d.ts
CHANGED
|
@@ -4,9 +4,12 @@ import { Claims } from "./claims.js";
|
|
|
4
4
|
export interface VerifyOptions {
|
|
5
5
|
/** Expected `iss` claim. When provided, verification fails if the token's issuer differs. */
|
|
6
6
|
issuer?: string;
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Expected `aud` claim(s) for this call. Overrides the client's configured
|
|
9
|
+
* `audience`; the check itself always runs.
|
|
10
|
+
*/
|
|
8
11
|
audience?: string | string[];
|
|
9
|
-
/** Clock skew tolerance in seconds, applied to `exp` and `
|
|
12
|
+
/** Clock skew tolerance in seconds, applied to `exp`, `nbf` and `iat`. Default: 5. */
|
|
10
13
|
clockSkewSeconds?: number;
|
|
11
14
|
}
|
|
12
15
|
/** Configuration for {@link JwksClient}. */
|
|
@@ -23,8 +26,11 @@ export interface JwksClientConfig {
|
|
|
23
26
|
*/
|
|
24
27
|
issuer?: string;
|
|
25
28
|
/**
|
|
26
|
-
* Expected `aud` claim(s)
|
|
27
|
-
*
|
|
29
|
+
* Expected `aud` claim(s): the name of the API that verifies the token
|
|
30
|
+
* (RFC 9068 §4). Pinned for every {@link JwksClient.verify} call that does not
|
|
31
|
+
* override it. Default: {@link DEFAULT_AUDIENCE} (`"hearth"`), the audience
|
|
32
|
+
* Hearth mints when a client names no resource. An API registered as a
|
|
33
|
+
* protected resource sets its resource URI. The check is always on.
|
|
28
34
|
*/
|
|
29
35
|
audience?: string | string[];
|
|
30
36
|
/**
|
|
@@ -36,6 +42,11 @@ export interface JwksClientConfig {
|
|
|
36
42
|
/** Timeout for outbound HTTP calls in milliseconds. Default: 10 000. */
|
|
37
43
|
httpTimeout?: number;
|
|
38
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* The audience Hearth puts in an access token when the client names no
|
|
47
|
+
* resource. Every verifier checks `aud` against it unless configured otherwise.
|
|
48
|
+
*/
|
|
49
|
+
export declare const DEFAULT_AUDIENCE = "hearth";
|
|
39
50
|
/**
|
|
40
51
|
* JWKS-backed JWT verifier with key caching, automatic key rotation,
|
|
41
52
|
* and full EdDSA / Ed25519 signature verification (spec §2).
|
|
@@ -47,7 +58,7 @@ export interface JwksClientConfig {
|
|
|
47
58
|
export declare class JwksClient {
|
|
48
59
|
private readonly jwksUri;
|
|
49
60
|
readonly issuer: string | undefined;
|
|
50
|
-
readonly audience: string | string[]
|
|
61
|
+
readonly audience: string | string[];
|
|
51
62
|
readonly ttl: number | undefined;
|
|
52
63
|
readonly httpTimeout: number;
|
|
53
64
|
/** Cached local key set and when it was fetched. */
|
|
@@ -57,17 +68,21 @@ export declare class JwksClient {
|
|
|
57
68
|
/**
|
|
58
69
|
* Verify a JWT using Ed25519/EdDSA JWKS-based local signature verification (spec §2).
|
|
59
70
|
*
|
|
60
|
-
* Executes
|
|
71
|
+
* Executes every validation step of the sdk-support-contract spec:
|
|
61
72
|
* 1. Signature against cached JWKS — EdDSA only; RS256 and ES256 are refused.
|
|
62
73
|
* 2. `exp` — rejects expired tokens.
|
|
63
74
|
* 3. `iss` — always, against `options.issuer` or the client's configured
|
|
64
75
|
* `issuer`. Throws {@link ConfigurationError} when neither is set.
|
|
65
|
-
* 4. `aud` —
|
|
66
|
-
*
|
|
76
|
+
* 4. `aud` — always, against `options.audience` or the client's configured
|
|
77
|
+
* `audience` (default `"hearth"`).
|
|
78
|
+
* 5. `iat` — not in the future, within clock skew tolerance.
|
|
79
|
+
* 6. `nbf` — when present, within clock skew tolerance.
|
|
67
80
|
*
|
|
68
|
-
* `jose` performs every check above
|
|
81
|
+
* `jose` performs every check above except the `iat` one; this method
|
|
82
|
+
* maps its errors.
|
|
69
83
|
*
|
|
70
84
|
* @throws {@link TokenExpiredError} when the token is expired.
|
|
85
|
+
* @throws {@link TokenNotYetValidError} when `nbf` or `iat` is in the future.
|
|
71
86
|
* @throws {@link TokenInvalidError} when the signature or structure is invalid.
|
|
72
87
|
* @throws {@link TokenIssuerError} when the issuer does not match.
|
|
73
88
|
* @throws {@link TokenAudienceError} when the audience does not match.
|
package/dist/jwks-client.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { createLocalJWKSet, jwtVerify, errors as joseErrors } from "jose";
|
|
2
2
|
import { Claims } from "./claims.js";
|
|
3
|
-
import { ConfigurationError, JWKSFetchError, TokenExpiredError, TokenInvalidError, TokenIssuerError, TokenAudienceError, TokenNotYetValidError, } from "./errors.js";
|
|
3
|
+
import { ConfigurationError, JWKSFetchError, TokenExpiredError, TokenInvalidError, TokenIssuerError, TokenAudienceError, TokenNotYetValidError, TokenVerificationError, } from "./errors.js";
|
|
4
|
+
/**
|
|
5
|
+
* The audience Hearth puts in an access token when the client names no
|
|
6
|
+
* resource. Every verifier checks `aud` against it unless configured otherwise.
|
|
7
|
+
*/
|
|
8
|
+
export const DEFAULT_AUDIENCE = "hearth";
|
|
4
9
|
/**
|
|
5
10
|
* JWKS-backed JWT verifier with key caching, automatic key rotation,
|
|
6
11
|
* and full EdDSA / Ed25519 signature verification (spec §2).
|
|
@@ -20,7 +25,7 @@ export class JwksClient {
|
|
|
20
25
|
constructor(config) {
|
|
21
26
|
this.jwksUri = config.jwksUri;
|
|
22
27
|
this.issuer = config.issuer;
|
|
23
|
-
this.audience = config.audience;
|
|
28
|
+
this.audience = config.audience ?? DEFAULT_AUDIENCE;
|
|
24
29
|
this.ttl = config.ttl;
|
|
25
30
|
this.httpTimeout = config.httpTimeout ?? 10_000;
|
|
26
31
|
}
|
|
@@ -40,17 +45,21 @@ export class JwksClient {
|
|
|
40
45
|
/**
|
|
41
46
|
* Verify a JWT using Ed25519/EdDSA JWKS-based local signature verification (spec §2).
|
|
42
47
|
*
|
|
43
|
-
* Executes
|
|
48
|
+
* Executes every validation step of the sdk-support-contract spec:
|
|
44
49
|
* 1. Signature against cached JWKS — EdDSA only; RS256 and ES256 are refused.
|
|
45
50
|
* 2. `exp` — rejects expired tokens.
|
|
46
51
|
* 3. `iss` — always, against `options.issuer` or the client's configured
|
|
47
52
|
* `issuer`. Throws {@link ConfigurationError} when neither is set.
|
|
48
|
-
* 4. `aud` —
|
|
49
|
-
*
|
|
53
|
+
* 4. `aud` — always, against `options.audience` or the client's configured
|
|
54
|
+
* `audience` (default `"hearth"`).
|
|
55
|
+
* 5. `iat` — not in the future, within clock skew tolerance.
|
|
56
|
+
* 6. `nbf` — when present, within clock skew tolerance.
|
|
50
57
|
*
|
|
51
|
-
* `jose` performs every check above
|
|
58
|
+
* `jose` performs every check above except the `iat` one; this method
|
|
59
|
+
* maps its errors.
|
|
52
60
|
*
|
|
53
61
|
* @throws {@link TokenExpiredError} when the token is expired.
|
|
62
|
+
* @throws {@link TokenNotYetValidError} when `nbf` or `iat` is in the future.
|
|
54
63
|
* @throws {@link TokenInvalidError} when the signature or structure is invalid.
|
|
55
64
|
* @throws {@link TokenIssuerError} when the issuer does not match.
|
|
56
65
|
* @throws {@link TokenAudienceError} when the audience does not match.
|
|
@@ -70,6 +79,10 @@ export class JwksClient {
|
|
|
70
79
|
"`iss` would accept a token minted by any issuer sharing this JWKS.");
|
|
71
80
|
}
|
|
72
81
|
const audience = options?.audience ?? this.audience;
|
|
82
|
+
if (audience === "" || (Array.isArray(audience) && audience.length === 0)) {
|
|
83
|
+
throw new ConfigurationError("JwksClient.verify requires an expected audience — leave `audience` unset " +
|
|
84
|
+
'for the default "hearth", or set the API\'s resource URI.');
|
|
85
|
+
}
|
|
73
86
|
let keySet = await this.getKeySet();
|
|
74
87
|
const doVerify = async (ks) => {
|
|
75
88
|
const { payload } = await jwtVerify(token, ks, {
|
|
@@ -83,6 +96,12 @@ export class JwksClient {
|
|
|
83
96
|
requiredClaims: ["exp"],
|
|
84
97
|
clockTolerance,
|
|
85
98
|
});
|
|
99
|
+
// jose checks that `iat` is a number but not that it lies in the past.
|
|
100
|
+
// A token issued "later than now" (beyond the skew) is not yet valid.
|
|
101
|
+
if (typeof payload.iat === "number" &&
|
|
102
|
+
payload.iat > Math.floor(Date.now() / 1000) + clockTolerance) {
|
|
103
|
+
throw new TokenNotYetValidError(new Date(payload.iat * 1000));
|
|
104
|
+
}
|
|
86
105
|
return new Claims(payload);
|
|
87
106
|
};
|
|
88
107
|
try {
|
|
@@ -107,6 +126,8 @@ export class JwksClient {
|
|
|
107
126
|
* `issuer` and `audience` are the values the check actually used.
|
|
108
127
|
*/
|
|
109
128
|
mapJoseError(err, issuer, audience) {
|
|
129
|
+
if (err instanceof TokenVerificationError)
|
|
130
|
+
throw err;
|
|
110
131
|
if (err instanceof joseErrors.JWTExpired) {
|
|
111
132
|
const exp = err.payload?.exp;
|
|
112
133
|
throw new TokenExpiredError(exp ? new Date(exp * 1000) : new Date(0));
|
|
@@ -124,7 +145,7 @@ export class JwksClient {
|
|
|
124
145
|
if (claim === "aud") {
|
|
125
146
|
const raw = err.payload?.["aud"];
|
|
126
147
|
const actual = Array.isArray(raw) ? raw : [String(raw ?? "")];
|
|
127
|
-
const expected = Array.isArray(audience) ? (audience[0] ?? "") :
|
|
148
|
+
const expected = Array.isArray(audience) ? (audience[0] ?? "") : audience;
|
|
128
149
|
throw new TokenAudienceError(expected, actual);
|
|
129
150
|
}
|
|
130
151
|
throw new TokenInvalidError(`JWT claim validation failed (${claim}): ${err.message}`);
|