vue-auth3
Version:
<p align="center"> <img src="./docs/public/icon.svg" width="180px"> </p>
1 lines • 54 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/Auth.ts","../src/defaultOption.ts","../src/helpers/cookie.ts","../src/utils/index.ts","../src/helpers/storage.ts","../src/helpers/token.ts","../src/helpme/getAuthMeta.ts","../src/injectionKey.ts","../src/utils/extend.ts"],"sourcesContent":["import { computed, ComputedRef, inject } from \"vue\"\r\n\r\nimport Auth from \"./Auth\"\r\nimport { authKey } from \"./injectionKey\"\r\nimport Options from \"./type/Options\"\r\nimport AuthDriver, { defineAuthDriver } from \"./type/drivers/AuthDriver\"\r\nimport HttpDriver, { defineHttpDriver } from \"./type/drivers/HttpDriver\"\r\nimport OAuth2Driver, { defineOAuth2Driver } from \"./type/drivers/OAuth2Driver\"\r\n\r\nexport function createAuth(options: Options) {\r\n return new Auth(options)\r\n}\r\nexport function useAuth(key: symbol | string = authKey): Auth {\r\n return inject(key) as Auth\r\n}\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport function useUser<User extends object>(\r\n key: symbol | string = authKey\r\n): ComputedRef<User | null> {\r\n const auth = useAuth(key)\r\n\r\n return computed(() => {\r\n return auth.user()\r\n })\r\n}\r\n\r\nexport {\r\n defineAuthDriver,\r\n defineHttpDriver,\r\n defineOAuth2Driver,\r\n}\r\n\r\nexport type {\r\n Options,\r\n Auth,\r\n AuthDriver,\r\n HttpDriver,\r\n OAuth2Driver,\r\n}","/* eslint-disable @typescript-eslint/ban-types */\r\nimport { AxiosError } from \"axios\"\r\nimport { App, DeepReadonly, reactive, shallowRef, watch } from \"vue\"\r\nimport {\r\n RouteLocationNormalized,\r\n RouteLocationRaw,\r\n RouteMeta,\r\n} from \"vue-router\"\r\n\r\nimport __defaultOption from \"./defaultOption\"\r\nimport $cookie from \"./helpers/cookie\"\r\nimport $token from \"./helpers/token\"\r\nimport getAuthMeta from \"./helpme/getAuthMeta\"\r\nimport { authKey } from \"./injectionKey\"\r\nimport Options from \"./type/Options\"\r\nimport Roles from \"./type/Roles\"\r\nimport HttpDriver from \"./type/drivers/HttpDriver\"\r\nimport { compare, getProperty, toArray } from \"./utils\"\r\nimport extend from \"./utils/extend\"\r\n\r\nfunction logout(auth: Auth, redirect?: RouteLocationRaw) {\r\n $cookie.remove(auth, auth.options.tokenImpersonateKey)\r\n $cookie.remove(auth, auth.options.tokenDefaultKey)\r\n\r\n $token.remove(auth, auth.options.tokenImpersonateKey)\r\n $token.remove(auth, auth.options.tokenDefaultKey)\r\n\r\n $token.remove(auth, auth.options.staySignedInKey)\r\n\r\n $token.remove(auth, auth.options.userKey)\r\n\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.loaded = true\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.authenticated = false\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.data = null\r\n\r\n routerPush(auth, redirect)\r\n}\r\n\r\nfunction routerPush(auth: Auth, redirect?: RouteLocationRaw) {\r\n if (redirect) {\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n auth.options.plugins?.router?.push(redirect).catch(() => {})\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction setUserData(auth: Auth, data: any, redirect?: RouteLocationRaw) {\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.data = data\r\n\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.loaded = true\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.authenticated = true\r\n\r\n routerPush(auth, redirect)\r\n}\r\n\r\ntype Redirect =\r\n | RouteLocationRaw\r\n | ((to: RouteLocationNormalized) => RouteLocationRaw)\r\nfunction processTransitionEach(\r\n auth: Auth,\r\n to: RouteLocationNormalized,\r\n authMeta: RouteMeta[\"auth\"] | null,\r\n cb: (to?: RouteLocationRaw) => void\r\n) {\r\n // eslint-disable-next-line functional/no-let\r\n let authRedirect: Redirect =\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (authMeta as any)?.redirect ?? auth.options.authRedirect\r\n // eslint-disable-next-line functional/no-let\r\n let forbiddenRedirect: Redirect =\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (authMeta as any)?.forbiddenRedirect ||\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (authMeta as any)?.redirect ||\r\n auth.options.forbiddenRedirect\r\n // eslint-disable-next-line functional/no-let\r\n let notFoundRedirect: Redirect =\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (authMeta as any)?.notFoundRedirect ||\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (authMeta as any)?.redirect ||\r\n auth.options.notFoundRedirect\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const rolesKey = (authMeta as any)?.rolesKey || auth.options.rolesKey\r\n\r\n const roles = toArray(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (authMeta as any)?.roles !== undefined\r\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (authMeta as any).roles\r\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (authMeta as any)\r\n ) as string[] | boolean | undefined\r\n\r\n if (\r\n roles === true ||\r\n (typeof roles === \"object\" && roles !== null) // is object or array\r\n ) {\r\n if (!auth.check()) {\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.tStatusType = 401\r\n\r\n if (typeof authRedirect === \"function\") {\r\n authRedirect = authRedirect(to)\r\n }\r\n\r\n cb(authRedirect)\r\n\r\n return\r\n }\r\n if (\r\n typeof roles === \"object\" &&\r\n !compare(roles, getProperty(auth.state.data || {}, rolesKey))\r\n ) {\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.tStatusType = 403\r\n\r\n if (typeof forbiddenRedirect === \"function\") {\r\n forbiddenRedirect = forbiddenRedirect(to)\r\n }\r\n\r\n cb(forbiddenRedirect)\r\n\r\n return\r\n }\r\n\r\n // eslint-disable-next-line functional/immutable-data\r\n auth._redirect.value = auth.tStatusType\r\n ? {\r\n type: auth.tStatusType,\r\n from: auth.tPrev,\r\n to: auth.tCurrent,\r\n }\r\n : null\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.tStatusType = null\r\n\r\n cb()\r\n\r\n return\r\n }\r\n if (roles === false && auth.check()) {\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.tStatusType = 404\r\n\r\n if (typeof notFoundRedirect === \"function\") {\r\n notFoundRedirect = notFoundRedirect(to)\r\n }\r\n\r\n cb(notFoundRedirect)\r\n\r\n return\r\n }\r\n\r\n // eslint-disable-next-line functional/immutable-data\r\n auth._redirect.value = auth.tStatusType\r\n ? {\r\n type: auth.tStatusType,\r\n from: auth.tPrev,\r\n to: auth.tCurrent,\r\n }\r\n : null\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.tStatusType = null\r\n\r\n cb()\r\n}\r\n\r\nfunction setRemember(auth: Auth, val?: boolean) {\r\n if (val) {\r\n $token.set(auth, auth.options.rememberKey, val, false)\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.remember = val\r\n } else {\r\n $token.remove(auth, auth.options.rememberKey)\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.remember = null\r\n }\r\n}\r\n\r\nfunction setStaySignedIn(auth: Auth, staySignedIn?: boolean) {\r\n if (staySignedIn === true) {\r\n $token.set(auth, auth.options.staySignedInKey, true, false)\r\n } else {\r\n $token.remove(auth, auth.options.staySignedInKey)\r\n }\r\n}\r\n\r\nfunction processImpersonate(\r\n auth: Auth,\r\n defaultToken: string | null,\r\n redirect?: RouteLocationRaw\r\n) {\r\n if (auth.token()) {\r\n $token.set(\r\n auth,\r\n auth.options.tokenImpersonateKey,\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n auth.token()!,\r\n $token.get(auth, auth.options.staySignedInKey) ? false : true\r\n )\r\n }\r\n $token.set(\r\n auth,\r\n auth.options.tokenDefaultKey,\r\n defaultToken,\r\n $token.get(auth, auth.options.staySignedInKey) ? false : true\r\n )\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.impersonating = true\r\n\r\n routerPush(auth, redirect)\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction processUnimpersonate(auth: Auth, redirect?: any) {\r\n $token.remove(auth, auth.options.tokenImpersonateKey)\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.impersonating = false\r\n\r\n routerPush(auth, redirect)\r\n}\r\n\r\nfunction parseRedirectUri(uri = \"\"): string {\r\n if (/^https?:\\/\\//.test(uri)) {\r\n return uri\r\n }\r\n\r\n const url = `${location.protocol}//${window.location.hostname}${\r\n location.port ? `:${location.port}` : \"\"\r\n }`\r\n return `${url}/${uri.replace(/^\\/|\\/$/g, \"\")}`\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst isAxiosError = (err: any): err is AxiosError => err?.isAxiosError\r\nfunction authErrHandler(auth: Auth, err: AxiosError | Response) {\r\n const status = isAxiosError(err) ? err.response?.status : err.status\r\n\r\n if (status === 401) {\r\n const isTokenExpired = !$token.get(auth, null)\r\n\r\n if (isTokenExpired) auth.logout().catch(() => logout(auth))\r\n }\r\n\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.offline = true\r\n}\r\n\r\n// eslint-disable-next-line functional/no-let\r\nlet syning: Promise<void> | null = null\r\nfunction syncStorage(auth: Auth) {\r\n if (syning) return syning\r\n\r\n return (syning = _syncStorage(auth))\r\n}\r\nasync function _syncStorage(auth: Auth) {\r\n const isTokenExpired = !$token.get(auth, null)\r\n\r\n if (isTokenExpired && auth.state.authenticated) {\r\n logout(auth)\r\n }\r\n\r\n // eslint-disable-next-line functional/no-let\r\n let promiseRefresh: Promise<unknown> | null = null\r\n if (!isTokenExpired && !auth.state.loaded) {\r\n if (auth.options.refreshToken.enabled) {\r\n promiseRefresh = auth.refresh().catch((err) => authErrHandler(auth, err))\r\n\r\n if (!auth.options.refreshToken.enabledInBackground) await promiseRefresh\r\n }\r\n }\r\n\r\n if (auth.state.authenticated === null && $token.get(auth, null)) {\r\n const userCache = $token.get(auth, auth.options.userKey) // user data on save\r\n\r\n if (userCache && auth.state.cacheUser) {\r\n // if usercache exists and this session cacheUser active\r\n setUserData(auth, userCache)\r\n }\r\n\r\n if (auth.options.fetchData.enabled) {\r\n // eslint-disable-next-line functional/no-let\r\n let fetchPromise: Promise<unknown> | null = null\r\n if (auth.options.fetchData.waitRefresh && promiseRefresh)\r\n fetchPromise = promiseRefresh.then(() =>\r\n auth.fetch().catch((err) => authErrHandler(auth, err))\r\n )\r\n else fetchPromise = auth.fetch().catch((err) => authErrHandler(auth, err))\r\n\r\n if (!auth.options.fetchData.enabledInBackground) await fetchPromise\r\n }\r\n } else {\r\n $token.remove(auth, auth.options.userKey)\r\n // eslint-disable-next-line functional/immutable-data\r\n auth.state.loaded = true\r\n }\r\n}\r\n\r\nexport default class Auth {\r\n public readonly state = reactive({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n data: <any | null>null,\r\n loaded: false,\r\n offline: false,\r\n authenticated: <boolean | null>null, // TODO: false ?\r\n impersonating: <boolean | null>null,\r\n remember: <boolean | null>null,\r\n cacheUser: <boolean>false,\r\n })\r\n public _redirect = shallowRef<{\r\n type: number | null\r\n from: RouteLocationNormalized | null\r\n to: RouteLocationNormalized | null\r\n } | null>(null)\r\n\r\n public readonly options: typeof __defaultOption & DeepReadonly<Options>\r\n public currentToken: string | null = null\r\n public tPrev: RouteLocationNormalized | null = null\r\n public tCurrent: RouteLocationNormalized | null = null\r\n public tStatusType: number | null = null\r\n\r\n public install(app: App, key: symbol | string = authKey) {\r\n app.provide(key, this)\r\n\r\n // eslint-disable-next-line functional/immutable-data\r\n app.config.globalProperties.$auth = this\r\n }\r\n\r\n constructor(options: Options) {\r\n this.options = extend(__defaultOption, 2, options)\r\n\r\n this.state.cacheUser = this.options.fetchData.cache ?? false\r\n\r\n // eslint-disable-next-line functional/no-let\r\n let dataWatcher: ReturnType<typeof watch> | null\r\n watch(\r\n () => this.state.cacheUser,\r\n (value) => {\r\n if (value) {\r\n //cache init ;\r\n dataWatcher = watch(\r\n () => this.state.data,\r\n (data) => {\r\n if (this.token())\r\n $token.set(this, this.options.userKey, data, false)\r\n },\r\n {\r\n deep: true,\r\n }\r\n )\r\n } else {\r\n dataWatcher?.()\r\n $token.remove(this, this.options.userKey)\r\n }\r\n },\r\n {\r\n immediate: true,\r\n }\r\n )\r\n\r\n // _initRefreshInterval()\r\n if (\r\n (this.options.refreshToken.enabled ||\r\n this.options.refreshToken.enabledInBackground) &&\r\n this.options.refreshToken.interval !== false &&\r\n this.options.refreshToken.interval !== void 0 &&\r\n this.options.refreshToken.interval > 0\r\n ) {\r\n setInterval(() => {\r\n if (\r\n (this.options.refreshToken.enabled ||\r\n this.options.refreshToken.enabledInBackground) &&\r\n !!$token.get(this, null)\r\n ) {\r\n this.refresh().catch((err) => authErrHandler(this, err))\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n }, this.options.refreshToken.interval! * 1000 * 60) // In minutes.\r\n }\r\n\r\n if (this.options.initSync) syncStorage(this)\r\n\r\n this.options.plugins?.router?.beforeEach(async (to, from, next) => {\r\n this.tPrev = this.tCurrent\r\n this.tCurrent = from\r\n\r\n await syncStorage(this)\r\n\r\n const authMeta = getAuthMeta(to)\r\n\r\n processTransitionEach(this, to, authMeta, (redirect) => {\r\n if (!redirect) {\r\n next()\r\n return\r\n }\r\n\r\n next(redirect)\r\n })\r\n })\r\n }\r\n\r\n async http<OtherOptions extends object>(\r\n options: OtherOptions &\r\n Parameters<HttpDriver[\"request\"]>[0] & {\r\n ignoreVueAuth?: boolean\r\n impersonating?: boolean\r\n }\r\n ) {\r\n if (!options.ignoreVueAuth) {\r\n // eslint-disable-next-line functional/no-let\r\n let tokenName\r\n\r\n if (options.impersonating === false && this.impersonating()) {\r\n tokenName = this.options.tokenDefaultKey\r\n }\r\n\r\n const token = $token.get<string | null>(this, tokenName ?? null)\r\n\r\n if (token) {\r\n const { data, headers } = this.options.drivers.auth.request(\r\n this,\r\n {\r\n data: options.data,\r\n headers: options.headers || {},\r\n },\r\n token\r\n )\r\n\r\n // eslint-disable-next-line functional/immutable-data\r\n options.data = data\r\n // eslint-disable-next-line functional/immutable-data\r\n options.headers = headers\r\n }\r\n }\r\n\r\n const response = await this.options.drivers.http.request(options)\r\n\r\n if (options.ignoreVueAuth) {\r\n return response\r\n }\r\n\r\n if (this.options.drivers.http.invalidToken?.(this, response)) {\r\n logout(this, this.redirect()?.to || this.options.authRedirect)\r\n }\r\n\r\n const token = this.options.drivers.auth.response(this, response)\r\n\r\n if (token) {\r\n $token.set(\r\n this,\r\n null,\r\n token,\r\n $token.get(this, this.options.staySignedInKey) ? false : true\r\n )\r\n }\r\n\r\n return response\r\n }\r\n\r\n ready() {\r\n return this.state.loaded\r\n }\r\n\r\n private __timer_load: NodeJS.Timer | null | undefined\r\n load() {\r\n return new Promise<void>((resolve) => {\r\n this.__timer_load = setInterval(() => {\r\n if (this.state.loaded) {\r\n clearInterval(this.__timer_load as unknown as number)\r\n\r\n resolve()\r\n }\r\n }, 50)\r\n })\r\n }\r\n\r\n cancel() {\r\n clearInterval(this.__timer_load as unknown as number)\r\n }\r\n\r\n redirect() {\r\n return this._redirect.value\r\n }\r\n\r\n user<U extends object>(data?: U): U | null {\r\n if (data !== undefined) {\r\n setUserData(this, data)\r\n }\r\n\r\n return this.state.data\r\n }\r\n offline() {\r\n return this.state.offline\r\n }\r\n\r\n check(role?: Roles, key: string = this.options.rolesKey) {\r\n if (this.state.authenticated) {\r\n if (role) {\r\n return compare(role, getProperty(this.state.data || {}, key))\r\n }\r\n\r\n return true\r\n }\r\n\r\n return false\r\n }\r\n\r\n impersonating() {\r\n const impersonating = $token.get(this, this.options.tokenImpersonateKey)\r\n ? true\r\n : false\r\n\r\n if (this.state.impersonating === null) {\r\n // eslint-disable-next-line functional/immutable-data\r\n this.state.impersonating = impersonating\r\n }\r\n\r\n return this.state.impersonating\r\n }\r\n\r\n token(name: string | null = null, token?: string | null, expires?: boolean) {\r\n if (token !== undefined) {\r\n if (token === null) {\r\n $token.remove(this, name)\r\n } else {\r\n expires =\r\n expires ??\r\n ($token.get(this, this.options.staySignedInKey) ? false : true)\r\n\r\n $token.set(this, name, token, expires)\r\n }\r\n }\r\n\r\n return $token.get<string | null>(this, name)\r\n }\r\n\r\n /**\r\n * @request auth/user\r\n * @returns Promise<user data> info user data (exm: {\r\n * \r\n username: \"Tachibana Shin\",\r\n\r\n email: \"asjwepit32r@duck.com\"\r\n\r\n })\r\n */\r\n async fetch<OtherOptions extends object>(\r\n data?: OtherOptions & Partial<Options[\"fetchData\"]>\r\n ) {\r\n const fetchData = {\r\n ...this.options.fetchData,\r\n ...data,\r\n cache: data?.cache ?? this.state.cacheUser,\r\n }\r\n const response = await this.http(fetchData)\r\n\r\n // eslint-disable-next-line functional/immutable-data\r\n this.state.cacheUser = fetchData.cache ?? this.state.cacheUser\r\n\r\n const keyUser = fetchData.keyUser\r\n setUserData(\r\n this,\r\n keyUser ? response.data[keyUser] : response.data,\r\n data?.redirect\r\n )\r\n\r\n return response\r\n }\r\n\r\n /**\r\n * @request auth/refresh\r\n * @returns Promise exists token refresh in Authorizer\r\n */\r\n public refresh<OtherOptions extends object>(\r\n data?: OtherOptions & Required<Options>[\"refreshToken\"]\r\n ) {\r\n return this.http({\r\n ...this.options.refreshToken,\r\n ...(data || {}),\r\n })\r\n }\r\n\r\n async register<OtherOptions extends object>(\r\n data?: OtherOptions & Required<Options>[\"registerData\"]\r\n ) {\r\n const registerData = {\r\n ...this.options.registerData,\r\n ...data,\r\n }\r\n\r\n if (registerData.autoLogin !== true) {\r\n setRemember(this, registerData.remember)\r\n setStaySignedIn(this, registerData.staySignedIn)\r\n }\r\n\r\n const response = await this.http(registerData)\r\n\r\n if (registerData.autoLogin) {\r\n await this.login(data)\r\n\r\n return response\r\n }\r\n\r\n const keyUser =\r\n \"keyUser\" in registerData\r\n ? registerData.keyUser\r\n : this.options.fetchData.keyUser\r\n setUserData(\r\n this,\r\n keyUser ? response.data[keyUser] : response.data,\r\n registerData.redirect\r\n )\r\n\r\n return response\r\n }\r\n\r\n async login<OtherOptions extends object>(\r\n data?: OtherOptions & Required<Options>[\"loginData\"]\r\n ) {\r\n const loginData = {\r\n ...this.options.loginData,\r\n ...data,\r\n }\r\n\r\n setRemember(this, loginData.remember)\r\n setStaySignedIn(this, loginData.staySignedIn)\r\n\r\n const response = await this.http(loginData)\r\n\r\n if (loginData.fetchUser && this.options.fetchData.enabled) {\r\n await this.fetch({\r\n redirect: loginData.redirect,\r\n cache: loginData.cacheUser,\r\n })\r\n } else {\r\n const keyUser =\r\n \"keyUser\" in loginData\r\n ? loginData.keyUser\r\n : this.options.fetchData.keyUser\r\n setUserData(\r\n this,\r\n keyUser ? response.data[keyUser] : response.data,\r\n loginData.redirect\r\n )\r\n }\r\n\r\n return response\r\n }\r\n\r\n remember(val: boolean) {\r\n if (val) {\r\n setRemember(this, val)\r\n }\r\n\r\n const remember = $token.get<boolean>(this, this.options.rememberKey)\r\n\r\n if (this.state.remember === undefined) {\r\n // eslint-disable-next-line functional/immutable-data\r\n this.state.remember = remember ?? false\r\n }\r\n\r\n return this.state.remember\r\n }\r\n\r\n unremember() {\r\n setRemember(this, void 0)\r\n }\r\n\r\n async logout<OtherOptions extends object>(\r\n data?: OtherOptions & Required<Options>[\"logoutData\"]\r\n ) {\r\n const logoutData = {\r\n ...this.options.logoutData,\r\n ...data,\r\n }\r\n\r\n if (logoutData.makeRequest) {\r\n await this.http(logoutData)\r\n }\r\n\r\n logout(this, logoutData.redirect)\r\n }\r\n\r\n async impersonate<OtherOptions extends object>(\r\n data?: OtherOptions & Required<Options>[\"impersonateData\"]\r\n ) {\r\n const impersonateData = {\r\n ...this.options.impersonateData,\r\n ...data,\r\n }\r\n const token = this.token()\r\n\r\n await this.http(impersonateData)\r\n\r\n processImpersonate(this, token)\r\n\r\n if (impersonateData.fetchUser || this.options.fetchData.enabled) {\r\n await this.fetch({\r\n redirect: impersonateData.redirect,\r\n cache: impersonateData.cacheUser,\r\n })\r\n\r\n return\r\n }\r\n\r\n routerPush(this, impersonateData.redirect)\r\n }\r\n\r\n async unimpersonate<OtherOptions extends object>(\r\n data?: OtherOptions & Required<Options>[\"unimpersonateData\"]\r\n ) {\r\n const unimpersonateData = {\r\n ...this.options.unimpersonateData,\r\n ...data,\r\n }\r\n\r\n if (unimpersonateData.makeRequest) {\r\n await this.http(unimpersonateData)\r\n }\r\n\r\n processUnimpersonate(this)\r\n\r\n if (unimpersonateData.fetchUser || this.options.fetchData.enabled) {\r\n await this.fetch({\r\n redirect: unimpersonateData.redirect,\r\n cache: unimpersonateData.cacheUser,\r\n })\r\n\r\n return\r\n }\r\n }\r\n\r\n oauth2(\r\n type: string | number,\r\n data: {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n code: any\r\n state: string\r\n params: {\r\n [x: string]: string | number | boolean\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n state?: any\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n redirect_uri?: any\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n url: any\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n window: any\r\n }\r\n ) {\r\n const params: string[] = []\r\n\r\n if (data.code) {\r\n try {\r\n if (data.state) {\r\n // eslint-disable-next-line functional/immutable-data\r\n data.state = JSON.parse(decodeURIComponent(data.state))\r\n }\r\n } catch (e) {\r\n console.error(\r\n \"vue-auth:error There was an issue retrieving the state data.\"\r\n )\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n data = extend(this.options.oauth2Data, 2, data.state, data) as any\r\n\r\n return this.login(data)\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion\r\n data = extend((this.options.drivers.oauth2 as any)![type] as any, 2, data)\r\n\r\n // eslint-disable-next-line functional/immutable-data\r\n data.params.state = JSON.stringify(data.params.state || {})\r\n // eslint-disable-next-line functional/immutable-data\r\n data.params.redirect_uri = parseRedirectUri(data.params.redirect_uri)\r\n\r\n Object.keys(data.params).forEach((key) => {\r\n // eslint-disable-next-line functional/immutable-data\r\n params.push(`${key}=${encodeURIComponent(data.params[key])}`)\r\n })\r\n\r\n window.open(\r\n `${data.url}?${params.join(\"&\")}`,\r\n (data.window || {}).name || \"_self\",\r\n (data.window || {}).specs || {}\r\n )\r\n }\r\n\r\n enableImpersonate() {\r\n if (this.impersonating()) {\r\n this.currentToken = null\r\n }\r\n }\r\n\r\n disableImpersonate() {\r\n if (this.impersonating()) {\r\n this.currentToken = this.options.tokenDefaultKey\r\n }\r\n }\r\n}\r\n","const __defaultOption = {\r\n // Variables\r\n\r\n rolesKey: \"roles\",\r\n rememberKey: \"auth_remember\",\r\n userKey: \"auth_user\",\r\n staySignedInKey: \"auth_stay_signed_in\",\r\n tokenDefaultKey: \"auth_token_default\",\r\n tokenImpersonateKey: \"auth_token_impersonate\",\r\n stores: [\"storage\", \"cookie\"],\r\n\r\n cookie: {\r\n path: \"/\",\r\n domain: void 0,\r\n secure: true,\r\n expires: 12096e5,\r\n sameSite: \"None\",\r\n },\r\n\r\n // Redirects\r\n\r\n authRedirect: \"/login\",\r\n forbiddenRedirect: \"/403\",\r\n notFoundRedirect: \"/404\",\r\n\r\n // Http\r\n\r\n registerData: {\r\n url: \"auth/register\",\r\n method: \"POST\",\r\n redirect: \"/login\",\r\n autoLogin: false,\r\n staySignedIn: true,\r\n },\r\n loginData: {\r\n url: \"auth/login\",\r\n method: \"POST\",\r\n redirect: \"/\",\r\n fetchUser: true,\r\n staySignedIn: true,\r\n },\r\n logoutData: {\r\n url: \"auth/logout\",\r\n method: \"POST\",\r\n redirect: \"/\",\r\n makeRequest: true,\r\n },\r\n fetchData: {\r\n url: \"auth/user\",\r\n method: \"GET\",\r\n enabled: true,\r\n },\r\n refreshToken: {\r\n url: \"auth/refresh\",\r\n method: \"GET\",\r\n enabled: true,\r\n interval: <number|boolean|undefined>30,\r\n },\r\n impersonateData: {\r\n url: \"auth/impersonate\",\r\n method: \"POST\",\r\n redirect: \"/\",\r\n fetchUser: true,\r\n },\r\n unimpersonateData: {\r\n url: \"auth/unimpersonate\",\r\n method: \"POST\",\r\n redirect: \"/admin\",\r\n fetchUser: true,\r\n makeRequest: false,\r\n },\r\n oauth2Data: {\r\n url: \"auth/social\",\r\n method: \"POST\",\r\n redirect: \"/\",\r\n fetchUser: true,\r\n },\r\n} as const\r\n\r\nexport default __defaultOption\r\n","import Auth from \"../Auth\"\r\nimport Options from \"../type/Options\"\r\n\r\nfunction setCookie<T>(\r\n auth: Auth,\r\n key: string,\r\n value: T,\r\n expires: boolean,\r\n time?: number\r\n): void {\r\n const options = (auth.options as unknown as Options).cookie\r\n\r\n // eslint-disable-next-line functional/no-let\r\n let cookie = `${key}=${JSON.stringify(value)};`\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n for (const [prop, val] of Object.entries(options!)) {\r\n // eslint-disable-next-line functional/no-let\r\n let value = typeof val === \"function\" ? val() : val\r\n\r\n // Just skip if unset or false.\r\n if (value === false || value == null) {\r\n continue\r\n }\r\n\r\n if (prop === \"expires\") {\r\n value = expires\r\n ? \"\"\r\n : getDate(time ?? (value as Exclude<typeof value, true>))\r\n }\r\n\r\n if (value === true) {\r\n cookie += `${prop};`\r\n continue\r\n }\r\n\r\n // Default key/val.\r\n\r\n cookie += `${prop}=${value};`\r\n }\r\n\r\n // eslint-disable-next-line functional/immutable-data\r\n document.cookie = cookie\r\n}\r\n\r\nfunction getDate(val: string | number | Date): string {\r\n if (typeof val === \"string\") {\r\n return val as string\r\n }\r\n\r\n return new Date(\r\n new Date().getTime() +\r\n (val instanceof Date ? val.getTime() : (val as number))\r\n ).toUTCString()\r\n}\r\n\r\nfunction get(auth: Auth, key: string): string | null {\r\n return JSON.parse(\r\n document.cookie\r\n .replace(/;\\s+/g, \";\")\r\n .split(\";\")\r\n .map((s) => {\r\n return s.replace(/\\s+=\\s+/g, \"=\").split(\"=\")\r\n })\r\n .find(([keyTest]) => {\r\n return keyTest === key\r\n // eslint-disable-next-line quotes\r\n })?.[1] ?? '\"null\"'\r\n )\r\n}\r\n\r\nfunction remove(auth: Auth, key: string): void {\r\n setCookie(auth, key, \"\", false, -864e5)\r\n}\r\n\r\nconst cookie = {\r\n get,\r\n set: setCookie,\r\n remove,\r\n}\r\n\r\nexport default cookie\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport function isObject(val: any): val is object {\r\n if (val !== null && typeof val === \"object\" && val.constructor !== Array) {\r\n return true\r\n }\r\n\r\n return false\r\n}\r\n\r\nexport function toArray<T = any>(val: T): T[] {\r\n return typeof val === \"string\" || typeof val === \"number\"\r\n ? [val]\r\n : (val as any)\r\n}\r\n\r\nexport function compare<O, T>(one: O, two: T): boolean {\r\n if (isObject(one) && isObject(two)) {\r\n for (const key in one) {\r\n if (compare(one[key], (two as any)[key])) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n const aone = toArray(one)\r\n const atwo = toArray(two)\r\n\r\n // eslint-disable-next-line functional/no-let\r\n for (let i = 0, ii = aone.length; i < ii; i++) {\r\n if (atwo.includes((aone as any)[i])) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n}\r\n\r\nexport function isLocalStorage() {\r\n try {\r\n if (!window.localStorage) {\r\n // eslint-disable-next-line functional/no-throw-statement\r\n throw \"exception\"\r\n }\r\n\r\n localStorage.setItem(\"storage_test\", \"1\")\r\n localStorage.removeItem(\"storage_test\")\r\n\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport function isSessionStorage() {\r\n try {\r\n if (!window.sessionStorage) {\r\n // eslint-disable-next-line functional/no-throw-statement\r\n throw \"exception\"\r\n }\r\n\r\n sessionStorage.setItem(\"storage_test\", \"1\")\r\n sessionStorage.removeItem(\"storage_test\")\r\n\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\nexport function isCookieStorage() {\r\n return true\r\n}\r\n\r\nexport function getProperty(obj: any, desc: string): any {\r\n const arr = desc.split(\".\")\r\n\r\n while (arr.length) {\r\n // eslint-disable-next-line functional/immutable-data\r\n obj = obj[arr.shift()!]\r\n }\r\n\r\n return obj\r\n}\r\n","function set<T>(key: string, value: T, expires: boolean): void {\r\n const $ = JSON.stringify(value)\r\n\r\n if (expires) {\r\n sessionStorage.setItem(key, $)\r\n return\r\n }\r\n\r\n localStorage.setItem(key, $)\r\n}\r\n\r\nfunction get<T>(key: string): T | null {\r\n const $ = sessionStorage.getItem(key) || localStorage.getItem(key)\r\n\r\n if ($ === null) {\r\n return null\r\n }\r\n\r\n return JSON.parse($)\r\n}\r\n\r\nfunction remove(key: string): void {\r\n localStorage.removeItem(key)\r\n sessionStorage.removeItem(key)\r\n}\r\n\r\nconst storage = {\r\n get,\r\n set,\r\n remove,\r\n}\r\n\r\nexport default storage\r\n","import Auth from \"../Auth\"\r\nimport Options from \"../type/Options\"\r\nimport { isCookieStorage, isLocalStorage, isSessionStorage } from \"../utils\"\r\n\r\nimport cookie from \"./cookie\"\r\nimport storage from \"./storage\"\r\n\r\nfunction getTokenKey(key: string | null, auth: Auth): string {\r\n key = key || auth.currentToken\r\n\r\n if (key) {\r\n return key\r\n }\r\n\r\n if (auth.impersonating()) {\r\n return auth.options.tokenImpersonateKey\r\n }\r\n\r\n return auth.options.tokenDefaultKey\r\n}\r\n\r\nfunction get<T>(auth: Auth, key: string | null): T | null {\r\n const keyI = getTokenKey(key, auth)\r\n\r\n // eslint-disable-next-line functional/no-let\r\n for (let i = 0; i < auth.options.stores.length; i++) {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const store = (auth.options as unknown as Options).stores![i]\r\n // eslint-disable-next-line functional/no-let\r\n let val\r\n\r\n if (typeof store === \"object\") {\r\n val = store.get(keyI)\r\n }\r\n if (store === \"storage\" && isLocalStorage() && isSessionStorage()) {\r\n val = storage.get(keyI)\r\n }\r\n if (store === \"cookie\" && isCookieStorage()) {\r\n val = cookie.get(auth, keyI)\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n if (val !== void 0) return val as any\r\n }\r\n\r\n return null\r\n}\r\n\r\nfunction set<T>(\r\n auth: Auth,\r\n key: string | null,\r\n value: T,\r\n expires: boolean\r\n): void {\r\n const keyI = getTokenKey(key, auth)\r\n // eslint-disable-next-line functional/no-let\r\n for (let i = 0; i < auth.options.stores.length; i++) {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const store = (auth.options as unknown as Options).stores![i]\r\n\r\n if (typeof store === \"object\") {\r\n store.set(keyI, value, expires, auth)\r\n }\r\n if (store === \"storage\" && isLocalStorage() && isSessionStorage()) {\r\n storage.set(keyI, value, expires)\r\n }\r\n if (store === \"cookie\" && isCookieStorage()) {\r\n cookie.set(auth, keyI, value, expires)\r\n }\r\n }\r\n}\r\n\r\nfunction remove(auth: Auth, key: string | null) {\r\n // eslint-disable-next-line functional/no-let\r\n for (let i = 0; i < auth.options.stores.length; i++) {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const store = (auth.options as unknown as Options).stores![i]\r\n const keyI = getTokenKey(key, auth)\r\n\r\n if (typeof store === \"object\") {\r\n store.remove(keyI)\r\n }\r\n if (store === \"storage\" && isLocalStorage() && isSessionStorage()) {\r\n storage.remove(keyI)\r\n }\r\n if (store === \"cookie\" && isCookieStorage()) {\r\n cookie.remove(auth, keyI)\r\n }\r\n }\r\n}\r\n\r\nconst token = {\r\n get,\r\n set,\r\n remove,\r\n}\r\n\r\nexport default token\r\n","import { RouteLocationNormalized } from \"vue-router\"\r\n\r\nexport default function getAuthMeta({ matched }: RouteLocationNormalized) {\r\n // eslint-disable-next-line functional/no-let\r\n let auth\r\n const authRoutes = matched.filter(({ meta }) =>\r\n Object.prototype.hasOwnProperty.call(meta, \"auth\")\r\n )\r\n\r\n // matches the nested route, the last one in the list\r\n if (authRoutes.length) {\r\n auth = authRoutes[authRoutes.length - 1].meta.auth\r\n }\r\n\r\n return auth ?? null\r\n}\r\n","export const authKey = typeof Symbol !== \"undefined\" ? Symbol(\"auth\") : \"auth\"\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// eslint-disable-next-line functional/functional-parameters\r\nexport default function extend<T>(target: T, deep = 1, ...objs: any): any {\r\n objs.forEach((obj: any) => {\r\n for (const prop in obj) {\r\n if (\r\n deep > 0 &&\r\n typeof (target as any)[prop] === \"object\" &&\r\n (target as any)[prop] !== null &&\r\n typeof obj[prop] === \"object\" &&\r\n obj[prop] !== null\r\n ) {\r\n extend((target as any)[prop], deep - 1, obj[prop])\r\n\r\n continue\r\n }\r\n\r\n // eslint-disable-next-line functional/immutable-data\r\n ;(target as any)[prop] = obj[prop]\r\n }\r\n })\r\n\r\n return target\r\n}\r\n"],"mappings":"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","names":["cookie","value","get","remove","get","set","remove","token"]}