@keycardai/oauth 0.20.0 → 0.21.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 +60 -4
- package/dist/cjs/discovery.d.ts +21 -0
- package/dist/cjs/discovery.d.ts.map +1 -1
- package/dist/cjs/discovery.js +8 -0
- package/dist/cjs/discovery.js.map +1 -1
- package/dist/cjs/errors.d.ts +17 -0
- package/dist/cjs/errors.d.ts.map +1 -1
- package/dist/cjs/errors.js +26 -1
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/pkce.d.ts +5 -0
- package/dist/cjs/pkce.d.ts.map +1 -1
- package/dist/cjs/pkce.js +4 -1
- package/dist/cjs/pkce.js.map +1 -1
- package/dist/cjs/userinfo.d.ts +35 -0
- package/dist/cjs/userinfo.d.ts.map +1 -0
- package/dist/cjs/userinfo.js +79 -0
- package/dist/cjs/userinfo.js.map +1 -0
- package/dist/cjs/webApp.d.ts +78 -0
- package/dist/cjs/webApp.d.ts.map +1 -0
- package/dist/cjs/webApp.js +95 -0
- package/dist/cjs/webApp.js.map +1 -0
- package/dist/esm/discovery.d.ts +21 -0
- package/dist/esm/discovery.d.ts.map +1 -1
- package/dist/esm/discovery.js +8 -0
- package/dist/esm/discovery.js.map +1 -1
- package/dist/esm/errors.d.ts +17 -0
- package/dist/esm/errors.d.ts.map +1 -1
- package/dist/esm/errors.js +23 -0
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.d.ts +5 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pkce.d.ts +5 -0
- package/dist/esm/pkce.d.ts.map +1 -1
- package/dist/esm/pkce.js +4 -1
- package/dist/esm/pkce.js.map +1 -1
- package/dist/esm/userinfo.d.ts +35 -0
- package/dist/esm/userinfo.d.ts.map +1 -0
- package/dist/esm/userinfo.js +76 -0
- package/dist/esm/userinfo.js.map +1 -0
- package/dist/esm/webApp.d.ts +78 -0
- package/dist/esm/webApp.d.ts.map +1 -0
- package/dist/esm/webApp.js +88 -0
- package/dist/esm/webApp.js.map +1 -0
- package/package.json +11 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type OAuthAuthorizationServerMetadata } from "./discovery.js";
|
|
2
|
+
import type { TokenResponse } from "./tokenExchange.js";
|
|
3
|
+
export interface BeginAuthorizationOptions {
|
|
4
|
+
clientId: string;
|
|
5
|
+
/** Registered redirect URI handled by the web application. */
|
|
6
|
+
redirectUri: string;
|
|
7
|
+
/**
|
|
8
|
+
* Protected resources the authorization is targeting. Each entry is sent as
|
|
9
|
+
* its own RFC 8707 `resource` parameter, so one authorization can cover
|
|
10
|
+
* several resources and the issued token's audience covers all of them.
|
|
11
|
+
*/
|
|
12
|
+
resources?: readonly string[];
|
|
13
|
+
scopes?: readonly string[];
|
|
14
|
+
/** Pre-discovered metadata. When set, no discovery request is made. */
|
|
15
|
+
metadata?: OAuthAuthorizationServerMetadata;
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
}
|
|
18
|
+
export interface AuthorizationRedirect {
|
|
19
|
+
/** The authorization URL to redirect the user's browser to. */
|
|
20
|
+
url: string;
|
|
21
|
+
/** Generated CSRF value to store until the callback. */
|
|
22
|
+
state: string;
|
|
23
|
+
/** Generated PKCE verifier to store until the callback; never send it to the browser. */
|
|
24
|
+
codeVerifier: string;
|
|
25
|
+
/**
|
|
26
|
+
* The resources the authorization request was scoped to. They are not needed
|
|
27
|
+
* to redeem the code — the authorization server derives the issued token's
|
|
28
|
+
* audience from the code itself — but applications commonly need to know
|
|
29
|
+
* which resources a session was authorized for.
|
|
30
|
+
*/
|
|
31
|
+
resources: string[];
|
|
32
|
+
}
|
|
33
|
+
export interface CompleteAuthorizationOptions {
|
|
34
|
+
/** Query parameters the callback route received. */
|
|
35
|
+
callbackParams: URLSearchParams | Record<string, string>;
|
|
36
|
+
/** The `state` stored at the begin step. */
|
|
37
|
+
state: string;
|
|
38
|
+
/** The `codeVerifier` stored at the begin step. */
|
|
39
|
+
codeVerifier: string;
|
|
40
|
+
clientId: string;
|
|
41
|
+
/** The same registered redirect URI used at the begin step. */
|
|
42
|
+
redirectUri: string;
|
|
43
|
+
/** Client secret for confidential clients. Public clients omit it. */
|
|
44
|
+
clientSecret?: string;
|
|
45
|
+
/** Pre-discovered metadata. When set, no discovery request is made. */
|
|
46
|
+
metadata?: OAuthAuthorizationServerMetadata;
|
|
47
|
+
signal?: AbortSignal;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Begin a web-app authorization-code-with-PKCE flow.
|
|
51
|
+
*
|
|
52
|
+
* For applications that own a registered redirect URI and receive the callback
|
|
53
|
+
* on their own route, where the loopback listener `authenticate()` runs is
|
|
54
|
+
* wrong. Generates the PKCE pair and a CSRF `state`, resolves the
|
|
55
|
+
* `authorization_endpoint` by discovery, and builds the authorization URL with
|
|
56
|
+
* one `resource` parameter per entry of `resources`.
|
|
57
|
+
*
|
|
58
|
+
* The SDK holds no state between begin and complete: where `state` and
|
|
59
|
+
* `codeVerifier` live between the redirect and the callback (a session, a
|
|
60
|
+
* signed cookie) is the application's concern, which is what makes the flow
|
|
61
|
+
* safe under concurrent sign-ins and multi-process servers.
|
|
62
|
+
*/
|
|
63
|
+
export declare function beginAuthorization(issuer: string, options: BeginAuthorizationOptions): Promise<AuthorizationRedirect>;
|
|
64
|
+
/**
|
|
65
|
+
* Complete a web-app authorization-code-with-PKCE flow from the callback route.
|
|
66
|
+
*
|
|
67
|
+
* Callback validation happens before discovery or any token request: a
|
|
68
|
+
* callback carrying `error` throws `AuthorizationDeniedError`, a missing or
|
|
69
|
+
* non-matching `state` throws `StateMismatchError`, and a missing `code`
|
|
70
|
+
* throws `OAuthError("invalid_request")`.
|
|
71
|
+
*
|
|
72
|
+
* No RFC 8707 `resource` parameter is sent on the token request: the
|
|
73
|
+
* authorization server derives the issued token's audience from the
|
|
74
|
+
* authorization code, which already records the resources authorized at the
|
|
75
|
+
* begin step.
|
|
76
|
+
*/
|
|
77
|
+
export declare function completeAuthorization(issuer: string, options: CompleteAuthorizationOptions): Promise<TokenResponse>;
|
|
78
|
+
//# sourceMappingURL=webApp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webApp.d.ts","sourceRoot":"","sources":["../../src/webApp.ts"],"names":[],"mappings":"AACA,OAAO,EAAoC,KAAK,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAGzG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,gCAAgC,CAAC;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,oDAAoD;IACpD,cAAc,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,gCAAgC,CAAC;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,qBAAqB,CAAC,CA0BhC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,aAAa,CAAC,CAmCxB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.beginAuthorization = beginAuthorization;
|
|
7
|
+
exports.completeAuthorization = completeAuthorization;
|
|
8
|
+
const base64url_js_1 = __importDefault(require("./base64url.js"));
|
|
9
|
+
const discovery_js_1 = require("./discovery.js");
|
|
10
|
+
const errors_js_1 = require("./errors.js");
|
|
11
|
+
const pkce_js_1 = require("./pkce.js");
|
|
12
|
+
/**
|
|
13
|
+
* Begin a web-app authorization-code-with-PKCE flow.
|
|
14
|
+
*
|
|
15
|
+
* For applications that own a registered redirect URI and receive the callback
|
|
16
|
+
* on their own route, where the loopback listener `authenticate()` runs is
|
|
17
|
+
* wrong. Generates the PKCE pair and a CSRF `state`, resolves the
|
|
18
|
+
* `authorization_endpoint` by discovery, and builds the authorization URL with
|
|
19
|
+
* one `resource` parameter per entry of `resources`.
|
|
20
|
+
*
|
|
21
|
+
* The SDK holds no state between begin and complete: where `state` and
|
|
22
|
+
* `codeVerifier` live between the redirect and the callback (a session, a
|
|
23
|
+
* signed cookie) is the application's concern, which is what makes the flow
|
|
24
|
+
* safe under concurrent sign-ins and multi-process servers.
|
|
25
|
+
*/
|
|
26
|
+
async function beginAuthorization(issuer, options) {
|
|
27
|
+
const metadata = options.metadata
|
|
28
|
+
?? await (0, discovery_js_1.fetchAuthorizationServerMetadata)(issuer, { signal: options.signal });
|
|
29
|
+
if (!metadata.authorization_endpoint) {
|
|
30
|
+
throw new Error(`Authorization server "${issuer}" does not advertise an authorization_endpoint`);
|
|
31
|
+
}
|
|
32
|
+
const { codeVerifier, codeChallenge } = await (0, pkce_js_1.generatePkcePair)("S256");
|
|
33
|
+
const stateBytes = new Uint8Array(32);
|
|
34
|
+
crypto.getRandomValues(stateBytes);
|
|
35
|
+
const state = base64url_js_1.default.encode(stateBytes.buffer);
|
|
36
|
+
const resources = [...options.resources ?? []];
|
|
37
|
+
const url = (0, pkce_js_1.buildAuthorizeUrl)(metadata.authorization_endpoint, {
|
|
38
|
+
clientId: options.clientId,
|
|
39
|
+
redirectUri: options.redirectUri,
|
|
40
|
+
codeChallenge,
|
|
41
|
+
state,
|
|
42
|
+
scope: options.scopes && options.scopes.length > 0 ? options.scopes.join(" ") : undefined,
|
|
43
|
+
resources,
|
|
44
|
+
});
|
|
45
|
+
return { url, state, codeVerifier, resources };
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Complete a web-app authorization-code-with-PKCE flow from the callback route.
|
|
49
|
+
*
|
|
50
|
+
* Callback validation happens before discovery or any token request: a
|
|
51
|
+
* callback carrying `error` throws `AuthorizationDeniedError`, a missing or
|
|
52
|
+
* non-matching `state` throws `StateMismatchError`, and a missing `code`
|
|
53
|
+
* throws `OAuthError("invalid_request")`.
|
|
54
|
+
*
|
|
55
|
+
* No RFC 8707 `resource` parameter is sent on the token request: the
|
|
56
|
+
* authorization server derives the issued token's audience from the
|
|
57
|
+
* authorization code, which already records the resources authorized at the
|
|
58
|
+
* begin step.
|
|
59
|
+
*/
|
|
60
|
+
async function completeAuthorization(issuer, options) {
|
|
61
|
+
const params = options.callbackParams instanceof URLSearchParams
|
|
62
|
+
? options.callbackParams
|
|
63
|
+
: new URLSearchParams(options.callbackParams);
|
|
64
|
+
const error = params.get("error");
|
|
65
|
+
if (error) {
|
|
66
|
+
throw new errors_js_1.AuthorizationDeniedError(error, params.get("error_description") ?? undefined, params.get("error_uri") ?? undefined);
|
|
67
|
+
}
|
|
68
|
+
const callbackState = params.get("state");
|
|
69
|
+
if (callbackState === null || !timingSafeEqual(callbackState, options.state)) {
|
|
70
|
+
throw new errors_js_1.StateMismatchError();
|
|
71
|
+
}
|
|
72
|
+
const code = params.get("code");
|
|
73
|
+
if (!code) {
|
|
74
|
+
throw new errors_js_1.OAuthError("invalid_request", "Authorization callback is missing 'code'");
|
|
75
|
+
}
|
|
76
|
+
return (0, pkce_js_1.exchangeAuthorizationCode)(issuer, code, {
|
|
77
|
+
codeVerifier: options.codeVerifier,
|
|
78
|
+
redirectUri: options.redirectUri,
|
|
79
|
+
clientId: options.clientId,
|
|
80
|
+
clientSecret: options.clientSecret,
|
|
81
|
+
metadata: options.metadata,
|
|
82
|
+
signal: options.signal,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/** Compare two strings without leaking their common prefix length via timing. */
|
|
86
|
+
function timingSafeEqual(a, b) {
|
|
87
|
+
const left = new TextEncoder().encode(a);
|
|
88
|
+
const right = new TextEncoder().encode(b);
|
|
89
|
+
let diff = left.length ^ right.length;
|
|
90
|
+
for (let i = 0; i < left.length; i++) {
|
|
91
|
+
diff |= left[i] ^ right[i % (right.length || 1)];
|
|
92
|
+
}
|
|
93
|
+
return diff === 0;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=webApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webApp.js","sourceRoot":"","sources":["../../src/webApp.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/discovery.d.ts
CHANGED
|
@@ -8,6 +8,13 @@ declare const OAuthAuthorizationServerMetadataSchema: z.ZodObject<{
|
|
|
8
8
|
grant_types_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
9
9
|
response_types_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
10
10
|
token_endpoint_auth_methods_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
11
|
+
code_challenge_methods_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
12
|
+
scopes_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
13
|
+
userinfo_endpoint: z.ZodOptional<z.ZodString>;
|
|
14
|
+
end_session_endpoint: z.ZodOptional<z.ZodString>;
|
|
15
|
+
subject_types_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
16
|
+
id_token_signing_alg_values_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
17
|
+
claims_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
11
18
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
12
19
|
issuer: z.ZodString;
|
|
13
20
|
authorization_endpoint: z.ZodOptional<z.ZodString>;
|
|
@@ -17,6 +24,13 @@ declare const OAuthAuthorizationServerMetadataSchema: z.ZodObject<{
|
|
|
17
24
|
grant_types_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
18
25
|
response_types_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
19
26
|
token_endpoint_auth_methods_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
27
|
+
code_challenge_methods_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
28
|
+
scopes_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
29
|
+
userinfo_endpoint: z.ZodOptional<z.ZodString>;
|
|
30
|
+
end_session_endpoint: z.ZodOptional<z.ZodString>;
|
|
31
|
+
subject_types_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
32
|
+
id_token_signing_alg_values_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
33
|
+
claims_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
20
34
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
21
35
|
issuer: z.ZodString;
|
|
22
36
|
authorization_endpoint: z.ZodOptional<z.ZodString>;
|
|
@@ -26,6 +40,13 @@ declare const OAuthAuthorizationServerMetadataSchema: z.ZodObject<{
|
|
|
26
40
|
grant_types_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
27
41
|
response_types_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
28
42
|
token_endpoint_auth_methods_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
43
|
+
code_challenge_methods_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
44
|
+
scopes_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
45
|
+
userinfo_endpoint: z.ZodOptional<z.ZodString>;
|
|
46
|
+
end_session_endpoint: z.ZodOptional<z.ZodString>;
|
|
47
|
+
subject_types_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
48
|
+
id_token_signing_alg_values_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
49
|
+
claims_supported: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
29
50
|
}, z.ZodTypeAny, "passthrough">>;
|
|
30
51
|
export type OAuthAuthorizationServerMetadata = z.infer<typeof OAuthAuthorizationServerMetadataSchema>;
|
|
31
52
|
export declare function fetchAuthorizationServerMetadata(issuer: string, options?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,QAAA,MAAM,sCAAsC
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,QAAA,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAiB5B,CAAC;AAEjB,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sCAAsC,CAAC,CAAC;AAEtG,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACjC,OAAO,CAAC,gCAAgC,CAAC,CA4C3C"}
|
package/dist/esm/discovery.js
CHANGED
|
@@ -9,6 +9,14 @@ const OAuthAuthorizationServerMetadataSchema = z.object({
|
|
|
9
9
|
grant_types_supported: z.array(z.string()).optional(),
|
|
10
10
|
response_types_supported: z.array(z.string()).optional(),
|
|
11
11
|
token_endpoint_auth_methods_supported: z.array(z.string()).optional(),
|
|
12
|
+
code_challenge_methods_supported: z.array(z.string()).optional(),
|
|
13
|
+
scopes_supported: z.array(z.string()).optional(),
|
|
14
|
+
// OpenID Connect Discovery 1.0 §3
|
|
15
|
+
userinfo_endpoint: z.string().optional(),
|
|
16
|
+
end_session_endpoint: z.string().optional(),
|
|
17
|
+
subject_types_supported: z.array(z.string()).optional(),
|
|
18
|
+
id_token_signing_alg_values_supported: z.array(z.string()).optional(),
|
|
19
|
+
claims_supported: z.array(z.string()).optional(),
|
|
12
20
|
}).passthrough();
|
|
13
21
|
export async function fetchAuthorizationServerMetadata(issuer, options) {
|
|
14
22
|
const issuerURL = new URL(issuer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,sCAAsC,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrD,wBAAwB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxD,qCAAqC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/errors.d.ts
CHANGED
|
@@ -16,6 +16,23 @@ export declare class InvalidTokenError extends OAuthError {
|
|
|
16
16
|
export declare class InsufficientScopeError extends OAuthError {
|
|
17
17
|
constructor(message: string, errorUri?: string);
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* The authorization server returned an `error` on the redirect instead of a
|
|
21
|
+
* code: the user denied consent, or the request was rejected
|
|
22
|
+
* (RFC 6749 §4.1.2.1). No token request is made.
|
|
23
|
+
*/
|
|
24
|
+
export declare class AuthorizationDeniedError extends OAuthError {
|
|
25
|
+
readonly errorDescription?: string | undefined;
|
|
26
|
+
constructor(errorCode: string, errorDescription?: string | undefined, errorUri?: string);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The `state` on the callback is absent or does not match the value stored at
|
|
30
|
+
* the begin step (RFC 6749 §10.12). The flow is rejected before any token
|
|
31
|
+
* request.
|
|
32
|
+
*/
|
|
33
|
+
export declare class StateMismatchError extends Error {
|
|
34
|
+
constructor(message?: string);
|
|
35
|
+
}
|
|
19
36
|
export type ErrorDetail = {
|
|
20
37
|
message: string;
|
|
21
38
|
code?: string;
|
package/dist/esm/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;gBAEhC,OAAO,EAAE,MAAM;CAIlB;AAED,qBAAa,eAAgB,SAAQ,SAAS;CAC7C;AAED,qBAAa,iBAAkB,SAAQ,SAAS;CAC/C;AAED,qBAAa,UAAW,SAAQ,KAAK;aAEjB,SAAS,EAAE,MAAM;aAEjB,QAAQ,CAAC,EAAE,MAAM;gBAFjB,SAAS,EAAE,MAAM,EACjC,OAAO,EAAE,MAAM,EACC,QAAQ,CAAC,EAAE,MAAM,YAAA;CAIpC;AAED,qBAAa,iBAAkB,SAAQ,UAAU;gBACnC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;CAG/C;AAED,qBAAa,sBAAuB,SAAQ,UAAU;gBACxC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;CAG/C;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B,cAAc,GACd,gBAAgB,GAChB,eAAe,CAAC;AAEpB,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACnC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;gBAE9B,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,0BAA0B;CAQnE;AA4BD,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,kEAAkE;AAClE,qBAAa,kBAAmB,SAAQ,SAAS;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,yFAAyF;AACzF,qBAAa,sBAAuB,SAAQ,SAAS;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,qDAAqD;AACrD,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,+DAA+D;AAC/D,qBAAa,oBAAqB,SAAQ,SAAS;gBACrC,OAAO,EAAE,MAAM;CAI5B"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;gBAEhC,OAAO,EAAE,MAAM;CAIlB;AAED,qBAAa,eAAgB,SAAQ,SAAS;CAC7C;AAED,qBAAa,iBAAkB,SAAQ,SAAS;CAC/C;AAED,qBAAa,UAAW,SAAQ,KAAK;aAEjB,SAAS,EAAE,MAAM;aAEjB,QAAQ,CAAC,EAAE,MAAM;gBAFjB,SAAS,EAAE,MAAM,EACjC,OAAO,EAAE,MAAM,EACC,QAAQ,CAAC,EAAE,MAAM,YAAA;CAIpC;AAED,qBAAa,iBAAkB,SAAQ,UAAU;gBACnC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;CAG/C;AAED,qBAAa,sBAAuB,SAAQ,UAAU;gBACxC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;CAG/C;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,UAAU;aACP,gBAAgB,CAAC,EAAE,MAAM;gBAA5D,SAAS,EAAE,MAAM,EAAkB,gBAAgB,CAAC,EAAE,MAAM,YAAA,EAAE,QAAQ,CAAC,EAAE,MAAM;CAI5F;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,SAAmE;CAIvF;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B,cAAc,GACd,gBAAgB,GAChB,eAAe,CAAC;AAEpB,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACnC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;gBAE9B,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,0BAA0B;CAQnE;AA4BD,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,kEAAkE;AAClE,qBAAa,kBAAmB,SAAQ,SAAS;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,yFAAyF;AACzF,qBAAa,sBAAuB,SAAQ,SAAS;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,qDAAqD;AACrD,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,+DAA+D;AAC/D,qBAAa,oBAAqB,SAAQ,SAAS;gBACrC,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/esm/errors.js
CHANGED
|
@@ -24,6 +24,29 @@ export class InsufficientScopeError extends OAuthError {
|
|
|
24
24
|
super("insufficient_scope", message, errorUri);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* The authorization server returned an `error` on the redirect instead of a
|
|
29
|
+
* code: the user denied consent, or the request was rejected
|
|
30
|
+
* (RFC 6749 §4.1.2.1). No token request is made.
|
|
31
|
+
*/
|
|
32
|
+
export class AuthorizationDeniedError extends OAuthError {
|
|
33
|
+
constructor(errorCode, errorDescription, errorUri) {
|
|
34
|
+
super(errorCode, errorDescription ?? `Authorization denied: ${errorCode}`, errorUri);
|
|
35
|
+
this.errorDescription = errorDescription;
|
|
36
|
+
this.name = "AuthorizationDeniedError";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The `state` on the callback is absent or does not match the value stored at
|
|
41
|
+
* the begin step (RFC 6749 §10.12). The flow is rejected before any token
|
|
42
|
+
* request.
|
|
43
|
+
*/
|
|
44
|
+
export class StateMismatchError extends Error {
|
|
45
|
+
constructor(message = "State mismatch in authorization callback: possible CSRF attack") {
|
|
46
|
+
super(message);
|
|
47
|
+
this.name = "StateMismatchError";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
27
50
|
export class ResourceAccessError extends Error {
|
|
28
51
|
constructor(message, options) {
|
|
29
52
|
super(message ?? buildResourceAccessMessage(options));
|
package/dist/esm/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { JWKSOAuthKeyring } from "./keyring.js";
|
|
|
3
3
|
export { default as base64url } from "./base64url.js";
|
|
4
4
|
export { fetchAuthorizationServerMetadata } from "./discovery.js";
|
|
5
5
|
export type { OAuthAuthorizationServerMetadata } from "./discovery.js";
|
|
6
|
-
export { HTTPError, BadRequestError, UnauthorizedError, OAuthError, InvalidTokenError, InsufficientScopeError, ResourceAccessError, AuthProviderConfigurationError, JWKSError, JWKSDiscoveryError, JWKSUriValidationError, JWKSFetchError, JWKSKeyNotFoundError, } from "./errors.js";
|
|
6
|
+
export { HTTPError, BadRequestError, UnauthorizedError, OAuthError, InvalidTokenError, InsufficientScopeError, ResourceAccessError, AuthProviderConfigurationError, JWKSError, JWKSDiscoveryError, JWKSUriValidationError, JWKSFetchError, JWKSKeyNotFoundError, AuthorizationDeniedError, StateMismatchError, } from "./errors.js";
|
|
7
7
|
export { JWTSigner } from "./jwt/signer.js";
|
|
8
8
|
export type { JWTClaims } from "./jwt/signer.js";
|
|
9
9
|
export { JWTVerifier } from "./jwt/verifier.js";
|
|
@@ -19,6 +19,10 @@ export { AccessContext, TokenVerifier, ClientSecret } from "./server/index.js";
|
|
|
19
19
|
export type { ErrorDetail, AccessContextStatus, AccessToken, TokenVerifierOptions, ClientSecretCredentials, } from "./server/index.js";
|
|
20
20
|
export { generateCodeVerifier, generateCodeChallenge, generatePkcePair, exchangeAuthorizationCode, buildAuthorizeUrl, authenticate, } from "./pkce.js";
|
|
21
21
|
export type { Pkce, ExchangeAuthorizationCodeOptions, AuthorizeUrlParams, AuthenticateOptions, } from "./pkce.js";
|
|
22
|
+
export { beginAuthorization, completeAuthorization } from "./webApp.js";
|
|
23
|
+
export type { BeginAuthorizationOptions, CompleteAuthorizationOptions, AuthorizationRedirect, } from "./webApp.js";
|
|
24
|
+
export { fetchUserInfo } from "./userinfo.js";
|
|
25
|
+
export type { UserInfoResponse, FetchUserInfoOptions } from "./userinfo.js";
|
|
22
26
|
export { resolveIssuerFromChallenge, authenticateFromChallenge } from "./challenge.js";
|
|
23
27
|
export type { ResolveIssuerFromChallengeOptions, ResolvedChallenge, } from "./challenge.js";
|
|
24
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC3G,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAClE,YAAY,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACL,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,SAAS,EACT,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC3G,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAClE,YAAY,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EACL,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,SAAS,EACT,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpE,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,YAAY,EACV,wBAAwB,EACxB,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/E,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,YAAY,GACb,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,IAAI,EACJ,gCAAgC,EAChC,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EACV,yBAAyB,EACzB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AACvF,YAAY,EACV,iCAAiC,EACjC,iBAAiB,GAClB,MAAM,gBAAgB,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { JWKSOAuthKeyring } from "./keyring.js";
|
|
2
2
|
export { default as base64url } from "./base64url.js";
|
|
3
3
|
export { fetchAuthorizationServerMetadata } from "./discovery.js";
|
|
4
|
-
export { HTTPError, BadRequestError, UnauthorizedError, OAuthError, InvalidTokenError, InsufficientScopeError, ResourceAccessError, AuthProviderConfigurationError, JWKSError, JWKSDiscoveryError, JWKSUriValidationError, JWKSFetchError, JWKSKeyNotFoundError, } from "./errors.js";
|
|
4
|
+
export { HTTPError, BadRequestError, UnauthorizedError, OAuthError, InvalidTokenError, InsufficientScopeError, ResourceAccessError, AuthProviderConfigurationError, JWKSError, JWKSDiscoveryError, JWKSUriValidationError, JWKSFetchError, JWKSKeyNotFoundError, AuthorizationDeniedError, StateMismatchError, } from "./errors.js";
|
|
5
5
|
export { JWTSigner } from "./jwt/signer.js";
|
|
6
6
|
export { JWTVerifier } from "./jwt/verifier.js";
|
|
7
7
|
export { buildSubstituteUserToken } from "./jwt/substituteUser.js";
|
|
@@ -10,5 +10,7 @@ export { ClientCredentialsClient } from "./clientCredentials.js";
|
|
|
10
10
|
export { registerClient } from "./registration.js";
|
|
11
11
|
export { AccessContext, TokenVerifier, ClientSecret } from "./server/index.js";
|
|
12
12
|
export { generateCodeVerifier, generateCodeChallenge, generatePkcePair, exchangeAuthorizationCode, buildAuthorizeUrl, authenticate, } from "./pkce.js";
|
|
13
|
+
export { beginAuthorization, completeAuthorization } from "./webApp.js";
|
|
14
|
+
export { fetchUserInfo } from "./userinfo.js";
|
|
13
15
|
export { resolveIssuerFromChallenge, authenticateFromChallenge } from "./challenge.js";
|
|
14
16
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EACL,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,SAAS,EACT,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EACL,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,SAAS,EACT,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAOjE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMnD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQ/E,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,YAAY,GACb,MAAM,WAAW,CAAC;AAOnB,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAMxE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/esm/pkce.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type OAuthAuthorizationServerMetadata } from "./discovery.js";
|
|
1
2
|
import { type TokenResponse } from "./tokenExchange.js";
|
|
2
3
|
export interface Pkce {
|
|
3
4
|
codeVerifier: string;
|
|
@@ -31,6 +32,8 @@ export interface ExchangeAuthorizationCodeOptions {
|
|
|
31
32
|
clientSecret?: string;
|
|
32
33
|
/** RFC 8707 resource indicator. When set, restricts the issued token's audience to this resource. */
|
|
33
34
|
resource?: string;
|
|
35
|
+
/** Pre-discovered metadata. When set, no discovery request is made. */
|
|
36
|
+
metadata?: OAuthAuthorizationServerMetadata;
|
|
34
37
|
signal?: AbortSignal;
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
@@ -52,6 +55,8 @@ export interface AuthorizeUrlParams {
|
|
|
52
55
|
scope?: string;
|
|
53
56
|
/** RFC 8707 resource indicator. */
|
|
54
57
|
resource?: string;
|
|
58
|
+
/** RFC 8707 resource indicators; each entry becomes its own `resource` parameter. */
|
|
59
|
+
resources?: readonly string[];
|
|
55
60
|
}
|
|
56
61
|
/**
|
|
57
62
|
* Build an authorization-endpoint URL for the authorization-code grant with
|
package/dist/esm/pkce.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../src/pkce.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../src/pkce.ts"],"names":[],"mappings":"AACA,OAAO,EAAoC,KAAK,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAEzG,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMlF,MAAM,WAAW,IAAI;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC;CACvC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,SAAM,GAAG,MAAM,CASzD;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAM,GAAG,OAAgB,GAChC,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,GAAE,MAAM,GAAG,OAAgB,EACjC,cAAc,SAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAIf;AAMD,MAAM,WAAW,gCAAgC;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qGAAqG;IACrG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,gCAAgC,CAAC;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,aAAa,CAAC,CA6DxB;AAMD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB;IACtB,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,qBAAqB,EAAE,MAAM,EAC7B,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAcR;AAMD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gIAAgI;IAChI,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAwCxB"}
|
package/dist/esm/pkce.js
CHANGED
|
@@ -48,7 +48,7 @@ export async function generatePkcePair(method = "S256", verifierLength = 128) {
|
|
|
48
48
|
* `grant_type=authorization_code` with the code verifier.
|
|
49
49
|
*/
|
|
50
50
|
export async function exchangeAuthorizationCode(issuer, code, options) {
|
|
51
|
-
const metadata = await fetchAuthorizationServerMetadata(issuer, {
|
|
51
|
+
const metadata = options.metadata ?? await fetchAuthorizationServerMetadata(issuer, {
|
|
52
52
|
signal: options.signal,
|
|
53
53
|
});
|
|
54
54
|
if (!metadata.token_endpoint) {
|
|
@@ -120,6 +120,9 @@ export function buildAuthorizeUrl(authorizationEndpoint, params) {
|
|
|
120
120
|
url.searchParams.set("scope", params.scope);
|
|
121
121
|
if (params.resource)
|
|
122
122
|
url.searchParams.set("resource", params.resource);
|
|
123
|
+
for (const resource of params.resources ?? []) {
|
|
124
|
+
url.searchParams.append("resource", resource);
|
|
125
|
+
}
|
|
123
126
|
return url.toString();
|
|
124
127
|
}
|
|
125
128
|
/**
|
package/dist/esm/pkce.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/pkce.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,gCAAgC,
|
|
1
|
+
{"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/pkce.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,gCAAgC,EAAyC,MAAM,gBAAgB,CAAC;AACzG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAsB,MAAM,oBAAoB,CAAC;AAYlF;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAM,GAAG,GAAG;IAC/C,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAChC,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;IACrF,CAAC;IACD,sEAAsE;IACtE,yCAAyC;IACzC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAqB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,SAA2B,MAAM;IAEjC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CACvC,SAAS,EACT,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CACnC,CAAC;IACF,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAA2B,MAAM,EACjC,cAAc,GAAG,GAAG;IAEpB,MAAM,YAAY,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;AACtE,CAAC;AAkBD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAc,EACd,IAAY,EACZ,OAAyC;IAEzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,gCAAgC,CAAC,MAAM,EAAE;QAClF,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,yBAAyB,MAAM,uCAAuC,CACvE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEhE,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,mCAAmC;KACpD,CAAC;IACF,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAC7C,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;QAC1F,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE;QACpD,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;QACvB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,SAAS,GAAmC,IAAI,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAa,CAAC;YAC9C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7D,SAAS,GAAG,IAA+B,CAAC;YAC9C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;QACD,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,WAAW,GAAG,OAAO,SAAS,CAAC,iBAAiB,KAAK,QAAQ;gBACjE,CAAC,CAAC,SAAS,CAAC,iBAAiB;gBAC7B,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;YACpB,MAAM,QAAQ,GAAG,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3F,MAAM,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,IAAI,UAAU,CAClB,kBAAkB,EAClB,4CAA4C,QAAQ,CAAC,MAAM,GAAG,CAC/D,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAa,CAAC;IAC9C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,UAAU,CAAC,kBAAkB,EAAE,oDAAoD,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,wBAAwB,CAAC,IAA+B,CAAC,CAAC;AACnE,CAAC;AAsBD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,qBAA6B,EAC7B,MAA0B;IAE1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC3C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACzD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,CAAC;IACpF,IAAI,MAAM,CAAC,KAAK;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,KAAK;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,QAAQ;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvE,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QAC9C,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAsBD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,OAA4B;IAE5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,oBAAoB,IAAI,WAAW,CAAC;IAC/E,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC;IAE/C,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEvE,wEAAwE;IACxE,yBAAyB;IACzB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,MAAqB,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,MAAM,gCAAgC,CAAC,MAAM,CAAC,CAAC;IAChE,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,yBAAyB,MAAM,gDAAgD,CAChF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,sBAAsB,EAAE;QACjE,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW;QACX,aAAa;QACb,KAAK;QACL,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QACzF,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAEpE,OAAO,yBAAyB,CAAC,MAAM,EAAE,IAAI,EAAE;QAC7C,YAAY;QACZ,WAAW;QACX,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACxC,8DAA8D;QAC9D,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,IAAY,EACZ,WAAmB,EACnB,SAAiB,EACjB,aAAqB;IAErB,6EAA6E;IAC7E,+EAA+E;IAC/E,yEAAyE;IACzE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAEnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,KAAK,CAAC,uCAAuC,SAAS,IAAI,CAAC,CAAC,CAAC;QAC1E,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACvC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,WAAW,CAAC,CAAC;gBACpD,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAE/C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC;gBAE7F,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,YAAY,CAAC,KAAK,CAAC,CAAC;gBAEpB,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;gBACvF,CAAC;qBAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,aAAa,EAAE,CAAC;oBAC9D,MAAM,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;gBACxE,CAAC;qBAAM,IAAI,IAAI,EAAE,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type OAuthAuthorizationServerMetadata } from "./discovery.js";
|
|
2
|
+
/**
|
|
3
|
+
* Claims returned by the UserInfo endpoint (OIDC Core 1.0 §5.3).
|
|
4
|
+
*
|
|
5
|
+
* Claims are returned exactly as the provider sent them: nothing is filtered
|
|
6
|
+
* to a known set. `sub` is the only claim OIDC requires and is validated
|
|
7
|
+
* present.
|
|
8
|
+
*/
|
|
9
|
+
export interface UserInfoResponse {
|
|
10
|
+
sub: string;
|
|
11
|
+
/** The full claims document as returned, `sub` included. */
|
|
12
|
+
claims: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export interface FetchUserInfoOptions {
|
|
15
|
+
/** Pre-discovered metadata. When set, no discovery request is made. */
|
|
16
|
+
metadata?: OAuthAuthorizationServerMetadata;
|
|
17
|
+
signal?: AbortSignal;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Fetch the signed-in user's identity claims from the issuer's UserInfo
|
|
21
|
+
* endpoint (OIDC Core 1.0 §5.3).
|
|
22
|
+
*
|
|
23
|
+
* Keycard zone access tokens are authorization-only: identity claims such as
|
|
24
|
+
* `email` or `groups` are not in the token and live behind the issuer's
|
|
25
|
+
* `userinfo_endpoint`. The endpoint is resolved by discovery unless
|
|
26
|
+
* `options.metadata` is supplied, in which case the caller owns caching and
|
|
27
|
+
* refreshing that metadata.
|
|
28
|
+
*
|
|
29
|
+
* The access token is presented as a Bearer credential; the request carries no
|
|
30
|
+
* client authentication, because UserInfo authenticates the user, not the
|
|
31
|
+
* client. Signed (`application/jwt`) responses are not supported. Nothing is
|
|
32
|
+
* cached: caching claims per token is the caller's concern.
|
|
33
|
+
*/
|
|
34
|
+
export declare function fetchUserInfo(issuer: string, accessToken: string, options?: FetchUserInfoOptions): Promise<UserInfoResponse>;
|
|
35
|
+
//# sourceMappingURL=userinfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userinfo.d.ts","sourceRoot":"","sources":["../../src/userinfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAGzG;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,gCAAgC,CAAC;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AASD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CAuE3B"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { fetchAuthorizationServerMetadata } from "./discovery.js";
|
|
2
|
+
import { HTTPError, InsufficientScopeError, InvalidTokenError, OAuthError } from "./errors.js";
|
|
3
|
+
/** Extract the RFC 6750 §3 `error` code from a `WWW-Authenticate` challenge. */
|
|
4
|
+
function challengeError(wwwAuthenticate) {
|
|
5
|
+
if (!wwwAuthenticate)
|
|
6
|
+
return "invalid_token";
|
|
7
|
+
const match = /error\s*=\s*"?([^",\s]+)"?/.exec(wwwAuthenticate);
|
|
8
|
+
return match ? match[1] : "invalid_token";
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Fetch the signed-in user's identity claims from the issuer's UserInfo
|
|
12
|
+
* endpoint (OIDC Core 1.0 §5.3).
|
|
13
|
+
*
|
|
14
|
+
* Keycard zone access tokens are authorization-only: identity claims such as
|
|
15
|
+
* `email` or `groups` are not in the token and live behind the issuer's
|
|
16
|
+
* `userinfo_endpoint`. The endpoint is resolved by discovery unless
|
|
17
|
+
* `options.metadata` is supplied, in which case the caller owns caching and
|
|
18
|
+
* refreshing that metadata.
|
|
19
|
+
*
|
|
20
|
+
* The access token is presented as a Bearer credential; the request carries no
|
|
21
|
+
* client authentication, because UserInfo authenticates the user, not the
|
|
22
|
+
* client. Signed (`application/jwt`) responses are not supported. Nothing is
|
|
23
|
+
* cached: caching claims per token is the caller's concern.
|
|
24
|
+
*/
|
|
25
|
+
export async function fetchUserInfo(issuer, accessToken, options = {}) {
|
|
26
|
+
const metadata = options.metadata
|
|
27
|
+
?? await fetchAuthorizationServerMetadata(issuer, { signal: options.signal });
|
|
28
|
+
if (!metadata.userinfo_endpoint) {
|
|
29
|
+
throw new Error(`Authorization server "${issuer}" does not advertise a userinfo_endpoint`);
|
|
30
|
+
}
|
|
31
|
+
const response = await fetch(metadata.userinfo_endpoint, {
|
|
32
|
+
method: "GET",
|
|
33
|
+
headers: {
|
|
34
|
+
Accept: "application/json",
|
|
35
|
+
Authorization: `Bearer ${accessToken}`,
|
|
36
|
+
},
|
|
37
|
+
signal: options.signal,
|
|
38
|
+
});
|
|
39
|
+
if (response.status === 401) {
|
|
40
|
+
const errorCode = challengeError(response.headers.get("www-authenticate"));
|
|
41
|
+
const message = `UserInfo request rejected with "${errorCode}": the access token is expired, ` +
|
|
42
|
+
"revoked, or not accepted at the UserInfo endpoint";
|
|
43
|
+
if (errorCode === "insufficient_scope") {
|
|
44
|
+
throw new InsufficientScopeError(message);
|
|
45
|
+
}
|
|
46
|
+
if (errorCode === "invalid_token") {
|
|
47
|
+
throw new InvalidTokenError(message);
|
|
48
|
+
}
|
|
49
|
+
throw new OAuthError(errorCode, message);
|
|
50
|
+
}
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
throw new HTTPError(`UserInfo request to "${metadata.userinfo_endpoint}" failed (HTTP ${response.status})`);
|
|
53
|
+
}
|
|
54
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
55
|
+
if (contentType.toLowerCase().includes("application/jwt")) {
|
|
56
|
+
throw new OAuthError("invalid_response", `Unsupported UserInfo response content type "${contentType}": signed and ` +
|
|
57
|
+
"encrypted UserInfo responses are not supported");
|
|
58
|
+
}
|
|
59
|
+
let json;
|
|
60
|
+
try {
|
|
61
|
+
json = await response.json();
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
throw new OAuthError("invalid_response", "Malformed JSON in UserInfo response");
|
|
65
|
+
}
|
|
66
|
+
if (!json || typeof json !== "object" || Array.isArray(json)) {
|
|
67
|
+
throw new OAuthError("invalid_response", "UserInfo response must be a JSON object of claims");
|
|
68
|
+
}
|
|
69
|
+
const claims = json;
|
|
70
|
+
const sub = claims.sub;
|
|
71
|
+
if (typeof sub !== "string" || sub.length === 0) {
|
|
72
|
+
throw new OAuthError("invalid_response", "UserInfo response must include a 'sub' claim");
|
|
73
|
+
}
|
|
74
|
+
return { sub, claims };
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=userinfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userinfo.js","sourceRoot":"","sources":["../../src/userinfo.ts"],"names":[],"mappings":"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"}
|