{"version":3,"sources":["../node_modules/.pnpm/browser-tabs-lock@1.2.15/node_modules/browser-tabs-lock/processLock.js","../node_modules/.pnpm/browser-tabs-lock@1.2.15/node_modules/browser-tabs-lock/index.js","../node_modules/.pnpm/bowser@2.11.0/node_modules/bowser/es5.js","../src/AuthcClient.ts","../src/http.ts","../src/worker/worker.utils.ts","../src/api.ts","../src/scope.ts","../src/cache/shared.ts","../src/cache/cache-localstorage.ts","../src/cache/cache-memory.ts","../src/cache/cache-manager.ts","../src/transaction-manager.ts","../src/jwt.ts","../src/storage.ts","../src/user-agent.ts","../src/promise-utils.ts","../src/cache/key-manifest.ts","../src/tKeyCDN.ts","../src/services.ts","../src/global.ts","../src/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ProcessLocking = /** @class */ (function () {\n    function ProcessLocking() {\n        var _this = this;\n        this.locked = new Map();\n        this.addToLocked = function (key, toAdd) {\n            var callbacks = _this.locked.get(key);\n            if (callbacks === undefined) {\n                if (toAdd === undefined) {\n                    _this.locked.set(key, []);\n                }\n                else {\n                    _this.locked.set(key, [toAdd]);\n                }\n            }\n            else {\n                if (toAdd !== undefined) {\n                    callbacks.unshift(toAdd);\n                    _this.locked.set(key, callbacks);\n                }\n            }\n        };\n        this.isLocked = function (key) {\n            return _this.locked.has(key);\n        };\n        this.lock = function (key) {\n            return new Promise(function (resolve, reject) {\n                if (_this.isLocked(key)) {\n                    _this.addToLocked(key, resolve);\n                }\n                else {\n                    _this.addToLocked(key);\n                    resolve();\n                }\n            });\n        };\n        this.unlock = function (key) {\n            var callbacks = _this.locked.get(key);\n            if (callbacks === undefined || callbacks.length === 0) {\n                _this.locked.delete(key);\n                return;\n            }\n            var toCall = callbacks.pop();\n            _this.locked.set(key, callbacks);\n            if (toCall !== undefined) {\n                setTimeout(toCall, 0);\n            }\n        };\n    }\n    ProcessLocking.getInstance = function () {\n        if (ProcessLocking.instance === undefined) {\n            ProcessLocking.instance = new ProcessLocking();\n        }\n        return ProcessLocking.instance;\n    };\n    return ProcessLocking;\n}());\nfunction getLock() {\n    return ProcessLocking.getInstance();\n}\nexports.default = getLock;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar processLock_1 = require(\"./processLock\");\n/**\n * @author: SuperTokens (https://github.com/supertokens)\n * This library was created as a part of a larger project, SuperTokens(https://supertokens.io) - the best session management solution.\n * You can also check out our other projects on https://github.com/supertokens\n *\n * To contribute to this package visit https://github.com/supertokens/browser-tabs-lock\n * If you face any problems you can file an issue on https://github.com/supertokens/browser-tabs-lock/issues\n *\n * If you have any questions or if you just want to say hi visit https://supertokens.io/discord\n */\n/**\n * @constant\n * @type {string}\n * @default\n * @description All the locks taken by this package will have this as prefix\n*/\nvar LOCK_STORAGE_KEY = 'browser-tabs-lock-key';\n/**\n * @function delay\n * @param {number} milliseconds - How long the delay should be in terms of milliseconds\n * @returns {Promise<void>}\n */\nfunction delay(milliseconds) {\n    return new Promise(function (resolve) { return setTimeout(resolve, milliseconds); });\n}\n/**\n * @function generateRandomString\n * @params {number} length - How long the random string should be\n * @returns {string}\n * @description returns random string whose length is equal to the length passed as parameter\n */\nfunction generateRandomString(length) {\n    var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz';\n    var randomstring = '';\n    for (var i = 0; i < length; i++) {\n        var INDEX = Math.floor(Math.random() * CHARS.length);\n        randomstring += CHARS[INDEX];\n    }\n    return randomstring;\n}\n/**\n * @function getLockId\n * @returns {string}\n * @description Generates an id which will be unique for the browser tab\n */\nfunction getLockId() {\n    return Date.now().toString() + generateRandomString(15);\n}\nvar SuperTokensLock = /** @class */ (function () {\n    function SuperTokensLock() {\n        this.acquiredIatSet = new Set();\n        this.id = getLockId();\n        this.acquireLock = this.acquireLock.bind(this);\n        this.releaseLock = this.releaseLock.bind(this);\n        this.releaseLock__private__ = this.releaseLock__private__.bind(this);\n        this.waitForSomethingToChange = this.waitForSomethingToChange.bind(this);\n        this.refreshLockWhileAcquired = this.refreshLockWhileAcquired.bind(this);\n        if (SuperTokensLock.waiters === undefined) {\n            SuperTokensLock.waiters = [];\n        }\n    }\n    /**\n     * @async\n     * @memberOf Lock\n     * @function acquireLock\n     * @param {string} lockKey - Key for which the lock is being acquired\n     * @param {number} [timeout=5000] - Maximum time for which the function will wait to acquire the lock\n     * @returns {Promise<boolean>}\n     * @description Will return true if lock is being acquired, else false.\n     *              Also the lock can be acquired for maximum 10 secs\n     */\n    SuperTokensLock.prototype.acquireLock = function (lockKey, timeout) {\n        if (timeout === void 0) { timeout = 5000; }\n        return __awaiter(this, void 0, void 0, function () {\n            var iat, MAX_TIME, STORAGE_KEY, STORAGE, lockObj, TIMEOUT_KEY, lockObjPostDelay;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        iat = Date.now() + generateRandomString(4);\n                        MAX_TIME = Date.now() + timeout;\n                        STORAGE_KEY = LOCK_STORAGE_KEY + \"-\" + lockKey;\n                        STORAGE = window.localStorage;\n                        _a.label = 1;\n                    case 1:\n                        if (!(Date.now() < MAX_TIME)) return [3 /*break*/, 8];\n                        return [4 /*yield*/, delay(30)];\n                    case 2:\n                        _a.sent();\n                        lockObj = STORAGE.getItem(STORAGE_KEY);\n                        if (!(lockObj === null)) return [3 /*break*/, 5];\n                        TIMEOUT_KEY = this.id + \"-\" + lockKey + \"-\" + iat;\n                        // there is a problem if setItem happens at the exact same time for 2 different processes.. so we add some random delay here.\n                        return [4 /*yield*/, delay(Math.floor(Math.random() * 25))];\n                    case 3:\n                        // there is a problem if setItem happens at the exact same time for 2 different processes.. so we add some random delay here.\n                        _a.sent();\n                        STORAGE.setItem(STORAGE_KEY, JSON.stringify({\n                            id: this.id,\n                            iat: iat,\n                            timeoutKey: TIMEOUT_KEY,\n                            timeAcquired: Date.now(),\n                            timeRefreshed: Date.now()\n                        }));\n                        return [4 /*yield*/, delay(30)];\n                    case 4:\n                        _a.sent(); // this is to prevent race conditions. This time must be more than the time it takes for storage.setItem\n                        lockObjPostDelay = STORAGE.getItem(STORAGE_KEY);\n                        if (lockObjPostDelay !== null) {\n                            lockObjPostDelay = JSON.parse(lockObjPostDelay);\n                            if (lockObjPostDelay.id === this.id && lockObjPostDelay.iat === iat) {\n                                this.acquiredIatSet.add(iat);\n                                this.refreshLockWhileAcquired(STORAGE_KEY, iat);\n                                return [2 /*return*/, true];\n                            }\n                        }\n                        return [3 /*break*/, 7];\n                    case 5:\n                        SuperTokensLock.lockCorrector();\n                        return [4 /*yield*/, this.waitForSomethingToChange(MAX_TIME)];\n                    case 6:\n                        _a.sent();\n                        _a.label = 7;\n                    case 7:\n                        iat = Date.now() + generateRandomString(4);\n                        return [3 /*break*/, 1];\n                    case 8: return [2 /*return*/, false];\n                }\n            });\n        });\n    };\n    SuperTokensLock.prototype.refreshLockWhileAcquired = function (storageKey, iat) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _this = this;\n            return __generator(this, function (_a) {\n                setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {\n                    var STORAGE, lockObj;\n                    return __generator(this, function (_a) {\n                        switch (_a.label) {\n                            case 0: return [4 /*yield*/, processLock_1.default().lock(iat)];\n                            case 1:\n                                _a.sent();\n                                if (!this.acquiredIatSet.has(iat)) {\n                                    processLock_1.default().unlock(iat);\n                                    return [2 /*return*/];\n                                }\n                                STORAGE = window.localStorage;\n                                lockObj = STORAGE.getItem(storageKey);\n                                if (lockObj !== null) {\n                                    lockObj = JSON.parse(lockObj);\n                                    lockObj.timeRefreshed = Date.now();\n                                    STORAGE.setItem(storageKey, JSON.stringify(lockObj));\n                                    processLock_1.default().unlock(iat);\n                                }\n                                else {\n                                    processLock_1.default().unlock(iat);\n                                    return [2 /*return*/];\n                                }\n                                this.refreshLockWhileAcquired(storageKey, iat);\n                                return [2 /*return*/];\n                        }\n                    });\n                }); }, 1000);\n                return [2 /*return*/];\n            });\n        });\n    };\n    SuperTokensLock.prototype.waitForSomethingToChange = function (MAX_TIME) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, new Promise(function (resolve) {\n                            var resolvedCalled = false;\n                            var startedAt = Date.now();\n                            var MIN_TIME_TO_WAIT = 50; // ms\n                            var removedListeners = false;\n                            function stopWaiting() {\n                                if (!removedListeners) {\n                                    window.removeEventListener('storage', stopWaiting);\n                                    SuperTokensLock.removeFromWaiting(stopWaiting);\n                                    clearTimeout(timeOutId);\n                                    removedListeners = true;\n                                }\n                                if (!resolvedCalled) {\n                                    resolvedCalled = true;\n                                    var timeToWait = MIN_TIME_TO_WAIT - (Date.now() - startedAt);\n                                    if (timeToWait > 0) {\n                                        setTimeout(resolve, timeToWait);\n                                    }\n                                    else {\n                                        resolve();\n                                    }\n                                }\n                            }\n                            window.addEventListener('storage', stopWaiting);\n                            SuperTokensLock.addToWaiting(stopWaiting);\n                            var timeOutId = setTimeout(stopWaiting, Math.max(0, MAX_TIME - Date.now()));\n                        })];\n                    case 1:\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    SuperTokensLock.addToWaiting = function (func) {\n        this.removeFromWaiting(func);\n        if (SuperTokensLock.waiters === undefined) {\n            return;\n        }\n        SuperTokensLock.waiters.push(func);\n    };\n    SuperTokensLock.removeFromWaiting = function (func) {\n        if (SuperTokensLock.waiters === undefined) {\n            return;\n        }\n        SuperTokensLock.waiters = SuperTokensLock.waiters.filter(function (i) { return i !== func; });\n    };\n    SuperTokensLock.notifyWaiters = function () {\n        if (SuperTokensLock.waiters === undefined) {\n            return;\n        }\n        var waiters = SuperTokensLock.waiters.slice(); // so that if Lock.waiters is changed it's ok.\n        waiters.forEach(function (i) { return i(); });\n    };\n    /**\n     * @function releaseLock\n     * @memberOf Lock\n     * @param {string} lockKey - Key for which lock is being released\n     * @returns {void}\n     * @description Release a lock.\n     */\n    SuperTokensLock.prototype.releaseLock = function (lockKey) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.releaseLock__private__(lockKey)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /**\n     * @function releaseLock\n     * @memberOf Lock\n     * @param {string} lockKey - Key for which lock is being released\n     * @returns {void}\n     * @description Release a lock.\n     */\n    SuperTokensLock.prototype.releaseLock__private__ = function (lockKey) {\n        return __awaiter(this, void 0, void 0, function () {\n            var STORAGE, STORAGE_KEY, lockObj;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        STORAGE = window.localStorage;\n                        STORAGE_KEY = LOCK_STORAGE_KEY + \"-\" + lockKey;\n                        lockObj = STORAGE.getItem(STORAGE_KEY);\n                        if (lockObj === null) {\n                            return [2 /*return*/];\n                        }\n                        lockObj = JSON.parse(lockObj);\n                        if (!(lockObj.id === this.id)) return [3 /*break*/, 2];\n                        return [4 /*yield*/, processLock_1.default().lock(lockObj.iat)];\n                    case 1:\n                        _a.sent();\n                        this.acquiredIatSet.delete(lockObj.iat);\n                        STORAGE.removeItem(STORAGE_KEY);\n                        processLock_1.default().unlock(lockObj.iat);\n                        SuperTokensLock.notifyWaiters();\n                        _a.label = 2;\n                    case 2: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * @function lockCorrector\n     * @returns {void}\n     * @description If a lock is acquired by a tab and the tab is closed before the lock is\n     *              released, this function will release those locks\n     */\n    SuperTokensLock.lockCorrector = function () {\n        var MIN_ALLOWED_TIME = Date.now() - 5000;\n        var STORAGE = window.localStorage;\n        var KEYS = Object.keys(STORAGE);\n        var notifyWaiters = false;\n        for (var i = 0; i < KEYS.length; i++) {\n            var LOCK_KEY = KEYS[i];\n            if (LOCK_KEY.includes(LOCK_STORAGE_KEY)) {\n                var lockObj = STORAGE.getItem(LOCK_KEY);\n                if (lockObj !== null) {\n                    lockObj = JSON.parse(lockObj);\n                    if ((lockObj.timeRefreshed === undefined && lockObj.timeAcquired < MIN_ALLOWED_TIME) ||\n                        (lockObj.timeRefreshed !== undefined && lockObj.timeRefreshed < MIN_ALLOWED_TIME)) {\n                        STORAGE.removeItem(LOCK_KEY);\n                        notifyWaiters = true;\n                    }\n                }\n            }\n        }\n        if (notifyWaiters) {\n            SuperTokensLock.notifyWaiters();\n        }\n    };\n    SuperTokensLock.waiters = undefined;\n    return SuperTokensLock;\n}());\nexports.default = SuperTokensLock;\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.bowser=t():e.bowser=t()}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=90)}({17:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\"},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\"},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return\"NT\";case\"XP\":return\"XP\";case\"NT 5.0\":return\"2000\";case\"NT 5.1\":return\"XP\";case\"NT 5.2\":return\"2003\";case\"NT 6.0\":return\"Vista\";case\"NT 6.1\":return\"7\";case\"NT 6.2\":return\"8\";case\"NT 6.3\":return\"8.1\";case\"NT 10.0\":return\"10\";default:return}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return\"Leopard\";case 6:return\"Snow Leopard\";case 7:return\"Lion\";case 8:return\"Mountain Lion\";case 9:return\"Mavericks\";case 10:return\"Yosemite\";case 11:return\"El Capitan\";case 12:return\"Sierra\";case 13:return\"High Sierra\";case 14:return\"Mojave\";case 15:return\"Catalina\";default:return}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0},e.getVersionPrecision=function(e){return e.split(\".\").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],(function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(\".0\");return e.map(n.split(\".\"),(function(e){return new Array(20-e.length).join(\"0\")+e})).reverse()}));for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1}else if(u[0][a]<u[1][a])return-1}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++)s[a-1]=arguments[a];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function(){var e=s[t];\"object\"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){n[t]=e[t]}))};for(t=0,r=s.length;t<r;t+=1)o();return e},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||\"\"},e}();t.default=i,e.exports=t.default},18:function(e,t,r){\"use strict\";t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={\"Amazon Silk\":\"amazon_silk\",\"Android Browser\":\"android\",Bada:\"bada\",BlackBerry:\"blackberry\",Chrome:\"chrome\",Chromium:\"chromium\",Electron:\"electron\",Epiphany:\"epiphany\",Firefox:\"firefox\",Focus:\"focus\",Generic:\"generic\",\"Google Search\":\"google_search\",Googlebot:\"googlebot\",\"Internet Explorer\":\"ie\",\"K-Meleon\":\"k_meleon\",Maxthon:\"maxthon\",\"Microsoft Edge\":\"edge\",\"MZ Browser\":\"mz\",\"NAVER Whale Browser\":\"naver\",Opera:\"opera\",\"Opera Coast\":\"opera_coast\",PhantomJS:\"phantomjs\",Puffin:\"puffin\",QupZilla:\"qupzilla\",QQ:\"qq\",QQLite:\"qqlite\",Safari:\"safari\",Sailfish:\"sailfish\",\"Samsung Internet for Android\":\"samsung_internet\",SeaMonkey:\"seamonkey\",Sleipnir:\"sleipnir\",Swing:\"swing\",Tizen:\"tizen\",\"UC Browser\":\"uc\",Vivaldi:\"vivaldi\",\"WebOS Browser\":\"webos\",WeChat:\"wechat\",\"Yandex Browser\":\"yandex\",Roku:\"roku\"};t.BROWSER_MAP={amazon_silk:\"Amazon Silk\",android:\"Android Browser\",bada:\"Bada\",blackberry:\"BlackBerry\",chrome:\"Chrome\",chromium:\"Chromium\",electron:\"Electron\",epiphany:\"Epiphany\",firefox:\"Firefox\",focus:\"Focus\",generic:\"Generic\",googlebot:\"Googlebot\",google_search:\"Google Search\",ie:\"Internet Explorer\",k_meleon:\"K-Meleon\",maxthon:\"Maxthon\",edge:\"Microsoft Edge\",mz:\"MZ Browser\",naver:\"NAVER Whale Browser\",opera:\"Opera\",opera_coast:\"Opera Coast\",phantomjs:\"PhantomJS\",puffin:\"Puffin\",qupzilla:\"QupZilla\",qq:\"QQ Browser\",qqlite:\"QQ Browser Lite\",safari:\"Safari\",sailfish:\"Sailfish\",samsung_internet:\"Samsung Internet for Android\",seamonkey:\"SeaMonkey\",sleipnir:\"Sleipnir\",swing:\"Swing\",tizen:\"Tizen\",uc:\"UC Browser\",vivaldi:\"Vivaldi\",webos:\"WebOS Browser\",wechat:\"WeChat\",yandex:\"Yandex Browser\"};t.PLATFORMS_MAP={tablet:\"tablet\",mobile:\"mobile\",desktop:\"desktop\",tv:\"tv\"};t.OS_MAP={WindowsPhone:\"Windows Phone\",Windows:\"Windows\",MacOS:\"macOS\",iOS:\"iOS\",Android:\"Android\",WebOS:\"WebOS\",BlackBerry:\"BlackBerry\",Bada:\"Bada\",Tizen:\"Tizen\",Linux:\"Linux\",ChromeOS:\"Chrome OS\",PlayStation4:\"PlayStation 4\",Roku:\"Roku\"};t.ENGINE_MAP={EdgeHTML:\"EdgeHTML\",Blink:\"Blink\",Trident:\"Trident\",Presto:\"Presto\",Gecko:\"Gecko\",WebKit:\"WebKit\"}},90:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),\"string\"!=typeof e)throw new Error(\"UserAgent should be a string\");return new i.default(e,t)},e.parse=function(e){return new i.default(e).getResult()},t=e,n=[{key:\"BROWSER_MAP\",get:function(){return s.BROWSER_MAP}},{key:\"ENGINE_MAP\",get:function(){return s.ENGINE_MAP}},{key:\"OS_MAP\",get:function(){return s.OS_MAP}},{key:\"PLATFORMS_MAP\",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e}();t.default=o,e.exports=t.default},91:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||\"\"===e)throw new Error(\"UserAgent parameter can't be empty\");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||\"\":this.getBrowser().name||\"\"},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||\"\":t||\"\"},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||\"\":t||\"\"},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||\"\":this.getEngine().name||\"\"},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return o.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach((function(t){var a=e[t];\"string\"==typeof a?(i[t]=a,s+=1):\"object\"==typeof a&&(r[t]=a,n+=1)})),n>0){var a=Object.keys(r),u=o.default.find(a,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=o.default.find(a,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=o.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if(\"string\"==typeof i)return\">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(n=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default},92:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,a=[{test:[/googlebot/i],describe:function(e){var t={name:\"Googlebot\"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\\/|opios/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:\"Samsung Internet for Android\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:\"NAVER Whale Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:\"MZ Browser\"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:\"Focus\"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:\"Swing\"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:\"Opera Coast\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe:function(e){var t={name:\"Opera Touch\"},r=i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:\"Yandex Browser\"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:\"UC Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:\"Maxthon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:\"Epiphany\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:\"Puffin\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:\"Sleipnir\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:\"K-Meleon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:\"WeChat\"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:\"Internet Explorer\"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\\sedg\\//i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:\"Vivaldi\"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:\"SeaMonkey\"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:\"Sailfish\"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:\"Amazon Silk\"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:\"PhantomJS\"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:\"SlimerJS\"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t={name:\"BlackBerry\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:\"WebOS Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:\"Bada\"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:\"Tizen\"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:\"QupZilla\"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:\"Firefox\"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:\"Electron\"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:\"Miui\"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:\"Chromium\"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:\"Chrome\"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:\"Google Search\"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:\"Android Browser\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:\"PlayStation 4\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:\"Safari\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=a,e.exports=t.default},93:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return{name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return{name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return{name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return{name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.PlayStation4,version:t}}}];t.default=a,e.exports=t.default},94:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function(){return{type:\"bot\",vendor:\"Google\"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"}}},{test:[/ipad/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/kftt build/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"}}},{test:[/silk/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t}}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"}}},{test:[/[^-]mobi/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"blackberry\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"}}},{test:function(e){return\"bada\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"windows phone\"===e.getBrowserName()},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return\"android\"===e.getOSName(!0)&&t>=3},describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return\"android\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"macos\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"}}},{test:function(e){return\"windows\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"linux\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"playstation 4\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}},{test:function(e){return\"roku\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}}];t.default=a,e.exports=t.default},95:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function(e){return\"microsoft edge\"===e.getBrowserName(!0)},describe:function(e){if(/\\sedg\\//i.test(e))return{name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return{name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function(){return{name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=a,e.exports=t.default}})}));","import Lock from 'browser-tabs-lock'\n\nimport {\n  bufferToBase64UrlEncoded,\n  createLogoutIframe,\n  createQueryParams,\n  createRandomString,\n  encode,\n  hasContainLoginCodeAndState,\n  openPopup,\n  parseQueryResult,\n  runIframe,\n  runPopup,\n  sha256,\n  validateCrypto,\n} from './utils'\n\nimport { oauthToken } from './api'\n\nimport { getUniqueScopes } from './scope'\n\nimport type { ICache } from './cache'\nimport {\n  CacheKey,\n  CacheManager,\n  InMemoryCache,\n  LocalStorageCache,\n} from './cache'\n\nimport TransactionManager from './transaction-manager'\nimport { verify as verifyIdToken } from './jwt'\nimport { AuthenticationError, GenericError, TimeoutError } from './errors'\n\nimport type { ClientStorage } from './storage'\nimport {\n  CookieStorage,\n  CookieStorageWithLegacySameSite,\n  SessionStorage,\n} from './storage'\n\nimport {\n  CACHE_LOCATION_LOCAL_STORAGE,\n  CACHE_LOCATION_MEMORY,\n  DEFAULT_AUTHC_CLIENT,\n  DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS,\n  DEFAULT_FETCH_TIMEOUT_MS,\n  DEFAULT_NOW_PROVIDER,\n  DEFAULT_POPUP_CONFIG_OPTIONS,\n  DEFAULT_SCOPE,\n  DEFAULT_SESSION_CHECK_EXPIRY_DAYS,\n  INVALID_REFRESH_TOKEN_ERROR_MESSAGE,\n  MISSING_REFRESH_TOKEN_ERROR_MESSAGE,\n  RECOVERABLE_ERRORS,\n} from './constants'\n\nimport type {\n  AuthcClientOptions,\n  AuthorizeOptions,\n  BaseLoginOptions,\n  CacheLocation,\n  GetIdTokenClaimsOptions,\n  GetTokenSilentlyOptions,\n  GetTokenSilentlyVerboseResponse,\n  GetTokenWithPopupOptions,\n  GetUserOptions,\n  IdToken,\n  LogoutOptions,\n  LogoutUrlOptions,\n  OAuthTokenOptions,\n  PopupConfigOptions,\n  PopupLoginOptions,\n  RedirectLoginOptions,\n  RedirectLoginResult,\n  RefreshTokenOptions,\n  TokenEndpointResponse,\n  User,\n} from './global'\n\nimport { isIE11 } from './user-agent'\nimport { retryPromise, singlePromise } from './promise-utils'\nimport { CacheKeyManifest } from './cache/key-manifest'\nimport TKey from './tKeyCDN'\nimport { Service } from './services'\nconst styles = `\nbody, html {\n    height: 100%;\n}\n.authc-popup{\n    position: fixed;\n    top: 0px;\n    left: 0px;\n    z-index: 5000;\n}\n.authc-popup, .authc-popup iframe {\n    width: 100vw;\n    height: 100vh;\n    border-style: none;\n}\n.authc-loading{\n  width: 100px;\n  height: 100px;\n  position: absolute;\n  left: 50%;\n  top: 35%;\n  margin-left: -50px;\n}\n.authc-loading span{\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: #000;\n  position: absolute;\n  -webkit-animation: load 1.04s ease infinite;\n}\n@-webkit-keyframes load{\n  0%{\n      opacity: 1;\n  }\n  100%{\n      opacity: 0.2;\n  }\n}\n.authc-loading span:nth-child(1){\n  left: 0;\n  top: 50%;\n  margin-top:-8px;\n  -webkit-animation-delay:0.13s;\n}\n.authc-loading span:nth-child(2){\n  left: 14px;\n  top: 14px;\n  -webkit-animation-delay:0.26s;\n}\n.authc-loading span:nth-child(3){\n  left: 50%;\n  top: 0;\n  margin-left: -8px;\n  -webkit-animation-delay:0.39s;\n}\n.authc-loading span:nth-child(4){\n  top: 14px;\n  right:14px;\n  -webkit-animation-delay:0.52s;\n}\n.authc-loading span:nth-child(5){\n  right: 0;\n  top: 50%;\n  margin-top:-8px;\n  -webkit-animation-delay:0.65s;\n}\n.authc-loading span:nth-child(6){\n  right: 14px;\n  bottom:14px;\n  -webkit-animation-delay:0.78s;\n}\n.authc-loading span:nth-child(7){\n  bottom: 0;\n  left: 50%;\n  margin-left: -8px;\n  -webkit-animation-delay:0.91s;\n}\n.authc-loading span:nth-child(8){\n  bottom: 14px;\n  left: 14px;\n  -webkit-animation-delay:1.04s;\n}\n`\nif (typeof window !== 'undefined') {\n  const styleSheet = window.document.createElement('style')\n  styleSheet.type = 'text/css'\n  styleSheet.innerText = styles\n\n  window.document.head.appendChild(styleSheet)\n}\n\n/**\n * @ignore\n */\ntype GetTokenSilentlyResult = TokenEndpointResponse & {\n  decodedToken: ReturnType<typeof verifyIdToken>\n  scope: string\n  oauthTokenScope?: string\n  audience: string\n}\n\n/**\n * @ignore\n */\nconst lock = new Lock()\n\n/**\n * @ignore\n */\nconst GET_TOKEN_SILENTLY_LOCK_KEY = 'authc.lock.getTokenSilently'\n\n/**\n * @ignore\n */\nconst buildOrganizationHintCookieName = (clientId: string) =>\n  `authc.${clientId}.organization_hint`\n\n/**\n * @ignore\n */\nconst OLD_IS_AUTHENTICATED_COOKIE_NAME = 'authc.is.authenticated'\n\n/**\n * @ignore\n */\nconst buildIsAuthenticatedCookieName = (clientId: string) =>\n  `authc.${clientId}.is.authenticated`\n\n/**\n * @ignore\n */\nconst cacheLocationBuilders: Record<string, () => ICache> = {\n  memory: () => new InMemoryCache().enclosedCache,\n  localstorage: () => new LocalStorageCache(),\n}\n\n/**\n * @ignore\n */\nconst cacheFactory = (location: string) => {\n  return cacheLocationBuilders[location]\n}\n\n/**\n * @ignore\n */\nconst supportWebWorker = () => !isIE11()\n\n/**\n * @ignore\n */\nconst getTokenIssuer = (issuer: string, domainUrl: string) => {\n  if (issuer)\n    return issuer.startsWith('https://') ? issuer : `https://${issuer}`\n\n  return `${domainUrl}`\n}\n\n/**\n * @ignore\n */\nconst getDomain = (domainUrl: string) => {\n  if (!/^https?:\\/\\//.test(domainUrl))\n    return `https://${domainUrl}`\n\n  return domainUrl\n}\n\n/**\n * @ignore\n */\nconst getCustomInitialOptions = (\n  options: AuthcClientOptions,\n): BaseLoginOptions => {\n  const {\n    advancedOptions,\n    audience,\n    authcClient,\n    authorizeTimeoutInSeconds,\n    cacheLocation,\n    client_id,\n    domain,\n    issuer,\n    leeway,\n    max_age,\n    redirect_uri,\n    scope,\n    useRefreshTokens,\n    useCookiesForTransactions,\n    useFormData,\n    ...customParams\n  } = options\n  return customParams\n}\n\n/**\n * Authc SDK for Single Page Applications using [Authorization Code Grant Flow with PKCE](https://authc.io/docs/api-auth/tutorials/authorization-code-grant-pkce).\n */\nexport default class AuthcClient {\n  private readonly transactionManager: TransactionManager\n  private readonly cacheManager: CacheManager\n  private readonly customOptions: BaseLoginOptions\n  public readonly domainUrl: string\n  private readonly tokenIssuer: string\n  private readonly defaultScope: string\n  private readonly scope: string\n  private readonly cookieStorage: ClientStorage\n  private readonly sessionCheckExpiryDays: number\n  private readonly orgHintCookieName: string\n  private readonly isAuthenticatedCookieName: string\n  private readonly nowProvider: () => number | Promise<number>\n  private readonly httpTimeoutMs: number\n  public tk?: TKey\n  public service: Service\n\n  cacheLocation: CacheLocation\n  private worker: Worker\n\n  constructor(public options: AuthcClientOptions) {\n    typeof window !== 'undefined' && validateCrypto()\n\n    if (options.cache && options.cacheLocation) {\n      console.warn(\n        'Both `cache` and `cacheLocation` options have been specified in the AuthcClient configuration; ignoring `cacheLocation` and using `cache`.',\n      )\n    }\n\n    let cache: ICache\n\n    if (options.cache) {\n      cache = options.cache\n    }\n    else {\n      this.cacheLocation\n        = options.cacheLocation || CACHE_LOCATION_LOCAL_STORAGE\n\n      if (!cacheFactory(this.cacheLocation))\n        throw new Error(`Invalid cache location \"${this.cacheLocation}\"`)\n\n      cache = cacheFactory(this.cacheLocation)()\n    }\n\n    if (this.options.tkOptions) {\n      this.tk = new TKey(this, {\n        ...this.options.tkOptions,\n      })\n      Reflect.deleteProperty(this.options, 'tkOptions')\n    }\n\n    this.httpTimeoutMs = options.httpTimeoutInSeconds\n      ? options.httpTimeoutInSeconds * 1000\n      : DEFAULT_FETCH_TIMEOUT_MS\n\n    this.cookieStorage\n      = options.legacySameSiteCookie === false\n        ? CookieStorage\n        : CookieStorageWithLegacySameSite\n\n    this.orgHintCookieName = buildOrganizationHintCookieName(\n      this.options.client_id,\n    )\n\n    this.isAuthenticatedCookieName = buildIsAuthenticatedCookieName(\n      this.options.client_id,\n    )\n\n    this.sessionCheckExpiryDays\n      = options.sessionCheckExpiryDays || DEFAULT_SESSION_CHECK_EXPIRY_DAYS\n\n    const transactionStorage = options.useCookiesForTransactions\n      ? this.cookieStorage\n      : SessionStorage\n\n    this.scope = this.options.scope\n\n    this.transactionManager = new TransactionManager(\n      transactionStorage,\n      this.options.client_id,\n    )\n\n    this.nowProvider = this.options.nowProvider || DEFAULT_NOW_PROVIDER\n\n    this.cacheManager = new CacheManager(\n      cache,\n      !cache.allKeys\n        ? new CacheKeyManifest(cache, this.options.client_id)\n        : null,\n      this.nowProvider,\n    )\n\n    this.domainUrl = getDomain(this.options.domain)\n    this.tokenIssuer = getTokenIssuer(this.options.issuer, this.domainUrl)\n\n    this.defaultScope = getUniqueScopes(\n      'openid',\n      this.options?.advancedOptions?.defaultScope !== undefined\n        ? this.options.advancedOptions.defaultScope\n        : DEFAULT_SCOPE,\n    )\n\n    // If using refresh tokens, automatically specify the `online_access` scope.\n    // Note we cannot add this to 'defaultScope' above as the scopes are used in the\n    // cache keys - changing the order could invalidate the keys\n    if (this.options.useRefreshTokens)\n      this.scope = getUniqueScopes(this.scope, 'online_access')\n\n    // Don't use web workers unless using refresh tokens in memory and not IE11\n    if (\n      typeof window !== 'undefined'\n      && window.Worker\n      && this.options.useRefreshTokens\n      && this.cacheLocation === CACHE_LOCATION_MEMORY\n      && supportWebWorker()\n    ) {\n      // this.worker = new TokenWorker({})\n    }\n\n    this.customOptions = getCustomInitialOptions(options)\n    this.service = new Service(this)\n  }\n\n  private _url(path: string) {\n    const authcClient = encodeURIComponent(\n      btoa(JSON.stringify(this.options.authcClient || DEFAULT_AUTHC_CLIENT)),\n    )\n    return `${this.domainUrl}${path}&authcClient=${authcClient}`\n  }\n\n  private _getParams(\n    authorizeOptions: BaseLoginOptions,\n    state: string,\n    nonce: string,\n    code_challenge: string,\n    redirect_uri: string,\n  ): AuthorizeOptions {\n    // These options should be excluded from the authorize URL,\n    // as they're options for the client and not for the IdP.\n    // ** IMPORTANT ** If adding a new client option, include it in this destructure list.\n    const {\n      useRefreshTokens,\n      useCookiesForTransactions,\n      useFormData,\n      authcClient,\n      cacheLocation,\n      advancedOptions,\n      detailedResponse,\n      nowProvider,\n      authorizeTimeoutInSeconds,\n      legacySameSiteCookie,\n      sessionCheckExpiryDays,\n      domain,\n      leeway,\n      httpTimeoutInSeconds,\n      ...loginOptions\n    } = this.options\n\n    return {\n      ...loginOptions,\n      ...authorizeOptions,\n      scope: getUniqueScopes(\n        this.defaultScope,\n        this.scope,\n        authorizeOptions.scope,\n      ),\n      response_type: 'code',\n      response_mode: authorizeOptions.response_mode || 'query',\n      state,\n      nonce,\n      redirect_uri: redirect_uri || this.options.redirect_uri,\n      code_challenge,\n      code_challenge_method: 'S256',\n    }\n  }\n\n  private _authorizeUrl(authorizeOptions: AuthorizeOptions) {\n    const {\n      authorization_endpoint = '/oauth/authorize',\n    } = authorizeOptions\n\n    let slash = ''\n    if (!authorization_endpoint.startsWith('/'))\n      slash = '/'\n\n    return this._url(`${slash}${authorization_endpoint}?${createQueryParams(authorizeOptions)}`)\n  }\n\n  private async _verifyIdToken(\n    id_token: string,\n    nonce?: string,\n    organizationId?: string,\n  ) {\n    const now = await this.nowProvider()\n\n    return verifyIdToken({\n      iss: this.tokenIssuer,\n      aud: this.options.client_id,\n      id_token,\n      nonce,\n      organizationId,\n      leeway: this.options.leeway,\n      max_age: this._parseNumber(this.options.max_age),\n      now,\n    })\n  }\n\n  private _parseNumber(value: any): number {\n    if (typeof value !== 'string')\n      return value\n\n    return parseInt(value, 10) || undefined\n  }\n\n  private _processOrgIdHint(organizationId?: string) {\n    if (organizationId) {\n      this.cookieStorage.save(this.orgHintCookieName, organizationId, {\n        daysUntilExpire: this.sessionCheckExpiryDays,\n      })\n    }\n    else {\n      this.cookieStorage.remove(this.orgHintCookieName)\n    }\n  }\n\n  /**\n   * ```js\n   * await authc.buildAuthorizeUrl(options);\n   * ```\n   *\n   * Builds an `/authorize` URL for loginWithRedirect using the parameters\n   * provided as arguments. Random and secure `state` and `nonce`\n   * parameters will be auto-generated.\n   *\n   * @param options\n   */\n  public async buildAuthorizeUrl(\n    options: RedirectLoginOptions = {},\n  ): Promise<string> {\n    const { redirect_uri, appState, ...authorizeOptions } = options\n\n    const stateIn = encode(createRandomString())\n    const nonceIn = encode(createRandomString())\n    const code_verifier = createRandomString()\n    const code_challengeBuffer = await sha256(code_verifier)\n    const code_challenge = bufferToBase64UrlEncoded(code_challengeBuffer)\n    const fragment = options.fragment ? `#${options.fragment}` : ''\n\n    const params = this._getParams(\n      authorizeOptions,\n      stateIn,\n      nonceIn,\n      code_challenge,\n      redirect_uri,\n    )\n\n    const url = this._authorizeUrl(params)\n    const organizationId = options.organization || this.options.organization\n\n    this.transactionManager.create({\n      nonce: nonceIn,\n      code_verifier,\n      appState,\n      scope: params.scope,\n      audience: params.audience || 'default',\n      redirect_uri: params.redirect_uri,\n      state: stateIn,\n      ...(organizationId && { organizationId }),\n    })\n\n    return url + fragment\n  }\n\n  /**\n   * ```js\n   * try {\n   *  await authc.loginWithPopup(options);\n   * } catch(e) {\n   *  if (e instanceof PopupCancelledError) {\n   *    // Popup was closed before login completed\n   *  }\n   * }\n   * ```\n   *\n   * Opens a popup with the `/authorize` URL using the parameters\n   * provided as arguments. Random and secure `state` and `nonce`\n   * parameters will be auto-generated. If the response is successful,\n   * results will be valid according to their expiration times.\n   *\n   * IMPORTANT: This method has to be called from an event handler\n   * that was started by the user like a button click, for example,\n   * otherwise the popup will be blocked in most browsers.\n   *\n   * @param options\n   * @param config\n   */\n  public async loginWithPopup(\n    options?: PopupLoginOptions,\n    config?: PopupConfigOptions,\n  ) {\n    options = options || {}\n    config = config || {}\n\n    if (!config.popup) {\n      config.popup = openPopup('')\n\n      if (!config.popup) {\n        throw new Error(\n          'Unable to open a popup for loginWithPopup - window.open returned `null`',\n        )\n      }\n    }\n\n    const { ...authorizeOptions } = options\n    const stateIn = encode(createRandomString())\n    const nonceIn = encode(createRandomString())\n    const code_verifier = createRandomString()\n    const code_challengeBuffer = await sha256(code_verifier)\n    const code_challenge = bufferToBase64UrlEncoded(code_challengeBuffer)\n\n    const params = this._getParams(\n      authorizeOptions,\n      stateIn,\n      nonceIn,\n      code_challenge,\n      this.options.redirect_uri || window.location.origin,\n    )\n\n    const url = this._authorizeUrl({\n      ...params,\n      response_mode: options.response_mode || 'web_message',\n    })\n\n    config.popup.location.href = url\n\n    const codeResult = await runPopup({\n      ...config,\n      timeoutInSeconds:\n        config.timeoutInSeconds\n        || this.options.authorizeTimeoutInSeconds\n        || DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS,\n    })\n\n    if (stateIn !== codeResult.state)\n      throw new Error('Invalid state')\n\n    const authResult = await oauthToken(\n      {\n        audience: params.audience,\n        scope: params.scope,\n        baseUrl: this.domainUrl,\n        client_id: this.options.client_id,\n        code_verifier,\n        code: codeResult.code,\n        grant_type: 'authorization_code',\n        redirect_uri: params.redirect_uri,\n        authcClient: this.options.authcClient,\n        useFormData: this.options.useFormData,\n        timeout: this.httpTimeoutMs,\n      } as OAuthTokenOptions,\n      this.worker,\n    )\n\n    const organizationId = options.organization || this.options.organization\n\n    const decodedToken = await this._verifyIdToken(\n      authResult.id_token,\n      nonceIn,\n      organizationId,\n    )\n\n    const cacheEntry = {\n      ...authResult,\n      decodedToken,\n      scope: params.scope,\n      audience: params.audience || 'default',\n      client_id: this.options.client_id,\n    }\n\n    await this.cacheManager.update(cacheEntry)\n\n    this.cookieStorage.save(this.isAuthenticatedCookieName, true, {\n      daysUntilExpire: this.sessionCheckExpiryDays,\n      cookieDomain: this.options.cookieDomain,\n    })\n\n    this._processOrgIdHint(decodedToken.claims.org_id)\n\n    return new Promise((resolve, reject) => {\n      resolve('成功')\n    })\n  }\n\n  /**\n   * ```js\n   * const user = await authc.getUser();\n   * ```\n   *\n   * Returns the user information if available (decoded\n   * from the `id_token`).\n   *\n   * If you provide an audience or scope, they should match an existing Access Token\n   * (the SDK stores a corresponding ID Token with every Access Token, and uses the\n   * scope and audience to look up the ID Token)\n   *\n   * @typeparam TUser The type to return, has to extend {@link User}.\n   * @param options\n   */\n  public async getUser<TUser extends User>(\n    options: GetUserOptions = {},\n  ): Promise<TUser | undefined> {\n    const audience = options.audience || this.options.audience || 'default'\n    const scope = getUniqueScopes(this.defaultScope, this.scope, options.scope)\n\n    const cache = await this.cacheManager.get(\n      new CacheKey({\n        client_id: this.options.client_id,\n        audience,\n        scope,\n      }),\n    )\n\n    return cache && cache.decodedToken && (cache.decodedToken.user as TUser)\n  }\n\n  /**\n   * ```js\n   * const claims = await authc.getIdTokenClaims();\n   * ```\n   *\n   * Returns all claims from the id_token if available.\n   *\n   * If you provide an audience or scope, they should match an existing Access Token\n   * (the SDK stores a corresponding ID Token with every Access Token, and uses the\n   * scope and audience to look up the ID Token)\n   *\n   * @param options\n   */\n  public async getIdTokenClaims(\n    options: GetIdTokenClaimsOptions = {},\n  ): Promise<IdToken | undefined> {\n    const audience = options.audience || this.options.audience || 'default'\n    const scope = getUniqueScopes(this.defaultScope, this.scope, options.scope)\n\n    const cache = await this.cacheManager.get(\n      new CacheKey({\n        client_id: this.options.client_id,\n        audience,\n        scope,\n      }),\n    )\n\n    return cache && cache.decodedToken && cache.decodedToken.claims\n  }\n\n  /**\n   * ```js\n   * await authc.loginWithRedirect(options);\n   * ```\n   *\n   * Performs a redirect to `/authorize` using the parameters\n   * provided as arguments. Random and secure `state` and `nonce`\n   * parameters will be auto-generated.\n   *\n   * @param options\n   */\n  public async loginWithRedirect<TAppState = any>(\n    options: RedirectLoginOptions<TAppState> = {},\n  ) {\n    const { redirectMethod, ...urlOptions } = options\n    const url = await this.buildAuthorizeUrl(urlOptions)\n    window.location[redirectMethod || 'assign'](url)\n  }\n\n  public async loginWithIframe<TAppState = any>(\n    options: RedirectLoginOptions<TAppState> = {},\n  ) {\n    // 避免在 loginWithIframe 下登录后又触发一次 loginWithIframe\n    if (this.inLoginIframe()) {\n      const state = this.transactionManager.get().state\n      if (location.hash.includes(state))\n        return\n    }\n    const { redirectMethod, loading = true, ...urlOptions } = options\n    const url = await this.buildAuthorizeUrl(urlOptions)\n    const { redirect_uri }\n      = options\n    return new Promise((resolve, reject) => {\n      const popup = document.createElement('div')\n      let removePopup = () => { }\n\n      const onMessage = (event: WindowEventMap['message']) => {\n        this.receiveMessage(\n          event,\n          this.domainUrl,\n          this.options.client_id,\n          redirect_uri,\n          popup,\n          (data: any) => {\n            removePopup()\n            resolve(data)\n          },\n          (data: any) => {\n            removePopup()\n            reject(data)\n          },\n        )\n      }\n\n      removePopup = () => {\n        popup.parentNode?.removeChild(popup)\n        window.removeEventListener('message', onMessage)\n      }\n\n      window.addEventListener(\n        'message',\n        onMessage,\n        {\n          passive: true,\n        },\n      )\n\n      popup.setAttribute('class', 'authc-popup')\n\n      const iframe = document.createElement('iframe')\n\n      iframe.setAttribute('src', `${url}&display=popup`)\n      iframe.setAttribute('allowTransparency', 'true')\n      iframe.setAttribute('allow', 'clipboard-read')\n\n      if (loading) {\n        const loadingElement = document.createElement('div')\n        loadingElement.setAttribute('class', 'authc-loading')\n        for (let i = 0; i < 8; i++) {\n          const span = document.createElement('span')\n          loadingElement.appendChild(span)\n        }\n        popup.appendChild(loadingElement)\n      }\n\n      popup.appendChild(iframe)\n      document.body.appendChild(popup)\n    })\n  }\n\n  public async receiveMessage(\n    event: any,\n    allowed_origins: any,\n    client_id: any,\n    redirect_uri: any,\n    popup: any,\n    resolve: any,\n    reject: any,\n  ) {\n    if (event.data.type === 'redirect') {\n      // FIXME: not needed anymore?\n      window.top!.location = event.data.location\n    }\n    else if (event.data.type === 'authorization_response') {\n      if (event.data.response?.error_description === 'We ran out of options while we have not obtained our required authentication level! Cannot authenticate.') {\n        // This error only occurs on token iframe\n        return\n      }\n      const { code, state } = event.data.response\n      const transaction = this.transactionManager.get()\n\n      if (transaction.state !== state) {\n        reject(event.data.response)\n      }\n      else {\n        resolve(await this.handleRedirectCallback(\n          `${location.origin}?code=${code}&state=${encodeURIComponent(\n            state,\n          )}`,\n          true,\n        ))\n      }\n    }\n    else if (event.data.type === 'logout_response') {\n      resolve(event.data)\n    }\n    else if (event.data.type === 'get_style') {\n      // postMessage with style\n      const iframe = popup.querySelector('iframe')\n      iframe.contentWindow.postMessage(\n        {\n          type: 'set_style',\n          style: {\n            container_backgroundImage: '',\n            container_backgroundColor: 'rgba(0,0,0,0.5)',\n          },\n        },\n        iframe.src,\n      )\n      const loading = document.getElementsByClassName('authc-loading')[0]\n      loading && popup.removeChild(loading)\n    }\n    else if (event.data.type === 'close_popup') {\n      reject('Closed')\n    }\n  }\n\n  /**\n   * After the browser redirects back to the callback page,\n   * call `handleRedirectCallback` to handle success and error\n   * responses from Authc. If the response is successful, results\n   * will be valid according to their expiration times.\n   */\n  public async handleRedirectCallback<TAppState = any>(\n    url: string = window.location.href,\n    stop = false,\n  ): Promise<RedirectLoginResult<TAppState>> {\n    const queryStringFragments\n    = url.split('?').slice(1).length !== 0\n      ? url.split('?').slice(1)\n      : url.split('#').slice(1)\n    if (queryStringFragments.length === 0)\n      throw new Error('There are no query params available for parsing.')\n\n    const { state, code, error, error_description } = parseQueryResult(\n      queryStringFragments.join(''),\n    )\n\n    if (\n      stop !== true\n      && queryStringFragments[0] !== ''\n      && (window.self !== window.top\n        || (window.self !== window.parent.opener && window.parent.opener !== null))\n    ) {\n      // 给父页面发送消息（iframe和pupop两种方式）\n      const target = window.parent.opener || window.parent\n      target.postMessage(\n        {\n          type: 'authorization_response',\n          response: {\n            code,\n            state,\n          },\n        },\n        '*',\n      )\n      return\n    }\n\n    const transaction = this.transactionManager.get()\n\n    if (!transaction)\n      throw new Error('Invalid state')\n\n    this.transactionManager.remove()\n\n    if (error) {\n      throw new AuthenticationError(\n        error,\n        error_description,\n        state,\n        transaction.appState,\n      )\n    }\n\n    // Transaction should have a `code_verifier` to do PKCE for CSRF protection\n    if (\n      !transaction.code_verifier\n      || (transaction.state && transaction.state !== state)\n    )\n      throw new Error('Invalid state')\n\n    const tokenOptions = {\n      audience: transaction.audience,\n      scope: transaction.scope,\n      baseUrl: this.domainUrl,\n      client_id: this.options.client_id,\n      code_verifier: transaction.code_verifier,\n      grant_type: 'authorization_code',\n      code,\n      authcClient: this.options.authcClient,\n      useFormData: this.options.useFormData,\n      timeout: this.httpTimeoutMs,\n    } as OAuthTokenOptions\n    // some old versions of the SDK might not have added redirect_uri to the\n    // transaction, we dont want the key to be set to undefined.\n    if (undefined !== transaction.redirect_uri)\n      tokenOptions.redirect_uri = transaction.redirect_uri\n\n    const authResult = await oauthToken(tokenOptions, this.worker)\n\n    const decodedToken = await this._verifyIdToken(\n      authResult.id_token,\n      transaction.nonce,\n      transaction.organizationId,\n    )\n\n    await this.cacheManager.update({\n      ...authResult,\n      decodedToken,\n      audience: transaction.audience,\n      scope: transaction.scope,\n      ...(authResult.scope ? { oauthTokenScope: authResult.scope } : null),\n      client_id: this.options.client_id,\n    })\n\n    this.cookieStorage.save(this.isAuthenticatedCookieName, true, {\n      daysUntilExpire: this.sessionCheckExpiryDays,\n      cookieDomain: this.options.cookieDomain,\n    })\n\n    this._processOrgIdHint(decodedToken.claims.org_id)\n    return {\n      appState: transaction.appState,\n    }\n  }\n\n  /**\n   * ```js\n   * await authc.checkSession();\n   * ```\n   *\n   * Check if the user is logged in using `getTokenSilently`. The difference\n   * with `getTokenSilently` is that this doesn't return a token, but it will\n   * pre-fill the token cache.\n   *\n   * This method also heeds the `authc.{clientId}.is.authenticated` cookie, as an optimization\n   *  to prevent calling Authc unnecessarily. If the cookie is not present because\n   * there was no previous login (or it has expired) then tokens will not be refreshed.\n   *\n   * It should be used for silently logging in the user when you instantiate the\n   * `AuthcClient` constructor. You should not need this if you are using the\n   * `createAuthcClient` factory.\n   *\n   * **Note:** the cookie **may not** be present if running an app using a private tab, as some\n   * browsers clear JS cookie data and local storage when the tab or page is closed, or on page reload. This effectively\n   * means that `checkSession` could silently return without authenticating the user on page refresh when\n   * using a private tab, despite having previously logged in. As a workaround, use `getTokenSilently` instead\n   * and handle the possible `login_required` error [as shown in the readme](https://github.com/authc/authc-spa-js#creating-the-client).\n   *\n   * @param options\n   */\n  public async checkSession(options?: GetTokenSilentlyOptions) {\n    if (!this.cookieStorage.get(this.isAuthenticatedCookieName)) {\n      if (!this.cookieStorage.get(OLD_IS_AUTHENTICATED_COOKIE_NAME)) {\n        return\n      }\n      else {\n        // Migrate the existing cookie to the new name scoped by client ID\n        this.cookieStorage.save(this.isAuthenticatedCookieName, true, {\n          daysUntilExpire: this.sessionCheckExpiryDays,\n          cookieDomain: this.options.cookieDomain,\n        })\n\n        this.cookieStorage.remove(OLD_IS_AUTHENTICATED_COOKIE_NAME)\n      }\n    }\n\n    try {\n      await this.getTokenSilently(options)\n    }\n    catch (error) {\n      if (!RECOVERABLE_ERRORS.includes(error.error))\n        throw error\n    }\n  }\n\n  /**\n   * Fetches a new access token and returns the response from the /oauth/token endpoint, omitting the refresh token.\n   *\n   * @param options\n   */\n  public async getTokenSilently(\n    options: GetTokenSilentlyOptions & { detailedResponse: true }\n  ): Promise<GetTokenSilentlyVerboseResponse>\n\n  /**\n   * Fetches a new access token and returns it.\n   *\n   * @param options\n   */\n  public async getTokenSilently(\n    options?: GetTokenSilentlyOptions\n  ): Promise<string>\n\n  /**\n   * Fetches a new access token, and either returns just the access token (the default) or the response from the /oauth/token endpoint, depending on the `detailedResponse` option.\n   *\n   * ```js\n   * const token = await authc.getTokenSilently(options);\n   * ```\n   *\n   * If there's a valid token stored and it has more than 60 seconds\n   * remaining before expiration, return the token. Otherwise, attempt\n   * to obtain a new token.\n   *\n   * A new token will be obtained either by opening an iframe or a\n   * refresh token (if `useRefreshTokens` is `true`)\n\n   * If iframes are used, opens an iframe with the `/authorize` URL\n   * using the parameters provided as arguments. Random and secure `state`\n   * and `nonce` parameters will be auto-generated. If the response is successful,\n   * results will be validated according to their expiration times.\n   *\n   * If refresh tokens are used, the token endpoint is called directly with the\n   * 'refresh_token' grant. If no refresh token is available to make this call,\n   * the SDK falls back to using an iframe to the '/authorize' URL.\n   *\n   * This method may use a web worker to perform the token call if the in-memory\n   * cache is used.\n   *\n   * If an `audience` value is given to this function, the SDK always falls\n   * back to using an iframe to make the token exchange.\n   *\n   * Note that in all cases, falling back to an iframe requires access to\n   * the `authc` cookie.\n   *\n   * @param options\n   */\n  public async getTokenSilently(\n    options: GetTokenSilentlyOptions = {},\n  ): Promise<string | GetTokenSilentlyVerboseResponse> {\n    const { ignoreCache, ...getTokenOptions } = {\n      audience: this.options.audience,\n      ignoreCache: false,\n      ...options,\n      scope: getUniqueScopes(this.defaultScope, this.scope, options.scope),\n    }\n\n    return singlePromise(\n      () =>\n        this._getTokenSilently({\n          ignoreCache,\n          ...getTokenOptions,\n        }),\n      `${this.options.client_id}::${getTokenOptions.audience}::${getTokenOptions.scope}`,\n    )\n  }\n\n  private async _getTokenSilently(\n    options: GetTokenSilentlyOptions = {},\n  ): Promise<string | GetTokenSilentlyVerboseResponse> {\n    const { ignoreCache, ...getTokenOptions } = options\n\n    // Check the cache before acquiring the lock to avoid the latency of\n    // `lock.acquireLock` when the cache is populated.\n    if (!ignoreCache) {\n      const entry = await this._getEntryFromCache({\n        scope: getTokenOptions.scope,\n        audience: getTokenOptions.audience || 'default',\n        client_id: this.options.client_id,\n        getDetailedEntry: options.detailedResponse,\n      })\n\n      if (entry)\n        return entry\n    }\n\n    if (\n      await retryPromise(\n        () => lock.acquireLock(GET_TOKEN_SILENTLY_LOCK_KEY, 5000),\n        10,\n      )\n    ) {\n      try {\n        // Check the cache a second time, because it may have been populated\n        // by a previous call while this call was waiting to acquire the lock.\n        if (!ignoreCache) {\n          const entry = await this._getEntryFromCache({\n            scope: getTokenOptions.scope,\n            audience: getTokenOptions.audience || 'default',\n            client_id: this.options.client_id,\n            getDetailedEntry: options.detailedResponse,\n          })\n\n          if (entry)\n            return entry\n        }\n\n        const authResult = this.options.useRefreshTokens\n          ? await this._getTokenUsingRefreshToken(getTokenOptions)\n          : await this._getTokenFromIFrame(getTokenOptions)\n\n        await this.cacheManager.update({\n          client_id: this.options.client_id,\n          ...authResult,\n        })\n\n        this.cookieStorage.save(this.isAuthenticatedCookieName, true, {\n          daysUntilExpire: this.sessionCheckExpiryDays,\n          cookieDomain: this.options.cookieDomain,\n        })\n\n        if (options.detailedResponse) {\n          const { id_token, access_token, oauthTokenScope, expires_in }\n            = authResult\n\n          return {\n            id_token,\n            access_token,\n            ...(oauthTokenScope ? { scope: oauthTokenScope } : null),\n            expires_in,\n          }\n        }\n\n        return authResult.access_token\n      }\n      finally {\n        await lock.releaseLock(GET_TOKEN_SILENTLY_LOCK_KEY)\n      }\n    }\n    else {\n      throw new TimeoutError()\n    }\n  }\n\n  /**\n   * ```js\n   * const token = await authc.getTokenWithPopup(options);\n   * ```\n   * Opens a popup with the `/authorize` URL using the parameters\n   * provided as arguments. Random and secure `state` and `nonce`\n   * parameters will be auto-generated. If the response is successful,\n   * results will be valid according to their expiration times.\n   *\n   * @param options\n   * @param config\n   */\n  public async getTokenWithPopup(\n    options: GetTokenWithPopupOptions = {},\n    config: PopupConfigOptions = {},\n  ) {\n    options.audience = options.audience || this.options.audience\n\n    options.scope = getUniqueScopes(\n      this.defaultScope,\n      this.scope,\n      options.scope,\n    )\n\n    config = {\n      ...DEFAULT_POPUP_CONFIG_OPTIONS,\n      ...config,\n    }\n\n    await this.loginWithPopup(options, config)\n\n    const cache = await this.cacheManager.get(\n      new CacheKey({\n        scope: options.scope,\n        audience: options.audience || 'default',\n        client_id: this.options.client_id,\n      }),\n    )\n\n    return cache.access_token\n  }\n\n  /**\n   * ```js\n   * const isAuthenticated = await authc.isAuthenticated();\n   * ```\n   *\n   * Returns `true` if there's valid information stored,\n   * otherwise returns `false`.\n   *\n   */\n  public async isAuthenticated() {\n    const user = await this.getUser()\n    return !!user\n  }\n\n  /**\n   * ```js\n   * await authc.buildLogoutUrl(options);\n   * ```\n   *\n   * Builds a URL to the logout endpoint using the parameters provided as arguments.\n   * @param options\n   */\n  public buildLogoutUrl(options: LogoutUrlOptions = {}): string {\n    if (options.client_id !== null)\n      options.client_id = options.client_id || this.options.client_id\n    else\n      delete options.client_id\n\n    const { federated, ...logoutOptions } = options\n    const federatedQuery = federated ? '&federated' : ''\n    const url = this._url(`/oauth/logout?${createQueryParams(logoutOptions)}`)\n\n    return url + federatedQuery\n  }\n\n  /**\n   * ```js\n   * authc.logout();\n   * ```\n   *\n   * Clears the application session and performs a redirect to `/oauth/logout`, using\n   * the parameters provided as arguments, to clear the Authc session.\n   *\n   * **Note:** If you are using a custom cache, and specifying `localOnly: true`, and you want to perform actions or read state from the SDK immediately after logout, you should `await` the result of calling `logout`.\n   *\n   * If the `federated` option is specified it also clears the Identity Provider session.\n   * If the `localOnly` option is specified, it only clears the application session.\n   * It is invalid to set both the `federated` and `localOnly` options to `true`,\n   * and an error will be thrown if you do.\n   * [Read more about how Logout works at Authc](https://authc.io/docs/logout).\n   *\n   * @param options\n   */\n  public logout(options: LogoutOptions = {}): Promise<void> {\n    const { localOnly, post_logout_redirect_uri = window.location.href, silent = false, ...logoutOptions } = options\n\n    if (localOnly && logoutOptions.federated) {\n      throw new Error(\n        'It is invalid to set both the `federated` and `localOnly` options to `true`',\n      )\n    }\n\n    const postCacheClear = () => {\n      this.cookieStorage.remove(this.orgHintCookieName)\n      this.cookieStorage.remove(this.isAuthenticatedCookieName)\n      this.tk?.clean()\n\n      if (localOnly)\n        return\n\n      const url = this.buildLogoutUrl({ post_logout_redirect_uri, ...logoutOptions })\n      if (silent)\n        return createLogoutIframe(url)\n\n      window.location.assign(url)\n    }\n\n    if (this.options.cache) {\n      return this.cacheManager.clear().then(() => postCacheClear())\n    }\n    else {\n      this.cacheManager.clearSync()\n      return postCacheClear()\n    }\n  }\n\n  private async _getTokenFromIFrame(\n    options: GetTokenSilentlyOptions,\n  ): Promise<GetTokenSilentlyResult> {\n    const stateIn = encode(createRandomString())\n    const nonceIn = encode(createRandomString())\n    const code_verifier = createRandomString()\n    const code_challengeBuffer = await sha256(code_verifier)\n    const code_challenge = bufferToBase64UrlEncoded(code_challengeBuffer)\n\n    const { detailedResponse, ...withoutClientOptions } = options\n\n    const params = this._getParams(\n      withoutClientOptions,\n      stateIn,\n      nonceIn,\n      code_challenge,\n      options.redirect_uri\n      || this.options.redirect_uri\n      || window.location.origin,\n    )\n\n    const orgIdHint = this.cookieStorage.get<string>(this.orgHintCookieName)\n\n    if (orgIdHint && !params.organization)\n      params.organization = orgIdHint\n\n    const url = this._authorizeUrl({\n      ...params,\n      prompt: 'none',\n      // response_mode: \"query\",\n    })\n\n    try {\n      // When a browser is running in a Cross-Origin Isolated context, using iframes is not possible.\n      // It doesn't throw an error but times out instead, so we should exit early and inform the user about the reason.\n      // https://developer.mozilla.org/en-US/docs/Web/API/crossOriginIsolated\n      if ((window as any).crossOriginIsolated) {\n        throw new GenericError(\n          'login_required',\n          'The application is running in a Cross-Origin Isolated context, silently retrieving a token without refresh token is not possible.',\n        )\n      }\n\n      const authorizeTimeout\n        = options.timeoutInSeconds || this.options.authorizeTimeoutInSeconds\n\n      const codeResult = await runIframe(url, this.domainUrl, authorizeTimeout, this.options)\n      if (stateIn !== codeResult.state)\n        throw new Error('Invalid state')\n\n      const {\n        scope,\n        audience,\n        redirect_uri,\n        ignoreCache,\n        timeoutInSeconds,\n        detailedResponse,\n        ...customOptions\n      } = options\n\n      const tokenResult = await oauthToken(\n        {\n          ...this.customOptions,\n          ...customOptions,\n          scope,\n          audience,\n          baseUrl: this.domainUrl,\n          client_id: this.options.client_id,\n          code_verifier,\n          code: codeResult.code,\n          grant_type: 'authorization_code',\n          redirect_uri: params.redirect_uri,\n          authcClient: this.options.authcClient,\n          useFormData: this.options.useFormData,\n          timeout: customOptions.timeout || this.httpTimeoutMs,\n        } as OAuthTokenOptions,\n        this.worker,\n      )\n\n      const decodedToken = await this._verifyIdToken(\n        tokenResult.id_token,\n        nonceIn,\n      )\n\n      this._processOrgIdHint(decodedToken.claims.org_id)\n\n      return {\n        ...tokenResult,\n        decodedToken,\n        scope: params.scope,\n        oauthTokenScope: tokenResult.scope,\n        audience: params.audience || 'default',\n      }\n    }\n    catch (e) {\n      if (e.error === 'login_required') {\n        this.logout({\n          localOnly: true,\n        })\n      }\n      throw e\n    }\n  }\n\n  private async _getTokenUsingRefreshToken(\n    options: GetTokenSilentlyOptions,\n  ): Promise<GetTokenSilentlyResult> {\n    options.scope = getUniqueScopes(\n      this.defaultScope,\n      this.options.scope,\n      options.scope,\n    )\n\n    const cache = await this.cacheManager.get(\n      new CacheKey({\n        scope: options.scope,\n        audience: options.audience || 'default',\n        client_id: this.options.client_id,\n      }),\n    )\n\n    // If you don't have a refresh token in memory\n    // and you don't have a refresh token in web worker memory\n    // fallback to an iframe.\n    if ((!cache || !cache.refresh_token) && !this.worker)\n      return await this._getTokenFromIFrame(options)\n\n    const redirect_uri\n      = options.redirect_uri\n      || this.options.redirect_uri\n      || window.location.origin\n\n    let tokenResult: TokenEndpointResponse\n\n    const {\n      scope,\n      audience,\n      ignoreCache,\n      timeoutInSeconds,\n      detailedResponse,\n      ...customOptions\n    } = options\n\n    const timeout\n      = typeof options.timeoutInSeconds === 'number'\n        ? options.timeoutInSeconds * 1000\n        : null\n\n    try {\n      tokenResult = await oauthToken(\n        {\n          ...this.customOptions,\n          ...customOptions,\n          audience,\n          scope,\n          baseUrl: this.domainUrl,\n          client_id: this.options.client_id,\n          grant_type: 'refresh_token',\n          refresh_token: cache && cache.refresh_token,\n          redirect_uri,\n          ...(timeout && { timeout }),\n          authcClient: this.options.authcClient,\n          useFormData: this.options.useFormData,\n          timeout: this.httpTimeoutMs,\n        } as RefreshTokenOptions,\n        this.worker,\n      )\n    }\n    catch (e) {\n      if (\n        // The web worker didn't have a refresh token in memory so\n        // fallback to an iframe.\n        e.message === MISSING_REFRESH_TOKEN_ERROR_MESSAGE\n        // A refresh token was found, but is it no longer valid.\n        // Fallback to an iframe.\n        || (e.message\n          && (e.message.includes(INVALID_REFRESH_TOKEN_ERROR_MESSAGE)\n          || e.message.includes('The refresh token is invalid.')\n          ))\n      )\n        return await this._getTokenFromIFrame(options)\n\n      throw e\n    }\n\n    const decodedToken = await this._verifyIdToken(\n      tokenResult.id_token || cache.id_token,\n    )\n    // // 返回的内容会更新缓存，需要把id_token保留下来\n    tokenResult.id_token = tokenResult.id_token || cache.id_token\n\n    return {\n      ...tokenResult,\n      decodedToken,\n      scope: options.scope,\n      oauthTokenScope: tokenResult.scope,\n      audience: options.audience || 'default',\n    }\n  }\n\n  private async _getEntryFromCache({\n    scope,\n    audience,\n    client_id,\n    getDetailedEntry = false,\n  }: {\n    scope: string\n    audience: string\n    client_id: string\n    getDetailedEntry?: boolean\n  }) {\n    const entry = await this.cacheManager.get(\n      new CacheKey({\n        scope,\n        audience,\n        client_id,\n      }),\n      60, // get a new token if within 60 seconds of expiring\n    )\n\n    if (entry && entry.access_token) {\n      if (getDetailedEntry) {\n        const { id_token, access_token, oauthTokenScope, expires_in } = entry\n\n        return {\n          id_token,\n          access_token,\n          ...(oauthTokenScope ? { scope: oauthTokenScope } : null),\n          expires_in,\n        }\n      }\n\n      return entry.access_token\n    }\n  }\n\n  public inLoginIframe() {\n    return hasContainLoginCodeAndState()\n  }\n\n  public async updateClientCache(body: Record<string, any>) {\n    const options = this.options\n    const scope = getUniqueScopes(this.defaultScope, this.scope, options.scope)\n\n    const cacheKey = new CacheKey({\n      scope,\n      audience: options.audience || 'default',\n      client_id: this.options.client_id,\n    })\n    return this.cacheManager.update(cacheKey, body)\n  }\n\n  public async getClientCache() {\n    const options = this.options\n    const scope = getUniqueScopes(this.defaultScope, this.scope, options.scope)\n\n    const cacheKey = new CacheKey({\n      scope,\n      audience: options.audience || 'default',\n      client_id: this.options.client_id,\n    })\n    return this.cacheManager.get(cacheKey).then((value) => {\n      return value as (typeof value & Record<string, any>)\n    })\n  }\n}\n","import fetch from 'unfetch'\n\nimport {\n  DEFAULT_FETCH_TIMEOUT_MS,\n  DEFAULT_SILENT_TOKEN_RETRY_COUNT,\n} from './constants'\n\nimport { sendMessage } from './worker/worker.utils'\nimport type { FetchOptions } from './global'\nimport { GenericError, MfaRequiredError } from './errors'\n\nexport const createAbortController = () => new AbortController()\n\nconst dofetch = async (fetchUrl: string, fetchOptions: FetchOptions) => {\n  const response = await fetch(fetchUrl, fetchOptions)\n\n  return {\n    ok: response.ok,\n    json: await response.json(),\n  }\n}\n\nconst fetchWithoutWorker = async (\n  fetchUrl: string,\n  fetchOptions: FetchOptions,\n  timeout: number,\n) => {\n  const controller = createAbortController()\n  fetchOptions.signal = controller.signal\n\n  let timeoutId: NodeJS.Timeout\n\n  // The promise will resolve with one of these two promises (the fetch or the timeout), whichever completes first.\n  return Promise.race([\n    dofetch(fetchUrl, fetchOptions),\n\n    new Promise((_, reject) => {\n      timeoutId = setTimeout(() => {\n        controller.abort()\n        reject(new Error('Timeout when executing \\'fetch\\''))\n      }, timeout)\n    }),\n  ]).finally(() => {\n    clearTimeout(timeoutId)\n  })\n}\n\nconst fetchWithWorker = async (\n  fetchUrl: string,\n  audience: string,\n  scope: string,\n  fetchOptions: FetchOptions,\n  timeout: number,\n  worker?: Worker,\n  useFormData?: boolean,\n) => {\n  return sendMessage(\n    {\n      auth: {\n        audience,\n        scope,\n      },\n      timeout,\n      fetchUrl,\n      fetchOptions,\n      useFormData,\n    },\n    worker,\n  )\n}\n\nexport const switchFetch = async (\n  fetchUrl: string,\n  audience: string,\n  scope: string,\n  fetchOptions: FetchOptions,\n  worker?: Worker,\n  useFormData?: boolean,\n  timeout = DEFAULT_FETCH_TIMEOUT_MS,\n): Promise<any> => {\n  if (worker) {\n    return fetchWithWorker(\n      fetchUrl,\n      audience,\n      scope,\n      fetchOptions,\n      timeout,\n      worker,\n      useFormData,\n    )\n  }\n  else {\n    return fetchWithoutWorker(fetchUrl, fetchOptions, timeout)\n  }\n}\n\nexport async function getJSON<T>(\n  url: string,\n  timeout: number,\n  audience: string,\n  scope: string,\n  options: FetchOptions,\n  worker?: Worker,\n  useFormData?: boolean,\n): Promise<T> {\n  let fetchError: null | Error = null\n  let response: any\n\n  for (let i = 0; i < DEFAULT_SILENT_TOKEN_RETRY_COUNT; i++) {\n    try {\n      response = await switchFetch(\n        url,\n        audience,\n        scope,\n        options,\n        worker,\n        useFormData,\n        timeout,\n      )\n      fetchError = null\n      break\n    }\n    catch (e) {\n      // Fetch only fails in the case of a network issue, so should be\n      // retried here. Failure status (4xx, 5xx, etc) return a resolved Promise\n      // with the failure in the body.\n      // https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API\n      fetchError = e\n    }\n  }\n\n  if (fetchError) {\n    // unfetch uses XMLHttpRequest under the hood which throws\n    // ProgressEvents on error, which don't have message properties\n    fetchError.message = fetchError.message || 'Failed to fetch'\n    throw fetchError\n  }\n\n  const {\n    json: { error, error_description, ...data },\n    ok,\n  } = response\n\n  if (!ok) {\n    const errorMessage\n      = error_description || `HTTP error. Unable to fetch ${url}`\n\n    if (error === 'mfa_required')\n      throw new MfaRequiredError(error, errorMessage, data.mfa_token)\n\n    throw new GenericError(error || 'request_error', errorMessage)\n  }\n\n  return data\n}\n","import type { WorkerRefreshTokenMessage } from './worker.types'\n\n/**\n * Sends the specified message to the web worker\n * @param message The message to send\n * @param to The worker to send the message to\n */\nexport const sendMessage = (message: WorkerRefreshTokenMessage, to: Worker) =>\n  new Promise((resolve, reject) => {\n    const messageChannel = new MessageChannel()\n\n    messageChannel.port1.onmessage = function (event) {\n      // Only for fetch errors, as these get retried\n      if (event.data.error)\n        reject(new Error(event.data.error))\n      else\n        resolve(event.data)\n    }\n\n    to.postMessage(message, [messageChannel.port2])\n  })\n","import type { TokenEndpointOptions, TokenEndpointResponse } from './global'\nimport { DEFAULT_AUTHC_CLIENT } from './constants'\nimport { getJSON } from './http'\nimport { createQueryParams } from './utils'\n\nexport async function oauthToken(\n  {\n    baseUrl,\n    timeout,\n    audience,\n    scope,\n    authcClient,\n    useFormData,\n    ...options\n  }: TokenEndpointOptions,\n  worker?: Worker,\n) {\n  const body = useFormData\n    ? createQueryParams(options)\n    : JSON.stringify(options)\n\n  return await getJSON<TokenEndpointResponse>(\n    `${baseUrl}/oauth/token`,\n    timeout,\n    audience || 'default',\n    scope,\n    {\n      method: 'POST',\n      body,\n      headers: {\n        'Content-Type': useFormData\n          ? 'application/x-www-form-urlencoded'\n          : 'application/json',\n        'Authc-Client': btoa(\n          JSON.stringify(authcClient || DEFAULT_AUTHC_CLIENT),\n        ),\n      },\n    },\n    worker,\n    useFormData,\n  )\n}\n","/**\n * @ignore\n */\nconst dedupe = (arr: string[]) => Array.from(new Set(arr))\n\n/**\n * @ignore\n */\nexport const getUniqueScopes = (...scopes: string[]) => {\n  return dedupe(scopes.join(' ').trim().split(/\\s+/)).join(' ')\n}\n","import type { IdToken, User } from '../global'\n\nexport const CACHE_KEY_PREFIX = '@@authcspajs@@'\n\nexport interface CacheKeyData {\n  audience: string\n  scope: string\n  client_id: string\n}\n\nexport class CacheKey {\n  public client_id: string\n  public scope: string\n  public audience: string\n\n  constructor(data: CacheKeyData, public prefix: string = CACHE_KEY_PREFIX) {\n    this.client_id = data.client_id\n    this.scope = data.scope\n    this.audience = data.audience\n  }\n\n  /**\n   * Converts this `CacheKey` instance into a string for use in a cache\n   * @returns A string representation of the key\n   */\n  toKey(): string {\n    return `${this.prefix}::${this.client_id}::${this.audience}::${this.scope}`\n  }\n\n  /**\n   * Converts a cache key string into a `CacheKey` instance.\n   * @param key The key to convert\n   * @returns An instance of `CacheKey`\n   */\n  static fromKey(key: string): CacheKey {\n    const [prefix, client_id, audience, scope] = key.split('::')\n\n    return new CacheKey({ client_id, scope, audience }, prefix)\n  }\n\n  /**\n   * Utility function to build a `CacheKey` instance from a cache entry\n   * @param entry The entry\n   * @returns An instance of `CacheKey`\n   */\n  static fromCacheEntry(entry: CacheEntry): CacheKey {\n    const { scope, audience, client_id } = entry\n\n    return new CacheKey({\n      scope,\n      audience,\n      client_id,\n    })\n  }\n}\n\ninterface DecodedToken {\n  claims: IdToken\n  user: User\n}\n\nexport interface CacheEntry {\n  id_token: string\n  access_token: string\n  expires_in: number\n  decodedToken: DecodedToken\n  audience: string\n  scope: string\n  client_id: string\n  refresh_token?: string\n  oauthTokenScope?: string\n}\n\nexport interface WrappedCacheEntry {\n  body: Partial<CacheEntry>\n  expiresAt: number\n}\n\nexport interface KeyManifestEntry {\n  keys: string[]\n}\n\nexport type Cacheable = WrappedCacheEntry | KeyManifestEntry\n\nexport type MaybePromise<T> = Promise<T> | T\n\nexport interface ICache {\n  set<T = Cacheable>(key: string, entry: T): MaybePromise<void>\n  get<T = Cacheable>(key: string): MaybePromise<T | null>\n  remove(key: string): MaybePromise<void>\n  allKeys?(): MaybePromise<string[]>\n}\n","import type { Cacheable, ICache } from './shared'\nimport { CACHE_KEY_PREFIX } from './shared'\n\nexport class LocalStorageCache implements ICache {\n  public set<T = Cacheable>(key: string, entry: T) {\n    localStorage.setItem(key, JSON.stringify(entry))\n  }\n\n  public get<T = Cacheable>(key: string) {\n    const json = window.localStorage.getItem(key)\n\n    if (!json)\n      return\n\n    try {\n      const payload = JSON.parse(json) as T\n      return payload\n    }\n    catch (e) {\n      /* istanbul ignore next */\n\n    }\n  }\n\n  public remove(key: string) {\n    localStorage.removeItem(key)\n  }\n\n  public allKeys() {\n    return Object.keys(window.localStorage).filter(key =>\n      key.startsWith(CACHE_KEY_PREFIX),\n    )\n  }\n}\n","import type { Cacheable, ICache } from './shared'\n\nexport class InMemoryCache {\n  public enclosedCache: ICache = (function () {\n    const cache: Record<string, unknown> = {}\n\n    return {\n      set<T = Cacheable>(key: string, entry: T) {\n        cache[key] = entry\n      },\n\n      get<T = Cacheable>(key: string) {\n        const cacheEntry = cache[key] as T\n\n        if (!cacheEntry)\n          return\n\n        return cacheEntry\n      },\n\n      remove(key: string) {\n        delete cache[key]\n      },\n\n      allKeys(): string[] {\n        return Object.keys(cache)\n      },\n    }\n  })()\n}\n","import { DEFAULT_NOW_PROVIDER } from '../constants'\nimport type { CacheKeyManifest } from './key-manifest'\n\nimport type {\n  CacheEntry,\n  ICache,\n  WrappedCacheEntry,\n} from './shared'\nimport {\n  CACHE_KEY_PREFIX,\n  CacheKey,\n} from './shared'\n\nconst DEFAULT_EXPIRY_ADJUSTMENT_SECONDS = 0\n\nexport class CacheManager {\n  constructor(\n    private cache: ICache,\n    private keyManifest?: CacheKeyManifest,\n    private nowProvider?: () => number | Promise<number>,\n  ) {\n    this.nowProvider = this.nowProvider || DEFAULT_NOW_PROVIDER\n  }\n\n  async get(\n    cacheKey: CacheKey,\n    expiryAdjustmentSeconds = DEFAULT_EXPIRY_ADJUSTMENT_SECONDS,\n  ): Promise<Partial<CacheEntry> | undefined> {\n    let wrappedEntry = await this.cache.get<WrappedCacheEntry>(\n      cacheKey.toKey(),\n    )\n\n    if (!wrappedEntry) {\n      const keys = await this.getCacheKeys()\n\n      if (!keys)\n        return\n\n      const matchedKey = this.matchExistingCacheKey(cacheKey, keys)\n\n      if (matchedKey)\n        wrappedEntry = await this.cache.get<WrappedCacheEntry>(matchedKey)\n    }\n\n    // If we still don't have an entry, exit.\n    if (!wrappedEntry)\n      return\n\n    const now = await this.nowProvider()\n    const nowSeconds = Math.floor(now / 1000)\n\n    if (wrappedEntry.expiresAt - expiryAdjustmentSeconds < nowSeconds) {\n      if (wrappedEntry.body.refresh_token) {\n        // update need this\n        Reflect.deleteProperty(wrappedEntry.body, 'access_token')\n        Reflect.deleteProperty(wrappedEntry.body, 'decodedToken')\n        Reflect.deleteProperty(wrappedEntry.body, 'expires_in')\n        wrappedEntry.body = {\n          id_token: wrappedEntry.body.id_token,\n          refresh_token: wrappedEntry.body.refresh_token,\n          ...wrappedEntry.body,\n        }\n\n        await this.cache.set(cacheKey.toKey(), wrappedEntry)\n        return wrappedEntry.body\n      }\n\n      await this.cache.remove(cacheKey.toKey())\n      await this.keyManifest?.remove(cacheKey.toKey())\n\n      return\n    }\n\n    return wrappedEntry.body\n  }\n\n  async set(entry: CacheEntry): Promise<void> {\n    const cacheKey = new CacheKey({\n      client_id: entry.client_id,\n      scope: entry.scope,\n      audience: entry.audience,\n    })\n\n    const wrappedEntry = await this.wrapCacheEntry(entry)\n\n    await this.cache.set(cacheKey.toKey(), wrappedEntry)\n    await this.keyManifest?.add(cacheKey.toKey())\n  }\n\n  async update(cacheKey: CacheKey | Partial<CacheEntry | Record<string, any>>, body?: Partial<CacheEntry | Record<string, any>>): Promise<Partial<CacheEntry> | Record<string, any>> {\n    if (!(cacheKey instanceof CacheKey)) {\n      body = body ?? cacheKey\n      cacheKey = new CacheKey(cacheKey as CacheEntry)\n    }\n    const cache = await this.get(cacheKey as CacheKey)\n    await this.set({\n      ...cache,\n      ...body,\n    } as Required<typeof cache>)\n    return this.get(cacheKey as CacheKey)\n  }\n\n  async clear(clientId?: string): Promise<void> {\n    const keys = await this.getCacheKeys()\n\n    /* istanbul ignore next */\n    if (!keys)\n      return\n\n    await keys\n      .filter(key => (clientId ? key.includes(clientId) : true))\n      .reduce(async (memo, key) => {\n        await memo\n        await this.cache.remove(key)\n      }, Promise.resolve())\n\n    await this.keyManifest?.clear()\n  }\n\n  /**\n   * Note: only call this if you're sure one of our internal (synchronous) caches are being used.\n   */\n  clearSync(clientId?: string): void {\n    const keys = this.cache.allKeys() as string[]\n\n    /* istanbul ignore next */\n    if (!keys)\n      return\n\n    keys\n      .filter(key => (clientId ? key.includes(clientId) : true))\n      .forEach((key) => {\n        this.cache.remove(key)\n      })\n  }\n\n  private async wrapCacheEntry(entry: CacheEntry): Promise<WrappedCacheEntry> {\n    const now = await this.nowProvider()\n    const expiresInTime = Math.floor(now / 1000) + entry.expires_in\n\n    // HOTFIX: To fix using the expires_in time instead of the id_token expiry time.\n    // const expirySeconds = Math.min(\n    //   expiresInTime,\n    //   entry.decodedToken.claims.exp\n    // );\n\n    return {\n      body: entry,\n      expiresAt: expiresInTime,\n    }\n  }\n\n  private async getCacheKeys(): Promise<string[]> {\n    return this.keyManifest\n      ? (await this.keyManifest.get())?.keys\n      : await this.cache.allKeys()\n  }\n\n  /**\n   * Finds the corresponding key in the cache based on the provided cache key.\n   * The keys inside the cache are in the format {prefix}::{client_id}::{audience}::{scope}.\n   * The first key in the cache that satisfies the following conditions is returned\n   *  - `prefix` is strict equal to Authc's internally configured `keyPrefix`\n   *  - `client_id` is strict equal to the `cacheKey.client_id`\n   *  - `audience` is strict equal to the `cacheKey.audience`\n   *  - `scope` contains at least all the `cacheKey.scope` values\n   *  *\n   * @param keyToMatch The provided cache key\n   * @param allKeys A list of existing cache keys\n   */\n  private matchExistingCacheKey(keyToMatch: CacheKey, allKeys: Array<string>) {\n    return allKeys.filter((key) => {\n      const cacheKey = CacheKey.fromKey(key)\n      const scopeSet = new Set(cacheKey.scope && cacheKey.scope.split(' '))\n      const scopesToMatch = keyToMatch.scope.split(' ')\n\n      const hasAllScopes\n        = cacheKey.scope\n        && scopesToMatch.reduce(\n          (acc, current) => acc && scopeSet.has(current),\n          true,\n        )\n\n      return (\n        cacheKey.prefix === CACHE_KEY_PREFIX\n        && cacheKey.client_id === keyToMatch.client_id\n        && cacheKey.audience === keyToMatch.audience\n        && hasAllScopes\n      )\n    })[0]\n  }\n}\n","import type { ClientStorage } from './storage'\n\nconst TRANSACTION_STORAGE_KEY_PREFIX = 'a0.spajs.txs'\n\ninterface Transaction {\n  nonce: string\n  scope: string\n  audience: string\n  appState?: any\n  code_verifier: string\n  redirect_uri: string\n  organizationId?: string\n  state?: string\n}\n\nexport default class TransactionManager {\n  private transaction: Transaction | undefined\n  private storageKey: string\n\n  constructor(private storage: ClientStorage, private clientId: string) {\n    this.storageKey = `${TRANSACTION_STORAGE_KEY_PREFIX}.${this.clientId}`\n    this.transaction = this.storage.get(this.storageKey)\n  }\n\n  public create(transaction: Transaction) {\n    this.transaction = transaction\n\n    this.storage.save(this.storageKey, transaction, {\n      daysUntilExpire: 1,\n    })\n  }\n\n  public get(): Transaction | undefined {\n    return this.transaction\n  }\n\n  public remove() {\n    delete this.transaction\n    this.storage.remove(this.storageKey)\n  }\n}\n","import { urlDecodeB64 } from './utils'\nimport type { IdToken, JWTVerifyOptions } from './global'\n\nconst isNumber = (n: any) => typeof n === 'number'\n\nconst idTokendecoded = [\n  'iss',\n  'aud',\n  'exp',\n  'nbf',\n  'iat',\n  'jti',\n  'azp',\n  'nonce',\n  'auth_time',\n  'at_hash',\n  'c_hash',\n  'acr',\n  'amr',\n  'sub_jwk',\n  'cnf',\n  'sip_from_tag',\n  'sip_date',\n  'sip_callid',\n  'sip_cseq_num',\n  'sip_via_branch',\n  'orig',\n  'dest',\n  'mky',\n  'events',\n  'toe',\n  'txn',\n  'rph',\n  'sid',\n  'vot',\n  'vtm',\n]\n\nexport const decode = (token: string) => {\n  const parts = token.split('.')\n  const [header, payload, signature] = parts\n\n  if (parts.length !== 3 || !header || !payload || !signature)\n    throw new Error('ID token could not be decoded')\n\n  const payloadJSON = JSON.parse(urlDecodeB64(payload))\n  const claims: IdToken = { __raw: token }\n  const user: any = {}\n  Object.keys(payloadJSON).forEach((k) => {\n    claims[k] = payloadJSON[k]\n    if (!idTokendecoded.includes(k))\n      user[k] = payloadJSON[k]\n  })\n  return {\n    encoded: { header, payload, signature },\n    header: JSON.parse(urlDecodeB64(header)),\n    claims,\n    user,\n  }\n}\n\nexport const verify = (options: JWTVerifyOptions) => {\n  if (!options.id_token)\n    throw new Error('ID token is required but missing')\n\n  const decoded = decode(options.id_token)\n\n  if (!decoded.claims.iss) {\n    throw new Error(\n      'Issuer (iss) claim must be a string present in the ID token',\n    )\n  }\n\n  if (decoded.claims.iss !== options.iss) {\n    throw new Error(\n      `Issuer (iss) claim mismatch in the ID token; expected \"${options.iss}\", found \"${decoded.claims.iss}\"`,\n    )\n  }\n\n  if (!decoded.user.sub) {\n    throw new Error(\n      'Subject (sub) claim must be a string present in the ID token',\n    )\n  }\n\n  if (decoded.header.alg !== 'RS256') {\n    throw new Error(\n      `Signature algorithm of \"${decoded.header.alg}\" is not supported. Expected the ID token to be signed with \"RS256\".`,\n    )\n  }\n\n  if (\n    !decoded.claims.aud\n    || !(\n      typeof decoded.claims.aud === 'string'\n      || Array.isArray(decoded.claims.aud)\n    )\n  ) {\n    throw new Error(\n      'Audience (aud) claim must be a string or array of strings present in the ID token',\n    )\n  }\n  if (Array.isArray(decoded.claims.aud)) {\n    if (!decoded.claims.aud.includes(options.aud)) {\n      throw new Error(\n        `Audience (aud) claim mismatch in the ID token; expected \"${\n          options.aud\n        }\" but was not one of \"${decoded.claims.aud.join(', ')}\"`,\n      )\n    }\n    if (decoded.claims.aud.length > 1) {\n      if (!decoded.claims.azp) {\n        throw new Error(\n          'Authorized Party (azp) claim must be a string present in the ID token when Audience (aud) claim has multiple values',\n        )\n      }\n      if (decoded.claims.azp !== options.aud) {\n        throw new Error(\n          `Authorized Party (azp) claim mismatch in the ID token; expected \"${options.aud}\", found \"${decoded.claims.azp}\"`,\n        )\n      }\n    }\n  }\n  else if (decoded.claims.aud !== options.aud) {\n    throw new Error(\n      `Audience (aud) claim mismatch in the ID token; expected \"${options.aud}\" but found \"${decoded.claims.aud}\"`,\n    )\n  }\n  if (options.nonce) {\n    if (!decoded.claims.nonce) {\n      throw new Error(\n        'Nonce (nonce) claim must be a string present in the ID token',\n      )\n    }\n    if (decoded.claims.nonce !== options.nonce) {\n      throw new Error(\n        `Nonce (nonce) claim mismatch in the ID token; expected \"${options.nonce}\", found \"${decoded.claims.nonce}\"`,\n      )\n    }\n  }\n\n  if (options.max_age && !isNumber(decoded.claims.auth_time)) {\n    throw new Error(\n      'Authentication Time (auth_time) claim must be a number present in the ID token when Max Age (max_age) is specified',\n    )\n  }\n\n  /* istanbul ignore next */\n  if (!isNumber(decoded.claims.exp)) {\n    throw new Error(\n      'Expiration Time (exp) claim must be a number present in the ID token',\n    )\n  }\n  if (!isNumber(decoded.claims.iat)) {\n    throw new Error(\n      'Issued At (iat) claim must be a number present in the ID token',\n    )\n  }\n\n  const leeway = options.leeway || 60\n  const now = new Date(options.now || Date.now())\n  const expDate = new Date(0)\n  const nbfDate = new Date(0)\n  const authTimeDate = new Date(0)\n\n  authTimeDate.setUTCSeconds(\n    parseInt(decoded.claims.auth_time) + options.max_age + leeway,\n  )\n\n  expDate.setUTCSeconds(decoded.claims.exp + leeway)\n  nbfDate.setUTCSeconds(decoded.claims.nbf - leeway)\n\n  // if (now > expDate) {\n  //   throw new Error(\n  //     `Expiration Time (exp) claim error in the ID token; current time (${now}) is after expiration time (${expDate})`\n  //   );\n  // }\n\n  if (isNumber(decoded.claims.nbf) && now < nbfDate) {\n    throw new Error(\n      `Not Before time (nbf) claim in the ID token indicates that this token can't be used just yet. Currrent time (${now}) is before ${nbfDate}`,\n    )\n  }\n\n  if (isNumber(decoded.claims.auth_time) && now > authTimeDate) {\n    throw new Error(\n      `Authentication Time (auth_time) claim in the ID token indicates that too much time has passed since the last end-user authentication. Currrent time (${now}) is after last auth at ${authTimeDate}`,\n    )\n  }\n\n  if (options.organizationId) {\n    if (!decoded.claims.org_id) {\n      throw new Error(\n        'Organization ID (org_id) claim must be a string present in the ID token',\n      )\n    }\n    else if (options.organizationId !== decoded.claims.org_id) {\n      throw new Error(\n        `Organization ID (org_id) claim mismatch in the ID token; expected \"${options.organizationId}\", found \"${decoded.claims.org_id}\"`,\n      )\n    }\n  }\n\n  return decoded\n}\n","import * as Cookies from 'es-cookie'\n\ninterface ClientStorageOptions {\n  daysUntilExpire: number\n  cookieDomain?: string\n}\n\n/**\n * Defines a type that handles storage to/from a storage location\n */\nexport interface ClientStorage {\n  get<T extends Object>(key: string): T | undefined\n  save(key: string, value: any, options?: ClientStorageOptions): void\n  remove(key: string): void\n}\n\n/**\n * A storage protocol for marshalling data to/from cookies\n */\nexport const CookieStorage = {\n  get<T extends Object>(key: string) {\n    const value = Cookies.get(key)\n\n    if (typeof value === 'undefined')\n      return\n\n    return <T>JSON.parse(value)\n  },\n\n  save(key: string, value: any, options?: ClientStorageOptions): void {\n    let cookieAttributes: Cookies.CookieAttributes = {}\n\n    if (window.location.protocol === 'https:') {\n      cookieAttributes = {\n        secure: true,\n        sameSite: 'none',\n      }\n    }\n\n    if (options?.daysUntilExpire)\n      cookieAttributes.expires = options.daysUntilExpire\n\n    if (options?.cookieDomain)\n      cookieAttributes.domain = options.cookieDomain\n\n    Cookies.set(key, JSON.stringify(value), cookieAttributes)\n  },\n\n  remove(key: string) {\n    Cookies.remove(key)\n  },\n} as ClientStorage\n\n/**\n * @ignore\n */\nconst LEGACY_PREFIX = '_legacy_'\n\n/**\n * Cookie storage that creates a cookie for modern and legacy browsers.\n * See: https://web.dev/samesite-cookie-recipes/#handling-incompatible-clients\n */\nexport const CookieStorageWithLegacySameSite = {\n  get<T extends Object>(key: string) {\n    const value = CookieStorage.get<T>(key)\n\n    if (value)\n      return value\n\n    return CookieStorage.get<T>(`${LEGACY_PREFIX}${key}`)\n  },\n\n  save(key: string, value: any, options?: ClientStorageOptions): void {\n    let cookieAttributes: Cookies.CookieAttributes = {}\n\n    if (window.location.protocol === 'https:')\n      cookieAttributes = { secure: true }\n\n    if (options?.daysUntilExpire)\n      cookieAttributes.expires = options.daysUntilExpire\n\n    Cookies.set(\n      `${LEGACY_PREFIX}${key}`,\n      JSON.stringify(value),\n      cookieAttributes,\n    )\n    CookieStorage.save(key, value, options)\n  },\n\n  remove(key: string) {\n    CookieStorage.remove(key)\n    CookieStorage.remove(`${LEGACY_PREFIX}${key}`)\n  },\n} as ClientStorage\n\n/**\n * A storage protocol for marshalling data to/from session storage\n */\nexport const SessionStorage = {\n  get<T extends Object>(key: string) {\n    /* istanbul ignore next */\n    if (typeof sessionStorage === 'undefined')\n      return\n\n    const value = sessionStorage.getItem(key)\n\n    if (typeof value === 'undefined')\n      return\n\n    return <T>JSON.parse(value)\n  },\n\n  save(key: string, value: any): void {\n    sessionStorage.setItem(key, JSON.stringify(value))\n  },\n\n  remove(key: string) {\n    sessionStorage.removeItem(key)\n  },\n} as ClientStorage\n","export const isIE11 = () => /Trident.*rv:11\\.0/.test(navigator.userAgent)\n","const singlePromiseMap: Record<string, Promise<any>> = {}\n\nexport const singlePromise = <T>(cb: () => Promise<T>, key: string) => {\n  let promise = singlePromiseMap[key]\n  if (!promise) {\n    promise = cb().finally(() => {\n      delete singlePromiseMap[key]\n      promise = null\n    })\n    singlePromiseMap[key] = promise\n  }\n  return promise\n}\n\nexport const retryPromise = async (\n  cb: () => Promise<boolean>,\n  maxNumberOfRetries = 3,\n) => {\n  for (let i = 0; i < maxNumberOfRetries; i++) {\n    if (await cb())\n      return true\n  }\n\n  return false\n}\n","import type {\n  ICache,\n  KeyManifestEntry,\n  MaybePromise,\n} from './shared'\nimport {\n  CACHE_KEY_PREFIX,\n} from './shared'\n\nexport class CacheKeyManifest {\n  private readonly manifestKey: string\n\n  constructor(private cache: ICache, private clientId: string) {\n    this.manifestKey = this.createManifestKeyFrom(this.clientId)\n  }\n\n  async add(key: string): Promise<void> {\n    const keys = new Set(\n      (await this.cache.get<KeyManifestEntry>(this.manifestKey))?.keys || [],\n    )\n\n    keys.add(key)\n\n    await this.cache.set<KeyManifestEntry>(this.manifestKey, {\n      keys: [...keys],\n    })\n  }\n\n  async remove(key: string): Promise<void> {\n    const entry = await this.cache.get<KeyManifestEntry>(this.manifestKey)\n\n    if (entry) {\n      const keys = new Set(entry.keys)\n      keys.delete(key)\n\n      if (keys.size > 0)\n        return await this.cache.set(this.manifestKey, { keys: [...keys] })\n\n      return await this.cache.remove(this.manifestKey)\n    }\n  }\n\n  get(): MaybePromise<KeyManifestEntry> {\n    return this.cache.get<KeyManifestEntry>(this.manifestKey)\n  }\n\n  clear(): MaybePromise<void> {\n    return this.cache.remove(this.manifestKey)\n  }\n\n  private createManifestKeyFrom(clientId: string): string {\n    return `${CACHE_KEY_PREFIX}::${clientId}`\n  }\n}\n","import type ThresholdKey from '@tkey/core'\nimport type TorusServiceProvider from '@tkey/service-provider-torus'\nimport type { ReconstructedKeyResult, ShareStore, TorusServiceProviderArgs } from '@tkey/common-types'\nimport type SeedPhraseModule from '@tkey/seed-phrase'\nimport type SecurityQuestionsModule from '@tkey/security-questions'\nimport type ShareTransferModule from '@tkey/share-transfer'\nimport type WebStorageModule from '@tkey/web-storage'\nimport type ShareSerialization from '@tkey/share-serialization'\nimport type { Parser } from 'bowser'\nimport Bowser from 'bowser'\nimport type { WalletClient } from 'viem'\nimport { createWalletClient, http } from 'viem'\nimport { privateKeyToAccount } from 'viem/accounts'\nimport { mainnet } from '@wagmi/chains'\nimport type AuthcClient from './AuthcClient'\nimport { singlePromise } from './promise-utils'\nimport { retryOnFailure } from './utils'\n\nconst TKEY_CDN_LIST = ['https://www.unpkg.com/@tkey/default@7.3.0/dist/default.umd.min.js', 'https://www.unpkg.com/@tkey/seed-phrase@7.3.0/dist/seedPhrase.umd.min.js', 'https://www.unpkg.com/@tkey/web-storage@7.3.0/dist/webStorage.umd.min.js', 'https://www.unpkg.com/@tkey/security-questions@7.3.0/dist/securityQuestions.umd.min.js']\n\ninterface ErrorResponse {\n  status: number\n  message: string\n  error: Error\n}\ninterface SuccessResponse {\n  status: 0\n  message: 'OK'\n  data: any\n}\n\ntype Response = SuccessResponse | ErrorResponse\n\nconst createSuccessResponse = (data: any): SuccessResponse => {\n  return {\n    status: 0,\n    message: 'OK',\n    data,\n  }\n}\nconst createErrorResponse = (error: any, status: number): ErrorResponse => {\n  return {\n    status,\n    message: error?.message || 'Error',\n    error,\n  }\n}\n\nexport interface TKeyOptions {\n  verifier: string\n  directParams: TorusServiceProviderArgs['customAuthArgs']\n}\n\nexport interface InputSharesOptions {\n  /**\n   * @default true\n   */\n  device?: boolean\n  password?: string\n  backupPhrase?: string\n}\n\nexport default class TKey {\n  directParams: TorusServiceProviderArgs['customAuthArgs']\n  options: TKeyOptions\n  thresholdKey: ThresholdKey\n  serviceProvider: TorusServiceProvider\n  seedPhrase: SeedPhraseModule\n  securityQuestions: SecurityQuestionsModule\n  shareTransfer: ShareTransferModule\n  shareSerialization: ShareSerialization\n  webStorage: WebStorageModule\n  isReconstruct: boolean\n  private eventTarget = new EventTarget()\n  initializePromise: Promise<any>\n  isLogin = false\n  question: 'WALLET_QUESTION_YES'\n  initialize = false\n  walletCache = new Map<string, WalletClient>()\n\n  constructor(public authc: AuthcClient, options: TKeyOptions) {\n    this.directParams = options.directParams || {\n      baseUrl: window.location.origin,\n      enableLogging: true,\n      networkUrl: 'https://rpc.ankr.com/eth_ropsten',\n      network: 'testnet' as any,\n      redirectPathName: '',\n    }\n    this.options = options\n    this.initializePromise = this.injectScript().then(async () => {\n      return this.init()\n    }).catch((err) => {\n      console.error('Load tkey cdn failed, Please check your network and refresh the page.', err)\n      throw err\n    })\n  }\n\n  async injectScript(\n    cdnList = TKEY_CDN_LIST,\n  ) {\n    return Promise.all(cdnList.map(async (url) => {\n      const loadsScript = async () => {\n        const script = document.body.appendChild(document.createElement('script'))\n        script.defer = true\n        return script\n      }\n      return retryOnFailure(() => new Promise(async (resolve, reject) => {\n        const script = await loadsScript()\n        script.onload = () => {\n          resolve(true)\n        }\n        script.onerror = (failed) => {\n          reject(failed)\n          console.error(failed, url)\n        }\n        script.src = url\n      }))\n    }))\n  }\n\n  private async init() {\n    const { SeedPhraseModule, MetamaskSeedPhraseFormat } = (window as any).SeedPhrase\n    const { default: SecurityQuestionModule } = (window as any).SecurityQuestions\n    const { default: WebStorageModule } = (window as any).WebStorage\n    const seedPhraseModule = new SeedPhraseModule([new MetamaskSeedPhraseFormat(this.directParams.networkUrl)])\n    const webStorageModule = new WebStorageModule()\n    const securityQuestionsModule = new SecurityQuestionModule()\n\n    this.thresholdKey = new (window as any).Default.default({\n      customAuthArgs: this.directParams,\n      modules: { seedPhrase: seedPhraseModule, securityQuestions: securityQuestionsModule, webStorage: webStorageModule },\n    })\n\n    this.serviceProvider = this.thresholdKey.serviceProvider as any\n    this.seedPhrase = this.thresholdKey.modules.seedPhrase as any\n    this.securityQuestions = this.thresholdKey.modules.securityQuestions as any\n    this.shareTransfer = this.thresholdKey.modules.shareTransfer as any\n    this.webStorage = this.thresholdKey.modules.webStorage as any\n    this.shareSerialization = this.thresholdKey.modules.shareSerialization as any\n\n    await this.serviceProvider.init({\n      skipInit: true,\n    })\n  }\n\n  private dispatchEvent(name: string, data?: any) {\n    const event = new CustomEvent(`tkey:${name}`, {\n      detail: data,\n    })\n    this.eventTarget.dispatchEvent(event)\n  }\n\n  listen(name: 'reconstruct', callback?: (data: ReconstructedKeyResult) => void, options?: AddEventListenerOptions): any\n  listen(name: string, callback?: (...args: any) => void, options?: AddEventListenerOptions) {\n    const eventName = `tkey:${name}`\n    const eventCallback = (event: any) => {\n      callback?.(event)\n    }\n\n    this.eventTarget.addEventListener(eventName, eventCallback, options)\n    return () => {\n      this.eventTarget.removeEventListener(eventName, eventCallback)\n    }\n  }\n\n  private async getUserShareKey() {\n    const openid = (await this.authc.getUser() as any)?.openid\n    if (!openid)\n      return null\n\n    return `${openid}_` + 'AUTHC_TKEY_USER_SHARE'\n  }\n\n  private async getUserShare() {\n    const share = sessionStorage.getItem(await this.getUserShareKey())\n    return share ? JSON.parse(share) : null\n  }\n\n  private async setUserShare() {\n    // console.log(this.securityQuestions.getSecurityQuestions())\n    // this.securityQuestions.saveAnswers = !!this.securityQuestions.getSecurityQuestions()\n    const userShare = await this.thresholdKey.outputShareStore('1') as ShareStore\n    sessionStorage.setItem(await this.getUserShareKey(), JSON.stringify(userShare))\n  }\n\n  async setSaveAnswer() {\n    const list = await this.getShareDescription()\n    if (list.some(item => item.module === 'securityQuestions'))\n      this.securityQuestions.saveAnswers = true\n  }\n\n  async getShareDescription(): Promise<{\n    shareIndex: string\n    uaInfo: Parser.ParsedResult\n    module: string\n    userAgent: string\n    description: string\n  }[]> {\n    await this.initializePromise\n    const keyDetails = await this.thresholdKey.getKeyDetails()\n    const descriptions = keyDetails.shareDescriptions || {}\n    let deviceShareIndex: any\n\n    try {\n      const deviceShare = await this.webStorage.getDeviceShare()\n      deviceShareIndex = deviceShare.share.shareIndex.toString('hex')\n    }\n    catch { }\n\n    return Object.entries(descriptions).map(([shareIndex, description]) => {\n      const info = JSON.parse(description[0])\n      return {\n        shareIndex,\n        description,\n        current: deviceShareIndex === shareIndex,\n        uaInfo: info.userAgent ? Bowser.parse(info.userAgent) : null,\n        ...info,\n      }\n    })\n  }\n\n  async generateDeviceShare() {\n    if (!this.isLogin)\n      return\n\n    try {\n      await this.webStorage.getDeviceShare()\n    }\n    catch (err) {\n      if (err.message.includes('No share exists in localstorage')) {\n        let shareStore: ShareStore\n\n        const descriptionList = await this.getShareDescription()\n        const userAgent = navigator.userAgent\n        const description = descriptionList.find((item) => {\n          if (item.module === 'webStorage' && item.userAgent === userAgent)\n            return item\n          return false\n        })\n\n        if (description) {\n          shareStore = this.thresholdKey.outputShareStore(description.shareIndex)\n        }\n        else {\n          const { newShareStores, newShareIndex } = await this.thresholdKey.generateNewShare()\n          shareStore = newShareStores[newShareIndex.toString('hex')]\n        }\n\n        await this.thresholdKey.storeDeviceShare(shareStore)\n      }\n    }\n  }\n\n  async getSeedPhrases() {\n    return singlePromise(async () => {\n      if (!this.isLogin || !this.isReconstruct)\n        return\n\n      let seedPhrase = await this.seedPhrase.getSeedPhrasesWithAccounts()\n      if (!seedPhrase.length) {\n        await this.seedPhrase.setSeedPhrase('HD Key Tree')\n        seedPhrase = await this.seedPhrase.getSeedPhrasesWithAccounts()\n      }\n      return seedPhrase.map((item) => {\n        return {\n          ...item,\n          keys: item.keys.map(k => `0x${k.toString(16)}`),\n        }\n      })\n    }, 'getSeedPhrases')\n  }\n\n  async getAccounts(): Promise<Array<{\n    address: string\n    privateKey: string\n    wallet: WalletClient\n  }>> {\n    const accounts = await this.seedPhrase.getAccounts()\n    return accounts.map((privateKey) => {\n      const pk = `0x${privateKey.toString(16)}`\n      const wallet = this.walletCache.get(pk) || this.walletCache.set(pk,\n        createWalletClient({\n          account: privateKeyToAccount(pk as '0x'),\n          transport: http(mainnet.rpcUrls.public.http[0]),\n        }),\n      ).get(pk)\n\n      return {\n        wallet,\n        address: (wallet as any).account.address,\n        privateKey: pk,\n      }\n    })\n  }\n\n  async reconstruct(needInitialize = true, options?: InputSharesOptions) {\n    await this.initializePromise\n\n    if (needInitialize && !this.initialize) {\n      await this.thresholdKey.initialize({\n      }).catch((err) => {\n        this.clean()\n        throw err\n      })\n    }\n\n    if (this.isReconstruct) {\n      if (!this.securityQuestions.saveAnswers)\n        await this.setSaveAnswer()\n\n      return createSuccessResponse(this.thresholdKey.getKeyDetails())\n    }\n\n    const requiredSharesGreaterThan0 = () => this.thresholdKey.getKeyDetails().requiredShares > 0\n    if (options && requiredSharesGreaterThan0()) {\n      const tasks = await this.inputShares(options)\n      if (requiredSharesGreaterThan0()) {\n        const rejectedTask = tasks.find(task => task.status === 'rejected') as PromiseRejectedResult\n        throw createErrorResponse(rejectedTask.reason, 10201)\n      }\n    }\n\n    return this.thresholdKey.reconstructKey().then(async (res) => {\n      this.isReconstruct = true\n      await this.generateDeviceShare()\n      await this.setSaveAnswer()\n      this.dispatchEvent('reconstruct', res)\n      return createSuccessResponse(options)\n    }).catch((err) => {\n      if (err.message.includes('Custom key has not been generated yet'))\n        return createErrorResponse(err, 10101)\n\n      if (this.isLogin)\n        return createErrorResponse(err, 10201)\n\n      return createErrorResponse(err, 10001)\n    })\n  }\n\n  async triggerLogin(): Promise<Response> {\n    if (this.isLogin && this.isReconstruct) {\n      return Promise.resolve(\n        createSuccessResponse({}),\n      )\n    }\n    return this.initializePromise.then(async () => {\n      const tokens = await this.authc.getTokenSilently({ detailedResponse: true, ignoreCache: true })\n      return this.serviceProvider.triggerLogin({\n        typeOfLogin: 'jwt',\n        verifier: this.options.verifier,\n        clientId: 'DO_NOT_NEED',\n        jwtParams: {\n          verifierIdField: 'openid',\n          domain: `https://${this.authc.options.domain}`,\n          id_token: tokens.id_token,\n        },\n      }).then(async (res: any) => {\n        this.isLogin = true\n\n        try {\n          await this.thresholdKey.initialize({ neverInitializeNewKey: true })\n          this.initialize = true\n        }\n        catch {\n          return createErrorResponse(res, 10101)\n        }\n        try {\n          return await this.reconstruct(false, { device: true })\n        }\n        catch (err) {\n          if (err?.status && err?.message)\n            return err\n          return createErrorResponse(err, 10201)\n        }\n      })\n    })\n  }\n\n  async getBackupPhraseDescription() {\n    const list = await this.getShareDescription()\n    return list.find(item => item.module === 'comsand:email')\n  }\n\n  async generateBackupPhrase() {\n    if (!this.isLogin)\n      return\n\n    await this.deleteBackupPhrase()\n    const { newShareIndex } = await this.thresholdKey.generateNewShare()\n    await this.thresholdKey.addShareDescription(\n      newShareIndex.toString('hex'),\n      JSON.stringify({ module: 'comsand:email', dateAdded: Date.now() }),\n    )\n    return this.thresholdKey.outputShare(newShareIndex, 'mnemonic') as Promise<string>\n  }\n\n  async deleteBackupPhrase() {\n    const shareDescription = await this.getBackupPhraseDescription()\n    if (shareDescription)\n      await this.thresholdKey.deleteShare(shareDescription.shareIndex)\n  }\n\n  async inputShares(options: InputSharesOptions = {}) {\n    const tasks: Promise<any>[] = []\n    if (options.device !== false)\n      tasks.push(this.webStorage.inputShareFromWebStorage())\n\n    if (options.backupPhrase)\n      tasks.push(this.thresholdKey.inputShare(options.backupPhrase, 'mnemonic'))\n\n    if (options.password)\n      tasks.push(this.securityQuestions.inputShareFromSecurityQuestions(options.password))\n\n    const userShare = await this.getUserShare()\n    if (userShare)\n      this.thresholdKey.inputShareStore(userShare)\n\n    return Promise.allSettled(tasks)\n  }\n\n  getShareIndex = (shareStore: ShareStore) => {\n    return shareStore.share.shareIndex.toString('hex')\n  }\n\n  async configureSecurityQuestions(password: string) {\n    if (!this.securityQuestions.saveAnswers) {\n      try {\n        const res = await this.securityQuestions.generateNewShareWithSecurityQuestions(password, this.question)\n        this.securityQuestions.saveAnswers = true\n        return res\n      }\n      catch (err) {\n        console.log('generate error, may be have security questions, fallback to changeSecurityQuestionAndAnswer', err)\n      }\n    }\n    return this.securityQuestions.changeSecurityQuestionAndAnswer(password, this.question)\n  }\n\n  async requestNewShare() {\n    return singlePromise(async () => {\n      return new Promise(async (resolve, reject) => {\n        const encPubKey = await this.shareTransfer.requestNewShare(\n          navigator.userAgent,\n          this.thresholdKey.getCurrentShareIndexes(),\n          async (err, shareStore) => {\n            if (err)\n              return reject(err)\n\n            try {\n              await this.thresholdKey.inputShareStore(shareStore)\n              await this.reconstruct(false)\n              await this.shareTransfer.deleteShareTransferStore(encPubKey)\n              resolve(shareStore)\n            }\n            catch (err) {\n              reject(err)\n            }\n          },\n        )\n        return encPubKey\n      })\n    }, 'requestNewShare')\n  }\n\n  async clean() {\n    sessionStorage.removeItem(await this.getUserShareKey())\n    this.isReconstruct = false\n  }\n}\n","import axios from 'axios'\nimport type AuthcClient from './AuthcClient'\n\nexport class Service {\n  request: ReturnType<typeof axios.create>\n\n  constructor(private authc: AuthcClient) {\n    this.request = axios.create({\n      timeout: 5000,\n    })\n\n    this.request.defaults.baseURL = authc.domainUrl\n    this.request.interceptors.request.use(async (req) => {\n      let token = ''\n      try {\n        token = await this.authc.getTokenSilently()\n      }\n      catch (err) {\n      }\n      if (token) {\n        req.headers = {\n          ...req.headers,\n          Authorization: `Bearer ${token}`,\n        }\n      }\n      return req\n    })\n\n    this.request.interceptors.response.use((response) => {\n      return Promise.resolve(response.data)\n    })\n  }\n\n  getUserInfo() {\n    return this.request({\n      url: '/oauth/userinfo',\n    })\n  }\n}\n","import type { ICache } from './cache'\nimport type { TKeyOptions } from './tKeyCDN'\n\n/**\n * @ignore\n */\nexport interface BaseLoginOptions {\n  /**\n   * - `'page'`: displays the UI with a full page view\n   * - `'popup'`: displays the UI with a popup window\n   * - `'touch'`: displays the UI in a way that leverages a touch interface\n   * - `'wap'`: displays the UI with a \"feature phone\" type interface\n   */\n  display?: 'page' | 'popup' | 'touch' | 'wap'\n\n  /**\n   * - `'none'`: do not prompt user for login or consent on reauthentication\n   * - `'login'`: prompt user for reauthentication\n   * - `'consent'`: prompt user for consent before processing request\n   * - `'select_account'`: prompt user to select an account\n   */\n  prompt?: 'none' | 'login' | 'consent' | 'select_account'\n\n  /**\n   * Maximum allowable elasped time (in seconds) since authentication.\n   * If the last time the user authenticated is greater than this value,\n   * the user must be reauthenticated.\n   */\n  max_age?: string | number\n\n  /**\n   * The space-separated list of language tags, ordered by preference.\n   * For example: `'fr-CA fr en'`.\n   */\n  ui_locales?: string\n\n  /**\n   * Previously issued ID Token.\n   */\n  id_token_hint?: string\n\n  /**\n   * Provides a hint to Authc as to what flow should be displayed.\n   * The default behavior is to show a login page but you can override\n   * this by passing 'signup' to show the signup page instead.\n   *\n   * This only affects the New Universal Login Experience.\n   */\n  screen_hint?: string\n\n  /**\n   * The user's email address or other identifier. When your app knows\n   * which user is trying to authenticate, you can provide this parameter\n   * to pre-fill the email box or select the right session for sign-in.\n   *\n   * This currently only affects the classic Lock experience.\n   */\n  login_hint?: string\n\n  acr_values?: string\n\n  /**\n   * The default scope to be used on authentication requests.\n   * The defaultScope defined in the AuthcClient is included\n   * along with this scope\n   */\n  scope?: string\n\n  /**\n   * The default audience to be used for requesting API access.\n   */\n  audience?: string\n\n  /**\n   * The name of the connection configured for your application.\n   * If null, it will redirect to the Authc Login Page and show\n   * the Login Widget.\n   */\n  connection?: string\n\n  /**\n   * The Id of an organization to log in to.\n   *\n   * This will specify an `organization` parameter in your user's login request and will add a step to validate\n   * the `org_id` claim in your user's ID Token.\n   */\n  organization?: string\n\n  /**\n   * The Id of an invitation to accept. This is available from the user invitation URL that is given when participating in a user invitation flow.\n   */\n  invitation?: string\n\n  /**\n   * authorize endpoint\n   * @default /oauth/authorize\n   */\n  authorization_endpoint?: string\n\n  /**\n   * If you need to send custom parameters to the Authorization Server,\n   * make sure to use the original parameter name.\n   */\n  [key: string]: any\n}\n\ninterface AdvancedOptions {\n  /**\n   * The default scope to be included with all requests.\n   * If not provided, 'openid profile email' is used. This can be set to `null` in order to effectively remove the default scopes.\n   *\n   * Note: The `openid` scope is **always applied** regardless of this setting.\n   */\n  defaultScope?: string\n}\n\nexport interface AuthcClientOptions extends BaseLoginOptions {\n  /**\n   * Your Authc account domain such as `'example.authc.io'`,\n   * `'example.eu.authc.io'` or , `'example.mycompany.com'`\n   * (when using [custom domains](https://authc.io/docs/custom-domains))\n   */\n  domain: string\n  /**\n   * The issuer to be used for validation of JWTs, optionally defaults to the domain above\n   */\n  issuer?: string\n  /**\n   * The Client ID found on your Application settings page\n   */\n  client_id: string\n  /**\n   * The default URL where Authc will redirect your browser to with\n   * the authentication result. It must be whitelisted in\n   * the \"Allowed Callback URLs\" field in your Authc Application's\n   * settings. If not provided here, it should be provided in the other\n   * methods that provide authentication.\n   */\n  redirect_uri?: string\n  /**\n   * The value in seconds used to account for clock skew in JWT expirations.\n   * Typically, this value is no more than a minute or two at maximum.\n   * Defaults to 60s.\n   */\n  leeway?: number\n\n  /**\n   * The location to use when storing cache data. Valid values are `memory` or `localstorage`.\n   * The default setting is `memory`.\n   *\n   * Read more about [changing storage options in the Authc docs](https://authc.io/docs/libraries/authc-single-page-app-sdk#change-storage-options)\n   */\n  cacheLocation?: CacheLocation\n\n  /**\n   * Specify a custom cache implementation to use for token storage and retrieval. This setting takes precedence over `cacheLocation` if they are both specified.\n   */\n  cache?: ICache\n\n  /**\n   * If true, refresh tokens are used to fetch new access tokens from the Authc server. If false, the legacy technique of using a hidden iframe and the `authorization_code` grant with `prompt=none` is used.\n   * The default setting is `false`.\n   *\n   * **Note**: Use of refresh tokens must be enabled by an administrator on your Authc client application.\n   */\n  useRefreshTokens?: boolean\n\n  /**\n   * A maximum number of seconds to wait before declaring background calls to /authorize as failed for timeout\n   * Defaults to 60s.\n   */\n  authorizeTimeoutInSeconds?: number\n\n  /**\n   * Specify the timeout for HTTP calls using `fetch`. The default is 10 seconds.\n   */\n  httpTimeoutInSeconds?: number\n\n  /**\n   * Internal property to send information about the client to the authorization server.\n   * @internal\n   */\n  authcClient?: { name: string; version: string }\n\n  /**\n   * Sets an additional cookie with no SameSite attribute to support legacy browsers\n   * that are not compatible with the latest SameSite changes.\n   * This will log a warning on modern browsers, you can disable the warning by setting\n   * this to false but be aware that some older useragents will not work,\n   * See https://www.chromium.org/updates/same-site/incompatible-clients\n   * Defaults to true\n   */\n  legacySameSiteCookie?: boolean\n\n  /**\n   * If `true`, the SDK will use a cookie when storing information about the auth transaction while\n   * the user is going through the authentication flow on the authorization server.\n   *\n   * The default is `false`, in which case the SDK will use session storage.\n   *\n   * @notes\n   *\n   * You might want to enable this if you rely on your users being able to authenticate using flows that\n   * may end up spanning across multiple tabs (e.g. magic links) or you cannot otherwise rely on session storage being available.\n   */\n  useCookiesForTransactions?: boolean\n\n  /**\n   * Changes to recommended defaults, like defaultScope\n   */\n  advancedOptions?: AdvancedOptions\n\n  /**\n   * Number of days until the cookie `authc.is.authenticated` will expire\n   * Defaults to 1.\n   */\n  sessionCheckExpiryDays?: number\n\n  /**\n   * The domain the cookie is accessible from. If not set, the cookie is scoped to\n   * the current domain, including the subdomain.\n   *\n   * Note: setting this incorrectly may cause silent authentication to stop working\n   * on page load.\n   *\n   *\n   * To keep a user logged in across multiple subdomains set this to your\n   * top-level domain and prefixed with a `.` (eg: `.example.com`).\n   */\n  cookieDomain?: string\n\n  /**\n   * When true, data to the token endpoint is transmitted as x-www-form-urlencoded data instead of JSON. The default is false, but will default to true in a\n   * future major version.\n   *\n   * **Note:** Setting this to `true` may affect you if you use Authc Rules and are sending custom, non-primative data. If you enable this, please verify that your Authc Rules\n   * continue to work as intended.\n   */\n  useFormData?: boolean\n\n  /**\n   * Modify the value used as the current time during the token validation.\n   *\n   * **Note**: Using this improperly can potentially compromise the token validation.\n   */\n  nowProvider?: () => Promise<number> | number\n  tkOptions?: TKeyOptions\n}\n\n/**\n * The possible locations where tokens can be stored\n */\nexport type CacheLocation = 'memory' | 'localstorage'\n\n/**\n * @ignore\n */\nexport interface AuthorizeOptions extends BaseLoginOptions {\n  response_type: string\n  response_mode: string\n  redirect_uri: string\n  nonce: string\n  state: string\n  scope: string\n  code_challenge: string\n  code_challenge_method: string\n}\n\nexport interface RedirectLoginOptions<TAppState = any>\n  extends BaseLoginOptions {\n  /**\n   * The URL where Authc will redirect your browser to with\n   * the authentication result. It must be whitelisted in\n   * the \"Allowed Callback URLs\" field in your Authc Application's\n   * settings.\n   */\n  redirect_uri?: string\n  /**\n   * Used to store state before doing the redirect\n   */\n  appState?: TAppState\n  /**\n   * Used to add to the URL fragment before redirecting\n   */\n  fragment?: string\n  /**\n   * Used to select the window.location method used to redirect\n   */\n  redirectMethod?: 'replace' | 'assign'\n  /**\n   * display loading\n   */\n  loading?: boolean\n}\n\nexport interface RedirectLoginResult<TAppState = any> {\n  /**\n   * State stored when the redirect request was made\n   */\n  appState?: TAppState\n}\n\nexport interface PopupLoginOptions extends BaseLoginOptions { }\n\nexport interface PopupConfigOptions {\n  /**\n   * The number of seconds to wait for a popup response before\n   * throwing a timeout error. Defaults to 60s\n   */\n  timeoutInSeconds?: number\n\n  /**\n   * Accepts an already-created popup window to use. If not specified, the SDK\n   * will create its own. This may be useful for platforms like iOS that have\n   * security restrictions around when popups can be invoked (e.g. from a user click event)\n   */\n  popup?: any\n}\n\nexport interface GetUserOptions {\n  /**\n   * The scope that was used in the authentication request\n   */\n  scope?: string\n  /**\n   * The audience that was used in the authentication request\n   */\n  audience?: string\n}\n\nexport interface GetIdTokenClaimsOptions {\n  /**\n   * The scope that was used in the authentication request\n   */\n  scope?: string\n  /**\n   * The audience that was used in the authentication request\n   */\n  audience?: string\n}\n\n/*\n * TODO: Remove this on the next major\n */\nexport type getIdTokenClaimsOptions = GetIdTokenClaimsOptions\n\nexport interface GetTokenSilentlyOptions {\n  /**\n   * When `true`, ignores the cache and always sends a\n   * request to Authc.\n   */\n  ignoreCache?: boolean\n\n  /**\n   * There's no actual redirect when getting a token silently,\n   * but, according to the spec, a `redirect_uri` param is required.\n   * Authc uses this parameter to validate that the current `origin`\n   * matches the `redirect_uri` `origin` when sending the response.\n   * It must be whitelisted in the \"Allowed Web Origins\" in your\n   * Authc Application's settings.\n   */\n  redirect_uri?: string\n\n  /**\n   * The scope that was used in the authentication request\n   */\n  scope?: string\n\n  /**\n   * The audience that was used in the authentication request\n   */\n  audience?: string\n\n  /** A maximum number of seconds to wait before declaring the background /authorize call as failed for timeout\n   * Defaults to 60s.\n   */\n  timeoutInSeconds?: number\n\n  /**\n   * If true, the full response from the /oauth/token endpoint (or the cache, if the cache was used) is returned\n   * (minus `refresh_token` if one was issued). Otherwise, just the access token is returned.\n   *\n   * The default is `false`.\n   */\n  detailedResponse?: boolean\n\n  /**\n   * If you need to send custom parameters to the Authorization Server,\n   * make sure to use the original parameter name.\n   */\n  [key: string]: any\n}\n\nexport interface GetTokenWithPopupOptions extends PopupLoginOptions {\n  /**\n   * When `true`, ignores the cache and always sends a\n   * request to Authc.\n   */\n  ignoreCache?: boolean\n}\n\nexport interface LogoutUrlOptions {\n  /**\n   * The URL where Authc will redirect your browser to after the logout.\n   *\n   * **Note**: If the `client_id` parameter is included, the\n   * `returnTo` URL that is provided must be listed in the\n   * Application's \"Allowed Logout URLs\" in the Authc dashboard.\n   * However, if the `client_id` parameter is not included, the\n   * `returnTo` URL must be listed in the \"Allowed Logout URLs\" at\n   * the account level in the Authc dashboard.\n   *\n   * [Read more about how redirecting after logout works](https://authc.io/docs/logout/guides/redirect-users-after-logout)\n   */\n  returnTo?: string\n\n  /**\n   * The `client_id` of your application.\n   *\n   * If this property is not set, then the `client_id` that was used during initialization of the SDK is sent to the logout endpoint.\n   *\n   * If this property is set to `null`, then no client ID value is sent to the logout endpoint.\n   *\n   * [Read more about how redirecting after logout works](https://authc.io/docs/logout/guides/redirect-users-after-logout)\n   */\n  client_id?: string\n\n  /**\n   * When supported by the upstream identity provider,\n   * forces the user to logout of their identity provider\n   * and from Authc.\n   * [Read more about how federated logout works at Authc](https://authc.io/docs/logout/guides/logout-idps)\n   */\n  federated?: boolean\n  /**\n   * logout redirect url\n   */\n  post_logout_redirect_uri?: string\n}\n\nexport interface LogoutOptions {\n  /**\n   * The URL where Authc will redirect your browser to after the logout.\n   *\n   * **Note**: If the `client_id` parameter is included, the\n   * `returnTo` URL that is provided must be listed in the\n   * Application's \"Allowed Logout URLs\" in the Authc dashboard.\n   * However, if the `client_id` parameter is not included, the\n   * `returnTo` URL must be listed in the \"Allowed Logout URLs\" at\n   * the account level in the Authc dashboard.\n   *\n   * [Read more about how redirecting after logout works](https://authc.io/docs/logout/guides/redirect-users-after-logout)\n   */\n  returnTo?: string\n  post_logout_redirect_uri?: string\n\n  /**\n   * The `client_id` of your application.\n   *\n   * If this property is not set, then the `client_id` that was used during initialization of the SDK is sent to the logout endpoint.\n   *\n   * If this property is set to `null`, then no client ID value is sent to the logout endpoint.\n   *\n   * [Read more about how redirecting after logout works](https://authc.io/docs/logout/guides/redirect-users-after-logout)\n   */\n  client_id?: string\n\n  /**\n   * When supported by the upstream identity provider,\n   * forces the user to logout of their identity provider\n   * and from Authc.\n   * This option cannot be specified along with the `localOnly` option.\n   * [Read more about how federated logout works at Authc](https://authc.io/docs/logout/guides/logout-idps)\n   */\n  federated?: boolean\n\n  /**\n   * When `true`, this skips the request to the logout endpoint on the authorization server,\n   * effectively performing a \"local\" logout of the application. No redirect should take place,\n   * you should update local logged in state.\n   * This option cannot be specified along with the `federated` option.\n   */\n  localOnly?: boolean\n  /**\n   * silent logout\n   * do not reload page\n   */\n  silent?: boolean\n}\n\n/**\n * @ignore\n */\nexport interface AuthenticationResult {\n  state: string\n  code?: string\n  error?: string\n  error_description?: string\n}\n\n/**\n * @ignore\n */\nexport interface TokenEndpointOptions {\n  baseUrl: string\n  client_id: string\n  grant_type: string\n  timeout?: number\n  authcClient: any\n  useFormData?: boolean\n  [key: string]: any\n}\n\n/**\n * @ignore\n */\nexport interface TokenEndpointResponse {\n  id_token: string\n  access_token: string\n  refresh_token?: string\n  expires_in: number\n  scope?: string\n}\n\n/**\n * @ignore\n */\nexport interface OAuthTokenOptions extends TokenEndpointOptions {\n  code_verifier: string\n  code: string\n  redirect_uri: string\n  audience: string\n  scope: string\n}\n\n/**\n * @ignore\n */\nexport interface RefreshTokenOptions extends TokenEndpointOptions {\n  refresh_token: string\n}\n\n/**\n * @ignore\n */\nexport interface JWTVerifyOptions {\n  iss: string\n  aud: string\n  id_token: string\n  nonce?: string\n  leeway?: number\n  max_age?: number\n  organizationId?: string\n  now?: number\n}\n\n/**\n * @ignore\n */\nexport interface IdToken {\n  __raw: string\n  name?: string\n  given_name?: string\n  family_name?: string\n  middle_name?: string\n  nickname?: string\n  preferred_username?: string\n  profile?: string\n  picture?: string\n  website?: string\n  email?: string\n  email_verified?: boolean\n  gender?: string\n  birthdate?: string\n  zoneinfo?: string\n  locale?: string\n  phone_number?: string\n  phone_number_verified?: boolean\n  address?: string\n  updated_at?: string\n  iss?: string\n  aud?: string\n  exp?: number\n  nbf?: number\n  iat?: number\n  jti?: string\n  azp?: string\n  nonce?: string\n  auth_time?: string\n  at_hash?: string\n  c_hash?: string\n  acr?: string\n  amr?: string\n  sub_jwk?: string\n  cnf?: string\n  sid?: string\n  org_id?: string\n  [key: string]: any\n}\n\nexport class User {\n  name?: string\n  given_name?: string\n  family_name?: string\n  middle_name?: string\n  nickname?: string\n  preferred_username?: string\n  profile?: string\n  picture?: string\n  website?: string\n  email?: string\n  email_verified?: boolean\n  gender?: string\n  birthdate?: string\n  zoneinfo?: string\n  locale?: string\n  phone_number?: string\n  phone_number_verified?: boolean\n  address?: string\n  updated_at?: string\n  sub?: string;\n  [key: string]: any;\n}\n\n/**\n * @ignore\n */\nexport interface FetchOptions {\n  method?: string\n  headers?: Record<string, string>\n  credentials?: 'include' | 'omit'\n  body?: string\n  signal?: AbortSignal\n}\n\nexport type GetTokenSilentlyVerboseResponse = Omit<\n  TokenEndpointResponse,\n  'refresh_token'\n>\n","import AuthcClient from './AuthcClient'\nimport type { AuthcClientOptions } from './global'\nexport { default as TKey } from './tKeyCDN'\nexport * from './tKeyCDN'\nexport * from './global'\n\n/**\n * Asynchronously creates the AuthcClient instance and calls `checkSession`.\n *\n * **Note:** There are caveats to using this in a private browser tab, which may not silently authenticae\n * a user on page refresh. Please see [the checkSession docs](https://authc.github.io/authc-spa-js/classes/authcclient.html#checksession) for more info.\n *\n * @param options The client options\n * @returns An instance of AuthcClient\n */\nexport default async function createAuthcClient(options: AuthcClientOptions) {\n  const authc = new AuthcClient(options)\n  try {\n    await authc.checkSession()\n  }\n  catch (error) {\n    await authc.logout({\n      localOnly: true,\n    })\n  }\n  return authc\n}\n\nexport { AuthcClient }\n\nexport {\n  GenericError,\n  AuthenticationError,\n  TimeoutError,\n  PopupTimeoutError,\n  PopupCancelledError,\n  MfaRequiredError,\n} from './errors'\n\nexport type { LocalStorageCache, InMemoryCache } from './cache'\nexport type { ICache, Cacheable } from './cache'\n"],"mappings":"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","names":["ProcessLocking","resolve","SuperTokensLock","_a","e","t","r","n","i","s","a","u","d","Bowser","err","Lock","location","detailedResponse"]}