Contract builder for amqp-contract - Define type-safe AMQP messaging contracts.
pnpm add @amqp-contract/contractFor robust contract definitions with guaranteed consistency, use Event or Command patterns:
| Pattern | Use Case | Flow |
|---|---|---|
| Event | One publisher, many consumers (broadcast) | defineEventPublisher → defineEventConsumer |
| Command | Many publishers, one consumer (task queue) | defineCommandConsumer → defineCommandPublisher |
import {
defineEventPublisher,
defineEventConsumer,
defineCommandConsumer,
defineCommandPublisher,
defineContract,
defineExchange,
defineQueue,
defineMessage,
} from "@amqp-contract/contract";
import { z } from "zod";
// Event pattern: publisher broadcasts, consumers subscribe
const ordersExchange = defineExchange("orders", "topic", { durable: true });
const orderMessage = defineMessage(
z.object({
orderId: z.string(),
amount: z.number(),
}),
);
// Define event publisher
const orderCreatedEvent = defineEventPublisher(ordersExchange, orderMessage, {
routingKey: "order.created",
});
// Multiple queues can consume the same event
const orderQueue = defineQueue("order-processing", { durable: true });
const analyticsQueue = defineQueue("analytics", { durable: true });
// Compose contract - exchanges, queues, bindings auto-extracted
const contract = defineContract({
publishers: {
// EventPublisherConfig → auto-extracted to publisher
orderCreated: orderCreatedEvent,
},
consumers: {
// EventConsumerResult → auto-extracted to consumer + binding
processOrder: defineEventConsumer(orderCreatedEvent, orderQueue),
// For topic exchanges, consumers can override with their own pattern
trackOrders: defineEventConsumer(orderCreatedEvent, analyticsQueue, {
routingKey: "order.*", // Subscribe to all order events
}),
},
});Benefits:
- ✅ Guaranteed message schema consistency between publishers and consumers
- ✅ Routing key validation and type safety
- ✅ Full type safety with TypeScript inference
- ✅ Event-oriented and command-oriented patterns
- ✅ Flexible routing key patterns for topic exchanges
📖 Read the full documentation →
MIT