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 0.1.2-rc.0 to 0.1.2-rc.1

124

lib/core/fetch-token.js
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -43,62 +7,40 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

exports.fetchTokenByRefreshToken = exports.fetchTokenByAuthorizationCode = void 0;
var camelcase_keys_1 = __importDefault(require("camelcase-keys"));
var consts_1 = require("../consts");
var fetchTokenByAuthorizationCode = function (_a, requester) {
var clientId = _a.clientId, tokenEndpoint = _a.tokenEndpoint, redirectUri = _a.redirectUri, codeVerifier = _a.codeVerifier, code = _a.code, resource = _a.resource;
return __awaiter(void 0, void 0, void 0, function () {
var parameters, snakeCaseCodeTokenResponse;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
parameters = new URLSearchParams();
parameters.append(consts_1.QueryKey.ClientId, clientId);
parameters.append(consts_1.QueryKey.Code, code);
parameters.append(consts_1.QueryKey.CodeVerifier, codeVerifier);
parameters.append(consts_1.QueryKey.RedirectUri, redirectUri);
parameters.append(consts_1.QueryKey.GrantType, consts_1.TokenGrantType.AuthorizationCode);
if (resource) {
parameters.append(consts_1.QueryKey.Resource, resource);
}
return [4 /*yield*/, requester(tokenEndpoint, {
method: 'POST',
headers: consts_1.ContentType.formUrlEncoded,
body: parameters,
})];
case 1:
snakeCaseCodeTokenResponse = _b.sent();
return [2 /*return*/, (0, camelcase_keys_1.default)(snakeCaseCodeTokenResponse)];
}
});
const camelcase_keys_1 = __importDefault(require("camelcase-keys"));
const consts_1 = require("../consts");
const fetchTokenByAuthorizationCode = async ({ clientId, tokenEndpoint, redirectUri, codeVerifier, code, resource, }, requester) => {
const parameters = new URLSearchParams();
parameters.append(consts_1.QueryKey.ClientId, clientId);
parameters.append(consts_1.QueryKey.Code, code);
parameters.append(consts_1.QueryKey.CodeVerifier, codeVerifier);
parameters.append(consts_1.QueryKey.RedirectUri, redirectUri);
parameters.append(consts_1.QueryKey.GrantType, consts_1.TokenGrantType.AuthorizationCode);
if (resource) {
parameters.append(consts_1.QueryKey.Resource, resource);
}
const snakeCaseCodeTokenResponse = await requester(tokenEndpoint, {
method: 'POST',
headers: consts_1.ContentType.formUrlEncoded,
body: parameters,
});
return (0, camelcase_keys_1.default)(snakeCaseCodeTokenResponse);
};
exports.fetchTokenByAuthorizationCode = fetchTokenByAuthorizationCode;
var fetchTokenByRefreshToken = function (_a, requester) {
var clientId = _a.clientId, tokenEndpoint = _a.tokenEndpoint, refreshToken = _a.refreshToken, resource = _a.resource, scopes = _a.scopes;
return __awaiter(void 0, void 0, void 0, function () {
var parameters, snakeCaseRefreshTokenTokenResponse;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
parameters = new URLSearchParams();
parameters.append(consts_1.QueryKey.ClientId, clientId);
parameters.append(consts_1.QueryKey.RefreshToken, refreshToken);
parameters.append(consts_1.QueryKey.GrantType, consts_1.TokenGrantType.RefreshToken);
if (resource) {
parameters.append(consts_1.QueryKey.Resource, resource);
}
if (scopes === null || scopes === void 0 ? void 0 : scopes.length) {
parameters.append(consts_1.QueryKey.Scope, scopes.join(' '));
}
return [4 /*yield*/, requester(tokenEndpoint, {
method: 'POST',
headers: consts_1.ContentType.formUrlEncoded,
body: parameters,
})];
case 1:
snakeCaseRefreshTokenTokenResponse = _b.sent();
return [2 /*return*/, (0, camelcase_keys_1.default)(snakeCaseRefreshTokenTokenResponse)];
}
});
const fetchTokenByRefreshToken = async ({ clientId, tokenEndpoint, refreshToken, resource, scopes }, requester) => {
const parameters = new URLSearchParams();
parameters.append(consts_1.QueryKey.ClientId, clientId);
parameters.append(consts_1.QueryKey.RefreshToken, refreshToken);
parameters.append(consts_1.QueryKey.GrantType, consts_1.TokenGrantType.RefreshToken);
if (resource) {
parameters.append(consts_1.QueryKey.Resource, resource);
}
if (scopes?.length) {
parameters.append(consts_1.QueryKey.Scope, scopes.join(' '));
}
const snakeCaseRefreshTokenTokenResponse = await requester(tokenEndpoint, {
method: 'POST',
headers: consts_1.ContentType.formUrlEncoded,
body: parameters,
});
return (0, camelcase_keys_1.default)(snakeCaseRefreshTokenTokenResponse);
};
exports.fetchTokenByRefreshToken = fetchTokenByRefreshToken;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -43,12 +7,5 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

