{"version":3,"sources":["../src/react/theme.ts","../src/react/components/AuthProvider.tsx"],"sourcesContent":["import { extendTheme, type ThemeConfig } from '@chakra-ui/react';\n\nconst config: ThemeConfig = {\n  initialColorMode: 'dark',\n  useSystemColorMode: false,\n};\n\nconst colors = {\n  brand: {\n    50: '#f0f9ff',\n    100: '#e0f2fe',\n    200: '#bae6fd',\n    300: '#7dd3fc',\n    400: '#38bdf8',\n    500: '#0ea5e9',\n    600: '#0284c7',\n    700: '#0369a1',\n    800: '#075985',\n    900: '#0c4a6e',\n  },\n  accent: {\n    50: '#f0fdfa',\n    100: '#ccfbf1',\n    200: '#99f6e4',\n    300: '#5eead4',\n    400: '#2dd4bf',\n    500: '#14b8a6',\n    600: '#0d9488',\n    700: '#0f766e',\n    800: '#115e59',\n    900: '#134e4a',\n  },\n  dark: {\n    100: '#1a202c',\n    200: '#171923',\n    300: '#0e1118',\n    400: '#0a0c11',\n    500: '#050609',\n    gradient: 'linear-gradient(180deg, #1a202c 0%, #0a0c11 100%)',\n  },\n};\n\nconst components = {\n  Button: {\n    baseStyle: {\n      fontWeight: 'medium',\n      borderRadius: 'md',\n    },\n    variants: {\n      solid: {\n        bg: 'brand.500',\n        color: 'white',\n        _hover: {\n          bg: 'brand.600',\n          _disabled: {\n            bg: 'brand.500',\n          },\n        },\n      },\n      outline: {\n        borderColor: 'whiteAlpha.300',\n        color: 'white',\n        _hover: {\n          bg: 'whiteAlpha.100',\n        },\n      },\n      ghost: {\n        color: 'white',\n        _hover: {\n          bg: 'whiteAlpha.100',\n        },\n      },\n      link: {\n        color: 'brand.500',\n        _hover: {\n          textDecoration: 'none',\n          color: 'brand.600',\n        },\n      },\n      gradient: {\n        bgGradient: 'linear(to-r, brand.500, accent.500)',\n        color: 'white',\n        _hover: {\n          bgGradient: 'linear(to-r, brand.600, accent.600)',\n        },\n      },\n    },\n  },\n  Modal: {\n    baseStyle: {\n      dialog: {\n        bg: 'dark.200',\n        boxShadow: 'xl',\n        borderRadius: 'xl',\n        border: '1px solid',\n        borderColor: 'whiteAlpha.200',\n      },\n      header: {\n        borderBottom: '1px solid',\n        borderColor: 'whiteAlpha.100',\n        pb: 4,\n      },\n      body: {\n        py: 6,\n      },\n      footer: {\n        borderTop: '1px solid',\n        borderColor: 'whiteAlpha.100',\n        pt: 4,\n      },\n    },\n  },\n  Card: {\n    baseStyle: {\n      container: {\n        bg: 'dark.200',\n        boxShadow: 'xl',\n        borderRadius: 'xl',\n        border: '1px solid',\n        borderColor: 'whiteAlpha.200',\n        overflow: 'hidden',\n      },\n      header: {\n        py: 4,\n        px: 6,\n      },\n      body: {\n        py: 4,\n        px: 6,\n      },\n      footer: {\n        py: 4,\n        px: 6,\n      },\n    },\n  },\n  Input: {\n    baseStyle: {\n      field: {\n        bg: 'whiteAlpha.50',\n        borderColor: 'whiteAlpha.200',\n        _hover: {\n          borderColor: 'whiteAlpha.300',\n        },\n        _focus: {\n          borderColor: 'brand.500',\n          boxShadow: '0 0 0 1px var(--chakra-colors-brand-500)',\n        },\n      },\n    },\n  },\n  Radio: {\n    baseStyle: {\n      control: {\n        borderColor: 'whiteAlpha.300',\n        _checked: {\n          bg: 'brand.500',\n          borderColor: 'brand.500',\n        },\n      },\n    },\n  },\n  Tabs: {\n    variants: {\n      enclosed: {\n        tab: {\n          color: 'whiteAlpha.700',\n          _selected: {\n            color: 'white',\n            bg: 'whiteAlpha.100',\n          },\n        },\n      },\n      'soft-rounded': {\n        tab: {\n          color: 'whiteAlpha.700',\n          _selected: {\n            color: 'white',\n            bg: 'brand.500',\n          },\n        },\n      },\n    },\n  },\n};\n\nconst styles = {\n  global: {\n    'html, body': {\n      color: 'white',\n      bg: '#0a0c11',\n    },\n  },\n};\n\nconst capAuthTheme = extendTheme({\n  config,\n  colors,\n  components,\n  styles,\n});\n\nexport default capAuthTheme;","import React, { createContext, useContext, useState, useEffect } from 'react';\nimport {\n    ChakraProvider,\n    Modal,\n    ModalOverlay,\n    ModalContent,\n    ModalBody,\n    ModalCloseButton,\n    useDisclosure\n} from '@chakra-ui/react';\nimport { CapAuth } from './CapAuth';\nimport type { User, CapAuthConfig, AuthProviderProps } from '../../types';\nimport capAuthTheme from '../theme';\n\ninterface AuthContextType {\n    user: User | null;\n    isAuthenticated: boolean;\n    showAuthModal: () => void;\n    hideAuthModal: () => void;\n    logout: () => void;\n}\n\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\nexport function AuthProvider({\n    children,\n    config = {},\n    onAuthSuccess,\n    onAuthError,\n}: AuthProviderProps) {\n    const { isOpen, onOpen, onClose } = useDisclosure();\n    const [user, setUser] = useState<User | null>(null);\n\n    const defaultConfig: CapAuthConfig = {\n        appName: \"Secure Authentication\",\n        appDescription: \"Login securely with your wallet\",\n        theme: {\n            primary: \"blue\",\n            secondary: \"teal\"\n        },\n        refreshPageOnAuth: false,\n        timeouts: {\n            authentication: 300000,\n            polling: 3000\n        },\n        enableMobileWallet: true,\n        mobileWalletScheme: \"zerowallet://\",\n        ...config\n    };\n\n    useEffect(() => {\n        const checkAuth = async () => {\n            const walletAddress = localStorage.getItem('wallet_address');\n            if (walletAddress) {\n                try {\n                    const response = await fetch('/api/users/active', {\n                        method: 'POST',\n                        headers: { 'Content-Type': 'application/json' },\n                        body: JSON.stringify({ wallet_address: walletAddress })\n                    });\n\n                    if (response.ok) {\n                        const data = await response.json();\n                        setUser(data.user);\n                    } else {\n                        localStorage.removeItem('wallet_address');\n                    }\n                } catch (error) {\n                    console.error('Auth check failed:', error);\n                }\n            }\n        };\n\n        checkAuth();\n    }, []);\n\n    const handleAuthenticated = async (authenticatedUser: User) => {\n        setUser(authenticatedUser);\n        localStorage.setItem('wallet_address', authenticatedUser.wallet_address);\n        onClose();\n\n        if (onAuthSuccess) {\n            onAuthSuccess(authenticatedUser);\n        }\n\n        if (defaultConfig.refreshPageOnAuth) {\n            window.location.reload();\n        } else if (defaultConfig.redirectPath) {\n            window.location.href = defaultConfig.redirectPath;\n        }\n    };\n\n    const handleError = (error: Error) => {\n        console.error('Authentication error:', error);\n        if (onAuthError) {\n            onAuthError(error);\n        }\n    };\n\n    const showAuthModal = () => onOpen();\n    const hideAuthModal = () => onClose();\n\n    const logout = () => {\n        localStorage.removeItem('wallet_address');\n        setUser(null);\n    };\n\n    const contextValue: AuthContextType = {\n        user,\n        isAuthenticated: !!user,\n        showAuthModal,\n        hideAuthModal,\n        logout,\n    };\n\n    return (\n        <AuthContext.Provider value={contextValue}>\n            <ChakraProvider theme={capAuthTheme}>\n                {children}\n\n                <Modal\n                    isOpen={isOpen}\n                    onClose={onClose}\n                    isCentered\n                    size=\"md\"\n                    closeOnOverlayClick={false}\n                >\n                    <ModalOverlay backdropFilter=\"blur(10px)\" bg=\"blackAlpha.700\" />\n                    <ModalContent\n                        bg=\"transparent\"\n                        boxShadow=\"none\"\n                        width=\"auto\"\n                        maxWidth=\"100%\"\n                        margin=\"0\"\n                    >\n                        <ModalCloseButton\n                            color=\"white\"\n                            zIndex=\"popover\"\n                            position=\"absolute\"\n                            right=\"4px\"\n                            top=\"4px\"\n                        />\n                        <ModalBody p={0} display=\"flex\" justifyContent=\"center\">\n                            <CapAuth\n                                onAuthenticated={handleAuthenticated}\n                                config={defaultConfig}\n                                onError={handleError}\n                            />\n                        </ModalBody>\n                    </ModalContent>\n                </Modal>\n            </ChakraProvider>\n        </AuthContext.Provider>\n    );\n}\n\nexport function useAuth() {\n    const context = useContext(AuthContext);\n    if (context === undefined) {\n        throw new Error('useAuth must be used within an AuthProvider');\n    }\n    return context;\n}\n\nexport function withAuth<P extends object>(\n    WrappedComponent: React.ComponentType<P>\n) {\n    return function WithAuthComponent(props: P) {\n        const { isAuthenticated, showAuthModal } = useAuth();\n\n        useEffect(() => {\n            if (!isAuthenticated) {\n                showAuthModal();\n            }\n        }, [isAuthenticated]);\n\n        return <WrappedComponent {...props} />;\n    };\n}"],"mappings":"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","names":["config"]}