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.`,
})
}