New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@logto/js

Package Overview
Dependencies
Maintainers
1
Versions
57
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@logto/js - npm Package Compare versions

Comparing version 1.1.0 to 1.1.2

lib/consts/index.d.ts

228

lib/index.d.ts

@@ -1,224 +0,4 @@

import { KeysToCamelCase, NormalizeKeyPaths, Nullable } from "@silverhand/essentials";
import { JWTVerifyGetKey } from "jose";
export const ContentType: {
formUrlEncoded: {
'Content-Type': string;
};
};
export enum TokenGrantType {
AuthorizationCode = "authorization_code",
RefreshToken = "refresh_token"
}
export enum QueryKey {
ClientId = "client_id",
Code = "code",
CodeChallenge = "code_challenge",
CodeChallengeMethod = "code_challenge_method",
CodeVerifier = "code_verifier",
Error = "error",
ErrorDescription = "error_description",
GrantType = "grant_type",
IdToken = "id_token",
IdTokenHint = "id_token_hint",
PostLogoutRedirectUri = "post_logout_redirect_uri",
Prompt = "prompt",
RedirectUri = "redirect_uri",
RefreshToken = "refresh_token",
Resource = "resource",
ResponseType = "response_type",
Scope = "scope",
State = "state",
Token = "token",
InteractionMode = "interaction_mode"
}
export enum Prompt {
Consent = "consent",
Login = "login"
}
export enum ReservedScope {
OpenId = "openid",
OfflineAccess = "offline_access"
}
/**
* Scopes for ID Token and Userinfo Endpoint.
*/
export enum UserScope {
/**
* Scope for basic user info.
*
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
*/
Profile = "profile",
/**
* Scope for user email address.
*
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
*/
Email = "email",
/**
* Scope for user phone number.
*
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
*/
Phone = "phone",
/**
* Scope for user's custom data.
*
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
*/
CustomData = "custom_data",
/**
* Scope for user's social identity details.
*
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
*/
Identities = "identities"
}
export type LogtoRequestErrorBody = {
code: string;
message: string;
};
export type Requester = <T>(...args: Parameters<typeof fetch>) => Promise<T>;
export type InteractionMode = 'signIn' | 'signUp';
export type FetchTokenByAuthorizationCodeParameters = {
clientId: string;
tokenEndpoint: string;
redirectUri: string;
codeVerifier: string;
code: string;
resource?: string;
};
export type FetchTokenByRefreshTokenParameters = {
clientId: string;
tokenEndpoint: string;
refreshToken: string;
resource?: string;
scopes?: string[];
};
type SnakeCaseCodeTokenResponse = {
access_token: string;
refresh_token?: string;
id_token: string;
scope: string;
expires_in: number;
};
export type CodeTokenResponse = KeysToCamelCase<SnakeCaseCodeTokenResponse>;
type SnakeCaseRefreshTokenTokenResponse = {
access_token: string;
refresh_token: string;
id_token?: string;
scope: string;
expires_in: number;
};
export type RefreshTokenTokenResponse = KeysToCamelCase<SnakeCaseRefreshTokenTokenResponse>;
export const fetchTokenByAuthorizationCode: ({ clientId, tokenEndpoint, redirectUri, codeVerifier, code, resource, }: FetchTokenByAuthorizationCodeParameters, requester: Requester) => Promise<CodeTokenResponse>;
export const fetchTokenByRefreshToken: ({ clientId, tokenEndpoint, refreshToken, resource, scopes }: FetchTokenByRefreshTokenParameters, requester: Requester) => Promise<RefreshTokenTokenResponse>;
type OidcConfigSnakeCaseResponse = {
authorization_endpoint: string;
token_endpoint: string;
userinfo_endpoint: string;
end_session_endpoint: string;
revocation_endpoint: string;
jwks_uri: string;
issuer: string;
};
export const discoveryPath = "/oidc/.well-known/openid-configuration";
export type OidcConfigResponse = KeysToCamelCase<OidcConfigSnakeCaseResponse>;
export const fetchOidcConfig: (endpoint: string, requester: Requester) => Promise<OidcConfigResponse>;
export const revoke: (revocationEndpoint: string, clientId: string, token: string, requester: Requester) => Promise<void>;
export const isArbitraryObject: (data: unknown) => data is Record<string, unknown>;
declare const logtoErrorCodes: Readonly<{
id_token: {
invalid_iat: string;
invalid_token: string;
};
callback_uri_verification: {
redirect_uri_mismatched: string;
error_found: string;
missing_state: string;
state_mismatched: string;
missing_code: string;
};
crypto_subtle_unavailable: "Crypto.subtle is unavailable in insecure contexts (non-HTTPS).";
unexpected_response_error: "Unexpected response error from the server.";
}>;
export type LogtoErrorCode = NormalizeKeyPaths<typeof logtoErrorCodes>;
export class LogtoError extends Error {
code: LogtoErrorCode;
data: unknown;
constructor(code: LogtoErrorCode, data?: unknown);
}
export const isLogtoRequestError: (data: unknown) => data is {
code: string;
message: string;
};
export class LogtoRequestError extends Error {
code: string;
constructor(code: string, message: string);
}
export class OidcError {
error: string;
errorDescription?: string | undefined;
constructor(error: string, errorDescription?: string | undefined);
}
export const parseUriParameters: (uri: string) => URLSearchParams;
export const verifyAndParseCodeFromCallbackUri: (callbackUri: string, redirectUri: string, state: string) => string;
export type IdTokenClaims = {
iss: string;
sub: string;
aud: string;
exp: number;
iat: number;
at_hash?: Nullable<string>;
name?: Nullable<string>;
username?: Nullable<string>;
picture?: Nullable<string>;
email?: Nullable<string>;
email_verified?: boolean;
phone_number?: Nullable<string>;
phone_number_verified?: boolean;
};
export const verifyIdToken: (idToken: string, clientId: string, issuer: string, jwks: JWTVerifyGetKey) => Promise<void>;
export const decodeIdToken: (token: string) => IdTokenClaims;
/**
* @param originalScopes
* @return scopes should contain all default scopes (`openid`, `offline_access` and `profile`)
*/
export const withDefaultScopes: (originalScopes?: string[]) => string;
export type SignInUriParameters = {
authorizationEndpoint: string;
clientId: string;
redirectUri: string;
codeChallenge: string;
state: string;
scopes?: string[];
resources?: string[];
prompt?: Prompt;
interactionMode?: InteractionMode;
};
export const generateSignInUri: ({ authorizationEndpoint, clientId, redirectUri, codeChallenge, state, scopes, resources, prompt, interactionMode, }: SignInUriParameters) => string;
type SignOutUriParameters = {
endSessionEndpoint: string;
clientId: string;
postLogoutRedirectUri?: string;
};
export const generateSignOutUri: ({ endSessionEndpoint, clientId, postLogoutRedirectUri, }: SignOutUriParameters) => string;
type Identity = {
userId: string;
details?: Record<string, unknown>;
};
export type UserInfoResponse = {
sub: string;
name?: Nullable<string>;
username?: Nullable<string>;
picture?: Nullable<string>;
email?: Nullable<string>;
email_verified?: boolean;
phone_number?: Nullable<string>;
phone_number_verified?: boolean;
custom_data?: unknown;
identities?: Record<string, Identity>;
};
export const fetchUserInfo: (userInfoEndpoint: string, accessToken: string, requester: Requester) => Promise<UserInfoResponse>;
//# sourceMappingURL=index.d.ts.map
export * from './core';
export * from './utils';
export * from './consts';
export * from './types';

