import React, { useState, useEffect } from 'react'; import { toast } from 'react-toastify'; import Cookies from 'js-cookie'; import { logStore } from '~/lib/stores/logs'; interface GitHubUserResponse { login: string; id: number; [key: string]: any; // for other properties we don't explicitly need } export default function ConnectionsTab() { const [githubUsername, setGithubUsername] = useState(Cookies.get('githubUsername') || ''); const [githubToken, setGithubToken] = useState(Cookies.get('githubToken') || ''); const [isConnected, setIsConnected] = useState(false); const [isVerifying, setIsVerifying] = useState(false); useEffect(() => { // Check if credentials exist and verify them if (githubUsername && githubToken) { verifyGitHubCredentials(); } }, []); const verifyGitHubCredentials = async () => { setIsVerifying(true); try { const response = await fetch('https://api.github.com/user', { headers: { Authorization: `Bearer ${githubToken}`, }, }); if (response.ok) { const data = (await response.json()) as GitHubUserResponse; if (data.login === githubUsername) { setIsConnected(true); return true; } } setIsConnected(false); return false; } catch (error) { console.error('Error verifying GitHub credentials:', error); setIsConnected(false); return false; } finally { setIsVerifying(false); } }; const handleSaveConnection = async () => { if (!githubUsername || !githubToken) { toast.error('Please provide both GitHub username and token'); return; } setIsVerifying(true); const isValid = await verifyGitHubCredentials(); if (isValid) { Cookies.set('githubUsername', githubUsername); Cookies.set('githubToken', githubToken); logStore.logSystem('GitHub connection settings updated', { username: githubUsername, hasToken: !!githubToken, }); toast.success('GitHub credentials verified and saved successfully!'); Cookies.set('git:github.com', JSON.stringify({ username: githubToken, password: 'x-oauth-basic' })); setIsConnected(true); } else { toast.error('Invalid GitHub credentials. Please check your username and token.'); } }; const handleDisconnect = () => { Cookies.remove('githubUsername'); Cookies.remove('githubToken'); Cookies.remove('git:github.com'); setGithubUsername(''); setGithubToken(''); setIsConnected(false); logStore.logSystem('GitHub connection removed'); toast.success('GitHub connection removed successfully!'); }; return (

GitHub Connection

setGithubUsername(e.target.value)} disabled={isVerifying} className="w-full bg-white dark:bg-bolt-elements-background-depth-4 relative px-2 py-1.5 rounded-md focus:outline-none placeholder-bolt-elements-textTertiary text-bolt-elements-textPrimary dark:text-bolt-elements-textPrimary border border-bolt-elements-borderColor disabled:opacity-50" />
setGithubToken(e.target.value)} disabled={isVerifying} className="w-full bg-white dark:bg-bolt-elements-background-depth-4 relative px-2 py-1.5 rounded-md focus:outline-none placeholder-bolt-elements-textTertiary text-bolt-elements-textPrimary dark:text-bolt-elements-textPrimary border border-bolt-elements-borderColor disabled:opacity-50" />
{!isConnected ? ( ) : ( )} {isConnected && (
Connected to GitHub )}
); }