mirror of
https://github.com/koala73/worldmonitor.git
synced 2026-04-25 17:14:57 +02:00
68 lines
2.0 KiB
JavaScript
68 lines
2.0 KiB
JavaScript
// OpenSky Network API proxy - v3
|
|
// Note: OpenSky seems to block some cloud provider IPs
|
|
export const config = { runtime: 'edge' };
|
|
|
|
export default async function handler(req) {
|
|
const url = new URL(req.url);
|
|
|
|
// Build OpenSky API URL with bounding box params
|
|
const params = new URLSearchParams();
|
|
['lamin', 'lomin', 'lamax', 'lomax'].forEach(key => {
|
|
const val = url.searchParams.get(key);
|
|
if (val) params.set(key, val);
|
|
});
|
|
|
|
const openskyUrl = `https://opensky-network.org/api/states/all${params.toString() ? '?' + params.toString() : ''}`;
|
|
|
|
try {
|
|
// Try fetching with different headers to avoid blocks
|
|
const response = await fetch(openskyUrl, {
|
|
headers: {
|
|
'Accept': 'application/json',
|
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
|
|
'Accept-Language': 'en-US,en;q=0.9',
|
|
'Accept-Encoding': 'gzip, deflate, br',
|
|
'Connection': 'keep-alive',
|
|
},
|
|
});
|
|
|
|
if (response.status === 429) {
|
|
return Response.json({ error: 'Rate limited', time: Date.now(), states: null }, {
|
|
status: 429,
|
|
headers: { 'Access-Control-Allow-Origin': '*' },
|
|
});
|
|
}
|
|
|
|
// Check if response is OK
|
|
if (!response.ok) {
|
|
const text = await response.text();
|
|
return Response.json({
|
|
error: `OpenSky HTTP ${response.status}: ${text.substring(0, 200)}`,
|
|
time: Date.now(),
|
|
states: null
|
|
}, {
|
|
status: response.status,
|
|
headers: { 'Access-Control-Allow-Origin': '*' },
|
|
});
|
|
}
|
|
|
|
const data = await response.json();
|
|
return Response.json(data, {
|
|
status: response.status,
|
|
headers: {
|
|
'Access-Control-Allow-Origin': '*',
|
|
'Cache-Control': 'public, max-age=30',
|
|
},
|
|
});
|
|
} catch (error) {
|
|
return Response.json({
|
|
error: `Fetch failed: ${error.name} - ${error.message}`,
|
|
time: Date.now(),
|
|
states: null
|
|
}, {
|
|
status: 500,
|
|
headers: { 'Access-Control-Allow-Origin': '*' },
|
|
});
|
|
}
|
|
}
|