authenticatedPost method
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;
}
}