processMapData method

Map<String, dynamic> processMapData(
  1. Map data, {
  2. required bool useRedaction,
})
inherited

Processes and redacts a map, ensuring string keys.

Applies redaction if enabled, then converts to Map<String, dynamic>.

Fails closed: if processing throws, returns a placeholder map instead of the original (unredacted) data, mirroring safeRedact.

Implementation

Map<String, dynamic> processMapData(
  Map<dynamic, dynamic> data, {
  required bool useRedaction,
}) {
  try {
    final redacted =
        _payload.body(data, enableRedaction: useRedaction) ?? data;

    if (redacted is Map<String, dynamic>) return redacted;
    if (redacted is Map) {
      return redacted.map((k, v) => MapEntry(k.toString(), v));
    }

    // Redaction collapsed the whole map to a scalar placeholder (a
    // fail-closed strategy throw or a depth limit). Never fall back to the
    // raw input — wrap the placeholder instead.
    return <String, dynamic>{'raw': redacted};
  } catch (e, s) {
    logger.logData(
      ISpectLogData(
        'Redaction failed, data omitted: $e',
        logLevel: LogLevel.warning,
        stackTrace: s,
      ),
    );
    return <String, dynamic>{'raw': ph.redactionFailedPlaceholder};
  }
}