feat: WhatsApp Nucleo con Nuxt 4 + Baileys v7
Some checks failed
Build and Deploy / build-and-deploy (push) Failing after 6m46s

Reemplazo completo de Evolution API por implementación directa con Baileys.

Características:
- Dashboard completo con Nuxt UI v4
- Soporte para múltiples instancias de WhatsApp
- Conexión via QR code o pairing code
- Persistencia de mensajes en PostgreSQL
- API REST para integraciones externas
- Webhooks con firma HMAC
- SSE para actualizaciones en tiempo real
- Autenticación con Authentik
This commit is contained in:
2025-12-02 17:54:31 -06:00
parent 327118440b
commit faedec47d7
62 changed files with 4489 additions and 92 deletions

View File

@@ -0,0 +1,72 @@
/**
* PUT /api/webhooks/:id
* Update a webhook
*/
import { query } from '../../../utils/database'
interface UpdateWebhookBody {
name?: string
url?: string
secret?: string
events?: string[]
instanceId?: string | null
isActive?: boolean
}
export default defineEventHandler(async (event) => {
const username = getHeader(event, 'x-authentik-username')
if (!username) {
throw createError({ statusCode: 401, message: 'Unauthorized' })
}
const id = getRouterParam(event, 'id')
const body = await readBody<UpdateWebhookBody>(event)
// Check if webhook exists
const existing = await query('SELECT id FROM webhooks WHERE id = $1', [id])
if (existing.rows.length === 0) {
throw createError({ statusCode: 404, message: 'Webhook not found' })
}
// Build update query dynamically
const updates: string[] = []
const values: any[] = []
let paramIndex = 1
if (body.name !== undefined) {
updates.push(`name = $${paramIndex++}`)
values.push(body.name)
}
if (body.url !== undefined) {
updates.push(`url = $${paramIndex++}`)
values.push(body.url)
}
if (body.secret !== undefined) {
updates.push(`secret = $${paramIndex++}`)
values.push(body.secret || null)
}
if (body.events !== undefined) {
updates.push(`events = $${paramIndex++}`)
values.push(body.events)
}
if (body.instanceId !== undefined) {
updates.push(`instance_id = $${paramIndex++}`)
values.push(body.instanceId || null)
}
if (body.isActive !== undefined) {
updates.push(`is_active = $${paramIndex++}`)
values.push(body.isActive)
}
if (updates.length === 0) {
throw createError({ statusCode: 400, message: 'No fields to update' })
}
values.push(id)
await query(
`UPDATE webhooks SET ${updates.join(', ')}, updated_at = NOW() WHERE id = $${paramIndex}`,
values
)
return { success: true }
})