@logto/js 0.2.0 → 1.0.0-alpha.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.
- package/lib/index.d.ts +187 -3
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +361 -16
- package/lib/index.js.map +1 -0
- package/lib/module.js +356 -0
- package/lib/module.js.map +1 -0
- package/package.json +15 -5
- package/lib/consts/index.d.ts +0 -34
- package/lib/consts/index.js +0 -38
- package/lib/core/fetch-token.d.ts +0 -36
- package/lib/core/fetch-token.js +0 -45
- package/lib/core/index.d.ts +0 -5
- package/lib/core/index.js +0 -17
- package/lib/core/oidc-config.d.ts +0 -14
- package/lib/core/oidc-config.js +0 -10
- package/lib/core/revoke.d.ts +0 -2
- package/lib/core/revoke.js +0 -13
- package/lib/core/sign-in.d.ts +0 -12
- package/lib/core/sign-in.js +0 -24
- package/lib/core/sign-out.d.ts +0 -7
- package/lib/core/sign-out.js +0 -12
- package/lib/utils/callback-uri.d.ts +0 -2
- package/lib/utils/callback-uri.js +0 -36
- package/lib/utils/errors.d.ts +0 -33
- package/lib/utils/errors.js +0 -54
- package/lib/utils/generators.d.ts +0 -18
- package/lib/utils/generators.js +0 -34
- package/lib/utils/id-token.d.ts +0 -32
- package/lib/utils/id-token.js +0 -60
- package/lib/utils/index.d.ts +0 -6
- package/lib/utils/index.js +0 -18
- package/lib/utils/requester.d.ts +0 -2
- package/lib/utils/requester.js +0 -20
- package/lib/utils/scopes.d.ts +0 -5
- package/lib/utils/scopes.js +0 -12
package/lib/index.d.ts
CHANGED
|
@@ -1,3 +1,187 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { NormalizeKeyPaths, KeysToCamelCase } from "@silverhand/essentials";
|
|
2
|
+
import { JWTVerifyGetKey } from "jose";
|
|
3
|
+
import * as s from "superstruct";
|
|
4
|
+
export const ContentType: {
|
|
5
|
+
formUrlEncoded: {
|
|
6
|
+
'Content-Type': string;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export enum TokenGrantType {
|
|
10
|
+
AuthorizationCode = "authorization_code",
|
|
11
|
+
RefreshToken = "refresh_token"
|
|
12
|
+
}
|
|
13
|
+
export enum QueryKey {
|
|
14
|
+
ClientId = "client_id",
|
|
15
|
+
Code = "code",
|
|
16
|
+
CodeChallenge = "code_challenge",
|
|
17
|
+
CodeChallengeMethod = "code_challenge_method",
|
|
18
|
+
CodeVerifier = "code_verifier",
|
|
19
|
+
Error = "error",
|
|
20
|
+
ErrorDescription = "error_description",
|
|
21
|
+
GrantType = "grant_type",
|
|
22
|
+
IdToken = "id_token",
|
|
23
|
+
IdTokenHint = "id_token_hint",
|
|
24
|
+
PostLogoutRedirectUri = "post_logout_redirect_uri",
|
|
25
|
+
Prompt = "prompt",
|
|
26
|
+
RedirectUri = "redirect_uri",
|
|
27
|
+
RefreshToken = "refresh_token",
|
|
28
|
+
Resource = "resource",
|
|
29
|
+
ResponseType = "response_type",
|
|
30
|
+
Scope = "scope",
|
|
31
|
+
State = "state",
|
|
32
|
+
Token = "token"
|
|
33
|
+
}
|
|
34
|
+
export enum Prompt {
|
|
35
|
+
Consent = "consent",
|
|
36
|
+
Login = "login"
|
|
37
|
+
}
|
|
38
|
+
declare const logtoErrorCodes: Readonly<{
|
|
39
|
+
id_token: {
|
|
40
|
+
invalid_iat: string;
|
|
41
|
+
invalid_token: string;
|
|
42
|
+
};
|
|
43
|
+
callback_uri_verification: {
|
|
44
|
+
redirect_uri_mismatched: string;
|
|
45
|
+
error_found: string;
|
|
46
|
+
missing_state: string;
|
|
47
|
+
state_mismatched: string;
|
|
48
|
+
missing_code: string;
|
|
49
|
+
};
|
|
50
|
+
requester: {
|
|
51
|
+
not_provide_fetch: string;
|
|
52
|
+
};
|
|
53
|
+
}>;
|
|
54
|
+
export type LogtoErrorCode = NormalizeKeyPaths<typeof logtoErrorCodes>;
|
|
55
|
+
export class LogtoError extends Error {
|
|
56
|
+
code: LogtoErrorCode;
|
|
57
|
+
data: unknown;
|
|
58
|
+
constructor(code: LogtoErrorCode, data?: unknown);
|
|
59
|
+
}
|
|
60
|
+
export class LogtoRequestError extends Error {
|
|
61
|
+
code: string;
|
|
62
|
+
constructor(code: string, message: string);
|
|
63
|
+
}
|
|
64
|
+
export class OidcError {
|
|
65
|
+
error: string;
|
|
66
|
+
errorDescription?: string;
|
|
67
|
+
constructor(error: string, errorDescription?: string);
|
|
68
|
+
}
|
|
69
|
+
export const parseUriParameters: (uri: string) => URLSearchParams;
|
|
70
|
+
export const verifyAndParseCodeFromCallbackUri: (callbackUri: string, redirectUri: string, state: string) => string;
|
|
71
|
+
/**
|
|
72
|
+
* Generates random string for state and encodes them in url safe base64
|
|
73
|
+
*/
|
|
74
|
+
export const generateState: () => string;
|
|
75
|
+
/**
|
|
76
|
+
* Generates code verifier
|
|
77
|
+
*
|
|
78
|
+
* @link [Client Creates a Code Verifier](https://datatracker.ietf.org/doc/html/rfc7636#section-4.1)
|
|
79
|
+
*/
|
|
80
|
+
export const generateCodeVerifier: () => string;
|
|
81
|
+
/**
|
|
82
|
+
* Calculates the S256 PKCE code challenge for an arbitrary code verifier and encodes it in url safe base64
|
|
83
|
+
*
|
|
84
|
+
* @param {String} codeVerifier Code verifier to calculate the S256 code challenge for
|
|
85
|
+
* @link [Client Creates the Code Challenge](https://datatracker.ietf.org/doc/html/rfc7636#section-4.2)
|
|
86
|
+
*/
|
|
87
|
+
export const generateCodeChallenge: (codeVerifier: string) => Promise<string>;
|
|
88
|
+
/**
|
|
89
|
+
* @link [ID Token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)
|
|
90
|
+
*/
|
|
91
|
+
declare const IdTokenClaimsSchema: s.Struct<{
|
|
92
|
+
iss: string;
|
|
93
|
+
sub: string;
|
|
94
|
+
aud: string;
|
|
95
|
+
exp: number;
|
|
96
|
+
iat: number;
|
|
97
|
+
at_hash?: string | null | undefined;
|
|
98
|
+
name?: string | null | undefined;
|
|
99
|
+
username?: string | null | undefined;
|
|
100
|
+
avatar?: string | null | undefined;
|
|
101
|
+
role_names?: string[] | null | undefined;
|
|
102
|
+
}, {
|
|
103
|
+
iss: s.Struct<string, null>;
|
|
104
|
+
sub: s.Struct<string, null>;
|
|
105
|
+
aud: s.Struct<string, null>;
|
|
106
|
+
exp: s.Struct<number, null>;
|
|
107
|
+
iat: s.Struct<number, null>;
|
|
108
|
+
at_hash: s.Struct<string | null | undefined, null>;
|
|
109
|
+
name: s.Struct<string | null | undefined, null>;
|
|
110
|
+
username: s.Struct<string | null | undefined, null>;
|
|
111
|
+
avatar: s.Struct<string | null | undefined, null>;
|
|
112
|
+
role_names: s.Struct<string[] | null | undefined, s.Struct<string, null>>;
|
|
113
|
+
}>;
|
|
114
|
+
export type IdTokenClaims = s.Infer<typeof IdTokenClaimsSchema>;
|
|
115
|
+
export const verifyIdToken: (idToken: string, clientId: string, issuer: string, jwks: JWTVerifyGetKey) => Promise<void>;
|
|
116
|
+
export const decodeIdToken: (token: string) => IdTokenClaims;
|
|
117
|
+
export const createRequester: (fetchFunction?: typeof fetch | undefined) => <T>(input: RequestInfo, init?: RequestInit | undefined) => Promise<T>;
|
|
118
|
+
export type Requester = ReturnType<typeof createRequester>;
|
|
119
|
+
/**
|
|
120
|
+
* @param originalScopes
|
|
121
|
+
* @return scopes should contain all reserved scopes ( Logto requires `openid` and `offline_access` )
|
|
122
|
+
*/
|
|
123
|
+
export const withReservedScopes: (originalScopes?: string[] | undefined) => string;
|
|
124
|
+
export type FetchTokenByAuthorizationCodeParameters = {
|
|
125
|
+
clientId: string;
|
|
126
|
+
tokenEndpoint: string;
|
|
127
|
+
redirectUri: string;
|
|
128
|
+
codeVerifier: string;
|
|
129
|
+
code: string;
|
|
130
|
+
resource?: string;
|
|
131
|
+
};
|
|
132
|
+
export type FetchTokenByRefreshTokenParameters = {
|
|
133
|
+
clientId: string;
|
|
134
|
+
tokenEndpoint: string;
|
|
135
|
+
refreshToken: string;
|
|
136
|
+
resource?: string;
|
|
137
|
+
scopes?: string[];
|
|
138
|
+
};
|
|
139
|
+
type SnakeCaseCodeTokenResponse = {
|
|
140
|
+
access_token: string;
|
|
141
|
+
refresh_token?: string;
|
|
142
|
+
id_token: string;
|
|
143
|
+
scope: string;
|
|
144
|
+
expires_in: number;
|
|
145
|
+
};
|
|
146
|
+
export type CodeTokenResponse = KeysToCamelCase<SnakeCaseCodeTokenResponse>;
|
|
147
|
+
type SnakeCaseRefreshTokenTokenResponse = {
|
|
148
|
+
access_token: string;
|
|
149
|
+
refresh_token: string;
|
|
150
|
+
id_token?: string;
|
|
151
|
+
scope: string;
|
|
152
|
+
expires_in: number;
|
|
153
|
+
};
|
|
154
|
+
export type RefreshTokenTokenResponse = KeysToCamelCase<SnakeCaseRefreshTokenTokenResponse>;
|
|
155
|
+
export const fetchTokenByAuthorizationCode: ({ clientId, tokenEndpoint, redirectUri, codeVerifier, code, resource, }: FetchTokenByAuthorizationCodeParameters, requester: Requester) => Promise<CodeTokenResponse>;
|
|
156
|
+
export const fetchTokenByRefreshToken: ({ clientId, tokenEndpoint, refreshToken, resource, scopes }: FetchTokenByRefreshTokenParameters, requester: Requester) => Promise<RefreshTokenTokenResponse>;
|
|
157
|
+
type OidcConfigSnakeCaseResponse = {
|
|
158
|
+
authorization_endpoint: string;
|
|
159
|
+
token_endpoint: string;
|
|
160
|
+
end_session_endpoint: string;
|
|
161
|
+
revocation_endpoint: string;
|
|
162
|
+
jwks_uri: string;
|
|
163
|
+
issuer: string;
|
|
164
|
+
};
|
|
165
|
+
export const discoveryPath = "/oidc/.well-known/openid-configuration";
|
|
166
|
+
export type OidcConfigResponse = KeysToCamelCase<OidcConfigSnakeCaseResponse>;
|
|
167
|
+
export const fetchOidcConfig: (endpoint: string, requester: Requester) => Promise<OidcConfigResponse>;
|
|
168
|
+
export const revoke: (revocationEndpoint: string, clientId: string, token: string, requester: Requester) => Promise<void>;
|
|
169
|
+
export type SignInUriParameters = {
|
|
170
|
+
authorizationEndpoint: string;
|
|
171
|
+
clientId: string;
|
|
172
|
+
redirectUri: string;
|
|
173
|
+
codeChallenge: string;
|
|
174
|
+
state: string;
|
|
175
|
+
scopes?: string[];
|
|
176
|
+
resources?: string[];
|
|
177
|
+
prompt?: Prompt;
|
|
178
|
+
};
|
|
179
|
+
export const generateSignInUri: ({ authorizationEndpoint, clientId, redirectUri, codeChallenge, state, scopes, resources, prompt, }: SignInUriParameters) => string;
|
|
180
|
+
type SignOutUriParameters = {
|
|
181
|
+
endSessionEndpoint: string;
|
|
182
|
+
idToken: string;
|
|
183
|
+
postLogoutRedirectUri?: string;
|
|
184
|
+
};
|
|
185
|
+
export const generateSignOutUri: ({ endSessionEndpoint, idToken, postLogoutRedirectUri, }: SignOutUriParameters) => string;
|
|
186
|
+
|
|
187
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["packages/js/src/src/consts/index.ts","packages/js/src/src/utils/errors.ts","packages/js/src/src/utils/callback-uri.ts","packages/js/src/src/utils/generators.ts","packages/js/src/src/utils/id-token.ts","packages/js/src/src/utils/requester.ts","packages/js/src/src/utils/scopes.ts","packages/js/src/src/utils/index.ts","packages/js/src/src/core/fetch-token.ts","packages/js/src/src/core/oidc-config.ts","packages/js/src/src/core/revoke.ts","packages/js/src/src/core/sign-in.ts","packages/js/src/src/core/sign-out.ts","packages/js/src/src/core/index.ts","packages/js/src/src/index.ts","packages/js/src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/* istanbul ignore file */\nexport * from './core';\nexport * from './utils';\nexport * from './consts';\n"],"names":[],"version":3,"file":"index.d.ts.map"}
|
package/lib/index.js
CHANGED
|
@@ -1,16 +1,361 @@
|
|
|
1
|
-
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
var $eVySA$camelcasekeys = require("camelcase-keys");
|
|
2
|
+
var $eVySA$silverhandessentials = require("@silverhand/essentials");
|
|
3
|
+
var $eVySA$lodashget = require("lodash.get");
|
|
4
|
+
var $eVySA$jsbase64 = require("js-base64");
|
|
5
|
+
var $eVySA$jose = require("jose");
|
|
6
|
+
var $eVySA$superstruct = require("superstruct");
|
|
7
|
+
|
|
8
|
+
function $parcel$exportWildcard(dest, source) {
|
|
9
|
+
Object.keys(source).forEach(function(key) {
|
|
10
|
+
if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
Object.defineProperty(dest, key, {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function get() {
|
|
17
|
+
return source[key];
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
return dest;
|
|
23
|
+
}
|
|
24
|
+
function $parcel$interopDefault(a) {
|
|
25
|
+
return a && a.__esModule ? a.default : a;
|
|
26
|
+
}
|
|
27
|
+
function $parcel$export(e, n, v, s) {
|
|
28
|
+
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
29
|
+
}
|
|
30
|
+
var $a722dce254028e46$exports = {};
|
|
31
|
+
var $e6b305c1e572373d$exports = {};
|
|
32
|
+
|
|
33
|
+
$parcel$export($e6b305c1e572373d$exports, "fetchTokenByAuthorizationCode", () => $e6b305c1e572373d$export$684f740cd70532d4);
|
|
34
|
+
$parcel$export($e6b305c1e572373d$exports, "fetchTokenByRefreshToken", () => $e6b305c1e572373d$export$9909137b467efb8b);
|
|
35
|
+
|
|
36
|
+
var $5c367c11270b61f6$exports = {};
|
|
37
|
+
|
|
38
|
+
$parcel$export($5c367c11270b61f6$exports, "ContentType", () => $5c367c11270b61f6$export$e2e108cbe2e4f865);
|
|
39
|
+
$parcel$export($5c367c11270b61f6$exports, "TokenGrantType", () => $5c367c11270b61f6$export$3f2aafdd1ccae76c);
|
|
40
|
+
$parcel$export($5c367c11270b61f6$exports, "QueryKey", () => $5c367c11270b61f6$export$65f63a8bc3cba53d);
|
|
41
|
+
$parcel$export($5c367c11270b61f6$exports, "Prompt", () => $5c367c11270b61f6$export$83716a4aa1642908);
|
|
42
|
+
const $5c367c11270b61f6$export$e2e108cbe2e4f865 = {
|
|
43
|
+
formUrlEncoded: {
|
|
44
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
let $5c367c11270b61f6$export$3f2aafdd1ccae76c;
|
|
48
|
+
(function(TokenGrantType1) {
|
|
49
|
+
TokenGrantType1["AuthorizationCode"] = "authorization_code";
|
|
50
|
+
TokenGrantType1["RefreshToken"] = "refresh_token";
|
|
51
|
+
})($5c367c11270b61f6$export$3f2aafdd1ccae76c || ($5c367c11270b61f6$export$3f2aafdd1ccae76c = {}));
|
|
52
|
+
let $5c367c11270b61f6$export$65f63a8bc3cba53d;
|
|
53
|
+
(function(QueryKey1) {
|
|
54
|
+
QueryKey1["ClientId"] = "client_id";
|
|
55
|
+
QueryKey1["Code"] = "code";
|
|
56
|
+
QueryKey1["CodeChallenge"] = "code_challenge";
|
|
57
|
+
QueryKey1["CodeChallengeMethod"] = "code_challenge_method";
|
|
58
|
+
QueryKey1["CodeVerifier"] = "code_verifier";
|
|
59
|
+
QueryKey1["Error"] = "error";
|
|
60
|
+
QueryKey1["ErrorDescription"] = "error_description";
|
|
61
|
+
QueryKey1["GrantType"] = "grant_type";
|
|
62
|
+
QueryKey1["IdToken"] = "id_token";
|
|
63
|
+
QueryKey1["IdTokenHint"] = "id_token_hint";
|
|
64
|
+
QueryKey1["PostLogoutRedirectUri"] = "post_logout_redirect_uri";
|
|
65
|
+
QueryKey1["Prompt"] = "prompt";
|
|
66
|
+
QueryKey1["RedirectUri"] = "redirect_uri";
|
|
67
|
+
QueryKey1["RefreshToken"] = "refresh_token";
|
|
68
|
+
QueryKey1["Resource"] = "resource";
|
|
69
|
+
QueryKey1["ResponseType"] = "response_type";
|
|
70
|
+
QueryKey1["Scope"] = "scope";
|
|
71
|
+
QueryKey1["State"] = "state";
|
|
72
|
+
QueryKey1["Token"] = "token";
|
|
73
|
+
})($5c367c11270b61f6$export$65f63a8bc3cba53d || ($5c367c11270b61f6$export$65f63a8bc3cba53d = {}));
|
|
74
|
+
let $5c367c11270b61f6$export$83716a4aa1642908;
|
|
75
|
+
(function(Prompt1) {
|
|
76
|
+
Prompt1["Consent"] = "consent";
|
|
77
|
+
Prompt1["Login"] = "login";
|
|
78
|
+
})($5c367c11270b61f6$export$83716a4aa1642908 || ($5c367c11270b61f6$export$83716a4aa1642908 = {}));
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
const $e6b305c1e572373d$export$684f740cd70532d4 = async ({ clientId: clientId , tokenEndpoint: tokenEndpoint , redirectUri: redirectUri , codeVerifier: codeVerifier , code: code , resource: resource }, requester)=>{
|
|
82
|
+
const parameters = new URLSearchParams();
|
|
83
|
+
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ClientId, clientId);
|
|
84
|
+
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Code, code);
|
|
85
|
+
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).CodeVerifier, codeVerifier);
|
|
86
|
+
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).RedirectUri, redirectUri);
|
|
87
|
+
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).GrantType, (0, $5c367c11270b61f6$export$3f2aafdd1ccae76c).AuthorizationCode);
|
|
88
|
+
if (resource) parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Resource, resource);
|
|
89
|
+
const snakeCaseCodeTokenResponse = await requester(tokenEndpoint, {
|
|
90
|
+
method: "POST",
|
|
91
|
+
headers: (0, $5c367c11270b61f6$export$e2e108cbe2e4f865).formUrlEncoded,
|
|
92
|
+
body: parameters
|
|
93
|
+
});
|
|
94
|
+
return (0, ($parcel$interopDefault($eVySA$camelcasekeys)))(snakeCaseCodeTokenResponse);
|
|
95
|
+
};
|
|
96
|
+
const $e6b305c1e572373d$export$9909137b467efb8b = async ({ clientId: clientId , tokenEndpoint: tokenEndpoint , refreshToken: refreshToken , resource: resource , scopes: scopes }, requester)=>{
|
|
97
|
+
const parameters = new URLSearchParams();
|
|
98
|
+
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ClientId, clientId);
|
|
99
|
+
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).RefreshToken, refreshToken);
|
|
100
|
+
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).GrantType, (0, $5c367c11270b61f6$export$3f2aafdd1ccae76c).RefreshToken);
|
|
101
|
+
if (resource) parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Resource, resource);
|
|
102
|
+
if (scopes?.length) parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Scope, scopes.join(" "));
|
|
103
|
+
const snakeCaseRefreshTokenTokenResponse = await requester(tokenEndpoint, {
|
|
104
|
+
method: "POST",
|
|
105
|
+
headers: (0, $5c367c11270b61f6$export$e2e108cbe2e4f865).formUrlEncoded,
|
|
106
|
+
body: parameters
|
|
107
|
+
});
|
|
108
|
+
return (0, ($parcel$interopDefault($eVySA$camelcasekeys)))(snakeCaseRefreshTokenTokenResponse);
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
var $945b1d0ce7f8f44a$exports = {};
|
|
113
|
+
|
|
114
|
+
$parcel$export($945b1d0ce7f8f44a$exports, "discoveryPath", () => $945b1d0ce7f8f44a$export$815bda5ead26b243);
|
|
115
|
+
$parcel$export($945b1d0ce7f8f44a$exports, "fetchOidcConfig", () => $945b1d0ce7f8f44a$export$98242d8e822ad11f);
|
|
116
|
+
|
|
117
|
+
const $945b1d0ce7f8f44a$export$815bda5ead26b243 = "/oidc/.well-known/openid-configuration";
|
|
118
|
+
const $945b1d0ce7f8f44a$export$98242d8e822ad11f = async (endpoint, requester)=>(0, ($parcel$interopDefault($eVySA$camelcasekeys)))(await requester(endpoint));
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
var $de840481123b2c25$exports = {};
|
|
122
|
+
|
|
123
|
+
$parcel$export($de840481123b2c25$exports, "revoke", () => $de840481123b2c25$export$573f8dbbf6fbef75);
|
|
124
|
+
|
|
125
|
+
const $de840481123b2c25$export$573f8dbbf6fbef75 = async (revocationEndpoint, clientId, token, requester)=>requester(revocationEndpoint, {
|
|
126
|
+
method: "POST",
|
|
127
|
+
headers: (0, $5c367c11270b61f6$export$e2e108cbe2e4f865).formUrlEncoded,
|
|
128
|
+
body: new URLSearchParams({
|
|
129
|
+
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ClientId]: clientId,
|
|
130
|
+
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Token]: token
|
|
131
|
+
})
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
var $1e17092ca3413c94$exports = {};
|
|
136
|
+
|
|
137
|
+
$parcel$export($1e17092ca3413c94$exports, "generateSignInUri", () => $1e17092ca3413c94$export$b01a187f12b774c6);
|
|
138
|
+
|
|
139
|
+
var $10615ba3cc8a78f8$exports = {};
|
|
140
|
+
var $d3a7a037fd1d9433$exports = {};
|
|
141
|
+
|
|
142
|
+
$parcel$export($d3a7a037fd1d9433$exports, "parseUriParameters", () => $d3a7a037fd1d9433$export$4851e69315d5b72c);
|
|
143
|
+
$parcel$export($d3a7a037fd1d9433$exports, "verifyAndParseCodeFromCallbackUri", () => $d3a7a037fd1d9433$export$dc3fae3c99763885);
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
var $47fe17290a91cd19$exports = {};
|
|
147
|
+
|
|
148
|
+
$parcel$export($47fe17290a91cd19$exports, "LogtoError", () => $47fe17290a91cd19$export$ba60d77e6748b659);
|
|
149
|
+
$parcel$export($47fe17290a91cd19$exports, "LogtoRequestError", () => $47fe17290a91cd19$export$e6e15b8ba42b9b70);
|
|
150
|
+
$parcel$export($47fe17290a91cd19$exports, "OidcError", () => $47fe17290a91cd19$export$d4832bcf9ce430e0);
|
|
151
|
+
|
|
152
|
+
const $47fe17290a91cd19$var$logtoErrorCodes = Object.freeze({
|
|
153
|
+
id_token: {
|
|
154
|
+
invalid_iat: "Invalid issued at time",
|
|
155
|
+
invalid_token: "Invalid token"
|
|
156
|
+
},
|
|
157
|
+
callback_uri_verification: {
|
|
158
|
+
redirect_uri_mismatched: "Redirect URI mismatched",
|
|
159
|
+
error_found: "Error found",
|
|
160
|
+
missing_state: "Missing state",
|
|
161
|
+
state_mismatched: "State mismatched",
|
|
162
|
+
missing_code: "Missing code"
|
|
163
|
+
},
|
|
164
|
+
requester: {
|
|
165
|
+
not_provide_fetch: "Should provide a fetch function under Node.js"
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
const $47fe17290a91cd19$var$getMessageByErrorCode = (errorCode)=>{
|
|
169
|
+
// TODO: linear issue LOG-1419
|
|
170
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
171
|
+
const message = (0, ($parcel$interopDefault($eVySA$lodashget)))($47fe17290a91cd19$var$logtoErrorCodes, errorCode);
|
|
172
|
+
if (typeof message === "string") return message;
|
|
173
|
+
return errorCode;
|
|
174
|
+
};
|
|
175
|
+
class $47fe17290a91cd19$export$ba60d77e6748b659 extends Error {
|
|
176
|
+
constructor(code, data){
|
|
177
|
+
super($47fe17290a91cd19$var$getMessageByErrorCode(code));
|
|
178
|
+
this.code = code;
|
|
179
|
+
this.data = data;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
class $47fe17290a91cd19$export$e6e15b8ba42b9b70 extends Error {
|
|
183
|
+
constructor(code, message){
|
|
184
|
+
super(message);
|
|
185
|
+
this.code = code;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
class $47fe17290a91cd19$export$d4832bcf9ce430e0 {
|
|
189
|
+
constructor(error, errorDescription){
|
|
190
|
+
this.error = error;
|
|
191
|
+
this.errorDescription = errorDescription;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
const $d3a7a037fd1d9433$export$4851e69315d5b72c = (uri)=>{
|
|
197
|
+
const [, queryString = ""] = uri.split("?");
|
|
198
|
+
return new URLSearchParams(queryString);
|
|
199
|
+
};
|
|
200
|
+
const $d3a7a037fd1d9433$export$dc3fae3c99763885 = (callbackUri, redirectUri, state)=>{
|
|
201
|
+
if (!callbackUri.startsWith(redirectUri)) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("callback_uri_verification.redirect_uri_mismatched");
|
|
202
|
+
const uriParameters = $d3a7a037fd1d9433$export$4851e69315d5b72c(callbackUri);
|
|
203
|
+
const error = (0, $eVySA$silverhandessentials.conditional)(uriParameters.get((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Error));
|
|
204
|
+
const errorDescription = (0, $eVySA$silverhandessentials.conditional)(uriParameters.get((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ErrorDescription));
|
|
205
|
+
if (error) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("callback_uri_verification.error_found", new (0, $47fe17290a91cd19$export$d4832bcf9ce430e0)(error, errorDescription));
|
|
206
|
+
const stateFromCallbackUri = uriParameters.get((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).State);
|
|
207
|
+
if (!stateFromCallbackUri) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("callback_uri_verification.missing_state");
|
|
208
|
+
if (stateFromCallbackUri !== state) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("callback_uri_verification.state_mismatched");
|
|
209
|
+
const code = uriParameters.get((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Code);
|
|
210
|
+
if (!code) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("callback_uri_verification.missing_code");
|
|
211
|
+
return code;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
var $06fff6f93a1f66aa$exports = {};
|
|
217
|
+
|
|
218
|
+
$parcel$export($06fff6f93a1f66aa$exports, "generateState", () => $06fff6f93a1f66aa$export$9ccd2716e53a229b);
|
|
219
|
+
$parcel$export($06fff6f93a1f66aa$exports, "generateCodeVerifier", () => $06fff6f93a1f66aa$export$cf1891f923f5943a);
|
|
220
|
+
$parcel$export($06fff6f93a1f66aa$exports, "generateCodeChallenge", () => $06fff6f93a1f66aa$export$414b01b1f867308a);
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* @param length The length of the raw random data.
|
|
224
|
+
*/ const $06fff6f93a1f66aa$var$generateRandomString = (length = 64)=>(0, $eVySA$jsbase64.fromUint8Array)(crypto.getRandomValues(new Uint8Array(length)), true);
|
|
225
|
+
const $06fff6f93a1f66aa$export$9ccd2716e53a229b = ()=>$06fff6f93a1f66aa$var$generateRandomString();
|
|
226
|
+
const $06fff6f93a1f66aa$export$cf1891f923f5943a = ()=>$06fff6f93a1f66aa$var$generateRandomString();
|
|
227
|
+
const $06fff6f93a1f66aa$export$414b01b1f867308a = async (codeVerifier)=>{
|
|
228
|
+
const encodedCodeVerifier = new TextEncoder().encode(codeVerifier);
|
|
229
|
+
// TODO: crypto related to linear issue LOG-1517
|
|
230
|
+
const codeChallenge = new Uint8Array(await crypto.subtle.digest("SHA-256", encodedCodeVerifier));
|
|
231
|
+
return (0, $eVySA$jsbase64.fromUint8Array)(codeChallenge, true);
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
var $c2fd0c04c48199e2$exports = {};
|
|
236
|
+
|
|
237
|
+
$parcel$export($c2fd0c04c48199e2$exports, "verifyIdToken", () => $c2fd0c04c48199e2$export$b5b3317c8aecbcd5);
|
|
238
|
+
$parcel$export($c2fd0c04c48199e2$exports, "decodeIdToken", () => $c2fd0c04c48199e2$export$aac2d5b7f5cd16d5);
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
const $c2fd0c04c48199e2$var$issuedAtTimeTolerance = 60;
|
|
244
|
+
/**
|
|
245
|
+
* @link [ID Token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)
|
|
246
|
+
*/ const $c2fd0c04c48199e2$var$IdTokenClaimsSchema = $eVySA$superstruct.type({
|
|
247
|
+
iss: $eVySA$superstruct.string(),
|
|
248
|
+
sub: $eVySA$superstruct.string(),
|
|
249
|
+
aud: $eVySA$superstruct.string(),
|
|
250
|
+
exp: $eVySA$superstruct.number(),
|
|
251
|
+
iat: $eVySA$superstruct.number(),
|
|
252
|
+
at_hash: $eVySA$superstruct.nullable($eVySA$superstruct.optional($eVySA$superstruct.string())),
|
|
253
|
+
name: $eVySA$superstruct.nullable($eVySA$superstruct.optional($eVySA$superstruct.string())),
|
|
254
|
+
username: $eVySA$superstruct.nullable($eVySA$superstruct.optional($eVySA$superstruct.string())),
|
|
255
|
+
avatar: $eVySA$superstruct.nullable($eVySA$superstruct.optional($eVySA$superstruct.string())),
|
|
256
|
+
role_names: $eVySA$superstruct.nullable($eVySA$superstruct.optional($eVySA$superstruct.array($eVySA$superstruct.string())))
|
|
257
|
+
});
|
|
258
|
+
const $c2fd0c04c48199e2$export$b5b3317c8aecbcd5 = async (idToken, clientId, issuer, jwks)=>{
|
|
259
|
+
const result = await (0, $eVySA$jose.jwtVerify)(idToken, jwks, {
|
|
260
|
+
audience: clientId,
|
|
261
|
+
issuer: issuer
|
|
262
|
+
});
|
|
263
|
+
if (Math.abs((result.payload.iat ?? 0) - Date.now() / 1000) > $c2fd0c04c48199e2$var$issuedAtTimeTolerance) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("id_token.invalid_iat");
|
|
264
|
+
};
|
|
265
|
+
const $c2fd0c04c48199e2$export$aac2d5b7f5cd16d5 = (token)=>{
|
|
266
|
+
const { 1: encodedPayload } = token.split(".");
|
|
267
|
+
if (!encodedPayload) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("id_token.invalid_token");
|
|
268
|
+
const json = (0, $eVySA$silverhandessentials.UrlSafeBase64).decode(encodedPayload);
|
|
269
|
+
const idTokenClaims = JSON.parse(json);
|
|
270
|
+
$eVySA$superstruct.assert(idTokenClaims, $c2fd0c04c48199e2$var$IdTokenClaimsSchema);
|
|
271
|
+
return idTokenClaims;
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
var $4eeb0328a47154bc$exports = {};
|
|
276
|
+
|
|
277
|
+
$parcel$export($4eeb0328a47154bc$exports, "createRequester", () => $4eeb0328a47154bc$export$8d54726fdbf08e0a);
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
const $4eeb0328a47154bc$export$8d54726fdbf08e0a = (fetchFunction)=>{
|
|
281
|
+
if (!fetchFunction && (0, $eVySA$silverhandessentials.isNode)()) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("requester.not_provide_fetch");
|
|
282
|
+
return async (...args)=>{
|
|
283
|
+
const response = await (fetchFunction ?? fetch)(...args);
|
|
284
|
+
if (!response.ok) {
|
|
285
|
+
// Expected request error from server
|
|
286
|
+
const { code: code , message: message } = await response.json();
|
|
287
|
+
throw new (0, $47fe17290a91cd19$export$e6e15b8ba42b9b70)(code, message);
|
|
288
|
+
}
|
|
289
|
+
return response.json();
|
|
290
|
+
};
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
var $b85bdeea0b1e81a5$exports = {};
|
|
295
|
+
|
|
296
|
+
$parcel$export($b85bdeea0b1e81a5$exports, "withReservedScopes", () => $b85bdeea0b1e81a5$export$887ed125f549a57);
|
|
297
|
+
const $b85bdeea0b1e81a5$export$887ed125f549a57 = (originalScopes)=>{
|
|
298
|
+
const uniqueScopes = new Set([
|
|
299
|
+
"openid",
|
|
300
|
+
"offline_access",
|
|
301
|
+
"profile",
|
|
302
|
+
...originalScopes ?? []
|
|
303
|
+
]);
|
|
304
|
+
return Array.from(uniqueScopes).join(" ");
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
$parcel$exportWildcard($10615ba3cc8a78f8$exports, $d3a7a037fd1d9433$exports);
|
|
309
|
+
$parcel$exportWildcard($10615ba3cc8a78f8$exports, $47fe17290a91cd19$exports);
|
|
310
|
+
$parcel$exportWildcard($10615ba3cc8a78f8$exports, $06fff6f93a1f66aa$exports);
|
|
311
|
+
$parcel$exportWildcard($10615ba3cc8a78f8$exports, $c2fd0c04c48199e2$exports);
|
|
312
|
+
$parcel$exportWildcard($10615ba3cc8a78f8$exports, $4eeb0328a47154bc$exports);
|
|
313
|
+
$parcel$exportWildcard($10615ba3cc8a78f8$exports, $b85bdeea0b1e81a5$exports);
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
const $1e17092ca3413c94$var$codeChallengeMethod = "S256";
|
|
317
|
+
const $1e17092ca3413c94$var$responseType = "code";
|
|
318
|
+
const $1e17092ca3413c94$export$b01a187f12b774c6 = ({ authorizationEndpoint: authorizationEndpoint , clientId: clientId , redirectUri: redirectUri , codeChallenge: codeChallenge , state: state , scopes: scopes , resources: resources , prompt: prompt })=>{
|
|
319
|
+
const urlSearchParameters = new URLSearchParams({
|
|
320
|
+
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ClientId]: clientId,
|
|
321
|
+
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).RedirectUri]: redirectUri,
|
|
322
|
+
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).CodeChallenge]: codeChallenge,
|
|
323
|
+
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).CodeChallengeMethod]: $1e17092ca3413c94$var$codeChallengeMethod,
|
|
324
|
+
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).State]: state,
|
|
325
|
+
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ResponseType]: $1e17092ca3413c94$var$responseType,
|
|
326
|
+
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Prompt]: prompt ?? (0, $5c367c11270b61f6$export$83716a4aa1642908).Consent,
|
|
327
|
+
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Scope]: (0, $b85bdeea0b1e81a5$export$887ed125f549a57)(scopes)
|
|
328
|
+
});
|
|
329
|
+
for (const resource of resources ?? [])urlSearchParameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Resource, resource);
|
|
330
|
+
return `${authorizationEndpoint}?${urlSearchParameters.toString()}`;
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
var $1dac903ccb175f85$exports = {};
|
|
335
|
+
|
|
336
|
+
$parcel$export($1dac903ccb175f85$exports, "generateSignOutUri", () => $1dac903ccb175f85$export$b3c9a2bd2330de28);
|
|
337
|
+
|
|
338
|
+
const $1dac903ccb175f85$export$b3c9a2bd2330de28 = ({ endSessionEndpoint: endSessionEndpoint , idToken: idToken , postLogoutRedirectUri: postLogoutRedirectUri })=>{
|
|
339
|
+
const urlSearchParameters = new URLSearchParams({
|
|
340
|
+
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).IdTokenHint]: idToken
|
|
341
|
+
});
|
|
342
|
+
if (postLogoutRedirectUri) urlSearchParameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).PostLogoutRedirectUri, postLogoutRedirectUri);
|
|
343
|
+
return `${endSessionEndpoint}?${urlSearchParameters.toString()}`;
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
$parcel$exportWildcard($a722dce254028e46$exports, $e6b305c1e572373d$exports);
|
|
348
|
+
$parcel$exportWildcard($a722dce254028e46$exports, $945b1d0ce7f8f44a$exports);
|
|
349
|
+
$parcel$exportWildcard($a722dce254028e46$exports, $de840481123b2c25$exports);
|
|
350
|
+
$parcel$exportWildcard($a722dce254028e46$exports, $1e17092ca3413c94$exports);
|
|
351
|
+
$parcel$exportWildcard($a722dce254028e46$exports, $1dac903ccb175f85$exports);
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
$parcel$exportWildcard(module.exports, $a722dce254028e46$exports);
|
|
357
|
+
$parcel$exportWildcard(module.exports, $10615ba3cc8a78f8$exports);
|
|
358
|
+
$parcel$exportWildcard(module.exports, $5c367c11270b61f6$exports);
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["packages/js/src/index.ts","packages/js/src/core/index.ts","packages/js/src/core/fetch-token.ts","packages/js/src/consts/index.ts","packages/js/src/core/oidc-config.ts","packages/js/src/core/revoke.ts","packages/js/src/core/sign-in.ts","packages/js/src/utils/index.ts","packages/js/src/utils/callback-uri.ts","packages/js/src/utils/errors.ts","packages/js/src/utils/generators.ts","packages/js/src/utils/id-token.ts","packages/js/src/utils/requester.ts","packages/js/src/utils/scopes.ts","packages/js/src/core/sign-out.ts"],"sourcesContent":["/* istanbul ignore file */\nexport * from './core';\nexport * from './utils';\nexport * from './consts';\n","export * from './fetch-token';\nexport * from './oidc-config';\nexport * from './revoke';\nexport * from './sign-in';\nexport * from './sign-out';\n","import { KeysToCamelCase } from '@silverhand/essentials';\nimport camelcaseKeys from 'camelcase-keys';\n\nimport { ContentType, QueryKey, TokenGrantType } from '../consts';\nimport { Requester } from '../utils';\n\nexport type FetchTokenByAuthorizationCodeParameters = {\n clientId: string;\n tokenEndpoint: string;\n redirectUri: string;\n codeVerifier: string;\n code: string;\n resource?: string;\n};\n\nexport type FetchTokenByRefreshTokenParameters = {\n clientId: string;\n tokenEndpoint: string;\n refreshToken: string;\n resource?: string;\n scopes?: string[];\n};\n\ntype SnakeCaseCodeTokenResponse = {\n access_token: string;\n refresh_token?: string;\n id_token: string;\n scope: string;\n expires_in: number;\n};\n\nexport type CodeTokenResponse = KeysToCamelCase<SnakeCaseCodeTokenResponse>;\n\ntype SnakeCaseRefreshTokenTokenResponse = {\n access_token: string;\n refresh_token: string;\n id_token?: string;\n scope: string;\n expires_in: number;\n};\n\nexport type RefreshTokenTokenResponse = KeysToCamelCase<SnakeCaseRefreshTokenTokenResponse>;\n\nexport const fetchTokenByAuthorizationCode = async (\n {\n clientId,\n tokenEndpoint,\n redirectUri,\n codeVerifier,\n code,\n resource,\n }: FetchTokenByAuthorizationCodeParameters,\n requester: Requester\n): Promise<CodeTokenResponse> => {\n const parameters = new URLSearchParams();\n parameters.append(QueryKey.ClientId, clientId);\n parameters.append(QueryKey.Code, code);\n parameters.append(QueryKey.CodeVerifier, codeVerifier);\n parameters.append(QueryKey.RedirectUri, redirectUri);\n parameters.append(QueryKey.GrantType, TokenGrantType.AuthorizationCode);\n\n if (resource) {\n parameters.append(QueryKey.Resource, resource);\n }\n\n const snakeCaseCodeTokenResponse = await requester<SnakeCaseCodeTokenResponse>(tokenEndpoint, {\n method: 'POST',\n headers: ContentType.formUrlEncoded,\n body: parameters,\n });\n\n return camelcaseKeys(snakeCaseCodeTokenResponse);\n};\n\nexport const fetchTokenByRefreshToken = async (\n { clientId, tokenEndpoint, refreshToken, resource, scopes }: FetchTokenByRefreshTokenParameters,\n requester: Requester\n): Promise<RefreshTokenTokenResponse> => {\n const parameters = new URLSearchParams();\n parameters.append(QueryKey.ClientId, clientId);\n parameters.append(QueryKey.RefreshToken, refreshToken);\n parameters.append(QueryKey.GrantType, TokenGrantType.RefreshToken);\n\n if (resource) {\n parameters.append(QueryKey.Resource, resource);\n }\n\n if (scopes?.length) {\n parameters.append(QueryKey.Scope, scopes.join(' '));\n }\n\n const snakeCaseRefreshTokenTokenResponse = await requester<SnakeCaseRefreshTokenTokenResponse>(\n tokenEndpoint,\n {\n method: 'POST',\n headers: ContentType.formUrlEncoded,\n body: parameters,\n }\n );\n\n return camelcaseKeys(snakeCaseRefreshTokenTokenResponse);\n};\n","export const ContentType = {\n formUrlEncoded: { 'Content-Type': 'application/x-www-form-urlencoded' },\n};\n\nexport enum TokenGrantType {\n AuthorizationCode = 'authorization_code',\n RefreshToken = 'refresh_token',\n}\n\nexport enum QueryKey {\n ClientId = 'client_id',\n Code = 'code',\n CodeChallenge = 'code_challenge',\n CodeChallengeMethod = 'code_challenge_method',\n CodeVerifier = 'code_verifier',\n Error = 'error',\n ErrorDescription = 'error_description',\n GrantType = 'grant_type',\n IdToken = 'id_token',\n IdTokenHint = 'id_token_hint',\n PostLogoutRedirectUri = 'post_logout_redirect_uri',\n Prompt = 'prompt',\n RedirectUri = 'redirect_uri',\n RefreshToken = 'refresh_token',\n Resource = 'resource',\n ResponseType = 'response_type',\n Scope = 'scope',\n State = 'state',\n Token = 'token',\n}\n\nexport enum Prompt {\n Consent = 'consent',\n Login = 'login',\n}\n","import { KeysToCamelCase } from '@silverhand/essentials';\nimport camelcaseKeys from 'camelcase-keys';\n\nimport { Requester } from '../utils';\n\ntype OidcConfigSnakeCaseResponse = {\n authorization_endpoint: string;\n token_endpoint: string;\n end_session_endpoint: string;\n revocation_endpoint: string;\n jwks_uri: string;\n issuer: string;\n};\n\nexport const discoveryPath = '/oidc/.well-known/openid-configuration';\n\nexport type OidcConfigResponse = KeysToCamelCase<OidcConfigSnakeCaseResponse>;\n\nexport const fetchOidcConfig = async (\n endpoint: string,\n requester: Requester\n): Promise<OidcConfigResponse> =>\n camelcaseKeys(await requester<OidcConfigSnakeCaseResponse>(endpoint));\n","import { ContentType, QueryKey } from '../consts';\nimport { Requester } from '../utils';\n\nexport const revoke = async (\n revocationEndpoint: string,\n clientId: string,\n token: string,\n requester: Requester\n): Promise<void> =>\n requester<void>(revocationEndpoint, {\n method: 'POST',\n headers: ContentType.formUrlEncoded,\n body: new URLSearchParams({\n [QueryKey.ClientId]: clientId,\n [QueryKey.Token]: token,\n }),\n });\n","import { Prompt, QueryKey } from '../consts';\nimport { withReservedScopes } from '../utils';\n\nconst codeChallengeMethod = 'S256';\nconst responseType = 'code';\n\nexport type SignInUriParameters = {\n authorizationEndpoint: string;\n clientId: string;\n redirectUri: string;\n codeChallenge: string;\n state: string;\n scopes?: string[];\n resources?: string[];\n prompt?: Prompt;\n};\n\nexport const generateSignInUri = ({\n authorizationEndpoint,\n clientId,\n redirectUri,\n codeChallenge,\n state,\n scopes,\n resources,\n prompt,\n}: SignInUriParameters) => {\n const urlSearchParameters = new URLSearchParams({\n [QueryKey.ClientId]: clientId,\n [QueryKey.RedirectUri]: redirectUri,\n [QueryKey.CodeChallenge]: codeChallenge,\n [QueryKey.CodeChallengeMethod]: codeChallengeMethod,\n [QueryKey.State]: state,\n [QueryKey.ResponseType]: responseType,\n [QueryKey.Prompt]: prompt ?? Prompt.Consent,\n [QueryKey.Scope]: withReservedScopes(scopes),\n });\n\n for (const resource of resources ?? []) {\n urlSearchParameters.append(QueryKey.Resource, resource);\n }\n\n return `${authorizationEndpoint}?${urlSearchParameters.toString()}`;\n};\n","export * from './callback-uri';\nexport * from './errors';\nexport * from './generators';\nexport * from './id-token';\nexport * from './requester';\nexport * from './scopes';\n","import { conditional } from '@silverhand/essentials';\n\nimport { QueryKey } from '../consts';\nimport { LogtoError, OidcError } from './errors';\n\nexport const parseUriParameters = (uri: string) => {\n const [, queryString = ''] = uri.split('?');\n\n return new URLSearchParams(queryString);\n};\n\n// eslint-disable-next-line complexity\nexport const verifyAndParseCodeFromCallbackUri = (\n callbackUri: string,\n redirectUri: string,\n state: string\n) => {\n if (!callbackUri.startsWith(redirectUri)) {\n throw new LogtoError('callback_uri_verification.redirect_uri_mismatched');\n }\n const uriParameters = parseUriParameters(callbackUri);\n\n const error = conditional(uriParameters.get(QueryKey.Error));\n const errorDescription = conditional(uriParameters.get(QueryKey.ErrorDescription));\n\n if (error) {\n throw new LogtoError(\n 'callback_uri_verification.error_found',\n new OidcError(error, errorDescription)\n );\n }\n\n const stateFromCallbackUri = uriParameters.get(QueryKey.State);\n\n if (!stateFromCallbackUri) {\n throw new LogtoError('callback_uri_verification.missing_state');\n }\n\n if (stateFromCallbackUri !== state) {\n throw new LogtoError('callback_uri_verification.state_mismatched');\n }\n\n const code = uriParameters.get(QueryKey.Code);\n\n if (!code) {\n throw new LogtoError('callback_uri_verification.missing_code');\n }\n\n return code;\n};\n","import { NormalizeKeyPaths } from '@silverhand/essentials';\nimport get from 'lodash.get';\n\nconst logtoErrorCodes = Object.freeze({\n id_token: {\n invalid_iat: 'Invalid issued at time',\n invalid_token: 'Invalid token',\n },\n callback_uri_verification: {\n redirect_uri_mismatched: 'Redirect URI mismatched',\n error_found: 'Error found',\n missing_state: 'Missing state',\n state_mismatched: 'State mismatched',\n missing_code: 'Missing code',\n },\n requester: {\n not_provide_fetch: 'Should provide a fetch function under Node.js',\n },\n});\n\nexport type LogtoErrorCode = NormalizeKeyPaths<typeof logtoErrorCodes>;\n\nconst getMessageByErrorCode = (errorCode: LogtoErrorCode): string => {\n // TODO: linear issue LOG-1419\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const message = get(logtoErrorCodes, errorCode);\n\n if (typeof message === 'string') {\n return message;\n }\n\n return errorCode;\n};\n\nexport class LogtoError extends Error {\n code: LogtoErrorCode;\n data: unknown;\n\n constructor(code: LogtoErrorCode, data?: unknown) {\n super(getMessageByErrorCode(code));\n this.code = code;\n this.data = data;\n }\n}\n\nexport class LogtoRequestError extends Error {\n code: string;\n\n constructor(code: string, message: string) {\n super(message);\n this.code = code;\n }\n}\n\nexport class OidcError {\n error: string;\n errorDescription?: string;\n\n constructor(error: string, errorDescription?: string) {\n this.error = error;\n this.errorDescription = errorDescription;\n }\n}\n","/** @link [Proof Key for Code Exchange by OAuth Public Clients](https://datatracker.ietf.org/doc/html/rfc7636) */\n\nimport { fromUint8Array } from 'js-base64';\n\n/**\n * @param length The length of the raw random data.\n */\nconst generateRandomString = (length = 64) =>\n fromUint8Array(crypto.getRandomValues(new Uint8Array(length)), true);\n\n/**\n * Generates random string for state and encodes them in url safe base64\n */\nexport const generateState = () => generateRandomString();\n\n/**\n * Generates code verifier\n *\n * @link [Client Creates a Code Verifier](https://datatracker.ietf.org/doc/html/rfc7636#section-4.1)\n */\nexport const generateCodeVerifier = () => generateRandomString();\n\n/**\n * Calculates the S256 PKCE code challenge for an arbitrary code verifier and encodes it in url safe base64\n *\n * @param {String} codeVerifier Code verifier to calculate the S256 code challenge for\n * @link [Client Creates the Code Challenge](https://datatracker.ietf.org/doc/html/rfc7636#section-4.2)\n */\nexport const generateCodeChallenge = async (codeVerifier: string): Promise<string> => {\n const encodedCodeVerifier = new TextEncoder().encode(codeVerifier);\n // TODO: crypto related to linear issue LOG-1517\n const codeChallenge = new Uint8Array(await crypto.subtle.digest('SHA-256', encodedCodeVerifier));\n\n return fromUint8Array(codeChallenge, true);\n};\n","import { UrlSafeBase64 } from '@silverhand/essentials';\nimport { jwtVerify, JWTVerifyGetKey } from 'jose';\nimport * as s from 'superstruct';\n\nimport { LogtoError } from './errors';\n\nconst issuedAtTimeTolerance = 60;\n\n/**\n * @link [ID Token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)\n */\nconst IdTokenClaimsSchema = s.type({\n iss: s.string(),\n sub: s.string(),\n aud: s.string(),\n exp: s.number(),\n iat: s.number(),\n at_hash: s.nullable(s.optional(s.string())),\n name: s.nullable(s.optional(s.string())),\n username: s.nullable(s.optional(s.string())),\n avatar: s.nullable(s.optional(s.string())),\n role_names: s.nullable(s.optional(s.array(s.string()))),\n});\n\nexport type IdTokenClaims = s.Infer<typeof IdTokenClaimsSchema>;\n\nexport const verifyIdToken = async (\n idToken: string,\n clientId: string,\n issuer: string,\n jwks: JWTVerifyGetKey\n) => {\n const result = await jwtVerify(idToken, jwks, { audience: clientId, issuer });\n\n if (Math.abs((result.payload.iat ?? 0) - Date.now() / 1000) > issuedAtTimeTolerance) {\n throw new LogtoError('id_token.invalid_iat');\n }\n};\n\nexport const decodeIdToken = (token: string): IdTokenClaims => {\n const { 1: encodedPayload } = token.split('.');\n\n if (!encodedPayload) {\n throw new LogtoError('id_token.invalid_token');\n }\n\n const json = UrlSafeBase64.decode(encodedPayload);\n const idTokenClaims: unknown = JSON.parse(json);\n s.assert(idTokenClaims, IdTokenClaimsSchema);\n\n return idTokenClaims;\n};\n","import { isNode } from '@silverhand/essentials';\n\nimport { LogtoError, LogtoRequestError } from './errors';\n\ntype LogtoRequestErrorBody = {\n code: string;\n message: string;\n};\n\nexport const createRequester = (fetchFunction?: typeof fetch) => {\n if (!fetchFunction && isNode()) {\n throw new LogtoError('requester.not_provide_fetch');\n }\n\n return async <T>(...args: Parameters<typeof fetch>): Promise<T> => {\n const response = await (fetchFunction ?? fetch)(...args);\n\n if (!response.ok) {\n // Expected request error from server\n const { code, message } = await response.json<LogtoRequestErrorBody>();\n throw new LogtoRequestError(code, message);\n }\n\n return response.json<T>();\n };\n};\n\nexport type Requester = ReturnType<typeof createRequester>;\n","/**\n * @param originalScopes\n * @return scopes should contain all reserved scopes ( Logto requires `openid` and `offline_access` )\n */\nexport const withReservedScopes = (originalScopes?: string[]): string => {\n const uniqueScopes = new Set(['openid', 'offline_access', 'profile', ...(originalScopes ?? [])]);\n\n return Array.from(uniqueScopes).join(' ');\n};\n","import { QueryKey } from '../consts';\n\ntype SignOutUriParameters = {\n endSessionEndpoint: string;\n idToken: string;\n postLogoutRedirectUri?: string;\n};\n\nexport const generateSignOutUri = ({\n endSessionEndpoint,\n idToken,\n postLogoutRedirectUri,\n}: SignOutUriParameters) => {\n const urlSearchParameters = new URLSearchParams({ [QueryKey.IdTokenHint]: idToken });\n\n if (postLogoutRedirectUri) {\n urlSearchParameters.append(QueryKey.PostLogoutRedirectUri, postLogoutRedirectUri);\n }\n\n return `${endSessionEndpoint}?${urlSearchParameters.toString()}`;\n};\n"],"names":[],"version":3,"file":"index.js.map"}
|