diff --git a/pages/api/nip95-upload.ts b/pages/api/nip95-upload.ts index d6694fa..b5f14a5 100644 --- a/pages/api/nip95-upload.ts +++ b/pages/api/nip95-upload.ts @@ -243,6 +243,29 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) }) } + // Check if response is HTML (error page) instead of JSON + const trimmedBody = response.body.trim() + const isHtml = trimmedBody.startsWith(']*>([^<]+)<\/title>/i) + const h1Match = response.body.match(/]*>([^<]+)<\/h1>/i) + const errorText = titleMatch?.[1] || h1Match?.[1] || 'HTML error page returned' + + console.error('NIP-95 proxy HTML response error:', { + targetEndpoint, + finalUrl: currentUrl.toString(), + status: response.statusCode, + errorText, + bodyPreview: response.body.substring(0, 200), + }) + + return res.status(500).json({ + error: `Endpoint returned an HTML error page instead of JSON. The endpoint may be unavailable or the URL may be incorrect. Error: ${errorText}`, + }) + } + let result: unknown try { result = JSON.parse(response.body) @@ -254,7 +277,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) bodyPreview: response.body.substring(0, 100), }) return res.status(500).json({ - error: `Invalid upload response: ${errorMessage}`, + error: `Invalid upload response: ${errorMessage}. The endpoint may not be a valid NIP-95 upload endpoint.`, }) }