Skip to main content

Build y servidor local

Scripts (package.json)​

ScriptComandoDescripción
npm run buildnode build.mjsGenera dist/widget-loader.js
npm run devnode build.mjs --watchRecompila ante cambios
npm run servenode serve.mjsSirve dist/ por HTTP
npm testvitest runTests de attachments.js y presence.js
npm install
npm run build
npm run serve # http://localhost:8081/widget-loader.js

build.mjs​

Usa la API de esbuild con estas opciones:

OpciónValor
entryPointssrc/widget-loader.js
outfiledist/widget-loader.js
bundle / minifytrue / true
formatiife
targetes2017
legalComments / sourcemapnone / false
define__NOTIFICATION_AUDIO__

__NOTIFICATION_AUDIO__ se reemplaza por un data URI audio/mpeg en base64 de src/assets/notification.mp3, por lo que el widget es autónomo y no hace una request extra para el sonido. Con --watch se crea un contexto y se imprime watch activo.

:::warning Origin del CRM La URL del CRM (CRM_ORIGIN) está escrita dentro de src/widget-loader.js. Cambiar de backend implica editar esa constante y recompilar. Ver Gotchas. :::

serve.mjs​

Servidor HTTP mínimo (node:http) para desarrollo local, sin dependencias del backend:

  • Puerto: process.env.PORT o 8081.
  • Sirve archivos de dist/; / equivale a /widget-loader.js.
  • Respuestas con Cache-Control: no-cache; .js con text/javascript; charset=utf-8 y cualquier otra extensión como application/octet-stream.
  • Normaliza la ruta y responde 403 si el archivo resuelto queda fuera de dist/; 404 si no existe.
  • No agrega cabeceras CORS (el script se carga con una etiqueta script, no con fetch).

En producción el archivo dist/widget-loader.js debe hospedarlo quien sirva el webchat (CDN, el propio CRM, etc.); el README indica servirlo desde el CRM, por ejemplo https://TU-CRM.com/widget-loader.js.

Tests​

Vitest cubre las funciones puras:

  • attachments.test.js: límites de tamaño, duración de audio, URL de subida y formato de duración.
  • presence.test.js: cuándo debe emitirse el aviso de salida (contact-leaving).

El loader principal (DOM y socket) no tiene tests en este repositorio.