Skip to content

v0.10.0 — roteamento por sink e retenção do outbox

Choose a tag to compare

@thiagortz thiagortz released this 04 Sep 19:53
· 20 commits to main since this release

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 grava EVENTS_API_SINK ('events-api'); sink = NULL = sem rota (fail-closed, ninguém claima).
  • PrismaOutboxRelaySource(client, source, sink?) claima um único sink; N destinos = N registerOutboxRelay({ name }) (filas isoladas).
  • AuditExtensionOptions.sink? permite um módulo rotear o próprio audit para outro barramento (default: events-api).
  • RelayEvent.sink carrega 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 purgeOutboxEvents na fila do drain com schedule diário próprio (outbox-purge-tick) e dedup separado; OutboxRelayHandle.startPurgeNow() como gatilho manual/externo. Opt-in via OutboxRelayDbosOptions.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.