96 lines
2.7 KiB
TypeScript
96 lines
2.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { getDefaultRedactPatterns, redactSensitiveText } from "./redact.js";
|
|
|
|
const defaults = getDefaultRedactPatterns();
|
|
|
|
describe("redactSensitiveText", () => {
|
|
it("masks env assignments while keeping the key", () => {
|
|
const input = "OPENAI_API_KEY=sk-1234567890abcdef";
|
|
const output = redactSensitiveText(input, {
|
|
mode: "tools",
|
|
patterns: defaults,
|
|
});
|
|
expect(output).toBe("OPENAI_API_KEY=sk-123…cdef");
|
|
});
|
|
|
|
it("masks CLI flags", () => {
|
|
const input = "curl --token abcdef1234567890ghij https://api.test";
|
|
const output = redactSensitiveText(input, {
|
|
mode: "tools",
|
|
patterns: defaults,
|
|
});
|
|
expect(output).toBe("curl --token abcdef…ghij https://api.test");
|
|
});
|
|
|
|
it("masks JSON fields", () => {
|
|
const input = '{"token":"abcdef1234567890ghij"}';
|
|
const output = redactSensitiveText(input, {
|
|
mode: "tools",
|
|
patterns: defaults,
|
|
});
|
|
expect(output).toBe('{"token":"abcdef…ghij"}');
|
|
});
|
|
|
|
it("masks bearer tokens", () => {
|
|
const input = "Authorization: Bearer abcdef1234567890ghij";
|
|
const output = redactSensitiveText(input, {
|
|
mode: "tools",
|
|
patterns: defaults,
|
|
});
|
|
expect(output).toBe("Authorization: Bearer abcdef…ghij");
|
|
});
|
|
|
|
it("masks Telegram-style tokens", () => {
|
|
const input = "123456:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef";
|
|
const output = redactSensitiveText(input, {
|
|
mode: "tools",
|
|
patterns: defaults,
|
|
});
|
|
expect(output).toBe("123456…cdef");
|
|
});
|
|
|
|
it("redacts short tokens fully", () => {
|
|
const input = "TOKEN=shortvalue";
|
|
const output = redactSensitiveText(input, {
|
|
mode: "tools",
|
|
patterns: defaults,
|
|
});
|
|
expect(output).toBe("TOKEN=***");
|
|
});
|
|
|
|
it("redacts private key blocks", () => {
|
|
const input = [
|
|
"-----BEGIN PRIVATE KEY-----",
|
|
"ABCDEF1234567890",
|
|
"ZYXWVUT987654321",
|
|
"-----END PRIVATE KEY-----",
|
|
].join("\n");
|
|
const output = redactSensitiveText(input, {
|
|
mode: "tools",
|
|
patterns: defaults,
|
|
});
|
|
expect(output).toBe(
|
|
["-----BEGIN PRIVATE KEY-----", "…redacted…", "-----END PRIVATE KEY-----"].join("\n"),
|
|
);
|
|
});
|
|
|
|
it("honors custom patterns with flags", () => {
|
|
const input = "token=abcdef1234567890ghij";
|
|
const output = redactSensitiveText(input, {
|
|
mode: "tools",
|
|
patterns: ["/token=([A-Za-z0-9]+)/i"],
|
|
});
|
|
expect(output).toBe("token=abcdef…ghij");
|
|
});
|
|
|
|
it("skips redaction when mode is off", () => {
|
|
const input = "OPENAI_API_KEY=sk-1234567890abcdef";
|
|
const output = redactSensitiveText(input, {
|
|
mode: "off",
|
|
patterns: defaults,
|
|
});
|
|
expect(output).toBe(input);
|
|
});
|
|
});
|