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