getOtelHeadersFromHelper function
Get OTel headers from the configured helper.
Implementation
Map<String, String> getOtelHeadersFromHelper() {
final otelHeadersHelper = getConfiguredOtelHeadersHelper();
if (otelHeadersHelper == null) return {};
final debounceMs =
int.tryParse(
Platform.environment['MAGE_OTEL_HEADERS_HELPER_DEBOUNCE_MS'] ?? '',
) ??
defaultOtelHeadersDebounceMs;
if (_cachedOtelHeaders != null &&
DateTime.now().millisecondsSinceEpoch - _cachedOtelHeadersTimestamp <
debounceMs) {
return _cachedOtelHeaders!;
}
if (isOtelHeadersHelperFromProjectOrLocalSettings()) {
return {};
}
try {
final result = Process.runSync(
Platform.isWindows ? 'cmd' : 'sh',
Platform.isWindows
? ['/c', otelHeadersHelper]
: ['-c', otelHeadersHelper],
);
final output = (result.stdout as String).trim();
if (output.isEmpty) {
throw Exception('otelHeadersHelper did not return a valid value');
}
final headers = json.decode(output);
if (headers is! Map<String, dynamic>) {
throw Exception(
'otelHeadersHelper must return a JSON object with string key-value pairs',
);
}
final validated = <String, String>{};
for (final entry in headers.entries) {
if (entry.value is! String) {
throw Exception(
'otelHeadersHelper returned non-string value for key "${entry.key}"',
);
}
validated[entry.key] = entry.value as String;
}
_cachedOtelHeaders = validated;
_cachedOtelHeadersTimestamp = DateTime.now().millisecondsSinceEpoch;
return validated;
} catch (e) {
rethrow;
}
}