{"version":3,"sources":["../node_modules/.pnpm/tsup@8.5.0_jiti@2.5.1_postcss@8.5.6_tsx@4.20.5_typescript@5.9.2_yaml@2.8.1/node_modules/tsup/assets/cjs_shims.js","../src/types/index.ts","../src/config/defaults.ts","../src/config/validator.ts","../src/config/merger.ts","../src/config/loader.ts","../src/index.ts","../src/core/redactum.ts","../src/constants.ts","../src/config/index.ts","../src/utils/validation.ts","../src/utils/entropy.ts","../src/providers/index.ts","../src/providers/universal-provider.ts","../src/providers/adapters/langchain-adapter.ts","../src/providers/adapters/base-adapter.ts","../src/providers/adapters/llamaindex-adapter.ts","../src/providers/adapters/vercel-ai-adapter.ts","../src/providers/adapters/openai-adapter.ts","../src/providers/adapters/anthropic-adapter.ts"],"names":["PolicyCategory","Policies","CONFIG_FILE_NAMES","__dirname","dirname","fileURLToPath","join","fs","resolve","parseYAML","pathToFileURL","envConfig","config"],"mappings":"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","file":"index.cjs","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n  typeof document === 'undefined'\n    ? new URL(`file:${__filename}`).href\n    : (document.currentScript && document.currentScript.src) ||\n      new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","export enum PolicyCategory {\n  EMAIL = \"EMAIL\",\n  PHONE = \"PHONE\",\n  SSN = \"SSN\",\n  IP_ADDRESS = \"IP_ADDRESS\",\n  API_KEY = \"API_KEY\",\n  AWS_KEY = \"AWS_KEY\",\n  PRIVATE_KEY = \"PRIVATE_KEY\",\n  ADDRESS = \"ADDRESS\",\n  GOVERNMENT_ID = \"GOVERNMENT_ID\",\n  TAX_IDENTIFIER = \"TAX_IDENTIFIER\",\n  INSURANCE = \"INSURANCE\",\n  FINANCIAL = \"FINANCIAL\",\n  MEDICAL = \"MEDICAL\",\n  DIGITAL_IDENTITY = \"DIGITAL_IDENTITY\",\n  GEOGRAPHIC = \"GEOGRAPHIC\",\n  EMPLOYEE_ID = \"EMPLOYEE_ID\",\n  VEHICLE = \"VEHICLE\",\n  DEV_SECRET = \"DEV_SECRET\",\n  DEV_IDENTIFIER = \"DEV_IDENTIFIER\",\n  CLOUD_CREDENTIALS = \"CLOUD_CREDENTIALS\",\n  CI_CD_SECRETS = \"CI_CD_SECRETS\",\n  PACKAGE_REGISTRY = \"PACKAGE_REGISTRY\",\n  DATABASE_CREDENTIALS = \"DATABASE_CREDENTIALS\",\n  MONITORING_SECRETS = \"MONITORING_SECRETS\",\n  AUTH_SECRETS = \"AUTH_SECRETS\",\n  MESSAGING_SECRETS = \"MESSAGING_SECRETS\",\n  WEBHOOK_URLS = \"WEBHOOK_URLS\",\n  ENCRYPTION_KEYS = \"ENCRYPTION_KEYS\",\n  CONTAINER_REGISTRY = \"CONTAINER_REGISTRY\",\n  INFRASTRUCTURE_SECRETS = \"INFRASTRUCTURE_SECRETS\",\n  CUSTOM = \"CUSTOM\",\n}\n\nexport interface Policy<TName extends string = string> {\n  readonly name: TName;\n  readonly pattern: RegExp;\n  readonly category: PolicyCategory;\n  readonly replacement?: string;\n}\n\nexport const Policies = {\n  EMAIL_ADDRESS: \"EMAIL_ADDRESS\",\n  PHONE_NUMBER_US: \"PHONE_NUMBER_US\",\n  PHONE_NUMBER_INTERNATIONAL: \"PHONE_NUMBER_INTERNATIONAL\",\n  PHONE_NUMBER_UK: \"PHONE_NUMBER_UK\",\n  PHONE_NUMBER_CANADIAN: \"PHONE_NUMBER_CANADIAN\",\n  SSN: \"SSN\",\n  CREDIT_CARD: \"CREDIT_CARD\",\n  IPV4_ADDRESS: \"IPV4_ADDRESS\",\n  IPV6_ADDRESS: \"IPV6_ADDRESS\",\n  MAC_ADDRESS: \"MAC_ADDRESS\",\n  UUID: \"UUID\",\n  PASSPORT_NUMBER: \"PASSPORT_NUMBER\",\n  DRIVER_LICENSE: \"DRIVER_LICENSE\",\n  VIN: \"VIN\",\n  ROUTING_NUMBER_US: \"ROUTING_NUMBER_US\",\n  IBAN: \"IBAN\",\n  SWIFT_CODE: \"SWIFT_CODE\",\n  ACCOUNT_NUMBER_US: \"ACCOUNT_NUMBER_US\",\n  ACH_ROUTING_NUMBER: \"ACH_ROUTING_NUMBER\",\n  CREDIT_CARD_CVV: \"CREDIT_CARD_CVV\",\n  BITCOIN_ADDRESS: \"BITCOIN_ADDRESS\",\n  ETHEREUM_ADDRESS: \"ETHEREUM_ADDRESS\",\n  MEDICAL_RECORD_NUMBER: \"MEDICAL_RECORD_NUMBER\",\n  HEALTH_INSURANCE_ID: \"HEALTH_INSURANCE_ID\",\n  URL_WITH_CREDENTIALS: \"URL_WITH_CREDENTIALS\",\n  JWT_TOKEN: \"JWT_TOKEN\",\n  BASE64_URL_PARAM: \"BASE64_URL_PARAM\",\n  API_KEY_GENERIC: \"API_KEY_GENERIC\",\n  BASIC_AUTH_HEADER: \"BASIC_AUTH_HEADER\",\n  BEARER_TOKEN_HEADER: \"BEARER_TOKEN_HEADER\",\n  API_KEY_HEADER: \"API_KEY_HEADER\",\n  SESSION_ID_COOKIE: \"SESSION_ID_COOKIE\",\n  AWS_ACCESS_KEY: \"AWS_ACCESS_KEY\",\n  AWS_SECRET_KEY: \"AWS_SECRET_KEY\",\n  AWS_SESSION_TOKEN: \"AWS_SESSION_TOKEN\",\n  GOOGLE_API_KEY: \"GOOGLE_API_KEY\",\n  OPENAI_API_KEY: \"OPENAI_API_KEY\",\n  ANTHROPIC_API_KEY: \"ANTHROPIC_API_KEY\",\n  GITHUB_TOKEN: \"GITHUB_TOKEN\",\n  GITHUB_FINE_GRAINED_TOKEN: \"GITHUB_FINE_GRAINED_TOKEN\",\n  GITLAB_TOKEN: \"GITLAB_TOKEN\",\n  BITBUCKET_TOKEN: \"BITBUCKET_TOKEN\",\n  AZURE_SUBSCRIPTION_ID: \"AZURE_SUBSCRIPTION_ID\",\n  AZURE_CLIENT_ID: \"AZURE_CLIENT_ID\",\n  AZURE_TENANT_ID: \"AZURE_TENANT_ID\",\n  AWS_ACCOUNT_ID: \"AWS_ACCOUNT_ID\",\n  GCP_API_KEY: \"GCP_API_KEY\",\n  AZURE_STORAGE_CONNECTION_STRING: \"AZURE_STORAGE_CONNECTION_STRING\",\n  DOCKER_HUB_TOKEN: \"DOCKER_HUB_TOKEN\",\n  DOCKER_REGISTRY_TOKEN: \"DOCKER_REGISTRY_TOKEN\",\n  DOCKER_PASSWORD_FLAG: \"DOCKER_PASSWORD_FLAG\",\n  NPM_TOKEN: \"NPM_TOKEN\",\n  PYPI_TOKEN: \"PYPI_TOKEN\",\n  RUBYGEMS_API_KEY: \"RUBYGEMS_API_KEY\",\n  SLACK_WEBHOOK: \"SLACK_WEBHOOK\",\n  SLACK_TOKEN: \"SLACK_TOKEN\",\n  DISCORD_TOKEN: \"DISCORD_TOKEN\",\n  DISCORD_WEBHOOK: \"DISCORD_WEBHOOK\",\n  TWILIO_ACCOUNT_SID: \"TWILIO_ACCOUNT_SID\",\n  TWILIO_AUTH_TOKEN: \"TWILIO_AUTH_TOKEN\",\n  TWILIO_API_KEY: \"TWILIO_API_KEY\",\n  SENDGRID_API_KEY: \"SENDGRID_API_KEY\",\n  STRIPE_KEY: \"STRIPE_KEY\",\n  SQUARE_ACCESS_TOKEN: \"SQUARE_ACCESS_TOKEN\",\n  PAYPAL_CLIENT_ID: \"PAYPAL_CLIENT_ID\",\n  BRAINTREE_ACCESS_TOKEN: \"BRAINTREE_ACCESS_TOKEN\",\n  MAILGUN_API_KEY: \"MAILGUN_API_KEY\",\n  MAILCHIMP_API_KEY: \"MAILCHIMP_API_KEY\",\n  FIREBASE_API_KEY: \"FIREBASE_API_KEY\",\n  FIREBASE_CONFIG: \"FIREBASE_CONFIG\",\n  SUPABASE_API_KEY: \"SUPABASE_API_KEY\",\n  SUPABASE_URL: \"SUPABASE_URL\",\n  NETLIFY_ACCESS_TOKEN: \"NETLIFY_ACCESS_TOKEN\",\n  NETLIFY_SITE_ID: \"NETLIFY_SITE_ID\",\n  HEROKU_API_KEY: \"HEROKU_API_KEY\",\n  DIGITALOCEAN_TOKEN: \"DIGITALOCEAN_TOKEN\",\n  LINODE_API_TOKEN: \"LINODE_API_TOKEN\",\n  VULTR_API_KEY: \"VULTR_API_KEY\",\n  MONGODB_CONNECTION_STRING: \"MONGODB_CONNECTION_STRING\",\n  POSTGRESQL_CONNECTION_STRING: \"POSTGRESQL_CONNECTION_STRING\",\n  MYSQL_CONNECTION_STRING: \"MYSQL_CONNECTION_STRING\",\n  REDIS_CONNECTION_STRING: \"REDIS_CONNECTION_STRING\",\n  ELASTICSEARCH_URL: \"ELASTICSEARCH_URL\",\n  RABBITMQ_CONNECTION_STRING: \"RABBITMQ_CONNECTION_STRING\",\n  KAFKA_CONNECTION_STRING: \"KAFKA_CONNECTION_STRING\",\n  CASSANDRA_CONNECTION_STRING: \"CASSANDRA_CONNECTION_STRING\",\n  DATABASE_CONNECTION_STRING: \"DATABASE_CONNECTION_STRING\",\n  DATABASE_URL: \"DATABASE_URL\",\n  LDAP_CONNECTION_STRING: \"LDAP_CONNECTION_STRING\",\n  JDBC_CONNECTION_STRING: \"JDBC_CONNECTION_STRING\",\n  SMTP_CONNECTION_STRING: \"SMTP_CONNECTION_STRING\",\n  SSH_PRIVATE_KEY: \"SSH_PRIVATE_KEY\",\n  RSA_PRIVATE_KEY: \"RSA_PRIVATE_KEY\",\n  EC_PRIVATE_KEY: \"EC_PRIVATE_KEY\",\n  OPENSSH_PRIVATE_KEY: \"OPENSSH_PRIVATE_KEY\",\n  GENERIC_PRIVATE_KEY: \"GENERIC_PRIVATE_KEY\",\n  PGP_PRIVATE_KEY: \"PGP_PRIVATE_KEY\",\n  BASE64_ENCODED_SECRET: \"BASE64_ENCODED_SECRET\",\n  HEX_ENCODED_SECRET: \"HEX_ENCODED_SECRET\",\n  GENERIC_SECRET: \"GENERIC_SECRET\",\n  GENERIC_TOKEN: \"GENERIC_TOKEN\",\n  GENERIC_CREDENTIAL: \"GENERIC_CREDENTIAL\",\n  GENERIC_PASSWORD: \"GENERIC_PASSWORD\",\n  PASSWORD_ASSIGNMENT: \"PASSWORD_ASSIGNMENT\",\n  CERTIFICATE: \"CERTIFICATE\",\n  ENVIRONMENT_VARIABLE_SECRET: \"ENVIRONMENT_VARIABLE_SECRET\",\n  DOCKER_REGISTRY_AUTH: \"DOCKER_REGISTRY_AUTH\",\n  KUBERNETES_SECRET: \"KUBERNETES_SECRET\",\n  TERRAFORM_VARIABLE: \"TERRAFORM_VARIABLE\",\n  ANSIBLE_VAULT: \"ANSIBLE_VAULT\",\n  ANSIBLE_VAULT_PASSWORD: \"ANSIBLE_VAULT_PASSWORD\",\n  AETNA_MEMBER_ID: \"AETNA_MEMBER_ID\",\n  BCBS_MEMBER_ID: \"BCBS_MEMBER_ID\",\n  UNITEDHEALTH_MEMBER_ID: \"UNITEDHEALTH_MEMBER_ID\",\n  UK_NHS_NUMBER: \"UK_NHS_NUMBER\",\n  CANADIAN_HEALTH_CARD: \"CANADIAN_HEALTH_CARD\",\n  AUSTRALIAN_MEDICARE_NUMBER: \"AUSTRALIAN_MEDICARE_NUMBER\",\n  GERMAN_HEALTH_INSURANCE_NUMBER: \"GERMAN_HEALTH_INSURANCE_NUMBER\",\n  FRENCH_SOCIAL_SECURITY_NUMBER: \"FRENCH_SOCIAL_SECURITY_NUMBER\",\n  EUROPEAN_HEALTH_INSURANCE_CARD: \"EUROPEAN_HEALTH_INSURANCE_CARD\",\n  MEDICARE_NUMBER_US: \"MEDICARE_NUMBER_US\",\n  MEDICAID_NUMBER_US: \"MEDICAID_NUMBER_US\",\n  US_HEALTH_INSURANCE_POLICY: \"US_HEALTH_INSURANCE_POLICY\",\n  US_INSURANCE_GROUP_NUMBER: \"US_INSURANCE_GROUP_NUMBER\",\n  US_INSURANCE_CLAIM_NUMBER: \"US_INSURANCE_CLAIM_NUMBER\",\n  AUTO_INSURANCE_POLICY: \"AUTO_INSURANCE_POLICY\",\n  HOME_INSURANCE_POLICY: \"HOME_INSURANCE_POLICY\",\n  LIFE_INSURANCE_POLICY: \"LIFE_INSURANCE_POLICY\",\n  TRAVEL_INSURANCE_POLICY: \"TRAVEL_INSURANCE_POLICY\",\n  WORKERS_COMPENSATION_CLAIM: \"WORKERS_COMPENSATION_CLAIM\",\n  DISABILITY_INSURANCE_POLICY: \"DISABILITY_INSURANCE_POLICY\",\n  DENTAL_INSURANCE_POLICY: \"DENTAL_INSURANCE_POLICY\",\n  VISION_INSURANCE_POLICY: \"VISION_INSURANCE_POLICY\",\n  US_ZIP_CODE: \"US_ZIP_CODE\",\n  CANADIAN_POSTAL_CODE: \"CANADIAN_POSTAL_CODE\",\n  UK_POSTCODE: \"UK_POSTCODE\",\n  GPS_COORDINATES: \"GPS_COORDINATES\",\n  US_DRIVER_LICENSE: \"US_DRIVER_LICENSE\",\n  US_PASSPORT_NUMBER: \"US_PASSPORT_NUMBER\",\n  NATIONAL_ID: \"NATIONAL_ID\",\n  PASSPORT_MRZ: \"PASSPORT_MRZ\",\n  ITIN: \"ITIN\",\n  US_EIN_WITH_LABEL: \"US_EIN_WITH_LABEL\",\n  US_EIN_PREFIXED: \"US_EIN_PREFIXED\",\n  US_TIN_WITH_LABEL: \"US_TIN_WITH_LABEL\",\n  US_EIN: \"US_EIN\",\n  UK_VAT_NUMBER: \"UK_VAT_NUMBER\",\n  EU_VAT_NUMBER: \"EU_VAT_NUMBER\",\n  CANADIAN_BUSINESS_NUMBER: \"CANADIAN_BUSINESS_NUMBER\",\n  AUSTRALIAN_ABN: \"AUSTRALIAN_ABN\",\n  GERMAN_TAX_NUMBER: \"GERMAN_TAX_NUMBER\",\n  FRENCH_SIRET_NUMBER: \"FRENCH_SIRET_NUMBER\",\n  FRENCH_SIREN_NUMBER: \"FRENCH_SIREN_NUMBER\",\n  EMPLOYEE_ID: \"EMPLOYEE_ID\",\n  US_LICENSE_PLATE: \"US_LICENSE_PLATE\",\n  GOOGLE_CLOUD_PROJECT_ID: \"GOOGLE_CLOUD_PROJECT_ID\",\n  KAFKA_BOOTSTRAP_SERVER: \"KAFKA_BOOTSTRAP_SERVER\",\n  CONTAINER_REGISTRY: \"CONTAINER_REGISTRY\",\n  GIT_SSH_URL: \"GIT_SSH_URL\",\n  API_ENDPOINT_URL: \"API_ENDPOINT_URL\",\n  BUILD_NUMBER: \"BUILD_NUMBER\",\n  VERSION_TAG: \"VERSION_TAG\",\n  COMMIT_HASH: \"COMMIT_HASH\",\n  PR_ISSUE_NUMBER: \"PR_ISSUE_NUMBER\",\n  JIRA_TICKET: \"JIRA_TICKET\",\n  AUTH0_DOMAIN: \"AUTH0_DOMAIN\",\n  VERCEL_DEPLOYMENT_URL: \"VERCEL_DEPLOYMENT_URL\",\n  SERVICE_ACCOUNT_EMAIL: \"SERVICE_ACCOUNT_EMAIL\",\n  WEBHOOK_URL: \"WEBHOOK_URL\",\n  OAUTH_CLIENT_ID: \"OAUTH_CLIENT_ID\",\n  OAUTH_CLIENT_SECRET: \"OAUTH_CLIENT_SECRET\",\n  OAUTH_REFRESH_TOKEN: \"OAUTH_REFRESH_TOKEN\",\n  OAUTH_ACCESS_TOKEN: \"OAUTH_ACCESS_TOKEN\",\n  OKTA_API_TOKEN: \"OKTA_API_TOKEN\",\n  AUTH0_API_TOKEN: \"AUTH0_API_TOKEN\",\n  KEYCLOAK_CLIENT_SECRET: \"KEYCLOAK_CLIENT_SECRET\",\n  SHA_HASH: \"SHA_HASH\",\n  JENKINS_TOKEN: \"JENKINS_TOKEN\",\n  CIRCLECI_TOKEN: \"CIRCLECI_TOKEN\",\n  TRAVIS_CI_TOKEN: \"TRAVIS_CI_TOKEN\",\n  GITLAB_CI_TOKEN: \"GITLAB_CI_TOKEN\",\n  AZURE_DEVOPS_TOKEN: \"AZURE_DEVOPS_TOKEN\",\n  BITBUCKET_TOKEN_ALT: \"BITBUCKET_TOKEN_ALT\",\n  SENTRY_DSN: \"SENTRY_DSN\",\n  NEW_RELIC_LICENSE_KEY: \"NEW_RELIC_LICENSE_KEY\",\n  DATADOG_API_KEY: \"DATADOG_API_KEY\",\n  PAGERDUTY_INTEGRATION_KEY: \"PAGERDUTY_INTEGRATION_KEY\",\n  GRAFANA_API_KEY: \"GRAFANA_API_KEY\",\n  PROMETHEUS_REMOTE_WRITE: \"PROMETHEUS_REMOTE_WRITE\",\n  SPLUNK_HEC_TOKEN: \"SPLUNK_HEC_TOKEN\",\n  SUMO_LOGIC_COLLECTOR: \"SUMO_LOGIC_COLLECTOR\",\n  BUGSNAG_API_KEY: \"BUGSNAG_API_KEY\",\n  ROLLBAR_ACCESS_TOKEN: \"ROLLBAR_ACCESS_TOKEN\",\n  AIRBRAKE_API_KEY: \"AIRBRAKE_API_KEY\",\n  LOGDNA_INGESTION_KEY: \"LOGDNA_INGESTION_KEY\",\n  LOGGLY_TOKEN: \"LOGGLY_TOKEN\",\n  PAPERTRAIL_TOKEN: \"PAPERTRAIL_TOKEN\",\n  TERRAFORM_CLOUD_TOKEN: \"TERRAFORM_CLOUD_TOKEN\",\n  HASHICORP_VAULT_TOKEN: \"HASHICORP_VAULT_TOKEN\",\n  AWS_SECRETS_MANAGER_ARN: \"AWS_SECRETS_MANAGER_ARN\",\n  AZURE_KEY_VAULT_SECRET: \"AZURE_KEY_VAULT_SECRET\",\n  GCP_SECRET_MANAGER: \"GCP_SECRET_MANAGER\",\n  KUBERNETES_CONFIG: \"KUBERNETES_CONFIG\",\n  HELM_REPOSITORY_CREDENTIALS: \"HELM_REPOSITORY_CREDENTIALS\",\n  CONSUL_TOKEN: \"CONSUL_TOKEN\",\n  RANCHER_TOKEN: \"RANCHER_TOKEN\",\n  QUAY_IO_TOKEN: \"QUAY_IO_TOKEN\",\n  JFROG_ARTIFACTORY_TOKEN: \"JFROG_ARTIFACTORY_TOKEN\",\n  NEXUS_REPOSITORY_TOKEN: \"NEXUS_REPOSITORY_TOKEN\",\n  CLOUDFLARE_API_TOKEN: \"CLOUDFLARE_API_TOKEN\",\n  SSH_KEY_FINGERPRINT: \"SSH_KEY_FINGERPRINT\",\n  SONARQUBE_TOKEN: \"SONARQUBE_TOKEN\",\n  LAUNCHDARKLY_SDK_KEY: \"LAUNCHDARKLY_SDK_KEY\",\n  SEGMENT_WRITE_KEY: \"SEGMENT_WRITE_KEY\",\n  MIXPANEL_API_SECRET: \"MIXPANEL_API_SECRET\",\n  ALGOLIA_API_KEY: \"ALGOLIA_API_KEY\",\n  ELASTIC_CLOUD_ID: \"ELASTIC_CLOUD_ID\",\n  RAILWAY_TOKEN: \"RAILWAY_TOKEN\",\n  GCP_SERVICE_ACCOUNT_KEY: \"GCP_SERVICE_ACCOUNT_KEY\",\n  CREDIT_CARD_WITH_SEPARATORS: \"CREDIT_CARD_WITH_SEPARATORS\",\n  PGP_KEY_ID: \"PGP_KEY_ID\",\n  AGE_SECRET_KEY: \"AGE_SECRET_KEY\",\n  AGE_PUBLIC_KEY: \"AGE_PUBLIC_KEY\",\n  AWS_KMS_KEY_ID: \"AWS_KMS_KEY_ID\",\n  GCP_KMS_KEY: \"GCP_KMS_KEY\",\n  AZURE_KEY_IDENTIFIER: \"AZURE_KEY_IDENTIFIER\",\n  MASTER_KEY: \"MASTER_KEY\",\n} as const;\n\nexport type PolicyName = (typeof Policies)[keyof typeof Policies];\n\nexport type PolicyMap = {\n  [K in PolicyName]: Policy<K>;\n};\n\nexport interface ExcludePattern {\n  pattern: RegExp;\n  policies?: PolicyName[];\n}\n\nexport interface RedactumOptions {\n  policies?: PolicyName[];\n  customPolicies?: Policy[];\n  replacement?: string | ((match: string, category: PolicyCategory) => string);\n  preserveLength?: boolean;\n  excludePatterns?: ExcludePattern[];\n}\n\nexport interface RedactumResult {\n  text: string;\n  redactedText: string;\n  findings: RedactumFinding[];\n  stats: RedactumStats;\n}\n\nexport interface RedactumFinding {\n  category: PolicyCategory;\n  policyName: string;\n  value: string;\n  match: string;\n  start: number;\n  end: number;\n  replacement: string;\n}\n\nexport interface RedactumStats {\n  totalFindings: number;\n  findingsByCategory: Partial<Record<PolicyCategory, number>>;\n  processingTimeMs: number;\n}\n\nexport interface RedactumConfig {\n  defaultOptions: RedactumOptions;\n  enabledCategories: PolicyCategory[];\n  customPolicies: Policy[];\n}\n","import type { ResolvedConfig, CategoryConfig } from \"./types.js\";\nimport { PolicyCategory } from \"../types/index.js\";\n\nconst DEFAULT_CATEGORIES: Record<\n  PolicyCategory,\n  CategoryConfig & { enabled: boolean }\n> = {\n  [PolicyCategory.EMAIL]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[EMAIL]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.PHONE]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[PHONE]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.SSN]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[SSN]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.IP_ADDRESS]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[IP]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.API_KEY]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[API_KEY]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.AWS_KEY]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[AWS_KEY]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.PRIVATE_KEY]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[PRIVATE_KEY]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.ADDRESS]: {\n    enabled: false,\n    mode: \"replace\",\n    replacement: \"[ADDRESS]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.GOVERNMENT_ID]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[GOV_ID]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.TAX_IDENTIFIER]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[TAX_ID]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.INSURANCE]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[INSURANCE]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.FINANCIAL]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[FINANCIAL]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.MEDICAL]: {\n    enabled: false,\n    mode: \"replace\",\n    replacement: \"[MEDICAL]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.DIGITAL_IDENTITY]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[DIGITAL_ID]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.GEOGRAPHIC]: {\n    enabled: false,\n    mode: \"replace\",\n    replacement: \"[GEO]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.EMPLOYEE_ID]: {\n    enabled: false,\n    mode: \"replace\",\n    replacement: \"[EMPLOYEE_ID]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.VEHICLE]: {\n    enabled: false,\n    mode: \"replace\",\n    replacement: \"[VEHICLE]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.DEV_SECRET]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[SECRET]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.DEV_IDENTIFIER]: {\n    enabled: false,\n    mode: \"replace\",\n    replacement: \"[DEV_ID]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.CLOUD_CREDENTIALS]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[CLOUD_CRED]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.CI_CD_SECRETS]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[CI_CD_SECRET]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.PACKAGE_REGISTRY]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[REGISTRY_TOKEN]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.DATABASE_CREDENTIALS]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[DB_CRED]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.MONITORING_SECRETS]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[MONITORING_KEY]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.AUTH_SECRETS]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[AUTH_SECRET]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.MESSAGING_SECRETS]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[MESSAGING_CRED]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.WEBHOOK_URLS]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[WEBHOOK]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.ENCRYPTION_KEYS]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[ENCRYPTION_KEY]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.CONTAINER_REGISTRY]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[CONTAINER_TOKEN]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.INFRASTRUCTURE_SECRETS]: {\n    enabled: true,\n    mode: \"replace\",\n    replacement: \"[INFRA_SECRET]\",\n    preserveFormat: false,\n  },\n  [PolicyCategory.CUSTOM]: {\n    enabled: false,\n    mode: \"replace\",\n    replacement: \"[CUSTOM]\",\n    preserveFormat: false,\n  },\n};\n\nexport function getDefaultConfig(): ResolvedConfig {\n  return {\n    mask: \"*\",\n    replacement: \"[REDACTED]\",\n    globalMode: \"replace\",\n    preserveLength: false,\n    preserveFormat: false,\n    locale: \"en\",\n    detectLanguage: false,\n    categories: new Map(\n      Object.entries(DEFAULT_CATEGORIES) as [\n        PolicyCategory,\n        CategoryConfig & { enabled: boolean }\n      ][]\n    ),\n    customPolicies: [],\n    hashOptions: {\n      algorithm: \"sha256\",\n      salt: \"\",\n      encoding: \"hex\",\n    },\n    encryptOptions: {\n      algorithm: \"aes-256-gcm\",\n      key: undefined,\n      iv: undefined,\n    },\n    performance: {\n      maximumInputSize: 10 * 1024 * 1024,\n      timeout: 30000,\n      cachePatterns: true,\n      streamThreshold: 1024 * 1024,\n    },\n    security: {\n      preventRegexDos: true,\n      maximumPatternLength: 1000,\n      maximumCustomPatterns: 100,\n      auditLog: false,\n    },\n  };\n}\n\nexport const CONFIG_FILE_NAMES = [\n  \".redactumrc.json\",\n  \".redactumrc.js\",\n  \".redactumrc.cjs\",\n  \".redactumrc.mjs\",\n  \".redactumrc.yaml\",\n  \".redactumrc.yml\",\n  \"redactum.config.json\",\n  \"redactum.config.js\",\n  \"redactum.config.cjs\",\n  \"redactum.config.mjs\",\n  \"redactum.config.yaml\",\n  \"redactum.config.yml\",\n];\n","import type { RedactionConfig, ConfigValidationError, RedactionMode, HashAlgorithm, CategoryConfig } from \"./types.js\";\nimport { PolicyCategory } from \"../types/index.js\";\n\nexport interface ValidationResult {\n  valid: boolean;\n  errors: ConfigValidationError[];\n}\n\nconst VALID_MODES: RedactionMode[] = [\"mask\", \"replace\", \"remove\", \"hash\", \"encrypt\"];\nconst VALID_HASH_ALGORITHMS: HashAlgorithm[] = [\"sha256\", \"sha512\", \"md5\", \"blake2b\"];\nconst VALID_CATEGORIES = Object.values(PolicyCategory);\nconst MAX_PATTERN_LENGTH = 1000;\nconst MAX_CUSTOM_PATTERNS = 100;\nconst MAX_INPUT_SIZE = 100 * 1024 * 1024;\n\nexport function validateConfig(config: RedactionConfig): ValidationResult {\n  const errors: ConfigValidationError[] = [];\n\n  if (config.mask !== undefined && typeof config.mask !== \"string\") {\n    errors.push({\n      path: \"mask\",\n      message: \"Mask must be a string\",\n      value: config.mask,\n    });\n  }\n\n  if (config.replacement !== undefined && typeof config.replacement !== \"string\") {\n    errors.push({\n      path: \"replacement\",\n      message: \"Replacement must be a string\",\n      value: config.replacement,\n    });\n  }\n\n  if (config.categories !== undefined) {\n    validateCategories(config.categories, errors);\n  }\n\n  if (config.customPolicies !== undefined) {\n    validateCustomPatterns(config.customPolicies, errors);\n  }\n\n  if (config.globalMode !== undefined && !VALID_MODES.includes(config.globalMode)) {\n    errors.push({\n      path: \"globalMode\",\n      message: `Global mode must be one of: ${VALID_MODES.join(\", \")}`,\n      value: config.globalMode,\n    });\n  }\n\n  if (config.preserveLength !== undefined && typeof config.preserveLength !== \"boolean\") {\n    errors.push({\n      path: \"preserveLength\",\n      message: \"Preserve length must be a boolean\",\n      value: config.preserveLength,\n    });\n  }\n\n  if (config.preserveFormat !== undefined && typeof config.preserveFormat !== \"boolean\") {\n    errors.push({\n      path: \"preserveFormat\",\n      message: \"Preserve format must be a boolean\",\n      value: config.preserveFormat,\n    });\n  }\n\n  if (config.hashOptions !== undefined) {\n    validateHashOptions(config.hashOptions, errors);\n  }\n\n  if (config.encryptOptions !== undefined) {\n    validateEncryptOptions(config.encryptOptions, errors);\n  }\n\n  if (config.performance !== undefined) {\n    validatePerformanceOptions(config.performance, errors);\n  }\n\n  if (config.security !== undefined) {\n    validateSecurityOptions(config.security, errors);\n  }\n\n  if (config.locale !== undefined) {\n    validateLocale(config.locale, errors);\n  }\n\n  if (config.detectLanguage !== undefined && typeof config.detectLanguage !== \"boolean\") {\n    errors.push({\n      path: \"detectLanguage\",\n      message: \"Detect language must be a boolean\",\n      value: config.detectLanguage,\n    });\n  }\n\n  return {\n    valid: errors.length === 0,\n    errors,\n  };\n}\n\nfunction validateCategories(\n  categories: RedactionConfig[\"categories\"],\n  errors: ConfigValidationError[]\n): void {\n  if (Array.isArray(categories)) {\n    for (let i = 0; i < categories.length; i++) {\n      const category = categories[i];\n      if (category && !VALID_CATEGORIES.includes(category)) {\n        errors.push({\n          path: `categories[${i}]`,\n          message: `Invalid category: ${categories[i]}`,\n          value: categories[i],\n        });\n      }\n    }\n  } else if (typeof categories === \"object\") {\n    for (const [key, value] of Object.entries(categories) as [string, boolean | CategoryConfig][]) {\n      const category = key as PolicyCategory;\n      if (!VALID_CATEGORIES.includes(category)) {\n        errors.push({\n          path: `categories.${key}`,\n          message: `Invalid category: ${key}`,\n          value: key,\n        });\n        continue;\n      }\n\n      if (typeof value === \"object\" && value !== null) {\n        if (value.enabled !== undefined && typeof value.enabled !== \"boolean\") {\n          errors.push({\n            path: `categories.${key}.enabled`,\n            message: \"Enabled must be a boolean\",\n            value: value.enabled,\n          });\n        }\n\n        if (value.mode !== undefined && !VALID_MODES.includes(value.mode)) {\n          errors.push({\n            path: `categories.${key}.mode`,\n            message: `Mode must be one of: ${VALID_MODES.join(\", \")}`,\n            value: value.mode,\n          });\n        }\n\n        if (value.replacement !== undefined && typeof value.replacement !== \"string\") {\n          errors.push({\n            path: `categories.${key}.replacement`,\n            message: \"Replacement must be a string\",\n            value: value.replacement,\n          });\n        }\n\n        if (value.preserveLength !== undefined && typeof value.preserveLength !== \"boolean\") {\n          errors.push({\n            path: `categories.${key}.preserveLength`,\n            message: \"Preserve length must be a boolean\",\n            value: value.preserveLength,\n          });\n        }\n\n        if (value.preserveFormat !== undefined && typeof value.preserveFormat !== \"boolean\") {\n          errors.push({\n            path: `categories.${key}.preserveFormat`,\n            message: \"Preserve format must be a boolean\",\n            value: value.preserveFormat,\n          });\n        }\n\n        if (value.customPattern !== undefined) {\n          validateRegexPattern(value.customPattern, `categories.${key}.customPattern`, errors);\n        }\n      } else if (typeof value !== \"boolean\") {\n        errors.push({\n          path: `categories.${key}`,\n          message: \"Category value must be a boolean or configuration object\",\n          value,\n        });\n      }\n    }\n  } else {\n    errors.push({\n      path: \"categories\",\n      message: \"Categories must be an array or object\",\n      value: categories,\n    });\n  }\n}\n\nfunction validateCustomPatterns(\n  patterns: NonNullable<RedactionConfig[\"customPolicies\"]>,\n  errors: ConfigValidationError[]\n): void {\n  if (!Array.isArray(patterns)) {\n    errors.push({\n      path: \"customPolicies\",\n      message: \"Custom patterns must be an array\",\n      value: patterns,\n    });\n\n    return;\n  }\n\n  if (patterns.length > MAX_CUSTOM_PATTERNS) {\n    errors.push({\n      path: \"customPolicies\",\n      message: `Too many custom patterns. Maximum allowed: ${MAX_CUSTOM_PATTERNS}`,\n      value: patterns.length,\n    });\n  }\n\n  for (let i = 0; i < patterns.length; i++) {\n    const pattern = patterns[i];\n\n    if (!pattern?.name || typeof pattern.name !== \"string\") {\n      errors.push({\n        path: `customPolicies[${i}].name`,\n        message: \"Pattern name is required and must be a string\",\n        value: pattern?.name,\n      });\n    }\n\n    if (!pattern?.pattern || typeof pattern.pattern !== \"string\") {\n      errors.push({\n        path: `customPolicies[${i}].pattern`,\n        message: \"Pattern is required and must be a string\",\n        value: pattern?.pattern,\n      });\n      continue;\n    }\n    \n    validateRegexPattern(pattern.pattern, `customPolicies[${i}].pattern`, errors);\n\n    if (pattern.flags !== undefined && typeof pattern.flags !== \"string\") {\n      errors.push({\n        path: `customPolicies[${i}].flags`,\n        message: \"Flags must be a string\",\n        value: pattern.flags,\n      });\n    }\n\n    if (pattern.replacement !== undefined && typeof pattern.replacement !== \"string\") {\n      errors.push({\n        path: `customPolicies[${i}].replacement`,\n        message: \"Replacement must be a string\",\n        value: pattern.replacement,\n      });\n    }\n\n    if (pattern.mode !== undefined && !VALID_MODES.includes(pattern.mode)) {\n      errors.push({\n        path: `customPolicies[${i}].mode`,\n        message: `Mode must be one of: ${VALID_MODES.join(\", \")}`,\n        value: pattern.mode,\n      });\n    }\n  }\n}\n\nfunction validateHashOptions(\n  options: NonNullable<RedactionConfig[\"hashOptions\"]>,\n  errors: ConfigValidationError[]\n): void {\n  if (options.algorithm !== undefined && !VALID_HASH_ALGORITHMS.includes(options.algorithm)) {\n    errors.push({\n      path: \"hashOptions.algorithm\",\n      message: `Hash algorithm must be one of: ${VALID_HASH_ALGORITHMS.join(\", \")}`,\n      value: options.algorithm,\n    });\n  }\n\n  if (options.salt !== undefined && typeof options.salt !== \"string\") {\n    errors.push({\n      path: \"hashOptions.salt\",\n      message: \"Salt must be a string\",\n      value: options.salt,\n    });\n  }\n\n  if (\n    options.encoding !== undefined &&\n    ![\"hex\", \"base64\", \"base64url\"].includes(options.encoding)\n  ) {\n    errors.push({\n      path: \"hashOptions.encoding\",\n      message: \"Encoding must be one of: hex, base64, base64url\",\n      value: options.encoding,\n    });\n  }\n}\n\nfunction validateEncryptOptions(\n  options: NonNullable<RedactionConfig[\"encryptOptions\"]>,\n  errors: ConfigValidationError[]\n): void {\n  if (options.algorithm !== undefined && typeof options.algorithm !== \"string\") {\n    errors.push({\n      path: \"encryptOptions.algorithm\",\n      message: \"Algorithm must be a string\",\n      value: options.algorithm,\n    });\n  }\n\n  if (options.key !== undefined && typeof options.key !== \"string\") {\n    errors.push({\n      path: \"encryptOptions.key\",\n      message: \"Key must be a string\",\n      value: options.key,\n    });\n  }\n\n  if (options.iv !== undefined && typeof options.iv !== \"string\") {\n    errors.push({\n      path: \"encryptOptions.iv\",\n      message: \"IV must be a string\",\n      value: options.iv,\n    });\n  }\n}\n\nfunction validatePerformanceOptions(\n  options: NonNullable<RedactionConfig[\"performance\"]>,\n  errors: ConfigValidationError[]\n): void {\n  if (options.maximumInputSize !== undefined) {\n    if (typeof options.maximumInputSize !== \"number\" || options.maximumInputSize <= 0) {\n      errors.push({\n        path: \"performance.maximumInputSize\",\n        message: \"Maximum input size must be a positive number\",\n        value: options.maximumInputSize,\n      });\n    } else if (options.maximumInputSize > MAX_INPUT_SIZE) {\n      errors.push({\n        path: \"performance.maximumInputSize\",\n        message: `Maximum input size cannot exceed ${MAX_INPUT_SIZE} bytes`,\n        value: options.maximumInputSize,\n      });\n    }\n  }\n\n  if (options.timeout !== undefined) {\n    if (typeof options.timeout !== \"number\" || options.timeout <= 0) {\n      errors.push({\n        path: \"performance.timeout\",\n        message: \"Timeout must be a positive number\",\n        value: options.timeout,\n      });\n    }\n  }\n\n  if (options.cachePatterns !== undefined && typeof options.cachePatterns !== \"boolean\") {\n    errors.push({\n      path: \"performance.cachePatterns\",\n      message: \"Cache patterns must be a boolean\",\n      value: options.cachePatterns,\n    });\n  }\n\n  if (options.streamThreshold !== undefined) {\n    if (typeof options.streamThreshold !== \"number\" || options.streamThreshold <= 0) {\n      errors.push({\n        path: \"performance.streamThreshold\",\n        message: \"Stream threshold must be a positive number\",\n        value: options.streamThreshold,\n      });\n    }\n  }\n}\n\nfunction validateSecurityOptions(\n  options: NonNullable<RedactionConfig[\"security\"]>,\n  errors: ConfigValidationError[]\n): void {\n  if (options.preventRegexDos !== undefined && typeof options.preventRegexDos !== \"boolean\") {\n    errors.push({\n      path: \"security.preventRegexDos\",\n      message: \"Prevent regex DOS must be a boolean\",\n      value: options.preventRegexDos,\n    });\n  }\n\n  if (options.maximumPatternLength !== undefined) {\n    if (typeof options.maximumPatternLength !== \"number\" || options.maximumPatternLength <= 0) {\n      errors.push({\n        path: \"security.maximumPatternLength\",\n        message: \"Maximum pattern length must be a positive number\",\n        value: options.maximumPatternLength,\n      });\n    } else if (options.maximumPatternLength > MAX_PATTERN_LENGTH) {\n      errors.push({\n        path: \"security.maximumPatternLength\",\n        message: `Maximum pattern length cannot exceed ${MAX_PATTERN_LENGTH}`,\n        value: options.maximumPatternLength,\n      });\n    }\n  }\n\n  if (options.maximumCustomPatterns !== undefined) {\n    if (typeof options.maximumCustomPatterns !== \"number\" || options.maximumCustomPatterns <= 0) {\n      errors.push({\n        path: \"security.maximumCustomPatterns\",\n        message: \"Maximum custom patterns must be a positive number\",\n        value: options.maximumCustomPatterns,\n      });\n    } else if (options.maximumCustomPatterns > MAX_CUSTOM_PATTERNS) {\n      errors.push({\n        path: \"security.maximumCustomPatterns\",\n        message: `Maximum custom patterns cannot exceed ${MAX_CUSTOM_PATTERNS}`,\n        value: options.maximumCustomPatterns,\n      });\n    }\n  }\n\n  if (options.auditLog !== undefined && typeof options.auditLog !== \"boolean\") {\n    errors.push({\n      path: \"security.auditLog\",\n      message: \"Audit log must be a boolean\",\n      value: options.auditLog,\n    });\n  }\n}\n\nfunction validateLocale(\n  locale: NonNullable<RedactionConfig[\"locale\"]>,\n  errors: ConfigValidationError[]\n): void {\n  const locales = Array.isArray(locale) ? locale : [locale];\n  \n  for (let i = 0; i < locales.length; i++) {\n    const loc = locales[i];\n    if (typeof loc !== \"string\") {\n      errors.push({\n        path: Array.isArray(locale) ? `locale[${i}]` : \"locale\",\n        message: \"Locale must be a string\",\n        value: loc,\n      });\n    } else if (!/^[a-z]{2}(-[A-Z]{2})?$/.test(loc)) {\n      errors.push({\n        path: Array.isArray(locale) ? `locale[${i}]` : \"locale\",\n        message: \"Invalid locale format. Expected format: \\\"en\\\" or \\\"en-US\\\"\",\n        value: loc,\n      });\n    }\n  }\n}\n\nfunction validateRegexPattern(\n  pattern: string,\n  path: string,\n  errors: ConfigValidationError[]\n): void {\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    errors.push({\n      path,\n      message: `Pattern length exceeds maximum of ${MAX_PATTERN_LENGTH} characters`,\n      value: pattern.length,\n    });\n\n    return;\n  }\n\n  try {\n    new RegExp(pattern);\n  } catch (error) {\n    errors.push({\n      path,\n      message: `Invalid regex pattern: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      value: pattern,\n    });\n  }\n\n  const catastrophicPatterns = [\n    /(\\w+\\+)+/,\n    /(\\w+\\*)+/,\n    /(\\w+){2,}\\1+/,\n    /(\\w+\\?)+/,\n  ];\n\n  for (const catastrophic of catastrophicPatterns) {\n    if (catastrophic.test(pattern)) {\n      errors.push({\n        path,\n        message: \"Pattern may cause catastrophic backtracking (ReDoS vulnerability)\",\n        value: pattern,\n      });\n      break;\n    }\n  }\n}","import type { RedactionConfig, CategoryConfig, ConfigFile } from \"./types.js\";\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { PolicyCategory } from \"../types/index.js\";\n\ntype MergeableConfig = RedactionConfig & Partial<ConfigFile>;\n\nexport function mergeConfigs(\n  base: MergeableConfig,\n  override: MergeableConfig\n): MergeableConfig {\n  const result: MergeableConfig = { ...base };\n\n  if (override.mask !== undefined) {\n    result.mask = override.mask;\n  }\n\n  if (override.replacement !== undefined) {\n    result.replacement = override.replacement;\n  }\n\n  if (override.categories !== undefined) {\n    result.categories = mergeCategories(base.categories, override.categories);\n  }\n\n  if (override.customPolicies !== undefined) {\n    result.customPolicies = mergeCustomPatterns(\n      base.customPolicies,\n      override.customPolicies\n    );\n  }\n\n  if (override.globalMode !== undefined) {\n    result.globalMode = override.globalMode;\n  }\n\n  if (override.preserveLength !== undefined) {\n    result.preserveLength = override.preserveLength;\n  }\n\n  if (override.preserveFormat !== undefined) {\n    result.preserveFormat = override.preserveFormat;\n  }\n\n  if (override.hashOptions !== undefined) {\n    result.hashOptions = {\n      ...(base.hashOptions || {}),\n      ...override.hashOptions,\n    };\n  }\n\n  if (override.encryptOptions !== undefined) {\n    result.encryptOptions = {\n      ...(base.encryptOptions || {}),\n      ...override.encryptOptions,\n    };\n  }\n\n  if (override.performance !== undefined) {\n    result.performance = {\n      ...(base.performance || {}),\n      ...override.performance,\n    };\n  }\n\n  if (override.security !== undefined) {\n    result.security = {\n      ...(base.security || {}),\n      ...override.security,\n    };\n  }\n\n  if (override.locale !== undefined) {\n    result.locale = override.locale;\n  }\n\n  if (override.detectLanguage !== undefined) {\n    result.detectLanguage = override.detectLanguage;\n  }\n\n  if (override.env !== undefined) {\n    result.env = {\n      ...(base.env || {}),\n      ...override.env,\n    };\n  }\n\n  if (override.presets !== undefined) {\n    result.presets = {\n      ...(base.presets || {}),\n      ...override.presets,\n    };\n  }\n\n  return result;\n}\n\nfunction mergeCategories(\n  base?: RedactionConfig[\"categories\"],\n  override?: RedactionConfig[\"categories\"]\n): RedactionConfig[\"categories\"] {\n  if (!override) {\n    return base;\n  }\n  if (!base) {\n    return override;\n  }\n\n  if (Array.isArray(override)) {\n    return override;\n  }\n\n  if (Array.isArray(base)) {\n    const baseMap: Record<string, boolean> = {};\n    for (const category of base) {\n      baseMap[category] = true;\n    }\n\n    return { ...baseMap, ...override } as Record<\n      PolicyCategory,\n      boolean | CategoryConfig\n    >;\n  }\n\n  const result: Record<PolicyCategory, boolean | CategoryConfig> = { ...base };\n\n  for (const [key, value] of Object.entries(override)) {\n    const category = key as PolicyCategory;\n\n    if (typeof value === \"boolean\") {\n      result[category] = value;\n    } else if (typeof value === \"object\" && value !== null) {\n      const baseValue = base[category];\n\n      if (typeof baseValue === \"object\" && baseValue !== null) {\n        result[category] = {\n          ...baseValue,\n          ...value,\n        };\n      } else {\n        result[category] = value;\n      }\n    }\n  }\n\n  return result;\n}\n\nfunction mergeCustomPatterns(\n  base?: RedactionConfig[\"customPolicies\"],\n  override?: RedactionConfig[\"customPolicies\"]\n): RedactionConfig[\"customPolicies\"] {\n  if (!override) {\n    return base;\n  }\n  if (!base) {\n    return override;\n  }\n\n  if (override.length === 0) {\n    return [];\n  }\n\n  const patternMap = new Map<string, (typeof base)[0]>();\n\n  for (const pattern of base) {\n    patternMap.set(pattern.name, pattern);\n  }\n\n  for (const pattern of override) {\n    patternMap.set(pattern.name, pattern);\n  }\n\n  return Array.from(patternMap.values());\n}\n","import { promises as fs } from \"fs\";\nimport { join, resolve, dirname } from \"path\";\nimport { pathToFileURL, fileURLToPath } from \"url\";\nimport { parse as parseYAML } from \"yaml\";\nimport type { \n  ConfigFile, \n  RedactionConfig, \n  ConfigLoaderOptions,\n  ResolvedConfig,\n  CategoryConfig\n} from \"./types.js\";\nimport type { ConfigValidationError as ValidationError } from \"./types.js\";\nimport { getDefaultConfig, CONFIG_FILE_NAMES } from \"./defaults.js\";\nimport { validateConfig } from \"./validator.js\";\nimport { mergeConfigs } from \"./merger.js\";\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { PolicyCategory } from \"../types/index.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport class ConfigLoader {\n  private cache = new Map<string, ConfigFile>();\n  private searchPaths: string[];\n  \n  constructor(private options: ConfigLoaderOptions = {}) {\n    this.searchPaths = options.searchPaths || [\n      process.cwd(),\n      join(process.cwd(), \"config\"),\n      join(process.cwd(), \".config\"),\n      process.env[\"HOME\"] || \"\",\n      join(process.env[\"HOME\"] || \"\", \".config\", \"redactum\"),\n    ].filter(Boolean);\n  }\n\n  async load(): Promise<ResolvedConfig> {\n    const configFile = await this.findAndLoadConfig();\n\n    const mergedConfig = await this.resolveExtends(configFile);\n    const finalConfig = this.applyEnvironmentAndPresets(mergedConfig);\n\n    const validation = validateConfig(finalConfig);\n    if (validation.errors.length > 0) {\n      throw new ConfigValidationError(\"Invalid configuration\", validation.errors);\n    }\n\n    return this.createResolvedConfig(finalConfig);\n  }\n\n  private async findAndLoadConfig(): Promise<ConfigFile | undefined> {\n    if (this.options.configPath) {\n      return this.loadConfigFile(this.options.configPath);\n    }\n\n    for (const searchPath of this.searchPaths) {\n      for (const filename of CONFIG_FILE_NAMES) {\n        const filepath = join(searchPath, filename);\n        try {\n          await fs.access(filepath);\n          const config = await this.loadConfigFile(filepath);\n          if (this.options.stopOnFirstFound) {\n            return config;\n          }\n        } catch {\n          continue;\n        }\n      }\n    }\n    \n    return undefined;\n  }\n\n  private async loadConfigFile(filepath: string): Promise<ConfigFile> {\n    const cached = this.cache.get(filepath);\n    if (cached) {\n      return cached;\n    }\n\n    const absolutePath = resolve(filepath);\n    const content = await fs.readFile(absolutePath, \"utf-8\");\n    const ext = filepath.split(\".\").pop()?.toLowerCase();\n\n    let config: ConfigFile;\n\n    switch (ext) {\n      case \"json\":\n        config = JSON.parse(content);\n        break;\n        \n      case \"yaml\":\n      case \"yml\":\n        config = parseYAML(content);\n        break;\n        \n      case \"js\":\n      case \"mjs\":\n      case \"cjs\": {\n        const fileUrl = pathToFileURL(absolutePath).href;\n        const module = await import(/* @vite-ignore */ fileUrl);\n        config = module.default || module;\n        break;\n      }\n        \n      default:\n        throw new Error(`Unsupported config file format: ${ext}`);\n    }\n\n    this.cache.set(filepath, config);\n\n    return config;\n  }\n\n  private loadEnvironmentConfig(): RedactionConfig | undefined {\n    if (!this.options.allowEnvironmentOverrides) {\n      return undefined;\n    }\n\n    const config: Partial<RedactionConfig> = {};\n    \n    if (process.env[\"REDACTUM_MASK\"]) {\n      config.mask = process.env[\"REDACTUM_MASK\"];\n    }\n    \n    if (process.env[\"REDACTUM_REPLACEMENT\"]) {\n      config.replacement = process.env[\"REDACTUM_REPLACEMENT\"];\n    }\n    \n    if (process.env[\"REDACTUM_CATEGORIES\"]) {\n      config.categories = process.env[\"REDACTUM_CATEGORIES\"].split(\",\") as PolicyCategory[];\n    }\n    \n    if (process.env[\"REDACTUM_MODE\"]) {\n      config.globalMode = process.env[\"REDACTUM_MODE\"] as RedactionConfig[\"globalMode\"];\n    }\n    \n    if (process.env[\"REDACTUM_PRESERVE_LENGTH\"]) {\n      config.preserveLength = process.env[\"REDACTUM_PRESERVE_LENGTH\"] === \"true\";\n    }\n    \n    if (process.env[\"REDACTUM_PRESERVE_FORMAT\"]) {\n      config.preserveFormat = process.env[\"REDACTUM_PRESERVE_FORMAT\"] === \"true\";\n    }\n    \n    if (process.env[\"REDACTUM_LOCALE\"]) {\n      config.locale = process.env[\"REDACTUM_LOCALE\"].split(\",\");\n    }\n    \n    if (process.env[\"REDACTUM_DETECT_LANGUAGE\"]) {\n      config.detectLanguage = process.env[\"REDACTUM_DETECT_LANGUAGE\"] === \"true\";\n    }\n\n    return Object.keys(config).length > 0 ? config as RedactionConfig : undefined;\n  }\n\n  private async resolveExtends(config?: ConfigFile): Promise<ConfigFile> {\n    if (!config || !config.extends || !this.options.mergeExtends) {\n      return config || {};\n    }\n\n    const extendsList = Array.isArray(config.extends) ? config.extends : [config.extends];\n    let baseConfig: RedactionConfig = {};\n\n    for (const extendPath of extendsList) {\n      const resolvedPath = this.resolveExtendPath(extendPath);\n      const extendConfig = await this.loadConfigFile(resolvedPath);\n      const resolvedExtend = await this.resolveExtends(extendConfig);\n      baseConfig = mergeConfigs(baseConfig, resolvedExtend as RedactionConfig);\n    }\n\n    const { extends: _, ...configWithoutExtends } = config;\n\n    return mergeConfigs(baseConfig, configWithoutExtends) as ConfigFile;\n  }\n\n  private resolveExtendPath(extendPath: string): string {\n    if (extendPath.startsWith(\"@redactum/\")) {\n      const presetName = extendPath.slice(\"@redactum/\".length);\n\n      return join(__dirname, \"..\", \"presets\", `${presetName}.json`);\n    }\n\n    if (!extendPath.includes(\"/\") && !extendPath.startsWith(\".\")) {\n      return join(process.cwd(), \"node_modules\", extendPath);\n    }\n\n    return resolve(process.cwd(), extendPath);\n  }\n\n  private applyEnvironmentAndPresets(config: ConfigFile): RedactionConfig {\n    let result: RedactionConfig = config;\n\n    if (this.options.preset && config.presets?.[this.options.preset]) {\n      const presetConfig = config.presets[this.options.preset];\n      if (presetConfig) {\n        result = mergeConfigs(result, presetConfig) as RedactionConfig;\n      }\n    }\n\n    if (this.options.env && config.env?.[this.options.env]) {\n      const envConfig = config.env[this.options.env];\n      if (envConfig) {\n        result = mergeConfigs(result, envConfig) as RedactionConfig;\n      }\n    }\n\n    const envConfig = this.loadEnvironmentConfig();\n    if (envConfig) {\n      result = mergeConfigs(result, envConfig) as RedactionConfig;\n    }\n\n    return result;\n  }\n\n  private createResolvedConfig(config: RedactionConfig): ResolvedConfig {\n    const defaults = getDefaultConfig();\n    const merged = mergeConfigs(defaults as unknown as RedactionConfig, config) as RedactionConfig;\n\n    const categories = new Map<PolicyCategory, CategoryConfig & { enabled: boolean }>();\n\n    if (Array.isArray(merged.categories)) {\n      for (const [cat, defaultConfig] of defaults.categories.entries()) {\n        categories.set(cat, { ...defaultConfig, enabled: false });\n      }\n      for (const category of merged.categories) {\n        const defaultCat = defaults.categories.get(category);\n        if (defaultCat) {\n          categories.set(category, { ...defaultCat, enabled: true });\n        }\n      }\n    } else if (merged.categories && typeof merged.categories === \"object\") {\n      for (const [cat, defaultConfig] of defaults.categories.entries()) {\n        categories.set(cat, defaultConfig);\n      }\n      for (const [cat, config] of Object.entries(merged.categories) as [PolicyCategory, boolean | CategoryConfig][]) {\n        const defaultCat = defaults.categories.get(cat);\n        if (defaultCat) {\n          if (typeof config === \"boolean\") {\n            categories.set(cat, { ...defaultCat, enabled: config });\n          } else {\n            categories.set(cat, { ...defaultCat, ...config, enabled: config.enabled ?? true });\n          }\n        }\n      }\n    } else {\n      for (const [cat, defaultConfig] of defaults.categories.entries()) {\n        categories.set(cat, defaultConfig);\n      }\n    }\n\n    return {\n      ...defaults,\n      ...merged,\n      categories,\n      customPolicies: merged.customPolicies?.map(cp => ({\n        name: cp.name,\n        pattern: new RegExp(cp.pattern, cp.flags),\n        replacement: cp.replacement ?? merged.replacement ?? defaults.replacement,\n        mode: cp.mode ?? merged.globalMode ?? defaults.globalMode,\n      })) ?? [],\n    } as ResolvedConfig;\n  }\n}\n\nexport class ConfigValidationError extends Error {\n  constructor(message: string, public errors: ValidationError[]) {\n    super(message);\n    this.name = \"ConfigValidationError\";\n  }\n}\n\nexport async function loadConfig(options?: ConfigLoaderOptions): Promise<ResolvedConfig> {\n  const loader = new ConfigLoader(options);\n\n  return loader.load();\n}","export {\n  redactum,\n  redactumBatch,\n  redactumFromConfig,\n  createRedactum,\n  redactumGetEnabledCategories,\n  redactumGetEnabledPolicies,\n  redactumGetPatterns,\n  redactumGetAllPatterns,\n} from \"./core/redactum.js\";\n\nexport { PolicyCategory, Policies } from \"./types/index.js\";\nexport type {\n  RedactumOptions,\n  RedactumResult,\n  RedactumFinding,\n  RedactumStats,\n  Policy,\n  PolicyName,\n  RedactumConfig,\n} from \"./types/index.js\";\nexport {\n  POLICIES,\n  DEFAULT_REPLACEMENT,\n  DEFAULT_ENABLED_CATEGORIES,\n} from \"./constants.js\";\nexport {\n  redactumCalculateEntropy,\n  redactumLooksLikeSecret,\n} from \"./utils/entropy.js\";\nexport {\n  redactumValidateOptions,\n  redactumValidatePolicy,\n} from \"./utils/validation.js\";\n\nexport { loadConfig, getConfig, clearConfigCache } from \"./config/index.js\";\nexport type {\n  RedactionConfig,\n  ConfigFile,\n  ResolvedConfig,\n  ConfigLoaderOptions,\n  RedactionMode,\n  CategoryConfig,\n  HashAlgorithm,\n} from \"./config/types.js\";\nexport { validateConfig } from \"./config/validator.js\";\nexport { mergeConfigs } from \"./config/merger.js\";\nexport { getDefaultConfig, CONFIG_FILE_NAMES } from \"./config/defaults.js\";\n\nexport * from \"./providers/index.js\";\n","import type {\n  RedactumOptions,\n  RedactumResult,\n  RedactumFinding,\n  RedactumStats,\n  Policy,\n  PolicyName,\n  ExcludePattern,\n} from \"../types/index.js\";\nimport { PolicyCategory } from \"../types/index.js\";\nimport {\n  POLICIES,\n  DEFAULT_REPLACEMENT,\n} from \"../constants.js\";\nimport type { ResolvedConfig, ConfigLoaderOptions } from \"../config/types.js\";\nimport { getConfig } from \"../config/index.js\";\nimport { redactumValidatePolicy } from \"../utils/validation.js\";\n\ntype RedactorState = {\n  patterns: Policy[];\n  options: Required<RedactumOptions>;\n  config?: ResolvedConfig;\n};\n\nconst PRIORITY_MAP: Record<PolicyCategory, number> = {\n  [PolicyCategory.PRIVATE_KEY]: 1,\n  [PolicyCategory.AWS_KEY]: 2,\n  [PolicyCategory.API_KEY]: 3,\n  [PolicyCategory.DATABASE_CREDENTIALS]: 4,\n  [PolicyCategory.DEV_SECRET]: 5,\n  [PolicyCategory.FINANCIAL]: 6,\n  [PolicyCategory.DIGITAL_IDENTITY]: 7,\n  [PolicyCategory.EMAIL]: 8,\n  [PolicyCategory.PHONE]: 9,\n  [PolicyCategory.SSN]: 10,\n  [PolicyCategory.GOVERNMENT_ID]: 11,\n  [PolicyCategory.TAX_IDENTIFIER]: 12,\n  [PolicyCategory.INSURANCE]: 13,\n  [PolicyCategory.MEDICAL]: 14,\n  [PolicyCategory.DEV_IDENTIFIER]: 16,\n  [PolicyCategory.IP_ADDRESS]: 17,\n  [PolicyCategory.VEHICLE]: 18,\n  [PolicyCategory.EMPLOYEE_ID]: 19,\n  [PolicyCategory.ADDRESS]: 20,\n  [PolicyCategory.GEOGRAPHIC]: 21,\n  [PolicyCategory.CLOUD_CREDENTIALS]: 22,\n  [PolicyCategory.CI_CD_SECRETS]: 23,\n  [PolicyCategory.PACKAGE_REGISTRY]: 24,\n  [PolicyCategory.MONITORING_SECRETS]: 25,\n  [PolicyCategory.AUTH_SECRETS]: 26,\n  [PolicyCategory.MESSAGING_SECRETS]: 27,\n  [PolicyCategory.WEBHOOK_URLS]: 28,\n  [PolicyCategory.ENCRYPTION_KEYS]: 29,\n  [PolicyCategory.CONTAINER_REGISTRY]: 30,\n  [PolicyCategory.INFRASTRUCTURE_SECRETS]: 31,\n  [PolicyCategory.CUSTOM]: 32,\n};\n\nfunction normalizeOptions(options: RedactumOptions): Required<RedactumOptions> {\n  return {\n    policies: options.policies ?? (POLICIES.map(p => p.name) as PolicyName[]),\n    customPolicies: options.customPolicies ?? [],\n    replacement: options.replacement ?? DEFAULT_REPLACEMENT,\n    preserveLength: options.preserveLength ?? false,\n    excludePatterns: options.excludePatterns ?? [],\n  };\n}\n\nfunction buildPatterns(options: Required<RedactumOptions>): Policy[] {\n  const enabledPatterns = POLICIES.filter((pattern) =>\n    (options.policies as readonly string[]).includes(pattern.name)\n  );\n\n  return [...enabledPatterns, ...options.customPolicies];\n}\n\nfunction createState(options: RedactumOptions = {}): RedactorState {\n  const normalizedOptions = normalizeOptions(options);\n\n  return {\n    patterns: buildPatterns(normalizedOptions),\n    options: normalizedOptions,\n  };\n}\n\nasync function createStateFromConfig(configOptions?: ConfigLoaderOptions): Promise<RedactorState> {\n  const config = await getConfig(configOptions);\n\n  return applyConfig(createState(), config);\n}\n\nfunction applyConfig(_state: RedactorState, config: ResolvedConfig): RedactorState {\n  const enabledPolicies: PolicyName[] = [];\n  config.categories.forEach((categoryConfig, category) => {\n    if (categoryConfig.enabled) {\n      const policiesInCategory = POLICIES.filter(p => p.category === category).map(p => p.name as PolicyName);\n      enabledPolicies.push(...policiesInCategory);\n    }\n  });\n\n  const customPolicies: Policy[] = config.customPolicies.map(cp => ({\n    name: cp.name,\n    pattern: cp.pattern,\n    replacement: cp.replacement,\n    category: PolicyCategory.CUSTOM,\n  }));\n\n  const newOptions: Required<RedactumOptions> = {\n    policies: enabledPolicies.length > 0 ? enabledPolicies : POLICIES.map(p => p.name) as PolicyName[],\n    customPolicies,\n    replacement: config.replacement,\n    preserveLength: config.preserveLength,\n    excludePatterns: [],\n  };\n\n  return {\n    patterns: buildPatterns(newOptions),\n    options: newOptions,\n    config,\n  };\n}\n\nfunction expandBackreferences(replacement: string, match: RegExpMatchArray): string {\n  return replacement.replace(/\\$(\\d+)/g, (_, groupNum) => {\n    const index = parseInt(groupNum, 10);\n\n    return match[index] ?? \"\";\n  });\n}\n\nfunction isExcluded(\n  text: string,\n  policyName: PolicyName,\n  excludePatterns: ExcludePattern[]\n): boolean {\n  return excludePatterns.some((excludePattern: ExcludePattern) => {\n    if (!excludePattern.policies || excludePattern.policies.length === 0) {\n      return excludePattern.pattern.test(text);\n    }\n\n    if (excludePattern.policies.includes(policyName)) {\n      return excludePattern.pattern.test(text);\n    }\n\n    return false;\n  });\n}\n\nfunction getReplacement(\n  match: RegExpMatchArray,\n  pattern: Policy,\n  options: Required<RedactumOptions>,\n  config?: ResolvedConfig\n): string {\n  const matchedText = match[0];\n\n  if (config) {\n    const categoryConfig = config.categories.get(pattern.category);\n    if (categoryConfig?.replacement) {\n      if (categoryConfig.mode === \"mask\") {\n        return config.mask.repeat(matchedText.length);\n      }\n\n      return expandBackreferences(categoryConfig.replacement, match);\n    }\n  }\n\n  if (typeof options.replacement === \"function\") {\n    return options.replacement(matchedText, pattern.category);\n  }\n\n  let baseReplacement: string;\n  if (options.replacement !== DEFAULT_REPLACEMENT) {\n    baseReplacement = options.replacement;\n  } else {\n    baseReplacement = pattern.replacement ?? options.replacement;\n  }\n\n  baseReplacement = expandBackreferences(baseReplacement, match);\n\n  if (options.preserveLength) {\n    const targetLength = matchedText.length;\n    const baseLength = baseReplacement.length;\n\n    if (targetLength <= baseLength) {\n      return baseReplacement.substring(0, targetLength);\n    }\n\n    return baseReplacement + \"*\".repeat(targetLength - baseLength);\n  }\n\n  return baseReplacement;\n}\n\nfunction calculateStats(\n  findings: RedactumFinding[],\n  startTime: number\n): RedactumStats {\n  const findingsByCategory = findings.reduce((acc, finding) => {\n    acc[finding.category] = (acc[finding.category] ?? 0) + 1;\n\n    return acc;\n  }, {} as Record<PolicyCategory, number>);\n\n  return {\n    totalFindings: findings.length,\n    findingsByCategory,\n    processingTimeMs: Date.now() - startTime,\n  };\n}\n\n/**\n * Redacts sensitive information from text using built-in and custom policies.\n *\n * @public\n * @param text - The input text to redact\n * @param options - Configuration options for redaction behavior\n * @returns Result object containing the redacted text, findings, and statistics\n * @example\n * ```typescript\n * const result = redactum(\"Email: john@example.com\");\n * console.log(result.redactedText);\n * ```\n * @example\n * ```typescript\n * const result = redactum(\"SSN: 123-45-6789\", {\n *   replacement: \"***\",\n *   preserveLength: true\n * });\n * ```\n */\nexport function redactum(text: string, options: RedactumOptions = {}): RedactumResult {\n  const state = createState(options);\n\n  return redactWithState(text, state);\n}\n\nfunction redactWithState(text: string, state: RedactorState): RedactumResult {\n  const startTime = Date.now();\n  const findings: RedactumFinding[] = [];\n  let redactedText = text;\n\n  const sortedPatterns = [...state.patterns].sort(\n    (a, b) =>\n      (PRIORITY_MAP[a.category] ?? 99) -\n      (PRIORITY_MAP[b.category] ?? 99)\n  );\n\n  const redactedRanges: Array<{ start: number; end: number }> = [];\n\n  for (const pattern of sortedPatterns) {\n    const matches = [...text.matchAll(pattern.pattern)];\n\n    for (const match of matches) {\n      if (match.index === undefined) {\n        continue;\n      }\n\n      const start = match.index;\n      const end = start + match[0].length;\n\n      const overlaps = redactedRanges.some(\n        (range) =>\n          (start >= range.start && start < range.end) ||\n          (end > range.start && end <= range.end) ||\n          (start <= range.start && end >= range.end)\n      );\n\n      if (overlaps || isExcluded(match[0], pattern.name as PolicyName, state.options.excludePatterns)) {\n        continue;\n      }\n\n      const replacement = getReplacement(match, pattern, state.options, state.config);\n\n      findings.push({\n        category: pattern.category,\n        policyName: pattern.name,\n        value: match[0],\n        match: match[0],\n        start,\n        end,\n        replacement,\n      });\n\n      redactedRanges.push({ start, end });\n    }\n  }\n\n  findings.sort((a, b) => b.start - a.start);\n\n  for (const finding of findings) {\n    redactedText =\n      redactedText.substring(0, finding.start) +\n      finding.replacement +\n      redactedText.substring(finding.end);\n  }\n\n  const stats = calculateStats(findings, startTime);\n\n  return {\n    text,\n    redactedText,\n    findings: findings.reverse(),\n    stats,\n  };\n}\n\n/**\n * Returns the list of enabled policy names based on the provided options.\n *\n * @public\n * @param options - Configuration options to determine which policies are enabled\n * @returns Array of enabled policy names\n * @example\n * ```typescript\n * const policies = redactumGetEnabledPolicies({\n *   policies: [\"EMAIL_ADDRESS\", \"PHONE_NUMBER_US\"]\n * });\n * console.log(policies);\n * ```\n */\nexport function redactumGetEnabledPolicies(options: RedactumOptions = {}): PolicyName[] {\n  const state = createState(options);\n\n  return [...state.options.policies];\n}\n\n/**\n * Returns the list of enabled policy categories based on the provided options.\n *\n * @public\n * @param options - Configuration options to determine which categories are enabled\n * @returns Array of enabled policy categories\n * @example\n * ```typescript\n * const categories = redactumGetEnabledCategories({\n *   policies: [\"EMAIL_ADDRESS\", \"PHONE_NUMBER_US\", \"PHONE_NUMBER_UK\"]\n * });\n * console.log(categories);\n * ```\n */\nexport function redactumGetEnabledCategories(options: RedactumOptions = {}): PolicyCategory[] {\n  const state = createState(options);\n  const enabledCategories = new Set<PolicyCategory>();\n  for (const policyName of state.options.policies) {\n    const policy = POLICIES.find(p => p.name === policyName);\n    if (policy) {\n      enabledCategories.add(policy.category);\n    }\n  }\n\n  return Array.from(enabledCategories);\n}\n\n/**\n * Returns the complete list of patterns (built-in and custom) that will be used for redaction.\n *\n * @public\n * @param options - Configuration options to determine which patterns are included\n * @returns Array of policy patterns\n * @example\n * ```typescript\n * const patterns = redactumGetPatterns({\n *   policies: [\"EMAIL_ADDRESS\"],\n *   customPolicies: [{\n *     name: \"EMPLOYEE_ID\",\n *     pattern: /EMP-\\d{6}/g,\n *     category: PolicyCategory.CUSTOM\n *   }]\n * });\n * ```\n */\nexport function redactumGetPatterns(options: RedactumOptions = {}): Policy[] {\n  const state = createState(options);\n\n  return [...state.patterns];\n}\n\n/**\n * Redacts text using configuration loaded from a file.\n *\n * @public\n * @param text - The input text to redact\n * @param configOptions - Options for loading the configuration file\n * @returns Promise resolving to result object with redacted text, findings, and statistics\n * @example\n * ```typescript\n * const result = await redactumFromConfig(\"Email: john@example.com\", {\n *   configPath: \"./redactum.config.json\"\n * });\n * ```\n */\nexport async function redactumFromConfig(\n  text: string,\n  configOptions?: ConfigLoaderOptions\n): Promise<RedactumResult> {\n  const state = await createStateFromConfig(configOptions);\n\n  return redactWithState(text, state);\n}\n\n/**\n * Redacts multiple texts efficiently using the same configuration.\n *\n * @public\n * @param texts - Array of input texts to redact\n * @param options - Configuration options for redaction behavior\n * @returns Array of result objects, one for each input text\n * @example\n * ```typescript\n * const messages = [\n *   \"Support ticket from sarah.chen@company.io\",\n *   \"Customer callback: +44 20 7946 0958\"\n * ];\n * const results = redactumBatch(messages);\n * const redactedMessages = results.map(r => r.redactedText);\n * ```\n */\nexport function redactumBatch(texts: string[], options?: RedactumOptions): RedactumResult[] {\n  return texts.map(text => redactum(text, options));\n}\n\n/**\n * Returns all 180+ built-in policies available in Redactum.\n *\n * @public\n * @returns Array of all built-in policy patterns\n * @example\n * ```typescript\n * const allPatterns = redactumGetAllPatterns();\n * console.log(`Total patterns: ${allPatterns.length}`);\n * ```\n */\nexport function redactumGetAllPatterns(): Policy[] {\n  return [...POLICIES];\n}\n\n/**\n * Stateful redactor instance with methods for managing custom patterns and options.\n *\n * @public\n */\nexport type RedactumInstance = {\n  /**\n   * Redact text using the instance's configuration.\n   * @param text - The input text to redact\n   * @returns Result object containing the redacted text, findings, and statistics\n   */\n  redactum: (text: string) => RedactumResult;\n\n  /**\n   * Add a custom pattern to the instance.\n   * @param pattern - The custom policy pattern to add\n   */\n  addCustomPattern: (pattern: Policy) => void;\n\n  /**\n   * Remove a custom pattern from the instance.\n   * @param name - The name of the pattern to remove\n   * @returns True if the pattern was removed, false if it didn't exist\n   */\n  removeCustomPattern: (name: string) => boolean;\n\n  /**\n   * Update the instance's options.\n   * @param options - Partial options to merge with current configuration\n   */\n  updateOptions: (options: Partial<RedactumOptions>) => void;\n\n  /**\n   * Get all patterns (built-in and custom) for the instance.\n   * @returns Array of policy patterns\n   */\n  getPatterns: () => Policy[];\n\n  /**\n   * Get enabled categories for the instance.\n   * @returns Array of enabled policy categories\n   */\n  getEnabledCategories: () => PolicyCategory[];\n};\n\n/**\n * Creates a stateful redactor instance with methods for managing custom patterns and options.\n *\n * @public\n * @param options - Initial configuration options\n * @returns Redactor instance with methods for redaction and configuration management\n * @example\n * ```typescript\n * const redactor = createRedactum({\n *   policies: [\"EMAIL_ADDRESS\", \"PHONE_NUMBER_US\"]\n * });\n *\n * redactor.addCustomPattern({\n *   name: \"EMPLOYEE_ID\",\n *   pattern: /EMP-\\d{6}/g,\n *   category: PolicyCategory.CUSTOM\n * });\n *\n * const result = redactor.redactum(\"Employee EMP-123456 email: john@example.com\");\n * ```\n */\nexport function createRedactum(options?: RedactumOptions): RedactumInstance {\n  let currentOptions = options || {};\n  const localCustomPatterns: Map<string, Policy> = new Map();\n\n  const getMergedOptions = (): RedactumOptions => {\n    const allCustomPatterns = [\n      ...(currentOptions.customPolicies || []),\n      ...Array.from(localCustomPatterns.values())\n    ];\n\n    return {\n      ...currentOptions,\n      customPolicies: allCustomPatterns\n    };\n  };\n\n  return {\n    redactum: (text: string) => redactum(text, getMergedOptions()),\n    addCustomPattern: (pattern: Policy) => {\n      redactumValidatePolicy(pattern);\n      localCustomPatterns.set(pattern.name, pattern);\n    },\n    removeCustomPattern: (name: string) => localCustomPatterns.delete(name),\n    updateOptions: (newOptions: Partial<RedactumOptions>) => {\n      currentOptions = { ...currentOptions, ...newOptions };\n    },\n    getPatterns: () => redactumGetPatterns(getMergedOptions()),\n    getEnabledCategories: () => redactumGetEnabledCategories(getMergedOptions())\n  };\n}\n","import type { Policy } from \"./types/index.js\";\nimport { PolicyCategory } from \"./types/index.js\";\n\nexport const DEFAULT_REPLACEMENT = \"[REDACTED]\";\n\nexport const POLICIES: Policy[] = [\n  {\n    name: \"EMAIL_ADDRESS\",\n    pattern: /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b/g,\n    category: PolicyCategory.EMAIL,\n    replacement: \"[EMAIL]\",\n  },\n  {\n    name: \"OPENAI_API_KEY\",\n    pattern: /\\bsk-(?:proj-)?[a-zA-Z0-9]{32,}\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[OPENAI_KEY]\",\n  },\n  {\n    name: \"ANTHROPIC_API_KEY\",\n    pattern: /\\bsk-ant-[a-zA-Z0-9-_]{95,}\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[ANTHROPIC_KEY]\",\n  },\n  {\n    name: \"UUID\",\n    pattern:\n      /\\b[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\\b/gi,\n    category: PolicyCategory.DIGITAL_IDENTITY,\n    replacement: \"[UUID]\",\n  },\n  {\n    name: \"PHONE_NUMBER_UK\",\n    pattern: /(?:\\+44|0)[1-9]\\d{8,9}\\b/g,\n    category: PolicyCategory.PHONE,\n    replacement: \"[PHONE]\",\n  },\n  {\n    name: \"PHONE_NUMBER_CANADIAN\",\n    pattern:\n      /\\b(?:\\+1|1)?[\\s-]?\\(?[2-9][0-8][0-9]\\)?[\\s-]?[2-9][0-9]{2}[\\s-]?[0-9]{4}\\b/g,\n    category: PolicyCategory.PHONE,\n    replacement: \"[PHONE]\",\n  },\n  {\n    name: \"PHONE_NUMBER_INTERNATIONAL\",\n    pattern: /(?:^|(?<=\\s))\\+[1-9]\\d{1,14}\\b/g,\n    category: PolicyCategory.PHONE,\n    replacement: \"[PHONE]\",\n  },\n  {\n    name: \"PHONE_NUMBER_US\",\n    pattern: /(?:\\+?1[-.\\s]?)?\\(?[0-9]{3}\\)?[-.\\s]?[0-9]{3}[-.\\s]?[0-9]{4}\\b/g,\n    category: PolicyCategory.PHONE,\n    replacement: \"[PHONE]\",\n  },\n  {\n    name: \"SSN\",\n    pattern: /\\b\\d{3}-\\d{2}-\\d{4}\\b/g,\n    category: PolicyCategory.SSN,\n    replacement: \"[SSN]\",\n  },\n  {\n    name: \"CREDIT_CARD\",\n    pattern:\n      /\\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12})\\b/g,\n    category: PolicyCategory.FINANCIAL,\n    replacement: \"[CREDIT_CARD]\",\n  },\n  {\n    name: \"CREDIT_CARD_WITH_SEPARATORS\",\n    pattern:\n      /\\b(?:4\\d{3}[-\\s]\\d{4}[-\\s]\\d{4}[-\\s]\\d{4}|5[1-5]\\d{2}[-\\s]\\d{4}[-\\s]\\d{4}[-\\s]\\d{4}|3[47]\\d{2}[-\\s]\\d{6}[-\\s]\\d{5}|3(?:0[0-5]|[68]\\d)\\d[-\\s]\\d{6}[-\\s]\\d{4}|6(?:011|5\\d{2})[-\\s]\\d{4}[-\\s]\\d{4}[-\\s]\\d{4})\\b/g,\n    category: PolicyCategory.FINANCIAL,\n    replacement: \"[CREDIT_CARD]\",\n  },\n  {\n    name: \"IPV4_ADDRESS\",\n    pattern:\n      /\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b/g,\n    category: PolicyCategory.IP_ADDRESS,\n    replacement: \"[IP]\",\n  },\n  {\n    name: \"IPV6_ADDRESS\",\n    pattern:\n      /\\b(?!fe80:|::1\\b|::\\b|2001:db8:)(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\\b/gi,\n    category: PolicyCategory.IP_ADDRESS,\n    replacement: \"[IP]\",\n  },\n  {\n    name: \"GITHUB_TOKEN\",\n    pattern: /\\b(?:ghp_|gho_|ghu_|ghs_|ghr_)[a-zA-Z0-9]{36,40}\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[GITHUB_TOKEN]\",\n  },\n  {\n    name: \"GITHUB_FINE_GRAINED_TOKEN\",\n    pattern: /\\bgithub_pat_[a-zA-Z0-9]{20,22}_[a-zA-Z0-9]{59,}\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[GITHUB_PAT]\",\n  },\n  {\n    name: \"STRIPE_KEY\",\n    pattern: /\\b(?:sk|pk|rk)_(?:live|test)_[a-zA-Z0-9]{24,}\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[STRIPE_KEY]\",\n  },\n  {\n    name: \"JWT_TOKEN\",\n    pattern: /\\beyJ[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[JWT_TOKEN]\",\n  },\n  {\n    name: \"BASE64_URL_PARAM\",\n    pattern: /([?&][a-zA-Z_]+=)([A-Za-z0-9+/]{20,}={0,2})/g,\n    category: PolicyCategory.DEV_SECRET,\n    replacement: \"$1[BASE64]\",\n  },\n  {\n    name: \"API_KEY_GENERIC\",\n    pattern:\n      /\\b(?:api[_-]?key|apikey|access[_-]?token|bearer[_-]?token)[\\s]*[:=][\\s]*[\"']?([a-zA-Z0-9_-]{20,})[\"']?\\b/gi,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[API_KEY]\",\n  },\n  {\n    name: \"AWS_ACCESS_KEY\",\n    pattern: /\\b(?:AKIA|ASIA|ABIA|ACCA)[0-9A-Z]{16}\\b/g,\n    category: PolicyCategory.AWS_KEY,\n    replacement: \"[AWS_ACCESS_KEY]\",\n  },\n  {\n    name: \"AWS_SECRET_KEY\",\n    pattern: /(?<![A-Za-z0-9/+=-])[A-Za-z0-9/+=]{40}(?![A-Za-z0-9/+=])/g,\n    category: PolicyCategory.AWS_KEY,\n    replacement: \"[AWS_SECRET]\",\n  },\n  {\n    name: \"AWS_SESSION_TOKEN\",\n    pattern: /\\b[A-Za-z0-9/+=]{100,}\\b/g,\n    category: PolicyCategory.AWS_KEY,\n    replacement: \"[AWS_SESSION_TOKEN]\",\n  },\n  {\n    name: \"RSA_PRIVATE_KEY\",\n    pattern:\n      /-----BEGIN RSA PRIVATE KEY-----[\\s\\S]*?-----END RSA PRIVATE KEY-----/g,\n    category: PolicyCategory.PRIVATE_KEY,\n    replacement: \"[RSA_PRIVATE_KEY]\",\n  },\n  {\n    name: \"EC_PRIVATE_KEY\",\n    pattern:\n      /-----BEGIN EC PRIVATE KEY-----[\\s\\S]*?-----END EC PRIVATE KEY-----/g,\n    category: PolicyCategory.PRIVATE_KEY,\n    replacement: \"[EC_PRIVATE_KEY]\",\n  },\n  {\n    name: \"OPENSSH_PRIVATE_KEY\",\n    pattern:\n      /-----BEGIN OPENSSH PRIVATE KEY-----[\\s\\S]*?-----END OPENSSH PRIVATE KEY-----/g,\n    category: PolicyCategory.PRIVATE_KEY,\n    replacement: \"[OPENSSH_PRIVATE_KEY]\",\n  },\n  {\n    name: \"GENERIC_PRIVATE_KEY\",\n    pattern:\n      /-----BEGIN (?:DSA |EC |RSA |OPENSSH )?PRIVATE KEY-----[\\s\\S]*?-----END (?:DSA |EC |RSA |OPENSSH )?PRIVATE KEY-----/g,\n    category: PolicyCategory.PRIVATE_KEY,\n    replacement: \"[PRIVATE_KEY]\",\n  },\n  {\n    name: \"DATABASE_URL\",\n    pattern:\n      /\\b((?:postgres|mysql|mongodb|redis):\\/\\/)([^:\\s]+):(.+)@([^\\s/@]+(?::\\d+)?(?:\\/[^\\s]*)?)/g,\n    category: PolicyCategory.DATABASE_CREDENTIALS,\n    replacement: \"$1[REDACTED]:[REDACTED]@$4\",\n  },\n  {\n    name: \"DOCKER_REGISTRY_TOKEN\",\n    pattern: /\\bdckr_pat_[a-zA-Z0-9_-]{36,}\\b/g,\n    category: PolicyCategory.CONTAINER_REGISTRY,\n    replacement: \"[DOCKER_TOKEN]\",\n  },\n  {\n    name: \"PASSWORD_ASSIGNMENT\",\n    pattern: /(?:password|passwd|pwd)[\\s]*[:=][\\s]*[\"']([^\"']{8,})[\"']/gi,\n    category: PolicyCategory.API_KEY,\n    replacement: 'password=\"[PASSWORD]\"',\n  },\n  {\n    name: \"DOCKER_PASSWORD_FLAG\",\n    pattern: /(docker\\s+\\w+\\s+.*?-p\\s+)(\\S+)/gi,\n    category: PolicyCategory.DEV_SECRET,\n    replacement: \"$1[PASSWORD]\",\n  },\n  {\n    name: \"US_DRIVER_LICENSE\",\n    pattern: /\\b[A-Z]{1,2}[0-9]{6,8}\\b/g,\n    category: PolicyCategory.GOVERNMENT_ID,\n    replacement: \"[DRIVER_LICENSE]\",\n  },\n  {\n    name: \"US_PASSPORT_NUMBER\",\n    pattern:\n      /\\b(?:passport[\\s#:-]*)?[0-9]{9}\\b|\\b(?:passport[\\s#:-]*)?[A-Z][0-9]{8}\\b/gi,\n    category: PolicyCategory.GOVERNMENT_ID,\n    replacement: \"[PASSPORT]\",\n  },\n  {\n    name: \"NATIONAL_ID\",\n    pattern:\n      /\\b(?:national[\\s_-]?id|citizen[\\s_-]?id)[\\s\\-_#:]*([A-Z0-9]{8,15})\\b/gi,\n    category: PolicyCategory.GOVERNMENT_ID,\n    replacement: \"[NATIONAL_ID]\",\n  },\n  {\n    name: \"PASSPORT_MRZ\",\n    pattern:\n      /P<[A-Z]{3}[A-Z<]{38,}\\r?\\n[A-Z0-9<]{9,}[0-9][A-Z]{3}[0-9]{6,7}[MF<][0-9]{6,7}[A-Z0-9<]{14,}[0-9]{2}/g,\n    category: PolicyCategory.GOVERNMENT_ID,\n    replacement: \"[PASSPORT_MRZ]\",\n  },\n  {\n    name: \"ITIN\",\n    pattern: /\\b9[0-9]{2}-[7][0-9]-[0-9]{4}\\b/g,\n    category: PolicyCategory.GOVERNMENT_ID,\n    replacement: \"[ITIN]\",\n  },\n  {\n    name: \"US_EIN_WITH_LABEL\",\n    pattern: /\\b(?:EIN|ein):\\s*\\d{2}-\\d{7}\\b/gi,\n    category: PolicyCategory.TAX_IDENTIFIER,\n    replacement: \"[EIN]\",\n  },\n  {\n    name: \"US_EIN_PREFIXED\",\n    pattern: /\\b(?:EIN|ein)\\s+\\d{2}-\\d{7}\\b/gi,\n    category: PolicyCategory.TAX_IDENTIFIER,\n    replacement: \"[EIN]\",\n  },\n  {\n    name: \"US_TIN_WITH_LABEL\",\n    pattern: /\\b(?:TIN|tin)\\s+\\d{2}-\\d{7}\\b/gi,\n    category: PolicyCategory.TAX_IDENTIFIER,\n    replacement: \"[TIN]\",\n  },\n  {\n    name: \"US_EIN\",\n    pattern: /(?<!\\+)\\b\\d{2}-\\d{7}\\b/g,\n    category: PolicyCategory.TAX_IDENTIFIER,\n    replacement: \"[EIN]\",\n  },\n  {\n    name: \"UK_VAT_NUMBER\",\n    pattern:\n      /\\bGB\\s?(?:\\d{3}\\s?\\d{4}\\s?\\d{2}|\\d{3}\\s?\\d{4}\\s?\\d{2}\\s?\\d{3})\\b/gi,\n    category: PolicyCategory.TAX_IDENTIFIER,\n    replacement: \"[UK_VAT]\",\n  },\n  {\n    name: \"EU_VAT_NUMBER\",\n    pattern:\n      /\\b(?:AT|BE|BG|CY|CZ|DE|DK|EE|ES|FI|FR|GR|HR|HU|IE|IT|LT|LU|LV|MT|NL|PL|PT|RO|SE|SI|SK)\\s?[A-Z0-9]{8,12}\\b/gi,\n    category: PolicyCategory.TAX_IDENTIFIER,\n    replacement: \"[EU_VAT]\",\n  },\n  {\n    name: \"CANADIAN_BUSINESS_NUMBER\",\n    pattern: /\\b\\d{9}(?:\\s?[A-Z]{2}\\d{4})?\\b/g,\n    category: PolicyCategory.TAX_IDENTIFIER,\n    replacement: \"[CA_BN]\",\n  },\n  {\n    name: \"AUSTRALIAN_ABN\",\n    pattern: /\\b\\d{2}\\s?\\d{3}\\s?\\d{3}\\s?\\d{3}\\b/g,\n    category: PolicyCategory.TAX_IDENTIFIER,\n    replacement: \"[AU_ABN]\",\n  },\n  {\n    name: \"GERMAN_TAX_NUMBER\",\n    pattern: /\\b\\d{2}\\/\\d{3}\\/\\d{5}\\b/g,\n    category: PolicyCategory.TAX_IDENTIFIER,\n    replacement: \"[DE_TAX_ID]\",\n  },\n  {\n    name: \"FRENCH_SIRET_NUMBER\",\n    pattern: /\\b\\d{3}\\s?\\d{3}\\s?\\d{3}\\s?\\d{5}\\b/g,\n    category: PolicyCategory.TAX_IDENTIFIER,\n    replacement: \"[FR_SIRET]\",\n  },\n  {\n    name: \"FRENCH_SIREN_NUMBER\",\n    pattern: /\\b\\d{3}\\s?\\d{3}\\s?\\d{3}\\b/g,\n    category: PolicyCategory.TAX_IDENTIFIER,\n    replacement: \"[FR_SIREN]\",\n  },\n  {\n    name: \"AUTO_INSURANCE_POLICY\",\n    pattern:\n      /\\b(?:auto|car|vehicle)\\s*(?:policy|pol)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[AUTO_POLICY]\",\n  },\n  {\n    name: \"HOME_INSURANCE_POLICY\",\n    pattern:\n      /\\b(?:home|house|property)\\s*(?:policy|pol)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[HOME_POLICY]\",\n  },\n  {\n    name: \"LIFE_INSURANCE_POLICY\",\n    pattern: /\\b(?:life)\\s*(?:policy|pol)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[LIFE_POLICY]\",\n  },\n  {\n    name: \"TRAVEL_INSURANCE_POLICY\",\n    pattern: /\\b(?:travel)\\s*(?:policy|pol)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[TRAVEL_POLICY]\",\n  },\n  {\n    name: \"WORKERS_COMPENSATION_CLAIM\",\n    pattern:\n      /\\b(?:workers?\\s*comp|wc)\\s*(?:claim|clm)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[WC_CLAIM]\",\n  },\n  {\n    name: \"DISABILITY_INSURANCE_POLICY\",\n    pattern:\n      /\\b(?:disability|dis)\\s*(?:policy|pol)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[DISABILITY_POLICY]\",\n  },\n  {\n    name: \"DENTAL_INSURANCE_POLICY\",\n    pattern:\n      /\\b(?:dental|dent)\\s*(?:policy|pol)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[DENTAL_POLICY]\",\n  },\n  {\n    name: \"VISION_INSURANCE_POLICY\",\n    pattern:\n      /\\b(?:vision|vis)\\s*(?:policy|pol)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[VISION_POLICY]\",\n  },\n  {\n    name: \"US_HEALTH_INSURANCE_POLICY\",\n    pattern: /\\b(?:policy|member)[#\\s]*[:=]?\\s*[A-Z]{1,3}[0-9]{6,12}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[INSURANCE_POLICY]\",\n  },\n  {\n    name: \"US_INSURANCE_GROUP_NUMBER\",\n    pattern: /\\b(?:group|grp)[#\\s]*[:=]?\\s*[A-Z0-9]{4,12}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[INSURANCE_GROUP]\",\n  },\n  {\n    name: \"US_INSURANCE_CLAIM_NUMBER\",\n    pattern: /\\b(?:claim|clm)[#\\s]*[:=]?\\s*[A-Z0-9]{8,16}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[INSURANCE_CLAIM]\",\n  },\n  {\n    name: \"MEDICARE_NUMBER_US\",\n    pattern: /\\b[0-9]{3}-[0-9]{2}-[0-9]{4}-[A-Z][0-9]?\\b/g,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[MEDICARE_NUMBER]\",\n  },\n  {\n    name: \"MEDICAID_NUMBER_US\",\n    pattern: /\\b(?:medicaid|mcd)[#\\s]*[:=]?\\s*[A-Z0-9]{8,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[MEDICAID_NUMBER]\",\n  },\n  {\n    name: \"BCBS_MEMBER_ID\",\n    pattern: /\\b(?:bcbs|blue\\s*cross)[#\\s]*[:=]?\\s*[A-Z]{3}[0-9]{8,12}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[BCBS_MEMBER_ID]\",\n  },\n  {\n    name: \"AETNA_MEMBER_ID\",\n    pattern: /\\b(?:aetna)[#\\s]*[:=]?\\s*[A-Z]{1,2}[0-9]{8,11}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[AETNA_MEMBER_ID]\",\n  },\n  {\n    name: \"UNITEDHEALTH_MEMBER_ID\",\n    pattern: /\\b(?:united|uhc)[#\\s]*[:=]?\\s*[0-9]{9}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[UHC_MEMBER_ID]\",\n  },\n  {\n    name: \"UK_NHS_NUMBER\",\n    pattern: /\\b[0-9]{3}\\s?[0-9]{3}\\s?[0-9]{4}\\b/g,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[NHS_NUMBER]\",\n  },\n  {\n    name: \"CANADIAN_HEALTH_CARD\",\n    pattern: /\\b[0-9]{4}\\s?[0-9]{3}\\s?[0-9]{3}\\b/g,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[CA_HEALTH_CARD]\",\n  },\n  {\n    name: \"AUSTRALIAN_MEDICARE_NUMBER\",\n    pattern: /\\b[0-9]{4}\\s?[0-9]{5}\\s?[0-9]\\b/g,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[AU_MEDICARE]\",\n  },\n  {\n    name: \"GERMAN_HEALTH_INSURANCE_NUMBER\",\n    pattern: /\\b[A-Z][0-9]{9}\\b/g,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[DE_HEALTH_INSURANCE]\",\n  },\n  {\n    name: \"FRENCH_SOCIAL_SECURITY_NUMBER\",\n    pattern: /\\b[12][0-9]{14}\\b/g,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[FR_SOCIAL_SECURITY]\",\n  },\n  {\n    name: \"EUROPEAN_HEALTH_INSURANCE_CARD\",\n    pattern: /\\b(?:EHIC|ehic)[#\\s]*[:=]?\\s*[0-9]{12,16}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[EHIC_NUMBER]\",\n  },\n  {\n    name: \"WORKERS_COMPENSATION_CLAIM\",\n    pattern:\n      /\\b(?:workers?\\s*comp|wc)\\s*(?:claim|clm)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[WC_CLAIM]\",\n  },\n  {\n    name: \"DISABILITY_INSURANCE_POLICY\",\n    pattern:\n      /\\b(?:disability|dis)\\s*(?:policy|pol)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[DISABILITY_POLICY]\",\n  },\n  {\n    name: \"DENTAL_INSURANCE_POLICY\",\n    pattern:\n      /\\b(?:dental|dent)\\s*(?:policy|pol)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[DENTAL_POLICY]\",\n  },\n  {\n    name: \"VISION_INSURANCE_POLICY\",\n    pattern:\n      /\\b(?:vision|vis)\\s*(?:policy|pol)[#\\s]*[:=]?\\s*[A-Z0-9]{6,15}\\b/gi,\n    category: PolicyCategory.INSURANCE,\n    replacement: \"[VISION_POLICY]\",\n  },\n  {\n    name: \"ROUTING_NUMBER_US\",\n    pattern: /\\b[0-9]{9}\\b/g,\n    category: PolicyCategory.FINANCIAL,\n    replacement: \"[ROUTING_NUMBER]\",\n  },\n  {\n    name: \"IBAN\",\n    pattern: /\\b[A-Z]{2}[0-9]{2}[A-Z0-9]{4}[0-9]{7}([A-Z0-9]?){0,16}\\b/g,\n    category: PolicyCategory.FINANCIAL,\n    replacement: \"[IBAN]\",\n  },\n  {\n    name: \"SWIFT_CODE\",\n    pattern: /\\b[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?\\b(?!=)/g,\n    category: PolicyCategory.FINANCIAL,\n    replacement: \"[SWIFT]\",\n  },\n  {\n    name: \"ACCOUNT_NUMBER_US\",\n    pattern:\n      /\\b(?:account(?:\\s+number)?|acct(?:\\s+num)?|acc(?:\\s+no)?)[:\\s#]+([0-9]{8,17})\\b/gi,\n    category: PolicyCategory.FINANCIAL,\n    replacement: \"[ACCOUNT_NUMBER]\",\n  },\n  {\n    name: \"ACH_ROUTING_NUMBER\",\n    pattern:\n      /\\b(?:routing(?:\\s+number)?|aba|rtn)[:\\s#]+([0-9]{9})\\b|\\b0[0-9]{8}\\b/gi,\n    category: PolicyCategory.FINANCIAL,\n    replacement: \"[ROUTING_NUMBER]\",\n  },\n  {\n    name: \"CREDIT_CARD_CVV\",\n    pattern: /\\b(?:cvv|cvc|cid|cvv2)[:\\s#]*([0-9]{3,4})\\b/gi,\n    category: PolicyCategory.FINANCIAL,\n    replacement: \"[CVV]\",\n  },\n  {\n    name: \"MEDICAL_RECORD_NUMBER\",\n    pattern: /\\b(?:MRN|mrn)[\\s\\-_#:]*([A-Z0-9]{6,12})\\b/gi,\n    category: PolicyCategory.MEDICAL,\n    replacement: \"[MRN]\",\n  },\n  {\n    name: \"HEALTH_INSURANCE_ID\",\n    pattern: /\\b(?:insurance|policy)[\\s\\-_#:]*([A-Z0-9]{8,15})\\b/gi,\n    category: PolicyCategory.MEDICAL,\n    replacement: \"[INSURANCE_ID]\",\n  },\n  {\n    name: \"BITCOIN_ADDRESS\",\n    pattern:\n      /\\b(?!1{20,})[13][a-km-zA-HJ-NP-Z1-9]{25,34}\\b|(?!(?:bc1|tb1|bcrt1)(?:q{38,}|[\\u200b\\s]*q[\\u200b\\s]*q[\\u200b\\s]*q[\\u200b\\s]*q{34,}))(?:bc1|tb1|bcrt1)(?:[\\u200b\\s]*[a-z0-9]){38,87}\\b|(?!BC1Q{38,})BC1(?:[\\u200b\\s]*[A-Z0-9]){38,87}\\b/g,\n    category: PolicyCategory.DIGITAL_IDENTITY,\n    replacement: \"[BITCOIN_ADDRESS]\",\n  },\n  {\n    name: \"ETHEREUM_ADDRESS\",\n    pattern: /\\b0x(?:[\\u200b\\s]*[a-fA-F0-9]){40}\\b/g,\n    category: PolicyCategory.DIGITAL_IDENTITY,\n    replacement: \"[ETH_ADDRESS]\",\n  },\n  {\n    name: \"MAC_ADDRESS\",\n    pattern: /(?<![:-])(?:[0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}\\b(?![:-])/g,\n    category: PolicyCategory.DIGITAL_IDENTITY,\n    replacement: \"[MAC_ADDRESS]\",\n  },\n  {\n    name: \"SHA_HASH\",\n    pattern: /\\b[a-f0-9]{40}\\b|\\b[a-f0-9]{64}\\b|\\b[a-f0-9]{96}\\b/gi,\n    category: PolicyCategory.DIGITAL_IDENTITY,\n    replacement: \"[HASH]\",\n  },\n  {\n    name: \"US_ZIP_CODE\",\n    pattern: /\\b[0-9]{5}(?:-[0-9]{4})?\\b/g,\n    category: PolicyCategory.GEOGRAPHIC,\n    replacement: \"[ZIP]\",\n  },\n  {\n    name: \"CANADIAN_POSTAL_CODE\",\n    pattern: /\\b[A-Z][0-9][A-Z]\\s?[0-9][A-Z][0-9]\\b/g,\n    category: PolicyCategory.GEOGRAPHIC,\n    replacement: \"[POSTAL_CODE]\",\n  },\n  {\n    name: \"UK_POSTCODE\",\n    pattern: /\\b[A-Z]{1,2}[0-9R][0-9A-Z]?\\s?[0-9][ABD-HJLNP-UW-Z]{2}\\b/gi,\n    category: PolicyCategory.GEOGRAPHIC,\n    replacement: \"[POSTCODE]\",\n  },\n  {\n    name: \"GPS_COORDINATES\",\n    pattern: /\\b-?[0-9]{1,3}\\.[0-9]{4,}\\s*,\\s*-?[0-9]{1,3}\\.[0-9]{4,}\\b/g,\n    category: PolicyCategory.GEOGRAPHIC,\n    replacement: \"[COORDINATES]\",\n  },\n  {\n    name: \"EMPLOYEE_ID\",\n    pattern: /\\b(?:emp|employee|badge|staff)[\\s_#:]+([A-Z0-9]{4,12})\\b/gi,\n    category: PolicyCategory.EMPLOYEE_ID,\n    replacement: \"[EMPLOYEE_ID]\",\n  },\n  {\n    name: \"VIN\",\n    pattern: /\\b[A-HJ-NPR-Z0-9]{17}\\b/g,\n    category: PolicyCategory.VEHICLE,\n    replacement: \"[VIN]\",\n  },\n  {\n    name: \"US_LICENSE_PLATE\",\n    pattern: /\\b[A-Z]{1,3}[-\\s]?[0-9]{3,4}\\b|\\b[0-9]{1,3}[-\\s]?[A-Z]{2,4}\\b/g,\n    category: PolicyCategory.VEHICLE,\n    replacement: \"[LICENSE_PLATE]\",\n  },\n  {\n    name: \"GOOGLE_API_KEY\",\n    pattern: /\\bAIzaSy[0-9A-Za-z_-]{32,39}\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[GOOGLE_API_KEY]\",\n  },\n  {\n    name: \"SLACK_TOKEN\",\n    pattern: /\\bxox[bpars]-[0-9]{10,12}-[0-9]{10,12}-[a-zA-Z0-9]{24,32}\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[SLACK_TOKEN]\",\n  },\n  {\n    name: \"PAYPAL_CLIENT_ID\",\n    pattern: /\\bA[a-zA-Z0-9_-]{79,82}\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[PAYPAL_CLIENT_ID]\",\n  },\n  {\n    name: \"TWILIO_API_KEY\",\n    pattern: /\\bSK[a-zA-Z0-9]{31,32}\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[TWILIO_API_KEY]\",\n  },\n  {\n    name: \"SENDGRID_API_KEY\",\n    pattern: /\\bSG\\.[a-zA-Z0-9_-]{66}\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[SENDGRID_API_KEY]\",\n  },\n  {\n    name: \"CLOUDFLARE_API_TOKEN\",\n    pattern: /\\b[a-zA-Z0-9_-]{40}\\b/g,\n    category: PolicyCategory.API_KEY,\n    replacement: \"[CLOUDFLARE_TOKEN]\",\n  },\n  {\n    name: \"AZURE_SUBSCRIPTION_ID\",\n    pattern:\n      /\\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\b/gi,\n    category: PolicyCategory.CLOUD_CREDENTIALS,\n    replacement: \"[AZURE_SUBSCRIPTION_ID]\",\n  },\n  {\n    name: \"GOOGLE_CLOUD_PROJECT_ID\",\n    pattern:\n      /(?:gcp[\\s_-]?project[\\s_-]?id[\\s:#=-]+|--project[=\\s]+|(?:PROJECT(?:_ID)?)[=\\s]+|projects\\/|gcloud\\s+(?:config\\s+set\\s+)?project\\s+)([a-z][-a-z0-9]{4,28}[a-z0-9])\\b/g,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[GCP_PROJECT_ID]\",\n  },\n  {\n    name: \"DOCKER_HUB_TOKEN\",\n    pattern: /\\bdckr_pat_[a-zA-Z0-9_-]{36}\\b/g,\n    category: PolicyCategory.CONTAINER_REGISTRY,\n    replacement: \"[DOCKER_HUB_TOKEN]\",\n  },\n  {\n    name: \"NPM_TOKEN\",\n    pattern: /\\bnpm_[a-zA-Z0-9]{36}\\b/g,\n    category: PolicyCategory.PACKAGE_REGISTRY,\n    replacement: \"[NPM_TOKEN]\",\n  },\n  {\n    name: \"PYPI_TOKEN\",\n    pattern: /\\bpypi-[a-zA-Z0-9_-]{59}\\b/g,\n    category: PolicyCategory.PACKAGE_REGISTRY,\n    replacement: \"[PYPI_TOKEN]\",\n  },\n  {\n    name: \"TERRAFORM_CLOUD_TOKEN\",\n    pattern: /\\b[a-zA-Z0-9]{14}\\.[atlasv1]{7}\\.[a-zA-Z0-9_-]{54}\\b/g,\n    category: PolicyCategory.INFRASTRUCTURE_SECRETS,\n    replacement: \"[TERRAFORM_TOKEN]\",\n  },\n  {\n    name: \"HEROKU_API_KEY\",\n    pattern:\n      /\\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\b/gi,\n    category: PolicyCategory.CLOUD_CREDENTIALS,\n    replacement: \"[HEROKU_API_KEY]\",\n  },\n  {\n    name: \"DIGITALOCEAN_TOKEN\",\n    pattern: /\\bdop_v1_[a-f0-9]{64}\\b/g,\n    category: PolicyCategory.CLOUD_CREDENTIALS,\n    replacement: \"[DO_TOKEN]\",\n  },\n  {\n    name: \"RAILWAY_TOKEN\",\n    pattern:\n      /\\b[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\\b/gi,\n    category: PolicyCategory.CLOUD_CREDENTIALS,\n    replacement: \"[RAILWAY_TOKEN]\",\n  },\n  {\n    name: \"GCP_SERVICE_ACCOUNT_KEY\",\n    pattern: /\\b[a-z0-9_-]+@[a-z0-9_-]+\\.iam\\.gserviceaccount\\.com\\b/gi,\n    category: PolicyCategory.CLOUD_CREDENTIALS,\n    replacement: \"[GCP_SERVICE_ACCOUNT]\",\n  },\n  {\n    name: \"AWS_ACCOUNT_ID\",\n    pattern: /\\b(?:aws(?:-|_)?account(?:-|_)?id)[:\\s#]+([0-9]{12})\\b/gi,\n    category: PolicyCategory.CLOUD_CREDENTIALS,\n    replacement: \"[AWS_ACCOUNT_ID]\",\n  },\n  {\n    name: \"GCP_API_KEY\",\n    pattern: /\\bAIza[0-9A-Za-z_-]{35}\\b/g,\n    category: PolicyCategory.CLOUD_CREDENTIALS,\n    replacement: \"[GCP_API_KEY]\",\n  },\n  {\n    name: \"AZURE_STORAGE_CONNECTION_STRING\",\n    pattern:\n      /\\bDefaultEndpointsProtocol=https;AccountName=[^;]+;AccountKey=[A-Za-z0-9+/=]{88};EndpointSuffix=[^\\s;]+\\b/g,\n    category: PolicyCategory.CLOUD_CREDENTIALS,\n    replacement: \"[AZURE_STORAGE_CONNECTION]\",\n  },\n  {\n    name: \"MONGODB_CONNECTION_STRING\",\n    pattern:\n      /\\b(mongodb(?:\\+srv)?:\\/\\/)([^:\\s]+):(.+)@([^\\s/@]+(?::\\d+)?(?:\\/[^\\s]*)?)/g,\n    category: PolicyCategory.DATABASE_CREDENTIALS,\n    replacement: \"$1[REDACTED]:[REDACTED]@$4\",\n  },\n  {\n    name: \"REDIS_CONNECTION_STRING\",\n    pattern: /\\b(rediss?:\\/\\/)([^:\\s]+):(.+)@([^\\s/@]+(?::\\d+)?(?:\\/[^\\s]*)?)/g,\n    category: PolicyCategory.DATABASE_CREDENTIALS,\n    replacement: \"$1[REDACTED]:[REDACTED]@$4\",\n  },\n  {\n    name: \"ELASTICSEARCH_URL\",\n    pattern: /\\bhttps?:\\/\\/[^\\s]+:9200[^\\s]*\\b/g,\n    category: PolicyCategory.DATABASE_CREDENTIALS,\n    replacement: \"[ELASTICSEARCH_URL]\",\n  },\n  {\n    name: \"KAFKA_BOOTSTRAP_SERVER\",\n    pattern: /\\b[a-zA-Z0-9.-]+:909[0-9]\\b/g,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[KAFKA_BOOTSTRAP]\",\n  },\n  {\n    name: \"CONTAINER_REGISTRY\",\n    pattern:\n      /\\b[a-zA-Z0-9.-]+\\.(?:gcr\\.io|azurecr\\.io|amazonaws\\.com)\\/[a-zA-Z0-9/_-]+:[a-zA-Z0-9._-]+\\b/g,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[CONTAINER_IMAGE]\",\n  },\n  {\n    name: \"GIT_SSH_URL\",\n    pattern: /\\bgit@[a-zA-Z0-9.-]+:[a-zA-Z0-9/_-]+\\.git\\b/g,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[GIT_SSH_URL]\",\n  },\n  {\n    name: \"WEBHOOK_URL\",\n    pattern: /\\bhttps?:\\/\\/hooks\\.[a-zA-Z0-9.-]+\\/[a-zA-Z0-9/_-]+\\b/g,\n    category: PolicyCategory.WEBHOOK_URLS,\n    replacement: \"[WEBHOOK_URL]\",\n  },\n  {\n    name: \"API_ENDPOINT_URL\",\n    pattern: /\\bhttps?:\\/\\/api\\.[a-zA-Z0-9.-]+\\/[a-zA-Z0-9/_-]+\\b/g,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[API_ENDPOINT]\",\n  },\n  {\n    name: \"ENVIRONMENT_VARIABLE_SECRET\",\n    pattern:\n      /\\b([A-Z_][A-Z0-9_]*(?:PASSWORD|PASSWD|PWD|SECRET|TOKEN|KEY)[A-Z0-9_]*)=(.+?)(?=\\s+[A-Z_]|\\s*$)/g,\n    category: PolicyCategory.DEV_SECRET,\n    replacement: \"$1=[REDACTED]\",\n  },\n  {\n    name: \"KUBERNETES_SECRET\",\n    pattern:\n      /\\bkubernetes[\\s_-]?secret[\\s:#=-]*([a-z0-9]([a-z0-9-]*[a-z0-9])?\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)\\b/gi,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[K8S_SECRET]\",\n  },\n  {\n    name: \"SERVICE_ACCOUNT_EMAIL\",\n    pattern: /\\b[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.iam\\.gserviceaccount\\.com\\b/g,\n    category: PolicyCategory.DEV_SECRET,\n    replacement: \"[SERVICE_ACCOUNT]\",\n  },\n  {\n    name: \"SSH_KEY_FINGERPRINT\",\n    pattern:\n      /\\bMD5:[a-f0-9]{2}(:[a-f0-9]{2}){15}\\b|\\bSHA256:[A-Za-z0-9+/]{43}=?\\b/g,\n    category: PolicyCategory.ENCRYPTION_KEYS,\n    replacement: \"[SSH_KEY_FINGERPRINT]\",\n  },\n  {\n    name: \"PGP_KEY_ID\",\n    pattern: /\\b(?:0x)?[A-F0-9]{8,40}\\b/g,\n    category: PolicyCategory.ENCRYPTION_KEYS,\n    replacement: \"[PGP_KEY_ID]\",\n  },\n  {\n    name: \"AGE_SECRET_KEY\",\n    pattern: /\\bAGE-SECRET-KEY-1[A-Z0-9]{58}\\b/g,\n    category: PolicyCategory.ENCRYPTION_KEYS,\n    replacement: \"[AGE_SECRET_KEY]\",\n  },\n  {\n    name: \"AGE_PUBLIC_KEY\",\n    pattern: /\\bage1[a-z0-9]{58}\\b/g,\n    category: PolicyCategory.ENCRYPTION_KEYS,\n    replacement: \"[AGE_PUBLIC_KEY]\",\n  },\n  {\n    name: \"AWS_KMS_KEY_ID\",\n    pattern:\n      /\\b(?:arn:aws:kms:[a-z0-9-]+:\\d{12}:key\\/)?[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\\b/g,\n    category: PolicyCategory.ENCRYPTION_KEYS,\n    replacement: \"[KMS_KEY_ID]\",\n  },\n  {\n    name: \"GCP_KMS_KEY\",\n    pattern:\n      /\\bprojects\\/[^/]+\\/locations\\/[^/]+\\/keyRings\\/[^/]+\\/cryptoKeys\\/[^\\s]+/g,\n    category: PolicyCategory.ENCRYPTION_KEYS,\n    replacement: \"[GCP_KMS_KEY]\",\n  },\n  {\n    name: \"AZURE_KEY_IDENTIFIER\",\n    pattern:\n      /\\bhttps:\\/\\/[a-zA-Z0-9-]+\\.vault\\.azure\\.net\\/keys\\/[a-zA-Z0-9-]+\\/[a-f0-9]{32}\\b/g,\n    category: PolicyCategory.ENCRYPTION_KEYS,\n    replacement: \"[AZURE_KEY_ID]\",\n  },\n  {\n    name: \"MASTER_KEY\",\n    pattern:\n      /\\b(?:master[_-]?key|encryption[_-]?key|secret[_-]?key)[\\s:=]+[A-Za-z0-9+/]{32,}={0,2}\\b/gi,\n    category: PolicyCategory.ENCRYPTION_KEYS,\n    replacement: \"[MASTER_KEY]\",\n  },\n  {\n    name: \"BUILD_NUMBER\",\n    pattern: /\\bbuild[\\s#:-]+([0-9]{4,})\\b/gi,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[BUILD_NUMBER]\",\n  },\n  {\n    name: \"VERSION_TAG\",\n    pattern:\n      /\\b(?:version[\\s:#=-]*)?v[0-9]+\\.[0-9]+\\.[0-9]+(?:-[a-zA-Z0-9._-]+)?(?:\\+[a-zA-Z0-9._-]+)?\\b/gi,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[VERSION]\",\n  },\n  {\n    name: \"COMMIT_HASH\",\n    pattern: /\\b(?:commit|sha)[\\s:#=-]+([a-f0-9]{40}|[a-f0-9]{7,8})\\b/gi,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[COMMIT_HASH]\",\n  },\n  {\n    name: \"PR_ISSUE_NUMBER\",\n    pattern: /\\b(?:PR|MR|Issue)[\\s#:-]*([0-9]{1,6})\\b/gi,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[TICKET_NUMBER]\",\n  },\n  {\n    name: \"JIRA_TICKET\",\n    pattern:\n      /\\b(?:PROJ|TASK|BUG|EPIC|STORY|SUB|TECH|DEV|QA|TEST|DOC|REL)-[0-9]{1,6}\\b/g,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[JIRA_TICKET]\",\n  },\n  {\n    name: \"SENTRY_DSN\",\n    pattern:\n      /\\bhttps:\\/\\/[a-f0-9]{32}@[a-f0-9]+\\.ingest\\.sentry\\.io\\/[0-9]+\\b/g,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[SENTRY_DSN]\",\n  },\n  {\n    name: \"NEW_RELIC_LICENSE_KEY\",\n    pattern:\n      /\\bnewrelic[\\s_-]?(?:license[\\s_-]?)?key[\\s:#=-]*([a-f0-9]{40})\\b/gi,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[NEW_RELIC_KEY]\",\n  },\n  {\n    name: \"DATADOG_API_KEY\",\n    pattern: /\\bdatadog[\\s_-]?(?:api[\\s_-]?)?key[\\s:#=-]*([a-f0-9]{32})\\b/gi,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[DATADOG_API_KEY]\",\n  },\n  {\n    name: \"PAGERDUTY_INTEGRATION_KEY\",\n    pattern:\n      /\\bpagerduty[\\s_-]?(?:integration[\\s_-]?)?key[\\s:#=-]*([a-f0-9]{32})\\b/gi,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[PAGERDUTY_KEY]\",\n  },\n  {\n    name: \"SLACK_WEBHOOK\",\n    pattern:\n      /\\bhttps:\\/\\/hooks\\.slack\\.com\\/services\\/[A-Z0-9]{9}\\/[A-Z0-9]{11}\\/[a-zA-Z0-9]{24}\\b/g,\n    category: PolicyCategory.WEBHOOK_URLS,\n    replacement: \"[SLACK_WEBHOOK]\",\n  },\n  {\n    name: \"DISCORD_WEBHOOK\",\n    pattern:\n      /\\bhttps:\\/\\/discord(?:app)?\\.com\\/api\\/webhooks\\/[0-9]{18,19}\\/[a-zA-Z0-9_-]{68}\\b/g,\n    category: PolicyCategory.WEBHOOK_URLS,\n    replacement: \"[DISCORD_WEBHOOK]\",\n  },\n  {\n    name: \"FIREBASE_CONFIG\",\n    pattern: /\\b[a-zA-Z0-9._-]+-default-rtdb\\.[a-z0-9.-]+\\.firebaseio\\.com\\b/g,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[FIREBASE_URL]\",\n  },\n  {\n    name: \"SUPABASE_URL\",\n    pattern: /\\bhttps:\\/\\/[a-zA-Z0-9]{20}\\.supabase\\.co\\b/g,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[SUPABASE_URL]\",\n  },\n  {\n    name: \"AUTH0_DOMAIN\",\n    pattern: /\\b[a-zA-Z0-9._-]+\\.auth0\\.com\\b/g,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[AUTH0_DOMAIN]\",\n  },\n  {\n    name: \"NETLIFY_SITE_ID\",\n    pattern:\n      /\\b[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\\b/gi,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[NETLIFY_SITE_ID]\",\n  },\n  {\n    name: \"VERCEL_DEPLOYMENT_URL\",\n    pattern: /\\bhttps:\\/\\/[a-zA-Z0-9._-]+\\.vercel\\.app\\b/g,\n    category: PolicyCategory.DEV_IDENTIFIER,\n    replacement: \"[VERCEL_URL]\",\n  },\n  {\n    name: \"JENKINS_TOKEN\",\n    pattern:\n      /\\b(?:jenkins|hudson)[\\s_-]?(?:token|api[\\s_-]?key)[\\s:#=-]*([a-zA-Z0-9]{32,40})\\b/gi,\n    category: PolicyCategory.CI_CD_SECRETS,\n    replacement: \"[JENKINS_TOKEN]\",\n  },\n  {\n    name: \"CIRCLECI_TOKEN\",\n    pattern:\n      /\\bcircleci[\\s_-]?(?:token|api[\\s_-]?key)[\\s:#=-]*([a-zA-Z0-9]{39,43})\\b/gi,\n    category: PolicyCategory.CI_CD_SECRETS,\n    replacement: \"[CIRCLECI_TOKEN]\",\n  },\n  {\n    name: \"TRAVIS_CI_TOKEN\",\n    pattern:\n      /\\btravis[\\s_-]?(?:token|api[\\s_-]?key)[\\s:#=-]*([a-zA-Z0-9]{22})\\b/gi,\n    category: PolicyCategory.CI_CD_SECRETS,\n    replacement: \"[TRAVIS_TOKEN]\",\n  },\n  {\n    name: \"GITLAB_TOKEN\",\n    pattern: /\\b(?:gitlab[\\s_-]?(?:token|pat)|glpat)-[a-zA-Z0-9_-]{20}\\b/g,\n    category: PolicyCategory.CI_CD_SECRETS,\n    replacement: \"[GITLAB_TOKEN]\",\n  },\n  {\n    name: \"GITLAB_CI_TOKEN\",\n    pattern:\n      /\\b(?:CI_JOB_TOKEN|CI_DEPLOY_PASSWORD|CI_REGISTRY_PASSWORD)[\\s:#=-]*([a-zA-Z0-9._-]+)\\b/g,\n    category: PolicyCategory.CI_CD_SECRETS,\n    replacement: \"[GITLAB_CI_TOKEN]\",\n  },\n  {\n    name: \"AZURE_DEVOPS_TOKEN\",\n    pattern:\n      /\\b(?:azdo|azure[\\s_-]?devops)[\\s_-]?(?:pat|token)[\\s:#=-]*([a-z0-9]{52})\\b/gi,\n    category: PolicyCategory.CI_CD_SECRETS,\n    replacement: \"[AZURE_DEVOPS_TOKEN]\",\n  },\n  {\n    name: \"BITBUCKET_TOKEN\",\n    pattern:\n      /\\bbitbucket[\\s_-]?(?:token|app[\\s_-]?password)[\\s:#=-]*([a-zA-Z0-9]{20,40})\\b/gi,\n    category: PolicyCategory.CI_CD_SECRETS,\n    replacement: \"[BITBUCKET_TOKEN]\",\n  },\n  {\n    name: \"HASHICORP_VAULT_TOKEN\",\n    pattern:\n      /\\b(?:vault[\\s_-]?token|VAULT_TOKEN)[\\s:#=-]*([hsrb]\\.[a-zA-Z0-9]{24,})\\b/gi,\n    category: PolicyCategory.INFRASTRUCTURE_SECRETS,\n    replacement: \"[VAULT_TOKEN]\",\n  },\n  {\n    name: \"AWS_SECRETS_MANAGER_ARN\",\n    pattern:\n      /\\barn:aws:secretsmanager:[a-z0-9-]+:\\d{12}:secret:[a-zA-Z0-9/_+=.@-]+-[a-zA-Z0-9]{6}\\b/g,\n    category: PolicyCategory.INFRASTRUCTURE_SECRETS,\n    replacement: \"[AWS_SECRET_ARN]\",\n  },\n  {\n    name: \"AZURE_KEY_VAULT_SECRET\",\n    pattern:\n      /\\bhttps:\\/\\/[a-z0-9-]+\\.vault\\.azure\\.net\\/secrets\\/[a-zA-Z0-9-]+\\/[a-f0-9]{32}\\b/g,\n    category: PolicyCategory.INFRASTRUCTURE_SECRETS,\n    replacement: \"[AZURE_VAULT_SECRET]\",\n  },\n  {\n    name: \"GCP_SECRET_MANAGER\",\n    pattern:\n      /\\bprojects\\/[a-z0-9-]+\\/secrets\\/[a-zA-Z0-9_-]+\\/versions\\/(?:latest|\\d+)\\b/g,\n    category: PolicyCategory.INFRASTRUCTURE_SECRETS,\n    replacement: \"[GCP_SECRET]\",\n  },\n  {\n    name: \"OAUTH_CLIENT_ID\",\n    pattern:\n      /\\b(?:client[\\s_-]?id|CLIENT_ID)[\\s:#=-]*([a-zA-Z0-9._-]{20,})\\b/gi,\n    category: PolicyCategory.AUTH_SECRETS,\n    replacement: \"[OAUTH_CLIENT_ID]\",\n  },\n  {\n    name: \"OAUTH_CLIENT_SECRET\",\n    pattern:\n      /\\b(?:client[\\s_-]?secret|CLIENT_SECRET)[\\s:#=-]*([a-zA-Z0-9._-]{20,})\\b/gi,\n    category: PolicyCategory.AUTH_SECRETS,\n    replacement: \"[OAUTH_CLIENT_SECRET]\",\n  },\n  {\n    name: \"OAUTH_REFRESH_TOKEN\",\n    pattern:\n      /\\b(?:refresh[\\s_-]?token|REFRESH_TOKEN)[\\s:#=-]*((?:1\\/\\/0)?[a-zA-Z0-9._/-]{28,})\\b/gi,\n    category: PolicyCategory.AUTH_SECRETS,\n    replacement: \"[OAUTH_REFRESH_TOKEN]\",\n  },\n  {\n    name: \"OAUTH_ACCESS_TOKEN\",\n    pattern:\n      /\\b(?:access[\\s_-]?token|ACCESS_TOKEN)[\\s:#=-]*([a-zA-Z0-9._/-]{30,})\\b/gi,\n    category: PolicyCategory.AUTH_SECRETS,\n    replacement: \"[OAUTH_ACCESS_TOKEN]\",\n  },\n  {\n    name: \"BASIC_AUTH_HEADER\",\n    pattern: /\\bAuthorization:\\s*Basic\\s+([A-Za-z0-9+/]+=*)\\b/g,\n    category: PolicyCategory.AUTH_SECRETS,\n    replacement: \"Authorization: Basic [REDACTED]\",\n  },\n  {\n    name: \"BEARER_TOKEN_HEADER\",\n    pattern: /\\bAuthorization:\\s*Bearer\\s+([A-Za-z0-9._~+/-]+=*)\\b/g,\n    category: PolicyCategory.AUTH_SECRETS,\n    replacement: \"Authorization: Bearer [REDACTED]\",\n  },\n  {\n    name: \"API_KEY_HEADER\",\n    pattern:\n      /\\b(?:X-API-Key|API-Key|X-Api-Key|ApiKey):\\s*([A-Za-z0-9._~+/-]{20,})\\b/g,\n    category: PolicyCategory.AUTH_SECRETS,\n    replacement: \"[API_KEY_HEADER]: [REDACTED]\",\n  },\n  {\n    name: \"SESSION_ID_COOKIE\",\n    pattern:\n      /\\b(?:sessionid|PHPSESSID|JSESSIONID|connect\\.sid|express\\.sid)=([A-Za-z0-9._~+/%-]{20,})\\b/gi,\n    category: PolicyCategory.AUTH_SECRETS,\n    replacement: \"[SESSION_COOKIE]=[REDACTED]\",\n  },\n  {\n    name: \"QUAY_IO_TOKEN\",\n    pattern:\n      /\\bquay\\.io[\\s_-]?(?:token|robot)[\\s:#=-]*([a-zA-Z0-9+/=]{40,})\\b/gi,\n    category: PolicyCategory.PACKAGE_REGISTRY,\n    replacement: \"[QUAY_TOKEN]\",\n  },\n  {\n    name: \"JFROG_ARTIFACTORY_TOKEN\",\n    pattern:\n      /\\b(?:artifactory[\\s_-]?(?:token|api[\\s_-]?key)|AKC[a-zA-Z0-9]{10,})\\b/gi,\n    category: PolicyCategory.PACKAGE_REGISTRY,\n    replacement: \"[ARTIFACTORY_TOKEN]\",\n  },\n  {\n    name: \"NEXUS_REPOSITORY_TOKEN\",\n    pattern:\n      /\\bnexus[\\s_-]?(?:token|password)[\\s:#=-]*([a-zA-Z0-9._-]{20,})\\b/gi,\n    category: PolicyCategory.PACKAGE_REGISTRY,\n    replacement: \"[NEXUS_TOKEN]\",\n  },\n  {\n    name: \"SONARQUBE_TOKEN\",\n    pattern: /\\b(?:sonar[\\s_-]?token|sqp_[a-f0-9]{40})\\b/gi,\n    category: PolicyCategory.DEV_SECRET,\n    replacement: \"[SONARQUBE_TOKEN]\",\n  },\n  {\n    name: \"GRAFANA_API_KEY\",\n    pattern:\n      /\\b(?:grafana[\\s_-]?api[\\s_-]?key|glsa_[a-zA-Z0-9_-]{32}_[a-f0-9]{8})\\b/gi,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[GRAFANA_API_KEY]\",\n  },\n  {\n    name: \"PROMETHEUS_REMOTE_WRITE\",\n    pattern:\n      /\\b(?:remote_write_url|prometheus_url)[\\s:#=-]*https?:\\/\\/[^\\s]+\\/api\\/v1\\/write\\b/gi,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[PROMETHEUS_REMOTE_WRITE]\",\n  },\n  {\n    name: \"KUBERNETES_CONFIG\",\n    pattern: /\\bapiVersion:\\s*v1\\s*\\nkind:\\s*Config\\b/g,\n    category: PolicyCategory.INFRASTRUCTURE_SECRETS,\n    replacement: \"[KUBECONFIG]\",\n  },\n  {\n    name: \"HELM_REPOSITORY_CREDENTIALS\",\n    pattern:\n      /\\bhelm[\\s_-]?repo[\\s_-]?(?:username|password)[\\s:#=-]*([a-zA-Z0-9._-]+)\\b/gi,\n    category: PolicyCategory.INFRASTRUCTURE_SECRETS,\n    replacement: \"[HELM_CREDENTIALS]\",\n  },\n  {\n    name: \"ANSIBLE_VAULT_PASSWORD\",\n    pattern: /\\bansible[\\s_-]?vault[\\s_-]?password[\\s:#=-]*([^\\s]+)\\b/gi,\n    category: PolicyCategory.INFRASTRUCTURE_SECRETS,\n    replacement: \"[ANSIBLE_VAULT_PASSWORD]\",\n  },\n  {\n    name: \"CONSUL_TOKEN\",\n    pattern:\n      /\\b(?:consul[\\s_-]?token|X-Consul-Token)[\\s:#=-]*([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})\\b/gi,\n    category: PolicyCategory.INFRASTRUCTURE_SECRETS,\n    replacement: \"[CONSUL_TOKEN]\",\n  },\n  {\n    name: \"RANCHER_TOKEN\",\n    pattern: /\\b(?:rancher[\\s_-]?token|token-[a-z0-9]{5}:[a-z0-9]{5})\\b/gi,\n    category: PolicyCategory.INFRASTRUCTURE_SECRETS,\n    replacement: \"[RANCHER_TOKEN]\",\n  },\n  {\n    name: \"OKTA_API_TOKEN\",\n    pattern:\n      /\\b(?:okta[\\s_-]?(?:token|api[\\s_-]?key)[\\s:#=-]+[a-zA-Z0-9_-]{40,}|00[a-zA-Z0-9_-]{40})\\b/gi,\n    category: PolicyCategory.AUTH_SECRETS,\n    replacement: \"[OKTA_TOKEN]\",\n  },\n  {\n    name: \"AUTH0_API_TOKEN\",\n    pattern:\n      /\\bauth0[\\s_-]?(?:token|api[\\s_-]?key|secret)[\\s:#=-]*([a-zA-Z0-9._-]{32,})\\b/gi,\n    category: PolicyCategory.AUTH_SECRETS,\n    replacement: \"[AUTH0_TOKEN]\",\n  },\n  {\n    name: \"KEYCLOAK_CLIENT_SECRET\",\n    pattern:\n      /\\bkeycloak[\\s_-]?client[\\s_-]?secret[\\s:#=-]*([a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12})\\b/gi,\n    category: PolicyCategory.AUTH_SECRETS,\n    replacement: \"[KEYCLOAK_SECRET]\",\n  },\n  {\n    name: \"RABBITMQ_CONNECTION_STRING\",\n    pattern: /\\b(amqps?:\\/\\/)([^:\\s]+):(.+)@([^\\s/@]+(?::\\d+)?(?:\\/[^\\s]*)?)/g,\n    category: PolicyCategory.DATABASE_CREDENTIALS,\n    replacement: \"$1[REDACTED]:[REDACTED]@$4\",\n  },\n  {\n    name: \"POSTGRESQL_CONNECTION_STRING\",\n    pattern:\n      /\\b(postgres(?:ql)?:\\/\\/)([^:\\s]+):(.+)@([^\\s/@]+(?::\\d+)?(?:\\/[^\\s]*)?)/g,\n    category: PolicyCategory.DATABASE_CREDENTIALS,\n    replacement: \"$1[REDACTED]:[REDACTED]@$4\",\n  },\n  {\n    name: \"MYSQL_CONNECTION_STRING\",\n    pattern: /\\b(mysql:\\/\\/)([^:\\s]+):(.+)@([^\\s/@]+(?::\\d+)?(?:\\/[^\\s]*)?)/g,\n    category: PolicyCategory.DATABASE_CREDENTIALS,\n    replacement: \"$1[REDACTED]:[REDACTED]@$4\",\n  },\n  {\n    name: \"CASSANDRA_CONNECTION_STRING\",\n    pattern:\n      /\\b(cassandra:\\/\\/)([^:\\s]+):(.+)@([^\\s/@]+(?::\\d+)?(?:\\/[^\\s]*)?)/g,\n    category: PolicyCategory.DATABASE_CREDENTIALS,\n    replacement: \"$1[REDACTED]:[REDACTED]@$4\",\n  },\n  {\n    name: \"JDBC_CONNECTION_STRING\",\n    pattern:\n      /\\b(jdbc:[a-zA-Z0-9]+:\\/\\/)([^:\\s]+):(.+)@([^\\s/@]+(?::\\d+)?(?:\\/[^\\s]*)?)/g,\n    category: PolicyCategory.DATABASE_CREDENTIALS,\n    replacement: \"$1[REDACTED]:[REDACTED]@$4\",\n  },\n  {\n    name: \"SMTP_CONNECTION_STRING\",\n    pattern: /\\b(smtps?:\\/\\/)([^:\\s]+):(.+)@([^\\s/@:]+(?::\\d+)?)/g,\n    category: PolicyCategory.DATABASE_CREDENTIALS,\n    replacement: \"$1[REDACTED]:[REDACTED]@$4\",\n  },\n  {\n    name: \"SPLUNK_HEC_TOKEN\",\n    pattern:\n      /\\bSplunk\\s+[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\\b/g,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[SPLUNK_HEC_TOKEN]\",\n  },\n  {\n    name: \"SUMO_LOGIC_COLLECTOR\",\n    pattern:\n      /\\bhttps:\\/\\/collectors\\..*\\.sumologic\\.com\\/receiver\\/v1\\/http\\/[a-zA-Z0-9=]+\\b/g,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[SUMOLOGIC_COLLECTOR]\",\n  },\n  {\n    name: \"LAUNCHDARKLY_SDK_KEY\",\n    pattern:\n      /\\b(?:sdk-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}|mob-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})\\b/g,\n    category: PolicyCategory.DEV_SECRET,\n    replacement: \"[LAUNCHDARKLY_KEY]\",\n  },\n  {\n    name: \"SEGMENT_WRITE_KEY\",\n    pattern:\n      /\\bsegment[\\s_-]?(?:write[\\s_-]?key|writekey)[\\s:#=-]*([a-zA-Z0-9]{32})\\b/gi,\n    category: PolicyCategory.DEV_SECRET,\n    replacement: \"[SEGMENT_WRITE_KEY]\",\n  },\n  {\n    name: \"MIXPANEL_API_SECRET\",\n    pattern:\n      /\\bmixpanel[\\s_-]?(?:api[\\s_-]?secret|secret)[\\s:#=-]*([a-f0-9]{32})\\b/gi,\n    category: PolicyCategory.DEV_SECRET,\n    replacement: \"[MIXPANEL_SECRET]\",\n  },\n  {\n    name: \"ALGOLIA_API_KEY\",\n    pattern:\n      /\\balgolia[\\s_-]?(?:api[\\s_-]?key|admin[\\s_-]?key)[\\s:#=-]*([a-f0-9]{32})\\b/gi,\n    category: PolicyCategory.DEV_SECRET,\n    replacement: \"[ALGOLIA_API_KEY]\",\n  },\n  {\n    name: \"ELASTIC_CLOUD_ID\",\n    pattern: /\\belastic[\\s_-]?cloud[\\s_-]?id[\\s:#=-]*([a-zA-Z0-9+/=]{50,})\\b/gi,\n    category: PolicyCategory.DEV_SECRET,\n    replacement: \"[ELASTIC_CLOUD_ID]\",\n  },\n  {\n    name: \"BUGSNAG_API_KEY\",\n    pattern: /\\bbugsnag[\\s_-]?api[\\s_-]?key[\\s:#=-]*([a-f0-9]{32})\\b/gi,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[BUGSNAG_API_KEY]\",\n  },\n  {\n    name: \"ROLLBAR_ACCESS_TOKEN\",\n    pattern:\n      /\\brollbar[\\s_-]?(?:access[\\s_-]?token|post[\\s_-]?server[\\s_-]?item)[\\s:#=-]*([a-f0-9]{32})\\b/gi,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[ROLLBAR_TOKEN]\",\n  },\n  {\n    name: \"AIRBRAKE_API_KEY\",\n    pattern:\n      /\\bairbrake[\\s_-]?(?:api[\\s_-]?key|project[\\s_-]?key)[\\s:#=-]*([a-f0-9]{32})\\b/gi,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[AIRBRAKE_KEY]\",\n  },\n  {\n    name: \"LOGDNA_INGESTION_KEY\",\n    pattern:\n      /\\blogdna[\\s_-]?(?:ingestion[\\s_-]?key|api[\\s_-]?key)[\\s:#=-]*([a-f0-9]{32})\\b/gi,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[LOGDNA_KEY]\",\n  },\n  {\n    name: \"LOGGLY_TOKEN\",\n    pattern:\n      /\\bloggly[\\s_-]?(?:token|customer[\\s_-]?token)[\\s:#=-]*([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})\\b/gi,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[LOGGLY_TOKEN]\",\n  },\n  {\n    name: \"PAPERTRAIL_TOKEN\",\n    pattern:\n      /\\bpapertrail[\\s_-]?(?:token|api[\\s_-]?token)[\\s:#=-]*([a-zA-Z0-9]{32,})\\b/gi,\n    category: PolicyCategory.MONITORING_SECRETS,\n    replacement: \"[PAPERTRAIL_TOKEN]\",\n  },\n];\n\nexport const DEFAULT_ENABLED_CATEGORIES = Object.values(PolicyCategory).filter(\n  (category) => category !== PolicyCategory.CUSTOM\n);\n","export type {\n  RedactionConfig,\n  ConfigFile,\n  ResolvedConfig,\n  ConfigLoaderOptions,\n  RedactionMode,\n  CategoryConfig,\n  HashAlgorithm,\n  ConfigValidationError,\n  ConfigSource,\n} from \"./types.js\";\nexport { ConfigValidationError as ConfigValidationException } from \"./loader.js\";\nexport { loadConfig } from \"./loader.js\";\nexport * from \"./defaults.js\";\nexport * from \"./validator.js\";\nexport * from \"./merger.js\";\n\nimport type { ConfigLoaderOptions, ResolvedConfig } from \"./types.js\";\n\nlet cachedConfig: ResolvedConfig | null = null;\n\n/**\n * Loads and caches Redactum configuration from files or defaults.\n *\n * @public\n * @param options - Options for loading configuration\n * @returns Promise resolving to the resolved configuration\n * @example\n * ```typescript\n * const config = await getConfig({\n *   configPath: \"./redactum.config.json\"\n * });\n * ```\n */\nexport async function getConfig(\n  options?: ConfigLoaderOptions\n): Promise<ResolvedConfig> {\n  if (!cachedConfig || options) {\n    const { loadConfig: load } = await import(\"./loader.js\");\n    cachedConfig = await load(options);\n  }\n\n  return cachedConfig;\n}\n\n/**\n * Clears the cached configuration, forcing a reload on next access.\n *\n * @public\n * @example\n * ```typescript\n * clearConfigCache();\n * const newConfig = await getConfig();\n * ```\n */\nexport function clearConfigCache(): void {\n  cachedConfig = null;\n}\n","import type { Policy, RedactumOptions } from \"../types/index.js\";\nimport { PolicyCategory } from \"../types/index.js\";\nimport { POLICIES } from \"../constants.js\";\n\n/**\n * Validates Redactum configuration options.\n *\n * @public\n * @param options - The options object to validate\n * @throws Error if options are invalid\n * @example\n * ```typescript\n * redactumValidateOptions({\n *   policies: [\"EMAIL_ADDRESS\", \"SSN\"],\n *   replacement: \"***\"\n * });\n * ```\n */\nexport function redactumValidateOptions(options: RedactumOptions): void {\n  if (options.policies) {\n    const validPolicyNames = POLICIES.map((p) => p.name);\n    for (const policyName of options.policies) {\n      if (!validPolicyNames.includes(policyName as string)) {\n        throw new Error(`Invalid policy name: ${policyName}`);\n      }\n    }\n  }\n\n  if (options.customPolicies) {\n    for (const pattern of options.customPolicies) {\n      redactumValidatePolicy(pattern);\n    }\n  }\n\n  if (options.replacement !== undefined) {\n    if (\n      typeof options.replacement !== \"string\" &&\n      typeof options.replacement !== \"function\"\n    ) {\n      throw new Error(\"Replacement must be a string or function\");\n    }\n  }\n\n  if (options.excludePatterns) {\n    const validPolicyNames = POLICIES.map((p) => p.name);\n    for (const excludePattern of options.excludePatterns) {\n      if (!(excludePattern.pattern instanceof RegExp)) {\n        throw new Error(\"Exclude pattern must have a valid RegExp pattern\");\n      }\n\n      if (excludePattern.policies) {\n        if (!Array.isArray(excludePattern.policies)) {\n          throw new Error(\"Exclude pattern policies must be an array\");\n        }\n\n        for (const policyName of excludePattern.policies) {\n          if (!validPolicyNames.includes(policyName as string)) {\n            throw new Error(\n              `Invalid policy name in exclude pattern: ${policyName}`\n            );\n          }\n        }\n      }\n    }\n  }\n}\n\n/**\n * Validates a custom policy pattern.\n *\n * @public\n * @param pattern - The policy pattern to validate\n * @throws Error if the pattern is invalid\n * @example\n * ```typescript\n * redactumValidatePolicy({\n *   name: \"EMPLOYEE_ID\",\n *   pattern: /EMP-\\d{6}/g,\n *   category: PolicyCategory.CUSTOM\n * });\n * ```\n */\nexport function redactumValidatePolicy(pattern: Policy): void {\n  if (!pattern.name || typeof pattern.name !== \"string\") {\n    throw new Error(\"Pattern must have a valid name\");\n  }\n\n  if (!(pattern.pattern instanceof RegExp)) {\n    throw new Error(\n      `Pattern \"${pattern.name}\" must have a valid RegExp pattern`\n    );\n  }\n\n  if (!Object.values(PolicyCategory).includes(pattern.category)) {\n    throw new Error(\n      `Pattern \"${pattern.name}\" has invalid category: ${pattern.category}`\n    );\n  }\n\n  if (\n    pattern.replacement !== undefined &&\n    typeof pattern.replacement !== \"string\"\n  ) {\n    throw new Error(`Pattern \"${pattern.name}\" replacement must be a string`);\n  }\n}\n","/**\n * Calculates Shannon entropy of a string to measure randomness.\n *\n * @public\n * @param text - The text to calculate entropy for\n * @returns Entropy value between 0 and 8 (higher means more random)\n * @example\n * ```typescript\n * const entropy = redactumCalculateEntropy(\"abc123\");\n * console.log(entropy);\n * ```\n */\nexport function redactumCalculateEntropy(text: string): number {\n  if (!text || text.length === 0) {\n    return 0;\n  }\n\n  const frequencies = new Map<string, number>();\n\n  for (const char of text) {\n    frequencies.set(char, (frequencies.get(char) ?? 0) + 1);\n  }\n\n  let entropy = 0;\n  const length = text.length;\n\n  for (const count of frequencies.values()) {\n    const probability = count / length;\n    entropy -= probability * Math.log2(probability);\n  }\n\n  return entropy;\n}\n\n/**\n * Heuristic check to determine if a string looks like a secret or API key.\n *\n * @public\n * @param text - The text to analyze\n * @param minLength - Minimum length to consider (default: 16)\n * @param entropyThreshold - Entropy threshold for randomness (default: 4.5)\n * @returns True if the text appears to be a secret\n * @example\n * ```typescript\n * const isSecret = redactumLooksLikeSecret(\"sk_live_4eC39HqLyjWDarjtT1zdp7dc\");\n * console.log(isSecret);\n * ```\n */\nexport function redactumLooksLikeSecret(\n  text: string,\n  minLength: number = 16,\n  entropyThreshold: number = 4.5\n): boolean {\n  if (text.length < minLength) {\n    return false;\n  }\n\n  const entropy = redactumCalculateEntropy(text);\n\n  if (entropy > entropyThreshold) {\n    return true;\n  }\n\n  const hasUpperCase = /[A-Z]/.test(text);\n  const hasLowerCase = /[a-z]/.test(text);\n  const hasNumbers = /[0-9]/.test(text);\n  const hasSpecialChars = /[^A-Za-z0-9]/.test(text);\n\n  const complexityScore = [\n    hasUpperCase,\n    hasLowerCase,\n    hasNumbers,\n    hasSpecialChars,\n  ].filter(Boolean).length;\n\n  return complexityScore >= 3 && entropy > 3.5;\n}\n","export { UniversalProvider } from \"./universal-provider.js\";\n\nexport { createLangChainAdapter } from \"./adapters/langchain-adapter.js\";\nexport { createLlamaIndexAdapter } from \"./adapters/llamaindex-adapter.js\";\n\nexport { createVercelAIAdapter } from \"./adapters/vercel-ai-adapter.js\";\nexport { createOpenAIAdapter } from \"./adapters/openai-adapter.js\";\nexport { createAnthropicAdapter } from \"./adapters/anthropic-adapter.js\";\n\nexport type {\n  UniversalRedactionConfig,\n  UniversalRedactionResult,\n} from \"./base/types.js\";\n","import { createRedactum } from \"../core/redactum.js\";\nimport type {\n  UniversalRedactionConfig,\n  UniversalRedactionResult,\n} from \"./base/types.js\";\nimport type { RedactumFinding } from \"../types/index.js\";\n\nexport class UniversalProvider {\n  private redactor: ReturnType<typeof createRedactum>;\n  private config: UniversalRedactionConfig;\n\n  constructor(config: UniversalRedactionConfig = {}) {\n    this.config = this.normalizeConfig(config);\n    this.redactor = createRedactum(this.config);\n  }\n\n  redact(input: unknown): UniversalRedactionResult {\n    const startTime = Date.now();\n\n    const { text, metadata } = this.extractContent(input);\n    const textResult = this.redactor.redactum(text);\n    const { redactedMetadata, metadataFindings } =\n      this.redactMetadata(metadata);\n    const allFindings: RedactumFinding[] = [\n      ...textResult.findings,\n      ...metadataFindings,\n    ];\n\n    const finalMetadata = this.transformMetadata(redactedMetadata, allFindings);\n\n    return {\n      content: textResult.redactedText,\n      redactionResult: {\n        ...textResult,\n        findings: allFindings,\n      },\n      providerMetadata: finalMetadata,\n      processingTime: Date.now() - startTime,\n    };\n  }\n\n  async redactBatch(inputs: unknown[]): Promise<UniversalRedactionResult[]> {\n    return Promise.all(inputs.map((input) => this.redact(input)));\n  }\n\n  updateConfig(newConfig: Partial<UniversalRedactionConfig>): void {\n    this.config = this.normalizeConfig({ ...this.config, ...newConfig });\n    this.redactor.updateOptions(this.config);\n  }\n\n  getConfig(): UniversalRedactionConfig {\n    return { ...this.config };\n  }\n\n  private extractContent(input: unknown): {\n    text: string;\n    metadata: Record<string, unknown>;\n  } {\n    if (typeof input === \"string\") {\n      return { text: input, metadata: {} };\n    }\n\n    if (input && typeof input === \"object\") {\n      let text = \"\";\n      let metadata: Record<string, unknown> = {};\n\n      const textProps = [\"text\", \"content\", \"pageContent\", \"data\", \"value\"];\n      for (const prop of textProps) {\n        if (\n          prop in input &&\n          typeof (input as Record<string, unknown>)[prop] === \"string\"\n        ) {\n          text = (input as Record<string, unknown>)[prop] as string;\n          break;\n        }\n      }\n\n      if (\n        !text &&\n        \"getText\" in input &&\n        typeof (input as { getText?: unknown }).getText === \"function\"\n      ) {\n        text = (input as { getText: () => string }).getText();\n      }\n\n      const metaProps = [\"metadata\", \"meta\", \"properties\", \"attributes\"];\n      for (const prop of metaProps) {\n        if (\n          prop in input &&\n          typeof (input as Record<string, unknown>)[prop] === \"object\"\n        ) {\n          metadata = (input as Record<string, unknown>)[prop] as Record<\n            string,\n            unknown\n          >;\n          break;\n        }\n      }\n\n      if (\n        Object.keys(metadata).length === 0 &&\n        \"getMetadata\" in input &&\n        typeof (input as { getMetadata?: unknown }).getMetadata === \"function\"\n      ) {\n        metadata = (\n          input as { getMetadata: () => Record<string, unknown> }\n        ).getMetadata();\n      }\n\n      if (\n        !text &&\n        \"toString\" in input &&\n        typeof (input as { toString?: unknown }).toString === \"function\"\n      ) {\n        text = (input as object).toString();\n      }\n\n      return { text: text || String(input), metadata };\n    }\n\n    return { text: String(input), metadata: {} };\n  }\n\n  private redactMetadata(metadata: Record<string, unknown>): {\n    redactedMetadata: Record<string, unknown>;\n    metadataFindings: RedactumFinding[];\n  } {\n    if (!this.config.metadataKeys || this.config.metadataKeys.length === 0) {\n      return { redactedMetadata: metadata, metadataFindings: [] };\n    }\n\n    const redactedMetadata = { ...metadata };\n    const metadataFindings: RedactumFinding[] = [];\n\n    for (const key of this.config.metadataKeys) {\n      if (key in metadata && typeof metadata[key] === \"string\") {\n        const result = this.redactor.redactum(metadata[key] as string);\n        redactedMetadata[key] = result.redactedText;\n        metadataFindings.push(...result.findings);\n      }\n    }\n\n    return { redactedMetadata, metadataFindings };\n  }\n\n  private transformMetadata(\n    metadata: Record<string, unknown>,\n    findings: RedactumFinding[]\n  ): Record<string, unknown> {\n    if (this.config.metadataTransformer) {\n      return this.config.metadataTransformer(metadata, findings);\n    }\n\n    if (this.config.includeFindings && findings.length > 0) {\n      return {\n        ...metadata,\n        piiRedaction: {\n          findings,\n          redactedAt: new Date().toISOString(),\n          totalFindings: findings.length,\n        },\n      };\n    }\n\n    return metadata;\n  }\n\n  private normalizeConfig(\n    config: UniversalRedactionConfig\n  ): UniversalRedactionConfig {\n    return {\n      includeFindings: false,\n      metadataKeys: [],\n      providerOptions: {},\n      ...config,\n    };\n  }\n}\n\nexport function createUniversalProvider(\n  config?: UniversalRedactionConfig\n): UniversalProvider {\n  return new UniversalProvider(config);\n}\n","import { BaseAdapter } from \"./base-adapter.js\";\nimport type { UniversalRedactionConfig } from \"../base/types.js\";\n\ninterface Document {\n  pageContent: string;\n  metadata: Record<string, unknown>;\n  id?: string;\n}\n\nexport class LangChainAdapter extends BaseAdapter<\n  Document[] | string,\n  Document[] | string\n> {\n  readonly providerName = \"langchain\";\n  readonly version = \"3.0.0\";\n\n  async transform(input: Document[] | string): Promise<Document[] | string> {\n    if (typeof input === \"string\") {\n      const result = this.provider.redact(input);\n\n      return result.content as string;\n    }\n\n    if (Array.isArray(input)) {\n      const results = await this.provider.redactBatch(input);\n\n      return results.map((result, index) => {\n        const doc = input[index];\n\n        return {\n          pageContent: result.content as string,\n          metadata: result.providerMetadata || (doc ? doc.metadata : {}),\n          ...(doc?.id && { id: doc.id }),\n        };\n      });\n    }\n\n    throw new Error(`Invalid input type for ${this.providerName} adapter`);\n  }\n\n  createDocumentTransformer(): (documents: Document[]) => Promise<Document[]> {\n    return async (documents: Document[]): Promise<Document[]> =>\n      this.transform(documents) as Promise<Document[]>;\n  }\n\n  async createRunnable(): Promise<unknown> {\n    try {\n      const { RunnableLambda } = await import(\"@langchain/core/runnables\");\n\n      return new RunnableLambda({\n        func: async (input: string) => {\n          const result = this.provider.redact(input);\n\n          return result.content;\n        },\n      });\n    } catch {\n      throw new Error(\n        \"@langchain/core runnables not available. Install @langchain/core\"\n      );\n    }\n  }\n\n  async createRunnableWithMetadata(): Promise<unknown> {\n    try {\n      const { RunnableLambda } = await import(\"@langchain/core/runnables\");\n\n      return new RunnableLambda({\n        func: async (input: string) => this.provider.redact(input),\n      });\n    } catch {\n      throw new Error(\n        \"@langchain/core runnables not available. Install @langchain/core\"\n      );\n    }\n  }\n\n  async createDocumentTransform(): Promise<unknown> {\n    try {\n      const { BaseDocumentTransformer } = await import(\n        \"@langchain/core/documents\"\n      );\n\n      return class PIIRedactionTransformer extends BaseDocumentTransformer {\n        constructor(private adapter: LangChainAdapter) {\n          super();\n        }\n\n        async transformDocuments(documents: Document[]): Promise<Document[]> {\n          return this.adapter.transform(documents) as Promise<Document[]>;\n        }\n\n        static from(adapter: LangChainAdapter): PIIRedactionTransformer {\n          return new PIIRedactionTransformer(adapter);\n        }\n      }.from(this);\n    } catch {\n      throw new Error(\n        \"@langchain/core documents not available. Install @langchain/core\"\n      );\n    }\n  }\n}\n\nexport function createLangChainAdapter(\n  config?: UniversalRedactionConfig\n): LangChainAdapter {\n  return new LangChainAdapter(config);\n}\n","import { UniversalProvider } from \"../universal-provider.js\";\nimport type { UniversalRedactionConfig } from \"../base/types.js\";\n\nexport abstract class BaseAdapter<TInput = unknown, TOutput = unknown> {\n  protected provider: UniversalProvider;\n\n  abstract readonly providerName: string;\n  abstract readonly version: string;\n\n  constructor(config: UniversalRedactionConfig = {}) {\n    this.provider = new UniversalProvider(config);\n  }\n\n  abstract transform(input: TInput): Promise<TOutput> | TOutput;\n\n  updateConfig(newConfig: Partial<UniversalRedactionConfig>): void {\n    this.provider.updateConfig(newConfig);\n  }\n\n  getConfig(): UniversalRedactionConfig {\n    return this.provider.getConfig();\n  }\n}\n","import { BaseAdapter } from \"./base-adapter.js\";\nimport type { UniversalRedactionConfig } from \"../base/types.js\";\n\ninterface BaseNode {\n  getText(): string;\n  clone(options?: {\n    text?: string;\n    metadata?: Record<string, unknown>;\n  }): BaseNode;\n  getMetadata(): Record<string, unknown>;\n  getNodeId(): string;\n  setContent(content: string): void;\n}\n\ninterface NodeTransformation {\n  transform(nodes: BaseNode[]): Promise<BaseNode[]>;\n}\n\nexport class LlamaIndexAdapter extends BaseAdapter<\n  BaseNode[] | string,\n  BaseNode[] | string\n> {\n  readonly providerName = \"llamaindex\";\n  readonly version = \"5.0.0\";\n\n  async transform(input: BaseNode[] | string): Promise<BaseNode[] | string> {\n    if (typeof input === \"string\") {\n      const result = this.provider.redact(input);\n\n      return result.content as string;\n    }\n\n    if (Array.isArray(input)) {\n      const results = await this.provider.redactBatch(input);\n\n      return results.map((result, index) => {\n        const node = input[index];\n        if (!node) {\n          throw new Error(`Missing node at index ${index}`);\n        }\n\n        return node.clone({\n          text: result.content as string,\n          metadata: result.providerMetadata || node.getMetadata(),\n        });\n      });\n    }\n\n    throw new Error(`Invalid input type for ${this.providerName} adapter`);\n  }\n\n  createNodeTransformer(): {\n    transform: (nodes: BaseNode[]) => Promise<BaseNode[]>;\n  } {\n    return {\n      transform: async (nodes: BaseNode[]): Promise<BaseNode[]> =>\n        this.transform(nodes) as Promise<BaseNode[]>,\n    };\n  }\n\n  createTransformComponent(): {\n    transformNodes: (nodes: BaseNode[]) => Promise<BaseNode[]>;\n  } {\n    return {\n      transformNodes: async (nodes: BaseNode[]): Promise<BaseNode[]> =>\n        this.transform(nodes) as Promise<BaseNode[]>,\n    };\n  }\n\n  async createTransformation(): Promise<NodeTransformation> {\n    return {\n      transform: async (nodes: BaseNode[]): Promise<BaseNode[]> =>\n        this.transform(nodes) as Promise<BaseNode[]>,\n    };\n  }\n\n  async createPreprocessor(): Promise<unknown> {\n    try {\n      const { BaseNodePostprocessor } = await import(\"llamaindex\");\n\n      return class PIIRedactionPostprocessor extends BaseNodePostprocessor {\n        constructor(private adapter: LlamaIndexAdapter) {\n          super();\n        }\n\n        async postprocessNodes(nodes: BaseNode[]): Promise<BaseNode[]> {\n          return this.adapter.transform(nodes) as Promise<BaseNode[]>;\n        }\n\n        static from(adapter: LlamaIndexAdapter): PIIRedactionPostprocessor {\n          return new PIIRedactionPostprocessor(adapter);\n        }\n      }.from(this);\n    } catch {\n      throw new Error(\"llamaindex not available. Install llamaindex\");\n    }\n  }\n}\n\nexport function createLlamaIndexAdapter(\n  config?: UniversalRedactionConfig\n): LlamaIndexAdapter {\n  return new LlamaIndexAdapter(config);\n}\n","import { BaseAdapter } from \"./base-adapter.js\";\nimport type { UniversalRedactionConfig } from \"../base/types.js\";\n\ninterface StreamTextOptions {\n  model: unknown;\n  prompt: string;\n  messages?: Array<{ role: string; content: string }>;\n  system?: string;\n  maxTokens?: number;\n  temperature?: number;\n  [key: string]: unknown;\n}\n\ninterface StreamObjectOptions {\n  model: unknown;\n  prompt: string;\n  schema: unknown;\n  system?: string;\n  [key: string]: unknown;\n}\n\ninterface GenerateTextOptions {\n  model: unknown;\n  prompt?: string;\n  messages?: Array<{ role: string; content: string }>;\n  system?: string;\n  tools?: Record<string, unknown>;\n  [key: string]: unknown;\n}\n\ninterface Tool {\n  description?: string;\n  parameters: unknown;\n  execute: (params: unknown) => Promise<unknown> | unknown;\n}\n\nexport class VercelAIAdapter extends BaseAdapter<unknown, unknown> {\n  readonly providerName = \"vercel-ai\";\n  readonly version = \"3.0.0\";\n\n  async transform(input: unknown): Promise<unknown> {\n    const result = this.provider.redact(input);\n\n    return result.content;\n  }\n\n  createStreamingWrapper(): {\n    streamText: (options: StreamTextOptions) => Promise<unknown>;\n    streamObject: (options: StreamObjectOptions) => Promise<unknown>;\n    generateText: (options: GenerateTextOptions) => Promise<unknown>;\n  } {\n    return {\n      streamText: async (options: StreamTextOptions) => {\n        try {\n          const { streamText } = await import(\"ai\");\n\n          const cleanOptions = { ...options };\n\n          if (options.prompt) {\n            const result = this.provider.redact(options.prompt);\n            cleanOptions.prompt = result.content as string;\n          }\n\n          if (options.messages) {\n            cleanOptions.messages = options.messages.map((msg) => ({\n              ...msg,\n              content: this.provider.redact(msg.content).content as string,\n            }));\n          }\n\n          if (options.system) {\n            const result = this.provider.redact(options.system);\n            cleanOptions.system = result.content as string;\n          }\n\n          return await streamText(cleanOptions);\n        } catch (error) {\n          if ((error as Error).message?.includes(\"Cannot find module\")) {\n            throw new Error(\"Vercel AI SDK not available. Install ai package\");\n          }\n          throw new Error(\"Vercel AI SDK not available. Install ai package\");\n        }\n      },\n\n      streamObject: async (options: StreamObjectOptions) => {\n        try {\n          const { streamObject } = await import(\"ai\");\n\n          const cleanOptions = { ...options };\n\n          if (options.prompt) {\n            const result = this.provider.redact(options.prompt);\n            cleanOptions.prompt = result.content as string;\n          }\n\n          if (options.system) {\n            const result = this.provider.redact(options.system);\n            cleanOptions.system = result.content as string;\n          }\n\n          return await streamObject(cleanOptions);\n        } catch (error) {\n          if ((error as Error).message?.includes(\"Cannot find module\")) {\n            throw new Error(\"Vercel AI SDK not available. Install ai package\");\n          }\n          throw new Error(\"Vercel AI SDK not available. Install ai package\");\n        }\n      },\n\n      generateText: async (options: GenerateTextOptions) => {\n        try {\n          const { generateText } = await import(\"ai\");\n\n          const cleanOptions = { ...options };\n\n          if (options.prompt) {\n            const result = this.provider.redact(options.prompt);\n            cleanOptions.prompt = result.content as string;\n          }\n\n          if (options.messages) {\n            cleanOptions.messages = options.messages.map((msg) => ({\n              ...msg,\n              content: this.provider.redact(msg.content).content as string,\n            }));\n          }\n\n          if (options.system) {\n            const result = this.provider.redact(options.system);\n            cleanOptions.system = result.content as string;\n          }\n\n          return await generateText(cleanOptions);\n        } catch (error) {\n          if ((error as Error).message?.includes(\"Cannot find module\")) {\n            throw new Error(\"Vercel AI SDK not available. Install ai package\");\n          }\n          throw new Error(\"Vercel AI SDK not available. Install ai package\");\n        }\n      },\n    };\n  }\n\n  createToolWrapper(tools: Record<string, Tool>): Record<string, Tool> {\n    const wrappedTools: Record<string, Tool> = {};\n\n    for (const [name, tool] of Object.entries(tools)) {\n      wrappedTools[name] = {\n        ...tool,\n        execute: async (params: unknown) => {\n          const cleanParams = this.provider.redact(JSON.stringify(params));\n          const parsedParams = JSON.parse(cleanParams.content as string);\n\n          return tool.execute(parsedParams);\n        },\n      };\n    }\n\n    return wrappedTools;\n  }\n\n  createMessageCleaner(): {\n    cleanMessage: (message: { role: string; content: string }) => {\n      role: string;\n      content: string;\n    };\n    cleanMessages: (\n      messages: Array<{ role: string; content: string }>\n    ) => Array<{ role: string; content: string }>;\n  } {\n    return {\n      cleanMessage: (message: { role: string; content: string }) => ({\n        ...message,\n        content: this.provider.redact(message.content).content as string,\n      }),\n\n      cleanMessages: (messages: Array<{ role: string; content: string }>) =>\n        messages.map((msg) => ({\n          ...msg,\n          content: this.provider.redact(msg.content).content as string,\n        })),\n    };\n  }\n}\n\nexport function createVercelAIAdapter(\n  config?: UniversalRedactionConfig\n): VercelAIAdapter {\n  return new VercelAIAdapter(config);\n}\n","import { BaseAdapter } from \"./base-adapter.js\";\nimport type { UniversalRedactionConfig } from \"../base/types.js\";\n\ninterface ChatMessage {\n  role: \"system\" | \"user\" | \"assistant\" | \"tool\" | \"function\";\n  content: string | null;\n  name?: string;\n  tool_calls?: unknown[];\n  tool_call_id?: string;\n}\n\ninterface ChatCompletionOptions {\n  model: string;\n  messages: ChatMessage[];\n  functions?: unknown[];\n  tools?: unknown[];\n  temperature?: number;\n  max_tokens?: number;\n  [key: string]: unknown;\n}\n\ninterface CompletionOptions {\n  model: string;\n  prompt: string | string[];\n  max_tokens?: number;\n  temperature?: number;\n  [key: string]: unknown;\n}\n\ninterface EmbeddingOptions {\n  model: string;\n  input: string | string[];\n  [key: string]: unknown;\n}\n\ninterface AssistantMessage {\n  role: \"user\" | \"assistant\";\n  content: string;\n  file_ids?: string[];\n  metadata?: Record<string, unknown>;\n}\n\nexport class OpenAIAdapter extends BaseAdapter<unknown, unknown> {\n  readonly providerName = \"openai\";\n  readonly version = \"4.0.0\";\n\n  async transform(input: unknown): Promise<unknown> {\n    const result = this.provider.redact(input);\n\n    return result.content;\n  }\n\n  createClientWrapper(openai: unknown): {\n    chat: {\n      completions: {\n        create: (options: ChatCompletionOptions) => Promise<unknown>;\n      };\n    };\n    completions: { create: (options: CompletionOptions) => Promise<unknown> };\n    embeddings: { create: (options: EmbeddingOptions) => Promise<unknown> };\n  } {\n    return {\n      chat: {\n        completions: {\n          create: async (options: ChatCompletionOptions) => {\n            try {\n              const client = openai as {\n                chat: {\n                  completions: {\n                    create: (options: unknown) => Promise<unknown>;\n                  };\n                };\n              };\n\n              const cleanOptions = {\n                ...options,\n                messages: options.messages.map((msg) => ({\n                  ...msg,\n                  content: msg.content\n                    ? (this.provider.redact(msg.content).content as string)\n                    : null,\n                })),\n              };\n\n              return client.chat.completions.create(cleanOptions);\n            } catch {\n              throw new Error(\"OpenAI client not available\");\n            }\n          },\n        },\n      },\n\n      completions: {\n        create: async (options: CompletionOptions) => {\n          try {\n            const client = openai as {\n              completions: { create: (options: unknown) => Promise<unknown> };\n            };\n\n            const cleanOptions = { ...options };\n\n            if (typeof options.prompt === \"string\") {\n              cleanOptions.prompt = this.provider.redact(options.prompt)\n                .content as string;\n            } else if (Array.isArray(options.prompt)) {\n              cleanOptions.prompt = options.prompt.map(\n                (p) => this.provider.redact(p).content as string\n              );\n            }\n\n            return client.completions.create(cleanOptions);\n          } catch {\n            throw new Error(\"OpenAI client not available\");\n          }\n        },\n      },\n\n      embeddings: {\n        create: async (options: EmbeddingOptions) => {\n          try {\n            const client = openai as {\n              embeddings: { create: (options: unknown) => Promise<unknown> };\n            };\n\n            const cleanOptions = { ...options };\n\n            if (typeof options.input === \"string\") {\n              cleanOptions.input = this.provider.redact(options.input)\n                .content as string;\n            } else if (Array.isArray(options.input)) {\n              cleanOptions.input = options.input.map(\n                (text) => this.provider.redact(text).content as string\n              );\n            }\n\n            return client.embeddings.create(cleanOptions);\n          } catch {\n            throw new Error(\"OpenAI client not available\");\n          }\n        },\n      },\n    };\n  }\n\n  createAssistantWrapper(openai: unknown): {\n    beta: {\n      threads: {\n        messages: {\n          create: (\n            threadId: string,\n            message: AssistantMessage\n          ) => Promise<unknown>;\n        };\n        runs: {\n          create: (\n            threadId: string,\n            options: {\n              assistant_id: string;\n              instructions?: string;\n              [key: string]: unknown;\n            }\n          ) => Promise<unknown>;\n        };\n      };\n    };\n  } {\n    return {\n      beta: {\n        threads: {\n          messages: {\n            create: async (threadId: string, message: AssistantMessage) => {\n              try {\n                const client = openai as {\n                  beta: {\n                    threads: {\n                      messages: {\n                        create: (\n                          threadId: string,\n                          message: unknown\n                        ) => Promise<unknown>;\n                      };\n                    };\n                  };\n                };\n\n                const cleanMessage = {\n                  ...message,\n                  content: this.provider.redact(message.content)\n                    .content as string,\n                };\n\n                if (message.metadata) {\n                  const cleanMetadata: Record<string, unknown> = {};\n                  for (const [key, value] of Object.entries(message.metadata)) {\n                    if (typeof value === \"string\") {\n                      cleanMetadata[key] = this.provider.redact(value).content;\n                    } else {\n                      cleanMetadata[key] = value;\n                    }\n                  }\n                  cleanMessage.metadata = cleanMetadata;\n                }\n\n                return client.beta.threads.messages.create(\n                  threadId,\n                  cleanMessage\n                );\n              } catch {\n                throw new Error(\"OpenAI client not available\");\n              }\n            },\n          },\n\n          runs: {\n            create: async (\n              threadId: string,\n              options: {\n                assistant_id: string;\n                instructions?: string;\n                [key: string]: unknown;\n              }\n            ) => {\n              try {\n                const client = openai as {\n                  beta: {\n                    threads: {\n                      runs: {\n                        create: (\n                          threadId: string,\n                          options: unknown\n                        ) => Promise<unknown>;\n                      };\n                    };\n                  };\n                };\n\n                const cleanOptions = { ...options };\n\n                if (options.instructions) {\n                  cleanOptions.instructions = this.provider.redact(\n                    options.instructions\n                  ).content as string;\n                }\n\n                return client.beta.threads.runs.create(threadId, cleanOptions);\n              } catch {\n                throw new Error(\"OpenAI client not available\");\n              }\n            },\n          },\n        },\n      },\n    };\n  }\n\n  createFunctionCallCleaner(): {\n    cleanFunctionCall: (functionCall: { name: string; arguments: string }) => {\n      name: string;\n      arguments: string;\n    };\n    cleanToolCall: (toolCall: {\n      function: { name: string; arguments: string };\n      [key: string]: unknown;\n    }) => {\n      function: { name: string; arguments: string };\n      [key: string]: unknown;\n    };\n  } {\n    return {\n      cleanFunctionCall: (functionCall: {\n        name: string;\n        arguments: string;\n      }) => ({\n        ...functionCall,\n        arguments: this.provider.redact(functionCall.arguments)\n          .content as string,\n      }),\n\n      cleanToolCall: (toolCall: {\n        function: { name: string; arguments: string };\n        [key: string]: unknown;\n      }) => ({\n        ...toolCall,\n        function: {\n          ...toolCall.function,\n          arguments: this.provider.redact(toolCall.function.arguments)\n            .content as string,\n        },\n      }),\n    };\n  }\n\n  createMessageProcessor(): {\n    processMessages: (messages: ChatMessage[]) => ChatMessage[];\n    processSystemMessage: (content: string) => string;\n    processUserMessage: (content: string) => string;\n  } {\n    return {\n      processMessages: (messages: ChatMessage[]) =>\n        messages.map((msg) => ({\n          ...msg,\n          content: msg.content\n            ? (this.provider.redact(msg.content).content as string)\n            : null,\n        })),\n\n      processSystemMessage: (content: string) =>\n        this.provider.redact(content).content as string,\n\n      processUserMessage: (content: string) =>\n        this.provider.redact(content).content as string,\n    };\n  }\n}\n\nexport function createOpenAIAdapter(\n  config?: UniversalRedactionConfig\n): OpenAIAdapter {\n  return new OpenAIAdapter(config);\n}\n","import { BaseAdapter } from \"./base-adapter.js\";\nimport type { UniversalRedactionConfig } from \"../base/types.js\";\n\ninterface ClaudeMessage {\n  role: \"user\" | \"assistant\";\n  content:\n    | string\n    | Array<{ type: string; text?: string; [key: string]: unknown }>;\n}\n\ninterface MessageOptions {\n  model: string;\n  messages: ClaudeMessage[];\n  system?: string;\n  max_tokens: number;\n  temperature?: number;\n  tools?: unknown[];\n  tool_choice?: unknown;\n  [key: string]: unknown;\n}\n\ninterface CompletionOptions {\n  model: string;\n  prompt: string;\n  max_tokens_to_sample: number;\n  temperature?: number;\n  [key: string]: unknown;\n}\n\ninterface ContentBlock {\n  type: string;\n  text?: string;\n  tool_use?: {\n    id: string;\n    name: string;\n    input: Record<string, unknown>;\n  };\n  [key: string]: unknown;\n}\n\nexport class AnthropicAdapter extends BaseAdapter<unknown, unknown> {\n  readonly providerName = \"anthropic\";\n  readonly version = \"0.24.0\";\n\n  async transform(input: unknown): Promise<unknown> {\n    const result = this.provider.redact(input);\n\n    return result.content;\n  }\n\n  createClientWrapper(anthropic: unknown): {\n    messages: {\n      create: (options: MessageOptions) => Promise<unknown>;\n      stream: (options: MessageOptions) => Promise<unknown>;\n    };\n    completions: { create: (options: CompletionOptions) => Promise<unknown> };\n  } {\n    return {\n      messages: {\n        create: async (options: MessageOptions) => {\n          try {\n            const client = anthropic as {\n              messages: { create: (options: unknown) => Promise<unknown> };\n            };\n\n            const cleanOptions = {\n              ...options,\n              messages: options.messages.map((msg) => ({\n                ...msg,\n                content: this.processContent(msg.content),\n              })),\n            };\n\n            if (options.system) {\n              cleanOptions.system = this.provider.redact(options.system)\n                .content as string;\n            }\n\n            return client.messages.create(cleanOptions);\n          } catch {\n            throw new Error(\"Anthropic client not available\");\n          }\n        },\n\n        stream: async (options: MessageOptions) => {\n          try {\n            const client = anthropic as {\n              messages: { create: (options: unknown) => Promise<unknown> };\n            };\n\n            const cleanOptions = {\n              ...options,\n              messages: options.messages.map((msg) => ({\n                ...msg,\n                content: this.processContent(msg.content),\n              })),\n              stream: true,\n            };\n\n            if (options.system) {\n              cleanOptions.system = this.provider.redact(options.system)\n                .content as string;\n            }\n\n            return client.messages.create(cleanOptions);\n          } catch {\n            throw new Error(\"Anthropic client not available\");\n          }\n        },\n      },\n\n      completions: {\n        create: async (options: CompletionOptions) => {\n          try {\n            const client = anthropic as {\n              completions: { create: (options: unknown) => Promise<unknown> };\n            };\n\n            const cleanOptions = {\n              ...options,\n              prompt: this.provider.redact(options.prompt).content as string,\n            };\n\n            return client.completions.create(cleanOptions);\n          } catch {\n            throw new Error(\"Anthropic client not available\");\n          }\n        },\n      },\n    };\n  }\n\n  private processContent(\n    content:\n      | string\n      | Array<{ type: string; text?: string; [key: string]: unknown }>\n  ): string | ContentBlock[] {\n    if (typeof content === \"string\") {\n      return this.provider.redact(content).content as string;\n    }\n\n    if (Array.isArray(content)) {\n      return content.map((block) => {\n        const cleanBlock = { ...block };\n\n        if (block.text) {\n          cleanBlock.text = this.provider.redact(block.text).content as string;\n        }\n\n        if (\n          block[\"tool_use\"] &&\n          typeof block[\"tool_use\"] === \"object\" &&\n          block[\"tool_use\"] !== null\n        ) {\n          const toolUse = block[\"tool_use\"] as {\n            id: string;\n            name: string;\n            input?: Record<string, unknown>;\n          };\n          if (toolUse.input) {\n            const cleanInput: Record<string, unknown> = {};\n            for (const [key, value] of Object.entries(toolUse.input)) {\n              if (typeof value === \"string\") {\n                cleanInput[key] = this.provider.redact(value).content;\n              } else {\n                cleanInput[key] = value;\n              }\n            }\n            cleanBlock[\"tool_use\"] = {\n              ...toolUse,\n              input: cleanInput,\n            };\n          }\n        }\n\n        return cleanBlock;\n      });\n    }\n\n    return content;\n  }\n\n  createToolCallProcessor(): {\n    processToolCall: (toolCall: {\n      name: string;\n      input: Record<string, unknown>;\n    }) => { name: string; input: Record<string, unknown> };\n  } {\n    return {\n      processToolCall: (toolCall: {\n        name: string;\n        input: Record<string, unknown>;\n      }) => {\n        const cleanInput: Record<string, unknown> = {};\n\n        for (const [key, value] of Object.entries(toolCall.input)) {\n          if (typeof value === \"string\") {\n            cleanInput[key] = this.provider.redact(value).content;\n          } else if (typeof value === \"object\" && value !== null) {\n            cleanInput[key] = JSON.parse(\n              this.provider.redact(JSON.stringify(value)).content as string\n            );\n          } else {\n            cleanInput[key] = value;\n          }\n        }\n\n        return {\n          ...toolCall,\n          input: cleanInput,\n        };\n      },\n    };\n  }\n\n  createMessageProcessor(): {\n    processMessage: (message: ClaudeMessage) => ClaudeMessage;\n    processMessages: (messages: ClaudeMessage[]) => ClaudeMessage[];\n    processSystemPrompt: (system: string) => string;\n  } {\n    return {\n      processMessage: (message: ClaudeMessage): ClaudeMessage => ({\n        ...message,\n        content: this.processContent(message.content),\n      }),\n\n      processMessages: (messages: ClaudeMessage[]): ClaudeMessage[] =>\n        messages.map((msg) => ({\n          ...msg,\n          content: this.processContent(msg.content),\n        })),\n\n      processSystemPrompt: (system: string): string =>\n        this.provider.redact(system).content as string,\n    };\n  }\n\n  createConversationCleaner(): {\n    cleanConversation: (\n      messages: ClaudeMessage[],\n      systemPrompt?: string\n    ) => { messages: ClaudeMessage[]; system?: string };\n  } {\n    return {\n      cleanConversation: (messages: ClaudeMessage[], systemPrompt?: string) => {\n        const cleanMessages = messages.map((msg) => ({\n          ...msg,\n          content: this.processContent(msg.content),\n        }));\n\n        const cleanSystem = systemPrompt\n          ? (this.provider.redact(systemPrompt).content as string)\n          : undefined;\n\n        return {\n          messages: cleanMessages,\n          system: cleanSystem,\n        };\n      },\n    };\n  }\n\n  createStreamingWrapper(): {\n    createStreamingMessage: (\n      options: MessageOptions\n    ) => Promise<MessageOptions>;\n  } {\n    return {\n      createStreamingMessage: async (options: MessageOptions) => {\n        const cleanOptions = {\n          ...options,\n          messages: options.messages.map((msg) => ({\n            ...msg,\n            content: this.processContent(msg.content),\n          })),\n          stream: true,\n        };\n\n        if (options.system) {\n          cleanOptions.system = this.provider.redact(options.system)\n            .content as string;\n        }\n\n        return cleanOptions;\n      },\n    };\n  }\n}\n\nexport function createAnthropicAdapter(\n  config?: UniversalRedactionConfig\n): AnthropicAdapter {\n  return new AnthropicAdapter(config);\n}\n"]}