post<T> method

Future<T> post<T>(
  1. String path,
  2. Object? data, {
  3. T fromJson(
    1. Map<String, dynamic>
    )?,
  4. bool requiresAuth = false,
})

POST request with JSON body

path - API endpoint path data - Request body (will be JSON serialized) Returns parsed response data

Implementation

Future<T> post<T>(
  String path,
  Object? data, {
  T Function(Map<String, dynamic>)? fromJson,
  bool requiresAuth = false,
}) async {
  var url = _buildFullURL(path);

  // Handle device registration - add UPSERT for Supabase
  final isDeviceReg = _isDeviceRegistrationPath(path);
  final headers = _buildHeaders(isDeviceReg, requiresAuth);

  if (isDeviceReg && _environment == SDKEnvironment.development) {
    final separator = url.contains('?') ? '&' : '?';
    url = '$url${separator}on_conflict=device_id';
  }

  final response = await _executeRequest(
    'POST',
    url,
    headers,
    data,
    requiresAuth: requiresAuth,
  );

  // Handle 409 as success for device registration (device already exists)
  if (isDeviceReg && response.statusCode == 409) {
    _logger.info('Device already registered (409) - treating as success');
    return _parseResponse<T>(response, fromJson);
  }

  return _handleResponse<T>(response, path, fromJson);
}