@githat/nextjs 0.2.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/provider.tsx","../src/config.ts","../src/client.ts","../src/hooks.ts","../src/components/SignInForm.tsx","../src/components/SignUpForm.tsx","../src/components/SignInButton.tsx","../src/components/SignUpButton.tsx","../src/components/UserButton.tsx","../src/components/OrgSwitcher.tsx","../src/components/VerifiedBadge.tsx","../src/components/ProtectedRoute.tsx"],"sourcesContent":["// Provider\nexport { GitHatProvider } from './provider';\n\n// Hooks\nexport { useAuth, useGitHat } from './hooks';\n\n// Components\nexport { SignInForm } from './components/SignInForm';\nexport { SignUpForm } from './components/SignUpForm';\nexport { SignInButton } from './components/SignInButton';\nexport { SignUpButton } from './components/SignUpButton';\nexport { UserButton } from './components/UserButton';\nexport { OrgSwitcher } from './components/OrgSwitcher';\nexport { VerifiedBadge } from './components/VerifiedBadge';\nexport { ProtectedRoute } from './components/ProtectedRoute';\n\n// Types\nexport type {\n GitHatUser,\n GitHatOrg,\n GitHatConfig,\n AuthState,\n AuthActions,\n SignUpData,\n SignUpResult,\n GitHatContextValue,\n} from './types';\n","'use client';\n\nimport React, { createContext, useState, useEffect, useCallback, useMemo, useRef } from 'react';\nimport type { GitHatConfig, GitHatContextValue, GitHatUser, GitHatOrg, SignUpData, SignUpResult } from './types';\nimport { TOKEN_KEYS, resolveConfig } from './config';\nimport { createClient } from './client';\n\nexport const GitHatContext = createContext<GitHatContextValue | null>(null);\n\ninterface GitHatProviderProps {\n config: GitHatConfig;\n children: React.ReactNode;\n}\n\nexport function GitHatProvider({ config: rawConfig, children }: GitHatProviderProps) {\n const config = useMemo(() => resolveConfig(rawConfig), [rawConfig]);\n const clientRef = useRef(createClient(config.apiUrl, config.publishableKey));\n\n const [user, setUser] = useState<GitHatUser | null>(null);\n const [org, setOrg] = useState<GitHatOrg | null>(null);\n const [isSignedIn, setIsSignedIn] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [authError, setAuthError] = useState<string | null>(null);\n\n // Validate stored token on mount\n useEffect(() => {\n const token = localStorage.getItem(TOKEN_KEYS.accessToken);\n const storedUser = localStorage.getItem(TOKEN_KEYS.user);\n\n if (token && storedUser) {\n clientRef.current.fetchApi<{ user: GitHatUser; currentOrg: GitHatOrg }>('/auth/me')\n .then((data) => {\n const u = data.user || JSON.parse(storedUser);\n setUser(u);\n const storedOrg = localStorage.getItem(TOKEN_KEYS.org);\n setOrg(data.currentOrg || (storedOrg ? JSON.parse(storedOrg) : null));\n setIsSignedIn(true);\n setAuthError(null);\n })\n .catch((err) => {\n if (err.message === 'Session expired') {\n clientRef.current.clearAuth();\n } else {\n // Network error — keep stored auth, surface error\n try { setUser(JSON.parse(storedUser)); } catch {}\n setAuthError(err.message || 'Failed to verify session');\n }\n })\n .finally(() => setIsLoading(false));\n } else {\n setIsLoading(false);\n }\n }, []);\n\n // Listen for auth-changed events\n useEffect(() => {\n const handleAuthChanged = (e: Event) => {\n const detail = (e as CustomEvent).detail;\n if (detail?.signedIn === false) {\n setIsSignedIn(false);\n setUser(null);\n setOrg(null);\n } else if (detail?.signedIn === true && detail?.user) {\n setUser(detail.user);\n setIsSignedIn(true);\n if (detail.org) setOrg(detail.org);\n }\n };\n window.addEventListener('githat:auth-changed', handleAuthChanged);\n return () => window.removeEventListener('githat:auth-changed', handleAuthChanged);\n }, []);\n\n const signIn = useCallback(async (email: string, password: string) => {\n const data = await clientRef.current.fetchApi<{\n accessToken: string;\n refreshToken: string;\n user: GitHatUser;\n org: GitHatOrg;\n }>('/auth/login', {\n method: 'POST',\n body: JSON.stringify({ email, password }),\n });\n\n localStorage.setItem(TOKEN_KEYS.accessToken, data.accessToken);\n localStorage.setItem(TOKEN_KEYS.refreshToken, data.refreshToken);\n localStorage.setItem(TOKEN_KEYS.user, JSON.stringify(data.user));\n if (data.org) localStorage.setItem(TOKEN_KEYS.org, JSON.stringify(data.org));\n\n setUser(data.user);\n setOrg(data.org || null);\n setIsSignedIn(true);\n\n window.dispatchEvent(new CustomEvent('githat:auth-changed', {\n detail: { user: data.user, org: data.org, signedIn: true },\n }));\n }, []);\n\n const signUp = useCallback(async (signUpData: SignUpData): Promise<SignUpResult> => {\n const data = await clientRef.current.fetchApi<{\n accessToken: string;\n refreshToken: string;\n user: GitHatUser;\n org: GitHatOrg;\n }>('/auth/register', {\n method: 'POST',\n body: JSON.stringify(signUpData),\n });\n\n localStorage.setItem(TOKEN_KEYS.accessToken, data.accessToken);\n localStorage.setItem(TOKEN_KEYS.refreshToken, data.refreshToken);\n localStorage.setItem(TOKEN_KEYS.user, JSON.stringify(data.user));\n if (data.org) localStorage.setItem(TOKEN_KEYS.org, JSON.stringify(data.org));\n\n setUser(data.user);\n setOrg(data.org || null);\n setIsSignedIn(true);\n\n window.dispatchEvent(new CustomEvent('githat:auth-changed', {\n detail: { user: data.user, org: data.org, signedIn: true },\n }));\n\n return { requiresVerification: !data.user.emailVerified, email: signUpData.email };\n }, []);\n\n const signOut = useCallback(async () => {\n try {\n await clientRef.current.fetchApi('/auth/logout', { method: 'POST' });\n } catch {}\n clientRef.current.clearAuth();\n setIsSignedIn(false);\n setUser(null);\n setOrg(null);\n if (typeof window !== 'undefined' && config.afterSignOutUrl) {\n window.location.href = config.afterSignOutUrl;\n }\n }, [config.afterSignOutUrl]);\n\n const switchOrg = useCallback(async (orgId: string) => {\n try {\n const data = await clientRef.current.fetchApi<{\n accessToken: string;\n refreshToken: string;\n org: GitHatOrg;\n }>(`/user/orgs/${orgId}/switch`, { method: 'POST' });\n\n if (data.accessToken) localStorage.setItem(TOKEN_KEYS.accessToken, data.accessToken);\n if (data.refreshToken) localStorage.setItem(TOKEN_KEYS.refreshToken, data.refreshToken);\n const orgData = data.org;\n localStorage.setItem(TOKEN_KEYS.org, JSON.stringify(orgData));\n setOrg(orgData);\n\n window.dispatchEvent(new CustomEvent('githat:auth-changed', {\n detail: { user, org: orgData, signedIn: true },\n }));\n } catch (e) {\n console.error('Org switch failed:', e);\n }\n }, [user]);\n\n const value = useMemo<GitHatContextValue>(() => ({\n user, org, isSignedIn, isLoading, authError, config,\n signIn, signUp, signOut, switchOrg,\n }), [user, org, isSignedIn, isLoading, authError, config, signIn, signUp, signOut, switchOrg]);\n\n return (\n <GitHatContext.Provider value={value}>\n {children}\n </GitHatContext.Provider>\n );\n}\n","import type { GitHatConfig } from './types';\n\nexport const DEFAULT_API_URL = 'https://api.githat.io';\n\nexport const TOKEN_KEYS = {\n accessToken: 'githat_access_token',\n refreshToken: 'githat_refresh_token',\n user: 'githat_user',\n org: 'githat_org',\n} as const;\n\nexport function resolveConfig(config: GitHatConfig): Required<GitHatConfig> {\n return {\n publishableKey: config.publishableKey,\n apiUrl: config.apiUrl || DEFAULT_API_URL,\n signInUrl: config.signInUrl || '/sign-in',\n signUpUrl: config.signUpUrl || '/sign-up',\n afterSignInUrl: config.afterSignInUrl || '/dashboard',\n afterSignOutUrl: config.afterSignOutUrl || '/',\n };\n}\n","import { TOKEN_KEYS } from './config';\n\nlet _refreshPromise: Promise<boolean> | null = null;\n\nasync function refreshTokens(apiUrl: string, appKey: string): Promise<boolean> {\n const refreshToken = typeof window !== 'undefined' ? localStorage.getItem(TOKEN_KEYS.refreshToken) : null;\n if (!refreshToken) return false;\n\n let orgId: string | null = null;\n try {\n const orgStr = localStorage.getItem(TOKEN_KEYS.org);\n if (orgStr) orgId = JSON.parse(orgStr).id;\n } catch {}\n\n try {\n const res = await fetch(`${apiUrl}/auth/refresh`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-GitHat-App-Key': appKey,\n },\n body: JSON.stringify({ refreshToken, orgId }),\n });\n if (!res.ok) return false;\n\n const data = await res.json();\n if (data.accessToken) localStorage.setItem(TOKEN_KEYS.accessToken, data.accessToken);\n if (data.refreshToken) localStorage.setItem(TOKEN_KEYS.refreshToken, data.refreshToken);\n if (data.org) localStorage.setItem(TOKEN_KEYS.org, JSON.stringify(data.org));\n return true;\n } catch {\n return false;\n }\n}\n\nfunction clearAuth() {\n if (typeof window === 'undefined') return;\n Object.values(TOKEN_KEYS).forEach(key => localStorage.removeItem(key));\n window.dispatchEvent(new CustomEvent('githat:auth-changed', {\n detail: { user: null, org: null, signedIn: false },\n }));\n}\n\nexport function createClient(apiUrl: string, appKey: string) {\n async function fetchApi<T = any>(endpoint: string, options: RequestInit = {}): Promise<T> {\n const url = `${apiUrl}${endpoint}`;\n const token = typeof window !== 'undefined' ? localStorage.getItem(TOKEN_KEYS.accessToken) : null;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-GitHat-App-Key': appKey,\n ...(token && { Authorization: `Bearer ${token}` }),\n ...(options.headers as Record<string, string>),\n };\n\n const response = await fetch(url, { ...options, headers });\n\n if (response.status === 401) {\n // Queue all 401 retries behind a single refresh promise\n if (!_refreshPromise) {\n _refreshPromise = refreshTokens(apiUrl, appKey).finally(() => {\n _refreshPromise = null;\n });\n }\n\n const refreshed = await _refreshPromise;\n\n if (refreshed) {\n const newToken = localStorage.getItem(TOKEN_KEYS.accessToken);\n const retryResponse = await fetch(url, {\n ...options,\n headers: {\n ...headers,\n ...(newToken && { Authorization: `Bearer ${newToken}` }),\n },\n });\n const retryData = await retryResponse.json();\n if (!retryResponse.ok) throw new Error(retryData.error || 'Request failed');\n return retryData as T;\n }\n\n clearAuth();\n throw new Error('Session expired');\n }\n\n const data = await response.json();\n if (!response.ok) throw new Error(data.error || 'Request failed');\n return data as T;\n }\n\n return { fetchApi, clearAuth };\n}\n","'use client';\n\nimport { useContext, useMemo } from 'react';\nimport { GitHatContext } from './provider';\nimport { createClient } from './client';\nimport type { GitHatContextValue, GitHatOrg } from './types';\n\nexport function useAuth(): GitHatContextValue {\n const ctx = useContext(GitHatContext);\n if (!ctx) throw new Error('useAuth must be used within a <GitHatProvider>');\n return ctx;\n}\n\nexport function useGitHat() {\n const ctx = useAuth();\n const client = useMemo(\n () => createClient(ctx.config.apiUrl!, ctx.config.publishableKey),\n [ctx.config.apiUrl, ctx.config.publishableKey]\n );\n\n return {\n fetch: client.fetchApi,\n getUserOrgs: () => client.fetchApi<{ orgs: GitHatOrg[] }>('/user/orgs'),\n verifyMCP: (domain: string) => client.fetchApi<{ verified: boolean }>(`/verify/mcp/${domain}`),\n verifyAgent: (wallet: string) => client.fetchApi<{ verified: boolean }>(`/verify/agent/${wallet}`),\n };\n}\n","'use client';\n\nimport React, { useState, FormEvent } from 'react';\nimport { useAuth } from '../hooks';\n\ninterface SignInFormProps {\n onSuccess?: () => void;\n signUpUrl?: string;\n forgotPasswordUrl?: string;\n}\n\nexport function SignInForm({ onSuccess, signUpUrl, forgotPasswordUrl }: SignInFormProps) {\n const { signIn, config } = useAuth();\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n\n const emailValid = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n if (!emailValid) {\n setError('Please enter a valid email address');\n return;\n }\n setError('');\n setLoading(true);\n try {\n await signIn(email, password);\n if (onSuccess) {\n onSuccess();\n } else if (typeof window !== 'undefined') {\n const params = new URLSearchParams(window.location.search);\n window.location.href = params.get('redirect_url') || config.afterSignInUrl!;\n }\n } catch (err: any) {\n setError(err.message || 'Sign in failed');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <div className=\"githat-form-container\">\n <div className=\"githat-form-header\">\n <h2 className=\"githat-form-title\">Sign in</h2>\n <p className=\"githat-form-subtitle\">Welcome back to GitHat</p>\n </div>\n {error && <div className=\"githat-alert githat-alert-error\" role=\"alert\" aria-live=\"polite\">{error}</div>}\n <form onSubmit={handleSubmit} className=\"githat-form\" aria-label=\"Sign in form\">\n <div className=\"githat-field\">\n <label className=\"githat-label\" htmlFor=\"githat-signin-email\">Email</label>\n <input\n id=\"githat-signin-email\"\n className=\"githat-input\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n autoComplete=\"email\"\n required\n />\n </div>\n <div className=\"githat-field\">\n <label className=\"githat-label\" htmlFor=\"githat-signin-password\">Password</label>\n <input\n id=\"githat-signin-password\"\n className=\"githat-input\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"Enter your password\"\n autoComplete=\"current-password\"\n required\n />\n </div>\n {forgotPasswordUrl && (\n <a href={forgotPasswordUrl} className=\"githat-link githat-forgot-link\">Forgot password?</a>\n )}\n <button\n type=\"submit\"\n className=\"githat-button githat-button-primary\"\n disabled={loading || !email || !password || (email.length > 0 && !emailValid)}\n >\n {loading ? 'Signing in...' : 'Sign in'}\n </button>\n </form>\n {signUpUrl && (\n <p className=\"githat-form-footer\">\n Don't have an account? <a href={signUpUrl} className=\"githat-link\">Sign up</a>\n </p>\n )}\n <p className=\"githat-powered-by\">Secured by <strong>GitHat</strong></p>\n </div>\n );\n}\n","'use client';\n\nimport React, { useState, FormEvent } from 'react';\nimport { useAuth } from '../hooks';\n\ninterface SignUpFormProps {\n onSuccess?: (result: { requiresVerification: boolean; email: string }) => void;\n signInUrl?: string;\n}\n\nexport function SignUpForm({ onSuccess, signInUrl }: SignUpFormProps) {\n const { signUp, config } = useAuth();\n const [name, setName] = useState('');\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n\n const emailValid = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n const passwordValid = password.length >= 8\n && /[A-Z]/.test(password)\n && /[a-z]/.test(password)\n && /\\d/.test(password);\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n if (!emailValid) {\n setError('Please enter a valid email address');\n return;\n }\n if (!passwordValid) {\n setError('Password must be 8+ characters with uppercase, lowercase, number, and special character');\n return;\n }\n setError('');\n setLoading(true);\n try {\n const result = await signUp({ email, password, name });\n if (onSuccess) {\n onSuccess(result);\n } else if (typeof window !== 'undefined') {\n window.location.href = config.afterSignInUrl!;\n }\n } catch (err: any) {\n setError(err.message || 'Sign up failed');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <div className=\"githat-form-container\">\n <div className=\"githat-form-header\">\n <h2 className=\"githat-form-title\">Create an account</h2>\n <p className=\"githat-form-subtitle\">Get started with GitHat</p>\n </div>\n {error && <div className=\"githat-alert githat-alert-error\" role=\"alert\" aria-live=\"polite\">{error}</div>}\n <form onSubmit={handleSubmit} className=\"githat-form\" aria-label=\"Sign up form\">\n <div className=\"githat-field\">\n <label className=\"githat-label\" htmlFor=\"githat-signup-name\">Full name</label>\n <input\n id=\"githat-signup-name\"\n className=\"githat-input\"\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"Your name\"\n autoComplete=\"name\"\n required\n />\n </div>\n <div className=\"githat-field\">\n <label className=\"githat-label\" htmlFor=\"githat-signup-email\">Email</label>\n <input\n id=\"githat-signup-email\"\n className=\"githat-input\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n autoComplete=\"email\"\n required\n />\n </div>\n <div className=\"githat-field\">\n <label className=\"githat-label\" htmlFor=\"githat-signup-password\">Password</label>\n <input\n id=\"githat-signup-password\"\n className=\"githat-input\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"8+ characters\"\n autoComplete=\"new-password\"\n required\n />\n {password && !passwordValid && (\n <p className=\"githat-field-error\">\n Must be 8+ characters with uppercase, lowercase, and number\n </p>\n )}\n </div>\n <button\n type=\"submit\"\n className=\"githat-button githat-button-primary\"\n disabled={loading || !email || !password || !name || !emailValid}\n >\n {loading ? 'Creating account...' : 'Sign up'}\n </button>\n </form>\n {signInUrl && (\n <p className=\"githat-form-footer\">\n Already have an account? <a href={signInUrl} className=\"githat-link\">Sign in</a>\n </p>\n )}\n <p className=\"githat-powered-by\">Secured by <strong>GitHat</strong></p>\n </div>\n );\n}\n","'use client';\n\nimport React, { useContext } from 'react';\nimport { GitHatContext } from '../provider';\n\ninterface SignInButtonProps {\n className?: string;\n children?: React.ReactNode;\n href?: string;\n}\n\nexport function SignInButton({ className, children, href }: SignInButtonProps) {\n const ctx = useContext(GitHatContext);\n const url = href || ctx?.config.signInUrl || '/sign-in';\n return (\n <a href={url} className={className || 'githat-button githat-button-primary'} aria-label=\"Sign in\">\n {children || 'Sign in'}\n </a>\n );\n}\n","'use client';\n\nimport React, { useContext } from 'react';\nimport { GitHatContext } from '../provider';\n\ninterface SignUpButtonProps {\n className?: string;\n children?: React.ReactNode;\n href?: string;\n}\n\nexport function SignUpButton({ className, children, href }: SignUpButtonProps) {\n const ctx = useContext(GitHatContext);\n const url = href || ctx?.config.signUpUrl || '/sign-up';\n return (\n <a href={url} className={className || 'githat-button githat-button-outline'} aria-label=\"Sign up\">\n {children || 'Sign up'}\n </a>\n );\n}\n","'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useAuth } from '../hooks';\n\nexport function UserButton() {\n const { user, org, isSignedIn, signOut } = useAuth();\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n if (!isSignedIn || !user) return null;\n\n const initials = user.name\n ? user.name.split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2)\n : user.email[0].toUpperCase();\n\n return (\n <div className=\"githat-user-button\" ref={ref}>\n <button className=\"githat-avatar-trigger\" onClick={() => setOpen(!open)} aria-label=\"User menu\" aria-expanded={open} aria-haspopup=\"true\">\n {user.avatarUrl ? (\n <img src={user.avatarUrl} alt={user.name || 'User avatar'} className=\"githat-avatar-img\" />\n ) : (\n <span className=\"githat-avatar-initials\">{initials}</span>\n )}\n </button>\n {open && (\n <div className=\"githat-dropdown\" role=\"menu\">\n <div className=\"githat-dropdown-header\">\n <p className=\"githat-dropdown-name\">{user.name}</p>\n <p className=\"githat-dropdown-email\">{user.email}</p>\n {org && <p className=\"githat-dropdown-org\">{org.name}</p>}\n </div>\n <div className=\"githat-dropdown-divider\" />\n <button className=\"githat-dropdown-item\" role=\"menuitem\" onClick={() => { signOut(); setOpen(false); }}>\n Sign out\n </button>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport { useAuth, useGitHat } from '../hooks';\nimport type { GitHatOrg } from '../types';\n\nexport function OrgSwitcher() {\n const { org, isSignedIn, switchOrg } = useAuth();\n const githat = useGitHat();\n const [orgs, setOrgs] = useState<GitHatOrg[]>([]);\n const [orgsLoading, setOrgsLoading] = useState(false);\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (isSignedIn) {\n setOrgsLoading(true);\n githat.getUserOrgs()\n .then(data => setOrgs(data.orgs || []))\n .catch(() => {})\n .finally(() => setOrgsLoading(false));\n }\n }, [isSignedIn]);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n if (!isSignedIn || !org || (orgs.length < 2 && !orgsLoading)) return null;\n\n return (\n <div className=\"githat-org-switcher\" ref={ref}>\n <button className=\"githat-org-trigger\" onClick={() => setOpen(!open)} aria-label=\"Switch organization\" aria-expanded={open} aria-haspopup=\"true\">\n <span className=\"githat-org-name\">{org.name}</span>\n <span className=\"githat-chevron\">{open ? '\\u25B2' : '\\u25BC'}</span>\n </button>\n {open && (\n <div className=\"githat-dropdown\" role=\"menu\">\n {orgsLoading ? (\n <div className=\"githat-dropdown-item\" aria-busy=\"true\">Loading...</div>\n ) : orgs.map(o => (\n <button\n key={o.id}\n className={`githat-dropdown-item ${o.id === org.id ? 'githat-dropdown-item-active' : ''}`}\n role=\"menuitem\"\n aria-current={o.id === org.id ? 'true' : undefined}\n onClick={() => { switchOrg(o.id); setOpen(false); }}\n >\n {o.name}\n {o.id === org.id && <span className=\"githat-check\">{'\\u2713'}</span>}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport { useGitHat } from '../hooks';\n\ninterface VerifiedBadgeProps {\n type: 'mcp' | 'agent';\n identifier: string;\n label?: string;\n}\n\nconst CACHE_TTL = 5 * 60 * 1000; // 5 minutes\nconst cache = new Map<string, { verified: boolean; ts: number }>();\n\nexport function VerifiedBadge({ type, identifier, label }: VerifiedBadgeProps) {\n const githat = useGitHat();\n const [verified, setVerified] = useState<boolean | null>(null);\n const mounted = useRef(true);\n\n useEffect(() => {\n mounted.current = true;\n const key = `${type}:${identifier}`;\n const cached = cache.get(key);\n if (cached && Date.now() - cached.ts < CACHE_TTL) {\n setVerified(cached.verified);\n return;\n }\n\n const verify = type === 'mcp' ? githat.verifyMCP : githat.verifyAgent;\n verify(identifier)\n .then(data => {\n if (mounted.current) {\n setVerified(data.verified);\n cache.set(key, { verified: data.verified, ts: Date.now() });\n }\n })\n .catch(() => { if (mounted.current) setVerified(false); });\n\n return () => { mounted.current = false; };\n }, [type, identifier]);\n\n if (verified === null) return null;\n\n return (\n <span className={`githat-badge ${verified ? 'githat-badge-verified' : 'githat-badge-unverified'}`}>\n {verified ? '\\u2713' : '\\u2717'} {label || (verified ? 'Verified' : 'Unverified')}\n </span>\n );\n}\n","'use client';\n\nimport React from 'react';\nimport { useAuth } from '../hooks';\n\ninterface ProtectedRouteProps {\n children: React.ReactNode;\n fallback?: React.ReactNode;\n}\n\nexport function ProtectedRoute({ children, fallback }: ProtectedRouteProps) {\n const { isSignedIn, isLoading, config } = useAuth();\n\n if (isLoading) {\n return <>{fallback || <div className=\"githat-loading\">Loading...</div>}</>;\n }\n\n if (!isSignedIn) {\n if (typeof window !== 'undefined') {\n window.location.href = config.signInUrl!;\n }\n return null;\n }\n\n return <>{children}</>;\n}\n"],"mappings":"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","names":["import_react","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime"]}