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