@webex/calling 3.12.0-mobius-socket.15 → 3.12.0-mobius-socket.16
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/mobius-socket/config.js +8 -8
- package/dist/mobius-socket/config.js.map +1 -1
- package/dist/mobius-socket/errors.js +2 -3
- package/dist/mobius-socket/errors.js.map +1 -1
- package/dist/mobius-socket/index.js +16 -10
- package/dist/mobius-socket/index.js.map +1 -1
- package/dist/mobius-socket/mobius-socket-events.test.js +5 -3
- package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -1
- package/dist/mobius-socket/mobius-socket.js +3 -2
- package/dist/mobius-socket/mobius-socket.js.map +1 -1
- package/dist/mobius-socket/mobius-socket.test.js +6 -4
- package/dist/mobius-socket/mobius-socket.test.js.map +1 -1
- package/dist/mobius-socket/socket/constants.js.map +1 -1
- package/dist/mobius-socket/socket/index.js.map +1 -1
- package/dist/mobius-socket/socket/socket-base.js +57 -32
- package/dist/mobius-socket/socket/socket-base.js.map +1 -1
- package/dist/mobius-socket/socket/socket.js.map +1 -1
- package/dist/mobius-socket/socket/socket.shim.js +3 -13
- package/dist/mobius-socket/socket/socket.shim.js.map +1 -1
- package/dist/mobius-socket/socket/types.js +7 -0
- package/dist/mobius-socket/socket/types.js.map +1 -0
- package/dist/mobius-socket/socket.test.js +36 -36
- package/dist/mobius-socket/socket.test.js.map +1 -1
- package/dist/mobius-socket/test/mocha-helpers.js.map +1 -1
- package/dist/mobius-socket/test/promise-tick.js +2 -3
- package/dist/mobius-socket/test/promise-tick.js.map +1 -1
- package/dist/module/mobius-socket/index.js +4 -1
- package/dist/module/mobius-socket/mobius-socket.js +3 -1
- package/dist/module/mobius-socket/socket/socket-base.js +60 -29
- package/dist/module/mobius-socket/socket/socket.shim.js +3 -15
- package/dist/module/mobius-socket/socket/types.js +1 -0
- package/dist/types/mobius-socket/config.d.ts +15 -12
- package/dist/types/mobius-socket/config.d.ts.map +1 -1
- package/dist/types/mobius-socket/errors.d.ts +15 -6
- package/dist/types/mobius-socket/errors.d.ts.map +1 -1
- package/dist/types/mobius-socket/index.d.ts +14 -7
- package/dist/types/mobius-socket/index.d.ts.map +1 -1
- package/dist/types/mobius-socket/mobius-socket.d.ts +27 -43
- package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/constants.d.ts +2 -2
- package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/index.d.ts +4 -1
- package/dist/types/mobius-socket/socket/index.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/socket-base.d.ts +34 -28
- package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/socket.d.ts +4 -1
- package/dist/types/mobius-socket/socket/socket.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/socket.shim.d.ts +4 -1
- package/dist/types/mobius-socket/socket/socket.shim.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/types.d.ts +69 -0
- package/dist/types/mobius-socket/socket/types.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/mobius-socket/socket/socket.shim.ts +22 -0
- package/src/mobius-socket/socket/{socket.js → socket.ts} +2 -1
- package/src/mobius-socket/socket/socket.shim.js +0 -31
|
@@ -95,41 +95,41 @@ describe('plugin-mobius-socket', function () {
|
|
|
95
95
|
});
|
|
96
96
|
});
|
|
97
97
|
describe('#open()', function () {
|
|
98
|
-
var
|
|
98
|
+
var freshSocket;
|
|
99
99
|
beforeEach(function () {
|
|
100
|
-
|
|
100
|
+
freshSocket = new _index.Socket();
|
|
101
101
|
});
|
|
102
102
|
afterEach(function () {
|
|
103
|
-
return
|
|
104
|
-
return
|
|
103
|
+
return freshSocket.close().catch(function () {
|
|
104
|
+
return undefined;
|
|
105
105
|
});
|
|
106
106
|
});
|
|
107
107
|
it('requires a url', function () {
|
|
108
|
-
return _testHelperChai.assert.isRejected(
|
|
108
|
+
return _testHelperChai.assert.isRejected(freshSocket.open(), /`url` is required/);
|
|
109
109
|
});
|
|
110
110
|
it('requires a forceCloseDelay option', function () {
|
|
111
|
-
return _testHelperChai.assert.isRejected(
|
|
111
|
+
return _testHelperChai.assert.isRejected(freshSocket.open('ws://example.com'), /missing required property forceCloseDelay/);
|
|
112
112
|
});
|
|
113
113
|
it('requires a token option', function () {
|
|
114
|
-
return _testHelperChai.assert.isRejected(
|
|
114
|
+
return _testHelperChai.assert.isRejected(freshSocket.open('ws://example.com', {
|
|
115
115
|
forceCloseDelay: mockoptions.forceCloseDelay
|
|
116
116
|
}), /missing required property token/);
|
|
117
117
|
});
|
|
118
118
|
it('requires a trackingId option', function () {
|
|
119
|
-
return _testHelperChai.assert.isRejected(
|
|
119
|
+
return _testHelperChai.assert.isRejected(freshSocket.open('ws://example.com', {
|
|
120
120
|
forceCloseDelay: mockoptions.forceCloseDelay,
|
|
121
121
|
token: 'mocktoken'
|
|
122
122
|
}), /missing required property trackingId/);
|
|
123
123
|
});
|
|
124
124
|
it('requires a logger option', function () {
|
|
125
|
-
return _testHelperChai.assert.isRejected(
|
|
125
|
+
return _testHelperChai.assert.isRejected(freshSocket.open('ws://example.com', {
|
|
126
126
|
forceCloseDelay: mockoptions.forceCloseDelay,
|
|
127
127
|
token: 'mocktoken',
|
|
128
128
|
trackingId: 'mocktrackingid'
|
|
129
129
|
}), /missing required property logger/);
|
|
130
130
|
});
|
|
131
131
|
it('accepts a logLevelToken option', function () {
|
|
132
|
-
var
|
|
132
|
+
var openPromise = freshSocket.open('ws://example.com', {
|
|
133
133
|
forceCloseDelay: mockoptions.forceCloseDelay,
|
|
134
134
|
wssResponseTimeout: mockoptions.wssResponseTimeout,
|
|
135
135
|
logger: console,
|
|
@@ -140,8 +140,8 @@ describe('plugin-mobius-socket', function () {
|
|
|
140
140
|
mockWebSocket.readyState = 1;
|
|
141
141
|
mockWebSocket.emit('open');
|
|
142
142
|
emitAuthResponse();
|
|
143
|
-
return
|
|
144
|
-
_testHelperChai.assert.equal(
|
|
143
|
+
return openPromise.then(function () {
|
|
144
|
+
_testHelperChai.assert.equal(freshSocket.logLevelToken, 'mocklogleveltoken');
|
|
145
145
|
});
|
|
146
146
|
});
|
|
147
147
|
});
|
|
@@ -400,23 +400,23 @@ describe('plugin-mobius-socket', function () {
|
|
|
400
400
|
return _promise.default.all([p1, p2]);
|
|
401
401
|
});
|
|
402
402
|
it('signals closure if no close frame is received within the specified window', function () {
|
|
403
|
-
var
|
|
404
|
-
var
|
|
403
|
+
var transientSocket = new _index.Socket();
|
|
404
|
+
var openPromise = transientSocket.open('ws://example.com', mockoptions);
|
|
405
405
|
mockWebSocket.readyState = 1;
|
|
406
406
|
mockWebSocket.emit('open');
|
|
407
407
|
emitAuthResponse();
|
|
408
|
-
return
|
|
408
|
+
return openPromise.then(function () {
|
|
409
409
|
var spy = _sinon.default.spy();
|
|
410
|
-
|
|
410
|
+
transientSocket.on('close', spy);
|
|
411
411
|
mockWebSocket.close = function () {
|
|
412
412
|
return new _promise.default(function () {
|
|
413
413
|
/* eslint no-inline-comments: [0] */
|
|
414
414
|
});
|
|
415
415
|
};
|
|
416
416
|
mockWebSocket.removeAllListeners('close');
|
|
417
|
-
var
|
|
417
|
+
var closePromise = transientSocket.close();
|
|
418
418
|
jest.advanceTimersByTime(mockoptions.forceCloseDelay);
|
|
419
|
-
return
|
|
419
|
+
return closePromise.then(function () {
|
|
420
420
|
_testHelperChai.assert.called(spy);
|
|
421
421
|
_testHelperChai.assert.calledWith(spy, {
|
|
422
422
|
code: 1000,
|
|
@@ -426,26 +426,26 @@ describe('plugin-mobius-socket', function () {
|
|
|
426
426
|
});
|
|
427
427
|
});
|
|
428
428
|
it('signals closure if no close frame is received within the specified window, but uses the initial options as 3050 if specified by options call', function () {
|
|
429
|
-
var
|
|
430
|
-
var
|
|
429
|
+
var transientSocket = new _index.Socket();
|
|
430
|
+
var openPromise = transientSocket.open('ws://example.com', mockoptions);
|
|
431
431
|
mockWebSocket.readyState = 1;
|
|
432
432
|
mockWebSocket.emit('open');
|
|
433
433
|
emitAuthResponse();
|
|
434
|
-
return
|
|
434
|
+
return openPromise.then(function () {
|
|
435
435
|
var spy = _sinon.default.spy();
|
|
436
|
-
|
|
436
|
+
transientSocket.on('close', spy);
|
|
437
437
|
mockWebSocket.close = function () {
|
|
438
438
|
return new _promise.default(function () {
|
|
439
439
|
/* eslint no-inline-comments: [0] */
|
|
440
440
|
});
|
|
441
441
|
};
|
|
442
442
|
mockWebSocket.removeAllListeners('close');
|
|
443
|
-
var
|
|
443
|
+
var closePromise = transientSocket.close({
|
|
444
444
|
code: 3050,
|
|
445
445
|
reason: 'done (permanent)'
|
|
446
446
|
});
|
|
447
447
|
jest.advanceTimersByTime(mockoptions.forceCloseDelay);
|
|
448
|
-
return
|
|
448
|
+
return closePromise.then(function () {
|
|
449
449
|
_testHelperChai.assert.called(spy);
|
|
450
450
|
_testHelperChai.assert.calledWith(spy, {
|
|
451
451
|
code: 3050,
|
|
@@ -455,26 +455,26 @@ describe('plugin-mobius-socket', function () {
|
|
|
455
455
|
});
|
|
456
456
|
});
|
|
457
457
|
it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', function () {
|
|
458
|
-
var
|
|
459
|
-
var
|
|
458
|
+
var transientSocket = new _index.Socket();
|
|
459
|
+
var openPromise = transientSocket.open('ws://example.com', mockoptions);
|
|
460
460
|
mockWebSocket.readyState = 1;
|
|
461
461
|
mockWebSocket.emit('open');
|
|
462
462
|
emitAuthResponse();
|
|
463
|
-
return
|
|
463
|
+
return openPromise.then(function () {
|
|
464
464
|
var spy = _sinon.default.spy();
|
|
465
|
-
|
|
465
|
+
transientSocket.on('close', spy);
|
|
466
466
|
mockWebSocket.close = function () {
|
|
467
467
|
return new _promise.default(function () {
|
|
468
468
|
/* eslint no-inline-comments: [0] */
|
|
469
469
|
});
|
|
470
470
|
};
|
|
471
471
|
mockWebSocket.removeAllListeners('close');
|
|
472
|
-
var
|
|
472
|
+
var closePromise = transientSocket.close({
|
|
473
473
|
code: 1000,
|
|
474
474
|
reason: 'test'
|
|
475
475
|
});
|
|
476
476
|
jest.advanceTimersByTime(mockoptions.forceCloseDelay);
|
|
477
|
-
return
|
|
477
|
+
return closePromise.then(function () {
|
|
478
478
|
_testHelperChai.assert.called(spy);
|
|
479
479
|
_testHelperChai.assert.calledWith(spy, {
|
|
480
480
|
code: 1000,
|
|
@@ -484,25 +484,25 @@ describe('plugin-mobius-socket', function () {
|
|
|
484
484
|
});
|
|
485
485
|
});
|
|
486
486
|
it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', function () {
|
|
487
|
-
var
|
|
488
|
-
var
|
|
487
|
+
var transientSocket = new _index.Socket();
|
|
488
|
+
var openPromise = transientSocket.open('ws://example.com', mockoptions);
|
|
489
489
|
mockWebSocket.readyState = 1;
|
|
490
490
|
mockWebSocket.emit('open');
|
|
491
491
|
emitAuthResponse();
|
|
492
|
-
return
|
|
492
|
+
return openPromise.then(function () {
|
|
493
493
|
var spy = _sinon.default.spy();
|
|
494
|
-
|
|
494
|
+
transientSocket.on('close', spy);
|
|
495
495
|
mockWebSocket.close = function () {
|
|
496
496
|
return new _promise.default(function () {
|
|
497
497
|
/* eslint no-inline-comments: [0] */
|
|
498
498
|
});
|
|
499
499
|
};
|
|
500
500
|
mockWebSocket.removeAllListeners('close');
|
|
501
|
-
var
|
|
501
|
+
var closePromise = transientSocket.close({
|
|
502
502
|
code: 1000
|
|
503
503
|
});
|
|
504
504
|
jest.advanceTimersByTime(mockoptions.forceCloseDelay);
|
|
505
|
-
return
|
|
505
|
+
return closePromise.then(function () {
|
|
506
506
|
_testHelperChai.assert.called(spy);
|
|
507
507
|
_testHelperChai.assert.calledWith(spy, {
|
|
508
508
|
code: 1000,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_crypto","require","_testHelperChai","_testHelperMockWebSocket","_interopRequireDefault","_sinon","_index","_constants","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty3","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty2","crypto","randomUUID","_defineProperty2","value","configurable","describe","mockWebSocket","socket","usingFakeTimers","mockoptions","logger","console","token","trackingId","config","mobiusSocket","emitAuthResponse","_ref","undefined","_ref$statusCode","statusCode","_ref$statusMessage","statusMessage","authRequest","JSON","parse","send","lastCall","args","emit","data","_stringify","type","subtype","MESSAGE_TYPES","AUTH","beforeEach","jest","useFakeTimers","doNotFake","sinon","stub","Socket","callsFake","_len","Array","_key","_construct2","MockWebSocket","promise","open","process","nextTick","afterEach","useRealTimers","getWebSocketConstructor","restore","_promise","resolve","close","then","catch","log","it","assert","isRejected","forceCloseDelay","wssResponseTimeout","logLevelToken","readyState","equal","notEqual","binaryType","bufferedAmount","extensions","protocol","url","s","firstCallArgs","firstCall","code","reason","instanceOf","BadRequest","match","message","NotAuthorized","Forbidden","ConnectionError","property","error","called","all","calledWith","p1","p2","spy","on","removeAllListeners","advanceTimersByTime","description","closeOptions","expectedCode","expectedReason","_ref2","_asyncToGenerator2","_regenerator","mark","_callee","socketInstance","previousStub","closeSpy","result","wrap","_context","prev","next","_len2","_key2","sent","calledOnce","stop","json","_forEach2","Replaced","concat","id","eventId","eventType","callId","deviceId","_acknowledge","notCalled","EVENT_ACK"],"sources":["socket.test.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {randomUUID} from 'crypto';\nimport {forEach} from 'lodash';\nimport {assert} from '@webex/test-helper-chai';\nimport MockWebSocket from '@webex/test-helper-mock-web-socket';\nimport sinon from 'sinon';\nimport {\n BadRequest,\n NotAuthorized,\n Forbidden,\n // NotFound,\n config,\n ConnectionError,\n Socket,\n} from './index';\nimport {MESSAGE_TYPES} from './socket/constants';\n\nif (!crypto.randomUUID) {\n Object.defineProperty(crypto, 'randomUUID', {\n value: randomUUID,\n configurable: true,\n });\n}\n\ndescribe('plugin-mobius-socket', () => {\n describe('Socket', () => {\n let mockWebSocket;\n let socket;\n let usingFakeTimers;\n\n const mockoptions = {\n logger: console,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n ...config.mobiusSocket,\n };\n\n const emitAuthResponse = ({statusCode = 200, statusMessage = 'OK'} = {}) => {\n const authRequest = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: MESSAGE_TYPES.AUTH,\n trackingId: authRequest.trackingId,\n statusCode,\n statusMessage,\n }),\n });\n };\n\n beforeEach(() => {\n jest.useFakeTimers({doNotFake: ['nextTick']});\n usingFakeTimers = true;\n });\n\n beforeEach(() => {\n sinon.stub(Socket, 'getWebSocketConstructor').callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n\n return mockWebSocket;\n }\n );\n\n socket = new Socket();\n const promise = socket.open('ws://example.com', mockoptions);\n\n mockWebSocket.open();\n // Simulate Mobius auth response (MockWebSocket.open auto-sends mercury.buffer_state which Mobius ignores)\n process.nextTick(() => {\n emitAuthResponse();\n });\n\n return promise;\n });\n\n afterEach(() => {\n if (usingFakeTimers) {\n jest.useRealTimers();\n usingFakeTimers = false;\n }\n\n Socket.getWebSocketConstructor.restore();\n\n return Promise.resolve(socket && socket.close()).then(() => {\n mockWebSocket = undefined;\n socket = undefined;\n });\n });\n\n describe('#open()', () => {\n let socket;\n\n beforeEach(() => {\n socket = new Socket();\n });\n\n afterEach(() => socket.close().catch(() => console.log()));\n\n it('requires a url', () => assert.isRejected(socket.open(), /`url` is required/));\n\n it('requires a forceCloseDelay option', () =>\n assert.isRejected(\n socket.open('ws://example.com'),\n /missing required property forceCloseDelay/\n ));\n\n it('requires a token option', () =>\n assert.isRejected(\n socket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n }),\n /missing required property token/\n ));\n\n it('requires a trackingId option', () =>\n assert.isRejected(\n socket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n token: 'mocktoken',\n }),\n /missing required property trackingId/\n ));\n\n it('requires a logger option', () =>\n assert.isRejected(\n socket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n }),\n /missing required property logger/\n ));\n\n it('accepts a logLevelToken option', () => {\n const promise = socket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n wssResponseTimeout: mockoptions.wssResponseTimeout,\n logger: console,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n logLevelToken: 'mocklogleveltoken',\n });\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n emitAuthResponse();\n\n return promise.then(() => {\n assert.equal(socket.logLevelToken, 'mocklogleveltoken');\n });\n });\n });\n\n describe('#binaryType', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.binaryType, 'test');\n mockWebSocket.binaryType = 'test';\n assert.equal(socket.binaryType, 'test');\n });\n });\n\n describe('#bufferedAmount', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.bufferedAmount, 'test');\n mockWebSocket.bufferedAmount = 'test';\n assert.equal(socket.bufferedAmount, 'test');\n });\n });\n\n describe('#extensions', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.extensions, 'test');\n mockWebSocket.extensions = 'test';\n assert.equal(socket.extensions, 'test');\n });\n });\n\n describe('#protocol', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.protocol, 'test');\n mockWebSocket.protocol = 'test';\n assert.equal(socket.protocol, 'test');\n });\n });\n\n describe('#readyState', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.readyState, 'test');\n mockWebSocket.readyState = 'test';\n assert.equal(socket.readyState, 'test');\n });\n });\n\n describe('#url', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.url, 'test');\n mockWebSocket.url = 'test';\n assert.equal(socket.url, 'test');\n });\n });\n\n describe('#open()', () => {\n it('requires a url parameter', () => {\n const s = new Socket();\n\n return assert.isRejected(s.open(), /`url` is required/);\n });\n\n it('cannot be called more than once', () =>\n assert.isRejected(\n socket.open('ws://example.com'),\n /Socket#open\\(\\) can only be called once/\n ));\n\n it(\"sets the underlying socket's binary type\", () =>\n assert.equal(socket.binaryType, 'arraybuffer'));\n\n describe('when connection fails because this is a service account', () => {\n it('rejects with a BadRequest', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n\n mockWebSocket.emit('close', {\n code: 4400,\n reason: \"Service accounts can't use this endpoint\",\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, BadRequest);\n assert.match(reason.code, 4400);\n assert.match(reason.reason, /Service accounts can't use this endpoint/);\n assert.match(reason.message, /Service accounts can't use this endpoint/);\n\n return s.close();\n });\n });\n });\n\n describe('when connection fails because of an invalid token', () => {\n it('rejects with a NotAuthorized', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n\n mockWebSocket.emit('close', {\n code: 4401,\n reason: 'Authorization Failed',\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, NotAuthorized);\n assert.match(reason.code, 4401);\n assert.match(reason.reason, /Authorization Failed/);\n assert.match(reason.message, /Authorization Failed/);\n\n return s.close();\n });\n });\n });\n\n describe('when connection fails because of a missing entitlement', () => {\n it('rejects with a Forbidden', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n\n mockWebSocket.emit('close', {\n code: 4403,\n reason: 'Not entitled',\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, Forbidden);\n assert.match(reason.code, 4403);\n assert.match(reason.reason, /Not entitled/);\n assert.match(reason.message, /Not entitled/);\n\n return s.close();\n });\n });\n });\n\n // describe(`when connection fails because the websocket registation has expired`, () => {\n // it(`rejects with a NotFound`, () => {\n // const s = new Socket();\n // const promise = s.open(`ws://example.com`, mockoptions);\n // mockWebSocket.readyState = 1;\n // mockWebSocket.emit(`open`);\n //\n // const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n // assert.equal(firstCallArgs.type, `authorization`);\n //\n // mockWebSocket.emit(`close`, {\n // code: 4404,\n // reason: `Expired registration`\n // });\n //\n // return assert.isRejected(promise)\n // .then((reason) => {\n // assert.instanceOf(reason, NotFound);\n // assert.match(reason.code, 4404);\n // assert.match(reason.reason, /Expired registration/);\n // assert.match(reason.message, /Expired registration/);\n // return s.close();\n // });\n // });\n // });\n\n describe('when connection fails for non-authorization reasons', () => {\n it(\"rejects with the close event's reason\", () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.emit('close', {\n code: 4001,\n reason: 'No',\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, ConnectionError);\n assert.match(reason.code, 4001);\n assert.match(reason.reason, /No/);\n assert.match(reason.message, /No/);\n\n return s.close();\n });\n });\n });\n\n describe('when the connection succeeds', () => {\n it('sends an auth message up the socket', () => {\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n assert.property(firstCallArgs, 'data');\n assert.property(firstCallArgs.data, 'token');\n assert.equal(firstCallArgs.data.token, 'mocktoken');\n assert.property(firstCallArgs, 'trackingId');\n });\n\n describe('when logLevelToken is set', () => {\n it('includes auth payload with token', () => {\n const s = new Socket();\n\n s.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n wssResponseTimeout: mockoptions.wssResponseTimeout,\n logger: console,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n }).catch((reason) => console.error(reason));\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n assert.property(firstCallArgs, 'data');\n assert.equal(firstCallArgs.data.token, 'mocktoken');\n assert.property(firstCallArgs, 'trackingId');\n\n return s.close();\n });\n });\n\n it('resolves upon receiving response_event auth response', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return promise.then(() => s.close());\n });\n\n it('rejects upon receiving a non-2xx auth response_event', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse({statusCode: 401, statusMessage: 'Unauthorized'});\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, NotAuthorized);\n assert.equal(reason.code, 401);\n assert.match(reason.reason, /Unauthorized/);\n\n return s.close();\n });\n });\n });\n });\n\n describe('#close()', () => {\n it('closes the socket', () => socket.close().then(() => assert.called(mockWebSocket.close)));\n\n it('only accepts valid close codes', () =>\n Promise.all([\n assert.isRejected(\n socket.close({code: 1001}),\n /`options.code` must be 1000 or between 3000 and 4999 \\(inclusive\\)/\n ),\n socket.close({code: 1000}),\n ]));\n\n it('accepts a reason', () =>\n socket\n .close({\n code: 3001,\n reason: 'Custom Normal',\n })\n .then(() => assert.calledWith(mockWebSocket.close, 3001, 'Custom Normal')));\n\n it('accepts the logout reason', () =>\n socket\n .close({\n code: 3050,\n reason: 'done (permanent)',\n })\n .then(() => assert.calledWith(mockWebSocket.close, 3050, 'done (permanent)')));\n\n it('can safely be called called multiple times', () => {\n const p1 = socket.close();\n\n mockWebSocket.readyState = 2;\n const p2 = socket.close();\n\n return Promise.all([p1, p2]);\n });\n\n it('signals closure if no close frame is received within the specified window', () => {\n const socket = new Socket();\n const promise = socket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return promise.then(() => {\n const spy = sinon.spy();\n\n socket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const promise = socket.close();\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return promise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 1000,\n reason: 'Done (forced)',\n });\n });\n });\n });\n\n it('signals closure if no close frame is received within the specified window, but uses the initial options as 3050 if specified by options call', () => {\n const socket = new Socket();\n const promise = socket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return promise.then(() => {\n const spy = sinon.spy();\n\n socket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const promise = socket.close({code: 3050, reason: 'done (permanent)'});\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return promise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 3050,\n reason: 'done (permanent)',\n });\n });\n });\n });\n\n it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', () => {\n const socket = new Socket();\n const promise = socket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return promise.then(() => {\n const spy = sinon.spy();\n\n socket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const promise = socket.close({code: 1000, reason: 'test'});\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return promise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 1000,\n reason: 'test',\n });\n });\n });\n });\n\n it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', () => {\n const socket = new Socket();\n const promise = socket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return promise.then(() => {\n const spy = sinon.spy();\n\n socket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const promise = socket.close({code: 1000});\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return promise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 1000,\n reason: 'Done (unknown)',\n });\n });\n });\n });\n\n [\n {\n description: 'manually triggers close handler when socket is still connecting',\n closeOptions: {code: 3001, reason: 'Custom close while connecting'},\n expectedCode: 3001,\n expectedReason: 'Custom close while connecting',\n },\n {\n description:\n 'manually triggers close handler with default code when socket is connecting',\n closeOptions: undefined,\n expectedCode: 1000,\n expectedReason: 'Done',\n },\n ].forEach(({description, closeOptions, expectedCode, expectedReason}) => {\n it(description, async () => {\n const s = new Socket();\n let socketInstance;\n\n // Save the current stub and replace it\n const previousStub = Socket.getWebSocketConstructor;\n Socket.getWebSocketConstructor = sinon.stub().callsFake(\n () =>\n function (...args) {\n socketInstance = new MockWebSocket(...args);\n\n return socketInstance;\n }\n );\n\n // open the socket\n s.open('ws://example.com', mockoptions);\n\n // Keep socket in CONNECTING state (readyState 0)\n socketInstance.readyState = 0;\n\n const closeSpy = sinon.spy();\n s.on('close', closeSpy);\n\n // Call close and await the result\n const result = await s.close(closeOptions);\n\n // Verify the promise resolved with the correct close event\n assert.equal(result.code, expectedCode);\n assert.equal(result.reason, expectedReason);\n\n // Verify close handler was called with expected code/reason\n assert.calledOnce(closeSpy);\n assert.calledWith(closeSpy, {\n code: expectedCode,\n reason: expectedReason,\n });\n\n // Verify the underlying socket.close was called with the correct params\n assert.calledOnce(socketInstance.close);\n assert.calledWith(socketInstance.close, expectedCode, expectedReason);\n\n // Restore the previous stub\n Socket.getWebSocketConstructor = previousStub;\n });\n });\n });\n\n describe('#send()', () => {\n describe('when the socket is not in the OPEN state', () => {\n it('fails', () => {\n mockWebSocket.readyState = 0;\n\n return assert\n .isRejected(socket.send('test0'), /INVALID_STATE_ERROR/)\n .then(() => {\n mockWebSocket.readyState = 2;\n\n return assert.isRejected(socket.send('test2'), /INVALID_STATE_ERROR/);\n })\n .then(() => {\n mockWebSocket.readyState = 3;\n\n return assert.isRejected(socket.send('test3'), /INVALID_STATE_ERROR/);\n })\n .then(() => {\n mockWebSocket.readyState = 1;\n\n return socket.send('test1');\n });\n });\n });\n\n it('sends strings', () => {\n socket.send('this is a string');\n assert.calledWith(mockWebSocket.send, 'this is a string');\n });\n\n it('sends JSON.stringifyable object', () => {\n socket.send({\n json: true,\n });\n assert.calledWith(mockWebSocket.send, '{\"json\":true}');\n });\n });\n\n describe('#onclose()', () => {\n describe('when it receives close code 1005', () => {\n forEach(\n {\n Replaced: 4000,\n 'Authentication Failed': 1008,\n 'Authentication did not happen within the timeout window of 30000 seconds.': 1008,\n },\n (code, reason) => {\n it(`emits code ${code} for reason ${reason}`, () => {\n const spy = sinon.spy();\n\n socket.on('close', spy);\n\n mockWebSocket.emit('close', {\n code: 1005,\n reason,\n });\n assert.called(spy);\n assert.calledWith(spy, {\n code,\n reason,\n });\n });\n }\n );\n });\n\n describe('when it receives close code 3050', () => {\n it('emits code 3050 for code 3050', () => {\n const code = 3050;\n const reason = 'done (permanent)';\n const spy = sinon.spy();\n\n socket.on('close', spy);\n\n mockWebSocket.emit('close', {\n code,\n reason,\n });\n assert.called(spy);\n assert.calledWith(spy, {\n code,\n reason,\n });\n });\n });\n });\n\n describe('#onmessage()', () => {\n let spy;\n\n beforeEach(() => {\n spy = sinon.spy();\n socket.on('message', spy);\n });\n\n it('emits messages from the underlying socket', () => {\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n id: 'mockid',\n }),\n });\n\n assert.called(spy);\n });\n\n it('parses received messages', () => {\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n id: 'mockid',\n type: 'test',\n }),\n });\n\n assert.calledWith(spy, {\n data: {\n id: 'mockid',\n type: 'test',\n },\n });\n });\n\n it('preserves top-level type and eventId for async_event envelopes', () => {\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'async_event',\n trackingId: 'SRV_bb000000-0000-0000-0000-000000000006',\n eventId: 'f6a7b8c9-d0e1-2345-fabc-456789012345',\n data: {\n eventType: 'mobius.callinfo',\n callId: 'fcf86aa5-5539-4c9f-8b72-667786ae9b6c',\n deviceId: '334f3d50-1d26-4712-93f1-4972390cc565',\n },\n }),\n });\n\n assert.calledWith(spy, {\n data: {\n type: 'async_event',\n trackingId: 'SRV_bb000000-0000-0000-0000-000000000006',\n eventId: 'f6a7b8c9-d0e1-2345-fabc-456789012345',\n data: {\n eventType: 'mobius.callinfo',\n callId: 'fcf86aa5-5539-4c9f-8b72-667786ae9b6c',\n deviceId: '334f3d50-1d26-4712-93f1-4972390cc565',\n },\n },\n });\n });\n\n it('acknowledges async_event messages only', () => {\n sinon.spy(socket, '_acknowledge');\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'async_event',\n eventId: 'event-123',\n trackingId: 'tracking-123',\n }),\n });\n assert.called(socket._acknowledge);\n });\n\n it('does not acknowledge non-async_event messages', () => {\n sinon.spy(socket, '_acknowledge');\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'regular',\n id: 'mockid',\n }),\n });\n assert.notCalled(socket._acknowledge);\n });\n });\n\n describe('#_acknowledge', () => {\n it('requires an event', () =>\n assert.isRejected(socket._acknowledge(), /`event` is required/));\n\n it('acknowledges async events using event_ack and eventId', () =>\n socket\n ._acknowledge({\n data: {\n eventId: 'event-123',\n trackingId: 'tracking-123',\n },\n })\n .then(() => {\n assert.calledWith(\n mockWebSocket.send,\n JSON.stringify({\n type: MESSAGE_TYPES.EVENT_ACK,\n trackingId: 'tracking-123',\n eventId: 'event-123',\n })\n );\n }));\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_crypto","require","_testHelperChai","_testHelperMockWebSocket","_interopRequireDefault","_sinon","_index","_constants","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty3","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty2","crypto","randomUUID","_defineProperty2","value","configurable","describe","mockWebSocket","socket","usingFakeTimers","mockoptions","logger","console","token","trackingId","config","mobiusSocket","emitAuthResponse","_ref","undefined","_ref$statusCode","statusCode","_ref$statusMessage","statusMessage","authRequest","JSON","parse","send","lastCall","args","emit","data","_stringify","type","subtype","MESSAGE_TYPES","AUTH","beforeEach","jest","useFakeTimers","doNotFake","sinon","stub","Socket","callsFake","_len","Array","_key","_construct2","MockWebSocket","promise","open","process","nextTick","afterEach","useRealTimers","getWebSocketConstructor","restore","_promise","resolve","close","then","freshSocket","catch","it","assert","isRejected","forceCloseDelay","openPromise","wssResponseTimeout","logLevelToken","readyState","equal","notEqual","binaryType","bufferedAmount","extensions","protocol","url","s","firstCallArgs","firstCall","code","reason","instanceOf","BadRequest","match","message","NotAuthorized","Forbidden","ConnectionError","property","error","called","all","calledWith","p1","p2","transientSocket","spy","on","removeAllListeners","closePromise","advanceTimersByTime","description","closeOptions","expectedCode","expectedReason","_ref2","_asyncToGenerator2","_regenerator","mark","_callee","socketInstance","previousStub","closeSpy","result","wrap","_context","prev","next","_len2","_key2","sent","calledOnce","stop","json","_forEach2","Replaced","concat","id","eventId","eventType","callId","deviceId","_acknowledge","notCalled","EVENT_ACK"],"sources":["socket.test.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {randomUUID} from 'crypto';\nimport {forEach} from 'lodash';\nimport {assert} from '@webex/test-helper-chai';\nimport MockWebSocket from '@webex/test-helper-mock-web-socket';\nimport sinon from 'sinon';\nimport {\n BadRequest,\n NotAuthorized,\n Forbidden,\n // NotFound,\n config,\n ConnectionError,\n Socket,\n} from './index';\nimport {MESSAGE_TYPES} from './socket/constants';\n\nif (!crypto.randomUUID) {\n Object.defineProperty(crypto, 'randomUUID', {\n value: randomUUID,\n configurable: true,\n });\n}\n\ndescribe('plugin-mobius-socket', () => {\n describe('Socket', () => {\n let mockWebSocket;\n let socket;\n let usingFakeTimers;\n\n const mockoptions = {\n logger: console,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n ...config.mobiusSocket,\n };\n\n const emitAuthResponse = ({statusCode = 200, statusMessage = 'OK'} = {}) => {\n const authRequest = JSON.parse(mockWebSocket.send.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: MESSAGE_TYPES.AUTH,\n trackingId: authRequest.trackingId,\n statusCode,\n statusMessage,\n }),\n });\n };\n\n beforeEach(() => {\n jest.useFakeTimers({doNotFake: ['nextTick']});\n usingFakeTimers = true;\n });\n\n beforeEach(() => {\n sinon.stub(Socket, 'getWebSocketConstructor').callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n\n return mockWebSocket;\n }\n );\n\n socket = new Socket();\n const promise = socket.open('ws://example.com', mockoptions);\n\n mockWebSocket.open();\n // Simulate Mobius auth response (MockWebSocket.open auto-sends mercury.buffer_state which Mobius ignores)\n process.nextTick(() => {\n emitAuthResponse();\n });\n\n return promise;\n });\n\n afterEach(() => {\n if (usingFakeTimers) {\n jest.useRealTimers();\n usingFakeTimers = false;\n }\n\n Socket.getWebSocketConstructor.restore();\n\n return Promise.resolve(socket && socket.close()).then(() => {\n mockWebSocket = undefined;\n socket = undefined;\n });\n });\n\n describe('#open()', () => {\n let freshSocket;\n\n beforeEach(() => {\n freshSocket = new Socket();\n });\n\n afterEach(() => freshSocket.close().catch(() => undefined));\n\n it('requires a url', () => assert.isRejected(freshSocket.open(), /`url` is required/));\n\n it('requires a forceCloseDelay option', () =>\n assert.isRejected(\n freshSocket.open('ws://example.com'),\n /missing required property forceCloseDelay/\n ));\n\n it('requires a token option', () =>\n assert.isRejected(\n freshSocket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n }),\n /missing required property token/\n ));\n\n it('requires a trackingId option', () =>\n assert.isRejected(\n freshSocket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n token: 'mocktoken',\n }),\n /missing required property trackingId/\n ));\n\n it('requires a logger option', () =>\n assert.isRejected(\n freshSocket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n }),\n /missing required property logger/\n ));\n\n it('accepts a logLevelToken option', () => {\n const openPromise = freshSocket.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n wssResponseTimeout: mockoptions.wssResponseTimeout,\n logger: console,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n logLevelToken: 'mocklogleveltoken',\n });\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n emitAuthResponse();\n\n return openPromise.then(() => {\n assert.equal(freshSocket.logLevelToken, 'mocklogleveltoken');\n });\n });\n });\n\n describe('#binaryType', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.binaryType, 'test');\n mockWebSocket.binaryType = 'test';\n assert.equal(socket.binaryType, 'test');\n });\n });\n\n describe('#bufferedAmount', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.bufferedAmount, 'test');\n mockWebSocket.bufferedAmount = 'test';\n assert.equal(socket.bufferedAmount, 'test');\n });\n });\n\n describe('#extensions', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.extensions, 'test');\n mockWebSocket.extensions = 'test';\n assert.equal(socket.extensions, 'test');\n });\n });\n\n describe('#protocol', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.protocol, 'test');\n mockWebSocket.protocol = 'test';\n assert.equal(socket.protocol, 'test');\n });\n });\n\n describe('#readyState', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.readyState, 'test');\n mockWebSocket.readyState = 'test';\n assert.equal(socket.readyState, 'test');\n });\n });\n\n describe('#url', () => {\n it('proxies to the underlying socket', () => {\n assert.notEqual(socket.url, 'test');\n mockWebSocket.url = 'test';\n assert.equal(socket.url, 'test');\n });\n });\n\n describe('#open()', () => {\n it('requires a url parameter', () => {\n const s = new Socket();\n\n return assert.isRejected(s.open(), /`url` is required/);\n });\n\n it('cannot be called more than once', () =>\n assert.isRejected(\n socket.open('ws://example.com'),\n /Socket#open\\(\\) can only be called once/\n ));\n\n it(\"sets the underlying socket's binary type\", () =>\n assert.equal(socket.binaryType, 'arraybuffer'));\n\n describe('when connection fails because this is a service account', () => {\n it('rejects with a BadRequest', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n\n mockWebSocket.emit('close', {\n code: 4400,\n reason: \"Service accounts can't use this endpoint\",\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, BadRequest);\n assert.match(reason.code, 4400);\n assert.match(reason.reason, /Service accounts can't use this endpoint/);\n assert.match(reason.message, /Service accounts can't use this endpoint/);\n\n return s.close();\n });\n });\n });\n\n describe('when connection fails because of an invalid token', () => {\n it('rejects with a NotAuthorized', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n\n mockWebSocket.emit('close', {\n code: 4401,\n reason: 'Authorization Failed',\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, NotAuthorized);\n assert.match(reason.code, 4401);\n assert.match(reason.reason, /Authorization Failed/);\n assert.match(reason.message, /Authorization Failed/);\n\n return s.close();\n });\n });\n });\n\n describe('when connection fails because of a missing entitlement', () => {\n it('rejects with a Forbidden', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n\n mockWebSocket.emit('close', {\n code: 4403,\n reason: 'Not entitled',\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, Forbidden);\n assert.match(reason.code, 4403);\n assert.match(reason.reason, /Not entitled/);\n assert.match(reason.message, /Not entitled/);\n\n return s.close();\n });\n });\n });\n\n // describe(`when connection fails because the websocket registation has expired`, () => {\n // it(`rejects with a NotFound`, () => {\n // const s = new Socket();\n // const promise = s.open(`ws://example.com`, mockoptions);\n // mockWebSocket.readyState = 1;\n // mockWebSocket.emit(`open`);\n //\n // const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n // assert.equal(firstCallArgs.type, `authorization`);\n //\n // mockWebSocket.emit(`close`, {\n // code: 4404,\n // reason: `Expired registration`\n // });\n //\n // return assert.isRejected(promise)\n // .then((reason) => {\n // assert.instanceOf(reason, NotFound);\n // assert.match(reason.code, 4404);\n // assert.match(reason.reason, /Expired registration/);\n // assert.match(reason.message, /Expired registration/);\n // return s.close();\n // });\n // });\n // });\n\n describe('when connection fails for non-authorization reasons', () => {\n it(\"rejects with the close event's reason\", () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.emit('close', {\n code: 4001,\n reason: 'No',\n });\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, ConnectionError);\n assert.match(reason.code, 4001);\n assert.match(reason.reason, /No/);\n assert.match(reason.message, /No/);\n\n return s.close();\n });\n });\n });\n\n describe('when the connection succeeds', () => {\n it('sends an auth message up the socket', () => {\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n assert.property(firstCallArgs, 'data');\n assert.property(firstCallArgs.data, 'token');\n assert.equal(firstCallArgs.data.token, 'mocktoken');\n assert.property(firstCallArgs, 'trackingId');\n });\n\n describe('when logLevelToken is set', () => {\n it('includes auth payload with token', () => {\n const s = new Socket();\n\n s.open('ws://example.com', {\n forceCloseDelay: mockoptions.forceCloseDelay,\n wssResponseTimeout: mockoptions.wssResponseTimeout,\n logger: console,\n token: 'mocktoken',\n trackingId: 'mocktrackingid',\n }).catch((reason) => console.error(reason));\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n\n const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);\n\n assert.equal(firstCallArgs.type, MESSAGE_TYPES.AUTH);\n assert.property(firstCallArgs, 'data');\n assert.equal(firstCallArgs.data.token, 'mocktoken');\n assert.property(firstCallArgs, 'trackingId');\n\n return s.close();\n });\n });\n\n it('resolves upon receiving response_event auth response', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return promise.then(() => s.close());\n });\n\n it('rejects upon receiving a non-2xx auth response_event', () => {\n const s = new Socket();\n const promise = s.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse({statusCode: 401, statusMessage: 'Unauthorized'});\n\n return assert.isRejected(promise).then((reason) => {\n assert.instanceOf(reason, NotAuthorized);\n assert.equal(reason.code, 401);\n assert.match(reason.reason, /Unauthorized/);\n\n return s.close();\n });\n });\n });\n });\n\n describe('#close()', () => {\n it('closes the socket', () => socket.close().then(() => assert.called(mockWebSocket.close)));\n\n it('only accepts valid close codes', () =>\n Promise.all([\n assert.isRejected(\n socket.close({code: 1001}),\n /`options.code` must be 1000 or between 3000 and 4999 \\(inclusive\\)/\n ),\n socket.close({code: 1000}),\n ]));\n\n it('accepts a reason', () =>\n socket\n .close({\n code: 3001,\n reason: 'Custom Normal',\n })\n .then(() => assert.calledWith(mockWebSocket.close, 3001, 'Custom Normal')));\n\n it('accepts the logout reason', () =>\n socket\n .close({\n code: 3050,\n reason: 'done (permanent)',\n })\n .then(() => assert.calledWith(mockWebSocket.close, 3050, 'done (permanent)')));\n\n it('can safely be called called multiple times', () => {\n const p1 = socket.close();\n\n mockWebSocket.readyState = 2;\n const p2 = socket.close();\n\n return Promise.all([p1, p2]);\n });\n\n it('signals closure if no close frame is received within the specified window', () => {\n const transientSocket = new Socket();\n const openPromise = transientSocket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return openPromise.then(() => {\n const spy = sinon.spy();\n\n transientSocket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const closePromise = transientSocket.close();\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return closePromise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 1000,\n reason: 'Done (forced)',\n });\n });\n });\n });\n\n it('signals closure if no close frame is received within the specified window, but uses the initial options as 3050 if specified by options call', () => {\n const transientSocket = new Socket();\n const openPromise = transientSocket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return openPromise.then(() => {\n const spy = sinon.spy();\n\n transientSocket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const closePromise = transientSocket.close({code: 3050, reason: 'done (permanent)'});\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return closePromise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 3050,\n reason: 'done (permanent)',\n });\n });\n });\n });\n\n it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', () => {\n const transientSocket = new Socket();\n const openPromise = transientSocket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return openPromise.then(() => {\n const spy = sinon.spy();\n\n transientSocket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const closePromise = transientSocket.close({code: 1000, reason: 'test'});\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return closePromise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 1000,\n reason: 'test',\n });\n });\n });\n });\n\n it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', () => {\n const transientSocket = new Socket();\n const openPromise = transientSocket.open('ws://example.com', mockoptions);\n\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n emitAuthResponse();\n\n return openPromise.then(() => {\n const spy = sinon.spy();\n\n transientSocket.on('close', spy);\n mockWebSocket.close = () =>\n new Promise(() => {\n /* eslint no-inline-comments: [0] */\n });\n mockWebSocket.removeAllListeners('close');\n\n const closePromise = transientSocket.close({code: 1000});\n\n jest.advanceTimersByTime(mockoptions.forceCloseDelay);\n\n return closePromise.then(() => {\n assert.called(spy);\n assert.calledWith(spy, {\n code: 1000,\n reason: 'Done (unknown)',\n });\n });\n });\n });\n\n [\n {\n description: 'manually triggers close handler when socket is still connecting',\n closeOptions: {code: 3001, reason: 'Custom close while connecting'},\n expectedCode: 3001,\n expectedReason: 'Custom close while connecting',\n },\n {\n description:\n 'manually triggers close handler with default code when socket is connecting',\n closeOptions: undefined,\n expectedCode: 1000,\n expectedReason: 'Done',\n },\n ].forEach(({description, closeOptions, expectedCode, expectedReason}) => {\n it(description, async () => {\n const s = new Socket();\n let socketInstance;\n\n // Save the current stub and replace it\n const previousStub = Socket.getWebSocketConstructor;\n Socket.getWebSocketConstructor = sinon.stub().callsFake(\n () =>\n function (...args) {\n socketInstance = new MockWebSocket(...args);\n\n return socketInstance;\n }\n );\n\n // open the socket\n s.open('ws://example.com', mockoptions);\n\n // Keep socket in CONNECTING state (readyState 0)\n socketInstance.readyState = 0;\n\n const closeSpy = sinon.spy();\n s.on('close', closeSpy);\n\n // Call close and await the result\n const result = await s.close(closeOptions);\n\n // Verify the promise resolved with the correct close event\n assert.equal(result.code, expectedCode);\n assert.equal(result.reason, expectedReason);\n\n // Verify close handler was called with expected code/reason\n assert.calledOnce(closeSpy);\n assert.calledWith(closeSpy, {\n code: expectedCode,\n reason: expectedReason,\n });\n\n // Verify the underlying socket.close was called with the correct params\n assert.calledOnce(socketInstance.close);\n assert.calledWith(socketInstance.close, expectedCode, expectedReason);\n\n // Restore the previous stub\n Socket.getWebSocketConstructor = previousStub;\n });\n });\n });\n\n describe('#send()', () => {\n describe('when the socket is not in the OPEN state', () => {\n it('fails', () => {\n mockWebSocket.readyState = 0;\n\n return assert\n .isRejected(socket.send('test0'), /INVALID_STATE_ERROR/)\n .then(() => {\n mockWebSocket.readyState = 2;\n\n return assert.isRejected(socket.send('test2'), /INVALID_STATE_ERROR/);\n })\n .then(() => {\n mockWebSocket.readyState = 3;\n\n return assert.isRejected(socket.send('test3'), /INVALID_STATE_ERROR/);\n })\n .then(() => {\n mockWebSocket.readyState = 1;\n\n return socket.send('test1');\n });\n });\n });\n\n it('sends strings', () => {\n socket.send('this is a string');\n assert.calledWith(mockWebSocket.send, 'this is a string');\n });\n\n it('sends JSON.stringifyable object', () => {\n socket.send({\n json: true,\n });\n assert.calledWith(mockWebSocket.send, '{\"json\":true}');\n });\n });\n\n describe('#onclose()', () => {\n describe('when it receives close code 1005', () => {\n forEach(\n {\n Replaced: 4000,\n 'Authentication Failed': 1008,\n 'Authentication did not happen within the timeout window of 30000 seconds.': 1008,\n },\n (code, reason) => {\n it(`emits code ${code} for reason ${reason}`, () => {\n const spy = sinon.spy();\n\n socket.on('close', spy);\n\n mockWebSocket.emit('close', {\n code: 1005,\n reason,\n });\n assert.called(spy);\n assert.calledWith(spy, {\n code,\n reason,\n });\n });\n }\n );\n });\n\n describe('when it receives close code 3050', () => {\n it('emits code 3050 for code 3050', () => {\n const code = 3050;\n const reason = 'done (permanent)';\n const spy = sinon.spy();\n\n socket.on('close', spy);\n\n mockWebSocket.emit('close', {\n code,\n reason,\n });\n assert.called(spy);\n assert.calledWith(spy, {\n code,\n reason,\n });\n });\n });\n });\n\n describe('#onmessage()', () => {\n let spy;\n\n beforeEach(() => {\n spy = sinon.spy();\n socket.on('message', spy);\n });\n\n it('emits messages from the underlying socket', () => {\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n id: 'mockid',\n }),\n });\n\n assert.called(spy);\n });\n\n it('parses received messages', () => {\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n id: 'mockid',\n type: 'test',\n }),\n });\n\n assert.calledWith(spy, {\n data: {\n id: 'mockid',\n type: 'test',\n },\n });\n });\n\n it('preserves top-level type and eventId for async_event envelopes', () => {\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'async_event',\n trackingId: 'SRV_bb000000-0000-0000-0000-000000000006',\n eventId: 'f6a7b8c9-d0e1-2345-fabc-456789012345',\n data: {\n eventType: 'mobius.callinfo',\n callId: 'fcf86aa5-5539-4c9f-8b72-667786ae9b6c',\n deviceId: '334f3d50-1d26-4712-93f1-4972390cc565',\n },\n }),\n });\n\n assert.calledWith(spy, {\n data: {\n type: 'async_event',\n trackingId: 'SRV_bb000000-0000-0000-0000-000000000006',\n eventId: 'f6a7b8c9-d0e1-2345-fabc-456789012345',\n data: {\n eventType: 'mobius.callinfo',\n callId: 'fcf86aa5-5539-4c9f-8b72-667786ae9b6c',\n deviceId: '334f3d50-1d26-4712-93f1-4972390cc565',\n },\n },\n });\n });\n\n it('acknowledges async_event messages only', () => {\n sinon.spy(socket, '_acknowledge');\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'async_event',\n eventId: 'event-123',\n trackingId: 'tracking-123',\n }),\n });\n assert.called(socket._acknowledge);\n });\n\n it('does not acknowledge non-async_event messages', () => {\n sinon.spy(socket, '_acknowledge');\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'regular',\n id: 'mockid',\n }),\n });\n assert.notCalled(socket._acknowledge);\n });\n });\n\n describe('#_acknowledge', () => {\n it('requires an event', () =>\n assert.isRejected(socket._acknowledge(), /`event` is required/));\n\n it('acknowledges async events using event_ack and eventId', () =>\n socket\n ._acknowledge({\n data: {\n eventId: 'event-123',\n trackingId: 'tracking-123',\n },\n })\n .then(() => {\n assert.calledWith(\n mockWebSocket.send,\n JSON.stringify({\n type: MESSAGE_TYPES.EVENT_ACK,\n trackingId: 'tracking-123',\n eventId: 'event-123',\n })\n );\n }));\n });\n });\n});\n"],"mappings":";;;;;;;;;;;;;;;;;AAIA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,wBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,MAAA,GAAAD,sBAAA,CAAAH,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AASA,IAAAM,UAAA,GAAAN,OAAA;AAAiD,SAAAO,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,uBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA,IAlBjD;AACA;AACA;AAkBA,IAAI,CAACqB,MAAM,CAACC,UAAU,EAAE;EACtB,IAAAC,gBAAA,CAAAN,OAAA,EAAsBI,MAAM,EAAE,YAAY,EAAE;IAC1CG,KAAK,EAAEF,kBAAU;IACjBG,YAAY,EAAE;EAChB,CAAC,CAAC;AACJ;AAEAC,QAAQ,CAAC,sBAAsB,EAAE,YAAM;EACrCA,QAAQ,CAAC,QAAQ,EAAE,YAAM;IACvB,IAAIC,aAAa;IACjB,IAAIC,MAAM;IACV,IAAIC,eAAe;IAEnB,IAAMC,WAAW,GAAAnB,aAAA;MACfoB,MAAM,EAAEC,OAAO;MACfC,KAAK,EAAE,WAAW;MAClBC,UAAU,EAAE;IAAgB,GACzBC,aAAM,CAACC,YAAY,CACvB;IAED,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAA,EAAsD;MAAA,IAAAC,IAAA,GAAA1B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA2B,SAAA,GAAA3B,SAAA,MAAP,CAAC,CAAC;QAAA4B,eAAA,GAAAF,IAAA,CAA5CG,UAAU;QAAVA,UAAU,GAAAD,eAAA,cAAG,GAAG,GAAAA,eAAA;QAAAE,kBAAA,GAAAJ,IAAA,CAAEK,aAAa;QAAbA,aAAa,GAAAD,kBAAA,cAAG,IAAI,GAAAA,kBAAA;MAC/D,IAAME,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACnB,aAAa,CAACoB,IAAI,CAACC,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAC,CAAC;MAEnEtB,aAAa,CAACuB,IAAI,CAAC,SAAS,EAAE;QAC5BC,IAAI,EAAE,IAAAC,UAAA,CAAAnC,OAAA,EAAe;UACnBoC,IAAI,EAAE,gBAAgB;UACtBC,OAAO,EAAEC,wBAAa,CAACC,IAAI;UAC3BtB,UAAU,EAAEU,WAAW,CAACV,UAAU;UAClCO,UAAU,EAAVA,UAAU;UACVE,aAAa,EAAbA;QACF,CAAC;MACH,CAAC,CAAC;IACJ,CAAC;IAEDc,UAAU,CAAC,YAAM;MACfC,IAAI,CAACC,aAAa,CAAC;QAACC,SAAS,EAAE,CAAC,UAAU;MAAC,CAAC,CAAC;MAC7C/B,eAAe,GAAG,IAAI;IACxB,CAAC,CAAC;IAEF4B,UAAU,CAAC,YAAM;MACfI,cAAK,CAACC,IAAI,CAACC,aAAM,EAAE,yBAAyB,CAAC,CAACC,SAAS,CACrD;QAAA,OACE,YAAmB;UAAA,SAAAC,IAAA,GAAArD,SAAA,CAAAC,MAAA,EAANoC,IAAI,OAAAiB,KAAA,CAAAD,IAAA,GAAAE,IAAA,MAAAA,IAAA,GAAAF,IAAA,EAAAE,IAAA;YAAJlB,IAAI,CAAAkB,IAAA,IAAAvD,SAAA,CAAAuD,IAAA;UAAA;UACfxC,aAAa,OAAAyC,WAAA,CAAAnD,OAAA,EAAOoD,gCAAa,EAAIpB,IAAI,CAAC;UAE1C,OAAOtB,aAAa;QACtB,CAAC;MAAA,CACL,CAAC;MAEDC,MAAM,GAAG,IAAImC,aAAM,CAAC,CAAC;MACrB,IAAMO,OAAO,GAAG1C,MAAM,CAAC2C,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;MAE5DH,aAAa,CAAC4C,IAAI,CAAC,CAAC;MACpB;MACAC,OAAO,CAACC,QAAQ,CAAC,YAAM;QACrBpC,gBAAgB,CAAC,CAAC;MACpB,CAAC,CAAC;MAEF,OAAOiC,OAAO;IAChB,CAAC,CAAC;IAEFI,SAAS,CAAC,YAAM;MACd,IAAI7C,eAAe,EAAE;QACnB6B,IAAI,CAACiB,aAAa,CAAC,CAAC;QACpB9C,eAAe,GAAG,KAAK;MACzB;MAEAkC,aAAM,CAACa,uBAAuB,CAACC,OAAO,CAAC,CAAC;MAExC,OAAOC,QAAA,CAAA7D,OAAA,CAAQ8D,OAAO,CAACnD,MAAM,IAAIA,MAAM,CAACoD,KAAK,CAAC,CAAC,CAAC,CAACC,IAAI,CAAC,YAAM;QAC1DtD,aAAa,GAAGY,SAAS;QACzBX,MAAM,GAAGW,SAAS;MACpB,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFb,QAAQ,CAAC,SAAS,EAAE,YAAM;MACxB,IAAIwD,WAAW;MAEfzB,UAAU,CAAC,YAAM;QACfyB,WAAW,GAAG,IAAInB,aAAM,CAAC,CAAC;MAC5B,CAAC,CAAC;MAEFW,SAAS,CAAC;QAAA,OAAMQ,WAAW,CAACF,KAAK,CAAC,CAAC,CAACG,KAAK,CAAC;UAAA,OAAM5C,SAAS;QAAA,EAAC;MAAA,EAAC;MAE3D6C,EAAE,CAAC,gBAAgB,EAAE;QAAA,OAAMC,sBAAM,CAACC,UAAU,CAACJ,WAAW,CAACX,IAAI,CAAC,CAAC,EAAE,mBAAmB,CAAC;MAAA,EAAC;MAEtFa,EAAE,CAAC,mCAAmC,EAAE;QAAA,OACtCC,sBAAM,CAACC,UAAU,CACfJ,WAAW,CAACX,IAAI,CAAC,kBAAkB,CAAC,EACpC,2CACF,CAAC;MAAA,EAAC;MAEJa,EAAE,CAAC,yBAAyB,EAAE;QAAA,OAC5BC,sBAAM,CAACC,UAAU,CACfJ,WAAW,CAACX,IAAI,CAAC,kBAAkB,EAAE;UACnCgB,eAAe,EAAEzD,WAAW,CAACyD;QAC/B,CAAC,CAAC,EACF,iCACF,CAAC;MAAA,EAAC;MAEJH,EAAE,CAAC,8BAA8B,EAAE;QAAA,OACjCC,sBAAM,CAACC,UAAU,CACfJ,WAAW,CAACX,IAAI,CAAC,kBAAkB,EAAE;UACnCgB,eAAe,EAAEzD,WAAW,CAACyD,eAAe;UAC5CtD,KAAK,EAAE;QACT,CAAC,CAAC,EACF,sCACF,CAAC;MAAA,EAAC;MAEJmD,EAAE,CAAC,0BAA0B,EAAE;QAAA,OAC7BC,sBAAM,CAACC,UAAU,CACfJ,WAAW,CAACX,IAAI,CAAC,kBAAkB,EAAE;UACnCgB,eAAe,EAAEzD,WAAW,CAACyD,eAAe;UAC5CtD,KAAK,EAAE,WAAW;UAClBC,UAAU,EAAE;QACd,CAAC,CAAC,EACF,kCACF,CAAC;MAAA,EAAC;MAEJkD,EAAE,CAAC,gCAAgC,EAAE,YAAM;QACzC,IAAMI,WAAW,GAAGN,WAAW,CAACX,IAAI,CAAC,kBAAkB,EAAE;UACvDgB,eAAe,EAAEzD,WAAW,CAACyD,eAAe;UAC5CE,kBAAkB,EAAE3D,WAAW,CAAC2D,kBAAkB;UAClD1D,MAAM,EAAEC,OAAO;UACfC,KAAK,EAAE,WAAW;UAClBC,UAAU,EAAE,gBAAgB;UAC5BwD,aAAa,EAAE;QACjB,CAAC,CAAC;QAEF/D,aAAa,CAACgE,UAAU,GAAG,CAAC;QAC5BhE,aAAa,CAACuB,IAAI,CAAC,MAAM,CAAC;QAE1Bb,gBAAgB,CAAC,CAAC;QAElB,OAAOmD,WAAW,CAACP,IAAI,CAAC,YAAM;UAC5BI,sBAAM,CAACO,KAAK,CAACV,WAAW,CAACQ,aAAa,EAAE,mBAAmB,CAAC;QAC9D,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFhE,QAAQ,CAAC,aAAa,EAAE,YAAM;MAC5B0D,EAAE,CAAC,kCAAkC,EAAE,YAAM;QAC3CC,sBAAM,CAACQ,QAAQ,CAACjE,MAAM,CAACkE,UAAU,EAAE,MAAM,CAAC;QAC1CnE,aAAa,CAACmE,UAAU,GAAG,MAAM;QACjCT,sBAAM,CAACO,KAAK,CAAChE,MAAM,CAACkE,UAAU,EAAE,MAAM,CAAC;MACzC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFpE,QAAQ,CAAC,iBAAiB,EAAE,YAAM;MAChC0D,EAAE,CAAC,kCAAkC,EAAE,YAAM;QAC3CC,sBAAM,CAACQ,QAAQ,CAACjE,MAAM,CAACmE,cAAc,EAAE,MAAM,CAAC;QAC9CpE,aAAa,CAACoE,cAAc,GAAG,MAAM;QACrCV,sBAAM,CAACO,KAAK,CAAChE,MAAM,CAACmE,cAAc,EAAE,MAAM,CAAC;MAC7C,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFrE,QAAQ,CAAC,aAAa,EAAE,YAAM;MAC5B0D,EAAE,CAAC,kCAAkC,EAAE,YAAM;QAC3CC,sBAAM,CAACQ,QAAQ,CAACjE,MAAM,CAACoE,UAAU,EAAE,MAAM,CAAC;QAC1CrE,aAAa,CAACqE,UAAU,GAAG,MAAM;QACjCX,sBAAM,CAACO,KAAK,CAAChE,MAAM,CAACoE,UAAU,EAAE,MAAM,CAAC;MACzC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFtE,QAAQ,CAAC,WAAW,EAAE,YAAM;MAC1B0D,EAAE,CAAC,kCAAkC,EAAE,YAAM;QAC3CC,sBAAM,CAACQ,QAAQ,CAACjE,MAAM,CAACqE,QAAQ,EAAE,MAAM,CAAC;QACxCtE,aAAa,CAACsE,QAAQ,GAAG,MAAM;QAC/BZ,sBAAM,CAACO,KAAK,CAAChE,MAAM,CAACqE,QAAQ,EAAE,MAAM,CAAC;MACvC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFvE,QAAQ,CAAC,aAAa,EAAE,YAAM;MAC5B0D,EAAE,CAAC,kCAAkC,EAAE,YAAM;QAC3CC,sBAAM,CAACQ,QAAQ,CAACjE,MAAM,CAAC+D,UAAU,EAAE,MAAM,CAAC;QAC1ChE,aAAa,CAACgE,UAAU,GAAG,MAAM;QACjCN,sBAAM,CAACO,KAAK,CAAChE,MAAM,CAAC+D,UAAU,EAAE,MAAM,CAAC;MACzC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFjE,QAAQ,CAAC,MAAM,EAAE,YAAM;MACrB0D,EAAE,CAAC,kCAAkC,EAAE,YAAM;QAC3CC,sBAAM,CAACQ,QAAQ,CAACjE,MAAM,CAACsE,GAAG,EAAE,MAAM,CAAC;QACnCvE,aAAa,CAACuE,GAAG,GAAG,MAAM;QAC1Bb,sBAAM,CAACO,KAAK,CAAChE,MAAM,CAACsE,GAAG,EAAE,MAAM,CAAC;MAClC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFxE,QAAQ,CAAC,SAAS,EAAE,YAAM;MACxB0D,EAAE,CAAC,0BAA0B,EAAE,YAAM;QACnC,IAAMe,CAAC,GAAG,IAAIpC,aAAM,CAAC,CAAC;QAEtB,OAAOsB,sBAAM,CAACC,UAAU,CAACa,CAAC,CAAC5B,IAAI,CAAC,CAAC,EAAE,mBAAmB,CAAC;MACzD,CAAC,CAAC;MAEFa,EAAE,CAAC,iCAAiC,EAAE;QAAA,OACpCC,sBAAM,CAACC,UAAU,CACf1D,MAAM,CAAC2C,IAAI,CAAC,kBAAkB,CAAC,EAC/B,yCACF,CAAC;MAAA,EAAC;MAEJa,EAAE,CAAC,0CAA0C,EAAE;QAAA,OAC7CC,sBAAM,CAACO,KAAK,CAAChE,MAAM,CAACkE,UAAU,EAAE,aAAa,CAAC;MAAA,EAAC;MAEjDpE,QAAQ,CAAC,yDAAyD,EAAE,YAAM;QACxE0D,EAAE,CAAC,2BAA2B,EAAE,YAAM;UACpC,IAAMe,CAAC,GAAG,IAAIpC,aAAM,CAAC,CAAC;UACtB,IAAMO,OAAO,GAAG6B,CAAC,CAAC5B,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;UAEvDH,aAAa,CAACgE,UAAU,GAAG,CAAC;UAC5BhE,aAAa,CAACuB,IAAI,CAAC,MAAM,CAAC;UAE1B,IAAMkD,aAAa,GAAGvD,IAAI,CAACC,KAAK,CAACnB,aAAa,CAACoB,IAAI,CAACsD,SAAS,CAACpD,IAAI,CAAC,CAAC,CAAC,CAAC;UAEtEoC,sBAAM,CAACO,KAAK,CAACQ,aAAa,CAAC/C,IAAI,EAAEE,wBAAa,CAACC,IAAI,CAAC;UAEpD7B,aAAa,CAACuB,IAAI,CAAC,OAAO,EAAE;YAC1BoD,IAAI,EAAE,IAAI;YACVC,MAAM,EAAE;UACV,CAAC,CAAC;UAEF,OAAOlB,sBAAM,CAACC,UAAU,CAAChB,OAAO,CAAC,CAACW,IAAI,CAAC,UAACsB,MAAM,EAAK;YACjDlB,sBAAM,CAACmB,UAAU,CAACD,MAAM,EAAEE,iBAAU,CAAC;YACrCpB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACD,IAAI,EAAE,IAAI,CAAC;YAC/BjB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACA,MAAM,EAAE,0CAA0C,CAAC;YACvElB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACI,OAAO,EAAE,0CAA0C,CAAC;YAExE,OAAOR,CAAC,CAACnB,KAAK,CAAC,CAAC;UAClB,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFtD,QAAQ,CAAC,mDAAmD,EAAE,YAAM;QAClE0D,EAAE,CAAC,8BAA8B,EAAE,YAAM;UACvC,IAAMe,CAAC,GAAG,IAAIpC,aAAM,CAAC,CAAC;UACtB,IAAMO,OAAO,GAAG6B,CAAC,CAAC5B,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;UAEvDH,aAAa,CAACgE,UAAU,GAAG,CAAC;UAC5BhE,aAAa,CAACuB,IAAI,CAAC,MAAM,CAAC;UAE1B,IAAMkD,aAAa,GAAGvD,IAAI,CAACC,KAAK,CAACnB,aAAa,CAACoB,IAAI,CAACsD,SAAS,CAACpD,IAAI,CAAC,CAAC,CAAC,CAAC;UAEtEoC,sBAAM,CAACO,KAAK,CAACQ,aAAa,CAAC/C,IAAI,EAAEE,wBAAa,CAACC,IAAI,CAAC;UAEpD7B,aAAa,CAACuB,IAAI,CAAC,OAAO,EAAE;YAC1BoD,IAAI,EAAE,IAAI;YACVC,MAAM,EAAE;UACV,CAAC,CAAC;UAEF,OAAOlB,sBAAM,CAACC,UAAU,CAAChB,OAAO,CAAC,CAACW,IAAI,CAAC,UAACsB,MAAM,EAAK;YACjDlB,sBAAM,CAACmB,UAAU,CAACD,MAAM,EAAEK,oBAAa,CAAC;YACxCvB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACD,IAAI,EAAE,IAAI,CAAC;YAC/BjB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACA,MAAM,EAAE,sBAAsB,CAAC;YACnDlB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACI,OAAO,EAAE,sBAAsB,CAAC;YAEpD,OAAOR,CAAC,CAACnB,KAAK,CAAC,CAAC;UAClB,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFtD,QAAQ,CAAC,wDAAwD,EAAE,YAAM;QACvE0D,EAAE,CAAC,0BAA0B,EAAE,YAAM;UACnC,IAAMe,CAAC,GAAG,IAAIpC,aAAM,CAAC,CAAC;UACtB,IAAMO,OAAO,GAAG6B,CAAC,CAAC5B,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;UAEvDH,aAAa,CAACgE,UAAU,GAAG,CAAC;UAC5BhE,aAAa,CAACuB,IAAI,CAAC,MAAM,CAAC;UAE1B,IAAMkD,aAAa,GAAGvD,IAAI,CAACC,KAAK,CAACnB,aAAa,CAACoB,IAAI,CAACsD,SAAS,CAACpD,IAAI,CAAC,CAAC,CAAC,CAAC;UAEtEoC,sBAAM,CAACO,KAAK,CAACQ,aAAa,CAAC/C,IAAI,EAAEE,wBAAa,CAACC,IAAI,CAAC;UAEpD7B,aAAa,CAACuB,IAAI,CAAC,OAAO,EAAE;YAC1BoD,IAAI,EAAE,IAAI;YACVC,MAAM,EAAE;UACV,CAAC,CAAC;UAEF,OAAOlB,sBAAM,CAACC,UAAU,CAAChB,OAAO,CAAC,CAACW,IAAI,CAAC,UAACsB,MAAM,EAAK;YACjDlB,sBAAM,CAACmB,UAAU,CAACD,MAAM,EAAEM,gBAAS,CAAC;YACpCxB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACD,IAAI,EAAE,IAAI,CAAC;YAC/BjB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACA,MAAM,EAAE,cAAc,CAAC;YAC3ClB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACI,OAAO,EAAE,cAAc,CAAC;YAE5C,OAAOR,CAAC,CAACnB,KAAK,CAAC,CAAC;UAClB,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;;MAEF;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;MAEAtD,QAAQ,CAAC,qDAAqD,EAAE,YAAM;QACpE0D,EAAE,CAAC,uCAAuC,EAAE,YAAM;UAChD,IAAMe,CAAC,GAAG,IAAIpC,aAAM,CAAC,CAAC;UACtB,IAAMO,OAAO,GAAG6B,CAAC,CAAC5B,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;UAEvDH,aAAa,CAACuB,IAAI,CAAC,OAAO,EAAE;YAC1BoD,IAAI,EAAE,IAAI;YACVC,MAAM,EAAE;UACV,CAAC,CAAC;UAEF,OAAOlB,sBAAM,CAACC,UAAU,CAAChB,OAAO,CAAC,CAACW,IAAI,CAAC,UAACsB,MAAM,EAAK;YACjDlB,sBAAM,CAACmB,UAAU,CAACD,MAAM,EAAEO,sBAAe,CAAC;YAC1CzB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACD,IAAI,EAAE,IAAI,CAAC;YAC/BjB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACA,MAAM,EAAE,IAAI,CAAC;YACjClB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACI,OAAO,EAAE,IAAI,CAAC;YAElC,OAAOR,CAAC,CAACnB,KAAK,CAAC,CAAC;UAClB,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFtD,QAAQ,CAAC,8BAA8B,EAAE,YAAM;QAC7C0D,EAAE,CAAC,qCAAqC,EAAE,YAAM;UAC9C,IAAMgB,aAAa,GAAGvD,IAAI,CAACC,KAAK,CAACnB,aAAa,CAACoB,IAAI,CAACsD,SAAS,CAACpD,IAAI,CAAC,CAAC,CAAC,CAAC;UAEtEoC,sBAAM,CAACO,KAAK,CAACQ,aAAa,CAAC/C,IAAI,EAAEE,wBAAa,CAACC,IAAI,CAAC;UACpD6B,sBAAM,CAAC0B,QAAQ,CAACX,aAAa,EAAE,MAAM,CAAC;UACtCf,sBAAM,CAAC0B,QAAQ,CAACX,aAAa,CAACjD,IAAI,EAAE,OAAO,CAAC;UAC5CkC,sBAAM,CAACO,KAAK,CAACQ,aAAa,CAACjD,IAAI,CAAClB,KAAK,EAAE,WAAW,CAAC;UACnDoD,sBAAM,CAAC0B,QAAQ,CAACX,aAAa,EAAE,YAAY,CAAC;QAC9C,CAAC,CAAC;QAEF1E,QAAQ,CAAC,2BAA2B,EAAE,YAAM;UAC1C0D,EAAE,CAAC,kCAAkC,EAAE,YAAM;YAC3C,IAAMe,CAAC,GAAG,IAAIpC,aAAM,CAAC,CAAC;YAEtBoC,CAAC,CAAC5B,IAAI,CAAC,kBAAkB,EAAE;cACzBgB,eAAe,EAAEzD,WAAW,CAACyD,eAAe;cAC5CE,kBAAkB,EAAE3D,WAAW,CAAC2D,kBAAkB;cAClD1D,MAAM,EAAEC,OAAO;cACfC,KAAK,EAAE,WAAW;cAClBC,UAAU,EAAE;YACd,CAAC,CAAC,CAACiD,KAAK,CAAC,UAACoB,MAAM;cAAA,OAAKvE,OAAO,CAACgF,KAAK,CAACT,MAAM,CAAC;YAAA,EAAC;YAC3C5E,aAAa,CAACgE,UAAU,GAAG,CAAC;YAC5BhE,aAAa,CAACuB,IAAI,CAAC,MAAM,CAAC;YAE1B,IAAMkD,aAAa,GAAGvD,IAAI,CAACC,KAAK,CAACnB,aAAa,CAACoB,IAAI,CAACsD,SAAS,CAACpD,IAAI,CAAC,CAAC,CAAC,CAAC;YAEtEoC,sBAAM,CAACO,KAAK,CAACQ,aAAa,CAAC/C,IAAI,EAAEE,wBAAa,CAACC,IAAI,CAAC;YACpD6B,sBAAM,CAAC0B,QAAQ,CAACX,aAAa,EAAE,MAAM,CAAC;YACtCf,sBAAM,CAACO,KAAK,CAACQ,aAAa,CAACjD,IAAI,CAAClB,KAAK,EAAE,WAAW,CAAC;YACnDoD,sBAAM,CAAC0B,QAAQ,CAACX,aAAa,EAAE,YAAY,CAAC;YAE5C,OAAOD,CAAC,CAACnB,KAAK,CAAC,CAAC;UAClB,CAAC,CAAC;QACJ,CAAC,CAAC;QAEFI,EAAE,CAAC,sDAAsD,EAAE,YAAM;UAC/D,IAAMe,CAAC,GAAG,IAAIpC,aAAM,CAAC,CAAC;UACtB,IAAMO,OAAO,GAAG6B,CAAC,CAAC5B,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;UAEvDH,aAAa,CAACgE,UAAU,GAAG,CAAC;UAC5BhE,aAAa,CAACuB,IAAI,CAAC,MAAM,CAAC;UAC1Bb,gBAAgB,CAAC,CAAC;UAElB,OAAOiC,OAAO,CAACW,IAAI,CAAC;YAAA,OAAMkB,CAAC,CAACnB,KAAK,CAAC,CAAC;UAAA,EAAC;QACtC,CAAC,CAAC;QAEFI,EAAE,CAAC,sDAAsD,EAAE,YAAM;UAC/D,IAAMe,CAAC,GAAG,IAAIpC,aAAM,CAAC,CAAC;UACtB,IAAMO,OAAO,GAAG6B,CAAC,CAAC5B,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;UAEvDH,aAAa,CAACgE,UAAU,GAAG,CAAC;UAC5BhE,aAAa,CAACuB,IAAI,CAAC,MAAM,CAAC;UAC1Bb,gBAAgB,CAAC;YAACI,UAAU,EAAE,GAAG;YAAEE,aAAa,EAAE;UAAc,CAAC,CAAC;UAElE,OAAO0C,sBAAM,CAACC,UAAU,CAAChB,OAAO,CAAC,CAACW,IAAI,CAAC,UAACsB,MAAM,EAAK;YACjDlB,sBAAM,CAACmB,UAAU,CAACD,MAAM,EAAEK,oBAAa,CAAC;YACxCvB,sBAAM,CAACO,KAAK,CAACW,MAAM,CAACD,IAAI,EAAE,GAAG,CAAC;YAC9BjB,sBAAM,CAACqB,KAAK,CAACH,MAAM,CAACA,MAAM,EAAE,cAAc,CAAC;YAE3C,OAAOJ,CAAC,CAACnB,KAAK,CAAC,CAAC;UAClB,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFtD,QAAQ,CAAC,UAAU,EAAE,YAAM;MACzB0D,EAAE,CAAC,mBAAmB,EAAE;QAAA,OAAMxD,MAAM,CAACoD,KAAK,CAAC,CAAC,CAACC,IAAI,CAAC;UAAA,OAAMI,sBAAM,CAAC4B,MAAM,CAACtF,aAAa,CAACqD,KAAK,CAAC;QAAA,EAAC;MAAA,EAAC;MAE5FI,EAAE,CAAC,gCAAgC,EAAE;QAAA,OACnCN,QAAA,CAAA7D,OAAA,CAAQiG,GAAG,CAAC,CACV7B,sBAAM,CAACC,UAAU,CACf1D,MAAM,CAACoD,KAAK,CAAC;UAACsB,IAAI,EAAE;QAAI,CAAC,CAAC,EAC1B,oEACF,CAAC,EACD1E,MAAM,CAACoD,KAAK,CAAC;UAACsB,IAAI,EAAE;QAAI,CAAC,CAAC,CAC3B,CAAC;MAAA,EAAC;MAELlB,EAAE,CAAC,kBAAkB,EAAE;QAAA,OACrBxD,MAAM,CACHoD,KAAK,CAAC;UACLsB,IAAI,EAAE,IAAI;UACVC,MAAM,EAAE;QACV,CAAC,CAAC,CACDtB,IAAI,CAAC;UAAA,OAAMI,sBAAM,CAAC8B,UAAU,CAACxF,aAAa,CAACqD,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC;QAAA,EAAC;MAAA,EAAC;MAE/EI,EAAE,CAAC,2BAA2B,EAAE;QAAA,OAC9BxD,MAAM,CACHoD,KAAK,CAAC;UACLsB,IAAI,EAAE,IAAI;UACVC,MAAM,EAAE;QACV,CAAC,CAAC,CACDtB,IAAI,CAAC;UAAA,OAAMI,sBAAM,CAAC8B,UAAU,CAACxF,aAAa,CAACqD,KAAK,EAAE,IAAI,EAAE,kBAAkB,CAAC;QAAA,EAAC;MAAA,EAAC;MAElFI,EAAE,CAAC,4CAA4C,EAAE,YAAM;QACrD,IAAMgC,EAAE,GAAGxF,MAAM,CAACoD,KAAK,CAAC,CAAC;QAEzBrD,aAAa,CAACgE,UAAU,GAAG,CAAC;QAC5B,IAAM0B,EAAE,GAAGzF,MAAM,CAACoD,KAAK,CAAC,CAAC;QAEzB,OAAOF,QAAA,CAAA7D,OAAA,CAAQiG,GAAG,CAAC,CAACE,EAAE,EAAEC,EAAE,CAAC,CAAC;MAC9B,CAAC,CAAC;MAEFjC,EAAE,CAAC,2EAA2E,EAAE,YAAM;QACpF,IAAMkC,eAAe,GAAG,IAAIvD,aAAM,CAAC,CAAC;QACpC,IAAMyB,WAAW,GAAG8B,eAAe,CAAC/C,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;QAEzEH,aAAa,CAACgE,UAAU,GAAG,CAAC;QAC5BhE,aAAa,CAACuB,IAAI,CAAC,MAAM,CAAC;QAC1Bb,gBAAgB,CAAC,CAAC;QAElB,OAAOmD,WAAW,CAACP,IAAI,CAAC,YAAM;UAC5B,IAAMsC,GAAG,GAAG1D,cAAK,CAAC0D,GAAG,CAAC,CAAC;UAEvBD,eAAe,CAACE,EAAE,CAAC,OAAO,EAAED,GAAG,CAAC;UAChC5F,aAAa,CAACqD,KAAK,GAAG;YAAA,OACpB,IAAAF,QAAA,CAAA7D,OAAA,CAAY,YAAM;cAChB;YAAA,CACD,CAAC;UAAA;UACJU,aAAa,CAAC8F,kBAAkB,CAAC,OAAO,CAAC;UAEzC,IAAMC,YAAY,GAAGJ,eAAe,CAACtC,KAAK,CAAC,CAAC;UAE5CtB,IAAI,CAACiE,mBAAmB,CAAC7F,WAAW,CAACyD,eAAe,CAAC;UAErD,OAAOmC,YAAY,CAACzC,IAAI,CAAC,YAAM;YAC7BI,sBAAM,CAAC4B,MAAM,CAACM,GAAG,CAAC;YAClBlC,sBAAM,CAAC8B,UAAU,CAACI,GAAG,EAAE;cACrBjB,IAAI,EAAE,IAAI;cACVC,MAAM,EAAE;YACV,CAAC,CAAC;UACJ,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFnB,EAAE,CAAC,8IAA8I,EAAE,YAAM;QACvJ,IAAMkC,eAAe,GAAG,IAAIvD,aAAM,CAAC,CAAC;QACpC,IAAMyB,WAAW,GAAG8B,eAAe,CAAC/C,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;QAEzEH,aAAa,CAACgE,UAAU,GAAG,CAAC;QAC5BhE,aAAa,CAACuB,IAAI,CAAC,MAAM,CAAC;QAC1Bb,gBAAgB,CAAC,CAAC;QAElB,OAAOmD,WAAW,CAACP,IAAI,CAAC,YAAM;UAC5B,IAAMsC,GAAG,GAAG1D,cAAK,CAAC0D,GAAG,CAAC,CAAC;UAEvBD,eAAe,CAACE,EAAE,CAAC,OAAO,EAAED,GAAG,CAAC;UAChC5F,aAAa,CAACqD,KAAK,GAAG;YAAA,OACpB,IAAAF,QAAA,CAAA7D,OAAA,CAAY,YAAM;cAChB;YAAA,CACD,CAAC;UAAA;UACJU,aAAa,CAAC8F,kBAAkB,CAAC,OAAO,CAAC;UAEzC,IAAMC,YAAY,GAAGJ,eAAe,CAACtC,KAAK,CAAC;YAACsB,IAAI,EAAE,IAAI;YAAEC,MAAM,EAAE;UAAkB,CAAC,CAAC;UAEpF7C,IAAI,CAACiE,mBAAmB,CAAC7F,WAAW,CAACyD,eAAe,CAAC;UAErD,OAAOmC,YAAY,CAACzC,IAAI,CAAC,YAAM;YAC7BI,sBAAM,CAAC4B,MAAM,CAACM,GAAG,CAAC;YAClBlC,sBAAM,CAAC8B,UAAU,CAACI,GAAG,EAAE;cACrBjB,IAAI,EAAE,IAAI;cACVC,MAAM,EAAE;YACV,CAAC,CAAC;UACJ,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFnB,EAAE,CAAC,qIAAqI,EAAE,YAAM;QAC9I,IAAMkC,eAAe,GAAG,IAAIvD,aAAM,CAAC,CAAC;QACpC,IAAMyB,WAAW,GAAG8B,eAAe,CAAC/C,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;QAEzEH,aAAa,CAACgE,UAAU,GAAG,CAAC;QAC5BhE,aAAa,CAACuB,IAAI,CAAC,MAAM,CAAC;QAC1Bb,gBAAgB,CAAC,CAAC;QAElB,OAAOmD,WAAW,CAACP,IAAI,CAAC,YAAM;UAC5B,IAAMsC,GAAG,GAAG1D,cAAK,CAAC0D,GAAG,CAAC,CAAC;UAEvBD,eAAe,CAACE,EAAE,CAAC,OAAO,EAAED,GAAG,CAAC;UAChC5F,aAAa,CAACqD,KAAK,GAAG;YAAA,OACpB,IAAAF,QAAA,CAAA7D,OAAA,CAAY,YAAM;cAChB;YAAA,CACD,CAAC;UAAA;UACJU,aAAa,CAAC8F,kBAAkB,CAAC,OAAO,CAAC;UAEzC,IAAMC,YAAY,GAAGJ,eAAe,CAACtC,KAAK,CAAC;YAACsB,IAAI,EAAE,IAAI;YAAEC,MAAM,EAAE;UAAM,CAAC,CAAC;UAExE7C,IAAI,CAACiE,mBAAmB,CAAC7F,WAAW,CAACyD,eAAe,CAAC;UAErD,OAAOmC,YAAY,CAACzC,IAAI,CAAC,YAAM;YAC7BI,sBAAM,CAAC4B,MAAM,CAACM,GAAG,CAAC;YAClBlC,sBAAM,CAAC8B,UAAU,CAACI,GAAG,EAAE;cACrBjB,IAAI,EAAE,IAAI;cACVC,MAAM,EAAE;YACV,CAAC,CAAC;UACJ,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFnB,EAAE,CAAC,qIAAqI,EAAE,YAAM;QAC9I,IAAMkC,eAAe,GAAG,IAAIvD,aAAM,CAAC,CAAC;QACpC,IAAMyB,WAAW,GAAG8B,eAAe,CAAC/C,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;QAEzEH,aAAa,CAACgE,UAAU,GAAG,CAAC;QAC5BhE,aAAa,CAACuB,IAAI,CAAC,MAAM,CAAC;QAC1Bb,gBAAgB,CAAC,CAAC;QAElB,OAAOmD,WAAW,CAACP,IAAI,CAAC,YAAM;UAC5B,IAAMsC,GAAG,GAAG1D,cAAK,CAAC0D,GAAG,CAAC,CAAC;UAEvBD,eAAe,CAACE,EAAE,CAAC,OAAO,EAAED,GAAG,CAAC;UAChC5F,aAAa,CAACqD,KAAK,GAAG;YAAA,OACpB,IAAAF,QAAA,CAAA7D,OAAA,CAAY,YAAM;cAChB;YAAA,CACD,CAAC;UAAA;UACJU,aAAa,CAAC8F,kBAAkB,CAAC,OAAO,CAAC;UAEzC,IAAMC,YAAY,GAAGJ,eAAe,CAACtC,KAAK,CAAC;YAACsB,IAAI,EAAE;UAAI,CAAC,CAAC;UAExD5C,IAAI,CAACiE,mBAAmB,CAAC7F,WAAW,CAACyD,eAAe,CAAC;UAErD,OAAOmC,YAAY,CAACzC,IAAI,CAAC,YAAM;YAC7BI,sBAAM,CAAC4B,MAAM,CAACM,GAAG,CAAC;YAClBlC,sBAAM,CAAC8B,UAAU,CAACI,GAAG,EAAE;cACrBjB,IAAI,EAAE,IAAI;cACVC,MAAM,EAAE;YACV,CAAC,CAAC;UACJ,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;MAEF,CACE;QACEqB,WAAW,EAAE,iEAAiE;QAC9EC,YAAY,EAAE;UAACvB,IAAI,EAAE,IAAI;UAAEC,MAAM,EAAE;QAA+B,CAAC;QACnEuB,YAAY,EAAE,IAAI;QAClBC,cAAc,EAAE;MAClB,CAAC,EACD;QACEH,WAAW,EACT,6EAA6E;QAC/EC,YAAY,EAAEtF,SAAS;QACvBuF,YAAY,EAAE,IAAI;QAClBC,cAAc,EAAE;MAClB,CAAC,CACF,CAAChH,OAAO,CAAC,UAAAiH,KAAA,EAA+D;QAAA,IAA7DJ,WAAW,GAAAI,KAAA,CAAXJ,WAAW;UAAEC,YAAY,GAAAG,KAAA,CAAZH,YAAY;UAAEC,YAAY,GAAAE,KAAA,CAAZF,YAAY;UAAEC,cAAc,GAAAC,KAAA,CAAdD,cAAc;QACjE3C,EAAE,CAACwC,WAAW,mBAAAK,kBAAA,CAAAhH,OAAA,eAAAiH,YAAA,CAAAjH,OAAA,CAAAkH,IAAA,CAAE,SAAAC,QAAA;UAAA,IAAAjC,CAAA,EAAAkC,cAAA,EAAAC,YAAA,EAAAC,QAAA,EAAAC,MAAA;UAAA,OAAAN,YAAA,CAAAjH,OAAA,CAAAwH,IAAA,WAAAC,QAAA;YAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;cAAA;gBACRzC,CAAC,GAAG,IAAIpC,aAAM,CAAC,CAAC;gBAGtB;gBACMuE,YAAY,GAAGvE,aAAM,CAACa,uBAAuB;gBACnDb,aAAM,CAACa,uBAAuB,GAAGf,cAAK,CAACC,IAAI,CAAC,CAAC,CAACE,SAAS,CACrD;kBAAA,OACE,YAAmB;oBAAA,SAAA6E,KAAA,GAAAjI,SAAA,CAAAC,MAAA,EAANoC,IAAI,OAAAiB,KAAA,CAAA2E,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;sBAAJ7F,IAAI,CAAA6F,KAAA,IAAAlI,SAAA,CAAAkI,KAAA;oBAAA;oBACfT,cAAc,OAAAjE,WAAA,CAAAnD,OAAA,EAAOoD,gCAAa,EAAIpB,IAAI,CAAC;oBAE3C,OAAOoF,cAAc;kBACvB,CAAC;gBAAA,CACL,CAAC;;gBAED;gBACAlC,CAAC,CAAC5B,IAAI,CAAC,kBAAkB,EAAEzC,WAAW,CAAC;;gBAEvC;gBACAuG,cAAc,CAAC1C,UAAU,GAAG,CAAC;gBAEvB4C,QAAQ,GAAG1E,cAAK,CAAC0D,GAAG,CAAC,CAAC;gBAC5BpB,CAAC,CAACqB,EAAE,CAAC,OAAO,EAAEe,QAAQ,CAAC;;gBAEvB;gBAAAG,QAAA,CAAAE,IAAA;gBAAA,OACqBzC,CAAC,CAACnB,KAAK,CAAC6C,YAAY,CAAC;cAAA;gBAApCW,MAAM,GAAAE,QAAA,CAAAK,IAAA;gBAEZ;gBACA1D,sBAAM,CAACO,KAAK,CAAC4C,MAAM,CAAClC,IAAI,EAAEwB,YAAY,CAAC;gBACvCzC,sBAAM,CAACO,KAAK,CAAC4C,MAAM,CAACjC,MAAM,EAAEwB,cAAc,CAAC;;gBAE3C;gBACA1C,sBAAM,CAAC2D,UAAU,CAACT,QAAQ,CAAC;gBAC3BlD,sBAAM,CAAC8B,UAAU,CAACoB,QAAQ,EAAE;kBAC1BjC,IAAI,EAAEwB,YAAY;kBAClBvB,MAAM,EAAEwB;gBACV,CAAC,CAAC;;gBAEF;gBACA1C,sBAAM,CAAC2D,UAAU,CAACX,cAAc,CAACrD,KAAK,CAAC;gBACvCK,sBAAM,CAAC8B,UAAU,CAACkB,cAAc,CAACrD,KAAK,EAAE8C,YAAY,EAAEC,cAAc,CAAC;;gBAErE;gBACAhE,aAAM,CAACa,uBAAuB,GAAG0D,YAAY;cAAC;cAAA;gBAAA,OAAAI,QAAA,CAAAO,IAAA;YAAA;UAAA,GAAAb,OAAA;QAAA,CAC/C,GAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF1G,QAAQ,CAAC,SAAS,EAAE,YAAM;MACxBA,QAAQ,CAAC,0CAA0C,EAAE,YAAM;QACzD0D,EAAE,CAAC,OAAO,EAAE,YAAM;UAChBzD,aAAa,CAACgE,UAAU,GAAG,CAAC;UAE5B,OAAON,sBAAM,CACVC,UAAU,CAAC1D,MAAM,CAACmB,IAAI,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,CACvDkC,IAAI,CAAC,YAAM;YACVtD,aAAa,CAACgE,UAAU,GAAG,CAAC;YAE5B,OAAON,sBAAM,CAACC,UAAU,CAAC1D,MAAM,CAACmB,IAAI,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC;UACvE,CAAC,CAAC,CACDkC,IAAI,CAAC,YAAM;YACVtD,aAAa,CAACgE,UAAU,GAAG,CAAC;YAE5B,OAAON,sBAAM,CAACC,UAAU,CAAC1D,MAAM,CAACmB,IAAI,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC;UACvE,CAAC,CAAC,CACDkC,IAAI,CAAC,YAAM;YACVtD,aAAa,CAACgE,UAAU,GAAG,CAAC;YAE5B,OAAO/D,MAAM,CAACmB,IAAI,CAAC,OAAO,CAAC;UAC7B,CAAC,CAAC;QACN,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFqC,EAAE,CAAC,eAAe,EAAE,YAAM;QACxBxD,MAAM,CAACmB,IAAI,CAAC,kBAAkB,CAAC;QAC/BsC,sBAAM,CAAC8B,UAAU,CAACxF,aAAa,CAACoB,IAAI,EAAE,kBAAkB,CAAC;MAC3D,CAAC,CAAC;MAEFqC,EAAE,CAAC,iCAAiC,EAAE,YAAM;QAC1CxD,MAAM,CAACmB,IAAI,CAAC;UACVmG,IAAI,EAAE;QACR,CAAC,CAAC;QACF7D,sBAAM,CAAC8B,UAAU,CAACxF,aAAa,CAACoB,IAAI,EAAE,eAAe,CAAC;MACxD,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFrB,QAAQ,CAAC,YAAY,EAAE,YAAM;MAC3BA,QAAQ,CAAC,kCAAkC,EAAE,YAAM;QACjD,IAAAyH,SAAA,CAAAlI,OAAA,EACE;UACEmI,QAAQ,EAAE,IAAI;UACd,uBAAuB,EAAE,IAAI;UAC7B,2EAA2E,EAAE;QAC/E,CAAC,EACD,UAAC9C,IAAI,EAAEC,MAAM,EAAK;UAChBnB,EAAE,eAAAiE,MAAA,CAAe/C,IAAI,kBAAA+C,MAAA,CAAe9C,MAAM,GAAI,YAAM;YAClD,IAAMgB,GAAG,GAAG1D,cAAK,CAAC0D,GAAG,CAAC,CAAC;YAEvB3F,MAAM,CAAC4F,EAAE,CAAC,OAAO,EAAED,GAAG,CAAC;YAEvB5F,aAAa,CAACuB,IAAI,CAAC,OAAO,EAAE;cAC1BoD,IAAI,EAAE,IAAI;cACVC,MAAM,EAANA;YACF,CAAC,CAAC;YACFlB,sBAAM,CAAC4B,MAAM,CAACM,GAAG,CAAC;YAClBlC,sBAAM,CAAC8B,UAAU,CAACI,GAAG,EAAE;cACrBjB,IAAI,EAAJA,IAAI;cACJC,MAAM,EAANA;YACF,CAAC,CAAC;UACJ,CAAC,CAAC;QACJ,CACF,CAAC;MACH,CAAC,CAAC;MAEF7E,QAAQ,CAAC,kCAAkC,EAAE,YAAM;QACjD0D,EAAE,CAAC,+BAA+B,EAAE,YAAM;UACxC,IAAMkB,IAAI,GAAG,IAAI;UACjB,IAAMC,MAAM,GAAG,kBAAkB;UACjC,IAAMgB,GAAG,GAAG1D,cAAK,CAAC0D,GAAG,CAAC,CAAC;UAEvB3F,MAAM,CAAC4F,EAAE,CAAC,OAAO,EAAED,GAAG,CAAC;UAEvB5F,aAAa,CAACuB,IAAI,CAAC,OAAO,EAAE;YAC1BoD,IAAI,EAAJA,IAAI;YACJC,MAAM,EAANA;UACF,CAAC,CAAC;UACFlB,sBAAM,CAAC4B,MAAM,CAACM,GAAG,CAAC;UAClBlC,sBAAM,CAAC8B,UAAU,CAACI,GAAG,EAAE;YACrBjB,IAAI,EAAJA,IAAI;YACJC,MAAM,EAANA;UACF,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF7E,QAAQ,CAAC,cAAc,EAAE,YAAM;MAC7B,IAAI6F,GAAG;MAEP9D,UAAU,CAAC,YAAM;QACf8D,GAAG,GAAG1D,cAAK,CAAC0D,GAAG,CAAC,CAAC;QACjB3F,MAAM,CAAC4F,EAAE,CAAC,SAAS,EAAED,GAAG,CAAC;MAC3B,CAAC,CAAC;MAEFnC,EAAE,CAAC,2CAA2C,EAAE,YAAM;QACpDzD,aAAa,CAACuB,IAAI,CAAC,SAAS,EAAE;UAC5BC,IAAI,EAAE,IAAAC,UAAA,CAAAnC,OAAA,EAAe;YACnBqI,EAAE,EAAE;UACN,CAAC;QACH,CAAC,CAAC;QAEFjE,sBAAM,CAAC4B,MAAM,CAACM,GAAG,CAAC;MACpB,CAAC,CAAC;MAEFnC,EAAE,CAAC,0BAA0B,EAAE,YAAM;QACnCzD,aAAa,CAACuB,IAAI,CAAC,SAAS,EAAE;UAC5BC,IAAI,EAAE,IAAAC,UAAA,CAAAnC,OAAA,EAAe;YACnBqI,EAAE,EAAE,QAAQ;YACZjG,IAAI,EAAE;UACR,CAAC;QACH,CAAC,CAAC;QAEFgC,sBAAM,CAAC8B,UAAU,CAACI,GAAG,EAAE;UACrBpE,IAAI,EAAE;YACJmG,EAAE,EAAE,QAAQ;YACZjG,IAAI,EAAE;UACR;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;MAEF+B,EAAE,CAAC,gEAAgE,EAAE,YAAM;QACzEzD,aAAa,CAACuB,IAAI,CAAC,SAAS,EAAE;UAC5BC,IAAI,EAAE,IAAAC,UAAA,CAAAnC,OAAA,EAAe;YACnBoC,IAAI,EAAE,aAAa;YACnBnB,UAAU,EAAE,0CAA0C;YACtDqH,OAAO,EAAE,sCAAsC;YAC/CpG,IAAI,EAAE;cACJqG,SAAS,EAAE,iBAAiB;cAC5BC,MAAM,EAAE,sCAAsC;cAC9CC,QAAQ,EAAE;YACZ;UACF,CAAC;QACH,CAAC,CAAC;QAEFrE,sBAAM,CAAC8B,UAAU,CAACI,GAAG,EAAE;UACrBpE,IAAI,EAAE;YACJE,IAAI,EAAE,aAAa;YACnBnB,UAAU,EAAE,0CAA0C;YACtDqH,OAAO,EAAE,sCAAsC;YAC/CpG,IAAI,EAAE;cACJqG,SAAS,EAAE,iBAAiB;cAC5BC,MAAM,EAAE,sCAAsC;cAC9CC,QAAQ,EAAE;YACZ;UACF;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFtE,EAAE,CAAC,wCAAwC,EAAE,YAAM;QACjDvB,cAAK,CAAC0D,GAAG,CAAC3F,MAAM,EAAE,cAAc,CAAC;QACjCD,aAAa,CAACuB,IAAI,CAAC,SAAS,EAAE;UAC5BC,IAAI,EAAE,IAAAC,UAAA,CAAAnC,OAAA,EAAe;YACnBoC,IAAI,EAAE,aAAa;YACnBkG,OAAO,EAAE,WAAW;YACpBrH,UAAU,EAAE;UACd,CAAC;QACH,CAAC,CAAC;QACFmD,sBAAM,CAAC4B,MAAM,CAACrF,MAAM,CAAC+H,YAAY,CAAC;MACpC,CAAC,CAAC;MAEFvE,EAAE,CAAC,+CAA+C,EAAE,YAAM;QACxDvB,cAAK,CAAC0D,GAAG,CAAC3F,MAAM,EAAE,cAAc,CAAC;QACjCD,aAAa,CAACuB,IAAI,CAAC,SAAS,EAAE;UAC5BC,IAAI,EAAE,IAAAC,UAAA,CAAAnC,OAAA,EAAe;YACnBoC,IAAI,EAAE,SAAS;YACfiG,EAAE,EAAE;UACN,CAAC;QACH,CAAC,CAAC;QACFjE,sBAAM,CAACuE,SAAS,CAAChI,MAAM,CAAC+H,YAAY,CAAC;MACvC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFjI,QAAQ,CAAC,eAAe,EAAE,YAAM;MAC9B0D,EAAE,CAAC,mBAAmB,EAAE;QAAA,OACtBC,sBAAM,CAACC,UAAU,CAAC1D,MAAM,CAAC+H,YAAY,CAAC,CAAC,EAAE,qBAAqB,CAAC;MAAA,EAAC;MAElEvE,EAAE,CAAC,uDAAuD,EAAE;QAAA,OAC1DxD,MAAM,CACH+H,YAAY,CAAC;UACZxG,IAAI,EAAE;YACJoG,OAAO,EAAE,WAAW;YACpBrH,UAAU,EAAE;UACd;QACF,CAAC,CAAC,CACD+C,IAAI,CAAC,YAAM;UACVI,sBAAM,CAAC8B,UAAU,CACfxF,aAAa,CAACoB,IAAI,EAClB,IAAAK,UAAA,CAAAnC,OAAA,EAAe;YACboC,IAAI,EAAEE,wBAAa,CAACsG,SAAS;YAC7B3H,UAAU,EAAE,cAAc;YAC1BqH,OAAO,EAAE;UACX,CAAC,CACH,CAAC;QACH,CAAC,CAAC;MAAA,EAAC;IACT,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["flaky","mochaMethod","envVar","skip","shouldSkip","skipInBrowser"],"sources":["mocha-helpers.
|
|
1
|
+
{"version":3,"names":["flaky","mochaMethod","envVar","skip","shouldSkip","skipInBrowser"],"sources":["mocha-helpers.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\ntype MochaMethod = ((...args: any[]) => any) & {\n skip?: (...args: any[]) => any;\n};\n\nexport function flaky(mochaMethod: MochaMethod, envVar?: string) {\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n const shouldSkip = envVar && envVar !== 'false' && !!envVar;\n\n return shouldSkip ? mochaMethod.skip : mochaMethod;\n}\n\nexport function skipInBrowser(mochaMethod: MochaMethod) {\n return mochaMethod;\n}\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;;AAMO,SAASA,KAAKA,CAACC,WAAwB,EAAEC,MAAe,EAAE;EAC/D,IAAI,CAACD,WAAW,CAACE,IAAI,EAAE;IACrB,OAAOF,WAAW;EACpB;EAEA,IAAMG,UAAU,GAAGF,MAAM,IAAIA,MAAM,KAAK,OAAO,IAAI,CAAC,CAACA,MAAM;EAE3D,OAAOE,UAAU,GAAGH,WAAW,CAACE,IAAI,GAAGF,WAAW;AACpD;AAEO,SAASI,aAAaA,CAACJ,WAAwB,EAAE;EACtD,OAAOA,WAAW;AACpB","ignoreList":[]}
|
|
@@ -13,11 +13,10 @@ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/pr
|
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Uses Promise#then to run some number of ticks
|
|
16
|
-
* @param
|
|
17
|
-
* @returns {Promise}
|
|
16
|
+
* @param count
|
|
18
17
|
*/
|
|
19
18
|
function promiseTick(count) {
|
|
20
|
-
var promise = _promise.default.resolve();
|
|
19
|
+
var promise = _promise.default.resolve(undefined);
|
|
21
20
|
while (count > 1) {
|
|
22
21
|
promise = promise.then(function () {
|
|
23
22
|
return promiseTick(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["promiseTick","count","promise","_promise","default","resolve","then"],"sources":["promise-tick.
|
|
1
|
+
{"version":3,"names":["promiseTick","count","promise","_promise","default","resolve","undefined","then"],"sources":["promise-tick.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * Uses Promise#then to run some number of ticks\n * @param count\n */\nexport default function promiseTick(count: number): Promise<void> {\n let promise = Promise.resolve<void>(undefined);\n\n while (count > 1) {\n promise = promise.then(() => promiseTick(1));\n count -= 1;\n }\n\n return promise;\n}\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACe,SAASA,WAAWA,CAACC,KAAa,EAAiB;EAChE,IAAIC,OAAO,GAAGC,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAAOC,SAAS,CAAC;EAE9C,OAAOL,KAAK,GAAG,CAAC,EAAE;IAChBC,OAAO,GAAGA,OAAO,CAACK,IAAI,CAAC;MAAA,OAAMP,WAAW,CAAC,CAAC,CAAC;IAAA,EAAC;IAC5CC,KAAK,IAAI,CAAC;EACZ;EAEA,OAAOC,OAAO;AAChB","ignoreList":[]}
|
|
@@ -11,7 +11,10 @@ export function getMobiusSocketInstance(webex, mobiusSocketConfig) {
|
|
|
11
11
|
if (mobiusSocketInstance) {
|
|
12
12
|
return mobiusSocketInstance;
|
|
13
13
|
}
|
|
14
|
-
mobiusSocketInstance = new MobiusSocket(webex,
|
|
14
|
+
mobiusSocketInstance = new MobiusSocket(webex, {
|
|
15
|
+
...config.mobiusSocket,
|
|
16
|
+
...mobiusSocketConfig,
|
|
17
|
+
});
|
|
15
18
|
return mobiusSocketInstance;
|
|
16
19
|
}
|
|
17
20
|
export function resetMobiusSocketInstance() {
|
|
@@ -730,7 +730,9 @@ class MobiusSocket extends EventEmitter {
|
|
|
730
730
|
return this._getEventHandlers(eventType)
|
|
731
731
|
.reduce((promise, handler) => promise.then(() => {
|
|
732
732
|
const { namespace, name } = handler;
|
|
733
|
-
return new Promise((resolve) =>
|
|
733
|
+
return new Promise((resolve) => {
|
|
734
|
+
resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data));
|
|
735
|
+
}).catch((reason) => this.logger.error(`${MOBIUS_SOCKET_NAMESPACE}: error occurred in autowired event handler for ${eventType} from ${sessionId}`, reason));
|
|
734
736
|
}), Promise.resolve())
|
|
735
737
|
.then(() => {
|
|
736
738
|
this._emit(sessionId, 'event', envelope);
|