/// <reference types="node" />
import { EventEmitter } from "events";
import { ProjectState, ProjectStatus } from "smc-util/db-schema/projects";
export type { ProjectState, ProjectStatus };
export declare type Action = "open" | "start" | "stop" | "restart";
export declare function getProject(project_id: string): BaseProject | undefined;
export declare abstract class BaseProject extends EventEmitter {
    readonly project_id: string;
    is_ready: boolean;
    is_freed: boolean;
    protected stateChanging: ProjectState | undefined;
    constructor(project_id: string);
    protected siteLicenseHook(): Promise<void>;
    protected saveStateToDatabase(state: ProjectState): Promise<void>;
    protected saveStatusToDatabase(status: ProjectStatus): Promise<void>;
    dbg(f: string): (string?: any) => void;
    abstract state(): Promise<ProjectState>;
    abstract status(): Promise<ProjectStatus>;
    abstract start(): Promise<void>;
    abstract stop(): Promise<void>;
    restart(): Promise<void>;
    protected wait(opts: {
        until: () => Promise<boolean>;
        maxTime: number;
    }): Promise<void>;
    address(): Promise<{
        host: string;
        port: number;
        secret_token: string;
    }>;
    abstract copyPath(opts: CopyOptions): Promise<string>;
    setAllQuotas(): Promise<void>;
}
export interface CopyOptions {
    path: string;
    target_project_id?: string;
    target_path?: string;
    overwrite_newer?: boolean;
    delete_missing?: boolean;
    backup?: boolean;
    timeout?: number;
    bwlimit?: number;
    wait_until_done?: boolean;
    scheduled?: string | Date;
    public?: boolean;
}
