import { TypedResponse } from '../../http';
import { BimContainer, BimContainerInfo, TwinfinityInfo, BimChange } from '../bim-api-client';
import { BimCoreApiClient } from './BimCoreApiClient';
import { MessageApiClient } from './MessageApiClient';
import { UploadApiClient } from './UploadApiClient';
import { SettingsApiClient } from './SettingsApiClient';
import type { ITwinClient } from '@twinfinity/twin';
/**
 * Alias for {@link TwinfinityApiClient}
 * @deprecated
 */
export type BimApiClient = TwinfinityApiClient;
/**
 * Alias for backwards compatibility
 * @deprecated
 */
export type BimBackendApi = TwinfinityApiClient;
/** This interface extends {@link BimCoreApiClient} with methods specifically needed for the Twinfinity backend API. */
export interface TwinfinityApiClient extends BimCoreApiClient {
    /** Gets Twinfinity info from Twinfinity API backend
     * @returns {@link TwinfinityInfo} instance
     */
    getInfo: () => Promise<TwinfinityInfo>;
    /** Gets info of container and current user. Can also be used to check if a container exists (returns undefined)
     * @param container If given returns info specified container. If not given, the root container is returned.
     * @returns {@link TypedResponse} with container information. If `container` is undefined, a root container
     * is returned. If there are multiple root containers, only one can be returned using the following
     * priority order:
     * First ProjectNetwork and then Archive.
     * Response will be 404 if no root container does exist.
     * Resonse will be 401 response if user is not logged in.
     */
    getContainerInfo: (container?: BimContainer | URL) => Promise<TypedResponse<BimContainerInfo>>;
    /**
     * Deletes changes. Check if it is possible to delete changes using {@link canDelete} before. Passing
     * changes where {@link canDelete} is ```false``` will generate exceptions.
     * Recursive deletes are not allowed unless all affected items are included in the delete operation.
     * Protects against recursive deletes where user lacks permission to see all items that will be affected by the
     * delete.
     * @param changesToDelete Array of changes to delete
     * @returns A response with {@link TypedResponse.status} ``` === 200``` and the number of changes that
     * was deleted. In case of error appropriates  {@link TypedResponse.status} code's are returned.
     */
    deleteChanges: (changesToDelete: BimChange[]) => Promise<TypedResponse<number>[]>;
    /**
     * Determines whether a change can be deleted by calling {@link deleteChanges}.
     * @param change Change to check.
     * @returns ```true``` if it is possible to delete the change. Otherwise ```false```.
     */
    canDelete(change: BimChange): boolean;
    /**
     * Access to message operations
     */
    readonly messages: MessageApiClient;
    /**
     * Access to upload operations.
     */
    readonly upload: UploadApiClient;
    /**
     * Access to settings operations.
     */
    readonly settings: SettingsApiClient;
    readonly twins: ITwinClient;
}
//# sourceMappingURL=TwinfinityApiClient.d.ts.map