ApiException constructor

ApiException({
  1. required HttpStatusCodeInfo httpStatusInfo,
  2. String? endpoint,
  3. String? method,
  4. Map<String, dynamic> requestHeaders = const {},
  5. Object? requestBody,
  6. Map<String, dynamic> responseHeaders = const {},
  7. Object? responseBody,
  8. String? userMessage,
  9. String? devMessage,
  10. Object? cause,
  11. StackTrace? stack,
  12. Map<String, dynamic> metadata = const {},
  13. Severity? severity,
  14. bool isReportable = true,
})

Creates an API exception enriched with normalized HTTP status metadata.

Implementation

ApiException({
  required this.httpStatusInfo,
  String? endpoint,
  String? method,
  Map<String, dynamic> requestHeaders = const {},
  Object? requestBody,
  Map<String, dynamic> responseHeaders = const {},
  Object? responseBody,
  String? userMessage,
  String? devMessage,
  super.cause,
  super.stack,
  Map<String, dynamic> metadata = const {},
  Severity? severity,
  super.isReportable,
}) : super(
        userMessage: userMessage ?? httpStatusInfo.statusUserMessage,
        devMessage: devMessage ??
            'HTTP ${httpStatusInfo.statusCode} ${method ?? ''} ${endpoint ?? ''}'
                .trim(),
        metadata: {
          'http': {
            ...httpStatusInfo.toMap(),
            if (endpoint != null) 'endpoint': endpoint,
            if (method != null) 'method': method,
            if (requestHeaders.isNotEmpty) 'requestHeaders': requestHeaders,
            if (requestBody != null) 'requestBody': requestBody,
            if (responseHeaders.isNotEmpty)
              'responseHeaders': responseHeaders,
            if (responseBody != null) 'responseBody': responseBody,
          },
          ...metadata,
        },
        severity: severity ?? httpStatusInfo.errorSeverity,
      );