tpmjs/packages/tools/official/redact-secrets
Ajax Davis 5926373be6 chore: update ai package to 6.0.49 across all packages
- Updated all packages from ai@6.0.23 to ai@6.0.49
- Added pnpm override to ensure consistent version
- Created changeset for publishing affected packages
2026-01-25 11:33:03 +10:00
..
src feat: add use cases marketing product with AI-generated content 2026-01-20 16:17:35 +10:00
CHANGELOG.md chore: version packages 2025-12-31 23:54:47 +10:00
package.json chore: update ai package to 6.0.49 across all packages 2026-01-25 11:33:03 +10:00
README.md feat: add 100+ official TPMJS tools 2025-12-31 22:55:56 +10:00
tsconfig.json feat: add 100+ official TPMJS tools 2025-12-31 22:55:56 +10:00
tsup.config.ts feat: add 100+ official TPMJS tools 2025-12-31 22:55:56 +10:00

@tpmjs/tools-redact-secrets

Redact detected secrets from text by replacing them with [REDACTED:type] placeholders.

Features

  • Automatic Detection: Uses the same patterns as @tpmjs/tools-secret-scan-text
  • Custom Patterns: Optionally provide additional regex patterns
  • Safe Output: Replaces sensitive data with labeled placeholders
  • Detailed Report: Returns information about what was redacted

Installation

npm install @tpmjs/tools-redact-secrets

Usage

Basic Usage

import { redactSecrets } from '@tpmjs/tools-redact-secrets';

const code = `
const AWS_KEY = "AKIAIOSFODNN7EXAMPLE";
const apiKey = "sk-proj-1234567890abcdef";
const dbUrl = "postgres://user:password123@localhost:5432/mydb";
`;

const result = await redactSecrets.execute({ text: code });

console.log(result.redacted);
// const AWS_KEY = "[REDACTED:aws-access-key]";
// const apiKey = "[REDACTED:openai-api-key]";
// const dbUrl = "[REDACTED:postgres-connection]";

console.log(result.redactions);
// [
//   {
//     type: 'aws-access-key',
//     originalLength: 20,
//     line: 2,
//     column: 18,
//     replacement: '[REDACTED:aws-access-key]'
//   },
//   {
//     type: 'openai-api-key',
//     originalLength: 24,
//     line: 3,
//     column: 17,
//     replacement: '[REDACTED:openai-api-key]'
//   },
//   {
//     type: 'postgres-connection',
//     originalLength: 50,
//     line: 4,
//     column: 17,
//     replacement: '[REDACTED:postgres-connection]'
//   }
// ]

Custom Patterns

const text = `
My email is user@example.com
My phone is 555-1234
`;

const result = await redactSecrets.execute({
  text,
  customPatterns: [
    '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}', // Email
    '\\d{3}-\\d{4}', // Phone
  ],
});

console.log(result.redacted);
// My email is [REDACTED:custom-pattern]
// My phone is [REDACTED:custom-pattern]

Using with Logs

import { redactSecrets } from '@tpmjs/tools-redact-secrets';

function safelog(message: string) {
  const result = await redactSecrets.execute({ text: message });
  console.log(result.redacted);
}

// Safe to log - secrets automatically redacted
safelog('Error connecting to postgres://admin:secret@db.example.com/prod');
// Output: Error connecting to [REDACTED:postgres-connection]

Detected Secret Types

The tool automatically redacts:

  • AWS credentials (access keys, secret keys)
  • GitHub tokens
  • Slack tokens and webhooks
  • OpenAI API keys
  • Stripe API keys
  • Generic API keys
  • JWT tokens
  • Private keys (RSA, EC, SSH)
  • Database connection strings (PostgreSQL, MySQL, MongoDB)
  • Hardcoded passwords
  • Google API keys
  • Twilio API keys
  • SendGrid API keys
  • Mailchimp API keys
  • Bearer tokens

Custom Pattern Format

Custom patterns can be provided as:

  1. Plain strings: "pattern" - Treated as literal regex with global flag
  2. Regex format: "/pattern/flags" - Parsed as regex with flags

Examples:

customPatterns: [
  'CUSTOM-[A-Z0-9]{10}',           // Plain string
  '/SECRET_\\w+/gi',                // Regex with flags
  '[0-9]{3}-[0-9]{2}-[0-9]{4}',   // SSN pattern
]

Use Cases

  • Log Sanitization: Remove secrets from application logs before storage
  • Error Messages: Redact credentials from error stack traces
  • Debugging Output: Share debug output safely
  • Documentation: Clean up example code that may contain real credentials
  • CI/CD: Sanitize build outputs and test results

Return Value

interface RedactionResult {
  redacted: string;                    // Text with secrets replaced
  redactionCount: number;              // Total number of redactions
  redactions: Array<{                  // Details of each redaction
    type: string;
    originalLength: number;
    line: number;
    column: number;
    replacement: string;
  }>;
  metadata: {
    originalLength: number;
    redactedLength: number;
    linesProcessed: number;
  };
}

Performance

  • Processes text in a single pass per pattern
  • Handles overlapping matches by keeping the first occurrence
  • Efficient for large text inputs (logs, code files, etc.)

License

MIT