diff --git a/lib/nip95.ts b/lib/nip95.ts index 3129a6b..fe81dd8 100644 --- a/lib/nip95.ts +++ b/lib/nip95.ts @@ -77,11 +77,7 @@ async function tryUploadEndpoint(endpoint: string, formData: FormData, useProxy: const response = await fetch(targetUrl, { method: 'POST', body: formData, - ...(useProxy && { - headers: { - 'Content-Type': 'multipart/form-data', - }, - }), + // Don't set Content-Type manually - browser will set it with boundary automatically }) if (!response.ok) { diff --git a/pages/api/nip95-upload.ts b/pages/api/nip95-upload.ts index eac6d35..6211d25 100644 --- a/pages/api/nip95-upload.ts +++ b/pages/api/nip95-upload.ts @@ -24,15 +24,21 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) try { // Parse multipart form data + // formidable needs the raw Node.js IncomingMessage, which NextApiRequest extends const form = new IncomingForm({ maxFileSize: MAX_FILE_SIZE, keepExtensions: true, }) const parseResult = await new Promise((resolve, reject) => { - form.parse(req, (err, fields, files) => { - if (err) reject(err) - else resolve({ fields: fields as Record, files: files as Record }) + // Cast req to any to work with formidable - NextApiRequest extends IncomingMessage + form.parse(req as any, (err, fields, files) => { + if (err) { + console.error('Formidable parse error:', err) + reject(err) + } else { + resolve({ fields: fields as Record, files: files as Record }) + } }) })