open-collaboration-protocol
Version:
Open Collaboration Protocol implementation, part of the Open Collaboration Tools project
269 lines • 8.51 kB
JavaScript
// ******************************************************************************
// Copyright 2024 TypeFox GmbH
// This program and the accompanying materials are made available under the
// terms of the MIT License, which is available in the project root.
// ******************************************************************************
import { isArray, isObject, isString } from '../utils/types.js';
import { VERSION } from '../utils/version.js';
export var MessageMetadata;
(function (MessageMetadata) {
function is(item) {
return isObject(item) && MessageEncryption.is(item.encryption) && MessageCompression.is(item.compression);
}
MessageMetadata.is = is;
})(MessageMetadata || (MessageMetadata = {}));
export const DEFAULT_METADATA = {
encryption: {
keys: []
},
compression: {
algorithm: 'none'
}
};
export var MessageEncryption;
(function (MessageEncryption) {
function is(item) {
return isObject(item) && isArray(item.keys, MessageContentKey.is);
}
MessageEncryption.is = is;
})(MessageEncryption || (MessageEncryption = {}));
export var MessageCompression;
(function (MessageCompression) {
function is(item) {
return isObject(item) && isString(item.algorithm);
}
MessageCompression.is = is;
})(MessageCompression || (MessageCompression = {}));
export var MessageContentKey;
(function (MessageContentKey) {
function is(item) {
return isObject(item) && isString(item.target) && isString(item.key) && isString(item.iv);
}
MessageContentKey.is = is;
})(MessageContentKey || (MessageContentKey = {}));
export var Message;
(function (Message) {
function is(item) {
return isObject(item) && isString(item.version) && isString(item.kind) && MessageMetadata.is(item.metadata);
}
Message.is = is;
function isEncrypted(item) {
return item.content instanceof Uint8Array;
}
Message.isEncrypted = isEncrypted;
})(Message || (Message = {}));
export var ErrorMessage;
(function (ErrorMessage) {
function create(message) {
return {
version: VERSION,
kind: 'error',
metadata: DEFAULT_METADATA,
content: {
message
}
};
}
ErrorMessage.create = create;
function isAny(message) {
return Message.is(message) && message.kind === 'error';
}
ErrorMessage.isAny = isAny;
function is(message) {
return isAny(message) && isObject(message.content) && isString(message.content.message);
}
ErrorMessage.is = is;
function isBinary(message) {
return isAny(message) && Message.isEncrypted(message);
}
ErrorMessage.isBinary = isBinary;
})(ErrorMessage || (ErrorMessage = {}));
export var RequestMessage;
(function (RequestMessage) {
function create(signature, id, origin, target, params) {
return {
version: VERSION,
id,
metadata: DEFAULT_METADATA,
origin,
target,
kind: 'request',
content: {
method: typeof signature === 'string' ? signature : signature.method,
params
}
};
}
RequestMessage.create = create;
function isAny(message) {
return Message.is(message) && message.kind === 'request';
}
RequestMessage.isAny = isAny;
function is(message) {
if (!isAny(message)) {
return false;
}
const content = message.content;
return isObject(content) && isString(content.method);
}
RequestMessage.is = is;
function isEncrypted(message) {
return isAny(message) && Message.isEncrypted(message);
}
RequestMessage.isEncrypted = isEncrypted;
})(RequestMessage || (RequestMessage = {}));
export var ResponseMessage;
(function (ResponseMessage) {
function create(id, response) {
return {
kind: 'response',
version: VERSION,
id,
metadata: DEFAULT_METADATA,
content: {
response
}
};
}
ResponseMessage.create = create;
function isAny(message) {
return Message.is(message) && message.kind === 'response';
}
ResponseMessage.isAny = isAny;
function is(message) {
return isAny(message) && isObject(message.content) && 'response' in message.content;
}
ResponseMessage.is = is;
function isEncrypted(message) {
return isAny(message) && Message.isEncrypted(message);
}
ResponseMessage.isEncrypted = isEncrypted;
})(ResponseMessage || (ResponseMessage = {}));
export var ResponseErrorMessage;
(function (ResponseErrorMessage) {
function create(id, message) {
if (typeof message === 'string') {
return {
kind: 'response-error',
version: VERSION,
metadata: DEFAULT_METADATA,
id,
content: {
message
}
};
}
else {
return {
kind: 'response-error',
version: VERSION,
metadata: DEFAULT_METADATA,
id,
content: message
};
}
}
ResponseErrorMessage.create = create;
function isAny(message) {
return Message.is(message) && message.kind === 'response-error';
}
ResponseErrorMessage.isAny = isAny;
function is(message) {
return isAny(message) && isObject(message.content) && isString(message.content.message);
}
ResponseErrorMessage.is = is;
function isEncrypted(message) {
return isAny(message) && Message.isEncrypted(message);
}
ResponseErrorMessage.isEncrypted = isEncrypted;
})(ResponseErrorMessage || (ResponseErrorMessage = {}));
export var NotificationMessage;
(function (NotificationMessage) {
function create(signature, origin, target, params) {
return {
version: VERSION,
kind: 'notification',
metadata: DEFAULT_METADATA,
target,
origin,
content: {
method: typeof signature === 'string' ? signature : signature.method,
params
}
};
}
NotificationMessage.create = create;
function isAny(message) {
return Message.is(message) && message.kind === 'notification';
}
NotificationMessage.isAny = isAny;
function is(message) {
if (!isAny(message)) {
return false;
}
const content = message.content;
return isObject(content) && isString(content.method);
}
NotificationMessage.is = is;
function isEncrypted(message) {
return isAny(message) && Message.isEncrypted(message);
}
NotificationMessage.isEncrypted = isEncrypted;
})(NotificationMessage || (NotificationMessage = {}));
export var BroadcastMessage;
(function (BroadcastMessage) {
function create(signature, origin, params) {
return {
version: VERSION,
kind: 'broadcast',
metadata: DEFAULT_METADATA,
origin: origin,
content: {
method: typeof signature === 'string' ? signature : signature.method,
params
}
};
}
BroadcastMessage.create = create;
function isAny(message) {
return Message.is(message) && message.kind === 'broadcast';
}
BroadcastMessage.isAny = isAny;
function is(message) {
if (!isAny(message)) {
return false;
}
const content = message.content;
return isObject(content) && isString(content.method);
}
BroadcastMessage.is = is;
function isEncrypted(message) {
return isAny(message) && Message.isEncrypted(message);
}
BroadcastMessage.isEncrypted = isEncrypted;
})(BroadcastMessage || (BroadcastMessage = {}));
export class AbstractMessageSignature {
method;
constructor(method) {
this.method = method;
}
}
export class BroadcastType extends AbstractMessageSignature {
_;
constructor(method) {
super(method);
}
}
export class RequestType extends AbstractMessageSignature {
_;
constructor(method) {
super(method);
}
}
export class NotificationType extends AbstractMessageSignature {
_;
constructor(method) {
super(method);
}
}
//# sourceMappingURL=messages.js.map