import { UsersChangeEvent, FileNameChangeEvent } from './collaboration-instance.js';
import * as types from 'open-collaboration-protocol';
import * as monaco from 'monaco-editor';
export type MonacoCollabCallbacks = {
    onUserRequestsAccess: (user: types.User) => Promise<boolean>;
    /**
     * reports the status when joining or creating a room
     * @param info information about the changed status
     */
    statusReporter?: (info: types.Info) => void;
};
export type MonacoCollabOptions = {
    serverUrl: string;
    callbacks: MonacoCollabCallbacks;
    userToken?: string;
    roomToken?: string;
    useCookieAuth?: boolean;
    loginPageOpener?: (token: string, authenticationMetadata: types.AuthMetadata) => Promise<boolean>;
};
export type OtherUserData = {
    peer: types.Peer;
    color: string;
};
export type UserData = {
    me: types.Peer;
    others: OtherUserData[];
};
export type MonacoCollabApi = {
    createRoom: () => Promise<string | undefined>;
    joinRoom: (roomToken: string) => Promise<string | undefined>;
    leaveRoom: () => void;
    login: () => Promise<string | undefined>;
    logout: () => Promise<void | undefined>;
    isLoggedIn: () => Promise<boolean>;
    setEditor: (editor: monaco.editor.IStandaloneCodeEditor) => void;
    getUserData: () => Promise<UserData | undefined>;
    onUsersChanged: (evt: UsersChangeEvent) => void;
    onFileNameChange: (callback: FileNameChangeEvent) => void;
    getCurrentConnection: () => types.ProtocolBroadcastConnection | undefined;
    followUser: (id?: string) => void;
    getFollowedUser: () => string | undefined;
    setFileName: (fileName: string) => void;
    getFileName: () => string | undefined;
    setWorkspaceName: (workspaceName: string) => void;
    getWorkspaceName: () => string | undefined;
};
export declare function monacoCollab(options: MonacoCollabOptions): MonacoCollabApi;
export declare function deactivate(): void;
//# sourceMappingURL=monaco-api.d.ts.map