Menu
popagent
publicLatest change 7cecf6a89b6f39dae8c5678f5b369014199aeb3c - Add self-hosted Mastra observability by AkurAI Build
import { describe, expect, test } from "bun:test";
import { SensitiveDataFilter } from "@mastra/observability";
import { createTraceId } from "./agent-execution";
import { OBSERVABILITY_SENSITIVE_FIELDS } from "./observability";
import { parseObservabilityQuery } from "./observability-store";
const NOW = new Date("2026-08-14T12:00:00.000Z");
describe("observability contracts", () => {
test("creates valid unique trace IDs", () => {
const first = createTraceId();
const second = createTraceId();
expect(first).toMatch(/^[a-f0-9]{32}$/);
expect(second).toMatch(/^[a-f0-9]{32}$/);
expect(first).not.toBe(second);
});
test("bounds query time and pagination", () => {
expect(parseObservabilityQuery("http://localhost/api/observability/traces", NOW)).toEqual({
from: new Date("2026-08-13T12:00:00.000Z"),
to: NOW,
page: 0,
perPage: 25,
});
expect(() => parseObservabilityQuery("http://localhost/api?from=2026-01-01&to=2026-08-01", NOW)).toThrow("cannot exceed 30 days");
expect(() => parseObservabilityQuery("http://localhost/api?page=-1", NOW)).toThrow("Invalid observability pagination");
expect(() => parseObservabilityQuery("http://localhost/api?perPage=101", NOW)).toThrow("Invalid observability pagination");
});
test("redacts secret tool values before export", () => {
const marker = "plaintext-secret-marker";
const filter = new SensitiveDataFilter({ sensitiveFields: OBSERVABILITY_SENSITIVE_FIELDS });
const span = filter.process({
traceId: createTraceId(),
spanId: createTraceId().slice(0, 16),
type: "tool_call",
name: "recall-secret",
input: { name: "service", value: marker },
output: JSON.stringify({ name: "service", value: marker }),
attributes: {},
metadata: {},
} as never);
expect(JSON.stringify(span)).not.toContain(marker);
expect(JSON.stringify(span)).toContain("[REDACTED]");
});
});