@monterosa/sdk-enmasse-kit 0.18.9 → 0.18.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,102 +20,88 @@ var SSCP_KLASS_LOGIN = 'login';
20
20
  var SSCP_KLASS_LOGIN_OK = 'login_ok';
21
21
  var SSCP_KLASS_LOGIN_FAIL = 'login_fail';
22
22
  var SSCP_KLASS_COUNTER = 'counter';
23
-
24
23
  var getSettingFor = name => {
25
24
  if (checkAvailability()) {
26
25
  var value = getItem(name);
27
-
28
26
  if (value !== null) {
29
27
  return value;
30
28
  }
31
- } // Guarding the use of the window object in environments where it might not be
32
- // available, such as during server - side rendering in a framework like Next.js
33
-
29
+ }
34
30
 
31
+ // Guarding the use of the window object in environments where it might not be
32
+ // available, such as during server - side rendering in a framework like Next.js
35
33
  if (typeof window === 'undefined') {
36
34
  return null;
37
35
  }
38
-
39
36
  var _URL = new URL(window.location.href),
40
- searchParams = _URL.searchParams;
41
-
37
+ searchParams = _URL.searchParams;
42
38
  if (searchParams.has(name)) {
43
39
  return searchParams.get(name);
44
40
  }
45
-
46
41
  return false;
47
42
  };
48
-
49
43
  var getSettingForMethods = () => {
50
44
  var value = getSettingFor(ARG_OVERRIDE_METHODS);
51
-
52
45
  if (typeof value === 'string') {
53
46
  return value.split(',');
54
47
  }
55
-
56
48
  return undefined;
57
49
  };
58
-
59
50
  var ENMASSE_OVERRIDE_METHODS = getSettingForMethods();
60
51
  var ENMASSE_DEBUG = getSettingFor(ARG_DEBUG);
61
52
  var ENMASSE_CONFIG = getSettingFor(ARG_CONFIG);
62
53
 
63
- var version = "0.18.9";
54
+ var version = "0.18.10";
64
55
 
65
56
  /* eslint no-bitwise: "off" */
66
57
  var TYPE_PROTOCOL = 1; // 0000 0000 0001
67
-
68
58
  var TYPE_MANAGER = 2; // 0000 0000 0010
69
-
70
59
  var TYPE_TRANSPORT = 4; // 0000 0000 0100
71
-
72
60
  var TYPE_DRIVER = 8; // 0000 0000 1000
73
-
74
61
  var TYPE_QUEUE = 16; // 0000 0001 0000
75
-
76
62
  var TYPE_TIME = 32; // 0000 0010 0000
77
-
78
63
  var TYPE_MANAGER_EXTRA = 64; // 0000 0100 0000
79
-
80
64
  var TYPE_DRIVER_EXTRA = 128; // 0000 1000 0000
81
-
82
65
  var TYPE_SERVICE = 256; // 0001 0000 0000
83
66
 
84
67
  var LEVELS = {
85
68
  brief: TYPE_PROTOCOL,
86
69
  full: TYPE_PROTOCOL | TYPE_MANAGER | TYPE_TRANSPORT | TYPE_DRIVER,
87
70
  exhaustive: TYPE_PROTOCOL | TYPE_MANAGER | TYPE_MANAGER_EXTRA | TYPE_TRANSPORT | TYPE_DRIVER | TYPE_DRIVER_EXTRA | TYPE_QUEUE | TYPE_TIME | TYPE_SERVICE
88
- }; // eslint-disable-next-line
71
+ };
89
72
 
73
+ // eslint-disable-next-line
90
74
  var log = () => {};
91
-
92
75
  if (ENMASSE_DEBUG) {
93
76
  log = function log() {
94
77
  if (typeof console === 'undefined' || !console.log) {
95
78
  return;
96
- } // parse arguments
97
- // var args = Array.prototype.slice.call(arguments);
98
- // the first argument is the debug type
79
+ }
99
80
 
81
+ // parse arguments
82
+ // var args = Array.prototype.slice.call(arguments);
100
83
 
84
+ // the first argument is the debug type
101
85
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
102
86
  args[_key] = arguments[_key];
103
87
  }
88
+ var type = args[0];
104
89
 
105
- var type = args[0]; // the rest of arguments are arbitrary data
90
+ // the rest of arguments are arbitrary data
91
+ var rest = args.slice(1);
106
92
 
107
- var rest = args.slice(1); // const time = ['getMinutes', 'getSeconds']
93
+ // const time = ['getMinutes', 'getSeconds']
108
94
  // .map((f) => new Date()[f]())
109
95
  // .map((v) => (v < 10 ? '0' : '') + v)
110
96
  // .join(':');
97
+
111
98
  // add current time
112
99
  // rest.unshift(time);
113
- // do not log if mask doesn't contain current type
114
100
 
101
+ // do not log if mask doesn't contain current type
115
102
  if ((LEVELS[ENMASSE_DEBUG] & type) === 0) {
116
103
  return;
117
104
  }
118
-
119
105
  console.log(...rest);
120
106
  };
121
107
  }
@@ -124,120 +110,109 @@ class Queue {
124
110
  constructor() {
125
111
  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
126
112
  // the main storage for messages
127
- this.queue = []; // stash of the queue
113
+ this.queue = [];
128
114
 
115
+ // stash of the queue
129
116
  this.stashed = [];
130
117
  this.running = false;
131
- this.runner = typeof config.runner === 'function' ? config.runner : null; // list of channels we subscribed to
118
+ this.runner = typeof config.runner === 'function' ? config.runner : null;
132
119
 
120
+ // list of channels we subscribed to
133
121
  this.subscriptions = [];
134
122
  }
135
-
136
123
  push(message) {
137
124
  var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
138
125
  log(TYPE_QUEUE, 'Queue::push', message, force);
139
126
  var klass = message.klass,
140
- channel = message.channel;
141
-
127
+ channel = message.channel;
142
128
  if (!force) {
143
129
  switch (klass) {
144
130
  case SSCP_KLASS_LOGIN:
145
131
  case SSCP_KLASS_AUTHR:
146
132
  break;
147
-
148
133
  case SSCP_KLASS_SUB:
149
134
  if (this.subscriptions.indexOf(channel) === -1) {
150
135
  this.subscriptions.push(channel);
151
136
  } else {
152
137
  return;
153
138
  }
154
-
155
139
  break;
156
-
157
140
  case SSCP_KLASS_UNSUB:
158
141
  {
159
142
  var index = this.subscriptions.indexOf(channel);
160
-
161
143
  if (index !== -1) {
162
144
  this.subscriptions.splice(index, 1);
163
145
  } else {
164
146
  return;
165
147
  }
166
-
167
148
  break;
168
149
  }
169
-
170
150
  default:
171
151
  if (this.subscriptions.indexOf(channel) === -1) {
172
152
  return;
173
153
  }
174
-
175
154
  break;
176
155
  }
177
156
  }
178
-
179
157
  this.queue.push(message);
180
158
  }
181
-
182
159
  getSubscriptions() {
183
160
  return this.subscriptions;
184
161
  }
185
-
186
162
  run() {
187
- log(TYPE_QUEUE, 'Queue::run', "running=".concat(this.running, ", head=").concat(this.queue[0])); // abort if whether
163
+ log(TYPE_QUEUE, 'Queue::run', "running=".concat(this.running, ", head=").concat(this.queue[0]));
164
+
165
+ // abort if whether
188
166
  // 1. runner function is not set
189
167
  // 2. OR queue is already running
190
168
  // 3. OR there is no messages in the queue
191
-
192
169
  if (this.runner === null || this.running || !this.queue[0]) {
193
170
  return;
194
171
  }
195
-
196
172
  this.running = true;
197
173
  this.runner(this.queue.shift());
198
174
  }
199
-
200
175
  success() {
201
176
  log(TYPE_QUEUE, 'Queue::success');
202
177
  this.running = false;
203
178
  this.run();
204
179
  }
205
-
206
180
  failure() {
207
181
  log(TYPE_QUEUE, 'Queue::failure');
208
182
  this.running = false;
209
183
  }
210
-
211
184
  stash() {
212
185
  log(TYPE_QUEUE, 'Queue::stash');
213
- var item; // eslint-disable-next-line
186
+ var item;
214
187
 
188
+ // eslint-disable-next-line
215
189
  while (undefined !== (item = this.queue.shift())) {
216
190
  this.stashed.push(item);
217
191
  }
218
192
  }
219
-
220
193
  unstash() {
221
194
  log(TYPE_QUEUE, 'Queue::unstash');
222
- var item; // eslint-disable-next-line
195
+ var item;
223
196
 
197
+ // eslint-disable-next-line
224
198
  while (undefined !== (item = this.stashed.shift())) {
225
199
  this.queue.push(item);
226
200
  }
227
201
  }
228
-
229
202
  }
230
203
 
231
- var local = () => new Date() / 1000; // Server time default to local time
232
-
204
+ // Returns current local timestamp
205
+ var local = () => new Date() / 1000;
233
206
 
234
- var serverTime = local(); // Time when the server time was received on the client
207
+ // Server time default to local time
208
+ var serverTime = local();
235
209
 
210
+ // Time when the server time was received on the client
236
211
  var clientTimeAtSync = local();
237
212
  var setTime = newTime => {
238
213
  log(TYPE_TIME, 'Time::setTime', newTime);
239
- serverTime = newTime; // offset = local() - time;
240
-
214
+ serverTime = newTime;
215
+ // offset = local() - time;
241
216
  clientTimeAtSync = local();
242
217
  };
