processMapData method
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};
}
}