@sealant/workspace-build-queue
@sealant/workspace-build-queue
Purpose
@sealant/workspace-build-queue is the RabbitMQ transport package for workspace image build jobs.
It provides queue topology, typed message contracts, and convenience publish/consume helpers.
Why this package exists
- Keep queue names and message schema stable across API and worker services.
- Encapsulate broker connection/channel lifecycle in one reusable package.
- Ensure build-job orchestration remains durable and typed.
Module map
src/env.ts- RabbitMQ env schema and parsing
src/messages.ts- job-request message kind and schema
src/topology.ts- queue/exchange/dead-letter topology
src/singleton.ts- broker connection singleton management
src/publisher.ts- enqueue helper for new build jobs
src/consumer.ts- queue consumer helper and ack/retry wiring
src/index.ts- public API surface exports
Public surface
- environment parsing:
rabbitMqEnvSchemaparseRabbitMqEnv
- message contract:
workspaceBuildJobRequestedMessageKindworkspaceBuildJobRequestedMessageSchemaparseWorkspaceBuildJobRequestedMessage
- queue operations:
publishWorkspaceBuildJobRequestedconsumeWorkspaceBuildJobsassertWorkspaceBuildQueueTopology
- connection management:
getRabbitMqSingletoncloseRabbitMqSingleton
Exports are defined in packages/workspace-build-queue/src/index.ts.
Queue topology
- primary queue:
workspace-build-jobs - dead-letter exchange:
workspace-build-jobs.dlx - dead-letter queue:
workspace-build-jobs.dead-letter
The topology is asserted before publish/consume flows use the queue.
Message shape
Current requested-build message:
kind:workspace-build-job.requestedjobId: non-empty string
Runtime behavior
- publisher emits validated job-request messages
- consumer reads messages with configured prefetch
- singleton keeps one connection/channel pair per process
- dead-letter handling preserves failed work for inspection
Environment
RABBITMQ_URL(default:amqp://sealant:sealant@127.0.0.1:5673)WORKSPACE_BUILD_QUEUE_PREFETCH(default:1)
Cross-package dependency
- Used by
@sealant/apito enqueue workspace build jobs. - Used by
@sealant/workerto consume and acknowledge workspace build jobs.
Local development
Start RabbitMQ:
docker compose up -d rabbitmqManagement UI default: http://127.0.0.1:15673
Internal dependencies
- Internal package dependencies: none
- External runtime dependencies:
amqplib,zod
Scripts
pnpm --filter @sealant/workspace-build-queue lintpnpm --filter @sealant/workspace-build-queue typecheck