deckhearth/api/proxy/lorcana.js

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 }
);
}
}