Add detailed logging for nostrimg.com requests to diagnose 500 errors

**Motivations:**
- Diagnose why nostrimg.com returns 500 errors
- Verify if the code is causing the errors or if it's a server-side issue
- Log request and response details for troubleshooting

**Root causes:**
- Unknown: Could be code issue (wrong field name, headers, format) or server issue
- Need detailed logs to determine the cause

**Correctifs:**
- Added detailed request logging for nostrimg.com:
  - URL, method, field name, filename, content type, file size
  - All headers (Content-Type, Accept, User-Agent, Authorization)
- Added detailed response logging for nostrimg.com:
  - Status code, status message, response headers
  - Body preview (500 chars), body length, HTML detection
- Added comment about field name ('file') - some endpoints might need different names

**Evolutions:**
- None

**Pages affectées:**
- pages/api/nip95-upload.ts
This commit is contained in:
Nicolas Cantu 2026-01-05 22:56:07 +01:00
parent 2b5df250f6
commit 3740b93513

View File

@ -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('<!DOCTYPE') || body.trim().startsWith('<html') || body.trim().startsWith('<!'),
})
}
resolve({
statusCode: statusCode,
statusMessage: proxyResponse.statusMessage || 'Internal Server Error',