deckhearth/pages/api/proxy/lorcana.js

68 lines
2 KiB
JavaScript
Raw Normal View History

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 - using correct endpoint from docs
if (search) {
// Use the correct search parameter format for Lorcana API
url = `https://api.lorcana-api.com/cards/fetch?search=name~${encodeURIComponent(search)}`;
} else {
url = `https://api.lorcana-api.com/cards/fetch?pagesize=${limit}`;
}
headers = {
'Accept': 'application/json',
'User-Agent': 'TCG-Vault/1.0'
};
} else {
// Lorcast API - using correct endpoint from docs
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 }
);
}
}