import { error } from '@sveltejs/kit'; import type { RequestHandler } from './$types'; import { getYouTubeMetadata, streamYouTube } from '$lib/server/ytdlp'; export const GET: RequestHandler = async ({ url }) => { // Get query params const link = url.searchParams.get('link'); const format = url.searchParams.get('format'); // mp3, mp4 const source = url.searchParams.get('source'); // youtube or spotify // Validate input if (!link || !format || !source) { throw error(400, 'Missing required query parameters: link, format, or source'); } if (source !== 'youtube') { throw error(400, 'Currently, only YouTube is supported'); } try { // Fetch metadata for filename const metadata = await getYouTubeMetadata(link); const { title, uploader } = metadata; const safeTitle = `${uploader} - ${title}`; const filename = `${safeTitle}.${format}`; console.log(filename); // Stream video/audio return new Response(streamYouTube(link, format), { headers: { 'Content-Type': format === 'mp3' ? 'audio/mpeg' : 'video/mp4', 'Content-Disposition': `attachment; filename="${filename}"` } }); } catch (err) { console.error('Error fetching metadata:', err); throw error(500, 'Failed to fetch video metadata'); } };