Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
// An implementation for WAMP messages parsing https://wamp-proto.org/
var WampMessageType;
(function (wampMessageTypeEnum) {
wampMessageTypeEnum[(wampMessageTypeEnum.Hello = 1)] = "Hello";
wampMessageTypeEnum[(wampMessageTypeEnum.Welcome = 2)] = "Welcome";
wampMessageTypeEnum[(wampMessageTypeEnum.Abort = 3)] = "Abort";
wampMessageTypeEnum[(wampMessageTypeEnum.Challenge = 4)] = "Challenge";
wampMessageTypeEnum[(wampMessageTypeEnum.Authenticate = 5)] = "Authenticate";
wampMessageTypeEnum[(wampMessageTypeEnum.Goodbye = 6)] = "Goodbye";
wampMessageTypeEnum[(wampMessageTypeEnum.Error = 8)] = "Error";
wampMessageTypeEnum[(wampMessageTypeEnum.Publish = 16)] = "Publish";
wampMessageTypeEnum[(wampMessageTypeEnum.Published = 17)] = "Published";
wampMessageTypeEnum[(wampMessageTypeEnum.Subscribe = 32)] = "Subscribe";
wampMessageTypeEnum[(wampMessageTypeEnum.Subscribed = 33)] = "Subscribed";
wampMessageTypeEnum[(wampMessageTypeEnum.Unsubscribe = 34)] = "Unsubscribe";
wampMessageTypeEnum[(wampMessageTypeEnum.Unsubscribed = 35)] = "Unsubscribed";
wampMessageTypeEnum[(wampMessageTypeEnum.Event = 36)] = "Event";
wampMessageTypeEnum[(wampMessageTypeEnum.Call = 48)] = "Call";
wampMessageTypeEnum[(wampMessageTypeEnum.Cancel = 49)] = "Cancel";
wampMessageTypeEnum[(wampMessageTypeEnum.Result = 50)] = "Result";
wampMessageTypeEnum[(wampMessageTypeEnum.Register = 64)] = "Register";
wampMessageTypeEnum[(wampMessageTypeEnum.Registered = 65)] = "Registered";
wampMessageTypeEnum[(wampMessageTypeEnum.Unregister = 66)] = "Unregister";
wampMessageTypeEnum[(wampMessageTypeEnum.Unregistered = 67)] = "Unregistered";
wampMessageTypeEnum[(wampMessageTypeEnum.Invocation = 68)] = "Invocation";
wampMessageTypeEnum[(wampMessageTypeEnum.Interrupt = 69)] = "Interrupt";
wampMessageTypeEnum[(wampMessageTypeEnum.Yield = 70)] = "Yield";
})(WampMessageType || (WampMessageType = {}));
// The WAMP protocol consists of many messages, disable complexity for one time
// eslint-disable-next-line complexity
function parseWampArray(messageArray) {
const [messageType, ...args] = messageArray;
switch (messageType) {
case WampMessageType.Hello:
return new HelloMessage(args);
case WampMessageType.Welcome:
return new WelcomeMessage(args);
case WampMessageType.Abort:
return new AbortMessage(args);
case WampMessageType.Challenge:
return new ChallengeMessage(args);
case WampMessageType.Authenticate:
return new AuthenticateMessage(args);
case WampMessageType.Goodbye:
return new GoodbyeMessage(args);
case WampMessageType.Error:
return new ErrorMessage(args);
case WampMessageType.Publish:
return new PublishMessage(args);
case WampMessageType.Published:
return new PublishedMessage(args);
case WampMessageType.Subscribe:
return new SubscribeMessage(args);
case WampMessageType.Subscribed:
return new SubscribedMessage(args);
case WampMessageType.Unsubscribe:
return new UnsubscribeMessage(args);
case WampMessageType.Unsubscribed:
return new UnsubscribedMessage(args);
case WampMessageType.Event:
return new EventMessage(args);
case WampMessageType.Call:
return new CallMessage(args);
case WampMessageType.Cancel:
return new CancelMessage(args);
case WampMessageType.Result:
return new ResultMessage(args);
case WampMessageType.Register:
return new RegisterMessage(args);
case WampMessageType.Registered:
return new RegisteredMessage(args);
case WampMessageType.Unregister:
return new UnregisterMessage(args);
case WampMessageType.Unregistered:
return new UnregisteredMessage(args);
case WampMessageType.Invocation:
return new InvocationMessage(args);
case WampMessageType.Interrupt:
return new InterruptMessage(args);
case WampMessageType.Yield:
return new YieldMessage(args);
default:
return null;
}
}
class WampMessage {
constructor(code) {
this.messageCode = code;
this.messageName = WampMessageType[code].toUpperCase();
}
}
class HelloMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Hello);
[this.realm, this.details] = messageArgs;
}
}
class WelcomeMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Welcome);
[this.session, this.details] = messageArgs;
}
}
class AbortMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Abort);
[this.details, this.reason] = messageArgs;
}
}
class ChallengeMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Challenge);
[this.authMethod, this.extra] = messageArgs;
}
}
class AuthenticateMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Authenticate);
[this.signature, this.extra] = messageArgs;
}
}
class GoodbyeMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Goodbye);
[this.details, this.reason] = messageArgs;
}
}
class ErrorMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Error);
[
this.type,
this.request,
this.details,
this.error,
this.arguments,
this.argumentsKw,
] = messageArgs;
}
}
class PublishMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Publish);
[this.request, this.options, this.topic, this.arguments, this.argumentsKw] =
messageArgs;
}
}
class PublishedMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Published);
[this.request, this.publication] = messageArgs;
}
}
class SubscribeMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Subscribe);
[this.request, this.options, this.topic] = messageArgs;
}
}
class SubscribedMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Subscribed);
[this.request, this.subscription] = messageArgs;
}
}
class UnsubscribeMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Unsubscribe);
[this.request, this.subscription] = messageArgs;
}
}
class UnsubscribedMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Unsubscribed);
[this.request] = messageArgs;
}
}
class EventMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Event);
[
this.subscription,
this.publication,
this.details,
this.arguments,
this.argumentsKw,
] = messageArgs;
}
}
class CallMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Call);
[
this.request,
this.options,
this.procedure,
this.arguments,
this.argumentsKw,
] = messageArgs;
}
}
class CancelMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Cancel);
[this.request, this.options] = messageArgs;
}
}
class ResultMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Result);
[this.request, this.details, this.arguments, this.argumentsKw] =
messageArgs;
}
}
class RegisterMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Register);
[this.request, this.options, this.procedure] = messageArgs;
}
}
class RegisteredMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Registered);
[this.request, this.registration] = messageArgs;
}
}
class UnregisterMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Unregister);
[this.request, this.registration] = messageArgs;
}
}
class UnregisteredMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Unregistered);
[this.request] = messageArgs;
}
}
class InvocationMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Invocation);
[
this.request,
this.registration,
this.details,
this.arguments,
this.argumentsKw,
] = messageArgs;
}
}
class InterruptMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Interrupt);
[this.request, this.options] = messageArgs;
}
}
class YieldMessage extends WampMessage {
constructor(messageArgs) {
super(WampMessageType.Yield);
[this.request, this.options, this.arguments, this.argumentsKw] =
messageArgs;
}
}
module.exports = {
parseWampArray,
};