authenticatedPost method

Future<Map<String, dynamic>> authenticatedPost(
  1. String endpoint, {
  2. Map<String, dynamic>? body,
  3. String? jsonBody,
  4. String? jwtToken,
})

Make authenticated HTTP POST request

Implementation

Future<Map<String, dynamic>> authenticatedPost(String endpoint, {
  Map<String, dynamic>? body,
  String? jsonBody,
  String? jwtToken,
}) async {
  await _ensureInitialized();

  try {
    final requestBody = jsonBody ?? (body != null ? jsonEncode(body) : null);
    final url = Uri.parse('$apiBaseUrl/$endpoint');

    print('🌐 [API] POST Request: $url');
    print('📤 [API] Body: $requestBody');
    if (jwtToken != null) {
      print('🔑 [API] Using JWT token (length: ${jwtToken.length})');
    } else {
      print('🔑 [API] Using Native/API key for authentication');
    }
    OnairosDebugHelper.log('🌐 POST Request: $url');
    OnairosDebugHelper.log('📤 Body: $requestBody');

    // Use secure native headers if no JWT is provided (to use the native admin key)
    // If JWT is provided, use it (user context)
    Map<String, String> headers;
    if (jwtToken != null) {
       headers = getAuthHeaders(jwtToken: jwtToken);
    } else {
       headers = await getSecureAuthHeaders();
    }

    final response = await http.post(
      url,
      headers: headers,
      body: requestBody,
    );

    print('📥 [API] Response Status: ${response.statusCode}');
    print('📥 [API] Response Body: ${response.body}');
    OnairosDebugHelper.log('📥 Response Status: ${response.statusCode}');
    OnairosDebugHelper.log('📥 Response Body: ${response.body}');

    return _handleResponse(response);
  } catch (e, stackTrace) {
    print('❌ [API] Error in authenticated POST:');
    print('   Endpoint: $apiBaseUrl/$endpoint');
    print('   Error: $e');
    print('   Type: ${e.runtimeType}');
    print('   Stack: $stackTrace');
    OnairosDebugHelper.log('❌ Error in authenticated POST:');
    OnairosDebugHelper.log('   Endpoint: $apiBaseUrl/$endpoint');
    OnairosDebugHelper.log('   Error: $e');
    OnairosDebugHelper.log('   Type: ${e.runtimeType}');
    OnairosDebugHelper.log('   Stack: $stackTrace');
    rethrow;
  }
}