@arturwojnar/hermes-postgresql
Version:
Production-Ready TypeScript Outbox Pattern for PostgreSQL
22 lines (21 loc) • 1.08 kB
TypeScript
import { CancellationPromise, Duration } from '@arturwojnar/hermes';
import { DeepReadonly } from 'ts-essentials';
import { Transaction } from '../subscribeToReplicationSlot/types.js';
type PublishingQueueType = 'SerializedPublishingQueue' | 'NonBlockingPublishingQueue' | string;
type MessageToPublish<InsertResult> = {
transaction: Transaction<InsertResult>;
acknowledge: () => Promise<void>;
};
type PublishingQueueOptions<InsertResult> = {
waitAfterFailedPublish?: Duration;
onFailedPublish?: (tx: Transaction<InsertResult>) => Promise<void>;
};
type PublishingQueue<Name extends PublishingQueueType = PublishingQueueType, InsertResult = unknown> = DeepReadonly<{
queue: (messageToPublish: MessageToPublish<InsertResult>) => MessageToPublish<InsertResult>;
run: (messageToPublish?: MessageToPublish<InsertResult>) => Promise<void>;
size: () => number;
waitUntilIsEmpty: () => CancellationPromise;
name(): Name;
dispose: () => void;
}>;
export type { MessageToPublish, PublishingQueue, PublishingQueueOptions, PublishingQueueType };