@strands.gg/accui 2.1.4 → 2.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +0 -1
- package/dist/nuxt/module.d.ts +0 -1
- package/dist/nuxt/runtime/composables/useAuthenticatedFetch.d.ts +0 -1
- package/dist/nuxt/runtime/composables/useStrandsAuth.d.ts +0 -1
- package/dist/nuxt/runtime/middleware/auth.d.ts +0 -1
- package/dist/nuxt/runtime/middleware/auth.global.d.ts +0 -1
- package/dist/nuxt/runtime/middleware/guest.d.ts +0 -1
- package/dist/nuxt/runtime/plugin.client.d.ts +0 -1
- package/dist/nuxt/runtime/plugin.server.d.ts +0 -1
- package/dist/nuxt/runtime/plugins/auth-interceptor.client.d.ts +0 -1
- package/dist/nuxt/types.d.ts +0 -1
- package/dist/nuxt-v4/module.d.ts +0 -1
- package/dist/nuxt-v4/runtime/composables/useAuthenticatedFetch.d.ts +0 -1
- package/dist/nuxt-v4/runtime/composables/useStrandsAuth.d.ts +0 -1
- package/dist/nuxt-v4/runtime/middleware/auth.global.d.ts +0 -1
- package/dist/nuxt-v4/runtime/plugin.client.d.ts +0 -1
- package/dist/nuxt-v4/runtime/plugin.server.d.ts +0 -1
- package/dist/nuxt-v4/runtime/plugins/auth-interceptor.client.d.ts +0 -1
- package/dist/nuxt-v4/types.d.ts +0 -1
- package/dist/nuxt-v4.d.ts +0 -1
- package/dist/nuxt.d.ts +0 -1
- package/dist/shared/defaults.d.ts +0 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/slots.d.ts +0 -1
- package/dist/utils/validation.d.ts +0 -1
- package/dist/vue/components/SignedIn.vue.d.ts +0 -1
- package/dist/vue/components/SignedOut.vue.d.ts +0 -1
- package/dist/vue/components/StrandsAuth.vue.d.ts +0 -1
- package/dist/vue/components/StrandsBackupCodesModal.vue.d.ts +0 -1
- package/dist/vue/components/StrandsCompleteSignUp.vue.d.ts +0 -1
- package/dist/vue/components/StrandsConfigProvider.vue.d.ts +0 -1
- package/dist/vue/components/StrandsConfirmModal.vue.d.ts +0 -1
- package/dist/vue/components/StrandsEmailMfaSetupModal.vue.d.ts +0 -1
- package/dist/vue/components/StrandsHardwareKeySetupModal.vue.d.ts +0 -1
- package/dist/vue/components/StrandsLogo.vue.d.ts +0 -1
- package/dist/vue/components/StrandsMFASetup.vue.d.ts +0 -1
- package/dist/vue/components/StrandsMfaModal.vue.d.ts +0 -1
- package/dist/vue/components/StrandsMfaVerification.vue.d.ts +0 -1
- package/dist/vue/components/StrandsPasswordReset.vue.d.ts +0 -1
- package/dist/vue/components/StrandsSecuredFooter.vue.d.ts +0 -1
- package/dist/vue/components/StrandsSessionsModal.vue.d.ts +0 -1
- package/dist/vue/components/StrandsSettingsModal.vue.d.ts +0 -1
- package/dist/vue/components/StrandsSignIn.vue.d.ts +0 -1
- package/dist/vue/components/StrandsSignUp.vue.d.ts +0 -1
- package/dist/vue/components/StrandsTotpSetupModal.vue.d.ts +0 -1
- package/dist/vue/components/StrandsUserButton.vue.d.ts +0 -1
- package/dist/vue/components/StrandsUserProfile.vue.d.ts +0 -1
- package/dist/vue/components/SvgIcon.vue.d.ts +0 -1
- package/dist/vue/components/VirtualList.vue.d.ts +0 -1
- package/dist/vue/components/icons/IconGithub.vue.d.ts +0 -1
- package/dist/vue/components/icons/IconGoogle.vue.d.ts +0 -1
- package/dist/vue/components/icons/index.d.ts +0 -1
- package/dist/vue/components/index.d.ts +0 -1
- package/dist/vue/composables/useAuthenticatedFetch.d.ts +0 -1
- package/dist/vue/composables/useOAuthProviders.d.ts +0 -1
- package/dist/vue/composables/useStrandsAuth.d.ts +0 -1
- package/dist/vue/composables/useStrandsConfig.d.ts +0 -1
- package/dist/vue/composables/useStrandsMfa.d.ts +0 -1
- package/dist/vue/index.d.ts +0 -1
- package/dist/vue/plugins/StrandsUIPlugin.d.ts +0 -1
- package/dist/vue/ui/UiAlert.vue.d.ts +0 -1
- package/dist/vue/ui/UiAvatarEditor.vue.d.ts +0 -1
- package/dist/vue/ui/UiButton.vue.d.ts +0 -1
- package/dist/vue/ui/UiCard.vue.d.ts +0 -1
- package/dist/vue/ui/UiInput.vue.d.ts +0 -1
- package/dist/vue/ui/UiLevelProgress.vue.d.ts +0 -1
- package/dist/vue/ui/UiLink.vue.d.ts +0 -1
- package/dist/vue/ui/UiLoader.vue.d.ts +0 -1
- package/dist/vue/ui/UiModal.vue.d.ts +0 -1
- package/dist/vue/ui/UiTabs.vue.d.ts +0 -1
- package/dist/vue/ui/UiToggle.vue.d.ts +0 -1
- package/dist/vue/ui/index.d.ts +0 -1
- package/dist/vue/utils/contrast.d.ts +0 -1
- package/dist/vue/utils/debounce.d.ts +0 -1
- package/dist/vue/utils/fontPreloader.d.ts +0 -1
- package/dist/vue/utils/iconProps.d.ts +0 -1
- package/dist/vue/utils/lazyComponents.d.ts +0 -1
- package/dist/vue/utils/levels.d.ts +0 -1
- package/dist/vue/utils/performanceInit.d.ts +0 -1
- package/dist/vue/utils/requestCache.d.ts +0 -1
- package/dist/vue/utils/sounds.d.ts +0 -1
- package/package.json +11 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/nuxt/module.cjs.js.map +0 -1
- package/dist/nuxt/module.d.ts.map +0 -1
- package/dist/nuxt/module.es.js.map +0 -1
- package/dist/nuxt/runtime/composables/useAuthenticatedFetch.cjs.js.map +0 -1
- package/dist/nuxt/runtime/composables/useAuthenticatedFetch.d.ts.map +0 -1
- package/dist/nuxt/runtime/composables/useAuthenticatedFetch.es.js.map +0 -1
- package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js.map +0 -1
- package/dist/nuxt/runtime/composables/useStrandsAuth.d.ts.map +0 -1
- package/dist/nuxt/runtime/composables/useStrandsAuth.es.js.map +0 -1
- package/dist/nuxt/runtime/middleware/auth.d.ts.map +0 -1
- package/dist/nuxt/runtime/middleware/auth.global.cjs.js.map +0 -1
- package/dist/nuxt/runtime/middleware/auth.global.d.ts.map +0 -1
- package/dist/nuxt/runtime/middleware/auth.global.es.js.map +0 -1
- package/dist/nuxt/runtime/middleware/guest.d.ts.map +0 -1
- package/dist/nuxt/runtime/plugin.client.cjs.js.map +0 -1
- package/dist/nuxt/runtime/plugin.client.d.ts.map +0 -1
- package/dist/nuxt/runtime/plugin.client.es.js.map +0 -1
- package/dist/nuxt/runtime/plugin.server.cjs.js.map +0 -1
- package/dist/nuxt/runtime/plugin.server.d.ts.map +0 -1
- package/dist/nuxt/runtime/plugin.server.es.js.map +0 -1
- package/dist/nuxt/runtime/plugins/auth-interceptor.client.cjs.js.map +0 -1
- package/dist/nuxt/runtime/plugins/auth-interceptor.client.d.ts.map +0 -1
- package/dist/nuxt/runtime/plugins/auth-interceptor.client.es.js.map +0 -1
- package/dist/nuxt/types.d.ts.map +0 -1
- package/dist/nuxt-v4/module.cjs.js.map +0 -1
- package/dist/nuxt-v4/module.d.ts.map +0 -1
- package/dist/nuxt-v4/module.es.js.map +0 -1
- package/dist/nuxt-v4/runtime/composables/useAuthenticatedFetch.cjs.js.map +0 -1
- package/dist/nuxt-v4/runtime/composables/useAuthenticatedFetch.d.ts.map +0 -1
- package/dist/nuxt-v4/runtime/composables/useAuthenticatedFetch.es.js.map +0 -1
- package/dist/nuxt-v4/runtime/composables/useStrandsAuth.cjs.js.map +0 -1
- package/dist/nuxt-v4/runtime/composables/useStrandsAuth.d.ts.map +0 -1
- package/dist/nuxt-v4/runtime/composables/useStrandsAuth.es.js.map +0 -1
- package/dist/nuxt-v4/runtime/middleware/auth.global.cjs.js.map +0 -1
- package/dist/nuxt-v4/runtime/middleware/auth.global.d.ts.map +0 -1
- package/dist/nuxt-v4/runtime/middleware/auth.global.es.js.map +0 -1
- package/dist/nuxt-v4/runtime/plugin.client.cjs.js.map +0 -1
- package/dist/nuxt-v4/runtime/plugin.client.d.ts.map +0 -1
- package/dist/nuxt-v4/runtime/plugin.client.es.js.map +0 -1
- package/dist/nuxt-v4/runtime/plugin.server.cjs.js.map +0 -1
- package/dist/nuxt-v4/runtime/plugin.server.d.ts.map +0 -1
- package/dist/nuxt-v4/runtime/plugin.server.es.js.map +0 -1
- package/dist/nuxt-v4/runtime/plugins/auth-interceptor.client.cjs.js.map +0 -1
- package/dist/nuxt-v4/runtime/plugins/auth-interceptor.client.d.ts.map +0 -1
- package/dist/nuxt-v4/runtime/plugins/auth-interceptor.client.es.js.map +0 -1
- package/dist/nuxt-v4/types.d.ts.map +0 -1
- package/dist/nuxt-v4.cjs.js.map +0 -1
- package/dist/nuxt-v4.d.ts.map +0 -1
- package/dist/nuxt-v4.es.js.map +0 -1
- package/dist/nuxt.cjs.js.map +0 -1
- package/dist/nuxt.d.ts.map +0 -1
- package/dist/nuxt.es.js.map +0 -1
- package/dist/shared/defaults.d.ts.map +0 -1
- package/dist/strands-auth-ui.cjs.js.map +0 -1
- package/dist/strands-auth-ui.es.js.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/useStrandsAuth-CTlaiFqK.cjs.map +0 -1
- package/dist/useStrandsAuth-Cev-PTun.js.map +0 -1
- package/dist/useStrandsConfig-Cxb360Os.js.map +0 -1
- package/dist/useStrandsConfig-Z9_36OcV.cjs.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/slots.d.ts.map +0 -1
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/vue/components/SignedIn.vue.d.ts.map +0 -1
- package/dist/vue/components/SignedOut.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsAuth.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsBackupCodesModal.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsCompleteSignUp.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsConfigProvider.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsConfirmModal.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsEmailMfaSetupModal.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsHardwareKeySetupModal.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsLogo.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsMFASetup.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsMfaModal.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsMfaVerification.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsPasswordReset.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsSecuredFooter.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsSessionsModal.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsSettingsModal.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsSignIn.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsSignUp.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsTotpSetupModal.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsUserButton.vue.d.ts.map +0 -1
- package/dist/vue/components/StrandsUserProfile.vue.d.ts.map +0 -1
- package/dist/vue/components/SvgIcon.vue.d.ts.map +0 -1
- package/dist/vue/components/VirtualList.vue.d.ts.map +0 -1
- package/dist/vue/components/icons/IconGithub.vue.d.ts.map +0 -1
- package/dist/vue/components/icons/IconGoogle.vue.d.ts.map +0 -1
- package/dist/vue/components/icons/index.d.ts.map +0 -1
- package/dist/vue/components/index.d.ts.map +0 -1
- package/dist/vue/composables/useAuthenticatedFetch.d.ts.map +0 -1
- package/dist/vue/composables/useOAuthProviders.d.ts.map +0 -1
- package/dist/vue/composables/useStrandsAuth.d.ts.map +0 -1
- package/dist/vue/composables/useStrandsConfig.d.ts.map +0 -1
- package/dist/vue/composables/useStrandsMfa.d.ts.map +0 -1
- package/dist/vue/index.d.ts.map +0 -1
- package/dist/vue/plugins/StrandsUIPlugin.d.ts.map +0 -1
- package/dist/vue/ui/UiAlert.vue.d.ts.map +0 -1
- package/dist/vue/ui/UiAvatarEditor.vue.d.ts.map +0 -1
- package/dist/vue/ui/UiButton.vue.d.ts.map +0 -1
- package/dist/vue/ui/UiCard.vue.d.ts.map +0 -1
- package/dist/vue/ui/UiInput.vue.d.ts.map +0 -1
- package/dist/vue/ui/UiLevelProgress.vue.d.ts.map +0 -1
- package/dist/vue/ui/UiLink.vue.d.ts.map +0 -1
- package/dist/vue/ui/UiLoader.vue.d.ts.map +0 -1
- package/dist/vue/ui/UiModal.vue.d.ts.map +0 -1
- package/dist/vue/ui/UiTabs.vue.d.ts.map +0 -1
- package/dist/vue/ui/UiToggle.vue.d.ts.map +0 -1
- package/dist/vue/ui/index.d.ts.map +0 -1
- package/dist/vue/utils/contrast.d.ts.map +0 -1
- package/dist/vue/utils/debounce.d.ts.map +0 -1
- package/dist/vue/utils/fontPreloader.d.ts.map +0 -1
- package/dist/vue/utils/iconProps.d.ts.map +0 -1
- package/dist/vue/utils/lazyComponents.d.ts.map +0 -1
- package/dist/vue/utils/levels.d.ts.map +0 -1
- package/dist/vue/utils/performanceInit.d.ts.map +0 -1
- package/dist/vue/utils/requestCache.d.ts.map +0 -1
- package/dist/vue/utils/sounds.d.ts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthenticatedFetch.cjs.js","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/composables/useAuthenticatedFetch.ts"],"sourcesContent":["import { useRuntimeConfig } from 'nuxt/app'\nimport { useStrandsAuth } from './useStrandsAuth'\nimport type { AuthenticatedFetchOptions, StrandsAuthConfig } from '../../../types'\n\n/**\n * Enhanced fetch composable that automatically includes auth headers\n * and handles token refresh for API requests\n */\nexport function useAuthenticatedFetch() {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n const { currentSession, refreshToken, getAuthHeaders } = useStrandsAuth()\n\n const authenticatedFetch = async (\n url: string | URL,\n options: AuthenticatedFetchOptions = {}\n ): Promise<Response> => {\n const {\n autoRefresh = true,\n requireAuth = true,\n baseURL,\n ...fetchOptions\n } = options\n\n // Check if user is authenticated when required\n if (requireAuth && !currentSession.value?.accessToken) {\n throw new Error('User is not authenticated')\n }\n\n // Construct full URL using baseURL from options or config\n let fullUrl: string | URL = url\n const resolvedBaseURL = baseURL || config.baseUrl\n \n if (resolvedBaseURL && typeof url === 'string' && !url.startsWith('http')) {\n fullUrl = new URL(url, resolvedBaseURL).toString()\n }\n\n // Prepare headers\n const headers = new Headers(fetchOptions.headers)\n \n // Add auth headers if available\n if (currentSession.value?.accessToken) {\n try {\n const authHeaders = getAuthHeaders()\n Object.entries(authHeaders).forEach(([key, value]) => {\n headers.set(key, value)\n })\n } catch (error) {\n console.warn('[Strands Auth] Failed to get auth headers:', error)\n if (requireAuth) {\n throw error\n }\n }\n }\n\n // Make the request\n const enhancedOptions: RequestInit = {\n ...fetchOptions,\n headers\n }\n\n let response = await fetch(fullUrl, enhancedOptions)\n\n // Handle 401 with auto-refresh\n if (response.status === 401 && autoRefresh && currentSession.value?.refreshToken) {\n console.log('[Strands Auth] Request failed with 401, attempting token refresh...')\n \n try {\n // Attempt to refresh token\n const refreshed = await refreshToken()\n \n if (refreshed && currentSession.value?.accessToken) {\n // Update headers with new token\n const newAuthHeaders = getAuthHeaders()\n Object.entries(newAuthHeaders).forEach(([key, value]) => {\n headers.set(key, value)\n })\n\n // Retry the request with new token\n console.log('[Strands Auth] Retrying request with refreshed token')\n response = await fetch(fullUrl, { ...enhancedOptions, headers })\n }\n } catch (refreshError) {\n console.error('[Strands Auth] Token refresh failed:', refreshError)\n // Return the original 401 response\n }\n }\n\n return response\n }\n\n /**\n * Convenience method for making authenticated GET requests\n */\n const get = (url: string | URL, options?: AuthenticatedFetchOptions) => {\n return authenticatedFetch(url, { ...options, method: 'GET' })\n }\n\n /**\n * Convenience method for making authenticated POST requests\n */\n const post = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n // Auto-set content type for JSON requests\n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'POST',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n /**\n * Convenience method for making authenticated PUT requests\n */\n const put = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'PUT',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n /**\n * Convenience method for making authenticated DELETE requests\n */\n const del = (url: string | URL, options?: AuthenticatedFetchOptions) => {\n return authenticatedFetch(url, { ...options, method: 'DELETE' })\n }\n\n /**\n * Convenience method for making authenticated PATCH requests\n */\n const patch = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'PATCH',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n return {\n authenticatedFetch,\n get,\n post,\n put,\n delete: del,\n patch\n }\n}\n\n// Export convenience functions for non-composable usage\nexport const $authFetch = {\n get: async (url: string | URL, options?: AuthenticatedFetchOptions) => {\n const { get } = useAuthenticatedFetch()\n return get(url, options)\n },\n post: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { post } = useAuthenticatedFetch()\n return post(url, body, options)\n },\n put: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { put } = useAuthenticatedFetch()\n return put(url, body, options)\n },\n delete: async (url: string | URL, options?: AuthenticatedFetchOptions) => {\n const { delete: del } = useAuthenticatedFetch()\n return del(url, options)\n },\n patch: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { patch } = useAuthenticatedFetch()\n return patch(url, body, options)\n }\n}"],"names":["useAuthenticatedFetch","config","useRuntimeConfig","public","currentSession","refreshToken","getAuthHeaders","useStrandsAuth","authenticatedFetch","async","url","options","autoRefresh","requireAuth","baseURL","fetchOptions","value","accessToken","Error","fullUrl","resolvedBaseURL","baseUrl","startsWith","URL","toString","headers","Headers","authHeaders","Object","entries","forEach","key","set","error","enhancedOptions","response","fetch","status","newAuthHeaders","refreshError","get","method","post","body","has","JSON","stringify","put","delete","patch","$authFetch","del"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthenticatedFetch.d.ts","sourceRoot":"","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/composables/useAuthenticatedFetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAqB,MAAM,gBAAgB,CAAA;AAElF;;;GAGG;AACH,wBAAgB,qBAAqB;8BAK5B,MAAM,GAAG,GAAG,YACR,yBAAyB,KACjC,OAAO,CAAC,QAAQ,CAAC;eA8EF,MAAM,GAAG,GAAG,YAAY,yBAAyB;gBAOhD,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;eAmB9D,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;kBAkB7D,MAAM,GAAG,GAAG,YAAY,yBAAyB;iBAO/C,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;EAuBlF;AAGD,eAAO,MAAM,UAAU;eACJ,MAAM,GAAG,GAAG,YAAY,yBAAyB;gBAIhD,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;eAI9D,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;kBAI1D,MAAM,GAAG,GAAG,YAAY,yBAAyB;iBAIlD,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;CAIjF,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthenticatedFetch.es.js","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/composables/useAuthenticatedFetch.ts"],"sourcesContent":["import { useRuntimeConfig } from 'nuxt/app'\nimport { useStrandsAuth } from './useStrandsAuth'\nimport type { AuthenticatedFetchOptions, StrandsAuthConfig } from '../../../types'\n\n/**\n * Enhanced fetch composable that automatically includes auth headers\n * and handles token refresh for API requests\n */\nexport function useAuthenticatedFetch() {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n const { currentSession, refreshToken, getAuthHeaders } = useStrandsAuth()\n\n const authenticatedFetch = async (\n url: string | URL,\n options: AuthenticatedFetchOptions = {}\n ): Promise<Response> => {\n const {\n autoRefresh = true,\n requireAuth = true,\n baseURL,\n ...fetchOptions\n } = options\n\n // Check if user is authenticated when required\n if (requireAuth && !currentSession.value?.accessToken) {\n throw new Error('User is not authenticated')\n }\n\n // Construct full URL using baseURL from options or config\n let fullUrl: string | URL = url\n const resolvedBaseURL = baseURL || config.baseUrl\n \n if (resolvedBaseURL && typeof url === 'string' && !url.startsWith('http')) {\n fullUrl = new URL(url, resolvedBaseURL).toString()\n }\n\n // Prepare headers\n const headers = new Headers(fetchOptions.headers)\n \n // Add auth headers if available\n if (currentSession.value?.accessToken) {\n try {\n const authHeaders = getAuthHeaders()\n Object.entries(authHeaders).forEach(([key, value]) => {\n headers.set(key, value)\n })\n } catch (error) {\n console.warn('[Strands Auth] Failed to get auth headers:', error)\n if (requireAuth) {\n throw error\n }\n }\n }\n\n // Make the request\n const enhancedOptions: RequestInit = {\n ...fetchOptions,\n headers\n }\n\n let response = await fetch(fullUrl, enhancedOptions)\n\n // Handle 401 with auto-refresh\n if (response.status === 401 && autoRefresh && currentSession.value?.refreshToken) {\n console.log('[Strands Auth] Request failed with 401, attempting token refresh...')\n \n try {\n // Attempt to refresh token\n const refreshed = await refreshToken()\n \n if (refreshed && currentSession.value?.accessToken) {\n // Update headers with new token\n const newAuthHeaders = getAuthHeaders()\n Object.entries(newAuthHeaders).forEach(([key, value]) => {\n headers.set(key, value)\n })\n\n // Retry the request with new token\n console.log('[Strands Auth] Retrying request with refreshed token')\n response = await fetch(fullUrl, { ...enhancedOptions, headers })\n }\n } catch (refreshError) {\n console.error('[Strands Auth] Token refresh failed:', refreshError)\n // Return the original 401 response\n }\n }\n\n return response\n }\n\n /**\n * Convenience method for making authenticated GET requests\n */\n const get = (url: string | URL, options?: AuthenticatedFetchOptions) => {\n return authenticatedFetch(url, { ...options, method: 'GET' })\n }\n\n /**\n * Convenience method for making authenticated POST requests\n */\n const post = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n // Auto-set content type for JSON requests\n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'POST',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n /**\n * Convenience method for making authenticated PUT requests\n */\n const put = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'PUT',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n /**\n * Convenience method for making authenticated DELETE requests\n */\n const del = (url: string | URL, options?: AuthenticatedFetchOptions) => {\n return authenticatedFetch(url, { ...options, method: 'DELETE' })\n }\n\n /**\n * Convenience method for making authenticated PATCH requests\n */\n const patch = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'PATCH',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n return {\n authenticatedFetch,\n get,\n post,\n put,\n delete: del,\n patch\n }\n}\n\n// Export convenience functions for non-composable usage\nexport const $authFetch = {\n get: async (url: string | URL, options?: AuthenticatedFetchOptions) => {\n const { get } = useAuthenticatedFetch()\n return get(url, options)\n },\n post: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { post } = useAuthenticatedFetch()\n return post(url, body, options)\n },\n put: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { put } = useAuthenticatedFetch()\n return put(url, body, options)\n },\n delete: async (url: string | URL, options?: AuthenticatedFetchOptions) => {\n const { delete: del } = useAuthenticatedFetch()\n return del(url, options)\n },\n patch: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { patch } = useAuthenticatedFetch()\n return patch(url, body, options)\n }\n}"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useStrandsAuth.cjs.js","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/composables/useStrandsAuth.ts"],"sourcesContent":["import type { Ref, ComputedRef } from 'vue'\nimport { useRuntimeConfig } from 'nuxt/app'\nimport { navigateTo } from 'nuxt/app'\nimport { useStrandsAuth as useVueStrandsAuth } from '../../../vue/composables/useStrandsAuth'\nimport type { StrandsAuthConfig } from '../../../types'\nimport type { User } from '../../../types'\n\nexport const useStrandsAuth = () => {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n \n // Get the base Vue composable\n const vueAuth = useVueStrandsAuth()\n\n // Initialize function for setup\n const initialize = async () => {\n await vueAuth.initialize()\n }\n\n // Enhanced signIn with Nuxt navigation\n const signIn = async (credentials: { email: string; password: string }) => {\n const result = await vueAuth.signIn(credentials)\n \n // Navigate to configured sign-in URL on success\n if (result && config.onSignInUrl) {\n await navigateTo(config.onSignInUrl)\n }\n \n return result\n }\n\n // Enhanced signUp with Nuxt navigation (magic link flow)\n const signUp = async (userData: { email: string }) => {\n // For magic link flow, we just need an email\n const result = await vueAuth.signUp({\n email: userData.email,\n password: '', // Empty password for magic link\n firstName: '', // Will be filled later in the magic link flow\n lastName: ''\n })\n \n // For magic link, we don't navigate immediately\n // The user will complete signup via the magic link\n \n return result\n }\n\n // Enhanced signOut with Nuxt navigation\n const signOut = async () => {\n await vueAuth.signOut()\n \n // Navigate to configured sign-out URL\n if (config.onSignOutUrl) {\n await navigateTo(config.onSignOutUrl)\n }\n }\n\n return {\n // Re-export Vue composable state and methods\n ...vueAuth,\n \n // Add initialize function\n initialize,\n \n // Override methods with Nuxt-specific navigation\n signIn,\n signUp,\n signOut,\n }\n}\n\n// Convenience composables\nexport const useAuthUser = (): { user: ComputedRef<User | null> } => {\n const { user } = useStrandsAuth()\n return { user }\n}\n\nexport const useAuthState = (): { isAuthenticated: ComputedRef<boolean>, isLoading: ComputedRef<boolean> } => {\n const { isAuthenticated, isLoading } = useStrandsAuth()\n return { isAuthenticated, isLoading }\n}"],"names":["useStrandsAuth","config","useRuntimeConfig","public","vueAuth","useVueStrandsAuth","initialize","async","signIn","credentials","result","onSignInUrl","navigateTo","signUp","userData","email","password","firstName","lastName","signOut","onSignOutUrl","isAuthenticated","isLoading","user"],"mappings":"8JAOaA,EAAiB,KAC5B,MAAMC,EAASC,EAAAA,mBAAmBC,OAAoB,YAGhDC,EAAUC,EAAAA,iBA6ChB,MAAO,IAEFD,EAGHE,WA/CiBC,gBACXH,EAAQE,cAiDdE,OA7CaD,MAAOE,IACpB,MAAMC,QAAeN,EAAQI,OAAOC,GAOpC,OAJIC,GAAUT,EAAOU,mBACbC,EAAAA,WAAWX,EAAOU,aAGnBD,GAsCPG,OAlCaN,MAAOO,SAECV,EAAQS,OAAO,CAClCE,MAAOD,EAASC,MAChBC,SAAU,GACVC,UAAW,GACXC,SAAU,KA6BZC,QAnBcZ,gBACRH,EAAQe,UAGVlB,EAAOmB,oBACHR,EAAAA,WAAWX,EAAOmB,sCAwBF,KAC1B,MAAMC,gBAAEA,EAAAC,UAAiBA,GAActB,IACvC,MAAO,CAAEqB,kBAAiBC,kCAPD,KACzB,MAAMC,KAAEA,GAASvB,IACjB,MAAO,CAAEuB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useStrandsAuth.d.ts","sourceRoot":"","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/composables/useStrandsAuth.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAO,WAAW,EAAE,MAAM,KAAK,CAAA;AAK3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAE1C,eAAO,MAAM,cAAc;;0BAYU;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;uBAYtC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqClD,CAAA;AAGD,eAAO,MAAM,WAAW,QAAO;IAAE,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;CAG9D,CAAA;AAED,eAAO,MAAM,YAAY,QAAO;IAAE,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAGvG,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useStrandsAuth.es.js","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/composables/useStrandsAuth.ts"],"sourcesContent":["import type { Ref, ComputedRef } from 'vue'\nimport { useRuntimeConfig } from 'nuxt/app'\nimport { navigateTo } from 'nuxt/app'\nimport { useStrandsAuth as useVueStrandsAuth } from '../../../vue/composables/useStrandsAuth'\nimport type { StrandsAuthConfig } from '../../../types'\nimport type { User } from '../../../types'\n\nexport const useStrandsAuth = () => {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n \n // Get the base Vue composable\n const vueAuth = useVueStrandsAuth()\n\n // Initialize function for setup\n const initialize = async () => {\n await vueAuth.initialize()\n }\n\n // Enhanced signIn with Nuxt navigation\n const signIn = async (credentials: { email: string; password: string }) => {\n const result = await vueAuth.signIn(credentials)\n \n // Navigate to configured sign-in URL on success\n if (result && config.onSignInUrl) {\n await navigateTo(config.onSignInUrl)\n }\n \n return result\n }\n\n // Enhanced signUp with Nuxt navigation (magic link flow)\n const signUp = async (userData: { email: string }) => {\n // For magic link flow, we just need an email\n const result = await vueAuth.signUp({\n email: userData.email,\n password: '', // Empty password for magic link\n firstName: '', // Will be filled later in the magic link flow\n lastName: ''\n })\n \n // For magic link, we don't navigate immediately\n // The user will complete signup via the magic link\n \n return result\n }\n\n // Enhanced signOut with Nuxt navigation\n const signOut = async () => {\n await vueAuth.signOut()\n \n // Navigate to configured sign-out URL\n if (config.onSignOutUrl) {\n await navigateTo(config.onSignOutUrl)\n }\n }\n\n return {\n // Re-export Vue composable state and methods\n ...vueAuth,\n \n // Add initialize function\n initialize,\n \n // Override methods with Nuxt-specific navigation\n signIn,\n signUp,\n signOut,\n }\n}\n\n// Convenience composables\nexport const useAuthUser = (): { user: ComputedRef<User | null> } => {\n const { user } = useStrandsAuth()\n return { user }\n}\n\nexport const useAuthState = (): { isAuthenticated: ComputedRef<boolean>, isLoading: ComputedRef<boolean> } => {\n const { isAuthenticated, isLoading } = useStrandsAuth()\n return { isAuthenticated, isLoading }\n}"],"names":["useVueStrandsAuth"],"mappings":";;AAOO,MAAM,iBAAiB,MAAM;AAClC,QAAM,SAAS,mBAAmB,OAAO,aAAa;AAGtD,QAAM,UAAUA,iBAAA;AAGhB,QAAM,aAAa,YAAY;AAC7B,UAAM,QAAQ,WAAA;AAAA,EAChB;AAGA,QAAM,SAAS,OAAO,gBAAqD;AACzE,UAAM,SAAS,MAAM,QAAQ,OAAO,WAAW;AAG/C,QAAI,UAAU,OAAO,aAAa;AAChC,YAAM,WAAW,OAAO,WAAW;AAAA,IACrC;AAEA,WAAO;AAAA,EACT;AAGA,QAAM,SAAS,OAAO,aAAgC;AAEpD,UAAM,SAAS,MAAM,QAAQ,OAAO;AAAA,MAClC,OAAO,SAAS;AAAA,MAChB,UAAU;AAAA;AAAA,MACV,WAAW;AAAA;AAAA,MACX,UAAU;AAAA,IAAA,CACX;AAKD,WAAO;AAAA,EACT;AAGA,QAAM,UAAU,YAAY;AAC1B,UAAM,QAAQ,QAAA;AAGd,QAAI,OAAO,cAAc;AACvB,YAAM,WAAW,OAAO,YAAY;AAAA,IACtC;AAAA,EACF;AAEA,SAAO;AAAA;AAAA,IAEL,GAAG;AAAA;AAAA,IAGH;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAGO,MAAM,cAAc,MAA0C;AACnE,QAAM,EAAE,KAAA,IAAS,eAAA;AACjB,SAAO,EAAE,KAAA;AACX;AAEO,MAAM,eAAe,MAAkF;AAC5G,QAAM,EAAE,iBAAiB,UAAA,IAAc,eAAA;AACvC,SAAO,EAAE,iBAAiB,UAAA;AAC5B;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/middleware/auth.ts"],"names":[],"mappings":";AAEA;;;GAGG;;AACH,wBA0BE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.global.cjs.js","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/middleware/auth.global.ts"],"sourcesContent":["import { defineNuxtRouteMiddleware, navigateTo, useRuntimeConfig } from 'nuxt/app'\nimport type { StrandsAuthConfig } from '../../../types'\n\nexport default defineNuxtRouteMiddleware((to) => {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n\n // Skip middleware during SSR/build\n if (process.server) return\n\n // Import composable dynamically on client side\n return new Promise<void>((resolve) => {\n import('../composables/useStrandsAuth').then(({ useStrandsAuth }) => {\n const { isAuthenticated, isLoading } = useStrandsAuth()\n\n // Wait for auth initialization\n const checkAuth = () => {\n if (isLoading.value) {\n setTimeout(checkAuth, 50)\n return\n }\n\n const currentPath = to.path\n\n // Check if current route should be protected\n const isProtectedRoute = config.protectedRoutes?.some((route: string) => {\n if (route.endsWith('*')) {\n return currentPath.startsWith(route.slice(0, -1))\n }\n return currentPath === route || currentPath.startsWith(route + '/')\n })\n\n // Check if current route is guest-only\n const isGuestOnlyRoute = config.guestOnlyRoutes?.some((route: string) => {\n if (route.endsWith('*')) {\n return currentPath.startsWith(route.slice(0, -1))\n }\n return currentPath === route || currentPath.startsWith(route + '/')\n })\n\n // Redirect unauthenticated users from protected routes\n if (isProtectedRoute && !isAuthenticated.value) {\n console.log('[Strands Auth] Protected route accessed without authentication, redirecting to auth')\n return navigateTo('/auth?redirect=' + encodeURIComponent(currentPath))\n }\n\n // Redirect authenticated users from guest-only routes\n if (isGuestOnlyRoute && isAuthenticated.value) {\n console.log('[Strands Auth] Guest-only route accessed while authenticated, redirecting')\n return navigateTo(config.onSignInUrl || '/dashboard')\n }\n\n resolve()\n }\n\n checkAuth()\n })\n })\n})"],"names":["auth_global","defineNuxtRouteMiddleware","to","config","useRuntimeConfig","public","process","server","Promise","resolve","then","require","useStrandsAuth","isAuthenticated","isLoading","checkAuth","value","setTimeout","currentPath","path","isProtectedRoute","protectedRoutes","some","route","endsWith","startsWith","slice","isGuestOnlyRoute","guestOnlyRoutes","navigateTo","encodeURIComponent","onSignInUrl"],"mappings":"yCAGAA,EAAeC,EAAAA,0BAA2BC,IACxC,MAAMC,EAASC,EAAAA,mBAAmBC,OAAoB,YAGtD,IAAIC,QAAQC,OAGZ,OAAO,IAAIC,QAAeC,IACxBD,QAAAC,UAAAC,KAAA,IAAAC,QAAO,yCAAiCD,KAAK,EAAGE,qBAC9C,MAAMC,gBAAEA,EAAAC,UAAiBA,GAAcF,IAGjCG,EAAY,KAChB,GAAID,EAAUE,MAEZ,YADAC,WAAWF,EAAW,IAIxB,MAAMG,EAAchB,EAAGiB,KAGjBC,EAAmBjB,EAAOkB,iBAAiBC,KAAMC,GACjDA,EAAMC,SAAS,KACVN,EAAYO,WAAWF,EAAMG,MAAM,OAErCR,IAAgBK,GAASL,EAAYO,WAAWF,EAAQ,MAI3DI,EAAmBxB,EAAOyB,iBAAiBN,KAAMC,GACjDA,EAAMC,SAAS,KACVN,EAAYO,WAAWF,EAAMG,MAAM,OAErCR,IAAgBK,GAASL,EAAYO,WAAWF,EAAQ,MAIjE,OAAIH,IAAqBP,EAAgBG,MAEhCa,aAAW,kBAAoBC,mBAAmBZ,IAIvDS,GAAoBd,EAAgBG,MAE/Ba,aAAW1B,EAAO4B,aAAe,mBAG1CtB,KAGFM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.global.d.ts","sourceRoot":"","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/middleware/auth.global.ts"],"names":[],"mappings":";;AAGA,wBAsDE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.global.es.js","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/middleware/auth.global.ts"],"sourcesContent":["import { defineNuxtRouteMiddleware, navigateTo, useRuntimeConfig } from 'nuxt/app'\nimport type { StrandsAuthConfig } from '../../../types'\n\nexport default defineNuxtRouteMiddleware((to) => {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n\n // Skip middleware during SSR/build\n if (process.server) return\n\n // Import composable dynamically on client side\n return new Promise<void>((resolve) => {\n import('../composables/useStrandsAuth').then(({ useStrandsAuth }) => {\n const { isAuthenticated, isLoading } = useStrandsAuth()\n\n // Wait for auth initialization\n const checkAuth = () => {\n if (isLoading.value) {\n setTimeout(checkAuth, 50)\n return\n }\n\n const currentPath = to.path\n\n // Check if current route should be protected\n const isProtectedRoute = config.protectedRoutes?.some((route: string) => {\n if (route.endsWith('*')) {\n return currentPath.startsWith(route.slice(0, -1))\n }\n return currentPath === route || currentPath.startsWith(route + '/')\n })\n\n // Check if current route is guest-only\n const isGuestOnlyRoute = config.guestOnlyRoutes?.some((route: string) => {\n if (route.endsWith('*')) {\n return currentPath.startsWith(route.slice(0, -1))\n }\n return currentPath === route || currentPath.startsWith(route + '/')\n })\n\n // Redirect unauthenticated users from protected routes\n if (isProtectedRoute && !isAuthenticated.value) {\n console.log('[Strands Auth] Protected route accessed without authentication, redirecting to auth')\n return navigateTo('/auth?redirect=' + encodeURIComponent(currentPath))\n }\n\n // Redirect authenticated users from guest-only routes\n if (isGuestOnlyRoute && isAuthenticated.value) {\n console.log('[Strands Auth] Guest-only route accessed while authenticated, redirecting')\n return navigateTo(config.onSignInUrl || '/dashboard')\n }\n\n resolve()\n }\n\n checkAuth()\n })\n })\n})"],"names":[],"mappings":";AAGA,MAAA,cAAe,0BAA0B,CAAC,OAAO;AAC/C,QAAM,SAAS,mBAAmB,OAAO,aAAa;AAGtD,MAAI,QAAQ,OAAQ;AAGpB,SAAO,IAAI,QAAc,CAAC,YAAY;AACpC,WAAO,qCAA+B,EAAE,KAAK,CAAC,EAAE,qBAAqB;AACnE,YAAM,EAAE,iBAAiB,UAAA,IAAc,eAAA;AAGvC,YAAM,YAAY,MAAM;AACtB,YAAI,UAAU,OAAO;AACnB,qBAAW,WAAW,EAAE;AACxB;AAAA,QACF;AAEA,cAAM,cAAc,GAAG;AAGvB,cAAM,mBAAmB,OAAO,iBAAiB,KAAK,CAAC,UAAkB;AACvE,cAAI,MAAM,SAAS,GAAG,GAAG;AACvB,mBAAO,YAAY,WAAW,MAAM,MAAM,GAAG,EAAE,CAAC;AAAA,UAClD;AACA,iBAAO,gBAAgB,SAAS,YAAY,WAAW,QAAQ,GAAG;AAAA,QACpE,CAAC;AAGD,cAAM,mBAAmB,OAAO,iBAAiB,KAAK,CAAC,UAAkB;AACvE,cAAI,MAAM,SAAS,GAAG,GAAG;AACvB,mBAAO,YAAY,WAAW,MAAM,MAAM,GAAG,EAAE,CAAC;AAAA,UAClD;AACA,iBAAO,gBAAgB,SAAS,YAAY,WAAW,QAAQ,GAAG;AAAA,QACpE,CAAC;AAGD,YAAI,oBAAoB,CAAC,gBAAgB,OAAO;AAC9C,kBAAQ,IAAI,qFAAqF;AACjG,iBAAO,WAAW,oBAAoB,mBAAmB,WAAW,CAAC;AAAA,QACvE;AAGA,YAAI,oBAAoB,gBAAgB,OAAO;AAC7C,kBAAQ,IAAI,2EAA2E;AACvF,iBAAO,WAAW,OAAO,eAAe,YAAY;AAAA,QACtD;AAEA,gBAAA;AAAA,MACF;AAEA,gBAAA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guest.d.ts","sourceRoot":"","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/middleware/guest.ts"],"names":[],"mappings":";AAGA;;;GAGG;;AACH,wBA4BE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.client.cjs.js","sources":["../../../../../apps/accounts-ui/src/nuxt/runtime/plugin.client.ts"],"sourcesContent":["import { defineNuxtPlugin, useRuntimeConfig } from 'nuxt/app'\nimport { setStrandsConfig } from '../../vue/composables/useStrandsConfig'\nimport { STRANDS_AUTH_DEFAULTS } from '../../shared/defaults'\nimport { injectSquircleStyles } from '../../vue/plugins/StrandsUIPlugin'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-client',\n async setup() {\n // Get runtime config\n const config = useRuntimeConfig()\n const strandsConfig = config.public.strandsAuth as any\n \n // Merge defaults with runtime config\n const mergedConfig = {\n ...STRANDS_AUTH_DEFAULTS,\n ...strandsConfig\n }\n \n // Set global configuration (avoid provide() in plugin context)\n setStrandsConfig(mergedConfig)\n \n // Set window global as backup\n if (typeof window !== 'undefined') {\n ;(window as any).__STRANDS_CONFIG__ = mergedConfig\n }\n \n // Set CSS custom properties for accent color\n if (mergedConfig?.accentColor && typeof window !== 'undefined') {\n document.documentElement.style.setProperty('--strands-accent', mergedConfig.accentColor)\n }\n \n // Inject CSS-based squircle styles for mathematical squircle shapes\n injectSquircleStyles()\n \n // Initialize auth state\n const { useStrandsAuth } = await import('./composables/useStrandsAuth')\n const { initialize } = useStrandsAuth()\n await initialize()\n }\n})"],"names":["plugin_client","defineNuxtPlugin","name","setup","strandsConfig","useRuntimeConfig","public","strandsAuth","mergedConfig","STRANDS_AUTH_DEFAULTS","setStrandsConfig","window","__STRANDS_CONFIG__","accentColor","document","documentElement","style","setProperty","useStrandsAuth","Promise","resolve","then","require","initialize"],"mappings":"gMAKA,MAAAA,EAAeC,mBAAiB,CAC9BC,KAAM,sBACN,WAAMC,GAEJ,MACMC,EADSC,EAAAA,mBACcC,OAAOC,YAG9BC,EAAe,IAChBC,EAAAA,yBACAL,GAILM,EAAAA,iBAAiBF,GAGK,oBAAXG,SACPA,OAAeC,mBAAqBJ,GAIpCA,GAAcK,aAAiC,oBAAXF,QACtCG,SAASC,gBAAgBC,MAAMC,YAAY,mBAAoBT,EAAaK,aAO9E,MAAMK,eAAEA,SAAyBC,QAAAC,UAAAC,KAAA,IAAAC,QAAO,yCAClCC,WAAEA,GAAeL,UACjBK,GACR"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.client.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/nuxt/runtime/plugin.client.ts"],"names":[],"mappings":";;AAKA,wBAkCE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.client.es.js","sources":["../../../../../apps/accounts-ui/src/nuxt/runtime/plugin.client.ts"],"sourcesContent":["import { defineNuxtPlugin, useRuntimeConfig } from 'nuxt/app'\nimport { setStrandsConfig } from '../../vue/composables/useStrandsConfig'\nimport { STRANDS_AUTH_DEFAULTS } from '../../shared/defaults'\nimport { injectSquircleStyles } from '../../vue/plugins/StrandsUIPlugin'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-client',\n async setup() {\n // Get runtime config\n const config = useRuntimeConfig()\n const strandsConfig = config.public.strandsAuth as any\n \n // Merge defaults with runtime config\n const mergedConfig = {\n ...STRANDS_AUTH_DEFAULTS,\n ...strandsConfig\n }\n \n // Set global configuration (avoid provide() in plugin context)\n setStrandsConfig(mergedConfig)\n \n // Set window global as backup\n if (typeof window !== 'undefined') {\n ;(window as any).__STRANDS_CONFIG__ = mergedConfig\n }\n \n // Set CSS custom properties for accent color\n if (mergedConfig?.accentColor && typeof window !== 'undefined') {\n document.documentElement.style.setProperty('--strands-accent', mergedConfig.accentColor)\n }\n \n // Inject CSS-based squircle styles for mathematical squircle shapes\n injectSquircleStyles()\n \n // Initialize auth state\n const { useStrandsAuth } = await import('./composables/useStrandsAuth')\n const { initialize } = useStrandsAuth()\n await initialize()\n }\n})"],"names":[],"mappings":";;;;AAKA,MAAA,gBAAe,iBAAiB;AAAA,EAC9B,MAAM;AAAA,EACN,MAAM,QAAQ;AAEZ,UAAM,SAAS,iBAAA;AACf,UAAM,gBAAgB,OAAO,OAAO;AAGpC,UAAM,eAAe;AAAA,MACnB,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAIL,qBAAiB,YAAY;AAG7B,QAAI,OAAO,WAAW,aAAa;AAC/B,aAAe,qBAAqB;AAAA,IACxC;AAGA,QAAI,cAAc,eAAe,OAAO,WAAW,aAAa;AAC9D,eAAS,gBAAgB,MAAM,YAAY,oBAAoB,aAAa,WAAW;AAAA,IACzF;AAMA,UAAM,EAAE,eAAA,IAAmB,MAAM,OAAO,oCAA8B;AACtE,UAAM,EAAE,WAAA,IAAe,eAAA;AACvB,UAAM,WAAA;AAAA,EACR;AACF,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.server.cjs.js","sources":["../../../../../apps/accounts-ui/src/nuxt/runtime/plugin.server.ts"],"sourcesContent":["import { defineNuxtPlugin, useRuntimeConfig } from 'nuxt/app'\nimport { setStrandsConfig } from '../../vue/composables/useStrandsConfig'\nimport { STRANDS_AUTH_DEFAULTS } from '../../shared/defaults'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-server',\n setup() {\n // Get runtime config\n const config = useRuntimeConfig()\n const strandsConfig = config.public.strandsAuth as any\n \n // Merge defaults with runtime config\n const mergedConfig = {\n ...STRANDS_AUTH_DEFAULTS,\n ...strandsConfig\n }\n \n // Set global configuration for SSR (avoid provide() in plugin context)\n setStrandsConfig(mergedConfig)\n }\n})"],"names":["plugin_server","defineNuxtPlugin","name","setup","strandsConfig","useRuntimeConfig","public","strandsAuth","mergedConfig","STRANDS_AUTH_DEFAULTS","setStrandsConfig"],"mappings":"0FAIAA,EAAeC,mBAAiB,CAC9BC,KAAM,sBACN,KAAAC,GAEE,MACMC,EADSC,EAAAA,mBACcC,OAAOC,YAG9BC,EAAe,IAChBC,EAAAA,yBACAL,GAILM,EAAAA,iBAAiBF,EACnB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/nuxt/runtime/plugin.server.ts"],"names":[],"mappings":";;AAIA,wBAgBE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.server.es.js","sources":["../../../../../apps/accounts-ui/src/nuxt/runtime/plugin.server.ts"],"sourcesContent":["import { defineNuxtPlugin, useRuntimeConfig } from 'nuxt/app'\nimport { setStrandsConfig } from '../../vue/composables/useStrandsConfig'\nimport { STRANDS_AUTH_DEFAULTS } from '../../shared/defaults'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-server',\n setup() {\n // Get runtime config\n const config = useRuntimeConfig()\n const strandsConfig = config.public.strandsAuth as any\n \n // Merge defaults with runtime config\n const mergedConfig = {\n ...STRANDS_AUTH_DEFAULTS,\n ...strandsConfig\n }\n \n // Set global configuration for SSR (avoid provide() in plugin context)\n setStrandsConfig(mergedConfig)\n }\n})"],"names":[],"mappings":";;AAIA,MAAA,gBAAe,iBAAiB;AAAA,EAC9B,MAAM;AAAA,EACN,QAAQ;AAEN,UAAM,SAAS,iBAAA;AACf,UAAM,gBAAgB,OAAO,OAAO;AAGpC,UAAM,eAAe;AAAA,MACnB,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAIL,qBAAiB,YAAY;AAAA,EAC/B;AACF,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-interceptor.client.cjs.js","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/plugins/auth-interceptor.client.ts"],"sourcesContent":["import { defineNuxtPlugin } from 'nuxt/app'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-interceptor',\n setup() {\n // Only run on client side\n if (process.server) return\n\n // Store original fetch function\n const originalFetch = globalThis.fetch\n\n // Create interceptor function\n globalThis.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n try {\n // Import auth composable dynamically to avoid SSR issues\n const { useStrandsAuth } = await import('../composables/useStrandsAuth')\n const { currentSession, getAuthHeaders } = useStrandsAuth()\n\n // Parse request URL to determine if it's an API request that needs auth\n let url: string\n if (typeof input === 'string') {\n url = input\n } else if (input instanceof URL) {\n url = input.toString()\n } else {\n url = input.url\n }\n\n // Check if this is an API request that should include auth headers\n const shouldAddAuth = shouldInjectAuth(url)\n\n if (shouldAddAuth && currentSession.value?.accessToken) {\n // Get auth headers\n try {\n const authHeaders = getAuthHeaders()\n \n // Merge headers with existing headers\n const headers = new Headers(init?.headers)\n Object.entries(authHeaders).forEach(([key, value]) => {\n headers.set(key, value)\n })\n\n // Create new init object with merged headers\n const enhancedInit: RequestInit = {\n ...init,\n headers\n }\n\n console.log('[Strands Auth] Injecting auth headers for request:', url)\n return originalFetch(input, enhancedInit)\n } catch (error) {\n // If we can't get auth headers, continue with original request\n console.warn('[Strands Auth] Failed to inject auth headers:', error)\n }\n }\n\n // Return original request\n return originalFetch(input, init)\n } catch (error) {\n // If anything goes wrong, fallback to original fetch\n console.error('[Strands Auth] Error in fetch interceptor:', error)\n return originalFetch(input, init)\n }\n }\n }\n})\n\n/**\n * Determine if a URL should have auth headers injected\n */\nfunction shouldInjectAuth(url: string): boolean {\n // Skip data URLs, blob URLs, etc.\n if (!url.startsWith('http')) {\n return false\n }\n\n // Skip third-party APIs that shouldn't receive our auth tokens\n const skipDomains = [\n 'googleapis.com',\n 'github.com/api',\n 'api.github.com',\n 'discord.com/api',\n 'graph.microsoft.com',\n 'api.stripe.com',\n 'api.twilio.com',\n // Add other third-party APIs here\n ]\n\n const shouldSkip = skipDomains.some(domain => url.includes(domain))\n if (shouldSkip) {\n return false\n }\n\n // Include auth for any API endpoints that contain common API patterns\n const apiPatterns = [\n '/api/',\n '/v1/',\n '/v2/',\n '/graphql',\n '/trpc',\n ]\n\n const isApiRequest = apiPatterns.some(pattern => url.includes(pattern))\n \n // Also check for common backend ports that might be API servers\n const apiPorts = [':3001', ':8000', ':8080', ':5000', ':4000']\n const hasApiPort = apiPorts.some(port => url.includes(port))\n\n return isApiRequest || hasApiPort\n}"],"names":["authInterceptor_client","name","setup","process","server","originalFetch","globalThis","fetch","async","input","init","useStrandsAuth","Promise","resolve","then","require","currentSession","getAuthHeaders","url","URL","toString","shouldAddAuth","startsWith","shouldSkip","some","includes","domain","isApiRequest","pattern","hasApiPort","port","shouldInjectAuth","value","accessToken","authHeaders","headers","Headers","Object","entries","forEach","key","set","enhancedInit","error"],"mappings":"mBAEAA,uCAAgC,CAC9BC,KAAM,2BACN,KAAAC,GAEE,GAAIC,QAAQC,OAAQ,OAGpB,MAAMC,EAAgBC,WAAWC,MAGjCD,WAAWC,MAAQC,MAAOC,EAA0BC,KAClD,IAEE,MAAMC,eAAEA,SAAyBC,QAAAC,UAAAC,KAAA,IAAAC,QAAO,0CAClCC,eAAEA,EAAAC,eAAgBA,GAAmBN,IAG3C,IAAIO,EAEFA,EADmB,iBAAVT,EACHA,EACGA,aAAiBU,IACpBV,EAAMW,WAENX,EAAMS,IAId,MAAMG,EAyCd,SAA0BH,GAExB,IAAKA,EAAII,WAAW,QAClB,OAAO,EAIT,MAWMC,EAXc,CAClB,iBACA,iBACA,iBACA,kBACA,sBACA,iBACA,kBAI6BC,QAAeN,EAAIO,SAASC,IAC3D,GAAIH,EACF,OAAO,EAIT,MAQMI,EARc,CAClB,QACA,OACA,OACA,WACA,SAG+BH,QAAgBN,EAAIO,SAASG,IAIxDC,EADW,CAAC,QAAS,QAAS,QAAS,QAAS,SAC1BL,QAAaN,EAAIO,SAASK,IAEtD,OAAOH,GAAgBE,CACzB,CAhF8BE,CAAiBb,GAEvC,GAAIG,GAAiBL,EAAegB,OAAOC,YAEzC,IACE,MAAMC,EAAcjB,IAGdkB,EAAU,IAAIC,QAAQ1B,GAAMyB,SAClCE,OAAOC,QAAQJ,GAAaK,QAAQ,EAAEC,EAAKR,MACzCG,EAAQM,IAAID,EAAKR,KAInB,MAAMU,EAA4B,IAC7BhC,EACHyB,WAIF,OAAO9B,EAAcI,EAAOiC,EAC9B,OAASC,GAGT,CAIF,OAAOtC,EAAcI,EAAOC,EAC9B,OAASiC,GAGP,OAAOtC,EAAcI,EAAOC,EAC9B,EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-interceptor.client.d.ts","sourceRoot":"","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/plugins/auth-interceptor.client.ts"],"names":[],"mappings":";;AAEA,wBA+DE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-interceptor.client.es.js","sources":["../../../../../../apps/accounts-ui/src/nuxt/runtime/plugins/auth-interceptor.client.ts"],"sourcesContent":["import { defineNuxtPlugin } from 'nuxt/app'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-interceptor',\n setup() {\n // Only run on client side\n if (process.server) return\n\n // Store original fetch function\n const originalFetch = globalThis.fetch\n\n // Create interceptor function\n globalThis.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n try {\n // Import auth composable dynamically to avoid SSR issues\n const { useStrandsAuth } = await import('../composables/useStrandsAuth')\n const { currentSession, getAuthHeaders } = useStrandsAuth()\n\n // Parse request URL to determine if it's an API request that needs auth\n let url: string\n if (typeof input === 'string') {\n url = input\n } else if (input instanceof URL) {\n url = input.toString()\n } else {\n url = input.url\n }\n\n // Check if this is an API request that should include auth headers\n const shouldAddAuth = shouldInjectAuth(url)\n\n if (shouldAddAuth && currentSession.value?.accessToken) {\n // Get auth headers\n try {\n const authHeaders = getAuthHeaders()\n \n // Merge headers with existing headers\n const headers = new Headers(init?.headers)\n Object.entries(authHeaders).forEach(([key, value]) => {\n headers.set(key, value)\n })\n\n // Create new init object with merged headers\n const enhancedInit: RequestInit = {\n ...init,\n headers\n }\n\n console.log('[Strands Auth] Injecting auth headers for request:', url)\n return originalFetch(input, enhancedInit)\n } catch (error) {\n // If we can't get auth headers, continue with original request\n console.warn('[Strands Auth] Failed to inject auth headers:', error)\n }\n }\n\n // Return original request\n return originalFetch(input, init)\n } catch (error) {\n // If anything goes wrong, fallback to original fetch\n console.error('[Strands Auth] Error in fetch interceptor:', error)\n return originalFetch(input, init)\n }\n }\n }\n})\n\n/**\n * Determine if a URL should have auth headers injected\n */\nfunction shouldInjectAuth(url: string): boolean {\n // Skip data URLs, blob URLs, etc.\n if (!url.startsWith('http')) {\n return false\n }\n\n // Skip third-party APIs that shouldn't receive our auth tokens\n const skipDomains = [\n 'googleapis.com',\n 'github.com/api',\n 'api.github.com',\n 'discord.com/api',\n 'graph.microsoft.com',\n 'api.stripe.com',\n 'api.twilio.com',\n // Add other third-party APIs here\n ]\n\n const shouldSkip = skipDomains.some(domain => url.includes(domain))\n if (shouldSkip) {\n return false\n }\n\n // Include auth for any API endpoints that contain common API patterns\n const apiPatterns = [\n '/api/',\n '/v1/',\n '/v2/',\n '/graphql',\n '/trpc',\n ]\n\n const isApiRequest = apiPatterns.some(pattern => url.includes(pattern))\n \n // Also check for common backend ports that might be API servers\n const apiPorts = [':3001', ':8000', ':8080', ':5000', ':4000']\n const hasApiPort = apiPorts.some(port => url.includes(port))\n\n return isApiRequest || hasApiPort\n}"],"names":[],"mappings":";AAEA,MAAA,yBAAe,iBAAiB;AAAA,EAC9B,MAAM;AAAA,EACN,QAAQ;AAEN,QAAI,QAAQ,OAAQ;AAGpB,UAAM,gBAAgB,WAAW;AAGjC,eAAW,QAAQ,OAAO,OAA0B,SAA0C;AAC5F,UAAI;AAEF,cAAM,EAAE,eAAA,IAAmB,MAAM,OAAO,qCAA+B;AACvE,cAAM,EAAE,gBAAgB,eAAA,IAAmB,eAAA;AAG3C,YAAI;AACJ,YAAI,OAAO,UAAU,UAAU;AAC7B,gBAAM;AAAA,QACR,WAAW,iBAAiB,KAAK;AAC/B,gBAAM,MAAM,SAAA;AAAA,QACd,OAAO;AACL,gBAAM,MAAM;AAAA,QACd;AAGA,cAAM,gBAAgB,iBAAiB,GAAG;AAE1C,YAAI,iBAAiB,eAAe,OAAO,aAAa;AAEtD,cAAI;AACF,kBAAM,cAAc,eAAA;AAGpB,kBAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AACzC,mBAAO,QAAQ,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACpD,sBAAQ,IAAI,KAAK,KAAK;AAAA,YACxB,CAAC;AAGD,kBAAM,eAA4B;AAAA,cAChC,GAAG;AAAA,cACH;AAAA,YAAA;AAGF,oBAAQ,IAAI,sDAAsD,GAAG;AACrE,mBAAO,cAAc,OAAO,YAAY;AAAA,UAC1C,SAAS,OAAO;AAEd,oBAAQ,KAAK,iDAAiD,KAAK;AAAA,UACrE;AAAA,QACF;AAGA,eAAO,cAAc,OAAO,IAAI;AAAA,MAClC,SAAS,OAAO;AAEd,gBAAQ,MAAM,8CAA8C,KAAK;AACjE,eAAO,cAAc,OAAO,IAAI;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAKD,SAAS,iBAAiB,KAAsB;AAE9C,MAAI,CAAC,IAAI,WAAW,MAAM,GAAG;AAC3B,WAAO;AAAA,EACT;AAGA,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAAA;AAIF,QAAM,aAAa,YAAY,KAAK,YAAU,IAAI,SAAS,MAAM,CAAC;AAClE,MAAI,YAAY;AACd,WAAO;AAAA,EACT;AAGA,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,eAAe,YAAY,KAAK,aAAW,IAAI,SAAS,OAAO,CAAC;AAGtE,QAAM,WAAW,CAAC,SAAS,SAAS,SAAS,SAAS,OAAO;AAC7D,QAAM,aAAa,SAAS,KAAK,UAAQ,IAAI,SAAS,IAAI,CAAC;AAE3D,SAAO,gBAAgB;AACzB;"}
|
package/dist/nuxt/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../apps/accounts-ui/src/nuxt/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,OAAO,CAAA;IACnB,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,IAAI,CAAA;IACf,IAAI,EAAE,WAAW,CAAA;CAClB;AAED,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,mBAAmB;QAC3B,WAAW,CAAC,EAAE;YACZ,OAAO,CAAC,EAAE,MAAM,CAAA;YAChB,aAAa,CAAC,EAAE,MAAM,CAAA;YACtB,SAAS,CAAC,EAAE,MAAM,CAAA;YAClB,WAAW,CAAC,EAAE,MAAM,CAAA;YACpB,WAAW,CAAC,EAAE,MAAM,CAAA;YACpB,WAAW,CAAC,EAAE,MAAM,CAAA;YACpB,YAAY,CAAC,EAAE,MAAM,CAAA;YACrB,uEAAuE;YACvE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;YACzB,WAAW,CAAC,EAAE,OAAO,CAAA;YACrB,eAAe,CAAC,EAAE,MAAM,CAAA;YACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;YAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;YAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;SAClB,CAAA;KACF;CACF;AAED,OAAO,QAAQ,UAAU,CAAC;IACxB,UAAU,OAAO;QACf,YAAY,EAAE;YACZ,WAAW,EAAE,MAAM,CAAA;SACpB,CAAA;KACF;CACF;AAED,OAAO,EAAE,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module.cjs.js","sources":["../../../../apps/accounts-ui/src/nuxt-v4/module.ts"],"sourcesContent":["import { defineNuxtModule, addPlugin, createResolver, addImports, addComponent, addRouteMiddleware } from '@nuxt/kit'\n\n// Re-export types for users\nexport type { StrandsAuthConfig, StrandsAuthEndpoints } from '../types'\nimport type { StrandsAuthConfig } from '../types'\n\n// Create defaults that match the full interface to ensure proper type inference \nconst moduleDefaults: StrandsAuthConfig = {\n baseUrl: 'https://your-api.example.com',\n accentColor: '#EA00A8',\n redirectUrl: '/',\n onSignInUrl: '/dashboard',\n onSignOutUrl: '/',\n autoRefresh: true,\n refreshInterval: 4,\n protectedRoutes: [],\n guestOnlyRoutes: ['/auth', '/login', '/register'],\n devMode: false,\n styles: true,\n supportEmail: '',\n oauth2RedirectUrl: ''\n}\n\nexport default defineNuxtModule<StrandsAuthConfig>({\n meta: {\n name: '@strands.gg/accui/nuxt-v4',\n configKey: 'strandsAuth',\n compatibility: {\n nuxt: '^4.0.0'\n }\n },\n defaults: moduleDefaults,\n async setup(options, nuxt) {\n const resolver = createResolver(import.meta.url)\n\n // Add runtime config\n nuxt.options.runtimeConfig.public = nuxt.options.runtimeConfig.public || {}\n const runtimeConfig = {\n ...options,\n styles: options.styles !== false\n }\n \n ;(nuxt.options.runtimeConfig.public as any).strandsAuth = runtimeConfig\n \n // Also add it to app config for immediate access\n ;(nuxt.options.appConfig as any).strandsAuth = runtimeConfig\n\n // Conditionally add CSS for styling based on autoImportStyles setting\n if (options.styles !== false) {\n nuxt.options.css.push('@strands.gg/accui/style.css')\n }\n\n // Plugin and middleware paths - always use built JavaScript files when module is distributed\n // This prevents issues when the module is loaded from dist/ directory\n const ext = 'es.js'\n \n const clientPluginPath = resolver.resolve(`./runtime/plugin.client.${ext}`)\n const serverPluginPath = resolver.resolve(`./runtime/plugin.server.${ext}`) \n const middlewarePath = resolver.resolve(`./runtime/middleware/auth.global.${ext}`)\n\n // Add the main plugin with highest priority to ensure config is set early\n addPlugin({\n src: clientPluginPath,\n mode: 'client'\n })\n\n // Add server plugin for SSR support \n addPlugin({\n src: serverPluginPath,\n mode: 'server'\n })\n\n // Add auth interceptor plugin for automatic token injection\n addPlugin({\n src: resolver.resolve(`./runtime/plugins/auth-interceptor.client.${ext}`),\n mode: 'client'\n })\n\n // Add middleware for route protection (updated for Nuxt v4)\n addRouteMiddleware({\n name: 'auth',\n path: middlewarePath,\n global: true\n })\n\n // Auto-import composables - use TypeScript in development, JavaScript in production\n addImports([\n {\n name: 'useStrandsAuth',\n as: 'useStrandsAuth',\n from: resolver.resolve(`./runtime/composables/useStrandsAuth.${ext}`)\n },\n {\n name: 'useAuthUser',\n as: 'useAuthUser', \n from: resolver.resolve(`./runtime/composables/useStrandsAuth.${ext}`)\n },\n {\n name: 'useAuthState',\n as: 'useAuthState',\n from: resolver.resolve(`./runtime/composables/useStrandsAuth.${ext}`)\n },\n {\n name: 'useAuthenticatedFetch',\n as: 'useAuthenticatedFetch',\n from: resolver.resolve(`./runtime/composables/useAuthenticatedFetch.${ext}`)\n }\n ])\n\n // Auto-register components from the main bundle export\n const components = [\n 'StrandsAuth',\n 'StrandsSignIn', \n 'StrandsSignUp',\n 'StrandsCompleteSignUp',\n 'StrandsUserProfile',\n 'StrandsUserButton',\n 'StrandsPasswordReset',\n 'StrandsMFASetup',\n 'StrandsConfigProvider',\n 'SignedIn',\n 'SignedOut',\n 'StrandsLogo',\n 'StrandsSecuredFooter',\n // UI Components\n 'StrandsUiAlert',\n 'StrandsUiButton',\n 'StrandsUiCard',\n 'StrandsUiInput',\n 'StrandsUiLink',\n 'StrandsUiTabs',\n 'StrandsUiLoader'\n ]\n\n for (const component of components) {\n addComponent({\n name: component,\n export: component,\n filePath: '@strands.gg/accui'\n })\n }\n\n // Add type declarations (updated for Nuxt v4)\n nuxt.hook('prepare:types', (opts) => {\n opts.references.push({\n types: '@strands.gg/auth-nuxt-v4'\n })\n \n // Add the composables to the auto-imports types\n opts.declarations.push(`\n declare global {\n const useStrandsAuth: typeof import('${resolver.resolve(`./runtime/composables/useStrandsAuth.d.ts`)}')['useStrandsAuth']\n const useAuthUser: typeof import('${resolver.resolve(`./runtime/composables/useStrandsAuth.d.ts`)}')['useAuthUser']\n const useAuthState: typeof import('${resolver.resolve(`./runtime/composables/useStrandsAuth.d.ts`)}')['useAuthState']\n }\n `)\n })\n }\n})\n"],"names":["module$1","defineNuxtModule","meta","name","configKey","compatibility","nuxt","defaults","baseUrl","accentColor","redirectUrl","onSignInUrl","onSignOutUrl","autoRefresh","refreshInterval","protectedRoutes","guestOnlyRoutes","devMode","styles","supportEmail","oauth2RedirectUrl","setup","options","resolver","createResolver","runtimeConfig","public","strandsAuth","appConfig","css","push","ext","clientPluginPath","resolve","serverPluginPath","middlewarePath","addPlugin","src","mode","addRouteMiddleware","path","global","addImports","as","from","components","component","addComponent","export","filePath","hook","opts","references","types","declarations"],"mappings":"yGAOA,MAgBAA,EAAeC,mBAAoC,CACjDC,KAAM,CACJC,KAAM,4BACNC,UAAW,cACXC,cAAe,CACbC,KAAM,WAGVC,SAxBwC,CACxCC,QAAS,+BACTC,YAAa,UACbC,YAAa,IACbC,YAAa,aACbC,aAAc,IACdC,aAAa,EACbC,gBAAiB,EACjBC,gBAAiB,GACjBC,gBAAiB,CAAC,QAAS,SAAU,aACrCC,SAAS,EACTC,QAAQ,EACRC,aAAc,GACdC,kBAAmB,IAYnB,WAAMC,CAAMC,EAAShB,GACnB,MAAMiB,EAAWC,EAAAA,gMAGjBlB,EAAKgB,QAAQG,cAAcC,OAASpB,EAAKgB,QAAQG,cAAcC,QAAU,CAAA,EACzE,MAAMD,EAAgB,IACjBH,EACHJ,QAA2B,IAAnBI,EAAQJ,QAGhBZ,EAAKgB,QAAQG,cAAcC,OAAeC,YAAcF,EAGxDnB,EAAKgB,QAAQM,UAAkBD,YAAcF,GAGxB,IAAnBH,EAAQJ,QACVZ,EAAKgB,QAAQO,IAAIC,KAAK,+BAKxB,MAAMC,EAAM,QAENC,EAAmBT,EAASU,QAAQ,2BAA2BF,KAC/DG,EAAmBX,EAASU,QAAQ,2BAA2BF,KAC/DI,EAAiBZ,EAASU,QAAQ,oCAAoCF,KAG5EK,YAAU,CACRC,IAAKL,EACLM,KAAM,WAIRF,YAAU,CACRC,IAAKH,EACLI,KAAM,WAIRF,YAAU,CACRC,IAAKd,EAASU,QAAQ,6CAA6CF,KACnEO,KAAM,WAIRC,qBAAmB,CACjBpC,KAAM,OACNqC,KAAML,EACNM,QAAQ,IAIVC,aAAW,CACT,CACEvC,KAAM,iBACNwC,GAAI,iBACJC,KAAMrB,EAASU,QAAQ,wCAAwCF,MAEjE,CACE5B,KAAM,cACNwC,GAAI,cACJC,KAAMrB,EAASU,QAAQ,wCAAwCF,MAEjE,CACE5B,KAAM,eACNwC,GAAI,eACJC,KAAMrB,EAASU,QAAQ,wCAAwCF,MAEjE,CACE5B,KAAM,wBACNwC,GAAI,wBACJC,KAAMrB,EAASU,QAAQ,+CAA+CF,QAK1E,MAAMc,EAAa,CACjB,cACA,gBACA,gBACA,wBACA,qBACA,oBACA,uBACA,kBACA,wBACA,WACA,YACA,cACA,uBAEA,iBACA,kBACA,gBACA,iBACA,gBACA,gBACA,mBAGF,IAAA,MAAWC,KAAaD,EACtBE,eAAa,CACX5C,KAAM2C,EACNE,OAAQF,EACRG,SAAU,sBAKd3C,EAAK4C,KAAK,gBAAkBC,IAC1BA,EAAKC,WAAWtB,KAAK,CACnBuB,MAAO,6BAITF,EAAKG,aAAaxB,KAAK,8EAEoBP,EAASU,QAAQ,iHACpBV,EAASU,QAAQ,+GAChBV,EAASU,QAAQ,sFAI9D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../apps/accounts-ui/src/nuxt-v4/module.ts"],"names":[],"mappings":";AAGA,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;;AAmBjD,wBAuIE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module.es.js","sources":["../../../../apps/accounts-ui/src/nuxt-v4/module.ts"],"sourcesContent":["import { defineNuxtModule, addPlugin, createResolver, addImports, addComponent, addRouteMiddleware } from '@nuxt/kit'\n\n// Re-export types for users\nexport type { StrandsAuthConfig, StrandsAuthEndpoints } from '../types'\nimport type { StrandsAuthConfig } from '../types'\n\n// Create defaults that match the full interface to ensure proper type inference \nconst moduleDefaults: StrandsAuthConfig = {\n baseUrl: 'https://your-api.example.com',\n accentColor: '#EA00A8',\n redirectUrl: '/',\n onSignInUrl: '/dashboard',\n onSignOutUrl: '/',\n autoRefresh: true,\n refreshInterval: 4,\n protectedRoutes: [],\n guestOnlyRoutes: ['/auth', '/login', '/register'],\n devMode: false,\n styles: true,\n supportEmail: '',\n oauth2RedirectUrl: ''\n}\n\nexport default defineNuxtModule<StrandsAuthConfig>({\n meta: {\n name: '@strands.gg/accui/nuxt-v4',\n configKey: 'strandsAuth',\n compatibility: {\n nuxt: '^4.0.0'\n }\n },\n defaults: moduleDefaults,\n async setup(options, nuxt) {\n const resolver = createResolver(import.meta.url)\n\n // Add runtime config\n nuxt.options.runtimeConfig.public = nuxt.options.runtimeConfig.public || {}\n const runtimeConfig = {\n ...options,\n styles: options.styles !== false\n }\n \n ;(nuxt.options.runtimeConfig.public as any).strandsAuth = runtimeConfig\n \n // Also add it to app config for immediate access\n ;(nuxt.options.appConfig as any).strandsAuth = runtimeConfig\n\n // Conditionally add CSS for styling based on autoImportStyles setting\n if (options.styles !== false) {\n nuxt.options.css.push('@strands.gg/accui/style.css')\n }\n\n // Plugin and middleware paths - always use built JavaScript files when module is distributed\n // This prevents issues when the module is loaded from dist/ directory\n const ext = 'es.js'\n \n const clientPluginPath = resolver.resolve(`./runtime/plugin.client.${ext}`)\n const serverPluginPath = resolver.resolve(`./runtime/plugin.server.${ext}`) \n const middlewarePath = resolver.resolve(`./runtime/middleware/auth.global.${ext}`)\n\n // Add the main plugin with highest priority to ensure config is set early\n addPlugin({\n src: clientPluginPath,\n mode: 'client'\n })\n\n // Add server plugin for SSR support \n addPlugin({\n src: serverPluginPath,\n mode: 'server'\n })\n\n // Add auth interceptor plugin for automatic token injection\n addPlugin({\n src: resolver.resolve(`./runtime/plugins/auth-interceptor.client.${ext}`),\n mode: 'client'\n })\n\n // Add middleware for route protection (updated for Nuxt v4)\n addRouteMiddleware({\n name: 'auth',\n path: middlewarePath,\n global: true\n })\n\n // Auto-import composables - use TypeScript in development, JavaScript in production\n addImports([\n {\n name: 'useStrandsAuth',\n as: 'useStrandsAuth',\n from: resolver.resolve(`./runtime/composables/useStrandsAuth.${ext}`)\n },\n {\n name: 'useAuthUser',\n as: 'useAuthUser', \n from: resolver.resolve(`./runtime/composables/useStrandsAuth.${ext}`)\n },\n {\n name: 'useAuthState',\n as: 'useAuthState',\n from: resolver.resolve(`./runtime/composables/useStrandsAuth.${ext}`)\n },\n {\n name: 'useAuthenticatedFetch',\n as: 'useAuthenticatedFetch',\n from: resolver.resolve(`./runtime/composables/useAuthenticatedFetch.${ext}`)\n }\n ])\n\n // Auto-register components from the main bundle export\n const components = [\n 'StrandsAuth',\n 'StrandsSignIn', \n 'StrandsSignUp',\n 'StrandsCompleteSignUp',\n 'StrandsUserProfile',\n 'StrandsUserButton',\n 'StrandsPasswordReset',\n 'StrandsMFASetup',\n 'StrandsConfigProvider',\n 'SignedIn',\n 'SignedOut',\n 'StrandsLogo',\n 'StrandsSecuredFooter',\n // UI Components\n 'StrandsUiAlert',\n 'StrandsUiButton',\n 'StrandsUiCard',\n 'StrandsUiInput',\n 'StrandsUiLink',\n 'StrandsUiTabs',\n 'StrandsUiLoader'\n ]\n\n for (const component of components) {\n addComponent({\n name: component,\n export: component,\n filePath: '@strands.gg/accui'\n })\n }\n\n // Add type declarations (updated for Nuxt v4)\n nuxt.hook('prepare:types', (opts) => {\n opts.references.push({\n types: '@strands.gg/auth-nuxt-v4'\n })\n \n // Add the composables to the auto-imports types\n opts.declarations.push(`\n declare global {\n const useStrandsAuth: typeof import('${resolver.resolve(`./runtime/composables/useStrandsAuth.d.ts`)}')['useStrandsAuth']\n const useAuthUser: typeof import('${resolver.resolve(`./runtime/composables/useStrandsAuth.d.ts`)}')['useAuthUser']\n const useAuthState: typeof import('${resolver.resolve(`./runtime/composables/useStrandsAuth.d.ts`)}')['useAuthState']\n }\n `)\n })\n }\n})\n"],"names":[],"mappings":";AAOA,MAAM,iBAAoC;AAAA,EACxC,SAAS;AAAA,EACT,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,iBAAiB,CAAA;AAAA,EACjB,iBAAiB,CAAC,SAAS,UAAU,WAAW;AAAA,EAChD,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,mBAAmB;AACrB;AAEA,MAAA,SAAe,iBAAoC;AAAA,EACjD,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,eAAe;AAAA,MACb,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,UAAU;AAAA,EACV,MAAM,MAAM,SAAS,MAAM;AACzB,UAAM,WAAW,eAAe,YAAY,GAAG;AAG/C,SAAK,QAAQ,cAAc,SAAS,KAAK,QAAQ,cAAc,UAAU,CAAA;AACzE,UAAM,gBAAgB;AAAA,MACpB,GAAG;AAAA,MACH,QAAQ,QAAQ,WAAW;AAAA,IAAA;AAG3B,SAAK,QAAQ,cAAc,OAAe,cAAc;AAGxD,SAAK,QAAQ,UAAkB,cAAc;AAG/C,QAAI,QAAQ,WAAW,OAAO;AAC5B,WAAK,QAAQ,IAAI,KAAK,6BAA6B;AAAA,IACrD;AAIA,UAAM,MAAM;AAEZ,UAAM,mBAAmB,SAAS,QAAQ,2BAA2B,GAAG,EAAE;AAC1E,UAAM,mBAAmB,SAAS,QAAQ,2BAA2B,GAAG,EAAE;AAC1E,UAAM,iBAAiB,SAAS,QAAQ,oCAAoC,GAAG,EAAE;AAGjF,cAAU;AAAA,MACR,KAAK;AAAA,MACL,MAAM;AAAA,IAAA,CACP;AAGD,cAAU;AAAA,MACR,KAAK;AAAA,MACL,MAAM;AAAA,IAAA,CACP;AAGD,cAAU;AAAA,MACR,KAAK,SAAS,QAAQ,6CAA6C,GAAG,EAAE;AAAA,MACxE,MAAM;AAAA,IAAA,CACP;AAGD,uBAAmB;AAAA,MACjB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,IAAA,CACT;AAGD,eAAW;AAAA,MACT;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,MAAM,SAAS,QAAQ,wCAAwC,GAAG,EAAE;AAAA,MAAA;AAAA,MAEtE;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,MAAM,SAAS,QAAQ,wCAAwC,GAAG,EAAE;AAAA,MAAA;AAAA,MAEtE;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,MAAM,SAAS,QAAQ,wCAAwC,GAAG,EAAE;AAAA,MAAA;AAAA,MAEtE;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,MAAM,SAAS,QAAQ,+CAA+C,GAAG,EAAE;AAAA,MAAA;AAAA,IAC7E,CACD;AAGD,UAAM,aAAa;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAGF,eAAW,aAAa,YAAY;AAClC,mBAAa;AAAA,QACX,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,UAAU;AAAA,MAAA,CACX;AAAA,IACH;AAGA,SAAK,KAAK,iBAAiB,CAAC,SAAS;AACnC,WAAK,WAAW,KAAK;AAAA,QACnB,OAAO;AAAA,MAAA,CACR;AAGD,WAAK,aAAa,KAAK;AAAA;AAAA,iDAEoB,SAAS,QAAQ,2CAA2C,CAAC;AAAA,8CAChE,SAAS,QAAQ,2CAA2C,CAAC;AAAA,+CAC5D,SAAS,QAAQ,2CAA2C,CAAC;AAAA;AAAA,OAErG;AAAA,IACH,CAAC;AAAA,EACH;AACF,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthenticatedFetch.cjs.js","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/composables/useAuthenticatedFetch.ts"],"sourcesContent":["import { useRuntimeConfig } from 'nuxt/app'\nimport { useStrandsAuth } from './useStrandsAuth'\nimport type { AuthenticatedFetchOptions, StrandsAuthConfig } from '../../../types'\n\n/**\n * Enhanced fetch composable that automatically includes auth headers\n * and handles token refresh for API requests\n */\nexport function useAuthenticatedFetch() {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n const { currentSession, refreshToken, getAuthHeaders } = useStrandsAuth()\n\n const authenticatedFetch = async (\n url: string | URL,\n options: AuthenticatedFetchOptions = {}\n ): Promise<Response> => {\n const {\n autoRefresh = true,\n requireAuth = true,\n baseURL,\n ...fetchOptions\n } = options\n\n // Check if user is authenticated when required\n if (requireAuth && !currentSession.value?.accessToken) {\n throw new Error('User is not authenticated')\n }\n\n // Construct full URL using baseURL from options or config\n let fullUrl: string | URL = url\n const resolvedBaseURL = baseURL || config.baseUrl\n \n if (resolvedBaseURL && typeof url === 'string' && !url.startsWith('http')) {\n fullUrl = new URL(url, resolvedBaseURL).toString()\n }\n\n // Prepare headers\n const headers = new Headers(fetchOptions.headers)\n \n // Add auth headers if available\n if (currentSession.value?.accessToken) {\n try {\n const authHeaders = getAuthHeaders()\n Object.entries(authHeaders).forEach(([key, value]) => {\n headers.set(key, value as string)\n })\n } catch (error) {\n console.warn('[Strands Auth] Failed to get auth headers:', error)\n if (requireAuth) {\n throw error\n }\n }\n }\n\n // Make the request\n const enhancedOptions: RequestInit = {\n ...fetchOptions,\n headers\n }\n\n let response = await fetch(fullUrl, enhancedOptions)\n\n // Handle 401 with auto-refresh\n if (response.status === 401 && autoRefresh && currentSession.value?.refreshToken) {\n console.log('[Strands Auth] Request failed with 401, attempting token refresh...')\n \n try {\n // Attempt to refresh token\n const refreshed = await refreshToken()\n \n if (refreshed && currentSession.value?.accessToken) {\n // Update headers with new token\n const newAuthHeaders = getAuthHeaders()\n Object.entries(newAuthHeaders).forEach(([key, value]) => {\n headers.set(key, value as string)\n })\n\n // Retry the request with new token\n console.log('[Strands Auth] Retrying request with refreshed token')\n response = await fetch(fullUrl, { ...enhancedOptions, headers })\n }\n } catch (refreshError) {\n console.error('[Strands Auth] Token refresh failed:', refreshError)\n // Return the original 401 response\n }\n }\n\n return response\n }\n\n /**\n * Convenience method for making authenticated GET requests\n */\n const get = (url: string | URL, options?: AuthenticatedFetchOptions) => {\n return authenticatedFetch(url, { ...options, method: 'GET' })\n }\n\n /**\n * Convenience method for making authenticated POST requests\n */\n const post = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n // Auto-set content type for JSON requests\n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'POST',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n /**\n * Convenience method for making authenticated PUT requests\n */\n const put = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'PUT',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n /**\n * Convenience method for making authenticated DELETE requests\n */\n const del = (url: string | URL, options?: AuthenticatedFetchOptions) => {\n return authenticatedFetch(url, { ...options, method: 'DELETE' })\n }\n\n /**\n * Convenience method for making authenticated PATCH requests\n */\n const patch = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'PATCH',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n return {\n authenticatedFetch,\n get,\n post,\n put,\n delete: del,\n patch\n }\n}\n\n// Export convenience functions for non-composable usage\nexport const $authFetch = {\n get: async (url: string | URL, options?: AuthenticatedFetchOptions) => {\n const { get } = useAuthenticatedFetch()\n return get(url, options)\n },\n post: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { post } = useAuthenticatedFetch()\n return post(url, body, options)\n },\n put: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { put } = useAuthenticatedFetch()\n return put(url, body, options)\n },\n delete: async (url: string | URL, options?: AuthenticatedFetchOptions) => {\n const { delete: del } = useAuthenticatedFetch()\n return del(url, options)\n },\n patch: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { patch } = useAuthenticatedFetch()\n return patch(url, body, options)\n }\n}"],"names":["useAuthenticatedFetch","config","useRuntimeConfig","public","currentSession","refreshToken","getAuthHeaders","useStrandsAuth","authenticatedFetch","async","url","options","autoRefresh","requireAuth","baseURL","fetchOptions","value","accessToken","Error","fullUrl","resolvedBaseURL","baseUrl","startsWith","URL","toString","headers","Headers","authHeaders","Object","entries","forEach","key","set","error","enhancedOptions","response","fetch","status","newAuthHeaders","refreshError","get","method","post","body","has","JSON","stringify","put","delete","patch","$authFetch","del"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthenticatedFetch.d.ts","sourceRoot":"","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/composables/useAuthenticatedFetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAqB,MAAM,gBAAgB,CAAA;AAElF;;;GAGG;AACH,wBAAgB,qBAAqB;8BAK5B,MAAM,GAAG,GAAG,YACR,yBAAyB,KACjC,OAAO,CAAC,QAAQ,CAAC;eA8EF,MAAM,GAAG,GAAG,YAAY,yBAAyB;gBAOhD,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;eAmB9D,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;kBAkB7D,MAAM,GAAG,GAAG,YAAY,yBAAyB;iBAO/C,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;EAuBlF;AAGD,eAAO,MAAM,UAAU;eACJ,MAAM,GAAG,GAAG,YAAY,yBAAyB;gBAIhD,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;eAI9D,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;kBAI1D,MAAM,GAAG,GAAG,YAAY,yBAAyB;iBAIlD,MAAM,GAAG,GAAG,SAAS,GAAG,YAAY,yBAAyB;CAIjF,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthenticatedFetch.es.js","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/composables/useAuthenticatedFetch.ts"],"sourcesContent":["import { useRuntimeConfig } from 'nuxt/app'\nimport { useStrandsAuth } from './useStrandsAuth'\nimport type { AuthenticatedFetchOptions, StrandsAuthConfig } from '../../../types'\n\n/**\n * Enhanced fetch composable that automatically includes auth headers\n * and handles token refresh for API requests\n */\nexport function useAuthenticatedFetch() {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n const { currentSession, refreshToken, getAuthHeaders } = useStrandsAuth()\n\n const authenticatedFetch = async (\n url: string | URL,\n options: AuthenticatedFetchOptions = {}\n ): Promise<Response> => {\n const {\n autoRefresh = true,\n requireAuth = true,\n baseURL,\n ...fetchOptions\n } = options\n\n // Check if user is authenticated when required\n if (requireAuth && !currentSession.value?.accessToken) {\n throw new Error('User is not authenticated')\n }\n\n // Construct full URL using baseURL from options or config\n let fullUrl: string | URL = url\n const resolvedBaseURL = baseURL || config.baseUrl\n \n if (resolvedBaseURL && typeof url === 'string' && !url.startsWith('http')) {\n fullUrl = new URL(url, resolvedBaseURL).toString()\n }\n\n // Prepare headers\n const headers = new Headers(fetchOptions.headers)\n \n // Add auth headers if available\n if (currentSession.value?.accessToken) {\n try {\n const authHeaders = getAuthHeaders()\n Object.entries(authHeaders).forEach(([key, value]) => {\n headers.set(key, value as string)\n })\n } catch (error) {\n console.warn('[Strands Auth] Failed to get auth headers:', error)\n if (requireAuth) {\n throw error\n }\n }\n }\n\n // Make the request\n const enhancedOptions: RequestInit = {\n ...fetchOptions,\n headers\n }\n\n let response = await fetch(fullUrl, enhancedOptions)\n\n // Handle 401 with auto-refresh\n if (response.status === 401 && autoRefresh && currentSession.value?.refreshToken) {\n console.log('[Strands Auth] Request failed with 401, attempting token refresh...')\n \n try {\n // Attempt to refresh token\n const refreshed = await refreshToken()\n \n if (refreshed && currentSession.value?.accessToken) {\n // Update headers with new token\n const newAuthHeaders = getAuthHeaders()\n Object.entries(newAuthHeaders).forEach(([key, value]) => {\n headers.set(key, value as string)\n })\n\n // Retry the request with new token\n console.log('[Strands Auth] Retrying request with refreshed token')\n response = await fetch(fullUrl, { ...enhancedOptions, headers })\n }\n } catch (refreshError) {\n console.error('[Strands Auth] Token refresh failed:', refreshError)\n // Return the original 401 response\n }\n }\n\n return response\n }\n\n /**\n * Convenience method for making authenticated GET requests\n */\n const get = (url: string | URL, options?: AuthenticatedFetchOptions) => {\n return authenticatedFetch(url, { ...options, method: 'GET' })\n }\n\n /**\n * Convenience method for making authenticated POST requests\n */\n const post = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n // Auto-set content type for JSON requests\n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'POST',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n /**\n * Convenience method for making authenticated PUT requests\n */\n const put = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'PUT',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n /**\n * Convenience method for making authenticated DELETE requests\n */\n const del = (url: string | URL, options?: AuthenticatedFetchOptions) => {\n return authenticatedFetch(url, { ...options, method: 'DELETE' })\n }\n\n /**\n * Convenience method for making authenticated PATCH requests\n */\n const patch = (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const headers = new Headers(options?.headers)\n \n if (body && typeof body === 'object' && !headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n\n return authenticatedFetch(url, {\n ...options,\n method: 'PATCH',\n headers,\n body: typeof body === 'object' ? JSON.stringify(body) : body\n })\n }\n\n return {\n authenticatedFetch,\n get,\n post,\n put,\n delete: del,\n patch\n }\n}\n\n// Export convenience functions for non-composable usage\nexport const $authFetch = {\n get: async (url: string | URL, options?: AuthenticatedFetchOptions) => {\n const { get } = useAuthenticatedFetch()\n return get(url, options)\n },\n post: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { post } = useAuthenticatedFetch()\n return post(url, body, options)\n },\n put: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { put } = useAuthenticatedFetch()\n return put(url, body, options)\n },\n delete: async (url: string | URL, options?: AuthenticatedFetchOptions) => {\n const { delete: del } = useAuthenticatedFetch()\n return del(url, options)\n },\n patch: async (url: string | URL, body?: any, options?: AuthenticatedFetchOptions) => {\n const { patch } = useAuthenticatedFetch()\n return patch(url, body, options)\n }\n}"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useStrandsAuth.cjs.js","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/composables/useStrandsAuth.ts"],"sourcesContent":["import type { Ref, ComputedRef } from 'vue'\nimport { readonly } from 'vue'\nimport { useRuntimeConfig } from 'nuxt/app'\nimport { navigateTo } from 'nuxt/app'\nimport { useStrandsAuth as useVueStrandsAuth } from '../../../vue/composables/useStrandsAuth'\nimport type { StrandsAuthConfig } from '../../../types'\nimport type { User, Session, SignInCredentials, SignUpData, AuthResponse } from '../../../types'\n\ninterface StrandsAuthReturn {\n user: ComputedRef<User | null>\n currentUser: ComputedRef<User | null>\n currentSession: ComputedRef<Session | null>\n isAuthenticated: ComputedRef<boolean>\n isLoading: ComputedRef<boolean>\n loading: ComputedRef<boolean>\n signIn: (credentials: SignInCredentials) => Promise<AuthResponse | void>\n signUp: (userData: SignUpData) => Promise<AuthResponse | void>\n signOut: () => Promise<void>\n refreshToken: () => Promise<boolean>\n updateProfile: (profileData: Partial<User>) => Promise<User | null>\n setAuthData: (authResponse: AuthResponse) => void\n getAuthHeaders: () => Record<string, string>\n initialize: () => Promise<void>\n}\n\nexport const useStrandsAuth = (): StrandsAuthReturn => {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n \n // Get the base Vue composable\n const vueAuth = useVueStrandsAuth()\n\n // Initialize function for setup\n const initialize = async () => {\n try {\n await vueAuth.initialize()\n } catch (error) {\n console.warn('[Strands Auth v4] Initialize failed:', error)\n }\n }\n\n // Enhanced signIn with Nuxt navigation\n const signIn = async (credentials: { email: string; password: string }) => {\n const result = await vueAuth.signIn(credentials)\n \n // Navigate to configured sign-in URL on success\n if (result && config.onSignInUrl) {\n await navigateTo(config.onSignInUrl)\n }\n \n return result\n }\n\n // Enhanced signUp with Nuxt navigation (magic link flow)\n const signUp = async (userData: { email: string }) => {\n // For magic link flow, we just need an email\n const result = await vueAuth.signUp({\n email: userData.email,\n password: '', // Empty password for magic link\n firstName: '', // Will be filled later in the magic link flow\n lastName: ''\n })\n \n // For magic link, we don't navigate immediately\n // The user will complete signup via the magic link\n \n return result\n }\n\n // Enhanced signOut with Nuxt navigation\n const signOut = async () => {\n await vueAuth.signOut()\n \n // Navigate to configured sign-out URL\n if (config.onSignOutUrl) {\n await navigateTo(config.onSignOutUrl)\n }\n }\n\n return {\n // Re-export Vue composable state and methods with explicit typing\n user: vueAuth.user as ComputedRef<User | null>,\n currentUser: vueAuth.currentUser as ComputedRef<User | null>,\n currentSession: vueAuth.currentSession,\n isAuthenticated: vueAuth.isAuthenticated,\n isLoading: vueAuth.isLoading,\n loading: vueAuth.loading,\n\n // Methods with Nuxt-specific navigation overrides\n signIn,\n signUp,\n signOut,\n \n // Other methods from Vue composable\n refreshToken: vueAuth.refreshToken,\n updateProfile: vueAuth.updateProfile,\n setAuthData: vueAuth.setAuthData,\n getAuthHeaders: vueAuth.getAuthHeaders,\n \n // Initialize function\n initialize,\n }\n}\n\n// Convenience composables \nexport const useAuthUser = (): { user: ComputedRef<User | null> } => {\n const { user } = useStrandsAuth()\n return { user }\n}\n\nexport const useAuthState = (): { isAuthenticated: ComputedRef<boolean>, isLoading: ComputedRef<boolean> } => {\n const { isAuthenticated, isLoading } = useStrandsAuth()\n return { isAuthenticated, isLoading }\n}\n"],"names":["useStrandsAuth","config","useRuntimeConfig","public","vueAuth","useVueStrandsAuth","user","currentUser","currentSession","isAuthenticated","isLoading","loading","signIn","async","credentials","result","onSignInUrl","navigateTo","signUp","userData","email","password","firstName","lastName","signOut","onSignOutUrl","refreshToken","updateProfile","setAuthData","getAuthHeaders","initialize","error"],"mappings":"8JAyBaA,EAAiB,KAC5B,MAAMC,EAASC,EAAAA,mBAAmBC,OAAoB,YAGhDC,EAAUC,EAAAA,iBAiDhB,MAAO,CAELC,KAAMF,EAAQE,KACdC,YAAaH,EAAQG,YACrBC,eAAgBJ,EAAQI,eACxBC,gBAAiBL,EAAQK,gBACzBC,UAAWN,EAAQM,UACnBC,QAASP,EAAQO,QAGjBC,OA/CaC,MAAOC,IACpB,MAAMC,QAAeX,EAAQQ,OAAOE,GAOpC,OAJIC,GAAUd,EAAOe,mBACbC,EAAAA,WAAWhB,EAAOe,aAGnBD,GAwCPG,OApCaL,MAAOM,SAECf,EAAQc,OAAO,CAClCE,MAAOD,EAASC,MAChBC,SAAU,GACVC,UAAW,GACXC,SAAU,KA+BZC,QArBcX,gBACRT,EAAQoB,UAGVvB,EAAOwB,oBACHR,EAAAA,WAAWhB,EAAOwB,eAmB1BC,aAActB,EAAQsB,aACtBC,cAAevB,EAAQuB,cACvBC,YAAaxB,EAAQwB,YACrBC,eAAgBzB,EAAQyB,eAGxBC,WAnEiBjB,UACjB,UACQT,EAAQ0B,YAChB,OAASC,GAET,0BAwEwB,KAC1B,MAAMtB,gBAAEA,EAAAC,UAAiBA,GAAcV,IACvC,MAAO,CAAES,kBAAiBC,kCAPD,KACzB,MAAMJ,KAAEA,GAASN,IACjB,MAAO,CAAEM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useStrandsAuth.d.ts","sourceRoot":"","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/composables/useStrandsAuth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,WAAW,EAAE,MAAM,KAAK,CAAA;AAM3C,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAEhG,UAAU,iBAAiB;IACzB,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IAC9B,WAAW,EAAE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IACrC,cAAc,EAAE,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAC3C,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IACrC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IAC/B,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IACxE,MAAM,EAAE,CAAC,QAAQ,EAAE,UAAU,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC9D,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACpC,aAAa,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IACnE,WAAW,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAA;IACjD,cAAc,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5C,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC;AAED,eAAO,MAAM,cAAc,QAAO,iBA4EjC,CAAA;AAGD,eAAO,MAAM,WAAW,QAAO;IAAE,IAAI,EAAE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;CAG9D,CAAA;AAED,eAAO,MAAM,YAAY,QAAO;IAAE,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAGvG,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useStrandsAuth.es.js","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/composables/useStrandsAuth.ts"],"sourcesContent":["import type { Ref, ComputedRef } from 'vue'\nimport { readonly } from 'vue'\nimport { useRuntimeConfig } from 'nuxt/app'\nimport { navigateTo } from 'nuxt/app'\nimport { useStrandsAuth as useVueStrandsAuth } from '../../../vue/composables/useStrandsAuth'\nimport type { StrandsAuthConfig } from '../../../types'\nimport type { User, Session, SignInCredentials, SignUpData, AuthResponse } from '../../../types'\n\ninterface StrandsAuthReturn {\n user: ComputedRef<User | null>\n currentUser: ComputedRef<User | null>\n currentSession: ComputedRef<Session | null>\n isAuthenticated: ComputedRef<boolean>\n isLoading: ComputedRef<boolean>\n loading: ComputedRef<boolean>\n signIn: (credentials: SignInCredentials) => Promise<AuthResponse | void>\n signUp: (userData: SignUpData) => Promise<AuthResponse | void>\n signOut: () => Promise<void>\n refreshToken: () => Promise<boolean>\n updateProfile: (profileData: Partial<User>) => Promise<User | null>\n setAuthData: (authResponse: AuthResponse) => void\n getAuthHeaders: () => Record<string, string>\n initialize: () => Promise<void>\n}\n\nexport const useStrandsAuth = (): StrandsAuthReturn => {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n \n // Get the base Vue composable\n const vueAuth = useVueStrandsAuth()\n\n // Initialize function for setup\n const initialize = async () => {\n try {\n await vueAuth.initialize()\n } catch (error) {\n console.warn('[Strands Auth v4] Initialize failed:', error)\n }\n }\n\n // Enhanced signIn with Nuxt navigation\n const signIn = async (credentials: { email: string; password: string }) => {\n const result = await vueAuth.signIn(credentials)\n \n // Navigate to configured sign-in URL on success\n if (result && config.onSignInUrl) {\n await navigateTo(config.onSignInUrl)\n }\n \n return result\n }\n\n // Enhanced signUp with Nuxt navigation (magic link flow)\n const signUp = async (userData: { email: string }) => {\n // For magic link flow, we just need an email\n const result = await vueAuth.signUp({\n email: userData.email,\n password: '', // Empty password for magic link\n firstName: '', // Will be filled later in the magic link flow\n lastName: ''\n })\n \n // For magic link, we don't navigate immediately\n // The user will complete signup via the magic link\n \n return result\n }\n\n // Enhanced signOut with Nuxt navigation\n const signOut = async () => {\n await vueAuth.signOut()\n \n // Navigate to configured sign-out URL\n if (config.onSignOutUrl) {\n await navigateTo(config.onSignOutUrl)\n }\n }\n\n return {\n // Re-export Vue composable state and methods with explicit typing\n user: vueAuth.user as ComputedRef<User | null>,\n currentUser: vueAuth.currentUser as ComputedRef<User | null>,\n currentSession: vueAuth.currentSession,\n isAuthenticated: vueAuth.isAuthenticated,\n isLoading: vueAuth.isLoading,\n loading: vueAuth.loading,\n\n // Methods with Nuxt-specific navigation overrides\n signIn,\n signUp,\n signOut,\n \n // Other methods from Vue composable\n refreshToken: vueAuth.refreshToken,\n updateProfile: vueAuth.updateProfile,\n setAuthData: vueAuth.setAuthData,\n getAuthHeaders: vueAuth.getAuthHeaders,\n \n // Initialize function\n initialize,\n }\n}\n\n// Convenience composables \nexport const useAuthUser = (): { user: ComputedRef<User | null> } => {\n const { user } = useStrandsAuth()\n return { user }\n}\n\nexport const useAuthState = (): { isAuthenticated: ComputedRef<boolean>, isLoading: ComputedRef<boolean> } => {\n const { isAuthenticated, isLoading } = useStrandsAuth()\n return { isAuthenticated, isLoading }\n}\n"],"names":["useVueStrandsAuth"],"mappings":";;AAyBO,MAAM,iBAAiB,MAAyB;AACrD,QAAM,SAAS,mBAAmB,OAAO,aAAa;AAGtD,QAAM,UAAUA,iBAAA;AAGhB,QAAM,aAAa,YAAY;AAC7B,QAAI;AACF,YAAM,QAAQ,WAAA;AAAA,IAChB,SAAS,OAAO;AACd,cAAQ,KAAK,wCAAwC,KAAK;AAAA,IAC5D;AAAA,EACF;AAGA,QAAM,SAAS,OAAO,gBAAqD;AACzE,UAAM,SAAS,MAAM,QAAQ,OAAO,WAAW;AAG/C,QAAI,UAAU,OAAO,aAAa;AAChC,YAAM,WAAW,OAAO,WAAW;AAAA,IACrC;AAEA,WAAO;AAAA,EACT;AAGA,QAAM,SAAS,OAAO,aAAgC;AAEpD,UAAM,SAAS,MAAM,QAAQ,OAAO;AAAA,MAClC,OAAO,SAAS;AAAA,MAChB,UAAU;AAAA;AAAA,MACV,WAAW;AAAA;AAAA,MACX,UAAU;AAAA,IAAA,CACX;AAKD,WAAO;AAAA,EACT;AAGA,QAAM,UAAU,YAAY;AAC1B,UAAM,QAAQ,QAAA;AAGd,QAAI,OAAO,cAAc;AACvB,YAAM,WAAW,OAAO,YAAY;AAAA,IACtC;AAAA,EACF;AAEA,SAAO;AAAA;AAAA,IAEL,MAAM,QAAQ;AAAA,IACd,aAAa,QAAQ;AAAA,IACrB,gBAAgB,QAAQ;AAAA,IACxB,iBAAiB,QAAQ;AAAA,IACzB,WAAW,QAAQ;AAAA,IACnB,SAAS,QAAQ;AAAA;AAAA,IAGjB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAGA,cAAc,QAAQ;AAAA,IACtB,eAAe,QAAQ;AAAA,IACvB,aAAa,QAAQ;AAAA,IACrB,gBAAgB,QAAQ;AAAA;AAAA,IAGxB;AAAA,EAAA;AAEJ;AAGO,MAAM,cAAc,MAA0C;AACnE,QAAM,EAAE,KAAA,IAAS,eAAA;AACjB,SAAO,EAAE,KAAA;AACX;AAEO,MAAM,eAAe,MAAkF;AAC5G,QAAM,EAAE,iBAAiB,UAAA,IAAc,eAAA;AACvC,SAAO,EAAE,iBAAiB,UAAA;AAC5B;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.global.cjs.js","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/middleware/auth.global.ts"],"sourcesContent":["import { defineNuxtRouteMiddleware, navigateTo, useRuntimeConfig } from 'nuxt/app'\nimport type { StrandsAuthConfig } from '../../../types'\n\nexport default defineNuxtRouteMiddleware((to) => {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n\n // Skip middleware during SSR/build\n if (process.server) return\n\n // Import composable dynamically on client side\n return new Promise<void>((resolve) => {\n import('../composables/useStrandsAuth').then(({ useStrandsAuth }) => {\n const { isAuthenticated, isLoading } = useStrandsAuth()\n\n // Wait for auth initialization\n const checkAuth = () => {\n if (isLoading.value) {\n setTimeout(checkAuth, 50)\n return\n }\n\n const currentPath = to.path\n\n // Check if current route should be protected\n const isProtectedRoute = config.protectedRoutes?.some((route: string) => {\n if (route.endsWith('*')) {\n return currentPath.startsWith(route.slice(0, -1))\n }\n return currentPath === route || currentPath.startsWith(route + '/')\n })\n\n // Check if current route is guest-only\n const isGuestOnlyRoute = config.guestOnlyRoutes?.some((route: string) => {\n if (route.endsWith('*')) {\n return currentPath.startsWith(route.slice(0, -1))\n }\n return currentPath === route || currentPath.startsWith(route + '/')\n })\n\n // Redirect unauthenticated users from protected routes\n if (isProtectedRoute && !isAuthenticated.value) {\n console.log('[Strands Auth v4] Protected route accessed without authentication, redirecting to auth')\n return navigateTo('/auth?redirect=' + encodeURIComponent(currentPath))\n }\n\n // Redirect authenticated users from guest-only routes\n if (isGuestOnlyRoute && isAuthenticated.value) {\n console.log('[Strands Auth v4] Guest-only route accessed while authenticated, redirecting')\n return navigateTo(config.onSignInUrl || '/dashboard')\n }\n\n resolve()\n }\n\n checkAuth()\n })\n })\n})\n"],"names":["auth_global","defineNuxtRouteMiddleware","to","config","useRuntimeConfig","public","process","server","Promise","resolve","then","require","useStrandsAuth","isAuthenticated","isLoading","checkAuth","value","setTimeout","currentPath","path","isProtectedRoute","protectedRoutes","some","route","endsWith","startsWith","slice","isGuestOnlyRoute","guestOnlyRoutes","navigateTo","encodeURIComponent","onSignInUrl"],"mappings":"yCAGAA,EAAeC,EAAAA,0BAA2BC,IACxC,MAAMC,EAASC,EAAAA,mBAAmBC,OAAoB,YAGtD,IAAIC,QAAQC,OAGZ,OAAO,IAAIC,QAAeC,IACxBD,QAAAC,UAAAC,KAAA,IAAAC,QAAO,yCAAiCD,KAAK,EAAGE,qBAC9C,MAAMC,gBAAEA,EAAAC,UAAiBA,GAAcF,IAGjCG,EAAY,KAChB,GAAID,EAAUE,MAEZ,YADAC,WAAWF,EAAW,IAIxB,MAAMG,EAAchB,EAAGiB,KAGjBC,EAAmBjB,EAAOkB,iBAAiBC,KAAMC,GACjDA,EAAMC,SAAS,KACVN,EAAYO,WAAWF,EAAMG,MAAM,OAErCR,IAAgBK,GAASL,EAAYO,WAAWF,EAAQ,MAI3DI,EAAmBxB,EAAOyB,iBAAiBN,KAAMC,GACjDA,EAAMC,SAAS,KACVN,EAAYO,WAAWF,EAAMG,MAAM,OAErCR,IAAgBK,GAASL,EAAYO,WAAWF,EAAQ,MAIjE,OAAIH,IAAqBP,EAAgBG,MAEhCa,aAAW,kBAAoBC,mBAAmBZ,IAIvDS,GAAoBd,EAAgBG,MAE/Ba,aAAW1B,EAAO4B,aAAe,mBAG1CtB,KAGFM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.global.d.ts","sourceRoot":"","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/middleware/auth.global.ts"],"names":[],"mappings":";;AAGA,wBAsDE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.global.es.js","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/middleware/auth.global.ts"],"sourcesContent":["import { defineNuxtRouteMiddleware, navigateTo, useRuntimeConfig } from 'nuxt/app'\nimport type { StrandsAuthConfig } from '../../../types'\n\nexport default defineNuxtRouteMiddleware((to) => {\n const config = useRuntimeConfig().public['strandsAuth'] as StrandsAuthConfig\n\n // Skip middleware during SSR/build\n if (process.server) return\n\n // Import composable dynamically on client side\n return new Promise<void>((resolve) => {\n import('../composables/useStrandsAuth').then(({ useStrandsAuth }) => {\n const { isAuthenticated, isLoading } = useStrandsAuth()\n\n // Wait for auth initialization\n const checkAuth = () => {\n if (isLoading.value) {\n setTimeout(checkAuth, 50)\n return\n }\n\n const currentPath = to.path\n\n // Check if current route should be protected\n const isProtectedRoute = config.protectedRoutes?.some((route: string) => {\n if (route.endsWith('*')) {\n return currentPath.startsWith(route.slice(0, -1))\n }\n return currentPath === route || currentPath.startsWith(route + '/')\n })\n\n // Check if current route is guest-only\n const isGuestOnlyRoute = config.guestOnlyRoutes?.some((route: string) => {\n if (route.endsWith('*')) {\n return currentPath.startsWith(route.slice(0, -1))\n }\n return currentPath === route || currentPath.startsWith(route + '/')\n })\n\n // Redirect unauthenticated users from protected routes\n if (isProtectedRoute && !isAuthenticated.value) {\n console.log('[Strands Auth v4] Protected route accessed without authentication, redirecting to auth')\n return navigateTo('/auth?redirect=' + encodeURIComponent(currentPath))\n }\n\n // Redirect authenticated users from guest-only routes\n if (isGuestOnlyRoute && isAuthenticated.value) {\n console.log('[Strands Auth v4] Guest-only route accessed while authenticated, redirecting')\n return navigateTo(config.onSignInUrl || '/dashboard')\n }\n\n resolve()\n }\n\n checkAuth()\n })\n })\n})\n"],"names":[],"mappings":";AAGA,MAAA,cAAe,0BAA0B,CAAC,OAAO;AAC/C,QAAM,SAAS,mBAAmB,OAAO,aAAa;AAGtD,MAAI,QAAQ,OAAQ;AAGpB,SAAO,IAAI,QAAc,CAAC,YAAY;AACpC,WAAO,qCAA+B,EAAE,KAAK,CAAC,EAAE,qBAAqB;AACnE,YAAM,EAAE,iBAAiB,UAAA,IAAc,eAAA;AAGvC,YAAM,YAAY,MAAM;AACtB,YAAI,UAAU,OAAO;AACnB,qBAAW,WAAW,EAAE;AACxB;AAAA,QACF;AAEA,cAAM,cAAc,GAAG;AAGvB,cAAM,mBAAmB,OAAO,iBAAiB,KAAK,CAAC,UAAkB;AACvE,cAAI,MAAM,SAAS,GAAG,GAAG;AACvB,mBAAO,YAAY,WAAW,MAAM,MAAM,GAAG,EAAE,CAAC;AAAA,UAClD;AACA,iBAAO,gBAAgB,SAAS,YAAY,WAAW,QAAQ,GAAG;AAAA,QACpE,CAAC;AAGD,cAAM,mBAAmB,OAAO,iBAAiB,KAAK,CAAC,UAAkB;AACvE,cAAI,MAAM,SAAS,GAAG,GAAG;AACvB,mBAAO,YAAY,WAAW,MAAM,MAAM,GAAG,EAAE,CAAC;AAAA,UAClD;AACA,iBAAO,gBAAgB,SAAS,YAAY,WAAW,QAAQ,GAAG;AAAA,QACpE,CAAC;AAGD,YAAI,oBAAoB,CAAC,gBAAgB,OAAO;AAC9C,kBAAQ,IAAI,wFAAwF;AACpG,iBAAO,WAAW,oBAAoB,mBAAmB,WAAW,CAAC;AAAA,QACvE;AAGA,YAAI,oBAAoB,gBAAgB,OAAO;AAC7C,kBAAQ,IAAI,8EAA8E;AAC1F,iBAAO,WAAW,OAAO,eAAe,YAAY;AAAA,QACtD;AAEA,gBAAA;AAAA,MACF;AAEA,gBAAA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.client.cjs.js","sources":["../../../../../apps/accounts-ui/src/nuxt-v4/runtime/plugin.client.ts"],"sourcesContent":["import { defineNuxtPlugin, useRuntimeConfig } from 'nuxt/app'\nimport { setStrandsConfig } from '../../vue/composables/useStrandsConfig'\nimport { STRANDS_AUTH_DEFAULTS } from '../../shared/defaults'\nimport { injectSquircleStyles } from '../../vue/plugins/StrandsUIPlugin'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-client-v4',\n async setup() {\n // Get runtime config\n const config = useRuntimeConfig()\n const strandsConfig = config.public.strandsAuth as any\n \n // Merge defaults with runtime config\n const mergedConfig = {\n ...STRANDS_AUTH_DEFAULTS,\n ...strandsConfig\n }\n \n // Set global configuration (avoid provide() in plugin context)\n setStrandsConfig(mergedConfig)\n \n // Set window global as backup\n if (typeof window !== 'undefined') {\n ;(window as any).__STRANDS_CONFIG__ = mergedConfig\n }\n \n // Set CSS custom properties for accent color\n if (mergedConfig?.accentColor && typeof window !== 'undefined') {\n document.documentElement.style.setProperty('--strands-accent', mergedConfig.accentColor)\n }\n \n // Inject CSS-based squircle styles for mathematical squircle shapes\n injectSquircleStyles()\n \n // Initialize auth state\n const { useStrandsAuth } = await import('./composables/useStrandsAuth')\n const { initialize } = useStrandsAuth()\n await initialize()\n }\n})\n"],"names":["plugin_client","defineNuxtPlugin","name","setup","strandsConfig","useRuntimeConfig","public","strandsAuth","mergedConfig","STRANDS_AUTH_DEFAULTS","setStrandsConfig","window","__STRANDS_CONFIG__","accentColor","document","documentElement","style","setProperty","useStrandsAuth","Promise","resolve","then","require","initialize"],"mappings":"gMAKA,MAAAA,EAAeC,mBAAiB,CAC9BC,KAAM,yBACN,WAAMC,GAEJ,MACMC,EADSC,EAAAA,mBACcC,OAAOC,YAG9BC,EAAe,IAChBC,EAAAA,yBACAL,GAILM,EAAAA,iBAAiBF,GAGK,oBAAXG,SACPA,OAAeC,mBAAqBJ,GAIpCA,GAAcK,aAAiC,oBAAXF,QACtCG,SAASC,gBAAgBC,MAAMC,YAAY,mBAAoBT,EAAaK,aAO9E,MAAMK,eAAEA,SAAyBC,QAAAC,UAAAC,KAAA,IAAAC,QAAO,yCAClCC,WAAEA,GAAeL,UACjBK,GACR"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.client.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/nuxt-v4/runtime/plugin.client.ts"],"names":[],"mappings":";;AAKA,wBAkCE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.client.es.js","sources":["../../../../../apps/accounts-ui/src/nuxt-v4/runtime/plugin.client.ts"],"sourcesContent":["import { defineNuxtPlugin, useRuntimeConfig } from 'nuxt/app'\nimport { setStrandsConfig } from '../../vue/composables/useStrandsConfig'\nimport { STRANDS_AUTH_DEFAULTS } from '../../shared/defaults'\nimport { injectSquircleStyles } from '../../vue/plugins/StrandsUIPlugin'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-client-v4',\n async setup() {\n // Get runtime config\n const config = useRuntimeConfig()\n const strandsConfig = config.public.strandsAuth as any\n \n // Merge defaults with runtime config\n const mergedConfig = {\n ...STRANDS_AUTH_DEFAULTS,\n ...strandsConfig\n }\n \n // Set global configuration (avoid provide() in plugin context)\n setStrandsConfig(mergedConfig)\n \n // Set window global as backup\n if (typeof window !== 'undefined') {\n ;(window as any).__STRANDS_CONFIG__ = mergedConfig\n }\n \n // Set CSS custom properties for accent color\n if (mergedConfig?.accentColor && typeof window !== 'undefined') {\n document.documentElement.style.setProperty('--strands-accent', mergedConfig.accentColor)\n }\n \n // Inject CSS-based squircle styles for mathematical squircle shapes\n injectSquircleStyles()\n \n // Initialize auth state\n const { useStrandsAuth } = await import('./composables/useStrandsAuth')\n const { initialize } = useStrandsAuth()\n await initialize()\n }\n})\n"],"names":[],"mappings":";;;;AAKA,MAAA,gBAAe,iBAAiB;AAAA,EAC9B,MAAM;AAAA,EACN,MAAM,QAAQ;AAEZ,UAAM,SAAS,iBAAA;AACf,UAAM,gBAAgB,OAAO,OAAO;AAGpC,UAAM,eAAe;AAAA,MACnB,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAIL,qBAAiB,YAAY;AAG7B,QAAI,OAAO,WAAW,aAAa;AAC/B,aAAe,qBAAqB;AAAA,IACxC;AAGA,QAAI,cAAc,eAAe,OAAO,WAAW,aAAa;AAC9D,eAAS,gBAAgB,MAAM,YAAY,oBAAoB,aAAa,WAAW;AAAA,IACzF;AAMA,UAAM,EAAE,eAAA,IAAmB,MAAM,OAAO,oCAA8B;AACtE,UAAM,EAAE,WAAA,IAAe,eAAA;AACvB,UAAM,WAAA;AAAA,EACR;AACF,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.server.cjs.js","sources":["../../../../../apps/accounts-ui/src/nuxt-v4/runtime/plugin.server.ts"],"sourcesContent":["import { defineNuxtPlugin, useRuntimeConfig } from 'nuxt/app'\nimport { setStrandsConfig } from '../../vue/composables/useStrandsConfig'\nimport { STRANDS_AUTH_DEFAULTS } from '../../shared/defaults'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-server-v4',\n setup() {\n try {\n // Get runtime config\n const config = useRuntimeConfig()\n const strandsConfig = config.public?.strandsAuth as any\n \n // Merge defaults with runtime config\n const mergedConfig = {\n ...STRANDS_AUTH_DEFAULTS,\n ...(strandsConfig || {})\n }\n \n // Set global configuration for SSR (avoid provide() in plugin context)\n setStrandsConfig(mergedConfig)\n } catch (error) {\n console.warn('[Strands Auth] Server plugin could not access runtime config, using defaults')\n // Fallback to just defaults\n setStrandsConfig(STRANDS_AUTH_DEFAULTS)\n }\n }\n})\n"],"names":["plugin_server","defineNuxtPlugin","name","setup","config","useRuntimeConfig","strandsConfig","public","strandsAuth","mergedConfig","STRANDS_AUTH_DEFAULTS","setStrandsConfig","error"],"mappings":"0FAIAA,EAAeC,mBAAiB,CAC9BC,KAAM,yBACN,KAAAC,GACE,IAEE,MAAMC,EAASC,EAAAA,mBACTC,EAAgBF,EAAOG,QAAQC,YAG/BC,EAAe,IAChBC,EAAAA,yBACCJ,GAAiB,CAAA,GAIvBK,EAAAA,iBAAiBF,EACnB,OAASG,GAGPD,EAAAA,iBAAiBD,EAAAA,sBACnB,CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/nuxt-v4/runtime/plugin.server.ts"],"names":[],"mappings":";;AAIA,wBAsBE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.server.es.js","sources":["../../../../../apps/accounts-ui/src/nuxt-v4/runtime/plugin.server.ts"],"sourcesContent":["import { defineNuxtPlugin, useRuntimeConfig } from 'nuxt/app'\nimport { setStrandsConfig } from '../../vue/composables/useStrandsConfig'\nimport { STRANDS_AUTH_DEFAULTS } from '../../shared/defaults'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-server-v4',\n setup() {\n try {\n // Get runtime config\n const config = useRuntimeConfig()\n const strandsConfig = config.public?.strandsAuth as any\n \n // Merge defaults with runtime config\n const mergedConfig = {\n ...STRANDS_AUTH_DEFAULTS,\n ...(strandsConfig || {})\n }\n \n // Set global configuration for SSR (avoid provide() in plugin context)\n setStrandsConfig(mergedConfig)\n } catch (error) {\n console.warn('[Strands Auth] Server plugin could not access runtime config, using defaults')\n // Fallback to just defaults\n setStrandsConfig(STRANDS_AUTH_DEFAULTS)\n }\n }\n})\n"],"names":[],"mappings":";;AAIA,MAAA,gBAAe,iBAAiB;AAAA,EAC9B,MAAM;AAAA,EACN,QAAQ;AACN,QAAI;AAEF,YAAM,SAAS,iBAAA;AACf,YAAM,gBAAgB,OAAO,QAAQ;AAGrC,YAAM,eAAe;AAAA,QACnB,GAAG;AAAA,QACH,GAAI,iBAAiB,CAAA;AAAA,MAAC;AAIxB,uBAAiB,YAAY;AAAA,IAC/B,SAAS,OAAO;AACd,cAAQ,KAAK,8EAA8E;AAE3F,uBAAiB,qBAAqB;AAAA,IACxC;AAAA,EACF;AACF,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-interceptor.client.cjs.js","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/plugins/auth-interceptor.client.ts"],"sourcesContent":["import { defineNuxtPlugin } from 'nuxt/app'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-interceptor',\n setup() {\n // Only run on client side\n if (process.server) return\n\n // Store original fetch function\n const originalFetch = globalThis.fetch\n\n // Create interceptor function\n globalThis.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n try {\n // Import auth composable dynamically to avoid SSR issues\n const { useStrandsAuth } = await import('../composables/useStrandsAuth')\n const { currentSession, getAuthHeaders } = useStrandsAuth()\n\n // Parse request URL to determine if it's an API request that needs auth\n let url: string\n if (typeof input === 'string') {\n url = input\n } else if (input instanceof URL) {\n url = input.toString()\n } else {\n url = input.url\n }\n\n // Check if this is an API request that should include auth headers\n const shouldAddAuth = shouldInjectAuth(url)\n\n if (shouldAddAuth && currentSession.value?.accessToken) {\n // Get auth headers\n try {\n const authHeaders = getAuthHeaders()\n \n // Merge headers with existing headers\n const headers = new Headers(init?.headers)\n Object.entries(authHeaders).forEach(([key, value]) => {\n headers.set(key, value as string)\n })\n\n // Create new init object with merged headers\n const enhancedInit: RequestInit = {\n ...init,\n headers\n }\n\n console.log('[Strands Auth] Injecting auth headers for request:', url)\n return originalFetch(input, enhancedInit)\n } catch (error) {\n // If we can't get auth headers, continue with original request\n console.warn('[Strands Auth] Failed to inject auth headers:', error)\n }\n }\n\n // Return original request\n return originalFetch(input, init)\n } catch (error) {\n // If anything goes wrong, fallback to original fetch\n console.error('[Strands Auth] Error in fetch interceptor:', error)\n return originalFetch(input, init)\n }\n }\n }\n})\n\n/**\n * Determine if a URL should have auth headers injected\n */\nfunction shouldInjectAuth(url: string): boolean {\n // Skip data URLs, blob URLs, etc.\n if (!url.startsWith('http')) {\n return false\n }\n\n // Skip third-party APIs that shouldn't receive our auth tokens\n const skipDomains = [\n 'googleapis.com',\n 'github.com/api',\n 'api.github.com',\n 'discord.com/api',\n 'graph.microsoft.com',\n 'api.stripe.com',\n 'api.twilio.com',\n // Add other third-party APIs here\n ]\n\n const shouldSkip = skipDomains.some(domain => url.includes(domain))\n if (shouldSkip) {\n return false\n }\n\n // Include auth for any API endpoints that contain common API patterns\n const apiPatterns = [\n '/api/',\n '/v1/',\n '/v2/',\n '/graphql',\n '/trpc',\n ]\n\n const isApiRequest = apiPatterns.some(pattern => url.includes(pattern))\n \n // Also check for common backend ports that might be API servers\n const apiPorts = [':3001', ':8000', ':8080', ':5000', ':4000']\n const hasApiPort = apiPorts.some(port => url.includes(port))\n\n return isApiRequest || hasApiPort\n}"],"names":["authInterceptor_client","name","setup","process","server","originalFetch","globalThis","fetch","async","input","init","useStrandsAuth","Promise","resolve","then","require","currentSession","getAuthHeaders","url","URL","toString","shouldAddAuth","startsWith","shouldSkip","some","includes","domain","isApiRequest","pattern","hasApiPort","port","shouldInjectAuth","value","accessToken","authHeaders","headers","Headers","Object","entries","forEach","key","set","enhancedInit","error"],"mappings":"mBAEAA,uCAAgC,CAC9BC,KAAM,2BACN,KAAAC,GAEE,GAAIC,QAAQC,OAAQ,OAGpB,MAAMC,EAAgBC,WAAWC,MAGjCD,WAAWC,MAAQC,MAAOC,EAA0BC,KAClD,IAEE,MAAMC,eAAEA,SAAyBC,QAAAC,UAAAC,KAAA,IAAAC,QAAO,0CAClCC,eAAEA,EAAAC,eAAgBA,GAAmBN,IAG3C,IAAIO,EAEFA,EADmB,iBAAVT,EACHA,EACGA,aAAiBU,IACpBV,EAAMW,WAENX,EAAMS,IAId,MAAMG,EAyCd,SAA0BH,GAExB,IAAKA,EAAII,WAAW,QAClB,OAAO,EAIT,MAWMC,EAXc,CAClB,iBACA,iBACA,iBACA,kBACA,sBACA,iBACA,kBAI6BC,QAAeN,EAAIO,SAASC,IAC3D,GAAIH,EACF,OAAO,EAIT,MAQMI,EARc,CAClB,QACA,OACA,OACA,WACA,SAG+BH,QAAgBN,EAAIO,SAASG,IAIxDC,EADW,CAAC,QAAS,QAAS,QAAS,QAAS,SAC1BL,QAAaN,EAAIO,SAASK,IAEtD,OAAOH,GAAgBE,CACzB,CAhF8BE,CAAiBb,GAEvC,GAAIG,GAAiBL,EAAegB,OAAOC,YAEzC,IACE,MAAMC,EAAcjB,IAGdkB,EAAU,IAAIC,QAAQ1B,GAAMyB,SAClCE,OAAOC,QAAQJ,GAAaK,QAAQ,EAAEC,EAAKR,MACzCG,EAAQM,IAAID,EAAKR,KAInB,MAAMU,EAA4B,IAC7BhC,EACHyB,WAIF,OAAO9B,EAAcI,EAAOiC,EAC9B,OAASC,GAGT,CAIF,OAAOtC,EAAcI,EAAOC,EAC9B,OAASiC,GAGP,OAAOtC,EAAcI,EAAOC,EAC9B,EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-interceptor.client.d.ts","sourceRoot":"","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/plugins/auth-interceptor.client.ts"],"names":[],"mappings":";;AAEA,wBA+DE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-interceptor.client.es.js","sources":["../../../../../../apps/accounts-ui/src/nuxt-v4/runtime/plugins/auth-interceptor.client.ts"],"sourcesContent":["import { defineNuxtPlugin } from 'nuxt/app'\n\nexport default defineNuxtPlugin({\n name: 'strands-auth-interceptor',\n setup() {\n // Only run on client side\n if (process.server) return\n\n // Store original fetch function\n const originalFetch = globalThis.fetch\n\n // Create interceptor function\n globalThis.fetch = async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {\n try {\n // Import auth composable dynamically to avoid SSR issues\n const { useStrandsAuth } = await import('../composables/useStrandsAuth')\n const { currentSession, getAuthHeaders } = useStrandsAuth()\n\n // Parse request URL to determine if it's an API request that needs auth\n let url: string\n if (typeof input === 'string') {\n url = input\n } else if (input instanceof URL) {\n url = input.toString()\n } else {\n url = input.url\n }\n\n // Check if this is an API request that should include auth headers\n const shouldAddAuth = shouldInjectAuth(url)\n\n if (shouldAddAuth && currentSession.value?.accessToken) {\n // Get auth headers\n try {\n const authHeaders = getAuthHeaders()\n \n // Merge headers with existing headers\n const headers = new Headers(init?.headers)\n Object.entries(authHeaders).forEach(([key, value]) => {\n headers.set(key, value as string)\n })\n\n // Create new init object with merged headers\n const enhancedInit: RequestInit = {\n ...init,\n headers\n }\n\n console.log('[Strands Auth] Injecting auth headers for request:', url)\n return originalFetch(input, enhancedInit)\n } catch (error) {\n // If we can't get auth headers, continue with original request\n console.warn('[Strands Auth] Failed to inject auth headers:', error)\n }\n }\n\n // Return original request\n return originalFetch(input, init)\n } catch (error) {\n // If anything goes wrong, fallback to original fetch\n console.error('[Strands Auth] Error in fetch interceptor:', error)\n return originalFetch(input, init)\n }\n }\n }\n})\n\n/**\n * Determine if a URL should have auth headers injected\n */\nfunction shouldInjectAuth(url: string): boolean {\n // Skip data URLs, blob URLs, etc.\n if (!url.startsWith('http')) {\n return false\n }\n\n // Skip third-party APIs that shouldn't receive our auth tokens\n const skipDomains = [\n 'googleapis.com',\n 'github.com/api',\n 'api.github.com',\n 'discord.com/api',\n 'graph.microsoft.com',\n 'api.stripe.com',\n 'api.twilio.com',\n // Add other third-party APIs here\n ]\n\n const shouldSkip = skipDomains.some(domain => url.includes(domain))\n if (shouldSkip) {\n return false\n }\n\n // Include auth for any API endpoints that contain common API patterns\n const apiPatterns = [\n '/api/',\n '/v1/',\n '/v2/',\n '/graphql',\n '/trpc',\n ]\n\n const isApiRequest = apiPatterns.some(pattern => url.includes(pattern))\n \n // Also check for common backend ports that might be API servers\n const apiPorts = [':3001', ':8000', ':8080', ':5000', ':4000']\n const hasApiPort = apiPorts.some(port => url.includes(port))\n\n return isApiRequest || hasApiPort\n}"],"names":[],"mappings":";AAEA,MAAA,yBAAe,iBAAiB;AAAA,EAC9B,MAAM;AAAA,EACN,QAAQ;AAEN,QAAI,QAAQ,OAAQ;AAGpB,UAAM,gBAAgB,WAAW;AAGjC,eAAW,QAAQ,OAAO,OAA0B,SAA0C;AAC5F,UAAI;AAEF,cAAM,EAAE,eAAA,IAAmB,MAAM,OAAO,qCAA+B;AACvE,cAAM,EAAE,gBAAgB,eAAA,IAAmB,eAAA;AAG3C,YAAI;AACJ,YAAI,OAAO,UAAU,UAAU;AAC7B,gBAAM;AAAA,QACR,WAAW,iBAAiB,KAAK;AAC/B,gBAAM,MAAM,SAAA;AAAA,QACd,OAAO;AACL,gBAAM,MAAM;AAAA,QACd;AAGA,cAAM,gBAAgB,iBAAiB,GAAG;AAE1C,YAAI,iBAAiB,eAAe,OAAO,aAAa;AAEtD,cAAI;AACF,kBAAM,cAAc,eAAA;AAGpB,kBAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AACzC,mBAAO,QAAQ,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACpD,sBAAQ,IAAI,KAAK,KAAe;AAAA,YAClC,CAAC;AAGD,kBAAM,eAA4B;AAAA,cAChC,GAAG;AAAA,cACH;AAAA,YAAA;AAGF,oBAAQ,IAAI,sDAAsD,GAAG;AACrE,mBAAO,cAAc,OAAO,YAAY;AAAA,UAC1C,SAAS,OAAO;AAEd,oBAAQ,KAAK,iDAAiD,KAAK;AAAA,UACrE;AAAA,QACF;AAGA,eAAO,cAAc,OAAO,IAAI;AAAA,MAClC,SAAS,OAAO;AAEd,gBAAQ,MAAM,8CAA8C,KAAK;AACjE,eAAO,cAAc,OAAO,IAAI;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAKD,SAAS,iBAAiB,KAAsB;AAE9C,MAAI,CAAC,IAAI,WAAW,MAAM,GAAG;AAC3B,WAAO;AAAA,EACT;AAGA,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,EAAA;AAIF,QAAM,aAAa,YAAY,KAAK,YAAU,IAAI,SAAS,MAAM,CAAC;AAClE,MAAI,YAAY;AACd,WAAO;AAAA,EACT;AAGA,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,eAAe,YAAY,KAAK,aAAW,IAAI,SAAS,OAAO,CAAC;AAGtE,QAAM,WAAW,CAAC,SAAS,SAAS,SAAS,SAAS,OAAO;AAC7D,QAAM,aAAa,SAAS,KAAK,UAAQ,IAAI,SAAS,IAAI,CAAC;AAE3D,SAAO,gBAAgB;AACzB;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../apps/accounts-ui/src/nuxt-v4/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,OAAO,CAAA;IACnB,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,IAAI,CAAA;IACf,IAAI,EAAE,WAAW,CAAA;CAClB;AAGD,UAAU,wBAAwB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAGD,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,mBAAmB;QAC3B,WAAW,CAAC,EAAE,wBAAwB,CAAA;KACvC;IACD,UAAU,UAAU;QAClB,WAAW,CAAC,EAAE,OAAO,UAAU,EAAE,iBAAiB,CAAA;KACnD;IACD,UAAU,WAAW;QACnB,WAAW,CAAC,EAAE,OAAO,UAAU,EAAE,iBAAiB,CAAA;KACnD;CACF;AAGD,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,mBAAmB;QAC3B,WAAW,CAAC,EAAE,wBAAwB,CAAA;KACvC;IACD,UAAU,UAAU;QAClB,WAAW,CAAC,EAAE,OAAO,UAAU,EAAE,iBAAiB,CAAA;KACnD;IACD,UAAU,WAAW;QACnB,WAAW,CAAC,EAAE,OAAO,UAAU,EAAE,iBAAiB,CAAA;KACnD;CACF;AAGD,OAAO,QAAQ,UAAU,CAAC;IACxB,UAAU,OAAO;QACf,YAAY,EAAE;YACZ,WAAW,EAAE,MAAM,CAAA;SACpB,CAAA;KACF;CACF;AAED,OAAO,EAAE,CAAA"}
|
package/dist/nuxt-v4.cjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt-v4.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/nuxt-v4.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt-v4.d.ts","sourceRoot":"","sources":["../../../apps/accounts-ui/src/nuxt-v4.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAGtE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAA;AACxG,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,qDAAqD,CAAA"}
|
package/dist/nuxt-v4.es.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt-v4.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
package/dist/nuxt.cjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/nuxt.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt.d.ts","sourceRoot":"","sources":["../../../apps/accounts-ui/src/nuxt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAGvC,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAGtE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAA;AACrG,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,kDAAkD,CAAA"}
|
package/dist/nuxt.es.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../../apps/accounts-ui/src/shared/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEjD,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,cAAc,GAAG,mBAAmB,CAAC,CAatH,CAAA"}
|