@erikey/react 0.1.2 → 0.1.3
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/chunk-FJ6ZGZIA.mjs +43 -0
- package/dist/chunk-FJ6ZGZIA.mjs.map +1 -0
- package/dist/index.js +1609 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1611 -6
- package/dist/index.mjs.map +1 -1
- package/dist/ui/index.js +29888 -30
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +29852 -20
- package/dist/ui/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dashboard-client.ts","../../js/src/auth-client.ts","../../../sandpack-auth/src/client/detection.ts","../../../sandpack-auth/src/client/storage.ts","../../../sandpack-auth/src/client/fetch.ts","../src/auth-client.ts"],"sourcesContent":["/**\n * @erikey/react - Dashboard Client\n *\n * Thin wrapper around better-auth/react for the Erikey dashboard.\n */\nimport { createAuthClient as createBetterAuthClient } from 'better-auth/react';\n\nexport interface DashboardClientConfig {\n /**\n * Base URL for the auth API\n * @default process.env.NEXT_PUBLIC_AUTH_URL || 'https://api.erikey.com'\n */\n baseURL?: string;\n\n /**\n * Whether to include credentials in requests\n * @default 'include'\n */\n credentials?: RequestCredentials;\n}\n\n/**\n * Create dashboard client with better-auth\n *\n * This is for the Erikey dashboard (erikey.com) - NOT for end-user auth.\n * For end-user auth in customer apps, use `createAuthClient` instead.\n *\n * NOTE: For dashboard user signup (which creates org + project), use the\n * typed API client (signupApi.dashboard) from @/lib/api/typed-api instead.\n * This client only handles Better Auth operations (signIn, session, etc.)\n *\n * @example\n * ```tsx\n * import { createDashboardClient } from '@erikey/react';\n *\n * export const auth = createDashboardClient({\n * baseURL: process.env.NEXT_PUBLIC_AUTH_URL\n * });\n *\n * // Use Better Auth methods\n * export const { useSession, signIn, signOut } = auth;\n * ```\n */\nexport function createDashboardClient(config?: DashboardClientConfig) {\n const baseURL = config?.baseURL || 'https://api.erikey.com';\n\n return createBetterAuthClient({\n baseURL,\n credentials: config?.credentials || 'include',\n });\n}\n\n/**\n * Type helper for inferring the dashboard client type\n */\nexport type DashboardClient = ReturnType<typeof createDashboardClient>;\n","/**\n * Universal auth client implementation\n * Works in Node.js 18+ and modern browsers\n *\n * Extracted from @erikey/react for universal use\n */\n\nimport type {\n AuthClientConfig,\n AuthClient,\n SignUpData,\n SignInData,\n AuthResponse,\n UserResponse,\n SignOutResponse,\n PasswordResetResponse,\n SetValueResponse,\n GetValueResponse,\n GetValuesResponse,\n DeleteValueResponse,\n DeleteValuesResponse,\n SetValuesResponse,\n KvBulkSetInput,\n} from './types';\n\n/** Default base URL for Erikey auth API */\nconst DEFAULT_BASE_URL = 'https://auth.erikey.com';\n\n/**\n * Create a universal auth client\n *\n * Works in both Node.js and browser environments\n * Uses standard fetch API (available in Node.js 18+)\n *\n * @param config - Client configuration\n * @returns Auth client instance\n *\n * @example\n * ```typescript\n * const auth = createAuthClient({\n * projectId: 'pk_live_123',\n * baseUrl: '/api/auth', // Optional proxy\n * });\n *\n * const result = await auth.signUp({\n * email: 'user@example.com',\n * password: 'secure123',\n * name: 'John Doe',\n * });\n * ```\n */\nexport function createAuthClient(config: AuthClientConfig): AuthClient {\n const { projectId, baseUrl = DEFAULT_BASE_URL } = config;\n\n /**\n * Internal helper for making authenticated requests\n */\n const fetchWithAuth = async <T>(\n endpoint: string,\n options?: RequestInit\n ): Promise<T> => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Project-Id': projectId,\n ...(options?.headers as Record<string, string> || {}),\n };\n\n const response = await fetch(`${baseUrl}/api/auth${endpoint}`, {\n ...options,\n credentials: 'include', // Send cookies\n headers,\n });\n\n const data = await response.json() as any;\n\n if (!response.ok) {\n return {\n success: false,\n error: data?.error?.message || data?.message || 'Request failed',\n } as T;\n }\n\n return {\n success: true,\n data,\n } as T;\n };\n\n return {\n /**\n * Sign up a new user\n */\n signUp: async (data: SignUpData): Promise<AuthResponse> => {\n return fetchWithAuth<AuthResponse>('/sign-up/email', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n },\n\n /**\n * Sign in an existing user\n */\n signIn: async (data: SignInData): Promise<AuthResponse> => {\n return fetchWithAuth<AuthResponse>('/sign-in/email', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n },\n\n /**\n * Sign out the current user\n */\n signOut: async (): Promise<SignOutResponse> => {\n return fetchWithAuth<SignOutResponse>('/sign-out', {\n method: 'POST',\n });\n },\n\n /**\n * Get the current authenticated user\n */\n getUser: async (): Promise<UserResponse> => {\n return fetchWithAuth<UserResponse>('/session', {\n method: 'GET',\n });\n },\n\n /**\n * Request a password reset email\n */\n forgotPassword: async (email: string): Promise<PasswordResetResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>('/forget-password', {\n method: 'POST',\n body: JSON.stringify({ email }),\n });\n\n if (!result.success) {\n return { success: false, message: result.error || 'Failed to request password reset' };\n }\n\n return {\n success: true,\n message: result.data?.message || 'Password reset email sent',\n };\n },\n\n /**\n * Reset password with a token from the reset email\n */\n resetPassword: async (token: string, newPassword: string): Promise<PasswordResetResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>('/reset-password', {\n method: 'POST',\n body: JSON.stringify({ token, newPassword }),\n });\n\n if (!result.success) {\n return { success: false, message: result.error || 'Failed to reset password' };\n }\n\n return {\n success: true,\n message: result.data?.message || 'Password reset successful',\n };\n },\n\n /**\n * Set a single key-value pair\n */\n setValue: async (key: string, value: any): Promise<SetValueResponse> => {\n return fetchWithAuth<SetValueResponse>(`/key-value/${encodeURIComponent(key)}`, {\n method: 'PUT',\n body: JSON.stringify({ value }),\n });\n },\n\n /**\n * Get a single key-value pair\n */\n getValue: async (key: string): Promise<GetValueResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'GET' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n key: result.data.key,\n value: result.data.value,\n createdAt: result.data.createdAt,\n updatedAt: result.data.updatedAt,\n },\n };\n },\n\n /**\n * Get all key-value pairs for the authenticated user\n */\n getValues: async (): Promise<GetValuesResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>(\n '/key-value',\n { method: 'GET' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n kvPairs: result.data.kvPairs,\n total: result.data.total,\n },\n };\n },\n\n /**\n * Delete a single key-value pair\n */\n deleteValue: async (key: string): Promise<DeleteValueResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'DELETE' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n message: result.data.message || 'KV pair deleted',\n },\n };\n },\n\n /**\n * Delete multiple key-value pairs\n * Note: Makes sequential DELETE requests since no bulk delete endpoint exists\n */\n deleteValues: async (keys: string[]): Promise<DeleteValuesResponse> => {\n if (keys.length === 0) {\n return {\n success: true,\n data: {\n deleted: [],\n failed: [],\n },\n };\n }\n\n const results = await Promise.allSettled(\n keys.map((key) =>\n fetchWithAuth<{ success: boolean; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'DELETE' }\n ).then((result) => ({ key, result }))\n )\n );\n\n const deleted: string[] = [];\n const failed: Array<{ key: string; error: string }> = [];\n\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') {\n const { key, result: deleteResult } = result.value;\n if (deleteResult.success) {\n deleted.push(key);\n } else {\n failed.push({\n key,\n error: deleteResult.error || 'Delete failed',\n });\n }\n } else {\n failed.push({\n key: keys[index],\n error: result.reason?.message || 'Request failed',\n });\n }\n });\n\n return {\n success: failed.length === 0,\n data: {\n deleted,\n failed,\n },\n };\n },\n\n /**\n * Set multiple key-value pairs in bulk (max 100 pairs)\n */\n setValues: async (kvPairs: KvBulkSetInput[]): Promise<SetValuesResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>(\n '/key-value/bulk',\n {\n method: 'POST',\n body: JSON.stringify({ kvPairs }),\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n results: result.data.results,\n total: result.data.total,\n },\n };\n },\n };\n}\n","/**\n * Sandpack environment detection\n *\n * ⚠️ WARNING: DEV/PREVIEW ONLY\n *\n * Detects if code is running inside a Sandpack iframe environment where:\n * - Third-party cookies are blocked\n * - localStorage is used instead of cookies\n * - Bearer tokens are sent via Authorization header\n *\n * @packageDocumentation\n */\n\n/**\n * Detect if running in Sandpack environment (cross-origin iframe)\n *\n * Sandpack blocks cookies due to third-party cookie policies, so we need\n * to use localStorage + Bearer tokens instead.\n *\n * ⚠️ In production, this should always return false to prevent accidental\n * use of dev-only authentication flows.\n *\n * @returns true if running inside an iframe (likely Sandpack/preview environment)\n *\n * @example\n * ```typescript\n * import { isSandpackEnvironment } from '@erikey/sandpack-auth/client';\n *\n * if (isSandpackEnvironment()) {\n * console.log('Using Bearer token auth for Sandpack');\n * } else {\n * console.log('Using standard cookie-based auth');\n * }\n * ```\n */\nexport function isSandpackEnvironment(): boolean {\n // Server-side check\n if (typeof window === 'undefined') {\n return false;\n }\n\n // Production safety: Always return false in production\n if (process.env.NODE_ENV === 'production') {\n console.warn(\n '[SANDPACK-AUTH] Sandpack detection called in production environment. ' +\n 'This should only run in development/preview. Returning false.'\n );\n return false;\n }\n\n try {\n // If we're in an iframe, assume it's Sandpack or similar preview environment\n const inIframe = window.self !== window.top;\n return inIframe;\n } catch {\n // Cross-origin access denied = definitely cross-origin iframe\n return true;\n }\n}\n\n/**\n * Get environment information\n *\n * @returns Object with environment details\n */\nexport function getEnvironmentInfo() {\n const isSandpack = isSandpackEnvironment();\n const isProduction = process.env.NODE_ENV === 'production';\n\n return {\n isSandpack,\n isProduction,\n shouldUseBearerAuth: isSandpack && !isProduction,\n environment: process.env.NODE_ENV || 'development',\n };\n}\n","/**\n * localStorage-based session storage for Sandpack\n *\n * ⚠️ WARNING: DEV/PREVIEW ONLY\n *\n * In Sandpack environments, cookies are blocked by browsers due to third-party\n * cookie policies. This module provides localStorage-based session management\n * as a workaround for development and preview environments.\n *\n * Production applications should NEVER use this - use standard cookie-based auth.\n *\n * @packageDocumentation\n */\n\nimport type { Session } from '../types';\n\n/**\n * Stored session data structure\n * Minimal subset of Session stored in localStorage\n */\nexport interface StoredSession {\n token: string;\n expiresAt: string;\n}\n\n/**\n * Generate localStorage key for a project's session\n *\n * @param projectId - The Erikey project ID\n * @returns The localStorage key\n */\nfunction getStorageKey(projectId: string): string {\n return `erikey.session.${projectId}`;\n}\n\n/**\n * Store session token in localStorage (Sandpack only)\n *\n * ⚠️ DEV/PREVIEW ONLY - Never use in production\n *\n * @param projectId - The Erikey project ID\n * @param session - The session data to store\n *\n * @example\n * ```typescript\n * import { storeToken } from '@erikey/sandpack-auth/client';\n *\n * storeToken('proj_123', {\n * id: 'session_abc',\n * token: 'token_xyz',\n * expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString()\n * });\n * ```\n */\nexport function storeToken(projectId: string, session: Session): void {\n const key = getStorageKey(projectId);\n const stored: StoredSession = {\n token: session.token,\n expiresAt: session.expiresAt,\n };\n\n console.log('[Sandpack Auth] Storing token:', {\n key,\n tokenPreview: session.token.substring(0, 20) + '...',\n });\n\n localStorage.setItem(key, JSON.stringify(stored));\n\n // Verify storage\n const check = localStorage.getItem(key);\n if (!check) {\n console.error('[Sandpack Auth] Failed to store token in localStorage');\n } else {\n console.log('[Sandpack Auth] Token stored successfully');\n }\n}\n\n/**\n * Get stored token from localStorage (Sandpack only)\n *\n * Returns null if:\n * - Token doesn't exist\n * - Token is expired\n * - Token data is corrupted\n *\n * Automatically cleans up expired or invalid tokens.\n *\n * @param projectId - The Erikey project ID\n * @returns The session token, or null if not found/expired\n *\n * @example\n * ```typescript\n * import { getStoredToken } from '@erikey/sandpack-auth/client';\n *\n * const token = getStoredToken('proj_123');\n * if (token) {\n * console.log('Found valid session token');\n * } else {\n * console.log('No valid session - user needs to sign in');\n * }\n * ```\n */\nexport function getStoredToken(projectId: string): string | null {\n const key = getStorageKey(projectId);\n const stored = localStorage.getItem(key);\n\n if (!stored) {\n return null;\n }\n\n try {\n const session: StoredSession = JSON.parse(stored);\n\n // Check if token is expired\n if (new Date(session.expiresAt) < new Date()) {\n console.log('[Sandpack Auth] Token expired, removing from localStorage');\n localStorage.removeItem(key);\n return null;\n }\n\n return session.token;\n } catch (error) {\n console.error('[Sandpack Auth] Failed to parse stored session:', error);\n localStorage.removeItem(key);\n return null;\n }\n}\n\n/**\n * Get stored session data from localStorage\n *\n * Returns null if session doesn't exist, is expired, or is corrupted.\n *\n * @param projectId - The Erikey project ID\n * @returns The stored session data, or null\n */\nexport function getStoredSession(projectId: string): StoredSession | null {\n const key = getStorageKey(projectId);\n const stored = localStorage.getItem(key);\n\n if (!stored) {\n return null;\n }\n\n try {\n const session: StoredSession = JSON.parse(stored);\n\n // Check if expired\n if (new Date(session.expiresAt) < new Date()) {\n localStorage.removeItem(key);\n return null;\n }\n\n return session;\n } catch {\n localStorage.removeItem(key);\n return null;\n }\n}\n\n/**\n * Clear stored token from localStorage (Sandpack only)\n *\n * Use this when signing out to ensure the token is removed.\n *\n * @param projectId - The Erikey project ID\n *\n * @example\n * ```typescript\n * import { clearToken } from '@erikey/sandpack-auth/client';\n *\n * // On sign out\n * clearToken('proj_123');\n * ```\n */\nexport function clearToken(projectId: string): void {\n const key = getStorageKey(projectId);\n console.log('[Sandpack Auth] Clearing token from localStorage');\n localStorage.removeItem(key);\n}\n\n/**\n * Check if a stored session exists and is valid\n *\n * @param projectId - The Erikey project ID\n * @returns true if a valid session exists\n */\nexport function hasValidSession(projectId: string): boolean {\n return getStoredToken(projectId) !== null;\n}\n","/**\n * HTTP client with automatic Bearer token authentication for Sandpack\n *\n * ⚠️ WARNING: DEV/PREVIEW ONLY\n *\n * This module provides a fetch wrapper that automatically:\n * - Detects Sandpack environment\n * - Attaches Bearer tokens from localStorage\n * - Handles credentials appropriately (omit in Sandpack, include in production)\n *\n * @packageDocumentation\n */\n\nimport { isSandpackEnvironment } from './detection';\nimport { getStoredToken } from './storage';\n\n/**\n * Configuration for authenticated fetch requests\n */\nexport interface FetchWithAuthOptions extends Omit<RequestInit, 'headers'> {\n /**\n * Additional headers to include in the request\n */\n headers?: Record<string, string>;\n}\n\n/**\n * Response wrapper for fetch operations\n */\nexport interface FetchResponse<T = any> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\n/**\n * Fetch wrapper with automatic Bearer token authentication for Sandpack\n *\n * Automatically:\n * - Detects if running in Sandpack environment\n * - Retrieves token from localStorage if in Sandpack\n * - Adds Authorization: Bearer header if token exists\n * - Sets credentials to 'omit' in Sandpack, 'include' in production\n * - Adds X-Project-Id header\n *\n * ⚠️ This is a \"side flow\" for Sandpack only. Production uses standard\n * cookie-based authentication with credentials: 'include'.\n *\n * @param baseUrl - Base URL of the auth API (e.g., 'https://auth.erikey.com')\n * @param projectId - The Erikey project ID\n * @param endpoint - API endpoint (e.g., '/get-session', '/sign-in/email')\n * @param options - Fetch options (method, body, headers, etc.)\n * @returns Promise resolving to response with success/data/error\n *\n * @example\n * ```typescript\n * import { fetchWithAuth } from '@erikey/sandpack-auth/client';\n *\n * // Get current session\n * const response = await fetchWithAuth(\n * 'https://auth.erikey.com',\n * 'proj_123',\n * '/get-session'\n * );\n *\n * if (response.success) {\n * console.log('User:', response.data.user);\n * }\n *\n * // Sign in\n * const signInResponse = await fetchWithAuth(\n * 'https://auth.erikey.com',\n * 'proj_123',\n * '/sign-in/email',\n * {\n * method: 'POST',\n * body: JSON.stringify({ email: 'user@example.com', password: 'pass' })\n * }\n * );\n * ```\n */\nexport async function fetchWithAuth<T = any>(\n baseUrl: string,\n projectId: string,\n endpoint: string,\n options?: FetchWithAuthOptions\n): Promise<FetchResponse<T>> {\n // Detect environment\n const inSandpack = isSandpackEnvironment();\n const token = inSandpack ? getStoredToken(projectId) : null;\n\n // Build headers\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Project-Id': projectId,\n ...(options?.headers || {}),\n };\n\n // Add Bearer token for Sandpack\n // Note: Cookie header cannot be set via JavaScript (browser security)\n // So we use Bearer token instead, which auth-api handles specially\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n console.log('[Sandpack Auth] Adding Bearer token to request');\n }\n\n // Build full URL\n const url = `${baseUrl}/api/auth${endpoint}`;\n\n console.log('[Sandpack Auth] Making request:', {\n url,\n method: options?.method || 'GET',\n inSandpack,\n hasToken: !!token,\n });\n\n // Make request\n const response = await fetch(url, {\n ...options,\n // CRITICAL: In Sandpack, omit credentials (don't send cookies)\n // In production, include credentials (send cookies normally)\n credentials: inSandpack ? 'omit' : 'include',\n headers,\n });\n\n // Parse response\n let data: any;\n try {\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n } catch (error) {\n console.error('[Sandpack Auth] Failed to parse response:', error);\n data = {};\n }\n\n // Handle errors\n if (!response.ok) {\n const errorMessage =\n data.error?.message ||\n data.message ||\n `Request failed with status ${response.status}`;\n\n console.error('[Sandpack Auth] Request failed:', {\n status: response.status,\n error: errorMessage,\n });\n\n return {\n success: false,\n error: errorMessage,\n };\n }\n\n console.log('[Sandpack Auth] Request succeeded');\n\n return {\n success: true,\n data,\n };\n}\n\n/**\n * Create a configured fetch function bound to a specific base URL and project ID\n *\n * @param baseUrl - Base URL of the auth API\n * @param projectId - The Erikey project ID\n * @returns Bound fetch function\n *\n * @example\n * ```typescript\n * import { createFetchWithAuth } from '@erikey/sandpack-auth/client';\n *\n * const authFetch = createFetchWithAuth('https://auth.erikey.com', 'proj_123');\n *\n * // Now you can use it without repeating baseUrl/projectId\n * const session = await authFetch('/get-session');\n * const user = await authFetch('/sign-in/email', {\n * method: 'POST',\n * body: JSON.stringify({ email: '...', password: '...' })\n * });\n * ```\n */\nexport function createFetchWithAuth(baseUrl: string, projectId: string) {\n return <T = any>(endpoint: string, options?: FetchWithAuthOptions) =>\n fetchWithAuth<T>(baseUrl, projectId, endpoint, options);\n}\n","/**\n * @erikey/react - React SDK with Sandpack support\n *\n * Wraps universal @erikey/js client with browser-specific enhancements:\n * - Sandpack/iframe detection\n * - localStorage token storage for cross-origin iframes\n * - Automatic fallback when cookies are blocked\n */\n\nimport { createAuthClient as createUniversalClient } from '@erikey/js';\nimport type {\n AuthClientConfig,\n AuthClient as UniversalAuthClient,\n SignUpData,\n SignInData,\n AuthResponse,\n Session,\n} from '@erikey/js';\n\n// Re-export types for convenience\nexport type {\n AuthClientConfig,\n User,\n Session,\n SignUpData,\n SignInData,\n AuthResponse,\n UserResponse,\n SignOutResponse,\n PasswordResetResponse,\n // KV Store types\n KvPair,\n KvBulkSetInput,\n SetValueResponse,\n GetValueResponse,\n GetValuesResponse,\n DeleteValueResponse,\n DeleteValuesResponse,\n SetValuesResponse,\n} from '@erikey/js';\n\n// ============================================================================\n// Sandpack Support - imported from @erikey/sandpack-auth\n// ============================================================================\n\nimport {\n isSandpackEnvironment,\n storeToken,\n getStoredToken,\n clearToken,\n} from '@erikey/sandpack-auth/client';\n\nimport type {\n SetValueResponse,\n GetValueResponse,\n GetValuesResponse,\n DeleteValueResponse,\n DeleteValuesResponse,\n SetValuesResponse,\n KvBulkSetInput,\n} from '@erikey/js';\n\n// ============================================================================\n\n/**\n * Create auth client with Sandpack support\n *\n * Wraps the universal client and adds:\n * - Automatic Sandpack detection\n * - localStorage token storage for iframes\n * - Bearer token fallback when cookies blocked\n */\nexport function createAuthClient(config: AuthClientConfig): UniversalAuthClient {\n const { projectId } = config;\n const baseUrl = config.baseUrl || 'https://auth.erikey.com';\n\n // Create base universal client\n const client = createUniversalClient(config);\n\n // Check if we're in Sandpack\n const inSandpack = isSandpackEnvironment();\n\n if (!inSandpack) {\n // Normal browser - use universal client as-is\n return client;\n }\n\n /**\n * Helper for Bearer token authenticated requests in Sandpack\n */\n const fetchWithBearer = async <T>(\n endpoint: string,\n options?: RequestInit\n ): Promise<T> => {\n const token = getStoredToken(projectId);\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Project-Id': projectId,\n ...(options?.headers as Record<string, string> || {}),\n };\n\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n const response = await fetch(`${baseUrl}/api/auth${endpoint}`, {\n ...options,\n headers,\n });\n\n const data = await response.json() as any;\n\n if (!response.ok) {\n return {\n success: false,\n error: data?.error?.message || data?.message || 'Request failed',\n } as T;\n }\n\n return {\n success: true,\n data,\n } as T;\n };\n\n // Sandpack environment - wrap with localStorage support\n return {\n signUp: async (data: SignUpData): Promise<AuthResponse> => {\n const result = await client.signUp(data);\n\n // Store token if successful\n if (result.success && result.data?.session) {\n storeToken(projectId, result.data.session);\n }\n\n return result;\n },\n\n signIn: async (data: SignInData): Promise<AuthResponse> => {\n const result = await client.signIn(data);\n\n // Store token if successful\n if (result.success && result.data?.session) {\n storeToken(projectId, result.data.session);\n }\n\n return result;\n },\n\n signOut: async () => {\n const result = await client.signOut();\n\n // Clear stored token\n clearToken(projectId);\n\n return result;\n },\n\n getUser: async () => {\n // Try cookie-based first\n const result = await client.getUser();\n\n if (result.success) {\n return result;\n }\n\n // Fallback: Try with stored token\n const token = getStoredToken(projectId);\n if (token) {\n const response = await fetch(`${baseUrl}/api/auth/session`, {\n headers: {\n 'Authorization': `Bearer ${token}`,\n 'X-Project-Id': projectId,\n },\n });\n\n const data = await response.json() as any;\n\n if (response.ok) {\n return { success: true, data };\n }\n }\n\n return result;\n },\n\n forgotPassword: client.forgotPassword,\n resetPassword: client.resetPassword,\n\n // KV methods - wrapped with Bearer token support for Sandpack\n setValue: async (key: string, value: any): Promise<SetValueResponse> => {\n return fetchWithBearer<SetValueResponse>(`/key-value/${encodeURIComponent(key)}`, {\n method: 'PUT',\n body: JSON.stringify({ value }),\n });\n },\n\n getValue: async (key: string): Promise<GetValueResponse> => {\n const result = await fetchWithBearer<{ success: boolean; data?: any; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'GET' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n key: result.data.key,\n value: result.data.value,\n createdAt: result.data.createdAt,\n updatedAt: result.data.updatedAt,\n },\n };\n },\n\n getValues: async (): Promise<GetValuesResponse> => {\n const result = await fetchWithBearer<{ success: boolean; data?: any; error?: string }>(\n '/key-value',\n { method: 'GET' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n kvPairs: result.data.kvPairs,\n total: result.data.total,\n },\n };\n },\n\n deleteValue: async (key: string): Promise<DeleteValueResponse> => {\n const result = await fetchWithBearer<{ success: boolean; data?: any; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'DELETE' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n message: result.data.message || 'KV pair deleted',\n },\n };\n },\n\n deleteValues: async (keys: string[]): Promise<DeleteValuesResponse> => {\n if (keys.length === 0) {\n return {\n success: true,\n data: {\n deleted: [],\n failed: [],\n },\n };\n }\n\n const results = await Promise.allSettled(\n keys.map((key) =>\n fetchWithBearer<{ success: boolean; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'DELETE' }\n ).then((result) => ({ key, result }))\n )\n );\n\n const deleted: string[] = [];\n const failed: Array<{ key: string; error: string }> = [];\n\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') {\n const { key, result: deleteResult } = result.value;\n if (deleteResult.success) {\n deleted.push(key);\n } else {\n failed.push({\n key,\n error: deleteResult.error || 'Delete failed',\n });\n }\n } else {\n failed.push({\n key: keys[index],\n error: result.reason?.message || 'Request failed',\n });\n }\n });\n\n return {\n success: failed.length === 0,\n data: {\n deleted,\n failed,\n },\n };\n },\n\n setValues: async (kvPairs: KvBulkSetInput[]): Promise<SetValuesResponse> => {\n const result = await fetchWithBearer<{ success: boolean; data?: any; error?: string }>(\n '/key-value/bulk',\n {\n method: 'POST',\n body: JSON.stringify({ kvPairs }),\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n results: result.data.results,\n total: result.data.total,\n },\n };\n },\n };\n}\n\n/**\n * Type helper for inferring the auth client type\n */\nexport type AuthClient = ReturnType<typeof createAuthClient>;\n"],"mappings":"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","names":["createAuthClient"]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/.pnpm/@better-fetch+fetch@1.1.18/node_modules/@better-fetch/fetch/src/error.ts","../../../../node_modules/.pnpm/@better-fetch+fetch@1.1.18/node_modules/@better-fetch/fetch/src/plugins.ts","../../../../node_modules/.pnpm/@better-fetch+fetch@1.1.18/node_modules/@better-fetch/fetch/src/retry.ts","../../../../node_modules/.pnpm/@better-fetch+fetch@1.1.18/node_modules/@better-fetch/fetch/src/auth.ts","../../../../node_modules/.pnpm/@better-fetch+fetch@1.1.18/node_modules/@better-fetch/fetch/src/utils.ts","../../../../node_modules/.pnpm/@better-fetch+fetch@1.1.18/node_modules/@better-fetch/fetch/src/create-fetch/schema.ts","../../../../node_modules/.pnpm/@better-fetch+fetch@1.1.18/node_modules/@better-fetch/fetch/src/create-fetch/index.ts","../../../../node_modules/.pnpm/@better-fetch+fetch@1.1.18/node_modules/@better-fetch/fetch/src/url.ts","../../../../node_modules/.pnpm/@better-fetch+fetch@1.1.18/node_modules/@better-fetch/fetch/src/fetch.ts","../../../../node_modules/.pnpm/@better-auth+core@1.3.34_@better-auth+utils@0.3.0_@better-fetch+fetch@1.1.18_better-call@1.0._cenebiivepn42iaejxu4tccdyq/node_modules/@better-auth/core/dist/env/index.mjs","../../../../node_modules/.pnpm/@better-auth+core@1.3.34_@better-auth+utils@0.3.0_@better-fetch+fetch@1.1.18_better-call@1.0._cenebiivepn42iaejxu4tccdyq/node_modules/@better-auth/core/dist/utils/index.mjs","../../../../node_modules/.pnpm/@better-auth+core@1.3.34_@better-auth+utils@0.3.0_@better-fetch+fetch@1.1.18_better-call@1.0._cenebiivepn42iaejxu4tccdyq/node_modules/@better-auth/core/dist/error/index.mjs","../../../../node_modules/.pnpm/better-auth@1.3.34_next@15.1.9_react-dom@19.0.0_react@19.0.0__react@19.0.0__react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/better-auth/dist/shared/better-auth.DR3R5wdU.mjs","../../../../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/clean-stores/index.js","../../../../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/atom/index.js","../../../../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/lifecycle/index.js","../../../../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/listen-keys/index.js","../../../../node_modules/.pnpm/better-auth@1.3.34_next@15.1.9_react-dom@19.0.0_react@19.0.0__react@19.0.0__react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/better-auth/dist/shared/better-auth.BYWGbmZ5.mjs","../../../../node_modules/.pnpm/better-auth@1.3.34_next@15.1.9_react-dom@19.0.0_react@19.0.0__react@19.0.0__react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/better-auth/dist/shared/better-auth.msGOU0m9.mjs","../../../../node_modules/.pnpm/better-auth@1.3.34_next@15.1.9_react-dom@19.0.0_react@19.0.0__react@19.0.0__react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/better-auth/dist/shared/better-auth.RKafzlkP.mjs","../../../../node_modules/.pnpm/better-auth@1.3.34_next@15.1.9_react-dom@19.0.0_react@19.0.0__react@19.0.0__react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/better-auth/dist/client/react/index.mjs","../src/dashboard-client.ts","../../js/src/auth-client.ts","../../../sandpack-auth/src/client/detection.ts","../../../sandpack-auth/src/client/storage.ts","../../../sandpack-auth/src/client/fetch.ts","../src/auth-client.ts"],"sourcesContent":["export class BetterFetchError extends Error {\n\tconstructor(\n\t\tpublic status: number,\n\t\tpublic statusText: string,\n\t\tpublic error: any,\n\t) {\n\t\tsuper(statusText || status.toString(), {\n\t\t\tcause: error,\n\t\t});\n\t}\n}\n","import type { StandardSchemaV1 } from \"./standard-schema\";\nimport { Schema } from \"./create-fetch\";\nimport { BetterFetchError } from \"./error\";\nimport type { BetterFetchOption } from \"./types\";\n\nexport type RequestContext<T extends Record<string, any> = any> = {\n\turl: URL | string;\n\theaders: Headers;\n\tbody: any;\n\tmethod: string;\n\tsignal: AbortSignal;\n} & BetterFetchOption<any, any, any, T>;\nexport type ResponseContext = {\n\tresponse: Response;\n\trequest: RequestContext;\n};\nexport type SuccessContext<Res = any> = {\n\tdata: Res;\n\tresponse: Response;\n\trequest: RequestContext;\n};\nexport type ErrorContext = {\n\tresponse: Response;\n\trequest: RequestContext;\n\terror: BetterFetchError & Record<string, any>;\n};\nexport interface FetchHooks<Res = any> {\n\t/**\n\t * a callback function that will be called when a\n\t * request is made.\n\t *\n\t * The returned context object will be reassigned to\n\t * the original request context.\n\t */\n\tonRequest?: <T extends Record<string, any>>(\n\t\tcontext: RequestContext<T>,\n\t) => Promise<RequestContext | void> | RequestContext | void;\n\t/**\n\t * a callback function that will be called when\n\t * response is received. This will be called before\n\t * the response is parsed and returned.\n\t *\n\t * The returned response will be reassigned to the\n\t * original response if it's changed.\n\t */\n\tonResponse?: (\n\t\tcontext: ResponseContext,\n\t) =>\n\t\t| Promise<Response | void | ResponseContext>\n\t\t| Response\n\t\t| ResponseContext\n\t\t| void;\n\t/**\n\t * a callback function that will be called when a\n\t * response is successful.\n\t */\n\tonSuccess?: (context: SuccessContext<Res>) => Promise<void> | void;\n\t/**\n\t * a callback function that will be called when an\n\t * error occurs.\n\t */\n\tonError?: (context: ErrorContext) => Promise<void> | void;\n\t/**\n\t * a callback function that will be called when a\n\t * request is retried.\n\t */\n\tonRetry?: (response: ResponseContext) => Promise<void> | void;\n\t/**\n\t * Options for the hooks\n\t */\n\thookOptions?: {\n\t\t/**\n\t\t * Clone the response\n\t\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Response/clone\n\t\t */\n\t\tcloneResponse?: boolean;\n\t};\n}\n\n/**\n * A plugin that returns an id and hooks\n */\nexport type BetterFetchPlugin = {\n\t/**\n\t * A unique id for the plugin\n\t */\n\tid: string;\n\t/**\n\t * A name for the plugin\n\t */\n\tname: string;\n\t/**\n\t * A description for the plugin\n\t */\n\tdescription?: string;\n\t/**\n\t * A version for the plugin\n\t */\n\tversion?: string;\n\t/**\n\t * Hooks for the plugin\n\t */\n\thooks?: FetchHooks;\n\t/**\n\t * A function that will be called when the plugin is\n\t * initialized. This will be called before the any\n\t * of the other internal functions.\n\t *\n\t * The returned options will be merged with the\n\t * original options.\n\t */\n\tinit?: (\n\t\turl: string,\n\t\toptions?: BetterFetchOption,\n\t) =>\n\t\t| Promise<{\n\t\t\t\turl: string;\n\t\t\t\toptions?: BetterFetchOption;\n\t\t }>\n\t\t| {\n\t\t\t\turl: string;\n\t\t\t\toptions?: BetterFetchOption;\n\t\t };\n\t/**\n\t * A schema for the plugin\n\t */\n\tschema?: Schema;\n\t/**\n\t * Additional options that can be passed to the plugin\n\t */\n\tgetOptions?: () => StandardSchemaV1;\n};\n\nexport const initializePlugins = async (\n\turl: string,\n\toptions?: BetterFetchOption,\n) => {\n\tlet opts = options || {};\n\tconst hooks: {\n\t\tonRequest: Array<FetchHooks[\"onRequest\"]>;\n\t\tonResponse: Array<FetchHooks[\"onResponse\"]>;\n\t\tonSuccess: Array<FetchHooks[\"onSuccess\"]>;\n\t\tonError: Array<FetchHooks[\"onError\"]>;\n\t\tonRetry: Array<FetchHooks[\"onRetry\"]>;\n\t} = {\n\t\tonRequest: [options?.onRequest],\n\t\tonResponse: [options?.onResponse],\n\t\tonSuccess: [options?.onSuccess],\n\t\tonError: [options?.onError],\n\t\tonRetry: [options?.onRetry],\n\t};\n\tif (!options || !options?.plugins) {\n\t\treturn {\n\t\t\turl,\n\t\t\toptions: opts,\n\t\t\thooks,\n\t\t};\n\t}\n\tfor (const plugin of options?.plugins || []) {\n\t\tif (plugin.init) {\n\t\t\tconst pluginRes = await plugin.init?.(url.toString(), options);\n\t\t\topts = pluginRes.options || opts;\n\t\t\turl = pluginRes.url;\n\t\t}\n\t\thooks.onRequest.push(plugin.hooks?.onRequest);\n\t\thooks.onResponse.push(plugin.hooks?.onResponse);\n\t\thooks.onSuccess.push(plugin.hooks?.onSuccess);\n\t\thooks.onError.push(plugin.hooks?.onError);\n\t\thooks.onRetry.push(plugin.hooks?.onRetry);\n\t}\n\n\treturn {\n\t\turl,\n\t\toptions: opts,\n\t\thooks,\n\t};\n};\n","export type RetryCondition = (\n\tresponse: Response | null,\n) => boolean | Promise<boolean>;\n\nexport type LinearRetry = {\n\ttype: \"linear\";\n\tattempts: number;\n\tdelay: number;\n\tshouldRetry?: RetryCondition;\n};\n\nexport type ExponentialRetry = {\n\ttype: \"exponential\";\n\tattempts: number;\n\tbaseDelay: number;\n\tmaxDelay: number;\n\tshouldRetry?: RetryCondition;\n};\n\nexport type RetryOptions = LinearRetry | ExponentialRetry | number;\n\nexport interface RetryStrategy {\n\tshouldAttemptRetry(\n\t\tattempt: number,\n\t\tresponse: Response | null,\n\t): Promise<boolean>;\n\tgetDelay(attempt: number): number;\n}\n\nclass LinearRetryStrategy implements RetryStrategy {\n\tconstructor(private options: LinearRetry) {}\n\n\tshouldAttemptRetry(\n\t\tattempt: number,\n\t\tresponse: Response | null,\n\t): Promise<boolean> {\n\t\tif (this.options.shouldRetry) {\n\t\t\treturn Promise.resolve(\n\t\t\t\tattempt < this.options.attempts && this.options.shouldRetry(response),\n\t\t\t);\n\t\t}\n\t\treturn Promise.resolve(attempt < this.options.attempts);\n\t}\n\n\tgetDelay(): number {\n\t\treturn this.options.delay;\n\t}\n}\n\nclass ExponentialRetryStrategy implements RetryStrategy {\n\tconstructor(private options: ExponentialRetry) {}\n\n\tshouldAttemptRetry(\n\t\tattempt: number,\n\t\tresponse: Response | null,\n\t): Promise<boolean> {\n\t\tif (this.options.shouldRetry) {\n\t\t\treturn Promise.resolve(\n\t\t\t\tattempt < this.options.attempts && this.options.shouldRetry(response),\n\t\t\t);\n\t\t}\n\t\treturn Promise.resolve(attempt < this.options.attempts);\n\t}\n\n\tgetDelay(attempt: number): number {\n\t\tconst delay = Math.min(\n\t\t\tthis.options.maxDelay,\n\t\t\tthis.options.baseDelay * 2 ** attempt,\n\t\t);\n\t\treturn delay;\n\t}\n}\n\nexport function createRetryStrategy(options: RetryOptions): RetryStrategy {\n\tif (typeof options === \"number\") {\n\t\treturn new LinearRetryStrategy({\n\t\t\ttype: \"linear\",\n\t\t\tattempts: options,\n\t\t\tdelay: 1000,\n\t\t});\n\t}\n\n\tswitch (options.type) {\n\t\tcase \"linear\":\n\t\t\treturn new LinearRetryStrategy(options);\n\t\tcase \"exponential\":\n\t\t\treturn new ExponentialRetryStrategy(options);\n\t\tdefault:\n\t\t\tthrow new Error(\"Invalid retry strategy\");\n\t}\n}\n","import type { BetterFetchOption } from \"./types\";\n\nexport type typeOrTypeReturning<T> = T | (() => T);\n/**\n * Bearer token authentication\n *\n * the value of `token` will be added to a header as\n * `auth: Bearer token`,\n */\nexport type Bearer = {\n\ttype: \"Bearer\";\n\ttoken: typeOrTypeReturning<string | undefined | Promise<string | undefined>>;\n};\n\n/**\n * Basic auth\n */\nexport type Basic = {\n\ttype: \"Basic\";\n\tusername: typeOrTypeReturning<string | undefined>;\n\tpassword: typeOrTypeReturning<string | undefined>;\n};\n\n/**\n * Custom auth\n *\n * @param prefix - prefix of the header\n * @param value - value of the header\n *\n * @example\n * ```ts\n * {\n * type: \"Custom\",\n * prefix: \"Token\",\n * value: \"token\"\n * }\n * ```\n */\nexport type Custom = {\n\ttype: \"Custom\";\n\tprefix: typeOrTypeReturning<string | undefined>;\n\tvalue: typeOrTypeReturning<string | undefined>;\n};\n\nexport type Auth = Bearer | Basic | Custom;\n\nexport const getAuthHeader = async (options?: BetterFetchOption) => {\n\tconst headers: Record<string, string> = {};\n\tconst getValue = async (\n\t\tvalue: typeOrTypeReturning<\n\t\t\tstring | undefined | Promise<string | undefined>\n\t\t>,\n\t) => (typeof value === \"function\" ? await value() : value);\n\tif (options?.auth) {\n\t\tif (options.auth.type === \"Bearer\") {\n\t\t\tconst token = await getValue(options.auth.token);\n\t\t\tif (!token) {\n\t\t\t\treturn headers;\n\t\t\t}\n\t\t\theaders[\"authorization\"] = `Bearer ${token}`;\n\t\t} else if (options.auth.type === \"Basic\") {\n\t\t\tconst username = getValue(options.auth.username);\n\t\t\tconst password = getValue(options.auth.password);\n\t\t\tif (!username || !password) {\n\t\t\t\treturn headers;\n\t\t\t}\n\t\t\theaders[\"authorization\"] = `Basic ${btoa(`${username}:${password}`)}`;\n\t\t} else if (options.auth.type === \"Custom\") {\n\t\t\tconst value = getValue(options.auth.value);\n\t\t\tif (!value) {\n\t\t\t\treturn headers;\n\t\t\t}\n\t\t\theaders[\"authorization\"] = `${getValue(options.auth.prefix)} ${value}`;\n\t\t}\n\t}\n\treturn headers;\n};\n","import type { StandardSchemaV1 } from \"./standard-schema\";\nimport { getAuthHeader } from \"./auth\";\nimport { methods } from \"./create-fetch\";\nimport type { BetterFetchOption, FetchEsque } from \"./types\";\n\nconst JSON_RE = /^application\\/(?:[\\w!#$%&*.^`~-]*\\+)?json(;.+)?$/i;\n\nexport type ResponseType = \"json\" | \"text\" | \"blob\";\nexport function detectResponseType(request: Response): ResponseType {\n\tconst _contentType = request.headers.get(\"content-type\");\n\tconst textTypes = new Set([\n\t\t\"image/svg\",\n\t\t\"application/xml\",\n\t\t\"application/xhtml\",\n\t\t\"application/html\",\n\t]);\n\tif (!_contentType) {\n\t\treturn \"json\";\n\t}\n\tconst contentType = _contentType.split(\";\").shift() || \"\";\n\tif (JSON_RE.test(contentType)) {\n\t\treturn \"json\";\n\t}\n\tif (textTypes.has(contentType) || contentType.startsWith(\"text/\")) {\n\t\treturn \"text\";\n\t}\n\treturn \"blob\";\n}\n\nexport function isJSONParsable(value: any) {\n\ttry {\n\t\tJSON.parse(value);\n\t\treturn true;\n\t} catch (error) {\n\t\treturn false;\n\t}\n}\n\n//https://github.com/unjs/ofetch/blob/main/src/utils.ts\nexport function isJSONSerializable(value: any) {\n\tif (value === undefined) {\n\t\treturn false;\n\t}\n\tconst t = typeof value;\n\tif (t === \"string\" || t === \"number\" || t === \"boolean\" || t === null) {\n\t\treturn true;\n\t}\n\tif (t !== \"object\") {\n\t\treturn false;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn true;\n\t}\n\tif (value.buffer) {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(value.constructor && value.constructor.name === \"Object\") ||\n\t\ttypeof value.toJSON === \"function\"\n\t);\n}\n\nexport function jsonParse(text: string) {\n\ttry {\n\t\treturn JSON.parse(text);\n\t} catch (error) {\n\t\treturn text;\n\t}\n}\n\nexport function isFunction(value: any): value is () => any {\n\treturn typeof value === \"function\";\n}\n\nexport function getFetch(options?: BetterFetchOption): FetchEsque {\n\tif (options?.customFetchImpl) {\n\t\treturn options.customFetchImpl;\n\t}\n\tif (typeof globalThis !== \"undefined\" && isFunction(globalThis.fetch)) {\n\t\treturn globalThis.fetch;\n\t}\n\tif (typeof window !== \"undefined\" && isFunction(window.fetch)) {\n\t\treturn window.fetch;\n\t}\n\tthrow new Error(\"No fetch implementation found\");\n}\n\nexport function isPayloadMethod(method?: string) {\n\tif (!method) {\n\t\treturn false;\n\t}\n\tconst payloadMethod = [\"POST\", \"PUT\", \"PATCH\", \"DELETE\"];\n\treturn payloadMethod.includes(method.toUpperCase());\n}\n\nexport function isRouteMethod(method?: string) {\n\tconst routeMethod = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"];\n\tif (!method) {\n\t\treturn false;\n\t}\n\treturn routeMethod.includes(method.toUpperCase());\n}\n\nexport async function getHeaders(opts?: BetterFetchOption) {\n\tconst headers = new Headers(opts?.headers);\n\tconst authHeader = await getAuthHeader(opts);\n\tfor (const [key, value] of Object.entries(authHeader || {})) {\n\t\theaders.set(key, value);\n\t}\n\tif (!headers.has(\"content-type\")) {\n\t\tconst t = detectContentType(opts?.body);\n\t\tif (t) {\n\t\t\theaders.set(\"content-type\", t);\n\t\t}\n\t}\n\n\treturn headers;\n}\n\nexport function getURL(url: string, options?: BetterFetchOption) {\n\tif (url.startsWith(\"@\")) {\n\t\tconst m = url.toString().split(\"@\")[1].split(\"/\")[0];\n\t\tif (methods.includes(m)) {\n\t\t\turl = url.replace(`@${m}/`, \"/\");\n\t\t}\n\t}\n\tlet _url: string | URL;\n\ttry {\n\t\tif (url.startsWith(\"http\")) {\n\t\t\t_url = url;\n\t\t} else {\n\t\t\tlet baseURL = options?.baseURL;\n\t\t\tif (baseURL && !baseURL?.endsWith(\"/\")) {\n\t\t\t\tbaseURL = baseURL + \"/\";\n\t\t\t}\n\t\t\tif (url.startsWith(\"/\")) {\n\t\t\t\t_url = new URL(url.substring(1), baseURL);\n\t\t\t} else {\n\t\t\t\t_url = new URL(url, options?.baseURL);\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tif (e instanceof TypeError) {\n\t\t\tif (!options?.baseURL) {\n\t\t\t\tthrow TypeError(\n\t\t\t\t\t`Invalid URL ${url}. Are you passing in a relative url but not setting the baseURL?`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow TypeError(\n\t\t\t\t`Invalid URL ${url}. Please validate that you are passing the correct input.`,\n\t\t\t);\n\t\t}\n\t\tthrow e;\n\t}\n\n\t/**\n\t * Dynamic Parameters.\n\t */\n\tif (options?.params) {\n\t\tif (Array.isArray(options?.params)) {\n\t\t\tconst params = options?.params\n\t\t\t\t? Array.isArray(options.params)\n\t\t\t\t\t? `/${options.params.join(\"/\")}`\n\t\t\t\t\t: `/${Object.values(options.params).join(\"/\")}`\n\t\t\t\t: \"\";\n\t\t\t_url = _url.toString().split(\"/:\")[0];\n\t\t\t_url = `${_url.toString()}${params}`;\n\t\t} else {\n\t\t\tfor (const [key, value] of Object.entries(options?.params)) {\n\t\t\t\t_url = _url.toString().replace(`:${key}`, String(value));\n\t\t\t}\n\t\t}\n\t}\n\tconst __url = new URL(_url);\n\t/**\n\t * Query Parameters\n\t */\n\tconst queryParams = options?.query;\n\tif (queryParams) {\n\t\tfor (const [key, value] of Object.entries(queryParams)) {\n\t\t\t__url.searchParams.append(key, String(value));\n\t\t}\n\t}\n\treturn __url;\n}\n\nexport function detectContentType(body: any) {\n\tif (isJSONSerializable(body)) {\n\t\treturn \"application/json\";\n\t}\n\n\treturn null;\n}\n\nexport function getBody(options?: BetterFetchOption) {\n\tif (!options?.body) {\n\t\treturn null;\n\t}\n\tconst headers = new Headers(options?.headers);\n\tif (isJSONSerializable(options.body) && !headers.has(\"content-type\")) {\n\t\tfor (const [key, value] of Object.entries(options?.body)) {\n\t\t\tif (value instanceof Date) {\n\t\t\t\toptions.body[key] = value.toISOString();\n\t\t\t}\n\t\t}\n\t\treturn JSON.stringify(options.body);\n\t}\n\n\treturn options.body;\n}\n\nexport function getMethod(url: string, options?: BetterFetchOption) {\n\tif (options?.method) {\n\t\treturn options.method.toUpperCase();\n\t}\n\tif (url.startsWith(\"@\")) {\n\t\tconst pMethod = url.split(\"@\")[1]?.split(\"/\")[0];\n\t\tif (!methods.includes(pMethod)) {\n\t\t\treturn options?.body ? \"POST\" : \"GET\";\n\t\t}\n\t\treturn pMethod.toUpperCase();\n\t}\n\treturn options?.body ? \"POST\" : \"GET\";\n}\n\nexport function getTimeout(\n\toptions?: BetterFetchOption,\n\tcontroller?: AbortController,\n) {\n\tlet abortTimeout: ReturnType<typeof setTimeout> | undefined;\n\tif (!options?.signal && options?.timeout) {\n\t\tabortTimeout = setTimeout(() => controller?.abort(), options?.timeout);\n\t}\n\treturn {\n\t\tabortTimeout,\n\t\tclearTimeout: () => {\n\t\t\tif (abortTimeout) {\n\t\t\t\tclearTimeout(abortTimeout);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function bodyParser(data: any, responseType: ResponseType) {\n\tif (responseType === \"json\") {\n\t\treturn JSON.parse(data);\n\t}\n\treturn data;\n}\n\nexport class ValidationError extends Error {\n\tpublic readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;\n\n\tconstructor(issues: ReadonlyArray<StandardSchemaV1.Issue>, message?: string) {\n\t\t// Default message fallback in case one isn't supplied.\n\t\tsuper(message || JSON.stringify(issues, null, 2));\n\t\tthis.issues = issues;\n\n\t\t// Set the prototype explicitly to ensure that instanceof works correctly.\n\t\tObject.setPrototypeOf(this, ValidationError.prototype);\n\t}\n}\n\nexport async function parseStandardSchema<TSchema extends StandardSchemaV1>(\n\tschema: TSchema,\n\tinput: StandardSchemaV1.InferInput<TSchema>,\n): Promise<StandardSchemaV1.InferOutput<TSchema>> {\n\tlet result = await schema[\"~standard\"].validate(input);\n\n\tif (result.issues) {\n\t\tthrow new ValidationError(result.issues);\n\t}\n\treturn result.value;\n}\n","import type { StandardSchemaV1 } from \"../standard-schema\";\nimport type { StringLiteralUnion } from \"../type-utils\";\n\nexport type FetchSchema = {\n\tinput?: StandardSchemaV1;\n\toutput?: StandardSchemaV1;\n\tquery?: StandardSchemaV1;\n\tparams?: StandardSchemaV1<Record<string, unknown>> | undefined;\n\tmethod?: Methods;\n};\n\nexport type Methods = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\n\nexport const methods = [\"get\", \"post\", \"put\", \"patch\", \"delete\"];\n\ntype RouteKey = StringLiteralUnion<`@${Methods}/`>;\n\nexport type FetchSchemaRoutes = {\n\t[key in RouteKey]?: FetchSchema;\n};\n\nexport const createSchema = <\n\tF extends FetchSchemaRoutes,\n\tS extends SchemaConfig,\n>(\n\tschema: F,\n\tconfig?: S,\n) => {\n\treturn {\n\t\tschema: schema as F,\n\t\tconfig: config as S,\n\t};\n};\n\nexport type SchemaConfig = {\n\tstrict?: boolean;\n\t/**\n\t * A prefix that will be prepended when it's\n\t * calling the schema.\n\t *\n\t * NOTE: Make sure to handle converting\n\t * the prefix to the baseURL in the init\n\t * function if you you are defining for a\n\t * plugin.\n\t */\n\tprefix?: \"\" | (string & Record<never, never>);\n\t/**\n\t * The base url of the schema. By default it's the baseURL of the fetch instance.\n\t */\n\tbaseURL?: \"\" | (string & Record<never, never>);\n};\n\nexport type Schema = {\n\tschema: FetchSchemaRoutes;\n\tconfig: SchemaConfig;\n};\n","import { betterFetch } from \"../fetch\";\nimport { BetterFetchPlugin } from \"../plugins\";\nimport type { BetterFetchOption } from \"../types\";\nimport { parseStandardSchema } from \"../utils\";\nimport type { BetterFetch, CreateFetchOption } from \"./types\";\n\nexport const applySchemaPlugin = (config: CreateFetchOption) =>\n\t({\n\t\tid: \"apply-schema\",\n\t\tname: \"Apply Schema\",\n\t\tversion: \"1.0.0\",\n\t\tasync init(url, options) {\n\t\t\tconst schema =\n\t\t\t\tconfig.plugins?.find((plugin) =>\n\t\t\t\t\tplugin.schema?.config\n\t\t\t\t\t\t? url.startsWith(plugin.schema.config.baseURL || \"\") ||\n\t\t\t\t\t\t\turl.startsWith(plugin.schema.config.prefix || \"\")\n\t\t\t\t\t\t: false,\n\t\t\t\t)?.schema || config.schema;\n\t\t\tif (schema) {\n\t\t\t\tlet urlKey = url;\n\t\t\t\tif (schema.config?.prefix) {\n\t\t\t\t\tif (urlKey.startsWith(schema.config.prefix)) {\n\t\t\t\t\t\turlKey = urlKey.replace(schema.config.prefix, \"\");\n\t\t\t\t\t\tif (schema.config.baseURL) {\n\t\t\t\t\t\t\turl = url.replace(schema.config.prefix, schema.config.baseURL);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (schema.config?.baseURL) {\n\t\t\t\t\tif (urlKey.startsWith(schema.config.baseURL)) {\n\t\t\t\t\t\turlKey = urlKey.replace(schema.config.baseURL, \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst keySchema = schema.schema[urlKey];\n\t\t\t\tif (keySchema) {\n\t\t\t\t\tlet opts = {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tmethod: keySchema.method,\n\t\t\t\t\t\toutput: keySchema.output,\n\t\t\t\t\t};\n\t\t\t\t\tif (!options?.disableValidation) {\n\t\t\t\t\t\topts = {\n\t\t\t\t\t\t\t...opts,\n\t\t\t\t\t\t\tbody: keySchema.input\n\t\t\t\t\t\t\t\t? await parseStandardSchema(keySchema.input, options?.body)\n\t\t\t\t\t\t\t\t: options?.body,\n\t\t\t\t\t\t\tparams: keySchema.params\n\t\t\t\t\t\t\t\t? await parseStandardSchema(keySchema.params, options?.params)\n\t\t\t\t\t\t\t\t: options?.params,\n\t\t\t\t\t\t\tquery: keySchema.query\n\t\t\t\t\t\t\t\t? await parseStandardSchema(keySchema.query, options?.query)\n\t\t\t\t\t\t\t\t: options?.query,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\turl,\n\t\t\t\t\t\toptions: opts,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\turl,\n\t\t\t\toptions,\n\t\t\t};\n\t\t},\n\t}) satisfies BetterFetchPlugin;\n\nexport const createFetch = <Option extends CreateFetchOption>(\n\tconfig?: Option,\n) => {\n\tasync function $fetch(url: string, options?: BetterFetchOption) {\n\t\tconst opts = {\n\t\t\t...config,\n\t\t\t...options,\n\t\t\tplugins: [...(config?.plugins || []), applySchemaPlugin(config || {})],\n\t\t} as BetterFetchOption;\n\n\t\tif (config?.catchAllError) {\n\t\t\ttry {\n\t\t\t\treturn await betterFetch(url, opts);\n\t\t\t} catch (error) {\n\t\t\t\treturn {\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tstatus: 500,\n\t\t\t\t\t\tstatusText: \"Fetch Error\",\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\"Fetch related error. Captured by catchAllError option. See error property for more details.\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn await betterFetch(url, opts);\n\t}\n\treturn $fetch as BetterFetch<Option>;\n};\n\nexport * from \"./schema\";\nexport * from \"./types\";\n","import { methods } from \"./create-fetch\";\nimport { BetterFetchOption } from \"./types\";\n\n/**\n * Normalize URL\n */\nexport function getURL(url: string, option?: BetterFetchOption) {\n\tlet { baseURL, params, query } = option || {\n\t\tquery: {},\n\t\tparams: {},\n\t\tbaseURL: \"\",\n\t};\n\tlet basePath = url.startsWith(\"http\")\n\t\t? url.split(\"/\").slice(0, 3).join(\"/\")\n\t\t: baseURL || \"\";\n\n\t/**\n\t * Remove method modifiers\n\t */\n\tif (url.startsWith(\"@\")) {\n\t\tconst m = url.toString().split(\"@\")[1].split(\"/\")[0];\n\t\tif (methods.includes(m)) {\n\t\t\turl = url.replace(`@${m}/`, \"/\");\n\t\t}\n\t}\n\n\tif (!basePath.endsWith(\"/\")) basePath += \"/\";\n\tlet [path, urlQuery] = url.replace(basePath, \"\").split(\"?\");\n\tconst queryParams = new URLSearchParams(urlQuery);\n\tfor (const [key, value] of Object.entries(query || {})) {\n\t\tif (value == null) continue;\n\t\tqueryParams.set(key, String(value));\n\t}\n\tif (params) {\n\t\tif (Array.isArray(params)) {\n\t\t\tconst paramPaths = path.split(\"/\").filter((p) => p.startsWith(\":\"));\n\t\t\tfor (const [index, key] of paramPaths.entries()) {\n\t\t\t\tconst value = params[index];\n\t\t\t\tpath = path.replace(key, value);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\t\tpath = path.replace(`:${key}`, String(value));\n\t\t\t}\n\t\t}\n\t}\n\n\tpath = path.split(\"/\").map(encodeURIComponent).join(\"/\");\n\tif (path.startsWith(\"/\")) path = path.slice(1);\n\tlet queryParamString = queryParams.toString();\n\tqueryParamString =\n\t\tqueryParamString.length > 0 ? `?${queryParamString}`.replace(/\\+/g, \"%20\") : \"\";\n\tif (!basePath.startsWith(\"http\")) {\n\t\treturn `${basePath}${path}${queryParamString}`;\n\t}\n\tconst _url = new URL(`${path}${queryParamString}`, basePath);\n\treturn _url;\n}\n","import type { StandardSchemaV1 } from \"./standard-schema\";\nimport { BetterFetchError } from \"./error\";\nimport { initializePlugins } from \"./plugins\";\nimport { createRetryStrategy } from \"./retry\";\nimport type { BetterFetchOption, BetterFetchResponse } from \"./types\";\nimport { getURL } from \"./url\";\nimport {\n\tdetectResponseType,\n\tgetBody,\n\tgetFetch,\n\tgetHeaders,\n\tgetMethod,\n\tgetTimeout,\n\tisJSONParsable,\n\tjsonParse,\n\tparseStandardSchema,\n} from \"./utils\";\n\nexport const betterFetch = async <\n\tTRes extends Option[\"output\"] extends StandardSchemaV1\n\t\t? StandardSchemaV1.InferOutput<Option[\"output\"]>\n\t\t: unknown,\n\tTErr = unknown,\n\tOption extends BetterFetchOption = BetterFetchOption<any, any, any, TRes>,\n>(\n\turl: string,\n\toptions?: Option,\n): Promise<\n\tBetterFetchResponse<\n\t\tTRes,\n\t\tTErr,\n\t\tOption[\"throw\"] extends true ? true : TErr extends false ? true : false\n\t>\n> => {\n\tconst {\n\t\thooks,\n\t\turl: __url,\n\t\toptions: opts,\n\t} = await initializePlugins(url, options);\n\tconst fetch = getFetch(opts);\n\tconst controller = new AbortController();\n\tconst signal = opts.signal ?? controller.signal;\n\tconst _url = getURL(__url, opts);\n\tconst body = getBody(opts);\n\tconst headers = await getHeaders(opts);\n\tconst method = getMethod(__url, opts);\n\tlet context = {\n\t\t...opts,\n\t\turl: _url,\n\t\theaders,\n\t\tbody,\n\t\tmethod,\n\t\tsignal,\n\t};\n\t/**\n\t * Run all on request hooks\n\t */\n\tfor (const onRequest of hooks.onRequest) {\n\t\tif (onRequest) {\n\t\t\tconst res = await onRequest(context);\n\t\t\tif (res instanceof Object) {\n\t\t\t\tcontext = res;\n\t\t\t}\n\t\t}\n\t}\n\tif (\n\t\t(\"pipeTo\" in (context as any) &&\n\t\t\ttypeof (context as any).pipeTo === \"function\") ||\n\t\ttypeof options?.body?.pipe === \"function\"\n\t) {\n\t\tif (!(\"duplex\" in context)) {\n\t\t\tcontext.duplex = \"half\";\n\t\t}\n\t}\n\n\tconst { clearTimeout } = getTimeout(opts, controller);\n\tlet response = await fetch(context.url, context);\n\tclearTimeout();\n\n\tconst responseContext = {\n\t\tresponse,\n\t\trequest: context,\n\t};\n\n\tfor (const onResponse of hooks.onResponse) {\n\t\tif (onResponse) {\n\t\t\tconst r = await onResponse({\n\t\t\t\t...responseContext,\n\t\t\t\tresponse: options?.hookOptions?.cloneResponse\n\t\t\t\t\t? response.clone()\n\t\t\t\t\t: response,\n\t\t\t});\n\t\t\tif (r instanceof Response) {\n\t\t\t\tresponse = r;\n\t\t\t} else if (r instanceof Object) {\n\t\t\t\tresponse = r.response;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * OK Branch\n\t */\n\tif (response.ok) {\n\t\tconst hasBody = context.method !== \"HEAD\";\n\t\tif (!hasBody) {\n\t\t\treturn {\n\t\t\t\tdata: \"\" as any,\n\t\t\t\terror: null,\n\t\t\t} as any;\n\t\t}\n\t\tconst responseType = detectResponseType(response);\n\t\tconst successContext = {\n\t\t\tdata: \"\" as any,\n\t\t\tresponse,\n\t\t\trequest: context,\n\t\t};\n\t\tif (responseType === \"json\" || responseType === \"text\") {\n\t\t\tconst text = await response.text();\n\t\t\tconst parser = context.jsonParser ?? jsonParse;\n\t\t\tconst data = await parser(text);\n\t\t\tsuccessContext.data = data;\n\t\t} else {\n\t\t\tsuccessContext.data = await response[responseType]();\n\t\t}\n\n\t\t/**\n\t\t * Parse the data if the output schema is defined\n\t\t */\n\t\tif (context?.output) {\n\t\t\tif (context.output && !context.disableValidation) {\n\t\t\t\tsuccessContext.data = await parseStandardSchema(\n\t\t\t\t\tcontext.output as StandardSchemaV1,\n\t\t\t\t\tsuccessContext.data,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const onSuccess of hooks.onSuccess) {\n\t\t\tif (onSuccess) {\n\t\t\t\tawait onSuccess({\n\t\t\t\t\t...successContext,\n\t\t\t\t\tresponse: options?.hookOptions?.cloneResponse\n\t\t\t\t\t\t? response.clone()\n\t\t\t\t\t\t: response,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (options?.throw) {\n\t\t\treturn successContext.data as any;\n\t\t}\n\n\t\treturn {\n\t\t\tdata: successContext.data,\n\t\t\terror: null,\n\t\t} as any;\n\t}\n\tconst parser = options?.jsonParser ?? jsonParse;\n\tconst responseText = await response.text();\n\tconst isJSONResponse = isJSONParsable(responseText);\n\tconst errorObject = isJSONResponse ? await parser(responseText) : null;\n\t/**\n\t * Error Branch\n\t */\n\tconst errorContext = {\n\t\tresponse,\n\t\tresponseText,\n\t\trequest: context,\n\t\terror: {\n\t\t\t...errorObject,\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t},\n\t};\n\tfor (const onError of hooks.onError) {\n\t\tif (onError) {\n\t\t\tawait onError({\n\t\t\t\t...errorContext,\n\t\t\t\tresponse: options?.hookOptions?.cloneResponse\n\t\t\t\t\t? response.clone()\n\t\t\t\t\t: response,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (options?.retry) {\n\t\tconst retryStrategy = createRetryStrategy(options.retry);\n\t\tconst _retryAttempt = options.retryAttempt ?? 0;\n\t\tif (await retryStrategy.shouldAttemptRetry(_retryAttempt, response)) {\n\t\t\tfor (const onRetry of hooks.onRetry) {\n\t\t\t\tif (onRetry) {\n\t\t\t\t\tawait onRetry(responseContext);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst delay = retryStrategy.getDelay(_retryAttempt);\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, delay));\n\t\t\treturn await betterFetch(url, {\n\t\t\t\t...options,\n\t\t\t\tretryAttempt: _retryAttempt + 1,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (options?.throw) {\n\t\tthrow new BetterFetchError(\n\t\t\tresponse.status,\n\t\t\tresponse.statusText,\n\t\t\tisJSONResponse ? errorObject : responseText,\n\t\t);\n\t}\n\treturn {\n\t\tdata: null,\n\t\terror: {\n\t\t\t...errorObject,\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t},\n\t} as any;\n};\n","const _envShim = /* @__PURE__ */ Object.create(null);\nconst _getEnv = (useShim) => globalThis.process?.env || //@ts-expect-error\nglobalThis.Deno?.env.toObject() || //@ts-expect-error\nglobalThis.__env__ || (useShim ? _envShim : globalThis);\nconst env = new Proxy(_envShim, {\n get(_, prop) {\n const env2 = _getEnv();\n return env2[prop] ?? _envShim[prop];\n },\n has(_, prop) {\n const env2 = _getEnv();\n return prop in env2 || prop in _envShim;\n },\n set(_, prop, value) {\n const env2 = _getEnv(true);\n env2[prop] = value;\n return true;\n },\n deleteProperty(_, prop) {\n if (!prop) {\n return false;\n }\n const env2 = _getEnv(true);\n delete env2[prop];\n return true;\n },\n ownKeys() {\n const env2 = _getEnv(true);\n return Object.keys(env2);\n }\n});\nfunction toBoolean(val) {\n return val ? val !== \"false\" : false;\n}\nconst nodeENV = typeof process !== \"undefined\" && process.env && process.env.NODE_ENV || \"\";\nconst isProduction = nodeENV === \"production\";\nconst isDevelopment = () => nodeENV === \"dev\" || nodeENV === \"development\";\nconst isTest = () => nodeENV === \"test\" || toBoolean(env.TEST);\nfunction getEnvVar(key, fallback) {\n if (typeof process !== \"undefined\" && process.env) {\n return process.env[key] ?? fallback;\n }\n if (typeof Deno !== \"undefined\") {\n return Deno.env.get(key) ?? fallback;\n }\n if (typeof Bun !== \"undefined\") {\n return Bun.env[key] ?? fallback;\n }\n return fallback;\n}\nfunction getBooleanEnvVar(key, fallback = true) {\n const value = getEnvVar(key);\n if (!value) return fallback;\n return value !== \"0\" && value.toLowerCase() !== \"false\" && value !== \"\";\n}\nconst ENV = Object.freeze({\n get BETTER_AUTH_SECRET() {\n return getEnvVar(\"BETTER_AUTH_SECRET\");\n },\n get AUTH_SECRET() {\n return getEnvVar(\"AUTH_SECRET\");\n },\n get BETTER_AUTH_TELEMETRY() {\n return getEnvVar(\"BETTER_AUTH_TELEMETRY\");\n },\n get BETTER_AUTH_TELEMETRY_ID() {\n return getEnvVar(\"BETTER_AUTH_TELEMETRY_ID\");\n },\n get NODE_ENV() {\n return getEnvVar(\"NODE_ENV\", \"development\");\n },\n get PACKAGE_VERSION() {\n return getEnvVar(\"PACKAGE_VERSION\", \"0.0.0\");\n },\n get BETTER_AUTH_TELEMETRY_ENDPOINT() {\n return getEnvVar(\n \"BETTER_AUTH_TELEMETRY_ENDPOINT\",\n \"https://telemetry.better-auth.com/v1/track\"\n );\n }\n});\n\nconst COLORS_2 = 1;\nconst COLORS_16 = 4;\nconst COLORS_256 = 8;\nconst COLORS_16m = 24;\nconst TERM_ENVS = {\n eterm: COLORS_16,\n cons25: COLORS_16,\n console: COLORS_16,\n cygwin: COLORS_16,\n dtterm: COLORS_16,\n gnome: COLORS_16,\n hurd: COLORS_16,\n jfbterm: COLORS_16,\n konsole: COLORS_16,\n kterm: COLORS_16,\n mlterm: COLORS_16,\n mosh: COLORS_16m,\n putty: COLORS_16,\n st: COLORS_16,\n // http://lists.schmorp.de/pipermail/rxvt-unicode/2016q2/002261.html\n \"rxvt-unicode-24bit\": COLORS_16m,\n // https://bugs.launchpad.net/terminator/+bug/1030562\n terminator: COLORS_16m,\n \"xterm-kitty\": COLORS_16m\n};\nconst CI_ENVS_MAP = new Map(\n Object.entries({\n APPVEYOR: COLORS_256,\n BUILDKITE: COLORS_256,\n CIRCLECI: COLORS_16m,\n DRONE: COLORS_256,\n GITEA_ACTIONS: COLORS_16m,\n GITHUB_ACTIONS: COLORS_16m,\n GITLAB_CI: COLORS_256,\n TRAVIS: COLORS_256\n })\n);\nconst TERM_ENVS_REG_EXP = [\n /ansi/,\n /color/,\n /linux/,\n /direct/,\n /^con[0-9]*x[0-9]/,\n /^rxvt/,\n /^screen/,\n /^xterm/,\n /^vt100/,\n /^vt220/\n];\nfunction getColorDepth() {\n if (getEnvVar(\"FORCE_COLOR\") !== void 0) {\n switch (getEnvVar(\"FORCE_COLOR\")) {\n case \"\":\n case \"1\":\n case \"true\":\n return COLORS_16;\n case \"2\":\n return COLORS_256;\n case \"3\":\n return COLORS_16m;\n default:\n return COLORS_2;\n }\n }\n if (getEnvVar(\"NODE_DISABLE_COLORS\") !== void 0 && getEnvVar(\"NODE_DISABLE_COLORS\") !== \"\" || // See https://no-color.org/\n getEnvVar(\"NO_COLOR\") !== void 0 && getEnvVar(\"NO_COLOR\") !== \"\" || // The \"dumb\" special terminal, as defined by terminfo, doesn't support\n // ANSI color control codes.\n // See https://invisible-island.net/ncurses/terminfo.ti.html#toc-_Specials\n getEnvVar(\"TERM\") === \"dumb\") {\n return COLORS_2;\n }\n if (getEnvVar(\"TMUX\")) {\n return COLORS_16m;\n }\n if (\"TF_BUILD\" in env && \"AGENT_NAME\" in env) {\n return COLORS_16;\n }\n if (\"CI\" in env) {\n for (const { 0: envName, 1: colors } of CI_ENVS_MAP) {\n if (envName in env) {\n return colors;\n }\n }\n if (getEnvVar(\"CI_NAME\") === \"codeship\") {\n return COLORS_256;\n }\n return COLORS_2;\n }\n if (\"TEAMCITY_VERSION\" in env) {\n return /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.exec(\n getEnvVar(\"TEAMCITY_VERSION\")\n ) !== null ? COLORS_16 : COLORS_2;\n }\n switch (getEnvVar(\"TERM_PROGRAM\")) {\n case \"iTerm.app\":\n if (!getEnvVar(\"TERM_PROGRAM_VERSION\") || /^[0-2]\\./.exec(getEnvVar(\"TERM_PROGRAM_VERSION\")) !== null) {\n return COLORS_256;\n }\n return COLORS_16m;\n case \"HyperTerm\":\n case \"MacTerm\":\n return COLORS_16m;\n case \"Apple_Terminal\":\n return COLORS_256;\n }\n if (getEnvVar(\"COLORTERM\") === \"truecolor\" || getEnvVar(\"COLORTERM\") === \"24bit\") {\n return COLORS_16m;\n }\n if (getEnvVar(\"TERM\")) {\n if (/truecolor/.exec(getEnvVar(\"TERM\")) !== null) {\n return COLORS_16m;\n }\n if (/^xterm-256/.exec(getEnvVar(\"TERM\")) !== null) {\n return COLORS_256;\n }\n const termEnv = getEnvVar(\"TERM\").toLowerCase();\n if (TERM_ENVS[termEnv]) {\n return TERM_ENVS[termEnv];\n }\n if (TERM_ENVS_REG_EXP.some((term) => term.exec(termEnv) !== null)) {\n return COLORS_16;\n }\n }\n if (getEnvVar(\"COLORTERM\")) {\n return COLORS_16;\n }\n return COLORS_2;\n}\n\nconst TTY_COLORS = {\n reset: \"\\x1B[0m\",\n bright: \"\\x1B[1m\",\n dim: \"\\x1B[2m\",\n undim: \"\\x1B[22m\",\n underscore: \"\\x1B[4m\",\n blink: \"\\x1B[5m\",\n reverse: \"\\x1B[7m\",\n hidden: \"\\x1B[8m\",\n fg: {\n black: \"\\x1B[30m\",\n red: \"\\x1B[31m\",\n green: \"\\x1B[32m\",\n yellow: \"\\x1B[33m\",\n blue: \"\\x1B[34m\",\n magenta: \"\\x1B[35m\",\n cyan: \"\\x1B[36m\",\n white: \"\\x1B[37m\"\n },\n bg: {\n black: \"\\x1B[40m\",\n red: \"\\x1B[41m\",\n green: \"\\x1B[42m\",\n yellow: \"\\x1B[43m\",\n blue: \"\\x1B[44m\",\n magenta: \"\\x1B[45m\",\n cyan: \"\\x1B[46m\",\n white: \"\\x1B[47m\"\n }\n};\nconst levels = [\"info\", \"success\", \"warn\", \"error\", \"debug\"];\nfunction shouldPublishLog(currentLogLevel, logLevel) {\n return levels.indexOf(logLevel) <= levels.indexOf(currentLogLevel);\n}\nconst levelColors = {\n info: TTY_COLORS.fg.blue,\n success: TTY_COLORS.fg.green,\n warn: TTY_COLORS.fg.yellow,\n error: TTY_COLORS.fg.red,\n debug: TTY_COLORS.fg.magenta\n};\nconst formatMessage = (level, message, colorsEnabled) => {\n const timestamp = (/* @__PURE__ */ new Date()).toISOString();\n if (colorsEnabled) {\n return `${TTY_COLORS.dim}${timestamp}${TTY_COLORS.reset} ${levelColors[level]}${level.toUpperCase()}${TTY_COLORS.reset} ${TTY_COLORS.bright}[Better Auth]:${TTY_COLORS.reset} ${message}`;\n }\n return `${timestamp} ${level.toUpperCase()} [Better Auth]: ${message}`;\n};\nconst createLogger = (options) => {\n const enabled = options?.disabled !== true;\n const logLevel = options?.level ?? \"error\";\n const isDisableColorsSpecified = options?.disableColors !== void 0;\n const colorsEnabled = isDisableColorsSpecified ? !options.disableColors : getColorDepth() !== 1;\n const LogFunc = (level, message, args = []) => {\n if (!enabled || !shouldPublishLog(logLevel, level)) {\n return;\n }\n const formattedMessage = formatMessage(level, message, colorsEnabled);\n if (!options || typeof options.log !== \"function\") {\n if (level === \"error\") {\n console.error(formattedMessage, ...args);\n } else if (level === \"warn\") {\n console.warn(formattedMessage, ...args);\n } else {\n console.log(formattedMessage, ...args);\n }\n return;\n }\n options.log(level === \"success\" ? \"info\" : level, message, ...args);\n };\n const logger2 = Object.fromEntries(\n levels.map((level) => [\n level,\n (...[message, ...args]) => LogFunc(level, message, args)\n ])\n );\n return {\n ...logger2,\n get level() {\n return logLevel;\n }\n };\n};\nconst logger = createLogger();\n\nexport { ENV, TTY_COLORS, createLogger, env, getBooleanEnvVar, getColorDepth, getEnvVar, isDevelopment, isProduction, isTest, levels, logger, nodeENV, shouldPublishLog };\n","function defineErrorCodes(codes) {\n return codes;\n}\n\nexport { defineErrorCodes };\n","import { defineErrorCodes } from '@better-auth/core/utils';\n\nconst BASE_ERROR_CODES = defineErrorCodes({\n USER_NOT_FOUND: \"User not found\",\n FAILED_TO_CREATE_USER: \"Failed to create user\",\n FAILED_TO_CREATE_SESSION: \"Failed to create session\",\n FAILED_TO_UPDATE_USER: \"Failed to update user\",\n FAILED_TO_GET_SESSION: \"Failed to get session\",\n INVALID_PASSWORD: \"Invalid password\",\n INVALID_EMAIL: \"Invalid email\",\n INVALID_EMAIL_OR_PASSWORD: \"Invalid email or password\",\n SOCIAL_ACCOUNT_ALREADY_LINKED: \"Social account already linked\",\n PROVIDER_NOT_FOUND: \"Provider not found\",\n INVALID_TOKEN: \"Invalid token\",\n ID_TOKEN_NOT_SUPPORTED: \"id_token not supported\",\n FAILED_TO_GET_USER_INFO: \"Failed to get user info\",\n USER_EMAIL_NOT_FOUND: \"User email not found\",\n EMAIL_NOT_VERIFIED: \"Email not verified\",\n PASSWORD_TOO_SHORT: \"Password too short\",\n PASSWORD_TOO_LONG: \"Password too long\",\n USER_ALREADY_EXISTS: \"User already exists.\",\n USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL: \"User already exists. Use another email.\",\n EMAIL_CAN_NOT_BE_UPDATED: \"Email can not be updated\",\n CREDENTIAL_ACCOUNT_NOT_FOUND: \"Credential account not found\",\n SESSION_EXPIRED: \"Session expired. Re-authenticate to perform this action.\",\n FAILED_TO_UNLINK_LAST_ACCOUNT: \"You can't unlink your last account\",\n ACCOUNT_NOT_FOUND: \"Account not found\",\n USER_ALREADY_HAS_PASSWORD: \"User already has a password. Provide that to delete the account.\"\n});\n\nclass BetterAuthError extends Error {\n constructor(message, cause) {\n super(message);\n this.name = \"BetterAuthError\";\n this.message = message;\n this.cause = cause;\n this.stack = \"\";\n }\n}\n\nexport { BASE_ERROR_CODES, BetterAuthError };\n","import { env } from '@better-auth/core/env';\nimport { BetterAuthError } from '@better-auth/core/error';\n\nfunction checkHasPath(url) {\n try {\n const parsedUrl = new URL(url);\n const pathname = parsedUrl.pathname.replace(/\\/+$/, \"\") || \"/\";\n return pathname !== \"/\";\n } catch (error) {\n throw new BetterAuthError(\n `Invalid base URL: ${url}. Please provide a valid base URL.`\n );\n }\n}\nfunction withPath(url, path = \"/api/auth\") {\n const hasPath = checkHasPath(url);\n if (hasPath) {\n return url;\n }\n const trimmedUrl = url.replace(/\\/+$/, \"\");\n if (!path || path === \"/\") {\n return trimmedUrl;\n }\n path = path.startsWith(\"/\") ? path : `/${path}`;\n return `${trimmedUrl}${path}`;\n}\nfunction getBaseURL(url, path, request, loadEnv) {\n if (url) {\n return withPath(url, path);\n }\n if (loadEnv !== false) {\n const fromEnv = env.BETTER_AUTH_URL || env.NEXT_PUBLIC_BETTER_AUTH_URL || env.PUBLIC_BETTER_AUTH_URL || env.NUXT_PUBLIC_BETTER_AUTH_URL || env.NUXT_PUBLIC_AUTH_URL || (env.BASE_URL !== \"/\" ? env.BASE_URL : void 0);\n if (fromEnv) {\n return withPath(fromEnv, path);\n }\n }\n const fromRequest = request?.headers.get(\"x-forwarded-host\");\n const fromRequestProto = request?.headers.get(\"x-forwarded-proto\");\n if (fromRequest && fromRequestProto) {\n return withPath(`${fromRequestProto}://${fromRequest}`, path);\n }\n if (request) {\n const url2 = getOrigin(request.url);\n if (!url2) {\n throw new BetterAuthError(\n \"Could not get origin from request. Please provide a valid base URL.\"\n );\n }\n return withPath(url2, path);\n }\n if (typeof window !== \"undefined\" && window.location) {\n return withPath(window.location.origin, path);\n }\n return void 0;\n}\nfunction getOrigin(url) {\n try {\n const parsedUrl = new URL(url);\n return parsedUrl.origin;\n } catch (error) {\n return null;\n }\n}\nfunction getProtocol(url) {\n try {\n const parsedUrl = new URL(url);\n return parsedUrl.protocol;\n } catch (error) {\n return null;\n }\n}\nfunction getHost(url) {\n try {\n const parsedUrl = new URL(url);\n return parsedUrl.host;\n } catch (error) {\n return null;\n }\n}\n\nexport { getBaseURL as a, getHost as b, getProtocol as c, getOrigin as g };\n","import { cleanTasks } from '../task/index.js'\n\nexport let clean = Symbol('clean')\n\nexport let cleanStores = (...stores) => {\n if (process.env.NODE_ENV === 'production') {\n throw new Error(\n 'cleanStores() can be used only during development or tests'\n )\n }\n cleanTasks()\n for (let $store of stores) {\n if ($store) {\n if ($store.mocked) delete $store.mocked\n if ($store[clean]) $store[clean]()\n }\n }\n}\n","import { clean } from '../clean-stores/index.js'\n\nlet listenerQueue = []\nlet lqIndex = 0\nconst QUEUE_ITEMS_PER_LISTENER = 4\nexport let epoch = 0\n\n/* @__NO_SIDE_EFFECTS__ */\nexport const atom = initialValue => {\n let listeners = []\n let $atom = {\n get() {\n if (!$atom.lc) {\n $atom.listen(() => {})()\n }\n return $atom.value\n },\n lc: 0,\n listen(listener) {\n $atom.lc = listeners.push(listener)\n\n return () => {\n for (\n let i = lqIndex + QUEUE_ITEMS_PER_LISTENER;\n i < listenerQueue.length;\n\n ) {\n if (listenerQueue[i] === listener) {\n listenerQueue.splice(i, QUEUE_ITEMS_PER_LISTENER)\n } else {\n i += QUEUE_ITEMS_PER_LISTENER\n }\n }\n\n let index = listeners.indexOf(listener)\n if (~index) {\n listeners.splice(index, 1)\n if (!--$atom.lc) $atom.off()\n }\n }\n },\n notify(oldValue, changedKey) {\n epoch++\n let runListenerQueue = !listenerQueue.length\n for (let listener of listeners) {\n listenerQueue.push(listener, $atom.value, oldValue, changedKey)\n }\n\n if (runListenerQueue) {\n for (\n lqIndex = 0;\n lqIndex < listenerQueue.length;\n lqIndex += QUEUE_ITEMS_PER_LISTENER\n ) {\n listenerQueue[lqIndex](\n listenerQueue[lqIndex + 1],\n listenerQueue[lqIndex + 2],\n listenerQueue[lqIndex + 3]\n )\n }\n listenerQueue.length = 0\n }\n },\n /* It will be called on last listener unsubscribing.\n We will redefine it in onMount and onStop. */\n off() {},\n set(newValue) {\n let oldValue = $atom.value\n if (oldValue !== newValue) {\n $atom.value = newValue\n $atom.notify(oldValue)\n }\n },\n subscribe(listener) {\n let unbind = $atom.listen(listener)\n listener($atom.value)\n return unbind\n },\n value: initialValue\n }\n\n if (process.env.NODE_ENV !== 'production') {\n $atom[clean] = () => {\n listeners = []\n $atom.lc = 0\n $atom.off()\n }\n }\n\n return $atom\n}\n\nexport const readonlyType = store => store\n","import { clean } from '../clean-stores/index.js'\n\nconst START = 0\nconst STOP = 1\nconst SET = 2\nconst NOTIFY = 3\nconst MOUNT = 5\nconst UNMOUNT = 6\nconst REVERT_MUTATION = 10\n\nexport let on = (object, listener, eventKey, mutateStore) => {\n object.events = object.events || {}\n if (!object.events[eventKey + REVERT_MUTATION]) {\n object.events[eventKey + REVERT_MUTATION] = mutateStore(eventProps => {\n // eslint-disable-next-line no-sequences\n object.events[eventKey].reduceRight((event, l) => (l(event), event), {\n shared: {},\n ...eventProps\n })\n })\n }\n object.events[eventKey] = object.events[eventKey] || []\n object.events[eventKey].push(listener)\n return () => {\n let currentListeners = object.events[eventKey]\n let index = currentListeners.indexOf(listener)\n currentListeners.splice(index, 1)\n if (!currentListeners.length) {\n delete object.events[eventKey]\n object.events[eventKey + REVERT_MUTATION]()\n delete object.events[eventKey + REVERT_MUTATION]\n }\n }\n}\n\nexport let onStart = ($store, listener) =>\n on($store, listener, START, runListeners => {\n let originListen = $store.listen\n $store.listen = arg => {\n if (!$store.lc && !$store.starting) {\n $store.starting = true\n runListeners()\n delete $store.starting\n }\n return originListen(arg)\n }\n return () => {\n $store.listen = originListen\n }\n })\n\nexport let onStop = ($store, listener) =>\n on($store, listener, STOP, runListeners => {\n let originOff = $store.off\n $store.off = () => {\n runListeners()\n originOff()\n }\n return () => {\n $store.off = originOff\n }\n })\n\nexport let onSet = ($store, listener) =>\n on($store, listener, SET, runListeners => {\n let originSet = $store.set\n let originSetKey = $store.setKey\n if ($store.setKey) {\n $store.setKey = (changed, changedValue) => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({\n abort,\n changed,\n newValue: { ...$store.value, [changed]: changedValue }\n })\n if (!isAborted) return originSetKey(changed, changedValue)\n }\n }\n $store.set = newValue => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({ abort, newValue })\n if (!isAborted) return originSet(newValue)\n }\n return () => {\n $store.set = originSet\n $store.setKey = originSetKey\n }\n })\n\nexport let onNotify = ($store, listener) =>\n on($store, listener, NOTIFY, runListeners => {\n let originNotify = $store.notify\n $store.notify = (oldValue, changed) => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({ abort, changed, oldValue })\n if (!isAborted) return originNotify(oldValue, changed)\n }\n return () => {\n $store.notify = originNotify\n }\n })\n\nexport let STORE_UNMOUNT_DELAY = 1000\n\nexport let onMount = ($store, initialize) => {\n let listener = payload => {\n let destroy = initialize(payload)\n if (destroy) $store.events[UNMOUNT].push(destroy)\n }\n return on($store, listener, MOUNT, runListeners => {\n let originListen = $store.listen\n $store.listen = (...args) => {\n if (!$store.lc && !$store.active) {\n $store.active = true\n runListeners()\n }\n return originListen(...args)\n }\n\n let originOff = $store.off\n $store.events[UNMOUNT] = []\n $store.off = () => {\n originOff()\n setTimeout(() => {\n if ($store.active && !$store.lc) {\n $store.active = false\n for (let destroy of $store.events[UNMOUNT]) destroy()\n $store.events[UNMOUNT] = []\n }\n }, STORE_UNMOUNT_DELAY)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n let originClean = $store[clean]\n $store[clean] = () => {\n for (let destroy of $store.events[UNMOUNT]) destroy()\n $store.events[UNMOUNT] = []\n $store.active = false\n originClean()\n }\n }\n\n return () => {\n $store.listen = originListen\n $store.off = originOff\n }\n })\n}\n","export function listenKeys($store, keys, listener) {\n let keysSet = new Set(keys).add(undefined)\n return $store.listen((value, oldValue, changed) => {\n if (keysSet.has(changed)) {\n listener(value, oldValue, changed)\n }\n })\n}\n\nexport function subscribeKeys($store, keys, listener) {\n let unbind = listenKeys($store, keys, listener)\n listener($store.value)\n return unbind\n}\n","import { atom, onMount } from 'nanostores';\n\nconst isServer = typeof window === \"undefined\";\nconst useAuthQuery = (initializedAtom, path, $fetch, options) => {\n const value = atom({\n data: null,\n error: null,\n isPending: true,\n isRefetching: false,\n refetch: (queryParams) => {\n return fn(queryParams);\n }\n });\n const fn = (queryParams) => {\n const opts = typeof options === \"function\" ? options({\n data: value.get().data,\n error: value.get().error,\n isPending: value.get().isPending\n }) : options;\n $fetch(path, {\n ...opts,\n query: {\n ...opts?.query,\n ...queryParams?.query\n },\n async onSuccess(context) {\n value.set({\n data: context.data,\n error: null,\n isPending: false,\n isRefetching: false,\n refetch: value.value.refetch\n });\n await opts?.onSuccess?.(context);\n },\n async onError(context) {\n const { request } = context;\n const retryAttempts = typeof request.retry === \"number\" ? request.retry : request.retry?.attempts;\n const retryAttempt = request.retryAttempt || 0;\n if (retryAttempts && retryAttempt < retryAttempts) return;\n value.set({\n error: context.error,\n data: null,\n isPending: false,\n isRefetching: false,\n refetch: value.value.refetch\n });\n await opts?.onError?.(context);\n },\n async onRequest(context) {\n const currentValue = value.get();\n value.set({\n isPending: currentValue.data === null,\n data: currentValue.data,\n error: null,\n isRefetching: true,\n refetch: value.value.refetch\n });\n await opts?.onRequest?.(context);\n }\n }).catch((error) => {\n value.set({\n error,\n data: null,\n isPending: false,\n isRefetching: false,\n refetch: value.value.refetch\n });\n });\n };\n initializedAtom = Array.isArray(initializedAtom) ? initializedAtom : [initializedAtom];\n let isMounted = false;\n for (const initAtom of initializedAtom) {\n initAtom.subscribe(() => {\n if (isServer) {\n return;\n }\n if (isMounted) {\n fn();\n } else {\n onMount(value, () => {\n const timeoutId = setTimeout(() => {\n if (!isMounted) {\n fn();\n isMounted = true;\n }\n }, 0);\n return () => {\n value.off();\n initAtom.off();\n clearTimeout(timeoutId);\n };\n });\n }\n });\n }\n return value;\n};\n\nexport { useAuthQuery as u };\n","const PROTO_POLLUTION_PATTERNS = {\n proto: /\"(?:_|\\\\u0{2}5[Ff]){2}(?:p|\\\\u0{2}70)(?:r|\\\\u0{2}72)(?:o|\\\\u0{2}6[Ff])(?:t|\\\\u0{2}74)(?:o|\\\\u0{2}6[Ff])(?:_|\\\\u0{2}5[Ff]){2}\"\\s*:/,\n constructor: /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/,\n protoShort: /\"__proto__\"\\s*:/,\n constructorShort: /\"constructor\"\\s*:/\n};\nconst JSON_SIGNATURE = /^\\s*[\"[{]|^\\s*-?\\d{1,16}(\\.\\d{1,17})?([Ee][+-]?\\d+)?\\s*$/;\nconst SPECIAL_VALUES = {\n true: true,\n false: false,\n null: null,\n undefined: void 0,\n nan: Number.NaN,\n infinity: Number.POSITIVE_INFINITY,\n \"-infinity\": Number.NEGATIVE_INFINITY\n};\nconst ISO_DATE_REGEX = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,7}))?(?:Z|([+-])(\\d{2}):(\\d{2}))$/;\nfunction isValidDate(date) {\n return date instanceof Date && !isNaN(date.getTime());\n}\nfunction parseISODate(value) {\n const match = ISO_DATE_REGEX.exec(value);\n if (!match) return null;\n const [\n ,\n year,\n month,\n day,\n hour,\n minute,\n second,\n ms,\n offsetSign,\n offsetHour,\n offsetMinute\n ] = match;\n let date = new Date(\n Date.UTC(\n parseInt(year, 10),\n parseInt(month, 10) - 1,\n parseInt(day, 10),\n parseInt(hour, 10),\n parseInt(minute, 10),\n parseInt(second, 10),\n ms ? parseInt(ms.padEnd(3, \"0\"), 10) : 0\n )\n );\n if (offsetSign) {\n const offset = (parseInt(offsetHour, 10) * 60 + parseInt(offsetMinute, 10)) * (offsetSign === \"+\" ? -1 : 1);\n date.setUTCMinutes(date.getUTCMinutes() + offset);\n }\n return isValidDate(date) ? date : null;\n}\nfunction betterJSONParse(value, options = {}) {\n const {\n strict = false,\n warnings = false,\n reviver,\n parseDates = true\n } = options;\n if (typeof value !== \"string\") {\n return value;\n }\n const trimmed = value.trim();\n if (trimmed.length > 0 && trimmed[0] === '\"' && trimmed.endsWith('\"') && !trimmed.slice(1, -1).includes('\"')) {\n return trimmed.slice(1, -1);\n }\n const lowerValue = trimmed.toLowerCase();\n if (lowerValue.length <= 9 && lowerValue in SPECIAL_VALUES) {\n return SPECIAL_VALUES[lowerValue];\n }\n if (!JSON_SIGNATURE.test(trimmed)) {\n if (strict) {\n throw new SyntaxError(\"[better-json] Invalid JSON\");\n }\n return value;\n }\n const hasProtoPattern = Object.entries(PROTO_POLLUTION_PATTERNS).some(\n ([key, pattern]) => {\n const matches = pattern.test(trimmed);\n if (matches && warnings) {\n console.warn(\n `[better-json] Detected potential prototype pollution attempt using ${key} pattern`\n );\n }\n return matches;\n }\n );\n if (hasProtoPattern && strict) {\n throw new Error(\n \"[better-json] Potential prototype pollution attempt detected\"\n );\n }\n try {\n const secureReviver = (key, value2) => {\n if (key === \"__proto__\" || key === \"constructor\" && value2 && typeof value2 === \"object\" && \"prototype\" in value2) {\n if (warnings) {\n console.warn(\n `[better-json] Dropping \"${key}\" key to prevent prototype pollution`\n );\n }\n return void 0;\n }\n if (parseDates && typeof value2 === \"string\") {\n const date = parseISODate(value2);\n if (date) {\n return date;\n }\n }\n return reviver ? reviver(key, value2) : value2;\n };\n return JSON.parse(trimmed, secureReviver);\n } catch (error) {\n if (strict) {\n throw error;\n }\n return value;\n }\n}\nfunction parseJSON(value, options = { strict: true }) {\n return betterJSONParse(value, options);\n}\n\nexport { parseJSON as p };\n","import { createFetch } from '@better-fetch/fetch';\nimport { a as getBaseURL } from './better-auth.DR3R5wdU.mjs';\nimport { atom } from 'nanostores';\nimport { u as useAuthQuery } from './better-auth.BYWGbmZ5.mjs';\nimport { p as parseJSON } from './better-auth.msGOU0m9.mjs';\n\nconst redirectPlugin = {\n id: \"redirect\",\n name: \"Redirect\",\n hooks: {\n onSuccess(context) {\n if (context.data?.url && context.data?.redirect) {\n if (typeof window !== \"undefined\" && window.location) {\n if (window.location) {\n try {\n window.location.href = context.data.url;\n } catch {\n }\n }\n }\n }\n }\n }\n};\n\nfunction getSessionAtom($fetch) {\n const $signal = atom(false);\n const session = useAuthQuery($signal, \"/get-session\", $fetch, {\n method: \"GET\"\n });\n return {\n session,\n $sessionSignal: $signal\n };\n}\n\nconst getClientConfig = (options, loadEnv) => {\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n const baseURL = getBaseURL(options?.baseURL, options?.basePath, void 0, loadEnv) ?? \"/api/auth\";\n const pluginsFetchPlugins = options?.plugins?.flatMap((plugin) => plugin.fetchPlugins).filter((pl) => pl !== void 0) || [];\n const lifeCyclePlugin = {\n id: \"lifecycle-hooks\",\n name: \"lifecycle-hooks\",\n hooks: {\n onSuccess: options?.fetchOptions?.onSuccess,\n onError: options?.fetchOptions?.onError,\n onRequest: options?.fetchOptions?.onRequest,\n onResponse: options?.fetchOptions?.onResponse\n }\n };\n const { onSuccess, onError, onRequest, onResponse, ...restOfFetchOptions } = options?.fetchOptions || {};\n const $fetch = createFetch({\n baseURL,\n ...isCredentialsSupported ? { credentials: \"include\" } : {},\n method: \"GET\",\n jsonParser(text) {\n if (!text) {\n return null;\n }\n return parseJSON(text, {\n strict: false\n });\n },\n customFetchImpl: fetch,\n ...restOfFetchOptions,\n plugins: [\n lifeCyclePlugin,\n ...restOfFetchOptions.plugins || [],\n ...options?.disableDefaultFetchPlugins ? [] : [redirectPlugin],\n ...pluginsFetchPlugins\n ]\n });\n const { $sessionSignal, session } = getSessionAtom($fetch);\n const plugins = options?.plugins || [];\n let pluginsActions = {};\n let pluginsAtoms = {\n $sessionSignal,\n session\n };\n let pluginPathMethods = {\n \"/sign-out\": \"POST\",\n \"/revoke-sessions\": \"POST\",\n \"/revoke-other-sessions\": \"POST\",\n \"/delete-user\": \"POST\"\n };\n const atomListeners = [\n {\n signal: \"$sessionSignal\",\n matcher(path) {\n return path === \"/sign-out\" || path === \"/update-user\" || path.startsWith(\"/sign-in\") || path.startsWith(\"/sign-up\") || path === \"/delete-user\" || path === \"/verify-email\";\n }\n }\n ];\n for (const plugin of plugins) {\n if (plugin.getAtoms) {\n Object.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n }\n if (plugin.pathMethods) {\n Object.assign(pluginPathMethods, plugin.pathMethods);\n }\n if (plugin.atomListeners) {\n atomListeners.push(...plugin.atomListeners);\n }\n }\n const $store = {\n notify: (signal) => {\n pluginsAtoms[signal].set(\n !pluginsAtoms[signal].get()\n );\n },\n listen: (signal, listener) => {\n pluginsAtoms[signal].subscribe(listener);\n },\n atoms: pluginsAtoms\n };\n for (const plugin of plugins) {\n if (plugin.getActions) {\n Object.assign(\n pluginsActions,\n plugin.getActions?.($fetch, $store, options)\n );\n }\n }\n return {\n get baseURL() {\n return baseURL;\n },\n pluginsActions,\n pluginsAtoms,\n pluginPathMethods,\n atomListeners,\n $fetch,\n $store\n };\n};\n\nfunction isAtom(value) {\n return typeof value === \"object\" && value !== null && \"get\" in value && typeof value.get === \"function\" && \"lc\" in value && typeof value.lc === \"number\";\n}\n\nfunction getMethod(path, knownPathMethods, args) {\n const method = knownPathMethods[path];\n const { fetchOptions, query, ...body } = args || {};\n if (method) {\n return method;\n }\n if (fetchOptions?.method) {\n return fetchOptions.method;\n }\n if (body && Object.keys(body).length > 0) {\n return \"POST\";\n }\n return \"GET\";\n}\nfunction createDynamicPathProxy(routes, client, knownPathMethods, atoms, atomListeners) {\n function createProxy(path = []) {\n return new Proxy(function() {\n }, {\n get(_, prop) {\n if (typeof prop !== \"string\") {\n return void 0;\n }\n if (prop === \"then\" || prop === \"catch\" || prop === \"finally\") {\n return void 0;\n }\n const fullPath = [...path, prop];\n let current = routes;\n for (const segment of fullPath) {\n if (current && typeof current === \"object\" && segment in current) {\n current = current[segment];\n } else {\n current = void 0;\n break;\n }\n }\n if (typeof current === \"function\") {\n return current;\n }\n if (isAtom(current)) {\n return current;\n }\n return createProxy(fullPath);\n },\n apply: async (_, __, args) => {\n const routePath = \"/\" + path.map(\n (segment) => segment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)\n ).join(\"/\");\n const arg = args[0] || {};\n const fetchOptions = args[1] || {};\n const { query, fetchOptions: argFetchOptions, ...body } = arg;\n const options = {\n ...fetchOptions,\n ...argFetchOptions\n };\n const method = getMethod(routePath, knownPathMethods, arg);\n return await client(routePath, {\n ...options,\n body: method === \"GET\" ? void 0 : {\n ...body,\n ...options?.body || {}\n },\n query: query || options?.query,\n method,\n async onSuccess(context) {\n await options?.onSuccess?.(context);\n if (!atomListeners) return;\n const matches = atomListeners.filter((s) => s.matcher(routePath));\n if (!matches.length) return;\n for (const match of matches) {\n const signal = atoms[match.signal];\n if (!signal) return;\n const val = signal.get();\n setTimeout(() => {\n signal.set(!val);\n }, 10);\n }\n }\n });\n }\n });\n }\n return createProxy();\n}\n\nexport { createDynamicPathProxy as c, getClientConfig as g };\n","import { g as getClientConfig, c as createDynamicPathProxy } from '../../shared/better-auth.RKafzlkP.mjs';\nimport { listenKeys } from 'nanostores';\nimport { useRef, useCallback, useSyncExternalStore } from 'react';\nimport '@better-fetch/fetch';\nimport '../../shared/better-auth.DR3R5wdU.mjs';\nimport '@better-auth/core/env';\nimport '@better-auth/core/error';\nimport '../../shared/better-auth.BYWGbmZ5.mjs';\nimport '../../shared/better-auth.msGOU0m9.mjs';\n\nfunction useStore(store, options = {}) {\n let snapshotRef = useRef(store.get());\n const { keys, deps = [store, keys] } = options;\n let subscribe = useCallback((onChange) => {\n const emitChange = (value) => {\n if (snapshotRef.current === value) return;\n snapshotRef.current = value;\n onChange();\n };\n emitChange(store.value);\n if (keys?.length) {\n return listenKeys(store, keys, emitChange);\n }\n return store.listen(emitChange);\n }, deps);\n let get = () => snapshotRef.current;\n return useSyncExternalStore(subscribe, get, get);\n}\n\nfunction getAtomKey(str) {\n return `use${capitalizeFirstLetter(str)}`;\n}\nfunction capitalizeFirstLetter(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nfunction createAuthClient(options) {\n const {\n pluginPathMethods,\n pluginsActions,\n pluginsAtoms,\n $fetch,\n $store,\n atomListeners\n } = getClientConfig(options);\n let resolvedHooks = {};\n for (const [key, value] of Object.entries(pluginsAtoms)) {\n resolvedHooks[getAtomKey(key)] = () => useStore(value);\n }\n const routes = {\n ...pluginsActions,\n ...resolvedHooks,\n $fetch,\n $store\n };\n const proxy = createDynamicPathProxy(\n routes,\n $fetch,\n pluginPathMethods,\n pluginsAtoms,\n atomListeners\n );\n return proxy;\n}\n\nexport { capitalizeFirstLetter, createAuthClient, useStore };\n","/**\n * @erikey/react - Dashboard Client\n *\n * Thin wrapper around better-auth/react for the Erikey dashboard.\n */\nimport { createAuthClient as createBetterAuthClient } from 'better-auth/react';\n\nexport interface DashboardClientConfig {\n /**\n * Base URL for the auth API\n * @default process.env.NEXT_PUBLIC_AUTH_URL || 'https://api.erikey.com'\n */\n baseURL?: string;\n\n /**\n * Whether to include credentials in requests\n * @default 'include'\n */\n credentials?: RequestCredentials;\n}\n\n/**\n * Create dashboard client with better-auth\n *\n * This is for the Erikey dashboard (erikey.com) - NOT for end-user auth.\n * For end-user auth in customer apps, use `createAuthClient` instead.\n *\n * NOTE: For dashboard user signup (which creates org + project), use the\n * typed API client (signupApi.dashboard) from @/lib/api/typed-api instead.\n * This client only handles Better Auth operations (signIn, session, etc.)\n *\n * @example\n * ```tsx\n * import { createDashboardClient } from '@erikey/react';\n *\n * export const auth = createDashboardClient({\n * baseURL: process.env.NEXT_PUBLIC_AUTH_URL\n * });\n *\n * // Use Better Auth methods\n * export const { useSession, signIn, signOut } = auth;\n * ```\n */\nexport function createDashboardClient(config?: DashboardClientConfig) {\n const baseURL = config?.baseURL || 'https://api.erikey.com';\n\n return createBetterAuthClient({\n baseURL,\n credentials: config?.credentials || 'include',\n });\n}\n\n/**\n * Type helper for inferring the dashboard client type\n */\nexport type DashboardClient = ReturnType<typeof createDashboardClient>;\n","/**\n * Universal auth client implementation\n * Works in Node.js 18+ and modern browsers\n *\n * Extracted from @erikey/react for universal use\n */\n\nimport type {\n AuthClientConfig,\n AuthClient,\n SignUpData,\n SignInData,\n AuthResponse,\n UserResponse,\n SignOutResponse,\n PasswordResetResponse,\n SetValueResponse,\n GetValueResponse,\n GetValuesResponse,\n DeleteValueResponse,\n DeleteValuesResponse,\n SetValuesResponse,\n KvBulkSetInput,\n} from './types';\n\n/** Default base URL for Erikey auth API */\nconst DEFAULT_BASE_URL = 'https://auth.erikey.com';\n\n/**\n * Create a universal auth client\n *\n * Works in both Node.js and browser environments\n * Uses standard fetch API (available in Node.js 18+)\n *\n * @param config - Client configuration\n * @returns Auth client instance\n *\n * @example\n * ```typescript\n * const auth = createAuthClient({\n * projectId: 'pk_live_123',\n * baseUrl: '/api/auth', // Optional proxy\n * });\n *\n * const result = await auth.signUp({\n * email: 'user@example.com',\n * password: 'secure123',\n * name: 'John Doe',\n * });\n * ```\n */\nexport function createAuthClient(config: AuthClientConfig): AuthClient {\n const { projectId, baseUrl = DEFAULT_BASE_URL } = config;\n\n /**\n * Internal helper for making authenticated requests\n */\n const fetchWithAuth = async <T>(\n endpoint: string,\n options?: RequestInit\n ): Promise<T> => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Project-Id': projectId,\n ...(options?.headers as Record<string, string> || {}),\n };\n\n const response = await fetch(`${baseUrl}/api/auth${endpoint}`, {\n ...options,\n credentials: 'include', // Send cookies\n headers,\n });\n\n const data = await response.json() as any;\n\n if (!response.ok) {\n return {\n success: false,\n error: data?.error?.message || data?.message || 'Request failed',\n } as T;\n }\n\n return {\n success: true,\n data,\n } as T;\n };\n\n return {\n /**\n * Sign up a new user\n */\n signUp: async (data: SignUpData): Promise<AuthResponse> => {\n return fetchWithAuth<AuthResponse>('/sign-up/email', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n },\n\n /**\n * Sign in an existing user\n */\n signIn: async (data: SignInData): Promise<AuthResponse> => {\n return fetchWithAuth<AuthResponse>('/sign-in/email', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n },\n\n /**\n * Sign out the current user\n */\n signOut: async (): Promise<SignOutResponse> => {\n return fetchWithAuth<SignOutResponse>('/sign-out', {\n method: 'POST',\n });\n },\n\n /**\n * Get the current authenticated user\n */\n getUser: async (): Promise<UserResponse> => {\n return fetchWithAuth<UserResponse>('/session', {\n method: 'GET',\n });\n },\n\n /**\n * Request a password reset email\n */\n forgotPassword: async (email: string): Promise<PasswordResetResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>('/forget-password', {\n method: 'POST',\n body: JSON.stringify({ email }),\n });\n\n if (!result.success) {\n return { success: false, message: result.error || 'Failed to request password reset' };\n }\n\n return {\n success: true,\n message: result.data?.message || 'Password reset email sent',\n };\n },\n\n /**\n * Reset password with a token from the reset email\n */\n resetPassword: async (token: string, newPassword: string): Promise<PasswordResetResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>('/reset-password', {\n method: 'POST',\n body: JSON.stringify({ token, newPassword }),\n });\n\n if (!result.success) {\n return { success: false, message: result.error || 'Failed to reset password' };\n }\n\n return {\n success: true,\n message: result.data?.message || 'Password reset successful',\n };\n },\n\n /**\n * Set a single key-value pair\n */\n setValue: async (key: string, value: any): Promise<SetValueResponse> => {\n return fetchWithAuth<SetValueResponse>(`/key-value/${encodeURIComponent(key)}`, {\n method: 'PUT',\n body: JSON.stringify({ value }),\n });\n },\n\n /**\n * Get a single key-value pair\n */\n getValue: async (key: string): Promise<GetValueResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'GET' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n key: result.data.key,\n value: result.data.value,\n createdAt: result.data.createdAt,\n updatedAt: result.data.updatedAt,\n },\n };\n },\n\n /**\n * Get all key-value pairs for the authenticated user\n */\n getValues: async (): Promise<GetValuesResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>(\n '/key-value',\n { method: 'GET' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n kvPairs: result.data.kvPairs,\n total: result.data.total,\n },\n };\n },\n\n /**\n * Delete a single key-value pair\n */\n deleteValue: async (key: string): Promise<DeleteValueResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'DELETE' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n message: result.data.message || 'KV pair deleted',\n },\n };\n },\n\n /**\n * Delete multiple key-value pairs\n * Note: Makes sequential DELETE requests since no bulk delete endpoint exists\n */\n deleteValues: async (keys: string[]): Promise<DeleteValuesResponse> => {\n if (keys.length === 0) {\n return {\n success: true,\n data: {\n deleted: [],\n failed: [],\n },\n };\n }\n\n const results = await Promise.allSettled(\n keys.map((key) =>\n fetchWithAuth<{ success: boolean; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'DELETE' }\n ).then((result) => ({ key, result }))\n )\n );\n\n const deleted: string[] = [];\n const failed: Array<{ key: string; error: string }> = [];\n\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') {\n const { key, result: deleteResult } = result.value;\n if (deleteResult.success) {\n deleted.push(key);\n } else {\n failed.push({\n key,\n error: deleteResult.error || 'Delete failed',\n });\n }\n } else {\n failed.push({\n key: keys[index],\n error: result.reason?.message || 'Request failed',\n });\n }\n });\n\n return {\n success: failed.length === 0,\n data: {\n deleted,\n failed,\n },\n };\n },\n\n /**\n * Set multiple key-value pairs in bulk (max 100 pairs)\n */\n setValues: async (kvPairs: KvBulkSetInput[]): Promise<SetValuesResponse> => {\n const result = await fetchWithAuth<{ success: boolean; data?: any; error?: string }>(\n '/key-value/bulk',\n {\n method: 'POST',\n body: JSON.stringify({ kvPairs }),\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n results: result.data.results,\n total: result.data.total,\n },\n };\n },\n };\n}\n","/**\n * Sandpack environment detection\n *\n * ⚠️ WARNING: DEV/PREVIEW ONLY\n *\n * Detects if code is running inside a Sandpack iframe environment where:\n * - Third-party cookies are blocked\n * - localStorage is used instead of cookies\n * - Bearer tokens are sent via Authorization header\n *\n * @packageDocumentation\n */\n\n/**\n * Detect if running in Sandpack environment (cross-origin iframe)\n *\n * Sandpack blocks cookies due to third-party cookie policies, so we need\n * to use localStorage + Bearer tokens instead.\n *\n * ⚠️ In production, this should always return false to prevent accidental\n * use of dev-only authentication flows.\n *\n * @returns true if running inside an iframe (likely Sandpack/preview environment)\n *\n * @example\n * ```typescript\n * import { isSandpackEnvironment } from '@erikey/sandpack-auth/client';\n *\n * if (isSandpackEnvironment()) {\n * console.log('Using Bearer token auth for Sandpack');\n * } else {\n * console.log('Using standard cookie-based auth');\n * }\n * ```\n */\nexport function isSandpackEnvironment(): boolean {\n // Server-side check\n if (typeof window === 'undefined') {\n return false;\n }\n\n // Production safety: Always return false in production\n if (process.env.NODE_ENV === 'production') {\n console.warn(\n '[SANDPACK-AUTH] Sandpack detection called in production environment. ' +\n 'This should only run in development/preview. Returning false.'\n );\n return false;\n }\n\n try {\n // If we're in an iframe, assume it's Sandpack or similar preview environment\n const inIframe = window.self !== window.top;\n return inIframe;\n } catch {\n // Cross-origin access denied = definitely cross-origin iframe\n return true;\n }\n}\n\n/**\n * Get environment information\n *\n * @returns Object with environment details\n */\nexport function getEnvironmentInfo() {\n const isSandpack = isSandpackEnvironment();\n const isProduction = process.env.NODE_ENV === 'production';\n\n return {\n isSandpack,\n isProduction,\n shouldUseBearerAuth: isSandpack && !isProduction,\n environment: process.env.NODE_ENV || 'development',\n };\n}\n","/**\n * localStorage-based session storage for Sandpack\n *\n * ⚠️ WARNING: DEV/PREVIEW ONLY\n *\n * In Sandpack environments, cookies are blocked by browsers due to third-party\n * cookie policies. This module provides localStorage-based session management\n * as a workaround for development and preview environments.\n *\n * Production applications should NEVER use this - use standard cookie-based auth.\n *\n * @packageDocumentation\n */\n\nimport type { Session } from '../types';\n\n/**\n * Stored session data structure\n * Minimal subset of Session stored in localStorage\n */\nexport interface StoredSession {\n token: string;\n expiresAt: string;\n}\n\n/**\n * Generate localStorage key for a project's session\n *\n * @param projectId - The Erikey project ID\n * @returns The localStorage key\n */\nfunction getStorageKey(projectId: string): string {\n return `erikey.session.${projectId}`;\n}\n\n/**\n * Store session token in localStorage (Sandpack only)\n *\n * ⚠️ DEV/PREVIEW ONLY - Never use in production\n *\n * @param projectId - The Erikey project ID\n * @param session - The session data to store\n *\n * @example\n * ```typescript\n * import { storeToken } from '@erikey/sandpack-auth/client';\n *\n * storeToken('proj_123', {\n * id: 'session_abc',\n * token: 'token_xyz',\n * expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString()\n * });\n * ```\n */\nexport function storeToken(projectId: string, session: Session): void {\n const key = getStorageKey(projectId);\n const stored: StoredSession = {\n token: session.token,\n expiresAt: session.expiresAt,\n };\n\n console.log('[Sandpack Auth] Storing token:', {\n key,\n tokenPreview: session.token.substring(0, 20) + '...',\n });\n\n localStorage.setItem(key, JSON.stringify(stored));\n\n // Verify storage\n const check = localStorage.getItem(key);\n if (!check) {\n console.error('[Sandpack Auth] Failed to store token in localStorage');\n } else {\n console.log('[Sandpack Auth] Token stored successfully');\n }\n}\n\n/**\n * Get stored token from localStorage (Sandpack only)\n *\n * Returns null if:\n * - Token doesn't exist\n * - Token is expired\n * - Token data is corrupted\n *\n * Automatically cleans up expired or invalid tokens.\n *\n * @param projectId - The Erikey project ID\n * @returns The session token, or null if not found/expired\n *\n * @example\n * ```typescript\n * import { getStoredToken } from '@erikey/sandpack-auth/client';\n *\n * const token = getStoredToken('proj_123');\n * if (token) {\n * console.log('Found valid session token');\n * } else {\n * console.log('No valid session - user needs to sign in');\n * }\n * ```\n */\nexport function getStoredToken(projectId: string): string | null {\n const key = getStorageKey(projectId);\n const stored = localStorage.getItem(key);\n\n if (!stored) {\n return null;\n }\n\n try {\n const session: StoredSession = JSON.parse(stored);\n\n // Check if token is expired\n if (new Date(session.expiresAt) < new Date()) {\n console.log('[Sandpack Auth] Token expired, removing from localStorage');\n localStorage.removeItem(key);\n return null;\n }\n\n return session.token;\n } catch (error) {\n console.error('[Sandpack Auth] Failed to parse stored session:', error);\n localStorage.removeItem(key);\n return null;\n }\n}\n\n/**\n * Get stored session data from localStorage\n *\n * Returns null if session doesn't exist, is expired, or is corrupted.\n *\n * @param projectId - The Erikey project ID\n * @returns The stored session data, or null\n */\nexport function getStoredSession(projectId: string): StoredSession | null {\n const key = getStorageKey(projectId);\n const stored = localStorage.getItem(key);\n\n if (!stored) {\n return null;\n }\n\n try {\n const session: StoredSession = JSON.parse(stored);\n\n // Check if expired\n if (new Date(session.expiresAt) < new Date()) {\n localStorage.removeItem(key);\n return null;\n }\n\n return session;\n } catch {\n localStorage.removeItem(key);\n return null;\n }\n}\n\n/**\n * Clear stored token from localStorage (Sandpack only)\n *\n * Use this when signing out to ensure the token is removed.\n *\n * @param projectId - The Erikey project ID\n *\n * @example\n * ```typescript\n * import { clearToken } from '@erikey/sandpack-auth/client';\n *\n * // On sign out\n * clearToken('proj_123');\n * ```\n */\nexport function clearToken(projectId: string): void {\n const key = getStorageKey(projectId);\n console.log('[Sandpack Auth] Clearing token from localStorage');\n localStorage.removeItem(key);\n}\n\n/**\n * Check if a stored session exists and is valid\n *\n * @param projectId - The Erikey project ID\n * @returns true if a valid session exists\n */\nexport function hasValidSession(projectId: string): boolean {\n return getStoredToken(projectId) !== null;\n}\n","/**\n * HTTP client with automatic Bearer token authentication for Sandpack\n *\n * ⚠️ WARNING: DEV/PREVIEW ONLY\n *\n * This module provides a fetch wrapper that automatically:\n * - Detects Sandpack environment\n * - Attaches Bearer tokens from localStorage\n * - Handles credentials appropriately (omit in Sandpack, include in production)\n *\n * @packageDocumentation\n */\n\nimport { isSandpackEnvironment } from './detection';\nimport { getStoredToken } from './storage';\n\n/**\n * Configuration for authenticated fetch requests\n */\nexport interface FetchWithAuthOptions extends Omit<RequestInit, 'headers'> {\n /**\n * Additional headers to include in the request\n */\n headers?: Record<string, string>;\n}\n\n/**\n * Response wrapper for fetch operations\n */\nexport interface FetchResponse<T = any> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\n/**\n * Fetch wrapper with automatic Bearer token authentication for Sandpack\n *\n * Automatically:\n * - Detects if running in Sandpack environment\n * - Retrieves token from localStorage if in Sandpack\n * - Adds Authorization: Bearer header if token exists\n * - Sets credentials to 'omit' in Sandpack, 'include' in production\n * - Adds X-Project-Id header\n *\n * ⚠️ This is a \"side flow\" for Sandpack only. Production uses standard\n * cookie-based authentication with credentials: 'include'.\n *\n * @param baseUrl - Base URL of the auth API (e.g., 'https://auth.erikey.com')\n * @param projectId - The Erikey project ID\n * @param endpoint - API endpoint (e.g., '/get-session', '/sign-in/email')\n * @param options - Fetch options (method, body, headers, etc.)\n * @returns Promise resolving to response with success/data/error\n *\n * @example\n * ```typescript\n * import { fetchWithAuth } from '@erikey/sandpack-auth/client';\n *\n * // Get current session\n * const response = await fetchWithAuth(\n * 'https://auth.erikey.com',\n * 'proj_123',\n * '/get-session'\n * );\n *\n * if (response.success) {\n * console.log('User:', response.data.user);\n * }\n *\n * // Sign in\n * const signInResponse = await fetchWithAuth(\n * 'https://auth.erikey.com',\n * 'proj_123',\n * '/sign-in/email',\n * {\n * method: 'POST',\n * body: JSON.stringify({ email: 'user@example.com', password: 'pass' })\n * }\n * );\n * ```\n */\nexport async function fetchWithAuth<T = any>(\n baseUrl: string,\n projectId: string,\n endpoint: string,\n options?: FetchWithAuthOptions\n): Promise<FetchResponse<T>> {\n // Detect environment\n const inSandpack = isSandpackEnvironment();\n const token = inSandpack ? getStoredToken(projectId) : null;\n\n // Build headers\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Project-Id': projectId,\n ...(options?.headers || {}),\n };\n\n // Add Bearer token for Sandpack\n // Note: Cookie header cannot be set via JavaScript (browser security)\n // So we use Bearer token instead, which auth-api handles specially\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n console.log('[Sandpack Auth] Adding Bearer token to request');\n }\n\n // Build full URL\n const url = `${baseUrl}/api/auth${endpoint}`;\n\n console.log('[Sandpack Auth] Making request:', {\n url,\n method: options?.method || 'GET',\n inSandpack,\n hasToken: !!token,\n });\n\n // Make request\n const response = await fetch(url, {\n ...options,\n // CRITICAL: In Sandpack, omit credentials (don't send cookies)\n // In production, include credentials (send cookies normally)\n credentials: inSandpack ? 'omit' : 'include',\n headers,\n });\n\n // Parse response\n let data: any;\n try {\n const text = await response.text();\n data = text ? JSON.parse(text) : {};\n } catch (error) {\n console.error('[Sandpack Auth] Failed to parse response:', error);\n data = {};\n }\n\n // Handle errors\n if (!response.ok) {\n const errorMessage =\n data.error?.message ||\n data.message ||\n `Request failed with status ${response.status}`;\n\n console.error('[Sandpack Auth] Request failed:', {\n status: response.status,\n error: errorMessage,\n });\n\n return {\n success: false,\n error: errorMessage,\n };\n }\n\n console.log('[Sandpack Auth] Request succeeded');\n\n return {\n success: true,\n data,\n };\n}\n\n/**\n * Create a configured fetch function bound to a specific base URL and project ID\n *\n * @param baseUrl - Base URL of the auth API\n * @param projectId - The Erikey project ID\n * @returns Bound fetch function\n *\n * @example\n * ```typescript\n * import { createFetchWithAuth } from '@erikey/sandpack-auth/client';\n *\n * const authFetch = createFetchWithAuth('https://auth.erikey.com', 'proj_123');\n *\n * // Now you can use it without repeating baseUrl/projectId\n * const session = await authFetch('/get-session');\n * const user = await authFetch('/sign-in/email', {\n * method: 'POST',\n * body: JSON.stringify({ email: '...', password: '...' })\n * });\n * ```\n */\nexport function createFetchWithAuth(baseUrl: string, projectId: string) {\n return <T = any>(endpoint: string, options?: FetchWithAuthOptions) =>\n fetchWithAuth<T>(baseUrl, projectId, endpoint, options);\n}\n","/**\n * @erikey/react - React SDK with Sandpack support\n *\n * Wraps universal @erikey/js client with browser-specific enhancements:\n * - Sandpack/iframe detection\n * - localStorage token storage for cross-origin iframes\n * - Automatic fallback when cookies are blocked\n */\n\nimport { createAuthClient as createUniversalClient } from '@erikey/js';\nimport type {\n AuthClientConfig,\n AuthClient as UniversalAuthClient,\n SignUpData,\n SignInData,\n AuthResponse,\n Session,\n} from '@erikey/js';\n\n// Re-export types for convenience\nexport type {\n AuthClientConfig,\n User,\n Session,\n SignUpData,\n SignInData,\n AuthResponse,\n UserResponse,\n SignOutResponse,\n PasswordResetResponse,\n // KV Store types\n KvPair,\n KvBulkSetInput,\n SetValueResponse,\n GetValueResponse,\n GetValuesResponse,\n DeleteValueResponse,\n DeleteValuesResponse,\n SetValuesResponse,\n} from '@erikey/js';\n\n// ============================================================================\n// Sandpack Support - imported from @erikey/sandpack-auth\n// ============================================================================\n\nimport {\n isSandpackEnvironment,\n storeToken,\n getStoredToken,\n clearToken,\n} from '@erikey/sandpack-auth/client';\n\nimport type {\n SetValueResponse,\n GetValueResponse,\n GetValuesResponse,\n DeleteValueResponse,\n DeleteValuesResponse,\n SetValuesResponse,\n KvBulkSetInput,\n} from '@erikey/js';\n\n// ============================================================================\n\n/**\n * Create auth client with Sandpack support\n *\n * Wraps the universal client and adds:\n * - Automatic Sandpack detection\n * - localStorage token storage for iframes\n * - Bearer token fallback when cookies blocked\n */\nexport function createAuthClient(config: AuthClientConfig): UniversalAuthClient {\n const { projectId } = config;\n const baseUrl = config.baseUrl || 'https://auth.erikey.com';\n\n // Create base universal client\n const client = createUniversalClient(config);\n\n // Check if we're in Sandpack\n const inSandpack = isSandpackEnvironment();\n\n if (!inSandpack) {\n // Normal browser - use universal client as-is\n return client;\n }\n\n /**\n * Helper for Bearer token authenticated requests in Sandpack\n */\n const fetchWithBearer = async <T>(\n endpoint: string,\n options?: RequestInit\n ): Promise<T> => {\n const token = getStoredToken(projectId);\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Project-Id': projectId,\n ...(options?.headers as Record<string, string> || {}),\n };\n\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n const response = await fetch(`${baseUrl}/api/auth${endpoint}`, {\n ...options,\n headers,\n });\n\n const data = await response.json() as any;\n\n if (!response.ok) {\n return {\n success: false,\n error: data?.error?.message || data?.message || 'Request failed',\n } as T;\n }\n\n return {\n success: true,\n data,\n } as T;\n };\n\n // Sandpack environment - wrap with localStorage support\n return {\n signUp: async (data: SignUpData): Promise<AuthResponse> => {\n const result = await client.signUp(data);\n\n // Store token if successful\n if (result.success && result.data?.session) {\n storeToken(projectId, result.data.session);\n }\n\n return result;\n },\n\n signIn: async (data: SignInData): Promise<AuthResponse> => {\n const result = await client.signIn(data);\n\n // Store token if successful\n if (result.success && result.data?.session) {\n storeToken(projectId, result.data.session);\n }\n\n return result;\n },\n\n signOut: async () => {\n const result = await client.signOut();\n\n // Clear stored token\n clearToken(projectId);\n\n return result;\n },\n\n getUser: async () => {\n // Try cookie-based first\n const result = await client.getUser();\n\n if (result.success) {\n return result;\n }\n\n // Fallback: Try with stored token\n const token = getStoredToken(projectId);\n if (token) {\n const response = await fetch(`${baseUrl}/api/auth/session`, {\n headers: {\n 'Authorization': `Bearer ${token}`,\n 'X-Project-Id': projectId,\n },\n });\n\n const data = await response.json() as any;\n\n if (response.ok) {\n return { success: true, data };\n }\n }\n\n return result;\n },\n\n forgotPassword: client.forgotPassword,\n resetPassword: client.resetPassword,\n\n // KV methods - wrapped with Bearer token support for Sandpack\n setValue: async (key: string, value: any): Promise<SetValueResponse> => {\n return fetchWithBearer<SetValueResponse>(`/key-value/${encodeURIComponent(key)}`, {\n method: 'PUT',\n body: JSON.stringify({ value }),\n });\n },\n\n getValue: async (key: string): Promise<GetValueResponse> => {\n const result = await fetchWithBearer<{ success: boolean; data?: any; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'GET' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n key: result.data.key,\n value: result.data.value,\n createdAt: result.data.createdAt,\n updatedAt: result.data.updatedAt,\n },\n };\n },\n\n getValues: async (): Promise<GetValuesResponse> => {\n const result = await fetchWithBearer<{ success: boolean; data?: any; error?: string }>(\n '/key-value',\n { method: 'GET' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n kvPairs: result.data.kvPairs,\n total: result.data.total,\n },\n };\n },\n\n deleteValue: async (key: string): Promise<DeleteValueResponse> => {\n const result = await fetchWithBearer<{ success: boolean; data?: any; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'DELETE' }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n message: result.data.message || 'KV pair deleted',\n },\n };\n },\n\n deleteValues: async (keys: string[]): Promise<DeleteValuesResponse> => {\n if (keys.length === 0) {\n return {\n success: true,\n data: {\n deleted: [],\n failed: [],\n },\n };\n }\n\n const results = await Promise.allSettled(\n keys.map((key) =>\n fetchWithBearer<{ success: boolean; error?: string }>(\n `/key-value/${encodeURIComponent(key)}`,\n { method: 'DELETE' }\n ).then((result) => ({ key, result }))\n )\n );\n\n const deleted: string[] = [];\n const failed: Array<{ key: string; error: string }> = [];\n\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') {\n const { key, result: deleteResult } = result.value;\n if (deleteResult.success) {\n deleted.push(key);\n } else {\n failed.push({\n key,\n error: deleteResult.error || 'Delete failed',\n });\n }\n } else {\n failed.push({\n key: keys[index],\n error: result.reason?.message || 'Request failed',\n });\n }\n });\n\n return {\n success: failed.length === 0,\n data: {\n deleted,\n failed,\n },\n };\n },\n\n setValues: async (kvPairs: KvBulkSetInput[]): Promise<SetValuesResponse> => {\n const result = await fetchWithBearer<{ success: boolean; data?: any; error?: string }>(\n '/key-value/bulk',\n {\n method: 'POST',\n body: JSON.stringify({ kvPairs }),\n }\n );\n\n if (!result.success) {\n return { success: false, error: result.error };\n }\n\n return {\n success: true,\n data: {\n results: result.data.results,\n total: result.data.total,\n },\n };\n },\n };\n}\n\n/**\n * Type helper for inferring the auth client type\n */\nexport type AuthClient = ReturnType<typeof createAuthClient>;\n"],"mappings":"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","names":["_a","getURL","fetch","clearTimeout","parser","getMethod","createAuthClient","createAuthClient"]}
|