@leparadoxhd/hermes-client
v1.0.3
Published
Hermes queue client — send tasks to Hermes workers via BullMQ
Readme
@leparadoxhd/hermes-client
Cliente para enviar tareas a Hermes Server vía BullMQ. No expone preparación manual de carpetas ni job.json: solo add (websocket) / send / notify / process y opción wait.
Instalación
npm install @leparadoxhd/hermes-client bullmq ioredisPeer dependencies: bullmq@^5, ioredis@^5.
Uso
import { HermesClient } from "@leparadoxhd/hermes-client";
const hermes = new HermesClient({
connection: { host: "localhost", port: 6379 },
storage: "/shared", // volumen compartido con el servidor Hermes
project: "proyecto-a",
});
// WebSocket
await hermes.websocket.add(
{ event: "notification", payload: { msg: "hola" } }, // sin user/group → todo el namespace
{ wait: false },
);
// Push (Home Assistant)
await hermes.push.notify(
{ title: "Aviso", message: "Listo" },
{ wait: false },
);
// Email
const emailResult = await hermes.email.send(
{ to: "[email protected]", subject: "Hola", html: "<p>...</p>" },
{ wait: true },
);
if (emailResult.waited && emailResult.success) {
console.log(emailResult.data.messageId);
}
// Imagen (input en disco del productor; storage interno usa UUID)
const imageResult = await hermes.image.process(
{
input: { folder: "/tmp/uploads", file: "photo.jpg" },
operations: {
resize: { width: 800, fit: "inside" },
format: "webp",
quality: 80,
shrink: { quality: 75 },
stripMetadata: true,
},
output: "/var/www/static/avatar.webp", // opcional: copia tras completar
},
{ wait: true, waitTimeout: 120_000 },
);
await hermes.close();Imágenes: reglas de salida
| Escenario | Worker escribe | Cliente copia al destino |
|-----------|----------------|-------------------------|
| Sin output en payload | storage/<project>/<jobId>/output/<uuid>.<ext> | No — usar result.data.storagePath |
| Con output en payload | Igual | Sí — result.data.copiedTo |
Reintentos y backoff los define Hermes (HERMES_QUEUE_JOB_OPTIONS internos); no se pasan overrides en add().
NestJS
Usa @leparadoxhd/nestjs-hermes para inyección de dependencias.
Publicación
Versión alineada con el contrato del servidor. Desde el monorepo:
bun run build:packages
cd packages/hermes-client && npm publish --access public