{"version":3,"file":"static/js/7283.37f01536.js","sources":["webpack://mw-frontend/./node_modules/keycloak-js/lib/keycloak.js"],"sourcesContent":["/*\n * Copyright 2016 Red Hat, Inc. and/or its affiliates\n * and other contributors as indicated by the @author tags.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction Keycloak (config) {\n    if (!(this instanceof Keycloak)) {\n        throw new Error(\"The 'Keycloak' constructor must be invoked with 'new'.\")\n    }\n\n    if (typeof config !== 'string' && !isObject(config)) {\n        throw new Error(\"The 'Keycloak' constructor must be provided with a configuration object, or a URL to a JSON configuration file.\");\n    }\n\n    if (isObject(config)) {\n        const requiredProperties = 'oidcProvider' in config\n            ? ['clientId']\n            : ['url', 'realm', 'clientId'];\n\n        for (const property of requiredProperties) {\n            if (!config[property]) {\n                throw new Error(`The configuration object is missing the required '${property}' property.`);\n            }\n        }\n    }\n\n    var kc = this;\n    var adapter;\n    var refreshQueue = [];\n    var callbackStorage;\n\n    var loginIframe = {\n        enable: true,\n        callbackList: [],\n        interval: 5\n    };\n\n    kc.didInitialize = false;\n\n    var useNonce = true;\n    var logInfo = createLogger(console.info);\n    var logWarn = createLogger(console.warn);\n\n    if (!globalThis.isSecureContext) {\n        logWarn(\n            \"[KEYCLOAK] Keycloak JS must be used in a 'secure context' to function properly as it relies on browser APIs that are otherwise not available.\\n\" +\n            \"Continuing to run your application insecurely will lead to unexpected behavior and breakage.\\n\\n\" +\n            \"For more information see: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts\"\n        );\n    }\n\n    kc.init = function (initOptions = {}) {\n        if (kc.didInitialize) {\n            throw new Error(\"A 'Keycloak' instance can only be initialized once.\");\n        }\n\n        kc.didInitialize = true;\n\n        kc.authenticated = false;\n\n        callbackStorage = createCallbackStorage();\n        var adapters = ['default', 'cordova', 'cordova-native'];\n\n        if (adapters.indexOf(initOptions.adapter) > -1) {\n            adapter = loadAdapter(initOptions.adapter);\n        } else if (typeof initOptions.adapter === \"object\") {\n            adapter = initOptions.adapter;\n        } else {\n            if (window.Cordova || window.cordova) {\n                adapter = loadAdapter('cordova');\n            } else {\n                adapter = loadAdapter();\n            }\n        }\n\n        if (typeof initOptions.useNonce !== 'undefined') {\n            useNonce = initOptions.useNonce;\n        }\n\n        if (typeof initOptions.checkLoginIframe !== 'undefined') {\n            loginIframe.enable = initOptions.checkLoginIframe;\n        }\n\n        if (initOptions.checkLoginIframeInterval) {\n            loginIframe.interval = initOptions.checkLoginIframeInterval;\n        }\n\n        if (initOptions.onLoad === 'login-required') {\n            kc.loginRequired = true;\n        }\n\n        if (initOptions.responseMode) {\n            if (initOptions.responseMode === 'query' || initOptions.responseMode === 'fragment') {\n                kc.responseMode = initOptions.responseMode;\n            } else {\n                throw 'Invalid value for responseMode';\n            }\n        }\n\n        if (initOptions.flow) {\n            switch (initOptions.flow) {\n                case 'standard':\n                    kc.responseType = 'code';\n                    break;\n                case 'implicit':\n                    kc.responseType = 'id_token token';\n                    break;\n                case 'hybrid':\n                    kc.responseType = 'code id_token token';\n                    break;\n                default:\n                    throw 'Invalid value for flow';\n            }\n            kc.flow = initOptions.flow;\n        }\n\n        if (initOptions.timeSkew != null) {\n            kc.timeSkew = initOptions.timeSkew;\n        }\n\n        if(initOptions.redirectUri) {\n            kc.redirectUri = initOptions.redirectUri;\n        }\n\n        if (initOptions.silentCheckSsoRedirectUri) {\n            kc.silentCheckSsoRedirectUri = initOptions.silentCheckSsoRedirectUri;\n        }\n\n        if (typeof initOptions.silentCheckSsoFallback === 'boolean') {\n            kc.silentCheckSsoFallback = initOptions.silentCheckSsoFallback;\n        } else {\n            kc.silentCheckSsoFallback = true;\n        }\n\n        if (typeof initOptions.pkceMethod !== \"undefined\") {\n            if (initOptions.pkceMethod !== \"S256\" && initOptions.pkceMethod !== false) {\n                throw new TypeError(`Invalid value for pkceMethod', expected 'S256' or false but got ${initOptions.pkceMethod}.`);\n            }\n\n            kc.pkceMethod = initOptions.pkceMethod;\n        } else {\n            kc.pkceMethod = \"S256\";\n        }\n\n        if (typeof initOptions.enableLogging === 'boolean') {\n            kc.enableLogging = initOptions.enableLogging;\n        } else {\n            kc.enableLogging = false;\n        }\n\n        if (initOptions.logoutMethod === 'POST') {\n            kc.logoutMethod = 'POST';\n        } else {\n            kc.logoutMethod = 'GET';\n        }\n\n        if (typeof initOptions.scope === 'string') {\n            kc.scope = initOptions.scope;\n        }\n\n        if (typeof initOptions.acrValues === 'string') {\n            kc.acrValues = initOptions.acrValues;\n        }\n\n        if (typeof initOptions.messageReceiveTimeout === 'number' && initOptions.messageReceiveTimeout > 0) {\n            kc.messageReceiveTimeout = initOptions.messageReceiveTimeout;\n        } else {\n            kc.messageReceiveTimeout = 10000;\n        }\n\n        if (!kc.responseMode) {\n            kc.responseMode = 'fragment';\n        }\n        if (!kc.responseType) {\n            kc.responseType = 'code';\n            kc.flow = 'standard';\n        }\n\n        var promise = createPromise();\n\n        var initPromise = createPromise();\n        initPromise.promise.then(function() {\n            kc.onReady && kc.onReady(kc.authenticated);\n            promise.setSuccess(kc.authenticated);\n        }).catch(function(error) {\n            promise.setError(error);\n        });\n\n        var configPromise = loadConfig();\n\n        function onLoad() {\n            var doLogin = function(prompt) {\n                if (!prompt) {\n                    options.prompt = 'none';\n                }\n\n                if (initOptions.locale) {\n                    options.locale = initOptions.locale;\n                }\n                kc.login(options).then(function () {\n                    initPromise.setSuccess();\n                }).catch(function (error) {\n                    initPromise.setError(error);\n                });\n            }\n\n            var checkSsoSilently = async function() {\n                var ifrm = document.createElement(\"iframe\");\n                var src = await kc.createLoginUrl({prompt: 'none', redirectUri: kc.silentCheckSsoRedirectUri});\n                ifrm.setAttribute(\"src\", src);\n                ifrm.setAttribute(\"sandbox\", \"allow-storage-access-by-user-activation allow-scripts allow-same-origin\");\n                ifrm.setAttribute(\"title\", \"keycloak-silent-check-sso\");\n                ifrm.style.display = \"none\";\n                document.body.appendChild(ifrm);\n\n                var messageCallback = function(event) {\n                    if (event.origin !== window.location.origin || ifrm.contentWindow !== event.source) {\n                        return;\n                    }\n\n                    var oauth = parseCallback(event.data);\n                    processCallback(oauth, initPromise);\n\n                    document.body.removeChild(ifrm);\n                    window.removeEventListener(\"message\", messageCallback);\n                };\n\n                window.addEventListener(\"message\", messageCallback);\n            };\n\n            var options = {};\n            switch (initOptions.onLoad) {\n                case 'check-sso':\n                    if (loginIframe.enable) {\n                        setupCheckLoginIframe().then(function() {\n                            checkLoginIframe().then(function (unchanged) {\n                                if (!unchanged) {\n                                    kc.silentCheckSsoRedirectUri ? checkSsoSilently() : doLogin(false);\n                                } else {\n                                    initPromise.setSuccess();\n                                }\n                            }).catch(function (error) {\n                                initPromise.setError(error);\n                            });\n                        });\n                    } else {\n                        kc.silentCheckSsoRedirectUri ? checkSsoSilently() : doLogin(false);\n                    }\n                    break;\n                case 'login-required':\n                    doLogin(true);\n                    break;\n                default:\n                    throw 'Invalid value for onLoad';\n            }\n        }\n\n        function processInit() {\n            var callback = parseCallback(window.location.href);\n\n            if (callback) {\n                window.history.replaceState(window.history.state, null, callback.newUrl);\n            }\n\n            if (callback && callback.valid) {\n                return setupCheckLoginIframe().then(function() {\n                    processCallback(callback, initPromise);\n                }).catch(function (error) {\n                    initPromise.setError(error);\n                });\n            }\n\n            if (initOptions.token && initOptions.refreshToken) {\n                setToken(initOptions.token, initOptions.refreshToken, initOptions.idToken);\n\n                if (loginIframe.enable) {\n                    setupCheckLoginIframe().then(function() {\n                        checkLoginIframe().then(function (unchanged) {\n                            if (unchanged) {\n                                kc.onAuthSuccess && kc.onAuthSuccess();\n                                initPromise.setSuccess();\n                                scheduleCheckIframe();\n                            } else {\n                                initPromise.setSuccess();\n                            }\n                        }).catch(function (error) {\n                            initPromise.setError(error);\n                        });\n                    });\n                } else {\n                    kc.updateToken(-1).then(function() {\n                        kc.onAuthSuccess && kc.onAuthSuccess();\n                        initPromise.setSuccess();\n                    }).catch(function(error) {\n                        kc.onAuthError && kc.onAuthError();\n                        if (initOptions.onLoad) {\n                            onLoad();\n                        } else {\n                            initPromise.setError(error);\n                        }\n                    });\n                }\n            } else if (initOptions.onLoad) {\n                onLoad();\n            } else {\n                initPromise.setSuccess();\n            }\n        }\n\n        configPromise.then(function () {\n            check3pCookiesSupported()\n                .then(processInit)\n                .catch(function (error) {\n                    promise.setError(error);\n                });\n        });\n        configPromise.catch(function (error) {\n            promise.setError(error);\n        });\n\n        return promise.promise;\n    }\n\n    kc.login = function (options) {\n        return adapter.login(options);\n    }\n\n    function generateRandomData(len) {\n        if (typeof crypto === \"undefined\" || typeof crypto.getRandomValues === \"undefined\") {\n            throw new Error(\"Web Crypto API is not available.\");\n        }\n\n        return crypto.getRandomValues(new Uint8Array(len));\n    }\n\n    function generateCodeVerifier(len) {\n        return generateRandomString(len, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789');\n    }\n\n    function generateRandomString(len, alphabet){\n        var randomData = generateRandomData(len);\n        var chars = new Array(len);\n        for (var i = 0; i < len; i++) {\n            chars[i] = alphabet.charCodeAt(randomData[i] % alphabet.length);\n        }\n        return String.fromCharCode.apply(null, chars);\n    }\n\n    async function generatePkceChallenge(pkceMethod, codeVerifier) {\n        if (pkceMethod !== \"S256\") {\n            throw new TypeError(`Invalid value for 'pkceMethod', expected 'S256' but got '${pkceMethod}'.`);\n        }\n\n        // hash codeVerifier, then encode as url-safe base64 without padding\n        const hashBytes = new Uint8Array(await sha256Digest(codeVerifier));\n        const encodedHash = bytesToBase64(hashBytes)\n            .replace(/\\+/g, '-')\n            .replace(/\\//g, '_')\n            .replace(/\\=/g, '');\n\n        return encodedHash;\n    }\n\n    function buildClaimsParameter(requestedAcr){\n        var claims = {\n            id_token: {\n                acr: requestedAcr\n            }\n        }\n        return JSON.stringify(claims);\n    }\n\n    kc.createLoginUrl = async function(options) {\n        var state = createUUID();\n        var nonce = createUUID();\n\n        var redirectUri = adapter.redirectUri(options);\n\n        var callbackState = {\n            state: state,\n            nonce: nonce,\n            redirectUri: encodeURIComponent(redirectUri),\n            loginOptions: options\n        };\n\n        if (options && options.prompt) {\n            callbackState.prompt = options.prompt;\n        }\n\n        var baseUrl;\n        if (options && options.action == 'register') {\n            baseUrl = kc.endpoints.register();\n        } else {\n            baseUrl = kc.endpoints.authorize();\n        }\n\n        var scope = options && options.scope || kc.scope;\n        if (!scope) {\n            // if scope is not set, default to \"openid\"\n            scope = \"openid\";\n        } else if (scope.indexOf(\"openid\") === -1) {\n            // if openid scope is missing, prefix the given scopes with it\n            scope = \"openid \" + scope;\n        }\n\n        var url = baseUrl\n            + '?client_id=' + encodeURIComponent(kc.clientId)\n            + '&redirect_uri=' + encodeURIComponent(redirectUri)\n            + '&state=' + encodeURIComponent(state)\n            + '&response_mode=' + encodeURIComponent(kc.responseMode)\n            + '&response_type=' + encodeURIComponent(kc.responseType)\n            + '&scope=' + encodeURIComponent(scope);\n        if (useNonce) {\n            url = url + '&nonce=' + encodeURIComponent(nonce);\n        }\n\n        if (options && options.prompt) {\n            url += '&prompt=' + encodeURIComponent(options.prompt);\n        }\n\n        if (options && typeof options.maxAge === 'number') {\n            url += '&max_age=' + encodeURIComponent(options.maxAge);\n        }\n\n        if (options && options.loginHint) {\n            url += '&login_hint=' + encodeURIComponent(options.loginHint);\n        }\n\n        if (options && options.idpHint) {\n            url += '&kc_idp_hint=' + encodeURIComponent(options.idpHint);\n        }\n\n        if (options && options.action && options.action != 'register') {\n            url += '&kc_action=' + encodeURIComponent(options.action);\n        }\n\n        if (options && options.locale) {\n            url += '&ui_locales=' + encodeURIComponent(options.locale);\n        }\n\n        if (options && options.acr) {\n            var claimsParameter = buildClaimsParameter(options.acr);\n            url += '&claims=' + encodeURIComponent(claimsParameter);\n        }\n\n        if ((options && options.acrValues) || kc.acrValues) {\n            url += '&acr_values=' + encodeURIComponent(options.acrValues || kc.acrValues);\n        }\n\n        if (kc.pkceMethod) {\n            try {\n                const codeVerifier = generateCodeVerifier(96);\n                const pkceChallenge = await generatePkceChallenge(kc.pkceMethod, codeVerifier);\n\n                callbackState.pkceCodeVerifier = codeVerifier;\n\n                url += '&code_challenge=' + pkceChallenge;\n                url += '&code_challenge_method=' + kc.pkceMethod;\n            } catch (error) {\n                throw new Error(\"Failed to generate PKCE challenge.\", { cause: error });\n            }\n        }\n\n        callbackStorage.add(callbackState);\n\n        return url;\n    }\n\n    kc.logout = function(options) {\n        return adapter.logout(options);\n    }\n\n    kc.createLogoutUrl = function(options) {\n\n        const logoutMethod = options?.logoutMethod ?? kc.logoutMethod;\n        if (logoutMethod === 'POST') {\n            return kc.endpoints.logout();\n        }\n\n        var url = kc.endpoints.logout()\n            + '?client_id=' + encodeURIComponent(kc.clientId)\n            + '&post_logout_redirect_uri=' + encodeURIComponent(adapter.redirectUri(options, false));\n\n        if (kc.idToken) {\n            url += '&id_token_hint=' + encodeURIComponent(kc.idToken);\n        }\n\n        return url;\n    }\n\n    kc.register = function (options) {\n        return adapter.register(options);\n    }\n\n    kc.createRegisterUrl = async function(options) {\n        if (!options) {\n            options = {};\n        }\n        options.action = 'register';\n        return await kc.createLoginUrl(options);\n    }\n\n    kc.createAccountUrl = function(options) {\n        var realm = getRealmUrl();\n        var url = undefined;\n        if (typeof realm !== 'undefined') {\n            url = realm\n            + '/account'\n            + '?referrer=' + encodeURIComponent(kc.clientId)\n            + '&referrer_uri=' + encodeURIComponent(adapter.redirectUri(options));\n        }\n        return url;\n    }\n\n    kc.accountManagement = function() {\n        return adapter.accountManagement();\n    }\n\n    kc.hasRealmRole = function (role) {\n        var access = kc.realmAccess;\n        return !!access && access.roles.indexOf(role) >= 0;\n    }\n\n    kc.hasResourceRole = function(role, resource) {\n        if (!kc.resourceAccess) {\n            return false;\n        }\n\n        var access = kc.resourceAccess[resource || kc.clientId];\n        return !!access && access.roles.indexOf(role) >= 0;\n    }\n\n    kc.loadUserProfile = function() {\n        var url = getRealmUrl() + '/account';\n        var req = new XMLHttpRequest();\n        req.open('GET', url, true);\n        req.setRequestHeader('Accept', 'application/json');\n        req.setRequestHeader('Authorization', 'bearer ' + kc.token);\n\n        var promise = createPromise();\n\n        req.onreadystatechange = function () {\n            if (req.readyState == 4) {\n                if (req.status == 200) {\n                    kc.profile = JSON.parse(req.responseText);\n                    promise.setSuccess(kc.profile);\n                } else {\n                    promise.setError();\n                }\n            }\n        }\n\n        req.send();\n\n        return promise.promise;\n    }\n\n    kc.loadUserInfo = function() {\n        var url = kc.endpoints.userinfo();\n        var req = new XMLHttpRequest();\n        req.open('GET', url, true);\n        req.setRequestHeader('Accept', 'application/json');\n        req.setRequestHeader('Authorization', 'bearer ' + kc.token);\n\n        var promise = createPromise();\n\n        req.onreadystatechange = function () {\n            if (req.readyState == 4) {\n                if (req.status == 200) {\n                    kc.userInfo = JSON.parse(req.responseText);\n                    promise.setSuccess(kc.userInfo);\n                } else {\n                    promise.setError();\n                }\n            }\n        }\n\n        req.send();\n\n        return promise.promise;\n    }\n\n    kc.isTokenExpired = function(minValidity) {\n        if (!kc.tokenParsed || (!kc.refreshToken && kc.flow != 'implicit' )) {\n            throw 'Not authenticated';\n        }\n\n        if (kc.timeSkew == null) {\n            logInfo('[KEYCLOAK] Unable to determine if token is expired as timeskew is not set');\n            return true;\n        }\n\n        var expiresIn = kc.tokenParsed['exp'] - Math.ceil(new Date().getTime() / 1000) + kc.timeSkew;\n        if (minValidity) {\n            if (isNaN(minValidity)) {\n                throw 'Invalid minValidity';\n            }\n            expiresIn -= minValidity;\n        }\n        return expiresIn < 0;\n    }\n\n    kc.updateToken = function(minValidity) {\n        var promise = createPromise();\n\n        if (!kc.refreshToken) {\n            promise.setError();\n            return promise.promise;\n        }\n\n        minValidity = minValidity || 5;\n\n        var exec = function() {\n            var refreshToken = false;\n            if (minValidity == -1) {\n                refreshToken = true;\n                logInfo('[KEYCLOAK] Refreshing token: forced refresh');\n            } else if (!kc.tokenParsed || kc.isTokenExpired(minValidity)) {\n                refreshToken = true;\n                logInfo('[KEYCLOAK] Refreshing token: token expired');\n            }\n\n            if (!refreshToken) {\n                promise.setSuccess(false);\n            } else {\n                var params = 'grant_type=refresh_token&' + 'refresh_token=' + kc.refreshToken;\n                var url = kc.endpoints.token();\n\n                refreshQueue.push(promise);\n\n                if (refreshQueue.length == 1) {\n                    var req = new XMLHttpRequest();\n                    req.open('POST', url, true);\n                    req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n                    req.withCredentials = true;\n\n                    params += '&client_id=' + encodeURIComponent(kc.clientId);\n\n                    var timeLocal = new Date().getTime();\n\n                    req.onreadystatechange = function () {\n                        if (req.readyState == 4) {\n                            if (req.status == 200) {\n                                logInfo('[KEYCLOAK] Token refreshed');\n\n                                timeLocal = (timeLocal + new Date().getTime()) / 2;\n\n                                var tokenResponse = JSON.parse(req.responseText);\n\n                                setToken(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], timeLocal);\n\n                                kc.onAuthRefreshSuccess && kc.onAuthRefreshSuccess();\n                                for (var p = refreshQueue.pop(); p != null; p = refreshQueue.pop()) {\n                                    p.setSuccess(true);\n                                }\n                            } else {\n                                logWarn('[KEYCLOAK] Failed to refresh token');\n\n                                if (req.status == 400) {\n                                    kc.clearToken();\n                                }\n\n                                kc.onAuthRefreshError && kc.onAuthRefreshError();\n                                for (var p = refreshQueue.pop(); p != null; p = refreshQueue.pop()) {\n                                    p.setError(\"Failed to refresh token: An unexpected HTTP error occurred while attempting to refresh the token.\");\n                                }\n                            }\n                        }\n                    };\n\n                    req.send(params);\n                }\n            }\n        }\n\n        if (loginIframe.enable) {\n            var iframePromise = checkLoginIframe();\n            iframePromise.then(function() {\n                exec();\n            }).catch(function(error) {\n                promise.setError(error);\n            });\n        } else {\n            exec();\n        }\n\n        return promise.promise;\n    }\n\n    kc.clearToken = function() {\n        if (kc.token) {\n            setToken(null, null, null);\n            kc.onAuthLogout && kc.onAuthLogout();\n            if (kc.loginRequired) {\n                kc.login();\n            }\n        }\n    }\n\n    function getRealmUrl() {\n        if (typeof kc.authServerUrl !== 'undefined') {\n            if (kc.authServerUrl.charAt(kc.authServerUrl.length - 1) == '/') {\n                return kc.authServerUrl + 'realms/' + encodeURIComponent(kc.realm);\n            } else {\n                return kc.authServerUrl + '/realms/' + encodeURIComponent(kc.realm);\n            }\n        } else {\n            return undefined;\n        }\n    }\n\n    function getOrigin() {\n        if (!window.location.origin) {\n            return window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');\n        } else {\n            return window.location.origin;\n        }\n    }\n\n    function processCallback(oauth, promise) {\n        var code = oauth.code;\n        var error = oauth.error;\n        var prompt = oauth.prompt;\n\n        var timeLocal = new Date().getTime();\n\n        if (oauth['kc_action_status']) {\n            kc.onActionUpdate && kc.onActionUpdate(oauth['kc_action_status'], oauth['kc_action']);\n        }\n\n        if (error) {\n            if (prompt != 'none') {\n                if (oauth.error_description && oauth.error_description === \"authentication_expired\") {\n                    kc.login(oauth.loginOptions);\n                } else {\n                    var errorData = { error: error, error_description: oauth.error_description };\n                    kc.onAuthError && kc.onAuthError(errorData);\n                    promise && promise.setError(errorData);\n                }\n            } else {\n                promise && promise.setSuccess();\n            }\n            return;\n        } else if ((kc.flow != 'standard') && (oauth.access_token || oauth.id_token)) {\n            authSuccess(oauth.access_token, null, oauth.id_token, true);\n        }\n\n        if ((kc.flow != 'implicit') && code) {\n            var params = 'code=' + code + '&grant_type=authorization_code';\n            var url = kc.endpoints.token();\n\n            var req = new XMLHttpRequest();\n            req.open('POST', url, true);\n            req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n\n            params += '&client_id=' + encodeURIComponent(kc.clientId);\n            params += '&redirect_uri=' + oauth.redirectUri;\n\n            if (oauth.pkceCodeVerifier) {\n                params += '&code_verifier=' + oauth.pkceCodeVerifier;\n            }\n\n            req.withCredentials = true;\n\n            req.onreadystatechange = function() {\n                if (req.readyState == 4) {\n                    if (req.status == 200) {\n\n                        var tokenResponse = JSON.parse(req.responseText);\n                        authSuccess(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], kc.flow === 'standard');\n                        scheduleCheckIframe();\n                    } else {\n                        kc.onAuthError && kc.onAuthError();\n                        promise && promise.setError();\n                    }\n                }\n            };\n\n            req.send(params);\n        }\n\n        function authSuccess(accessToken, refreshToken, idToken, fulfillPromise) {\n            timeLocal = (timeLocal + new Date().getTime()) / 2;\n\n            setToken(accessToken, refreshToken, idToken, timeLocal);\n\n            if (useNonce && (kc.idTokenParsed && kc.idTokenParsed.nonce != oauth.storedNonce)) {\n                logInfo('[KEYCLOAK] Invalid nonce, clearing token');\n                kc.clearToken();\n                promise && promise.setError();\n            } else {\n                if (fulfillPromise) {\n                    kc.onAuthSuccess && kc.onAuthSuccess();\n                    promise && promise.setSuccess();\n                }\n            }\n        }\n\n    }\n\n    function loadConfig() {\n        var promise = createPromise();\n        var configUrl;\n\n        if (typeof config === 'string') {\n            configUrl = config;\n        }\n\n        function setupOidcEndoints(oidcConfiguration) {\n            if (! oidcConfiguration) {\n                kc.endpoints = {\n                    authorize: function() {\n                        return getRealmUrl() + '/protocol/openid-connect/auth';\n                    },\n                    token: function() {\n                        return getRealmUrl() + '/protocol/openid-connect/token';\n                    },\n                    logout: function() {\n                        return getRealmUrl() + '/protocol/openid-connect/logout';\n                    },\n                    checkSessionIframe: function() {\n                        return getRealmUrl() + '/protocol/openid-connect/login-status-iframe.html';\n                    },\n                    thirdPartyCookiesIframe: function() {\n                        return getRealmUrl() + '/protocol/openid-connect/3p-cookies/step1.html';\n                    },\n                    register: function() {\n                        return getRealmUrl() + '/protocol/openid-connect/registrations';\n                    },\n                    userinfo: function() {\n                        return getRealmUrl() + '/protocol/openid-connect/userinfo';\n                    }\n                };\n            } else {\n                kc.endpoints = {\n                    authorize: function() {\n                        return oidcConfiguration.authorization_endpoint;\n                    },\n                    token: function() {\n                        return oidcConfiguration.token_endpoint;\n                    },\n                    logout: function() {\n                        if (!oidcConfiguration.end_session_endpoint) {\n                            throw \"Not supported by the OIDC server\";\n                        }\n                        return oidcConfiguration.end_session_endpoint;\n                    },\n                    checkSessionIframe: function() {\n                        if (!oidcConfiguration.check_session_iframe) {\n                            throw \"Not supported by the OIDC server\";\n                        }\n                        return oidcConfiguration.check_session_iframe;\n                    },\n                    register: function() {\n                        throw 'Redirection to \"Register user\" page not supported in standard OIDC mode';\n                    },\n                    userinfo: function() {\n                        if (!oidcConfiguration.userinfo_endpoint) {\n                            throw \"Not supported by the OIDC server\";\n                        }\n                        return oidcConfiguration.userinfo_endpoint;\n                    }\n                }\n            }\n        }\n\n        if (configUrl) {\n            var req = new XMLHttpRequest();\n            req.open('GET', configUrl, true);\n            req.setRequestHeader('Accept', 'application/json');\n\n            req.onreadystatechange = function () {\n                if (req.readyState == 4) {\n                    if (req.status == 200 || fileLoaded(req)) {\n                        var config = JSON.parse(req.responseText);\n\n                        kc.authServerUrl = config['auth-server-url'];\n                        kc.realm = config['realm'];\n                        kc.clientId = config['resource'];\n                        setupOidcEndoints(null);\n                        promise.setSuccess();\n                    } else {\n                        promise.setError();\n                    }\n                }\n            };\n\n            req.send();\n        } else {\n            kc.clientId = config.clientId;\n\n            var oidcProvider = config['oidcProvider'];\n            if (!oidcProvider) {\n                kc.authServerUrl = config.url;\n                kc.realm = config.realm;\n                setupOidcEndoints(null);\n                promise.setSuccess();\n            } else {\n                if (typeof oidcProvider === 'string') {\n                    var oidcProviderConfigUrl;\n                    if (oidcProvider.charAt(oidcProvider.length - 1) == '/') {\n                        oidcProviderConfigUrl = oidcProvider + '.well-known/openid-configuration';\n                    } else {\n                        oidcProviderConfigUrl = oidcProvider + '/.well-known/openid-configuration';\n                    }\n                    var req = new XMLHttpRequest();\n                    req.open('GET', oidcProviderConfigUrl, true);\n                    req.setRequestHeader('Accept', 'application/json');\n\n                    req.onreadystatechange = function () {\n                        if (req.readyState == 4) {\n                            if (req.status == 200 || fileLoaded(req)) {\n                                var oidcProviderConfig = JSON.parse(req.responseText);\n                                setupOidcEndoints(oidcProviderConfig);\n                                promise.setSuccess();\n                            } else {\n                                promise.setError();\n                            }\n                        }\n                    };\n\n                    req.send();\n                } else {\n                    setupOidcEndoints(oidcProvider);\n                    promise.setSuccess();\n                }\n            }\n        }\n\n        return promise.promise;\n    }\n\n    function fileLoaded(xhr) {\n        return xhr.status == 0 && xhr.responseText && xhr.responseURL.startsWith('file:');\n    }\n\n    function setToken(token, refreshToken, idToken, timeLocal) {\n        if (kc.tokenTimeoutHandle) {\n            clearTimeout(kc.tokenTimeoutHandle);\n            kc.tokenTimeoutHandle = null;\n        }\n\n        if (refreshToken) {\n            kc.refreshToken = refreshToken;\n            kc.refreshTokenParsed = decodeToken(refreshToken);\n        } else {\n            delete kc.refreshToken;\n            delete kc.refreshTokenParsed;\n        }\n\n        if (idToken) {\n            kc.idToken = idToken;\n            kc.idTokenParsed = decodeToken(idToken);\n        } else {\n            delete kc.idToken;\n            delete kc.idTokenParsed;\n        }\n\n        if (token) {\n            kc.token = token;\n            kc.tokenParsed = decodeToken(token);\n            kc.sessionId = kc.tokenParsed.sid;\n            kc.authenticated = true;\n            kc.subject = kc.tokenParsed.sub;\n            kc.realmAccess = kc.tokenParsed.realm_access;\n            kc.resourceAccess = kc.tokenParsed.resource_access;\n\n            if (timeLocal) {\n                kc.timeSkew = Math.floor(timeLocal / 1000) - kc.tokenParsed.iat;\n            }\n\n            if (kc.timeSkew != null) {\n                logInfo('[KEYCLOAK] Estimated time difference between browser and server is ' + kc.timeSkew + ' seconds');\n\n                if (kc.onTokenExpired) {\n                    var expiresIn = (kc.tokenParsed['exp'] - (new Date().getTime() / 1000) + kc.timeSkew) * 1000;\n                    logInfo('[KEYCLOAK] Token expires in ' + Math.round(expiresIn / 1000) + ' s');\n                    if (expiresIn <= 0) {\n                        kc.onTokenExpired();\n                    } else {\n                        kc.tokenTimeoutHandle = setTimeout(kc.onTokenExpired, expiresIn);\n                    }\n                }\n            }\n        } else {\n            delete kc.token;\n            delete kc.tokenParsed;\n            delete kc.subject;\n            delete kc.realmAccess;\n            delete kc.resourceAccess;\n\n            kc.authenticated = false;\n        }\n    }\n\n    function createUUID() {\n        if (typeof crypto === \"undefined\" || typeof crypto.randomUUID === \"undefined\") {\n            throw new Error(\"Web Crypto API is not available.\");\n        }\n\n        return crypto.randomUUID();\n    }\n\n    function parseCallback(url) {\n        var oauth = parseCallbackUrl(url);\n        if (!oauth) {\n            return;\n        }\n\n        var oauthState = callbackStorage.get(oauth.state);\n\n        if (oauthState) {\n            oauth.valid = true;\n            oauth.redirectUri = oauthState.redirectUri;\n            oauth.storedNonce = oauthState.nonce;\n            oauth.prompt = oauthState.prompt;\n            oauth.pkceCodeVerifier = oauthState.pkceCodeVerifier;\n            oauth.loginOptions = oauthState.loginOptions;\n        }\n\n        return oauth;\n    }\n\n    function parseCallbackUrl(url) {\n        var supportedParams;\n        switch (kc.flow) {\n            case 'standard':\n                supportedParams = ['code', 'state', 'session_state', 'kc_action_status', 'kc_action', 'iss'];\n                break;\n            case 'implicit':\n                supportedParams = ['access_token', 'token_type', 'id_token', 'state', 'session_state', 'expires_in', 'kc_action_status', 'kc_action', 'iss'];\n                break;\n            case 'hybrid':\n                supportedParams = ['access_token', 'token_type', 'id_token', 'code', 'state', 'session_state', 'expires_in', 'kc_action_status', 'kc_action', 'iss'];\n                break;\n        }\n\n        supportedParams.push('error');\n        supportedParams.push('error_description');\n        supportedParams.push('error_uri');\n\n        var queryIndex = url.indexOf('?');\n        var fragmentIndex = url.indexOf('#');\n\n        var newUrl;\n        var parsed;\n\n        if (kc.responseMode === 'query' && queryIndex !== -1) {\n            newUrl = url.substring(0, queryIndex);\n            parsed = parseCallbackParams(url.substring(queryIndex + 1, fragmentIndex !== -1 ? fragmentIndex : url.length), supportedParams);\n            if (parsed.paramsString !== '') {\n                newUrl += '?' + parsed.paramsString;\n            }\n            if (fragmentIndex !== -1) {\n                newUrl += url.substring(fragmentIndex);\n            }\n        } else if (kc.responseMode === 'fragment' && fragmentIndex !== -1) {\n            newUrl = url.substring(0, fragmentIndex);\n            parsed = parseCallbackParams(url.substring(fragmentIndex + 1), supportedParams);\n            if (parsed.paramsString !== '') {\n                newUrl += '#' + parsed.paramsString;\n            }\n        }\n\n        if (parsed && parsed.oauthParams) {\n            if (kc.flow === 'standard' || kc.flow === 'hybrid') {\n                if ((parsed.oauthParams.code || parsed.oauthParams.error) && parsed.oauthParams.state) {\n                    parsed.oauthParams.newUrl = newUrl;\n                    return parsed.oauthParams;\n                }\n            } else if (kc.flow === 'implicit') {\n                if ((parsed.oauthParams.access_token || parsed.oauthParams.error) && parsed.oauthParams.state) {\n                    parsed.oauthParams.newUrl = newUrl;\n                    return parsed.oauthParams;\n                }\n            }\n        }\n    }\n\n    function parseCallbackParams(paramsString, supportedParams) {\n        var p = paramsString.split('&');\n        var result = {\n            paramsString: '',\n            oauthParams: {}\n        }\n        for (var i = 0; i < p.length; i++) {\n            var split = p[i].indexOf(\"=\");\n            var key = p[i].slice(0, split);\n            if (supportedParams.indexOf(key) !== -1) {\n                result.oauthParams[key] = p[i].slice(split + 1);\n            } else {\n                if (result.paramsString !== '') {\n                    result.paramsString += '&';\n                }\n                result.paramsString += p[i];\n            }\n        }\n        return result;\n    }\n\n    function createPromise() {\n        // Need to create a native Promise which also preserves the\n        // interface of the custom promise type previously used by the API\n        var p = {\n            setSuccess: function(result) {\n                p.resolve(result);\n            },\n\n            setError: function(result) {\n                p.reject(result);\n            }\n        };\n        p.promise = new Promise(function(resolve, reject) {\n            p.resolve = resolve;\n            p.reject = reject;\n        });\n\n        return p;\n    }\n\n    // Function to extend existing native Promise with timeout\n    function applyTimeoutToPromise(promise, timeout, errorMessage) {\n        var timeoutHandle = null;\n        var timeoutPromise = new Promise(function (resolve, reject) {\n            timeoutHandle = setTimeout(function () {\n                reject({ \"error\": errorMessage || \"Promise is not settled within timeout of \" + timeout + \"ms\" });\n            }, timeout);\n        });\n\n        return Promise.race([promise, timeoutPromise]).finally(function () {\n            clearTimeout(timeoutHandle);\n        });\n    }\n\n    function setupCheckLoginIframe() {\n        var promise = createPromise();\n\n        if (!loginIframe.enable) {\n            promise.setSuccess();\n            return promise.promise;\n        }\n\n        if (loginIframe.iframe) {\n            promise.setSuccess();\n            return promise.promise;\n        }\n\n        var iframe = document.createElement('iframe');\n        loginIframe.iframe = iframe;\n\n        iframe.onload = function() {\n            var authUrl = kc.endpoints.authorize();\n            if (authUrl.charAt(0) === '/') {\n                loginIframe.iframeOrigin = getOrigin();\n            } else {\n                loginIframe.iframeOrigin = authUrl.substring(0, authUrl.indexOf('/', 8));\n            }\n            promise.setSuccess();\n        }\n\n        var src = kc.endpoints.checkSessionIframe();\n        iframe.setAttribute('src', src );\n        iframe.setAttribute('sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin');\n        iframe.setAttribute('title', 'keycloak-session-iframe' );\n        iframe.style.display = 'none';\n        document.body.appendChild(iframe);\n\n        var messageCallback = function(event) {\n            if ((event.origin !== loginIframe.iframeOrigin) || (loginIframe.iframe.contentWindow !== event.source)) {\n                return;\n            }\n\n            if (!(event.data == 'unchanged' || event.data == 'changed' || event.data == 'error')) {\n                return;\n            }\n\n\n            if (event.data != 'unchanged') {\n                kc.clearToken();\n            }\n\n            var callbacks = loginIframe.callbackList.splice(0, loginIframe.callbackList.length);\n\n            for (var i = callbacks.length - 1; i >= 0; --i) {\n                var promise = callbacks[i];\n                if (event.data == 'error') {\n                    promise.setError();\n                } else {\n                    promise.setSuccess(event.data == 'unchanged');\n                }\n            }\n        };\n\n        window.addEventListener('message', messageCallback, false);\n\n        return promise.promise;\n    }\n\n    function scheduleCheckIframe() {\n        if (loginIframe.enable) {\n            if (kc.token) {\n                setTimeout(function() {\n                    checkLoginIframe().then(function(unchanged) {\n                        if (unchanged) {\n                            scheduleCheckIframe();\n                        }\n                    });\n                }, loginIframe.interval * 1000);\n            }\n        }\n    }\n\n    function checkLoginIframe() {\n        var promise = createPromise();\n\n        if (loginIframe.iframe && loginIframe.iframeOrigin ) {\n            var msg = kc.clientId + ' ' + (kc.sessionId ? kc.sessionId : '');\n            loginIframe.callbackList.push(promise);\n            var origin = loginIframe.iframeOrigin;\n            if (loginIframe.callbackList.length == 1) {\n                loginIframe.iframe.contentWindow.postMessage(msg, origin);\n            }\n        } else {\n            promise.setSuccess();\n        }\n\n        return promise.promise;\n    }\n\n    function check3pCookiesSupported() {\n        var promise = createPromise();\n\n        if ((loginIframe.enable || kc.silentCheckSsoRedirectUri) && typeof kc.endpoints.thirdPartyCookiesIframe === 'function') {\n            var iframe = document.createElement('iframe');\n            iframe.setAttribute('src', kc.endpoints.thirdPartyCookiesIframe());\n            iframe.setAttribute('sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin');\n            iframe.setAttribute('title', 'keycloak-3p-check-iframe' );\n            iframe.style.display = 'none';\n            document.body.appendChild(iframe);\n\n            var messageCallback = function(event) {\n                if (iframe.contentWindow !== event.source) {\n                    return;\n                }\n\n                if (event.data !== \"supported\" && event.data !== \"unsupported\") {\n                    return;\n                } else if (event.data === \"unsupported\") {\n                    logWarn(\n                        \"[KEYCLOAK] Your browser is blocking access to 3rd-party cookies, this means:\\n\\n\" +\n                        \" - It is not possible to retrieve tokens without redirecting to the Keycloak server (a.k.a. no support for silent authentication).\\n\" +\n                        \" - It is not possible to automatically detect changes to the session status (such as the user logging out in another tab).\\n\\n\" +\n                        \"For more information see: https://www.keycloak.org/securing-apps/javascript-adapter#_modern_browsers\"\n                    );\n\n                    loginIframe.enable = false;\n                    if (kc.silentCheckSsoFallback) {\n                        kc.silentCheckSsoRedirectUri = false;\n                    }\n                }\n\n                document.body.removeChild(iframe);\n                window.removeEventListener(\"message\", messageCallback);\n                promise.setSuccess();\n            };\n\n            window.addEventListener('message', messageCallback, false);\n        } else {\n            promise.setSuccess();\n        }\n\n        return applyTimeoutToPromise(promise.promise, kc.messageReceiveTimeout, \"Timeout when waiting for 3rd party check iframe message.\");\n    }\n\n    function loadAdapter(type) {\n        if (!type || type == 'default') {\n            return {\n                login: async function(options) {\n                    window.location.assign(await kc.createLoginUrl(options));\n                    return createPromise().promise;\n                },\n\n                logout: async function(options) {\n\n                    const logoutMethod = options?.logoutMethod ?? kc.logoutMethod;\n                    if (logoutMethod === \"GET\") {\n                        window.location.replace(kc.createLogoutUrl(options));\n                        return;\n                    }\n\n                    // Create form to send POST request.\n                    const form = document.createElement(\"form\");\n\n                    form.setAttribute(\"method\", \"POST\");\n                    form.setAttribute(\"action\", kc.createLogoutUrl(options));\n                    form.style.display = \"none\";\n\n                    // Add data to form as hidden input fields.\n                    const data = {\n                        id_token_hint: kc.idToken,\n                        client_id: kc.clientId,\n                        post_logout_redirect_uri: adapter.redirectUri(options, false)\n                    };\n\n                    for (const [name, value] of Object.entries(data)) {\n                        const input = document.createElement(\"input\");\n\n                        input.setAttribute(\"type\", \"hidden\");\n                        input.setAttribute(\"name\", name);\n                        input.setAttribute(\"value\", value);\n\n                        form.appendChild(input);\n                    }\n\n                    // Append form to page and submit it to perform logout and redirect.\n                    document.body.appendChild(form);\n                    form.submit();\n                },\n\n                register: async function(options) {\n                    window.location.assign(await kc.createRegisterUrl(options));\n                    return createPromise().promise;\n                },\n\n                accountManagement : function() {\n                    var accountUrl = kc.createAccountUrl();\n                    if (typeof accountUrl !== 'undefined') {\n                        window.location.href = accountUrl;\n                    } else {\n                        throw \"Not supported by the OIDC server\";\n                    }\n                    return createPromise().promise;\n                },\n\n                redirectUri: function(options, encodeHash) {\n                    if (arguments.length == 1) {\n                        encodeHash = true;\n                    }\n\n                    if (options && options.redirectUri) {\n                        return options.redirectUri;\n                    } else if (kc.redirectUri) {\n                        return kc.redirectUri;\n                    } else {\n                        return location.href;\n                    }\n                }\n            };\n        }\n\n        if (type == 'cordova') {\n            loginIframe.enable = false;\n            var cordovaOpenWindowWrapper = function(loginUrl, target, options) {\n                if (window.cordova && window.cordova.InAppBrowser) {\n                    // Use inappbrowser for IOS and Android if available\n                    return window.cordova.InAppBrowser.open(loginUrl, target, options);\n                } else {\n                    return window.open(loginUrl, target, options);\n                }\n            };\n\n            var shallowCloneCordovaOptions = function (userOptions) {\n                if (userOptions && userOptions.cordovaOptions) {\n                    return Object.keys(userOptions.cordovaOptions).reduce(function (options, optionName) {\n                        options[optionName] = userOptions.cordovaOptions[optionName];\n                        return options;\n                    }, {});\n                } else {\n                    return {};\n                }\n            };\n\n            var formatCordovaOptions = function (cordovaOptions) {\n                return Object.keys(cordovaOptions).reduce(function (options, optionName) {\n                    options.push(optionName+\"=\"+cordovaOptions[optionName]);\n                    return options;\n                }, []).join(\",\");\n            };\n\n            var createCordovaOptions = function (userOptions) {\n                var cordovaOptions = shallowCloneCordovaOptions(userOptions);\n                cordovaOptions.location = 'no';\n                if (userOptions && userOptions.prompt == 'none') {\n                    cordovaOptions.hidden = 'yes';\n                }\n                return formatCordovaOptions(cordovaOptions);\n            };\n\n            var getCordovaRedirectUri = function() {\n                return kc.redirectUri || 'http://localhost';\n            }\n\n            return {\n                login: async function(options) {\n                    var promise = createPromise();\n\n                    var cordovaOptions = createCordovaOptions(options);\n                    var loginUrl = await kc.createLoginUrl(options);\n                    var ref = cordovaOpenWindowWrapper(loginUrl, '_blank', cordovaOptions);\n                    var completed = false;\n\n                    var closed = false;\n                    var closeBrowser = function() {\n                        closed = true;\n                        ref.close();\n                    };\n\n                    ref.addEventListener('loadstart', function(event) {\n                        if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n                            var callback = parseCallback(event.url);\n                            processCallback(callback, promise);\n                            closeBrowser();\n                            completed = true;\n                        }\n                    });\n\n                    ref.addEventListener('loaderror', function(event) {\n                        if (!completed) {\n                            if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n                                var callback = parseCallback(event.url);\n                                processCallback(callback, promise);\n                                closeBrowser();\n                                completed = true;\n                            } else {\n                                promise.setError();\n                                closeBrowser();\n                            }\n                        }\n                    });\n\n                    ref.addEventListener('exit', function(event) {\n                        if (!closed) {\n                            promise.setError({\n                                reason: \"closed_by_user\"\n                            });\n                        }\n                    });\n\n                    return promise.promise;\n                },\n\n                logout: function(options) {\n                    var promise = createPromise();\n\n                    var logoutUrl = kc.createLogoutUrl(options);\n                    var ref = cordovaOpenWindowWrapper(logoutUrl, '_blank', 'location=no,hidden=yes,clearcache=yes');\n\n                    var error;\n\n                    ref.addEventListener('loadstart', function(event) {\n                        if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n                            ref.close();\n                        }\n                    });\n\n                    ref.addEventListener('loaderror', function(event) {\n                        if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n                            ref.close();\n                        } else {\n                            error = true;\n                            ref.close();\n                        }\n                    });\n\n                    ref.addEventListener('exit', function(event) {\n                        if (error) {\n                            promise.setError();\n                        } else {\n                            kc.clearToken();\n                            promise.setSuccess();\n                        }\n                    });\n\n                    return promise.promise;\n                },\n\n                register : async function(options) {\n                    var promise = createPromise();\n                    var registerUrl = await kc.createRegisterUrl();\n                    var cordovaOptions = createCordovaOptions(options);\n                    var ref = cordovaOpenWindowWrapper(registerUrl, '_blank', cordovaOptions);\n                    ref.addEventListener('loadstart', function(event) {\n                        if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n                            ref.close();\n                            var oauth = parseCallback(event.url);\n                            processCallback(oauth, promise);\n                        }\n                    });\n                    return promise.promise;\n                },\n\n                accountManagement : function() {\n                    var accountUrl = kc.createAccountUrl();\n                    if (typeof accountUrl !== 'undefined') {\n                        var ref = cordovaOpenWindowWrapper(accountUrl, '_blank', 'location=no');\n                        ref.addEventListener('loadstart', function(event) {\n                            if (event.url.indexOf(getCordovaRedirectUri()) == 0) {\n                                ref.close();\n                            }\n                        });\n                    } else {\n                        throw \"Not supported by the OIDC server\";\n                    }\n                },\n\n                redirectUri: function(options) {\n                    return getCordovaRedirectUri();\n                }\n            }\n        }\n\n        if (type == 'cordova-native') {\n            loginIframe.enable = false;\n\n            return {\n                login: async function(options) {\n                    var promise = createPromise();\n                    var loginUrl = await kc.createLoginUrl(options);\n\n                    universalLinks.subscribe('keycloak', function(event) {\n                        universalLinks.unsubscribe('keycloak');\n                        window.cordova.plugins.browsertab.close();\n                        var oauth = parseCallback(event.url);\n                        processCallback(oauth, promise);\n                    });\n\n                    window.cordova.plugins.browsertab.openUrl(loginUrl);\n                    return promise.promise;\n                },\n\n                logout: function(options) {\n                    var promise = createPromise();\n                    var logoutUrl = kc.createLogoutUrl(options);\n\n                    universalLinks.subscribe('keycloak', function(event) {\n                        universalLinks.unsubscribe('keycloak');\n                        window.cordova.plugins.browsertab.close();\n                        kc.clearToken();\n                        promise.setSuccess();\n                    });\n\n                    window.cordova.plugins.browsertab.openUrl(logoutUrl);\n                    return promise.promise;\n                },\n\n                register : async function(options) {\n                    var promise = createPromise();\n                    var registerUrl = await kc.createRegisterUrl(options);\n                    universalLinks.subscribe('keycloak' , function(event) {\n                        universalLinks.unsubscribe('keycloak');\n                        window.cordova.plugins.browsertab.close();\n                        var oauth = parseCallback(event.url);\n                        processCallback(oauth, promise);\n                    });\n                    window.cordova.plugins.browsertab.openUrl(registerUrl);\n                    return promise.promise;\n\n                },\n\n                accountManagement : function() {\n                    var accountUrl = kc.createAccountUrl();\n                    if (typeof accountUrl !== 'undefined') {\n                        window.cordova.plugins.browsertab.openUrl(accountUrl);\n                    } else {\n                        throw \"Not supported by the OIDC server\";\n                    }\n                },\n\n                redirectUri: function(options) {\n                    if (options && options.redirectUri) {\n                        return options.redirectUri;\n                    } else if (kc.redirectUri) {\n                        return kc.redirectUri;\n                    } else {\n                        return \"http://localhost\";\n                    }\n                }\n            }\n        }\n\n        throw 'invalid adapter type: ' + type;\n    }\n\n    const STORAGE_KEY_PREFIX = 'kc-callback-';\n\n    var LocalStorage = function() {\n        if (!(this instanceof LocalStorage)) {\n            return new LocalStorage();\n        }\n\n        localStorage.setItem('kc-test', 'test');\n        localStorage.removeItem('kc-test');\n\n        var cs = this;\n\n        /**\n         * Clears all values from local storage that are no longer valid.\n         */\n        function clearInvalidValues() {\n            const currentTime = Date.now();\n\n            for (const [key, value] of getStoredEntries()) {\n                // Attempt to parse the expiry time from the value.\n                const expiry = parseExpiry(value);\n\n                // Discard the value if it is malformed or expired.\n                if (expiry === null || expiry < currentTime) {\n                    localStorage.removeItem(key);\n                }\n            }\n        }\n\n        /**\n         * Clears all known values from local storage.\n         */\n        function clearAllValues() {\n            for (const [key] of getStoredEntries()) {\n                localStorage.removeItem(key);\n            }\n        }\n\n        /**\n         * Gets all entries stored in local storage that are known to be managed by this class.\n         * @returns {Array<[string, unknown]>} An array of key-value pairs.\n         */\n        function getStoredEntries() {\n            return Object.entries(localStorage).filter(([key]) => key.startsWith(STORAGE_KEY_PREFIX));\n        }\n\n        /**\n         * Parses the expiry time from a value stored in local storage.\n         * @param {unknown} value\n         * @returns {number | null} The expiry time in milliseconds, or `null` if the value is malformed.\n         */\n        function parseExpiry(value) {\n            let parsedValue;\n\n            // Attempt to parse the value as JSON.\n            try {\n                parsedValue = JSON.parse(value);\n            } catch (error) {\n                return null;\n            }\n\n            // Attempt to extract the 'expires' property.\n            if (isObject(parsedValue) && 'expires' in parsedValue && typeof parsedValue.expires === 'number') {\n                return parsedValue.expires;\n            }\n\n            return null;\n        }\n\n        cs.get = function(state) {\n            if (!state) {\n                return;\n            }\n\n            var key = STORAGE_KEY_PREFIX + state;\n            var value = localStorage.getItem(key);\n            if (value) {\n                localStorage.removeItem(key);\n                value = JSON.parse(value);\n            }\n\n            clearInvalidValues();\n            return value;\n        };\n\n        cs.add = function(state) {\n            clearInvalidValues();\n\n            const key = STORAGE_KEY_PREFIX + state.state;\n            const value = JSON.stringify({\n                ...state,\n                // Set the expiry time to 1 hour from now.\n                expires: Date.now() + (60 * 60 * 1000)\n            });\n\n            try {\n                localStorage.setItem(key, value);\n            } catch (error) {\n                // If the storage is full, clear all known values and try again.\n                clearAllValues();\n                localStorage.setItem(key, value);\n            }\n        };\n    };\n\n    var CookieStorage = function() {\n        if (!(this instanceof CookieStorage)) {\n            return new CookieStorage();\n        }\n\n        var cs = this;\n\n        cs.get = function(state) {\n            if (!state) {\n                return;\n            }\n\n            var value = getCookie(STORAGE_KEY_PREFIX + state);\n            setCookie(STORAGE_KEY_PREFIX + state, '', cookieExpiration(-100));\n            if (value) {\n                return JSON.parse(value);\n            }\n        };\n\n        cs.add = function(state) {\n            setCookie(STORAGE_KEY_PREFIX + state.state, JSON.stringify(state), cookieExpiration(60));\n        };\n\n        cs.removeItem = function(key) {\n            setCookie(key, '', cookieExpiration(-100));\n        };\n\n        var cookieExpiration = function (minutes) {\n            var exp = new Date();\n            exp.setTime(exp.getTime() + (minutes*60*1000));\n            return exp;\n        };\n\n        var getCookie = function (key) {\n            var name = key + '=';\n            var ca = document.cookie.split(';');\n            for (var i = 0; i < ca.length; i++) {\n                var c = ca[i];\n                while (c.charAt(0) == ' ') {\n                    c = c.substring(1);\n                }\n                if (c.indexOf(name) == 0) {\n                    return c.substring(name.length, c.length);\n                }\n            }\n            return '';\n        };\n\n        var setCookie = function (key, value, expirationDate) {\n            var cookie = key + '=' + value + '; '\n                + 'expires=' + expirationDate.toUTCString() + '; ';\n            document.cookie = cookie;\n        }\n    };\n\n    function createCallbackStorage() {\n        try {\n            return new LocalStorage();\n        } catch (err) {\n        }\n\n        return new CookieStorage();\n    }\n\n    function createLogger(fn) {\n        return function() {\n            if (kc.enableLogging) {\n                fn.apply(console, Array.prototype.slice.call(arguments));\n            }\n        };\n    }\n}\n\nexport default Keycloak;\n\n/**\n * @param {ArrayBuffer} bytes\n * @see https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n */\nfunction bytesToBase64(bytes) {\n    const binString = String.fromCodePoint(...bytes);\n    return btoa(binString);\n}\n\n/**\n * @param {string} message\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#basic_example\n */\nasync function sha256Digest(message) {\n    const encoder = new TextEncoder();\n    const data = encoder.encode(message);\n\n    if (typeof crypto === \"undefined\" || typeof crypto.subtle === \"undefined\") {\n        throw new Error(\"Web Crypto API is not available.\");\n    }\n\n    return await crypto.subtle.digest(\"SHA-256\", data);\n}\n\n/**\n * @param {string} token\n */\nfunction decodeToken(token) {\n    const [header, payload] = token.split(\".\");\n\n    if (typeof payload !== \"string\") {\n        throw new Error(\"Unable to decode token, payload not found.\");\n    }\n\n    let decoded;\n\n    try {\n        decoded = base64UrlDecode(payload);\n    } catch (error) {\n        throw new Error(\"Unable to decode token, payload is not a valid Base64URL value.\", { cause: error });\n    }\n\n    try {\n        return JSON.parse(decoded);\n    } catch (error) {\n        throw new Error(\"Unable to decode token, payload is not a valid JSON value.\", { cause: error });\n    }\n}\n\n/**\n * @param {string} input\n */\nfunction base64UrlDecode(input) {\n    let output = input\n        .replaceAll(\"-\", \"+\")\n        .replaceAll(\"_\", \"/\");\n\n    switch (output.length % 4) {\n        case 0:\n            break;\n        case 2:\n            output += \"==\";\n            break;\n        case 3:\n            output += \"=\";\n            break;\n        default:\n            throw new Error(\"Input is not of the correct length.\");\n    }\n\n    try {\n        return b64DecodeUnicode(output);\n    } catch (error) {\n        return atob(output);\n    }\n}\n\n/**\n * @param {string} input\n */\nfunction b64DecodeUnicode(input) {\n    return decodeURIComponent(atob(input).replace(/(.)/g, (m, p) => {\n        let code = p.charCodeAt(0).toString(16).toUpperCase();\n\n        if (code.length < 2) {\n            code = \"0\" + code;\n        }\n\n        return \"%\" + code;\n    }));\n}\n\n/**\n * Check if the input is an object that can be operated on.\n * @param {unknown} input\n */\nfunction isObject(input) {\n    return typeof input === 'object' && input !== null;\n}\n"],"names":["Keycloak","config","Error","isObject","property","adapter","callbackStorage","kc","refreshQueue","loginIframe","useNonce","logInfo","createLogger","console","logWarn","generatePkceChallenge","pkceMethod","codeVerifier","TypeError","bytesToBase64","btoa","String","Uint8Array","sha256Digest","getRealmUrl","encodeURIComponent","processCallback","oauth","promise","code","error","prompt","timeLocal","Date","errorData","authSuccess","params","url","req","XMLHttpRequest","tokenResponse","JSON","scheduleCheckIframe","accessToken","refreshToken","idToken","fulfillPromise","setToken","fileLoaded","xhr","token","clearTimeout","decodeToken","Math","expiresIn","setTimeout","createUUID","crypto","parseCallback","parseCallbackUrl","supportedParams","newUrl","parsed","queryIndex","fragmentIndex","parseCallbackParams","oauthState","paramsString","p","result","i","split","key","createPromise","Promise","resolve","reject","setupCheckLoginIframe","iframe","document","authUrl","window","src","event","callbacks","checkLoginIframe","unchanged","msg","origin","loadAdapter","type","options","logoutMethod","form","name","value","Object","input","accountUrl","encodeHash","location","cordovaOpenWindowWrapper","loginUrl","target","createCordovaOptions","userOptions","cordovaOptions","optionName","getCordovaRedirectUri","ref","completed","closed","closeBrowser","universalLinks","logoutUrl","registerUrl","globalThis","initOptions","createCallbackStorage","LocalStorage","err","CookieStorage","adapters","initPromise","configPromise","loadConfig","setupOidcEndoints","oidcConfiguration","configUrl","oidcProvider","oidcProviderConfigUrl","onLoad","doLogin","checkSsoSilently","ifrm","messageCallback","processInit","callback","check3pCookiesSupported","timeout","errorMessage","timeoutHandle","baseUrl","state","nonce","redirectUri","callbackState","scope","len","alphabet","randomData","generateRandomData","chars","Array","pkceChallenge","realm","undefined","role","access","resource","minValidity","isNaN","exec","iframePromise","STORAGE_KEY_PREFIX","clearInvalidValues","currentTime","getStoredEntries","expiry","parseExpiry","parsedValue","localStorage","cs","clearAllValues","getCookie","setCookie","cookieExpiration","minutes","exp","ca","c","expirationDate","cookie","fn","arguments","message","data","encoder","TextEncoder","decoded","header","payload","base64UrlDecode","output","decodeURIComponent","atob","m"],"mappings":"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"}