SENTINEL Docs

Audit Logger

Automatic payment logging and querying.

Central audit logger that writes payment records to a pluggable storage backend. Used internally by wrapWithSentinel; you can also use it directly for custom flows.

Constructor

constructor(config?: AuditConfig)
Config FieldTypeDefaultDescription
enabledbooleantrueWhether logging is active
storageStorageBackendMemoryStorageWhere records are written
enrichmentEnrichmentConfigTag rules, static tags
redactFieldsstring[]Fields to redact from stored records

Methods

log

log(record: Omit<AuditRecord, "id" | "created_at">): Promise<AuditRecord>

Log a completed payment record. id and created_at are auto-generated.

logBlocked

logBlocked(context, violation, config): Promise<AuditRecord>

Log a blocked payment attempt (budget violation). Creates a record with policy_evaluation: "blocked".

query

query(query: AuditQuery): Promise<AuditRecord[]>

Filter records by agent, team, endpoint, time range, status, tags.

summarize

summarize(query?: Partial<AuditQuery>): Promise<AuditSummary>

Aggregated stats: total spend, transaction count, by agent/endpoint/team.

exportCSV / exportJSON

exportCSV(query?: AuditQuery): Promise<string>
exportJSON(query?: AuditQuery): Promise<string>

Export records for compliance reviews.

Usage Example

import { AuditLogger, MemoryStorage } from "@valeo/x402";

const logger = new AuditLogger({
  storage: new MemoryStorage(10_000),
  enrichment: {
    staticTags: ["production"],
    tagRules: [{ pattern: ".*openai.*", tags: ["llm"] }],
  },
});

const records = await logger.query({
  agentId: "agent-weather-001",
  startTime: Date.now() - 86400000,
  status: ["allowed", "flagged"],
  limit: 100,
});

const summary = await logger.summarize({ team: "data-ops" });
console.log(summary.total_spend, summary.total_transactions);