import type { NonEmptyString } from "../../../common/CustomTypes/NonEmptyString";
import type { Logger, OperationLoggingSeverity } from "../../../common/Logging";
import type { Void } from "../../../common/Types";
import type { AxiosInstance } from 'axios';
import type { TemplateDescriptor } from "../../TemplateManager";
import type { ErrorMapping, IdentityToken } from "../common";
import type { ItemSelection } from "../ItemSelection";
import { ServiceClientBase } from "../ServiceClientBase";
import type { ApplyTemplateResponse, GetProjectsResponse, ProjectId, ProjectResponse as AltostraProject, ProjectUpdate } from "./Types";
export type { AltostraProject };
export interface IAltostraProjectsManager {
    getProject(projectSelection: ItemSelection | NonEmptyString): Promise<AltostraProject>;
    listProjects(): Promise<GetProjectsResponse>;
    deleteProject(projectSelection: ItemSelection): Promise<Void>;
    updateProject(projectSelection: ItemSelection, update: ProjectUpdate): Promise<Void>;
    applyTemplate(projectId: ProjectId, template: TemplateDescriptor): Promise<ApplyTemplateResponse>;
}
export interface AltostraProjectsManagerOptions {
    axios?: AxiosInstance;
    endpoint: string;
    getToken: () => Promise<IdentityToken>;
    logger?: Logger<OperationLoggingSeverity>;
    errorMapping?: ErrorMapping;
}
export declare const ERR_NO_PROJECT = "project-not-exist";
export declare const ERR_SYSTEM_ERROR = "get-project-from-server";
export declare class AltostraProjectsManager extends ServiceClientBase implements IAltostraProjectsManager {
    #private;
    constructor({ axios, endpoint, getToken, logger, errorMapping, }: AltostraProjectsManagerOptions);
    exists(projectId: NonEmptyString): Promise<boolean>;
    getProject(projectSelection: ItemSelection | NonEmptyString): Promise<AltostraProject>;
    listProjects(): Promise<GetProjectsResponse>;
    deleteProject(projectSelection: ItemSelection): Promise<Void>;
    updateProject(projectSelection: ItemSelection, update: ProjectUpdate): Promise<Void>;
    applyTemplate(projectId: ProjectId, template: TemplateDescriptor): Promise<ApplyTemplateResponse>;
}
