open-collaboration-protocol
Version:
Open Collaboration Protocol implementation, part of the Open Collaboration Tools project
217 lines • 7.83 kB
TypeScript
/**
* A collaboration message
*/
export interface Message {
/**
* Protocol version
*/
version: string;
kind: string;
metadata: MessageMetadata;
}
export interface MessageMetadata {
encryption: MessageEncryption;
compression: MessageCompression;
}
export declare namespace MessageMetadata {
function is(item: unknown): item is MessageMetadata;
}
export declare const DEFAULT_METADATA: MessageMetadata;
export interface MessageEncryption {
keys: MessageContentKey[];
}
export declare namespace MessageEncryption {
function is(item: unknown): item is MessageEncryption;
}
export interface MessageCompression {
algorithm: CompressionAlgorithm;
}
export declare namespace MessageCompression {
function is(item: unknown): item is MessageCompression;
}
export interface MessageContentKey {
target: MessageTarget;
key: string;
iv: string;
}
export declare namespace MessageContentKey {
function is(item: unknown): item is MessageContentKey;
}
export type CompressionAlgorithm = 'none' | 'gzip' | (string & {});
export interface BinaryMessage extends Message {
content: Uint8Array;
}
export type MessageTarget = string | undefined;
export type MessageOrigin = string;
export type MessageId = number | string;
export declare namespace Message {
function is(item: unknown): item is Message;
function isEncrypted(item: Message): item is BinaryMessage;
}
export interface AbstractErrorMessage<T> extends Message {
kind: 'error';
content: T;
}
export interface ErrorMessageContent {
message: string;
}
export type UnknownErrorMessage = AbstractErrorMessage<unknown>;
export type ErrorMessage = AbstractErrorMessage<ErrorMessageContent>;
export type BinaryErrorMessage = AbstractErrorMessage<Uint8Array>;
export declare namespace ErrorMessage {
function create(message: string): ErrorMessage;
function isAny(message: unknown): message is UnknownErrorMessage;
function is(message: unknown): message is ErrorMessage;
function isBinary(message: unknown): message is BinaryErrorMessage;
}
/**
* Request message
*/
export interface AbstractRequestMessage<T> extends Message {
/**
* The request id.
*/
id: number | string;
kind: 'request';
/**
* The origin peer id of the request.
*/
origin: MessageOrigin;
/**
* The peer id to which the request is addressed.
*/
target: MessageTarget;
content: T;
}
export interface RequestMessageContent {
/**
* The method to be invoked.
*/
method: string;
/**
* The method's params.
*/
params?: unknown[];
}
export type UnknownRequestMessage = AbstractRequestMessage<unknown>;
export type RequestMessage = AbstractRequestMessage<RequestMessageContent>;
export type EncryptedRequestMessage = AbstractRequestMessage<Uint8Array>;
export declare namespace RequestMessage {
function create(signature: RequestType<any, any> | string, id: number | string, origin: MessageOrigin, target: MessageTarget, params?: any[]): RequestMessage;
function isAny(message: unknown): message is UnknownRequestMessage;
function is(message: unknown): message is RequestMessage;
function isEncrypted(message: unknown): message is EncryptedRequestMessage;
}
export interface AbstractResponseMessage<T> extends Message {
/**
* The original request id.
*/
id: number | string;
kind: 'response';
content: T;
}
export interface ResponseMessageContent {
/**
* The response content.
*/
response: unknown;
}
export type UnknownResponseMessage = AbstractResponseMessage<unknown>;
export type ResponseMessage = AbstractResponseMessage<ResponseMessageContent>;
export type EncryptedResponseMessage = AbstractResponseMessage<Uint8Array>;
export declare namespace ResponseMessage {
function create(id: number | string, response: unknown): ResponseMessage;
function isAny(message: unknown): message is UnknownResponseMessage;
function is(message: unknown): message is ResponseMessage;
function isEncrypted(message: unknown): message is EncryptedResponseMessage;
}
export interface AbstractResponseErrorMessage<T> extends Message {
/**
* The original request id.
*/
id: number | string;
kind: 'response-error';
content: T;
}
export interface ResponseErrorMessageContent {
message: string;
}
export type UnknownResponseErrorMessage = AbstractResponseErrorMessage<unknown>;
export type ResponseErrorMessage = AbstractResponseErrorMessage<ResponseErrorMessageContent>;
export type EncryptedResponseErrorMessage = AbstractResponseErrorMessage<Uint8Array>;
export declare namespace ResponseErrorMessage {
function create(id: number | string, message: string): ResponseErrorMessage;
function create(id: number | string, message: Uint8Array): EncryptedResponseErrorMessage;
function isAny(message: unknown): message is UnknownResponseErrorMessage;
function is(message: unknown): message is ResponseErrorMessage;
function isEncrypted(message: unknown): message is EncryptedResponseErrorMessage;
}
export interface AbstractNotificationMessage<T> extends Message {
kind: 'notification';
/**
* The origin peer id of the notification.
*/
origin: MessageOrigin;
/**
* The peer id to which the notification is addressed.
*/
target: MessageTarget;
content: T;
}
export interface NotificationMessageContent {
/**
* The method to be invoked.
*/
method: string;
/**
* The method's params.
*/
params?: unknown[];
}
export type UnknownNotificationMessage = AbstractNotificationMessage<unknown>;
export type NotificationMessage = AbstractNotificationMessage<NotificationMessageContent>;
export type EncryptedNotificationMessage = AbstractNotificationMessage<Uint8Array>;
export declare namespace NotificationMessage {
function create(signature: NotificationType<any> | string, origin: MessageOrigin, target: MessageTarget, params?: any[]): NotificationMessage;
function isAny(message: unknown): message is UnknownNotificationMessage;
function is(message: unknown): message is NotificationMessage;
function isEncrypted(message: unknown): message is EncryptedNotificationMessage;
}
export interface AbstractBroadcastMessage<T> extends Message {
kind: 'broadcast';
origin: MessageOrigin;
content: T;
}
export interface BroadcastMessageContent {
method: string;
params?: unknown[];
}
export type UnknownBroadcastMessage = AbstractBroadcastMessage<unknown>;
export type BroadcastMessage = AbstractBroadcastMessage<BroadcastMessageContent>;
export type EncryptedBroadcastMessage = AbstractBroadcastMessage<Uint8Array>;
export declare namespace BroadcastMessage {
function create(signature: BroadcastType<any> | string, origin: string, params?: any[]): BroadcastMessage;
function isAny(message: unknown): message is UnknownBroadcastMessage;
function is(message: unknown): message is BroadcastMessage;
function isEncrypted(message: unknown): message is EncryptedBroadcastMessage;
}
export interface MessageSignature {
method: string;
}
export declare class AbstractMessageSignature implements MessageSignature {
method: string;
constructor(method: string);
}
export declare class BroadcastType<P extends unknown[] = []> extends AbstractMessageSignature {
readonly _?: ['broadcast', P, void];
constructor(method: string);
}
export declare class RequestType<P extends unknown[], R> extends AbstractMessageSignature {
readonly _?: ['request', P, R];
constructor(method: string);
}
export declare class NotificationType<P extends unknown[]> extends AbstractMessageSignature {
readonly _?: ['notification', P, void];
constructor(method: string);
}
//# sourceMappingURL=messages.d.ts.map