Files
skills/docs/foundation/flow/queue-distribution-http/README.md
2026-05-29 08:20:56 +01:00

7.5 KiB

@suaveplan/queue-distribution-http - HTTP transport plugin for @suaveplan/queue-distribution: HttpWorkerCommunicator (fetch-backed, Zod-validated wire envelope) and RemoteWorker (AbstractWorker subclass with @suaveplan/retry-backed connect / reconnect / health loop).

Summary

HTTP transport plugin for @suaveplan/queue-distribution. Ships HttpWorkerCommunicator (a fetch-backed WorkerCommunicator with a Zod-validated wire envelope, injectable fetch, structured timeouts, and AbortSignal threading) and RemoteWorker (an AbstractWorker subclass driving the communicator with bounded exponential-backoff connect retries via @suaveplan/retry).

The plugin lives separately from the core distribution package so browser-only and worker-thread-only consumers don't have to carry HTTP transport code they never use.

Documentation tree

- [base](./src/communicator/base/base.md) — _(no submodules)_- [http](./src/communicator/http/http-communicator.md) — _(no submodules)_- [http-communicator](./src/communicator/http/http-communicator.md) — _(no submodules)_- [errors](./src/errors/queue-distribution-http-error.md) — _(no submodules)_- [queue-distribution-http-error](./src/errors/queue-distribution-http-error.md) — _(no submodules)_- [observability](./src/observability/instruments.md) — _(no submodules)_- [instruments](./src/observability/instruments.md) — _(no submodules)_- [remote](./src/worker/remote/remote.md) — _(no submodules)_- [remote](./src/worker/remote/remote.md) — _(no submodules)_- [base](./src/communicator/base/base.md) — _(no submodules)_- [http](./src/communicator/http/http-communicator.md) — _(no submodules)_- [http-communicator](./src/communicator/http/http-communicator.md) — _(no submodules)_- [errors](./src/errors/queue-distribution-http-error.md) — _(no submodules)_- [queue-distribution-http-error](./src/errors/queue-distribution-http-error.md) — _(no submodules)_- [observability](./src/observability/instruments.md) — _(no submodules)_- [instruments](./src/observability/instruments.md) — _(no submodules)_- [remote](./src/worker/remote/remote.md) — _(no submodules)_- [remote](./src/worker/remote/remote.md) — _(no submodules)_- [base](./src/communicator/base/base.md) — _(no submodules)_- [http](./src/communicator/http/http-communicator.md) — _(no submodules)_- [http-communicator](./src/communicator/http/http-communicator.md) — _(no submodules)_- [errors](./src/errors/queue-distribution-http-error.md) — _(no submodules)_- [queue-distribution-http-error](./src/errors/queue-distribution-http-error.md) — _(no submodules)_- [observability](./src/observability/instruments.md) — _(no submodules)_- [instruments](./src/observability/instruments.md) — _(no submodules)_- [remote](./src/worker/remote/remote.md) — _(no submodules)_- [remote](./src/worker/remote/remote.md) — _(no submodules)_- [base](./src/communicator/base/base.md) — _(no submodules)_- [http](./src/communicator/http/http-communicator.md) — _(no submodules)_ - [http-communicator](./src/communicator/http/http-communicator.md) — _(no submodules)_- [errors](./src/errors/queue-distribution-http-error.md) — _(no submodules)_ - [queue-distribution-http-error](./src/errors/queue-distribution-http-error.md) — _(no submodules)_- [observability](./src/observability/instruments.md) — _(no submodules)_ - [instruments](./src/observability/instruments.md) — _(no submodules)_- [remote](./src/worker/remote/remote.md) — _(no submodules)_ - [remote](./src/worker/remote/remote.md) — _(no submodules)_

Install

bun add @suaveplan/queue-distribution-http

Quick start

import { WorkerPool, WorkerManager } from "@suaveplan/queue-distribution";
import {
    HttpWorkerCommunicator,
    RemoteWorker,
} from "@suaveplan/queue-distribution-http";

const communicator = new HttpWorkerCommunicator({
    defaultTimeoutMs: 5_000,
    headers: { Authorization: `Bearer ${token}` },
});

const pool = new WorkerPool();
pool.addWorker(new RemoteWorker("https://worker-a.example", communicator, { id: "a" }));
pool.addWorker(new RemoteWorker("https://worker-b.example", communicator, { id: "b" }));
await pool.startAllWorkers();

const manager = new WorkerManager(pool, {
    autoHealthCheck: false,
    maxTaskRetries: 3,
});

const result = await manager.assignTask(task, input);

Modules

Design highlights

  • 100% test coverage (statements + branches + functions + lines).
  • Injectable fetch and Clock — deterministic under test, swappable for auth-wrapped fetch in production.
  • Connect retries routed through @suaveplan/retry's sleep; bounded loop, no recursion.
  • Zod-validated wire envelope rejects malformed payloads at the boundary.
  • Structured QueueDistributionHttpError subclasses with a frozen stable-code registry.

Status

Part of the rebuild — version 0.1.0 while it stabilises.