getFeedEntry method

Future<FeedEntry?> getFeedEntry({
  1. required PeerId ownerPeerId,
  2. required String path,
  3. required int sequenceNumber,
  4. PeerId? fromServer,
})

Get a single feed entry by sequence number

Implementation

Future<FeedEntry?> getFeedEntry({
  required PeerId ownerPeerId,
  required String path,
  required int sequenceNumber,
  PeerId? fromServer,
}) async {
  final serverId = fromServer ?? await _serverSelector.selectServer(config.preferredServers);
  if (serverId == null) {
    _logger.warning('No S&F server available for feed entry retrieval');
    return null;
  }

  try {
    final context = Context();
    final stream = await host.newStream(
      serverId,
      [FeedHandler.protocolId],
      context,
    ).timeout(config.connectionTimeout);

    final response = await FeedHandler.getFeedEntry(
      stream,
      ownerPeerId: ownerPeerId,
      path: path,
      sequenceNumber: sequenceNumber,
    ).timeout(config.messageTimeout);

    await stream.close();

    if (!response.isSuccess) {
      _logger.warning('GET feed entry $path#$sequenceNumber: ${response.status}');
      return null;
    }

    return FeedEntry(
      sequence: response.sequence ?? sequenceNumber,
      entryType: response.entryType,
      content: response.body ?? Uint8List(0),
      contentHash: response.etag ?? '',
      createdAt: response.headers['Created-At'] as int? ?? 0,
    );
  } on TimeoutException {
    _logger.warning('GET feed entry timed out');
    return null;
  } catch (e) {
    _logger.warning('Failed to GET feed entry: $e');
    return null;
  }
}