Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@mybiogen/auth-openid

Package Overview
Dependencies
Maintainers
13
Versions
58
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mybiogen/auth-openid - npm Package Compare versions

Comparing version 1.5.2 to 1.5.3

35

lib/JanrainJS.js
"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 (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
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) {

@@ -6,8 +19,11 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

Object.defineProperty(exports, "__esModule", { value: true });
const OAuthClient_1 = __importDefault(require("./OAuthClient"));
class JanrainJS extends OAuthClient_1.default {
constructor(clientId, configUrl, redirectURI, logoutRedirectURI, scopes = ['openid', 'email', 'profile'], claims = []) {
super(clientId, configUrl, redirectURI, 'janrain_token', logoutRedirectURI, scopes, claims);
var OAuthClient_1 = __importDefault(require("./OAuthClient"));
var JanrainJS = (function (_super) {
__extends(JanrainJS, _super);
function JanrainJS(clientId, configUrl, redirectURI, logoutRedirectURI, scopes, claims) {
if (scopes === void 0) { scopes = ['openid', 'email', 'profile']; }
if (claims === void 0) { claims = []; }
return _super.call(this, clientId, configUrl, redirectURI, 'janrain_token', logoutRedirectURI, scopes, claims) || this;
}
loadUserInfo(userJSON, claims) {
JanrainJS.prototype.loadUserInfo = function (userJSON, claims) {
return {

@@ -21,7 +37,8 @@ user: {

},
claims,
claims: claims,
};
}
}
};
return JanrainJS;
}(OAuthClient_1.default));
exports.default = JanrainJS;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSmFucmFpbkpTLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0phbnJhaW5KUy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdFQUF5QztBQU96QyxNQUFxQixTQUFpQyxTQUFRLHFCQUFxQztJQUNqRyxZQUFZLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQixFQUFFLGlCQUF5QixFQUFFLFNBQW1CLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxTQUE4QixFQUFFO1FBQ2xMLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFHUyxZQUFZLENBQUMsUUFBYSxFQUFFLE1BQWU7UUFDbkQsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixFQUFFLEVBQUUsUUFBUSxDQUFDLEdBQUc7Z0JBQ2hCLGFBQWEsRUFBRSxRQUFRLENBQUMsY0FBYztnQkFDdEMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVU7Z0JBQ3pCLFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVzthQUMvQjtZQUNELE1BQU07U0FDUCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbEJELDRCQWtCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPcGVuSURDbGllbnQgZnJvbSAnLi9PQXV0aENsaWVudCc7XG5pbXBvcnQgeyBPQXV0aFVzZXJJbmZvIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIEphbnJhaW5Vc2VySW5mbyA9IE9BdXRoVXNlckluZm8gJiB7XG4gIGVtYWlsVmVyaWZpZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEphbnJhaW5KUzxDbGFpbXMgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgT3BlbklEQ2xpZW50PENsYWltcywgSmFucmFpblVzZXJJbmZvPiB7XG4gIGNvbnN0cnVjdG9yKGNsaWVudElkOiBzdHJpbmcsIGNvbmZpZ1VybDogc3RyaW5nLCByZWRpcmVjdFVSSTogc3RyaW5nLCBsb2dvdXRSZWRpcmVjdFVSSTogc3RyaW5nLCBzY29wZXM6IHN0cmluZ1tdID0gWydvcGVuaWQnLCAnZW1haWwnLCAncHJvZmlsZSddLCBjbGFpbXM6IEFycmF5PGtleW9mIENsYWltcz4gPSBbXSkge1xuICAgIHN1cGVyKGNsaWVudElkLCBjb25maWdVcmwsIHJlZGlyZWN0VVJJLCAnamFucmFpbl90b2tlbicsIGxvZ291dFJlZGlyZWN0VVJJLCBzY29wZXMsIGNsYWltcyk7XG4gIH1cblxuICAvLyBodHRwczovL2lkZW50aXR5ZG9jcy5ha2FtYWkuY29tL2hvbWUvamFucmFpbi1lbnRpdHktYXBpXG4gIHByb3RlY3RlZCBsb2FkVXNlckluZm8odXNlckpTT046IGFueSwgY2xhaW1zPzogQ2xhaW1zKTogeyB1c2VyOiBKYW5yYWluVXNlckluZm8sIGNsYWltcz86IENsYWltcyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgdXNlcjoge1xuICAgICAgICBpZDogdXNlckpTT04uc3ViLFxuICAgICAgICBlbWFpbFZlcmlmaWVkOiB1c2VySlNPTi5lbWFpbF92ZXJpZmllZCxcbiAgICAgICAgZW1haWw6IHVzZXJKU09OLmVtYWlsLFxuICAgICAgICBuYW1lOiB1c2VySlNPTi5naXZlbl9uYW1lLFxuICAgICAgICBsYXN0TmFtZTogdXNlckpTT04uZmFtaWx5X25hbWUsXG4gICAgICB9LFxuICAgICAgY2xhaW1zLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSmFucmFpbkpTLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0phbnJhaW5KUy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4REFBeUM7QUFPekM7SUFBOEQsNkJBQXFDO0lBQ2pHLG1CQUFZLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQixFQUFFLGlCQUF5QixFQUFFLE1BQWlELEVBQUUsTUFBZ0M7UUFBbkYsdUJBQUEsRUFBQSxVQUFvQixRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQztRQUFFLHVCQUFBLEVBQUEsV0FBZ0M7ZUFDbEwsa0JBQU0sUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDN0YsQ0FBQztJQUdTLGdDQUFZLEdBQXRCLFVBQXVCLFFBQWEsRUFBRSxNQUFlO1FBQ25ELE9BQU87WUFDTCxJQUFJLEVBQUU7Z0JBQ0osRUFBRSxFQUFFLFFBQVEsQ0FBQyxHQUFHO2dCQUNoQixhQUFhLEVBQUUsUUFBUSxDQUFDLGNBQWM7Z0JBQ3RDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxVQUFVO2dCQUN6QixRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7YUFDL0I7WUFDRCxNQUFNLFFBQUE7U0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNILGdCQUFDO0FBQUQsQ0FBQyxBQWxCRCxDQUE4RCxxQkFBWSxHQWtCekUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT3BlbklEQ2xpZW50IGZyb20gJy4vT0F1dGhDbGllbnQnO1xuaW1wb3J0IHsgT0F1dGhVc2VySW5mbyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBKYW5yYWluVXNlckluZm8gPSBPQXV0aFVzZXJJbmZvICYge1xuICBlbWFpbFZlcmlmaWVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYW5yYWluSlM8Q2xhaW1zIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIE9wZW5JRENsaWVudDxDbGFpbXMsIEphbnJhaW5Vc2VySW5mbz4ge1xuICBjb25zdHJ1Y3RvcihjbGllbnRJZDogc3RyaW5nLCBjb25maWdVcmw6IHN0cmluZywgcmVkaXJlY3RVUkk6IHN0cmluZywgbG9nb3V0UmVkaXJlY3RVUkk6IHN0cmluZywgc2NvcGVzOiBzdHJpbmdbXSA9IFsnb3BlbmlkJywgJ2VtYWlsJywgJ3Byb2ZpbGUnXSwgY2xhaW1zOiBBcnJheTxrZXlvZiBDbGFpbXM+ID0gW10pIHtcbiAgICBzdXBlcihjbGllbnRJZCwgY29uZmlnVXJsLCByZWRpcmVjdFVSSSwgJ2phbnJhaW5fdG9rZW4nLCBsb2dvdXRSZWRpcmVjdFVSSSwgc2NvcGVzLCBjbGFpbXMpO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9pZGVudGl0eWRvY3MuYWthbWFpLmNvbS9ob21lL2phbnJhaW4tZW50aXR5LWFwaVxuICBwcm90ZWN0ZWQgbG9hZFVzZXJJbmZvKHVzZXJKU09OOiBhbnksIGNsYWltcz86IENsYWltcyk6IHsgdXNlcjogSmFucmFpblVzZXJJbmZvLCBjbGFpbXM/OiBDbGFpbXMgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgaWQ6IHVzZXJKU09OLnN1YixcbiAgICAgICAgZW1haWxWZXJpZmllZDogdXNlckpTT04uZW1haWxfdmVyaWZpZWQsXG4gICAgICAgIGVtYWlsOiB1c2VySlNPTi5lbWFpbCxcbiAgICAgICAgbmFtZTogdXNlckpTT04uZ2l2ZW5fbmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IHVzZXJKU09OLmZhbWlseV9uYW1lLFxuICAgICAgfSxcbiAgICAgIGNsYWltcyxcbiAgICB9O1xuICB9XG59XG4iXX0=
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
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) {

@@ -6,143 +53,208 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

Object.defineProperty(exports, "__esModule", { value: true });
const query_string_1 = __importDefault(require("query-string"));
const uuid_1 = require("uuid");
const utils_1 = require("./utils");
class OpenIDClient {
constructor(clientId, configUrl, redirectURI, storageKey, logoutRedirectURI, scopes = ['openid'], claims = []) {
var query_string_1 = __importDefault(require("query-string"));
var uuid_1 = require("uuid");
var utils_1 = require("./utils");
var OpenIDClient = (function () {
function OpenIDClient(clientId, configUrl, redirectURI, storageKey, logoutRedirectURI, scopes, claims) {
var _this = this;
if (scopes === void 0) { scopes = ['openid']; }
if (claims === void 0) { claims = []; }
this.listeners = [];
this.keepRefreshingToken = () => {
this.keepRefreshingToken = function () {
var _a;
if (!((_a = this.token) === null || _a === void 0 ? void 0 : _a.refreshToken)) {
if (!((_a = _this.token) === null || _a === void 0 ? void 0 : _a.refreshToken)) {
console.warn("missing refresh token.");
return;
}
if (this.user && this.token && !this.refreshTokenInterval) {
const SAFETY_GAP_REFRESH_TOKEN = 60000;
this.refreshTokenInterval = window.setInterval(async () => {
try {
await this.refreshToken();
}
catch (error) {
clearInterval(this.refreshTokenInterval);
this.logout();
}
}, (this.token.expiresIn * 1000) - SAFETY_GAP_REFRESH_TOKEN);
if (_this.user && _this.token && !_this.refreshTokenInterval) {
var SAFETY_GAP_REFRESH_TOKEN = 60000;
_this.refreshTokenInterval = window.setInterval(function () { return __awaiter(_this, void 0, void 0, function () {
var error_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4, this.refreshToken()];
case 1:
_a.sent();
return [3, 3];
case 2:
error_1 = _a.sent();
clearInterval(this.refreshTokenInterval);
this.logout();
return [3, 3];
case 3: return [2];
}
});
}); }, (_this.token.expiresIn * 1000) - SAFETY_GAP_REFRESH_TOKEN);
}
};
this.watchAuth = async (cb) => {
this.listeners.push(cb);
await this.init();
if (this.token) {
await this.getUserInfo();
}
this.callListeners();
};
this.fetchConfig = async () => {
try {
const response = await fetch(this.configUrl);
return response.json();
}
catch (error) {
return undefined;
}
};
this.setConfig = async () => {
const config = await this.fetchConfig();
if (config) {
this.authorizationEndpoint = config.authorization_endpoint;
this.tokenEndpoint = config.token_endpoint;
this.userInfoEndpoint = config.userinfo_endpoint;
this.revocationEndpoint = config.revocation_endpoint;
this.endSessionEndpoint = config.end_session_endpoint;
}
};
this.getToken = async (code, originalCodeVerifier, currentState) => {
if (!this.tokenEndpoint) {
throw new Error('Not initialized. Token endpoint not present');
}
const body = {
grant_type: 'authorization_code',
code,
client_id: encodeURIComponent(this.clientId),
redirect_uri: this.redirectURI,
code_verifier: originalCodeVerifier,
};
const config = {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded',
}),
body: utils_1.encodeBody(body),
};
try {
const response = await fetch(this.tokenEndpoint, config);
if (!response.ok) {
return undefined;
this.watchAuth = function (cb) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.listeners.push(cb);
return [4, this.init()];
case 1:
_a.sent();
if (!this.token) return [3, 3];
return [4, this.getUserInfo()];
case 2:
_a.sent();
_a.label = 3;
case 3:
this.callListeners();
return [2];
}
const authToken = await response.json();
this.token = {
accessToken: authToken.access_token,
refreshToken: authToken.refresh_token,
expiresIn: authToken.expires_in,
tokenType: authToken.token_type,
scope: authToken.scope,
idToken: authToken.id_token,
};
utils_1.Storage.set(`${this.storageKey}.token`, this.token);
utils_1.Storage.remove(currentState);
window.history.replaceState({}, document.title, window.location.pathname);
return this.token;
}
catch (error) {
throw new Error('Error getting token');
}
};
this.refreshToken = async () => {
if (!this.token || !this.tokenEndpoint) {
throw new Error('Cannot refresh token without token or endpoint');
}
if (!this.token.refreshToken) {
throw new Error('Cannot refresh token without refresh token');
}
const body = {
grant_type: 'refresh_token',
refresh_token: this.token.refreshToken,
redirect_uri: this.redirectURI,
client_id: encodeURIComponent(this.clientId),
};
const config = {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded',
}),
body: utils_1.encodeBody(body),
};
const response = await fetch(this.tokenEndpoint, config);
if (!response.ok) {
throw new Error('Token not refreshed');
}
const token = await response.json();
this.token = {
accessToken: token.access_token,
refreshToken: token.refresh_token,
expiresIn: token.expires_in,
tokenType: token.token_type,
scope: token.scope,
idToken: token.id_token,
};
utils_1.Storage.set(`${this.storageKey}.token`, this.token);
return { accessToken: this.token.accessToken, expiresIn: this.token.expiresIn };
};
this.authenticate = (args) => {
const { forcedRedirectTo, isSignup, extraParams } = args;
const originalCodeVerifier = utils_1.generateCodeVerifier(96);
const codeVerifier = utils_1.generatePkceChallenge(originalCodeVerifier);
const { pathname, search } = window.location;
const { origin } = query_string_1.default.parse(search);
const redirectTo = forcedRedirectTo ? forcedRedirectTo : origin ? decodeURIComponent(origin + "") : pathname + search;
const state = uuid_1.v4();
let claimParam;
if (this.claims.length) {
const claimMap = this.claims.reduce((curr, claim) => ({ ...curr, [claim]: null }), {});
claimParam = this.claims.length
});
}); };
this.fetchConfig = function () { return __awaiter(_this, void 0, void 0, function () {
var response, error_2;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4, fetch(this.configUrl)];
case 1:
response = _a.sent();
return [2, response.json()];
case 2:
error_2 = _a.sent();
return [2, undefined];
case 3: return [2];
}
});
}); };
this.setConfig = function () { return __awaiter(_this, void 0, void 0, function () {
var config;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, this.fetchConfig()];
case 1:
config = _a.sent();
if (config) {
this.authorizationEndpoint = config.authorization_endpoint;
this.tokenEndpoint = config.token_endpoint;
this.userInfoEndpoint = config.userinfo_endpoint;
this.revocationEndpoint = config.revocation_endpoint;
this.endSessionEndpoint = config.end_session_endpoint;
}
return [2];
}
});
}); };
this.getToken = function (code, originalCodeVerifier, currentState) { return __awaiter(_this, void 0, void 0, function () {
var body, config, response, authToken, error_3;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.tokenEndpoint) {
throw new Error('Not initialized. Token endpoint not present');
}
body = {
grant_type: 'authorization_code',
code: code,
client_id: encodeURIComponent(this.clientId),
redirect_uri: this.redirectURI,
code_verifier: originalCodeVerifier,
};
config = {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded',
}),
body: utils_1.encodeBody(body),
};
_a.label = 1;
case 1:
_a.trys.push([1, 4, , 5]);
return [4, fetch(this.tokenEndpoint, config)];
case 2:
response = _a.sent();
if (!response.ok) {
return [2, undefined];
}
return [4, response.json()];
case 3:
authToken = _a.sent();
this.token = {
accessToken: authToken.access_token,
refreshToken: authToken.refresh_token,
expiresIn: authToken.expires_in,
tokenType: authToken.token_type,
scope: authToken.scope,
idToken: authToken.id_token,
};
utils_1.Storage.set(this.storageKey + ".token", this.token);
utils_1.Storage.remove(currentState);
window.history.replaceState({}, document.title, window.location.pathname);
return [2, this.token];
case 4:
error_3 = _a.sent();
throw new Error('Error getting token');
case 5: return [2];
}
});
}); };
this.refreshToken = function () { return __awaiter(_this, void 0, void 0, function () {
var body, config, response, token;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.token || !this.tokenEndpoint) {
throw new Error('Cannot refresh token without token or endpoint');
}
if (!this.token.refreshToken) {
throw new Error('Cannot refresh token without refresh token');
}
body = {
grant_type: 'refresh_token',
refresh_token: this.token.refreshToken,
redirect_uri: this.redirectURI,
client_id: encodeURIComponent(this.clientId),
};
config = {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded',
}),
body: utils_1.encodeBody(body),
};
return [4, fetch(this.tokenEndpoint, config)];
case 1:
response = _a.sent();
if (!response.ok) {
throw new Error('Token not refreshed');
}
return [4, response.json()];
case 2:
token = _a.sent();
this.token = {
accessToken: token.access_token,
refreshToken: token.refresh_token,
expiresIn: token.expires_in,
tokenType: token.token_type,
scope: token.scope,
idToken: token.id_token,
};
utils_1.Storage.set(this.storageKey + ".token", this.token);
return [2, { accessToken: this.token.accessToken, expiresIn: this.token.expiresIn }];
}
});
}); };
this.authenticate = function (args) {
var forcedRedirectTo = args.forcedRedirectTo, isSignup = args.isSignup, extraParams = args.extraParams;
var originalCodeVerifier = utils_1.generateCodeVerifier(96);
var codeVerifier = utils_1.generatePkceChallenge(originalCodeVerifier);
var _a = window.location, pathname = _a.pathname, search = _a.search;
var origin = query_string_1.default.parse(search).origin;
var redirectTo = forcedRedirectTo ? forcedRedirectTo : origin ? decodeURIComponent(origin + "") : pathname + search;
var state = uuid_1.v4();
var claimParam;
if (_this.claims.length) {
var claimMap = _this.claims.reduce(function (curr, claim) {
var _a;
return (__assign(__assign({}, curr), (_a = {}, _a[claim] = null, _a)));
}, {});
claimParam = _this.claims.length
? {

@@ -154,76 +266,84 @@ userinfo: claimMap,

}
const params = {
client_id: encodeURIComponent(this.clientId),
redirect_uri: this.redirectURI,
scope: this.scopes.join(' '),
response_type: 'code',
response_mode: 'query',
state: encodeURIComponent(state),
code_challenge: encodeURI(codeVerifier),
code_challenge_method: 'S256',
claims: claimParam && JSON.stringify(claimParam),
...(extraParams || {}),
...(isSignup && {
prompt: 'create'
}),
};
var params = __assign(__assign({ client_id: encodeURIComponent(_this.clientId), redirect_uri: _this.redirectURI, scope: _this.scopes.join(' '), response_type: 'code', response_mode: 'query', state: encodeURIComponent(state), code_challenge: encodeURI(codeVerifier), code_challenge_method: 'S256', claims: claimParam && JSON.stringify(claimParam) }, (extraParams || {})), (isSignup && {
prompt: 'create'
}));
utils_1.Storage.set(state, {
codeVerifier,
originalCodeVerifier,
redirectTo,
codeVerifier: codeVerifier,
originalCodeVerifier: originalCodeVerifier,
redirectTo: redirectTo,
});
const loginQuery = query_string_1.default.stringify(params);
const url = `${this.authorizationEndpoint}?${loginQuery}`;
window.location.replace(url);
var loginQuery = query_string_1.default.stringify(params);
if (_this.authorizationEndpoint) {
var url = _this.authorizationEndpoint + "?" + loginQuery;
window.location.replace(url);
}
};
this.login = (forcedRedirectTo, extraParams) => {
this.authenticate({ forcedRedirectTo, extraParams });
this.login = function (forcedRedirectTo, extraParams) {
_this.authenticate({ forcedRedirectTo: forcedRedirectTo, extraParams: extraParams });
};
this.signup = (forcedRedirectTo, extraParams) => {
this.authenticate({ forcedRedirectTo, extraParams, isSignup: true });
this.signup = function (forcedRedirectTo, extraParams) {
_this.authenticate({ forcedRedirectTo: forcedRedirectTo, extraParams: extraParams, isSignup: true });
};
this.getUserInfo = async () => {
if (!this.userInfoEndpoint || !this.token) {
return undefined;
}
try {
const response = await fetch(this.userInfoEndpoint, {
headers: new Headers({
Authorization: `Bearer ${this.token.accessToken}`,
}),
});
const userInfo = await response.json();
const claims = this.claims.length
? this.claims.reduce((curr, claim) => ({
...curr,
[claim]: userInfo[claim],
}), {})
: undefined;
this.user = this.loadUserInfo(userInfo, claims);
return this.user;
}
catch (error) {
console.warn('Error getting user info, logging out...');
console.warn(error);
await this.logout();
return undefined;
}
};
this.logout = async (endSessionURI) => {
this.getUserInfo = function () { return __awaiter(_this, void 0, void 0, function () {
var response, userInfo_1, claims, error_4;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.userInfoEndpoint || !this.token) {
return [2, undefined];
}
_a.label = 1;
case 1:
_a.trys.push([1, 4, , 6]);
return [4, fetch(this.userInfoEndpoint, {
headers: new Headers({
Authorization: "Bearer " + this.token.accessToken,
}),
})];
case 2:
response = _a.sent();
return [4, response.json()];
case 3:
userInfo_1 = _a.sent();
claims = this.claims.length
? this.claims.reduce(function (curr, claim) {
var _a;
return (__assign(__assign({}, curr), (_a = {}, _a[claim] = userInfo_1[claim], _a)));
}, {})
: undefined;
this.user = this.loadUserInfo(userInfo_1, claims);
return [2, this.user];
case 4:
error_4 = _a.sent();
console.warn('Error getting user info, logging out...');
console.warn(error_4);
return [4, this.logout()];
case 5:
_a.sent();
return [2, undefined];
case 6: return [2];
}
});
}); };
this.logout = function (endSessionURI) { return __awaiter(_this, void 0, void 0, function () {
var params, url;
var _a;
utils_1.Storage.remove(`${this.storageKey}.token`);
if (endSessionURI) {
window.location.replace(endSessionURI);
}
else {
const params = {
'id_token_hint': (_a = this.token) === null || _a === void 0 ? void 0 : _a.idToken,
'post_logout_redirect_uri': this.logoutRedirectURI,
};
if (this.endSessionEndpoint) {
const url = `${this.endSessionEndpoint}?${query_string_1.default.stringify(params)}`;
window.location.replace(url);
return __generator(this, function (_b) {
utils_1.Storage.remove(this.storageKey + ".token");
if (endSessionURI) {
window.location.replace(endSessionURI);
}
}
};
else {
params = {
'id_token_hint': (_a = this.token) === null || _a === void 0 ? void 0 : _a.idToken,
'post_logout_redirect_uri': this.logoutRedirectURI,
};
if (this.endSessionEndpoint) {
url = this.endSessionEndpoint + "?" + query_string_1.default.stringify(params);
window.location.replace(url);
}
}
return [2];
});
}); };
if (!clientId) {

@@ -254,59 +374,98 @@ throw new Error('clientId is not provided.');

this.claims = claims;
this.token = typeof window !== 'undefined' ? utils_1.Storage.get(`${storageKey}.token`) : null;
this.token = typeof window !== 'undefined' ? utils_1.Storage.get(storageKey + ".token") : null;
}
async init() {
if (this.hasBeenInitialized) {
return;
}
const [callbackState, storageOauth] = await Promise.all([
utils_1.checkCallback(window.location.href),
utils_1.Storage.get(`${this.storageKey}.token`),
]);
await this.setConfig();
if (!callbackState && !storageOauth) {
return undefined;
}
this.hasBeenInitialized = true;
if (callbackState) {
return await this.getTokenOnInit(callbackState);
}
if (storageOauth && !storageOauth.logout) {
return await this.refreshTokenOnInit(storageOauth);
}
return undefined;
}
async getTokenOnInit(callbackState) {
const { code, pkceCodeVerifier, currentState, redirectTo, newUrl } = callbackState;
this.token = await this.getToken(code, pkceCodeVerifier, currentState);
this.keepRefreshingToken();
window.history.replaceState(window.history.state, document.title, newUrl);
this.comesFromLogin = true;
this.redirectTo = redirectTo;
return this.token;
}
async refreshTokenOnInit(storageOauth) {
OpenIDClient.prototype.init = function () {
return __awaiter(this, void 0, void 0, function () {
var _a, callbackState, storageOauth;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
if (this.hasBeenInitialized) {
return [2];
}
return [4, Promise.all([
utils_1.checkCallback(window.location.href),
utils_1.Storage.get(this.storageKey + ".token"),
])];
case 1:
_a = _b.sent(), callbackState = _a[0], storageOauth = _a[1];
return [4, this.setConfig()];
case 2:
_b.sent();
if (!callbackState && !storageOauth) {
return [2, undefined];
}
this.hasBeenInitialized = true;
if (!callbackState) return [3, 4];
return [4, this.getTokenOnInit(callbackState)];
case 3: return [2, _b.sent()];
case 4:
if (!(storageOauth && !storageOauth.logout)) return [3, 6];
return [4, this.refreshTokenOnInit(storageOauth)];
case 5: return [2, _b.sent()];
case 6: return [2, undefined];
}
});
});
};
OpenIDClient.prototype.getTokenOnInit = function (callbackState) {
return __awaiter(this, void 0, void 0, function () {
var code, pkceCodeVerifier, currentState, redirectTo, newUrl, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
code = callbackState.code, pkceCodeVerifier = callbackState.pkceCodeVerifier, currentState = callbackState.currentState, redirectTo = callbackState.redirectTo, newUrl = callbackState.newUrl;
_a = this;
return [4, this.getToken(code, pkceCodeVerifier, currentState)];
case 1:
_a.token = _b.sent();
this.keepRefreshingToken();
window.history.replaceState(window.history.state, document.title, newUrl);
this.comesFromLogin = true;
this.redirectTo = redirectTo;
return [2, this.token];
}
});
});
};
OpenIDClient.prototype.refreshTokenOnInit = function (storageOauth) {
var _a;
this.token = storageOauth;
this.comesFromLogin = false;
if (!((_a = this.token) === null || _a === void 0 ? void 0 : _a.refreshToken)) {
console.warn("missing refresh token.");
return this.token;
}
try {
await this.refreshToken();
this.keepRefreshingToken();
}
catch (err) {
this.token = undefined;
utils_1.Storage.remove(`${this.storageKey}.token`);
}
return this.token;
}
callListeners() {
this.listeners.forEach((cb) => {
cb(this.token && this.user, this.comesFromLogin, this.redirectTo);
return __awaiter(this, void 0, void 0, function () {
var err_1;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
this.token = storageOauth;
this.comesFromLogin = false;
if (!((_a = this.token) === null || _a === void 0 ? void 0 : _a.refreshToken)) {
console.warn("missing refresh token.");
return [2, this.token];
}
_b.label = 1;
case 1:
_b.trys.push([1, 3, , 4]);
return [4, this.refreshToken()];
case 2:
_b.sent();
this.keepRefreshingToken();
return [3, 4];
case 3:
err_1 = _b.sent();
this.token = undefined;
utils_1.Storage.remove(this.storageKey + ".token");
return [3, 4];
case 4: return [2, this.token];
}
});
});
}
}
};
OpenIDClient.prototype.callListeners = function () {
var _this = this;
this.listeners.forEach(function (cb) {
cb(_this.token && _this.user, _this.comesFromLogin, _this.redirectTo);
});
};
return OpenIDClient;
}());
exports.default = OpenIDClient;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT0F1dGhDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvT0F1dGhDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBdUM7QUFDdkMsK0JBQW9DO0FBQ3BDLG1DQUEwRztBQVkxRyxNQUE4QixZQUFZO0lBdUN4QyxZQUFZLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQixFQUFFLFVBQWtCLEVBQUUsaUJBQXlCLEVBQUUsU0FBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUE4QixFQUFFO1FBVnBMLGNBQVMsR0FBK0MsRUFBRSxDQUFDO1FBNEhuRCx3QkFBbUIsR0FBRyxHQUFTLEVBQUU7O1lBQ3ZDLElBQUksUUFBQyxJQUFJLENBQUMsS0FBSywwQ0FBRSxZQUFZLENBQUEsRUFBRTtnQkFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO2dCQUN0QyxPQUFPO2FBQ1I7WUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDekQsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUN4RCxJQUFJO3dCQUNGLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO3FCQUMzQjtvQkFBQyxPQUFPLEtBQUssRUFBRTt3QkFDZCxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7d0JBQ3pDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztxQkFDZjtnQkFDSCxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO2FBQzlEO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsY0FBUyxHQUFHLEtB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U0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQzVCLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBcVFGO0FBNVpELCtCQTRaQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBxdWVyeVN0cmluZyBmcm9tICdxdWVyeS1zdHJpbmcnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBlbmNvZGVCb2R5LCBnZW5lcmF0ZUNvZGVWZXJpZmllciwgZ2VuZXJhdGVQa2NlQ2hhbGxlbmdlLCBTdG9yYWdlLCBjaGVja0NhbGxiYWNrIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1xuICBPQXV0aFVzZXJJbmZvLFxuICBUb2tlbixcbiAgV2F0Y2hBdXRoQ2FsbGJhY2ssXG4gIEluaXQsXG4gIENvbmZpZ0VuZHBvaW50LFxuICBBdXRoZW50aWNhdGVBcmdzLFxuICBDbGFpbVBhcmFtLFxuICBBdXRoZW50aWNhdGVFeHRyYVBhcmFtcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIE9wZW5JRENsaWVudDxDbGFpbXMgZXh0ZW5kcyB7fSA9IHt9LCBVc2VySW5mbyBleHRlbmRzIE9BdXRoVXNlckluZm8gPSBPQXV0aFVzZXJJbmZvLCBVc2VyRGF0YSBleHRlbmRzIHsgdXNlcjogVXNlckluZm8sIGNsYWltcz86IENsYWltcyB9ID0geyB1c2VyOiBVc2VySW5mbywgY2xhaW1zPzogQ2xhaW1zIH0+IHtcbiAgY2xpZW50SWQ6IHN0cmluZztcblxuICBjb25maWdVcmw6IHN0cmluZztcblxuICBzY29wZXM6IHN0cmluZ1tdO1xuXG4gIGNsYWltczogQXJyYXk8a2V5b2YgQ2xhaW1zPjtcblxuICByZWRpcmVjdFVSSTogc3RyaW5nO1xuXG4gIGxvZ291dFJlZGlyZWN0VVJJOiBzdHJpbmc7XG5cbiAgYXV0aG9yaXphdGlvbkVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIHRva2VuRW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgdXNlckluZm9FbmRwb2ludD86IHN0cmluZztcblxuICByZXZvY2F0aW9uRW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgZW5kU2Vzc2lvbkVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIHRva2VuPzogVG9rZW47XG5cbiAgdXNlcj86IFVzZXJEYXRhO1xuXG4gIHN0b3JhZ2VLZXk6IHN0cmluZztcblxuICBsaXN0ZW5lcnM6IEFycmF5PFdhdGNoQXV0aENhbGxiYWNrPFVzZXJJbmZvLCBDbGFpbXM+PiA9IFtdO1xuXG4gIHJlZnJlc2hUb2tlbkludGVydmFsPzogbnVtYmVyO1xuXG4gIGNvbWVzRnJvbUxvZ2luOiBib29sZWFuO1xuXG4gIHJlZGlyZWN0VG8/OiBzdHJpbmc7XG5cbiAgaGFzQmVlbkluaXRpYWxpemVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudElkOiBzdHJpbmcsIGNvbmZpZ1VybDogc3RyaW5nLCByZWRpcmVjdFVSSTogc3RyaW5nLCBzdG9yYWdlS2V5OiBzdHJpbmcsIGxvZ291dFJlZGlyZWN0VVJJOiBzdHJpbmcsIHNjb3Blczogc3RyaW5nW10gPSBbJ29wZW5pZCddLCBjbGFpbXM6IEFycmF5PGtleW9mIENsYWltcz4gPSBbXSkge1xuICAgIGlmICghY2xpZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgaXMgbm90IHByb3ZpZGVkLicpXG4gICAgfVxuICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZDtcblxuICAgIGlmICghY29uZmlnVXJsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbmZpZ1VybCBpcyBub3QgcHJvdmlkZWQuJylcbiAgICB9XG4gICAgdGhpcy5jb25maWdVcmwgPSBjb25maWdVcmw7XG5cbiAgICBpZiAoIXJlZGlyZWN0VVJJKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZGlyZWN0VXJpIGlzIG5vdCBwcm92aWRlZC4nKVxuICAgIH1cbiAgICB0aGlzLnJlZGlyZWN0VVJJID0gcmVkaXJlY3RVUkk7XG5cbiAgICBpZiAoIWxvZ291dFJlZGlyZWN0VVJJKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xvZ291dFJlZGlyZWN0VVJJIGlzIG5vdCBwcm92aWRlZC4nKVxuICAgIH1cbiAgICB0aGlzLmxvZ291dFJlZGlyZWN0VVJJID0gbG9nb3V0UmVkaXJlY3RVUkk7XG5cbiAgICBpZiAoIXN0b3JhZ2VLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RvcmFnZUtleSBpcyBub3QgcHJvdmlkZWQuJylcbiAgICB9XG4gICAgdGhpcy5zdG9yYWdlS2V5ID0gc3RvcmFnZUtleTtcblxuICAgIHRoaXMuY29tZXNGcm9tTG9naW4gPSBmYWxzZTtcbiAgICB0aGlzLnJlZGlyZWN0VG8gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oYXNCZWVuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnNjb3BlcyA9IHNjb3BlcztcbiAgICB0aGlzLmNsYWltcyA9IGNsYWltcztcbiAgICB0aGlzLnRva2VuID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBTdG9yYWdlLmdldChgJHtzdG9yYWdlS2V5fS50b2tlbmApIDogbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGluaXQoKTogUHJvbWlzZTxJbml0IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMuaGFzQmVlbkluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBbY2FsbGJhY2tTdGF0ZSwgc3RvcmFnZU9hdXRoXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGNoZWNrQ2FsbGJhY2sod2luZG93LmxvY2F0aW9uLmhyZWYpLFxuICAgICAgU3RvcmFnZS5nZXQoYCR7dGhpcy5zdG9yYWdlS2V5fS50b2tlbmApLFxuICAgIF0pO1xuXG4gICAgLy8gV2FpdCB1bnRpbCBjb25maWd1cmF0aW9uIGhhcyBmaW5pc2hlZC5cbiAgICBhd2FpdCB0aGlzLnNldENvbmZpZygpO1xuXG4gICAgLy8gUmV0dXJuIGVhcmx5XG4gICAgaWYgKCFjYWxsYmFja1N0YXRlICYmICFzdG9yYWdlT2F1dGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5oYXNCZWVuSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgaWYgKGNhbGxiYWNrU3RhdGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFRva2VuT25Jbml0KGNhbGxiYWNrU3RhdGUpXG4gICAgfVxuXG4gICAgaWYgKHN0b3JhZ2VPYXV0aCAmJiAhc3RvcmFnZU9hdXRoLmxvZ291dCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVmcmVzaFRva2VuT25Jbml0KHN0b3JhZ2VPYXV0aClcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRUb2tlbk9uSW5pdChjYWxsYmFja1N0YXRlKTogUHJvbWlzZTxUb2tlbiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvZGUsIFxuICAgICAgcGtjZUNvZGVWZXJpZmllciwgXG4gICAgICBjdXJyZW50U3RhdGUsIFxuICAgICAgcmVkaXJlY3RUbyxcbiAgICAgIG5ld1VybFxuICAgIH0gPSBjYWxsYmFja1N0YXRlO1xuXG4gICAgdGhpcy50b2tlbiA9IGF3YWl0IHRoaXMuZ2V0VG9rZW4oY29kZSwgcGtjZUNvZGVWZXJpZmllciwgY3VycmVudFN0YXRlKTtcbiAgICB0aGlzLmtlZXBSZWZyZXNoaW5nVG9rZW4oKTtcblxuICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwgZG9jdW1lbnQudGl0bGUsIG5ld1VybCk7XG5cbiAgICB0aGlzLmNvbWVzRnJvbUxvZ2luID0gdHJ1ZTtcbiAgICB0aGlzLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xuXG4gICAgcmV0dXJuIHRoaXMudG9rZW5cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaFRva2VuT25Jbml0KHN0b3JhZ2VPYXV0aDogYW55KTogUHJvbWlzZTxUb2tlbiB8IHVuZGVmaW5lZD4ge1xuICAgIHRoaXMudG9rZW4gPSBzdG9yYWdlT2F1dGg7XG4gICAgdGhpcy5jb21lc0Zyb21Mb2dpbiA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLnRva2VuPy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgIC8vIFRPRE8gQGFsbCBoYW5kbGUgY2FzZSB3aXRob3V0IHJlZnJlc2ggdG9rZW5cbiAgICAgIC8vIFRoaXMgc2hvdWxkIHRlc3QgaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgc3RpbGwgdmFsaWRcbiAgICAgIC8vIG9yIHdlIHNob3VsZCBjaGFuZ2UgdGhlIEFQSSBjYWxscyB0byBnZXQgdGhlIHJlZnJlc2ggdG9rZW4uXG4gICAgICBjb25zb2xlLndhcm4oXCJtaXNzaW5nIHJlZnJlc2ggdG9rZW4uXCIpXG4gICAgICByZXR1cm4gdGhpcy50b2tlblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbigpO1xuICAgICAgdGhpcy5rZWVwUmVmcmVzaGluZ1Rva2VuKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnRva2VuID0gdW5kZWZpbmVkO1xuICAgICAgU3RvcmFnZS5yZW1vdmUoYCR7dGhpcy5zdG9yYWdlS2V5fS50b2tlbmApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRva2VuXG4gIH1cblxuICBwcml2YXRlIGNhbGxMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgoY2IpID0+IHtcbiAgICAgIGNiKHRoaXMudG9rZW4gJiYgdGhpcy51c2VyLCB0aGlzLmNvbWVzRnJvbUxvZ2luLCB0aGlzLnJlZGlyZWN0VG8pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGtlZXBSZWZyZXNoaW5nVG9rZW4gPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLnRva2VuPy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgIGNvbnNvbGUud2FybihcIm1pc3NpbmcgcmVmcmVzaCB0b2tlbi5cIilcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51c2VyICYmIHRoaXMudG9rZW4gJiYgIXRoaXMucmVmcmVzaFRva2VuSW50ZXJ2YWwpIHtcbiAgICAgIGNvbnN0IFNBRkVUWV9HQVBfUkVGUkVTSF9UT0tFTiA9IDYwMDAwOyAvLyAxIG1pblxuICAgICAgdGhpcy5yZWZyZXNoVG9rZW5JbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMucmVmcmVzaFRva2VuSW50ZXJ2YWwpO1xuICAgICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sICh0aGlzLnRva2VuLmV4cGlyZXNJbiAqIDEwMDApIC0gU0FGRVRZX0dBUF9SRUZSRVNIX1RPS0VOKTtcbiAgICB9XG4gIH07XG5cbiAgd2F0Y2hBdXRoID0gYXN5bmMgKGNiOiBXYXRjaEF1dGhDYWxsYmFjazxVc2VySW5mbywgQ2xhaW1zPik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHRoaXMubGlzdGVuZXJzLnB1c2goY2IpO1xuXG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG5cbiAgICBpZiAodGhpcy50b2tlbikge1xuICAgICAgYXdhaXQgdGhpcy5nZXRVc2VySW5mbygpO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbExpc3RlbmVycygpO1xuICB9O1xuXG4gIHByaXZhdGUgZmV0Y2hDb25maWcgPSBhc3luYyAoKTogUHJvbWlzZTxDb25maWdFbmRwb2ludCB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMuY29uZmlnVXJsKTtcbiAgICAgIC8vIFRPRE86IEVycm9yLCBmZXRjaCBvbmx5IHRocm93cyBvbiBjb25uZWN0aW9uIGVycm9yLCBlbHNlIHdlIGdldCAhZmV0Y2gub2tcbiAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgc2V0Q29uZmlnID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuZmV0Y2hDb25maWcoKTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmF1dGhvcml6YXRpb25FbmRwb2ludCA9IGNvbmZpZy5hdXRob3JpemF0aW9uX2VuZHBvaW50O1xuICAgICAgdGhpcy50b2tlbkVuZHBvaW50ID0gY29uZmlnLnRva2VuX2VuZHBvaW50O1xuICAgICAgdGhpcy51c2VySW5mb0VuZHBvaW50ID0gY29uZmlnLnVzZXJpbmZvX2VuZHBvaW50O1xuICAgICAgdGhpcy5yZXZvY2F0aW9uRW5kcG9pbnQgPSBjb25maWcucmV2b2NhdGlvbl9lbmRwb2ludDtcbiAgICAgIHRoaXMuZW5kU2Vzc2lvbkVuZHBvaW50ID0gY29uZmlnLmVuZF9zZXNzaW9uX2VuZHBvaW50O1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGdldFRva2VuID0gYXN5bmMgKGNvZGU6IHN0cmluZywgb3JpZ2luYWxDb2RlVmVyaWZpZXI6IHN0cmluZywgY3VycmVudFN0YXRlOiBzdHJpbmcpOiBQcm9taXNlPFRva2VuIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgaWYgKCF0aGlzLnRva2VuRW5kcG9pbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGluaXRpYWxpemVkLiBUb2tlbiBlbmRwb2ludCBub3QgcHJlc2VudCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICBncmFudF90eXBlOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcbiAgICAgIGNvZGUsXG4gICAgICBjbGllbnRfaWQ6IGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmNsaWVudElkKSxcbiAgICAgIHJlZGlyZWN0X3VyaTogdGhpcy5yZWRpcmVjdFVSSSxcbiAgICAgIGNvZGVfdmVyaWZpZXI6IG9yaWdpbmFsQ29kZVZlcmlmaWVyLFxuICAgIH07XG5cbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgfSksXG4gICAgICBib2R5OiBlbmNvZGVCb2R5KGJvZHkpLFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLnRva2VuRW5kcG9pbnQsIGNvbmZpZyk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgLy8gVE9ETzogRXJyb3IsIGRlYWwgd2l0aCBmYWlsdXJlIGNhc2VzXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGF1dGhUb2tlbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgdGhpcy50b2tlbiA9IHtcbiAgICAgICAgYWNjZXNzVG9rZW46IGF1dGhUb2tlbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgIHJlZnJlc2hUb2tlbjogYXV0aFRva2VuLnJlZnJlc2hfdG9rZW4sXG4gICAgICAgIGV4cGlyZXNJbjogYXV0aFRva2VuLmV4cGlyZXNfaW4sXG4gICAgICAgIHRva2VuVHlwZTogYXV0aFRva2VuLnRva2VuX3R5cGUsXG4gICAgICAgIHNjb3BlOiBhdXRoVG9rZW4uc2NvcGUsXG4gICAgICAgIGlkVG9rZW46IGF1dGhUb2tlbi5pZF90b2tlbixcbiAgICAgIH07XG5cbiAgICAgIFN0b3JhZ2Uuc2V0KGAke3RoaXMuc3RvcmFnZUtleX0udG9rZW5gLCB0aGlzLnRva2VuKTtcbiAgICAgIC8vIGNsZWFuIHVwIGxvY2FsIHN0b3JhZ2UgZnJvbSBQS0NFIGRldGFpbHNcbiAgICAgIFN0b3JhZ2UucmVtb3ZlKGN1cnJlbnRTdGF0ZSk7XG4gICAgICAvLyBjbGVhbiB1cCBxdWVyeSBwYXJhbXMgZnJvbSBPQXV0aCByZWRpcmVjdGlvblxuICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKTtcblxuICAgICAgcmV0dXJuIHRoaXMudG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgZ2V0dGluZyB0b2tlbicpO1xuICAgIH1cbiAgfTtcblxuICByZWZyZXNoVG9rZW4gPSBhc3luYyAoKTogUHJvbWlzZTxJbml0IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgaWYgKCF0aGlzLnRva2VuIHx8ICF0aGlzLnRva2VuRW5kcG9pbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlZnJlc2ggdG9rZW4gd2l0aG91dCB0b2tlbiBvciBlbmRwb2ludCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50b2tlbi5yZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlZnJlc2ggdG9rZW4gd2l0aG91dCByZWZyZXNoIHRva2VuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgIHJlZnJlc2hfdG9rZW46IHRoaXMudG9rZW4ucmVmcmVzaFRva2VuLFxuICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0VVJJLFxuICAgICAgY2xpZW50X2lkOiBlbmNvZGVVUklDb21wb25lbnQodGhpcy5jbGllbnRJZCksXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoe1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICB9KSxcbiAgICAgIGJvZHk6IGVuY29kZUJvZHkoYm9keSksXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy50b2tlbkVuZHBvaW50LCBjb25maWcpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBub3QgcmVmcmVzaGVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICB0aGlzLnRva2VuID0ge1xuICAgICAgYWNjZXNzVG9rZW46IHRva2VuLmFjY2Vzc190b2tlbixcbiAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW4ucmVmcmVzaF90b2tlbixcbiAgICAgIGV4cGlyZXNJbjogdG9rZW4uZXhwaXJlc19pbixcbiAgICAgIHRva2VuVHlwZTogdG9rZW4udG9rZW5fdHlwZSxcbiAgICAgIHNjb3BlOiB0b2tlbi5zY29wZSxcbiAgICAgIGlkVG9rZW46IHRva2VuLmlkX3Rva2VuLFxuICAgIH07XG5cbiAgICBTdG9yYWdlLnNldChgJHt0aGlzLnN0b3JhZ2VLZXl9LnRva2VuYCwgdGhpcy50b2tlbik7XG5cbiAgICAvLyBUT0RPIEBhbGwgY2FsbCBsaXN0ZW5lcnMgaWYgc29tZXRoaW5nIGNoYW5nZWRcblxuICAgIC8vICg/KSBXZSBkb24ndCByZXR1cm4gdGhlIHRva2VuIGRpcmVjdGx5XG4gICAgcmV0dXJuIHsgYWNjZXNzVG9rZW46IHRoaXMudG9rZW4uYWNjZXNzVG9rZW4sIGV4cGlyZXNJbjogdGhpcy50b2tlbi5leHBpcmVzSW4gfTtcbiAgfTtcblxuICBwcml2YXRlIGF1dGhlbnRpY2F0ZSA9IChhcmdzOiBBdXRoZW50aWNhdGVBcmdzKTogdm9pZCA9PiB7XG4gICAgY29uc3QgeyBmb3JjZWRSZWRpcmVjdFRvLCBpc1NpZ251cCwgZXh0cmFQYXJhbXMgfSA9IGFyZ3M7XG4gICAgY29uc3Qgb3JpZ2luYWxDb2RlVmVyaWZpZXIgPSBnZW5lcmF0ZUNvZGVWZXJpZmllcig5Nik7XG4gICAgY29uc3QgY29kZVZlcmlmaWVyID0gZ2VuZXJhdGVQa2NlQ2hhbGxlbmdlKG9yaWdpbmFsQ29kZVZlcmlmaWVyKTtcbiAgICBjb25zdCB7IHBhdGhuYW1lLCBzZWFyY2ggfSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICBjb25zdCB7IG9yaWdpbiB9ID0gcXVlcnlTdHJpbmcucGFyc2Uoc2VhcmNoKTtcbiAgICBjb25zdCByZWRpcmVjdFRvID0gZm9yY2VkUmVkaXJlY3RUbyA/IGZvcmNlZFJlZGlyZWN0VG8gOiBvcmlnaW4gPyBkZWNvZGVVUklDb21wb25lbnQob3JpZ2luICsgXCJcIikgOiBwYXRobmFtZSArIHNlYXJjaDtcbiAgICBjb25zdCBzdGF0ZSA9IHV1aWR2NCgpO1xuICAgIGxldCBjbGFpbVBhcmFtO1xuICBcbiAgICBpZiAodGhpcy5jbGFpbXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjbGFpbU1hcCA9IHRoaXMuY2xhaW1zLnJlZHVjZTxDbGFpbVBhcmFtPigoY3VyciwgY2xhaW0pID0+ICh7IC4uLmN1cnIsIFtjbGFpbV06IG51bGwgfSksIHt9KTtcbiAgICAgIGNsYWltUGFyYW0gPSB0aGlzLmNsYWltcy5sZW5ndGhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB1c2VyaW5mbzogY2xhaW1NYXAsXG4gICAgICAgICAgICBpZF90b2tlbjogY2xhaW1NYXAsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBjbGllbnRfaWQ6IGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmNsaWVudElkKSxcbiAgICAgIHJlZGlyZWN0X3VyaTogdGhpcy5yZWRpcmVjdFVSSSxcbiAgICAgIHNjb3BlOiB0aGlzLnNjb3Blcy5qb2luKCcgJyksXG4gICAgICByZXNwb25zZV90eXBlOiAnY29kZScsXG4gICAgICByZXNwb25zZV9tb2RlOiAncXVlcnknLFxuICAgICAgc3RhdGU6IGVuY29kZVVSSUNvbXBvbmVudChzdGF0ZSksXG4gICAgICBjb2RlX2NoYWxsZW5nZTogZW5jb2RlVVJJKGNvZGVWZXJpZmllciksXG4gICAgICBjb2RlX2NoYWxsZW5nZV9tZXRob2Q6ICdTMjU2JyxcbiAgICAgIGNsYWltczogY2xhaW1QYXJhbSAmJiBKU09OLnN0cmluZ2lmeShjbGFpbVBhcmFtKSxcbiAgICAgIC4uLihleHRyYVBhcmFtcyB8fCB7fSksXG4gICAgICAuLi4oaXNTaWdudXAgJiYge1xuICAgICAgICBwcm9tcHQ6ICdjcmVhdGUnXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgU3RvcmFnZS5zZXQoc3RhdGUsIHtcbiAgICAgIGNvZGVWZXJpZmllcixcbiAgICAgIG9yaWdpbmFsQ29kZVZlcmlmaWVyLFxuICAgICAgcmVkaXJlY3RUbyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvZ2luUXVlcnkgPSBxdWVyeVN0cmluZy5zdHJpbmdpZnkocGFyYW1zKTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmF1dGhvcml6YXRpb25FbmRwb2ludH0/JHtsb2dpblF1ZXJ5fWA7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodXJsKTtcbiAgfVxuXG4gIGxvZ2luID0gKGZvcmNlZFJlZGlyZWN0VG8/OiBzdHJpbmcsIGV4dHJhUGFyYW1zPzogQXV0aGVudGljYXRlRXh0cmFQYXJhbXMpOiB2b2lkID0+IHtcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZSh7IGZvcmNlZFJlZGlyZWN0VG8sIGV4dHJhUGFyYW1zIH0pO1xuICB9O1xuXG4gIHNpZ251cCA9IChmb3JjZWRSZWRpcmVjdFRvPzogc3RyaW5nLCBleHRyYVBhcmFtcz86IEF1dGhlbnRpY2F0ZUV4dHJhUGFyYW1zKTogdm9pZCA9PiB7XG4gICAgdGhpcy5hdXRoZW50aWNhdGUoeyBmb3JjZWRSZWRpcmVjdFRvLCBleHRyYVBhcmFtcywgaXNTaWdudXA6IHRydWUgfSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGxvYWRVc2VySW5mbyh1c2VySlNPTjogYW55LCBjbGFpbXM/OiBDbGFpbXMpOiBVc2VyRGF0YTtcblxuICBnZXRVc2VySW5mbyA9IGFzeW5jICgpOiBQcm9taXNlPHsgdXNlcjogVXNlckluZm8sIGNsYWltcz86IENsYWltcyB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgaWYgKCF0aGlzLnVzZXJJbmZvRW5kcG9pbnQgfHwgIXRoaXMudG9rZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLnVzZXJJbmZvRW5kcG9pbnQsIHtcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoe1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLnRva2VuLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gIFxuICAgICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBjb25zdCBjbGFpbXMgPSB0aGlzLmNsYWltcy5sZW5ndGhcbiAgICAgICAgPyB0aGlzLmNsYWltcy5yZWR1Y2U8Q2xhaW1zPigoY3VyciwgY2xhaW0pID0+ICh7XG4gICAgICAgICAgLi4uY3VycixcbiAgICAgICAgICBbY2xhaW1dOiB1c2VySW5mb1tjbGFpbV0sXG4gICAgICAgIH0pLCB7fSBhcyBDbGFpbXMpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy51c2VyID0gdGhpcy5sb2FkVXNlckluZm8odXNlckluZm8sIGNsYWltcyk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVzZXI7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignRXJyb3IgZ2V0dGluZyB1c2VyIGluZm8sIGxvZ2dpbmcgb3V0Li4uJyk7XG4gICAgICBjb25zb2xlLndhcm4oZXJyb3IpO1xuICAgICAgYXdhaXQgdGhpcy5sb2dvdXQoKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIGxvZ291dCA9IGFzeW5jIChlbmRTZXNzaW9uVVJJPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgU3RvcmFnZS5yZW1vdmUoYCR7dGhpcy5zdG9yYWdlS2V5fS50b2tlbmApO1xuXG4gICAgaWYgKGVuZFNlc3Npb25VUkkpIHtcbiAgICAgIC8vIEphbnJhaW5KU1xuICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoZW5kU2Vzc2lvblVSSSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9rdGFKU1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAnaWRfdG9rZW5faGludCc6IHRoaXMudG9rZW4/LmlkVG9rZW4sXG4gICAgICAgICdwb3N0X2xvZ291dF9yZWRpcmVjdF91cmknOiB0aGlzLmxvZ291dFJlZGlyZWN0VVJJLFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmVuZFNlc3Npb25FbmRwb2ludCkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVuZFNlc3Npb25FbmRwb2ludH0/JHtxdWVyeVN0cmluZy5zdHJpbmdpZnkocGFyYW1zKX1gO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh1cmwpOyAgXG4gICAgICB9XG4gICAgfVxuXG4gIH07XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT0F1dGhDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvT0F1dGhDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhEQUF1QztBQUN2Qyw2QkFBb0M7QUFDcEMsaUNBQTBHO0FBWTFHO0lBdUNFLHNCQUFZLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQixFQUFFLFVBQWtCLEVBQUUsaUJBQXlCLEVBQUUsTUFBNkIsRUFBRSxNQUFnQztRQUFwTCxpQkFnQ0M7UUFoQ29ILHVCQUFBLEVBQUEsVUFBb0IsUUFBUSxDQUFDO1FBQUUsdUJBQUEsRUFBQSxXQUFnQztRQVZwTCxjQUFTLEdBQStDLEVBQUUsQ0FBQztRQTRIbkQsd0JBQW1CLEdBQUc7O1lBQzVCLElBQUksUUFBQyxLQUFJLENBQUMsS0FBSywwQ0FBRSxZQUFZLENBQUEsRUFBRTtnQkFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO2dCQUN0QyxPQUFPO2FBQ1I7WUFFRCxJQUFJLEtBQUksQ0FBQyxJQUFJLElBQUksS0FBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDekQsSUFBTSx3QkFBd0IsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZDLEtBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDOzs7Ozs7Z0NBRTNDLFdBQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFBOztnQ0FBekIsU0FBeUIsQ0FBQzs7OztnQ0FFMUIsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dDQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Ozs7O3FCQUVqQixFQUFFLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsd0JBQXdCLENBQUMs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QUFNLENBQUksSUFBSSxDQUFDLFVBQVUsV0FBUSxDQUFDLENBQUM7OzRCQUc3QyxXQUFPLElBQUksQ0FBQyxLQUFLLEVBQUE7Ozs7S0FDbEI7SUFFTyxvQ0FBYSxHQUFyQjtRQUFBLGlCQUlDO1FBSEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBQyxFQUFFO1lBQ3hCLEVBQUUsQ0FBQyxLQUFJLENBQUMsS0FBSyxJQUFJLEtBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSSxDQUFDLGNBQWMsRUFBRSxLQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBdVFILG1CQUFDO0FBQUQsQ0FBQyxBQTlaRCxJQThaQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBxdWVyeVN0cmluZyBmcm9tICdxdWVyeS1zdHJpbmcnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBlbmNvZGVCb2R5LCBnZW5lcmF0ZUNvZGVWZXJpZmllciwgZ2VuZXJhdGVQa2NlQ2hhbGxlbmdlLCBTdG9yYWdlLCBjaGVja0NhbGxiYWNrIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1xuICBPQXV0aFVzZXJJbmZvLFxuICBUb2tlbixcbiAgV2F0Y2hBdXRoQ2FsbGJhY2ssXG4gIEluaXQsXG4gIENvbmZpZ0VuZHBvaW50LFxuICBBdXRoZW50aWNhdGVBcmdzLFxuICBDbGFpbVBhcmFtLFxuICBBdXRoZW50aWNhdGVFeHRyYVBhcmFtcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIE9wZW5JRENsaWVudDxDbGFpbXMgZXh0ZW5kcyB7fSA9IHt9LCBVc2VySW5mbyBleHRlbmRzIE9BdXRoVXNlckluZm8gPSBPQXV0aFVzZXJJbmZvLCBVc2VyRGF0YSBleHRlbmRzIHsgdXNlcjogVXNlckluZm8sIGNsYWltcz86IENsYWltcyB9ID0geyB1c2VyOiBVc2VySW5mbywgY2xhaW1zPzogQ2xhaW1zIH0+IHtcbiAgY2xpZW50SWQ6IHN0cmluZztcblxuICBjb25maWdVcmw6IHN0cmluZztcblxuICBzY29wZXM6IHN0cmluZ1tdO1xuXG4gIGNsYWltczogQXJyYXk8a2V5b2YgQ2xhaW1zPjtcblxuICByZWRpcmVjdFVSSTogc3RyaW5nO1xuXG4gIGxvZ291dFJlZGlyZWN0VVJJOiBzdHJpbmc7XG5cbiAgYXV0aG9yaXphdGlvbkVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIHRva2VuRW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgdXNlckluZm9FbmRwb2ludD86IHN0cmluZztcblxuICByZXZvY2F0aW9uRW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgZW5kU2Vzc2lvbkVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIHRva2VuPzogVG9rZW47XG5cbiAgdXNlcj86IFVzZXJEYXRhO1xuXG4gIHN0b3JhZ2VLZXk6IHN0cmluZztcblxuICBsaXN0ZW5lcnM6IEFycmF5PFdhdGNoQXV0aENhbGxiYWNrPFVzZXJJbmZvLCBDbGFpbXM+PiA9IFtdO1xuXG4gIHJlZnJlc2hUb2tlbkludGVydmFsPzogbnVtYmVyO1xuXG4gIGNvbWVzRnJvbUxvZ2luOiBib29sZWFuO1xuXG4gIHJlZGlyZWN0VG8/OiBzdHJpbmc7XG5cbiAgaGFzQmVlbkluaXRpYWxpemVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudElkOiBzdHJpbmcsIGNvbmZpZ1VybDogc3RyaW5nLCByZWRpcmVjdFVSSTogc3RyaW5nLCBzdG9yYWdlS2V5OiBzdHJpbmcsIGxvZ291dFJlZGlyZWN0VVJJOiBzdHJpbmcsIHNjb3Blczogc3RyaW5nW10gPSBbJ29wZW5pZCddLCBjbGFpbXM6IEFycmF5PGtleW9mIENsYWltcz4gPSBbXSkge1xuICAgIGlmICghY2xpZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgaXMgbm90IHByb3ZpZGVkLicpXG4gICAgfVxuICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZDtcblxuICAgIGlmICghY29uZmlnVXJsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbmZpZ1VybCBpcyBub3QgcHJvdmlkZWQuJylcbiAgICB9XG4gICAgdGhpcy5jb25maWdVcmwgPSBjb25maWdVcmw7XG5cbiAgICBpZiAoIXJlZGlyZWN0VVJJKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZGlyZWN0VXJpIGlzIG5vdCBwcm92aWRlZC4nKVxuICAgIH1cbiAgICB0aGlzLnJlZGlyZWN0VVJJID0gcmVkaXJlY3RVUkk7XG5cbiAgICBpZiAoIWxvZ291dFJlZGlyZWN0VVJJKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2xvZ291dFJlZGlyZWN0VVJJIGlzIG5vdCBwcm92aWRlZC4nKVxuICAgIH1cbiAgICB0aGlzLmxvZ291dFJlZGlyZWN0VVJJID0gbG9nb3V0UmVkaXJlY3RVUkk7XG5cbiAgICBpZiAoIXN0b3JhZ2VLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RvcmFnZUtleSBpcyBub3QgcHJvdmlkZWQuJylcbiAgICB9XG4gICAgdGhpcy5zdG9yYWdlS2V5ID0gc3RvcmFnZUtleTtcblxuICAgIHRoaXMuY29tZXNGcm9tTG9naW4gPSBmYWxzZTtcbiAgICB0aGlzLnJlZGlyZWN0VG8gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oYXNCZWVuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnNjb3BlcyA9IHNjb3BlcztcbiAgICB0aGlzLmNsYWltcyA9IGNsYWltcztcbiAgICB0aGlzLnRva2VuID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBTdG9yYWdlLmdldChgJHtzdG9yYWdlS2V5fS50b2tlbmApIDogbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGluaXQoKTogUHJvbWlzZTxJbml0IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMuaGFzQmVlbkluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBbY2FsbGJhY2tTdGF0ZSwgc3RvcmFnZU9hdXRoXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGNoZWNrQ2FsbGJhY2sod2luZG93LmxvY2F0aW9uLmhyZWYpLFxuICAgICAgU3RvcmFnZS5nZXQoYCR7dGhpcy5zdG9yYWdlS2V5fS50b2tlbmApLFxuICAgIF0pO1xuXG4gICAgLy8gV2FpdCB1bnRpbCBjb25maWd1cmF0aW9uIGhhcyBmaW5pc2hlZC5cbiAgICBhd2FpdCB0aGlzLnNldENvbmZpZygpO1xuXG4gICAgLy8gUmV0dXJuIGVhcmx5XG4gICAgaWYgKCFjYWxsYmFja1N0YXRlICYmICFzdG9yYWdlT2F1dGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5oYXNCZWVuSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgaWYgKGNhbGxiYWNrU3RhdGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFRva2VuT25Jbml0KGNhbGxiYWNrU3RhdGUpXG4gICAgfVxuXG4gICAgaWYgKHN0b3JhZ2VPYXV0aCAmJiAhc3RvcmFnZU9hdXRoLmxvZ291dCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVmcmVzaFRva2VuT25Jbml0KHN0b3JhZ2VPYXV0aClcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRUb2tlbk9uSW5pdChjYWxsYmFja1N0YXRlKTogUHJvbWlzZTxUb2tlbiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvZGUsIFxuICAgICAgcGtjZUNvZGVWZXJpZmllciwgXG4gICAgICBjdXJyZW50U3RhdGUsIFxuICAgICAgcmVkaXJlY3RUbyxcbiAgICAgIG5ld1VybFxuICAgIH0gPSBjYWxsYmFja1N0YXRlO1xuXG4gICAgdGhpcy50b2tlbiA9IGF3YWl0IHRoaXMuZ2V0VG9rZW4oY29kZSwgcGtjZUNvZGVWZXJpZmllciwgY3VycmVudFN0YXRlKTtcbiAgICB0aGlzLmtlZXBSZWZyZXNoaW5nVG9rZW4oKTtcblxuICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwgZG9jdW1lbnQudGl0bGUsIG5ld1VybCk7XG5cbiAgICB0aGlzLmNvbWVzRnJvbUxvZ2luID0gdHJ1ZTtcbiAgICB0aGlzLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xuXG4gICAgcmV0dXJuIHRoaXMudG9rZW5cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaFRva2VuT25Jbml0KHN0b3JhZ2VPYXV0aDogYW55KTogUHJvbWlzZTxUb2tlbiB8IHVuZGVmaW5lZD4ge1xuICAgIHRoaXMudG9rZW4gPSBzdG9yYWdlT2F1dGg7XG4gICAgdGhpcy5jb21lc0Zyb21Mb2dpbiA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLnRva2VuPy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgIC8vIFRPRE8gQGFsbCBoYW5kbGUgY2FzZSB3aXRob3V0IHJlZnJlc2ggdG9rZW5cbiAgICAgIC8vIFRoaXMgc2hvdWxkIHRlc3QgaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgc3RpbGwgdmFsaWRcbiAgICAgIC8vIG9yIHdlIHNob3VsZCBjaGFuZ2UgdGhlIEFQSSBjYWxscyB0byBnZXQgdGhlIHJlZnJlc2ggdG9rZW4uXG4gICAgICBjb25zb2xlLndhcm4oXCJtaXNzaW5nIHJlZnJlc2ggdG9rZW4uXCIpXG4gICAgICByZXR1cm4gdGhpcy50b2tlblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbigpO1xuICAgICAgdGhpcy5rZWVwUmVmcmVzaGluZ1Rva2VuKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnRva2VuID0gdW5kZWZpbmVkO1xuICAgICAgU3RvcmFnZS5yZW1vdmUoYCR7dGhpcy5zdG9yYWdlS2V5fS50b2tlbmApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRva2VuXG4gIH1cblxuICBwcml2YXRlIGNhbGxMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgoY2IpID0+IHtcbiAgICAgIGNiKHRoaXMudG9rZW4gJiYgdGhpcy51c2VyLCB0aGlzLmNvbWVzRnJvbUxvZ2luLCB0aGlzLnJlZGlyZWN0VG8pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGtlZXBSZWZyZXNoaW5nVG9rZW4gPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLnRva2VuPy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgIGNvbnNvbGUud2FybihcIm1pc3NpbmcgcmVmcmVzaCB0b2tlbi5cIilcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51c2VyICYmIHRoaXMudG9rZW4gJiYgIXRoaXMucmVmcmVzaFRva2VuSW50ZXJ2YWwpIHtcbiAgICAgIGNvbnN0IFNBRkVUWV9HQVBfUkVGUkVTSF9UT0tFTiA9IDYwMDAwOyAvLyAxIG1pblxuICAgICAgdGhpcy5yZWZyZXNoVG9rZW5JbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMucmVmcmVzaFRva2VuSW50ZXJ2YWwpO1xuICAgICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sICh0aGlzLnRva2VuLmV4cGlyZXNJbiAqIDEwMDApIC0gU0FGRVRZX0dBUF9SRUZSRVNIX1RPS0VOKTtcbiAgICB9XG4gIH07XG5cbiAgd2F0Y2hBdXRoID0gYXN5bmMgKGNiOiBXYXRjaEF1dGhDYWxsYmFjazxVc2VySW5mbywgQ2xhaW1zPik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHRoaXMubGlzdGVuZXJzLnB1c2goY2IpO1xuXG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG5cbiAgICBpZiAodGhpcy50b2tlbikge1xuICAgICAgYXdhaXQgdGhpcy5nZXRVc2VySW5mbygpO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbExpc3RlbmVycygpO1xuICB9O1xuXG4gIHByaXZhdGUgZmV0Y2hDb25maWcgPSBhc3luYyAoKTogUHJvbWlzZTxDb25maWdFbmRwb2ludCB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMuY29uZmlnVXJsKTtcbiAgICAgIC8vIFRPRE86IEVycm9yLCBmZXRjaCBvbmx5IHRocm93cyBvbiBjb25uZWN0aW9uIGVycm9yLCBlbHNlIHdlIGdldCAhZmV0Y2gub2tcbiAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgc2V0Q29uZmlnID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuZmV0Y2hDb25maWcoKTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmF1dGhvcml6YXRpb25FbmRwb2ludCA9IGNvbmZpZy5hdXRob3JpemF0aW9uX2VuZHBvaW50O1xuICAgICAgdGhpcy50b2tlbkVuZHBvaW50ID0gY29uZmlnLnRva2VuX2VuZHBvaW50O1xuICAgICAgdGhpcy51c2VySW5mb0VuZHBvaW50ID0gY29uZmlnLnVzZXJpbmZvX2VuZHBvaW50O1xuICAgICAgdGhpcy5yZXZvY2F0aW9uRW5kcG9pbnQgPSBjb25maWcucmV2b2NhdGlvbl9lbmRwb2ludDtcbiAgICAgIHRoaXMuZW5kU2Vzc2lvbkVuZHBvaW50ID0gY29uZmlnLmVuZF9zZXNzaW9uX2VuZHBvaW50O1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGdldFRva2VuID0gYXN5bmMgKGNvZGU6IHN0cmluZywgb3JpZ2luYWxDb2RlVmVyaWZpZXI6IHN0cmluZywgY3VycmVudFN0YXRlOiBzdHJpbmcpOiBQcm9taXNlPFRva2VuIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgaWYgKCF0aGlzLnRva2VuRW5kcG9pbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGluaXRpYWxpemVkLiBUb2tlbiBlbmRwb2ludCBub3QgcHJlc2VudCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICBncmFudF90eXBlOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcbiAgICAgIGNvZGUsXG4gICAgICBjbGllbnRfaWQ6IGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmNsaWVudElkKSxcbiAgICAgIHJlZGlyZWN0X3VyaTogdGhpcy5yZWRpcmVjdFVSSSxcbiAgICAgIGNvZGVfdmVyaWZpZXI6IG9yaWdpbmFsQ29kZVZlcmlmaWVyLFxuICAgIH07XG5cbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgfSksXG4gICAgICBib2R5OiBlbmNvZGVCb2R5KGJvZHkpLFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLnRva2VuRW5kcG9pbnQsIGNvbmZpZyk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgLy8gVE9ETzogRXJyb3IsIGRlYWwgd2l0aCBmYWlsdXJlIGNhc2VzXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGF1dGhUb2tlbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgdGhpcy50b2tlbiA9IHtcbiAgICAgICAgYWNjZXNzVG9rZW46IGF1dGhUb2tlbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgIHJlZnJlc2hUb2tlbjogYXV0aFRva2VuLnJlZnJlc2hfdG9rZW4sXG4gICAgICAgIGV4cGlyZXNJbjogYXV0aFRva2VuLmV4cGlyZXNfaW4sXG4gICAgICAgIHRva2VuVHlwZTogYXV0aFRva2VuLnRva2VuX3R5cGUsXG4gICAgICAgIHNjb3BlOiBhdXRoVG9rZW4uc2NvcGUsXG4gICAgICAgIGlkVG9rZW46IGF1dGhUb2tlbi5pZF90b2tlbixcbiAgICAgIH07XG5cbiAgICAgIFN0b3JhZ2Uuc2V0KGAke3RoaXMuc3RvcmFnZUtleX0udG9rZW5gLCB0aGlzLnRva2VuKTtcbiAgICAgIC8vIGNsZWFuIHVwIGxvY2FsIHN0b3JhZ2UgZnJvbSBQS0NFIGRldGFpbHNcbiAgICAgIFN0b3JhZ2UucmVtb3ZlKGN1cnJlbnRTdGF0ZSk7XG4gICAgICAvLyBjbGVhbiB1cCBxdWVyeSBwYXJhbXMgZnJvbSBPQXV0aCByZWRpcmVjdGlvblxuICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKTtcblxuICAgICAgcmV0dXJuIHRoaXMudG9rZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgZ2V0dGluZyB0b2tlbicpO1xuICAgIH1cbiAgfTtcblxuICByZWZyZXNoVG9rZW4gPSBhc3luYyAoKTogUHJvbWlzZTxJbml0IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgaWYgKCF0aGlzLnRva2VuIHx8ICF0aGlzLnRva2VuRW5kcG9pbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlZnJlc2ggdG9rZW4gd2l0aG91dCB0b2tlbiBvciBlbmRwb2ludCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50b2tlbi5yZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlZnJlc2ggdG9rZW4gd2l0aG91dCByZWZyZXNoIHRva2VuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgIHJlZnJlc2hfdG9rZW46IHRoaXMudG9rZW4ucmVmcmVzaFRva2VuLFxuICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0VVJJLFxuICAgICAgY2xpZW50X2lkOiBlbmNvZGVVUklDb21wb25lbnQodGhpcy5jbGllbnRJZCksXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoe1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICB9KSxcbiAgICAgIGJvZHk6IGVuY29kZUJvZHkoYm9keSksXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy50b2tlbkVuZHBvaW50LCBjb25maWcpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBub3QgcmVmcmVzaGVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICB0aGlzLnRva2VuID0ge1xuICAgICAgYWNjZXNzVG9rZW46IHRva2VuLmFjY2Vzc190b2tlbixcbiAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW4ucmVmcmVzaF90b2tlbixcbiAgICAgIGV4cGlyZXNJbjogdG9rZW4uZXhwaXJlc19pbixcbiAgICAgIHRva2VuVHlwZTogdG9rZW4udG9rZW5fdHlwZSxcbiAgICAgIHNjb3BlOiB0b2tlbi5zY29wZSxcbiAgICAgIGlkVG9rZW46IHRva2VuLmlkX3Rva2VuLFxuICAgIH07XG5cbiAgICBTdG9yYWdlLnNldChgJHt0aGlzLnN0b3JhZ2VLZXl9LnRva2VuYCwgdGhpcy50b2tlbik7XG5cbiAgICAvLyBUT0RPIEBhbGwgY2FsbCBsaXN0ZW5lcnMgaWYgc29tZXRoaW5nIGNoYW5nZWRcblxuICAgIC8vICg/KSBXZSBkb24ndCByZXR1cm4gdGhlIHRva2VuIGRpcmVjdGx5XG4gICAgcmV0dXJuIHsgYWNjZXNzVG9rZW46IHRoaXMudG9rZW4uYWNjZXNzVG9rZW4sIGV4cGlyZXNJbjogdGhpcy50b2tlbi5leHBpcmVzSW4gfTtcbiAgfTtcblxuICBwcml2YXRlIGF1dGhlbnRpY2F0ZSA9IChhcmdzOiBBdXRoZW50aWNhdGVBcmdzKTogdm9pZCA9PiB7XG4gICAgY29uc3QgeyBmb3JjZWRSZWRpcmVjdFRvLCBpc1NpZ251cCwgZXh0cmFQYXJhbXMgfSA9IGFyZ3M7XG4gICAgY29uc3Qgb3JpZ2luYWxDb2RlVmVyaWZpZXIgPSBnZW5lcmF0ZUNvZGVWZXJpZmllcig5Nik7XG4gICAgY29uc3QgY29kZVZlcmlmaWVyID0gZ2VuZXJhdGVQa2NlQ2hhbGxlbmdlKG9yaWdpbmFsQ29kZVZlcmlmaWVyKTtcbiAgICBjb25zdCB7IHBhdGhuYW1lLCBzZWFyY2ggfSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICBjb25zdCB7IG9yaWdpbiB9ID0gcXVlcnlTdHJpbmcucGFyc2Uoc2VhcmNoKTtcbiAgICBjb25zdCByZWRpcmVjdFRvID0gZm9yY2VkUmVkaXJlY3RUbyA/IGZvcmNlZFJlZGlyZWN0VG8gOiBvcmlnaW4gPyBkZWNvZGVVUklDb21wb25lbnQob3JpZ2luICsgXCJcIikgOiBwYXRobmFtZSArIHNlYXJjaDtcbiAgICBjb25zdCBzdGF0ZSA9IHV1aWR2NCgpO1xuICAgIGxldCBjbGFpbVBhcmFtO1xuICBcbiAgICBpZiAodGhpcy5jbGFpbXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjbGFpbU1hcCA9IHRoaXMuY2xhaW1zLnJlZHVjZTxDbGFpbVBhcmFtPigoY3VyciwgY2xhaW0pID0+ICh7IC4uLmN1cnIsIFtjbGFpbV06IG51bGwgfSksIHt9KTtcbiAgICAgIGNsYWltUGFyYW0gPSB0aGlzLmNsYWltcy5sZW5ndGhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB1c2VyaW5mbzogY2xhaW1NYXAsXG4gICAgICAgICAgICBpZF90b2tlbjogY2xhaW1NYXAsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBjbGllbnRfaWQ6IGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmNsaWVudElkKSxcbiAgICAgIHJlZGlyZWN0X3VyaTogdGhpcy5yZWRpcmVjdFVSSSxcbiAgICAgIHNjb3BlOiB0aGlzLnNjb3Blcy5qb2luKCcgJyksXG4gICAgICByZXNwb25zZV90eXBlOiAnY29kZScsXG4gICAgICByZXNwb25zZV9tb2RlOiAncXVlcnknLFxuICAgICAgc3RhdGU6IGVuY29kZVVSSUNvbXBvbmVudChzdGF0ZSksXG4gICAgICBjb2RlX2NoYWxsZW5nZTogZW5jb2RlVVJJKGNvZGVWZXJpZmllciksXG4gICAgICBjb2RlX2NoYWxsZW5nZV9tZXRob2Q6ICdTMjU2JyxcbiAgICAgIGNsYWltczogY2xhaW1QYXJhbSAmJiBKU09OLnN0cmluZ2lmeShjbGFpbVBhcmFtKSxcbiAgICAgIC4uLihleHRyYVBhcmFtcyB8fCB7fSksXG4gICAgICAuLi4oaXNTaWdudXAgJiYge1xuICAgICAgICBwcm9tcHQ6ICdjcmVhdGUnXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgU3RvcmFnZS5zZXQoc3RhdGUsIHtcbiAgICAgIGNvZGVWZXJpZmllcixcbiAgICAgIG9yaWdpbmFsQ29kZVZlcmlmaWVyLFxuICAgICAgcmVkaXJlY3RUbyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvZ2luUXVlcnkgPSBxdWVyeVN0cmluZy5zdHJpbmdpZnkocGFyYW1zKTtcbiAgICBpZiAodGhpcy5hdXRob3JpemF0aW9uRW5kcG9pbnQpIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXV0aG9yaXphdGlvbkVuZHBvaW50fT8ke2xvZ2luUXVlcnl9YDtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHVybCk7XG4gICAgfVxuICB9XG5cbiAgbG9naW4gPSAoZm9yY2VkUmVkaXJlY3RUbz86IHN0cmluZywgZXh0cmFQYXJhbXM/OiBBdXRoZW50aWNhdGVFeHRyYVBhcmFtcyk6IHZvaWQgPT4ge1xuICAgIHRoaXMuYXV0aGVudGljYXRlKHsgZm9yY2VkUmVkaXJlY3RUbywgZXh0cmFQYXJhbXMgfSk7XG4gIH07XG5cbiAgc2lnbnVwID0gKGZvcmNlZFJlZGlyZWN0VG8/OiBzdHJpbmcsIGV4dHJhUGFyYW1zPzogQXV0aGVudGljYXRlRXh0cmFQYXJhbXMpOiB2b2lkID0+IHtcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZSh7IGZvcmNlZFJlZGlyZWN0VG8sIGV4dHJhUGFyYW1zLCBpc1NpZ251cDogdHJ1ZSB9KTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgbG9hZFVzZXJJbmZvKHVzZXJKU09OOiBhbnksIGNsYWltcz86IENsYWltcyk6IFVzZXJEYXRhO1xuXG4gIGdldFVzZXJJbmZvID0gYXN5bmMgKCk6IFByb21pc2U8eyB1c2VyOiBVc2VySW5mbywgY2xhaW1zPzogQ2xhaW1zIH0gfCB1bmRlZmluZWQ+ID0+IHtcbiAgICBpZiAoIXRoaXMudXNlckluZm9FbmRwb2ludCB8fCAhdGhpcy50b2tlbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMudXNlckluZm9FbmRwb2ludCwge1xuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMudG9rZW4uYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgXG4gICAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIGNvbnN0IGNsYWltcyA9IHRoaXMuY2xhaW1zLmxlbmd0aFxuICAgICAgICA/IHRoaXMuY2xhaW1zLnJlZHVjZTxDbGFpbXM+KChjdXJyLCBjbGFpbSkgPT4gKHtcbiAgICAgICAgICAuLi5jdXJyLFxuICAgICAgICAgIFtjbGFpbV06IHVzZXJJbmZvW2NsYWltXSxcbiAgICAgICAgfSksIHt9IGFzIENsYWltcylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnVzZXIgPSB0aGlzLmxvYWRVc2VySW5mbyh1c2VySW5mbywgY2xhaW1zKTtcblxuICAgICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKCdFcnJvciBnZXR0aW5nIHVzZXIgaW5mbywgbG9nZ2luZyBvdXQuLi4nKTtcbiAgICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gICAgICBhd2FpdCB0aGlzLmxvZ291dCgpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgbG9nb3V0ID0gYXN5bmMgKGVuZFNlc3Npb25VUkk/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBTdG9yYWdlLnJlbW92ZShgJHt0aGlzLnN0b3JhZ2VLZXl9LnRva2VuYCk7XG5cbiAgICBpZiAoZW5kU2Vzc2lvblVSSSkge1xuICAgICAgLy8gSmFucmFpbkpTXG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShlbmRTZXNzaW9uVVJJKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT2t0YUpTXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICdpZF90b2tlbl9oaW50JzogdGhpcy50b2tlbj8uaWRUb2tlbixcbiAgICAgICAgJ3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSc6IHRoaXMubG9nb3V0UmVkaXJlY3RVUkksXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuZW5kU2Vzc2lvbkVuZHBvaW50KSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW5kU2Vzc2lvbkVuZHBvaW50fT8ke3F1ZXJ5U3RyaW5nLnN0cmluZ2lmeShwYXJhbXMpfWA7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHVybCk7ICBcbiAgICAgIH1cbiAgICB9XG5cbiAgfTtcbn1cbiJdfQ==
"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 (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
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) {

@@ -6,8 +19,11 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

Object.defineProperty(exports, "__esModule", { value: true });
const OAuthClient_1 = __importDefault(require("./OAuthClient"));
class OktaJS extends OAuthClient_1.default {
constructor(clientId, configUrl, redirectURI, logoutRedirectURI, scopes = ['openid', 'email', 'profile'], claims = []) {
super(clientId, configUrl, redirectURI, 'okta_token', logoutRedirectURI, scopes, claims);
var OAuthClient_1 = __importDefault(require("./OAuthClient"));
var OktaJS = (function (_super) {
__extends(OktaJS, _super);
function OktaJS(clientId, configUrl, redirectURI, logoutRedirectURI, scopes, claims) {
if (scopes === void 0) { scopes = ['openid', 'email', 'profile']; }
if (claims === void 0) { claims = []; }
return _super.call(this, clientId, configUrl, redirectURI, 'okta_token', logoutRedirectURI, scopes, claims) || this;
}
loadUserInfo(userJSON, claims) {
OktaJS.prototype.loadUserInfo = function (userJSON, claims) {
return {

@@ -20,7 +36,8 @@ user: {

},
claims,
claims: claims,
};
}
}
};
return OktaJS;
}(OAuthClient_1.default));
exports.default = OktaJS;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2t0YUpTLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL09rdGFKUy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdFQUF5QztBQUt6QyxNQUFxQixNQUEwQixTQUFRLHFCQUFrQztJQUN2RixZQUFZLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQixFQUFFLGlCQUF5QixFQUFFLFNBQW1CLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxTQUE4QixFQUFFO1FBQ2xMLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFHUyxZQUFZLENBQUMsUUFBYSxFQUFFLE1BQWM7UUFDbEQsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixFQUFFLEVBQUUsUUFBUSxDQUFDLEdBQUc7Z0JBQ2hCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxVQUFVO2dCQUN6QixRQUFRLEVBQUUsUUFBUSxDQUFDLFdBQVc7YUFDL0I7WUFDRCxNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWpCRCx5QkFpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT3BlbklEQ2xpZW50IGZyb20gJy4vT0F1dGhDbGllbnQnO1xuaW1wb3J0IHsgT0F1dGhVc2VySW5mbyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBPa3RhVXNlckluZm8gPSBPQXV0aFVzZXJJbmZvXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9rdGFKUzxDbGFpbXMgZXh0ZW5kcyB7fT4gZXh0ZW5kcyBPcGVuSURDbGllbnQ8Q2xhaW1zLCBPa3RhVXNlckluZm8+IHtcbiAgY29uc3RydWN0b3IoY2xpZW50SWQ6IHN0cmluZywgY29uZmlnVXJsOiBzdHJpbmcsIHJlZGlyZWN0VVJJOiBzdHJpbmcsIGxvZ291dFJlZGlyZWN0VVJJOiBzdHJpbmcsIHNjb3Blczogc3RyaW5nW10gPSBbJ29wZW5pZCcsICdlbWFpbCcsICdwcm9maWxlJ10sIGNsYWltczogQXJyYXk8a2V5b2YgQ2xhaW1zPiA9IFtdKSB7XG4gICAgc3VwZXIoY2xpZW50SWQsIGNvbmZpZ1VybCwgcmVkaXJlY3RVUkksICdva3RhX3Rva2VuJywgbG9nb3V0UmVkaXJlY3RVUkksIHNjb3BlcywgY2xhaW1zKTtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm9rdGEuY29tL2RvY3MvcmVmZXJlbmNlL2FwaS9vaWRjLyN1c2VyaW5mb1xuICBwcm90ZWN0ZWQgbG9hZFVzZXJJbmZvKHVzZXJKU09OOiBhbnksIGNsYWltczogQ2xhaW1zKTogeyB1c2VyOiBPQXV0aFVzZXJJbmZvLCBjbGFpbXM/OiBDbGFpbXMgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgaWQ6IHVzZXJKU09OLnN1YixcbiAgICAgICAgZW1haWw6IHVzZXJKU09OLmVtYWlsLFxuICAgICAgICBuYW1lOiB1c2VySlNPTi5naXZlbl9uYW1lLFxuICAgICAgICBsYXN0TmFtZTogdXNlckpTT04uZmFtaWx5X25hbWUsXG4gICAgICB9LFxuICAgICAgY2xhaW1zLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2t0YUpTLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL09rdGFKUy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4REFBeUM7QUFLekM7SUFBdUQsMEJBQWtDO0lBQ3ZGLGdCQUFZLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQixFQUFFLGlCQUF5QixFQUFFLE1BQWlELEVBQUUsTUFBZ0M7UUFBbkYsdUJBQUEsRUFBQSxVQUFvQixRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQztRQUFFLHVCQUFBLEVBQUEsV0FBZ0M7ZUFDbEwsa0JBQU0sUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDMUYsQ0FBQztJQUdTLDZCQUFZLEdBQXRCLFVBQXVCLFFBQWEsRUFBRSxNQUFjO1FBQ2xELE9BQU87WUFDTCxJQUFJLEVBQUU7Z0JBQ0osRUFBRSxFQUFFLFFBQVEsQ0FBQyxHQUFHO2dCQUNoQixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3JCLElBQUksRUFBRSxRQUFRLENBQUMsVUFBVTtnQkFDekIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxXQUFXO2FBQy9CO1lBQ0QsTUFBTSxRQUFBO1NBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCxhQUFDO0FBQUQsQ0FBQyxBQWpCRCxDQUF1RCxxQkFBWSxHQWlCbEUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT3BlbklEQ2xpZW50IGZyb20gJy4vT0F1dGhDbGllbnQnO1xuaW1wb3J0IHsgT0F1dGhVc2VySW5mbyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBPa3RhVXNlckluZm8gPSBPQXV0aFVzZXJJbmZvXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9rdGFKUzxDbGFpbXMgZXh0ZW5kcyB7fT4gZXh0ZW5kcyBPcGVuSURDbGllbnQ8Q2xhaW1zLCBPa3RhVXNlckluZm8+IHtcbiAgY29uc3RydWN0b3IoY2xpZW50SWQ6IHN0cmluZywgY29uZmlnVXJsOiBzdHJpbmcsIHJlZGlyZWN0VVJJOiBzdHJpbmcsIGxvZ291dFJlZGlyZWN0VVJJOiBzdHJpbmcsIHNjb3Blczogc3RyaW5nW10gPSBbJ29wZW5pZCcsICdlbWFpbCcsICdwcm9maWxlJ10sIGNsYWltczogQXJyYXk8a2V5b2YgQ2xhaW1zPiA9IFtdKSB7XG4gICAgc3VwZXIoY2xpZW50SWQsIGNvbmZpZ1VybCwgcmVkaXJlY3RVUkksICdva3RhX3Rva2VuJywgbG9nb3V0UmVkaXJlY3RVUkksIHNjb3BlcywgY2xhaW1zKTtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm9rdGEuY29tL2RvY3MvcmVmZXJlbmNlL2FwaS9vaWRjLyN1c2VyaW5mb1xuICBwcm90ZWN0ZWQgbG9hZFVzZXJJbmZvKHVzZXJKU09OOiBhbnksIGNsYWltczogQ2xhaW1zKTogeyB1c2VyOiBPQXV0aFVzZXJJbmZvLCBjbGFpbXM/OiBDbGFpbXMgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgaWQ6IHVzZXJKU09OLnN1YixcbiAgICAgICAgZW1haWw6IHVzZXJKU09OLmVtYWlsLFxuICAgICAgICBuYW1lOiB1c2VySlNPTi5naXZlbl9uYW1lLFxuICAgICAgICBsYXN0TmFtZTogdXNlckpTT04uZmFtaWx5X25hbWUsXG4gICAgICB9LFxuICAgICAgY2xhaW1zLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==

@@ -7,8 +7,8 @@ "use strict";

exports.checkCallback = void 0;
const Storage_1 = require("./Storage");
const query_string_1 = __importDefault(require("query-string"));
const parseCallbackUrl = (url) => {
const queryIndex = url.indexOf('?');
var Storage_1 = require("./Storage");
var query_string_1 = __importDefault(require("query-string"));
var parseCallbackUrl = function (url) {
var queryIndex = url.indexOf('?');
if (queryIndex !== -1) {
const oauthParams = {
var oauthParams_1 = {
code: undefined,

@@ -18,23 +18,24 @@ newUrl: url.substring(0, queryIndex),

};
const query = url.substring(queryIndex + 1, url.length);
const queryParams = query_string_1.default.parse(query);
const otherParams = {};
Object.entries(queryParams).forEach(([queryKey, queryValue]) => {
var query = url.substring(queryIndex + 1, url.length);
var queryParams = query_string_1.default.parse(query);
var otherParams_1 = {};
Object.entries(queryParams).forEach(function (_a) {
var queryKey = _a[0], queryValue = _a[1];
switch (queryKey) {
case 'code':
oauthParams.code = queryValue;
oauthParams_1.code = queryValue;
break;
case 'state':
oauthParams.state = queryValue;
oauthParams_1.state = queryValue;
break;
default:
otherParams[queryKey] = queryValue;
otherParams_1[queryKey] = queryValue;
break;
}
});
if (Object.keys(otherParams).length) {
oauthParams.newUrl += `?${query_string_1.default.stringify(otherParams)}`;
if (Object.keys(otherParams_1).length) {
oauthParams_1.newUrl += "?" + query_string_1.default.stringify(otherParams_1);
}
if (oauthParams.code && oauthParams.state) {
return oauthParams;
if (oauthParams_1.code && oauthParams_1.state) {
return oauthParams_1;
}

@@ -45,8 +46,8 @@ return undefined;

};
exports.checkCallback = (url) => {
const oauth = parseCallbackUrl(url);
exports.checkCallback = function (url) {
var oauth = parseCallbackUrl(url);
if (!oauth) {
return undefined;
}
const storedState = Storage_1.Storage.get(oauth.state);
var storedState = Storage_1.Storage.get(oauth.state);
if (storedState) {

@@ -63,2 +64,2 @@ return {

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tDYWxsYmFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jaGVja0NhbGxiYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHVDQUFvQztBQUNwQyxnRUFBdUM7QUFnQnZDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxHQUFXLEVBQThCLEVBQUU7SUFDbkUsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVwQyxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNyQixNQUFNLFdBQVcsR0FBNEI7WUFDM0MsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDO1lBQ3BDLEtBQUssRUFBRSxTQUFTO1NBQ2pCLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sV0FBVyxHQUFHLHNCQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLE1BQU0sV0FBVyxHQUE0RCxFQUFFLENBQUM7UUFDaEYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFO1lBQzdELFFBQVEsUUFBUSxFQUFFO2dCQUNoQixLQUFLLE1BQU07b0JBQ1QsV0FBVyxDQUFDLElBQUksR0FBRyxVQUFvQixDQUFDO29CQUN4QyxNQUFNO2dCQUNSLEtBQUssT0FBTztvQkFDVixXQUFXLENBQUMsS0FBSyxHQUFHLFVBQW9CLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1I7b0JBQ0UsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQztvQkFDbkMsTUFBTTthQUNUO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ25DLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxzQkFBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1NBQ2hFO1FBRUQsSUFBSSxXQUFXLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDekMsT0FBTyxXQUE2QixDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFVyxRQUFBLGFBQWEsR0FBRyxDQUFDLEdBQVcsRUFBMkIsRUFBRTtJQUNwRSxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVwQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxNQUFNLFdBQVcsR0FBRyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0MsSUFBSSxXQUFXLEVBQUU7UUFDZixPQUFPO1lBQ0wsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLG9CQUFvQjtZQUNsRCxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVU7WUFDbEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDMUIsQ0FBQztLQUNIO0lBQ0QsTUFBTSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSAnLi9TdG9yYWdlJztcbmltcG9ydCBxdWVyeVN0cmluZyBmcm9tICdxdWVyeS1zdHJpbmcnO1xuXG50eXBlIE9hdXRoUGFyYW1zID0ge1xuICBwa2NlQ29kZVZlcmlmaWVyOiBzdHJpbmc7XG4gIHJlZGlyZWN0VG86IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuICBuZXdVcmw6IHN0cmluZztcbiAgY3VycmVudFN0YXRlOiBzdHJpbmc7XG59O1xuXG50eXBlIENhbGxiYWNrUGFyYW1zID0ge1xuICBjb2RlOiBzdHJpbmc7XG4gIHN0YXRlOiBzdHJpbmc7XG4gIG5ld1VybDogc3RyaW5nO1xufTtcblxuY29uc3QgcGFyc2VDYWxsYmFja1VybCA9ICh1cmw6IHN0cmluZyk6IENhbGxiYWNrUGFyYW1zIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcXVlcnlJbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG5cbiAgaWYgKHF1ZXJ5SW5kZXggIT09IC0xKSB7XG4gICAgY29uc3Qgb2F1dGhQYXJhbXM6IFBhcnRpYWw8Q2FsbGJhY2tQYXJhbXM+ID0ge1xuICAgICAgY29kZTogdW5kZWZpbmVkLFxuICAgICAgbmV3VXJsOiB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5SW5kZXgpLFxuICAgICAgc3RhdGU6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGNvbnN0IHF1ZXJ5ID0gdXJsLnN1YnN0cmluZyhxdWVyeUluZGV4ICsgMSwgdXJsLmxlbmd0aCk7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBxdWVyeVN0cmluZy5wYXJzZShxdWVyeSk7XG4gICAgLy8gcXVlcnkgcGFyYW0gdHlwZXNcbiAgICBjb25zdCBvdGhlclBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgfCB1bmRlZmluZWQgfSA9IHt9O1xuICAgIE9iamVjdC5lbnRyaWVzKHF1ZXJ5UGFyYW1zKS5mb3JFYWNoKChbcXVlcnlLZXksIHF1ZXJ5VmFsdWVdKSA9PiB7XG4gICAgICBzd2l0Y2ggKHF1ZXJ5S2V5KSB7XG4gICAgICAgIGNhc2UgJ2NvZGUnOlxuICAgICAgICAgIG9hdXRoUGFyYW1zLmNvZGUgPSBxdWVyeVZhbHVlIGFzIHN0cmluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RhdGUnOlxuICAgICAgICAgIG9hdXRoUGFyYW1zLnN0YXRlID0gcXVlcnlWYWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgb3RoZXJQYXJhbXNbcXVlcnlLZXldID0gcXVlcnlWYWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhvdGhlclBhcmFtcykubGVuZ3RoKSB7XG4gICAgICBvYXV0aFBhcmFtcy5uZXdVcmwgKz0gYD8ke3F1ZXJ5U3RyaW5nLnN0cmluZ2lmeShvdGhlclBhcmFtcyl9YDtcbiAgICB9XG5cbiAgICBpZiAob2F1dGhQYXJhbXMuY29kZSAmJiBvYXV0aFBhcmFtcy5zdGF0ZSkge1xuICAgICAgcmV0dXJuIG9hdXRoUGFyYW1zIGFzIENhbGxiYWNrUGFyYW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0NhbGxiYWNrID0gKHVybDogc3RyaW5nKTogT2F1dGhQYXJhbXMgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBvYXV0aCA9IHBhcnNlQ2FsbGJhY2tVcmwodXJsKTtcblxuICBpZiAoIW9hdXRoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHN0b3JlZFN0YXRlID0gU3RvcmFnZS5nZXQob2F1dGguc3RhdGUpO1xuXG4gIGlmIChzdG9yZWRTdGF0ZSkge1xuICAgIHJldHVybiB7XG4gICAgICBwa2NlQ29kZVZlcmlmaWVyOiBzdG9yZWRTdGF0ZS5vcmlnaW5hbENvZGVWZXJpZmllcixcbiAgICAgIHJlZGlyZWN0VG86IHN0b3JlZFN0YXRlLnJlZGlyZWN0VG8sXG4gICAgICBjb2RlOiBvYXV0aC5jb2RlLFxuICAgICAgbmV3VXJsOiBvYXV0aC5uZXdVcmwsXG4gICAgICBjdXJyZW50U3RhdGU6IG9hdXRoLnN0YXRlLFxuICAgIH07XG4gIH1cbiAgdGhyb3cgRXJyb3IoJ1N0YXRlIGluIHVybCBkb2VzIG5vdCBtYXRjaCBsb2NhbGx5IHN0b3JlZCBzdGF0ZScpO1xufTsiXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tDYWxsYmFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jaGVja0NhbGxiYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFDQUFvQztBQUNwQyw4REFBdUM7QUFnQnZDLElBQU0sZ0JBQWdCLEdBQUcsVUFBQyxHQUFXO0lBQ25DLElBQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFcEMsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDckIsSUFBTSxhQUFXLEdBQTRCO1lBQzNDLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQztZQUNwQyxLQUFLLEVBQUUsU0FBUztTQUNqQixDQUFDO1FBQ0YsSUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RCxJQUFNLFdBQVcsR0FBRyxzQkFBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxJQUFNLGFBQVcsR0FBNEQsRUFBRSxDQUFDO1FBQ2hGLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsRUFBc0I7Z0JBQXJCLFFBQVEsUUFBQSxFQUFFLFVBQVUsUUFBQTtZQUN4RCxRQUFRLFFBQVEsRUFBRTtnQkFDaEIsS0FBSyxNQUFNO29CQUNULGFBQVcsQ0FBQyxJQUFJLEdBQUcsVUFBb0IsQ0FBQztvQkFDeEMsTUFBTTtnQkFDUixLQUFLLE9BQU87b0JBQ1YsYUFBVyxDQUFDLEtBQUssR0FBRyxVQUFvQixDQUFDO29CQUN6QyxNQUFNO2dCQUNSO29CQUNFLGFBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQ25DLE1BQU07YUFDVDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNuQyxhQUFXLENBQUMsTUFBTSxJQUFJLE1BQUksc0JBQVcsQ0FBQyxTQUFTLENBQUMsYUFBVyxDQUFHLENBQUM7U0FDaEU7UUFFRCxJQUFJLGFBQVcsQ0FBQyxJQUFJLElBQUksYUFBVyxDQUFDLEtBQUssRUFBRTtZQUN6QyxPQUFPLGFBQTZCLENBQUM7U0FDdEM7UUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVXLFFBQUEsYUFBYSxHQUFHLFVBQUMsR0FBVztJQUN2QyxJQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVwQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxJQUFNLFdBQVcsR0FBRyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0MsSUFBSSxXQUFXLEVBQUU7UUFDZixPQUFPO1lBQ0wsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLG9CQUFvQjtZQUNsRCxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVU7WUFDbEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDMUIsQ0FBQztLQUNIO0lBQ0QsTUFBTSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSAnLi9TdG9yYWdlJztcbmltcG9ydCBxdWVyeVN0cmluZyBmcm9tICdxdWVyeS1zdHJpbmcnO1xuXG50eXBlIE9hdXRoUGFyYW1zID0ge1xuICBwa2NlQ29kZVZlcmlmaWVyOiBzdHJpbmc7XG4gIHJlZGlyZWN0VG86IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuICBuZXdVcmw6IHN0cmluZztcbiAgY3VycmVudFN0YXRlOiBzdHJpbmc7XG59O1xuXG50eXBlIENhbGxiYWNrUGFyYW1zID0ge1xuICBjb2RlOiBzdHJpbmc7XG4gIHN0YXRlOiBzdHJpbmc7XG4gIG5ld1VybDogc3RyaW5nO1xufTtcblxuY29uc3QgcGFyc2VDYWxsYmFja1VybCA9ICh1cmw6IHN0cmluZyk6IENhbGxiYWNrUGFyYW1zIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcXVlcnlJbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG5cbiAgaWYgKHF1ZXJ5SW5kZXggIT09IC0xKSB7XG4gICAgY29uc3Qgb2F1dGhQYXJhbXM6IFBhcnRpYWw8Q2FsbGJhY2tQYXJhbXM+ID0ge1xuICAgICAgY29kZTogdW5kZWZpbmVkLFxuICAgICAgbmV3VXJsOiB1cmwuc3Vic3RyaW5nKDAsIHF1ZXJ5SW5kZXgpLFxuICAgICAgc3RhdGU6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGNvbnN0IHF1ZXJ5ID0gdXJsLnN1YnN0cmluZyhxdWVyeUluZGV4ICsgMSwgdXJsLmxlbmd0aCk7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBxdWVyeVN0cmluZy5wYXJzZShxdWVyeSk7XG4gICAgLy8gcXVlcnkgcGFyYW0gdHlwZXNcbiAgICBjb25zdCBvdGhlclBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgfCB1bmRlZmluZWQgfSA9IHt9O1xuICAgIE9iamVjdC5lbnRyaWVzKHF1ZXJ5UGFyYW1zKS5mb3JFYWNoKChbcXVlcnlLZXksIHF1ZXJ5VmFsdWVdKSA9PiB7XG4gICAgICBzd2l0Y2ggKHF1ZXJ5S2V5KSB7XG4gICAgICAgIGNhc2UgJ2NvZGUnOlxuICAgICAgICAgIG9hdXRoUGFyYW1zLmNvZGUgPSBxdWVyeVZhbHVlIGFzIHN0cmluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RhdGUnOlxuICAgICAgICAgIG9hdXRoUGFyYW1zLnN0YXRlID0gcXVlcnlWYWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgb3RoZXJQYXJhbXNbcXVlcnlLZXldID0gcXVlcnlWYWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhvdGhlclBhcmFtcykubGVuZ3RoKSB7XG4gICAgICBvYXV0aFBhcmFtcy5uZXdVcmwgKz0gYD8ke3F1ZXJ5U3RyaW5nLnN0cmluZ2lmeShvdGhlclBhcmFtcyl9YDtcbiAgICB9XG5cbiAgICBpZiAob2F1dGhQYXJhbXMuY29kZSAmJiBvYXV0aFBhcmFtcy5zdGF0ZSkge1xuICAgICAgcmV0dXJuIG9hdXRoUGFyYW1zIGFzIENhbGxiYWNrUGFyYW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0NhbGxiYWNrID0gKHVybDogc3RyaW5nKTogT2F1dGhQYXJhbXMgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBvYXV0aCA9IHBhcnNlQ2FsbGJhY2tVcmwodXJsKTtcblxuICBpZiAoIW9hdXRoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHN0b3JlZFN0YXRlID0gU3RvcmFnZS5nZXQob2F1dGguc3RhdGUpO1xuXG4gIGlmIChzdG9yZWRTdGF0ZSkge1xuICAgIHJldHVybiB7XG4gICAgICBwa2NlQ29kZVZlcmlmaWVyOiBzdG9yZWRTdGF0ZS5vcmlnaW5hbENvZGVWZXJpZmllcixcbiAgICAgIHJlZGlyZWN0VG86IHN0b3JlZFN0YXRlLnJlZGlyZWN0VG8sXG4gICAgICBjb2RlOiBvYXV0aC5jb2RlLFxuICAgICAgbmV3VXJsOiBvYXV0aC5uZXdVcmwsXG4gICAgICBjdXJyZW50U3RhdGU6IG9hdXRoLnN0YXRlLFxuICAgIH07XG4gIH1cbiAgdGhyb3cgRXJyb3IoJ1N0YXRlIGluIHVybCBkb2VzIG5vdCBtYXRjaCBsb2NhbGx5IHN0b3JlZCBzdGF0ZScpO1xufTsiXX0=
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.encodeBody = void 0;
exports.encodeBody = (body) => (Object.keys(body).reduce((acc, bodyKey) => {
const encodedKey = encodeURIComponent(bodyKey);
const encodedValue = encodeURIComponent(body[bodyKey]);
acc.push(`${encodedKey}=${encodedValue}`);
exports.encodeBody = function (body) { return (Object.keys(body).reduce(function (acc, bodyKey) {
var encodedKey = encodeURIComponent(bodyKey);
var encodedValue = encodeURIComponent(body[bodyKey]);
acc.push(encodedKey + "=" + encodedValue);
return acc;
}, []).join('&'));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RlQm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9lbmNvZGVCb2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsVUFBVSxHQUFHLENBQUMsSUFBK0IsRUFBVSxFQUFFLENBQUMsQ0FDckUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbEQsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdkQsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbmNvZGVCb2R5ID0gKGJvZHk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBzdHJpbmcgPT4gKFxuICBPYmplY3Qua2V5cyhib2R5KS5yZWR1Y2U8c3RyaW5nW10+KChhY2MsIGJvZHlLZXkpID0+IHtcbiAgICBjb25zdCBlbmNvZGVkS2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGJvZHlLZXkpO1xuICAgIGNvbnN0IGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChib2R5W2JvZHlLZXldKTtcbiAgICBhY2MucHVzaChgJHtlbmNvZGVkS2V5fT0ke2VuY29kZWRWYWx1ZX1gKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSkuam9pbignJicpXG4pO1xuIl19
}, []).join('&')); };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RlQm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9lbmNvZGVCb2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsVUFBVSxHQUFHLFVBQUMsSUFBK0IsSUFBYSxPQUFBLENBQ3JFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFXLFVBQUMsR0FBRyxFQUFFLE9BQU87SUFDOUMsSUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsSUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdkQsR0FBRyxDQUFDLElBQUksQ0FBSSxVQUFVLFNBQUksWUFBYyxDQUFDLENBQUM7SUFDMUMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUNqQixFQVBzRSxDQU90RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVuY29kZUJvZHkgPSAoYm9keTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZyA9PiAoXG4gIE9iamVjdC5rZXlzKGJvZHkpLnJlZHVjZTxzdHJpbmdbXT4oKGFjYywgYm9keUtleSkgPT4ge1xuICAgIGNvbnN0IGVuY29kZWRLZXkgPSBlbmNvZGVVUklDb21wb25lbnQoYm9keUtleSk7XG4gICAgY29uc3QgZW5jb2RlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KGJvZHlbYm9keUtleV0pO1xuICAgIGFjYy5wdXNoKGAke2VuY29kZWRLZXl9PSR7ZW5jb2RlZFZhbHVlfWApO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKS5qb2luKCcmJylcbik7XG4iXX0=

@@ -5,4 +5,4 @@ "use strict";

function generateRandomData(len) {
let array = [];
const { crypto } = window;
var array = [];
var crypto = window.crypto;
if (crypto && crypto.getRandomValues && window.Uint8Array) {

@@ -14,3 +14,3 @@ array = new Uint8Array(len);

array = new Array(len);
for (let j = 0; j < array.length; j += 1) {
for (var j = 0; j < array.length; j += 1) {
array[j] = Math.floor(256 * Math.random());

@@ -21,5 +21,5 @@ }

function generateRandomString(len, alphabet) {
const randomData = generateRandomData(len);
const chars = new Array(len);
for (let i = 0; i < len; i += 1) {
var randomData = generateRandomData(len);
var chars = new Array(len);
for (var i = 0; i < len; i += 1) {
chars[i] = alphabet.charCodeAt(randomData[i] % alphabet.length);

@@ -33,2 +33,2 @@ }

exports.generateCodeVerifier = generateCodeVerifier;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVDb2RlVmVyaWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZ2VuZXJhdGVDb2RlVmVyaWZpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsU0FBUyxrQkFBa0IsQ0FBQyxHQUFXO0lBRXJDLElBQUksS0FBSyxHQUF1QixFQUFFLENBQUM7SUFDbkMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUMxQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDekQsS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUdELEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3hDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUM1QztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsR0FBVyxFQUFFLFFBQWdCO0lBQ3pELE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMvQixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2pFO0lBQ0QsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQWdCLG9CQUFvQixDQUFDLEdBQVc7SUFDOUMsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsZ0VBQWdFLENBQUMsQ0FBQztBQUNyRyxDQUFDO0FBRkQsb0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21EYXRhKGxlbjogbnVtYmVyKTogVWludDhBcnJheSB8IGFueVtdIHtcbiAgLy8gdXNlIHdlYiBjcnlwdG8gQVBJcyBpZiBwb3NzaWJsZVxuICBsZXQgYXJyYXk6IFVpbnQ4QXJyYXkgfCBhbnlbXSA9IFtdO1xuICBjb25zdCB7IGNyeXB0byB9ID0gd2luZG93OyAvLyB8fCB3aW5kb3cubXNDcnlwdG87XG4gIGlmIChjcnlwdG8gJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiB3aW5kb3cuVWludDhBcnJheSkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvLyBmYWxsYmFjayB0byBNYXRoIHJhbmRvbVxuICBhcnJheSA9IG5ldyBBcnJheShsZW4pO1xuICBmb3IgKGxldCBqID0gMDsgaiA8IGFycmF5Lmxlbmd0aDsgaiArPSAxKSB7XG4gICAgYXJyYXlbal0gPSBNYXRoLmZsb29yKDI1NiAqIE1hdGgucmFuZG9tKCkpO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21TdHJpbmcobGVuOiBudW1iZXIsIGFscGhhYmV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByYW5kb21EYXRhID0gZ2VuZXJhdGVSYW5kb21EYXRhKGxlbik7XG4gIGNvbnN0IGNoYXJzID0gbmV3IEFycmF5KGxlbik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICBjaGFyc1tpXSA9IGFscGhhYmV0LmNoYXJDb2RlQXQocmFuZG9tRGF0YVtpXSAlIGFscGhhYmV0Lmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2hhcnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDb2RlVmVyaWZpZXIobGVuOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZ2VuZXJhdGVSYW5kb21TdHJpbmcobGVuLCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVDb2RlVmVyaWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZ2VuZXJhdGVDb2RlVmVyaWZpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsU0FBUyxrQkFBa0IsQ0FBQyxHQUFXO0lBRXJDLElBQUksS0FBSyxHQUF1QixFQUFFLENBQUM7SUFDM0IsSUFBQSxNQUFNLEdBQUssTUFBTSxPQUFYLENBQVk7SUFDMUIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQ3pELEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFHRCxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN4QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7S0FDNUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEdBQVcsRUFBRSxRQUFnQjtJQUN6RCxJQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxJQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDL0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNqRTtJQUNELE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxHQUFXO0lBQzlDLE9BQU8sb0JBQW9CLENBQUMsR0FBRyxFQUFFLGdFQUFnRSxDQUFDLENBQUM7QUFDckcsQ0FBQztBQUZELG9EQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tRGF0YShsZW46IG51bWJlcik6IFVpbnQ4QXJyYXkgfCBhbnlbXSB7XG4gIC8vIHVzZSB3ZWIgY3J5cHRvIEFQSXMgaWYgcG9zc2libGVcbiAgbGV0IGFycmF5OiBVaW50OEFycmF5IHwgYW55W10gPSBbXTtcbiAgY29uc3QgeyBjcnlwdG8gfSA9IHdpbmRvdzsgLy8gfHwgd2luZG93Lm1zQ3J5cHRvO1xuICBpZiAoY3J5cHRvICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgd2luZG93LlVpbnQ4QXJyYXkpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gTWF0aCByYW5kb21cbiAgYXJyYXkgPSBuZXcgQXJyYXkobGVuKTtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBhcnJheS5sZW5ndGg7IGogKz0gMSkge1xuICAgIGFycmF5W2pdID0gTWF0aC5mbG9vcigyNTYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tU3RyaW5nKGxlbjogbnVtYmVyLCBhbHBoYWJldDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmFuZG9tRGF0YSA9IGdlbmVyYXRlUmFuZG9tRGF0YShsZW4pO1xuICBjb25zdCBjaGFycyA9IG5ldyBBcnJheShsZW4pO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgY2hhcnNbaV0gPSBhbHBoYWJldC5jaGFyQ29kZUF0KHJhbmRvbURhdGFbaV0gJSBhbHBoYWJldC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNoYXJzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ29kZVZlcmlmaWVyKGxlbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdlbmVyYXRlUmFuZG9tU3RyaW5nKGxlbiwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Jyk7XG59XG4iXX0=

@@ -7,7 +7,7 @@ "use strict";

exports.generatePkceChallenge = void 0;
const base64_js_1 = __importDefault(require("base64-js"));
const js_sha256_1 = require("js-sha256");
var base64_js_1 = __importDefault(require("base64-js"));
var js_sha256_1 = require("js-sha256");
function generatePkceChallenge(codeVerifier) {
const hashBytes = new Uint8Array(js_sha256_1.sha256.arrayBuffer(codeVerifier));
const encodedHash = base64_js_1.default.fromByteArray(hashBytes)
var hashBytes = new Uint8Array(js_sha256_1.sha256.arrayBuffer(codeVerifier));
var encodedHash = base64_js_1.default.fromByteArray(hashBytes)
.replace(/\+/g, '-')

@@ -19,2 +19,2 @@ .replace(/\//g, '_')

exports.generatePkceChallenge = generatePkceChallenge;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVQa2NlQ2hhbGxlbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2dlbmVyYXRlUGtjZUNoYWxsZW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSwwREFBaUM7QUFDakMseUNBQW1DO0FBRW5DLFNBQWdCLHFCQUFxQixDQUFDLFlBQW9CO0lBQ3hELE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLGtCQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkUsTUFBTSxXQUFXLEdBQUcsbUJBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1NBQ2xELE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO1NBQ25CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO1NBR25CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEIsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQVRELHNEQVNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVXNlZCBieSBrZXljbG9hay1qc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2tleWNsb2FrL2tleWNsb2FrL2Jsb2IvbWFzdGVyL2FkYXB0ZXJzL29pZGMvanMvc3JjL21haW4vcmVzb3VyY2VzL2tleWNsb2FrLmpzXG5pbXBvcnQgYmFzZTY0anMgZnJvbSAnYmFzZTY0LWpzJztcbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gJ2pzLXNoYTI1Nic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBrY2VDaGFsbGVuZ2UoY29kZVZlcmlmaWVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBoYXNoQnl0ZXMgPSBuZXcgVWludDhBcnJheShzaGEyNTYuYXJyYXlCdWZmZXIoY29kZVZlcmlmaWVyKSk7XG4gIGNvbnN0IGVuY29kZWRIYXNoID0gYmFzZTY0anMuZnJvbUJ5dGVBcnJheShoYXNoQnl0ZXMpXG4gICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgLy8gSVQgSVMgTk9UIFVTRUxFU1NcbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbiAgICAucmVwbGFjZSgvXFw9L2csICcnKTtcbiAgcmV0dXJuIGVuY29kZWRIYXNoO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVQa2NlQ2hhbGxlbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2dlbmVyYXRlUGtjZUNoYWxsZW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSx3REFBaUM7QUFDakMsdUNBQW1DO0FBRW5DLFNBQWdCLHFCQUFxQixDQUFDLFlBQW9CO0lBQ3hELElBQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLGtCQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkUsSUFBTSxXQUFXLEdBQUcsbUJBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1NBQ2xELE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO1NBQ25CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO1NBR25CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEIsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQVRELHNEQVNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVXNlZCBieSBrZXljbG9hay1qc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2tleWNsb2FrL2tleWNsb2FrL2Jsb2IvbWFzdGVyL2FkYXB0ZXJzL29pZGMvanMvc3JjL21haW4vcmVzb3VyY2VzL2tleWNsb2FrLmpzXG5pbXBvcnQgYmFzZTY0anMgZnJvbSAnYmFzZTY0LWpzJztcbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gJ2pzLXNoYTI1Nic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBrY2VDaGFsbGVuZ2UoY29kZVZlcmlmaWVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBoYXNoQnl0ZXMgPSBuZXcgVWludDhBcnJheShzaGEyNTYuYXJyYXlCdWZmZXIoY29kZVZlcmlmaWVyKSk7XG4gIGNvbnN0IGVuY29kZWRIYXNoID0gYmFzZTY0anMuZnJvbUJ5dGVBcnJheShoYXNoQnl0ZXMpXG4gICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgLy8gSVQgSVMgTk9UIFVTRUxFU1NcbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbiAgICAucmVwbGFjZSgvXFw9L2csICcnKTtcbiAgcmV0dXJuIGVuY29kZWRIYXNoO1xufVxuIl19

@@ -5,4 +5,4 @@ "use strict";

exports.Storage = {
get(key) {
const storedStringified = localStorage.getItem(key);
get: function (key) {
var storedStringified = localStorage.getItem(key);
return storedStringified

@@ -12,9 +12,9 @@ ? JSON.parse(storedStringified)

},
set(key, value) {
set: function (key, value) {
localStorage.setItem(key, JSON.stringify(value));
},
remove(key) {
remove: function (key) {
localStorage.removeItem(key);
},
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9TdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsT0FBTyxHQUFHO0lBQ3JCLEdBQUcsQ0FBQyxHQUFXO1FBQ2IsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELE9BQU8saUJBQWlCO1lBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBQy9CLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEIsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBVTtRQUN6QixZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELE1BQU0sQ0FBQyxHQUFXO1FBQ2hCLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgU3RvcmFnZSA9IHtcbiAgZ2V0KGtleTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RvcmVkU3RyaW5naWZpZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIHJldHVybiBzdG9yZWRTdHJpbmdpZmllZFxuICAgICAgPyBKU09OLnBhcnNlKHN0b3JlZFN0cmluZ2lmaWVkKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgfSxcbiAgcmVtb3ZlKGtleTogc3RyaW5nKSB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgfSxcbn07XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9TdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsT0FBTyxHQUFHO0lBQ3JCLEdBQUcsRUFBSCxVQUFJLEdBQVc7UUFDYixJQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsT0FBTyxpQkFBaUI7WUFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7WUFDL0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixDQUFDO0lBRUQsR0FBRyxFQUFILFVBQUksR0FBVyxFQUFFLEtBQVU7UUFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxNQUFNLEVBQU4sVUFBTyxHQUFXO1FBQ2hCLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgU3RvcmFnZSA9IHtcbiAgZ2V0KGtleTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RvcmVkU3RyaW5naWZpZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIHJldHVybiBzdG9yZWRTdHJpbmdpZmllZFxuICAgICAgPyBKU09OLnBhcnNlKHN0b3JlZFN0cmluZ2lmaWVkKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgfSxcbiAgcmVtb3ZlKGtleTogc3RyaW5nKSB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgfSxcbn07XG4iXX0=
{
"name": "@mybiogen/auth-openid",
"version": "1.5.2",
"version": "1.5.3",
"description": "Authorization for OpenID",

@@ -35,3 +35,3 @@ "license": "MIT",

},
"gitHead": "c301d92c5328402ebd12daffb660c7a225c92f9e"
"gitHead": "9159aaac127690dc1b19e92c423fefbd5c3eb85c"
}

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