@uptrademedia/site-kit 1.0.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.
- package/README.md +305 -0
- package/dist/analytics/index.js +88 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/index.mjs +70 -0
- package/dist/analytics/index.mjs.map +1 -0
- package/dist/api-N35S3EES.js +57 -0
- package/dist/api-N35S3EES.js.map +1 -0
- package/dist/api-SYBTK7Z7.mjs +4 -0
- package/dist/api-SYBTK7Z7.mjs.map +1 -0
- package/dist/blog/index.js +200 -0
- package/dist/blog/index.js.map +1 -0
- package/dist/blog/index.mjs +194 -0
- package/dist/blog/index.mjs.map +1 -0
- package/dist/chunk-3MUOUXHV.js +3721 -0
- package/dist/chunk-3MUOUXHV.js.map +1 -0
- package/dist/chunk-4HVYXYQL 2.mjs +255 -0
- package/dist/chunk-4HVYXYQL.mjs +255 -0
- package/dist/chunk-4HVYXYQL.mjs.map +1 -0
- package/dist/chunk-7H6I3ECV.mjs +120 -0
- package/dist/chunk-7H6I3ECV.mjs.map +1 -0
- package/dist/chunk-COI6GOX2.mjs +3679 -0
- package/dist/chunk-COI6GOX2.mjs.map +1 -0
- package/dist/chunk-EQCVQC35.js +35 -0
- package/dist/chunk-EQCVQC35.js 2.map +1 -0
- package/dist/chunk-EQCVQC35.js.map +1 -0
- package/dist/chunk-FEBYQGY4 2.mjs +251 -0
- package/dist/chunk-FEBYQGY4.mjs +251 -0
- package/dist/chunk-FEBYQGY4.mjs.map +1 -0
- package/dist/chunk-FKVJOT2F.mjs +796 -0
- package/dist/chunk-FKVJOT2F.mjs.map +1 -0
- package/dist/chunk-GQ6ZOU2N.mjs +134 -0
- package/dist/chunk-GQ6ZOU2N.mjs.map +1 -0
- package/dist/chunk-HCFPU7TU.js +137 -0
- package/dist/chunk-HCFPU7TU.js.map +1 -0
- package/dist/chunk-NYKRE2FL 2.mjs +31 -0
- package/dist/chunk-NYKRE2FL.mjs +31 -0
- package/dist/chunk-NYKRE2FL.mjs 2.map +1 -0
- package/dist/chunk-NYKRE2FL.mjs.map +1 -0
- package/dist/chunk-QP5NCO2E.js +133 -0
- package/dist/chunk-QP5NCO2E.js.map +1 -0
- package/dist/chunk-RV7H3I6J.js +255 -0
- package/dist/chunk-RV7H3I6J.js 2.map +1 -0
- package/dist/chunk-RV7H3I6J.js.map +1 -0
- package/dist/chunk-SBVEYCSV.js +140 -0
- package/dist/chunk-SBVEYCSV.js.map +1 -0
- package/dist/chunk-TUKGA3UK.js +257 -0
- package/dist/chunk-TUKGA3UK.js 2.map +1 -0
- package/dist/chunk-TUKGA3UK.js.map +1 -0
- package/dist/chunk-V3F5J6CV.js +801 -0
- package/dist/chunk-V3F5J6CV.js.map +1 -0
- package/dist/chunk-WPSRS352.mjs +135 -0
- package/dist/chunk-WPSRS352.mjs.map +1 -0
- package/dist/commerce/index.js +157 -0
- package/dist/commerce/index.js.map +1 -0
- package/dist/commerce/index.mjs +4 -0
- package/dist/commerce/index.mjs.map +1 -0
- package/dist/commerce/server.js +186 -0
- package/dist/commerce/server.js.map +1 -0
- package/dist/commerce/server.mjs +176 -0
- package/dist/commerce/server.mjs.map +1 -0
- package/dist/engage/index.js +50 -0
- package/dist/engage/index.js.map +1 -0
- package/dist/engage/index.mjs +44 -0
- package/dist/engage/index.mjs.map +1 -0
- package/dist/forms/index.js +1053 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/index.mjs +1035 -0
- package/dist/forms/index.mjs.map +1 -0
- package/dist/generators-7Y5ABRYV 2.mjs +161 -0
- package/dist/generators-7Y5ABRYV.mjs +161 -0
- package/dist/generators-7Y5ABRYV.mjs 2.map +1 -0
- package/dist/generators-7Y5ABRYV.mjs.map +1 -0
- package/dist/generators-GWIYCA5M.js +171 -0
- package/dist/generators-GWIYCA5M.js 2.map +1 -0
- package/dist/generators-GWIYCA5M.js.map +1 -0
- package/dist/index 2.mjs +74 -0
- package/dist/index.js +326 -0
- package/dist/index.js 2.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +222 -0
- package/dist/index.mjs.map +1 -0
- package/dist/migrator-V6KS75EA 2.mjs +265 -0
- package/dist/migrator-V6KS75EA.mjs +265 -0
- package/dist/migrator-V6KS75EA.mjs 2.map +1 -0
- package/dist/migrator-V6KS75EA.mjs.map +1 -0
- package/dist/migrator-XKM7YQCY.js +272 -0
- package/dist/migrator-XKM7YQCY.js 2.map +1 -0
- package/dist/migrator-XKM7YQCY.js.map +1 -0
- package/dist/scanner-MF7P3CDE 2.mjs +14386 -0
- package/dist/scanner-MF7P3CDE.mjs +14386 -0
- package/dist/scanner-MF7P3CDE.mjs 2.map +1 -0
- package/dist/scanner-MF7P3CDE.mjs.map +1 -0
- package/dist/scanner-NT6YG4TD 2.js +14397 -0
- package/dist/scanner-NT6YG4TD.js +14397 -0
- package/dist/scanner-NT6YG4TD.js 2.map +1 -0
- package/dist/scanner-NT6YG4TD.js.map +1 -0
- package/dist/seo/index.js +447 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/index.mjs +411 -0
- package/dist/seo/index.mjs.map +1 -0
- package/dist/seo/server.js +66 -0
- package/dist/seo/server.js.map +1 -0
- package/dist/seo/server.mjs +5 -0
- package/dist/seo/server.mjs.map +1 -0
- package/dist/setup/index.js +1050 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/index.mjs +1046 -0
- package/dist/setup/index.mjs.map +1 -0
- package/dist/sitemap/index.js +212 -0
- package/dist/sitemap/index.js.map +1 -0
- package/dist/sitemap/index.mjs +206 -0
- package/dist/sitemap/index.mjs.map +1 -0
- package/dist/web-vitals-BH55V7EJ.js +252 -0
- package/dist/web-vitals-BH55V7EJ.js 2.map +1 -0
- package/dist/web-vitals-BH55V7EJ.js.map +1 -0
- package/dist/web-vitals-RJYPWAR3 2.mjs +241 -0
- package/dist/web-vitals-RJYPWAR3.mjs +241 -0
- package/dist/web-vitals-RJYPWAR3.mjs 2.map +1 -0
- package/dist/web-vitals-RJYPWAR3.mjs.map +1 -0
- package/package.json +118 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/setup/SetupWizard.tsx","../../src/setup/api-handlers.ts"],"names":["useState","useCallback","useEffect","jsxs","jsx","handleCreateProject","handleScan","handleMigrate","handleConfigure","NextResponse"],"mappings":"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","file":"index.js","sourcesContent":["'use client'\n\n/**\n * Uptrade Setup Wizard\n * \n * Visual setup wizard that runs at /_uptrade/setup during development.\n * Guides developers through:\n * 1. Authentication with Uptrade Portal\n * 2. Organization & Project selection\n * 3. Codebase scanning for existing forms, widgets, metadata\n * 4. Migration of detected items to Site-Kit\n * 5. Configuration generation\n * 6. Self-destruction (removal of setup code)\n */\n\nimport React, { useState, useEffect, useCallback } from 'react'\n\n// ============================================\n// Types\n// ============================================\n\ntype Step = 'welcome' | 'auth' | 'project' | 'scan' | 'migrate' | 'configure' | 'complete'\n\ninterface ScanResults {\n forms: DetectedItem[]\n widgets: DetectedItem[]\n metadata: DetectedItem[]\n}\n\ninterface DetectedItem {\n type: string\n file: string\n line: number\n details: Record<string, unknown>\n selected: boolean\n}\n\ninterface Project {\n id: string\n name: string\n domain: string\n}\n\ninterface Organization {\n id: string\n name: string\n projects: Project[]\n}\n\ninterface SetupWizardProps {\n config?: {\n url?: string\n anonKey?: string\n portalApiUrl?: string\n }\n}\n\n// ============================================\n// Setup Wizard Component\n// ============================================\n\nexport function SetupWizard({ config }: SetupWizardProps = {}) {\n const [step, setStep] = useState<Step>('welcome')\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n \n // Auth state\n const [isAuthenticated, setIsAuthenticated] = useState(false)\n const [userEmail, setUserEmail] = useState<string | null>(null)\n const [accessToken, setAccessToken] = useState<string | null>(null)\n \n // Organization & Project state\n const [organizations, setOrganizations] = useState<Organization[]>([])\n const [selectedOrg, setSelectedOrg] = useState<Organization | null>(null)\n const [selectedProject, setSelectedProject] = useState<Project | null>(null)\n const [newProjectName, setNewProjectName] = useState('')\n const [newProjectDomain, setNewProjectDomain] = useState('')\n \n // Scan results\n const [scanResults, setScanResults] = useState<ScanResults | null>(null)\n \n // Migration progress\n const [migrationProgress, setMigrationProgress] = useState(0)\n const [migrationLog, setMigrationLog] = useState<string[]>([])\n\n // API URL helpers\n const portalApiUrl = config?.portalApiUrl || 'http://localhost:3002'\n \n // Helper to make Portal API calls\n const callPortalApi = useCallback(async (path: string, options: RequestInit = {}) => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(options.headers as Record<string, string> || {}),\n }\n if (accessToken) {\n headers['Authorization'] = `Bearer ${accessToken}`\n }\n return fetch(`${portalApiUrl}${path}`, {\n ...options,\n headers,\n })\n }, [portalApiUrl, accessToken])\n\n // Check if already configured\n useEffect(() => {\n checkExistingConfig()\n }, [])\n\n async function checkExistingConfig() {\n try {\n // Check local status first\n const localRes = await fetch('/_uptrade/api/status')\n const localData = await localRes.json()\n if (localData.configured) {\n setStep('complete')\n return\n }\n \n // Check if we have a token in localStorage\n const storedToken = localStorage.getItem('uptrade_access_token')\n if (storedToken) {\n setAccessToken(storedToken)\n // Validate with Portal API\n const res = await fetch(`${portalApiUrl}/setup/session`, {\n headers: { 'Authorization': `Bearer ${storedToken}` }\n })\n const data = await res.json()\n if (data.authenticated) {\n setIsAuthenticated(true)\n setUserEmail(data.email)\n setStep('project')\n }\n }\n } catch {\n // Not configured yet\n }\n }\n\n // ============================================\n // Step: Welcome\n // ============================================\n\n function WelcomeStep() {\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <div className=\"text-6xl mb-4\">๐</div>\n <h1 className=\"text-3xl font-bold mb-2\">Welcome to Uptrade Site-Kit</h1>\n <p className=\"text-gray-400 text-lg\">\n Let's set up your project in just a few steps\n </p>\n </div>\n\n <div className=\"grid grid-cols-3 gap-4 my-8\">\n <FeatureCard\n icon=\"๐\"\n title=\"Analytics\"\n description=\"Track page views, events, and user sessions\"\n />\n <FeatureCard\n icon=\"๐\"\n title=\"Forms\"\n description=\"Managed forms with validation and submissions\"\n />\n <FeatureCard\n icon=\"๐ฌ\"\n title=\"Engage\"\n description=\"Popups, nudges, and live chat widgets\"\n />\n </div>\n\n <div className=\"flex justify-center\">\n <Button onClick={() => setStep('auth')}>\n Get Started โ\n </Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // Step: Authentication\n // ============================================\n\n function AuthStep() {\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [authMode, setAuthMode] = useState<'login' | 'magic'>('login')\n\n async function handleLogin() {\n if (!email.trim() || !password.trim()) return\n setIsLoading(true)\n setError(null)\n try {\n // Sign in via Supabase Auth directly using Uptrade's Supabase\n const supabaseUrl = config?.url || 'https://mwcjtnoqxolplwpkxnfe.supabase.co'\n const supabaseKey = config?.anonKey || ''\n \n const authRes = await fetch(`${supabaseUrl}/auth/v1/token?grant_type=password`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'apikey': supabaseKey,\n },\n body: JSON.stringify({ email, password })\n })\n \n if (!authRes.ok) {\n const errData = await authRes.json()\n throw new Error(errData.error_description || errData.msg || 'Login failed')\n }\n \n const authData = await authRes.json()\n const token = authData.access_token\n \n // Store token\n localStorage.setItem('uptrade_access_token', token)\n setAccessToken(token)\n \n // Validate with Portal API and get user info\n const sessionRes = await fetch(`${portalApiUrl}/setup/session`, {\n headers: { 'Authorization': `Bearer ${token}` }\n })\n const session = await sessionRes.json()\n \n if (session.authenticated) {\n setIsAuthenticated(true)\n setUserEmail(session.email)\n await loadOrganizations(token)\n setStep('project')\n } else {\n throw new Error('Authentication failed - user not found in Portal')\n }\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setIsLoading(false)\n }\n }\n\n async function handleMagicLink() {\n if (!email.trim()) return\n setIsLoading(true)\n setError(null)\n try {\n const supabaseUrl = config?.url || 'https://mwcjtnoqxolplwpkxnfe.supabase.co'\n const supabaseKey = config?.anonKey || ''\n \n // Request magic link\n const res = await fetch(`${supabaseUrl}/auth/v1/magiclink`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'apikey': supabaseKey,\n },\n body: JSON.stringify({ \n email,\n options: {\n redirectTo: window.location.href\n }\n })\n })\n \n if (!res.ok) throw new Error('Failed to send magic link')\n \n setError(null)\n alert('Check your email for a login link!')\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setIsLoading(false)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Connect to Uptrade</h2>\n <p className=\"text-gray-400\">\n Sign in with your Uptrade Portal account\n </p>\n </div>\n\n <div className=\"flex gap-4 justify-center mb-6\">\n <button\n className={`px-4 py-2 rounded-lg ${authMode === 'login' ? 'bg-blue-600' : 'bg-gray-700'}`}\n onClick={() => setAuthMode('login')}\n >\n Email & Password\n </button>\n <button\n className={`px-4 py-2 rounded-lg ${authMode === 'magic' ? 'bg-blue-600' : 'bg-gray-700'}`}\n onClick={() => setAuthMode('magic')}\n >\n Magic Link\n </button>\n </div>\n\n <div className=\"max-w-md mx-auto space-y-4\">\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Email</label>\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:border-blue-500\"\n />\n </div>\n\n {authMode === 'login' && (\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Password</label>\n <input\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"โขโขโขโขโขโขโขโข\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:border-blue-500\"\n />\n </div>\n )}\n\n <Button \n onClick={authMode === 'login' ? handleLogin : handleMagicLink} \n loading={isLoading} \n disabled={!email.trim() || (authMode === 'login' && !password.trim())}\n >\n {authMode === 'login' ? 'Sign In โ' : 'Send Magic Link โ'}\n </Button>\n\n <p className=\"text-gray-500 text-sm text-center\">\n Don't have an account?{' '}\n <a \n href=\"https://portal.uptrademedia.com/signup\" \n target=\"_blank\"\n className=\"text-blue-400 hover:underline\"\n >\n Sign up at Portal\n </a>\n </p>\n </div>\n\n {error && (\n <div className=\"bg-red-500/10 border border-red-500/30 text-red-400 px-4 py-3 rounded-lg text-center\">\n {error}\n </div>\n )}\n </div>\n )\n }\n\n // ============================================\n // Step: Project Selection\n // ============================================\n\n async function loadOrganizations(token?: string) {\n try {\n const authToken = token || accessToken\n const res = await fetch(`${portalApiUrl}/setup/organizations`, {\n headers: authToken ? { 'Authorization': `Bearer ${authToken}` } : {}\n })\n const data = await res.json()\n setOrganizations(Array.isArray(data) ? data : [])\n } catch (err) {\n setError('Failed to load organizations')\n }\n }\n\n function ProjectStep() {\n const [createNew, setCreateNew] = useState(false)\n const [creating, setCreating] = useState(false)\n const [creatingOrg, setCreatingOrg] = useState(false)\n const [newOrgName, setNewOrgName] = useState('')\n\n async function handleCreateOrg() {\n if (!newOrgName.trim()) return\n setCreatingOrg(true)\n try {\n const res = await fetch(`${portalApiUrl}/setup/organizations`, {\n method: 'POST',\n headers: { \n 'Content-Type': 'application/json',\n ...(accessToken ? { 'Authorization': `Bearer ${accessToken}` } : {})\n },\n body: JSON.stringify({\n name: newOrgName,\n domain: window.location.hostname\n })\n })\n \n if (!res.ok) throw new Error('Failed to create organization')\n \n const org = await res.json()\n // Reload organizations\n await loadOrganizations()\n setSelectedOrg({ ...org, projects: [] })\n setNewOrgName('')\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setCreatingOrg(false)\n }\n }\n\n async function handleCreateProject() {\n if (!selectedOrg || !newProjectName.trim()) return\n setCreating(true)\n try {\n const res = await fetch(`${portalApiUrl}/setup/projects`, {\n method: 'POST',\n headers: { \n 'Content-Type': 'application/json',\n ...(accessToken ? { 'Authorization': `Bearer ${accessToken}` } : {})\n },\n body: JSON.stringify({\n orgId: selectedOrg.id,\n name: newProjectName,\n domain: newProjectDomain || window.location.hostname\n })\n })\n \n if (!res.ok) throw new Error('Failed to create project')\n \n const project = await res.json()\n setSelectedProject(project)\n setStep('scan')\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setCreating(false)\n }\n }\n\n async function handleSelectProject(project: Project) {\n setSelectedProject(project)\n setStep('scan')\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Select Your Project</h2>\n <p className=\"text-gray-400\">\n Choose an existing project or create a new one\n </p>\n </div>\n\n {/* Organization selector */}\n <div className=\"max-w-lg mx-auto\">\n <label className=\"block text-sm text-gray-400 mb-2\">Organization</label>\n <select\n value={selectedOrg?.id || ''}\n onChange={(e) => setSelectedOrg(organizations.find(o => o.id === e.target.value) || null)}\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\"\n >\n <option value=\"\">Select organization...</option>\n {organizations.map(org => (\n <option key={org.id} value={org.id}>{org.name}</option>\n ))}\n </select>\n </div>\n\n {/* Project list */}\n {selectedOrg && (\n <div className=\"max-w-lg mx-auto space-y-4\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm text-gray-400\">Projects</label>\n <button\n className=\"text-sm text-blue-400 hover:underline\"\n onClick={() => setCreateNew(!createNew)}\n >\n {createNew ? 'Select existing' : '+ Create new'}\n </button>\n </div>\n\n {createNew ? (\n <div className=\"space-y-4 p-4 bg-gray-800/50 rounded-lg border border-gray-700\">\n <input\n type=\"text\"\n value={newProjectName}\n onChange={(e) => setNewProjectName(e.target.value)}\n placeholder=\"Project name\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\"\n />\n <input\n type=\"text\"\n value={newProjectDomain}\n onChange={(e) => setNewProjectDomain(e.target.value)}\n placeholder={window.location.hostname}\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\"\n />\n <Button \n onClick={handleCreateProject} \n loading={creating}\n disabled={!newProjectName.trim()}\n >\n Create Project\n </Button>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {selectedOrg.projects.length === 0 ? (\n <p className=\"text-gray-500 text-center py-8\">\n No projects yet.{' '}\n <button \n className=\"text-blue-400 hover:underline\"\n onClick={() => setCreateNew(true)}\n >\n Create one\n </button>\n </p>\n ) : (\n selectedOrg.projects.map(project => (\n <button\n key={project.id}\n onClick={() => handleSelectProject(project)}\n className=\"w-full text-left px-4 py-3 bg-gray-800/50 hover:bg-gray-800 border border-gray-700 rounded-lg transition-colors\"\n >\n <div className=\"font-medium\">{project.name}</div>\n <div className=\"text-sm text-gray-400\">{project.domain}</div>\n </button>\n ))\n )}\n </div>\n )}\n </div>\n )}\n </div>\n )\n }\n\n // ============================================\n // Step: Scan Codebase\n // ============================================\n\n const handleScan = useCallback(async () => {\n setIsLoading(true)\n setError(null)\n try {\n const res = await fetch('/_uptrade/api/scan', { method: 'POST' })\n const data = await res.json()\n setScanResults({\n forms: data.forms.map((f: DetectedItem) => ({ ...f, selected: true })),\n widgets: data.widgets.map((w: DetectedItem) => ({ ...w, selected: true })),\n metadata: data.metadata.map((m: DetectedItem) => ({ ...m, selected: false }))\n })\n setStep('migrate')\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setIsLoading(false)\n }\n }, [])\n\n function ScanStep() {\n useEffect(() => {\n handleScan()\n }, [])\n\n return (\n <div className=\"space-y-6 text-center\">\n <div className=\"text-6xl animate-pulse\">๐</div>\n <h2 className=\"text-2xl font-bold\">Scanning Your Codebase</h2>\n <p className=\"text-gray-400\">\n Looking for forms, widgets, and metadata to migrate...\n </p>\n <div className=\"flex justify-center\">\n <div className=\"w-8 h-8 border-2 border-blue-500 border-t-transparent rounded-full animate-spin\" />\n </div>\n </div>\n )\n }\n\n // ============================================\n // Step: Migration Preview\n // ============================================\n\n function MigrateStep() {\n if (!scanResults) return null\n\n const totalItems = [\n ...scanResults.forms,\n ...scanResults.widgets,\n ...scanResults.metadata\n ]\n const selectedItems = totalItems.filter(i => i.selected)\n\n function toggleItem(type: 'forms' | 'widgets' | 'metadata', index: number) {\n setScanResults(prev => {\n if (!prev) return prev\n const updated = { ...prev }\n updated[type] = [...prev[type]]\n updated[type][index] = { ...updated[type][index], selected: !updated[type][index].selected }\n return updated\n })\n }\n\n async function handleMigrate() {\n setIsLoading(true)\n setMigrationLog([])\n setMigrationProgress(0)\n\n const items = selectedItems\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n setMigrationLog(prev => [...prev, `Migrating ${item.type} in ${item.file}...`])\n \n try {\n await fetch('/_uptrade/api/migrate', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ item, projectId: selectedProject?.id })\n })\n setMigrationLog(prev => [...prev, `โ Migrated ${item.type}`])\n } catch {\n setMigrationLog(prev => [...prev, `โ Failed to migrate ${item.type}`])\n }\n \n setMigrationProgress(Math.round(((i + 1) / items.length) * 100))\n }\n\n setIsLoading(false)\n setStep('configure')\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Review & Migrate</h2>\n <p className=\"text-gray-400\">\n Select what you'd like to migrate to Site-Kit\n </p>\n </div>\n\n {/* Forms section */}\n {scanResults.forms.length > 0 && (\n <Section title=\"๐ Forms\" count={scanResults.forms.filter(f => f.selected).length}>\n {scanResults.forms.map((form, i) => (\n <ItemRow\n key={i}\n item={form}\n onToggle={() => toggleItem('forms', i)}\n />\n ))}\n </Section>\n )}\n\n {/* Widgets section */}\n {scanResults.widgets.length > 0 && (\n <Section title=\"๐ฌ Chat Widgets\" count={scanResults.widgets.filter(w => w.selected).length}>\n {scanResults.widgets.map((widget, i) => (\n <ItemRow\n key={i}\n item={widget}\n onToggle={() => toggleItem('widgets', i)}\n />\n ))}\n </Section>\n )}\n\n {/* Metadata section */}\n {scanResults.metadata.length > 0 && (\n <Section title=\"๐ท๏ธ Metadata\" count={scanResults.metadata.filter(m => m.selected).length}>\n {scanResults.metadata.map((meta, i) => (\n <ItemRow\n key={i}\n item={meta}\n onToggle={() => toggleItem('metadata', i)}\n />\n ))}\n </Section>\n )}\n\n {/* No items found */}\n {totalItems.length === 0 && (\n <div className=\"text-center py-8 text-gray-400\">\n <div className=\"text-4xl mb-4\">โจ</div>\n <p>No existing forms or widgets detected.</p>\n <p className=\"text-sm\">You're starting fresh!</p>\n </div>\n )}\n\n {/* Migration log */}\n {migrationLog.length > 0 && (\n <div className=\"bg-gray-900 rounded-lg p-4 font-mono text-sm max-h-48 overflow-y-auto\">\n {migrationLog.map((log, i) => (\n <div key={i} className={log.startsWith('โ') ? 'text-red-400' : 'text-green-400'}>\n {log}\n </div>\n ))}\n </div>\n )}\n\n {/* Progress bar */}\n {isLoading && (\n <div className=\"h-2 bg-gray-700 rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-blue-500 transition-all duration-300\"\n style={{ width: `${migrationProgress}%` }}\n />\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => setStep('configure')}>\n Skip Migration\n </Button>\n <Button onClick={handleMigrate} loading={isLoading}>\n Migrate {selectedItems.length} Items โ\n </Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // Step: Configure\n // ============================================\n\n function ConfigureStep() {\n const [configuring, setConfiguring] = useState(false)\n\n async function handleConfigure() {\n setConfiguring(true)\n try {\n await fetch('/_uptrade/api/configure', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ projectId: selectedProject?.id })\n })\n setStep('complete')\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setConfiguring(false)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Configure Site-Kit</h2>\n <p className=\"text-gray-400\">\n We'll add the SiteKitProvider to your layout and set up environment variables\n </p>\n </div>\n\n <div className=\"max-w-lg mx-auto space-y-4\">\n <ConfigPreview\n title=\"Environment Variables\"\n description=\".env.local\"\n content={`NEXT_PUBLIC_UPTRADE_PROJECT_ID=${selectedProject?.id || 'xxx'}\nNEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co\nNEXT_PUBLIC_SUPABASE_ANON_KEY=xxx\nUPTRADE_API_KEY=ut_xxx`}\n />\n\n <ConfigPreview\n title=\"Layout Provider\"\n description=\"app/layout.tsx\"\n content={`<SiteKitProvider\n projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}\n supabaseUrl={process.env.NEXT_PUBLIC_SUPABASE_URL!}\n supabaseAnonKey={process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!}\n>\n {children}\n</SiteKitProvider>`}\n />\n </div>\n\n <div className=\"flex justify-center\">\n <Button onClick={handleConfigure} loading={configuring}>\n Apply Configuration โ\n </Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // Step: Complete\n // ============================================\n\n function CompleteStep() {\n const [removing, setRemoving] = useState(false)\n\n async function handleRemoveSetup() {\n setRemoving(true)\n try {\n await fetch('/_uptrade/api/self-destruct', { method: 'POST' })\n window.location.href = '/'\n } catch (err) {\n setError((err as Error).message)\n setRemoving(false)\n }\n }\n\n return (\n <div className=\"space-y-6 text-center\">\n <div className=\"text-6xl\">๐</div>\n <h2 className=\"text-3xl font-bold\">You're All Set!</h2>\n <p className=\"text-gray-400 text-lg\">\n Site-Kit is now configured and ready to use\n </p>\n\n <div className=\"grid grid-cols-2 gap-4 max-w-lg mx-auto my-8\">\n <QuickLink\n icon=\"๐\"\n title=\"View Dashboard\"\n href=\"https://portal.uptrademedia.com/dashboard\"\n />\n <QuickLink\n icon=\"๐\"\n title=\"Create Form\"\n href=\"https://portal.uptrademedia.com/forms/new\"\n />\n <QuickLink\n icon=\"๐\"\n title=\"Documentation\"\n href=\"https://docs.uptrademedia.com/site-kit\"\n />\n <QuickLink\n icon=\"๐ฌ\"\n title=\"Get Help\"\n href=\"https://portal.uptrademedia.com/support\"\n />\n </div>\n\n <div className=\"pt-8 border-t border-gray-700\">\n <p className=\"text-gray-400 mb-4\">\n Remove this setup wizard from your project?\n </p>\n <Button variant=\"danger\" onClick={handleRemoveSetup} loading={removing}>\n Remove Setup Wizard\n </Button>\n <p className=\"text-gray-500 text-sm mt-2\">\n This will delete the /_uptrade route\n </p>\n </div>\n </div>\n )\n }\n\n // ============================================\n // Render\n // ============================================\n\n const steps: Record<Step, React.ComponentType> = {\n welcome: WelcomeStep,\n auth: AuthStep,\n project: ProjectStep,\n scan: ScanStep,\n migrate: MigrateStep,\n configure: ConfigureStep,\n complete: CompleteStep,\n }\n\n const CurrentStep = steps[step]\n\n return (\n <div className=\"min-h-screen bg-gradient-to-br from-gray-900 via-gray-900 to-gray-800 text-white\">\n {/* Progress bar */}\n <div className=\"fixed top-0 left-0 right-0 h-1 bg-gray-800\">\n <div\n className=\"h-full bg-gradient-to-r from-blue-500 to-purple-500 transition-all duration-500\"\n style={{ width: `${(Object.keys(steps).indexOf(step) / (Object.keys(steps).length - 1)) * 100}%` }}\n />\n </div>\n\n {/* Header */}\n <header className=\"px-8 py-6 flex justify-between items-center\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-600 rounded-lg\" />\n <span className=\"font-semibold\">Uptrade Site-Kit</span>\n </div>\n {userEmail && (\n <div className=\"text-gray-400 text-sm\">\n {userEmail}\n </div>\n )}\n </header>\n\n {/* Main content */}\n <main className=\"max-w-3xl mx-auto px-8 py-16\">\n <CurrentStep />\n </main>\n\n {/* Footer */}\n <footer className=\"fixed bottom-0 left-0 right-0 px-8 py-4 text-center text-gray-500 text-sm\">\n <a href=\"https://uptrademedia.com\" target=\"_blank\" className=\"hover:text-gray-300\">\n Uptrade Media\n </a>\n {' ยท '}\n <a href=\"https://docs.uptrademedia.com\" target=\"_blank\" className=\"hover:text-gray-300\">\n Docs\n </a>\n {' ยท '}\n <a href=\"https://github.com/uptrademedia/site-kit\" target=\"_blank\" className=\"hover:text-gray-300\">\n GitHub\n </a>\n </footer>\n </div>\n )\n}\n\n// ============================================\n// UI Components\n// ============================================\n\nfunction Button({\n children,\n onClick,\n loading,\n disabled,\n variant = 'primary'\n}: {\n children: React.ReactNode\n onClick?: () => void\n loading?: boolean\n disabled?: boolean\n variant?: 'primary' | 'secondary' | 'danger'\n}) {\n const variants = {\n primary: 'bg-gradient-to-r from-blue-500 to-blue-600 hover:from-blue-600 hover:to-blue-700',\n secondary: 'bg-gray-700 hover:bg-gray-600',\n danger: 'bg-red-600/20 border border-red-500/30 text-red-400 hover:bg-red-600/30'\n }\n\n return (\n <button\n onClick={onClick}\n disabled={loading || disabled}\n className={`px-6 py-3 rounded-lg font-medium transition-all disabled:opacity-50 disabled:cursor-not-allowed ${variants[variant]}`}\n >\n {loading ? (\n <span className=\"flex items-center gap-2\">\n <span className=\"w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin\" />\n Loading...\n </span>\n ) : children}\n </button>\n )\n}\n\nfunction FeatureCard({ icon, title, description }: { icon: string; title: string; description: string }) {\n return (\n <div className=\"p-6 bg-gray-800/50 rounded-xl border border-gray-700 text-center\">\n <div className=\"text-3xl mb-3\">{icon}</div>\n <h3 className=\"font-semibold mb-1\">{title}</h3>\n <p className=\"text-sm text-gray-400\">{description}</p>\n </div>\n )\n}\n\nfunction Section({ title, count, children }: { title: string; count: number; children: React.ReactNode }) {\n return (\n <div className=\"bg-gray-800/30 rounded-xl border border-gray-700 overflow-hidden\">\n <div className=\"px-4 py-3 bg-gray-800/50 flex justify-between items-center\">\n <span className=\"font-medium\">{title}</span>\n <span className=\"text-sm text-gray-400\">{count} selected</span>\n </div>\n <div className=\"divide-y divide-gray-700\">\n {children}\n </div>\n </div>\n )\n}\n\nfunction ItemRow({ item, onToggle }: { item: DetectedItem; onToggle: () => void }) {\n return (\n <div className=\"flex items-center gap-4 px-4 py-3 hover:bg-gray-800/30 transition-colors\">\n <input\n type=\"checkbox\"\n checked={item.selected}\n onChange={onToggle}\n className=\"w-5 h-5 rounded border-gray-600 bg-gray-700 text-blue-500 focus:ring-blue-500\"\n />\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">{item.type}</div>\n <div className=\"text-sm text-gray-400 truncate\">{item.file}:{item.line}</div>\n </div>\n </div>\n )\n}\n\nfunction ConfigPreview({ title, description, content }: { title: string; description: string; content: string }) {\n return (\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 overflow-hidden\">\n <div className=\"px-4 py-2 bg-gray-800 flex justify-between items-center\">\n <span className=\"font-medium\">{title}</span>\n <span className=\"text-sm text-gray-400\">{description}</span>\n </div>\n <pre className=\"p-4 text-sm overflow-x-auto\">\n <code className=\"text-green-400\">{content}</code>\n </pre>\n </div>\n )\n}\n\nfunction QuickLink({ icon, title, href }: { icon: string; title: string; href: string }) {\n return (\n <a\n href={href}\n target=\"_blank\"\n className=\"flex items-center gap-3 p-4 bg-gray-800/50 rounded-lg border border-gray-700 hover:bg-gray-800 transition-colors\"\n >\n <span className=\"text-2xl\">{icon}</span>\n <span className=\"font-medium\">{title}</span>\n </a>\n )\n}\n\nexport default SetupWizard\n","/**\n * Setup Wizard API Handlers\n * \n * These are Next.js API route handlers that the SetupWizard component calls.\n * They run on the server and have access to fs for code generation.\n * \n * Usage: Copy these to your app/_uptrade/api/ folder\n */\n\nimport { NextRequest, NextResponse } from 'next/server'\n\n// ============================================\n// Configuration\n// ============================================\n\nconst PORTAL_URL = process.env.UPTRADE_PORTAL_URL || 'https://portal.uptrademedia.com'\nconst API_URL = process.env.UPTRADE_API_URL || 'https://api.uptrademedia.com'\n\n// In-memory session store (for dev server only)\nlet authSession: {\n accessToken?: string\n userId?: string\n email?: string\n pendingCode?: string\n} = {}\n\n// ============================================\n// Status Handler\n// ============================================\n\nexport async function handleStatus(): Promise<NextResponse> {\n const configured = !!(\n process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID &&\n process.env.NEXT_PUBLIC_SUPABASE_URL\n )\n\n return NextResponse.json({\n configured,\n authenticated: !!authSession.accessToken,\n email: authSession.email\n })\n}\n\n// ============================================\n// Auth Handlers\n// ============================================\n\nexport async function handleAuthStart(): Promise<NextResponse> {\n const state = Math.random().toString(36).substring(7)\n const redirectUri = 'http://localhost:3000/_uptrade/api/auth/callback'\n \n const authUrl = `${PORTAL_URL}/auth/cli?` + new URLSearchParams({\n redirect_uri: redirectUri,\n state\n })\n\n return NextResponse.json({ authUrl, state })\n}\n\nexport async function handleAuthCallback(req: NextRequest): Promise<NextResponse> {\n const { searchParams } = new URL(req.url)\n const code = searchParams.get('code')\n const error = searchParams.get('error')\n\n if (error) {\n return new NextResponse(errorHtml('Authentication Failed', error), {\n headers: { 'Content-Type': 'text/html' }\n })\n }\n\n if (!code) {\n return new NextResponse(errorHtml('Missing Code', 'No authorization code received'), {\n headers: { 'Content-Type': 'text/html' }\n })\n }\n\n try {\n // Exchange code for token\n const tokenResponse = await fetch(`${API_URL}/auth/cli-token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n code,\n redirect_uri: 'http://localhost:3000/_uptrade/api/auth/callback'\n })\n })\n\n if (!tokenResponse.ok) {\n throw new Error('Failed to exchange code for token')\n }\n\n const { access_token, user_id, email } = await tokenResponse.json()\n \n authSession = {\n accessToken: access_token,\n userId: user_id,\n email\n }\n\n return new NextResponse(successHtml(), {\n headers: { 'Content-Type': 'text/html' }\n })\n } catch (err) {\n return new NextResponse(errorHtml('Token Exchange Failed', (err as Error).message), {\n headers: { 'Content-Type': 'text/html' }\n })\n }\n}\n\nexport async function handleAuthStatus(): Promise<NextResponse> {\n return NextResponse.json({\n authenticated: !!authSession.accessToken,\n email: authSession.email\n })\n}\n\nexport async function handleApiKeyAuth(req: NextRequest): Promise<NextResponse> {\n const { apiKey } = await req.json()\n\n try {\n const response = await fetch(`${API_URL}/auth/verify-api-key`, {\n headers: { 'Authorization': `Bearer ${apiKey}` }\n })\n\n if (!response.ok) {\n return NextResponse.json({ error: 'Invalid API key' }, { status: 401 })\n }\n\n const { user_id, email } = await response.json()\n \n authSession = {\n accessToken: apiKey,\n userId: user_id,\n email\n }\n\n return NextResponse.json({ email })\n } catch {\n return NextResponse.json({ error: 'Authentication failed' }, { status: 500 })\n }\n}\n\n// ============================================\n// Organization & Project Handlers\n// ============================================\n\nexport async function handleGetOrganizations(): Promise<NextResponse> {\n if (!authSession.accessToken) {\n return NextResponse.json({ error: 'Not authenticated' }, { status: 401 })\n }\n\n try {\n const response = await fetch(`${API_URL}/organizations`, {\n headers: { 'Authorization': `Bearer ${authSession.accessToken}` }\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch organizations')\n }\n\n const organizations = await response.json()\n return NextResponse.json({ organizations })\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\nexport async function handleCreateProject(req: NextRequest): Promise<NextResponse> {\n if (!authSession.accessToken) {\n return NextResponse.json({ error: 'Not authenticated' }, { status: 401 })\n }\n\n const { orgId, name, domain } = await req.json()\n\n try {\n const response = await fetch(`${API_URL}/organizations/${orgId}/projects`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${authSession.accessToken}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ name, domain })\n })\n\n if (!response.ok) {\n throw new Error('Failed to create project')\n }\n\n const project = await response.json()\n return NextResponse.json(project)\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\n// ============================================\n// Scan Handler\n// ============================================\n\nexport async function handleScan(): Promise<NextResponse> {\n const { scanCodebase } = await import('../cli/scanner')\n \n try {\n const results = await scanCodebase(process.cwd())\n \n return NextResponse.json({\n forms: results.forms.map(f => ({\n type: f.type,\n file: f.file,\n line: f.line,\n details: {\n fields: f.fields\n }\n })),\n widgets: results.widgets.map(w => ({\n type: w.type,\n file: w.file,\n line: w.line,\n details: {}\n })),\n metadata: results.metadata.map(m => ({\n type: m.type,\n file: m.file,\n line: m.line,\n details: {}\n }))\n })\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\n// ============================================\n// Migrate Handler\n// ============================================\n\nexport async function handleMigrate(req: NextRequest): Promise<NextResponse> {\n if (!authSession.accessToken) {\n return NextResponse.json({ error: 'Not authenticated' }, { status: 401 })\n }\n\n const { item, projectId } = await req.json()\n const { migrateFiles } = await import('../cli/migrator')\n\n try {\n await migrateFiles([item], projectId, authSession.accessToken)\n return NextResponse.json({ success: true })\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\n// ============================================\n// Configure Handler\n// ============================================\n\nexport async function handleConfigure(req: NextRequest): Promise<NextResponse> {\n if (!authSession.accessToken) {\n return NextResponse.json({ error: 'Not authenticated' }, { status: 401 })\n }\n\n const { projectId } = await req.json()\n const { generateEnvFile, generateProvider } = await import('../cli/generators')\n\n try {\n // Get Supabase config from API\n const configResponse = await fetch(`${API_URL}/projects/${projectId}/config`, {\n headers: { 'Authorization': `Bearer ${authSession.accessToken}` }\n })\n\n if (!configResponse.ok) {\n throw new Error('Failed to fetch project config')\n }\n\n const config = await configResponse.json()\n\n // Generate API key\n const keyResponse = await fetch(`${API_URL}/projects/${projectId}/api-keys`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${authSession.accessToken}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ name: 'Site-Kit Setup' })\n })\n\n const { api_key } = keyResponse.ok ? await keyResponse.json() : { api_key: 'ut_xxx' }\n\n // Generate env file\n await generateEnvFile({\n projectId,\n supabaseUrl: config.supabase_url,\n supabaseAnonKey: config.supabase_anon_key,\n apiKey: api_key\n })\n\n // Generate provider in layout\n await generateProvider({ projectId })\n\n return NextResponse.json({ success: true })\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\n// ============================================\n// Self-Destruct Handler\n// ============================================\n\nexport async function handleSelfDestruct(): Promise<NextResponse> {\n const { selfDestruct } = await import('../cli/generators')\n\n try {\n await selfDestruct()\n return NextResponse.json({ success: true })\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\n// ============================================\n// HTML Templates\n// ============================================\n\nfunction successHtml(): string {\n return `<!DOCTYPE html>\n<html>\n<head>\n <title>Uptrade - Authenticated</title>\n <style>\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n display: flex; justify-content: center; align-items: center;\n height: 100vh; margin: 0;\n background: linear-gradient(135deg, #1a1a2e 0%, #0f0f1a 100%);\n color: white;\n }\n .container {\n text-align: center; padding: 3rem;\n background: rgba(255, 255, 255, 0.05);\n border-radius: 1rem; border: 1px solid rgba(255, 255, 255, 0.1);\n }\n .icon { font-size: 4rem; margin-bottom: 1rem; }\n h1 { margin: 0 0 0.5rem; }\n p { color: rgba(255, 255, 255, 0.7); margin: 0; }\n </style>\n <script>setTimeout(() => window.close(), 2000)</script>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"icon\">โ</div>\n <h1>Authenticated!</h1>\n <p>This window will close automatically...</p>\n </div>\n</body>\n</html>`\n}\n\nfunction errorHtml(title: string, message: string): string {\n return `<!DOCTYPE html>\n<html>\n<head>\n <title>Uptrade - Error</title>\n <style>\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n display: flex; justify-content: center; align-items: center;\n height: 100vh; margin: 0;\n background: linear-gradient(135deg, #2e1a1a 0%, #1a0f0f 100%);\n color: white;\n }\n .container {\n text-align: center; padding: 3rem;\n background: rgba(255, 255, 255, 0.05);\n border-radius: 1rem; border: 1px solid rgba(255, 100, 100, 0.2);\n }\n .icon { font-size: 4rem; margin-bottom: 1rem; }\n h1 { margin: 0 0 0.5rem; color: #ff6b6b; }\n p { color: rgba(255, 255, 255, 0.7); margin: 0; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"icon\">โ</div>\n <h1>${title}</h1>\n <p>${message}</p>\n </div>\n</body>\n</html>`\n}\n\n// ============================================\n// Unified Route Handler\n// ============================================\n\nexport async function handleRequest(\n req: NextRequest,\n route: string\n): Promise<NextResponse> {\n switch (route) {\n case 'status':\n return handleStatus()\n case 'auth/start':\n return handleAuthStart()\n case 'auth/callback':\n return handleAuthCallback(req)\n case 'auth/status':\n return handleAuthStatus()\n case 'auth/apikey':\n return handleApiKeyAuth(req)\n case 'organizations':\n return handleGetOrganizations()\n case 'projects':\n return handleCreateProject(req)\n case 'scan':\n return handleScan()\n case 'migrate':\n return handleMigrate(req)\n case 'configure':\n return handleConfigure(req)\n case 'self-destruct':\n return handleSelfDestruct()\n default:\n return NextResponse.json({ error: 'Not found' }, { status: 404 })\n }\n}\n"]}
|