@monterosa/sdk-enmasse-kit 0.18.8 → 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.
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm2017.js +360 -664
- package/dist/index.esm2017.js.map +1 -1
- package/dist/index.esm5.js +411 -741
- package/dist/index.esm5.js.map +1 -1
- package/package.json +5 -5
package/dist/index.esm2017.js
CHANGED
|
@@ -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
|
-
}
|
|
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
|
-
|
|
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.
|
|
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
|
-
};
|
|
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
|
-
}
|
|
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
|
-
|
|
90
|
+
// the rest of arguments are arbitrary data
|
|
91
|
+
var rest = args.slice(1);
|
|
106
92
|
|
|
107
|
-
|
|
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 = [];
|
|
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;
|
|
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
|
-
|
|
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]));
|
|
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;
|
|
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;
|
|
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
|
-
|
|
232
|
-
|
|
204
|
+
// Returns current local timestamp
|
|
205
|
+
var local = () => new Date() / 1000;
|
|
233
206
|
|
|
234
|
-
|
|
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;
|
|
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
|
-
|
|
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
|
-
}
|
|
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
|
-
};
|
|
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
|
-
|
|
382
|
-
|
|
383
|
-
|
|
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;
|
|
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;
|
|
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();
|
|
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');
|
|
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;
|
|
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;
|
|
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
|
-
}
|
|
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');
|
|
731
|
+
log(TYPE_MANAGER, 'TransportManager::instantiate');
|
|
868
732
|
|
|
733
|
+
// instantiate all transports
|
|
869
734
|
this.allowed.forEach(method => {
|
|
870
|
-
var config = this._getMethodConfig(method);
|
|
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);
|
|
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 = [];
|
|
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
|
-
}
|
|
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;
|
|
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();
|
|
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()');
|
|
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;
|
|
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
|
-
|
|
1218
|
+
// list of arbitray data passed into handshake
|
|
1424
1219
|
// message along with the protocol version
|
|
1220
|
+
var info = [];
|
|
1425
1221
|
|
|
1426
|
-
|
|
1222
|
+
// session id is generated by server and passed
|
|
1427
1223
|
// on client on handshake
|
|
1224
|
+
var sessionId = null;
|
|
1428
1225
|
|
|
1429
|
-
|
|
1226
|
+
// out messages queue
|
|
1227
|
+
var queue = null;
|
|
1430
1228
|
|
|
1431
|
-
|
|
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
|
-
|
|
1232
|
+
// system channel
|
|
1233
|
+
var sysChannel = null;
|
|
1436
1234
|
|
|
1437
|
-
|
|
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(
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
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,
|
|
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(
|
|
1482
|
-
var restoredId;
|
|
1483
|
-
return _regeneratorRuntime.wrap(function
|
|
1484
|
-
while (1) {
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
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
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
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
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
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,
|
|
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(
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
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,
|
|
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
|
-
|
|
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(
|
|
1721
|
-
var data, time, clientInfo, _data$body, subscriptions;
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
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
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
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
|
|
1758
|
-
klass:
|
|
1759
|
-
body: [
|
|
1509
|
+
channel,
|
|
1510
|
+
klass: SSCP_KLASS_SUB,
|
|
1511
|
+
body: []
|
|
1760
1512
|
}, true);
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
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(
|
|
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(
|
|
1614
|
+
var _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
1900
1615
|
var config,
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
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
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
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
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
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, [[
|
|
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
|
|