/**
 * iCure Data Stack API Documentation
 * The iCure Data Stack Application API is the native interface to iCure. This version is obsolete, please use v2.
 *
 * OpenAPI spec version: v1
 *
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */
import { XHR } from './XHR';
import { AbstractFilterDevice } from '../model/AbstractFilterDevice';
import { Device } from '../model/Device';
import { DocIdentifier } from '../model/DocIdentifier';
import { FilterChainDevice } from '../model/FilterChainDevice';
import { IdWithRev } from '../model/IdWithRev';
import { ListOfIds } from '../model/ListOfIds';
import { PaginatedListDevice } from '../model/PaginatedListDevice';
import { TimingInfo } from '../model/TimingInfo';
import { AuthenticationProvider } from '../../icc-x-api/auth/AuthenticationProvider';
export declare class IccDeviceApi {
    host: string;
    headers: Array<XHR.Header>;
    authenticationProvider: AuthenticationProvider;
    fetchImpl?: (input: RequestInfo, init?: RequestInit) => Promise<Response>;
    constructor(host: string, headers: any, authenticationProvider?: AuthenticationProvider, fetchImpl?: (input: RequestInfo, init?: RequestInit) => Promise<Response>);
    setHeaders(h: Array<XHR.Header>): void;
    handleError(e: XHR.XHRError): never;
    /**
     * Name, last name, date of birth, and gender are required. After creation of the device and obtaining the ID, you need to create an initial delegation.
     * @summary Create a device
     * @param body
     */
    createDevice(body?: Device): Promise<Device>;
    /**
     * One of Name or Last name+First name, Nihii, and Public key are required.
     * @summary Create a device
     * @param body
     * @param groupId
     */
    createDeviceInGroup(groupId: string, body?: Device): Promise<Device>;
    /**
     * Returns the id and _rev of created devices
     * @summary Create devices in bulk
     * @param body
     */
    createDevices(body?: Array<Device>): Promise<Array<IdWithRev>>;
    /**
     * Returns the id and _rev of created devices
     * @summary Create devices in bulk
     * @param body
     */
    createDevices1(body?: Array<Device>): Promise<Array<IdWithRev>>;
    /**
     * Response contains the id/rev of deleted device.
     * @summary Delete device.
     * @param deviceId
     */
    deleteDevice(deviceId: string): Promise<DocIdentifier>;
    /**
     * Response is an array containing the id/rev of deleted devices.
     * @summary Delete devices.
     * @param body
     */
    deleteDevices(body?: ListOfIds): Promise<Array<DocIdentifier>>;
    /**
     * Deleting a device. Response is an array containing the id of deleted device.
     * @summary Delete a device
     * @param groupId
     * @param deviceIds
     */
    deleteDevicesInGroup(groupId: string, deviceIds: string): Promise<Array<DocIdentifier>>;
    /**
     * Returns a list of devices along with next start keys and Document ID. If the nextStartKey is Null it means that this is the last page.
     * @summary Filter devices for the current user (HcParty)
     * @param body
     * @param startDocumentId A device document ID
     * @param limit Number of rows
     * @param collectTiming if true, include server-side filter timing information in the response
     */
    filterDevicesBy(startDocumentId?: string, limit?: number, body?: FilterChainDevice, collectTiming?: false): Promise<PaginatedListDevice>;
    filterDevicesBy(startDocumentId?: string, limit?: number, body?: FilterChainDevice, collectTiming?: true): Promise<PaginatedListDevice & TimingInfo>;
    /**
     * It gets device administrative data.
     * @summary Get Device
     * @param deviceId
     */
    getDevice(deviceId: string): Promise<Device>;
    /**
     * (key, value) of the map is as follows: (ID of the owner of the encrypted AES key, encrypted AES keys)
     * @summary Get the HcParty encrypted AES keys indexed by owner.
     * @param deviceId
     */
    getDeviceAesExchangeKeysForDelegate(deviceId: string): Promise<{
        [delegatorId: string]: {
            [delegatorPubKeyFingerprint: string]: {
                [delegatePubKeyFingerprint: string]: string;
            };
        };
    }>;
    /**
     * It gets device administrative data.
     * @summary Get devices by id
     * @param body
     */
    getDevices(body?: ListOfIds): Promise<Array<Device>>;
    /**
     * General information about the device
     * @summary Get devices by their IDs
     * @param body
     * @param groupId
     */
    getDevicesInGroup(groupId: string, body?: ListOfIds): Promise<Array<Device>>;
    /**
     *
     * @summary Get ids of devices matching the provided filter for the current user (HcParty)
     * @param body
     * @param collectTiming add timing information to the response
     */
    matchDevicesBy(body?: AbstractFilterDevice, collectTiming?: false): Promise<Array<string>>;
    matchDevicesBy(body?: AbstractFilterDevice, collectTiming?: true): Promise<Array<string> & TimingInfo>;
    /**
     * No particular return value. It's just a message.
     * @summary Modify a Device.
     * @param body
     * @param groupId
     */
    modifyDeviceInGroup(groupId: string, body?: Device): Promise<Device>;
    /**
     * Returns the updated device
     * @summary Modify a device
     * @param body
     */
    updateDevice(body?: Device): Promise<Device>;
    /**
     * Returns the id and _rev of modified devices
     * @summary Modify devices in bulk
     * @param body
     */
    updateDevices(body?: Array<Device>): Promise<Array<IdWithRev>>;
    /**
     * Returns the id and _rev of modified devices
     * @summary Modify devices in bulk
     * @param body
     */
    updateDevices1(body?: Array<Device>): Promise<Array<IdWithRev>>;
}
