Review a transactional outbox relay

src/outbox-relay-types.tsTypeScript
@@ -0,0 +1,40 @@
1+export interface OutboxRow {
2+ id: string;
3+ topic: string;
4+ payload: string;
5+ createdAt: Date;
6+ failureCount: number;
7+}
8+
9+export interface BrokerDelivery {
10+ acknowledgement: Promise<void>;
11+}
12+
13+export interface EventBroker {
14+ startPublish(message: {
15+ eventId: string;
16+ topic: string;
17+ payload: string;
18+ }): Promise<BrokerDelivery>;
19+}
20+
21+export interface OutboxRepository {
22+ claimBatch(ownerId: string, limit: number): Promise<OutboxRow[]>;
23+ releaseClaim(rowId: string, ownerId: string): Promise<void>;
24+ markPublished(rowId: string): Promise<void>;
25+ recordFailure(rowId: string, message: string): Promise<void>;
26+}
27+
28+export interface RelayTelemetry {
29+ claimed(count: number): void;
30+ published(count: number): void;
31+ failed(count: number): void;
32+}
33+
34+export interface OutboxRelayDependencies {
35+ broker: EventBroker;
36+ ids: { next(): string };
37+ ownerId: string;
38+ repository: OutboxRepository;
39+ telemetry: RelayTelemetry;
40+}