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) ?? 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};
}
}