import { createAuth0 } from "@auth0/auth0-vue"; import { defineNuxtPlugin, useRuntimeConfig } from "nuxt/app"; declare module "@auth0/auth0-vue" { interface AppState { target?: string; } } export default defineNuxtPlugin((nuxtApp) => { const config = useRuntimeConfig(); const auth0Config = config.public.auth0; if (!auth0Config?.domain || !auth0Config?.clientId) { if (process.dev) { console.warn( "Auth0 configuration is incomplete. Set AUTH0_DOMAIN and AUTH0_CLIENT_ID in your environment." ); } return; } const redirectUri = auth0Config.redirectUri ?? `${auth0Config.baseUrl}/auth/callback`; nuxtApp.vueApp.use( createAuth0({ domain: auth0Config.domain, clientId: auth0Config.clientId, authorizationParams: { redirect_uri: redirectUri, audience: auth0Config.audience || undefined, scope: auth0Config.scope, }, cacheLocation: "localstorage", useRefreshTokens: true, onRedirectCallback: (appState) => { const targetPath = appState?.target ?? "/"; if (nuxtApp.$router) { nuxtApp.$router.replace(targetPath).catch(() => { window.location.assign(targetPath); }); } else { window.location.assign(targetPath); } }, }) ); });