UNPKG

@message-queue-toolkit/sqs

Version:
108 lines (107 loc) 3.58 kB
import type { MessageTypeResolverConfig } from '@message-queue-toolkit/core'; /** * Pre-built message type resolver configurations for AWS SQS. * * These resolvers handle common AWS patterns where message types are stored * in specific fields of the message body. */ /** * EventBridge detail-type field name. * EventBridge events use 'detail-type' as the event type discriminator. */ export declare const EVENT_BRIDGE_DETAIL_TYPE_FIELD = "detail-type"; /** * EventBridge timestamp field name. * EventBridge events use 'time' instead of the default 'timestamp' field. * Use this constant for `messageTimestampField` configuration. * * @example * ```typescript * { * messageTypeResolver: EVENT_BRIDGE_TYPE_RESOLVER, * messageTimestampField: EVENT_BRIDGE_TIMESTAMP_FIELD, * } * ``` */ export declare const EVENT_BRIDGE_TIMESTAMP_FIELD = "time"; /** * Pre-built resolver for AWS EventBridge events delivered to SQS. * * EventBridge events have a specific envelope structure where the event type * is stored in the `detail-type` field. This resolver extracts that field * for message routing. * * @see https://docs.aws.amazon.com/eventbridge/latest/userguide/aws-events.html * * @example * ```typescript * import { EVENT_BRIDGE_TYPE_RESOLVER } from '@message-queue-toolkit/sqs' * * class MyConsumer extends AbstractSqsConsumer { * constructor(deps: SQSConsumerDependencies) { * super(deps, { * messageTypeResolver: EVENT_BRIDGE_TYPE_RESOLVER, * handlers: new MessageHandlerConfigBuilder() * .addConfig(userCreatedSchema, handler) * .build(), * }, context) * } * } * ``` * * @example EventBridge event structure * ```json * { * "version": "0", * "id": "12345678-1234-1234-1234-123456789012", * "detail-type": "Order Created", * "source": "com.myapp.orders", * "account": "123456789012", * "time": "2024-01-15T10:30:00Z", * "region": "us-east-1", * "resources": [], * "detail": { * "orderId": "order-456", * "amount": 99.99 * } * } * ``` */ export declare const EVENT_BRIDGE_TYPE_RESOLVER: MessageTypeResolverConfig; /** * Creates an EventBridge resolver that normalizes detail-type values. * * EventBridge detail-type values are typically human-readable strings like * "Order Created" or "User Signed Up". This resolver allows you to normalize * them to your internal naming convention (e.g., "order.created"). * * @param typeMap - Map of EventBridge detail-types to internal message types * @param options - Optional configuration * @param options.fallbackToOriginal - If true, unmapped types are passed through (default: false) * @returns MessageTypeResolverConfig for use in consumer options * * @example * ```typescript * import { createEventBridgeResolverWithMapping } from '@message-queue-toolkit/sqs' * * const resolver = createEventBridgeResolverWithMapping({ * 'Order Created': 'order.created', * 'Order Updated': 'order.updated', * 'Order Cancelled': 'order.cancelled', * }) * * class MyConsumer extends AbstractSqsConsumer { * constructor(deps: SQSConsumerDependencies) { * super(deps, { * messageTypeResolver: resolver, * handlers: new MessageHandlerConfigBuilder() * .addConfig(orderCreatedSchema, handler, { messageType: 'order.created' }) * .build(), * }, context) * } * } * ``` */ export declare function createEventBridgeResolverWithMapping(typeMap: Record<string, string>, options?: { fallbackToOriginal?: boolean; }): MessageTypeResolverConfig;