243
218
  var now = () => {
@@ -246,9 +221,6 @@ var now = () => {
246
221
  };
247
222
 
248
223
  class Transport extends Emitter {
249
- // generic events
250
- // connection state events
251
- // states
252
224
  constructor() {
253
225
  super();
254
226
  this.state = this.STATE_DISCONNECTED;
@@ -256,27 +228,19 @@ class Transport extends Emitter {
256
228
  this.bind = this.on;
257
229
  this.unbind = this.off;
258
230
  }
259
-
260
231
  }
261
-
232
+ // generic events
262
233
  _defineProperty(Transport, "ON_READY", 'ready');
263
-
264
234
  _defineProperty(Transport, "ON_MESSAGE", 'message');
265
-
235
+ // connection state events
266
236
  _defineProperty(Transport, "ON_CONNECTED", 'connected');
267
-
268
237
  _defineProperty(Transport, "ON_CONNECT_FAILED", 'connect_failed');
269
-
270
238
  _defineProperty(Transport, "ON_CONNECT_LOST", 'connect_lost');
271
-
272
239
  _defineProperty(Transport, "ON_DISCONNECTED", 'disconnected');
273
-
240
+ // states
274
241
  _defineProperty(Transport, "STATE_CONNECTED", 'connected');
275
-
276
242
  _defineProperty(Transport, "STATE_CONNECTING", 'connecting');
277
-
278
243
  _defineProperty(Transport, "STATE_DISCONNECTED", 'disconnected');
279
-
280
244
  _defineProperty(Transport, "STATE_DISCONNECTING", 'disconnecting');
281
245
 
282
246
  class Driver extends Emitter {
@@ -287,30 +251,22 @@ class Driver extends Emitter {
287
251
  this.bind = this.on;
288
252
  this.unbind = this.off;
289
253
  }
290
-
291
254
  connect() {}
255
+ disconnect() {}
292
256
 
293
- disconnect() {} // Arguments:
257
+ // Arguments:
294
258
  //
295
259
  // data = null
296
260
  // success = () => {}
297
261
  // failure = () => {}
298
-
299
-
300
262
  send() {}
301
-
302
263
  init() {
303
264
  this.trigger(Driver.ON_READY);
304
265
  }
305
-
306
266
  }
307
-
308
267
  _defineProperty(Driver, "ON_READY", 'ready');
309
-
310
268
  _defineProperty(Driver, "ON_MESSAGE", 'message');
311
-
312
269
  _defineProperty(Driver, "ON_CONNECTED", 'connected');
313
-
314
270
  _defineProperty(Driver, "ON_DISCONNECTED", 'disconnected');
315
271
 
316
272
  var globals$1 = getGlobal();
@@ -321,9 +277,9 @@ class XHRDriver extends Driver {
321
277
  this.config = config;
322
278
  this.requests = {};
323
279
  this.requestIdx = 0;
324
- } // CORS request wrapper
325
-
280
+ }
326
281
 
282
+ // CORS request wrapper
327
283
  _request(url) {
328
284
  var success = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : () => {};
329
285
  var failure = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
@@ -333,7 +289,6 @@ class XHRDriver extends Driver {
333
289
  var self = this;
334
290
  var xhr = new XMLHttpRequest();
335
291
  var method = 'POST';
336
-
337
292
  if (typeof XDomainRequest !== 'undefined') {
338
293
  xhr = new XDomainRequest();
339
294
  xhr.open(method, url);
@@ -343,134 +298,105 @@ class XHRDriver extends Driver {
343
298
  } else {
344
299
  return null;
345
300
  }
346
-
347
301
  xhr._idx = this.requestIdx;
348
-
349
302
  xhr.onload = function onLoad() {
350
303
  log(TYPE_DRIVER_EXTRA, "XHRDriver::request::onload idx=".concat(xhr._idx, ", response=").concat(this.responseText));
351
-
352
304
  if (this.responseText.length > 0) {
353
305
  success(self._parseResponse(this.responseText));
354
306
  } else {
355
307
  failure(this.responseText);
356
308
  }
357
309
  };
358
-
359
310
  xhr.onerror = function onError() {
360
311
  log(TYPE_DRIVER_EXTRA, "XHRDriver::request::onerror idx=".concat(xhr._idx, ", response=").concat(this.responseText));
361
312
  failure(this.responseText);
362
- }; // XHR doesn't trigger onabort event in IE < 10
313
+ };
314
+
315
+ // XHR doesn't trigger onabort event in IE < 10
363
316
  // attaching custom abort handler and execute
364
317
  // it manually on each abort() call
365
-
366
-
367
318
  xhr._onabort = () => {
368
319
  log(TYPE_DRIVER_EXTRA, "XHRDriver::request::onabort idx=".concat(xhr._idx));
369
320
  abort();
370
321
  };
371
-
372
322
  return xhr;
373
323
  }
374
-
375
324
  _parseResponse(response) {
376
325
  var data = {};
377
326
  var chunks = response.split('&');
378
-
379
327
  for (var i = 0, l = chunks.length; i < l; i++) {
380
328
  var _chunks$i$split = chunks[i].split('='),
381
- _chunks$i$split2 = _slicedToArray(_chunks$i$split, 2),
382
- key = _chunks$i$split2[0],
383
- value = _chunks$i$split2[1];
384
-
329
+ _chunks$i$split2 = _slicedToArray(_chunks$i$split, 2),
330
+ key = _chunks$i$split2[0],
331
+ value = _chunks$i$split2[1];
385
332
  var normalisedValue = decodeURIComponent(value.replace('\0', ''));
386
-
387
333
  if (key in data) {
388
334
  if (data[key].constructor !== Array) {
389
335
  data[key] = [data[key]];
390
336
  }
391
-
392
337
  data[key].push(normalisedValue);
393
338
  } else {
394
339
  data[key] = normalisedValue;
395
340
  }
396
341
  }
397
-
398
342
  return data;
399
343
  }
400
-
401
344
  _removeRequest(idx) {
402
345
  log(TYPE_DRIVER_EXTRA, 'XHRDriver::removeRequest', idx);
403
-
404
346
  if (Object.prototype.hasOwnProperty.call(this.requests, idx)) {
405
347
  delete this.requests[idx];
406
348
  }
407
349
  }
408
-
409
350
  connect() {
410
351
  log(TYPE_DRIVER, 'XHRDriver::connect');
411
-
412
352
  if (this.connected) {
413
353
  log(TYPE_DRIVER, 'XHRDriver::connect already been connected!');
414
354
  return;
415
355
  }
416
-
417
356
  this.connected = true;
418
357
  this.trigger(XHRDriver.ON_CONNECTED);
419
358
  }
420
-
421
359
  disconnect() {
422
360
  log(TYPE_DRIVER, 'XHRDriver::disconnect');
423
-
424
361
  if (this.connected) {
425
362
  // abort all requests
426
363
  for (var idx in this.requests) {
427
364
  if (Object.prototype.hasOwnProperty.call(this.requests, idx) && this.requests[idx].abort) {
428
365
  this.requests[idx].abort();
429
-
430
366
  if (this.requests[idx]._onabort) {
431
367
  this.requests[idx]._onabort();
432
368
  }
433
-
434
369
  this._removeRequest(idx);
435
370
  }
436
371
  }
437
-
438
372
  this.connected = false;
439
373
  }
440
-
441
374
  this.trigger(XHRDriver.ON_DISCONNECTED);
442
375
  }
443
-
444
376
  send(url, data) {
445
377
  var success = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
446
378
  var failure = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : () => {};
447
379
  log(TYPE_DRIVER, 'XHRDriver::send', data);
448
380
  var xhr;
449
381
  var retry = 1;
450
-
451
382
  var send = () => {
452
383
  // eslint-disable-next-line
453
384
  xhr = this._request(url, onSuccess, onFailure, onAbort);
454
- this.requests[xhr._idx] = xhr; // fixes aborting requests in IE
385
+ this.requests[xhr._idx] = xhr;
455
386
 
387
+ // fixes aborting requests in IE
456
388
  setTimeout(() => {
457
389
  xhr.send(data);
458
390
  }, 0);
459
391
  };
460
-
461
392
  var onSuccess = response => {
462
393
  log(TYPE_DRIVER, 'XHRDriver::success', data);
463
-
464
394
  this._removeRequest(xhr._idx);
465
-
466
395
  success(response);
467
396
  };
468
-
469
397
  var onFailure = response => {
470
398
  log(TYPE_DRIVER, 'XHRDriver::failure, retry: ', retry);
471
-
472
399
  this._removeRequest(xhr._idx);
473
-
474
400
  if (retry <= this.config.request_retries) {
475
401
  setTimeout(() => {
476
402
  send();
@@ -480,22 +406,16 @@ class XHRDriver extends Driver {
480
406
  failure(response);
481
407
  }
482
408
  };
483
-
484
409
  var onAbort = () => {
485
410
  log(TYPE_DRIVER, 'XHRDriver::abort', data);
486
-
487
411
  this._removeRequest(xhr._idx);
488
-
489
412
  failure();
490
413
  };
491
-
492
414
  send();
493
415
  }
494
-
495
416
  static hasSupport() {
496
417
  return 'XDomainRequest' in globals$1 || 'withCredentials' in new XMLHttpRequest();
497
418
  }
498
-
499
419
  }
500
420
 
501
421
  /* eslint class-methods-use-this: "off" */
@@ -506,53 +426,41 @@ class WebSocketDriver extends Driver {
506
426
  this.websocket = null;
507
427
  this.closeTimeout = null;
508
428
  }
509
-
510
429
  _onMessage(e) {
511
430
  log(TYPE_DRIVER, 'WebSocketDriver::onMessage', e.data);
512
431
  this.trigger(WebSocketDriver.ON_MESSAGE, e.data);
513
432
  }
514
-
515
433
  _onOpen() {
516
434
  log(TYPE_DRIVER, 'WebSocketDriver::onOpen');
517
435
  this.connected = true;
518
436
  this.trigger(WebSocketDriver.ON_CONNECTED);
519
437
  }
520
-
521
438
  _onClose() {
522
439
  log(TYPE_DRIVER, 'WebSocketDriver::onClose');
523
-
524
440
  this._disconnect();
525
441
  }
526
-
527
442
  _onError() {
528
443
  log(TYPE_DRIVER, 'WebSocketDriver::onError');
529
444
  }
530
-
531
445
  _disconnect() {
532
446
  log(TYPE_DRIVER, 'WebSocketDriver::disconnect');
533
- this.connected = false; // reset handlers if websocket was created
447
+ this.connected = false;
534
448
 
449
+ // reset handlers if websocket was created
535
450
  if (this.websocket !== null) {
536
451
  this.websocket.onmessage = () => {};
537
-
538
452
  this.websocket.onopen = () => {};
539
-
540
453
  this.websocket.onclose = () => {};
541
-
542
454
  this.websocket.onerror = () => {};
543
-
544
455
  this.websocket = null;
545
456
  }
546
-
547
457
  clearTimeout(this.closeTimeout);
548
458
  this.trigger(WebSocketDriver.ON_DISCONNECTED);
549
459
  }
550
-
551
460
  connect(host, port, secure) {
552
461
  if (this.connected) {
553
462
  return;
554
463
  }
555
-
556
464
  log(TYPE_DRIVER, 'WebSocketDriver::connect', host, port);
557
465
  var url = "".concat(secure ? 'wss' : 'ws', "://").concat(host, ":").concat(port, "/ws");
558
466
  this.websocket = new WebSocket(url);
@@ -561,33 +469,29 @@ class WebSocketDriver extends Driver {
561
469
  this.websocket.onclose = this._onClose.bind(this);
562
470
  this.websocket.onerror = this._onError.bind(this);
563
471
  }
564
-
565
472
  disconnect() {
566
473
  log(TYPE_DRIVER, 'WebSocketDriver::disconnect');
567
-
568
474
  if (this.connected) {
569
475
  // ON_DISCONNECTED will be triggered at onClose event
570
- this.websocket.close(); // websocket does not fire onclose if network connection is lost
571
- // set timeout to force fire ON_DISCONNECTED event
476
+ this.websocket.close();
572
477
 
478
+ // websocket does not fire onclose if network connection is lost
479
+ // set timeout to force fire ON_DISCONNECTED event
573
480
  this.closeTimeout = setTimeout(this._disconnect.bind(this), 750);
574
481
  } else {
575
482
  // disconnect instantly if websocket wasn't connected or still connecting
576
483
  this._disconnect();
577
484
  }
578
485
  }
579
-
580
486
  send(data) {
581
487
  var success = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : () => {};
582
488
  log(TYPE_DRIVER, 'WebSocketDriver::send', data);
583
489
  this.websocket.send(data);
584
490
  success();
585
491
  }
586
-
587
492
  static hasSupport() {
588
493
  return 'WebSocket' in globals;
589
494
  }
590
-
591
495
  }
592
496
 
593
497
  var COMMAND_CONNECT = 'connect';
@@ -602,6 +506,7 @@ class ProxyTransport extends Transport {
602
506
  this.host = config.host || null;
603
507
  this.port = config.port || null;
604
508
  this.secure = config.secure || false;
509
+
605
510
  /*
606
511
  * Proxy properties
607
512
  * host and port should be always preserved on connect and reconnect
@@ -616,65 +521,51 @@ class ProxyTransport extends Transport {
616
521
  this.driver.bind(Driver.ON_CONNECTED, this._handleDriverConnected.bind(this));
617
522
  this.driver.bind(Driver.ON_DISCONNECTED, this._handleDriverDisconnected.bind(this));
618
523
  }
619
-
620
524
  _url() {
621
525
  return "".concat(this.secure ? 'https' : 'http', "://") + "".concat(this.proxyIp ? this.proxyIp : this.host, ":") + "".concat(this.port, "/") + "".concat(this.childId !== null ? "".concat(this.childId, "/") : '') + "?_r=".concat(new Date().getTime());
622
526
  }
623
-
624
527
  _request() {
625
528
  var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
626
529
  var success = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : () => {};
627
530
  var failure = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
628
531
  var self = this;
629
-
630
532
  var onSuccess = response => {
631
533
  // fire ON_MESSAGE event unless sscp message is empty
632
534
  if (response.sscp.constructor === String) {
633
535
  response.sscp = [response.sscp];
634
536
  }
635
-
636
537
  for (var i = 0, l = response.sscp.length; i < l; i++) {
637
538
  if (response.sscp[i] !== '') {
638
539
  self.trigger(ProxyTransport.ON_MESSAGE, response.sscp[i]);
639
540
  }
640
541
  }
641
-
642
542
  success(response);
643
543
  };
644
-
645
544
  var onFailure = () => {
646
545
  switch (self.state) {
647
546
  case ProxyTransport.STATE_CONNECTED:
648
547
  self.state = ProxyTransport.STATE_DISCONNECTING;
649
548
  self.trigger(ProxyTransport.ON_CONNECT_FAILED);
650
549
  break;
651
-
652
550
  case ProxyTransport.STATE_CONNECTING:
653
551
  self.state = ProxyTransport.STATE_DISCONNECTING;
654
552
  self.trigger(ProxyTransport.ON_CONNECT_FAILED);
655
553
  break;
656
-
657
554
  case ProxyTransport.STATE_DISCONNECTING:
658
555
  self.state = ProxyTransport.STATE_DISCONNECTED;
659
556
  self.trigger(ProxyTransport.ON_DISCONNECTED);
660
557
  break;
661
558
  }
662
-
663
559
  failure();
664
560
  };
665
-
666
561
  this.driver.send(this._url(), params, onSuccess, onFailure);
667
562
  }
668
-
669
563
  _poll() {
670
564
  var params = "command=".concat(COMMAND_POLL) + "&clientid=".concat(this.clientId) + "&sid=".concat(this.sessionId);
671
-
672
565
  this._request(params, this._poll.bind(this));
673
566
  }
674
-
675
567
  _connect() {
676
568
  var self = this;
677
-
678
569
  var onSuccess = response => {
679
570
  self.proxyIp = response.proxy;
680
571
  self.clientId = parseInt(response.clientid, 10);
@@ -682,78 +573,63 @@ class ProxyTransport extends Transport {
682
573
  self.sessionId = response.sid;
683
574
  self.state = ProxyTransport.STATE_CONNECTED;
684
575
  self.trigger(ProxyTransport.ON_CONNECTED);
685
-
686
576
  self._poll();
687
577
  };
688
-
689
578
  var onFailure = () => {
690
579
  self.state = ProxyTransport.STATE_DISCONNECTED;
691
580
  self.trigger(ProxyTransport.ON_CONNECT_FAILED);
692
581
  };
693
-
694
582
  var params = "command=".concat(COMMAND_CONNECT);
695
-
696
583
  this._request(params, onSuccess, onFailure);
697
584
  }
698
-
699
585
  _handleDriverReady() {
700
586
  this.trigger(ProxyTransport.ON_READY);
701
587
  }
702
-
703
588
  _handleDriverConnected() {
704
589
  this._connect();
705
590
  }
706
-
707
591
  _handleDriverDisconnected() {
708
592
  log(TYPE_TRANSPORT, 'ProxyTransport::handleDriverDisconnected');
709
593
  var state = this.state;
710
594
  this.state = ProxyTransport.STATE_DISCONNECTED;
711
-
712
595
  switch (state) {
713
596
  case ProxyTransport.STATE_CONNECTED:
714
597
  this.trigger(ProxyTransport.ON_CONNECT_LOST);
715
598
  break;
716
-
717
599
  case ProxyTransport.STATE_CONNECTING:
718
600
  this.trigger(ProxyTransport.ON_CONNECT_FAILED);
719
601
  break;
720
-
721
602
  case ProxyTransport.STATE_DISCONNECTING:
722
603
  this.trigger(ProxyTransport.ON_DISCONNECTED);
723
604
  break;
724
605
  }
725
606
  }
726
-
727
607
  send(sscp) {
728
608
  var success = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : () => {};
729
609
  var failure = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
730
610
  log(TYPE_TRANSPORT, 'ProxyTransport::send', sscp);
731
611
  var params = "command=".concat(COMMAND_PASS) + "&clientid=".concat(this.clientId) + "&sscp=".concat(sscp) + "&sid=".concat(this.sessionId);
732
-
733
612
  this._request(params, success, failure);
734
613
  }
735
-
736
614
  connect() {
737
615
  log(TYPE_TRANSPORT, 'ProxyTransport::connect', this.host, this.port);
738
616
  this.state = ProxyTransport.STATE_CONNECTING;
739
617
  this.driver.connect();
740
618
  }
741
-
742
619
  disconnect() {
743
- log(TYPE_TRANSPORT, 'ProxyTransport::disconnect'); // drop proxy settings
620
+ log(TYPE_TRANSPORT, 'ProxyTransport::disconnect');
744
621
 
622
+ // drop proxy settings
745
623
  this.proxyIp = null;
746
624
  this.childId = null;
747
625
  this.sessionId = null;
748
626
  this.state = ProxyTransport.STATE_DISCONNECTING;
749
627
  this.driver.disconnect();
750
628
  }
751
-
752
629
  init() {
753
630
  log(TYPE_TRANSPORT, 'ProxyTransport::init');
754
631
  this.driver.init();
755
632
  }
756
-
757
633
  }
758
634
 
759
635
  class SocketTransport extends Transport {
@@ -770,72 +646,59 @@ class SocketTransport extends Transport {
770
646
  this.driver.bind(Driver.ON_CONNECTED, this._handleDriverConnected.bind(this));
771
647
  this.driver.bind(Driver.ON_DISCONNECTED, this._handleDriverDisconnected.bind(this));
772
648
  }
773
-
774
649
  _handleDriverReady() {
775
650
  log(TYPE_TRANSPORT, 'SocketTransport::_handleDriverReady');
776
651
  this.trigger(SocketTransport.ON_READY);
777
652
  }
778
-
779
653
  _handleDriverMessage(message) {
780
654
  log(TYPE_TRANSPORT, 'SocketTransport::handleDriverMessage');
781
655
  this.trigger(SocketTransport.ON_MESSAGE, message);
782
656
  }
783
-
784
657
  _handleDriverConnected() {
785
658
  log(TYPE_TRANSPORT, 'SocketTransport::handleDriverConnected');
786
659
  this.state = SocketTransport.STATE_CONNECTED;
787
660
  this.trigger(SocketTransport.ON_CONNECTED);
788
661
  }
789
-
790
662
  _handleDriverDisconnected() {
791
663
  log(TYPE_TRANSPORT, 'SocketTransport::handleDriverDisconnected');
792
664
  var state = this.state;
793
665
  this.state = SocketTransport.STATE_DISCONNECTED;
794
-
795
666
  switch (state) {
796
667
  case SocketTransport.STATE_CONNECTED:
797
668
  this.trigger(SocketTransport.ON_CONNECT_LOST);
798
669
  break;
799
-
800
670
  case SocketTransport.STATE_CONNECTING:
801
671
  this.trigger(SocketTransport.ON_CONNECT_FAILED);
802
672
  break;
803
-
804
673
  case SocketTransport.STATE_DISCONNECTING:
805
674
  this.trigger(SocketTransport.ON_DISCONNECTED);
806
675
  break;
807
676
  }
808
677
  }
809
-
810
678
  send(sscp) {
811
679
  var success = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : () => {};
812
680
  var failure = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
813
681
  log(TYPE_TRANSPORT, 'SocketTransport::send', sscp);
814
682
  this.driver.send(sscp, success, failure);
815
683
  }
816
-
817
684
  connect() {
818
685
  log(TYPE_TRANSPORT, 'SocketTransport::connect', this.host, this.port);
819
686
  this.state = SocketTransport.STATE_CONNECTING;
820
687
  this.driver.connect(this.host, this.port, this.secure);
821
688
  }
822
-
823
689
  disconnect() {
824
690
  log(TYPE_TRANSPORT, 'SocketTransport::disconnect');
825
691
  this.state = SocketTransport.STATE_DISCONNECTING;
826
692
  this.driver.disconnect();
827
693
  }
828
-
829
694
  init() {
830
695
  log(TYPE_TRANSPORT, 'SocketTransport::init');
831
696
  this.driver.init();
832
697
  }
833
-
834
698
  }
835
699
 
836
700
  var METHOD_PROXY = 'proxy';
837
701
  var METHOD_WEBSOCKET = 'websocket';
838
-
839
702
  class TransportManager extends Emitter {
840
703
  constructor() {
841
704
  super();
@@ -844,32 +707,34 @@ class TransportManager extends Emitter {
844
707
  this.unbind = this.off;
845
708
  this.ON_READY = 'ready';
846
709
  this.config = null;
847
- this.idx = 0; // list of connection types pairs: transport - driver
710
+ this.idx = 0;
848
711
 
712
+ // list of connection types pairs: transport - driver
849
713
  this.methods = {};
850
714
  this.transports = {};
851
715
  this.loaded = 0;
852
716
  this.sequence = [];
853
717
  this.allowed = [];
854
- this.secure = true; // Guarding the use of the window object in environments where it might
718
+ this.secure = true;
719
+
720
+ // Guarding the use of the window object in environments where it might
855
721
  // not be available, such as during server - side rendering in a framework
856
722
  // like Next.js
857
-
858
723
  if (typeof window !== 'undefined') {
859
724
  this.secure = window.location.protocol.indexOf('https') === 0;
860
- } // list of connection methods which where unsuccessful
861
-
725
+ }
862
726
 
727
+ // list of connection methods which where unsuccessful
863
728
  this.unsuccessful = [];
864
729
  }
865
-
866
730
  _instantiate() {
867
- log(TYPE_MANAGER, 'TransportManager::instantiate'); // instantiate all transports
731
+ log(TYPE_MANAGER, 'TransportManager::instantiate');
868
732
 
733
+ // instantiate all transports
869
734
  this.allowed.forEach(method => {
870
- var config = this._getMethodConfig(method); // pick the random host
871
-
735
+ var config = this._getMethodConfig(method);
872
736
 
737
+ // pick the random host
873
738
  var host = config.hosts[Math.floor(Math.random() * config.hosts.length)];
874
739
  var TransportKlass = this.methods[method].transport;
875
740
  var DriverKlass = this.methods[method].driver;
@@ -881,57 +746,48 @@ class TransportManager extends Emitter {
881
746
  });
882
747
  this.transports[method] = transport;
883
748
  transport.bind(Transport.ON_READY, this._handleTransportReady.bind(this));
884
- }, this); // initialise all transports
749
+ }, this);
885
750
 
751
+ // initialise all transports
886
752
  for (var method in this.transports) {
887
753
  if (Object.prototype.hasOwnProperty.call(this.transports, method)) {
888
754
  this.transports[method].init();
889
755
  }
890
756
  }
891
757
  }
892
-
893
758
  _getMethodConfig(method) {
894
759
  return this.config.methods.find(item => item.type === method);
895
760
  }
896
-
897
761
  _handleTransportReady() {
898
762
  this.loaded += 1;
899
-
900
763
  if (this.loaded === this.allowed.length) {
901
764
  this.trigger(this.ON_READY);
902
765
  }
903
766
  }
904
-
905
767
  current() {
906
768
  return this.transports[this.allowed[this.idx]];
907
769
  }
908
-
909
770
  next() {
910
771
  this.idx += 1;
911
-
912
772
  if (this.idx >= this.allowed.length) {
913
773
  return false;
914
774
  }
915
-
916
775
  return this.current();
917
776
  }
918
-
919
777
  reset() {
920
778
  this.allowed = [];
921
- this.unsuccessful = []; // gather all methods in one array in correct connection sequence
779
+ this.unsuccessful = [];
922
780
 
781
+ // gather all methods in one array in correct connection sequence
923
782
  for (var i = 0, l = this.sequence.length; i < l; i += 1) {
924
783
  // shift method's idx by the value of the current method idx
925
784
  var method = this.sequence[(i + this.idx) % l];
926
-
927
785
  if (this.methods[method].driver.hasSupport()) {
928
786
  this.allowed.push(method);
929
787
  }
930
788
  }
931
-
932
789
  this.idx = 0;
933
790
  }
934
-
935
791
  addUnsuccessful(transport) {
936
792
  for (var method in this.transports) {
937
793
  if (Object.prototype.hasOwnProperty.call(this.transports, method) && this.transports[method] === transport) {
@@ -939,7 +795,6 @@ class TransportManager extends Emitter {
939
795
  }
940
796
  }
941
797
  }
942
-
943
798
  init() {
944
799
  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
945
800
  this.config = config;
@@ -955,63 +810,58 @@ class TransportManager extends Emitter {
955
810
  driver: WebSocketDriver,
956
811
  transport: SocketTransport
957
812
  };
958
-
959
813
  if (ENMASSE_OVERRIDE_METHODS) {
960
814
  this.sequence = ENMASSE_OVERRIDE_METHODS;
961
815
  } else {
962
816
  this.config.methods.forEach(method => this.sequence.push(method.type), this);
963
- } // remove unsupported methods
817
+ }
964
818
 
819
+ // remove unsupported methods
965
820
  /* eslint-disable */
966
-
967
-
968
821
  this.sequence = this.sequence.filter(item => Object.prototype.hasOwnProperty.call(this.methods, item));
969
822
  /* eslint-enable */
970
823
 
971
824
  this.reset();
972
-
973
825
  this._instantiate();
974
826
  }
975
-
976
827
  }
977
-
978
828
  var TransportManager$1 = new TransportManager();
979
829
 
980
830
  /* eslint @typescript-eslint/no-use-before-define: ["error", { "variables": false }] */
981
-
982
831
  var ConnectionManager = (() => {
983
832
  var self = new Emitter();
984
833
  self.trigger = self.emit;
985
834
  self.bind = self.on;
986
835
  self.unbind = self.off;
836
+
987
837
  /*
988
838
  * Constants
989
839
  */
990
-
991
840
  var CONNECT_DELAYS = [0, 3, 5, 10, 20, 30, 45, 60];
841
+
992
842
  /*
993
843
  * States
994
844
  */
995
-
996
845
  self.STATE_DISCONNECTED = 'state_disconnected';
997
846
  self.STATE_DISCONNECTING = 'state_disconnecting';
998
847
  self.STATE_CONNECTING = 'state_connecting';
999
848
  self.STATE_CONNECTED = 'state_connected';
849
+
1000
850
  /*
1001
851
  * Events
1002
852
  */
1003
-
1004
853
  self.ON_MESSAGE = 'message';
1005
854
  self.ON_STATE = 'state';
855
+
1006
856
  /*
1007
857
  * Private variables
1008
858
  */
1009
-
1010
859
  var config = null;
1011
860
  var state = self.STATE_DISCONNECTED;
1012
861
  var transport = null;
1013
- var attempt = 1; // Timestamp to track when the app was backgrounded
862
+ var attempt = 1;
1014
863
 
864
+ // Timestamp to track when the app was backgrounded
1015
865
  var backgroundedAt = null;
1016
866
  var inactivityTimeout = {
1017
867
  start() {
@@ -1023,23 +873,19 @@ var ConnectionManager = (() => {
1023
873
  }
1024
874
  }, 1000);
1025
875
  },
1026
-
1027
876
  stop() {
1028
877
  log(TYPE_MANAGER_EXTRA, 'ConnectionManager::inactivityTimeout::stop');
1029
878
  clearInterval(this.interval);
1030
879
  },
1031
-
1032
880
  reset() {
1033
881
  log(TYPE_MANAGER_EXTRA, 'ConnectionManager::inactivityTimeout::reset');
1034
882
  this.stop();
1035
883
  this.start();
1036
884
  },
1037
-
1038
885
  resolve() {
1039
886
  log(TYPE_MANAGER_EXTRA, 'ConnectionManager::inactivityTimeout::resolve');
1040
887
  disconnectingOnConnectLost();
1041
888
  }
1042
-
1043
889
  };
1044
890
  var connectTimeout = {
1045
891
  start() {
@@ -1048,21 +894,17 @@ var ConnectionManager = (() => {
1048
894
  this.resolve();
1049
895
  }, config.connect_timeout * 1000);
1050
896
  },
1051
-
1052
897
  stop() {
1053
898
  log(TYPE_MANAGER_EXTRA, 'ConnectionManager::connectTimeout::stop');
1054
899
  clearTimeout(this.timeout);
1055
900
  },
1056
-
1057
901
  resolve() {
1058
902
  log(TYPE_MANAGER_EXTRA, 'ConnectionManager::connectTimeout::resolve');
1059
903
  disconnectingOnConnectFailed();
1060
904
  }
1061
-
1062
905
  };
1063
906
  var connectDelay = {
1064
907
  active: false,
1065
-
1066
908
  start(delay) {
1067
909
  log(TYPE_MANAGER_EXTRA, 'ConnectionManager::connectDelay::start');
1068
910
  this.active = true;
@@ -1070,21 +912,17 @@ var ConnectionManager = (() => {
1070
912
  this.resolve();
1071
913
  }, delay * 1000);
1072
914
  },
1073
-
1074
915
  stop() {
1075
916
  log(TYPE_MANAGER_EXTRA, 'ConnectionManager::connectDelay::stop');
1076
917
  this.active = false;
1077
918
  clearTimeout(this.timeout);
1078
919
  },
1079
-
1080
920
  resolve() {
1081
921
  log(TYPE_MANAGER_EXTRA, 'ConnectionManager::connectDelay::resolve');
1082
922
  this.stop();
1083
923
  connect();
1084
924
  }
1085
-
1086
925
  };
1087
-
1088
926
  var initTransport = newTransport => {
1089
927
  log(TYPE_MANAGER, 'ConnectionManager::initTransport');
1090
928
  transport = newTransport;
@@ -1094,14 +932,11 @@ var ConnectionManager = (() => {
1094
932
  transport.bind(Transport.ON_CONNECT_LOST, handleTransportConnectLost);
1095
933
  transport.bind(Transport.ON_DISCONNECTED, handleTransportDisconnected);
1096
934
  };
1097
-
1098
935
  var teardownTransport = () => {
1099
936
  log(TYPE_MANAGER, 'ConnectionManager::teardownTransport');
1100
-
1101
937
  if (transport === null) {
1102
938
  return;
1103
939
  }
1104
-
1105
940
  transport.unbind(Transport.ON_MESSAGE, handleTransportMessage);
1106
941
  transport.unbind(Transport.ON_CONNECTED, handleTransportConnected);
1107
942
  transport.unbind(Transport.ON_CONNECT_FAILED, handleTransportConnectFailed);
@@ -1109,11 +944,9 @@ var ConnectionManager = (() => {
1109
944
  transport.unbind(Transport.ON_DISCONNECTED, handleTransportDisconnected);
1110
945
  transport = null;
1111
946
  };
1112
-
1113
947
  var handleTransportMessage = message => {
1114
948
  log(TYPE_MANAGER, 'ConnectionManager::handleTransportMessage', message);
1115
949
  var messages = message.split('\0');
1116
-
1117
950
  for (var i = 0; i < messages.length; i += 1) {
1118
951
  if (messages[i].length > 0) {
1119
952
  inactivityTimeout.reset();
@@ -1122,86 +955,71 @@ var ConnectionManager = (() => {
1122
955
  }
1123
956
  }
1124
957
  };
1125
-
1126
958
  var handleTransportConnected = () => {
1127
959
  log(TYPE_MANAGER, 'ConnectionManager::handleTransportConnected');
1128
960
  setStateToConnected();
1129
961
  };
1130
-
1131
962
  var handleTransportConnectFailed = () => {
1132
963
  log(TYPE_MANAGER, 'ConnectionManager::handleTransportConnectFailed');
1133
964
  disconnectingOnConnectFailed();
1134
965
  };
1135
-
1136
966
  var handleTransportConnectLost = () => {
1137
967
  log(TYPE_MANAGER, 'ConnectionManager::handleTransportConnectLost');
1138
968
  disconnectingOnConnectLost();
1139
969
  };
1140
-
1141
970
  var handleTransportDisconnected = () => {
1142
971
  log(TYPE_MANAGER, 'ConnectionManager::handleTransportDisconnected');
1143
-
1144
972
  switch (state) {
1145
973
  case self.STATE_CONNECTED:
1146
974
  disconnectedOnConnectLost();
1147
975
  break;
1148
-
1149
976
  case self.STATE_CONNECTING:
1150
977
  disconnectedOnConnectFailed();
1151
978
  break;
1152
-
1153
979
  case self.STATE_DISCONNECTING:
1154
980
  setStateToDisconnected();
1155
981
  break;
1156
982
  }
1157
983
  };
1158
-
1159
984
  var disconnectingOnConnectFailed = () => {
1160
985
  log(TYPE_MANAGER, 'ConnectionManager::disconnectingOnConnectFailed()');
1161
986
  disconnect();
1162
987
  };
1163
-
1164
988
  var disconnectingOnConnectLost = () => {
1165
989
  log(TYPE_MANAGER, 'ConnectionManager::disconnectingOnConnectLost()');
1166
990
  disconnect();
1167
991
  };
1168
-
1169
992
  var disconnectedOnConnectLost = () => {
1170
993
  log(TYPE_MANAGER, 'ConnectionManager::disconnectedOnConnectLost()');
1171
- teardownTransport(); // automatically reconnect
994
+ teardownTransport();
1172
995
 
996
+ // automatically reconnect
1173
997
  setStateToConnecting();
1174
998
  };
1175
-
1176
999
  var disconnectedOnConnectFailed = () => {
1177
1000
  log(TYPE_MANAGER, 'ConnectionManager::disconnectedOnConnectFailed()');
1178
1001
  TransportManager$1.addUnsuccessful(transport);
1179
1002
  teardownTransport();
1180
-
1181
1003
  if (TransportManager$1.next() === false) {
1182
1004
  setStateToConnecting();
1183
1005
  } else {
1184
1006
  connect();
1185
1007
  }
1186
1008
  };
1187
-
1188
1009
  var setStateToConnecting = () => {
1189
1010
  log(TYPE_MANAGER, 'ConnectionManager::setStateToConnecting()');
1190
1011
  var delay;
1191
-
1192
1012
  if (attempt >= CONNECT_DELAYS.length) {
1193
1013
  delay = CONNECT_DELAYS[CONNECT_DELAYS.length - 1];
1194
1014
  } else {
1195
1015
  delay = CONNECT_DELAYS[attempt - 1];
1196
1016
  }
1197
-
1198
1017
  state = self.STATE_CONNECTING;
1199
1018
  self.trigger(self.ON_STATE, state, attempt, delay);
1200
1019
  TransportManager$1.reset();
1201
1020
  attempt += 1;
1202
1021
  connectDelay.start(delay);
1203
1022
  };
1204
-
1205
1023
  var setStateToConnected = () => {
1206
1024
  log(TYPE_MANAGER, 'ConnectionManager::setStateToConnected()');
1207
1025
  attempt = 1;
@@ -1212,14 +1030,12 @@ var ConnectionManager = (() => {
1212
1030
  state = self.STATE_CONNECTED;
1213
1031
  self.trigger(self.ON_STATE, state);
1214
1032
  };
1215
-
1216
1033
  var setStateToDisconnecting = () => {
1217
1034
  log(TYPE_MANAGER, 'ConnectionManager::setStateToDisconnecting()');
1218
1035
  state = self.STATE_DISCONNECTING;
1219
1036
  self.trigger(self.ON_STATE, state);
1220
1037
  disconnect();
1221
1038
  };
1222
-
1223
1039
  var setStateToDisconnected = () => {
1224
1040
  log(TYPE_MANAGER, 'ConnectionManager::setStateToDisconnected()');
1225
1041
  attempt = 1;
@@ -1228,7 +1044,6 @@ var ConnectionManager = (() => {
1228
1044
  state = self.STATE_DISCONNECTED;
1229
1045
  self.trigger(self.ON_STATE, state);
1230
1046
  };
1231
-
1232
1047
  var connect = () => {
1233
1048
  if (state === self.STATE_CONNECTING) {
1234
1049
  connectTimeout.start();
@@ -1236,18 +1051,17 @@ var ConnectionManager = (() => {
1236
1051
  transport.connect();
1237
1052
  }
1238
1053
  };
1239
-
1240
1054
  var disconnect = () => {
1241
1055
  inactivityTimeout.stop();
1242
1056
  connectTimeout.stop();
1243
1057
  connectDelay.stop();
1244
-
1245
1058
  if (transport) {
1246
1059
  transport.disconnect();
1247
1060
  } else {
1248
1061
  setStateToDisconnected();
1249
1062
  }
1250
1063
  };
1064
+
1251
1065
  /**
1252
1066
  * Handles changes in the document's visibility state (visible/hidden).
1253
1067
  *
@@ -1260,56 +1074,46 @@ var ConnectionManager = (() => {
1260
1074
  * Note on Safari (ios and desktop) and Firefox quirk: visibilitychange event is fired
1261
1075
  * immidiately when the page is loaded, even if the page is visible.
1262
1076
  */
1263
-
1264
-
1265
1077
  var handleVisibilityChange = () => {
1266
1078
  log(TYPE_MANAGER, 'ConnectionManager::handleVisibilityChange()', document.visibilityState);
1267
-
1268
1079
  switch (document.visibilityState) {
1269
1080
  case 'visible':
1270
1081
  if (backgroundedAt === null) {
1271
1082
  return;
1272
1083
  }
1273
-
1274
1084
  if (state !== self.STATE_CONNECTED) {
1275
1085
  return;
1276
1086
  }
1277
-
1278
1087
  if (Date.now() - backgroundedAt > config.background_timeout * 1000) {
1279
1088
  log(TYPE_MANAGER, 'ConnectionManager::handleVisibilityChange()', 'disconnecting due to background timeout');
1280
1089
  disconnect();
1281
1090
  }
1282
-
1283
1091
  backgroundedAt = null;
1284
1092
  break;
1285
-
1286
1093
  case 'hidden':
1287
1094
  backgroundedAt = Date.now();
1288
1095
  break;
1289
1096
  }
1290
1097
  };
1291
-
1292
1098
  var handleNetworkStatus = () => {
1293
1099
  if (!navigator.onLine && state === self.STATE_CONNECTED) {
1294
1100
  log(TYPE_MANAGER, 'ConnectionManager::handleNetworkStatus()', 'disconnecting due to network loss');
1295
1101
  disconnect();
1296
1102
  }
1297
1103
  };
1298
-
1299
1104
  self.connect = () => {
1300
- log(TYPE_MANAGER, 'ConnectionManager::connect()'); // resolve connect instantly if the process has been already postponed
1105
+ log(TYPE_MANAGER, 'ConnectionManager::connect()');
1301
1106
 
1107
+ // resolve connect instantly if the process has been already postponed
1302
1108
  if (connectDelay.active) {
1303
1109
  connectDelay.resolve();
1304
1110
  } else if (state === self.STATE_DISCONNECTED) {
1305
1111
  setStateToConnecting();
1306
1112
  }
1307
-
1308
1113
  window.addEventListener('online', handleNetworkStatus);
1309
1114
  window.addEventListener('offline', handleNetworkStatus);
1310
1115
  window.addEventListener('visibilitychange', handleVisibilityChange);
1311
1116
  };
1312
-
1313
1117
  self.disconnect = () => {
1314
1118
  log(TYPE_MANAGER, 'ConnectionManager::disconnect()');
1315
1119
  setStateToDisconnecting();
@@ -1317,29 +1121,21 @@ var ConnectionManager = (() => {
1317
1121
  window.removeEventListener('offline', handleNetworkStatus);
1318
1122
  window.removeEventListener('visibilitychange', handleVisibilityChange);
1319
1123
  };
1320
-
1321
1124
  self.send = (sscp, success, failure) => {
1322
1125
  log(TYPE_MANAGER, 'ConnectionManager::send', sscp);
1323
-
1324
1126
  success = success || (() => {});
1325
-
1326
1127
  failure = failure || (() => {});
1327
-
1328
1128
  transport.send(sscp, success, failure);
1329
1129
  };
1330
-
1331
1130
  self.getConnectAttempt = () => attempt;
1332
-
1333
1131
  self.init = cfg => {
1334
1132
  log(TYPE_MANAGER, 'ConnectionManager::init()', cfg);
1335
1133
  config = cfg;
1336
1134
  };
1337
-
1338
1135
  return self;
1339
1136
  })();
1340
1137
 
1341
1138
  /* eslint-disable no-console */
1342
-
1343
1139
  class Demographics extends Emitter {
1344
1140
  constructor() {
1345
1141
  super(...arguments);
@@ -1348,46 +1144,40 @@ class Demographics extends Emitter {
1348
1144
  this.bind = this.on;
1349
1145
  this.unbind = this.off;
1350
1146
  }
1351
-
1352
1147
  addCounter(channel, eventId, segment, counter) {
1353
1148
  var round = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
1354
1149
  var min = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;
1355
1150
  var max = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;
1356
1151
  log(TYPE_SERVICE, 'Demographics::addCounter', channel, eventId, segment, counter, round, min, max);
1357
-
1358
1152
  if (!channel) {
1359
1153
  return;
1360
1154
  }
1361
-
1362
1155
  if (!eventId) {
1363
1156
  return;
1364
1157
  }
1365
-
1366
1158
  if (!segment || segment.constructor !== Array || !segment.length || segment.length % 2 !== 0) {
1367
1159
  return;
1368
1160
  }
1369
-
1370
1161
  if (counter !== parseInt(counter, 10)) {
1371
1162
  return;
1372
1163
  }
1373
-
1374
1164
  var keys = segment.filter((v, i) => (i + 1) % 2).join(':');
1375
1165
  var values = segment.filter((v, i) => i % 2).join(':');
1376
1166
  this.trigger(this.ON_ADD_COUNTER, channel, [eventId, min, max, round, keys, values, counter]);
1377
1167
  }
1378
-
1379
1168
  }
1380
-
1381
1169
  var Demographics$1 = new Demographics();
1382
1170
 
1383
1171
  var Enmasse = (() => {
1384
1172
  /*
1385
1173
  * Link to the scope
1386
1174
  */
1175
+
1387
1176
  var self = new Emitter();
1388
1177
  self.trigger = self.emit;
1389
1178
  self.bind = self.on;
1390
1179
  self.unbind = self.off;
1180
+
1391
1181
  /*
1392
1182
  * Constants
1393
1183
  */
@@ -1411,196 +1201,175 @@ var Enmasse = (() => {
1411
1201
  self.STATE_DISCONNECTED = 'disconnected';
1412
1202
  self.STATE_CONNECTED = 'connected';
1413
1203
  self.STATE_CONNECTING = 'connecting';
1414
- self.Demographics = Demographics$1; // var CALLBACK_NAME = "__enmasse_callback";
1204
+ self.Demographics = Demographics$1;
1205
+
1206
+ // var CALLBACK_NAME = "__enmasse_callback";
1415
1207
  // var CONFIG_TIMEOUT = 5000;
1416
1208
 
1417
1209
  var PARAM_SESSION_ID = 'enmasse_session_id';
1210
+
1418
1211
  /*
1419
1212
  * Enmasse properties
1420
1213
  */
1214
+
1421
1215
  // Link to the config file.
1216
+ var configFile = null;
1422
1217
 
1423
- var configFile = null; // list of arbitray data passed into handshake
1218
+ // list of arbitray data passed into handshake
1424
1219
  // message along with the protocol version
1220
+ var info = [];
1425
1221
 
1426
- var info = []; // session id is generated by server and passed
1222
+ // session id is generated by server and passed
1427
1223
  // on client on handshake
1224
+ var sessionId = null;
1428
1225
 
1429
- var sessionId = null; // out messages queue
1226
+ // out messages queue
1227
+ var queue = null;
1430
1228
 
1431
- var queue = null; // current state of the state machine
1432
-
1433
- var state = self.STATE_DISCONNECTED; // system channel
1229
+ // current state of the state machine
1230
+ var state = self.STATE_DISCONNECTED;
1434
1231
 
1435
- var sysChannel = null; // force secure connection
1232
+ // system channel
1233
+ var sysChannel = null;
1436
1234
 
1437
- var forceSecure = false; // sign in promise object
1235
+ // force secure connection
1236
+ var forceSecure = false;
1438
1237
 
1238
+ // sign in promise object
1439
1239
  var loginContext = {
1440
1240
  inProgress: false,
1441
1241
  success: () => {},
1442
1242
  failure: () => {}
1443
1243
  };
1244
+
1444
1245
  /*
1445
1246
  * Private methods
1446
1247
  */
1447
1248
 
1448
1249
  var storeSession = /*#__PURE__*/function () {
1449
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(id) {
1450
- return _regeneratorRuntime.wrap(function _callee$(_context) {
1451
- while (1) {
1452
- switch (_context.prev = _context.next) {
1453
- case 0:
1454
- _context.prev = 0;
1455
- _context.next = 3;
1456
- return storageWrite(PARAM_SESSION_ID, id);
1457
-
1458
- case 3:
1459
- _context.next = 8;
1460
- break;
1461
-
1462
- case 5:
1463
- _context.prev = 5;
1464
- _context.t0 = _context["catch"](0);
1465
- console.error("Failed to persist session to shared storage: ".concat(getErrorMessage(_context.t0)));
1466
-
1467
- case 8:
1468
- case "end":
1469
- return _context.stop();
1470
- }
1250
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(id) {
1251
+ var _t;
1252
+ return _regeneratorRuntime.wrap(function (_context) {
1253
+ while (1) switch (_context.prev = _context.next) {
1254
+ case 0:
1255
+ _context.prev = 0;
1256
+ _context.next = 1;
1257
+ return storageWrite(PARAM_SESSION_ID, id);
1258
+ case 1:
1259
+ _context.next = 3;
1260
+ break;
1261
+ case 2:
1262
+ _context.prev = 2;
1263
+ _t = _context["catch"](0);
1264
+ console.error("Failed to persist session to shared storage: ".concat(getErrorMessage(_t)));
1265
+ case 3:
1266
+ case "end":
1267
+ return _context.stop();
1471
1268
  }
1472
- }, _callee, null, [[0, 5]]);
1269
+ }, _callee, null, [[0, 2]]);
1473
1270
  }));
1474
-
1475
1271
  return function storeSession(_x) {
1476
1272
  return _ref.apply(this, arguments);
1477
1273
  };
1478
1274
  }();
1479
-
1480
1275
  var restoreSession = /*#__PURE__*/function () {
1481
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1482
- var restoredId;
1483
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1484
- while (1) {
1485
- switch (_context2.prev = _context2.next) {
1486
- case 0:
1487
- restoredId = null; // Read session from shared storage
1488
-
1489
- _context2.prev = 1;
1490
- _context2.next = 4;
1491
- return storageRead(PARAM_SESSION_ID);
1492
-
1493
- case 4:
1494
- restoredId = _context2.sent;
1495
- _context2.next = 10;
1276
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1277
+ var restoredId, _t2, _t3;
1278
+ return _regeneratorRuntime.wrap(function (_context2) {
1279
+ while (1) switch (_context2.prev = _context2.next) {
1280
+ case 0:
1281
+ restoredId = null; // Read session from shared storage
1282
+ _context2.prev = 1;
1283
+ _context2.next = 2;
1284
+ return storageRead(PARAM_SESSION_ID);
1285
+ case 2:
1286
+ restoredId = _context2.sent;
1287
+ _context2.next = 4;
1288
+ break;
1289
+ case 3:
1290
+ _context2.prev = 3;
1291
+ _t2 = _context2["catch"](1);
1292
+ console.error("Failed to read session from shared storage: ".concat(getErrorMessage(_t2)));
1293
+ case 4:
1294
+ if (!(restoredId !== null)) {
1295
+ _context2.next = 5;
1496
1296
  break;
1497
-
1498
- case 7:
1499
- _context2.prev = 7;
1500
- _context2.t0 = _context2["catch"](1);
1501
- console.error("Failed to read session from shared storage: ".concat(getErrorMessage(_context2.t0)));
1502
-
1503
- case 10:
1504
- if (!(restoredId !== null)) {
1505
- _context2.next = 12;
1506
- break;
1507
- }
1508
-
1509
- return _context2.abrupt("return", restoredId);
1510
-
1511
- case 12:
1512
- if (!(getParentApplication() === null)) {
1513
- _context2.next = 14;
1514
- break;
1515
- }
1516
-
1517
- return _context2.abrupt("return", null);
1518
-
1519
- case 14:
1520
- try {
1521
- restoredId = getItem(PARAM_SESSION_ID);
1522
- } catch (err) {
1523
- console.error("Failed to read local session during migration: ".concat(getErrorMessage(err)));
1524
- }
1525
-
1526
- if (!(restoredId === null)) {
1527
- _context2.next = 17;
1528
- break;
1529
- }
1530
-
1531
- return _context2.abrupt("return", null);
1532
-
1533
- case 17:
1534
- _context2.prev = 17;
1535
- _context2.next = 20;
1536
- return storageWrite(PARAM_SESSION_ID, restoredId);
1537
-
1538
- case 20:
1539
- _context2.next = 25;
1297
+ }
1298
+ return _context2.abrupt("return", restoredId);
1299
+ case 5:
1300
+ if (!(getParentApplication() === null)) {
1301
+ _context2.next = 6;
1540
1302
  break;
1541
-
1542
- case 22:
1543
- _context2.prev = 22;
1544
- _context2.t1 = _context2["catch"](17);
1545
- console.error("Failed to persist session to shared storage during migration: ".concat(getErrorMessage(_context2.t1)));
1546
-
1547
- case 25:
1548
- return _context2.abrupt("return", restoredId);
1549
-
1550
- case 26:
1551
- case "end":
1552
- return _context2.stop();
1553
- }
1303
+ }
1304
+ return _context2.abrupt("return", null);
1305
+ case 6:
1306
+ try {
1307
+ restoredId = getItem(PARAM_SESSION_ID);
1308
+ } catch (err) {
1309
+ console.error("Failed to read local session during migration: ".concat(getErrorMessage(err)));
1310
+ }
1311
+ if (!(restoredId === null)) {
1312
+ _context2.next = 7;
1313
+ break;
1314
+ }
1315
+ return _context2.abrupt("return", null);
1316
+ case 7:
1317
+ _context2.prev = 7;
1318
+ _context2.next = 8;
1319
+ return storageWrite(PARAM_SESSION_ID, restoredId);
1320
+ case 8:
1321
+ _context2.next = 10;
1322
+ break;
1323
+ case 9:
1324
+ _context2.prev = 9;
1325
+ _t3 = _context2["catch"](7);
1326
+ console.error("Failed to persist session to shared storage during migration: ".concat(getErrorMessage(_t3)));
1327
+ case 10:
1328
+ return _context2.abrupt("return", restoredId);
1329
+ case 11:
1330
+ case "end":
1331
+ return _context2.stop();
1554
1332
  }
1555
- }, _callee2, null, [[1, 7], [17, 22]]);
1333
+ }, _callee2, null, [[1, 3], [7, 9]]);
1556
1334
  }));
1557
-
1558
1335
  return function restoreSession() {
1559
1336
  return _ref2.apply(this, arguments);
1560
1337
  };
1561
1338
  }();
1562
-
1563
1339
  var resetSession = /*#__PURE__*/function () {
1564
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1565
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1566
- while (1) {
1567
- switch (_context3.prev = _context3.next) {
1568
- case 0:
1569
- sessionId = null;
1570
- _context3.prev = 1;
1571
- _context3.next = 4;
1572
- return storageRemove(PARAM_SESSION_ID);
1573
-
1574
- case 4:
1575
- _context3.next = 9;
1576
- break;
1577
-
1578
- case 6:
1579
- _context3.prev = 6;
1580
- _context3.t0 = _context3["catch"](1);
1581
- console.error("Failed to remove session from shared storage: ".concat(getErrorMessage(_context3.t0)));
1582
-
1583
- case 9:
1584
- case "end":
1585
- return _context3.stop();
1586
- }
1340
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1341
+ var _t4;
1342
+ return _regeneratorRuntime.wrap(function (_context3) {
1343
+ while (1) switch (_context3.prev = _context3.next) {
1344
+ case 0:
1345
+ sessionId = null;
1346
+ _context3.prev = 1;
1347
+ _context3.next = 2;
1348
+ return storageRemove(PARAM_SESSION_ID);
1349
+ case 2:
1350
+ _context3.next = 4;
1351
+ break;
1352
+ case 3:
1353
+ _context3.prev = 3;
1354
+ _t4 = _context3["catch"](1);
1355
+ console.error("Failed to remove session from shared storage: ".concat(getErrorMessage(_t4)));
1356
+ case 4:
1357
+ case "end":
1358
+ return _context3.stop();
1587
1359
  }
1588
- }, _callee3, null, [[1, 6]]);
1360
+ }, _callee3, null, [[1, 3]]);
1589
1361
  }));
1590
-
1591
1362
  return function resetSession() {
1592
1363
  return _ref3.apply(this, arguments);
1593
1364
  };
1594
1365
  }();
1595
-
1596
- var validateSession = id => // eslint-disable-next-line
1366
+ var validateSession = id =>
1367
+ // eslint-disable-next-line
1597
1368
  /^[a-f\d]{8}\-[a-f\d]{4}\-[a-f\d]{4}-[a-f\d]{4}\-[a-f\d]{12}$/i.test(id);
1598
-
1599
1369
  var finaliseLogin = callback => {
1600
1370
  if (loginContext.inProgress === false) {
1601
1371
  return;
1602
1372
  }
1603
-
1604
1373
  loginContext = {
1605
1374
  inProgress: false,
1606
1375
  success: () => {},
@@ -1608,15 +1377,12 @@ var Enmasse = (() => {
1608
1377
  };
1609
1378
  callback();
1610
1379
  };
1611
-
1612
1380
  var resolveLogin = () => {
1613
1381
  finaliseLogin(loginContext.success);
1614
1382
  };
1615
-
1616
1383
  var rejectLogin = () => {
1617
1384
  finaliseLogin(loginContext.failure);
1618
1385
  };
1619
-
1620
1386
  var setStateToDisconnected = () => {
1621
1387
  log(TYPE_PROTOCOL, 'Enmasse::setStateToDisconnected()');
1622
1388
  state = self.STATE_DISCONNECTED;
@@ -1624,21 +1390,18 @@ var Enmasse = (() => {
1624
1390
  rejectLogin();
1625
1391
  self.trigger(self.ON_STATE, state);
1626
1392
  };
1627
-
1628
1393
  var setStateToConnected = () => {
1629
1394
  log(TYPE_PROTOCOL, 'Enmasse::setStateToConnected()');
1630
1395
  var time = now();
1631
1396
  state = self.STATE_CONNECTED;
1632
1397
  self.trigger(self.ON_STATE, state, time);
1633
1398
  };
1634
-
1635
1399
  var setStateToConnecting = (attempt, delay) => {
1636
1400
  log(TYPE_PROTOCOL, 'Enmasse::setStateToConnecting()');
1637
1401
  state = self.STATE_CONNECTING;
1638
1402
  rejectLogin();
1639
1403
  self.trigger(self.ON_STATE, state, attempt, delay);
1640
1404
  };
1641
-
1642
1405
  var parseSSCP = sscp => {
1643
1406
  var data = {
1644
1407
  channel: 0,
@@ -1647,22 +1410,17 @@ var Enmasse = (() => {
1647
1410
  body: []
1648
1411
  };
1649
1412
  var separator1 = sscp.indexOf('/');
1650
-
1651
1413
  if (separator1 !== -1) {
1652
1414
  var separator2 = sscp.indexOf('/', separator1 + 1);
1653
-
1654
1415
  if (separator2 !== -1) {
1655
1416
  data.channel = sscp.substr(0, separator1);
1656
1417
  data.klass = sscp.substr(separator1 + 1, separator2 - separator1 - 1);
1657
1418
  var separator3 = sscp.indexOf('/', separator2 + 1);
1658
-
1659
1419
  if (separator3 !== -1) {
1660
1420
  data.sent_at = parseInt(sscp.substr(separator2 + 1, separator3 - separator2 - 1), 10);
1661
1421
  var body = sscp.substr(separator3 + 1);
1662
-
1663
1422
  if (body !== '') {
1664
1423
  var values = body.split('|');
1665
-
1666
1424
  for (var i = 0, l = values.length; i < l; i += 1) {
1667
1425
  data.body[i] = decodeURIComponent(values[i]);
1668
1426
  }
@@ -1670,159 +1428,131 @@ var Enmasse = (() => {
1670
1428
  }
1671
1429
  }
1672
1430
  }
1673
-
1674
1431
  return data;
1675
1432
  };
1676
-
1677
1433
  var stringifySSCP = message => [message.channel, message.klass, Math.floor(new Date() / 1000), message.body.join('|')].join('/');
1678
-
1679
1434
  var runner = message => {
1680
1435
  var success = () => {
1681
1436
  queue.success();
1682
1437
  };
1683
-
1684
1438
  var failure = () => {
1685
1439
  queue.failure();
1686
1440
  };
1687
-
1688
1441
  ConnectionManager.send(stringifySSCP(message), success, failure);
1689
1442
  };
1690
-
1691
1443
  var handleTransportManagerReady = () => {
1692
1444
  log(TYPE_PROTOCOL, 'Enmasse::handleTransportManagerReady');
1693
1445
  self.trigger(self.ON_READY);
1694
1446
  };
1695
-
1696
1447
  var handleConnectionManagerState = function handleConnectionManagerState() {
1697
1448
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1698
1449
  args[_key] = arguments[_key];
1699
1450
  }
1700
-
1701
1451
  log(TYPE_PROTOCOL, 'Enmasse::handleConnectionManagerState', args);
1702
-
1703
1452
  switch (args[0]) {
1704
1453
  // case ConnectionManager.STATE_DISCONNECTING:
1705
1454
  // break;
1706
1455
  case ConnectionManager.STATE_DISCONNECTED:
1707
1456
  setStateToDisconnected();
1708
1457
  break;
1709
-
1710
1458
  case ConnectionManager.STATE_CONNECTING:
1711
1459
  setStateToConnecting(args[1], args[2]);
1712
1460
  break;
1713
-
1714
1461
  case ConnectionManager.STATE_CONNECTED:
1715
1462
  break;
1716
1463
  }
1717
1464
  };
1718
-
1719
1465
  var handleConnectionManagerMessage = /*#__PURE__*/function () {
1720
- var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(message) {
1721
- var data, time, clientInfo, _data$body, subscriptions;
1722
-
1723
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
1724
- while (1) {
1725
- switch (_context4.prev = _context4.next) {
1726
- case 0:
1727
- log(TYPE_PROTOCOL, 'Enmasse::handleConnectionManagerMessage', message);
1728
- data = parseSSCP(message);
1729
- _context4.t0 = data.klass;
1730
- _context4.next = _context4.t0 === SSCP_KLASS_AUTH ? 5 : _context4.t0 === SSCP_KLASS_AUTHOK ? 19 : _context4.t0 === SSCP_KLASS_LOGIN_OK ? 25 : _context4.t0 === SSCP_KLASS_LOGIN_FAIL ? 27 : _context4.t0 === SSCP_KLASS_PING ? 29 : _context4.t0 === SSCP_KLASS_EOC ? 30 : 32;
1466
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(message) {
1467
+ var data, time, clientInfo, _data$body, subscriptions, _t5;
1468
+ return _regeneratorRuntime.wrap(function (_context4) {
1469
+ while (1) switch (_context4.prev = _context4.next) {
1470
+ case 0:
1471
+ log(TYPE_PROTOCOL, 'Enmasse::handleConnectionManagerMessage', message);
1472
+ data = parseSSCP(message);
1473
+ _t5 = data.klass;
1474
+ _context4.next = _t5 === SSCP_KLASS_AUTH ? 1 : _t5 === SSCP_KLASS_AUTHOK ? 3 : _t5 === SSCP_KLASS_LOGIN_OK ? 4 : _t5 === SSCP_KLASS_LOGIN_FAIL ? 5 : _t5 === SSCP_KLASS_PING ? 6 : _t5 === SSCP_KLASS_EOC ? 7 : 8;
1475
+ break;
1476
+ case 1:
1477
+ time = data.sent_at;
1478
+ clientInfo = ["enmassejs-".concat(self.VERSION), navigator.userAgent].concat(info); // store system channel
1479
+ sysChannel = data.channel;
1480
+
1481
+ // url encode each client info item
1482
+ clientInfo.forEach((item, idx) => {
1483
+ clientInfo[idx] = encodeURIComponent(item);
1484
+ });
1485
+ if (!(sessionId === null)) {
1486
+ _context4.next = 2;
1731
1487
  break;
1732
-
1733
- case 5:
1734
- time = data.sent_at;
1735
- clientInfo = ["enmassejs-".concat(self.VERSION), navigator.userAgent].concat(info); // store system channel
1736
-
1737
- sysChannel = data.channel; // url encode each client info item
1738
-
1739
- clientInfo.forEach((item, idx) => {
1740
- clientInfo[idx] = encodeURIComponent(item);
1741
- });
1742
-
1743
- if (!(sessionId === null)) {
1744
- _context4.next = 14;
1745
- break;
1746
- }
1747
-
1748
- _data$body = _slicedToArray(data.body, 1);
1749
- sessionId = _data$body[0];
1750
- _context4.next = 14;
1751
- return storeSession(sessionId);
1752
-
1753
- case 14:
1754
- setTime(time);
1755
- queue.stash();
1488
+ }
1489
+ _data$body = _slicedToArray(data.body, 1);
1490
+ sessionId = _data$body[0];
1491
+ _context4.next = 2;
1492
+ return storeSession(sessionId);
1493
+ case 2:
1494
+ setTime(time);
1495
+ queue.stash();
1496
+ queue.push({
1497
+ channel: sysChannel,
1498
+ klass: SSCP_KLASS_AUTHR,
1499
+ body: [sessionId, self.PROTOCOL_VERSION, clientInfo.join(',')]
1500
+ }, true);
1501
+ queue.run();
1502
+ return _context4.abrupt("continue", 9);
1503
+ case 3:
1504
+ // We have to resubscribe to the previously
1505
+ // subscribed channels after the reconnect.
1506
+ subscriptions = queue.getSubscriptions();
1507
+ subscriptions.forEach(channel => {
1756
1508
  queue.push({
1757
- channel: sysChannel,
1758
- klass: SSCP_KLASS_AUTHR,
1759
- body: [sessionId, self.PROTOCOL_VERSION, clientInfo.join(',')]
1509
+ channel,
1510
+ klass: SSCP_KLASS_SUB,
1511
+ body: []
1760
1512
  }, true);
1761
- queue.run();
1762
- return _context4.abrupt("break", 34);
1763
-
1764
- case 19:
1765
- // We have to resubscribe to the previously
1766
- // subscribed channels after the reconnect.
1767
- subscriptions = queue.getSubscriptions();
1768
- subscriptions.forEach(channel => {
1769
- queue.push({
1770
- channel,
1771
- klass: SSCP_KLASS_SUB,
1772
- body: []
1773
- }, true);
1774
- });
1775
- queue.unstash();
1776
- queue.run();
1777
- setStateToConnected();
1778
- return _context4.abrupt("break", 34);
1779
-
1780
- case 25:
1781
- resolveLogin();
1782
- return _context4.abrupt("break", 34);
1783
-
1784
- case 27:
1785
- rejectLogin();
1786
- return _context4.abrupt("break", 34);
1787
-
1788
- case 29:
1789
- return _context4.abrupt("break", 34);
1790
-
1791
- case 30:
1792
- self.trigger(self.ON_EOC, data.channel);
1793
- return _context4.abrupt("break", 34);
1794
-
1795
- case 32:
1796
- self.trigger(self.ON_MESSAGE, data);
1797
- return _context4.abrupt("break", 34);
1798
-
1799
- case 34:
1800
- case "end":
1801
- return _context4.stop();
1802
- }
1513
+ });
1514
+ queue.unstash();
1515
+ queue.run();
1516
+ setStateToConnected();
1517
+ return _context4.abrupt("continue", 9);
1518
+ case 4:
1519
+ resolveLogin();
1520
+ return _context4.abrupt("continue", 9);
1521
+ case 5:
1522
+ rejectLogin();
1523
+ return _context4.abrupt("continue", 9);
1524
+ case 6:
1525
+ return _context4.abrupt("continue", 9);
1526
+ case 7:
1527
+ self.trigger(self.ON_EOC, data.channel);
1528
+ return _context4.abrupt("continue", 9);
1529
+ case 8:
1530
+ self.trigger(self.ON_MESSAGE, data);
1531
+ return _context4.abrupt("continue", 9);
1532
+ case 9:
1533
+ case "end":
1534
+ return _context4.stop();
1803
1535
  }
1804
1536
  }, _callee4);
1805
1537
  }));
1806
-
1807
1538
  return function handleConnectionManagerMessage(_x2) {
1808
1539
  return _ref4.apply(this, arguments);
1809
1540
  };
1810
1541
  }();
1811
-
1812
1542
  var handleDemographicsCounter = (channel, data) => {
1813
1543
  self.send(channel, 'avgcounter', data);
1814
1544
  };
1545
+
1815
1546
  /**
1816
1547
  * @internal
1817
1548
  */
1818
-
1819
-
1820
1549
  self.PARAM_SESSION_ID = PARAM_SESSION_ID;
1550
+
1821
1551
  /**
1822
1552
  * @internal
1823
1553
  */
1824
-
1825
1554
  self.resetSession = resetSession;
1555
+
1826
1556
  /*
1827
1557
  * Public methods
1828
1558
  */
@@ -1831,12 +1561,10 @@ var Enmasse = (() => {
1831
1561
  log(TYPE_PROTOCOL, 'Enmasse::connect');
1832
1562
  ConnectionManager.connect();
1833
1563
  };
1834
-
1835
1564
  self.disconnect = () => {
1836
1565
  log(TYPE_PROTOCOL, 'Enmasse:disconnect');
1837
1566
  ConnectionManager.disconnect();
1838
1567
  };
1839
-
1840
1568
  self.send = (channel, klass, body) => {
1841
1569
  log(TYPE_PROTOCOL, 'Enmasse::send', channel, klass, body);
1842
1570
  body = body || [];
@@ -1845,37 +1573,28 @@ var Enmasse = (() => {
1845
1573
  klass,
1846
1574
  body
1847
1575
  });
1848
-
1849
1576
  if (state === self.STATE_CONNECTED) {
1850
1577
  queue.run();
1851
1578
  }
1852
1579
  };
1853
-
1854
1580
  self.getSessionId = () => sessionId;
1855
-
1856
1581
  self.getState = () => state;
1857
-
1858
1582
  self.subscribe = channel => {
1859
1583
  self.send(channel, SSCP_KLASS_SUB);
1860
1584
  };
1861
-
1862
1585
  self.unsubscribe = channel => {
1863
1586
  self.send(channel, SSCP_KLASS_UNSUB);
1864
1587
  };
1865
-
1866
1588
  self.login = function (userId, timestamp, signature) {
1867
1589
  var success = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : () => {};
1868
1590
  var failure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : () => {};
1869
-
1870
1591
  if (sysChannel === null) {
1871
1592
  return;
1872
1593
  }
1873
-
1874
1594
  if (loginContext.inProgress) {
1875
1595
  console.warn('Login is already in progress');
1876
1596
  return;
1877
1597
  }
1878
-
1879
1598
  loginContext = {
1880
1599
  inProgress: true,
1881
1600
  success,
@@ -1883,133 +1602,110 @@ var Enmasse = (() => {
1883
1602
  };
1884
1603
  self.send(sysChannel, SSCP_KLASS_LOGIN, [userId, timestamp, signature]);
1885
1604
  };
1886
-
1887
1605
  self.signIn = function () {
1888
- console.warn( // eslint-disable-next-line
1606
+ console.warn(// eslint-disable-next-line
1889
1607
  "signIn() method is deprecated and will be removed in future versions. Please use login() method instead");
1890
-
1891
1608
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
1892
1609
  args[_key2] = arguments[_key2];
1893
1610
  }
1894
-
1895
1611
  self.login(args);
1896
1612
  };
1897
-
1898
1613
  self.init = /*#__PURE__*/function () {
1899
- var _init = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
1614
+ var _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
1900
1615
  var config,
1901
- response,
1902
- status,
1903
- text,
1904
- data,
1905
- isSuccess,
1906
- _args5 = arguments;
1907
- return _regeneratorRuntime.wrap(function _callee5$(_context5) {
1908
- while (1) {
1909
- switch (_context5.prev = _context5.next) {
1910
- case 0:
1911
- config = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : () => {};
1912
- // config file is passed either as GET parameter or via constructor
1913
- configFile = !ENMASSE_CONFIG ? config.config || null : ENMASSE_CONFIG;
1914
- info = config.info || [];
1915
- _context5.next = 5;
1916
- return restoreSession();
1917
-
1918
- case 5:
1919
- sessionId = _context5.sent;
1920
-
1921
- if (typeof config.forceSecure === 'boolean') {
1922
- forceSecure = config.forceSecure;
1923
- }
1924
-
1925
- if (!(configFile === null)) {
1926
- _context5.next = 9;
1927
- break;
1928
- }
1929
-
1930
- throw 'Enmasse config file is not set';
1931
-
1932
- case 9:
1933
- if (!(sessionId !== null && !validateSession(sessionId))) {
1934
- _context5.next = 12;
1935
- break;
1936
- }
1937
-
1938
- _context5.next = 12;
1939
- return resetSession();
1940
-
1941
- case 12:
1942
- queue = new Queue({
1943
- runner
1944
- });
1945
- TransportManager$1.bind(TransportManager$1.ON_READY, handleTransportManagerReady);
1946
- ConnectionManager.bind(ConnectionManager.ON_STATE, handleConnectionManagerState);
1947
- ConnectionManager.bind(ConnectionManager.ON_MESSAGE, handleConnectionManagerMessage);
1948
- Demographics$1.bind(Demographics$1.ON_ADD_COUNTER, handleDemographicsCounter);
1949
- _context5.prev = 17;
1950
- _context5.next = 20;
1951
- return fetch(configFile);
1952
-
1953
- case 20:
1954
- response = _context5.sent;
1955
- status = response.status, text = response.statusText;
1956
- _context5.prev = 22;
1957
- _context5.next = 25;
1958
- return response.json();
1959
-
1960
- case 25:
1961
- data = _context5.sent;
1962
- _context5.next = 32;
1616
+ response,
1617
+ status,
1618
+ text,
1619
+ data,
1620
+ isSuccess,
1621
+ _args5 = arguments,
1622
+ _t7;
1623
+ return _regeneratorRuntime.wrap(function (_context5) {
1624
+ while (1) switch (_context5.prev = _context5.next) {
1625
+ case 0:
1626
+ config = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : () => {};
1627
+ // config file is passed either as GET parameter or via constructor
1628
+ configFile = !ENMASSE_CONFIG ? config.config || null : ENMASSE_CONFIG;
1629
+ info = config.info || [];
1630
+ _context5.next = 1;
1631
+ return restoreSession();
1632
+ case 1:
1633
+ sessionId = _context5.sent;
1634
+ if (typeof config.forceSecure === 'boolean') {
1635
+ forceSecure = config.forceSecure;
1636
+ }
1637
+ if (!(configFile === null)) {
1638
+ _context5.next = 2;
1963
1639
  break;
1964
-
1965
- case 28:
1966
- _context5.prev = 28;
1967
- _context5.t0 = _context5["catch"](22);
1968
- self.trigger(self.ON_ERROR, "Invalid JSON from config ".concat(configFile));
1969
- return _context5.abrupt("return");
1970
-
1971
- case 32:
1972
- isSuccess = status >= 200 && status <= 300 || // If you conclude with an XMLHttpRequest receiving status=0 and
1973
- // statusText=null, this means the request was not allowed to be
1974
- // performed.
1975
- // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#xmlhttprequests_being_stopped
1976
- status === 0 && !!text || status === '';
1977
- data.forceSecure = forceSecure;
1978
-
1979
- if (data.background_timeout === undefined) {
1980
- data.background_timeout = 0;
1981
- }
1982
-
1983
- if (isSuccess) {
1984
- ConnectionManager.init(data);
1985
- TransportManager$1.init(data);
1986
- } else {
1987
- self.trigger(self.ON_ERROR, "Failed to load config ".concat(configFile));
1988
- }
1989
-
1990
- _context5.next = 41;
1640
+ }
1641
+ throw 'Enmasse config file is not set';
1642
+ case 2:
1643
+ if (!(sessionId !== null && !validateSession(sessionId))) {
1644
+ _context5.next = 3;
1991
1645
  break;
1992
-
1993
- case 38:
1994
- _context5.prev = 38;
1995
- _context5.t1 = _context5["catch"](17);
1996
- self.trigger(self.ON_ERROR, "Error loading config: ".concat(_context5.t1.message));
1997
-
1998
- case 41:
1999
- case "end":
2000
- return _context5.stop();
2001
- }
1646
+ }
1647
+ _context5.next = 3;
1648
+ return resetSession();
1649
+ case 3:
1650
+ queue = new Queue({
1651
+ runner
1652
+ });
1653
+ TransportManager$1.bind(TransportManager$1.ON_READY, handleTransportManagerReady);
1654
+ ConnectionManager.bind(ConnectionManager.ON_STATE, handleConnectionManagerState);
1655
+ ConnectionManager.bind(ConnectionManager.ON_MESSAGE, handleConnectionManagerMessage);
1656
+ Demographics$1.bind(Demographics$1.ON_ADD_COUNTER, handleDemographicsCounter);
1657
+ _context5.prev = 4;
1658
+ _context5.next = 5;
1659
+ return fetch(configFile);
1660
+ case 5:
1661
+ response = _context5.sent;
1662
+ status = response.status, text = response.statusText;
1663
+ _context5.prev = 6;
1664
+ _context5.next = 7;
1665
+ return response.json();
1666
+ case 7:
1667
+ data = _context5.sent;
1668
+ _context5.next = 9;
1669
+ break;
1670
+ case 8:
1671
+ _context5.prev = 8;
1672
+ _context5["catch"](6);
1673
+ self.trigger(self.ON_ERROR, "Invalid JSON from config ".concat(configFile));
1674
+ return _context5.abrupt("return");
1675
+ case 9:
1676
+ isSuccess = status >= 200 && status <= 300 ||
1677
+ // If you conclude with an XMLHttpRequest receiving status=0 and
1678
+ // statusText=null, this means the request was not allowed to be
1679
+ // performed.
1680
+ // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#xmlhttprequests_being_stopped
1681
+ status === 0 && !!text || status === '';
1682
+ data.forceSecure = forceSecure;
1683
+ if (data.background_timeout === undefined) {
1684
+ data.background_timeout = 0;
1685
+ }
1686
+ if (isSuccess) {
1687
+ ConnectionManager.init(data);
1688
+ TransportManager$1.init(data);
1689
+ } else {
1690
+ self.trigger(self.ON_ERROR, "Failed to load config ".concat(configFile));
1691
+ }
1692
+ _context5.next = 11;
1693
+ break;
1694
+ case 10:
1695
+ _context5.prev = 10;
1696
+ _t7 = _context5["catch"](4);
1697
+ self.trigger(self.ON_ERROR, "Error loading config: ".concat(_t7.message));
1698
+ case 11:
1699
+ case "end":
1700
+ return _context5.stop();
2002
1701
  }
2003
- }, _callee5, null, [[17, 38], [22, 28]]);
1702
+ }, _callee5, null, [[4, 10], [6, 8]]);
2004
1703
  }));
2005
-
2006
1704
  function init() {
2007
1705
  return _init.apply(this, arguments);
2008
1706
  }
2009
-
2010
1707
  return init;
2011
1708
  }();
2012
-
2013
1709
  return self;
2014
1710
  })();
2015
1711