postRaw method

Future<Uint8List> postRaw(
  1. String path,
  2. Uint8List payload, {
  3. bool requiresAuth = false,
})

POST request returning raw bytes

Implementation

Future<Uint8List> postRaw(
  String path,
  Uint8List payload, {
  bool requiresAuth = false,
}) async {
  var url = _buildFullURL(path);

  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 uri = Uri.parse(url);
  _logger.debug('POST $path');

  try {
    final response = await _httpClient
        .post(
          uri,
          headers: headers,
          body: payload,
        )
        .timeout(_timeout);

    if (isDeviceReg && response.statusCode == 409) {
      _logger.info('Device already registered (409) - treating as success');
      return response.bodyBytes;
    }

    _validateResponse(response, path);
    return response.bodyBytes;
  } catch (e) {
    if (e is SDKError) rethrow;
    _logger.error('POST $path failed: $e');
    throw SDKError.networkError(e.toString());
  }
}