upload method

  1. @override
Stream<RemoteUploadResult> upload(
  1. Stream<RemoteUploadRequest<RawContent>> requests
)

Upload documents to remote storage.

Results must be emitted in the same order as the input requests. For conditional uploads, RemoteUploadRequest.ifMatch carries the expected ETag; backends should return RemoteUploadResult.conflict on precondition failure.

Implementation

@override
Stream<RemoteUploadResult> upload(
    Stream<RemoteUploadRequest<RawContent>> requests) async* {
  await for (final request in requests) {
    try {
      final url = _documentUrlMapper.toDocumentUrl(request.documentIri);
      yield await retryOnAuthFailure(
        config: const AuthRetryConfig.retryOnce(),
        onAuthFailure: _onAuthFailure,
        operation: () => _client.upload(
          url,
          request.document,
          requiresAuth: true,
          ifMatch: request.ifMatch,
          documentIri: request.documentIri,
        ),
      );
    } catch (e, st) {
      yield ErrorUploadResult(
        documentIri: request.documentIri,
        requestETag: request.ifMatch,
        error: e,
        stackTrace: st,
      );
    }
  }
}