arrayParser.js (8853B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 // An implementation for WAMP messages parsing https://wamp-proto.org/ 8 var WampMessageType; 9 (function (wampMessageTypeEnum) { 10 wampMessageTypeEnum[(wampMessageTypeEnum.Hello = 1)] = "Hello"; 11 wampMessageTypeEnum[(wampMessageTypeEnum.Welcome = 2)] = "Welcome"; 12 wampMessageTypeEnum[(wampMessageTypeEnum.Abort = 3)] = "Abort"; 13 wampMessageTypeEnum[(wampMessageTypeEnum.Challenge = 4)] = "Challenge"; 14 wampMessageTypeEnum[(wampMessageTypeEnum.Authenticate = 5)] = "Authenticate"; 15 wampMessageTypeEnum[(wampMessageTypeEnum.Goodbye = 6)] = "Goodbye"; 16 wampMessageTypeEnum[(wampMessageTypeEnum.Error = 8)] = "Error"; 17 wampMessageTypeEnum[(wampMessageTypeEnum.Publish = 16)] = "Publish"; 18 wampMessageTypeEnum[(wampMessageTypeEnum.Published = 17)] = "Published"; 19 wampMessageTypeEnum[(wampMessageTypeEnum.Subscribe = 32)] = "Subscribe"; 20 wampMessageTypeEnum[(wampMessageTypeEnum.Subscribed = 33)] = "Subscribed"; 21 wampMessageTypeEnum[(wampMessageTypeEnum.Unsubscribe = 34)] = "Unsubscribe"; 22 wampMessageTypeEnum[(wampMessageTypeEnum.Unsubscribed = 35)] = "Unsubscribed"; 23 wampMessageTypeEnum[(wampMessageTypeEnum.Event = 36)] = "Event"; 24 wampMessageTypeEnum[(wampMessageTypeEnum.Call = 48)] = "Call"; 25 wampMessageTypeEnum[(wampMessageTypeEnum.Cancel = 49)] = "Cancel"; 26 wampMessageTypeEnum[(wampMessageTypeEnum.Result = 50)] = "Result"; 27 wampMessageTypeEnum[(wampMessageTypeEnum.Register = 64)] = "Register"; 28 wampMessageTypeEnum[(wampMessageTypeEnum.Registered = 65)] = "Registered"; 29 wampMessageTypeEnum[(wampMessageTypeEnum.Unregister = 66)] = "Unregister"; 30 wampMessageTypeEnum[(wampMessageTypeEnum.Unregistered = 67)] = "Unregistered"; 31 wampMessageTypeEnum[(wampMessageTypeEnum.Invocation = 68)] = "Invocation"; 32 wampMessageTypeEnum[(wampMessageTypeEnum.Interrupt = 69)] = "Interrupt"; 33 wampMessageTypeEnum[(wampMessageTypeEnum.Yield = 70)] = "Yield"; 34 })(WampMessageType || (WampMessageType = {})); 35 36 // The WAMP protocol consists of many messages, disable complexity for one time 37 // eslint-disable-next-line complexity 38 function parseWampArray(messageArray) { 39 const [messageType, ...args] = messageArray; 40 switch (messageType) { 41 case WampMessageType.Hello: 42 return new HelloMessage(args); 43 case WampMessageType.Welcome: 44 return new WelcomeMessage(args); 45 case WampMessageType.Abort: 46 return new AbortMessage(args); 47 case WampMessageType.Challenge: 48 return new ChallengeMessage(args); 49 case WampMessageType.Authenticate: 50 return new AuthenticateMessage(args); 51 case WampMessageType.Goodbye: 52 return new GoodbyeMessage(args); 53 case WampMessageType.Error: 54 return new ErrorMessage(args); 55 case WampMessageType.Publish: 56 return new PublishMessage(args); 57 case WampMessageType.Published: 58 return new PublishedMessage(args); 59 case WampMessageType.Subscribe: 60 return new SubscribeMessage(args); 61 case WampMessageType.Subscribed: 62 return new SubscribedMessage(args); 63 case WampMessageType.Unsubscribe: 64 return new UnsubscribeMessage(args); 65 case WampMessageType.Unsubscribed: 66 return new UnsubscribedMessage(args); 67 case WampMessageType.Event: 68 return new EventMessage(args); 69 case WampMessageType.Call: 70 return new CallMessage(args); 71 case WampMessageType.Cancel: 72 return new CancelMessage(args); 73 case WampMessageType.Result: 74 return new ResultMessage(args); 75 case WampMessageType.Register: 76 return new RegisterMessage(args); 77 case WampMessageType.Registered: 78 return new RegisteredMessage(args); 79 case WampMessageType.Unregister: 80 return new UnregisterMessage(args); 81 case WampMessageType.Unregistered: 82 return new UnregisteredMessage(args); 83 case WampMessageType.Invocation: 84 return new InvocationMessage(args); 85 case WampMessageType.Interrupt: 86 return new InterruptMessage(args); 87 case WampMessageType.Yield: 88 return new YieldMessage(args); 89 default: 90 return null; 91 } 92 } 93 class WampMessage { 94 constructor(code) { 95 this.messageCode = code; 96 this.messageName = WampMessageType[code].toUpperCase(); 97 } 98 } 99 class HelloMessage extends WampMessage { 100 constructor(messageArgs) { 101 super(WampMessageType.Hello); 102 [this.realm, this.details] = messageArgs; 103 } 104 } 105 class WelcomeMessage extends WampMessage { 106 constructor(messageArgs) { 107 super(WampMessageType.Welcome); 108 [this.session, this.details] = messageArgs; 109 } 110 } 111 class AbortMessage extends WampMessage { 112 constructor(messageArgs) { 113 super(WampMessageType.Abort); 114 [this.details, this.reason] = messageArgs; 115 } 116 } 117 class ChallengeMessage extends WampMessage { 118 constructor(messageArgs) { 119 super(WampMessageType.Challenge); 120 [this.authMethod, this.extra] = messageArgs; 121 } 122 } 123 class AuthenticateMessage extends WampMessage { 124 constructor(messageArgs) { 125 super(WampMessageType.Authenticate); 126 [this.signature, this.extra] = messageArgs; 127 } 128 } 129 class GoodbyeMessage extends WampMessage { 130 constructor(messageArgs) { 131 super(WampMessageType.Goodbye); 132 [this.details, this.reason] = messageArgs; 133 } 134 } 135 class ErrorMessage extends WampMessage { 136 constructor(messageArgs) { 137 super(WampMessageType.Error); 138 [ 139 this.type, 140 this.request, 141 this.details, 142 this.error, 143 this.arguments, 144 this.argumentsKw, 145 ] = messageArgs; 146 } 147 } 148 class PublishMessage extends WampMessage { 149 constructor(messageArgs) { 150 super(WampMessageType.Publish); 151 [this.request, this.options, this.topic, this.arguments, this.argumentsKw] = 152 messageArgs; 153 } 154 } 155 class PublishedMessage extends WampMessage { 156 constructor(messageArgs) { 157 super(WampMessageType.Published); 158 [this.request, this.publication] = messageArgs; 159 } 160 } 161 class SubscribeMessage extends WampMessage { 162 constructor(messageArgs) { 163 super(WampMessageType.Subscribe); 164 [this.request, this.options, this.topic] = messageArgs; 165 } 166 } 167 class SubscribedMessage extends WampMessage { 168 constructor(messageArgs) { 169 super(WampMessageType.Subscribed); 170 [this.request, this.subscription] = messageArgs; 171 } 172 } 173 class UnsubscribeMessage extends WampMessage { 174 constructor(messageArgs) { 175 super(WampMessageType.Unsubscribe); 176 [this.request, this.subscription] = messageArgs; 177 } 178 } 179 class UnsubscribedMessage extends WampMessage { 180 constructor(messageArgs) { 181 super(WampMessageType.Unsubscribed); 182 [this.request] = messageArgs; 183 } 184 } 185 class EventMessage extends WampMessage { 186 constructor(messageArgs) { 187 super(WampMessageType.Event); 188 [ 189 this.subscription, 190 this.publication, 191 this.details, 192 this.arguments, 193 this.argumentsKw, 194 ] = messageArgs; 195 } 196 } 197 class CallMessage extends WampMessage { 198 constructor(messageArgs) { 199 super(WampMessageType.Call); 200 [ 201 this.request, 202 this.options, 203 this.procedure, 204 this.arguments, 205 this.argumentsKw, 206 ] = messageArgs; 207 } 208 } 209 class CancelMessage extends WampMessage { 210 constructor(messageArgs) { 211 super(WampMessageType.Cancel); 212 [this.request, this.options] = messageArgs; 213 } 214 } 215 class ResultMessage extends WampMessage { 216 constructor(messageArgs) { 217 super(WampMessageType.Result); 218 [this.request, this.details, this.arguments, this.argumentsKw] = 219 messageArgs; 220 } 221 } 222 class RegisterMessage extends WampMessage { 223 constructor(messageArgs) { 224 super(WampMessageType.Register); 225 [this.request, this.options, this.procedure] = messageArgs; 226 } 227 } 228 class RegisteredMessage extends WampMessage { 229 constructor(messageArgs) { 230 super(WampMessageType.Registered); 231 [this.request, this.registration] = messageArgs; 232 } 233 } 234 class UnregisterMessage extends WampMessage { 235 constructor(messageArgs) { 236 super(WampMessageType.Unregister); 237 [this.request, this.registration] = messageArgs; 238 } 239 } 240 class UnregisteredMessage extends WampMessage { 241 constructor(messageArgs) { 242 super(WampMessageType.Unregistered); 243 [this.request] = messageArgs; 244 } 245 } 246 class InvocationMessage extends WampMessage { 247 constructor(messageArgs) { 248 super(WampMessageType.Invocation); 249 [ 250 this.request, 251 this.registration, 252 this.details, 253 this.arguments, 254 this.argumentsKw, 255 ] = messageArgs; 256 } 257 } 258 class InterruptMessage extends WampMessage { 259 constructor(messageArgs) { 260 super(WampMessageType.Interrupt); 261 [this.request, this.options] = messageArgs; 262 } 263 } 264 class YieldMessage extends WampMessage { 265 constructor(messageArgs) { 266 super(WampMessageType.Yield); 267 [this.request, this.options, this.arguments, this.argumentsKw] = 268 messageArgs; 269 } 270 } 271 272 module.exports = { 273 parseWampArray, 274 };