# @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)_ - [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)_- [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 ```bash bun add @suaveplan/queue-distribution-http ``` ## Quick start ```ts 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 - [Errors](./src/errors/queue-distribution-http-error.md) — `QueueDistributionHttpError` + 6 stable `HTTP.*` codes. - [WorkerCommunicator base](./src/communicator/base/base.md) — interface + `AbstractWorkerCommunicator`. - [HttpWorkerCommunicator](./src/communicator/http/http-communicator.md) — fetch-backed transport. - [RemoteWorker](./src/worker/remote/remote.md) — connect / reconnect / health loop. - [Observability](./src/observability/instruments.md) — OTel counters, histograms, tracers. ## 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.