postJson method

Future<Map<String, dynamic>> postJson(
  1. String endpoint,
  2. Map<String, dynamic> body
)

Make a POST request with JSON body

Implementation

Future<Map<String, dynamic>> postJson(
  String endpoint,
  Map<String, dynamic> body,
) async {
  if (config.apiKey.isEmpty) {
    throw const AuthError('Missing OpenAI API key');
  }

  try {
    // Optimized logging with condition check
    if (logger.isLoggable(Level.FINE)) {
      logger.fine('OpenAI request: POST /$endpoint');
      logger.fine('OpenAI request headers: ${dio.options.headers}');
    }

    final response = await dio.post(endpoint, data: body);

    if (logger.isLoggable(Level.FINE)) {
      logger.fine('OpenAI HTTP status: ${response.statusCode}');
    }

    if (response.statusCode != 200) {
      _handleErrorResponse(response, endpoint);
    }

    // Use unified response parsing while keeping OpenAI's error handling
    return HttpResponseHandler.parseJsonResponse(
      response.data,
      providerName: 'OpenAI',
    );
  } on DioException catch (e) {
    throw handleDioError(e);
  } catch (e) {
    throw GenericError('Unexpected error: $e');
  }
}