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 Field | Type | Default | Description |
|---|---|---|---|
enabled | boolean | true | Whether logging is active |
storage | StorageBackend | MemoryStorage | Where records are written |
enrichment | EnrichmentConfig | — | Tag rules, static tags |
redactFields | string[] | — | 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);