Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

@amqp-contract/contract

Contract builder for amqp-contract - Define type-safe AMQP messaging contracts.

CI npm version npm downloads TypeScript License: MIT

📖 Full documentation →

Installation

pnpm add @amqp-contract/contract

Quick Start

Recommended: Event / Command Patterns

For robust contract definitions with guaranteed consistency, use Event or Command patterns:

Pattern Use Case Flow
Event One publisher, many consumers (broadcast) defineEventPublisherdefineEventConsumer
Command Many publishers, one consumer (task queue) defineCommandConsumerdefineCommandPublisher
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

Documentation

📖 Read the full documentation →

License

MIT