@maronn-openid-connect/core 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +145 -0
  3. package/dist/access-token-issuer.d.ts +14 -0
  4. package/dist/access-token-issuer.d.ts.map +1 -0
  5. package/dist/access-token-issuer.js +32 -0
  6. package/dist/access-token-issuer.js.map +1 -0
  7. package/dist/access-token.d.ts +19 -0
  8. package/dist/access-token.d.ts.map +1 -0
  9. package/dist/access-token.js +46 -0
  10. package/dist/access-token.js.map +1 -0
  11. package/dist/auth-transaction.d.ts +86 -0
  12. package/dist/auth-transaction.d.ts.map +1 -0
  13. package/dist/auth-transaction.js +187 -0
  14. package/dist/auth-transaction.js.map +1 -0
  15. package/dist/authorization-code-grant.d.ts +15 -0
  16. package/dist/authorization-code-grant.d.ts.map +1 -0
  17. package/dist/authorization-code-grant.js +109 -0
  18. package/dist/authorization-code-grant.js.map +1 -0
  19. package/dist/authorization-code.d.ts +28 -0
  20. package/dist/authorization-code.d.ts.map +1 -0
  21. package/dist/authorization-code.js +41 -0
  22. package/dist/authorization-code.js.map +1 -0
  23. package/dist/authorization-request.d.ts +128 -0
  24. package/dist/authorization-request.d.ts.map +1 -0
  25. package/dist/authorization-request.js +457 -0
  26. package/dist/authorization-request.js.map +1 -0
  27. package/dist/client-auth.d.ts +16 -0
  28. package/dist/client-auth.d.ts.map +1 -0
  29. package/dist/client-auth.js +116 -0
  30. package/dist/client-auth.js.map +1 -0
  31. package/dist/crypto-utils.d.ts +18 -0
  32. package/dist/crypto-utils.d.ts.map +1 -0
  33. package/dist/crypto-utils.js +197 -0
  34. package/dist/crypto-utils.js.map +1 -0
  35. package/dist/discovery.d.ts +56 -0
  36. package/dist/discovery.d.ts.map +1 -0
  37. package/dist/discovery.js +133 -0
  38. package/dist/discovery.js.map +1 -0
  39. package/dist/error-utils.d.ts +2 -0
  40. package/dist/error-utils.d.ts.map +1 -0
  41. package/dist/error-utils.js +13 -0
  42. package/dist/error-utils.js.map +1 -0
  43. package/dist/id-token.d.ts +39 -0
  44. package/dist/id-token.d.ts.map +1 -0
  45. package/dist/id-token.js +193 -0
  46. package/dist/id-token.js.map +1 -0
  47. package/dist/index.d.ts +34 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +19 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/introspection.d.ts +66 -0
  52. package/dist/introspection.d.ts.map +1 -0
  53. package/dist/introspection.js +139 -0
  54. package/dist/introspection.js.map +1 -0
  55. package/dist/jwks.d.ts +29 -0
  56. package/dist/jwks.d.ts.map +1 -0
  57. package/dist/jwks.js +36 -0
  58. package/dist/jwks.js.map +1 -0
  59. package/dist/loopback.d.ts +2 -0
  60. package/dist/loopback.d.ts.map +1 -0
  61. package/dist/loopback.js +6 -0
  62. package/dist/loopback.js.map +1 -0
  63. package/dist/refresh-token-grant.d.ts +14 -0
  64. package/dist/refresh-token-grant.d.ts.map +1 -0
  65. package/dist/refresh-token-grant.js +87 -0
  66. package/dist/refresh-token-grant.js.map +1 -0
  67. package/dist/request-object.d.ts +11 -0
  68. package/dist/request-object.d.ts.map +1 -0
  69. package/dist/request-object.js +92 -0
  70. package/dist/request-object.js.map +1 -0
  71. package/dist/revocation.d.ts +51 -0
  72. package/dist/revocation.d.ts.map +1 -0
  73. package/dist/revocation.js +93 -0
  74. package/dist/revocation.js.map +1 -0
  75. package/dist/signing-key.d.ts +21 -0
  76. package/dist/signing-key.d.ts.map +1 -0
  77. package/dist/signing-key.js +99 -0
  78. package/dist/signing-key.js.map +1 -0
  79. package/dist/token-error.d.ts +16 -0
  80. package/dist/token-error.d.ts.map +1 -0
  81. package/dist/token-error.js +31 -0
  82. package/dist/token-error.js.map +1 -0
  83. package/dist/token-request.d.ts +111 -0
  84. package/dist/token-request.d.ts.map +1 -0
  85. package/dist/token-request.js +44 -0
  86. package/dist/token-request.js.map +1 -0
  87. package/dist/token-response.d.ts +111 -0
  88. package/dist/token-response.d.ts.map +1 -0
  89. package/dist/token-response.js +173 -0
  90. package/dist/token-response.js.map +1 -0
  91. package/dist/userinfo.d.ts +98 -0
  92. package/dist/userinfo.d.ts.map +1 -0
  93. package/dist/userinfo.js +188 -0
  94. package/dist/userinfo.js.map +1 -0
  95. package/package.json +52 -0
