open-collaboration-protocol
Version:
Open Collaboration Protocol implementation, part of the Open Collaboration Tools project
253 lines • 6.55 kB
TypeScript
import type { CompressionAlgorithm } from './messaging/messages.js';
export type Path = string;
export type Token = string;
export type Id = string;
export type Binary = Uint8Array;
export interface CreateRoomResponse {
roomId: Id;
roomToken: Token;
loginToken?: Token;
}
export declare namespace CreateRoomResponse {
function is(arg: unknown): arg is CreateRoomResponse;
function create(roomId: Id, roomToken: Token, loginToken?: Token): CreateRoomResponse;
}
export interface LoginValidateResponse {
valid: boolean;
}
export declare namespace LoginValidateResponse {
function is(arg: unknown): arg is LoginValidateResponse;
function create(valid: boolean): LoginValidateResponse;
}
export interface LoginInitialResponse {
pollToken: string;
auth: AuthMetadata;
}
export declare namespace LoginInitialResponse {
function is(arg: unknown): arg is LoginInitialResponse;
function create(pollToken: string, auth: AuthMetadata): LoginInitialResponse;
}
export interface AuthMetadata {
providers: AuthProvider[];
loginPageUrl?: string;
defaultSuccessUrl?: string;
}
export type AuthProvider = FormAuthProvider | WebAuthProvider;
export interface CommonAuthProvider {
name: string;
group: InfoMessage;
label: InfoMessage;
details?: InfoMessage;
}
export interface FormAuthProvider extends CommonAuthProvider {
type: 'form';
endpoint: string;
fields: FormAuthProviderField[];
}
export interface FormAuthProviderField {
name: string;
required: boolean;
label: InfoMessage;
placeHolder?: InfoMessage;
}
export interface WebAuthProvider extends CommonAuthProvider {
type: 'web';
endpoint: string;
}
export interface LoginPollResponse {
loginToken?: string;
}
export declare namespace LoginPollResponse {
function is(arg: unknown): arg is LoginPollResponse;
function create(loginToken?: string): LoginPollResponse;
}
export interface JoinRoomInitialResponse {
pollToken: string;
roomId: string;
}
export declare namespace JoinRoomInitialResponse {
function is(arg: unknown): arg is JoinRoomInitialResponse;
function create(pollToken: string, roomId: string): JoinRoomInitialResponse;
}
export interface JoinRoomResponse {
roomId: Id;
roomToken: Token;
loginToken?: Token;
workspace: Workspace;
host: Peer;
}
export declare namespace JoinRoomResponse {
function is(arg: unknown): arg is JoinRoomResponse;
function create(roomId: Id, roomToken: Token, workspace: Workspace, host: Peer): JoinRoomResponse;
}
export interface JoinRoomPollResponse extends InfoMessage {
failure: boolean;
}
export declare namespace JoinRoomPollResponse {
function is(arg: unknown): arg is JoinRoomPollResponse;
function create(code: string, params: string[], message: string, failure: boolean): JoinRoomPollResponse;
}
export interface ProtocolServerMetaData {
owner: string;
version: string;
transports: string[];
}
export interface InfoMessage {
code: string;
params: string[];
message: string;
}
export declare namespace InfoMessage {
function is(arg: unknown): arg is InfoMessage;
function create(code: string, params: string[], message: string): InfoMessage;
}
export interface User {
name: string;
email?: string;
authProvider?: string;
}
export interface JoinResponse {
workspace: Workspace;
}
export interface Peer {
id: Id;
host: boolean;
name: string;
email?: string;
metadata: PeerMetaData;
}
export interface PeerMetaData {
encryption: EncryptionMetaData;
compression: CompressionMetaData;
}
export interface EncryptionMetaData {
publicKey: string;
}
export interface CompressionMetaData {
supported: CompressionAlgorithm[];
}
export interface InitRequest {
protocol: string;
}
export interface InitData {
protocol: string;
host: Peer;
guests: Peer[];
permissions: Permissions;
capabilities: Capabilities;
workspace: Workspace;
}
export interface Workspace {
name: string;
folders: string[];
}
export interface Capabilities {
}
export interface Room {
id: string;
host: Peer;
guests: Peer[];
permissions: Permissions;
}
export interface Permissions {
readonly: boolean;
[key: string]: string | boolean;
}
export interface FileSystemStat {
type: FileType;
mtime: number;
ctime: number;
size: number;
permissions?: FilePermission;
}
export interface FileSystemDirectory {
[name: string]: FileType;
}
export interface FileData {
content: Binary;
}
export declare enum FilePermission {
/**
* File is readonly.
*/
Readonly = 1
}
export declare enum FileType {
Unknown = 0,
File = 1,
Directory = 2,
SymbolicLink = 64
}
export interface FileChangeEvent {
changes: FileChange[];
}
export interface FileChange {
type: FileChangeEventType;
path: Path;
}
export declare enum FileChangeEventType {
Create = 0,
Update = 1,
Delete = 2
}
export interface ClientAwareness {
/**
* The peer id of the client.
*/
peer: string;
/**
* The client's current editor selection.
*/
selection?: ClientSelection;
}
export interface ClientSelection {
path: Path;
}
export interface ClientTextSelection extends ClientSelection {
visibleRanges?: Range[];
textSelections: RelativeTextSelection[];
}
export declare namespace ClientTextSelection {
function is(selection?: ClientSelection): selection is ClientTextSelection;
}
export declare namespace SelectionDirection {
const LeftToRight = 1;
const RightToLeft = 2;
}
export interface ClientId {
client: number;
clock: number;
}
export interface RelativeTextSelection {
start: RelativeTextPosition;
end: RelativeTextPosition;
direction: SelectionDirection;
}
export interface RelativeTextPosition {
type: ClientId | null;
tname: string | null;
item: ClientId | null;
assoc: number;
}
export interface TextDiffChange {
range: Range;
text: string;
}
export interface Position {
line: number;
character: number;
}
export declare namespace Position {
function is(arg: any): arg is Position;
function create(line: number, character: number): Position;
}
export interface Range {
start: Position;
end: Position;
}
export declare namespace Range {
function is(arg: any): arg is Range;
function create(start: Position, end: Position): Range;
}
export type SelectionDirection = 1 | 2;
//# sourceMappingURL=types.d.ts.map