// Next.js API route support: https://nextjs.org/docs/api-routes/introduction import type { NextApiRequest, NextApiResponse } from "next"; import { withIronSessionApiRoute } from "iron-session/next"; import { sessionOptions } from "@/lib/session"; import axios from "axios"; import formidable from "formidable-serverless"; import fs from "fs"; import FormData from 'form-data'; export default withIronSessionApiRoute(handler, sessionOptions); async function handler(req: NextApiRequest, res: NextApiResponse) { if (!req.session.user) { return res.status(401).json({ ok: false }); } const form = new formidable.IncomingForm(); try { const files = await new Promise((resolve, reject) => { form.parse(req, (err: any, _: any, files: any) => { if (err) reject(err); else resolve(files); }); }); const audioFile = (files as any).audio; if (!audioFile) { return res.status(400).json({ ok: false, error: 'Audio file not found in request' }); } const formData = new FormData(); const buffer = fs.readFileSync(audioFile.path); formData.append('audio', buffer, audioFile.name); try { const response = await axios.post( `${process.env.BACKEND_URL}/listening/transcribe`, formData, { headers: { ...formData.getHeaders(), Authorization: `Bearer ${process.env.BACKEND_JWT}`, }, } ); return res.status(200).json(response.data); } finally { if (fs.existsSync(audioFile.path)) { fs.rmSync(audioFile.path); } } } catch (error) { console.error('Error:', error); return res.status(500).json({ ok: false }); } } export const config = { api: { bodyParser: false, }, };