Tracevault
OverviewInstallWritingQueryModelo de datos

En el mismo objeto app

La read API viene como audit.query en la app de startTracevault, y como audit.getScope("name").query por scope. Es deliberadamente acotada: filtros de igualdad en columnas escalares (incluyendo outcome, error_code, severity generados), ventana en occurred_at y paginación determinística. Agregaciones, probes JSONB y joins van en SQL directo.

read.ts
const recent = await audit.query.findMany({
  event: "product.price.updated",
  from: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
  limit: 100,
})

const scoped = await audit.getScope("users").query.findMany({
  event: "user.profile.updated",
  limit: 50,
})

const one = await audit.query.findById("uuid-here")
const total = await audit.query.count({ actorType: "user", environment: "prod" })

Lecturas con scope

Usá getScope("users").query en lugar de una factory de lectura separada. Todos los scopes comparten los pools de lectura y escritura de la app.

scoped-read.ts
const rows = await audit.getScope("users").query.findMany({
  event: "user.profile.updated",
  errorsOnly: true,
  limit: 50,
})

Vistas orientadas a errores

errorsOnly: true matchea filas donde outcome = 'failure' o severity está en SEVERITIES_FOR_ERRORS_ONLY_FILTER (exportado desde tracevault). Los filtros se combinan con AND.

errors.ts
// failures by outcome OR high-severity rows (see SEVERITIES_FOR_ERRORS_ONLY_FILTER)
await audit.query.findMany({
  errorsOnly: true,
  limit: 50,
})

Filtros findMany / count

Claves desconocidas lanzan ValidationError. Filtros string son igualdad exacta — sin LIKE. from / to no pueden estar invertidos.

CampoAplica aNotas
eventfindMany, countMatch exacto
actorId, actorTypefindMany, countMatch exacto
targetId, targetTypefindMany, countMatch exacto
correlationId, requestIdfindMany, countMatch exacto
environmentfindMany, countMatch exacto
outcome, errorCode, severityfindMany, countColumnas generadas (migraciones 002–003)
severitiesfindMany, countIN list, máx 16, sin duplicados
errorsOnlyfindMany, countoutcome failure o severities altas
modefindMany, countsync | async
from, tofindMany, countLímites inclusivos en occurredAt
limit, offset, ordersolo findManylimit 1–500 (default 50), order asc|desc en (occurred_at, id)

Lifecycle

Llamá await audit.close() una vez: drena la cola de escritura de cada scope y cierra pools propios de Tracevault. pool / readPool inyectados no se cierran. Después de close, emit y query lanzan TracevaultError.

Tipos

AuditRecord, AuditQueryFilters, DOCUMENTED_SEVERITY_LEVELS y exports relacionados viven en el entry principal tracevault — sin paquete query separado en 1.x.

Siguiente

Referencia de columnas en Modelo de datos. setup en Install.