exports.fetchOidcConfig = exports.discoveryPath = void 0;
var camelcase_keys_1 = __importDefault(require("camelcase-keys"));
const camelcase_keys_1 = __importDefault(require("camelcase-keys"));
exports.discoveryPath = '/oidc/.well-known/openid-configuration';
var fetchOidcConfig = function (endpoint, requester) { return __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = camelcase_keys_1.default;
return [4 /*yield*/, requester(endpoint)];
case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])];
}
}); }); };
const fetchOidcConfig = async (endpoint, requester) => (0, camelcase_keys_1.default)(await requester(endpoint));
exports.fetchOidcConfig = fetchOidcConfig;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.revoke = void 0;
var consts_1 = require("../consts");
var revoke = function (revocationEndpoint, clientId, token, requester) { return __awaiter(void 0, void 0, void 0, function () {
var _a;
return __generator(this, function (_b) {
return [2 /*return*/, requester(revocationEndpoint, {
method: 'POST',
headers: consts_1.ContentType.formUrlEncoded,
body: new URLSearchParams((_a = {},
_a[consts_1.QueryKey.ClientId] = clientId,
_a[consts_1.QueryKey.Token] = token,
_a)),
})];
});
}); };
const consts_1 = require("../consts");
const revoke = async (revocationEndpoint, clientId, token, requester) => requester(revocationEndpoint, {
method: 'POST',
headers: consts_1.ContentType.formUrlEncoded,
body: new URLSearchParams({
[consts_1.QueryKey.ClientId]: clientId,
[consts_1.QueryKey.Token]: token,
}),
});
exports.revoke = revoke;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateSignInUri = void 0;
var consts_1 = require("../consts");
var utils_1 = require("../utils");
var codeChallengeMethod = 'S256';
var prompt = 'consent';
var responseType = 'code';
var generateSignInUri = function (_a) {
var _b;
var authorizationEndpoint = _a.authorizationEndpoint, clientId = _a.clientId, redirectUri = _a.redirectUri, codeChallenge = _a.codeChallenge, state = _a.state, scopes = _a.scopes, resources = _a.resources;
var urlSearchParameters = new URLSearchParams((_b = {},
_b[consts_1.QueryKey.ClientId] = clientId,
_b[consts_1.QueryKey.RedirectUri] = redirectUri,
_b[consts_1.QueryKey.CodeChallenge] = codeChallenge,
_b[consts_1.QueryKey.CodeChallengeMethod] = codeChallengeMethod,
_b[consts_1.QueryKey.State] = state,
_b[consts_1.QueryKey.ResponseType] = responseType,
_b[consts_1.QueryKey.Prompt] = prompt,
_b[consts_1.QueryKey.Scope] = (0, utils_1.withReservedScopes)(scopes),
_b));
for (var _i = 0, _c = resources !== null && resources !== void 0 ? resources : []; _i < _c.length; _i++) {
var resource = _c[_i];
const consts_1 = require("../consts");
const utils_1 = require("../utils");
const codeChallengeMethod = 'S256';
const prompt = 'consent';
const responseType = 'code';
const generateSignInUri = ({ authorizationEndpoint, clientId, redirectUri, codeChallenge, state, scopes, resources, }) => {
const urlSearchParameters = new URLSearchParams({
[consts_1.QueryKey.ClientId]: clientId,
[consts_1.QueryKey.RedirectUri]: redirectUri,
[consts_1.QueryKey.CodeChallenge]: codeChallenge,
[consts_1.QueryKey.CodeChallengeMethod]: codeChallengeMethod,
[consts_1.QueryKey.State]: state,
[consts_1.QueryKey.ResponseType]: responseType,
[consts_1.QueryKey.Prompt]: prompt,
[consts_1.QueryKey.Scope]: (0, utils_1.withReservedScopes)(scopes),
});
for (const resource of resources ?? []) {
urlSearchParameters.append(consts_1.QueryKey.Resource, resource);
}
return "".concat(authorizationEndpoint, "?").concat(urlSearchParameters.toString());
return `${authorizationEndpoint}?${urlSearchParameters.toString()}`;
};
exports.generateSignInUri = generateSignInUri;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateSignOutUri = void 0;
var consts_1 = require("../consts");
var generateSignOutUri = function (_a) {
var _b;
var endSessionEndpoint = _a.endSessionEndpoint, idToken = _a.idToken, postLogoutRedirectUri = _a.postLogoutRedirectUri;
var urlSearchParameters = new URLSearchParams((_b = {}, _b[consts_1.QueryKey.IdTokenHint] = idToken, _b));
const consts_1 = require("../consts");
const generateSignOutUri = ({ endSessionEndpoint, idToken, postLogoutRedirectUri, }) => {
const urlSearchParameters = new URLSearchParams({ [consts_1.QueryKey.IdTokenHint]: idToken });
if (postLogoutRedirectUri) {
urlSearchParameters.append(consts_1.QueryKey.PostLogoutRedirectUri, postLogoutRedirectUri);
}
return "".concat(endSessionEndpoint, "?").concat(urlSearchParameters.toString());
return `${endSessionEndpoint}?${urlSearchParameters.toString()}`;
};
exports.generateSignOutUri = generateSignOutUri;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetchUserInfo = void 0;
var fetchUserInfo = function (userInfoEndpoint, accessToken, requester) { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, requester(userInfoEndpoint, {
headers: { Authorization: "Bearer ".concat(accessToken) },
})];
});
}); };
const fetchUserInfo = async (userInfoEndpoint, accessToken, requester) => requester(userInfoEndpoint, {
headers: { Authorization: `Bearer ${accessToken}` },
});
exports.fetchUserInfo = fetchUserInfo;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.verifyAndParseCodeFromCallbackUri = exports.parseUriParameters = void 0;
var consts_1 = require("../consts");
var errors_1 = require("./errors");
var parseUriParameters = function (uri) {
var _a = uri.split('?'), _b = _a[1], queryString = _b === void 0 ? '' : _b;
const consts_1 = require("../consts");
const errors_1 = require("./errors");
const parseUriParameters = (uri) => {
const [, queryString = ''] = uri.split('?');
return new URLSearchParams(queryString);
};
exports.parseUriParameters = parseUriParameters;
var verifyAndParseCodeFromCallbackUri = function (callbackUri, redirectUri, state) {
const verifyAndParseCodeFromCallbackUri = (callbackUri, redirectUri, state) => {
if (!callbackUri.startsWith(redirectUri)) {
throw new errors_1.LogtoError('callback_uri_verification.redirect_uri_mismatched');
}
var uriParameters = (0, exports.parseUriParameters)(callbackUri);
var error = uriParameters.get(consts_1.QueryKey.Error);
var errorDescription = uriParameters.get(consts_1.QueryKey.ErrorDescription);
const uriParameters = (0, exports.parseUriParameters)(callbackUri);
const error = uriParameters.get(consts_1.QueryKey.Error);
const errorDescription = uriParameters.get(consts_1.QueryKey.ErrorDescription);
if (error) {
throw new errors_1.LogtoError('callback_uri_verification.error_found', {
error: error,
errorDescription: errorDescription,
error,
errorDescription,
});
}
var stateFromCallbackUri = uriParameters.get(consts_1.QueryKey.State);
const stateFromCallbackUri = uriParameters.get(consts_1.QueryKey.State);
if (!stateFromCallbackUri) {

@@ -31,3 +31,3 @@ throw new errors_1.LogtoError('callback_uri_verification.missing_state');

}
var code = uriParameters.get(consts_1.QueryKey.Code);
const code = uriParameters.get(consts_1.QueryKey.Code);
if (!code) {

@@ -34,0 +34,0 @@ throw new errors_1.LogtoError('callback_uri_verification.missing_code');

"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -22,4 +7,4 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

exports.LogtoRequestError = exports.LogtoError = void 0;
var lodash_get_1 = __importDefault(require("lodash.get"));
var logtoErrorCodes = Object.freeze({
const lodash_get_1 = __importDefault(require("lodash.get"));
const logtoErrorCodes = Object.freeze({
id_token: {

@@ -40,6 +25,6 @@ invalid_iat: 'Invalid issued at time',

});
var getMessageByErrorCode = function (errorCode) {
const getMessageByErrorCode = (errorCode) => {
// TODO: linear issue LOG-1419
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
var message = (0, lodash_get_1.default)(logtoErrorCodes, errorCode);
const message = (0, lodash_get_1.default)(logtoErrorCodes, errorCode);
if (typeof message === 'string') {

@@ -50,22 +35,16 @@ return message;

};
var LogtoError = /** @class */ (function (_super) {
__extends(LogtoError, _super);
function LogtoError(code, data) {
var _this = _super.call(this, getMessageByErrorCode(code)) || this;
_this.code = code;
_this.data = data;
return _this;
class LogtoError extends Error {
constructor(code, data) {
super(getMessageByErrorCode(code));
this.code = code;
this.data = data;
}
return LogtoError;
}(Error));
}
exports.LogtoError = LogtoError;
var LogtoRequestError = /** @class */ (function (_super) {
__extends(LogtoRequestError, _super);
function LogtoRequestError(code, message) {
var _this = _super.call(this, message) || this;
_this.code = code;
return _this;
class LogtoRequestError extends Error {
constructor(code, message) {
super(message);
this.code = code;
}
return LogtoRequestError;
}(Error));
}
exports.LogtoRequestError = LogtoRequestError;
"use strict";
/** @link [Proof Key for Code Exchange by OAuth Public Clients](https://datatracker.ietf.org/doc/html/rfc7636) */
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateCodeChallenge = exports.generateCodeVerifier = exports.generateState = void 0;
var js_base64_1 = require("js-base64");
const js_base64_1 = require("js-base64");
/**
* @param length The length of the raw random data.
*/
var generateRandomString = function (length) {
if (length === void 0) { length = 64; }
return (0, js_base64_1.fromUint8Array)(crypto.getRandomValues(new Uint8Array(length)), true);
};
const generateRandomString = (length = 64) => (0, js_base64_1.fromUint8Array)(crypto.getRandomValues(new Uint8Array(length)), true);
/**
* Generates random string for state and encodes them in url safe base64
*/
var generateState = function () { return generateRandomString(); };
const generateState = () => generateRandomString();
exports.generateState = generateState;

@@ -59,3 +20,3 @@ /**

*/
var generateCodeVerifier = function () { return generateRandomString(); };
const generateCodeVerifier = () => generateRandomString();
exports.generateCodeVerifier = generateCodeVerifier;

@@ -68,16 +29,8 @@ /**

*/
var generateCodeChallenge = function (codeVerifier) { return __awaiter(void 0, void 0, void 0, function () {
var encodedCodeVerifier, codeChallenge, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
encodedCodeVerifier = new TextEncoder().encode(codeVerifier);
_a = Uint8Array.bind;
return [4 /*yield*/, crypto.subtle.digest('SHA-256', encodedCodeVerifier)];
case 1:
codeChallenge = new (_a.apply(Uint8Array, [void 0, _b.sent()]))();
return [2 /*return*/, (0, js_base64_1.fromUint8Array)(codeChallenge, true)];
}
});
}); };
const generateCodeChallenge = async (codeVerifier) => {
const encodedCodeVerifier = new TextEncoder().encode(codeVerifier);
// TODO: crypto related to linear issue LOG-1517
const codeChallenge = new Uint8Array(await crypto.subtle.digest('SHA-256', encodedCodeVerifier));
return (0, js_base64_1.fromUint8Array)(codeChallenge, true);
};
exports.generateCodeChallenge = generateCodeChallenge;

@@ -21,49 +21,13 @@ "use strict";

};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.decodeIdToken = exports.verifyIdToken = void 0;
var essentials_1 = require("@silverhand/essentials");
var jose_1 = require("jose");
var s = __importStar(require("superstruct"));
var errors_1 = require("./errors");
var issuedAtTimeTolerance = 60;
const essentials_1 = require("@silverhand/essentials");
const jose_1 = require("jose");
const s = __importStar(require("superstruct"));
const errors_1 = require("./errors");
const issuedAtTimeTolerance = 60;
/**
* @link [ID Token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)
*/
var IdTokenClaimsSchema = s.type({
const IdTokenClaimsSchema = s.type({
iss: s.string(),

@@ -76,25 +40,16 @@ sub: s.string(),

});
var verifyIdToken = function (idToken, clientId, issuer, jwks) { return __awaiter(void 0, void 0, void 0, function () {
var result;
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, (0, jose_1.jwtVerify)(idToken, jwks, { audience: clientId, issuer: issuer })];
case 1:
result = _b.sent();
if (Math.abs(((_a = result.payload.iat) !== null && _a !== void 0 ? _a : 0) - Date.now() / 1000) > issuedAtTimeTolerance) {
throw new errors_1.LogtoError('id_token.invalid_iat');
}
return [2 /*return*/];
}
});
}); };
const verifyIdToken = async (idToken, clientId, issuer, jwks) => {
const result = await (0, jose_1.jwtVerify)(idToken, jwks, { audience: clientId, issuer });
if (Math.abs((result.payload.iat ?? 0) - Date.now() / 1000) > issuedAtTimeTolerance) {
throw new errors_1.LogtoError('id_token.invalid_iat');
}
};
exports.verifyIdToken = verifyIdToken;
var decodeIdToken = function (token) {
var encodedPayload = token.split('.')[1];
const decodeIdToken = (token) => {
const { 1: encodedPayload } = token.split('.');
if (!encodedPayload) {
throw new errors_1.LogtoError('id_token.invalid_token');
}
var json = essentials_1.UrlSafeBase64.decode(encodedPayload);
var idTokenClaims = JSON.parse(json);
const json = essentials_1.UrlSafeBase64.decode(encodedPayload);
const idTokenClaims = JSON.parse(json);
s.assert(idTokenClaims, IdTokenClaimsSchema);

@@ -101,0 +56,0 @@ return idTokenClaims;

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createRequester = void 0;
var essentials_1 = require("@silverhand/essentials");
var errors_1 = require("./errors");
var createRequester = function (fetchFunction) {
const essentials_1 = require("@silverhand/essentials");
const errors_1 = require("./errors");
const createRequester = (fetchFunction) => {
if (!fetchFunction && (0, essentials_1.isNode)()) {
throw new errors_1.LogtoError('requester.not_provide_fetch');
}
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
return async (...args) => {
const response = await (fetchFunction ?? fetch)(...args);
if (!response.ok) {
// Expected request error from server
const { code, message } = await response.json();
throw new errors_1.LogtoRequestError(code, message);
}
return __awaiter(void 0, void 0, void 0, function () {
var response, _a, code, message;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, (fetchFunction !== null && fetchFunction !== void 0 ? fetchFunction : fetch).apply(void 0, args)];
case 1:
response = _b.sent();
if (!!response.ok) return [3 /*break*/, 3];
return [4 /*yield*/, response.json()];
case 2:
_a = _b.sent(), code = _a.code, message = _a.message;
throw new errors_1.LogtoRequestError(code, message);
case 3: return [2 /*return*/, response.json()];
}
});
});
return response.json();
};
};
exports.createRequester = createRequester;
"use strict";
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });

@@ -17,6 +8,6 @@ exports.withReservedScopes = void 0;

*/
var withReservedScopes = function (originalScopes) {
var uniqueScopes = new Set(__spreadArray(['openid', 'offline_access'], (originalScopes !== null && originalScopes !== void 0 ? originalScopes : []), true));
const withReservedScopes = (originalScopes) => {
const uniqueScopes = new Set(['openid', 'offline_access', ...(originalScopes ?? [])]);
return Array.from(uniqueScopes).join(' ');
};
exports.withReservedScopes = withReservedScopes;
{
"name": "@logto/js",
"version": "0.1.2-rc.0",
"version": "0.1.2-rc.1",
"main": "./lib/index.js",

@@ -10,3 +10,3 @@ "exports": "./lib/index.js",

],
"license": "MPL-2.0",
"license": "MIT",
"scripts": {

@@ -18,6 +18,4 @@ "dev:tsc": "tsc -p tsconfig.build.json -w --preserveWatchOutput",

"lint": "eslint --ext .ts src",
"package": "pnpm build && webpack",
"test": "jest",
"test:coverage": "jest --silent --env=jsdom && jest --silent --coverage",
"report": "WITH_REPORT=true pnpm package",
"prepack": "pnpm test && pnpm build"

@@ -41,3 +39,2 @@ },

"@types/node": "^17.0.19",
"@types/webpack": "^5.28.0",
"eslint": "^8.9.0",

@@ -53,6 +50,3 @@ "jest": "^27.5.1",

"type-fest": "^2.10.0",
"typescript": "^4.5.5",
"webpack": "^5.58.2",
"webpack-bundle-analyzer": "^4.5.0",
"webpack-cli": "^4.9.1"
"typescript": "^4.5.5"
},

@@ -66,3 +60,3 @@ "eslintConfig": {

},
"gitHead": "210b3e1d6f75d59f41b01e9731c8b3e76b87df0a"
"gitHead": "8d5713ffeff62c3d12954e7ce194406f260a9546"
}

Sorry, the diff of this file is not supported yet

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