import { ApiProjectTypes, DeviceData, EditorFileData, EmptyData, FileData, LiveEditorApiComponent, MediaFileData, MediaOptions, PingResult, ProjectData, PublishResult, WorkspaceData } from '../editor/api';
import { RemoteMediaConstructor } from '../remoteMedia';
export interface ServerApiComponent {
    apiBaseUrl: string;
    baseUrl: string;
    expandParams(params: Record<string, any>): Record<string, any>;
    remoteMediaProviders: Array<RemoteMediaConstructor>;
    resolveApiUrl(path: string): string;
    resolveUrl(path: string): string;
}
/**
 * Example api that returns data through a 'simulated' network.
 */
export declare class ServerApi implements LiveEditorApiComponent, ServerApiComponent {
    projectTypes: ApiProjectTypes;
    remoteMediaProviders: Array<RemoteMediaConstructor>;
    constructor();
    get apiBaseUrl(): string;
    get baseUrl(): string;
    /**
     * Verify that the authentication for services that require auth.
     *
     * @returns True if the auth check out.
     */
    checkAuth(): boolean;
    /**
     * Specific services may need to add additional params to all of
     * the api request (such as authentication params.)
     *
     * @param params Params being sent to the api.
     * @returns Updated params to send to the api.
     */
    expandParams(params: Record<string, any>): Record<string, any>;
    copyFile(originalPath: string, path: string): Promise<FileData>;
    createFile(path: string): Promise<FileData>;
    createWorkspace(base: WorkspaceData, workspace: string): Promise<WorkspaceData>;
    deleteFile(file: FileData): Promise<EmptyData>;
    getDevices(): Promise<Array<DeviceData>>;
    getFile(file: FileData): Promise<EditorFileData>;
    getFiles(): Promise<Array<FileData>>;
    getFileUrl(file: FileData): Promise<FileData>;
    getProject(): Promise<ProjectData>;
    getWorkspace(): Promise<WorkspaceData>;
    getWorkspaces(): Promise<Array<WorkspaceData>>;
    loadWorkspace(workspace: WorkspaceData): Promise<WorkspaceData>;
    publish(workspace: WorkspaceData, data?: Record<string, any>): Promise<PublishResult>;
    resolveApiUrl(path: string): string;
    resolveUrl(path: string): string;
    saveFile(file: EditorFileData, isRawEdit: boolean): Promise<EditorFileData>;
    uploadFile(file: File, options?: MediaOptions): Promise<MediaFileData>;
}
/**
 * Connects to a locally running version of the api.
 *
 * This is used when a user is running `npx @blinkk/editor-server` locally.
 */
export declare class LocalServerApi extends ServerApi {
    port: number;
    constructor(port: number);
    get apiBaseUrl(): string;
    get baseUrl(): string;
    ping(): Promise<PingResult>;
}
/**
 * Connects to the corresponding api server and maps to the right service
 * api for the request urls.
 */
export declare class ServiceServerApi extends ServerApi {
    branch: string;
    isDev: boolean;
    isUnstable: boolean;
    organization: string;
    project: string;
    service: string;
    constructor(service: string, organization: string, project: string, branch?: string, isUnstable?: boolean, isDev?: boolean);
    get apiBaseUrl(): string;
    get baseUrl(): string;
    loadWorkspace(workspace: WorkspaceData): Promise<WorkspaceData>;
}
