declare enum PolicyCategory { EMAIL = "EMAIL", PHONE = "PHONE", SSN = "SSN", IP_ADDRESS = "IP_ADDRESS", API_KEY = "API_KEY", AWS_KEY = "AWS_KEY", PRIVATE_KEY = "PRIVATE_KEY", ADDRESS = "ADDRESS", GOVERNMENT_ID = "GOVERNMENT_ID", TAX_IDENTIFIER = "TAX_IDENTIFIER", INSURANCE = "INSURANCE", FINANCIAL = "FINANCIAL", MEDICAL = "MEDICAL", DIGITAL_IDENTITY = "DIGITAL_IDENTITY", GEOGRAPHIC = "GEOGRAPHIC", EMPLOYEE_ID = "EMPLOYEE_ID", VEHICLE = "VEHICLE", DEV_SECRET = "DEV_SECRET", DEV_IDENTIFIER = "DEV_IDENTIFIER", CLOUD_CREDENTIALS = "CLOUD_CREDENTIALS", CI_CD_SECRETS = "CI_CD_SECRETS", PACKAGE_REGISTRY = "PACKAGE_REGISTRY", DATABASE_CREDENTIALS = "DATABASE_CREDENTIALS", MONITORING_SECRETS = "MONITORING_SECRETS", AUTH_SECRETS = "AUTH_SECRETS", MESSAGING_SECRETS = "MESSAGING_SECRETS", WEBHOOK_URLS = "WEBHOOK_URLS", ENCRYPTION_KEYS = "ENCRYPTION_KEYS", CONTAINER_REGISTRY = "CONTAINER_REGISTRY", INFRASTRUCTURE_SECRETS = "INFRASTRUCTURE_SECRETS", CUSTOM = "CUSTOM" } interface Policy { readonly name: TName; readonly pattern: RegExp; readonly category: PolicyCategory; readonly replacement?: string; } declare const Policies: { readonly EMAIL_ADDRESS: "EMAIL_ADDRESS"; readonly PHONE_NUMBER_US: "PHONE_NUMBER_US"; readonly PHONE_NUMBER_INTERNATIONAL: "PHONE_NUMBER_INTERNATIONAL"; readonly PHONE_NUMBER_UK: "PHONE_NUMBER_UK"; readonly PHONE_NUMBER_CANADIAN: "PHONE_NUMBER_CANADIAN"; readonly SSN: "SSN"; readonly CREDIT_CARD: "CREDIT_CARD"; readonly IPV4_ADDRESS: "IPV4_ADDRESS"; readonly IPV6_ADDRESS: "IPV6_ADDRESS"; readonly MAC_ADDRESS: "MAC_ADDRESS"; readonly UUID: "UUID"; readonly PASSPORT_NUMBER: "PASSPORT_NUMBER"; readonly DRIVER_LICENSE: "DRIVER_LICENSE"; readonly VIN: "VIN"; readonly ROUTING_NUMBER_US: "ROUTING_NUMBER_US"; readonly IBAN: "IBAN"; readonly SWIFT_CODE: "SWIFT_CODE"; readonly ACCOUNT_NUMBER_US: "ACCOUNT_NUMBER_US"; readonly ACH_ROUTING_NUMBER: "ACH_ROUTING_NUMBER"; readonly CREDIT_CARD_CVV: "CREDIT_CARD_CVV"; readonly BITCOIN_ADDRESS: "BITCOIN_ADDRESS"; readonly ETHEREUM_ADDRESS: "ETHEREUM_ADDRESS"; readonly MEDICAL_RECORD_NUMBER: "MEDICAL_RECORD_NUMBER"; readonly HEALTH_INSURANCE_ID: "HEALTH_INSURANCE_ID"; readonly URL_WITH_CREDENTIALS: "URL_WITH_CREDENTIALS"; readonly JWT_TOKEN: "JWT_TOKEN"; readonly BASE64_URL_PARAM: "BASE64_URL_PARAM"; readonly API_KEY_GENERIC: "API_KEY_GENERIC"; readonly BASIC_AUTH_HEADER: "BASIC_AUTH_HEADER"; readonly BEARER_TOKEN_HEADER: "BEARER_TOKEN_HEADER"; readonly API_KEY_HEADER: "API_KEY_HEADER"; readonly SESSION_ID_COOKIE: "SESSION_ID_COOKIE"; readonly AWS_ACCESS_KEY: "AWS_ACCESS_KEY"; readonly AWS_SECRET_KEY: "AWS_SECRET_KEY"; readonly AWS_SESSION_TOKEN: "AWS_SESSION_TOKEN"; readonly GOOGLE_API_KEY: "GOOGLE_API_KEY"; readonly OPENAI_API_KEY: "OPENAI_API_KEY"; readonly ANTHROPIC_API_KEY: "ANTHROPIC_API_KEY"; readonly GITHUB_TOKEN: "GITHUB_TOKEN"; readonly GITHUB_FINE_GRAINED_TOKEN: "GITHUB_FINE_GRAINED_TOKEN"; readonly GITLAB_TOKEN: "GITLAB_TOKEN"; readonly BITBUCKET_TOKEN: "BITBUCKET_TOKEN"; readonly AZURE_SUBSCRIPTION_ID: "AZURE_SUBSCRIPTION_ID"; readonly AZURE_CLIENT_ID: "AZURE_CLIENT_ID"; readonly AZURE_TENANT_ID: "AZURE_TENANT_ID"; readonly AWS_ACCOUNT_ID: "AWS_ACCOUNT_ID"; readonly GCP_API_KEY: "GCP_API_KEY"; readonly AZURE_STORAGE_CONNECTION_STRING: "AZURE_STORAGE_CONNECTION_STRING"; readonly DOCKER_HUB_TOKEN: "DOCKER_HUB_TOKEN"; readonly DOCKER_REGISTRY_TOKEN: "DOCKER_REGISTRY_TOKEN"; readonly DOCKER_PASSWORD_FLAG: "DOCKER_PASSWORD_FLAG"; readonly NPM_TOKEN: "NPM_TOKEN"; readonly PYPI_TOKEN: "PYPI_TOKEN"; readonly RUBYGEMS_API_KEY: "RUBYGEMS_API_KEY"; readonly SLACK_WEBHOOK: "SLACK_WEBHOOK"; readonly SLACK_TOKEN: "SLACK_TOKEN"; readonly DISCORD_TOKEN: "DISCORD_TOKEN"; readonly DISCORD_WEBHOOK: "DISCORD_WEBHOOK"; readonly TWILIO_ACCOUNT_SID: "TWILIO_ACCOUNT_SID"; readonly TWILIO_AUTH_TOKEN: "TWILIO_AUTH_TOKEN"; readonly TWILIO_API_KEY: "TWILIO_API_KEY"; readonly SENDGRID_API_KEY: "SENDGRID_API_KEY"; readonly STRIPE_KEY: "STRIPE_KEY"; readonly SQUARE_ACCESS_TOKEN: "SQUARE_ACCESS_TOKEN"; readonly PAYPAL_CLIENT_ID: "PAYPAL_CLIENT_ID"; readonly BRAINTREE_ACCESS_TOKEN: "BRAINTREE_ACCESS_TOKEN"; readonly MAILGUN_API_KEY: "MAILGUN_API_KEY"; readonly MAILCHIMP_API_KEY: "MAILCHIMP_API_KEY"; readonly FIREBASE_API_KEY: "FIREBASE_API_KEY"; readonly FIREBASE_CONFIG: "FIREBASE_CONFIG"; readonly SUPABASE_API_KEY: "SUPABASE_API_KEY"; readonly SUPABASE_URL: "SUPABASE_URL"; readonly NETLIFY_ACCESS_TOKEN: "NETLIFY_ACCESS_TOKEN"; readonly NETLIFY_SITE_ID: "NETLIFY_SITE_ID"; readonly HEROKU_API_KEY: "HEROKU_API_KEY"; readonly DIGITALOCEAN_TOKEN: "DIGITALOCEAN_TOKEN"; readonly LINODE_API_TOKEN: "LINODE_API_TOKEN"; readonly VULTR_API_KEY: "VULTR_API_KEY"; readonly MONGODB_CONNECTION_STRING: "MONGODB_CONNECTION_STRING"; readonly POSTGRESQL_CONNECTION_STRING: "POSTGRESQL_CONNECTION_STRING"; readonly MYSQL_CONNECTION_STRING: "MYSQL_CONNECTION_STRING"; readonly REDIS_CONNECTION_STRING: "REDIS_CONNECTION_STRING"; readonly ELASTICSEARCH_URL: "ELASTICSEARCH_URL"; readonly RABBITMQ_CONNECTION_STRING: "RABBITMQ_CONNECTION_STRING"; readonly KAFKA_CONNECTION_STRING: "KAFKA_CONNECTION_STRING"; readonly CASSANDRA_CONNECTION_STRING: "CASSANDRA_CONNECTION_STRING"; readonly DATABASE_CONNECTION_STRING: "DATABASE_CONNECTION_STRING"; readonly DATABASE_URL: "DATABASE_URL"; readonly LDAP_CONNECTION_STRING: "LDAP_CONNECTION_STRING"; readonly JDBC_CONNECTION_STRING: "JDBC_CONNECTION_STRING"; readonly SMTP_CONNECTION_STRING: "SMTP_CONNECTION_STRING"; readonly SSH_PRIVATE_KEY: "SSH_PRIVATE_KEY"; readonly RSA_PRIVATE_KEY: "RSA_PRIVATE_KEY"; readonly EC_PRIVATE_KEY: "EC_PRIVATE_KEY"; readonly OPENSSH_PRIVATE_KEY: "OPENSSH_PRIVATE_KEY"; readonly GENERIC_PRIVATE_KEY: "GENERIC_PRIVATE_KEY"; readonly PGP_PRIVATE_KEY: "PGP_PRIVATE_KEY"; readonly BASE64_ENCODED_SECRET: "BASE64_ENCODED_SECRET"; readonly HEX_ENCODED_SECRET: "HEX_ENCODED_SECRET"; readonly GENERIC_SECRET: "GENERIC_SECRET"; readonly GENERIC_TOKEN: "GENERIC_TOKEN"; readonly GENERIC_CREDENTIAL: "GENERIC_CREDENTIAL"; readonly GENERIC_PASSWORD: "GENERIC_PASSWORD"; readonly PASSWORD_ASSIGNMENT: "PASSWORD_ASSIGNMENT"; readonly CERTIFICATE: "CERTIFICATE"; readonly ENVIRONMENT_VARIABLE_SECRET: "ENVIRONMENT_VARIABLE_SECRET"; readonly DOCKER_REGISTRY_AUTH: "DOCKER_REGISTRY_AUTH"; readonly KUBERNETES_SECRET: "KUBERNETES_SECRET"; readonly TERRAFORM_VARIABLE: "TERRAFORM_VARIABLE"; readonly ANSIBLE_VAULT: "ANSIBLE_VAULT"; readonly ANSIBLE_VAULT_PASSWORD: "ANSIBLE_VAULT_PASSWORD"; readonly AETNA_MEMBER_ID: "AETNA_MEMBER_ID"; readonly BCBS_MEMBER_ID: "BCBS_MEMBER_ID"; readonly UNITEDHEALTH_MEMBER_ID: "UNITEDHEALTH_MEMBER_ID"; readonly UK_NHS_NUMBER: "UK_NHS_NUMBER"; readonly CANADIAN_HEALTH_CARD: "CANADIAN_HEALTH_CARD"; readonly AUSTRALIAN_MEDICARE_NUMBER: "AUSTRALIAN_MEDICARE_NUMBER"; readonly GERMAN_HEALTH_INSURANCE_NUMBER: "GERMAN_HEALTH_INSURANCE_NUMBER"; readonly FRENCH_SOCIAL_SECURITY_NUMBER: "FRENCH_SOCIAL_SECURITY_NUMBER"; readonly EUROPEAN_HEALTH_INSURANCE_CARD: "EUROPEAN_HEALTH_INSURANCE_CARD"; readonly MEDICARE_NUMBER_US: "MEDICARE_NUMBER_US"; readonly MEDICAID_NUMBER_US: "MEDICAID_NUMBER_US"; readonly US_HEALTH_INSURANCE_POLICY: "US_HEALTH_INSURANCE_POLICY"; readonly US_INSURANCE_GROUP_NUMBER: "US_INSURANCE_GROUP_NUMBER"; readonly US_INSURANCE_CLAIM_NUMBER: "US_INSURANCE_CLAIM_NUMBER"; readonly AUTO_INSURANCE_POLICY: "AUTO_INSURANCE_POLICY"; readonly HOME_INSURANCE_POLICY: "HOME_INSURANCE_POLICY"; readonly LIFE_INSURANCE_POLICY: "LIFE_INSURANCE_POLICY"; readonly TRAVEL_INSURANCE_POLICY: "TRAVEL_INSURANCE_POLICY"; readonly WORKERS_COMPENSATION_CLAIM: "WORKERS_COMPENSATION_CLAIM"; readonly DISABILITY_INSURANCE_POLICY: "DISABILITY_INSURANCE_POLICY"; readonly DENTAL_INSURANCE_POLICY: "DENTAL_INSURANCE_POLICY"; readonly VISION_INSURANCE_POLICY: "VISION_INSURANCE_POLICY"; readonly US_ZIP_CODE: "US_ZIP_CODE"; readonly CANADIAN_POSTAL_CODE: "CANADIAN_POSTAL_CODE"; readonly UK_POSTCODE: "UK_POSTCODE"; readonly GPS_COORDINATES: "GPS_COORDINATES"; readonly US_DRIVER_LICENSE: "US_DRIVER_LICENSE"; readonly US_PASSPORT_NUMBER: "US_PASSPORT_NUMBER"; readonly NATIONAL_ID: "NATIONAL_ID"; readonly PASSPORT_MRZ: "PASSPORT_MRZ"; readonly ITIN: "ITIN"; readonly US_EIN_WITH_LABEL: "US_EIN_WITH_LABEL"; readonly US_EIN_PREFIXED: "US_EIN_PREFIXED"; readonly US_TIN_WITH_LABEL: "US_TIN_WITH_LABEL"; readonly US_EIN: "US_EIN"; readonly UK_VAT_NUMBER: "UK_VAT_NUMBER"; readonly EU_VAT_NUMBER: "EU_VAT_NUMBER"; readonly CANADIAN_BUSINESS_NUMBER: "CANADIAN_BUSINESS_NUMBER"; readonly AUSTRALIAN_ABN: "AUSTRALIAN_ABN"; readonly GERMAN_TAX_NUMBER: "GERMAN_TAX_NUMBER"; readonly FRENCH_SIRET_NUMBER: "FRENCH_SIRET_NUMBER"; readonly FRENCH_SIREN_NUMBER: "FRENCH_SIREN_NUMBER"; readonly EMPLOYEE_ID: "EMPLOYEE_ID"; readonly US_LICENSE_PLATE: "US_LICENSE_PLATE"; readonly GOOGLE_CLOUD_PROJECT_ID: "GOOGLE_CLOUD_PROJECT_ID"; readonly KAFKA_BOOTSTRAP_SERVER: "KAFKA_BOOTSTRAP_SERVER"; readonly CONTAINER_REGISTRY: "CONTAINER_REGISTRY"; readonly GIT_SSH_URL: "GIT_SSH_URL"; readonly API_ENDPOINT_URL: "API_ENDPOINT_URL"; readonly BUILD_NUMBER: "BUILD_NUMBER"; readonly VERSION_TAG: "VERSION_TAG"; readonly COMMIT_HASH: "COMMIT_HASH"; readonly PR_ISSUE_NUMBER: "PR_ISSUE_NUMBER"; readonly JIRA_TICKET: "JIRA_TICKET"; readonly AUTH0_DOMAIN: "AUTH0_DOMAIN"; readonly VERCEL_DEPLOYMENT_URL: "VERCEL_DEPLOYMENT_URL"; readonly SERVICE_ACCOUNT_EMAIL: "SERVICE_ACCOUNT_EMAIL"; readonly WEBHOOK_URL: "WEBHOOK_URL"; readonly OAUTH_CLIENT_ID: "OAUTH_CLIENT_ID"; readonly OAUTH_CLIENT_SECRET: "OAUTH_CLIENT_SECRET"; readonly OAUTH_REFRESH_TOKEN: "OAUTH_REFRESH_TOKEN"; readonly OAUTH_ACCESS_TOKEN: "OAUTH_ACCESS_TOKEN"; readonly OKTA_API_TOKEN: "OKTA_API_TOKEN"; readonly AUTH0_API_TOKEN: "AUTH0_API_TOKEN"; readonly KEYCLOAK_CLIENT_SECRET: "KEYCLOAK_CLIENT_SECRET"; readonly SHA_HASH: "SHA_HASH"; readonly JENKINS_TOKEN: "JENKINS_TOKEN"; readonly CIRCLECI_TOKEN: "CIRCLECI_TOKEN"; readonly TRAVIS_CI_TOKEN: "TRAVIS_CI_TOKEN"; readonly GITLAB_CI_TOKEN: "GITLAB_CI_TOKEN"; readonly AZURE_DEVOPS_TOKEN: "AZURE_DEVOPS_TOKEN"; readonly BITBUCKET_TOKEN_ALT: "BITBUCKET_TOKEN_ALT"; readonly SENTRY_DSN: "SENTRY_DSN"; readonly NEW_RELIC_LICENSE_KEY: "NEW_RELIC_LICENSE_KEY"; readonly DATADOG_API_KEY: "DATADOG_API_KEY"; readonly PAGERDUTY_INTEGRATION_KEY: "PAGERDUTY_INTEGRATION_KEY"; readonly GRAFANA_API_KEY: "GRAFANA_API_KEY"; readonly PROMETHEUS_REMOTE_WRITE: "PROMETHEUS_REMOTE_WRITE"; readonly SPLUNK_HEC_TOKEN: "SPLUNK_HEC_TOKEN"; readonly SUMO_LOGIC_COLLECTOR: "SUMO_LOGIC_COLLECTOR"; readonly BUGSNAG_API_KEY: "BUGSNAG_API_KEY"; readonly ROLLBAR_ACCESS_TOKEN: "ROLLBAR_ACCESS_TOKEN"; readonly AIRBRAKE_API_KEY: "AIRBRAKE_API_KEY"; readonly LOGDNA_INGESTION_KEY: "LOGDNA_INGESTION_KEY"; readonly LOGGLY_TOKEN: "LOGGLY_TOKEN"; readonly PAPERTRAIL_TOKEN: "PAPERTRAIL_TOKEN"; readonly TERRAFORM_CLOUD_TOKEN: "TERRAFORM_CLOUD_TOKEN"; readonly HASHICORP_VAULT_TOKEN: "HASHICORP_VAULT_TOKEN"; readonly AWS_SECRETS_MANAGER_ARN: "AWS_SECRETS_MANAGER_ARN"; readonly AZURE_KEY_VAULT_SECRET: "AZURE_KEY_VAULT_SECRET"; readonly GCP_SECRET_MANAGER: "GCP_SECRET_MANAGER"; readonly KUBERNETES_CONFIG: "KUBERNETES_CONFIG"; readonly HELM_REPOSITORY_CREDENTIALS: "HELM_REPOSITORY_CREDENTIALS"; readonly CONSUL_TOKEN: "CONSUL_TOKEN"; readonly RANCHER_TOKEN: "RANCHER_TOKEN"; readonly QUAY_IO_TOKEN: "QUAY_IO_TOKEN"; readonly JFROG_ARTIFACTORY_TOKEN: "JFROG_ARTIFACTORY_TOKEN"; readonly NEXUS_REPOSITORY_TOKEN: "NEXUS_REPOSITORY_TOKEN"; readonly CLOUDFLARE_API_TOKEN: "CLOUDFLARE_API_TOKEN"; readonly SSH_KEY_FINGERPRINT: "SSH_KEY_FINGERPRINT"; readonly SONARQUBE_TOKEN: "SONARQUBE_TOKEN"; readonly LAUNCHDARKLY_SDK_KEY: "LAUNCHDARKLY_SDK_KEY"; readonly SEGMENT_WRITE_KEY: "SEGMENT_WRITE_KEY"; readonly MIXPANEL_API_SECRET: "MIXPANEL_API_SECRET"; readonly ALGOLIA_API_KEY: "ALGOLIA_API_KEY"; readonly ELASTIC_CLOUD_ID: "ELASTIC_CLOUD_ID"; readonly RAILWAY_TOKEN: "RAILWAY_TOKEN"; readonly GCP_SERVICE_ACCOUNT_KEY: "GCP_SERVICE_ACCOUNT_KEY"; readonly CREDIT_CARD_WITH_SEPARATORS: "CREDIT_CARD_WITH_SEPARATORS"; readonly PGP_KEY_ID: "PGP_KEY_ID"; readonly AGE_SECRET_KEY: "AGE_SECRET_KEY"; readonly AGE_PUBLIC_KEY: "AGE_PUBLIC_KEY"; readonly AWS_KMS_KEY_ID: "AWS_KMS_KEY_ID"; readonly GCP_KMS_KEY: "GCP_KMS_KEY"; readonly AZURE_KEY_IDENTIFIER: "AZURE_KEY_IDENTIFIER"; readonly MASTER_KEY: "MASTER_KEY"; }; type PolicyName = (typeof Policies)[keyof typeof Policies]; interface ExcludePattern { pattern: RegExp; policies?: PolicyName[]; } interface RedactumOptions { policies?: PolicyName[]; customPolicies?: Policy[]; replacement?: string | ((match: string, category: PolicyCategory) => string); preserveLength?: boolean; excludePatterns?: ExcludePattern[]; } interface RedactumResult { text: string; redactedText: string; findings: RedactumFinding[]; stats: RedactumStats; } interface RedactumFinding { category: PolicyCategory; policyName: string; value: string; match: string; start: number; end: number; replacement: string; } interface RedactumStats { totalFindings: number; findingsByCategory: Partial>; processingTimeMs: number; } interface RedactumConfig { defaultOptions: RedactumOptions; enabledCategories: PolicyCategory[]; customPolicies: Policy[]; } type RedactionMode = "mask" | "replace" | "remove" | "hash" | "encrypt"; type HashAlgorithm = "sha256" | "sha512" | "md5" | "blake2b"; interface CategoryConfig { enabled?: boolean; mode?: RedactionMode; replacement?: string; preserveLength?: boolean; preserveFormat?: boolean; customPattern?: string; } interface RedactionConfig { mask?: string; replacement?: string; categories?: PolicyCategory[] | Record; customPolicies?: Array<{ name: string; pattern: string; flags?: string; replacement?: string; mode?: RedactionMode; }>; globalMode?: RedactionMode; preserveLength?: boolean; preserveFormat?: boolean; hashOptions?: { algorithm?: HashAlgorithm; salt?: string; encoding?: "hex" | "base64" | "base64url"; }; encryptOptions?: { algorithm?: string; key?: string; iv?: string; }; performance?: { maximumInputSize?: number; timeout?: number; cachePatterns?: boolean; streamThreshold?: number; }; security?: { preventRegexDos?: boolean; maximumPatternLength?: number; maximumCustomPatterns?: number; auditLog?: boolean; }; locale?: string | string[]; detectLanguage?: boolean; } interface ConfigFile { $schema?: string; extends?: string | string[]; env?: Record; presets?: Record; mask?: string; replacement?: string; categories?: PolicyCategory[] | Record; customPolicies?: Array<{ name: string; pattern: string; flags?: string; replacement?: string; mode?: RedactionMode; }>; globalMode?: RedactionMode; preserveLength?: boolean; preserveFormat?: boolean; hashOptions?: { algorithm?: HashAlgorithm; salt?: string; encoding?: "hex" | "base64" | "base64url"; }; encryptOptions?: { algorithm?: string; key?: string; iv?: string; }; performance?: { maximumInputSize?: number; timeout?: number; cachePatterns?: boolean; streamThreshold?: number; }; security?: { preventRegexDos?: boolean; maximumPatternLength?: number; maximumCustomPatterns?: number; auditLog?: boolean; }; locale?: string | string[]; detectLanguage?: boolean; } interface ResolvedConfig extends Required> { categories: Map; customPolicies: Array<{ name: string; pattern: RegExp; replacement: string; mode: RedactionMode; }>; hashOptions: Required>; encryptOptions: NonNullable; performance: Required>; security: Required>; } interface ConfigLoaderOptions { configPath?: string; searchPaths?: string[]; env?: string; preset?: string; stopOnFirstFound?: boolean; mergeExtends?: boolean; allowEnvironmentOverrides?: boolean; } interface ConfigValidationError { path: string; message: string; value?: unknown; } /** * Redacts sensitive information from text using built-in and custom policies. * * @public * @param text - The input text to redact * @param options - Configuration options for redaction behavior * @returns Result object containing the redacted text, findings, and statistics * @example * ```typescript * const result = redactum("Email: john@example.com"); * console.log(result.redactedText); * ``` * @example * ```typescript * const result = redactum("SSN: 123-45-6789", { * replacement: "***", * preserveLength: true * }); * ``` */ declare function redactum(text: string, options?: RedactumOptions): RedactumResult; /** * Returns the list of enabled policy names based on the provided options. * * @public * @param options - Configuration options to determine which policies are enabled * @returns Array of enabled policy names * @example * ```typescript * const policies = redactumGetEnabledPolicies({ * policies: ["EMAIL_ADDRESS", "PHONE_NUMBER_US"] * }); * console.log(policies); * ``` */ declare function redactumGetEnabledPolicies(options?: RedactumOptions): PolicyName[]; /** * Returns the list of enabled policy categories based on the provided options. * * @public * @param options - Configuration options to determine which categories are enabled * @returns Array of enabled policy categories * @example * ```typescript * const categories = redactumGetEnabledCategories({ * policies: ["EMAIL_ADDRESS", "PHONE_NUMBER_US", "PHONE_NUMBER_UK"] * }); * console.log(categories); * ``` */ declare function redactumGetEnabledCategories(options?: RedactumOptions): PolicyCategory[]; /** * Returns the complete list of patterns (built-in and custom) that will be used for redaction. * * @public * @param options - Configuration options to determine which patterns are included * @returns Array of policy patterns * @example * ```typescript * const patterns = redactumGetPatterns({ * policies: ["EMAIL_ADDRESS"], * customPolicies: [{ * name: "EMPLOYEE_ID", * pattern: /EMP-\d{6}/g, * category: PolicyCategory.CUSTOM * }] * }); * ``` */ declare function redactumGetPatterns(options?: RedactumOptions): Policy[]; /** * Redacts text using configuration loaded from a file. * * @public * @param text - The input text to redact * @param configOptions - Options for loading the configuration file * @returns Promise resolving to result object with redacted text, findings, and statistics * @example * ```typescript * const result = await redactumFromConfig("Email: john@example.com", { * configPath: "./redactum.config.json" * }); * ``` */ declare function redactumFromConfig(text: string, configOptions?: ConfigLoaderOptions): Promise; /** * Redacts multiple texts efficiently using the same configuration. * * @public * @param texts - Array of input texts to redact * @param options - Configuration options for redaction behavior * @returns Array of result objects, one for each input text * @example * ```typescript * const messages = [ * "Support ticket from sarah.chen@company.io", * "Customer callback: +44 20 7946 0958" * ]; * const results = redactumBatch(messages); * const redactedMessages = results.map(r => r.redactedText); * ``` */ declare function redactumBatch(texts: string[], options?: RedactumOptions): RedactumResult[]; /** * Returns all 180+ built-in policies available in Redactum. * * @public * @returns Array of all built-in policy patterns * @example * ```typescript * const allPatterns = redactumGetAllPatterns(); * console.log(`Total patterns: ${allPatterns.length}`); * ``` */ declare function redactumGetAllPatterns(): Policy[]; /** * Stateful redactor instance with methods for managing custom patterns and options. * * @public */ type RedactumInstance = { /** * Redact text using the instance's configuration. * @param text - The input text to redact * @returns Result object containing the redacted text, findings, and statistics */ redactum: (text: string) => RedactumResult; /** * Add a custom pattern to the instance. * @param pattern - The custom policy pattern to add */ addCustomPattern: (pattern: Policy) => void; /** * Remove a custom pattern from the instance. * @param name - The name of the pattern to remove * @returns True if the pattern was removed, false if it didn't exist */ removeCustomPattern: (name: string) => boolean; /** * Update the instance's options. * @param options - Partial options to merge with current configuration */ updateOptions: (options: Partial) => void; /** * Get all patterns (built-in and custom) for the instance. * @returns Array of policy patterns */ getPatterns: () => Policy[]; /** * Get enabled categories for the instance. * @returns Array of enabled policy categories */ getEnabledCategories: () => PolicyCategory[]; }; /** * Creates a stateful redactor instance with methods for managing custom patterns and options. * * @public * @param options - Initial configuration options * @returns Redactor instance with methods for redaction and configuration management * @example * ```typescript * const redactor = createRedactum({ * policies: ["EMAIL_ADDRESS", "PHONE_NUMBER_US"] * }); * * redactor.addCustomPattern({ * name: "EMPLOYEE_ID", * pattern: /EMP-\d{6}/g, * category: PolicyCategory.CUSTOM * }); * * const result = redactor.redactum("Employee EMP-123456 email: john@example.com"); * ``` */ declare function createRedactum(options?: RedactumOptions): RedactumInstance; declare const DEFAULT_REPLACEMENT = "[REDACTED]"; declare const POLICIES: Policy[]; declare const DEFAULT_ENABLED_CATEGORIES: (PolicyCategory.EMAIL | PolicyCategory.PHONE | PolicyCategory.SSN | PolicyCategory.IP_ADDRESS | PolicyCategory.API_KEY | PolicyCategory.AWS_KEY | PolicyCategory.PRIVATE_KEY | PolicyCategory.ADDRESS | PolicyCategory.GOVERNMENT_ID | PolicyCategory.TAX_IDENTIFIER | PolicyCategory.INSURANCE | PolicyCategory.FINANCIAL | PolicyCategory.MEDICAL | PolicyCategory.DIGITAL_IDENTITY | PolicyCategory.GEOGRAPHIC | PolicyCategory.EMPLOYEE_ID | PolicyCategory.VEHICLE | PolicyCategory.DEV_SECRET | PolicyCategory.DEV_IDENTIFIER | PolicyCategory.CLOUD_CREDENTIALS | PolicyCategory.CI_CD_SECRETS | PolicyCategory.PACKAGE_REGISTRY | PolicyCategory.DATABASE_CREDENTIALS | PolicyCategory.MONITORING_SECRETS | PolicyCategory.AUTH_SECRETS | PolicyCategory.MESSAGING_SECRETS | PolicyCategory.WEBHOOK_URLS | PolicyCategory.ENCRYPTION_KEYS | PolicyCategory.CONTAINER_REGISTRY | PolicyCategory.INFRASTRUCTURE_SECRETS)[]; /** * Calculates Shannon entropy of a string to measure randomness. * * @public * @param text - The text to calculate entropy for * @returns Entropy value between 0 and 8 (higher means more random) * @example * ```typescript * const entropy = redactumCalculateEntropy("abc123"); * console.log(entropy); * ``` */ declare function redactumCalculateEntropy(text: string): number; /** * Heuristic check to determine if a string looks like a secret or API key. * * @public * @param text - The text to analyze * @param minLength - Minimum length to consider (default: 16) * @param entropyThreshold - Entropy threshold for randomness (default: 4.5) * @returns True if the text appears to be a secret * @example * ```typescript * const isSecret = redactumLooksLikeSecret("sk_live_4eC39HqLyjWDarjtT1zdp7dc"); * console.log(isSecret); * ``` */ declare function redactumLooksLikeSecret(text: string, minLength?: number, entropyThreshold?: number): boolean; /** * Validates Redactum configuration options. * * @public * @param options - The options object to validate * @throws Error if options are invalid * @example * ```typescript * redactumValidateOptions({ * policies: ["EMAIL_ADDRESS", "SSN"], * replacement: "***" * }); * ``` */ declare function redactumValidateOptions(options: RedactumOptions): void; /** * Validates a custom policy pattern. * * @public * @param pattern - The policy pattern to validate * @throws Error if the pattern is invalid * @example * ```typescript * redactumValidatePolicy({ * name: "EMPLOYEE_ID", * pattern: /EMP-\d{6}/g, * category: PolicyCategory.CUSTOM * }); * ``` */ declare function redactumValidatePolicy(pattern: Policy): void; declare function loadConfig(options?: ConfigLoaderOptions): Promise; declare function getDefaultConfig(): ResolvedConfig; declare const CONFIG_FILE_NAMES: string[]; interface ValidationResult { valid: boolean; errors: ConfigValidationError[]; } declare function validateConfig(config: RedactionConfig): ValidationResult; type MergeableConfig = RedactionConfig & Partial; declare function mergeConfigs(base: MergeableConfig, override: MergeableConfig): MergeableConfig; /** * Loads and caches Redactum configuration from files or defaults. * * @public * @param options - Options for loading configuration * @returns Promise resolving to the resolved configuration * @example * ```typescript * const config = await getConfig({ * configPath: "./redactum.config.json" * }); * ``` */ declare function getConfig(options?: ConfigLoaderOptions): Promise; /** * Clears the cached configuration, forcing a reload on next access. * * @public * @example * ```typescript * clearConfigCache(); * const newConfig = await getConfig(); * ``` */ declare function clearConfigCache(): void; interface UniversalRedactionConfig extends RedactumOptions { includeFindings?: boolean; metadataKeys?: string[]; metadataTransformer?: (metadata: Record, findings: unknown[]) => Record; providerOptions?: Record; } interface UniversalRedactionResult { content: T; redactionResult: RedactumResult; providerMetadata?: Record; processingTime: number; } declare class UniversalProvider { private redactor; private config; constructor(config?: UniversalRedactionConfig); redact(input: unknown): UniversalRedactionResult; redactBatch(inputs: unknown[]): Promise; updateConfig(newConfig: Partial): void; getConfig(): UniversalRedactionConfig; private extractContent; private redactMetadata; private transformMetadata; private normalizeConfig; } declare abstract class BaseAdapter { protected provider: UniversalProvider; abstract readonly providerName: string; abstract readonly version: string; constructor(config?: UniversalRedactionConfig); abstract transform(input: TInput): Promise | TOutput; updateConfig(newConfig: Partial): void; getConfig(): UniversalRedactionConfig; } interface Document { pageContent: string; metadata: Record; id?: string; } declare class LangChainAdapter extends BaseAdapter { readonly providerName = "langchain"; readonly version = "3.0.0"; transform(input: Document[] | string): Promise; createDocumentTransformer(): (documents: Document[]) => Promise; createRunnable(): Promise; createRunnableWithMetadata(): Promise; createDocumentTransform(): Promise; } declare function createLangChainAdapter(config?: UniversalRedactionConfig): LangChainAdapter; interface BaseNode { getText(): string; clone(options?: { text?: string; metadata?: Record; }): BaseNode; getMetadata(): Record; getNodeId(): string; setContent(content: string): void; } interface NodeTransformation { transform(nodes: BaseNode[]): Promise; } declare class LlamaIndexAdapter extends BaseAdapter { readonly providerName = "llamaindex"; readonly version = "5.0.0"; transform(input: BaseNode[] | string): Promise; createNodeTransformer(): { transform: (nodes: BaseNode[]) => Promise; }; createTransformComponent(): { transformNodes: (nodes: BaseNode[]) => Promise; }; createTransformation(): Promise; createPreprocessor(): Promise; } declare function createLlamaIndexAdapter(config?: UniversalRedactionConfig): LlamaIndexAdapter; interface StreamTextOptions { model: unknown; prompt: string; messages?: Array<{ role: string; content: string; }>; system?: string; maxTokens?: number; temperature?: number; [key: string]: unknown; } interface StreamObjectOptions { model: unknown; prompt: string; schema: unknown; system?: string; [key: string]: unknown; } interface GenerateTextOptions { model: unknown; prompt?: string; messages?: Array<{ role: string; content: string; }>; system?: string; tools?: Record; [key: string]: unknown; } interface Tool { description?: string; parameters: unknown; execute: (params: unknown) => Promise | unknown; } declare class VercelAIAdapter extends BaseAdapter { readonly providerName = "vercel-ai"; readonly version = "3.0.0"; transform(input: unknown): Promise; createStreamingWrapper(): { streamText: (options: StreamTextOptions) => Promise; streamObject: (options: StreamObjectOptions) => Promise; generateText: (options: GenerateTextOptions) => Promise; }; createToolWrapper(tools: Record): Record; createMessageCleaner(): { cleanMessage: (message: { role: string; content: string; }) => { role: string; content: string; }; cleanMessages: (messages: Array<{ role: string; content: string; }>) => Array<{ role: string; content: string; }>; }; } declare function createVercelAIAdapter(config?: UniversalRedactionConfig): VercelAIAdapter; interface ChatMessage { role: "system" | "user" | "assistant" | "tool" | "function"; content: string | null; name?: string; tool_calls?: unknown[]; tool_call_id?: string; } interface ChatCompletionOptions { model: string; messages: ChatMessage[]; functions?: unknown[]; tools?: unknown[]; temperature?: number; max_tokens?: number; [key: string]: unknown; } interface CompletionOptions$1 { model: string; prompt: string | string[]; max_tokens?: number; temperature?: number; [key: string]: unknown; } interface EmbeddingOptions { model: string; input: string | string[]; [key: string]: unknown; } interface AssistantMessage { role: "user" | "assistant"; content: string; file_ids?: string[]; metadata?: Record; } declare class OpenAIAdapter extends BaseAdapter { readonly providerName = "openai"; readonly version = "4.0.0"; transform(input: unknown): Promise; createClientWrapper(openai: unknown): { chat: { completions: { create: (options: ChatCompletionOptions) => Promise; }; }; completions: { create: (options: CompletionOptions$1) => Promise; }; embeddings: { create: (options: EmbeddingOptions) => Promise; }; }; createAssistantWrapper(openai: unknown): { beta: { threads: { messages: { create: (threadId: string, message: AssistantMessage) => Promise; }; runs: { create: (threadId: string, options: { assistant_id: string; instructions?: string; [key: string]: unknown; }) => Promise; }; }; }; }; createFunctionCallCleaner(): { cleanFunctionCall: (functionCall: { name: string; arguments: string; }) => { name: string; arguments: string; }; cleanToolCall: (toolCall: { function: { name: string; arguments: string; }; [key: string]: unknown; }) => { function: { name: string; arguments: string; }; [key: string]: unknown; }; }; createMessageProcessor(): { processMessages: (messages: ChatMessage[]) => ChatMessage[]; processSystemMessage: (content: string) => string; processUserMessage: (content: string) => string; }; } declare function createOpenAIAdapter(config?: UniversalRedactionConfig): OpenAIAdapter; interface ClaudeMessage { role: "user" | "assistant"; content: string | Array<{ type: string; text?: string; [key: string]: unknown; }>; } interface MessageOptions { model: string; messages: ClaudeMessage[]; system?: string; max_tokens: number; temperature?: number; tools?: unknown[]; tool_choice?: unknown; [key: string]: unknown; } interface CompletionOptions { model: string; prompt: string; max_tokens_to_sample: number; temperature?: number; [key: string]: unknown; } declare class AnthropicAdapter extends BaseAdapter { readonly providerName = "anthropic"; readonly version = "0.24.0"; transform(input: unknown): Promise; createClientWrapper(anthropic: unknown): { messages: { create: (options: MessageOptions) => Promise; stream: (options: MessageOptions) => Promise; }; completions: { create: (options: CompletionOptions) => Promise; }; }; private processContent; createToolCallProcessor(): { processToolCall: (toolCall: { name: string; input: Record; }) => { name: string; input: Record; }; }; createMessageProcessor(): { processMessage: (message: ClaudeMessage) => ClaudeMessage; processMessages: (messages: ClaudeMessage[]) => ClaudeMessage[]; processSystemPrompt: (system: string) => string; }; createConversationCleaner(): { cleanConversation: (messages: ClaudeMessage[], systemPrompt?: string) => { messages: ClaudeMessage[]; system?: string; }; }; createStreamingWrapper(): { createStreamingMessage: (options: MessageOptions) => Promise; }; } declare function createAnthropicAdapter(config?: UniversalRedactionConfig): AnthropicAdapter; export { CONFIG_FILE_NAMES, type CategoryConfig, type ConfigFile, type ConfigLoaderOptions, DEFAULT_ENABLED_CATEGORIES, DEFAULT_REPLACEMENT, type HashAlgorithm, POLICIES, Policies, type Policy, PolicyCategory, type PolicyName, type RedactionConfig, type RedactionMode, type RedactumConfig, type RedactumFinding, type RedactumOptions, type RedactumResult, type RedactumStats, type ResolvedConfig, UniversalProvider, type UniversalRedactionConfig, type UniversalRedactionResult, clearConfigCache, createAnthropicAdapter, createLangChainAdapter, createLlamaIndexAdapter, createOpenAIAdapter, createRedactum, createVercelAIAdapter, getConfig, getDefaultConfig, loadConfig, mergeConfigs, redactum, redactumBatch, redactumCalculateEntropy, redactumFromConfig, redactumGetAllPatterns, redactumGetEnabledCategories, redactumGetEnabledPolicies, redactumGetPatterns, redactumLooksLikeSecret, redactumValidateOptions, redactumValidatePolicy, validateConfig };