@@ -1,407 +0,56 @@

var $eVySA$camelcasekeys = require("camelcase-keys");
var $eVySA$silverhandessentials = require("@silverhand/essentials");
var $eVySA$lodashget = require("lodash.get");
var $eVySA$jose = require("jose");
'use strict';
function $parcel$exportWildcard(dest, source) {
Object.keys(source).forEach(function(key) {
if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {
return;
}
var fetchToken = require('./core/fetch-token.js');
var oidcConfig = require('./core/oidc-config.js');
var revoke = require('./core/revoke.js');
var signIn = require('./core/sign-in.js');
var signOut = require('./core/sign-out.js');
var userInfo = require('./core/user-info.js');
var callbackUri = require('./utils/callback-uri.js');
var errors = require('./utils/errors.js');
var idToken = require('./utils/id-token.js');
var scopes = require('./utils/scopes.js');
var arbitraryObject = require('./utils/arbitrary-object.js');
var index = require('./consts/index.js');
Object.defineProperty(dest, key, {
enumerable: true,
get: function get() {
return source[key];
}
});
});
return dest;
}
function $parcel$interopDefault(a) {
return a && a.__esModule ? a.default : a;
}
function $parcel$export(e, n, v, s) {
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
}
/* istanbul ignore file */ var $a722dce254028e46$exports = {};
var $e6b305c1e572373d$exports = {};
$parcel$export($e6b305c1e572373d$exports, "fetchTokenByAuthorizationCode", () => $e6b305c1e572373d$export$684f740cd70532d4);
$parcel$export($e6b305c1e572373d$exports, "fetchTokenByRefreshToken", () => $e6b305c1e572373d$export$9909137b467efb8b);
var $5c367c11270b61f6$exports = {};
$parcel$export($5c367c11270b61f6$exports, "ContentType", () => $5c367c11270b61f6$export$e2e108cbe2e4f865);
$parcel$export($5c367c11270b61f6$exports, "TokenGrantType", () => $5c367c11270b61f6$export$3f2aafdd1ccae76c);
$parcel$export($5c367c11270b61f6$exports, "QueryKey", () => $5c367c11270b61f6$export$65f63a8bc3cba53d);
$parcel$export($5c367c11270b61f6$exports, "Prompt", () => $5c367c11270b61f6$export$83716a4aa1642908);
$parcel$export($5c367c11270b61f6$exports, "ReservedScope", () => $5c367c11270b61f6$export$1d2e82cebfd4b08);
$parcel$export($5c367c11270b61f6$exports, "UserScope", () => $5c367c11270b61f6$export$4b02c5b431f6eb78);
const $5c367c11270b61f6$export$e2e108cbe2e4f865 = {
formUrlEncoded: {
"Content-Type": "application/x-www-form-urlencoded"
}
};
let $5c367c11270b61f6$export$3f2aafdd1ccae76c;
(function(TokenGrantType) {
TokenGrantType["AuthorizationCode"] = "authorization_code";
TokenGrantType["RefreshToken"] = "refresh_token";
})($5c367c11270b61f6$export$3f2aafdd1ccae76c || ($5c367c11270b61f6$export$3f2aafdd1ccae76c = {}));
let $5c367c11270b61f6$export$65f63a8bc3cba53d;
(function(QueryKey) {
QueryKey["ClientId"] = "client_id";
QueryKey["Code"] = "code";
QueryKey["CodeChallenge"] = "code_challenge";
QueryKey["CodeChallengeMethod"] = "code_challenge_method";
QueryKey["CodeVerifier"] = "code_verifier";
QueryKey["Error"] = "error";
QueryKey["ErrorDescription"] = "error_description";
QueryKey["GrantType"] = "grant_type";
QueryKey["IdToken"] = "id_token";
QueryKey["IdTokenHint"] = "id_token_hint";
QueryKey["PostLogoutRedirectUri"] = "post_logout_redirect_uri";
QueryKey["Prompt"] = "prompt";
QueryKey["RedirectUri"] = "redirect_uri";
QueryKey["RefreshToken"] = "refresh_token";
QueryKey["Resource"] = "resource";
QueryKey["ResponseType"] = "response_type";
QueryKey["Scope"] = "scope";
QueryKey["State"] = "state";
QueryKey["Token"] = "token";
QueryKey[// Need to align with the OIDC extraParams settings in core
"InteractionMode"] = "interaction_mode";
})($5c367c11270b61f6$export$65f63a8bc3cba53d || ($5c367c11270b61f6$export$65f63a8bc3cba53d = {}));
let $5c367c11270b61f6$export$83716a4aa1642908;
(function(Prompt) {
Prompt["Consent"] = "consent";
Prompt["Login"] = "login";
})($5c367c11270b61f6$export$83716a4aa1642908 || ($5c367c11270b61f6$export$83716a4aa1642908 = {}));
let $5c367c11270b61f6$export$1d2e82cebfd4b08;
(function(ReservedScope) {
ReservedScope["OpenId"] = "openid";
ReservedScope["OfflineAccess"] = "offline_access";
})($5c367c11270b61f6$export$1d2e82cebfd4b08 || ($5c367c11270b61f6$export$1d2e82cebfd4b08 = {}));
let $5c367c11270b61f6$export$4b02c5b431f6eb78;
(function(UserScope) {
UserScope[/**
* Scope for basic user info.
*
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
*/ "Profile"] = "profile";
UserScope[/**
* Scope for user email address.
*
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
*/ "Email"] = "email";
UserScope[/**
* Scope for user phone number.
*
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
*/ "Phone"] = "phone";
UserScope[/**
* Scope for user's custom data.
*
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
*/ "CustomData"] = "custom_data";
UserScope[/**
* Scope for user's social identity details.
*
* See {@link idTokenClaims} for mapped claims in ID Token and {@link userinfoClaims} for additional claims in Userinfo Endpoint.
*/ "Identities"] = "identities";
})($5c367c11270b61f6$export$4b02c5b431f6eb78 || ($5c367c11270b61f6$export$4b02c5b431f6eb78 = {}));
const $e6b305c1e572373d$export$684f740cd70532d4 = async ({ clientId: clientId , tokenEndpoint: tokenEndpoint , redirectUri: redirectUri , codeVerifier: codeVerifier , code: code , resource: resource }, requester)=>{
const parameters = new URLSearchParams();
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ClientId, clientId);
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Code, code);
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).CodeVerifier, codeVerifier);
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).RedirectUri, redirectUri);
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).GrantType, (0, $5c367c11270b61f6$export$3f2aafdd1ccae76c).AuthorizationCode);
if (resource) parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Resource, resource);
const snakeCaseCodeTokenResponse = await requester(tokenEndpoint, {
method: "POST",
headers: (0, $5c367c11270b61f6$export$e2e108cbe2e4f865).formUrlEncoded,
body: parameters
});
return (0, ($parcel$interopDefault($eVySA$camelcasekeys)))(snakeCaseCodeTokenResponse);
};
const $e6b305c1e572373d$export$9909137b467efb8b = async ({ clientId: clientId , tokenEndpoint: tokenEndpoint , refreshToken: refreshToken , resource: resource , scopes: scopes }, requester)=>{
const parameters = new URLSearchParams();
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ClientId, clientId);
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).RefreshToken, refreshToken);
parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).GrantType, (0, $5c367c11270b61f6$export$3f2aafdd1ccae76c).RefreshToken);
if (resource) parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Resource, resource);
if (scopes?.length) parameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Scope, scopes.join(" "));
const snakeCaseRefreshTokenTokenResponse = await requester(tokenEndpoint, {
method: "POST",
headers: (0, $5c367c11270b61f6$export$e2e108cbe2e4f865).formUrlEncoded,
body: parameters
});
return (0, ($parcel$interopDefault($eVySA$camelcasekeys)))(snakeCaseRefreshTokenTokenResponse);
};
var $945b1d0ce7f8f44a$exports = {};
$parcel$export($945b1d0ce7f8f44a$exports, "discoveryPath", () => $945b1d0ce7f8f44a$export$815bda5ead26b243);
$parcel$export($945b1d0ce7f8f44a$exports, "fetchOidcConfig", () => $945b1d0ce7f8f44a$export$98242d8e822ad11f);
const $945b1d0ce7f8f44a$export$815bda5ead26b243 = "/oidc/.well-known/openid-configuration";
const $945b1d0ce7f8f44a$export$98242d8e822ad11f = async (endpoint, requester)=>(0, ($parcel$interopDefault($eVySA$camelcasekeys)))(await requester(endpoint));
var $de840481123b2c25$exports = {};
$parcel$export($de840481123b2c25$exports, "revoke", () => $de840481123b2c25$export$573f8dbbf6fbef75);
const $de840481123b2c25$export$573f8dbbf6fbef75 = async (revocationEndpoint, clientId, token, requester)=>requester(revocationEndpoint, {
method: "POST",
headers: (0, $5c367c11270b61f6$export$e2e108cbe2e4f865).formUrlEncoded,
body: new URLSearchParams({
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ClientId]: clientId,
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Token]: token
})
});
var $1e17092ca3413c94$exports = {};
$parcel$export($1e17092ca3413c94$exports, "generateSignInUri", () => $1e17092ca3413c94$export$b01a187f12b774c6);
var $10615ba3cc8a78f8$exports = {};
var $d3a7a037fd1d9433$exports = {};
$parcel$export($d3a7a037fd1d9433$exports, "parseUriParameters", () => $d3a7a037fd1d9433$export$4851e69315d5b72c);
$parcel$export($d3a7a037fd1d9433$exports, "verifyAndParseCodeFromCallbackUri", () => $d3a7a037fd1d9433$export$dc3fae3c99763885);
var $47fe17290a91cd19$exports = {};
$parcel$export($47fe17290a91cd19$exports, "LogtoError", () => $47fe17290a91cd19$export$ba60d77e6748b659);
$parcel$export($47fe17290a91cd19$exports, "isLogtoRequestError", () => $47fe17290a91cd19$export$27f79c8238476d38);
$parcel$export($47fe17290a91cd19$exports, "LogtoRequestError", () => $47fe17290a91cd19$export$e6e15b8ba42b9b70);
$parcel$export($47fe17290a91cd19$exports, "OidcError", () => $47fe17290a91cd19$export$d4832bcf9ce430e0);
var $30090a6cd317e7f3$exports = {};
$parcel$export($30090a6cd317e7f3$exports, "isArbitraryObject", () => $30090a6cd317e7f3$export$aa016a295c6092c8);
const $30090a6cd317e7f3$export$aa016a295c6092c8 = (data)=>typeof data === "object" && data !== null;
const $47fe17290a91cd19$var$logtoErrorCodes = Object.freeze({
id_token: {
invalid_iat: "Invalid issued at time in the ID token",
invalid_token: "Invalid ID token"
},
callback_uri_verification: {
redirect_uri_mismatched: "The callback URI mismatches the redirect URI.",
error_found: "Error found in the callback URI",
missing_state: "Missing state in the callback URI",
state_mismatched: "State mismatched in the callback URI",
missing_code: "Missing code in the callback URI"
},
crypto_subtle_unavailable: "Crypto.subtle is unavailable in insecure contexts (non-HTTPS).",
unexpected_response_error: "Unexpected response error from the server."
exports.fetchTokenByAuthorizationCode = fetchToken.fetchTokenByAuthorizationCode;
exports.fetchTokenByRefreshToken = fetchToken.fetchTokenByRefreshToken;
exports.discoveryPath = oidcConfig.discoveryPath;
exports.fetchOidcConfig = oidcConfig.fetchOidcConfig;
exports.revoke = revoke.revoke;
exports.generateSignInUri = signIn.generateSignInUri;
exports.generateSignOutUri = signOut.generateSignOutUri;
exports.fetchUserInfo = userInfo.fetchUserInfo;
exports.parseUriParameters = callbackUri.parseUriParameters;
exports.verifyAndParseCodeFromCallbackUri = callbackUri.verifyAndParseCodeFromCallbackUri;
exports.LogtoError = errors.LogtoError;
exports.LogtoRequestError = errors.LogtoRequestError;
exports.OidcError = errors.OidcError;
exports.isLogtoRequestError = errors.isLogtoRequestError;
exports.decodeIdToken = idToken.decodeIdToken;
exports.verifyIdToken = idToken.verifyIdToken;
exports.withDefaultScopes = scopes.withDefaultScopes;
exports.isArbitraryObject = arbitraryObject.isArbitraryObject;
exports.ContentType = index.ContentType;
Object.defineProperty(exports, 'Prompt', {
enumerable: true,
get: function () { return index.Prompt; }
});
const $47fe17290a91cd19$var$getMessageByErrorCode = (errorCode)=>{
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const message = (0, ($parcel$interopDefault($eVySA$lodashget)))($47fe17290a91cd19$var$logtoErrorCodes, errorCode);
if (typeof message === "string") return message;
return errorCode;
};
class $47fe17290a91cd19$export$ba60d77e6748b659 extends Error {
constructor(code, data){
super($47fe17290a91cd19$var$getMessageByErrorCode(code));
this.code = code;
this.data = data;
}
}
const $47fe17290a91cd19$export$27f79c8238476d38 = (data)=>{
if (!(0, $30090a6cd317e7f3$export$aa016a295c6092c8)(data)) return false;
return typeof data.code === "string" && typeof data.message === "string";
};
class $47fe17290a91cd19$export$e6e15b8ba42b9b70 extends Error {
constructor(code, message){
super(message);
this.code = code;
}
}
class $47fe17290a91cd19$export$d4832bcf9ce430e0 {
constructor(error, errorDescription){
this.error = error;
this.errorDescription = errorDescription;
}
}
const $d3a7a037fd1d9433$export$4851e69315d5b72c = (uri)=>{
const [, queryString = ""] = uri.split("?");
return new URLSearchParams(queryString);
};
const $d3a7a037fd1d9433$export$dc3fae3c99763885 = (callbackUri, redirectUri, state)=>{
if (!callbackUri.startsWith(redirectUri)) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("callback_uri_verification.redirect_uri_mismatched");
const uriParameters = $d3a7a037fd1d9433$export$4851e69315d5b72c(callbackUri);
const error = (0, $eVySA$silverhandessentials.conditional)(uriParameters.get((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Error));
const errorDescription = (0, $eVySA$silverhandessentials.conditional)(uriParameters.get((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ErrorDescription));
if (error) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("callback_uri_verification.error_found", new (0, $47fe17290a91cd19$export$d4832bcf9ce430e0)(error, errorDescription));
const stateFromCallbackUri = uriParameters.get((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).State);
if (!stateFromCallbackUri) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("callback_uri_verification.missing_state");
if (stateFromCallbackUri !== state) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("callback_uri_verification.state_mismatched");
const code = uriParameters.get((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Code);
if (!code) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("callback_uri_verification.missing_code");
return code;
};
var $c2fd0c04c48199e2$exports = {};
$parcel$export($c2fd0c04c48199e2$exports, "verifyIdToken", () => $c2fd0c04c48199e2$export$b5b3317c8aecbcd5);
$parcel$export($c2fd0c04c48199e2$exports, "decodeIdToken", () => $c2fd0c04c48199e2$export$aac2d5b7f5cd16d5);
const $c2fd0c04c48199e2$var$issuedAtTimeTolerance = 60;
/* eslint-disable complexity */ /**
* @link [ID Token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)
*/ function $c2fd0c04c48199e2$var$assertIdTokenClaims(data) {
if (!(0, $30090a6cd317e7f3$export$aa016a295c6092c8)(data)) throw new TypeError("IdToken is expected to be an object");
for (const key of [
"iss",
"sub",
"aud"
]){
if (typeof data[key] !== "string") throw new TypeError(`At path: IdToken.${key}: expected a string`);
}
for (const key of [
"exp",
"iat"
]){
if (typeof data[key] !== "number") throw new TypeError(`At path: IdToken.${key}: expected a number`);
}
for (const key of [
"at_hash",
"name",
"username",
"picture",
"email",
"phone_number"
]){
if (data[key] === undefined) continue;
if (typeof data[key] !== "string" && data[key] !== null) throw new TypeError(`At path: IdToken.${key}: expected null or a string`);
}
for (const key of [
"email_verified",
"phone_number_verified"
]){
if (data[key] === undefined) continue;
if (typeof data[key] !== "boolean") throw new TypeError(`At path: IdToken.${key}: expected a boolean`);
}
}
const $c2fd0c04c48199e2$export$b5b3317c8aecbcd5 = async (idToken, clientId, issuer, jwks)=>{
const result = await (0, $eVySA$jose.jwtVerify)(idToken, jwks, {
audience: clientId,
issuer: issuer
});
if (Math.abs((result.payload.iat ?? 0) - Date.now() / 1000) > $c2fd0c04c48199e2$var$issuedAtTimeTolerance) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("id_token.invalid_iat");
};
const $c2fd0c04c48199e2$export$aac2d5b7f5cd16d5 = (token)=>{
const { 1: encodedPayload } = token.split(".");
if (!encodedPayload) throw new (0, $47fe17290a91cd19$export$ba60d77e6748b659)("id_token.invalid_token");
const json = (0, $eVySA$silverhandessentials.urlSafeBase64).decode(encodedPayload);
const idTokenClaims = JSON.parse(json);
$c2fd0c04c48199e2$var$assertIdTokenClaims(idTokenClaims);
return idTokenClaims;
};
var $b85bdeea0b1e81a5$exports = {};
$parcel$export($b85bdeea0b1e81a5$exports, "withDefaultScopes", () => $b85bdeea0b1e81a5$export$3cf0748e30b766d7);
const $b85bdeea0b1e81a5$export$3cf0748e30b766d7 = (originalScopes)=>{
const reservedScopes = Object.values((0, $5c367c11270b61f6$export$1d2e82cebfd4b08));
const uniqueScopes = new Set([
...reservedScopes,
(0, $5c367c11270b61f6$export$4b02c5b431f6eb78).Profile,
...originalScopes ?? []
]);
return Array.from(uniqueScopes).join(" ");
};
$parcel$exportWildcard($10615ba3cc8a78f8$exports, $d3a7a037fd1d9433$exports);
$parcel$exportWildcard($10615ba3cc8a78f8$exports, $47fe17290a91cd19$exports);
$parcel$exportWildcard($10615ba3cc8a78f8$exports, $c2fd0c04c48199e2$exports);
$parcel$exportWildcard($10615ba3cc8a78f8$exports, $b85bdeea0b1e81a5$exports);
$parcel$exportWildcard($10615ba3cc8a78f8$exports, $30090a6cd317e7f3$exports);
const $1e17092ca3413c94$var$codeChallengeMethod = "S256";
const $1e17092ca3413c94$var$responseType = "code";
const $1e17092ca3413c94$export$b01a187f12b774c6 = ({ authorizationEndpoint: authorizationEndpoint , clientId: clientId , redirectUri: redirectUri , codeChallenge: codeChallenge , state: state , scopes: scopes , resources: resources , prompt: prompt , interactionMode: interactionMode })=>{
const urlSearchParameters = new URLSearchParams({
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ClientId]: clientId,
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).RedirectUri]: redirectUri,
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).CodeChallenge]: codeChallenge,
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).CodeChallengeMethod]: $1e17092ca3413c94$var$codeChallengeMethod,
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).State]: state,
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ResponseType]: $1e17092ca3413c94$var$responseType,
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Prompt]: prompt ?? (0, $5c367c11270b61f6$export$83716a4aa1642908).Consent,
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Scope]: (0, $b85bdeea0b1e81a5$export$3cf0748e30b766d7)(scopes)
});
for (const resource of resources ?? [])urlSearchParameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).Resource, resource);
// Set interactionMode to signUp for a create account user experience
if (interactionMode) urlSearchParameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).InteractionMode, interactionMode);
return `${authorizationEndpoint}?${urlSearchParameters.toString()}`;
};
var $1dac903ccb175f85$exports = {};
$parcel$export($1dac903ccb175f85$exports, "generateSignOutUri", () => $1dac903ccb175f85$export$b3c9a2bd2330de28);
const $1dac903ccb175f85$export$b3c9a2bd2330de28 = ({ endSessionEndpoint: endSessionEndpoint , clientId: clientId , postLogoutRedirectUri: postLogoutRedirectUri })=>{
const urlSearchParameters = new URLSearchParams({
[(0, $5c367c11270b61f6$export$65f63a8bc3cba53d).ClientId]: clientId
});
if (postLogoutRedirectUri) urlSearchParameters.append((0, $5c367c11270b61f6$export$65f63a8bc3cba53d).PostLogoutRedirectUri, postLogoutRedirectUri);
return `${endSessionEndpoint}?${urlSearchParameters.toString()}`;
};
var $427c00d1e1cb4e3b$exports = {};
$parcel$export($427c00d1e1cb4e3b$exports, "fetchUserInfo", () => $427c00d1e1cb4e3b$export$eee09f98e5b044aa);
const $427c00d1e1cb4e3b$export$eee09f98e5b044aa = async (userInfoEndpoint, accessToken, requester)=>requester(userInfoEndpoint, {
headers: {
Authorization: `Bearer ${accessToken}`
}
});
$parcel$exportWildcard($a722dce254028e46$exports, $e6b305c1e572373d$exports);
$parcel$exportWildcard($a722dce254028e46$exports, $945b1d0ce7f8f44a$exports);
$parcel$exportWildcard($a722dce254028e46$exports, $de840481123b2c25$exports);
$parcel$exportWildcard($a722dce254028e46$exports, $1e17092ca3413c94$exports);
$parcel$exportWildcard($a722dce254028e46$exports, $1dac903ccb175f85$exports);
$parcel$exportWildcard($a722dce254028e46$exports, $427c00d1e1cb4e3b$exports);
var $1f7598f829ce4be1$exports = {};
$parcel$exportWildcard(module.exports, $a722dce254028e46$exports);
$parcel$exportWildcard(module.exports, $10615ba3cc8a78f8$exports);
$parcel$exportWildcard(module.exports, $5c367c11270b61f6$exports);
$parcel$exportWildcard(module.exports, $1f7598f829ce4be1$exports);
//# sourceMappingURL=index.js.map
Object.defineProperty(exports, 'QueryKey', {
enumerable: true,
get: function () { return index.QueryKey; }
});
Object.defineProperty(exports, 'ReservedScope', {
enumerable: true,
get: function () { return index.ReservedScope; }
});
Object.defineProperty(exports, 'TokenGrantType', {
enumerable: true,
get: function () { return index.TokenGrantType; }
});
Object.defineProperty(exports, 'UserScope', {
enumerable: true,
get: function () { return index.UserScope; }
});
{
"name": "@logto/js",
"version": "1.1.0",
"version": "1.1.2",
"source": "./src/index.ts",

@@ -8,5 +8,5 @@ "main": "./lib/index.js",

"require": "./lib/index.js",
"import": "./lib/module.mjs"
"import": "./lib/index.mjs"
},
"module": "./lib/module.mjs",
"module": "./lib/index.mjs",
"types": "./lib/index.d.ts",

