48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import { defineEventHandler, readBody, createError } from 'h3'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const { message, recaptchaToken } = await readBody(event)
|
|
|
|
if (!message?.trim()) {
|
|
throw createError({ statusCode: 400, message: 'Mensaje vacío' })
|
|
}
|
|
|
|
const config = useRuntimeConfig(event)
|
|
const webhookUrl = config.public.feedbackWebhook
|
|
const feedbackToken = config.feedbackToken
|
|
|
|
if (!webhookUrl) {
|
|
console.error('[feedback] Webhook URL no configurada')
|
|
throw createError({ statusCode: 500, message: 'Webhook no configurado' })
|
|
}
|
|
|
|
const headers: Record<string, string> = {
|
|
'Content-Type': 'application/json'
|
|
}
|
|
if (feedbackToken) {
|
|
headers['X-Feedback-Token'] = feedbackToken
|
|
}
|
|
|
|
try {
|
|
const res = await $fetch(webhookUrl, {
|
|
method: 'POST',
|
|
headers,
|
|
body: { message, recaptchaToken },
|
|
retry: 1,
|
|
timeout: 10000
|
|
})
|
|
return { ok: true, data: res }
|
|
} catch (e: any) {
|
|
console.error('[feedback] Error al reenviar al webhook:', {
|
|
url: webhookUrl,
|
|
status: e?.response?.status,
|
|
statusText: e?.response?.statusText,
|
|
message: e?.message
|
|
})
|
|
|
|
const statusCode = e?.response?.status || 502
|
|
const detail = e?.response?.statusText || e?.message || 'Error al reenviar el feedback'
|
|
throw createError({ statusCode, message: detail })
|
|
}
|
|
})
|