diff --git a/pages/api/nip95-upload.ts b/pages/api/nip95-upload.ts index cc83afa..f4cfe7c 100644 --- a/pages/api/nip95-upload.ts +++ b/pages/api/nip95-upload.ts @@ -73,7 +73,11 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) // Recreate FormData for each request (needed for redirects) const requestFormData = new FormData() const fileStream = fs.createReadStream(fileField.filepath) - requestFormData.append('file', fileStream, { + + // Use 'file' as field name (standard for NIP-95, but some endpoints may use different names) + // Note: nostrimg.com might expect a different field name - if issues persist, try 'image' or 'upload' + const fieldName = 'file' + requestFormData.append(fieldName, fileStream, { filename: fileField.originalFilename || fileField.newFilename || 'upload', contentType: fileField.mimetype || 'application/octet-stream', }) @@ -91,6 +95,24 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) headers['Authorization'] = `Nostr ${authToken}` } + // Log request details for debugging (only for problematic endpoints) + if (url.hostname.includes('nostrimg.com')) { + console.log('NIP-95 proxy request to nostrimg.com:', { + url: url.toString(), + method: 'POST', + fieldName, + filename: fileField.originalFilename || fileField.newFilename || 'upload', + contentType: fileField.mimetype || 'application/octet-stream', + fileSize: fileField.size, + headers: { + 'Content-Type': headers['content-type'], + 'Accept': headers['Accept'], + 'User-Agent': headers['User-Agent'], + 'Authorization': authToken ? '[present]' : '[absent]', + }, + }) + } + const requestOptions = { hostname: url.hostname, port: url.port || (isHttps ? 443 : 80), @@ -136,6 +158,22 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) body += chunk }) proxyResponse.on('end', () => { + // Log response details for debugging problematic endpoints + if (url.hostname.includes('nostrimg.com')) { + console.log('NIP-95 proxy response from nostrimg.com:', { + url: url.toString(), + statusCode, + statusMessage: proxyResponse.statusMessage, + responseHeaders: { + 'content-type': proxyResponse.headers['content-type'], + 'content-length': proxyResponse.headers['content-length'], + }, + bodyPreview: body.substring(0, 500), + bodyLength: body.length, + isHtml: body.trim().startsWith('