@@ -26,35 +26,34 @@ "files": [

"check": "tsc --noEmit",
"build": "rm -rf lib/ && pnpm check && parcel build && cp lib/index.d.ts lib/module.d.mts",
"build": "rm -rf lib/ && tsc -p tsconfig.build.json --noEmit && rollup -c",
"lint": "eslint --ext .ts src",
"test": "jest",
"test:coverage": "jest --silent --env=jsdom && jest --silent --coverage",
"test:coverage": "jest --silent --env=jsdom && jest --silent",
"prepack": "pnpm test"
},
"dependencies": {
"@silverhand/essentials": "^1.2.1",
"@silverhand/essentials": "^2.6.1",
"camelcase-keys": "^7.0.1",
"jose": "^4.3.8",
"jose": "^4.13.2",
"lodash.get": "^4.4.2"
},
"devDependencies": {
"@jest/types": "^27.5.1",
"@parcel/core": "^2.8.3",
"@parcel/packager-ts": "^2.8.3",
"@parcel/transformer-typescript-types": "^2.8.3",
"@jest/types": "^29.5.0",
"@silverhand/eslint-config": "^2.0.0",
"@silverhand/ts-config": "^1.0.0",
"@types/jest": "^27.4.1",
"@swc/core": "^1.3.50",
"@swc/jest": "^0.2.24",
"@types/jest": "^29.5.0",
"@types/lodash.get": "^4.4.6",
"@types/node": "^18.0.0",
"eslint": "^8.23.0",
"jest": "^27.5.1",
"eslint": "^8.38.0",
"jest": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
"jest-matcher-specific-error": "^1.0.0",
"lint-staged": "^13.0.0",
"nock": "^13.1.3",
"parcel": "^2.8.3",
"prettier": "^2.7.1",
"nock": "^13.3.0",
"prettier": "^2.8.7",
"rollup": "^3.20.2",
"text-encoder": "^0.0.4",
"ts-jest": "^27.0.4",
"type-fest": "^3.0.0",
"typescript": "4.9.5"
"typescript": "^5.0.0"
},

@@ -68,3 +67,3 @@ "eslintConfig": {

},
"gitHead": "f24174a6f840b8db968ad3886878d1b6e92b1b9d"
"gitHead": "9e9a8b0887ef67baa7c3c564590bb06e7801d03e"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc