Repository navigation
v0.10.0 — roteamento por sink e retenção do outbox
Outbox relay: roteamento por sink + retenção (conteúdo do #59)
Roteamento por sink
- A tabela outbox ganha a coluna
sink— escrita por quem EMITE, nunca inferida do nome do evento. O audit extension gravaEVENTS_API_SINK('events-api');sink = NULL= sem rota (fail-closed, ninguém claima). PrismaOutboxRelaySource(client, source, sink?)claima um único sink; N destinos = NregisterOutboxRelay({ name })(filas isoladas).AuditExtensionOptions.sink?permite um módulo rotear o próprio audit para outro barramento (default: events-api).RelayEvent.sinkcarrega a rota (a events-api descarta no ingest).
Retenção (purge)
OutboxPurgeSource.purgeDeliveredBatch(olderThan, batchSize)no source padrão — lotes curtos e idempotentes; apaga sópublished = true(pendentes e parkeadas nunca).- Workflow
purgeOutboxEventsna fila do drain com schedule diário próprio (outbox-purge-tick) e dedup separado;OutboxRelayHandle.startPurgeNow()como gatilho manual/externo. Opt-in viaOutboxRelayDbosOptions.purge?.
⚠️ Breaking para adotantes no bump
O audit grava sink na linha — o model Outbox do consumidor precisa da coluna (migration junto do bump). Índices recomendados: (sink, published, created_at) para o claim e parcial (published_at) WHERE published para o purge — ver docs/outbox-relay.md.