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,
      captureMode: captureMode,
    );
    if (redacted == null) {
      return useRedaction
          ? <String, dynamic>{'raw': ph.redactionFailedPlaceholder}
          : NetworkPayloadSanitizer.toStringKeyMap(
              data,
              resourceLimits: resourceLimits,
            );
    }

    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.
    if (useRedaction && redacted == ph.redactionFailedPlaceholder) {
      _logRedactionFailure();
    }
    return <String, dynamic>{'raw': redacted};
  } on Object {
    _logRedactionFailure();
    return <String, dynamic>{'raw': ph.redactionFailedPlaceholder};
  }
}