{"version":3,"file":"@oidc-client-eaf8b3d9.js","sources":["../../../node_modules/oidc-client-ts/dist/esm/oidc-client-ts.js"],"sourcesContent":["// src/utils/CryptoUtils.ts\nimport CryptoJS from \"crypto-js/core.js\";\nimport sha256 from \"crypto-js/sha256.js\";\nimport Base64 from \"crypto-js/enc-base64.js\";\nimport Utf8 from \"crypto-js/enc-utf8.js\";\n\n// src/utils/Logger.ts\nvar nopLogger = {\n debug: () => void 0,\n info: () => void 0,\n warn: () => void 0,\n error: () => void 0\n};\nvar level;\nvar logger;\nvar Log = /* @__PURE__ */ ((Log2) => {\n Log2[Log2[\"NONE\"] = 0] = \"NONE\";\n Log2[Log2[\"ERROR\"] = 1] = \"ERROR\";\n Log2[Log2[\"WARN\"] = 2] = \"WARN\";\n Log2[Log2[\"INFO\"] = 3] = \"INFO\";\n Log2[Log2[\"DEBUG\"] = 4] = \"DEBUG\";\n return Log2;\n})(Log || {});\n((Log2) => {\n function reset() {\n level = 3 /* INFO */;\n logger = nopLogger;\n }\n Log2.reset = reset;\n function setLevel(value) {\n if (!(0 /* NONE */ <= value && value <= 4 /* DEBUG */)) {\n throw new Error(\"Invalid log level\");\n }\n level = value;\n }\n Log2.setLevel = setLevel;\n function setLogger(value) {\n logger = value;\n }\n Log2.setLogger = setLogger;\n})(Log || (Log = {}));\nvar Logger = class {\n constructor(_name) {\n this._name = _name;\n }\n /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n debug(...args) {\n if (level >= 4 /* DEBUG */) {\n logger.debug(Logger._format(this._name, this._method), ...args);\n }\n }\n info(...args) {\n if (level >= 3 /* INFO */) {\n logger.info(Logger._format(this._name, this._method), ...args);\n }\n }\n warn(...args) {\n if (level >= 2 /* WARN */) {\n logger.warn(Logger._format(this._name, this._method), ...args);\n }\n }\n error(...args) {\n if (level >= 1 /* ERROR */) {\n logger.error(Logger._format(this._name, this._method), ...args);\n }\n }\n /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */\n throw(err) {\n this.error(err);\n throw err;\n }\n create(method) {\n const methodLogger = Object.create(this);\n methodLogger._method = method;\n methodLogger.debug(\"begin\");\n return methodLogger;\n }\n static createStatic(name, staticMethod) {\n const staticLogger = new Logger(`${name}.${staticMethod}`);\n staticLogger.debug(\"begin\");\n return staticLogger;\n }\n static _format(name, method) {\n const prefix = `[${name}]`;\n return method ? `${prefix} ${method}:` : prefix;\n }\n /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n // helpers for static class methods\n static debug(name, ...args) {\n if (level >= 4 /* DEBUG */) {\n logger.debug(Logger._format(name), ...args);\n }\n }\n static info(name, ...args) {\n if (level >= 3 /* INFO */) {\n logger.info(Logger._format(name), ...args);\n }\n }\n static warn(name, ...args) {\n if (level >= 2 /* WARN */) {\n logger.warn(Logger._format(name), ...args);\n }\n }\n static error(name, ...args) {\n if (level >= 1 /* ERROR */) {\n logger.error(Logger._format(name), ...args);\n }\n }\n /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */\n};\nLog.reset();\n\n// src/utils/CryptoUtils.ts\nvar UUID_V4_TEMPLATE = \"10000000-1000-4000-8000-100000000000\";\nvar CryptoUtils = class {\n static _randomWord() {\n return CryptoJS.lib.WordArray.random(1).words[0];\n }\n /**\n * Generates RFC4122 version 4 guid\n */\n static generateUUIDv4() {\n const uuid = UUID_V4_TEMPLATE.replace(\n /[018]/g,\n (c) => (+c ^ CryptoUtils._randomWord() & 15 >> +c / 4).toString(16)\n );\n return uuid.replace(/-/g, \"\");\n }\n /**\n * PKCE: Generate a code verifier\n */\n static generateCodeVerifier() {\n return CryptoUtils.generateUUIDv4() + CryptoUtils.generateUUIDv4() + CryptoUtils.generateUUIDv4();\n }\n /**\n * PKCE: Generate a code challenge\n */\n static generateCodeChallenge(code_verifier) {\n try {\n const hashed = sha256(code_verifier);\n return Base64.stringify(hashed).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n } catch (err) {\n Logger.error(\"CryptoUtils.generateCodeChallenge\", err);\n throw err;\n }\n }\n /**\n * Generates a base64-encoded string for a basic auth header\n */\n static generateBasicAuth(client_id, client_secret) {\n const basicAuth = Utf8.parse([client_id, client_secret].join(\":\"));\n return Base64.stringify(basicAuth);\n }\n};\n\n// src/utils/Event.ts\nvar Event = class {\n constructor(_name) {\n this._name = _name;\n this._logger = new Logger(`Event('${this._name}')`);\n this._callbacks = [];\n }\n addHandler(cb) {\n this._callbacks.push(cb);\n return () => this.removeHandler(cb);\n }\n removeHandler(cb) {\n const idx = this._callbacks.lastIndexOf(cb);\n if (idx >= 0) {\n this._callbacks.splice(idx, 1);\n }\n }\n raise(...ev) {\n this._logger.debug(\"raise:\", ...ev);\n for (const cb of this._callbacks) {\n void cb(...ev);\n }\n }\n};\n\n// src/utils/JwtUtils.ts\nimport jwt_decode from \"jwt-decode\";\nvar JwtUtils = class {\n // IMPORTANT: doesn't validate the token\n static decode(token) {\n try {\n return jwt_decode(token);\n } catch (err) {\n Logger.error(\"JwtUtils.decode\", err);\n throw err;\n }\n }\n};\n\n// src/utils/PopupUtils.ts\nvar PopupUtils = class {\n /**\n * Populates a map of window features with a placement centered in front of\n * the current window. If no explicit width is given, a default value is\n * binned into [800, 720, 600, 480, 360] based on the current window's width.\n */\n static center({ ...features }) {\n var _a, _b, _c;\n if (features.width == null)\n features.width = (_a = [800, 720, 600, 480].find((width) => width <= window.outerWidth / 1.618)) != null ? _a : 360;\n (_b = features.left) != null ? _b : features.left = Math.max(0, Math.round(window.screenX + (window.outerWidth - features.width) / 2));\n if (features.height != null)\n (_c = features.top) != null ? _c : features.top = Math.max(0, Math.round(window.screenY + (window.outerHeight - features.height) / 2));\n return features;\n }\n static serialize(features) {\n return Object.entries(features).filter(([, value]) => value != null).map(([key, value]) => `${key}=${typeof value !== \"boolean\" ? value : value ? \"yes\" : \"no\"}`).join(\",\");\n }\n};\n\n// src/utils/Timer.ts\nvar Timer = class extends Event {\n constructor() {\n super(...arguments);\n this._logger = new Logger(`Timer('${this._name}')`);\n this._timerHandle = null;\n this._expiration = 0;\n this._callback = () => {\n const diff = this._expiration - Timer.getEpochTime();\n this._logger.debug(\"timer completes in\", diff);\n if (this._expiration <= Timer.getEpochTime()) {\n this.cancel();\n super.raise();\n }\n };\n }\n // get the time\n static getEpochTime() {\n return Math.floor(Date.now() / 1e3);\n }\n init(durationInSeconds) {\n const logger2 = this._logger.create(\"init\");\n durationInSeconds = Math.max(Math.floor(durationInSeconds), 1);\n const expiration = Timer.getEpochTime() + durationInSeconds;\n if (this.expiration === expiration && this._timerHandle) {\n logger2.debug(\"skipping since already initialized for expiration at\", this.expiration);\n return;\n }\n this.cancel();\n logger2.debug(\"using duration\", durationInSeconds);\n this._expiration = expiration;\n const timerDurationInSeconds = Math.min(durationInSeconds, 5);\n this._timerHandle = setInterval(this._callback, timerDurationInSeconds * 1e3);\n }\n get expiration() {\n return this._expiration;\n }\n cancel() {\n this._logger.create(\"cancel\");\n if (this._timerHandle) {\n clearInterval(this._timerHandle);\n this._timerHandle = null;\n }\n }\n};\n\n// src/utils/UrlUtils.ts\nvar UrlUtils = class {\n static readParams(url, responseMode = \"query\") {\n if (!url)\n throw new TypeError(\"Invalid URL\");\n const parsedUrl = new URL(url, \"http://127.0.0.1\");\n const params = parsedUrl[responseMode === \"fragment\" ? \"hash\" : \"search\"];\n return new URLSearchParams(params.slice(1));\n }\n};\n\n// src/errors/ErrorResponse.ts\nvar ErrorResponse = class extends Error {\n constructor(args, form) {\n var _a, _b, _c;\n super(args.error_description || args.error || \"\");\n this.form = form;\n /** Marker to detect class: \"ErrorResponse\" */\n this.name = \"ErrorResponse\";\n if (!args.error) {\n Logger.error(\"ErrorResponse\", \"No error passed\");\n throw new Error(\"No error passed\");\n }\n this.error = args.error;\n this.error_description = (_a = args.error_description) != null ? _a : null;\n this.error_uri = (_b = args.error_uri) != null ? _b : null;\n this.state = args.userState;\n this.session_state = (_c = args.session_state) != null ? _c : null;\n }\n};\n\n// src/errors/ErrorTimeout.ts\nvar ErrorTimeout = class extends Error {\n constructor(message) {\n super(message);\n /** Marker to detect class: \"ErrorTimeout\" */\n this.name = \"ErrorTimeout\";\n }\n};\n\n// src/AccessTokenEvents.ts\nvar AccessTokenEvents = class {\n constructor(args) {\n this._logger = new Logger(\"AccessTokenEvents\");\n this._expiringTimer = new Timer(\"Access token expiring\");\n this._expiredTimer = new Timer(\"Access token expired\");\n this._expiringNotificationTimeInSeconds = args.expiringNotificationTimeInSeconds;\n }\n load(container) {\n const logger2 = this._logger.create(\"load\");\n if (container.access_token && container.expires_in !== void 0) {\n const duration = container.expires_in;\n logger2.debug(\"access token present, remaining duration:\", duration);\n if (duration > 0) {\n let expiring = duration - this._expiringNotificationTimeInSeconds;\n if (expiring <= 0) {\n expiring = 1;\n }\n logger2.debug(\"registering expiring timer, raising in\", expiring, \"seconds\");\n this._expiringTimer.init(expiring);\n } else {\n logger2.debug(\"canceling existing expiring timer because we're past expiration.\");\n this._expiringTimer.cancel();\n }\n const expired = duration + 1;\n logger2.debug(\"registering expired timer, raising in\", expired, \"seconds\");\n this._expiredTimer.init(expired);\n } else {\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n }\n unload() {\n this._logger.debug(\"unload: canceling existing access token timers\");\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n /**\n * Add callback: Raised prior to the access token expiring.\n */\n addAccessTokenExpiring(cb) {\n return this._expiringTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised prior to the access token expiring.\n */\n removeAccessTokenExpiring(cb) {\n this._expiringTimer.removeHandler(cb);\n }\n /**\n * Add callback: Raised after the access token has expired.\n */\n addAccessTokenExpired(cb) {\n return this._expiredTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised after the access token has expired.\n */\n removeAccessTokenExpired(cb) {\n this._expiredTimer.removeHandler(cb);\n }\n};\n\n// src/CheckSessionIFrame.ts\nvar CheckSessionIFrame = class {\n constructor(_callback, _client_id, url, _intervalInSeconds, _stopOnError) {\n this._callback = _callback;\n this._client_id = _client_id;\n this._intervalInSeconds = _intervalInSeconds;\n this._stopOnError = _stopOnError;\n this._logger = new Logger(\"CheckSessionIFrame\");\n this._timer = null;\n this._session_state = null;\n this._message = (e) => {\n if (e.origin === this._frame_origin && e.source === this._frame.contentWindow) {\n if (e.data === \"error\") {\n this._logger.error(\"error message from check session op iframe\");\n if (this._stopOnError) {\n this.stop();\n }\n } else if (e.data === \"changed\") {\n this._logger.debug(\"changed message from check session op iframe\");\n this.stop();\n void this._callback();\n } else {\n this._logger.debug(e.data + \" message from check session op iframe\");\n }\n }\n };\n const parsedUrl = new URL(url);\n this._frame_origin = parsedUrl.origin;\n this._frame = window.document.createElement(\"iframe\");\n this._frame.style.visibility = \"hidden\";\n this._frame.style.position = \"fixed\";\n this._frame.style.left = \"-1000px\";\n this._frame.style.top = \"0\";\n this._frame.width = \"0\";\n this._frame.height = \"0\";\n this._frame.src = parsedUrl.href;\n }\n load() {\n return new Promise((resolve) => {\n this._frame.onload = () => {\n resolve();\n };\n window.document.body.appendChild(this._frame);\n window.addEventListener(\"message\", this._message, false);\n });\n }\n start(session_state) {\n if (this._session_state === session_state) {\n return;\n }\n this._logger.create(\"start\");\n this.stop();\n this._session_state = session_state;\n const send = () => {\n if (!this._frame.contentWindow || !this._session_state) {\n return;\n }\n this._frame.contentWindow.postMessage(this._client_id + \" \" + this._session_state, this._frame_origin);\n };\n send();\n this._timer = setInterval(send, this._intervalInSeconds * 1e3);\n }\n stop() {\n this._logger.create(\"stop\");\n this._session_state = null;\n if (this._timer) {\n clearInterval(this._timer);\n this._timer = null;\n }\n }\n};\n\n// src/InMemoryWebStorage.ts\nvar InMemoryWebStorage = class {\n constructor() {\n this._logger = new Logger(\"InMemoryWebStorage\");\n this._data = {};\n }\n clear() {\n this._logger.create(\"clear\");\n this._data = {};\n }\n getItem(key) {\n this._logger.create(`getItem('${key}')`);\n return this._data[key];\n }\n setItem(key, value) {\n this._logger.create(`setItem('${key}')`);\n this._data[key] = value;\n }\n removeItem(key) {\n this._logger.create(`removeItem('${key}')`);\n delete this._data[key];\n }\n get length() {\n return Object.getOwnPropertyNames(this._data).length;\n }\n key(index) {\n return Object.getOwnPropertyNames(this._data)[index];\n }\n};\n\n// src/JsonService.ts\nvar JsonService = class {\n constructor(additionalContentTypes = [], _jwtHandler = null, _extraHeaders = {}) {\n this._jwtHandler = _jwtHandler;\n this._extraHeaders = _extraHeaders;\n this._logger = new Logger(\"JsonService\");\n this._contentTypes = [];\n this._contentTypes.push(...additionalContentTypes, \"application/json\");\n if (_jwtHandler) {\n this._contentTypes.push(\"application/jwt\");\n }\n }\n async fetchWithTimeout(input, init = {}) {\n const { timeoutInSeconds, ...initFetch } = init;\n if (!timeoutInSeconds) {\n return await fetch(input, initFetch);\n }\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutInSeconds * 1e3);\n try {\n const response = await fetch(input, {\n ...init,\n signal: controller.signal\n });\n return response;\n } catch (err) {\n if (err instanceof DOMException && err.name === \"AbortError\") {\n throw new ErrorTimeout(\"Network timed out\");\n }\n throw err;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n async getJson(url, {\n token,\n credentials\n } = {}) {\n const logger2 = this._logger.create(\"getJson\");\n const headers = {\n \"Accept\": this._contentTypes.join(\", \")\n };\n if (token) {\n logger2.debug(\"token passed, setting Authorization header\");\n headers[\"Authorization\"] = \"Bearer \" + token;\n }\n this.appendExtraHeaders(headers);\n let response;\n try {\n logger2.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"GET\", headers, credentials });\n } catch (err) {\n logger2.error(\"Network Error\");\n throw err;\n }\n logger2.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find((item) => contentType.startsWith(item))) {\n logger2.throw(new Error(`Invalid response Content-Type: ${contentType != null ? contentType : \"undefined\"}, from URL: ${url}`));\n }\n if (response.ok && this._jwtHandler && (contentType == null ? void 0 : contentType.startsWith(\"application/jwt\"))) {\n return await this._jwtHandler(await response.text());\n }\n let json;\n try {\n json = await response.json();\n } catch (err) {\n logger2.error(\"Error parsing JSON response\", err);\n if (response.ok)\n throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n if (!response.ok) {\n logger2.error(\"Error from server:\", json);\n if (json.error) {\n throw new ErrorResponse(json);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n return json;\n }\n async postForm(url, {\n body,\n basicAuth,\n timeoutInSeconds,\n initCredentials\n }) {\n const logger2 = this._logger.create(\"postForm\");\n const headers = {\n \"Accept\": this._contentTypes.join(\", \"),\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n };\n if (basicAuth !== void 0) {\n headers[\"Authorization\"] = \"Basic \" + basicAuth;\n }\n this.appendExtraHeaders(headers);\n let response;\n try {\n logger2.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"POST\", headers, body, timeoutInSeconds, credentials: initCredentials });\n } catch (err) {\n logger2.error(\"Network error\");\n throw err;\n }\n logger2.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find((item) => contentType.startsWith(item))) {\n throw new Error(`Invalid response Content-Type: ${contentType != null ? contentType : \"undefined\"}, from URL: ${url}`);\n }\n const responseText = await response.text();\n let json = {};\n if (responseText) {\n try {\n json = JSON.parse(responseText);\n } catch (err) {\n logger2.error(\"Error parsing JSON response\", err);\n if (response.ok)\n throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n }\n if (!response.ok) {\n logger2.error(\"Error from server:\", json);\n if (json.error) {\n throw new ErrorResponse(json, body);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n return json;\n }\n appendExtraHeaders(headers) {\n const logger2 = this._logger.create(\"appendExtraHeaders\");\n const customKeys = Object.keys(this._extraHeaders);\n const protectedHeaders = [\n \"authorization\",\n \"accept\",\n \"content-type\"\n ];\n if (customKeys.length === 0) {\n return;\n }\n customKeys.forEach((headerName) => {\n if (protectedHeaders.includes(headerName.toLocaleLowerCase())) {\n logger2.warn(\"Protected header could not be overridden\", headerName, protectedHeaders);\n return;\n }\n const content = typeof this._extraHeaders[headerName] === \"function\" ? this._extraHeaders[headerName]() : this._extraHeaders[headerName];\n if (content && content !== \"\") {\n headers[headerName] = content;\n }\n });\n }\n};\n\n// src/MetadataService.ts\nvar MetadataService = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"MetadataService\");\n this._signingKeys = null;\n this._metadata = null;\n this._metadataUrl = this._settings.metadataUrl;\n this._jsonService = new JsonService(\n [\"application/jwk-set+json\"],\n null,\n this._settings.extraHeaders\n );\n if (this._settings.signingKeys) {\n this._logger.debug(\"using signingKeys from settings\");\n this._signingKeys = this._settings.signingKeys;\n }\n if (this._settings.metadata) {\n this._logger.debug(\"using metadata from settings\");\n this._metadata = this._settings.metadata;\n }\n if (this._settings.fetchRequestCredentials) {\n this._logger.debug(\"using fetchRequestCredentials from settings\");\n this._fetchRequestCredentials = this._settings.fetchRequestCredentials;\n }\n }\n resetSigningKeys() {\n this._signingKeys = null;\n }\n async getMetadata() {\n const logger2 = this._logger.create(\"getMetadata\");\n if (this._metadata) {\n logger2.debug(\"using cached values\");\n return this._metadata;\n }\n if (!this._metadataUrl) {\n logger2.throw(new Error(\"No authority or metadataUrl configured on settings\"));\n throw null;\n }\n logger2.debug(\"getting metadata from\", this._metadataUrl);\n const metadata = await this._jsonService.getJson(this._metadataUrl, { credentials: this._fetchRequestCredentials });\n logger2.debug(\"merging remote JSON with seed metadata\");\n this._metadata = Object.assign({}, this._settings.metadataSeed, metadata);\n return this._metadata;\n }\n getIssuer() {\n return this._getMetadataProperty(\"issuer\");\n }\n getAuthorizationEndpoint() {\n return this._getMetadataProperty(\"authorization_endpoint\");\n }\n getUserInfoEndpoint() {\n return this._getMetadataProperty(\"userinfo_endpoint\");\n }\n getTokenEndpoint(optional = true) {\n return this._getMetadataProperty(\"token_endpoint\", optional);\n }\n getCheckSessionIframe() {\n return this._getMetadataProperty(\"check_session_iframe\", true);\n }\n getEndSessionEndpoint() {\n return this._getMetadataProperty(\"end_session_endpoint\", true);\n }\n getRevocationEndpoint(optional = true) {\n return this._getMetadataProperty(\"revocation_endpoint\", optional);\n }\n getKeysEndpoint(optional = true) {\n return this._getMetadataProperty(\"jwks_uri\", optional);\n }\n async _getMetadataProperty(name, optional = false) {\n const logger2 = this._logger.create(`_getMetadataProperty('${name}')`);\n const metadata = await this.getMetadata();\n logger2.debug(\"resolved\");\n if (metadata[name] === void 0) {\n if (optional === true) {\n logger2.warn(\"Metadata does not contain optional property\");\n return void 0;\n }\n logger2.throw(new Error(\"Metadata does not contain property \" + name));\n }\n return metadata[name];\n }\n async getSigningKeys() {\n const logger2 = this._logger.create(\"getSigningKeys\");\n if (this._signingKeys) {\n logger2.debug(\"returning signingKeys from cache\");\n return this._signingKeys;\n }\n const jwks_uri = await this.getKeysEndpoint(false);\n logger2.debug(\"got jwks_uri\", jwks_uri);\n const keySet = await this._jsonService.getJson(jwks_uri);\n logger2.debug(\"got key set\", keySet);\n if (!Array.isArray(keySet.keys)) {\n logger2.throw(new Error(\"Missing keys on keyset\"));\n throw null;\n }\n this._signingKeys = keySet.keys;\n return this._signingKeys;\n }\n};\n\n// src/WebStorageStateStore.ts\nvar WebStorageStateStore = class {\n constructor({\n prefix = \"oidc.\",\n store = localStorage\n } = {}) {\n this._logger = new Logger(\"WebStorageStateStore\");\n this._store = store;\n this._prefix = prefix;\n }\n async set(key, value) {\n this._logger.create(`set('${key}')`);\n key = this._prefix + key;\n await this._store.setItem(key, value);\n }\n async get(key) {\n this._logger.create(`get('${key}')`);\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n return item;\n }\n async remove(key) {\n this._logger.create(`remove('${key}')`);\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n await this._store.removeItem(key);\n return item;\n }\n async getAllKeys() {\n this._logger.create(\"getAllKeys\");\n const len = await this._store.length;\n const keys = [];\n for (let index = 0; index < len; index++) {\n const key = await this._store.key(index);\n if (key && key.indexOf(this._prefix) === 0) {\n keys.push(key.substr(this._prefix.length));\n }\n }\n return keys;\n }\n};\n\n// src/OidcClientSettings.ts\nvar DefaultResponseType = \"code\";\nvar DefaultScope = \"openid\";\nvar DefaultClientAuthentication = \"client_secret_post\";\nvar DefaultResponseMode = \"query\";\nvar DefaultStaleStateAgeInSeconds = 60 * 15;\nvar DefaultClockSkewInSeconds = 60 * 5;\nvar OidcClientSettingsStore = class {\n constructor({\n // metadata related\n authority,\n metadataUrl,\n metadata,\n signingKeys,\n metadataSeed,\n // client related\n client_id,\n client_secret,\n response_type = DefaultResponseType,\n scope = DefaultScope,\n redirect_uri,\n post_logout_redirect_uri,\n client_authentication = DefaultClientAuthentication,\n // optional protocol\n prompt,\n display,\n max_age,\n ui_locales,\n acr_values,\n resource,\n response_mode = DefaultResponseMode,\n // behavior flags\n filterProtocolClaims = true,\n loadUserInfo = false,\n staleStateAgeInSeconds = DefaultStaleStateAgeInSeconds,\n clockSkewInSeconds = DefaultClockSkewInSeconds,\n userInfoJwtIssuer = \"OP\",\n mergeClaims = false,\n disablePKCE = false,\n // other behavior\n stateStore,\n refreshTokenCredentials,\n revokeTokenAdditionalContentTypes,\n fetchRequestCredentials,\n refreshTokenAllowedScope,\n // extra\n extraQueryParams = {},\n extraTokenParams = {},\n extraHeaders = {}\n }) {\n this.authority = authority;\n if (metadataUrl) {\n this.metadataUrl = metadataUrl;\n } else {\n this.metadataUrl = authority;\n if (authority) {\n if (!this.metadataUrl.endsWith(\"/\")) {\n this.metadataUrl += \"/\";\n }\n this.metadataUrl += \".well-known/openid-configuration\";\n }\n }\n this.metadata = metadata;\n this.metadataSeed = metadataSeed;\n this.signingKeys = signingKeys;\n this.client_id = client_id;\n this.client_secret = client_secret;\n this.response_type = response_type;\n this.scope = scope;\n this.redirect_uri = redirect_uri;\n this.post_logout_redirect_uri = post_logout_redirect_uri;\n this.client_authentication = client_authentication;\n this.prompt = prompt;\n this.display = display;\n this.max_age = max_age;\n this.ui_locales = ui_locales;\n this.acr_values = acr_values;\n this.resource = resource;\n this.response_mode = response_mode;\n this.filterProtocolClaims = filterProtocolClaims != null ? filterProtocolClaims : true;\n this.loadUserInfo = !!loadUserInfo;\n this.staleStateAgeInSeconds = staleStateAgeInSeconds;\n this.clockSkewInSeconds = clockSkewInSeconds;\n this.userInfoJwtIssuer = userInfoJwtIssuer;\n this.mergeClaims = !!mergeClaims;\n this.disablePKCE = !!disablePKCE;\n this.revokeTokenAdditionalContentTypes = revokeTokenAdditionalContentTypes;\n if (fetchRequestCredentials && refreshTokenCredentials) {\n console.warn(\"Both fetchRequestCredentials and refreshTokenCredentials is set. Only fetchRequestCredentials will be used.\");\n }\n this.fetchRequestCredentials = fetchRequestCredentials ? fetchRequestCredentials : refreshTokenCredentials ? refreshTokenCredentials : \"same-origin\";\n if (stateStore) {\n this.stateStore = stateStore;\n } else {\n const store = typeof window !== \"undefined\" ? window.localStorage : new InMemoryWebStorage();\n this.stateStore = new WebStorageStateStore({ store });\n }\n this.refreshTokenAllowedScope = refreshTokenAllowedScope;\n this.extraQueryParams = extraQueryParams;\n this.extraTokenParams = extraTokenParams;\n this.extraHeaders = extraHeaders;\n }\n};\n\n// src/UserInfoService.ts\nvar UserInfoService = class {\n constructor(_settings, _metadataService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._logger = new Logger(\"UserInfoService\");\n this._getClaimsFromJwt = async (responseText) => {\n const logger2 = this._logger.create(\"_getClaimsFromJwt\");\n try {\n const payload = JwtUtils.decode(responseText);\n logger2.debug(\"JWT decoding successful\");\n return payload;\n } catch (err) {\n logger2.error(\"Error parsing JWT response\");\n throw err;\n }\n };\n this._jsonService = new JsonService(\n void 0,\n this._getClaimsFromJwt,\n this._settings.extraHeaders\n );\n }\n async getClaims(token) {\n const logger2 = this._logger.create(\"getClaims\");\n if (!token) {\n this._logger.throw(new Error(\"No token passed\"));\n }\n const url = await this._metadataService.getUserInfoEndpoint();\n logger2.debug(\"got userinfo url\", url);\n const claims = await this._jsonService.getJson(url, {\n token,\n credentials: this._settings.fetchRequestCredentials\n });\n logger2.debug(\"got claims\", claims);\n return claims;\n }\n};\n\n// src/TokenClient.ts\nvar TokenClient = class {\n constructor(_settings, _metadataService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._logger = new Logger(\"TokenClient\");\n this._jsonService = new JsonService(\n this._settings.revokeTokenAdditionalContentTypes,\n null,\n this._settings.extraHeaders\n );\n }\n /**\n * Exchange code.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.1.3\n */\n async exchangeCode({\n grant_type = \"authorization_code\",\n redirect_uri = this._settings.redirect_uri,\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeCode\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n if (!redirect_uri) {\n logger2.throw(new Error(\"A redirect_uri is required\"));\n }\n if (!args.code) {\n logger2.throw(new Error(\"A code is required\"));\n }\n const params = new URLSearchParams({ grant_type, redirect_uri });\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (!client_secret) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, initCredentials: this._settings.fetchRequestCredentials });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Exchange credentials.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.3.2\n */\n async exchangeCredentials({\n grant_type = \"password\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n scope = this._settings.scope,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeCredentials\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n const params = new URLSearchParams({ grant_type, scope });\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (!client_secret) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, initCredentials: this._settings.fetchRequestCredentials });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Exchange a refresh token.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-6\n */\n async exchangeRefreshToken({\n grant_type = \"refresh_token\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n timeoutInSeconds,\n ...args\n }) {\n const logger2 = this._logger.create(\"exchangeRefreshToken\");\n if (!client_id) {\n logger2.throw(new Error(\"A client_id is required\"));\n }\n if (!args.refresh_token) {\n logger2.throw(new Error(\"A refresh_token is required\"));\n }\n const params = new URLSearchParams({ grant_type });\n for (const [key, value] of Object.entries(args)) {\n if (Array.isArray(value)) {\n value.forEach((param) => params.append(key, param));\n } else if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (!client_secret) {\n logger2.throw(new Error(\"A client_secret is required\"));\n throw null;\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n const url = await this._metadataService.getTokenEndpoint(false);\n logger2.debug(\"got token endpoint\");\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, timeoutInSeconds, initCredentials: this._settings.fetchRequestCredentials });\n logger2.debug(\"got response\");\n return response;\n }\n /**\n * Revoke an access or refresh token.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc7009#section-2.1\n */\n async revoke(args) {\n var _a;\n const logger2 = this._logger.create(\"revoke\");\n if (!args.token) {\n logger2.throw(new Error(\"A token is required\"));\n }\n const url = await this._metadataService.getRevocationEndpoint(false);\n logger2.debug(`got revocation endpoint, revoking ${(_a = args.token_type_hint) != null ? _a : \"default token type\"}`);\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n params.set(\"client_id\", this._settings.client_id);\n if (this._settings.client_secret) {\n params.set(\"client_secret\", this._settings.client_secret);\n }\n await this._jsonService.postForm(url, { body: params });\n logger2.debug(\"got response\");\n }\n};\n\n// src/ResponseValidator.ts\nvar ResponseValidator = class {\n constructor(_settings, _metadataService, _claimsService) {\n this._settings = _settings;\n this._metadataService = _metadataService;\n this._claimsService = _claimsService;\n this._logger = new Logger(\"ResponseValidator\");\n this._userInfoService = new UserInfoService(this._settings, this._metadataService);\n this._tokenClient = new TokenClient(this._settings, this._metadataService);\n }\n async validateSigninResponse(response, state) {\n const logger2 = this._logger.create(\"validateSigninResponse\");\n this._processSigninState(response, state);\n logger2.debug(\"state processed\");\n await this._processCode(response, state);\n logger2.debug(\"code processed\");\n if (response.isOpenId) {\n this._validateIdTokenAttributes(response);\n }\n logger2.debug(\"tokens validated\");\n await this._processClaims(response, state == null ? void 0 : state.skipUserInfo, response.isOpenId);\n logger2.debug(\"claims processed\");\n }\n async validateCredentialsResponse(response, skipUserInfo) {\n const logger2 = this._logger.create(\"validateCredentialsResponse\");\n if (response.isOpenId) {\n this._validateIdTokenAttributes(response);\n }\n logger2.debug(\"tokens validated\");\n await this._processClaims(response, skipUserInfo, response.isOpenId);\n logger2.debug(\"claims processed\");\n }\n async validateRefreshResponse(response, state) {\n var _a, _b;\n const logger2 = this._logger.create(\"validateRefreshResponse\");\n response.userState = state.data;\n (_a = response.session_state) != null ? _a : response.session_state = state.session_state;\n (_b = response.scope) != null ? _b : response.scope = state.scope;\n if (response.isOpenId && !!response.id_token) {\n this._validateIdTokenAttributes(response, state.id_token);\n logger2.debug(\"ID Token validated\");\n }\n if (!response.id_token) {\n response.id_token = state.id_token;\n response.profile = state.profile;\n }\n const hasIdToken = response.isOpenId && !!response.id_token;\n await this._processClaims(response, false, hasIdToken);\n logger2.debug(\"claims processed\");\n }\n validateSignoutResponse(response, state) {\n const logger2 = this._logger.create(\"validateSignoutResponse\");\n if (state.id !== response.state) {\n logger2.throw(new Error(\"State does not match\"));\n }\n logger2.debug(\"state validated\");\n response.userState = state.data;\n if (response.error) {\n logger2.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n }\n _processSigninState(response, state) {\n var _a;\n const logger2 = this._logger.create(\"_processSigninState\");\n if (state.id !== response.state) {\n logger2.throw(new Error(\"State does not match\"));\n }\n if (!state.client_id) {\n logger2.throw(new Error(\"No client_id on state\"));\n }\n if (!state.authority) {\n logger2.throw(new Error(\"No authority on state\"));\n }\n if (this._settings.authority !== state.authority) {\n logger2.throw(new Error(\"authority mismatch on settings vs. signin state\"));\n }\n if (this._settings.client_id && this._settings.client_id !== state.client_id) {\n logger2.throw(new Error(\"client_id mismatch on settings vs. signin state\"));\n }\n logger2.debug(\"state validated\");\n response.userState = state.data;\n (_a = response.scope) != null ? _a : response.scope = state.scope;\n if (response.error) {\n logger2.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n if (state.code_verifier && !response.code) {\n logger2.throw(new Error(\"Expected code in response\"));\n }\n }\n async _processClaims(response, skipUserInfo = false, validateSub = true) {\n const logger2 = this._logger.create(\"_processClaims\");\n response.profile = this._claimsService.filterProtocolClaims(response.profile);\n if (skipUserInfo || !this._settings.loadUserInfo || !response.access_token) {\n logger2.debug(\"not loading user info\");\n return;\n }\n logger2.debug(\"loading user info\");\n const claims = await this._userInfoService.getClaims(response.access_token);\n logger2.debug(\"user info claims received from user info endpoint\");\n if (validateSub && claims.sub !== response.profile.sub) {\n logger2.throw(new Error(\"subject from UserInfo response does not match subject in ID Token\"));\n }\n response.profile = this._claimsService.mergeClaims(response.profile, this._claimsService.filterProtocolClaims(claims));\n logger2.debug(\"user info claims received, updated profile:\", response.profile);\n }\n async _processCode(response, state) {\n const logger2 = this._logger.create(\"_processCode\");\n if (response.code) {\n logger2.debug(\"Validating code\");\n const tokenResponse = await this._tokenClient.exchangeCode({\n client_id: state.client_id,\n client_secret: state.client_secret,\n code: response.code,\n redirect_uri: state.redirect_uri,\n code_verifier: state.code_verifier,\n ...state.extraTokenParams\n });\n Object.assign(response, tokenResponse);\n } else {\n logger2.debug(\"No code to process\");\n }\n }\n _validateIdTokenAttributes(response, existingToken) {\n var _a;\n const logger2 = this._logger.create(\"_validateIdTokenAttributes\");\n logger2.debug(\"decoding ID Token JWT\");\n const incoming = JwtUtils.decode((_a = response.id_token) != null ? _a : \"\");\n if (!incoming.sub) {\n logger2.throw(new Error(\"ID Token is missing a subject claim\"));\n }\n if (existingToken) {\n const existing = JwtUtils.decode(existingToken);\n if (incoming.sub !== existing.sub) {\n logger2.throw(new Error(\"sub in id_token does not match current sub\"));\n }\n if (incoming.auth_time && incoming.auth_time !== existing.auth_time) {\n logger2.throw(new Error(\"auth_time in id_token does not match original auth_time\"));\n }\n if (incoming.azp && incoming.azp !== existing.azp) {\n logger2.throw(new Error(\"azp in id_token does not match original azp\"));\n }\n if (!incoming.azp && existing.azp) {\n logger2.throw(new Error(\"azp not in id_token, but present in original id_token\"));\n }\n }\n response.profile = incoming;\n }\n};\n\n// src/State.ts\nvar State = class {\n constructor(args) {\n this.id = args.id || CryptoUtils.generateUUIDv4();\n this.data = args.data;\n if (args.created && args.created > 0) {\n this.created = args.created;\n } else {\n this.created = Timer.getEpochTime();\n }\n this.request_type = args.request_type;\n }\n toStorageString() {\n new Logger(\"State\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"State\", \"fromStorageString\");\n return new State(JSON.parse(storageString));\n }\n static async clearStaleState(storage, age) {\n const logger2 = Logger.createStatic(\"State\", \"clearStaleState\");\n const cutoff = Timer.getEpochTime() - age;\n const keys = await storage.getAllKeys();\n logger2.debug(\"got keys\", keys);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const item = await storage.get(key);\n let remove = false;\n if (item) {\n try {\n const state = State.fromStorageString(item);\n logger2.debug(\"got item from key:\", key, state.created);\n if (state.created <= cutoff) {\n remove = true;\n }\n } catch (err) {\n logger2.error(\"Error parsing state for key:\", key, err);\n remove = true;\n }\n } else {\n logger2.debug(\"no item in storage for key:\", key);\n remove = true;\n }\n if (remove) {\n logger2.debug(\"removed item for key:\", key);\n void storage.remove(key);\n }\n }\n }\n};\n\n// src/SigninState.ts\nvar SigninState = class extends State {\n constructor(args) {\n super(args);\n if (args.code_verifier === true) {\n this.code_verifier = CryptoUtils.generateCodeVerifier();\n } else if (args.code_verifier) {\n this.code_verifier = args.code_verifier;\n }\n if (this.code_verifier) {\n this.code_challenge = CryptoUtils.generateCodeChallenge(this.code_verifier);\n }\n this.authority = args.authority;\n this.client_id = args.client_id;\n this.redirect_uri = args.redirect_uri;\n this.scope = args.scope;\n this.client_secret = args.client_secret;\n this.extraTokenParams = args.extraTokenParams;\n this.response_mode = args.response_mode;\n this.skipUserInfo = args.skipUserInfo;\n }\n toStorageString() {\n new Logger(\"SigninState\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type,\n code_verifier: this.code_verifier,\n authority: this.authority,\n client_id: this.client_id,\n redirect_uri: this.redirect_uri,\n scope: this.scope,\n client_secret: this.client_secret,\n extraTokenParams: this.extraTokenParams,\n response_mode: this.response_mode,\n skipUserInfo: this.skipUserInfo\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"SigninState\", \"fromStorageString\");\n const data = JSON.parse(storageString);\n return new SigninState(data);\n }\n};\n\n// src/SigninRequest.ts\nvar SigninRequest = class {\n constructor({\n // mandatory\n url,\n authority,\n client_id,\n redirect_uri,\n response_type,\n scope,\n // optional\n state_data,\n response_mode,\n request_type,\n client_secret,\n nonce,\n resource,\n skipUserInfo,\n extraQueryParams,\n extraTokenParams,\n disablePKCE,\n ...optionalParams\n }) {\n this._logger = new Logger(\"SigninRequest\");\n if (!url) {\n this._logger.error(\"ctor: No url passed\");\n throw new Error(\"url\");\n }\n if (!client_id) {\n this._logger.error(\"ctor: No client_id passed\");\n throw new Error(\"client_id\");\n }\n if (!redirect_uri) {\n this._logger.error(\"ctor: No redirect_uri passed\");\n throw new Error(\"redirect_uri\");\n }\n if (!response_type) {\n this._logger.error(\"ctor: No response_type passed\");\n throw new Error(\"response_type\");\n }\n if (!scope) {\n this._logger.error(\"ctor: No scope passed\");\n throw new Error(\"scope\");\n }\n if (!authority) {\n this._logger.error(\"ctor: No authority passed\");\n throw new Error(\"authority\");\n }\n this.state = new SigninState({\n data: state_data,\n request_type,\n code_verifier: !disablePKCE,\n client_id,\n authority,\n redirect_uri,\n response_mode,\n client_secret,\n scope,\n extraTokenParams,\n skipUserInfo\n });\n const parsedUrl = new URL(url);\n parsedUrl.searchParams.append(\"client_id\", client_id);\n parsedUrl.searchParams.append(\"redirect_uri\", redirect_uri);\n parsedUrl.searchParams.append(\"response_type\", response_type);\n parsedUrl.searchParams.append(\"scope\", scope);\n if (nonce) {\n parsedUrl.searchParams.append(\"nonce\", nonce);\n }\n parsedUrl.searchParams.append(\"state\", this.state.id);\n if (this.state.code_challenge) {\n parsedUrl.searchParams.append(\"code_challenge\", this.state.code_challenge);\n parsedUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n }\n if (resource) {\n const resources = Array.isArray(resource) ? resource : [resource];\n resources.forEach((r) => parsedUrl.searchParams.append(\"resource\", r));\n }\n for (const [key, value] of Object.entries({ response_mode, ...optionalParams, ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n this.url = parsedUrl.href;\n }\n};\n\n// src/SigninResponse.ts\nvar OidcScope = \"openid\";\nvar SigninResponse = class {\n constructor(params) {\n /** @see {@link User.access_token} */\n this.access_token = \"\";\n /** @see {@link User.token_type} */\n this.token_type = \"\";\n /** @see {@link User.profile} */\n this.profile = {};\n this.state = params.get(\"state\");\n this.session_state = params.get(\"session_state\");\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n this.code = params.get(\"code\");\n }\n get expires_in() {\n if (this.expires_at === void 0) {\n return void 0;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n set expires_in(value) {\n if (typeof value === \"string\")\n value = Number(value);\n if (value !== void 0 && value >= 0) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n get isOpenId() {\n var _a;\n return ((_a = this.scope) == null ? void 0 : _a.split(\" \").includes(OidcScope)) || !!this.id_token;\n }\n};\n\n// src/SignoutRequest.ts\nvar SignoutRequest = class {\n constructor({\n url,\n state_data,\n id_token_hint,\n post_logout_redirect_uri,\n extraQueryParams,\n request_type,\n client_id\n }) {\n this._logger = new Logger(\"SignoutRequest\");\n if (!url) {\n this._logger.error(\"ctor: No url passed\");\n throw new Error(\"url\");\n }\n const parsedUrl = new URL(url);\n if (id_token_hint) {\n parsedUrl.searchParams.append(\"id_token_hint\", id_token_hint);\n }\n if (client_id) {\n parsedUrl.searchParams.append(\"client_id\", client_id);\n }\n if (post_logout_redirect_uri) {\n parsedUrl.searchParams.append(\"post_logout_redirect_uri\", post_logout_redirect_uri);\n if (state_data) {\n this.state = new State({ data: state_data, request_type });\n parsedUrl.searchParams.append(\"state\", this.state.id);\n }\n }\n for (const [key, value] of Object.entries({ ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n this.url = parsedUrl.href;\n }\n};\n\n// src/SignoutResponse.ts\nvar SignoutResponse = class {\n constructor(params) {\n this.state = params.get(\"state\");\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n }\n};\n\n// src/ClaimsService.ts\nvar DefaultProtocolClaims = [\n \"nbf\",\n \"jti\",\n \"auth_time\",\n \"nonce\",\n \"acr\",\n \"amr\",\n \"azp\",\n \"at_hash\"\n // https://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken\n];\nvar InternalRequiredProtocolClaims = [\"sub\", \"iss\", \"aud\", \"exp\", \"iat\"];\nvar ClaimsService = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"ClaimsService\");\n }\n filterProtocolClaims(claims) {\n const result = { ...claims };\n if (this._settings.filterProtocolClaims) {\n let protocolClaims;\n if (Array.isArray(this._settings.filterProtocolClaims)) {\n protocolClaims = this._settings.filterProtocolClaims;\n } else {\n protocolClaims = DefaultProtocolClaims;\n }\n for (const claim of protocolClaims) {\n if (!InternalRequiredProtocolClaims.includes(claim)) {\n delete result[claim];\n }\n }\n }\n return result;\n }\n mergeClaims(claims1, claims2) {\n const result = { ...claims1 };\n for (const [claim, values] of Object.entries(claims2)) {\n for (const value of Array.isArray(values) ? values : [values]) {\n const previousValue = result[claim];\n if (!previousValue) {\n result[claim] = value;\n } else if (Array.isArray(previousValue)) {\n if (!previousValue.includes(value)) {\n previousValue.push(value);\n }\n } else if (result[claim] !== value) {\n if (typeof value === \"object\" && this._settings.mergeClaims) {\n result[claim] = this.mergeClaims(previousValue, value);\n } else {\n result[claim] = [previousValue, value];\n }\n }\n }\n }\n return result;\n }\n};\n\n// src/OidcClient.ts\nvar OidcClient = class {\n constructor(settings, metadataService) {\n this._logger = new Logger(\"OidcClient\");\n this.settings = settings instanceof OidcClientSettingsStore ? settings : new OidcClientSettingsStore(settings);\n this.metadataService = metadataService != null ? metadataService : new MetadataService(this.settings);\n this._claimsService = new ClaimsService(this.settings);\n this._validator = new ResponseValidator(this.settings, this.metadataService, this._claimsService);\n this._tokenClient = new TokenClient(this.settings, this.metadataService);\n }\n async createSigninRequest({\n state,\n request,\n request_uri,\n request_type,\n id_token_hint,\n login_hint,\n skipUserInfo,\n nonce,\n response_type = this.settings.response_type,\n scope = this.settings.scope,\n redirect_uri = this.settings.redirect_uri,\n prompt = this.settings.prompt,\n display = this.settings.display,\n max_age = this.settings.max_age,\n ui_locales = this.settings.ui_locales,\n acr_values = this.settings.acr_values,\n resource = this.settings.resource,\n response_mode = this.settings.response_mode,\n extraQueryParams = this.settings.extraQueryParams,\n extraTokenParams = this.settings.extraTokenParams\n }) {\n const logger2 = this._logger.create(\"createSigninRequest\");\n if (response_type !== \"code\") {\n throw new Error(\"Only the Authorization Code flow (with PKCE) is supported\");\n }\n const url = await this.metadataService.getAuthorizationEndpoint();\n logger2.debug(\"Received authorization endpoint\", url);\n const signinRequest = new SigninRequest({\n url,\n authority: this.settings.authority,\n client_id: this.settings.client_id,\n redirect_uri,\n response_type,\n scope,\n state_data: state,\n prompt,\n display,\n max_age,\n ui_locales,\n id_token_hint,\n login_hint,\n acr_values,\n resource,\n request,\n request_uri,\n extraQueryParams,\n extraTokenParams,\n request_type,\n response_mode,\n client_secret: this.settings.client_secret,\n skipUserInfo,\n nonce,\n disablePKCE: this.settings.disablePKCE\n });\n await this.clearStaleState();\n const signinState = signinRequest.state;\n await this.settings.stateStore.set(signinState.id, signinState.toStorageString());\n return signinRequest;\n }\n async readSigninResponseState(url, removeState = false) {\n const logger2 = this._logger.create(\"readSigninResponseState\");\n const response = new SigninResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger2.throw(new Error(\"No state in response\"));\n throw null;\n }\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger2.throw(new Error(\"No matching state found in storage\"));\n throw null;\n }\n const state = SigninState.fromStorageString(storedStateString);\n return { state, response };\n }\n async processSigninResponse(url) {\n const logger2 = this._logger.create(\"processSigninResponse\");\n const { state, response } = await this.readSigninResponseState(url, true);\n logger2.debug(\"received state from storage; validating response\");\n await this._validator.validateSigninResponse(response, state);\n return response;\n }\n async processResourceOwnerPasswordCredentials({\n username,\n password,\n skipUserInfo = false,\n extraTokenParams = {}\n }) {\n const tokenResponse = await this._tokenClient.exchangeCredentials({ username, password, ...extraTokenParams });\n const signinResponse = new SigninResponse(new URLSearchParams());\n Object.assign(signinResponse, tokenResponse);\n await this._validator.validateCredentialsResponse(signinResponse, skipUserInfo);\n return signinResponse;\n }\n async useRefreshToken({\n state,\n timeoutInSeconds\n }) {\n var _a;\n const logger2 = this._logger.create(\"useRefreshToken\");\n let scope;\n if (this.settings.refreshTokenAllowedScope === void 0) {\n scope = state.scope;\n } else {\n const allowableScopes = this.settings.refreshTokenAllowedScope.split(\" \");\n const providedScopes = ((_a = state.scope) == null ? void 0 : _a.split(\" \")) || [];\n scope = providedScopes.filter((s) => allowableScopes.includes(s)).join(\" \");\n }\n const result = await this._tokenClient.exchangeRefreshToken({\n refresh_token: state.refresh_token,\n resource: state.resource,\n // provide the (possible filtered) scope list\n scope,\n timeoutInSeconds\n });\n const response = new SigninResponse(new URLSearchParams());\n Object.assign(response, result);\n logger2.debug(\"validating response\", response);\n await this._validator.validateRefreshResponse(response, {\n ...state,\n // overide the scope in the state handed over to the validator\n // so it can set the granted scope to the requested scope in case none is included in the response\n scope\n });\n return response;\n }\n async createSignoutRequest({\n state,\n id_token_hint,\n client_id,\n request_type,\n post_logout_redirect_uri = this.settings.post_logout_redirect_uri,\n extraQueryParams = this.settings.extraQueryParams\n } = {}) {\n const logger2 = this._logger.create(\"createSignoutRequest\");\n const url = await this.metadataService.getEndSessionEndpoint();\n if (!url) {\n logger2.throw(new Error(\"No end session endpoint\"));\n throw null;\n }\n logger2.debug(\"Received end session endpoint\", url);\n if (!client_id && post_logout_redirect_uri && !id_token_hint) {\n client_id = this.settings.client_id;\n }\n const request = new SignoutRequest({\n url,\n id_token_hint,\n client_id,\n post_logout_redirect_uri,\n state_data: state,\n extraQueryParams,\n request_type\n });\n await this.clearStaleState();\n const signoutState = request.state;\n if (signoutState) {\n logger2.debug(\"Signout request has state to persist\");\n await this.settings.stateStore.set(signoutState.id, signoutState.toStorageString());\n }\n return request;\n }\n async readSignoutResponseState(url, removeState = false) {\n const logger2 = this._logger.create(\"readSignoutResponseState\");\n const response = new SignoutResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger2.debug(\"No state in response\");\n if (response.error) {\n logger2.warn(\"Response was error:\", response.error);\n throw new ErrorResponse(response);\n }\n return { state: void 0, response };\n }\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger2.throw(new Error(\"No matching state found in storage\"));\n throw null;\n }\n const state = State.fromStorageString(storedStateString);\n return { state, response };\n }\n async processSignoutResponse(url) {\n const logger2 = this._logger.create(\"processSignoutResponse\");\n const { state, response } = await this.readSignoutResponseState(url, true);\n if (state) {\n logger2.debug(\"Received state from storage; validating response\");\n this._validator.validateSignoutResponse(response, state);\n } else {\n logger2.debug(\"No state from storage; skipping response validation\");\n }\n return response;\n }\n clearStaleState() {\n this._logger.create(\"clearStaleState\");\n return State.clearStaleState(this.settings.stateStore, this.settings.staleStateAgeInSeconds);\n }\n async revokeToken(token, type) {\n this._logger.create(\"revokeToken\");\n return await this._tokenClient.revoke({\n token,\n token_type_hint: type\n });\n }\n};\n\n// src/SessionMonitor.ts\nvar SessionMonitor = class {\n constructor(_userManager) {\n this._userManager = _userManager;\n this._logger = new Logger(\"SessionMonitor\");\n this._start = async (user) => {\n const session_state = user.session_state;\n if (!session_state) {\n return;\n }\n const logger2 = this._logger.create(\"_start\");\n if (user.profile) {\n this._sub = user.profile.sub;\n this._sid = user.profile.sid;\n logger2.debug(\"session_state\", session_state, \", sub\", this._sub);\n } else {\n this._sub = void 0;\n this._sid = void 0;\n logger2.debug(\"session_state\", session_state, \", anonymous user\");\n }\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.start(session_state);\n return;\n }\n try {\n const url = await this._userManager.metadataService.getCheckSessionIframe();\n if (url) {\n logger2.debug(\"initializing check session iframe\");\n const client_id = this._userManager.settings.client_id;\n const intervalInSeconds = this._userManager.settings.checkSessionIntervalInSeconds;\n const stopOnError = this._userManager.settings.stopCheckSessionOnError;\n const checkSessionIFrame = new CheckSessionIFrame(this._callback, client_id, url, intervalInSeconds, stopOnError);\n await checkSessionIFrame.load();\n this._checkSessionIFrame = checkSessionIFrame;\n checkSessionIFrame.start(session_state);\n } else {\n logger2.warn(\"no check session iframe found in the metadata\");\n }\n } catch (err) {\n logger2.error(\"Error from getCheckSessionIframe:\", err instanceof Error ? err.message : err);\n }\n };\n this._stop = () => {\n const logger2 = this._logger.create(\"_stop\");\n this._sub = void 0;\n this._sid = void 0;\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.stop();\n }\n if (this._userManager.settings.monitorAnonymousSession) {\n const timerHandle = setInterval(async () => {\n clearInterval(timerHandle);\n try {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub && session.sid ? {\n sub: session.sub,\n sid: session.sid\n } : null\n };\n void this._start(tmpUser);\n }\n } catch (err) {\n logger2.error(\"error from querySessionStatus\", err instanceof Error ? err.message : err);\n }\n }, 1e3);\n }\n };\n this._callback = async () => {\n const logger2 = this._logger.create(\"_callback\");\n try {\n const session = await this._userManager.querySessionStatus();\n let raiseEvent = true;\n if (session && this._checkSessionIFrame) {\n if (session.sub === this._sub) {\n raiseEvent = false;\n this._checkSessionIFrame.start(session.session_state);\n if (session.sid === this._sid) {\n logger2.debug(\"same sub still logged in at OP, restarting check session iframe; session_state\", session.session_state);\n } else {\n logger2.debug(\"same sub still logged in at OP, session state has changed, restarting check session iframe; session_state\", session.session_state);\n this._userManager.events._raiseUserSessionChanged();\n }\n } else {\n logger2.debug(\"different subject signed into OP\", session.sub);\n }\n } else {\n logger2.debug(\"subject no longer signed into OP\");\n }\n if (raiseEvent) {\n if (this._sub) {\n this._userManager.events._raiseUserSignedOut();\n } else {\n this._userManager.events._raiseUserSignedIn();\n }\n } else {\n logger2.debug(\"no change in session detected, no event to raise\");\n }\n } catch (err) {\n if (this._sub) {\n logger2.debug(\"Error calling queryCurrentSigninSession; raising signed out event\", err);\n this._userManager.events._raiseUserSignedOut();\n }\n }\n };\n if (!_userManager) {\n this._logger.throw(new Error(\"No user manager passed\"));\n }\n this._userManager.events.addUserLoaded(this._start);\n this._userManager.events.addUserUnloaded(this._stop);\n this._init().catch((err) => {\n this._logger.error(err);\n });\n }\n async _init() {\n this._logger.create(\"_init\");\n const user = await this._userManager.getUser();\n if (user) {\n void this._start(user);\n } else if (this._userManager.settings.monitorAnonymousSession) {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub && session.sid ? {\n sub: session.sub,\n sid: session.sid\n } : null\n };\n void this._start(tmpUser);\n }\n }\n }\n};\n\n// src/User.ts\nvar User = class {\n constructor(args) {\n var _a;\n this.id_token = args.id_token;\n this.session_state = (_a = args.session_state) != null ? _a : null;\n this.access_token = args.access_token;\n this.refresh_token = args.refresh_token;\n this.token_type = args.token_type;\n this.scope = args.scope;\n this.profile = args.profile;\n this.expires_at = args.expires_at;\n this.state = args.userState;\n }\n /** Computed number of seconds the access token has remaining. */\n get expires_in() {\n if (this.expires_at === void 0) {\n return void 0;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n set expires_in(value) {\n if (value !== void 0) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n /** Computed value indicating if the access token is expired. */\n get expired() {\n const expires_in = this.expires_in;\n if (expires_in === void 0) {\n return void 0;\n }\n return expires_in <= 0;\n }\n /** Array representing the parsed values from the `scope`. */\n get scopes() {\n var _a, _b;\n return (_b = (_a = this.scope) == null ? void 0 : _a.split(\" \")) != null ? _b : [];\n }\n toStorageString() {\n new Logger(\"User\").create(\"toStorageString\");\n return JSON.stringify({\n id_token: this.id_token,\n session_state: this.session_state,\n access_token: this.access_token,\n refresh_token: this.refresh_token,\n token_type: this.token_type,\n scope: this.scope,\n profile: this.profile,\n expires_at: this.expires_at\n });\n }\n static fromStorageString(storageString) {\n Logger.createStatic(\"User\", \"fromStorageString\");\n return new User(JSON.parse(storageString));\n }\n};\n\n// src/navigators/AbstractChildWindow.ts\nvar messageSource = \"oidc-client\";\nvar AbstractChildWindow = class {\n constructor() {\n this._abort = new Event(\"Window navigation aborted\");\n this._disposeHandlers = /* @__PURE__ */ new Set();\n this._window = null;\n }\n async navigate(params) {\n const logger2 = this._logger.create(\"navigate\");\n if (!this._window) {\n throw new Error(\"Attempted to navigate on a disposed window\");\n }\n logger2.debug(\"setting URL in window\");\n this._window.location.replace(params.url);\n const { url, keepOpen } = await new Promise((resolve, reject) => {\n const listener = (e) => {\n var _a;\n const data = e.data;\n const origin = (_a = params.scriptOrigin) != null ? _a : window.location.origin;\n if (e.origin !== origin || (data == null ? void 0 : data.source) !== messageSource) {\n return;\n }\n try {\n const state = UrlUtils.readParams(data.url, params.response_mode).get(\"state\");\n if (!state) {\n logger2.warn(\"no state found in response url\");\n }\n if (e.source !== this._window && state !== params.state) {\n return;\n }\n } catch (err) {\n this._dispose();\n reject(new Error(\"Invalid response from window\"));\n }\n resolve(data);\n };\n window.addEventListener(\"message\", listener, false);\n this._disposeHandlers.add(() => window.removeEventListener(\"message\", listener, false));\n this._disposeHandlers.add(this._abort.addHandler((reason) => {\n this._dispose();\n reject(reason);\n }));\n });\n logger2.debug(\"got response from window\");\n this._dispose();\n if (!keepOpen) {\n this.close();\n }\n return { url };\n }\n _dispose() {\n this._logger.create(\"_dispose\");\n for (const dispose of this._disposeHandlers) {\n dispose();\n }\n this._disposeHandlers.clear();\n }\n static _notifyParent(parent, url, keepOpen = false, targetOrigin = window.location.origin) {\n parent.postMessage({\n source: messageSource,\n url,\n keepOpen\n }, targetOrigin);\n }\n};\n\n// src/UserManagerSettings.ts\nvar DefaultPopupWindowFeatures = {\n location: false,\n toolbar: false,\n height: 640,\n closePopupWindowAfterInSeconds: -1\n};\nvar DefaultPopupTarget = \"_blank\";\nvar DefaultAccessTokenExpiringNotificationTimeInSeconds = 60;\nvar DefaultCheckSessionIntervalInSeconds = 2;\nvar DefaultSilentRequestTimeoutInSeconds = 10;\nvar UserManagerSettingsStore = class extends OidcClientSettingsStore {\n constructor(args) {\n const {\n popup_redirect_uri = args.redirect_uri,\n popup_post_logout_redirect_uri = args.post_logout_redirect_uri,\n popupWindowFeatures = DefaultPopupWindowFeatures,\n popupWindowTarget = DefaultPopupTarget,\n redirectMethod = \"assign\",\n redirectTarget = \"self\",\n iframeNotifyParentOrigin = args.iframeNotifyParentOrigin,\n iframeScriptOrigin = args.iframeScriptOrigin,\n silent_redirect_uri = args.redirect_uri,\n silentRequestTimeoutInSeconds = DefaultSilentRequestTimeoutInSeconds,\n automaticSilentRenew = true,\n validateSubOnSilentRenew = true,\n includeIdTokenInSilentRenew = false,\n monitorSession = false,\n monitorAnonymousSession = false,\n checkSessionIntervalInSeconds = DefaultCheckSessionIntervalInSeconds,\n query_status_response_type = \"code\",\n stopCheckSessionOnError = true,\n revokeTokenTypes = [\"access_token\", \"refresh_token\"],\n revokeTokensOnSignout = false,\n includeIdTokenInSilentSignout = false,\n accessTokenExpiringNotificationTimeInSeconds = DefaultAccessTokenExpiringNotificationTimeInSeconds,\n userStore\n } = args;\n super(args);\n this.popup_redirect_uri = popup_redirect_uri;\n this.popup_post_logout_redirect_uri = popup_post_logout_redirect_uri;\n this.popupWindowFeatures = popupWindowFeatures;\n this.popupWindowTarget = popupWindowTarget;\n this.redirectMethod = redirectMethod;\n this.redirectTarget = redirectTarget;\n this.iframeNotifyParentOrigin = iframeNotifyParentOrigin;\n this.iframeScriptOrigin = iframeScriptOrigin;\n this.silent_redirect_uri = silent_redirect_uri;\n this.silentRequestTimeoutInSeconds = silentRequestTimeoutInSeconds;\n this.automaticSilentRenew = automaticSilentRenew;\n this.validateSubOnSilentRenew = validateSubOnSilentRenew;\n this.includeIdTokenInSilentRenew = includeIdTokenInSilentRenew;\n this.monitorSession = monitorSession;\n this.monitorAnonymousSession = monitorAnonymousSession;\n this.checkSessionIntervalInSeconds = checkSessionIntervalInSeconds;\n this.stopCheckSessionOnError = stopCheckSessionOnError;\n this.query_status_response_type = query_status_response_type;\n this.revokeTokenTypes = revokeTokenTypes;\n this.revokeTokensOnSignout = revokeTokensOnSignout;\n this.includeIdTokenInSilentSignout = includeIdTokenInSilentSignout;\n this.accessTokenExpiringNotificationTimeInSeconds = accessTokenExpiringNotificationTimeInSeconds;\n if (userStore) {\n this.userStore = userStore;\n } else {\n const store = typeof window !== \"undefined\" ? window.sessionStorage : new InMemoryWebStorage();\n this.userStore = new WebStorageStateStore({ store });\n }\n }\n};\n\n// src/navigators/IFrameWindow.ts\nvar IFrameWindow = class extends AbstractChildWindow {\n constructor({\n silentRequestTimeoutInSeconds = DefaultSilentRequestTimeoutInSeconds\n }) {\n super();\n this._logger = new Logger(\"IFrameWindow\");\n this._timeoutInSeconds = silentRequestTimeoutInSeconds;\n this._frame = IFrameWindow.createHiddenIframe();\n this._window = this._frame.contentWindow;\n }\n static createHiddenIframe() {\n const iframe = window.document.createElement(\"iframe\");\n iframe.style.visibility = \"hidden\";\n iframe.style.position = \"fixed\";\n iframe.style.left = \"-1000px\";\n iframe.style.top = \"0\";\n iframe.width = \"0\";\n iframe.height = \"0\";\n window.document.body.appendChild(iframe);\n return iframe;\n }\n async navigate(params) {\n this._logger.debug(\"navigate: Using timeout of:\", this._timeoutInSeconds);\n const timer = setTimeout(() => this._abort.raise(new ErrorTimeout(\"IFrame timed out without a response\")), this._timeoutInSeconds * 1e3);\n this._disposeHandlers.add(() => clearTimeout(timer));\n return await super.navigate(params);\n }\n close() {\n var _a;\n if (this._frame) {\n if (this._frame.parentNode) {\n this._frame.addEventListener(\"load\", (ev) => {\n var _a2;\n const frame = ev.target;\n (_a2 = frame.parentNode) == null ? void 0 : _a2.removeChild(frame);\n this._abort.raise(new Error(\"IFrame removed from DOM\"));\n }, true);\n (_a = this._frame.contentWindow) == null ? void 0 : _a.location.replace(\"about:blank\");\n }\n this._frame = null;\n }\n this._window = null;\n }\n static notifyParent(url, targetOrigin) {\n return super._notifyParent(window.parent, url, false, targetOrigin);\n }\n};\n\n// src/navigators/IFrameNavigator.ts\nvar IFrameNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"IFrameNavigator\");\n }\n async prepare({\n silentRequestTimeoutInSeconds = this._settings.silentRequestTimeoutInSeconds\n }) {\n return new IFrameWindow({ silentRequestTimeoutInSeconds });\n }\n async callback(url) {\n this._logger.create(\"callback\");\n IFrameWindow.notifyParent(url, this._settings.iframeNotifyParentOrigin);\n }\n};\n\n// src/navigators/PopupWindow.ts\nvar checkForPopupClosedInterval = 500;\nvar second = 1e3;\nvar PopupWindow = class extends AbstractChildWindow {\n constructor({\n popupWindowTarget = DefaultPopupTarget,\n popupWindowFeatures = {}\n }) {\n super();\n this._logger = new Logger(\"PopupWindow\");\n const centeredPopup = PopupUtils.center({ ...DefaultPopupWindowFeatures, ...popupWindowFeatures });\n this._window = window.open(void 0, popupWindowTarget, PopupUtils.serialize(centeredPopup));\n if (popupWindowFeatures.closePopupWindowAfterInSeconds && popupWindowFeatures.closePopupWindowAfterInSeconds > 0) {\n setTimeout(() => {\n if (!this._window || typeof this._window.closed !== \"boolean\" || this._window.closed) {\n this._abort.raise(new Error(\"Popup blocked by user\"));\n return;\n }\n this.close();\n }, popupWindowFeatures.closePopupWindowAfterInSeconds * second);\n }\n }\n async navigate(params) {\n var _a;\n (_a = this._window) == null ? void 0 : _a.focus();\n const popupClosedInterval = setInterval(() => {\n if (!this._window || this._window.closed) {\n this._abort.raise(new Error(\"Popup closed by user\"));\n }\n }, checkForPopupClosedInterval);\n this._disposeHandlers.add(() => clearInterval(popupClosedInterval));\n return await super.navigate(params);\n }\n close() {\n if (this._window) {\n if (!this._window.closed) {\n this._window.close();\n this._abort.raise(new Error(\"Popup closed\"));\n }\n }\n this._window = null;\n }\n static notifyOpener(url, keepOpen) {\n if (!window.opener) {\n throw new Error(\"No window.opener. Can't complete notification.\");\n }\n return super._notifyParent(window.opener, url, keepOpen);\n }\n};\n\n// src/navigators/PopupNavigator.ts\nvar PopupNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"PopupNavigator\");\n }\n async prepare({\n popupWindowFeatures = this._settings.popupWindowFeatures,\n popupWindowTarget = this._settings.popupWindowTarget\n }) {\n return new PopupWindow({ popupWindowFeatures, popupWindowTarget });\n }\n async callback(url, { keepOpen = false }) {\n this._logger.create(\"callback\");\n PopupWindow.notifyOpener(url, keepOpen);\n }\n};\n\n// src/navigators/RedirectNavigator.ts\nvar RedirectNavigator = class {\n constructor(_settings) {\n this._settings = _settings;\n this._logger = new Logger(\"RedirectNavigator\");\n }\n async prepare({\n redirectMethod = this._settings.redirectMethod,\n redirectTarget = this._settings.redirectTarget\n }) {\n var _a;\n this._logger.create(\"prepare\");\n let targetWindow = window.self;\n if (redirectTarget === \"top\") {\n targetWindow = (_a = window.top) != null ? _a : window.self;\n }\n const redirect = targetWindow.location[redirectMethod].bind(targetWindow.location);\n let abort;\n return {\n navigate: async (params) => {\n this._logger.create(\"navigate\");\n const promise = new Promise((resolve, reject) => {\n abort = reject;\n });\n redirect(params.url);\n return await promise;\n },\n close: () => {\n this._logger.create(\"close\");\n abort == null ? void 0 : abort(new Error(\"Redirect aborted\"));\n targetWindow.stop();\n }\n };\n }\n async callback() {\n return;\n }\n};\n\n// src/UserManagerEvents.ts\nvar UserManagerEvents = class extends AccessTokenEvents {\n constructor(settings) {\n super({ expiringNotificationTimeInSeconds: settings.accessTokenExpiringNotificationTimeInSeconds });\n this._logger = new Logger(\"UserManagerEvents\");\n this._userLoaded = new Event(\"User loaded\");\n this._userUnloaded = new Event(\"User unloaded\");\n this._silentRenewError = new Event(\"Silent renew error\");\n this._userSignedIn = new Event(\"User signed in\");\n this._userSignedOut = new Event(\"User signed out\");\n this._userSessionChanged = new Event(\"User session changed\");\n }\n load(user, raiseEvent = true) {\n super.load(user);\n if (raiseEvent) {\n this._userLoaded.raise(user);\n }\n }\n unload() {\n super.unload();\n this._userUnloaded.raise();\n }\n /**\n * Add callback: Raised when a user session has been established (or re-established).\n */\n addUserLoaded(cb) {\n return this._userLoaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been established (or re-established).\n */\n removeUserLoaded(cb) {\n return this._userLoaded.removeHandler(cb);\n }\n /**\n * Add callback: Raised when a user session has been terminated.\n */\n addUserUnloaded(cb) {\n return this._userUnloaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been terminated.\n */\n removeUserUnloaded(cb) {\n return this._userUnloaded.removeHandler(cb);\n }\n /**\n * Add callback: Raised when the automatic silent renew has failed.\n */\n addSilentRenewError(cb) {\n return this._silentRenewError.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the automatic silent renew has failed.\n */\n removeSilentRenewError(cb) {\n return this._silentRenewError.removeHandler(cb);\n }\n /**\n * @internal\n */\n _raiseSilentRenewError(e) {\n this._silentRenewError.raise(e);\n }\n /**\n * Add callback: Raised when the user is signed in (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSignedIn(cb) {\n return this._userSignedIn.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user is signed in (when `monitorSession` is set).\n */\n removeUserSignedIn(cb) {\n this._userSignedIn.removeHandler(cb);\n }\n /**\n * @internal\n */\n _raiseUserSignedIn() {\n this._userSignedIn.raise();\n }\n /**\n * Add callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSignedOut(cb) {\n return this._userSignedOut.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n */\n removeUserSignedOut(cb) {\n this._userSignedOut.removeHandler(cb);\n }\n /**\n * @internal\n */\n _raiseUserSignedOut() {\n this._userSignedOut.raise();\n }\n /**\n * Add callback: Raised when the user session changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n addUserSessionChanged(cb) {\n return this._userSessionChanged.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user session changed (when `monitorSession` is set).\n */\n removeUserSessionChanged(cb) {\n this._userSessionChanged.removeHandler(cb);\n }\n /**\n * @internal\n */\n _raiseUserSessionChanged() {\n this._userSessionChanged.raise();\n }\n};\n\n// src/SilentRenewService.ts\nvar SilentRenewService = class {\n constructor(_userManager) {\n this._userManager = _userManager;\n this._logger = new Logger(\"SilentRenewService\");\n this._isStarted = false;\n this._retryTimer = new Timer(\"Retry Silent Renew\");\n this._tokenExpiring = async () => {\n const logger2 = this._logger.create(\"_tokenExpiring\");\n try {\n await this._userManager.signinSilent();\n logger2.debug(\"silent token renewal successful\");\n } catch (err) {\n if (err instanceof ErrorTimeout) {\n logger2.warn(\"ErrorTimeout from signinSilent:\", err, \"retry in 5s\");\n this._retryTimer.init(5);\n return;\n }\n logger2.error(\"Error from signinSilent:\", err);\n this._userManager.events._raiseSilentRenewError(err);\n }\n };\n }\n async start() {\n const logger2 = this._logger.create(\"start\");\n if (!this._isStarted) {\n this._isStarted = true;\n this._userManager.events.addAccessTokenExpiring(this._tokenExpiring);\n this._retryTimer.addHandler(this._tokenExpiring);\n try {\n await this._userManager.getUser();\n } catch (err) {\n logger2.error(\"getUser error\", err);\n }\n }\n }\n stop() {\n if (this._isStarted) {\n this._retryTimer.cancel();\n this._retryTimer.removeHandler(this._tokenExpiring);\n this._userManager.events.removeAccessTokenExpiring(this._tokenExpiring);\n this._isStarted = false;\n }\n }\n};\n\n// src/RefreshState.ts\nvar RefreshState = class {\n constructor(args, resource) {\n this.refresh_token = args.refresh_token;\n this.id_token = args.id_token;\n this.session_state = args.session_state;\n this.scope = args.scope;\n this.profile = args.profile;\n this.resource = resource;\n this.data = args.state;\n }\n};\n\n// src/UserManager.ts\nvar UserManager = class {\n constructor(settings, redirectNavigator, popupNavigator, iframeNavigator) {\n this._logger = new Logger(\"UserManager\");\n this.settings = new UserManagerSettingsStore(settings);\n this._client = new OidcClient(settings);\n this._redirectNavigator = redirectNavigator != null ? redirectNavigator : new RedirectNavigator(this.settings);\n this._popupNavigator = popupNavigator != null ? popupNavigator : new PopupNavigator(this.settings);\n this._iframeNavigator = iframeNavigator != null ? iframeNavigator : new IFrameNavigator(this.settings);\n this._events = new UserManagerEvents(this.settings);\n this._silentRenewService = new SilentRenewService(this);\n if (this.settings.automaticSilentRenew) {\n this.startSilentRenew();\n }\n this._sessionMonitor = null;\n if (this.settings.monitorSession) {\n this._sessionMonitor = new SessionMonitor(this);\n }\n }\n /** Returns an object used to register for events raised by the `UserManager`. */\n get events() {\n return this._events;\n }\n /** Returns an object used to access the metadata configuration of the OIDC provider. */\n get metadataService() {\n return this._client.metadataService;\n }\n /**\n * Returns promise to load the `User` object for the currently authenticated user.\n */\n async getUser() {\n const logger2 = this._logger.create(\"getUser\");\n const user = await this._loadUser();\n if (user) {\n logger2.info(\"user loaded\");\n this._events.load(user, false);\n return user;\n }\n logger2.info(\"user not found in storage\");\n return null;\n }\n /**\n * Returns promise to remove from any storage the currently authenticated user.\n */\n async removeUser() {\n const logger2 = this._logger.create(\"removeUser\");\n await this.storeUser(null);\n logger2.info(\"user removed from storage\");\n this._events.unload();\n }\n /**\n * Returns promise to trigger a redirect of the current window to the authorization endpoint.\n */\n async signinRedirect(args = {}) {\n this._logger.create(\"signinRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signinStart({\n request_type: \"si:r\",\n ...requestArgs\n }, handle);\n }\n /**\n * Returns promise to process response from the authorization endpoint. The result of the promise is the authenticated `User`.\n */\n async signinRedirectCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signinRedirectCallback\");\n const user = await this._signinEnd(url);\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n return user;\n }\n /**\n * Returns promise to process the signin with user/password. The result of the promise is the authenticated `User`.\n *\n * Throws an ErrorResponse in case of wrong authentication.\n */\n async signinResourceOwnerCredentials({\n username,\n password,\n skipUserInfo = false\n }) {\n const logger2 = this._logger.create(\"signinResourceOwnerCredential\");\n const signinResponse = await this._client.processResourceOwnerPasswordCredentials({ username, password, skipUserInfo, extraTokenParams: this.settings.extraTokenParams });\n logger2.debug(\"got signin response\");\n const user = await this._buildUser(signinResponse);\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n return user;\n }\n /**\n * Returns promise to trigger a request (via a popup window) to the authorization endpoint. The result of the promise is the authenticated `User`.\n */\n async signinPopup(args = {}) {\n const logger2 = this._logger.create(\"signinPopup\");\n const {\n popupWindowFeatures,\n popupWindowTarget,\n ...requestArgs\n } = args;\n const url = this.settings.popup_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No popup_redirect_uri configured\"));\n }\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget });\n const user = await this._signin({\n request_type: \"si:p\",\n redirect_uri: url,\n display: \"popup\",\n ...requestArgs\n }, handle);\n if (user) {\n if (user.profile && user.profile.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n }\n return user;\n }\n /**\n * Returns promise to notify the opening window of response from the authorization endpoint.\n */\n async signinPopupCallback(url = window.location.href, keepOpen = false) {\n const logger2 = this._logger.create(\"signinPopupCallback\");\n await this._popupNavigator.callback(url, { keepOpen });\n logger2.info(\"success\");\n }\n /**\n * Returns promise to trigger a silent request (via an iframe) to the authorization endpoint.\n * The result of the promise is the authenticated `User`.\n */\n async signinSilent(args = {}) {\n var _a;\n const logger2 = this._logger.create(\"signinSilent\");\n const {\n silentRequestTimeoutInSeconds,\n resource,\n ...requestArgs\n } = args;\n let user = await this._loadUser();\n if (user == null ? void 0 : user.refresh_token) {\n logger2.debug(\"using refresh token\");\n const state = new RefreshState(user, resource);\n return await this._useRefreshToken(state);\n }\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n let verifySub;\n if (user && this.settings.validateSubOnSilentRenew) {\n logger2.debug(\"subject prior to silent renew:\", user.profile.sub);\n verifySub = user.profile.sub;\n }\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n user = await this._signin({\n request_type: \"si:s\",\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user == null ? void 0 : user.id_token : void 0,\n ...requestArgs\n }, handle, verifySub);\n if (user) {\n if ((_a = user.profile) == null ? void 0 : _a.sub) {\n logger2.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger2.info(\"no subject\");\n }\n }\n return user;\n }\n async _useRefreshToken(state) {\n const response = await this._client.useRefreshToken({\n state,\n timeoutInSeconds: this.settings.silentRequestTimeoutInSeconds\n });\n const user = new User({ ...state, ...response });\n await this.storeUser(user);\n this._events.load(user);\n return user;\n }\n /**\n * Returns promise to notify the parent window of response from the authorization endpoint.\n */\n async signinSilentCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signinSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger2.info(\"success\");\n }\n async signinCallback(url = window.location.href) {\n const { state } = await this._client.readSigninResponseState(url);\n switch (state.request_type) {\n case \"si:r\":\n return await this.signinRedirectCallback(url);\n case \"si:p\":\n return await this.signinPopupCallback(url);\n case \"si:s\":\n return await this.signinSilentCallback(url);\n default:\n throw new Error(\"invalid response_type in state\");\n }\n }\n async signoutCallback(url = window.location.href, keepOpen = false) {\n const { state } = await this._client.readSignoutResponseState(url);\n if (!state) {\n return;\n }\n switch (state.request_type) {\n case \"so:r\":\n await this.signoutRedirectCallback(url);\n break;\n case \"so:p\":\n await this.signoutPopupCallback(url, keepOpen);\n break;\n case \"so:s\":\n await this.signoutSilentCallback(url);\n break;\n default:\n throw new Error(\"invalid response_type in state\");\n }\n }\n /**\n * Returns promise to query OP for user's current signin status. Returns object with session_state and subject identifier.\n */\n async querySessionStatus(args = {}) {\n const logger2 = this._logger.create(\"querySessionStatus\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger2.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n const user = await this._loadUser();\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n const navResponse = await this._signinStart({\n request_type: \"si:s\",\n // this acts like a signin silent\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user == null ? void 0 : user.id_token : void 0,\n response_type: this.settings.query_status_response_type,\n scope: \"openid\",\n skipUserInfo: true,\n ...requestArgs\n }, handle);\n try {\n const signinResponse = await this._client.processSigninResponse(navResponse.url);\n logger2.debug(\"got signin response\");\n if (signinResponse.session_state && signinResponse.profile.sub) {\n logger2.info(\"success for subject\", signinResponse.profile.sub);\n return {\n session_state: signinResponse.session_state,\n sub: signinResponse.profile.sub,\n sid: signinResponse.profile.sid\n };\n }\n logger2.info(\"success, user not authenticated\");\n return null;\n } catch (err) {\n if (this.settings.monitorAnonymousSession && err instanceof ErrorResponse) {\n switch (err.error) {\n case \"login_required\":\n case \"consent_required\":\n case \"interaction_required\":\n case \"account_selection_required\":\n logger2.info(\"success for anonymous user\");\n return {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n session_state: err.session_state\n };\n }\n }\n throw err;\n }\n }\n async _signin(args, handle, verifySub) {\n const navResponse = await this._signinStart(args, handle);\n return await this._signinEnd(navResponse.url, verifySub);\n }\n async _signinStart(args, handle) {\n const logger2 = this._logger.create(\"_signinStart\");\n try {\n const signinRequest = await this._client.createSigninRequest(args);\n logger2.debug(\"got signin request\");\n return await handle.navigate({\n url: signinRequest.url,\n state: signinRequest.state.id,\n response_mode: signinRequest.state.response_mode,\n scriptOrigin: this.settings.iframeScriptOrigin\n });\n } catch (err) {\n logger2.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n async _signinEnd(url, verifySub) {\n const logger2 = this._logger.create(\"_signinEnd\");\n const signinResponse = await this._client.processSigninResponse(url);\n logger2.debug(\"got signin response\");\n const user = await this._buildUser(signinResponse, verifySub);\n return user;\n }\n async _buildUser(signinResponse, verifySub) {\n const logger2 = this._logger.create(\"_buildUser\");\n const user = new User(signinResponse);\n if (verifySub) {\n if (verifySub !== user.profile.sub) {\n logger2.debug(\"current user does not match user returned from signin. sub from signin:\", user.profile.sub);\n throw new ErrorResponse({ ...signinResponse, error: \"login_required\" });\n }\n logger2.debug(\"current user matches user returned from signin\");\n }\n await this.storeUser(user);\n logger2.debug(\"user stored\");\n this._events.load(user);\n return user;\n }\n /**\n * Returns promise to trigger a redirect of the current window to the end session endpoint.\n */\n async signoutRedirect(args = {}) {\n const logger2 = this._logger.create(\"signoutRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signoutStart({\n request_type: \"so:r\",\n post_logout_redirect_uri: this.settings.post_logout_redirect_uri,\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Returns promise to process response from the end session endpoint.\n */\n async signoutRedirectCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signoutRedirectCallback\");\n const response = await this._signoutEnd(url);\n logger2.info(\"success\");\n return response;\n }\n /**\n * Returns promise to trigger a redirect of a popup window window to the end session endpoint.\n */\n async signoutPopup(args = {}) {\n const logger2 = this._logger.create(\"signoutPopup\");\n const {\n popupWindowFeatures,\n popupWindowTarget,\n ...requestArgs\n } = args;\n const url = this.settings.popup_post_logout_redirect_uri;\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget });\n await this._signout({\n request_type: \"so:p\",\n post_logout_redirect_uri: url,\n // we're putting a dummy entry in here because we\n // need a unique id from the state for notification\n // to the parent window, which is necessary if we\n // plan to return back to the client after signout\n // and so we can close the popup after signout\n state: url == null ? void 0 : {},\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Returns promise to process response from the end session endpoint from a popup window.\n */\n async signoutPopupCallback(url = window.location.href, keepOpen = false) {\n const logger2 = this._logger.create(\"signoutPopupCallback\");\n await this._popupNavigator.callback(url, { keepOpen });\n logger2.info(\"success\");\n }\n async _signout(args, handle) {\n const navResponse = await this._signoutStart(args, handle);\n return await this._signoutEnd(navResponse.url);\n }\n async _signoutStart(args = {}, handle) {\n var _a;\n const logger2 = this._logger.create(\"_signoutStart\");\n try {\n const user = await this._loadUser();\n logger2.debug(\"loaded current user from storage\");\n if (this.settings.revokeTokensOnSignout) {\n await this._revokeInternal(user);\n }\n const id_token = args.id_token_hint || user && user.id_token;\n if (id_token) {\n logger2.debug(\"setting id_token_hint in signout request\");\n args.id_token_hint = id_token;\n }\n await this.removeUser();\n logger2.debug(\"user removed, creating signout request\");\n const signoutRequest = await this._client.createSignoutRequest(args);\n logger2.debug(\"got signout request\");\n return await handle.navigate({\n url: signoutRequest.url,\n state: (_a = signoutRequest.state) == null ? void 0 : _a.id,\n scriptOrigin: this.settings.iframeScriptOrigin\n });\n } catch (err) {\n logger2.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n async _signoutEnd(url) {\n const logger2 = this._logger.create(\"_signoutEnd\");\n const signoutResponse = await this._client.processSignoutResponse(url);\n logger2.debug(\"got signout response\");\n return signoutResponse;\n }\n /**\n * Returns promise to trigger a silent request (via an iframe) to the end session endpoint.\n */\n async signoutSilent(args = {}) {\n var _a;\n const logger2 = this._logger.create(\"signoutSilent\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n const id_token_hint = this.settings.includeIdTokenInSilentSignout ? (_a = await this._loadUser()) == null ? void 0 : _a.id_token : void 0;\n const url = this.settings.popup_post_logout_redirect_uri;\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n await this._signout({\n request_type: \"so:s\",\n post_logout_redirect_uri: url,\n id_token_hint,\n ...requestArgs\n }, handle);\n logger2.info(\"success\");\n }\n /**\n * Returns promise to notify the parent window of response from the end session endpoint.\n */\n async signoutSilentCallback(url = window.location.href) {\n const logger2 = this._logger.create(\"signoutSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger2.info(\"success\");\n }\n async revokeTokens(types) {\n const user = await this._loadUser();\n await this._revokeInternal(user, types);\n }\n async _revokeInternal(user, types = this.settings.revokeTokenTypes) {\n const logger2 = this._logger.create(\"_revokeInternal\");\n if (!user)\n return;\n const typesPresent = types.filter((type) => typeof user[type] === \"string\");\n if (!typesPresent.length) {\n logger2.debug(\"no need to revoke due to no token(s)\");\n return;\n }\n for (const type of typesPresent) {\n await this._client.revokeToken(\n user[type],\n // eslint-disable-line @typescript-eslint/no-non-null-assertion\n type\n );\n logger2.info(`${type} revoked successfully`);\n if (type !== \"access_token\") {\n user[type] = null;\n }\n }\n await this.storeUser(user);\n logger2.debug(\"user stored\");\n this._events.load(user);\n }\n /**\n * Enables silent renew for the `UserManager`.\n */\n startSilentRenew() {\n this._logger.create(\"startSilentRenew\");\n void this._silentRenewService.start();\n }\n /**\n * Disables silent renew for the `UserManager`.\n */\n stopSilentRenew() {\n this._silentRenewService.stop();\n }\n get _userStoreKey() {\n return `user:${this.settings.authority}:${this.settings.client_id}`;\n }\n async _loadUser() {\n const logger2 = this._logger.create(\"_loadUser\");\n const storageString = await this.settings.userStore.get(this._userStoreKey);\n if (storageString) {\n logger2.debug(\"user storageString loaded\");\n return User.fromStorageString(storageString);\n }\n logger2.debug(\"no user storageString\");\n return null;\n }\n async storeUser(user) {\n const logger2 = this._logger.create(\"storeUser\");\n if (user) {\n logger2.debug(\"storing user\");\n const storageString = user.toStorageString();\n await this.settings.userStore.set(this._userStoreKey, storageString);\n } else {\n this._logger.debug(\"removing user\");\n await this.settings.userStore.remove(this._userStoreKey);\n }\n }\n /**\n * Removes stale state entries in storage for incomplete authorize requests.\n */\n async clearStaleState() {\n await this._client.clearStaleState();\n }\n};\n\n// package.json\nvar version = \"2.3.0\";\n\n// src/Version.ts\nvar Version = version;\nexport {\n AccessTokenEvents,\n CheckSessionIFrame,\n ErrorResponse,\n ErrorTimeout,\n InMemoryWebStorage,\n Log,\n Logger,\n MetadataService,\n OidcClient,\n OidcClientSettingsStore,\n SessionMonitor,\n SigninResponse,\n SigninState,\n SignoutResponse,\n State,\n User,\n UserManager,\n UserManagerSettingsStore,\n Version,\n WebStorageStateStore\n};\n//# sourceMappingURL=oidc-client-ts.js.map\n"],"names":["nopLogger","level","logger","Log","Log2","reset","setLevel","value","setLogger","Logger","_name","args","err","method","methodLogger","name","staticMethod","staticLogger","prefix","UUID_V4_TEMPLATE","CryptoUtils","CryptoJS","c","code_verifier","hashed","sha256","Base64","client_id","client_secret","basicAuth","Utf8","Event","cb","idx","ev","JwtUtils","token","jwt_decode","PopupUtils","features","_a","_b","_c","width","key","Timer","diff","durationInSeconds","logger2","expiration","timerDurationInSeconds","UrlUtils","url","responseMode","params","ErrorResponse","form","ErrorTimeout","message","AccessTokenEvents","container","duration","expiring","expired","CheckSessionIFrame","_callback","_client_id","_intervalInSeconds","_stopOnError","e","parsedUrl","resolve","session_state","send","InMemoryWebStorage","index","JsonService","additionalContentTypes","_jwtHandler","_extraHeaders","input","init","timeoutInSeconds","initFetch","controller","timeoutId","credentials","headers","response","contentType","item","json","body","initCredentials","responseText","customKeys","protectedHeaders","headerName","content","MetadataService","_settings","metadata","optional","jwks_uri","keySet","WebStorageStateStore","store","len","keys","DefaultResponseType","DefaultScope","DefaultClientAuthentication","DefaultResponseMode","DefaultStaleStateAgeInSeconds","DefaultClockSkewInSeconds","OidcClientSettingsStore","authority","metadataUrl","signingKeys","metadataSeed","response_type","scope","redirect_uri","post_logout_redirect_uri","client_authentication","prompt","display","max_age","ui_locales","acr_values","resource","response_mode","filterProtocolClaims","loadUserInfo","staleStateAgeInSeconds","clockSkewInSeconds","userInfoJwtIssuer","mergeClaims","disablePKCE","stateStore","refreshTokenCredentials","revokeTokenAdditionalContentTypes","fetchRequestCredentials","refreshTokenAllowedScope","extraQueryParams","extraTokenParams","extraHeaders","UserInfoService","_metadataService","payload","claims","TokenClient","grant_type","param","ResponseValidator","_claimsService","state","skipUserInfo","hasIdToken","validateSub","tokenResponse","existingToken","incoming","existing","State","storageString","storage","age","cutoff","i","remove","SigninState","data","SigninRequest","state_data","request_type","nonce","optionalParams","r","OidcScope","SigninResponse","SignoutRequest","id_token_hint","SignoutResponse","DefaultProtocolClaims","InternalRequiredProtocolClaims","ClaimsService","result","protocolClaims","claim","claims1","claims2","values","previousValue","OidcClient","settings","metadataService","request","request_uri","login_hint","signinRequest","signinState","removeState","storedStateString","username","password","signinResponse","allowableScopes","s","signoutState","type","SessionMonitor","_userManager","user","intervalInSeconds","stopOnError","checkSessionIFrame","timerHandle","session","tmpUser","raiseEvent","User","expires_in","messageSource","AbstractChildWindow","keepOpen","reject","listener","origin","reason","dispose","parent","targetOrigin","DefaultPopupWindowFeatures","DefaultPopupTarget","DefaultAccessTokenExpiringNotificationTimeInSeconds","DefaultCheckSessionIntervalInSeconds","DefaultSilentRequestTimeoutInSeconds","UserManagerSettingsStore","popup_redirect_uri","popup_post_logout_redirect_uri","popupWindowFeatures","popupWindowTarget","redirectMethod","redirectTarget","iframeNotifyParentOrigin","iframeScriptOrigin","silent_redirect_uri","silentRequestTimeoutInSeconds","automaticSilentRenew","validateSubOnSilentRenew","includeIdTokenInSilentRenew","monitorSession","monitorAnonymousSession","checkSessionIntervalInSeconds","query_status_response_type","stopCheckSessionOnError","revokeTokenTypes","revokeTokensOnSignout","includeIdTokenInSilentSignout","accessTokenExpiringNotificationTimeInSeconds","userStore","IFrameWindow","iframe","timer","_a2","frame","IFrameNavigator","checkForPopupClosedInterval","second","PopupWindow","centeredPopup","popupClosedInterval","PopupNavigator","RedirectNavigator","targetWindow","redirect","abort","promise","UserManagerEvents","SilentRenewService","RefreshState","UserManager","redirectNavigator","popupNavigator","iframeNavigator","requestArgs","handle","verifySub","navResponse","id_token","signoutRequest","signoutResponse","types","typesPresent"],"mappings":"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","x_google_ignoreList":[0]}