UNPKG

open-collaboration-protocol

Version:

Open Collaboration Protocol implementation, part of the Open Collaboration Tools project

269 lines 8.51 kB
// ****************************************************************************** // 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