@logto/js 1.0.0 → 1.1.2

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 (58) hide show
  1. package/lib/consts/index.d.ts +74 -0
  2. package/lib/consts/index.js +83 -0
  3. package/lib/consts/index.mjs +81 -0
  4. package/lib/core/fetch-token.d.ts +36 -0
  5. package/lib/core/fetch-token.js +47 -0
  6. package/lib/core/fetch-token.mjs +40 -0
  7. package/lib/core/fetch-token.test.d.ts +1 -0
  8. package/lib/core/index.d.ts +6 -0
  9. package/lib/core/oidc-config.d.ts +15 -0
  10. package/lib/core/oidc-config.js +13 -0
  11. package/lib/core/oidc-config.mjs +6 -0
  12. package/lib/core/oidc-config.test.d.ts +1 -0
  13. package/lib/core/revoke.d.ts +2 -0
  14. package/lib/core/revoke.js +14 -0
  15. package/lib/core/revoke.mjs +12 -0
  16. package/lib/core/revoke.test.d.ts +1 -0
  17. package/lib/core/sign-in.d.ts +14 -0
  18. package/lib/core/sign-in.js +32 -0
  19. package/lib/core/sign-in.mjs +30 -0
  20. package/lib/core/sign-in.test.d.ts +1 -0
  21. package/lib/core/sign-out.d.ts +7 -0
  22. package/lib/core/sign-out.js +13 -0
  23. package/lib/core/sign-out.mjs +11 -0
  24. package/lib/core/sign-out.test.d.ts +1 -0
  25. package/lib/core/user-info.d.ts +20 -0
  26. package/lib/core/user-info.js +7 -0
  27. package/lib/core/user-info.mjs +5 -0
  28. package/lib/core/user-info.test.d.ts +1 -0
  29. package/lib/index.d.ts +4 -221
  30. package/lib/index.js +55 -402
  31. package/lib/index.mjs +12 -0
  32. package/lib/types/index.d.ts +6 -0
  33. package/lib/utils/arbitrary-object.d.ts +1 -0
  34. package/lib/utils/arbitrary-object.js +5 -0
  35. package/lib/utils/arbitrary-object.mjs +3 -0
  36. package/lib/utils/callback-uri.d.ts +2 -0
  37. package/lib/utils/callback-uri.js +36 -0
  38. package/lib/utils/callback-uri.mjs +33 -0
  39. package/lib/utils/callback-uri.test.d.ts +1 -0
  40. package/lib/utils/errors.d.ts +36 -0
  41. package/lib/utils/errors.js +62 -0
  42. package/lib/utils/errors.mjs +53 -0
  43. package/lib/utils/errors.test.d.ts +1 -0
  44. package/lib/utils/id-token.d.ts +19 -0
  45. package/lib/utils/id-token.js +63 -0
  46. package/lib/utils/id-token.mjs +60 -0
  47. package/lib/utils/id-token.test.d.ts +1 -0
  48. package/lib/utils/index.d.ts +5 -0
  49. package/lib/utils/scopes.d.ts +5 -0
  50. package/lib/utils/scopes.js +15 -0
  51. package/lib/utils/scopes.mjs +13 -0
  52. package/lib/utils/scopes.test.d.ts +1 -0
  53. package/package.json +19 -20
  54. package/lib/index.d.ts.map +0 -1
  55. package/lib/index.js.map +0 -1
  56. package/lib/module.d.mts +0 -221
  57. package/lib/module.mjs +0 -397
  58. package/lib/module.mjs.map +0 -1
