@logto/js 1.1.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/consts/{index.mjs → index.cjs} +13 -11
- package/lib/consts/index.js +11 -13
- package/lib/core/fetch-token.cjs +47 -0
- package/lib/core/fetch-token.d.ts +1 -1
- package/lib/core/fetch-token.js +18 -25
- package/lib/core/index.d.ts +6 -6
- package/lib/core/oidc-config.cjs +13 -0
- package/lib/core/oidc-config.d.ts +1 -1
- package/lib/core/oidc-config.js +3 -10
- package/lib/core/revoke.cjs +14 -0
- package/lib/core/revoke.d.ts +1 -1
- package/lib/core/revoke.js +5 -7
- package/lib/core/sign-in.cjs +31 -0
- package/lib/core/sign-in.d.ts +2 -2
- package/lib/core/sign-in.js +16 -19
- package/lib/core/sign-out.cjs +13 -0
- package/lib/core/sign-out.js +4 -6
- package/lib/core/{user-info.mjs → user-info.cjs} +3 -1
- package/lib/core/user-info.d.ts +1 -1
- package/lib/core/user-info.js +1 -3
- package/lib/index.cjs +56 -0
- package/lib/index.d.ts +4 -4
- package/lib/index.js +12 -56
- package/lib/utils/{arbitrary-object.mjs → arbitrary-object.cjs} +3 -1
- package/lib/utils/arbitrary-object.js +1 -3
- package/lib/utils/callback-uri.cjs +36 -0
- package/lib/utils/callback-uri.js +13 -16
- package/lib/utils/errors.cjs +45 -0
- package/lib/utils/errors.d.ts +8 -13
- package/lib/utils/errors.js +11 -33
- package/lib/utils/{id-token.mjs → id-token.cjs} +13 -10
- package/lib/utils/id-token.js +10 -13
- package/lib/utils/index.d.ts +5 -5
- package/lib/utils/scopes.cjs +15 -0
- package/lib/utils/scopes.js +4 -6
- package/package.json +23 -27
- package/lib/core/fetch-token.mjs +0 -40
- package/lib/core/oidc-config.mjs +0 -6
- package/lib/core/revoke.mjs +0 -12
- package/lib/core/sign-in.mjs +0 -30
- package/lib/core/sign-out.mjs +0 -11
- package/lib/index.mjs +0 -12
- package/lib/utils/callback-uri.mjs +0 -33
- package/lib/utils/errors.mjs +0 -53
- package/lib/utils/scopes.mjs +0 -13
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
1
3
|
const ContentType = {
|
|
2
4
|
formUrlEncoded: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
3
5
|
};
|
|
4
|
-
|
|
6
|
+
exports.TokenGrantType = void 0;
|
|
5
7
|
(function (TokenGrantType) {
|
|
6
8
|
TokenGrantType["AuthorizationCode"] = "authorization_code";
|
|
7
9
|
TokenGrantType["RefreshToken"] = "refresh_token";
|
|
8
|
-
})(TokenGrantType || (TokenGrantType = {}));
|
|
9
|
-
|
|
10
|
+
})(exports.TokenGrantType || (exports.TokenGrantType = {}));
|
|
11
|
+
exports.QueryKey = void 0;
|
|
10
12
|
(function (QueryKey) {
|
|
11
13
|
QueryKey["ClientId"] = "client_id";
|
|
12
14
|
QueryKey["Code"] = "code";
|
|
@@ -29,22 +31,22 @@ var QueryKey;
|
|
|
29
31
|
QueryKey["Token"] = "token";
|
|
30
32
|
// Need to align with the OIDC extraParams settings in core
|
|
31
33
|
QueryKey["InteractionMode"] = "interaction_mode";
|
|
32
|
-
})(QueryKey || (QueryKey = {}));
|
|
33
|
-
|
|
34
|
+
})(exports.QueryKey || (exports.QueryKey = {}));
|
|
35
|
+
exports.Prompt = void 0;
|
|
34
36
|
(function (Prompt) {
|
|
35
37
|
Prompt["Consent"] = "consent";
|
|
36
38
|
Prompt["Login"] = "login";
|
|
37
|
-
})(Prompt || (Prompt = {}));
|
|
39
|
+
})(exports.Prompt || (exports.Prompt = {}));
|
|
38
40
|
// TODO: @sijie @charles find a proper way to sync scopes constants with core
|
|
39
|
-
|
|
41
|
+
exports.ReservedScope = void 0;
|
|
40
42
|
(function (ReservedScope) {
|
|
41
43
|
ReservedScope["OpenId"] = "openid";
|
|
42
44
|
ReservedScope["OfflineAccess"] = "offline_access";
|
|
43
|
-
})(ReservedScope || (ReservedScope = {}));
|
|
45
|
+
})(exports.ReservedScope || (exports.ReservedScope = {}));
|
|
44
46
|
/**
|
|
45
47
|
* Scopes for ID Token and Userinfo Endpoint.
|
|
46
48
|
*/
|
|
47
|
-
|
|
49
|
+
exports.UserScope = void 0;
|
|
48
50
|
(function (UserScope) {
|
|
49
51
|
/**
|
|
50
52
|
* Scope for basic user info.
|
|
@@ -76,6 +78,6 @@ var UserScope;
|
|
|
76
78
|
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
|
|
77
79
|
*/
|
|
78
80
|
UserScope["Identities"] = "identities";
|
|
79
|
-
})(UserScope || (UserScope = {}));
|
|
81
|
+
})(exports.UserScope || (exports.UserScope = {}));
|
|
80
82
|
|
|
81
|
-
|
|
83
|
+
exports.ContentType = ContentType;
|
package/lib/consts/index.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
1
|
const ContentType = {
|
|
4
2
|
formUrlEncoded: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
5
3
|
};
|
|
6
|
-
|
|
4
|
+
var TokenGrantType;
|
|
7
5
|
(function (TokenGrantType) {
|
|
8
6
|
TokenGrantType["AuthorizationCode"] = "authorization_code";
|
|
9
7
|
TokenGrantType["RefreshToken"] = "refresh_token";
|
|
10
|
-
})(
|
|
11
|
-
|
|
8
|
+
})(TokenGrantType || (TokenGrantType = {}));
|
|
9
|
+
var QueryKey;
|
|
12
10
|
(function (QueryKey) {
|
|
13
11
|
QueryKey["ClientId"] = "client_id";
|
|
14
12
|
QueryKey["Code"] = "code";
|
|
@@ -31,22 +29,22 @@ exports.QueryKey = void 0;
|
|
|
31
29
|
QueryKey["Token"] = "token";
|
|
32
30
|
// Need to align with the OIDC extraParams settings in core
|
|
33
31
|
QueryKey["InteractionMode"] = "interaction_mode";
|
|
34
|
-
})(
|
|
35
|
-
|
|
32
|
+
})(QueryKey || (QueryKey = {}));
|
|
33
|
+
var Prompt;
|
|
36
34
|
(function (Prompt) {
|
|
37
35
|
Prompt["Consent"] = "consent";
|
|
38
36
|
Prompt["Login"] = "login";
|
|
39
|
-
})(
|
|
37
|
+
})(Prompt || (Prompt = {}));
|
|
40
38
|
// TODO: @sijie @charles find a proper way to sync scopes constants with core
|
|
41
|
-
|
|
39
|
+
var ReservedScope;
|
|
42
40
|
(function (ReservedScope) {
|
|
43
41
|
ReservedScope["OpenId"] = "openid";
|
|
44
42
|
ReservedScope["OfflineAccess"] = "offline_access";
|
|
45
|
-
})(
|
|
43
|
+
})(ReservedScope || (ReservedScope = {}));
|
|
46
44
|
/**
|
|
47
45
|
* Scopes for ID Token and Userinfo Endpoint.
|
|
48
46
|
*/
|
|
49
|
-
|
|
47
|
+
var UserScope;
|
|
50
48
|
(function (UserScope) {
|
|
51
49
|
/**
|
|
52
50
|
* Scope for basic user info.
|
|
@@ -78,6 +76,6 @@ exports.UserScope = void 0;
|
|
|
78
76
|
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
|
|
79
77
|
*/
|
|
80
78
|
UserScope["Identities"] = "identities";
|
|
81
|
-
})(
|
|
79
|
+
})(UserScope || (UserScope = {}));
|
|
82
80
|
|
|
83
|
-
|
|
81
|
+
export { ContentType, Prompt, QueryKey, ReservedScope, TokenGrantType, UserScope };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var camelcaseKeys = require('camelcase-keys');
|
|
4
|
+
var index = require('../consts/index.cjs');
|
|
5
|
+
|
|
6
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
var camelcaseKeys__default = /*#__PURE__*/_interopDefault(camelcaseKeys);
|
|
9
|
+
|
|
10
|
+
const fetchTokenByAuthorizationCode = async ({ clientId, tokenEndpoint, redirectUri, codeVerifier, code, resource, }, requester) => {
|
|
11
|
+
const parameters = new URLSearchParams();
|
|
12
|
+
parameters.append(index.QueryKey.ClientId, clientId);
|
|
13
|
+
parameters.append(index.QueryKey.Code, code);
|
|
14
|
+
parameters.append(index.QueryKey.CodeVerifier, codeVerifier);
|
|
15
|
+
parameters.append(index.QueryKey.RedirectUri, redirectUri);
|
|
16
|
+
parameters.append(index.QueryKey.GrantType, index.TokenGrantType.AuthorizationCode);
|
|
17
|
+
if (resource) {
|
|
18
|
+
parameters.append(index.QueryKey.Resource, resource);
|
|
19
|
+
}
|
|
20
|
+
const snakeCaseCodeTokenResponse = await requester(tokenEndpoint, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
headers: index.ContentType.formUrlEncoded,
|
|
23
|
+
body: parameters,
|
|
24
|
+
});
|
|
25
|
+
return camelcaseKeys__default.default(snakeCaseCodeTokenResponse);
|
|
26
|
+
};
|
|
27
|
+
const fetchTokenByRefreshToken = async ({ clientId, tokenEndpoint, refreshToken, resource, scopes }, requester) => {
|
|
28
|
+
const parameters = new URLSearchParams();
|
|
29
|
+
parameters.append(index.QueryKey.ClientId, clientId);
|
|
30
|
+
parameters.append(index.QueryKey.RefreshToken, refreshToken);
|
|
31
|
+
parameters.append(index.QueryKey.GrantType, index.TokenGrantType.RefreshToken);
|
|
32
|
+
if (resource) {
|
|
33
|
+
parameters.append(index.QueryKey.Resource, resource);
|
|
34
|
+
}
|
|
35
|
+
if (scopes?.length) {
|
|
36
|
+
parameters.append(index.QueryKey.Scope, scopes.join(' '));
|
|
37
|
+
}
|
|
38
|
+
const snakeCaseRefreshTokenTokenResponse = await requester(tokenEndpoint, {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
headers: index.ContentType.formUrlEncoded,
|
|
41
|
+
body: parameters,
|
|
42
|
+
});
|
|
43
|
+
return camelcaseKeys__default.default(snakeCaseRefreshTokenTokenResponse);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
exports.fetchTokenByAuthorizationCode = fetchTokenByAuthorizationCode;
|
|
47
|
+
exports.fetchTokenByRefreshToken = fetchTokenByRefreshToken;
|
package/lib/core/fetch-token.js
CHANGED
|
@@ -1,47 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var camelcaseKeys = require('camelcase-keys');
|
|
4
|
-
var index = require('../consts/index.js');
|
|
5
|
-
|
|
6
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
-
|
|
8
|
-
var camelcaseKeys__default = /*#__PURE__*/_interopDefault(camelcaseKeys);
|
|
1
|
+
import camelcaseKeys from 'camelcase-keys';
|
|
2
|
+
import { QueryKey, TokenGrantType, ContentType } from '../consts/index.js';
|
|
9
3
|
|
|
10
4
|
const fetchTokenByAuthorizationCode = async ({ clientId, tokenEndpoint, redirectUri, codeVerifier, code, resource, }, requester) => {
|
|
11
5
|
const parameters = new URLSearchParams();
|
|
12
|
-
parameters.append(
|
|
13
|
-
parameters.append(
|
|
14
|
-
parameters.append(
|
|
15
|
-
parameters.append(
|
|
16
|
-
parameters.append(
|
|
6
|
+
parameters.append(QueryKey.ClientId, clientId);
|
|
7
|
+
parameters.append(QueryKey.Code, code);
|
|
8
|
+
parameters.append(QueryKey.CodeVerifier, codeVerifier);
|
|
9
|
+
parameters.append(QueryKey.RedirectUri, redirectUri);
|
|
10
|
+
parameters.append(QueryKey.GrantType, TokenGrantType.AuthorizationCode);
|
|
17
11
|
if (resource) {
|
|
18
|
-
parameters.append(
|
|
12
|
+
parameters.append(QueryKey.Resource, resource);
|
|
19
13
|
}
|
|
20
14
|
const snakeCaseCodeTokenResponse = await requester(tokenEndpoint, {
|
|
21
15
|
method: 'POST',
|
|
22
|
-
headers:
|
|
16
|
+
headers: ContentType.formUrlEncoded,
|
|
23
17
|
body: parameters,
|
|
24
18
|
});
|
|
25
|
-
return
|
|
19
|
+
return camelcaseKeys(snakeCaseCodeTokenResponse);
|
|
26
20
|
};
|
|
27
21
|
const fetchTokenByRefreshToken = async ({ clientId, tokenEndpoint, refreshToken, resource, scopes }, requester) => {
|
|
28
22
|
const parameters = new URLSearchParams();
|
|
29
|
-
parameters.append(
|
|
30
|
-
parameters.append(
|
|
31
|
-
parameters.append(
|
|
23
|
+
parameters.append(QueryKey.ClientId, clientId);
|
|
24
|
+
parameters.append(QueryKey.RefreshToken, refreshToken);
|
|
25
|
+
parameters.append(QueryKey.GrantType, TokenGrantType.RefreshToken);
|
|
32
26
|
if (resource) {
|
|
33
|
-
parameters.append(
|
|
27
|
+
parameters.append(QueryKey.Resource, resource);
|
|
34
28
|
}
|
|
35
29
|
if (scopes?.length) {
|
|
36
|
-
parameters.append(
|
|
30
|
+
parameters.append(QueryKey.Scope, scopes.join(' '));
|
|
37
31
|
}
|
|
38
32
|
const snakeCaseRefreshTokenTokenResponse = await requester(tokenEndpoint, {
|
|
39
33
|
method: 'POST',
|
|
40
|
-
headers:
|
|
34
|
+
headers: ContentType.formUrlEncoded,
|
|
41
35
|
body: parameters,
|
|
42
36
|
});
|
|
43
|
-
return
|
|
37
|
+
return camelcaseKeys(snakeCaseRefreshTokenTokenResponse);
|
|
44
38
|
};
|
|
45
39
|
|
|
46
|
-
|
|
47
|
-
exports.fetchTokenByRefreshToken = fetchTokenByRefreshToken;
|
|
40
|
+
export { fetchTokenByAuthorizationCode, fetchTokenByRefreshToken };
|
package/lib/core/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from './fetch-token';
|
|
2
|
-
export * from './oidc-config';
|
|
3
|
-
export * from './revoke';
|
|
4
|
-
export * from './sign-in';
|
|
5
|
-
export * from './sign-out';
|
|
6
|
-
export * from './user-info';
|
|
1
|
+
export * from './fetch-token.js';
|
|
2
|
+
export * from './oidc-config.js';
|
|
3
|
+
export * from './revoke.js';
|
|
4
|
+
export * from './sign-in.js';
|
|
5
|
+
export * from './sign-out.js';
|
|
6
|
+
export * from './user-info.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var camelcaseKeys = require('camelcase-keys');
|
|
4
|
+
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var camelcaseKeys__default = /*#__PURE__*/_interopDefault(camelcaseKeys);
|
|
8
|
+
|
|
9
|
+
const discoveryPath = '/oidc/.well-known/openid-configuration';
|
|
10
|
+
const fetchOidcConfig = async (endpoint, requester) => camelcaseKeys__default.default(await requester(endpoint));
|
|
11
|
+
|
|
12
|
+
exports.discoveryPath = discoveryPath;
|
|
13
|
+
exports.fetchOidcConfig = fetchOidcConfig;
|
package/lib/core/oidc-config.js
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var camelcaseKeys = require('camelcase-keys');
|
|
4
|
-
|
|
5
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
-
|
|
7
|
-
var camelcaseKeys__default = /*#__PURE__*/_interopDefault(camelcaseKeys);
|
|
1
|
+
import camelcaseKeys from 'camelcase-keys';
|
|
8
2
|
|
|
9
3
|
const discoveryPath = '/oidc/.well-known/openid-configuration';
|
|
10
|
-
const fetchOidcConfig = async (endpoint, requester) =>
|
|
4
|
+
const fetchOidcConfig = async (endpoint, requester) => camelcaseKeys(await requester(endpoint));
|
|
11
5
|
|
|
12
|
-
|
|
13
|
-
exports.fetchOidcConfig = fetchOidcConfig;
|
|
6
|
+
export { discoveryPath, fetchOidcConfig };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('../consts/index.cjs');
|
|
4
|
+
|
|
5
|
+
const revoke = async (revocationEndpoint, clientId, token, requester) => requester(revocationEndpoint, {
|
|
6
|
+
method: 'POST',
|
|
7
|
+
headers: index.ContentType.formUrlEncoded,
|
|
8
|
+
body: new URLSearchParams({
|
|
9
|
+
[index.QueryKey.ClientId]: clientId,
|
|
10
|
+
[index.QueryKey.Token]: token,
|
|
11
|
+
}),
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
exports.revoke = revoke;
|
package/lib/core/revoke.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { Requester } from '../types';
|
|
1
|
+
import type { Requester } from '../types/index.js';
|
|
2
2
|
export declare const revoke: (revocationEndpoint: string, clientId: string, token: string, requester: Requester) => Promise<void>;
|
package/lib/core/revoke.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var index = require('../consts/index.js');
|
|
1
|
+
import { ContentType, QueryKey } from '../consts/index.js';
|
|
4
2
|
|
|
5
3
|
const revoke = async (revocationEndpoint, clientId, token, requester) => requester(revocationEndpoint, {
|
|
6
4
|
method: 'POST',
|
|
7
|
-
headers:
|
|
5
|
+
headers: ContentType.formUrlEncoded,
|
|
8
6
|
body: new URLSearchParams({
|
|
9
|
-
[
|
|
10
|
-
[
|
|
7
|
+
[QueryKey.ClientId]: clientId,
|
|
8
|
+
[QueryKey.Token]: token,
|
|
11
9
|
}),
|
|
12
10
|
});
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
export { revoke };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('../consts/index.cjs');
|
|
4
|
+
require('@silverhand/essentials');
|
|
5
|
+
require('jose');
|
|
6
|
+
var scopes = require('../utils/scopes.cjs');
|
|
7
|
+
|
|
8
|
+
const codeChallengeMethod = 'S256';
|
|
9
|
+
const responseType = 'code';
|
|
10
|
+
const generateSignInUri = ({ authorizationEndpoint, clientId, redirectUri, codeChallenge, state, scopes: scopes$1, resources, prompt, interactionMode, }) => {
|
|
11
|
+
const urlSearchParameters = new URLSearchParams({
|
|
12
|
+
[index.QueryKey.ClientId]: clientId,
|
|
13
|
+
[index.QueryKey.RedirectUri]: redirectUri,
|
|
14
|
+
[index.QueryKey.CodeChallenge]: codeChallenge,
|
|
15
|
+
[index.QueryKey.CodeChallengeMethod]: codeChallengeMethod,
|
|
16
|
+
[index.QueryKey.State]: state,
|
|
17
|
+
[index.QueryKey.ResponseType]: responseType,
|
|
18
|
+
[index.QueryKey.Prompt]: prompt ?? index.Prompt.Consent,
|
|
19
|
+
[index.QueryKey.Scope]: scopes.withDefaultScopes(scopes$1),
|
|
20
|
+
});
|
|
21
|
+
for (const resource of resources ?? []) {
|
|
22
|
+
urlSearchParameters.append(index.QueryKey.Resource, resource);
|
|
23
|
+
}
|
|
24
|
+
// Set interactionMode to signUp for a create account user experience
|
|
25
|
+
if (interactionMode) {
|
|
26
|
+
urlSearchParameters.append(index.QueryKey.InteractionMode, interactionMode);
|
|
27
|
+
}
|
|
28
|
+
return `${authorizationEndpoint}?${urlSearchParameters.toString()}`;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
exports.generateSignInUri = generateSignInUri;
|
package/lib/core/sign-in.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Prompt } from '../consts';
|
|
2
|
-
import type { InteractionMode } from '../types';
|
|
1
|
+
import { Prompt } from '../consts/index.js';
|
|
2
|
+
import type { InteractionMode } from '../types/index.js';
|
|
3
3
|
export type SignInUriParameters = {
|
|
4
4
|
authorizationEndpoint: string;
|
|
5
5
|
clientId: string;
|
package/lib/core/sign-in.js
CHANGED
|
@@ -1,32 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require('lodash.get');
|
|
6
|
-
require('jose');
|
|
7
|
-
var scopes = require('../utils/scopes.js');
|
|
1
|
+
import { QueryKey, Prompt } from '../consts/index.js';
|
|
2
|
+
import '@silverhand/essentials';
|
|
3
|
+
import 'jose';
|
|
4
|
+
import { withDefaultScopes } from '../utils/scopes.js';
|
|
8
5
|
|
|
9
6
|
const codeChallengeMethod = 'S256';
|
|
10
7
|
const responseType = 'code';
|
|
11
|
-
const generateSignInUri = ({ authorizationEndpoint, clientId, redirectUri, codeChallenge, state, scopes
|
|
8
|
+
const generateSignInUri = ({ authorizationEndpoint, clientId, redirectUri, codeChallenge, state, scopes, resources, prompt, interactionMode, }) => {
|
|
12
9
|
const urlSearchParameters = new URLSearchParams({
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[
|
|
18
|
-
[
|
|
19
|
-
[
|
|
20
|
-
[
|
|
10
|
+
[QueryKey.ClientId]: clientId,
|
|
11
|
+
[QueryKey.RedirectUri]: redirectUri,
|
|
12
|
+
[QueryKey.CodeChallenge]: codeChallenge,
|
|
13
|
+
[QueryKey.CodeChallengeMethod]: codeChallengeMethod,
|
|
14
|
+
[QueryKey.State]: state,
|
|
15
|
+
[QueryKey.ResponseType]: responseType,
|
|
16
|
+
[QueryKey.Prompt]: prompt ?? Prompt.Consent,
|
|
17
|
+
[QueryKey.Scope]: withDefaultScopes(scopes),
|
|
21
18
|
});
|
|
22
19
|
for (const resource of resources ?? []) {
|
|
23
|
-
urlSearchParameters.append(
|
|
20
|
+
urlSearchParameters.append(QueryKey.Resource, resource);
|
|
24
21
|
}
|
|
25
22
|
// Set interactionMode to signUp for a create account user experience
|
|
26
23
|
if (interactionMode) {
|
|
27
|
-
urlSearchParameters.append(
|
|
24
|
+
urlSearchParameters.append(QueryKey.InteractionMode, interactionMode);
|
|
28
25
|
}
|
|
29
26
|
return `${authorizationEndpoint}?${urlSearchParameters.toString()}`;
|
|
30
27
|
};
|
|
31
28
|
|
|
32
|
-
|
|
29
|
+
export { generateSignInUri };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('../consts/index.cjs');
|
|
4
|
+
|
|
5
|
+
const generateSignOutUri = ({ endSessionEndpoint, clientId, postLogoutRedirectUri, }) => {
|
|
6
|
+
const urlSearchParameters = new URLSearchParams({ [index.QueryKey.ClientId]: clientId });
|
|
7
|
+
if (postLogoutRedirectUri) {
|
|
8
|
+
urlSearchParameters.append(index.QueryKey.PostLogoutRedirectUri, postLogoutRedirectUri);
|
|
9
|
+
}
|
|
10
|
+
return `${endSessionEndpoint}?${urlSearchParameters.toString()}`;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
exports.generateSignOutUri = generateSignOutUri;
|
package/lib/core/sign-out.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var index = require('../consts/index.js');
|
|
1
|
+
import { QueryKey } from '../consts/index.js';
|
|
4
2
|
|
|
5
3
|
const generateSignOutUri = ({ endSessionEndpoint, clientId, postLogoutRedirectUri, }) => {
|
|
6
|
-
const urlSearchParameters = new URLSearchParams({ [
|
|
4
|
+
const urlSearchParameters = new URLSearchParams({ [QueryKey.ClientId]: clientId });
|
|
7
5
|
if (postLogoutRedirectUri) {
|
|
8
|
-
urlSearchParameters.append(
|
|
6
|
+
urlSearchParameters.append(QueryKey.PostLogoutRedirectUri, postLogoutRedirectUri);
|
|
9
7
|
}
|
|
10
8
|
return `${endSessionEndpoint}?${urlSearchParameters.toString()}`;
|
|
11
9
|
};
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
export { generateSignOutUri };
|
package/lib/core/user-info.d.ts
CHANGED
package/lib/core/user-info.js
CHANGED
package/lib/index.cjs
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fetchToken = require('./core/fetch-token.cjs');
|
|
4
|
+
var oidcConfig = require('./core/oidc-config.cjs');
|
|
5
|
+
var revoke = require('./core/revoke.cjs');
|
|
6
|
+
var signIn = require('./core/sign-in.cjs');
|
|
7
|
+
var signOut = require('./core/sign-out.cjs');
|
|
8
|
+
var userInfo = require('./core/user-info.cjs');
|
|
9
|
+
var callbackUri = require('./utils/callback-uri.cjs');
|
|
10
|
+
var errors = require('./utils/errors.cjs');
|
|
11
|
+
var idToken = require('./utils/id-token.cjs');
|
|
12
|
+
var scopes = require('./utils/scopes.cjs');
|
|
13
|
+
var arbitraryObject = require('./utils/arbitrary-object.cjs');
|
|
14
|
+
var index = require('./consts/index.cjs');
|
|
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; }
|
|
56
|
+
});
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from './core';
|
|
2
|
-
export * from './utils';
|
|
3
|
-
export * from './consts';
|
|
4
|
-
export * from './types';
|
|
1
|
+
export * from './core/index.js';
|
|
2
|
+
export * from './utils/index.js';
|
|
3
|
+
export * from './consts/index.js';
|
|
4
|
+
export * from './types/index.js';
|
package/lib/index.js
CHANGED
|
@@ -1,56 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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; }
|
|
56
|
-
});
|
|
1
|
+
export { fetchTokenByAuthorizationCode, fetchTokenByRefreshToken } from './core/fetch-token.js';
|
|
2
|
+
export { discoveryPath, fetchOidcConfig } from './core/oidc-config.js';
|
|
3
|
+
export { revoke } from './core/revoke.js';
|
|
4
|
+
export { generateSignInUri } from './core/sign-in.js';
|
|
5
|
+
export { generateSignOutUri } from './core/sign-out.js';
|
|
6
|
+
export { fetchUserInfo } from './core/user-info.js';
|
|
7
|
+
export { parseUriParameters, verifyAndParseCodeFromCallbackUri } from './utils/callback-uri.js';
|
|
8
|
+
export { LogtoError, LogtoRequestError, OidcError, isLogtoRequestError } from './utils/errors.js';
|
|
9
|
+
export { decodeIdToken, verifyIdToken } from './utils/id-token.js';
|
|
10
|
+
export { withDefaultScopes } from './utils/scopes.js';
|
|
11
|
+
export { isArbitraryObject } from './utils/arbitrary-object.js';
|
|
12
|
+
export { ContentType, Prompt, QueryKey, ReservedScope, TokenGrantType, UserScope } from './consts/index.js';
|