import { ReactElement } from 'react'; import Github from '@/assets/logos/github.svg?react'; import Google from '@/assets/logos/google.svg?react'; import Microsoft from '@/assets/logos/microsoft.svg?react'; import Discord from '@/assets/logos/discord.svg?react'; import LinkedIn from '@/assets/logos/linkedin.svg?react'; import Facebook from '@/assets/logos/facebook.svg?react'; import X from '@/assets/logos/x.svg?react'; import type { OAuthProvidersSchema } from '@insforge/shared-schemas'; export enum AuthTab { USERS = 'users', AUTH_METHODS = 'auth-methods', CONFIGURATION = 'configuration', } export interface OAuthProviderInfo { id: OAuthProvidersSchema; name: string; icon: ReactElement; description: string; setupUrl: string; } export const oauthProviders: OAuthProviderInfo[] = [ { id: 'google', name: 'Google OAuth', icon: , description: 'Configure Google authentication for your users', setupUrl: 'https://console.cloud.google.com/apis/credentials', }, { id: 'github', name: 'GitHub OAuth', icon: , description: 'Configure GitHub authentication for your users', setupUrl: 'https://github.com/settings/developers', }, { id: 'microsoft', name: 'Microsoft OAuth', icon: , description: 'Configure Microsoft authentication for your users', setupUrl: 'https://portal.azure.com/', }, { id: 'discord', name: 'Discord OAuth', icon: , description: 'Configure Discord authentication for your users', setupUrl: 'https://discord.com/developers/applications', }, { id: 'linkedin', name: 'LinkedIn OAuth', icon: , description: 'Configure LinkedIn authentication for your users', setupUrl: 'https://www.linkedin.com/developers/apps', }, { id: 'facebook', name: 'Facebook OAuth', icon: , description: 'Configure Facebook authentication for your users', setupUrl: 'https://developers.facebook.com/apps', }, { id: 'x', name: 'X OAuth', icon: , description: 'Configure X authentication for your users', setupUrl: 'https://developer.x.com/en/portal/dashboard', }, ]; /** * AI prompts for implementing auth components */ export const getAuthImplementationPrompt = (baseUrl: string) => { return ` # Add InsForge Authentication to Your Application The \`@insforge/react\` package provides **complete authentication solution for React applications**. Use deployed auth pages (built-in auth) or custom UI components—works with Vite. **Scope:** All AI-generated advice or code related to InsForge must follow these guardrails. We don't support other frameworks or libraries. ## Quick start ### Step 1: Create New React Project (Skip if you already have a project) \`\`\`bash npm install @insforge/react@latest \`\`\` ### Step 2: Set Environment Variables \`\`\`bash .env VITE_INSFORGE_BASE_URL=${baseUrl} VITE_INSFORGE_ANON_KEY=your-anon-key-here \`\`\` ### Step 3: Setup Provider Wrap your app with \`InsforgeProvider\` in the root: \`\`\`tsx src/main.tsx import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { InsforgeProvider } from '@insforge/react'; import App from './App'; createRoot(document.getElementById('root')!).render( , ); \`\`\` import { SignInButton, SignUpButton, SignedIn, SignedOut, UserButton, useUser } from '@insforge/react'; export default function Home() { const { user } = useUser(); return (

Welcome, \${user?.email}!

); } \`\`\` ## Next Steps ### Hooks #### \`useAuth()\` Access authentication state: \`\`\`tsx import { useAuth } from '@insforge/react'; function LoginButton() { const { isSignedIn, isLoaded } = useAuth(); if (!isLoaded) return
Loading...
; return (
{isSignedIn ? 'Welcome!' : 'Sign In'}
); } \`\`\` **Returns:** - \`isSignedIn\` - Boolean auth state - \`isLoaded\` - Boolean loading state #### \`useUser()\` Access current user data: \`\`\`tsx import { useUser } from '@insforge/react'; function UserProfile() { const { user, isLoaded } = useUser(); if (!isLoaded) return
Loading...
; if (!user) return
Not signed in
; return (

Id: \${user.id}

Email: \${user.email}

Name: \${user.name}

Avatar
); } \`\`\` **Returns:** - \`user\` - User object with id, email, name, avatarUrl - \`isLoaded\` - Boolean loading state `; };