@auth0/auth0-vue
Version:
Auth0 SDK for Vue Applications using Authorization Code Grant Flow with PKCE
1 lines • 25.5 kB
Source Map (JSON)
{"version":3,"file":"auth0-vue.cjs","sources":["../../src/token.ts","../../src/version.ts","../../src/utils.ts","../../src/plugin.ts","../../src/guard.ts","../../src/index.ts"],"sourcesContent":["import type { InjectionKey } from 'vue';\nimport type { Auth0VueClient } from './interfaces';\n\n/**\n * @ignore\n */\nexport const AUTH0_TOKEN = '$auth0';\n\n/**\n * Injection token used to `provide` the `Auth0VueClient` instance. Can be used to pass to `inject()`\n *\n * ```js\n * inject(AUTH0_INJECTION_KEY)\n * ```\n */\nexport const AUTH0_INJECTION_KEY: InjectionKey<Auth0VueClient> =\n Symbol(AUTH0_TOKEN);\n","export default '2.3.1';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport { watchEffect } from 'vue';\n\n/**\n * @ignore\n * Run watchEffect untill the watcher returns true, then stop the watch.\n * Once it returns true, the promise will resolve.\n */\nexport function watchEffectOnceAsync<T>(watcher: () => T) {\n return new Promise<void>(resolve => {\n watchEffectOnce(watcher, resolve);\n });\n}\n\n/**\n * @ignore\n * Run watchEffect untill the watcher returns true, then stop the watch.\n * Once it returns true, it will call the provided function.\n */\nexport function watchEffectOnce<T>(watcher: () => T, fn: Function) {\n const stopWatch = watchEffect(() => {\n if (watcher()) {\n fn();\n stopWatch();\n }\n });\n}\n\n/**\n * @ignore\n * Helper function to bind methods to itself, useful when using Vue's `provide` / `inject` API's.\n */\nexport function bindPluginMethods(plugin: any, exclude: string[]) {\n Object.getOwnPropertyNames(Object.getPrototypeOf(plugin))\n .filter(method => !exclude.includes(method))\n // eslint-disable-next-line security/detect-object-injection\n .forEach(method => (plugin[method] = plugin[method].bind(plugin)));\n}\n\n/**\n * @ignore\n * Helper function to map the v1 `redirect_uri` option to the v2 `authorizationParams.redirect_uri`\n * and log a warning.\n */\nexport function deprecateRedirectUri(options?: any) {\n if (options?.redirect_uri) {\n console.warn(\n 'Using `redirect_uri` has been deprecated, please use `authorizationParams.redirect_uri` instead as `redirectUri` will be no longer supported in a future version'\n );\n options.authorizationParams = options.authorizationParams || {};\n options.authorizationParams.redirect_uri = options.redirect_uri;\n delete options.redirect_uri;\n }\n}\n","import type { App, Ref } from 'vue';\nimport { ref } from 'vue';\nimport type { Router } from 'vue-router';\nimport type {\n AppState,\n Auth0PluginOptions,\n Auth0VueClient,\n Auth0VueClientOptions,\n LogoutOptions,\n RedirectLoginOptions\n} from './interfaces';\nimport { AUTH0_INJECTION_KEY, AUTH0_TOKEN } from './token';\nimport version from './version';\nimport type {\n GetTokenSilentlyOptions,\n GetTokenSilentlyVerboseResponse,\n GetTokenWithPopupOptions,\n IdToken,\n PopupConfigOptions,\n PopupLoginOptions,\n RedirectLoginResult,\n ConnectAccountRedirectResult,\n FetcherConfig,\n Fetcher,\n CustomFetchMinimalOutput,\n MfaApiClient,\n CustomTokenExchangeOptions,\n TokenEndpointResponse,\n PasskeyApiClient,\n PasskeySignupOptions,\n PasskeyLoginOptions,\n MyAccountApiClient\n} from '@auth0/auth0-spa-js';\nimport { Auth0Client, User } from '@auth0/auth0-spa-js';\nimport { bindPluginMethods, deprecateRedirectUri } from './utils';\n\n/**\n * Helper callback that's used by default before the plugin is installed.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst PLUGIN_NOT_INSTALLED_HANDLER: any = () => {\n console.error(`Please ensure Auth0's Vue plugin is correctly installed.`);\n};\n\n/**\n * Helper client that's used by default before the plugin is installed.\n */\nconst PLUGIN_NOT_INSTALLED_CLIENT: Auth0VueClient = {\n isLoading: ref(false),\n isAuthenticated: ref(false),\n user: ref(undefined),\n idTokenClaims: ref(undefined),\n error: ref(null),\n loginWithPopup: PLUGIN_NOT_INSTALLED_HANDLER,\n loginWithRedirect: PLUGIN_NOT_INSTALLED_HANDLER,\n loginWithCustomTokenExchange: PLUGIN_NOT_INSTALLED_HANDLER,\n getAccessTokenSilently: PLUGIN_NOT_INSTALLED_HANDLER,\n getAccessTokenWithPopup: PLUGIN_NOT_INSTALLED_HANDLER,\n logout: PLUGIN_NOT_INSTALLED_HANDLER,\n checkSession: PLUGIN_NOT_INSTALLED_HANDLER,\n handleRedirectCallback: PLUGIN_NOT_INSTALLED_HANDLER,\n getDpopNonce: PLUGIN_NOT_INSTALLED_HANDLER,\n setDpopNonce: PLUGIN_NOT_INSTALLED_HANDLER,\n generateDpopProof: PLUGIN_NOT_INSTALLED_HANDLER,\n createFetcher: PLUGIN_NOT_INSTALLED_HANDLER,\n mfa: {\n setMFAAuthDetails: PLUGIN_NOT_INSTALLED_HANDLER,\n getAuthenticators: PLUGIN_NOT_INSTALLED_HANDLER,\n enroll: PLUGIN_NOT_INSTALLED_HANDLER,\n challenge: PLUGIN_NOT_INSTALLED_HANDLER,\n verify: PLUGIN_NOT_INSTALLED_HANDLER,\n getEnrollmentFactors: PLUGIN_NOT_INSTALLED_HANDLER\n } as unknown as MfaApiClient,\n passkey: {\n signup: PLUGIN_NOT_INSTALLED_HANDLER,\n login: PLUGIN_NOT_INSTALLED_HANDLER\n } as unknown as PasskeyApiClient,\n myAccount: {\n getFactors: PLUGIN_NOT_INSTALLED_HANDLER,\n getAuthenticationMethods: PLUGIN_NOT_INSTALLED_HANDLER,\n getAuthenticationMethod: PLUGIN_NOT_INSTALLED_HANDLER,\n updateAuthenticationMethod: PLUGIN_NOT_INSTALLED_HANDLER,\n deleteAuthenticationMethod: PLUGIN_NOT_INSTALLED_HANDLER,\n enrollmentChallenge: PLUGIN_NOT_INSTALLED_HANDLER,\n enrollmentVerify: PLUGIN_NOT_INSTALLED_HANDLER\n } as unknown as MyAccountApiClient\n};\n\n/**\n * @ignore\n */\nexport const client: Ref<Auth0VueClient> = ref(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n PLUGIN_NOT_INSTALLED_CLIENT as any\n);\n\n/**\n * @ignore\n */\nexport class Auth0Plugin implements Auth0VueClient {\n private _client!: Auth0Client;\n public isLoading: Ref<boolean> = ref(true);\n public isAuthenticated: Ref<boolean> = ref(false);\n public user: Ref<User | undefined> = ref({});\n public idTokenClaims = ref<IdToken | undefined>();\n public error = ref<Error | null>(null);\n public mfa: MfaApiClient = PLUGIN_NOT_INSTALLED_CLIENT.mfa;\n public passkey: PasskeyApiClient = PLUGIN_NOT_INSTALLED_CLIENT.passkey;\n public myAccount: MyAccountApiClient = PLUGIN_NOT_INSTALLED_CLIENT.myAccount;\n\n constructor(\n private clientOptions: Auth0VueClientOptions,\n private pluginOptions?: Auth0PluginOptions\n ) {\n // Vue Plugins can have issues when passing around the instance to `provide`\n // Therefor we need to bind all methods correctly to `this`.\n bindPluginMethods(this, ['constructor']);\n }\n\n install(app: App) {\n this._client = new Auth0Client({\n ...this.clientOptions,\n auth0Client: {\n name: 'auth0-vue',\n version: version\n }\n });\n\n this.mfa = this._client.mfa;\n this.myAccount = this._client.myAccount;\n\n const passkeyClient = this._client.passkey;\n this.passkey = {\n signup: (options: PasskeySignupOptions) => this.__proxy(() => passkeyClient.signup(options)),\n login: (options?: PasskeyLoginOptions) => this.__proxy(() => passkeyClient.login(options))\n } as unknown as PasskeyApiClient;\n\n this.__checkSession(app.config.globalProperties.$router);\n\n // eslint-disable-next-line security/detect-object-injection\n app.config.globalProperties[AUTH0_TOKEN] = this;\n app.provide(AUTH0_INJECTION_KEY, this as Auth0VueClient);\n\n client.value = this as Auth0VueClient;\n }\n\n async loginWithRedirect(options?: RedirectLoginOptions<AppState>) {\n deprecateRedirectUri(options);\n return this._client.loginWithRedirect(options);\n }\n\n async loginWithPopup(\n options?: PopupLoginOptions,\n config?: PopupConfigOptions\n ) {\n deprecateRedirectUri(options);\n return this.__proxy(() => this._client.loginWithPopup(options, config));\n }\n\n async logout(options?: LogoutOptions) {\n if (options?.openUrl || options?.openUrl === false) {\n return this.__proxy(() => this._client.logout(options));\n }\n\n return this._client.logout(options);\n }\n\n /* istanbul ignore next */\n async getAccessTokenSilently(\n options: GetTokenSilentlyOptions & { detailedResponse: true }\n ): Promise<GetTokenSilentlyVerboseResponse>;\n /* istanbul ignore next */\n async getAccessTokenSilently(\n options?: GetTokenSilentlyOptions\n ): Promise<string>;\n /* istanbul ignore next */\n async getAccessTokenSilently(\n options: GetTokenSilentlyOptions = {}\n ): Promise<string | GetTokenSilentlyVerboseResponse> {\n deprecateRedirectUri(options);\n return this.__proxy(() => this._client.getTokenSilently(options));\n }\n\n async getAccessTokenWithPopup(\n options?: GetTokenWithPopupOptions,\n config?: PopupConfigOptions\n ) {\n deprecateRedirectUri(options);\n return this.__proxy(() => this._client.getTokenWithPopup(options, config));\n }\n\n async loginWithCustomTokenExchange(\n options: CustomTokenExchangeOptions\n ): Promise<TokenEndpointResponse> {\n return this.__proxy(() =>\n this._client.loginWithCustomTokenExchange(options)\n );\n }\n\n async checkSession(options?: GetTokenSilentlyOptions) {\n return this.__proxy(() => this._client.checkSession(options));\n }\n\n async handleRedirectCallback(\n url?: string\n ): Promise<\n RedirectLoginResult<AppState> | ConnectAccountRedirectResult<AppState>\n > {\n return this.__proxy(() =>\n this._client.handleRedirectCallback<AppState>(url)\n );\n }\n\n async getDpopNonce(id?: string): Promise<string | undefined> {\n return this.__proxy(() => this._client.getDpopNonce(id));\n }\n\n async setDpopNonce(nonce: string, id?: string): Promise<void> {\n return this.__proxy(() => this._client.setDpopNonce(nonce, id));\n }\n\n async generateDpopProof(params: {\n url: string;\n method: string;\n accessToken: string;\n nonce?: string;\n }): Promise<string> {\n return this.__proxy(() => this._client.generateDpopProof(params));\n }\n\n createFetcher<TOutput extends CustomFetchMinimalOutput = Response>(\n config?: FetcherConfig<TOutput>\n ): Fetcher<TOutput> {\n return this._client.createFetcher<TOutput>(config);\n }\n\n private async __checkSession(router?: Router) {\n const search = window.location.search;\n\n try {\n if (\n (search.includes('code=') || search.includes('error=')) &&\n search.includes('state=') &&\n !this.pluginOptions?.skipRedirectCallback\n ) {\n const result = await this.handleRedirectCallback();\n const appState = result?.appState;\n const appStateTarget = appState?.target;\n const target = appStateTarget ?? '/';\n\n if (router) {\n window.history.replaceState({}, '', window.location.pathname);\n router.push(target);\n } else {\n window.history.replaceState(\n {},\n '',\n appStateTarget ?? window.location.pathname\n );\n }\n\n return result;\n } else {\n await this.checkSession();\n }\n } catch (e) {\n // __checkSession should never throw an exception as it will fail installing the plugin.\n // Instead, errors during __checkSession are propagated using the errors property on `useAuth0`.\n\n window.history.replaceState({}, '', '/');\n\n if (router) {\n router.push(this.pluginOptions?.errorPath || '/');\n }\n }\n }\n\n private async __refreshState() {\n this.isAuthenticated.value = await this._client.isAuthenticated();\n this.user.value = await this._client.getUser();\n this.idTokenClaims.value = await this._client.getIdTokenClaims();\n this.isLoading.value = false;\n }\n\n private async __proxy<T>(cb: () => T, refreshState = true) {\n let result;\n try {\n result = await cb();\n this.error.value = null;\n } catch (e) {\n this.error.value = e as Error;\n throw e;\n } finally {\n if (refreshState) {\n await this.__refreshState();\n }\n }\n\n return result;\n }\n}\n","import type { RouteLocation } from 'vue-router';\nimport { watchEffectOnceAsync } from './utils';\nimport { client as auth0Client } from './plugin';\nimport { AUTH0_TOKEN } from './token';\nimport type { Auth0VueClient } from './interfaces';\nimport type { App } from 'vue';\nimport { unref } from 'vue';\nimport type { RedirectLoginOptions } from '@auth0/auth0-spa-js';\n\nasync function createGuardHandler(\n client: Auth0VueClient,\n to: RouteLocation,\n redirectLoginOptions?: RedirectLoginOptions\n) {\n const fn = async () => {\n if (unref(client.isAuthenticated)) {\n return true;\n }\n\n await client.loginWithRedirect({\n ...redirectLoginOptions,\n appState: {\n target: to.fullPath,\n ...redirectLoginOptions?.appState\n }\n });\n\n return false;\n };\n\n if (!unref(client.isLoading)) {\n return fn();\n }\n\n await watchEffectOnceAsync(() => !unref(client.isLoading));\n\n return fn();\n}\n\n/**\n * The options used when creating an AuthGuard.\n */\nexport interface AuthGuardOptions {\n /**\n * The vue application\n */\n app?: App;\n\n /**\n * Route specific options to use when being redirected to Auth0.\n * If appState is provided, it will be merged with the guard's automatic\n * target property. Any target provided in appState will take precedence over the guard's default target.\n */\n redirectLoginOptions?: RedirectLoginOptions;\n}\n\n/**\n *\n * @param [app] The vue application\n */\nexport function createAuthGuard(\n app?: App\n): (to: RouteLocation) => Promise<boolean>;\n\n/**\n *\n * @param [options] The options used when creating an AuthGuard.\n */\nexport function createAuthGuard(\n options?: AuthGuardOptions\n): (to: RouteLocation) => Promise<boolean>;\n\nexport function createAuthGuard(\n appOrOptions?: App | AuthGuardOptions\n): (to: RouteLocation) => Promise<boolean> {\n const { app, redirectLoginOptions } =\n !appOrOptions || 'config' in appOrOptions\n ? { app: appOrOptions as App, redirectLoginOptions: undefined }\n : (appOrOptions as AuthGuardOptions);\n\n return async (to: RouteLocation) => {\n // eslint-disable-next-line security/detect-object-injection\n const auth0 = app\n ? (app.config.globalProperties[AUTH0_TOKEN] as Auth0VueClient)\n : (unref(auth0Client) as Auth0VueClient);\n\n return createGuardHandler(auth0, to, redirectLoginOptions);\n };\n}\n\nexport async function authGuard(to: RouteLocation) {\n const auth0 = unref(auth0Client) as Auth0VueClient;\n\n return createGuardHandler(auth0, to);\n}\n","import { inject } from 'vue';\nimport './global';\nimport { Auth0Plugin } from './global';\nimport type {\n Auth0VueClient,\n Auth0PluginOptions,\n Auth0VueClientOptions\n} from './global';\nimport { AUTH0_INJECTION_KEY, AUTH0_TOKEN } from './token';\nimport { deprecateRedirectUri } from './utils';\n\nexport * from './global';\nexport { AUTH0_INJECTION_KEY } from './token';\n\ndeclare module 'vue' {\n export interface ComponentCustomProperties {\n [AUTH0_TOKEN]: Auth0VueClient;\n }\n}\n\n/**\n * Creates the Auth0 plugin.\n *\n * @param clientOptions The Auth Vue Client Options\n * @param pluginOptions Additional Plugin Configuration Options\n * @returns An instance of Auth0Plugin\n */\nexport function createAuth0(\n clientOptions: Auth0VueClientOptions,\n pluginOptions?: Auth0PluginOptions\n) {\n deprecateRedirectUri(clientOptions);\n return new Auth0Plugin(clientOptions, pluginOptions);\n}\n\n/**\n * Returns the registered Auth0 instance using Vue's `inject`.\n * @returns An instance of Auth0VueClient\n */\nexport function useAuth0(): Auth0VueClient {\n return inject(AUTH0_INJECTION_KEY) as Auth0VueClient;\n}\n"],"names":["watchEffect","ref","Auth0Client","unref","auth0Client","inject"],"mappings":"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"}