open-collaboration-protocol
Version:
Open Collaboration Protocol implementation, part of the Open Collaboration Tools project
83 lines • 3.96 kB
TypeScript
import type * as types from './types.js';
import { Encryption } from './messaging/encryption.js';
import { AbstractBroadcastConnection, BroadcastConnection, Handler } from './messaging/abstract-connection.js';
import { MessageTarget } from './messaging/messages.js';
import { MessageTransport } from './transport/transport.js';
export interface RoomHandler {
onJoin(handler: Handler<[types.Peer]>): void;
leave(): Promise<void>;
onLeave(handler: Handler<[types.Peer]>): void;
onClose(handler: Handler<[]>): void;
onPermissions(handler: Handler<[types.Permissions]>): void;
updatePermissions(permissions: types.Permissions): Promise<void>;
}
export interface PeerHandler {
onJoinRequest(handler: Handler<[types.User], types.JoinResponse | undefined>): void;
onInfo(handler: Handler<[types.Peer]>): void;
onInit(handler: Handler<[types.InitData]>): void;
init(target: MessageTarget, data: types.InitData): Promise<void>;
}
export interface EditorHandler {
onOpen(handler: Handler<[string]>): void;
open(target: MessageTarget, path: types.Path): Promise<void>;
onClose(handler: Handler<[types.Path]>): void;
close(path: types.Path): Promise<void>;
}
export interface FileSystemHandler {
onReadFile(handler: Handler<[types.Path], types.FileData>): void;
readFile(target: MessageTarget, path: types.Path): Promise<types.FileData>;
onWriteFile(handler: Handler<[types.Path, types.FileData]>): void;
writeFile(target: MessageTarget, path: types.Path, content: types.FileData): Promise<void>;
onStat(handler: Handler<[types.Path], types.FileSystemStat>): void;
stat(target: MessageTarget, path: types.Path): Promise<types.FileSystemStat>;
onMkdir(handler: Handler<[types.Path]>): void;
mkdir(target: MessageTarget, path: types.Path): Promise<void>;
onReaddir(handler: Handler<[types.Path], types.FileSystemDirectory>): void;
readdir(target: MessageTarget, path: types.Path): Promise<types.FileSystemDirectory>;
onDelete(handler: Handler<[types.Path]>): void;
delete(target: MessageTarget, path: types.Path): Promise<void>;
onRename(handler: Handler<[types.Path, types.Path]>): void;
rename(target: MessageTarget, from: types.Path, to: types.Path): Promise<void>;
onChange(handler: Handler<[types.FileChangeEvent]>): void;
change(event: types.FileChangeEvent): Promise<void>;
}
export interface SyncHandler {
onDataUpdate(handler: Handler<[types.Binary]>): void;
dataUpdate(data: types.Binary): Promise<void>;
dataUpdate(target: MessageTarget, data: types.Binary): Promise<void>;
onAwarenessUpdate(handler: Handler<[types.Binary]>): void;
awarenessUpdate(data: types.Binary): Promise<void>;
awarenessUpdate(target: MessageTarget, data: types.Binary): Promise<void>;
onAwarenessQuery(handler: Handler<[]>): void;
awarenessQuery(): Promise<void>;
}
export interface ProtocolBroadcastConnection extends BroadcastConnection {
room: RoomHandler;
peer: PeerHandler;
fs: FileSystemHandler;
editor: EditorHandler;
sync: SyncHandler;
}
export interface ProtocolBroadcastConnectionOptions {
privateKey: string;
host?: types.Peer;
transport: MessageTransport;
}
export declare function createConnection(options: ProtocolBroadcastConnectionOptions): ProtocolBroadcastConnection;
export declare class ProtocolBroadcastConnectionImpl extends AbstractBroadcastConnection {
room: RoomHandler;
peer: PeerHandler;
fs: FileSystemHandler;
editor: EditorHandler;
sync: SyncHandler;
private peers;
constructor(options: ProtocolBroadcastConnectionOptions);
protected getPublicKey(origin: string): Encryption.AsymmetricKey;
private onDidJoinRoom;
private onDidLeaveRoom;
private onDidClose;
private onDidInit;
protected getPublicKeys(): Encryption.AsymmetricKey[];
protected getPublicKeysLength(): number;
}
//# sourceMappingURL=connection.d.ts.map