$item) { $count++; if ($count > self::MAX_ITEMS) { $sanitized['truncated'] = true; break; } if (is_string($key) && self::classifier()->protectsField('audit', $key)) { $sanitized[$key] = self::REDACTED; continue; } $sanitized[$key] = self::sanitize($item); } return $sanitized; } if (is_string($value)) { return self::sanitizeString($value); } return $value; } private static function sanitizeString(string $value): string { $candidate = trim($value); if ($candidate === '') { return $value; } $sanitized = self::classifier()->sanitizeAuditString($value); if (mb_strlen($sanitized) <= self::MAX_STRING_LENGTH) { return $sanitized; } return mb_substr($sanitized, 0, self::MAX_STRING_LENGTH).' [truncated]'; } private static function classifier(): SecretClassificationService { return app(SecretClassificationService::class); } }