{"version":3,"sources":["../src/attribute-redacting-processor.ts"],"names":[],"mappings":"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","file":"chunk-CMNGGTQL.cjs","sourcesContent":["/**\n * Attribute Redacting Processor\n *\n * Automatically redacts PII and sensitive data from span attributes before export.\n * This is critical for compliance (GDPR, PCI-DSS, HIPAA) and data security.\n *\n * @example Basic usage with preset\n * ```typescript\n * init({\n *   service: 'my-app',\n *   attributeRedactor: 'default'\n * })\n * ```\n *\n * @example Custom patterns\n * ```typescript\n * init({\n *   service: 'my-app',\n *   attributeRedactor: {\n *     keyPatterns: [/password/i, /secret/i],\n *     valuePatterns: [\n *       { name: 'customerId', pattern: /CUST-\\d{8}/g, replacement: 'CUST-***' }\n *     ]\n *   }\n * })\n * ```\n */\n\nimport type {\n  SpanProcessor,\n  ReadableSpan,\n} from '@opentelemetry/sdk-trace-base';\nimport type { Context, AttributeValue, Attributes } from '@opentelemetry/api';\nimport type { Span } from '@opentelemetry/sdk-trace-base';\n\n/**\n * Custom redactor function type\n */\nexport type AttributeRedactorFn = (\n  key: string,\n  value: AttributeValue,\n) => AttributeValue;\n\n/**\n * Built-in redactor preset names\n */\nexport type AttributeRedactorPreset = 'default' | 'strict' | 'pci-dss';\n\n/**\n * Masker function type - receives the matched string and returns a masked version\n */\nexport type MaskFn = (match: string) => string;\n\n/**\n * Value pattern configuration\n */\nexport interface ValuePatternConfig {\n  /** Name for debugging/logging */\n  name: string;\n  /** Regex pattern to match in values */\n  pattern: RegExp;\n  /** Custom replacement (default: uses global replacement) */\n  replacement?: string;\n  /** Mask function for smart partial masking (overrides replacement) */\n  mask?: MaskFn;\n}\n\n/**\n * Built-in PII pattern names\n */\nexport type BuiltinPatternName = keyof typeof builtinPatterns;\n\n/**\n * Attribute redactor configuration\n */\nexport interface AttributeRedactorConfig {\n  /** Patterns to match against attribute keys (redacts entire value if key matches) */\n  keyPatterns?: RegExp[];\n\n  /** Patterns to match against attribute values (redacts matched portion) */\n  valuePatterns?: ValuePatternConfig[];\n\n  /** Dot-notation paths to redact (e.g. 'user.password', 'payment.card') */\n  paths?: string[];\n\n  /** Built-in PII patterns to enable. `true` enables all, `false` disables all, array selects specific ones. */\n  builtins?: boolean | BuiltinPatternName[];\n\n  /** Custom RegExp patterns for string-level redaction */\n  patterns?: RegExp[];\n\n  /** Default replacement string (default: '[REDACTED]') */\n  replacement?: string;\n\n  /** Custom redactor function for full control */\n  redactor?: AttributeRedactorFn;\n}\n\n/**\n * Processor options\n */\nexport interface AttributeRedactingProcessorOptions {\n  redactor: AttributeRedactorConfig | AttributeRedactorPreset;\n}\n\n/**\n * Built-in patterns for detecting sensitive data\n */\nexport const REDACTOR_PATTERNS = {\n  // Value patterns (match content in attribute values)\n  email: /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\\b/gi,\n  phone: /\\b\\d{3}[-.]?\\d{3}[-.]?\\d{4}\\b/g,\n  ssn: /\\b\\d{3}[-]?\\d{2}[-]?\\d{4}\\b/g,\n  creditCard: /\\b\\d{4}[- ]?\\d{4}[- ]?\\d{4}[- ]?\\d{4}\\b/g,\n  bearerToken: /Bearer\\s+[A-Za-z0-9._~+/=-]+/gi,\n  apiKeyInValue: /(?:api[_-]?key|apikey|api_secret)[=:][\\s\"']*[A-Za-z0-9_-]+/gi,\n  jwt: /eyJ[A-Za-z0-9_-]*\\.eyJ[A-Za-z0-9_-]*\\.[A-Za-z0-9_-]*/g,\n\n  // Key patterns (match attribute names - redacts entire value)\n  sensitiveKey:\n    /^(password|passwd|pwd|secret|token|api[_-]?key|auth|credential|private[_-]?key|authorization)$/i,\n} as const;\n\n/**\n * Built-in PII detection patterns with smart masking.\n * Each builtin preserves just enough signal for debugging while scrubbing PII.\n */\nexport const builtinPatterns = {\n  /** Credit card numbers → ****1111 (PCI DSS: last 4 allowed) */\n  creditCard: {\n    pattern: /\\b\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}\\b/g,\n    mask: (m: string) => `****${m.replace(/[\\s-]/g, '').slice(-4)}`,\n  },\n  /** Email addresses → a***@***.com */\n  email: {\n    pattern: /[\\w.+-]+@[\\w-]+\\.[\\w.]+/g,\n    mask: (m: string) => {\n      const at = m.indexOf('@');\n      if (at < 1) return '***@***';\n      const tld = m.slice(m.lastIndexOf('.'));\n      return `${m[0]}***@***${tld}`;\n    },\n  },\n  /** IPv4 addresses → ***.***.***.100 (last octet only) */\n  ipv4: {\n    pattern:\n      /\\b(?!0\\.0\\.0\\.0\\b)(?!127\\.0\\.0\\.1\\b)\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b/g,\n    mask: (m: string) => `***.***.***.${m.split('.').pop()}`,\n  },\n  /** International phone numbers → +33******78 (country code + last 2 digits) */\n  phone: {\n    pattern:\n      /(?:\\+\\d{1,3}[\\s.-]?)?\\(?\\d{1,4}\\)?[\\s.-]?\\d{2,4}[\\s.-]?\\d{2,4}[\\s.-]?\\d{2,4}\\b/g,\n    mask: (m: string) => {\n      const digits = m.replace(/[^\\d]/g, '');\n      const hasPlus = m.startsWith('+');\n      if (hasPlus && digits.length > 4) {\n        const ccMatch = m.match(/^\\+\\d{1,3}/);\n        const cc = ccMatch ? ccMatch[0] : '+';\n        return `${cc}******${digits.slice(-2)}`;\n      }\n      if (digits.length > 2) {\n        return `${'*'.repeat(digits.length - 2)}${digits.slice(-2)}`;\n      }\n      return '***';\n    },\n  },\n  /** JWT tokens → eyJ***.*** */\n  jwt: {\n    pattern: /\\beyJ[\\w-]*\\.[\\w-]*\\.[\\w-]*\\b/g,\n    mask: () => 'eyJ***.***',\n  },\n  /** Bearer tokens → Bearer *** */\n  bearer: {\n    pattern: /\\bBearer\\s+[\\w\\-.~+/]{8,}=*/gi,\n    mask: () => 'Bearer ***',\n  },\n  /** IBAN → FR76****189 (country + check digits + last 3) */\n  iban: {\n    pattern:\n      /\\b[A-Z]{2}\\d{2}[\\s-]?[\\dA-Z]{4}[\\s-]?[\\dA-Z]{4}[\\s-]?[\\dA-Z]{4}[\\s-]?[\\dA-Z]{0,4}[\\s-]?[\\dA-Z]{0,4}[\\s-]?[\\dA-Z]{0,4}\\b/g,\n    mask: (m: string) => {\n      const clean = m.replace(/[\\s-]/g, '');\n      return `${clean.slice(0, 4)}****${clean.slice(-3)}`;\n    },\n  },\n} as const;\n\nfunction cloneRegex(re: RegExp): RegExp {\n  return new RegExp(re.source, re.flags);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction toRegExp(value: unknown): RegExp | undefined {\n  if (value instanceof RegExp) return value;\n  if (typeof value === 'string') return new RegExp(value, 'g');\n  if (isPlainObject(value) && typeof value.source === 'string') {\n    const flags = typeof value.flags === 'string' ? value.flags : 'g';\n    return new RegExp(value.source, flags);\n  }\n  return undefined;\n}\n\nfunction toRegExpArray(value: unknown): RegExp[] | undefined {\n  if (!Array.isArray(value)) return undefined;\n  const out: RegExp[] = [];\n  for (const item of value) {\n    const re = toRegExp(item);\n    if (re) out.push(re);\n  }\n  return out.length > 0 ? out : [];\n}\n\nfunction builtinToValuePattern(name: BuiltinPatternName): ValuePatternConfig {\n  const b = builtinPatterns[name];\n  return { name, pattern: cloneRegex(b.pattern), mask: b.mask };\n}\n\n/**\n * Default value patterns for the 'default' preset\n */\nconst DEFAULT_VALUE_PATTERNS: ValuePatternConfig[] = [\n  builtinToValuePattern('email'),\n  builtinToValuePattern('phone'),\n  { name: 'ssn', pattern: REDACTOR_PATTERNS.ssn },\n  builtinToValuePattern('creditCard'),\n];\n\n/**\n * Built-in redactor presets\n */\nexport const REDACTOR_PRESETS: Record<\n  AttributeRedactorPreset,\n  AttributeRedactorConfig\n> = {\n  /**\n   * Default preset - covers common PII patterns with smart masking\n   * Detects: emails (a***@***.com), phone numbers, SSNs, credit cards (****1111)\n   * Redacts keys: password, secret, token, apiKey, auth, credential\n   */\n  default: {\n    keyPatterns: [REDACTOR_PATTERNS.sensitiveKey],\n    valuePatterns: DEFAULT_VALUE_PATTERNS,\n    builtins: true,\n    replacement: '[REDACTED]',\n  },\n\n  /**\n   * Strict preset - more aggressive redaction for high-security environments\n   * Includes everything in default plus: Bearer tokens, JWTs, IBAN, API keys in values\n   */\n  strict: {\n    keyPatterns: [REDACTOR_PATTERNS.sensitiveKey, /bearer/i, /jwt/i],\n    valuePatterns: [\n      ...DEFAULT_VALUE_PATTERNS,\n      builtinToValuePattern('jwt'),\n      builtinToValuePattern('bearer'),\n      builtinToValuePattern('iban'),\n      { name: 'apiKeyInValue', pattern: REDACTOR_PATTERNS.apiKeyInValue },\n    ],\n    builtins: true,\n    replacement: '[REDACTED]',\n  },\n\n  /**\n   * PCI-DSS preset - focused on payment card industry compliance\n   * Redacts: credit card numbers (****1111), CVV-like patterns, card-related keys\n   */\n  'pci-dss': {\n    keyPatterns: [/card/i, /cvv/i, /cvc/i, /pan/i, /expir/i, /ccn/i],\n    valuePatterns: [builtinToValuePattern('creditCard')],\n    builtins: ['creditCard'],\n    replacement: '[REDACTED]',\n  },\n};\n\n/**\n * Normalize redactor config that may have been deserialized from JSON/YAML.\n * Converts regex-like values back to RegExp instances.\n */\nexport function normalizeAttributeRedactorConfig(\n  raw: AttributeRedactorConfig | AttributeRedactorPreset | unknown,\n): AttributeRedactorConfig | AttributeRedactorPreset | undefined {\n  if (raw === undefined || raw === null) return undefined;\n  if (typeof raw === 'string') return raw as AttributeRedactorPreset;\n  if (!isPlainObject(raw)) return undefined;\n\n  const config: AttributeRedactorConfig = {};\n\n  if (Array.isArray(raw.paths)) {\n    config.paths = raw.paths.filter(\n      (value): value is string => typeof value === 'string',\n    );\n  }\n\n  if (typeof raw.replacement === 'string') {\n    config.replacement = raw.replacement;\n  }\n\n  if (typeof raw.builtins === 'boolean') {\n    config.builtins = raw.builtins;\n  } else if (Array.isArray(raw.builtins)) {\n    config.builtins = raw.builtins.filter(\n      (name): name is BuiltinPatternName => typeof name === 'string',\n    );\n  }\n\n  if (typeof raw.redactor === 'function') {\n    config.redactor = raw.redactor as AttributeRedactorFn;\n  }\n\n  const keyPatterns = toRegExpArray(raw.keyPatterns);\n  if (keyPatterns) config.keyPatterns = keyPatterns;\n\n  const patterns = toRegExpArray(raw.patterns);\n  if (patterns) config.patterns = patterns;\n\n  if (Array.isArray(raw.valuePatterns)) {\n    const valuePatterns: ValuePatternConfig[] = [];\n    for (const item of raw.valuePatterns) {\n      if (!isPlainObject(item) || typeof item.name !== 'string') continue;\n      const pattern = toRegExp(item.pattern);\n      if (!pattern) continue;\n      valuePatterns.push({\n        name: item.name,\n        pattern,\n        replacement:\n          typeof item.replacement === 'string' ? item.replacement : undefined,\n        mask:\n          typeof item.mask === 'function' ? (item.mask as MaskFn) : undefined,\n      });\n    }\n    config.valuePatterns = valuePatterns;\n  }\n\n  return config;\n}\n\n/**\n * Resolve config to a normalized form\n */\nfunction resolveConfig(\n  config: AttributeRedactorConfig | AttributeRedactorPreset,\n): AttributeRedactorConfig {\n  const normalized = normalizeAttributeRedactorConfig(config);\n  if (!normalized) {\n    throw new Error('Invalid attribute redactor config');\n  }\n\n  if (typeof normalized === 'string') {\n    const preset = REDACTOR_PRESETS[normalized];\n    if (!preset) {\n      throw new Error(\n        `Unknown attribute redactor preset: \"${normalized}\". ` +\n          `Available presets: ${Object.keys(REDACTOR_PRESETS).join(', ')}`,\n      );\n    }\n    return preset;\n  }\n\n  const resolvedConfig: AttributeRedactorConfig = {\n    ...normalized,\n    keyPatterns: normalized.keyPatterns\n      ? [...normalized.keyPatterns]\n      : undefined,\n    valuePatterns: normalized.valuePatterns\n      ? [...normalized.valuePatterns]\n      : undefined,\n    paths: normalized.paths ? [...normalized.paths] : undefined,\n    patterns: normalized.patterns ? [...normalized.patterns] : undefined,\n  };\n\n  // Merge built-in patterns if enabled\n  if (resolvedConfig.builtins !== false) {\n    const builtinNames = Array.isArray(resolvedConfig.builtins)\n      ? resolvedConfig.builtins\n      : (Object.keys(builtinPatterns) as BuiltinPatternName[]);\n    const builtinValuePatterns = builtinNames\n      .filter((name) => name in builtinPatterns)\n      .map(builtinToValuePattern);\n\n    resolvedConfig.valuePatterns = [\n      ...(resolvedConfig.valuePatterns ?? []),\n      ...builtinValuePatterns,\n    ];\n  }\n\n  return resolvedConfig;\n}\n\n/**\n * Create a redactor function from config\n */\nfunction createRedactorFromConfig(\n  config: AttributeRedactorConfig,\n): AttributeRedactorFn {\n  // If custom redactor provided, use it directly\n  if (config.redactor) {\n    return config.redactor;\n  }\n\n  const keyPatterns = config.keyPatterns ?? [];\n  const valuePatterns = config.valuePatterns ?? [];\n  const paths = config.paths ?? [];\n  const pathSet = new Set(paths);\n  const customPatterns = config.patterns ?? [];\n  const defaultReplacement = config.replacement ?? '[REDACTED]';\n\n  // Build masker list from valuePatterns that have mask functions\n  const maskers: [RegExp, MaskFn][] = valuePatterns\n    .filter((vp) => vp.mask)\n    .map((vp) => [cloneRegex(vp.pattern), vp.mask!]);\n\n  return (key: string, value: AttributeValue): AttributeValue => {\n    // Check if key matches any sensitive key pattern\n    for (const pattern of keyPatterns) {\n      pattern.lastIndex = 0;\n      if (pattern.test(key)) {\n        return defaultReplacement;\n      }\n    }\n\n    // Check if key matches any path-based redaction\n    if (pathSet.has(key)) {\n      return defaultReplacement;\n    }\n\n    // For non-string values, return as-is\n    if (typeof value !== 'string') {\n      if (Array.isArray(value)) {\n        return value.map((item) => {\n          if (typeof item === 'string') {\n            return redactStringValue(\n              item,\n              valuePatterns,\n              maskers,\n              customPatterns,\n              defaultReplacement,\n            ) as string;\n          }\n          return item;\n        }) as AttributeValue;\n      }\n      return value;\n    }\n\n    // Three-tier strategy: path-based → masker-based → pattern-based\n    return redactStringValue(\n      value,\n      valuePatterns,\n      maskers,\n      customPatterns,\n      defaultReplacement,\n    );\n  };\n}\n\n/**\n * Apply three-tier redaction strategy to a string\n * 1. Masker-based: built-in patterns with smart partial masking\n * 2. Pattern-based: custom RegExp patterns replaced with replacement\n */\nfunction redactStringValue(\n  value: string,\n  patterns: ValuePatternConfig[],\n  maskers: [RegExp, MaskFn][],\n  customPatterns: RegExp[],\n  defaultReplacement: string,\n): string {\n  let result = value;\n\n  // Tier 1: Apply maskers (smart partial masking)\n  for (const [pattern, mask] of maskers) {\n    pattern.lastIndex = 0;\n    result = result.replace(pattern, mask);\n  }\n\n  // Tier 2: Apply value patterns without mask (full replacement)\n  for (const { pattern, replacement, mask } of patterns) {\n    if (mask) continue; // Already handled by maskers\n    pattern.lastIndex = 0;\n    result = result.replaceAll(pattern, replacement ?? defaultReplacement);\n  }\n\n  // Tier 3: Apply custom patterns\n  for (const pattern of customPatterns) {\n    pattern.lastIndex = 0;\n    result = result.replaceAll(pattern, defaultReplacement);\n  }\n\n  return result;\n}\n\n/**\n * Create a proxy wrapper around ReadableSpan with redacted attributes\n *\n * Since ReadableSpan.attributes is readonly, we use a Proxy to intercept\n * attribute access and return the redacted version.\n */\nfunction createRedactedSpan(\n  span: ReadableSpan,\n  redactor: AttributeRedactorFn,\n): ReadableSpan {\n  // Pre-compute redacted attributes (cached for efficiency)\n  const redactedAttributes: Attributes = {};\n  for (const [key, value] of Object.entries(span.attributes)) {\n    if (value !== undefined) {\n      redactedAttributes[key] = redactor(key, value);\n    }\n  }\n\n  // Return a proxy that intercepts attribute access\n  return new Proxy(span, {\n    get(target, prop) {\n      if (prop === 'attributes') {\n        return redactedAttributes;\n      }\n      // For all other properties, delegate to the original span\n      const value = Reflect.get(target, prop);\n      // Bind methods to the original target\n      if (typeof value === 'function') {\n        return value.bind(target);\n      }\n      return value;\n    },\n  });\n}\n\n/**\n * Create an attribute redactor function from a config or preset.\n *\n * This is useful when you need to apply the same redaction logic\n * outside of the span processor pipeline (e.g., for canonical log lines).\n *\n * @example\n * ```typescript\n * const redactor = createAttributeRedactor('default');\n * const redactedValue = redactor('user.password', 'secret123');\n * // redactedValue === '[REDACTED]'\n * ```\n */\nexport function createAttributeRedactor(\n  config: AttributeRedactorConfig | AttributeRedactorPreset,\n): AttributeRedactorFn {\n  return createRedactorFromConfig(resolveConfig(config));\n}\n\n/**\n * Span processor that redacts sensitive data from span attributes.\n *\n * Redaction happens in onEnd() when all attributes are finalized.\n * Uses a Proxy wrapper to intercept attribute access since ReadableSpan\n * attributes are readonly.\n *\n * Common use cases:\n * - PII compliance (GDPR, CCPA)\n * - PCI-DSS compliance for payment data\n * - Preventing secrets from leaking to observability backends\n */\nexport class AttributeRedactingProcessor implements SpanProcessor {\n  private readonly wrappedProcessor: SpanProcessor;\n  private readonly redactor: AttributeRedactorFn;\n\n  constructor(\n    wrappedProcessor: SpanProcessor,\n    options: AttributeRedactingProcessorOptions,\n  ) {\n    this.wrappedProcessor = wrappedProcessor;\n    const config = resolveConfig(options.redactor);\n    this.redactor = createRedactorFromConfig(config);\n  }\n\n  /**\n   * Pass through onStart unchanged - attributes aren't finalized yet\n   */\n  onStart(span: Span, parentContext: Context): void {\n    this.wrappedProcessor.onStart(span, parentContext);\n  }\n\n  /**\n   * Redact attributes and forward to wrapped processor\n   */\n  onEnd(span: ReadableSpan): void {\n    try {\n      const redactedSpan = createRedactedSpan(span, this.redactor);\n      this.wrappedProcessor.onEnd(redactedSpan);\n    } catch {\n      // Fail-open: if redaction fails, forward original span\n      // This ensures we don't lose telemetry due to redaction errors\n      this.wrappedProcessor.onEnd(span);\n    }\n  }\n\n  forceFlush(): Promise<void> {\n    return this.wrappedProcessor.forceFlush();\n  }\n\n  shutdown(): Promise<void> {\n    return this.wrappedProcessor.shutdown();\n  }\n}\n\n/**\n * Export createRedactedSpan for advanced users who want to use it directly\n */\nexport { createRedactedSpan };\n"]}