import { CrowdinApi, ResponseObject, PatchRequest, Pagination, ResponseList } from '../core';
/**
 * Crowdin Apps are web applications that can be integrated with Crowdin to extend its functionality.
 *
 * Use the API to manage the necessary app data.
 */
export declare class Applications extends CrowdinApi {
    /**
     * @param options optional pagination parameters for the request
     * @see https://developer.crowdin.com/api/v2/#operation/api.applications.installations.getMany
     */
    listApplicationInstallations(options?: Pagination): Promise<ResponseList<ApplicationsModel.Application>>;
    /**
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.applications.installations.post
     */
    installApplication(request: ApplicationsModel.InstallApplication): Promise<ResponseObject<ApplicationsModel.Application>>;
    /**
     * @param applicationId application identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.applications.installations.get
     */
    getApplicationInstallation(applicationId: string): Promise<ResponseObject<ApplicationsModel.Application>>;
    /**
     * @param applicationId application identifier
     * @param force force delete the application
     * @see https://developer.crowdin.com/api/v2/#operation/api.applications.installations.delete
     */
    deleteApplicationInstallation(applicationId: string, force?: boolean): Promise<ResponseObject<ApplicationsModel.Application>>;
    /**
     * @param applicationId application identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.applications.installations.patch
     */
    editApplicationInstallation(applicationId: string, request: PatchRequest[]): Promise<ResponseObject<ApplicationsModel.Application>>;
    /**
     * @param applicationId application identifier
     * @param path path implemented by the application
     * @see https://developer.crowdin.com/api/v2/#operation/api.applications.api.get
     */
    getApplicationData(applicationId: string, path: string): Promise<ResponseObject<any>>;
    /**
     * @param applicationId application identifier
     * @param path path implemented by the application
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.applications.api.put
     */
    updateOrRestoreApplicationData(applicationId: string, path: string, request: any): Promise<ResponseObject<any>>;
    /**
     * @param applicationId application identifier
     * @param path path implemented by the application
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.applications.api.post
     */
    addApplicationData(applicationId: string, path: string, request: any): Promise<ResponseObject<any>>;
    /**
     * @param applicationId application identifier
     * @param path path implemented by the application
     * @see https://developer.crowdin.com/api/v2/#operation/api.applications.api.delete
     */
    deleteApplicationData(applicationId: string, path: string): Promise<void>;
    /**
     * @param applicationId application identifier
     * @param path path implemented by the application
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.applications.api.patch
     */
    editApplicationData(applicationId: string, path: string, request: any): Promise<ResponseObject<any>>;
}
export declare namespace ApplicationsModel {
    interface Application {
        identifier: string;
        name: string;
        description: string;
        logo: string;
        baseUrl: string;
        manifestUrl: string;
        createdAt: string;
        modules: ApplicationModule[];
        scopes: string[];
        permissions: ApplicationPermissions;
        defaultPermissions: any;
        limitReached: boolean;
    }
    interface InstallApplication {
        url: string;
        permissions?: ApplicationPermissions;
        modules?: ApplicationModule[];
    }
    interface ApplicationPermissions {
        user: {
            value: 'all' | 'owner' | 'managers' | 'guests' | 'restricted';
            ids: number[];
        };
        project: {
            value: 'own' | 'restricted';
            ids: number[];
        };
    }
    interface ApplicationModule {
        key: string;
        type?: string;
        data?: any;
        authenticationType?: string;
        permissions: Omit<ApplicationPermissions, 'project'>;
    }
}
