{"version":3,"sources":["webpack:///./node_modules/@nuxtjs/auth-next/dist/runtime.mjs","webpack:///./node_modules/@nuxtjs/auth-next/node_modules/defu/dist/defu.cjs"],"names":["isUnset","o","isSet","isSameURL","ctx","a","b","normalizePath","isRelativeURL","u","length","RegExp","join","test","parseQuery","queryString","query","pairs","split","i","pair","decodeURIComponent","encodeQuery","queryObject","Object","entries","filter","_key","value","map","key","encodeURIComponent","routeOption","route","matched","some","m","values","components","component","options","path","result","base","replace","charAt","slice","encodeValue","val","JSON","stringify","decodeValue","parse","_","getProp","holder","propName","propParts","Array","isArray","shift","addTokenPrefix","token","tokenType","startsWith","urlJoin","args","characters","randomString","charactersLength","Math","floor","random","Storage","constructor","this","_initState","setUniversal","removeUniversal","setCookie","setLocalStorage","setState","getUniversal","getCookie","getLocalStorage","getState","syncUniversal","defaultValue","removeState","removeLocalStorage","removeCookie","set","_useVuex","vuex","store","storeModule","namespaced","state","initialState","mutations","SET","payload","registerModule","namespace","preserveState","Boolean","console","warn","_state","commit","watchState","fn","watch","isLocalStorageEnabled","getPrefix","localStorage","setItem","e","ignoreExceptions","getItem","removeItem","getCookies","isCookiesEnabled","cookieStr","document","cookie","prefix","_options","assign","_value","maxAge","expires","Date","now","serializedCookie","serialize","cookies","Error","window","navigator","cookieEnabled","Auth","strategies","_errorListeners","_redirectListeners","storage","user","loggedIn","$storage","$state","_stateWarnShown","strategy","getStrategy","throwException","busy","async","resetOnError","onError","reset","defaultStrategy","Promise","resolve","mounted","error","callOnError","watchLoggedIn","redirect","_getStateWarnShown","registerStrategy","name","setStrategy","catch","method","reject","fetchUserOnce","loginWith","then","login","wrapLogin","fetchUser","logout","setUserToken","refreshToken","setUser","refreshTokens","refreshController","handleRefresh","check","valid","request","endpoint","defaults","_endpoint","baseURL","req","app","$axios","requestWith","get","tokenName","headers","promise","response","listener","push","noRouter","from","fullPathRedirect","fullPath","to","rewriteRedirects","callOnRedirect","includes","location","onRedirect","hasScope","scope","userScopes","scopeKey","authMiddleware","Components","matches","concat","index","keys","getMatchedComponents","callback","$auth","pageIsInGuestMode","insidePage","page","tokenExpired","refreshTokenExpired","isRefreshable","ExpiredAuthSessionError","super","RefreshController","scheme","_refreshPromise","_doRefresh","TokenStatusEnum","TokenStatusEnum2","TokenStatus","tokenExpiresAt","_status","_calculate","unknown","UNKNOWN","VALID","expired","EXPIRED","RefreshToken","tokenValue","type","_setToken","_updateExpiration","sync","_syncToken","_syncExpiration","_setExpiration","status","_getExpiration","expirationPrefix","expiration","refreshTokenExpiration","_tokenIssuedAtMillis","_tokenTTLMillis","Number","_tokenExpiresAtMillis","exp","RequestHandler","axios","interceptor","setHeader","global","clearHeader","initializeRequestInterceptor","refreshEndpoint","interceptors","use","config","_needToken","url","isValid","_requestHasAuthorizationHeader","_getUpdatedRequestConfig","eject","endpoints","common","Token","requestHandler","tokenExpiration","BaseScheme","reduce","p","c","DEFAULTS$2","accessType","redirectUri","logoutRedirectUri","clientId","audience","grantType","responseMode","acrValues","autoLogout","authorization","userInfo","property","responseType","codeChallengeMethod","Oauth2Scheme","redirectURI","logoutRedirectURI","checkStatus","tokenStatus","_handleCallback","_opts","opts","protocol","response_type","access_type","client_id","redirect_uri","code_challenge_method","params","nonce","generateRandomString","codeVerifier","codeChallenge","pkceChallengeFromVerifier","code_challenge","response_mode","acr_values","logout_uri","data","hash","substr","parsedQuery","code","grant_type","code_verifier","refresh_token","scopes","updateTokens","v","hashValue","hashed","_sha256","_base64UrlEncode","array","Uint32Array","crypto","getRandomValues","dec","toString","plain","TextEncoder","encode","subtle","digest","str","btoa","String","fromCharCode","apply","Uint8Array","Auth0Scheme","returnTo","isObject","_defu","baseObj","merger","obj","extend","defu","currentValue","_namespace","arrayFn","module","exports"],"mappings":"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","file":"cd29467.js","sourcesContent":["import requrl from 'requrl';\nimport Vue from 'vue';\nimport cookie from 'cookie';\nimport defu from 'defu';\nimport jwtDecode from 'jwt-decode';\n\nconst isUnset = (o) => typeof o === \"undefined\" || o === null;\nconst isSet = (o) => !isUnset(o);\nconst isSameURL = (ctx, a, b) => normalizePath(a, ctx) === normalizePath(b, ctx);\nfunction isRelativeURL(u) {\n return u && u.length && new RegExp([\n \"^\\\\/([a-zA-Z0-9@\\\\-%_~.:]\",\n \"[/a-zA-Z0-9@\\\\-%_~.:]*)?\",\n \"([?][^#]*)?(#[^#]*)?$\"\n ].join(\"\")).test(u);\n}\nfunction parseQuery(queryString) {\n const query = {};\n const pairs = queryString.split(\"&\");\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i].split(\"=\");\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || \"\");\n }\n return query;\n}\nfunction encodeQuery(queryObject) {\n return Object.entries(queryObject).filter(([_key, value]) => typeof value !== \"undefined\").map(([key, value]) => encodeURIComponent(key) + (value != null ? \"=\" + encodeURIComponent(value) : \"\")).join(\"&\");\n}\nfunction routeOption(route, key, value) {\n return route.matched.some((m) => {\n if (process.client) {\n return Object.values(m.components).some((component) => component.options && component.options[key] === value);\n } else {\n return Object.values(m.components).some((component) => Object.values(component._Ctor).some((ctor) => ctor.options && ctor.options[key] === value));\n }\n });\n}\nfunction getMatchedComponents(route, matches = []) {\n return [].concat(...[], ...route.matched.map(function(m, index) {\n return Object.keys(m.components).map(function(key) {\n matches.push(index);\n return m.components[key];\n });\n }));\n}\nfunction normalizePath(path = \"\", ctx) {\n let result = path.split(\"?\")[0];\n if (ctx && ctx.base) {\n result = result.replace(ctx.base, \"/\");\n }\n if (result.charAt(result.length - 1) === \"/\") {\n result = result.slice(0, -1);\n }\n result = result.replace(/\\/+/g, \"/\");\n return result;\n}\nfunction encodeValue(val) {\n if (typeof val === \"string\") {\n return val;\n }\n return JSON.stringify(val);\n}\nfunction decodeValue(val) {\n if (typeof val === \"string\") {\n try {\n return JSON.parse(val);\n } catch (_) {\n }\n }\n return val;\n}\nfunction getProp(holder, propName) {\n if (!propName || !holder || typeof holder !== \"object\") {\n return holder;\n }\n if (propName in holder) {\n return holder[propName];\n }\n const propParts = Array.isArray(propName) ? propName : (propName + \"\").split(\".\");\n let result = holder;\n while (propParts.length && result) {\n result = result[propParts.shift()];\n }\n return result;\n}\nfunction addTokenPrefix(token, tokenType) {\n if (!token || !tokenType || typeof token !== \"string\" || token.startsWith(tokenType)) {\n return token;\n }\n return tokenType + \" \" + token;\n}\nfunction removeTokenPrefix(token, tokenType) {\n if (!token || !tokenType || typeof token !== \"string\") {\n return token;\n }\n return token.replace(tokenType + \" \", \"\");\n}\nfunction urlJoin(...args) {\n return args.join(\"/\").replace(/[/]+/g, \"/\").replace(/^(.+):\\//, \"$1://\").replace(/^file:/, \"file:/\").replace(/\\/(\\?|&|#[^!])/g, \"$1\").replace(/\\?/g, \"&\").replace(\"&\", \"?\");\n}\nfunction cleanObj(obj) {\n for (const key in obj) {\n if (obj[key] === void 0) {\n delete obj[key];\n }\n }\n return obj;\n}\nconst characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nfunction randomString(length) {\n let result = \"\";\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n\nclass Storage {\n constructor(ctx, options) {\n this.ctx = ctx;\n this.options = options;\n this._initState();\n }\n setUniversal(key, value) {\n if (isUnset(value)) {\n return this.removeUniversal(key);\n }\n this.setCookie(key, value);\n this.setLocalStorage(key, value);\n this.setState(key, value);\n return value;\n }\n getUniversal(key) {\n let value;\n if (process.server) {\n value = this.getState(key);\n }\n if (isUnset(value)) {\n value = this.getCookie(key);\n }\n if (isUnset(value)) {\n value = this.getLocalStorage(key);\n }\n if (isUnset(value)) {\n value = this.getState(key);\n }\n return value;\n }\n syncUniversal(key, defaultValue) {\n let value = this.getUniversal(key);\n if (isUnset(value) && isSet(defaultValue)) {\n value = defaultValue;\n }\n if (isSet(value)) {\n this.setUniversal(key, value);\n }\n return value;\n }\n removeUniversal(key) {\n this.removeState(key);\n this.removeLocalStorage(key);\n this.removeCookie(key);\n }\n _initState() {\n Vue.set(this, \"_state\", {});\n this._useVuex = this.options.vuex && !!this.ctx.store;\n if (this._useVuex) {\n const storeModule = {\n namespaced: true,\n state: () => this.options.initialState,\n mutations: {\n SET(state, payload) {\n Vue.set(state, payload.key, payload.value);\n }\n }\n };\n this.ctx.store.registerModule(this.options.vuex.namespace, storeModule, {\n preserveState: Boolean(this.ctx.store.state[this.options.vuex.namespace])\n });\n this.state = this.ctx.store.state[this.options.vuex.namespace];\n } else {\n Vue.set(this, \"state\", {});\n console.warn(\"[AUTH] The Vuex Store is not activated. This might cause issues in auth module behavior, like redirects not working properly.To activate it, see https://nuxtjs.org/docs/2.x/directory-structure/store\");\n }\n }\n setState(key, value) {\n if (key[0] === \"_\") {\n Vue.set(this._state, key, value);\n } else if (this._useVuex) {\n this.ctx.store.commit(this.options.vuex.namespace + \"/SET\", {\n key,\n value\n });\n } else {\n Vue.set(this.state, key, value);\n }\n return value;\n }\n getState(key) {\n if (key[0] !== \"_\") {\n return this.state[key];\n } else {\n return this._state[key];\n }\n }\n watchState(key, fn) {\n if (this._useVuex) {\n return this.ctx.store.watch((state) => getProp(state[this.options.vuex.namespace], key), fn);\n }\n }\n removeState(key) {\n this.setState(key, void 0);\n }\n setLocalStorage(key, value) {\n if (isUnset(value)) {\n return this.removeLocalStorage(key);\n }\n if (!this.isLocalStorageEnabled()) {\n return;\n }\n const _key = this.getPrefix() + key;\n try {\n localStorage.setItem(_key, encodeValue(value));\n } catch (e) {\n if (!this.options.ignoreExceptions) {\n throw e;\n }\n }\n return value;\n }\n getLocalStorage(key) {\n if (!this.isLocalStorageEnabled()) {\n return;\n }\n const _key = this.getPrefix() + key;\n const value = localStorage.getItem(_key);\n return decodeValue(value);\n }\n removeLocalStorage(key) {\n if (!this.isLocalStorageEnabled()) {\n return;\n }\n const _key = this.getPrefix() + key;\n localStorage.removeItem(_key);\n }\n getCookies() {\n if (!this.isCookiesEnabled()) {\n return;\n }\n const cookieStr = process.client ? document.cookie : this.ctx.req.headers.cookie;\n return cookie.parse(cookieStr || \"\") || {};\n }\n setCookie(key, value, options = {}) {\n if (!this.options.cookie || process.server && !this.ctx.res) {\n return;\n }\n if (!this.isCookiesEnabled()) {\n return;\n }\n const _prefix = options.prefix !== void 0 ? options.prefix : this.options.cookie.prefix;\n const _key = _prefix + key;\n const _options = Object.assign({}, this.options.cookie.options, options);\n const _value = encodeValue(value);\n if (isUnset(value)) {\n _options.maxAge = -1;\n }\n if (typeof _options.expires === \"number\") {\n _options.expires = new Date(Date.now() + _options.expires * 864e5);\n }\n const serializedCookie = cookie.serialize(_key, _value, _options);\n if (process.client) {\n document.cookie = serializedCookie;\n } else if (process.server && this.ctx.res) {\n let cookies = this.ctx.res.getHeader(\"Set-Cookie\") || [];\n if (!Array.isArray(cookies))\n cookies = [cookies];\n cookies.unshift(serializedCookie);\n this.ctx.res.setHeader(\"Set-Cookie\", cookies.filter((v, i, arr) => arr.findIndex((val) => val.startsWith(v.substr(0, v.indexOf(\"=\")))) === i));\n }\n return value;\n }\n getCookie(key) {\n if (!this.options.cookie || process.server && !this.ctx.req) {\n return;\n }\n if (!this.isCookiesEnabled()) {\n return;\n }\n const _key = this.options.cookie.prefix + key;\n const cookies = this.getCookies();\n const value = cookies[_key] ? decodeURIComponent(cookies[_key]) : void 0;\n return decodeValue(value);\n }\n removeCookie(key, options) {\n this.setCookie(key, void 0, options);\n }\n getPrefix() {\n if (!this.options.localStorage) {\n throw new Error(\"Cannot get prefix; localStorage is off\");\n }\n return this.options.localStorage.prefix;\n }\n isLocalStorageEnabled() {\n if (!this.options.localStorage) {\n return false;\n }\n if (!process.client) {\n return false;\n }\n const test = \"test\";\n try {\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n return true;\n } catch (e) {\n if (!this.options.ignoreExceptions) {\n console.warn(\"[AUTH] Local storage is enabled in config, but browser doesn't support it\");\n }\n return false;\n }\n }\n isCookiesEnabled() {\n if (!this.options.cookie) {\n return false;\n }\n if (process.server) {\n return true;\n }\n if (window.navigator.cookieEnabled) {\n return true;\n } else {\n console.warn(\"[AUTH] Cookies is enabled in config, but browser doesn't support it\");\n return false;\n }\n }\n}\n\nclass Auth {\n constructor(ctx, options) {\n this.strategies = {};\n this._errorListeners = [];\n this._redirectListeners = [];\n this.ctx = ctx;\n this.options = options;\n const initialState = { user: null, loggedIn: false };\n const storage = new Storage(ctx, { ...options, ...{ initialState } });\n this.$storage = storage;\n this.$state = storage.state;\n }\n get state() {\n if (!this._stateWarnShown) {\n this._stateWarnShown = true;\n console.warn(\"[AUTH] $auth.state is deprecated. Please use $auth.$state or top level props like $auth.loggedIn\");\n }\n return this.$state;\n }\n get strategy() {\n return this.getStrategy();\n }\n getStrategy(throwException = true) {\n if (throwException) {\n if (!this.$state.strategy) {\n throw new Error(\"No strategy is set!\");\n }\n if (!this.strategies[this.$state.strategy]) {\n throw new Error(\"Strategy not supported: \" + this.$state.strategy);\n }\n }\n return this.strategies[this.$state.strategy];\n }\n get user() {\n return this.$state.user;\n }\n get loggedIn() {\n return this.$state.loggedIn;\n }\n get busy() {\n return this.$storage.getState(\"busy\");\n }\n async init() {\n if (this.options.resetOnError) {\n this.onError((...args) => {\n if (typeof this.options.resetOnError !== \"function\" || this.options.resetOnError(...args)) {\n this.reset();\n }\n });\n }\n this.$storage.syncUniversal(\"strategy\", this.options.defaultStrategy);\n if (!this.getStrategy(false)) {\n this.$storage.setUniversal(\"strategy\", this.options.defaultStrategy);\n if (!this.getStrategy(false)) {\n return Promise.resolve();\n }\n }\n try {\n await this.mounted();\n } catch (error) {\n this.callOnError(error);\n } finally {\n if (process.client && this.options.watchLoggedIn) {\n this.$storage.watchState(\"loggedIn\", (loggedIn) => {\n if (!routeOption(this.ctx.route, \"auth\", false)) {\n this.redirect(loggedIn ? \"home\" : \"logout\");\n }\n });\n }\n }\n }\n getState(key) {\n if (!this._getStateWarnShown) {\n this._getStateWarnShown = true;\n console.warn(\"[AUTH] $auth.getState is deprecated. Please use $auth.$storage.getState() or top level props like $auth.loggedIn\");\n }\n return this.$storage.getState(key);\n }\n registerStrategy(name, strategy) {\n this.strategies[name] = strategy;\n }\n setStrategy(name) {\n if (name === this.$storage.getUniversal(\"strategy\")) {\n return Promise.resolve();\n }\n if (!this.strategies[name]) {\n throw new Error(`Strategy ${name} is not defined!`);\n }\n this.reset();\n this.$storage.setUniversal(\"strategy\", name);\n return this.mounted();\n }\n mounted(...args) {\n if (!this.getStrategy().mounted) {\n return this.fetchUserOnce();\n }\n return Promise.resolve(this.getStrategy().mounted(...args)).catch((error) => {\n this.callOnError(error, { method: \"mounted\" });\n return Promise.reject(error);\n });\n }\n loginWith(name, ...args) {\n return this.setStrategy(name).then(() => this.login(...args));\n }\n login(...args) {\n if (!this.getStrategy().login) {\n return Promise.resolve();\n }\n return this.wrapLogin(this.getStrategy().login(...args)).catch((error) => {\n this.callOnError(error, { method: \"login\" });\n return Promise.reject(error);\n });\n }\n fetchUser(...args) {\n if (!this.getStrategy().fetchUser) {\n return Promise.resolve();\n }\n return Promise.resolve(this.getStrategy().fetchUser(...args)).catch((error) => {\n this.callOnError(error, { method: \"fetchUser\" });\n return Promise.reject(error);\n });\n }\n logout(...args) {\n if (!this.getStrategy().logout) {\n this.reset();\n return Promise.resolve();\n }\n return Promise.resolve(this.getStrategy().logout(...args)).catch((error) => {\n this.callOnError(error, { method: \"logout\" });\n return Promise.reject(error);\n });\n }\n setUserToken(token, refreshToken) {\n if (!this.getStrategy().setUserToken) {\n this.getStrategy().token.set(token);\n return Promise.resolve();\n }\n return Promise.resolve(this.getStrategy().setUserToken(token, refreshToken)).catch((error) => {\n this.callOnError(error, { method: \"setUserToken\" });\n return Promise.reject(error);\n });\n }\n reset(...args) {\n if (!this.getStrategy().reset) {\n this.setUser(false);\n this.getStrategy().token.reset();\n this.getStrategy().refreshToken.reset();\n }\n return this.getStrategy().reset(...args);\n }\n refreshTokens() {\n if (!this.getStrategy().refreshController) {\n return Promise.resolve();\n }\n return Promise.resolve(this.getStrategy().refreshController.handleRefresh()).catch((error) => {\n this.callOnError(error, { method: \"refreshTokens\" });\n return Promise.reject(error);\n });\n }\n check(...args) {\n if (!this.getStrategy().check) {\n return { valid: true };\n }\n return this.getStrategy().check(...args);\n }\n fetchUserOnce(...args) {\n if (!this.$state.user) {\n return this.fetchUser(...args);\n }\n return Promise.resolve();\n }\n setUser(user) {\n this.$storage.setState(\"user\", user);\n let check = { valid: Boolean(user) };\n if (check.valid) {\n check = this.check();\n }\n this.$storage.setState(\"loggedIn\", check.valid);\n }\n request(endpoint, defaults = {}) {\n const _endpoint = typeof defaults === \"object\" ? Object.assign({}, defaults, endpoint) : endpoint;\n if (_endpoint.baseURL === \"\") {\n _endpoint.baseURL = requrl(this.ctx.req);\n }\n if (!this.ctx.app.$axios) {\n console.error(\"[AUTH] add the @nuxtjs/axios module to nuxt.config file\");\n return;\n }\n return this.ctx.app.$axios.request(_endpoint).catch((error) => {\n this.callOnError(error, { method: \"request\" });\n return Promise.reject(error);\n });\n }\n requestWith(strategy, endpoint, defaults) {\n const token = this.getStrategy().token.get();\n const _endpoint = Object.assign({}, defaults, endpoint);\n const tokenName = this.strategies[strategy].options.token.name || \"Authorization\";\n if (!_endpoint.headers) {\n _endpoint.headers = {};\n }\n if (!_endpoint.headers[tokenName] && isSet(token) && token && typeof token === \"string\") {\n _endpoint.headers[tokenName] = token;\n }\n return this.request(_endpoint);\n }\n wrapLogin(promise) {\n this.$storage.setState(\"busy\", true);\n this.error = null;\n return Promise.resolve(promise).then((response) => {\n this.$storage.setState(\"busy\", false);\n return response;\n }).catch((error) => {\n this.$storage.setState(\"busy\", false);\n return Promise.reject(error);\n });\n }\n onError(listener) {\n this._errorListeners.push(listener);\n }\n callOnError(error, payload = {}) {\n this.error = error;\n for (const fn of this._errorListeners) {\n fn(error, payload);\n }\n }\n redirect(name, noRouter = false) {\n if (!this.options.redirect) {\n return;\n }\n const from = this.options.fullPathRedirect ? this.ctx.route.fullPath : this.ctx.route.path;\n let to = this.options.redirect[name];\n if (!to) {\n return;\n }\n if (this.options.rewriteRedirects) {\n if (name === \"login\" && isRelativeURL(from) && !isSameURL(this.ctx, to, from)) {\n this.$storage.setUniversal(\"redirect\", from);\n }\n if (name === \"home\") {\n const redirect = this.$storage.getUniversal(\"redirect\");\n this.$storage.setUniversal(\"redirect\", null);\n if (isRelativeURL(redirect)) {\n to = redirect;\n }\n }\n }\n to = this.callOnRedirect(to, from) || to;\n if (isSameURL(this.ctx, to, from)) {\n return;\n }\n if (process.client) {\n if (noRouter) {\n if (isRelativeURL(to) && !to.includes(this.ctx.base)) {\n to = normalizePath(\"/\" + this.ctx.base + \"/\" + to);\n }\n window.location.replace(to);\n } else {\n this.ctx.redirect(to, this.ctx.query);\n }\n } else {\n this.ctx.redirect(to, this.ctx.query);\n }\n }\n onRedirect(listener) {\n this._redirectListeners.push(listener);\n }\n callOnRedirect(to, from) {\n for (const fn of this._redirectListeners) {\n to = fn(to, from) || to;\n }\n return to;\n }\n hasScope(scope) {\n const userScopes = this.$state.user && getProp(this.$state.user, this.options.scopeKey);\n if (!userScopes) {\n return false;\n }\n if (Array.isArray(userScopes)) {\n return userScopes.includes(scope);\n }\n return Boolean(getProp(userScopes, scope));\n }\n}\n\nconst authMiddleware = async (ctx) => {\n if (routeOption(ctx.route, \"auth\", false)) {\n return;\n }\n const matches = [];\n const Components = getMatchedComponents(ctx.route, matches);\n if (!Components.length) {\n return;\n }\n const { login, callback } = ctx.$auth.options.redirect;\n const pageIsInGuestMode = routeOption(ctx.route, \"auth\", \"guest\");\n const insidePage = (page) => normalizePath(ctx.route.path, ctx) === normalizePath(page, ctx);\n if (ctx.$auth.$state.loggedIn) {\n const { tokenExpired, refreshTokenExpired, isRefreshable } = ctx.$auth.check(true);\n if (!login || insidePage(login) || pageIsInGuestMode) {\n ctx.$auth.redirect(\"home\");\n }\n if (refreshTokenExpired) {\n ctx.$auth.reset();\n } else if (tokenExpired) {\n if (isRefreshable) {\n try {\n await ctx.$auth.refreshTokens();\n } catch (error) {\n ctx.$auth.reset();\n }\n } else {\n ctx.$auth.reset();\n }\n }\n } else if (!pageIsInGuestMode && (!callback || !insidePage(callback))) {\n ctx.$auth.redirect(\"login\");\n }\n};\n\nclass ConfigurationDocumentRequestError extends Error {\n constructor() {\n super(\"Error loading OpenIDConnect configuration document\");\n this.name = \"ConfigurationDocumentRequestError\";\n }\n}\n\nconst ConfigurationDocumentWarning = (message) => console.warn(`[AUTH] [OPENID CONNECT] Invalid configuration. ${message}`);\nclass ConfigurationDocument {\n constructor(scheme, storage) {\n this.scheme = scheme;\n this.$storage = storage;\n this.key = \"_configuration_document.\" + this.scheme.name;\n }\n _set(value) {\n return this.$storage.setState(this.key, value);\n }\n get() {\n return this.$storage.getState(this.key);\n }\n set(value) {\n this._set(value);\n return value;\n }\n async request() {\n var _a, _b, _c, _d;\n const serverDoc = (_d = (_c = (_b = (_a = this.scheme.$auth.ctx) == null ? void 0 : _a.nuxtState) == null ? void 0 : _b.$auth) == null ? void 0 : _c.openIDConnect) == null ? void 0 : _d.configurationDocument;\n if (process.client && serverDoc) {\n this.set(serverDoc);\n }\n if (!this.get()) {\n const configurationDocument = await this.scheme.requestHandler.axios.$get(this.scheme.options.endpoints.configuration).catch((e) => Promise.reject(e));\n if (process.server) {\n this.scheme.$auth.ctx.beforeNuxtRender(({ nuxtState }) => {\n nuxtState.$auth = {\n oidc: {\n configurationDocument\n }\n };\n });\n }\n this.set(configurationDocument);\n }\n }\n validate() {\n const mapping = {\n responseType: \"response_type_supported\",\n scope: \"scopes_supported\",\n grantType: \"grant_types_supported\",\n acrValues: \"acr_values_supported\"\n };\n Object.keys(mapping).forEach((optionsKey) => {\n const configDocument = this.get();\n const configDocumentKey = mapping[optionsKey];\n const configDocumentValues = configDocument[configDocumentKey];\n const optionsValues = this.scheme.options[optionsKey];\n if (typeof configDocumentValues !== \"undefined\") {\n if (Array.isArray(optionsValues) && Array.isArray(configDocumentValues)) {\n optionsValues.forEach((optionsValue) => {\n if (!configDocumentValues.includes(optionsValue)) {\n ConfigurationDocumentWarning(`A value of scheme options ${optionsKey} is not supported by ${configDocumentKey} of by Authorization Server.`);\n }\n });\n }\n if (!Array.isArray(optionsValues) && Array.isArray(configDocumentValues) && !configDocumentValues.includes(optionsValues)) {\n ConfigurationDocumentWarning(`Value of scheme option ${optionsKey} is not supported by ${configDocumentKey} of by Authorization Server.`);\n }\n if (!Array.isArray(optionsValues) && !Array.isArray(configDocumentValues) && configDocumentValues !== optionsValues) {\n ConfigurationDocumentWarning(`Value of scheme option ${optionsKey} is not supported by ${configDocumentKey} of by Authorization Server.`);\n }\n }\n });\n }\n async init() {\n await this.request().catch(() => {\n throw new ConfigurationDocumentRequestError();\n });\n this.validate();\n this.setSchemeEndpoints();\n }\n setSchemeEndpoints() {\n const configurationDocument = this.get();\n this.scheme.options.endpoints = defu(this.scheme.options.endpoints, {\n authorization: configurationDocument.authorization_endpoint,\n token: configurationDocument.token_endpoint,\n userInfo: configurationDocument.userinfo_endpoint,\n logout: configurationDocument.end_session_endpoint\n });\n }\n reset() {\n this._set(false);\n }\n}\n\nclass ExpiredAuthSessionError extends Error {\n constructor() {\n super(\"Both token and refresh token have expired. Your request was aborted.\");\n this.name = \"ExpiredAuthSessionError\";\n }\n}\n\nclass RefreshController {\n constructor(scheme) {\n this.scheme = scheme;\n this._refreshPromise = null;\n this.$auth = scheme.$auth;\n }\n handleRefresh() {\n if (this._refreshPromise) {\n return this._refreshPromise;\n }\n return this._doRefresh();\n }\n _doRefresh() {\n this._refreshPromise = new Promise((resolve, reject) => {\n this.scheme.refreshTokens().then((response) => {\n this._refreshPromise = null;\n resolve(response);\n }).catch((error) => {\n this._refreshPromise = null;\n reject(error);\n });\n });\n return this._refreshPromise;\n }\n}\n\nvar TokenStatusEnum;\n(function(TokenStatusEnum2) {\n TokenStatusEnum2[\"UNKNOWN\"] = \"UNKNOWN\";\n TokenStatusEnum2[\"VALID\"] = \"VALID\";\n TokenStatusEnum2[\"EXPIRED\"] = \"EXPIRED\";\n})(TokenStatusEnum || (TokenStatusEnum = {}));\nclass TokenStatus {\n constructor(token, tokenExpiresAt) {\n this._status = this._calculate(token, tokenExpiresAt);\n }\n unknown() {\n return TokenStatusEnum.UNKNOWN === this._status;\n }\n valid() {\n return TokenStatusEnum.VALID === this._status;\n }\n expired() {\n return TokenStatusEnum.EXPIRED === this._status;\n }\n _calculate(token, tokenExpiresAt) {\n const now = Date.now();\n try {\n if (!token || !tokenExpiresAt) {\n return TokenStatusEnum.UNKNOWN;\n }\n } catch (error) {\n return TokenStatusEnum.UNKNOWN;\n }\n const timeSlackMillis = 500;\n tokenExpiresAt -= timeSlackMillis;\n if (now < tokenExpiresAt) {\n return TokenStatusEnum.VALID;\n }\n return TokenStatusEnum.EXPIRED;\n }\n}\n\nclass RefreshToken {\n constructor(scheme, storage) {\n this.scheme = scheme;\n this.$storage = storage;\n }\n get() {\n const _key = this.scheme.options.refreshToken.prefix + this.scheme.name;\n return this.$storage.getUniversal(_key);\n }\n set(tokenValue) {\n const refreshToken = addTokenPrefix(tokenValue, this.scheme.options.refreshToken.type);\n this._setToken(refreshToken);\n this._updateExpiration(refreshToken);\n return refreshToken;\n }\n sync() {\n const refreshToken = this._syncToken();\n this._syncExpiration();\n return refreshToken;\n }\n reset() {\n this._setToken(false);\n this._setExpiration(false);\n }\n status() {\n return new TokenStatus(this.get(), this._getExpiration());\n }\n _getExpiration() {\n const _key = this.scheme.options.refreshToken.expirationPrefix + this.scheme.name;\n return this.$storage.getUniversal(_key);\n }\n _setExpiration(expiration) {\n const _key = this.scheme.options.refreshToken.expirationPrefix + this.scheme.name;\n return this.$storage.setUniversal(_key, expiration);\n }\n _syncExpiration() {\n const _key = this.scheme.options.refreshToken.expirationPrefix + this.scheme.name;\n return this.$storage.syncUniversal(_key);\n }\n _updateExpiration(refreshToken) {\n let refreshTokenExpiration;\n const _tokenIssuedAtMillis = Date.now();\n const _tokenTTLMillis = Number(this.scheme.options.refreshToken.maxAge) * 1e3;\n const _tokenExpiresAtMillis = _tokenTTLMillis ? _tokenIssuedAtMillis + _tokenTTLMillis : 0;\n try {\n refreshTokenExpiration = jwtDecode(refreshToken + \"\").exp * 1e3 || _tokenExpiresAtMillis;\n } catch (error) {\n refreshTokenExpiration = _tokenExpiresAtMillis;\n if (!(error && error.name === \"InvalidTokenError\")) {\n throw error;\n }\n }\n return this._setExpiration(refreshTokenExpiration || false);\n }\n _setToken(refreshToken) {\n const _key = this.scheme.options.refreshToken.prefix + this.scheme.name;\n return this.$storage.setUniversal(_key, refreshToken);\n }\n _syncToken() {\n const _key = this.scheme.options.refreshToken.prefix + this.scheme.name;\n return this.$storage.syncUniversal(_key);\n }\n}\n\nclass RequestHandler {\n constructor(scheme, axios) {\n this.scheme = scheme;\n this.axios = axios;\n this.interceptor = null;\n }\n setHeader(token) {\n if (this.scheme.options.token.global) {\n this.axios.setHeader(this.scheme.options.token.name, token);\n }\n }\n clearHeader() {\n if (this.scheme.options.token.global) {\n this.axios.setHeader(this.scheme.options.token.name, false);\n }\n }\n initializeRequestInterceptor(refreshEndpoint) {\n this.interceptor = this.axios.interceptors.request.use(async (config) => {\n if (!this._needToken(config) || config.url === refreshEndpoint) {\n return config;\n }\n const { valid, tokenExpired, refreshTokenExpired, isRefreshable } = this.scheme.check(true);\n let isValid = valid;\n if (refreshTokenExpired) {\n this.scheme.reset();\n throw new ExpiredAuthSessionError();\n }\n if (tokenExpired) {\n if (!isRefreshable) {\n this.scheme.reset();\n throw new ExpiredAuthSessionError();\n }\n isValid = await this.scheme.refreshTokens().then(() => true).catch(() => {\n this.scheme.reset();\n throw new ExpiredAuthSessionError();\n });\n }\n const token = this.scheme.token.get();\n if (!isValid) {\n if (!token && this._requestHasAuthorizationHeader(config)) {\n throw new ExpiredAuthSessionError();\n }\n return config;\n }\n return this._getUpdatedRequestConfig(config, token);\n });\n }\n reset() {\n this.axios.interceptors.request.eject(this.interceptor);\n this.interceptor = null;\n }\n _needToken(config) {\n const options = this.scheme.options;\n return options.token.global || Object.values(options.endpoints).some((endpoint) => typeof endpoint === \"object\" ? endpoint.url === config.url : endpoint === config.url);\n }\n _getUpdatedRequestConfig(config, token) {\n if (typeof token === \"string\") {\n config.headers[this.scheme.options.token.name] = token;\n }\n return config;\n }\n _requestHasAuthorizationHeader(config) {\n return !!config.headers.common[this.scheme.options.token.name];\n }\n}\n\nclass Token {\n constructor(scheme, storage) {\n this.scheme = scheme;\n this.$storage = storage;\n }\n get() {\n const _key = this.scheme.options.token.prefix + this.scheme.name;\n return this.$storage.getUniversal(_key);\n }\n set(tokenValue) {\n const token = addTokenPrefix(tokenValue, this.scheme.options.token.type);\n this._setToken(token);\n this._updateExpiration(token);\n if (typeof token === \"string\") {\n this.scheme.requestHandler.setHeader(token);\n }\n return token;\n }\n sync() {\n const token = this._syncToken();\n this._syncExpiration();\n if (typeof token === \"string\") {\n this.scheme.requestHandler.setHeader(token);\n }\n return token;\n }\n reset() {\n this.scheme.requestHandler.clearHeader();\n this._setToken(false);\n this._setExpiration(false);\n }\n status() {\n return new TokenStatus(this.get(), this._getExpiration());\n }\n _getExpiration() {\n const _key = this.scheme.options.token.expirationPrefix + this.scheme.name;\n return this.$storage.getUniversal(_key);\n }\n _setExpiration(expiration) {\n const _key = this.scheme.options.token.expirationPrefix + this.scheme.name;\n return this.$storage.setUniversal(_key, expiration);\n }\n _syncExpiration() {\n const _key = this.scheme.options.token.expirationPrefix + this.scheme.name;\n return this.$storage.syncUniversal(_key);\n }\n _updateExpiration(token) {\n let tokenExpiration;\n const _tokenIssuedAtMillis = Date.now();\n const _tokenTTLMillis = Number(this.scheme.options.token.maxAge) * 1e3;\n const _tokenExpiresAtMillis = _tokenTTLMillis ? _tokenIssuedAtMillis + _tokenTTLMillis : 0;\n try {\n tokenExpiration = jwtDecode(token + \"\").exp * 1e3 || _tokenExpiresAtMillis;\n } catch (error) {\n tokenExpiration = _tokenExpiresAtMillis;\n if (!(error && error.name === \"InvalidTokenError\")) {\n throw error;\n }\n }\n return this._setExpiration(tokenExpiration || false);\n }\n _setToken(token) {\n const _key = this.scheme.options.token.prefix + this.scheme.name;\n return this.$storage.setUniversal(_key, token);\n }\n _syncToken() {\n const _key = this.scheme.options.token.prefix + this.scheme.name;\n return this.$storage.syncUniversal(_key);\n }\n}\n\nclass IdToken {\n constructor(scheme, storage) {\n this.scheme = scheme;\n this.$storage = storage;\n }\n get() {\n const _key = this.scheme.options.idToken.prefix + this.scheme.name;\n return this.$storage.getUniversal(_key);\n }\n set(tokenValue) {\n const idToken = addTokenPrefix(tokenValue, this.scheme.options.idToken.type);\n this._setToken(idToken);\n this._updateExpiration(idToken);\n return idToken;\n }\n sync() {\n const idToken = this._syncToken();\n this._syncExpiration();\n return idToken;\n }\n reset() {\n this._setToken(false);\n this._setExpiration(false);\n }\n status() {\n return new TokenStatus(this.get(), this._getExpiration());\n }\n _getExpiration() {\n const _key = this.scheme.options.idToken.expirationPrefix + this.scheme.name;\n return this.$storage.getUniversal(_key);\n }\n _setExpiration(expiration) {\n const _key = this.scheme.options.idToken.expirationPrefix + this.scheme.name;\n return this.$storage.setUniversal(_key, expiration);\n }\n _syncExpiration() {\n const _key = this.scheme.options.idToken.expirationPrefix + this.scheme.name;\n return this.$storage.syncUniversal(_key);\n }\n _updateExpiration(idToken) {\n let idTokenExpiration;\n const _tokenIssuedAtMillis = Date.now();\n const _tokenTTLMillis = Number(this.scheme.options.idToken.maxAge) * 1e3;\n const _tokenExpiresAtMillis = _tokenTTLMillis ? _tokenIssuedAtMillis + _tokenTTLMillis : 0;\n try {\n idTokenExpiration = jwtDecode(idToken + \"\").exp * 1e3 || _tokenExpiresAtMillis;\n } catch (error) {\n idTokenExpiration = _tokenExpiresAtMillis;\n if (!(error && error.name === \"InvalidTokenError\")) {\n throw error;\n }\n }\n return this._setExpiration(idTokenExpiration || false);\n }\n _setToken(idToken) {\n const _key = this.scheme.options.idToken.prefix + this.scheme.name;\n return this.$storage.setUniversal(_key, idToken);\n }\n _syncToken() {\n const _key = this.scheme.options.idToken.prefix + this.scheme.name;\n return this.$storage.syncUniversal(_key);\n }\n userInfo() {\n const idToken = this.get();\n if (typeof idToken === \"string\") {\n return jwtDecode(idToken);\n }\n }\n}\n\nclass BaseScheme {\n constructor($auth, ...options) {\n this.$auth = $auth;\n this.options = options.reduce((p, c) => defu(p, c), {});\n }\n get name() {\n return this.options.name;\n }\n}\n\nconst DEFAULTS$4 = {\n name: \"local\",\n endpoints: {\n login: {\n url: \"/api/auth/login\",\n method: \"post\"\n },\n logout: {\n url: \"/api/auth/logout\",\n method: \"post\"\n },\n user: {\n url: \"/api/auth/user\",\n method: \"get\"\n }\n },\n token: {\n property: \"token\",\n type: \"Bearer\",\n name: \"Authorization\",\n maxAge: 1800,\n global: true,\n required: true,\n prefix: \"_token.\",\n expirationPrefix: \"_token_expiration.\"\n },\n user: {\n property: \"user\",\n autoFetch: true\n },\n clientId: false,\n grantType: false,\n scope: false\n};\nclass LocalScheme extends BaseScheme {\n constructor($auth, options, ...defaults) {\n super($auth, options, ...defaults, DEFAULTS$4);\n this.token = new Token(this, this.$auth.$storage);\n this.requestHandler = new RequestHandler(this, this.$auth.ctx.$axios);\n }\n check(checkStatus = false) {\n const response = {\n valid: false,\n tokenExpired: false\n };\n const token = this.token.sync();\n if (!token) {\n return response;\n }\n if (!checkStatus) {\n response.valid = true;\n return response;\n }\n const tokenStatus = this.token.status();\n if (tokenStatus.expired()) {\n response.tokenExpired = true;\n return response;\n }\n response.valid = true;\n return response;\n }\n mounted({\n tokenCallback = () => this.$auth.reset(),\n refreshTokenCallback = void 0\n } = {}) {\n const { tokenExpired, refreshTokenExpired } = this.check(true);\n if (refreshTokenExpired && typeof refreshTokenCallback === \"function\") {\n refreshTokenCallback();\n } else if (tokenExpired && typeof tokenCallback === \"function\") {\n tokenCallback();\n }\n this.initializeRequestInterceptor();\n return this.$auth.fetchUserOnce();\n }\n async login(endpoint, { reset = true } = {}) {\n if (!this.options.endpoints.login) {\n return;\n }\n if (reset) {\n this.$auth.reset({ resetInterceptor: false });\n }\n if (this.options.clientId) {\n endpoint.data.client_id = this.options.clientId;\n }\n if (this.options.grantType) {\n endpoint.data.grant_type = this.options.grantType;\n }\n if (this.options.scope) {\n endpoint.data.scope = this.options.scope;\n }\n const response = await this.$auth.request(endpoint, this.options.endpoints.login);\n this.updateTokens(response);\n if (!this.requestHandler.interceptor) {\n this.initializeRequestInterceptor();\n }\n if (this.options.user.autoFetch) {\n await this.fetchUser();\n }\n return response;\n }\n setUserToken(token) {\n this.token.set(token);\n return this.fetchUser();\n }\n fetchUser(endpoint) {\n if (!this.check().valid) {\n return Promise.resolve();\n }\n if (!this.options.endpoints.user) {\n this.$auth.setUser({});\n return Promise.resolve();\n }\n return this.$auth.requestWith(this.name, endpoint, this.options.endpoints.user).then((response) => {\n const userData = getProp(response.data, this.options.user.property);\n if (!userData) {\n const error = new Error(`User Data response does not contain field ${this.options.user.property}`);\n return Promise.reject(error);\n }\n this.$auth.setUser(userData);\n return response;\n }).catch((error) => {\n this.$auth.callOnError(error, { method: \"fetchUser\" });\n return Promise.reject(error);\n });\n }\n async logout(endpoint = {}) {\n if (this.options.endpoints.logout) {\n await this.$auth.requestWith(this.name, endpoint, this.options.endpoints.logout).catch(() => {\n });\n }\n return this.$auth.reset();\n }\n reset({ resetInterceptor = true } = {}) {\n this.$auth.setUser(false);\n this.token.reset();\n if (resetInterceptor) {\n this.requestHandler.reset();\n }\n }\n updateTokens(response) {\n const token = this.options.token.required ? getProp(response.data, this.options.token.property) : true;\n this.token.set(token);\n }\n initializeRequestInterceptor() {\n this.requestHandler.initializeRequestInterceptor();\n }\n}\n\nconst DEFAULTS$3 = {\n name: \"cookie\",\n cookie: {\n name: null\n },\n token: {\n type: \"\",\n property: \"\",\n maxAge: false,\n global: false,\n required: false\n },\n endpoints: {\n csrf: null\n }\n};\nclass CookieScheme extends LocalScheme {\n constructor($auth, options) {\n super($auth, options, DEFAULTS$3);\n }\n mounted() {\n if (process.server) {\n this.$auth.ctx.$axios.setHeader(\"referer\", this.$auth.ctx.req.headers.host);\n }\n return super.mounted();\n }\n check() {\n const response = { valid: false };\n if (!super.check().valid) {\n return response;\n }\n if (this.options.cookie.name) {\n const cookies = this.$auth.$storage.getCookies();\n response.valid = Boolean(cookies[this.options.cookie.name]);\n return response;\n }\n response.valid = true;\n return response;\n }\n async login(endpoint) {\n this.$auth.reset();\n if (this.options.endpoints.csrf) {\n await this.$auth.request(this.options.endpoints.csrf, {\n maxRedirects: 0\n });\n }\n return super.login(endpoint, { reset: false });\n }\n reset() {\n if (this.options.cookie.name) {\n this.$auth.$storage.setCookie(this.options.cookie.name, null, {\n prefix: \"\"\n });\n }\n return super.reset();\n }\n}\n\nconst DEFAULTS$2 = {\n name: \"oauth2\",\n accessType: null,\n redirectUri: null,\n logoutRedirectUri: null,\n clientId: null,\n audience: null,\n grantType: null,\n responseMode: null,\n acrValues: null,\n autoLogout: false,\n endpoints: {\n logout: null,\n authorization: null,\n token: null,\n userInfo: null\n },\n scope: [],\n token: {\n property: \"access_token\",\n type: \"Bearer\",\n name: \"Authorization\",\n maxAge: 1800,\n global: true,\n prefix: \"_token.\",\n expirationPrefix: \"_token_expiration.\"\n },\n refreshToken: {\n property: \"refresh_token\",\n maxAge: 60 * 60 * 24 * 30,\n prefix: \"_refresh_token.\",\n expirationPrefix: \"_refresh_token_expiration.\"\n },\n user: {\n property: false\n },\n responseType: \"token\",\n codeChallengeMethod: \"implicit\"\n};\nclass Oauth2Scheme extends BaseScheme {\n constructor($auth, options, ...defaults) {\n super($auth, options, ...defaults, DEFAULTS$2);\n this.req = $auth.ctx.req;\n this.token = new Token(this, this.$auth.$storage);\n this.refreshToken = new RefreshToken(this, this.$auth.$storage);\n this.refreshController = new RefreshController(this);\n this.requestHandler = new RequestHandler(this, this.$auth.ctx.$axios);\n }\n get scope() {\n return Array.isArray(this.options.scope) ? this.options.scope.join(\" \") : this.options.scope;\n }\n get redirectURI() {\n const basePath = this.$auth.ctx.base || \"\";\n const path = normalizePath(basePath + \"/\" + this.$auth.options.redirect.callback);\n return this.options.redirectUri || urlJoin(requrl(this.req), path);\n }\n get logoutRedirectURI() {\n return this.options.logoutRedirectUri || urlJoin(requrl(this.req), this.$auth.options.redirect.logout);\n }\n check(checkStatus = false) {\n const response = {\n valid: false,\n tokenExpired: false,\n refreshTokenExpired: false,\n isRefreshable: true\n };\n const token = this.token.sync();\n this.refreshToken.sync();\n if (!token) {\n return response;\n }\n if (!checkStatus) {\n response.valid = true;\n return response;\n }\n const tokenStatus = this.token.status();\n const refreshTokenStatus = this.refreshToken.status();\n if (refreshTokenStatus.expired()) {\n response.refreshTokenExpired = true;\n return response;\n }\n if (tokenStatus.expired()) {\n response.tokenExpired = true;\n return response;\n }\n response.valid = true;\n return response;\n }\n async mounted() {\n const { tokenExpired, refreshTokenExpired } = this.check(true);\n if (refreshTokenExpired || tokenExpired && this.options.autoLogout) {\n this.$auth.reset();\n }\n this.requestHandler.initializeRequestInterceptor(this.options.endpoints.token);\n const redirected = await this._handleCallback();\n if (!redirected) {\n return this.$auth.fetchUserOnce();\n }\n }\n reset() {\n this.$auth.setUser(false);\n this.token.reset();\n this.refreshToken.reset();\n this.requestHandler.reset();\n }\n async login(_opts = {}) {\n const opts = {\n protocol: \"oauth2\",\n response_type: this.options.responseType,\n access_type: this.options.accessType,\n client_id: this.options.clientId,\n redirect_uri: this.redirectURI,\n scope: this.scope,\n state: _opts.state || randomString(10),\n code_challenge_method: this.options.codeChallengeMethod,\n ..._opts.params\n };\n if (this.options.audience) {\n opts.audience = this.options.audience;\n }\n if (opts.response_type.includes(\"token\") || opts.response_type.includes(\"id_token\")) {\n opts.nonce = _opts.nonce || randomString(10);\n }\n if (opts.code_challenge_method) {\n switch (opts.code_challenge_method) {\n case \"plain\":\n case \"S256\":\n {\n const state = this.generateRandomString();\n this.$auth.$storage.setUniversal(this.name + \".pkce_state\", state);\n const codeVerifier = this.generateRandomString();\n this.$auth.$storage.setUniversal(this.name + \".pkce_code_verifier\", codeVerifier);\n const codeChallenge = await this.pkceChallengeFromVerifier(codeVerifier, opts.code_challenge_method === \"S256\");\n opts.code_challenge = window.encodeURIComponent(codeChallenge);\n }\n break;\n }\n }\n if (this.options.responseMode) {\n opts.response_mode = this.options.responseMode;\n }\n if (this.options.acrValues) {\n opts.acr_values = this.options.acrValues;\n }\n this.$auth.$storage.setUniversal(this.name + \".state\", opts.state);\n const url = this.options.endpoints.authorization + \"?\" + encodeQuery(opts);\n window.location.replace(url);\n }\n logout() {\n if (this.options.endpoints.logout) {\n const opts = {\n client_id: this.options.clientId + \"\",\n logout_uri: this.logoutRedirectURI\n };\n const url = this.options.endpoints.logout + \"?\" + encodeQuery(opts);\n window.location.replace(url);\n }\n return this.$auth.reset();\n }\n async fetchUser() {\n if (!this.check().valid) {\n return;\n }\n if (!this.options.endpoints.userInfo) {\n this.$auth.setUser({});\n return;\n }\n const response = await this.$auth.requestWith(this.name, {\n url: this.options.endpoints.userInfo\n });\n this.$auth.setUser(getProp(response.data, this.options.user.property));\n }\n async _handleCallback() {\n if (this.$auth.options.redirect && normalizePath(this.$auth.ctx.route.path, this.$auth.ctx) !== normalizePath(this.$auth.options.redirect.callback, this.$auth.ctx)) {\n return;\n }\n if (process.server) {\n return;\n }\n const hash = parseQuery(this.$auth.ctx.route.hash.substr(1));\n const parsedQuery = Object.assign({}, this.$auth.ctx.route.query, hash);\n let token = parsedQuery[this.options.token.property];\n let refreshToken;\n if (this.options.refreshToken.property) {\n refreshToken = parsedQuery[this.options.refreshToken.property];\n }\n const state = this.$auth.$storage.getUniversal(this.name + \".state\");\n this.$auth.$storage.setUniversal(this.name + \".state\", null);\n if (state && parsedQuery.state !== state) {\n return;\n }\n if (this.options.responseType === \"code\" && parsedQuery.code) {\n let codeVerifier;\n if (this.options.codeChallengeMethod && this.options.codeChallengeMethod !== \"implicit\") {\n codeVerifier = this.$auth.$storage.getUniversal(this.name + \".pkce_code_verifier\");\n this.$auth.$storage.setUniversal(this.name + \".pkce_code_verifier\", null);\n }\n const response = await this.$auth.request({\n method: \"post\",\n url: this.options.endpoints.token,\n baseURL: \"\",\n data: encodeQuery({\n code: parsedQuery.code,\n client_id: this.options.clientId + \"\",\n redirect_uri: this.redirectURI,\n response_type: this.options.responseType,\n audience: this.options.audience,\n grant_type: this.options.grantType,\n code_verifier: codeVerifier\n })\n });\n token = getProp(response.data, this.options.token.property) || token;\n refreshToken = getProp(response.data, this.options.refreshToken.property) || refreshToken;\n }\n if (!token || !token.length) {\n return;\n }\n this.token.set(token);\n if (refreshToken && refreshToken.length) {\n this.refreshToken.set(refreshToken);\n }\n if (this.$auth.options.watchLoggedIn) {\n this.$auth.redirect(\"home\", true);\n return true;\n }\n }\n async refreshTokens() {\n const refreshToken = this.refreshToken.get();\n if (!refreshToken) {\n return;\n }\n const refreshTokenStatus = this.refreshToken.status();\n if (refreshTokenStatus.expired()) {\n this.$auth.reset();\n throw new ExpiredAuthSessionError();\n }\n this.requestHandler.clearHeader();\n const response = await this.$auth.request({\n method: \"post\",\n url: this.options.endpoints.token,\n baseURL: \"\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n data: encodeQuery({\n refresh_token: removeTokenPrefix(refreshToken, this.options.token.type),\n scopes: this.scope,\n client_id: this.options.clientId + \"\",\n grant_type: \"refresh_token\"\n })\n }).catch((error) => {\n this.$auth.callOnError(error, { method: \"refreshToken\" });\n return Promise.reject(error);\n });\n this.updateTokens(response);\n return response;\n }\n updateTokens(response) {\n const token = getProp(response.data, this.options.token.property);\n const refreshToken = getProp(response.data, this.options.refreshToken.property);\n this.token.set(token);\n if (refreshToken) {\n this.refreshToken.set(refreshToken);\n }\n }\n async pkceChallengeFromVerifier(v, hashValue) {\n if (hashValue) {\n const hashed = await this._sha256(v);\n return this._base64UrlEncode(hashed);\n }\n return v;\n }\n generateRandomString() {\n const array = new Uint32Array(28);\n window.crypto.getRandomValues(array);\n return Array.from(array, (dec) => (\"0\" + dec.toString(16)).substr(-2)).join(\"\");\n }\n _sha256(plain) {\n const encoder = new TextEncoder();\n const data = encoder.encode(plain);\n return window.crypto.subtle.digest(\"SHA-256\", data);\n }\n _base64UrlEncode(str) {\n return btoa(String.fromCharCode.apply(null, new Uint8Array(str))).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n }\n}\n\nconst DEFAULTS$1 = {\n name: \"openIDConnect\",\n responseType: \"code\",\n grantType: \"authorization_code\",\n scope: [\"openid\", \"profile\", \"offline_access\"],\n idToken: {\n property: \"id_token\",\n maxAge: 1800,\n prefix: \"_id_token.\",\n expirationPrefix: \"_id_token_expiration.\"\n },\n codeChallengeMethod: \"S256\"\n};\nclass OpenIDConnectScheme extends Oauth2Scheme {\n constructor($auth, options, ...defaults) {\n super($auth, options, ...defaults, DEFAULTS$1);\n this.idToken = new IdToken(this, this.$auth.$storage);\n this.configurationDocument = new ConfigurationDocument(this, this.$auth.$storage);\n }\n updateTokens(response) {\n super.updateTokens(response);\n const idToken = getProp(response.data, this.options.idToken.property);\n if (idToken) {\n this.idToken.set(idToken);\n }\n }\n check(checkStatus = false) {\n const response = {\n valid: false,\n tokenExpired: false,\n refreshTokenExpired: false,\n idTokenExpired: false,\n isRefreshable: true\n };\n const token = this.token.sync();\n this.refreshToken.sync();\n this.idToken.sync();\n if (!token) {\n return response;\n }\n if (!checkStatus) {\n response.valid = true;\n return response;\n }\n const tokenStatus = this.token.status();\n const refreshTokenStatus = this.refreshToken.status();\n const idTokenStatus = this.idToken.status();\n if (refreshTokenStatus.expired()) {\n response.refreshTokenExpired = true;\n return response;\n }\n if (idTokenStatus.expired()) {\n response.idTokenExpired = true;\n return response;\n }\n if (tokenStatus.expired()) {\n response.tokenExpired = true;\n return response;\n }\n response.valid = true;\n return response;\n }\n async mounted() {\n await this.configurationDocument.init();\n const { tokenExpired, refreshTokenExpired } = this.check(true);\n if (refreshTokenExpired || tokenExpired && this.options.autoLogout) {\n this.$auth.reset();\n }\n this.requestHandler.initializeRequestInterceptor(this.options.endpoints.token);\n const redirected = await this._handleCallback();\n if (!redirected) {\n return this.$auth.fetchUserOnce();\n }\n }\n reset() {\n this.$auth.setUser(false);\n this.token.reset();\n this.idToken.reset();\n this.refreshToken.reset();\n this.requestHandler.reset();\n this.configurationDocument.reset();\n }\n logout() {\n if (this.options.endpoints.logout) {\n const opts = {\n id_token_hint: this.idToken.get(),\n post_logout_redirect_uri: this.logoutRedirectURI\n };\n const url = this.options.endpoints.logout + \"?\" + encodeQuery(opts);\n window.location.replace(url);\n }\n return this.$auth.reset();\n }\n async fetchUser() {\n if (!this.check().valid) {\n return;\n }\n if (this.idToken.get()) {\n const data2 = this.idToken.userInfo();\n this.$auth.setUser(data2);\n return;\n }\n if (!this.options.endpoints.userInfo) {\n this.$auth.setUser({});\n return;\n }\n const { data } = await this.$auth.requestWith(this.name, {\n url: this.options.endpoints.userInfo\n });\n this.$auth.setUser(data);\n }\n async _handleCallback() {\n if (this.$auth.options.redirect && normalizePath(this.$auth.ctx.route.path) !== normalizePath(this.$auth.options.redirect.callback)) {\n return;\n }\n if (process.server) {\n return;\n }\n const hash = parseQuery(this.$auth.ctx.route.hash.substr(1));\n const parsedQuery = Object.assign({}, this.$auth.ctx.route.query, hash);\n let token = parsedQuery[this.options.token.property];\n let refreshToken;\n if (this.options.refreshToken.property) {\n refreshToken = parsedQuery[this.options.refreshToken.property];\n }\n let idToken = parsedQuery[this.options.idToken.property];\n const state = this.$auth.$storage.getUniversal(this.name + \".state\");\n this.$auth.$storage.setUniversal(this.name + \".state\", null);\n if (state && parsedQuery.state !== state) {\n return;\n }\n if (this.options.responseType === \"code\" && parsedQuery.code) {\n let codeVerifier;\n if (this.options.codeChallengeMethod && this.options.codeChallengeMethod !== \"implicit\") {\n codeVerifier = this.$auth.$storage.getUniversal(this.name + \".pkce_code_verifier\");\n this.$auth.$storage.setUniversal(this.name + \".pkce_code_verifier\", null);\n }\n const response = await this.$auth.request({\n method: \"post\",\n url: this.options.endpoints.token,\n baseURL: \"\",\n data: encodeQuery({\n code: parsedQuery.code,\n client_id: this.options.clientId,\n redirect_uri: this.redirectURI,\n response_type: this.options.responseType,\n audience: this.options.audience,\n grant_type: this.options.grantType,\n code_verifier: codeVerifier\n })\n });\n token = getProp(response.data, this.options.token.property) || token;\n refreshToken = getProp(response.data, this.options.refreshToken.property) || refreshToken;\n idToken = getProp(response.data, this.options.idToken.property) || idToken;\n }\n if (!token || !token.length) {\n return;\n }\n this.token.set(token);\n if (refreshToken && refreshToken.length) {\n this.refreshToken.set(refreshToken);\n }\n if (idToken && idToken.length) {\n this.idToken.set(idToken);\n }\n this.$auth.redirect(\"home\", true);\n return true;\n }\n}\n\nconst DEFAULTS = {\n name: \"refresh\",\n endpoints: {\n refresh: {\n url: \"/api/auth/refresh\",\n method: \"post\"\n }\n },\n refreshToken: {\n property: \"refresh_token\",\n data: \"refresh_token\",\n maxAge: 60 * 60 * 24 * 30,\n required: true,\n tokenRequired: false,\n prefix: \"_refresh_token.\",\n expirationPrefix: \"_refresh_token_expiration.\"\n },\n autoLogout: false\n};\nclass RefreshScheme extends LocalScheme {\n constructor($auth, options) {\n super($auth, options, DEFAULTS);\n this.refreshToken = new RefreshToken(this, this.$auth.$storage);\n this.refreshController = new RefreshController(this);\n }\n check(checkStatus = false) {\n const response = {\n valid: false,\n tokenExpired: false,\n refreshTokenExpired: false,\n isRefreshable: true\n };\n const token = this.token.sync();\n const refreshToken = this.refreshToken.sync();\n if (!token || !refreshToken) {\n return response;\n }\n if (!checkStatus) {\n response.valid = true;\n return response;\n }\n const tokenStatus = this.token.status();\n const refreshTokenStatus = this.refreshToken.status();\n if (refreshTokenStatus.expired()) {\n response.refreshTokenExpired = true;\n return response;\n }\n if (tokenStatus.expired()) {\n response.tokenExpired = true;\n return response;\n }\n response.valid = true;\n return response;\n }\n mounted() {\n return super.mounted({\n tokenCallback: () => {\n if (this.options.autoLogout) {\n this.$auth.reset();\n }\n },\n refreshTokenCallback: () => {\n this.$auth.reset();\n }\n });\n }\n refreshTokens() {\n if (!this.options.endpoints.refresh) {\n return Promise.resolve();\n }\n if (!this.check().valid) {\n return Promise.resolve();\n }\n const refreshTokenStatus = this.refreshToken.status();\n if (refreshTokenStatus.expired()) {\n this.$auth.reset();\n throw new ExpiredAuthSessionError();\n }\n if (!this.options.refreshToken.tokenRequired) {\n this.requestHandler.clearHeader();\n }\n const endpoint = {\n data: {\n client_id: void 0,\n grant_type: void 0\n }\n };\n if (this.options.refreshToken.required && this.options.refreshToken.data) {\n endpoint.data[this.options.refreshToken.data] = this.refreshToken.get();\n }\n if (this.options.clientId) {\n endpoint.data.client_id = this.options.clientId;\n }\n if (this.options.grantType) {\n endpoint.data.grant_type = \"refresh_token\";\n }\n cleanObj(endpoint.data);\n return this.$auth.request(endpoint, this.options.endpoints.refresh).then((response) => {\n this.updateTokens(response, { isRefreshing: true });\n return response;\n }).catch((error) => {\n this.$auth.callOnError(error, { method: \"refreshToken\" });\n return Promise.reject(error);\n });\n }\n setUserToken(token, refreshToken) {\n this.token.set(token);\n if (refreshToken) {\n this.refreshToken.set(refreshToken);\n }\n return this.fetchUser();\n }\n reset({ resetInterceptor = true } = {}) {\n this.$auth.setUser(false);\n this.token.reset();\n this.refreshToken.reset();\n if (resetInterceptor) {\n this.requestHandler.reset();\n }\n }\n updateTokens(response, { isRefreshing = false, updateOnRefresh = true } = {}) {\n const token = this.options.token.required ? getProp(response.data, this.options.token.property) : true;\n const refreshToken = this.options.refreshToken.required ? getProp(response.data, this.options.refreshToken.property) : true;\n this.token.set(token);\n if (refreshToken && (!isRefreshing || isRefreshing && updateOnRefresh)) {\n this.refreshToken.set(refreshToken);\n }\n }\n initializeRequestInterceptor() {\n this.requestHandler.initializeRequestInterceptor(this.options.endpoints.refresh.url);\n }\n}\n\nclass Auth0Scheme extends Oauth2Scheme {\n logout() {\n this.$auth.reset();\n const opts = {\n client_id: this.options.clientId + \"\",\n returnTo: this.logoutRedirectURI\n };\n const url = this.options.endpoints.logout + \"?\" + encodeQuery(opts);\n window.location.replace(url);\n }\n}\n\nclass LaravelJWTScheme extends RefreshScheme {\n updateTokens(response, { isRefreshing = false, updateOnRefresh = false } = {}) {\n super.updateTokens(response, { isRefreshing, updateOnRefresh });\n }\n}\n\nexport { Auth, Auth0Scheme, BaseScheme, ConfigurationDocument, ConfigurationDocumentRequestError, CookieScheme, ExpiredAuthSessionError, IdToken, LaravelJWTScheme, LocalScheme, Oauth2Scheme, OpenIDConnectScheme, RefreshController, RefreshScheme, RefreshToken, RequestHandler, Storage, Token, TokenStatus, TokenStatusEnum, authMiddleware };\n","'use strict';\n\nfunction isObject(val) {\n return val !== null && typeof val === \"object\";\n}\nfunction _defu(baseObj, defaults, namespace = \".\", merger) {\n if (!isObject(defaults)) {\n return _defu(baseObj, {}, namespace, merger);\n }\n const obj = Object.assign({}, defaults);\n for (const key in baseObj) {\n if (key === \"__proto__\" || key === \"constructor\") {\n continue;\n }\n const val = baseObj[key];\n if (val === null || val === void 0) {\n continue;\n }\n if (merger && merger(obj, key, val, namespace)) {\n continue;\n }\n if (Array.isArray(val) && Array.isArray(obj[key])) {\n obj[key] = obj[key].concat(val);\n } else if (isObject(val) && isObject(obj[key])) {\n obj[key] = _defu(val, obj[key], (namespace ? `${namespace}.` : \"\") + key.toString(), merger);\n } else {\n obj[key] = val;\n }\n }\n return obj;\n}\nfunction extend(merger) {\n return (...args) => args.reduce((p, c) => _defu(p, c, \"\", merger), {});\n}\nconst defu = extend();\ndefu.fn = extend((obj, key, currentValue, _namespace) => {\n if (typeof obj[key] !== \"undefined\" && typeof currentValue === \"function\") {\n obj[key] = currentValue(obj[key]);\n return true;\n }\n});\ndefu.arrayFn = extend((obj, key, currentValue, _namespace) => {\n if (Array.isArray(obj[key]) && typeof currentValue === \"function\") {\n obj[key] = currentValue(obj[key]);\n return true;\n }\n});\ndefu.extend = extend;\n\nmodule.exports = defu;\n"],"sourceRoot":""}