Integraciones

SDK de Node.js

El paquete oficial @infinianalytics/node-sdk envuelve la API de eventos de InfiniAnalytics en llamadas a métodos sencillas que nunca rompen el flujo de control de tu automatización.

Instalación

Instálalo desde npm:

bash
npm install @infinianalytics/node-sdk

Requiere Node.js 18+ (usa el fetch nativo). No necesita dependencias externas.

Inicialización

Crea una instancia de InfiniAnalyticsClient una vez por proceso, pasando tu token de organización, y luego llama a startExecution con el UUID de la automatización que copiaste del dashboard de InfiniAnalytics:

ts
import { InfiniAnalyticsClient } from "@infinianalytics/node-sdk";

const client = new InfiniAnalyticsClient({
  token: "your_organization_token",
});

const execution = await client.startExecution({
  automationId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  description: "Starting the process",
});

Si no pasas un executionId, se genera uno automáticamente a partir de new Date().toISOString(). Pasa el tuyo propio si necesitas correlacionar la ejecución con un ID de tu propio sistema.

Nunca escribas tu token de organización directamente en el código fuente. Usa una variable de entorno: token: process.env.INFINI_TOKEN.

Métodos

Llama a estos métodos sobre el execution devuelto por startExecution:

MétodoCuándo usarlo
client.startExecution({ automationId, description? })Registra el evento START y devuelve un execution - llámalo una vez al principio de la ejecución.
execution.event({ description? })Registra un EVENT intermedio - llámalo tantas veces como necesites para registrar el progreso.
execution.warning({ description? })Registra un WARNING - un problema no crítico que merece la pena señalar sin hacer fallar la ejecución.
execution.end({ description? })Registra el evento END - llámalo una vez al completarse con éxito.
execution.error({ description?, errorId?, errorDescription? })Registra un ERROR - marca la ejecución como fallida. Llámalo desde dentro de un bloque catch.

Ejemplo de Uso

ts
import { InfiniAnalyticsClient } from "@infinianalytics/node-sdk";

const client = new InfiniAnalyticsClient({
  token: process.env.INFINI_TOKEN,
});

const execution = await client.startExecution({
  automationId: "your-uuid",
  description: "Invoice processing started",
});

const invoices = await fetchInvoices();
await execution.event({ description: `Fetched ${invoices.length} invoices` });

for (const inv of invoices) {
  await process(inv);
}

await execution.end({ description: `Processed ${invoices.length} invoices successfully` });

Gestión de Errores

Llama a execution.error() desde dentro de un bloque catch para que todo fallo quede registrado:

ts
const execution = await client.startExecution({
  automationId,
  description: "Processing started",
});

try {
  const result = await riskyOperation();
  await execution.end({ description: "Completed successfully" });
} catch (ex) {
  await execution.error({
    description: "Validation failed",
    errorId: "VALIDATION_ERROR",
    error: ex, // errorDescription is derived automatically from the exception
  });
  throw ex;
}
La librería nunca lanza excepciones por sí misma. Si una llamada a la API de InfiniAnalytics falla (por ejemplo, un problema de red o una respuesta no-2xx), el método imprime un mensaje por consola y resuelve a null en vez de rechazar la promesa - una conexión rota con InfiniAnalytics nunca romperá tu automatización.
Un uso incorrecto del propio SDK - como instanciar el cliente sin token - sí lanza de forma síncrona desde el constructor. Eso es un error de programación, no un fallo de comunicación.

Comprobar Conectividad

ts
const reachable = await client.ping();

Resuelve a truecuando la API es alcanzable, falseen caso contrario (nunca lanza excepciones).

API de Bajo Nivel

Si necesitas control total sobre el payload, o quieres reenviar tu propio automationId/executionId en cada llamada en vez de usar el execution devuelto, usa client.register() directamente:

ts
await client.register({
  automation_id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  execution_id: "2025-03-03T15:32:17.571Z",
  event: "START",
  description: "Starting the execution",
});

Referencia en npm

La documentación completa del paquete y el changelog están disponibles en npm:

Ver en npm