67 lines
No EOL
1.8 KiB
JavaScript
67 lines
No EOL
1.8 KiB
JavaScript
import { NextResponse } from 'next/server';
|
|
|
|
// Proxy for Lorcana APIs to handle CORS
|
|
export async function GET(request) {
|
|
try {
|
|
const { searchParams } = new URL(request.url);
|
|
const query = searchParams.get('q');
|
|
const search = searchParams.get('search');
|
|
const limit = searchParams.get('limit') || '20';
|
|
const api = searchParams.get('api') || 'lorcana'; // 'lorcana' or 'lorcast'
|
|
|
|
let url;
|
|
let headers = {};
|
|
|
|
if (api === 'lorcana') {
|
|
// Lorcana API
|
|
if (search) {
|
|
url = `https://lorcana-api.com/api/v1/cards?search=${encodeURIComponent(search)}`;
|
|
} else {
|
|
url = `https://lorcana-api.com/api/v1/cards?limit=${limit}`;
|
|
}
|
|
headers = {
|
|
'Accept': 'application/json',
|
|
'User-Agent': 'TCG-Vault/1.0'
|
|
};
|
|
} else {
|
|
// Lorcast API
|
|
if (query) {
|
|
url = `https://api.lorcast.com/v0/cards?q=${encodeURIComponent(query)}`;
|
|
} else {
|
|
url = `https://api.lorcast.com/v0/cards`;
|
|
}
|
|
headers = {
|
|
'Accept': 'application/json',
|
|
'User-Agent': 'TCG-Vault/1.0'
|
|
};
|
|
}
|
|
|
|
console.log(`🔗 Proxying request to: ${url}`);
|
|
|
|
const response = await fetch(url, { headers });
|
|
|
|
if (!response.ok) {
|
|
console.error(`❌ Proxy error: ${response.status} ${response.statusText}`);
|
|
return NextResponse.json(
|
|
{ error: `External API error: ${response.status}` },
|
|
{ status: response.status }
|
|
);
|
|
}
|
|
|
|
const data = await response.json();
|
|
console.log(`✅ Proxy success: ${url}`);
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
data: data,
|
|
source: api
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Proxy error:', error);
|
|
return NextResponse.json(
|
|
{ error: 'Failed to fetch from external API' },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|