import { Observable } from 'rxjs';
import { Empty } from './objects.mjs';
import { ListResultsRequest, ListResultsResponse, GetResultRequest, GetResultResponse, GetOwnerTaskIdRequest, GetOwnerTaskIdResponse, CreateResultsMetaDataRequest, CreateResultsMetaDataResponse, CreateResultsRequest, CreateResultsResponse, UploadResultDataRequest, UploadResultDataResponse, DownloadResultDataRequest, DownloadResultDataResponse, DeleteResultsDataRequest, DeleteResultsDataResponse, ImportResultsDataRequest, ImportResultsDataResponse, ResultsServiceConfigurationResponse, WatchResultRequest, WatchResultResponse } from './results_common.mjs';
import 'protobufjs/minimal.js';
import './google/protobuf/duration.mjs';
import './task_status.mjs';
import './results_filters.mjs';
import './filters_common.mjs';
import './results_fields.mjs';
import './result_status.mjs';
import './sort_direction.mjs';

declare const protobufPackage = "armonik.api.grpc.v1.results";
/** The ResultsService provides methods for interacting with results */
interface Results {
    /** Get a results list using pagination, filters and sorting */
    ListResults(request: ListResultsRequest): Promise<ListResultsResponse>;
    /** Get a result by id. */
    GetResult(request: GetResultRequest): Promise<GetResultResponse>;
    /** Get the id of the task that should produce the result */
    GetOwnerTaskId(request: GetOwnerTaskIdRequest): Promise<GetOwnerTaskIdResponse>;
    /**
     * Create the metadata of multiple results at once
     * Data have to be uploaded separately
     */
    CreateResultsMetaData(request: CreateResultsMetaDataRequest): Promise<CreateResultsMetaDataResponse>;
    /** Create one result with data included in the request */
    CreateResults(request: CreateResultsRequest): Promise<CreateResultsResponse>;
    /** Upload data for result with stream */
    UploadResultData(request: Observable<UploadResultDataRequest>): Promise<UploadResultDataResponse>;
    /** Retrieve data */
    DownloadResultData(request: DownloadResultDataRequest): Observable<DownloadResultDataResponse>;
    /** Delete data from multiple results */
    DeleteResultsData(request: DeleteResultsDataRequest): Promise<DeleteResultsDataResponse>;
    /** Import existing data from the object storage into existing results */
    ImportResultsData(request: ImportResultsDataRequest): Promise<ImportResultsDataResponse>;
    /** Get the configuration of the service */
    GetServiceConfiguration(request: Empty): Promise<ResultsServiceConfigurationResponse>;
    /**
     * This endpoint allows a user to watch a list of results and be notified when there is any change.
     * The user sends the list of ids they want to watch.
     * The submitter will then send the statuses for all requested ids immediately and keep the stream open.
     *   Ids not present in DB will be returned at that time with the special state NOTFOUND.
     * The submitter will send updates to the client via the opened stream.
     * Any reply can be implicitely chunked if there are too many event to report at the same time (or for the first reply).
     * It is possible to filter out specific statuses from events.
     */
    WatchResults(request: Observable<WatchResultRequest>): Observable<WatchResultResponse>;
}
declare const ResultsServiceName = "armonik.api.grpc.v1.results.Results";
declare class ResultsClientImpl implements Results {
    private readonly rpc;
    private readonly service;
    constructor(rpc: Rpc, opts?: {
        service?: string;
    });
    ListResults(request: ListResultsRequest): Promise<ListResultsResponse>;
    GetResult(request: GetResultRequest): Promise<GetResultResponse>;
    GetOwnerTaskId(request: GetOwnerTaskIdRequest): Promise<GetOwnerTaskIdResponse>;
    CreateResultsMetaData(request: CreateResultsMetaDataRequest): Promise<CreateResultsMetaDataResponse>;
    CreateResults(request: CreateResultsRequest): Promise<CreateResultsResponse>;
    UploadResultData(request: Observable<UploadResultDataRequest>): Promise<UploadResultDataResponse>;
    DownloadResultData(request: DownloadResultDataRequest): Observable<DownloadResultDataResponse>;
    DeleteResultsData(request: DeleteResultsDataRequest): Promise<DeleteResultsDataResponse>;
    ImportResultsData(request: ImportResultsDataRequest): Promise<ImportResultsDataResponse>;
    GetServiceConfiguration(request: Empty): Promise<ResultsServiceConfigurationResponse>;
    WatchResults(request: Observable<WatchResultRequest>): Observable<WatchResultResponse>;
}
interface Rpc {
    request(service: string, method: string, data: Uint8Array): Promise<Uint8Array>;
    clientStreamingRequest(service: string, method: string, data: Observable<Uint8Array>): Promise<Uint8Array>;
    serverStreamingRequest(service: string, method: string, data: Uint8Array): Observable<Uint8Array>;
    bidirectionalStreamingRequest(service: string, method: string, data: Observable<Uint8Array>): Observable<Uint8Array>;
}

export { Results, ResultsClientImpl, ResultsServiceName, protobufPackage };