@@ -0,0 +1,109 @@
1
+ import { sha256 } from './crypto-utils.js';
2
+ import { TokenError, TokenErrorCode } from './token-error.js';
3
+ async function verifyCodeChallenge(codeVerifier, codeChallenge, method) {
4
+ if (method === 'S256') {
5
+ const computed = await sha256(codeVerifier);
6
+ return computed === codeChallenge;
7
+ }
8
+ return false;
9
+ }
10
+ export async function resolveAuthorizationCode(params, authCodeResolver) {
11
+ const code = params.code;
12
+ if (!code) {
13
+ throw new TokenError(TokenErrorCode.InvalidRequest, 'Missing required parameter: code');
14
+ }
15
+ const authorizationCode = await authCodeResolver.findAuthorizationCode(code);
16
+ if (!authorizationCode) {
17
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'Authorization code not found');
18
+ }
19
+ return { code, authorizationCode };
20
+ }
21
+ export async function validateAuthorizationCodeUnused(authorizationCode, authCodeResolver) {
22
+ if (!authorizationCode.used) {
23
+ return;
24
+ }
25
+ if (authCodeResolver.revokeTokensByGrantId) {
26
+ await authCodeResolver.revokeTokensByGrantId(authorizationCode.grantId);
27
+ }
28
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'Authorization code has already been used');
29
+ }
30
+ export function validateAuthorizationCodeClient(authorizationCode, authenticatedClientId) {
31
+ if (authorizationCode.clientId !== authenticatedClientId) {
32
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'Authorization code was issued to a different client');
33
+ }
34
+ }
35
+ export function validateAuthorizationCodeExpiration(authorizationCode, currentTime = Math.floor(Date.now() / 1000)) {
36
+ if (authorizationCode.expiresAt <= currentTime) {
37
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'Authorization code has expired');
38
+ }
39
+ }
40
+ export function validateAuthorizationCodeRedirectUri(authorizationCode, requestRedirectUri) {
41
+ if (authorizationCode.redirectUriExplicit) {
42
+ if (!requestRedirectUri) {
43
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'redirect_uri is required because it was included in the authorization request');
44
+ }
45
+ if (requestRedirectUri !== authorizationCode.redirectUri) {
46
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'redirect_uri does not match the authorization request');
47
+ }
48
+ return;
49
+ }
50
+ if (requestRedirectUri !== undefined &&
51
+ requestRedirectUri !== authorizationCode.redirectUri) {
52
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'redirect_uri does not match the authorization request');
53
+ }
54
+ }
55
+ export async function verifyAuthorizationCodePkce(authorizationCode, codeVerifier) {
56
+ const hasPkceBinding = authorizationCode.codeChallenge !== undefined ||
57
+ authorizationCode.codeChallengeMethod !== undefined;
58
+ if (!hasPkceBinding) {
59
+ return false;
60
+ }
61
+ if (authorizationCode.codeChallenge === undefined ||
62
+ authorizationCode.codeChallengeMethod === undefined) {
63
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'Authorization code PKCE binding is incomplete');
64
+ }
65
+ if (!codeVerifier) {
66
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'Missing required parameter: code_verifier');
67
+ }
68
+ if (codeVerifier.length < 43 || codeVerifier.length > 128) {
69
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'code_verifier length must be between 43 and 128 characters');
70
+ }
71
+ if (!/^[A-Za-z0-9\-._~]+$/.test(codeVerifier)) {
72
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'code_verifier contains invalid characters');
73
+ }
74
+ const isValid = await verifyCodeChallenge(codeVerifier, authorizationCode.codeChallenge, authorizationCode.codeChallengeMethod);
75
+ if (!isValid) {
76
+ throw new TokenError(TokenErrorCode.InvalidGrant, 'code_verifier validation failed');
77
+ }
78
+ return true;
79
+ }
80
+ export async function consumeAuthorizationCode(code, authCodeResolver) {
81
+ await authCodeResolver.revokeAuthorizationCode(code);
82
+ }
83
+ export function buildValidatedAuthorizationCodeRequest(code, authorizationCode, authenticatedClientId, codeVerified) {
84
+ return {
85
+ grantType: 'authorization_code',
86
+ clientId: authenticatedClientId,
87
+ code,
88
+ grantId: authorizationCode.grantId,
89
+ redirectUri: authorizationCode.redirectUri,
90
+ scope: authorizationCode.scope,
91
+ nonce: authorizationCode.nonce,
92
+ audience: authorizationCode.audience,
93
+ acrValues: authorizationCode.acrValues,
94
+ claims: authorizationCode.claims,
95
+ codeVerified,
96
+ };
97
+ }
98
+ export async function validateAuthorizationCodeGrant(context) {
99
+ const { params, authCodeResolver, authenticatedClientId } = context;
100
+ const { code, authorizationCode } = await resolveAuthorizationCode(params, authCodeResolver);
101
+ await validateAuthorizationCodeUnused(authorizationCode, authCodeResolver);
102
+ validateAuthorizationCodeClient(authorizationCode, authenticatedClientId);
103
+ validateAuthorizationCodeExpiration(authorizationCode);
104
+ validateAuthorizationCodeRedirectUri(authorizationCode, params.redirect_uri);
105
+ const codeVerified = await verifyAuthorizationCodePkce(authorizationCode, params.code_verifier);
106
+ await consumeAuthorizationCode(code, authCodeResolver);
107
+ return buildValidatedAuthorizationCodeRequest(code, authorizationCode, authenticatedClientId, codeVerified);
108
+ }
109
+ //# sourceMappingURL=authorization-code-grant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-code-grant.js","sourceRoot":"","sources":["../src/authorization-code-grant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { AuthorizationResponseParams } from './auth-transaction.js';
2
+ import type { ClaimsParameter } from './userinfo.js';
3
+ export interface AuthorizationCodeData {
4
+ code: string;
5
+ grantId: string;
6
+ clientId: string;
7
+ redirectUri: string;
8
+ redirectUriExplicit: boolean;
9
+ scope: string[];
10
+ subject: string;
11
+ codeChallenge?: string;
12
+ codeChallengeMethod?: 'S256';
13
+ used: boolean;
14
+ expiresAt: number;
15
+ nonce?: string;
16
+ authTime?: number;
17
+ audience?: string[];
18
+ acrValues?: string;
19
+ claims?: ClaimsParameter;
20
+ }
21
+ export interface CreateAuthorizationCodeOptions {
22
+ authorizationResponse: AuthorizationResponseParams;
23
+ subject: string;
24
+ authTime: number;
25
+ ttlSeconds?: number;
26
+ }
27
+ export declare function createAuthorizationCode(options: CreateAuthorizationCodeOptions): Promise<AuthorizationCodeData>;
28
+ //# sourceMappingURL=authorization-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-code.d.ts","sourceRoot":"","sources":["../src/authorization-code.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAUrD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IAMb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IAKpB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC;IAEd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAKpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAKD,MAAM,WAAW,8BAA8B;IAE7C,qBAAqB,EAAE,2BAA2B,CAAC;IAEnD,OAAO,EAAE,MAAM,CAAC;IAEhB,QAAQ,EAAE,MAAM,CAAC;IAEjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,qBAAqB,CAAC,CAyChC"}
@@ -0,0 +1,41 @@
1
+ import { generateRandomString } from './crypto-utils.js';
2
+ const DEFAULT_AUTH_CODE_TTL_SECONDS = 300;
3
+ export async function createAuthorizationCode(options) {
4
+ const { authorizationResponse, subject, authTime, ttlSeconds } = options;
5
+ const code = generateRandomString(32);
6
+ const grantId = generateRandomString(32);
7
+ const now = Math.floor(Date.now() / 1000);
8
+ const ttl = ttlSeconds ?? DEFAULT_AUTH_CODE_TTL_SECONDS;
9
+ const data = {
10
+ code,
11
+ grantId,
12
+ clientId: authorizationResponse.clientId,
13
+ redirectUri: authorizationResponse.redirectUri,
14
+ redirectUriExplicit: authorizationResponse.redirectUriExplicit,
15
+ scope: authorizationResponse.scope,
16
+ subject,
17
+ used: false,
18
+ expiresAt: now + ttl,
19
+ authTime,
20
+ };
21
+ if (authorizationResponse.codeChallenge !== undefined) {
22
+ data.codeChallenge = authorizationResponse.codeChallenge;
23
+ }
24
+ if (authorizationResponse.codeChallengeMethod !== undefined) {
25
+ data.codeChallengeMethod = authorizationResponse.codeChallengeMethod;
26
+ }
27
+ if (authorizationResponse.nonce !== undefined) {
28
+ data.nonce = authorizationResponse.nonce;
29
+ }
30
+ if (authorizationResponse.audience !== undefined) {
31
+ data.audience = authorizationResponse.audience;
32
+ }
33
+ if (authorizationResponse.acrValues !== undefined) {
34
+ data.acrValues = authorizationResponse.acrValues;
35
+ }
36
+ if (authorizationResponse.claims !== undefined) {
37
+ data.claims = authorizationResponse.claims;
38
+ }
39
+ return data;
40
+ }
41
+ //# sourceMappingURL=authorization-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-code.js","sourceRoot":"","sources":["../src/authorization-code.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA8DzD,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAW1C,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAuC;IAEvC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAEzE,MAAM,IAAI,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,UAAU,IAAI,6BAA6B,CAAC;IAExD,MAAM,IAAI,GAA0B;QAClC,IAAI;QACJ,OAAO;QACP,QAAQ,EAAE,qBAAqB,CAAC,QAAQ;QACxC,WAAW,EAAE,qBAAqB,CAAC,WAAW;QAC9C,mBAAmB,EAAE,qBAAqB,CAAC,mBAAmB;QAC9D,KAAK,EAAE,qBAAqB,CAAC,KAAK;QAClC,OAAO;QACP,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,GAAG,GAAG,GAAG;QACpB,QAAQ;KACT,CAAC;IAEF,IAAI,qBAAqB,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACtD,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,aAAa,CAAC;IAC3D,CAAC;IACD,IAAI,qBAAqB,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAC5D,IAAI,CAAC,mBAAmB,GAAG,qBAAqB,CAAC,mBAAmB,CAAC;IACvE,CAAC;IACD,IAAI,qBAAqB,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC;IAC3C,CAAC;IACD,IAAI,qBAAqB,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC;IACjD,CAAC;IACD,IAAI,qBAAqB,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC;IACnD,CAAC;IACD,IAAI,qBAAqB,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,128 @@
1
+ import type { JwkSet } from './jwks.js';
2
+ import type { ClaimsParameter } from './userinfo.js';
3
+ export declare const DEFAULT_REQUEST_OBJECT_SIGNING_ALGS: readonly ["RS256"];
4
+ export declare enum AuthorizationErrorCode {
5
+ InvalidRequest = "invalid_request",
6
+ UnauthorizedClient = "unauthorized_client",
7
+ AccessDenied = "access_denied",
8
+ UnsupportedResponseType = "unsupported_response_type",
9
+ InvalidScope = "invalid_scope",
10
+ ServerError = "server_error",
11
+ TemporarilyUnavailable = "temporarily_unavailable",
12
+ InteractionRequired = "interaction_required",
13
+ LoginRequired = "login_required",
14
+ AccountSelectionRequired = "account_selection_required",
15
+ ConsentRequired = "consent_required",
16
+ RequestNotSupported = "request_not_supported",
17
+ RequestUriNotSupported = "request_uri_not_supported",
18
+ RegistrationNotSupported = "registration_not_supported"
19
+ }
20
+ export interface AuthorizationRequestParams {
21
+ response_type?: string;
22
+ client_id: string;
23
+ redirect_uri?: string;
24
+ scope?: string;
25
+ state?: string;
26
+ nonce?: string;
27
+ prompt?: string;
28
+ display?: string;
29
+ max_age?: string;
30
+ ui_locales?: string;
31
+ claims_locales?: string;
32
+ acr_values?: string;
33
+ login_hint?: string;
34
+ id_token_hint?: string;
35
+ request?: string;
36
+ request_uri?: string;
37
+ registration?: string;
38
+ audience?: string;
39
+ claims?: string;
40
+ code_challenge?: string;
41
+ code_challenge_method?: string;
42
+ }
43
+ export interface ClientInfo {
44
+ clientId: string;
45
+ redirectUris: string[];
46
+ clientType?: 'confidential' | 'public';
47
+ responseTypes?: string[];
48
+ defaultMaxAge?: number;
49
+ jwks?: JwkSet;
50
+ }
51
+ export interface ClientResolver {
52
+ findClient(clientId: string): Promise<ClientInfo | null>;
53
+ }
54
+ export type OfflineAccessGrantedCallback = (request: AuthorizationRequestParams, context: {
55
+ promptValues: string[];
56
+ }) => boolean | Promise<boolean>;
57
+ export declare const defaultIsOfflineAccessGranted: OfflineAccessGrantedCallback;
58
+ export interface ValidateAuthorizationRequestOptions {
59
+ isOfflineAccessGranted?: OfflineAccessGrantedCallback;
60
+ maxClaimsParameterLength?: number;
61
+ allowNonPkceAuthorizationCodeFlow?: boolean;
62
+ requestObject?: {
63
+ supported?: boolean;
64
+ supportedSigningAlgs?: string[];
65
+ allowUnsigned?: boolean;
66
+ };
67
+ }
68
+ export declare const DEFAULT_MAX_CLAIMS_PARAMETER_LENGTH = 16384;
69
+ export interface ValidatedAuthorizationRequest {
70
+ responseType: 'code';
71
+ clientId: string;
72
+ redirectUri: string;
73
+ redirectUriExplicit: boolean;
74
+ scope: string[];
75
+ codeChallenge?: string;
76
+ codeChallengeMethod?: 'S256';
77
+ state?: string;
78
+ nonce?: string;
79
+ prompt?: string[];
80
+ display?: string;
81
+ maxAge?: number;
82
+ uiLocales?: string;
83
+ claimsLocales?: string;
84
+ acrValues?: string;
85
+ loginHint?: string;
86
+ idTokenHint?: string;
87
+ audience?: string[];
88
+ claims?: ClaimsParameter;
89
+ }
90
+ export declare class AuthorizationError extends Error {
91
+ readonly error: AuthorizationErrorCode;
92
+ readonly errorDescription: string;
93
+ readonly redirectUri?: string;
94
+ readonly state?: string;
95
+ constructor(error: AuthorizationErrorCode, errorDescription: string, redirectUri?: string, state?: string);
96
+ get redirectable(): boolean;
97
+ }
98
+ export declare function validateRegisteredRedirectUris(registeredUris: string[]): void;
99
+ export declare function resolveAuthorizationRedirectUri(effectiveParams: AuthorizationRequestParams, client: ClientInfo): string;
100
+ export declare function validatePromptParameter(effectiveParams: AuthorizationRequestParams, redirectUri: string, state?: string): string[] | undefined;
101
+ export declare function resolveMaxAge(effectiveParams: AuthorizationRequestParams, client: ClientInfo, redirectUri: string, state?: string): number | undefined;
102
+ export declare function validateAuthorizationCodePkce(effectiveParams: AuthorizationRequestParams, client: ClientInfo, redirectUri: string, state?: string, options?: {
103
+ allowNonPkceAuthorizationCodeFlow?: boolean;
104
+ }): {
105
+ codeChallenge?: string;
106
+ codeChallengeMethod?: 'S256';
107
+ };
108
+ export declare function resolveClientForAuthorization(params: AuthorizationRequestParams, clientResolver: ClientResolver): Promise<ClientInfo>;
109
+ export interface ResolvedRequestObjectParams {
110
+ effectiveParams: AuthorizationRequestParams;
111
+ requestObjectClaims?: Record<string, unknown>;
112
+ }
113
+ export declare function resolveRequestObjectParams(params: AuthorizationRequestParams, client: ClientInfo, options?: {
114
+ supportedSigningAlgs?: string[];
115
+ allowUnsigned?: boolean;
116
+ }): Promise<ResolvedRequestObjectParams>;
117
+ export declare function rejectUnsupportedRequestParams(params: AuthorizationRequestParams, redirectUri: string, state?: string, options?: {
118
+ requestParameterSupported?: boolean;
119
+ }): void;
120
+ export declare function validateRequestObjectConsistency(params: AuthorizationRequestParams, requestObjectClaims: Record<string, unknown> | undefined, redirectUri: string, state?: string): void;
121
+ export declare function validateResponseType(params: AuthorizationRequestParams, client: ClientInfo, redirectUri: string, state?: string): 'code';
122
+ export declare function validateAuthorizationScope(queryParams: AuthorizationRequestParams, effectiveParams: AuthorizationRequestParams, redirectUri: string, state?: string): string[];
123
+ export declare function applyOfflineAccessPolicy(scope: string[], effectiveParams: AuthorizationRequestParams, promptValues: string[] | undefined, isOfflineAccessGranted?: OfflineAccessGrantedCallback): Promise<string[]>;
124
+ export declare function validateDisplayParameter(effectiveParams: AuthorizationRequestParams, redirectUri: string, state?: string): string | undefined;
125
+ export declare function parseAudienceParameter(effectiveParams: AuthorizationRequestParams): string[] | undefined;
126
+ export declare function validateAuthorizationRequest(params: AuthorizationRequestParams, clientResolver: ClientResolver, options?: ValidateAuthorizationRequestOptions): Promise<ValidatedAuthorizationRequest>;
127
+ export declare function parseClaimsRequestParameter(effectiveParams: AuthorizationRequestParams, redirectUri: string, state?: string, maxLength?: number): ClaimsParameter | undefined;
128
+ //# sourceMappingURL=authorization-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-request.d.ts","sourceRoot":"","sources":["../src/authorization-request.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,eAAe,CAAC;AAMxE,eAAO,MAAM,mCAAmC,oBAAqB,CAAC;AAMtE,oBAAY,sBAAsB;IAEhC,cAAc,oBAAoB;IAClC,kBAAkB,wBAAwB;IAC1C,YAAY,kBAAkB;IAC9B,uBAAuB,8BAA8B;IACrD,YAAY,kBAAkB;IAC9B,WAAW,iBAAiB;IAC5B,sBAAsB,4BAA4B;IAElD,mBAAmB,yBAAyB;IAC5C,aAAa,mBAAmB;IAChC,wBAAwB,+BAA+B;IACvD,eAAe,qBAAqB;IAGpC,mBAAmB,0BAA0B;IAC7C,sBAAsB,8BAA8B;IAGpD,wBAAwB,+BAA+B;CACxD;AAMD,MAAM,WAAW,0BAA0B;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAQvB,OAAO,CAAC,EAAE,MAAM,CAAC;IAMjB,WAAW,CAAC,EAAE,MAAM,CAAC;IAKrB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAKlB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAaD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,cAAc,GAAG,QAAQ,CAAC;IAOvC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IASzB,aAAa,CAAC,EAAE,MAAM,CAAC;IAOvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAqBD,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CAC1D;AAcD,MAAM,MAAM,4BAA4B,GAAG,CACzC,OAAO,EAAE,0BAA0B,EACnC,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,KAChC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAMhC,eAAO,MAAM,6BAA6B,EAAE,4BAGP,CAAC;AAKtC,MAAM,WAAW,mCAAmC;IAKlD,sBAAsB,CAAC,EAAE,4BAA4B,CAAC;IAUtD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAQlC,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAI5C,aAAa,CAAC,EAAE;QAOd,SAAS,CAAC,EAAE,OAAO,CAAC;QAIpB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAOhC,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AAUD,eAAO,MAAM,mCAAmC,QAAQ,CAAC;AAKzD,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IAMpB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAKpB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAQD,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,KAAK,EAAE,sBAAsB,CAAC;IAC9C,SAAgB,gBAAgB,EAAE,MAAM,CAAC;IACzC,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,KAAK,CAAC,EAAE,MAAM,CAAC;gBAG7B,KAAK,EAAE,sBAAsB,EAC7B,gBAAgB,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM;IAchB,IAAI,YAAY,IAAI,OAAO,CAE1B;CACF;AAoFD,wBAAgB,8BAA8B,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CA6C7E;AAqDD,wBAAgB,+BAA+B,CAC7C,eAAe,EAAE,0BAA0B,EAC3C,MAAM,EAAE,UAAU,GACjB,MAAM,CAMR;AAUD,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,0BAA0B,EAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,EAAE,GAAG,SAAS,CAKtB;AA0FD,wBAAgB,aAAa,CAC3B,eAAe,EAAE,0BAA0B,EAC3C,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,GAAG,SAAS,CAQpB;AA2ED,wBAAgB,6BAA6B,CAC3C,eAAe,EAAE,0BAA0B,EAC3C,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,iCAAiC,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5D;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,CAmB1D;AAOD,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,0BAA0B,EAClC,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,UAAU,CAAC,CA6BrB;AAKD,MAAM,WAAW,2BAA2B;IAM1C,eAAe,EAAE,0BAA0B,CAAC;IAM5C,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/C;AAcD,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,0BAA0B,EAClC,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE;IAKP,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAKhC,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,OAAO,CAAC,2BAA2B,CAAC,CA6BtC;AAYD,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,0BAA0B,EAClC,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,yBAAyB,CAAC,EAAE,OAAO,CAAA;CAAO,GACpD,IAAI,CA8BN;AAWD,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,0BAA0B,EAClC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACxD,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,IAAI,CA8BN;AAaD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,0BAA0B,EAClC,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAmCR;AAUD,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,0BAA0B,EACvC,eAAe,EAAE,0BAA0B,EAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,EAAE,CA0BV;AAWD,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,MAAM,EAAE,EACf,eAAe,EAAE,0BAA0B,EAC3C,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,EAClC,sBAAsB,GAAE,4BAA4D,GACnF,OAAO,CAAC,MAAM,EAAE,CAAC,CAanB;AAQD,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,0BAA0B,EAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,GAAG,SAAS,CAcpB;AAMD,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,0BAA0B,GAC1C,MAAM,EAAE,GAAG,SAAS,CAMtB;AA0BD,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,0BAA0B,EAClC,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE,mCAAwC,GAChD,OAAO,CAAC,6BAA6B,CAAC,CA0GxC;AA+ED,wBAAgB,2BAA2B,CACzC,eAAe,EAAE,0BAA0B,EAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,GAAE,MAA4C,GACtD,eAAe,GAAG,SAAS,CA6C7B"}