Files
worldmonitor/api/download.js
Elie Habib d2568576a3 Add download redirect API for platform-specific installers
Edge function that redirects /api/download?platform=macos-arm64 to
the matching asset from the latest GitHub release. Falls back to
the releases page when no match is found.
2026-02-15 10:28:52 +04:00

52 lines
1.5 KiB
JavaScript

export const config = { runtime: 'edge' };
const RELEASES_URL = 'https://api.github.com/repos/koala73/worldmonitor/releases/latest';
const RELEASES_PAGE = 'https://github.com/koala73/worldmonitor/releases/latest';
const PLATFORM_PATTERNS = {
'windows-exe': (name) => name.endsWith('_x64-setup.exe'),
'windows-msi': (name) => name.endsWith('_x64_en-US.msi'),
'macos-arm64': (name) => name.endsWith('_aarch64.dmg'),
'macos-x64': (name) => name.endsWith('_x64.dmg') && !name.includes('setup'),
};
export default async function handler(req) {
const url = new URL(req.url);
const platform = url.searchParams.get('platform');
if (!platform || !PLATFORM_PATTERNS[platform]) {
return Response.redirect(RELEASES_PAGE, 302);
}
try {
const res = await fetch(RELEASES_URL, {
headers: {
'Accept': 'application/vnd.github+json',
'User-Agent': 'WorldMonitor-Download-Redirect',
},
});
if (!res.ok) {
return Response.redirect(RELEASES_PAGE, 302);
}
const release = await res.json();
const matcher = PLATFORM_PATTERNS[platform];
const asset = release.assets?.find((a) => matcher(a.name));
if (!asset) {
return Response.redirect(RELEASES_PAGE, 302);
}
return new Response(null, {
status: 302,
headers: {
'Location': asset.browser_download_url,
'Cache-Control': 'public, s-maxage=300, stale-while-revalidate=60',
},
});
} catch {
return Response.redirect(RELEASES_PAGE, 302);
}
}