Claude
Import upstream OSIRIS base (simplifaisoul/osiris, MIT)
35df05f unverified
Raw
History Blame Contribute Delete
1.64 kB
import { NextResponse } from 'next/server';
export async function GET(req: Request) {
const { searchParams } = new URL(req.url);
const username = searchParams.get('user');
if (!username) return NextResponse.json({ error: 'Missing username parameter' }, { status: 400 });
try {
const [userRes, reposRes] = await Promise.all([
fetch(`https://api.github.com/users/${encodeURIComponent(username)}`, { headers: { 'User-Agent': 'OSIRIS-Recon' } }),
fetch(`https://api.github.com/users/${encodeURIComponent(username)}/repos?sort=updated&per_page=5`, { headers: { 'User-Agent': 'OSIRIS-Recon' } })
]);
if (userRes.status === 404) return NextResponse.json({ error: 'User not found' }, { status: 404 });
if (!userRes.ok) throw new Error(`GitHub API HTTP ${userRes.status}`);
const userData = await userRes.json();
const reposData = reposRes.ok ? await reposRes.json() : [];
return NextResponse.json({
username: userData.login,
name: userData.name,
company: userData.company,
blog: userData.blog,
location: userData.location,
email: userData.email,
bio: userData.bio,
twitter: userData.twitter_username,
public_repos: userData.public_repos,
followers: userData.followers,
created_at: userData.created_at,
avatar_url: userData.avatar_url,
recent_repos: Array.isArray(reposData) ? reposData.map((r: any) => ({ name: r.name, language: r.language, updated: r.updated_at })) : []
});
} catch (error: any) {
return NextResponse.json({ error: 'GitHub lookup failed', detail: error.message }, { status: 502 });
}
}