UNPKG

skapps-login

Version:

Login component for SKAPPS apps

187 lines (144 loc) 21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.acquireAccessToken = exports.getPublicClientApplication = exports.logoutRequest = exports.getLogoutRequest = exports.getRedirectRequest = exports.getMsalConfig = void 0; var _skappsDatatools = require("skapps-datatools"); var _skappsSettings = require("skapps-settings"); var _msalBrowser = require("@azure/msal-browser"); function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var getMsalConfig = function getMsalConfig(env) { var msalConfig = { auth: { clientId: _skappsSettings.S.getSpaTvClientClientId(env), authority: "".concat(_skappsSettings.S.getAzureAdMsalInstance(), "/").concat(_skappsSettings.S.getAzureAdTeamVervoortTenantId()), redirectUri: _skappsSettings.S.getSpaTvClientRedirectUri(env) //knownAuthorities: [`${S.getAzureAdMsalInstance()}/${S.getAzureAdTeamVervoortTenantId()}`], }, cache: { cacheLocation: "sessionStorage", // this configures where your cache will be stored storeAuthStateInCookie: false // set this to "true" if you are having issues on IE11 or Edge }, system: { loggerOptions: { loggerCallback: function loggerCallback(level, message, containsPii) { if (containsPii) { return; } switch (level) { case _msalBrowser.LogLevel.Error: console.error(message); return; case _msalBrowser.LogLevel.Info: console.info(message); return; case _msalBrowser.LogLevel.Verbose: console.debug(message); return; case _msalBrowser.LogLevel.Warning: console.warn(message); return; } }, piiLoggingEnabled: true }, windowHashTimeout: 60000, iframeHashTimeout: 6000, loadFrameTimeout: 0, asyncPopups: false } }; _skappsDatatools.TS.logDebug(_skappsDatatools.E.PAGENAME.SKAPPSLOGIN, "getMsalConfig").addVarObj([new _skappsDatatools.T.LogVar("MSALCONFIG", JSON.stringify(msalConfig))]).log(); return msalConfig; }; exports.getMsalConfig = getMsalConfig; var getRedirectRequest = function getRedirectRequest(env) { _skappsDatatools.TS.logDebug(_skappsDatatools.E.PAGENAME.SKAPPSLOGIN, "getRedirectRequest").addVarStr("ENV:" + env.toString()).log(); var redirectRequest = { scopes: ["User.Read"], extraScopesToConsent: ["api://" + _skappsSettings.S.getApiDataClientId(env) + "/" + _skappsSettings.S.getApiDataAcceptedScopes(env)] }; _skappsDatatools.TS.logDebug(_skappsDatatools.E.PAGENAME.SKAPPSLOGIN, "getRedirectRequest").addVarObj([new _skappsDatatools.T.LogVar("REDIRECTREQUEST", JSON.stringify(redirectRequest))]).log(); return redirectRequest; }; exports.getRedirectRequest = getRedirectRequest; var getLogoutRequest = function getLogoutRequest() { var logoutRequest = { postLogoutRedirectUri: window.location.origin }; _skappsDatatools.TS.logDebug(_skappsDatatools.E.PAGENAME.SKAPPSLOGIN, "getLogoutRequest").addVarObj([new _skappsDatatools.T.LogVar("LOGOUTREQUEST", JSON.stringify(logoutRequest))]).log(); return logoutRequest; }; exports.getLogoutRequest = getLogoutRequest; var logoutRequest = { postLogoutRedirectUri: window.location.origin }; exports.logoutRequest = logoutRequest; var getPublicClientApplication = function getPublicClientApplication(env) { return new _msalBrowser.PublicClientApplication(getMsalConfig(env)); }; exports.getPublicClientApplication = getPublicClientApplication; var acquireAccessToken = /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { var env, pca, activeAccount, request, authResult, _args = arguments; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: env = _args.length > 0 && _args[0] !== undefined ? _args[0] : _skappsDatatools.E.ENV.DEV; // this will only return a non-null value if you have logic somewhere else that calls the setActiveAccount API pca = getPublicClientApplication(env); activeAccount = pca.getActiveAccount(); request = { scopes: ["api://".concat(_skappsSettings.S.getApiDataClientId(env), "/").concat(_skappsSettings.S.getApiDataAcceptedScopes(env))], account: activeAccount }; _skappsDatatools.TS.logDebug(_skappsDatatools.E.PAGENAME.SKAPPSLOGIN, "acquireAccessToken").addVarObj([new _skappsDatatools.T.LogVar("SILENTREQUEST", JSON.stringify(request))]).log(); _context.prev = 5; _context.next = 8; return pca.acquireTokenSilent(request); case 8: authResult = _context.sent; _context.next = 23; break; case 11: _context.prev = 11; _context.t0 = _context["catch"](5); _skappsDatatools.TS.logDebug(_skappsDatatools.E.PAGENAME.SKAPPSLOGIN, "acquireAccessToken").addVarObj([new _skappsDatatools.T.LogVar("AUTH-INTERACTIONREQUIREDERROR", _context.t0 instanceof _msalBrowser.InteractionRequiredAuthError), new _skappsDatatools.T.LogVar("AUTH-ERROR", JSON.stringify(_context.t0)), new _skappsDatatools.T.LogVar("AUTH-RESULT", JSON.stringify(authResult))]).log(); if (!(_context.t0 instanceof _msalBrowser.InteractionRequiredAuthError)) { _context.next = 22; break; } _context.next = 17; return pca.acquireTokenRedirect(getRedirectRequest(env)); case 17: _context.next = 19; return pca.acquireTokenSilent(request); case 19: authResult = _context.sent; _context.next = 23; break; case 22: return _context.abrupt("return", ""); case 23: _skappsDatatools.TS.logDebug(_skappsDatatools.E.PAGENAME.SKAPPSLOGIN, "acquireAccessToken").addVarObj([new _skappsDatatools.T.LogVar("SILENTREQUEST", JSON.stringify(request)), new _skappsDatatools.T.LogVar("ACCESSTOKEN", authResult.accessToken)]).log(); return _context.abrupt("return", authResult.accessToken); case 25: case "end": return _context.stop(); } } }, _callee, null, [[5, 11]]); })); return function acquireAccessToken() { return _ref.apply(this, arguments); }; }(); exports.acquireAccessToken = acquireAccessToken; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Nc2FsQ29uZmlnLnRzeCJdLCJuYW1lcyI6WyJnZXRNc2FsQ29uZmlnIiwiZW52IiwibXNhbENvbmZpZyIsImF1dGgiLCJjbGllbnRJZCIsIlMiLCJnZXRTcGFUdkNsaWVudENsaWVudElkIiwiYXV0aG9yaXR5IiwiZ2V0QXp1cmVBZE1zYWxJbnN0YW5jZSIsImdldEF6dXJlQWRUZWFtVmVydm9vcnRUZW5hbnRJZCIsInJlZGlyZWN0VXJpIiwiZ2V0U3BhVHZDbGllbnRSZWRpcmVjdFVyaSIsImNhY2hlIiwiY2FjaGVMb2NhdGlvbiIsInN0b3JlQXV0aFN0YXRlSW5Db29raWUiLCJzeXN0ZW0iLCJsb2dnZXJPcHRpb25zIiwibG9nZ2VyQ2FsbGJhY2siLCJsZXZlbCIsIm1lc3NhZ2UiLCJjb250YWluc1BpaSIsIkxvZ0xldmVsIiwiRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJJbmZvIiwiaW5mbyIsIlZlcmJvc2UiLCJkZWJ1ZyIsIldhcm5pbmciLCJ3YXJuIiwicGlpTG9nZ2luZ0VuYWJsZWQiLCJ3aW5kb3dIYXNoVGltZW91dCIsImlmcmFtZUhhc2hUaW1lb3V0IiwibG9hZEZyYW1lVGltZW91dCIsImFzeW5jUG9wdXBzIiwiVFMiLCJsb2dEZWJ1ZyIsIkUiLCJQQUdFTkFNRSIsIlNLQVBQU0xPR0lOIiwiYWRkVmFyT2JqIiwiVCIsIkxvZ1ZhciIsIkpTT04iLCJzdHJpbmdpZnkiLCJsb2ciLCJnZXRSZWRpcmVjdFJlcXVlc3QiLCJhZGRWYXJTdHIiLCJ0b1N0cmluZyIsInJlZGlyZWN0UmVxdWVzdCIsInNjb3BlcyIsImV4dHJhU2NvcGVzVG9Db25zZW50IiwiZ2V0QXBpRGF0YUNsaWVudElkIiwiZ2V0QXBpRGF0YUFjY2VwdGVkU2NvcGVzIiwiZ2V0TG9nb3V0UmVxdWVzdCIsImxvZ291dFJlcXVlc3QiLCJwb3N0TG9nb3V0UmVkaXJlY3RVcmkiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIm9yaWdpbiIsImdldFB1YmxpY0NsaWVudEFwcGxpY2F0aW9uIiwiUHVibGljQ2xpZW50QXBwbGljYXRpb24iLCJhY3F1aXJlQWNjZXNzVG9rZW4iLCJFTlYiLCJERVYiLCJwY2EiLCJhY3RpdmVBY2NvdW50IiwiZ2V0QWN0aXZlQWNjb3VudCIsInJlcXVlc3QiLCJhY2NvdW50IiwiYWNxdWlyZVRva2VuU2lsZW50IiwiYXV0aFJlc3VsdCIsIkludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IiLCJhY3F1aXJlVG9rZW5SZWRpcmVjdCIsImFjY2Vzc1Rva2VuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUM7O0FBQ0Q7O0FBQ0E7Ozs7OztBQUdPLElBQU1BLGFBQTRDLEdBQUcsU0FBL0NBLGFBQStDLENBQUNDLEdBQUQsRUFBaUI7QUFDM0UsTUFBSUMsVUFBeUIsR0FBRztBQUM5QkMsSUFBQUEsSUFBSSxFQUFFO0FBQ0pDLE1BQUFBLFFBQVEsRUFBRUMsa0JBQUVDLHNCQUFGLENBQXlCTCxHQUF6QixDQUROO0FBRUpNLE1BQUFBLFNBQVMsWUFBS0Ysa0JBQUVHLHNCQUFGLEVBQUwsY0FBbUNILGtCQUFFSSw4QkFBRixFQUFuQyxDQUZMO0FBR0pDLE1BQUFBLFdBQVcsRUFBRUwsa0JBQUVNLHlCQUFGLENBQTRCVixHQUE1QixDQUhULENBSUo7O0FBSkksS0FEd0I7QUFPOUJXLElBQUFBLEtBQUssRUFBRTtBQUNMQyxNQUFBQSxhQUFhLEVBQUUsZ0JBRFY7QUFDNEI7QUFDakNDLE1BQUFBLHNCQUFzQixFQUFFLEtBRm5CLENBRTBCOztBQUYxQixLQVB1QjtBQVc5QkMsSUFBQUEsTUFBTSxFQUFFO0FBQ05DLE1BQUFBLGFBQWEsRUFBRTtBQUNYQyxRQUFBQSxjQUFjLEVBQUUsd0JBQUNDLEtBQUQsRUFBa0JDLE9BQWxCLEVBQW1DQyxXQUFuQyxFQUFrRTtBQUM5RSxjQUFJQSxXQUFKLEVBQWlCO0FBQ2I7QUFDSDs7QUFDRCxrQkFBUUYsS0FBUjtBQUNJLGlCQUFLRyxzQkFBU0MsS0FBZDtBQUNJQyxjQUFBQSxPQUFPLENBQUNDLEtBQVIsQ0FBY0wsT0FBZDtB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QUE1QixDQUZELENBRGIsRUFJRzFCLEdBSkg7O0FBZGdFLGtCQW1CNUQsdUJBQWEyQix5Q0FuQitDO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsbUJBb0J4RFAsR0FBRyxDQUFDUSxvQkFBSixDQUF5QjNCLGtCQUFrQixDQUFDOUMsR0FBRCxDQUEzQyxDQXBCd0Q7O0FBQUE7QUFBQTtBQUFBLG1CQXFCM0NpRSxHQUFHLENBQUNLLGtCQUFKLENBQXVCRixPQUF2QixDQXJCMkM7O0FBQUE7QUFxQjlERyxZQUFBQSxVQXJCOEQ7QUFBQTtBQUFBOztBQUFBO0FBQUEsNkNBdUJuRCxFQXZCbUQ7O0FBQUE7QUF5QmxFcEMsZ0NBQUdDLFFBQUgsQ0FBWUMsbUJBQUVDLFFBQUYsQ0FBV0MsV0FBdkIsRUFBb0Msb0JBQXBDLEVBQ0dDLFNBREgsQ0FDYSxDQUNULElBQUlDLG1CQUFFQyxNQUFOLENBQWEsZUFBYixFQUE4QkMsSUFBSSxDQUFDQyxTQUFMLENBQWV3QixPQUFmLENBQTlCLENBRFMsRUFFVCxJQUFJM0IsbUJBQUVDLE1BQU4sQ0FBYSxhQUFiLEVBQTRCNkIsVUFBVSxDQUFDRyxXQUF2QyxDQUZTLENBRGIsRUFJRzdCLEdBSkg7O0FBekJrRSw2Q0E4QjNEMEIsVUFBVSxDQUFDRyxXQTlCZ0Q7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBSDs7QUFBQSxrQkFBcERaLGtCQUFvRDtBQUFBO0FBQUE7QUFBQSxHQUExRCIsInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCB7IEUsIFQsIFRTIH0gZnJvbSBcInNrYXBwcy1kYXRhdG9vbHNcIjtcclxuaW1wb3J0IHsgUyB9IGZyb20gXCJza2FwcHMtc2V0dGluZ3NcIjtcclxuaW1wb3J0IHsgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvciwgQWNjb3VudEluZm8sIFNpbGVudFJlcXVlc3QsIEF1dGhlbnRpY2F0aW9uUmVzdWx0LCBFbmRTZXNzaW9uUmVxdWVzdCxcclxuICAgICAgICAgUmVkaXJlY3RSZXF1ZXN0LCBDb25maWd1cmF0aW9uLCBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiwgTG9nTGV2ZWwgfSBmcm9tIFwiQGF6dXJlL21zYWwtYnJvd3NlclwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE1zYWxDb25maWc6IChlbnY6IEUuRU5WKSA9PiBDb25maWd1cmF0aW9uID0gKGVudjogRS5FTlYgKSA9PiB7XHJcbiAgbGV0IG1zYWxDb25maWc6IENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICBhdXRoOiB7XHJcbiAgICAgIGNsaWVudElkOiBTLmdldFNwYVR2Q2xpZW50Q2xpZW50SWQoZW52KSxcclxuICAgICAgYXV0aG9yaXR5OiBgJHtTLmdldEF6dXJlQWRNc2FsSW5zdGFuY2UoKX0vJHtTLmdldEF6dXJlQWRUZWFtVmVydm9vcnRUZW5hbnRJZCgpfWAsXHJcbiAgICAgIHJlZGlyZWN0VXJpOiBTLmdldFNwYVR2Q2xpZW50UmVkaXJlY3RVcmkoZW52KSxcclxuICAgICAgLy9rbm93bkF1dGhvcml0aWVzOiBbYCR7Uy5nZXRBenVyZUFkTXNhbEluc3RhbmNlKCl9LyR7Uy5nZXRBenVyZUFkVGVhbVZlcnZvb3J0VGVuYW50SWQoKX1gXSxcclxuICAgIH0sXHJcbiAgICBjYWNoZToge1xyXG4gICAgICBjYWNoZUxvY2F0aW9uOiBcInNlc3Npb25TdG9yYWdlXCIsIC8vIHRoaXMgY29uZmlndXJlcyB3aGVyZSB5b3VyIGNhY2hlIHdpbGwgYmUgc3RvcmVkXHJcbiAgICAgIHN0b3JlQXV0aFN0YXRlSW5Db29raWU6IGZhbHNlLCAvLyBzZXQgdGhpcyB0byBcInRydWVcIiBpZiB5b3UgYXJlIGhhdmluZyBpc3N1ZXMgb24gSUUxMSBvciBFZGdlXHJcbiAgICB9LFxyXG4gICAgc3lzdGVtOiB7XHJcbiAgICAgIGxvZ2dlck9wdGlvbnM6IHtcclxuICAgICAgICAgIGxvZ2dlckNhbGxiYWNrOiAobGV2ZWw6IExvZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNvbnRhaW5zUGlpOiBib29sZWFuKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zUGlpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgc3dpdGNoIChsZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIExvZ0xldmVsLkVycm9yOlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5JbmZvOlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIExvZ0xldmVsLlZlcmJvc2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIExvZ0xldmVsLldhcm5pbmc6XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHBpaUxvZ2dpbmdFbmFibGVkOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHdpbmRvd0hhc2hUaW1lb3V0OiA2MDAwMCxcclxuICAgICAgaWZyYW1lSGFzaFRpbWVvdXQ6IDYwMDAsXHJcbiAgICAgIGxvYWRGcmFtZVRpbWVvdXQ6IDAsXHJcbiAgICAgIGFzeW5jUG9wdXBzOiBmYWxzZSxcclxuICAgIH1cclxuICB9O1xyXG4gIFRTLmxvZ0RlYnVnKEUuUEFHRU5BTUUuU0tBUFBTTE9HSU4sIFwiZ2V0TXNhbENvbmZpZ1wiKVxyXG4gICAgLmFkZFZhck9iaihbbmV3IFQuTG9nVmFyKFwiTVNBTENPTkZJR1wiLCBKU09OLnN0cmluZ2lmeShtc2FsQ29uZmlnKSldKVxyXG4gICAgLmxvZygpO1xyXG4gIHJldHVybiBtc2FsQ29uZmlnO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFJlZGlyZWN0UmVxdWVzdDogKGVudjogRS5FTlYpID0+IFJlZGlyZWN0UmVxdWVzdCA9IChlbnY6IEUuRU5WKSA9PiB7XHJcbiAgVFMubG9nRGVidWcoRS5QQUdFTkFNRS5TS0FQUFNMT0dJTiwgXCJnZXRSZWRpcmVjdFJlcXVlc3RcIikuYWRkVmFyU3RyKFwiRU5WOlwiK2Vudi50b1N0cmluZygpKS5sb2coKTtcclxuICBsZXQgcmVkaXJlY3RSZXF1ZXN0OiBSZWRpcmVjdFJlcXVlc3QgPSB7XHJcbiAgICBzY29wZXM6IFtcIlVzZXIuUmVhZFwiXSxcclxuICAgIGV4dHJhU2NvcGVzVG9Db25zZW50OiBbXCJhcGk6Ly9cIitTLmdldEFwaURhdGFDbGllbnRJZChlbnYpK1wiL1wiK1MuZ2V0QXBpRGF0YUFjY2VwdGVkU2NvcGVzKGVudildLFxyXG4gIH07XHJcbiAgVFMubG9nRGVidWcoRS5QQUdFTkFNRS5TS0FQUFNMT0dJTiwgXCJnZXRSZWRpcmVjdFJlcXVlc3RcIilcclxuICAgIC5hZGRWYXJPYmooW25ldyBULkxvZ1ZhcihcIlJFRElSRUNUUkVRVUVTVFwiLCBKU09OLnN0cmluZ2lmeShyZWRpcmVjdFJlcXVlc3QpKV0pXHJcbiAgICAubG9nKCk7XHJcbiAgcmV0dXJuIHJlZGlyZWN0UmVxdWVzdDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRMb2dvdXRSZXF1ZXN0OiAoKSA9PiBFbmRTZXNzaW9uUmVxdWVzdCA9ICgpID0+IHtcclxuICBsZXQgbG9nb3V0UmVxdWVzdDogRW5kU2Vzc2lvblJlcXVlc3QgPSB7XHJcbiAgICBwb3N0TG9nb3V0UmVkaXJlY3RVcmk6IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXHJcbiAgfTtcclxuICBUUy5sb2dEZWJ1ZyhFLlBBR0VOQU1FLlNLQVBQU0xPR0lOLCBcImdldExvZ291dFJlcXVlc3RcIilcclxuICAgIC5hZGRWYXJPYmooW25ldyBULkxvZ1ZhcihcIkxPR09VVFJFUVVFU1RcIiwgSlNPTi5zdHJpbmdpZnkobG9nb3V0UmVxdWVzdCkpXSlcclxuICAgIC5sb2coKTtcclxuICByZXR1cm4gbG9nb3V0UmVxdWVzdDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgbG9nb3V0UmVxdWVzdDogRW5kU2Vzc2lvblJlcXVlc3QgPSB7XHJcbiAgICBwb3N0TG9nb3V0UmVkaXJlY3RVcmk6IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0UHVibGljQ2xpZW50QXBwbGljYXRpb246IChlbnY6IEUuRU5WKSA9PiBQdWJsaWNDbGllbnRBcHBsaWNhdGlvbiA9IChlbnY6IEUuRU5WICkgPT4ge1xyXG4gIHJldHVybiBuZXcgUHVibGljQ2xpZW50QXBwbGljYXRpb24oZ2V0TXNhbENvbmZpZyhlbnYpKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBhY3F1aXJlQWNjZXNzVG9rZW4gOiAoZW52OiBFLkVOVikgPT4gUHJvbWlzZTxzdHJpbmc+ID0gYXN5bmMgKGVudjogRS5FTlYgPSBFLkVOVi5ERVYpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xyXG4gIC8vIHRoaXMgd2lsbCBvbmx5IHJldHVybiBhIG5vbi1udWxsIHZhbHVlIGlmIHlvdSBoYXZlIGxvZ2ljIHNvbWV3aGVyZSBlbHNlIHRoYXQgY2FsbHMgdGhlIHNldEFjdGl2ZUFjY291bnQgQVBJXHJcbiAgbGV0IHBjYTogUHVibGljQ2xpZW50QXBwbGljYXRpb24gPSBnZXRQdWJsaWNDbGllbnRBcHBsaWNhdGlvbihlbnYpO1xyXG4gIGxldCBhY3RpdmVBY2NvdW50OkFjY291bnRJbmZvID0gcGNhLmdldEFjdGl2ZUFjY291bnQoKTtcclxuICBsZXQgcmVxdWVzdDogU2lsZW50UmVxdWVzdCA9IHtcclxuICAgICAgc2NvcGVzOiBbYGFwaTovLyR7Uy5nZXRBcGlEYXRhQ2xpZW50SWQoZW52KX0vJHtTLmdldEFwaURhdGFBY2NlcHRlZFNjb3BlcyhlbnYpfWBdLFxyXG4gICAgICBhY2NvdW50OiBhY3RpdmVBY2NvdW50LFxyXG4gIH07XHJcbiAgVFMubG9nRGVidWcoRS5QQUdFTkFNRS5TS0FQUFNMT0dJTiwgXCJhY3F1aXJlQWNjZXNzVG9rZW5cIilcclxuICAgIC5hZGRWYXJPYmooW25ldyBULkxvZ1ZhcihcIlNJTEVOVFJFUVVFU1RcIiwgSlNPTi5zdHJpbmdpZnkocmVxdWVzdCkpXSlcclxuICAgIC5sb2coKTtcclxuICBsZXQgYXV0aFJlc3VsdDogQXV0aGVudGljYXRpb25SZXN1bHQ7XHJcbiAgdHJ5IHsgYXV0aFJlc3VsdCA9IGF3YWl0IHBjYS5hY3F1aXJlVG9rZW5TaWxlbnQocmVxdWVzdCk7IH1cclxuICBjYXRjaCAoZTogYW55KSB7XHJcbiAgICBUUy5sb2dEZWJ1ZyhFLlBBR0VOQU1FLlNLQVBQU0xPR0lOLCBcImFjcXVpcmVBY2Nlc3NUb2tlblwiKVxyXG4gICAgICAuYWRkVmFyT2JqKFtuZXcgVC5Mb2dWYXIoXCJBVVRILUlOVEVSQUNUSU9OUkVRVUlSRURFUlJPUlwiLChlIGluc3RhbmNlb2YgSW50ZXJhY3Rpb25SZXF1aXJlZEF1dGhFcnJvcikpLFxyXG4gICAgICAgICAgICAgICAgICBuZXcgVC5Mb2dWYXIoXCJBVVRILUVSUk9SXCIsIEpTT04uc3RyaW5naWZ5KGUpKSxcclxuICAgICAgICAgICAgICAgICAgbmV3IFQuTG9nVmFyKFwiQVVUSC1SRVNVTFRcIiwgSlNPTi5zdHJpbmdpZnkoYXV0aFJlc3VsdCkpXSlcclxuICAgICAgLmxvZygpO1xyXG4gICAgaWYgKGUgaW5zdGFuY2VvZiBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yKSB7XHJcbiAgICAgIGF3YWl0IHBjYS5hY3F1aXJlVG9rZW5SZWRpcmVjdChnZXRSZWRpcmVjdFJlcXVlc3QoZW52KSk7XHJcbiAgICAgIGF1dGhSZXN1bHQgPSBhd2FpdCBwY2EuYWNxdWlyZVRva2VuU2lsZW50KHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7cmV0dXJuIFwiXCI7fVxyXG4gIH1cclxuICBUUy5sb2dEZWJ1ZyhFLlBBR0VOQU1FLlNLQVBQU0xPR0lOLCBcImFjcXVpcmVBY2Nlc3NUb2tlblwiKVxyXG4gICAgLmFkZFZhck9iaihbXHJcbiAgICAgIG5ldyBULkxvZ1ZhcihcIlNJTEVOVFJFUVVFU1RcIiwgSlNPTi5zdHJpbmdpZnkocmVxdWVzdCkpLFxyXG4gICAgICBuZXcgVC5Mb2dWYXIoXCJBQ0NFU1NUT0tFTlwiLCBhdXRoUmVzdWx0LmFjY2Vzc1Rva2VuKV0pXHJcbiAgICAubG9nKCk7XHJcbiAgcmV0dXJuIGF1dGhSZXN1bHQuYWNjZXNzVG9rZW47XHJcbn07Il19