DaemonApiException.fromResponse constructor

DaemonApiException.fromResponse({
  1. required int? statusCode,
  2. required Object? body,
  3. Object? cause,
})

Implementation

factory DaemonApiException.fromResponse({
  required int? statusCode,
  required Object? body,
  Object? cause,
}) {
  final decoded = _decodeBody(body);
  final envelope = decoded is Map ? decoded['error'] : null;
  if (envelope is Map) {
    final code = _nonEmpty(envelope['code']) ?? 'DAEMON_API_ERROR';
    final message =
        _nonEmpty(envelope['message']) ?? 'OpenTool daemon request failed';
    return DaemonApiException(
      code: code,
      message: message,
      retryable:
          envelope['retryable'] as bool? ?? _statusIsRetryable(statusCode),
      statusCode: statusCode,
      requestId: _nonEmpty(envelope['requestId']),
      details: envelope['details'],
      cause: cause,
    );
  }

  final fallback = _nonEmpty(decoded) ?? 'OpenTool daemon request failed';
  return DaemonApiException(
    code: 'DAEMON_HTTP_ERROR',
    message: fallback,
    retryable: _statusIsRetryable(statusCode),
    statusCode: statusCode,
    details: decoded,
    cause: cause,
  );
}