package/lib/module.d.mts DELETED
@@ -1,221 +0,0 @@
1
- import { KeysToCamelCase, NormalizeKeyPaths, Nullable } from "@silverhand/essentials";
2
- import { JWTVerifyGetKey } from "jose";
3
- export const ContentType: {
4
- formUrlEncoded: {
5
- 'Content-Type': string;
6
- };
7
- };
8
- export enum TokenGrantType {
9
- AuthorizationCode = "authorization_code",
10
- RefreshToken = "refresh_token"
11
- }
12
- export enum QueryKey {
13
- ClientId = "client_id",
14
- Code = "code",
15
- CodeChallenge = "code_challenge",
16
- CodeChallengeMethod = "code_challenge_method",
17
- CodeVerifier = "code_verifier",
18
- Error = "error",
19
- ErrorDescription = "error_description",
20
- GrantType = "grant_type",
21
- IdToken = "id_token",
22
- IdTokenHint = "id_token_hint",
23
- PostLogoutRedirectUri = "post_logout_redirect_uri",
24
- Prompt = "prompt",
25
- RedirectUri = "redirect_uri",
26
- RefreshToken = "refresh_token",
27
- Resource = "resource",
28
- ResponseType = "response_type",
29
- Scope = "scope",
30
- State = "state",
31
- Token = "token"
32
- }
33
- export enum Prompt {
34
- Consent = "consent",
35
- Login = "login"
36
- }
37
- export enum ReservedScope {
38
- OpenId = "openid",
39
- OfflineAccess = "offline_access"
40
- }
41
- /**
42
- * Scopes for ID Token and Userinfo Endpoint.
43
- */
44
- export enum UserScope {
45
- /**
46
- * Scope for basic user info.
47
- *
48
- * See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
49
- */
50
- Profile = "profile",
51
- /**
52
- * Scope for user email address.
53
- *
54
- * See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
55
- */
56
- Email = "email",
57
- /**
58
- * Scope for user phone number.
59
- *
60
- * See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
61
- */
62
- Phone = "phone",
63
- /**
64
- * Scope for user's custom data.
65
- *
66
- * See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
67
- */
68
- CustomData = "custom_data",
69
- /**
70
- * Scope for user's social identity details.
71
- *
72
- * See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
73
- */
74
- Identities = "identities"
75
- }
76
- export type LogtoRequestErrorBody = {
77
- code: string;
78
- message: string;
79
- };
80
- export type Requester = <T>(...args: Parameters<typeof fetch>) => Promise<T>;
81
- export type FetchTokenByAuthorizationCodeParameters = {
82
- clientId: string;
83
- tokenEndpoint: string;
84
- redirectUri: string;
85
- codeVerifier: string;
86
- code: string;
87
- resource?: string;
88
- };
89
- export type FetchTokenByRefreshTokenParameters = {
90
- clientId: string;
91
- tokenEndpoint: string;
92
- refreshToken: string;
93
- resource?: string;
94
- scopes?: string[];
95
- };
96
- type SnakeCaseCodeTokenResponse = {
97
- access_token: string;
98
- refresh_token?: string;
99
- id_token: string;
100
- scope: string;
101
- expires_in: number;
102
- };
103
- export type CodeTokenResponse = KeysToCamelCase<SnakeCaseCodeTokenResponse>;
104
- type SnakeCaseRefreshTokenTokenResponse = {
105
- access_token: string;
106
- refresh_token: string;
107
- id_token?: string;
108
- scope: string;
109
- expires_in: number;
110
- };
111
- export type RefreshTokenTokenResponse = KeysToCamelCase<SnakeCaseRefreshTokenTokenResponse>;
112
- export const fetchTokenByAuthorizationCode: ({ clientId, tokenEndpoint, redirectUri, codeVerifier, code, resource, }: FetchTokenByAuthorizationCodeParameters, requester: Requester) => Promise<CodeTokenResponse>;
113
- export const fetchTokenByRefreshToken: ({ clientId, tokenEndpoint, refreshToken, resource, scopes }: FetchTokenByRefreshTokenParameters, requester: Requester) => Promise<RefreshTokenTokenResponse>;
114
- type OidcConfigSnakeCaseResponse = {
115
- authorization_endpoint: string;
116
- token_endpoint: string;
117
- userinfo_endpoint: string;
118
- end_session_endpoint: string;
119
- revocation_endpoint: string;
120
- jwks_uri: string;
121
- issuer: string;
122
- };
123
- export const discoveryPath = "/oidc/.well-known/openid-configuration";
124
- export type OidcConfigResponse = KeysToCamelCase<OidcConfigSnakeCaseResponse>;
125
- export const fetchOidcConfig: (endpoint: string, requester: Requester) => Promise<OidcConfigResponse>;
126
- export const revoke: (revocationEndpoint: string, clientId: string, token: string, requester: Requester) => Promise<void>;
127
- export const isArbitraryObject: (data: unknown) => data is Record<string, unknown>;
128
- declare const logtoErrorCodes: Readonly<{
129
- id_token: {
130
- invalid_iat: string;
131
- invalid_token: string;
132
- };
133
- callback_uri_verification: {
134
- redirect_uri_mismatched: string;
135
- error_found: string;
136
- missing_state: string;
137
- state_mismatched: string;
138
- missing_code: string;
139
- };
140
- crypto_subtle_unavailable: "Crypto.subtle is unavailable in insecure contexts (non-HTTPS).";
141
- unexpected_response_error: "Unexpected response error from the server.";
142
- }>;
143
- export type LogtoErrorCode = NormalizeKeyPaths<typeof logtoErrorCodes>;
144
- export class LogtoError extends Error {
145
- code: LogtoErrorCode;
146
- data: unknown;
147
- constructor(code: LogtoErrorCode, data?: unknown);
148
- }
149
- export const isLogtoRequestError: (data: unknown) => data is {
150
- code: string;
151
- message: string;
152
- };
153
- export class LogtoRequestError extends Error {
154
- code: string;
155
- constructor(code: string, message: string);
156
- }
157
- export class OidcError {
158
- error: string;
159
- errorDescription?: string | undefined;
160
- constructor(error: string, errorDescription?: string | undefined);
161
- }
162
- export const parseUriParameters: (uri: string) => URLSearchParams;
163
- export const verifyAndParseCodeFromCallbackUri: (callbackUri: string, redirectUri: string, state: string) => string;
164
- export type IdTokenClaims = {
165
- iss: string;
166
- sub: string;
167
- aud: string;
168
- exp: number;
169
- iat: number;
170
- at_hash?: Nullable<string>;
171
- name?: Nullable<string>;
172
- username?: Nullable<string>;
173
- picture?: Nullable<string>;
174
- email?: Nullable<string>;
175
- email_verified?: boolean;
176
- phone_number?: Nullable<string>;
177
- phone_number_verified?: boolean;
178
- };
179
- export const verifyIdToken: (idToken: string, clientId: string, issuer: string, jwks: JWTVerifyGetKey) => Promise<void>;
180
- export const decodeIdToken: (token: string) => IdTokenClaims;
181
- /**
182
- * @param originalScopes
183
- * @return scopes should contain all default scopes (`openid`, `offline_access` and `profile`)
184
- */
185
- export const withDefaultScopes: (originalScopes?: string[]) => string;
186
- export type SignInUriParameters = {
187
- authorizationEndpoint: string;
188
- clientId: string;
189
- redirectUri: string;
190
- codeChallenge: string;
191
- state: string;
192
- scopes?: string[];
193
- resources?: string[];
194
- prompt?: Prompt;
195
- };
196
- export const generateSignInUri: ({ authorizationEndpoint, clientId, redirectUri, codeChallenge, state, scopes, resources, prompt, }: SignInUriParameters) => string;
197
- type SignOutUriParameters = {
198
- endSessionEndpoint: string;
199
- clientId: string;
200
- postLogoutRedirectUri?: string;
201
- };
202
- export const generateSignOutUri: ({ endSessionEndpoint, clientId, postLogoutRedirectUri, }: SignOutUriParameters) => string;
203
- type Identity = {
204
- userId: string;
205
- details?: Record<string, unknown>;
206
- };
207
- export type UserInfoResponse = {
208
- sub: string;
209
- name?: Nullable<string>;
210
- username?: Nullable<string>;
211
- picture?: Nullable<string>;
212
- email?: Nullable<string>;
213
- email_verified?: boolean;
214
- phone_number?: Nullable<string>;
215
- phone_number_verified?: boolean;
216
- custom_data?: unknown;
217
- identities?: Record<string, Identity>;
218
- };
219
- export const fetchUserInfo: (userInfoEndpoint: string, accessToken: string, requester: Requester) => Promise<UserInfoResponse>;
220
-
221
- //# sourceMappingURL=index.d.ts.map
package/lib/module.mjs DELETED
@@ -1,397 +0,0 @@
1
- import $lyZgO$camelcasekeys from "camelcase-keys";
2
- import {conditional as $lyZgO$conditional, urlSafeBase64 as $lyZgO$urlSafeBase64} from "@silverhand/essentials";
3
- import $lyZgO$lodashget from "lodash.get";
4
- import {jwtVerify as $lyZgO$jwtVerify} from "jose";
5
-
6
- function $parcel$exportWildcard(dest, source) {
7
- Object.keys(source).forEach(function(key) {
8
- if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {
9
- return;
10
- }
11
-
12
- Object.defineProperty(dest, key, {
13
- enumerable: true,
14
- get: function get() {
15
- return source[key];
16
- }
17
- });
18
- });
19
-
20
- return dest;
21
- }
22
- function $parcel$export(e, n, v, s) {
23
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
24
- }
25
- /* istanbul ignore file */ var $1eda3e9ea5865065$exports = {};
26
- var $ce6f2a62716522ae$exports = {};
27
-
28
- $parcel$export($ce6f2a62716522ae$exports, "fetchTokenByAuthorizationCode", () => $ce6f2a62716522ae$export$684f740cd70532d4);
29
- $parcel$export($ce6f2a62716522ae$exports, "fetchTokenByRefreshToken", () => $ce6f2a62716522ae$export$9909137b467efb8b);
30
-
31
- var $5422b71ae76f21f1$exports = {};
32
-
33
- $parcel$export($5422b71ae76f21f1$exports, "ContentType", () => $5422b71ae76f21f1$export$e2e108cbe2e4f865);
34
- $parcel$export($5422b71ae76f21f1$exports, "TokenGrantType", () => $5422b71ae76f21f1$export$3f2aafdd1ccae76c);
35
- $parcel$export($5422b71ae76f21f1$exports, "QueryKey", () => $5422b71ae76f21f1$export$65f63a8bc3cba53d);
36
- $parcel$export($5422b71ae76f21f1$exports, "Prompt", () => $5422b71ae76f21f1$export$83716a4aa1642908);
37
- $parcel$export($5422b71ae76f21f1$exports, "ReservedScope", () => $5422b71ae76f21f1$export$1d2e82cebfd4b08);
38
- $parcel$export($5422b71ae76f21f1$exports, "UserScope", () => $5422b71ae76f21f1$export$4b02c5b431f6eb78);
39
- const $5422b71ae76f21f1$export$e2e108cbe2e4f865 = {
40
- formUrlEncoded: {
41
- "Content-Type": "application/x-www-form-urlencoded"
42
- }
43
- };
44
- let $5422b71ae76f21f1$export$3f2aafdd1ccae76c;
45
- (function(TokenGrantType) {
46
- TokenGrantType["AuthorizationCode"] = "authorization_code";
47
- TokenGrantType["RefreshToken"] = "refresh_token";
48
- })($5422b71ae76f21f1$export$3f2aafdd1ccae76c || ($5422b71ae76f21f1$export$3f2aafdd1ccae76c = {}));
49
- let $5422b71ae76f21f1$export$65f63a8bc3cba53d;
50
- (function(QueryKey) {
51
- QueryKey["ClientId"] = "client_id";
52
- QueryKey["Code"] = "code";
53
- QueryKey["CodeChallenge"] = "code_challenge";
54
- QueryKey["CodeChallengeMethod"] = "code_challenge_method";
55
- QueryKey["CodeVerifier"] = "code_verifier";
56
- QueryKey["Error"] = "error";
57
- QueryKey["ErrorDescription"] = "error_description";
58
- QueryKey["GrantType"] = "grant_type";
59
- QueryKey["IdToken"] = "id_token";
60
- QueryKey["IdTokenHint"] = "id_token_hint";
61
- QueryKey["PostLogoutRedirectUri"] = "post_logout_redirect_uri";
62
- QueryKey["Prompt"] = "prompt";
63
- QueryKey["RedirectUri"] = "redirect_uri";
64
- QueryKey["RefreshToken"] = "refresh_token";
65
- QueryKey["Resource"] = "resource";
66
- QueryKey["ResponseType"] = "response_type";
67
- QueryKey["Scope"] = "scope";
68
- QueryKey["State"] = "state";
69
- QueryKey["Token"] = "token";
70
- })($5422b71ae76f21f1$export$65f63a8bc3cba53d || ($5422b71ae76f21f1$export$65f63a8bc3cba53d = {}));
71
- let $5422b71ae76f21f1$export$83716a4aa1642908;
72
- (function(Prompt) {
73
- Prompt["Consent"] = "consent";
74
- Prompt["Login"] = "login";
75
- })($5422b71ae76f21f1$export$83716a4aa1642908 || ($5422b71ae76f21f1$export$83716a4aa1642908 = {}));
76
- let $5422b71ae76f21f1$export$1d2e82cebfd4b08;
77
- (function(ReservedScope) {
78
- ReservedScope["OpenId"] = "openid";
79
- ReservedScope["OfflineAccess"] = "offline_access";
80
- })($5422b71ae76f21f1$export$1d2e82cebfd4b08 || ($5422b71ae76f21f1$export$1d2e82cebfd4b08 = {}));
81
- let $5422b71ae76f21f1$export$4b02c5b431f6eb78;
82
- (function(UserScope) {
83
- UserScope[/**
84
- * Scope for basic user info.
85
- *
86
- * See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
87
- */ "Profile"] = "profile";
88
- UserScope[/**
89
- * Scope for user email address.
90
- *
91
- * See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
92
- */ "Email"] = "email";
93
- UserScope[/**
94
- * Scope for user phone number.
95
- *
96
- * See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
97
- */ "Phone"] = "phone";
98
- UserScope[/**
99
- * Scope for user's custom data.
100
- *
101
- * See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
102
- */ "CustomData"] = "custom_data";
103
- UserScope[/**
104
- * Scope for user's social identity details.
105
- *
106
- * See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
107
- */ "Identities"] = "identities";
108
- })($5422b71ae76f21f1$export$4b02c5b431f6eb78 || ($5422b71ae76f21f1$export$4b02c5b431f6eb78 = {}));
109
-
110
-
111
- const $ce6f2a62716522ae$export$684f740cd70532d4 = async ({ clientId: clientId , tokenEndpoint: tokenEndpoint , redirectUri: redirectUri , codeVerifier: codeVerifier , code: code , resource: resource }, requester)=>{
112
- const parameters = new URLSearchParams();
113
- parameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).ClientId, clientId);
114
- parameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).Code, code);
115
- parameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).CodeVerifier, codeVerifier);
116
- parameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).RedirectUri, redirectUri);
117
- parameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).GrantType, (0, $5422b71ae76f21f1$export$3f2aafdd1ccae76c).AuthorizationCode);
118
- if (resource) parameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).Resource, resource);
119
- const snakeCaseCodeTokenResponse = await requester(tokenEndpoint, {
120
- method: "POST",
121
- headers: (0, $5422b71ae76f21f1$export$e2e108cbe2e4f865).formUrlEncoded,
122
- body: parameters
123
- });
124
- return (0, $lyZgO$camelcasekeys)(snakeCaseCodeTokenResponse);
125
- };
126
- const $ce6f2a62716522ae$export$9909137b467efb8b = async ({ clientId: clientId , tokenEndpoint: tokenEndpoint , refreshToken: refreshToken , resource: resource , scopes: scopes }, requester)=>{
127
- const parameters = new URLSearchParams();
128
- parameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).ClientId, clientId);
129
- parameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).RefreshToken, refreshToken);
130
- parameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).GrantType, (0, $5422b71ae76f21f1$export$3f2aafdd1ccae76c).RefreshToken);
131
- if (resource) parameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).Resource, resource);
132
- if (scopes?.length) parameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).Scope, scopes.join(" "));
133
- const snakeCaseRefreshTokenTokenResponse = await requester(tokenEndpoint, {
134
- method: "POST",
135
- headers: (0, $5422b71ae76f21f1$export$e2e108cbe2e4f865).formUrlEncoded,
136
- body: parameters
137
- });
138
- return (0, $lyZgO$camelcasekeys)(snakeCaseRefreshTokenTokenResponse);
139
- };
140
-
141
-
142
- var $eefdbfea5ec3abd9$exports = {};
143
-
144
- $parcel$export($eefdbfea5ec3abd9$exports, "discoveryPath", () => $eefdbfea5ec3abd9$export$815bda5ead26b243);
145
- $parcel$export($eefdbfea5ec3abd9$exports, "fetchOidcConfig", () => $eefdbfea5ec3abd9$export$98242d8e822ad11f);
146
-
147
- const $eefdbfea5ec3abd9$export$815bda5ead26b243 = "/oidc/.well-known/openid-configuration";
148
- const $eefdbfea5ec3abd9$export$98242d8e822ad11f = async (endpoint, requester)=>(0, $lyZgO$camelcasekeys)(await requester(endpoint));
149
-
150
-
151
- var $7397ba7739ada584$exports = {};
152
-
153
- $parcel$export($7397ba7739ada584$exports, "revoke", () => $7397ba7739ada584$export$573f8dbbf6fbef75);
154
-
155
- const $7397ba7739ada584$export$573f8dbbf6fbef75 = async (revocationEndpoint, clientId, token, requester)=>requester(revocationEndpoint, {
156
- method: "POST",
157
- headers: (0, $5422b71ae76f21f1$export$e2e108cbe2e4f865).formUrlEncoded,
158
- body: new URLSearchParams({
159
- [(0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).ClientId]: clientId,
160
- [(0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).Token]: token
161
- })
162
- });
163
-
164
-
165
- var $bfba480b8ff41607$exports = {};
166
-
167
- $parcel$export($bfba480b8ff41607$exports, "generateSignInUri", () => $bfba480b8ff41607$export$b01a187f12b774c6);
168
-
169
- var $40555044b252dc61$exports = {};
170
- var $2cac19d9fad63bff$exports = {};
171
-
172
- $parcel$export($2cac19d9fad63bff$exports, "parseUriParameters", () => $2cac19d9fad63bff$export$4851e69315d5b72c);
173
- $parcel$export($2cac19d9fad63bff$exports, "verifyAndParseCodeFromCallbackUri", () => $2cac19d9fad63bff$export$dc3fae3c99763885);
174
-
175
-
176
- var $ab66c74b65acc6a3$exports = {};
177
-
178
- $parcel$export($ab66c74b65acc6a3$exports, "LogtoError", () => $ab66c74b65acc6a3$export$ba60d77e6748b659);
179
- $parcel$export($ab66c74b65acc6a3$exports, "isLogtoRequestError", () => $ab66c74b65acc6a3$export$27f79c8238476d38);
180
- $parcel$export($ab66c74b65acc6a3$exports, "LogtoRequestError", () => $ab66c74b65acc6a3$export$e6e15b8ba42b9b70);
181
- $parcel$export($ab66c74b65acc6a3$exports, "OidcError", () => $ab66c74b65acc6a3$export$d4832bcf9ce430e0);
182
-
183
- var $428623a300dc9baf$exports = {};
184
-
185
- $parcel$export($428623a300dc9baf$exports, "isArbitraryObject", () => $428623a300dc9baf$export$aa016a295c6092c8);
186
- const $428623a300dc9baf$export$aa016a295c6092c8 = (data)=>typeof data === "object" && data !== null;
187
-
188
-
189
- const $ab66c74b65acc6a3$var$logtoErrorCodes = Object.freeze({
190
- id_token: {
191
- invalid_iat: "Invalid issued at time in the ID token",
192
- invalid_token: "Invalid ID token"
193
- },
194
- callback_uri_verification: {
195
- redirect_uri_mismatched: "The callback URI mismatches the redirect URI.",
196
- error_found: "Error found in the callback URI",
197
- missing_state: "Missing state in the callback URI",
198
- state_mismatched: "State mismatched in the callback URI",
199
- missing_code: "Missing code in the callback URI"
200
- },
201
- crypto_subtle_unavailable: "Crypto.subtle is unavailable in insecure contexts (non-HTTPS).",
202
- unexpected_response_error: "Unexpected response error from the server."
203
- });
204
- const $ab66c74b65acc6a3$var$getMessageByErrorCode = (errorCode)=>{
205
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
206
- const message = (0, $lyZgO$lodashget)($ab66c74b65acc6a3$var$logtoErrorCodes, errorCode);
207
- if (typeof message === "string") return message;
208
- return errorCode;
209
- };
210
- class $ab66c74b65acc6a3$export$ba60d77e6748b659 extends Error {
211
- constructor(code, data){
212
- super($ab66c74b65acc6a3$var$getMessageByErrorCode(code));
213
- this.code = code;
214
- this.data = data;
215
- }
216
- }
217
- const $ab66c74b65acc6a3$export$27f79c8238476d38 = (data)=>{
218
- if (!(0, $428623a300dc9baf$export$aa016a295c6092c8)(data)) return false;
219
- return typeof data.code === "string" && typeof data.message === "string";
220
- };
221
- class $ab66c74b65acc6a3$export$e6e15b8ba42b9b70 extends Error {
222
- constructor(code, message){
223
- super(message);
224
- this.code = code;
225
- }
226
- }
227
- class $ab66c74b65acc6a3$export$d4832bcf9ce430e0 {
228
- constructor(error, errorDescription){
229
- this.error = error;
230
- this.errorDescription = errorDescription;
231
- }
232
- }
233
-
234
-
235
- const $2cac19d9fad63bff$export$4851e69315d5b72c = (uri)=>{
236
- const [, queryString = ""] = uri.split("?");
237
- return new URLSearchParams(queryString);
238
- };
239
- const $2cac19d9fad63bff$export$dc3fae3c99763885 = (callbackUri, redirectUri, state)=>{
240
- if (!callbackUri.startsWith(redirectUri)) throw new (0, $ab66c74b65acc6a3$export$ba60d77e6748b659)("callback_uri_verification.redirect_uri_mismatched");
241
- const uriParameters = $2cac19d9fad63bff$export$4851e69315d5b72c(callbackUri);
242
- const error = (0, $lyZgO$conditional)(uriParameters.get((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).Error));
243
- const errorDescription = (0, $lyZgO$conditional)(uriParameters.get((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).ErrorDescription));
244
- if (error) throw new (0, $ab66c74b65acc6a3$export$ba60d77e6748b659)("callback_uri_verification.error_found", new (0, $ab66c74b65acc6a3$export$d4832bcf9ce430e0)(error, errorDescription));
245
- const stateFromCallbackUri = uriParameters.get((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).State);
246
- if (!stateFromCallbackUri) throw new (0, $ab66c74b65acc6a3$export$ba60d77e6748b659)("callback_uri_verification.missing_state");
247
- if (stateFromCallbackUri !== state) throw new (0, $ab66c74b65acc6a3$export$ba60d77e6748b659)("callback_uri_verification.state_mismatched");
248
- const code = uriParameters.get((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).Code);
249
- if (!code) throw new (0, $ab66c74b65acc6a3$export$ba60d77e6748b659)("callback_uri_verification.missing_code");
250
- return code;
251
- };
252
-
253
-
254
-
255
- var $dfd50234d3585f12$exports = {};
256
-
257
- $parcel$export($dfd50234d3585f12$exports, "verifyIdToken", () => $dfd50234d3585f12$export$b5b3317c8aecbcd5);
258
- $parcel$export($dfd50234d3585f12$exports, "decodeIdToken", () => $dfd50234d3585f12$export$aac2d5b7f5cd16d5);
259
-
260
-
261
-
262
-
263
- const $dfd50234d3585f12$var$issuedAtTimeTolerance = 60;
264
- /* eslint-disable complexity */ /**
265
- * @link [ID Token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)
266
- */ function $dfd50234d3585f12$var$assertIdTokenClaims(data) {
267
- if (!(0, $428623a300dc9baf$export$aa016a295c6092c8)(data)) throw new TypeError("IdToken is expected to be an object");
268
- for (const key of [
269
- "iss",
270
- "sub",
271
- "aud"
272
- ]){
273
- if (typeof data[key] !== "string") throw new TypeError(`At path: IdToken.${key}: expected a string`);
274
- }
275
- for (const key of [
276
- "exp",
277
- "iat"
278
- ]){
279
- if (typeof data[key] !== "number") throw new TypeError(`At path: IdToken.${key}: expected a number`);
280
- }
281
- for (const key of [
282
- "at_hash",
283
- "name",
284
- "username",
285
- "picture",
286
- "email",
287
- "phone_number"
288
- ]){
289
- if (data[key] === undefined) continue;
290
- if (typeof data[key] !== "string" && data[key] !== null) throw new TypeError(`At path: IdToken.${key}: expected null or a string`);
291
- }
292
- for (const key of [
293
- "email_verified",
294
- "phone_number_verified"
295
- ]){
296
- if (data[key] === undefined) continue;
297
- if (typeof data[key] !== "boolean") throw new TypeError(`At path: IdToken.${key}: expected a boolean`);
298
- }
299
- }
300
- const $dfd50234d3585f12$export$b5b3317c8aecbcd5 = async (idToken, clientId, issuer, jwks)=>{
301
- const result = await (0, $lyZgO$jwtVerify)(idToken, jwks, {
302
- audience: clientId,
303
- issuer: issuer
304
- });
305
- if (Math.abs((result.payload.iat ?? 0) - Date.now() / 1000) > $dfd50234d3585f12$var$issuedAtTimeTolerance) throw new (0, $ab66c74b65acc6a3$export$ba60d77e6748b659)("id_token.invalid_iat");
306
- };
307
- const $dfd50234d3585f12$export$aac2d5b7f5cd16d5 = (token)=>{
308
- const { 1: encodedPayload } = token.split(".");
309
- if (!encodedPayload) throw new (0, $ab66c74b65acc6a3$export$ba60d77e6748b659)("id_token.invalid_token");
310
- const json = (0, $lyZgO$urlSafeBase64).decode(encodedPayload);
311
- const idTokenClaims = JSON.parse(json);
312
- $dfd50234d3585f12$var$assertIdTokenClaims(idTokenClaims);
313
- return idTokenClaims;
314
- };
315
-
316
-
317
- var $570e2e6b31a027ff$exports = {};
318
-
319
- $parcel$export($570e2e6b31a027ff$exports, "withDefaultScopes", () => $570e2e6b31a027ff$export$3cf0748e30b766d7);
320
-
321
- const $570e2e6b31a027ff$export$3cf0748e30b766d7 = (originalScopes)=>{
322
- const reservedScopes = Object.values((0, $5422b71ae76f21f1$export$1d2e82cebfd4b08));
323
- const uniqueScopes = new Set([
324
- ...reservedScopes,
325
- (0, $5422b71ae76f21f1$export$4b02c5b431f6eb78).Profile,
326
- ...originalScopes ?? []
327
- ]);
328
- return Array.from(uniqueScopes).join(" ");
329
- };
330
-
331
-
332
-
333
- $parcel$exportWildcard($40555044b252dc61$exports, $2cac19d9fad63bff$exports);
334
- $parcel$exportWildcard($40555044b252dc61$exports, $ab66c74b65acc6a3$exports);
335
- $parcel$exportWildcard($40555044b252dc61$exports, $dfd50234d3585f12$exports);
336
- $parcel$exportWildcard($40555044b252dc61$exports, $570e2e6b31a027ff$exports);
337
- $parcel$exportWildcard($40555044b252dc61$exports, $428623a300dc9baf$exports);
338
-
339
-
340
- const $bfba480b8ff41607$var$codeChallengeMethod = "S256";
341
- const $bfba480b8ff41607$var$responseType = "code";
342
- const $bfba480b8ff41607$export$b01a187f12b774c6 = ({ authorizationEndpoint: authorizationEndpoint , clientId: clientId , redirectUri: redirectUri , codeChallenge: codeChallenge , state: state , scopes: scopes , resources: resources , prompt: prompt })=>{
343
- const urlSearchParameters = new URLSearchParams({
344
- [(0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).ClientId]: clientId,
345
- [(0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).RedirectUri]: redirectUri,
346
- [(0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).CodeChallenge]: codeChallenge,
347
- [(0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).CodeChallengeMethod]: $bfba480b8ff41607$var$codeChallengeMethod,
348
- [(0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).State]: state,
349
- [(0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).ResponseType]: $bfba480b8ff41607$var$responseType,
350
- [(0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).Prompt]: prompt ?? (0, $5422b71ae76f21f1$export$83716a4aa1642908).Consent,
351
- [(0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).Scope]: (0, $570e2e6b31a027ff$export$3cf0748e30b766d7)(scopes)
352
- });
353
- for (const resource of resources ?? [])urlSearchParameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).Resource, resource);
354
- return `${authorizationEndpoint}?${urlSearchParameters.toString()}`;
355
- };
356
-
357
-
358
- var $fcccd93c698efc4f$exports = {};
359
-
360
- $parcel$export($fcccd93c698efc4f$exports, "generateSignOutUri", () => $fcccd93c698efc4f$export$b3c9a2bd2330de28);
361
-
362
- const $fcccd93c698efc4f$export$b3c9a2bd2330de28 = ({ endSessionEndpoint: endSessionEndpoint , clientId: clientId , postLogoutRedirectUri: postLogoutRedirectUri })=>{
363
- const urlSearchParameters = new URLSearchParams({
364
- [(0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).ClientId]: clientId
365
- });
366
- if (postLogoutRedirectUri) urlSearchParameters.append((0, $5422b71ae76f21f1$export$65f63a8bc3cba53d).PostLogoutRedirectUri, postLogoutRedirectUri);
367
- return `${endSessionEndpoint}?${urlSearchParameters.toString()}`;
368
- };
369
-
370
-
371
- var $4fde57d99d3b8df5$exports = {};
372
-
373
- $parcel$export($4fde57d99d3b8df5$exports, "fetchUserInfo", () => $4fde57d99d3b8df5$export$eee09f98e5b044aa);
374
- const $4fde57d99d3b8df5$export$eee09f98e5b044aa = async (userInfoEndpoint, accessToken, requester)=>requester(userInfoEndpoint, {
375
- headers: {
376
- Authorization: `Bearer ${accessToken}`
377
- }
378
- });
379
-
380
-
381
- $parcel$exportWildcard($1eda3e9ea5865065$exports, $ce6f2a62716522ae$exports);
382
- $parcel$exportWildcard($1eda3e9ea5865065$exports, $eefdbfea5ec3abd9$exports);
383
- $parcel$exportWildcard($1eda3e9ea5865065$exports, $7397ba7739ada584$exports);
384
- $parcel$exportWildcard($1eda3e9ea5865065$exports, $bfba480b8ff41607$exports);
385
- $parcel$exportWildcard($1eda3e9ea5865065$exports, $fcccd93c698efc4f$exports);
386
- $parcel$exportWildcard($1eda3e9ea5865065$exports, $4fde57d99d3b8df5$exports);
387
-
388
-
389
-
390
-
391
- var $be59ab5b66bc1c36$exports = {};
392
-
393
-
394
-
395
-
396
- export {$ce6f2a62716522ae$export$684f740cd70532d4 as fetchTokenByAuthorizationCode, $ce6f2a62716522ae$export$9909137b467efb8b as fetchTokenByRefreshToken, $eefdbfea5ec3abd9$export$815bda5ead26b243 as discoveryPath, $eefdbfea5ec3abd9$export$98242d8e822ad11f as fetchOidcConfig, $7397ba7739ada584$export$573f8dbbf6fbef75 as revoke, $bfba480b8ff41607$export$b01a187f12b774c6 as generateSignInUri, $fcccd93c698efc4f$export$b3c9a2bd2330de28 as generateSignOutUri, $4fde57d99d3b8df5$export$eee09f98e5b044aa as fetchUserInfo, $2cac19d9fad63bff$export$4851e69315d5b72c as parseUriParameters, $2cac19d9fad63bff$export$dc3fae3c99763885 as verifyAndParseCodeFromCallbackUri, $ab66c74b65acc6a3$export$ba60d77e6748b659 as LogtoError, $ab66c74b65acc6a3$export$27f79c8238476d38 as isLogtoRequestError, $ab66c74b65acc6a3$export$e6e15b8ba42b9b70 as LogtoRequestError, $ab66c74b65acc6a3$export$d4832bcf9ce430e0 as OidcError, $dfd50234d3585f12$export$b5b3317c8aecbcd5 as verifyIdToken, $dfd50234d3585f12$export$aac2d5b7f5cd16d5 as decodeIdToken, $570e2e6b31a027ff$export$3cf0748e30b766d7 as withDefaultScopes, $428623a300dc9baf$export$aa016a295c6092c8 as isArbitraryObject, $5422b71ae76f21f1$export$e2e108cbe2e4f865 as ContentType, $5422b71ae76f21f1$export$3f2aafdd1ccae76c as TokenGrantType, $5422b71ae76f21f1$export$65f63a8bc3cba53d as QueryKey, $5422b71ae76f21f1$export$83716a4aa1642908 as Prompt, $5422b71ae76f21f1$export$1d2e82cebfd4b08 as ReservedScope, $5422b71ae76f21f1$export$4b02c5b431f6eb78 as UserScope};
397
- //# sourceMappingURL=module.mjs.map