@appium/base-driver 8.5.7 → 8.7.0

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.
Files changed (74) hide show
  1. package/build/lib/basedriver/capabilities.js +2 -2
  2. package/build/lib/basedriver/commands/execute.d.ts +11 -0
  3. package/build/lib/basedriver/commands/execute.d.ts.map +1 -0
  4. package/build/lib/basedriver/commands/execute.js +62 -0
  5. package/build/lib/basedriver/commands/index.d.ts +1 -1
  6. package/build/lib/basedriver/commands/index.d.ts.map +1 -1
  7. package/build/lib/basedriver/commands/index.js +5 -2
  8. package/build/lib/basedriver/commands/log.js +2 -4
  9. package/build/lib/basedriver/core.d.ts +11 -0
  10. package/build/lib/basedriver/core.d.ts.map +1 -1
  11. package/build/lib/basedriver/core.js +6 -1
  12. package/build/lib/basedriver/helpers.js +2 -2
  13. package/build/lib/express/server.d.ts +70 -7
  14. package/build/lib/express/server.d.ts.map +1 -1
  15. package/build/lib/express/server.js +19 -16
  16. package/build/lib/express/websocket.d.ts +12 -30
  17. package/build/lib/express/websocket.d.ts.map +1 -1
  18. package/build/lib/express/websocket.js +6 -4
  19. package/build/lib/index.d.ts +12 -180
  20. package/build/lib/index.d.ts.map +1 -1
  21. package/build/lib/index.js +107 -80
  22. package/build/lib/jsonwp-proxy/protocol-converter.js +2 -4
  23. package/build/lib/jsonwp-proxy/proxy.js +3 -7
  24. package/build/lib/protocol/index.d.ts +3 -1
  25. package/build/lib/protocol/index.js +13 -1
  26. package/build/lib/protocol/protocol.d.ts +8 -4
  27. package/build/lib/protocol/protocol.d.ts.map +1 -1
  28. package/build/lib/protocol/protocol.js +7 -7
  29. package/build/lib/protocol/routes.js +2 -6
  30. package/build/tsconfig.tsbuildinfo +1 -1
  31. package/lib/basedriver/commands/execute.js +65 -0
  32. package/lib/basedriver/commands/index.js +3 -1
  33. package/lib/basedriver/core.js +15 -0
  34. package/lib/express/server.js +126 -36
  35. package/lib/express/websocket.js +13 -11
  36. package/lib/index.js +19 -61
  37. package/lib/protocol/index.js +4 -0
  38. package/lib/protocol/protocol.js +10 -3
  39. package/package.json +17 -15
  40. package/build/test/basedriver/README.md +0 -5
  41. package/build/test/basedriver/driver-e2e-tests.js +0 -413
  42. package/build/test/basedriver/driver-tests.js +0 -572
  43. package/build/test/basedriver/index.js +0 -26
  44. package/build/test/e2e/basedriver/driver.e2e.spec.js +0 -15
  45. package/build/test/e2e/basedriver/helpers.e2e.spec.js +0 -192
  46. package/build/test/e2e/basedriver/websockets.e2e.spec.js +0 -87
  47. package/build/test/e2e/express/server.e2e.spec.js +0 -159
  48. package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +0 -59
  49. package/build/test/e2e/protocol/fake-driver.js +0 -163
  50. package/build/test/e2e/protocol/helpers.js +0 -25
  51. package/build/test/e2e/protocol/protocol.e2e.spec.js +0 -1186
  52. package/build/test/helpers.js +0 -55
  53. package/build/test/unit/basedriver/capabilities.spec.js +0 -672
  54. package/build/test/unit/basedriver/capability.spec.js +0 -353
  55. package/build/test/unit/basedriver/commands/event.spec.js +0 -110
  56. package/build/test/unit/basedriver/commands/log.spec.js +0 -92
  57. package/build/test/unit/basedriver/device-settings.spec.js +0 -97
  58. package/build/test/unit/basedriver/driver.spec.js +0 -15
  59. package/build/test/unit/basedriver/helpers.spec.js +0 -151
  60. package/build/test/unit/basedriver/timeout.spec.js +0 -135
  61. package/build/test/unit/express/server.spec.js +0 -155
  62. package/build/test/unit/express/static.spec.js +0 -26
  63. package/build/test/unit/jsonwp-proxy/mock-request.js +0 -91
  64. package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +0 -171
  65. package/build/test/unit/jsonwp-proxy/proxy.spec.js +0 -292
  66. package/build/test/unit/jsonwp-proxy/url.spec.js +0 -165
  67. package/build/test/unit/jsonwp-status/status.spec.js +0 -34
  68. package/build/test/unit/protocol/errors.spec.js +0 -390
  69. package/build/test/unit/protocol/routes.spec.js +0 -80
  70. package/build/test/unit/protocol/validator.spec.js +0 -149
  71. package/test/basedriver/README.md +0 -5
  72. package/test/basedriver/driver-e2e-tests.js +0 -386
  73. package/test/basedriver/driver-tests.js +0 -624
  74. package/test/basedriver/index.js +0 -6
@@ -1,26 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- Object.defineProperty(exports, "baseDriverE2ETests", {
9
- enumerable: true,
10
- get: function () {
11
- return _driverE2eTests.default;
12
- }
13
- });
14
- Object.defineProperty(exports, "baseDriverUnitTests", {
15
- enumerable: true,
16
- get: function () {
17
- return _driverTests.default;
18
- }
19
- });
20
-
21
- require("source-map-support/register");
22
-
23
- var _driverTests = _interopRequireDefault(require("./driver-tests"));
24
-
25
- var _driverE2eTests = _interopRequireDefault(require("./driver-e2e-tests"));
26
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9iYXNlZHJpdmVyL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5cbmltcG9ydCBiYXNlRHJpdmVyVW5pdFRlc3RzIGZyb20gJy4vZHJpdmVyLXRlc3RzJztcbmltcG9ydCBiYXNlRHJpdmVyRTJFVGVzdHMgZnJvbSAnLi9kcml2ZXItZTJlLXRlc3RzJztcblxuZXhwb3J0IHtiYXNlRHJpdmVyVW5pdFRlc3RzLCBiYXNlRHJpdmVyRTJFVGVzdHN9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0EifQ==
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _lib = _interopRequireDefault(require("../../../lib"));
8
-
9
- var _driverE2eTests = _interopRequireDefault(require("../../basedriver/driver-e2e-tests"));
10
-
11
- (0, _driverE2eTests.default)(_lib.default, {
12
- platformName: 'iOS',
13
- 'appium:deviceName': 'Delorean'
14
- });
15
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYXNlRHJpdmVyRTJFVGVzdHMiLCJCYXNlRHJpdmVyIiwicGxhdGZvcm1OYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9lMmUvYmFzZWRyaXZlci9kcml2ZXIuZTJlLnNwZWMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1vY2hhXG5cbmltcG9ydCBCYXNlRHJpdmVyIGZyb20gJy4uLy4uLy4uL2xpYic7XG5pbXBvcnQgYmFzZURyaXZlckUyRVRlc3RzIGZyb20gJy4uLy4uL2Jhc2Vkcml2ZXIvZHJpdmVyLWUyZS10ZXN0cyc7XG5iYXNlRHJpdmVyRTJFVGVzdHMoQmFzZURyaXZlciwge1xuICBwbGF0Zm9ybU5hbWU6ICdpT1MnLFxuICAnYXBwaXVtOmRldmljZU5hbWUnOiAnRGVsb3JlYW4nLFxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBOztBQUNBOztBQUNBLElBQUFBLHVCQUFBLEVBQW1CQyxZQUFuQixFQUErQjtFQUM3QkMsWUFBWSxFQUFFLEtBRGU7RUFFN0IscUJBQXFCO0FBRlEsQ0FBL0IifQ==
@@ -1,192 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _path = _interopRequireDefault(require("path"));
8
-
9
- var _url = _interopRequireDefault(require("url"));
10
-
11
- var _support = require("@appium/support");
12
-
13
- var _helpers = require("../../../lib/basedriver/helpers");
14
-
15
- var _http = _interopRequireDefault(require("http"));
16
-
17
- var _finalhandler = _interopRequireDefault(require("finalhandler"));
18
-
19
- var _serveStatic = _interopRequireDefault(require("serve-static"));
20
-
21
- var _contentDisposition = _interopRequireDefault(require("content-disposition"));
22
-
23
- var _bluebird = _interopRequireDefault(require("bluebird"));
24
-
25
- var _helpers2 = require("../../helpers");
26
-
27
- function getFixture(file) {
28
- return _path.default.resolve(__dirname, '..', 'fixtures', file);
29
- }
30
-
31
- describe('app download and configuration', function () {
32
- describe('configureApp', function () {
33
- it('should get the path for a local .app', async function () {
34
- let newAppPath = await (0, _helpers.configureApp)(getFixture('FakeIOSApp.app'), '.app');
35
- newAppPath.should.contain('FakeIOSApp.app');
36
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
37
- contents.should.eql('this is not really an app\n');
38
- });
39
- it('should get the path for a local .apk', async function () {
40
- let newAppPath = await (0, _helpers.configureApp)(getFixture('FakeAndroidApp.apk'), '.apk');
41
- newAppPath.should.contain('FakeAndroidApp.apk');
42
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
43
- contents.should.eql('this is not really an apk\n');
44
- });
45
- it('should unzip and get the path for a local .app.zip', async function () {
46
- let newAppPath = await (0, _helpers.configureApp)(getFixture('FakeIOSApp.app.zip'), '.app');
47
- newAppPath.should.contain('FakeIOSApp.app');
48
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
49
- contents.should.eql('this is not really an app\n');
50
- });
51
- it('should unzip and get the path for a local .ipa', async function () {
52
- let newAppPath = await (0, _helpers.configureApp)(getFixture('FakeIOSApp.ipa'), '.app');
53
- newAppPath.should.contain('FakeIOSApp.app');
54
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
55
- contents.should.eql('this is not really an app\n');
56
- });
57
- it('should fail for a bad zip file', async function () {
58
- await (0, _helpers.configureApp)(getFixture('BadZippedApp.zip'), '.app').should.be.rejectedWith(/PK/);
59
- });
60
- it('should fail if extensions do not match', async function () {
61
- await (0, _helpers.configureApp)(getFixture('FakeIOSApp.app'), '.wrong').should.be.rejectedWith(/did not have extension/);
62
- });
63
- it('should fail if zip file does not contain an app whose extension matches', async function () {
64
- await (0, _helpers.configureApp)(getFixture('FakeIOSApp.app.zip'), '.wrong').should.be.rejectedWith(/did not have extension/);
65
- });
66
- describe('should download an app from the web', function () {
67
- let port;
68
- let serverUrl;
69
- before(async function () {
70
- port = await (0, _helpers2.getTestPort)(true);
71
- serverUrl = `http://${_helpers2.TEST_HOST}:${port}`;
72
- });
73
- describe('server not available', function () {
74
- it('should handle server not available', async function () {
75
- await (0, _helpers.configureApp)(`${serverUrl}/FakeIOSApp.app.zip`, '.app').should.eventually.be.rejectedWith(/ECONNREFUSED/);
76
- });
77
- });
78
- describe('server available', function () {
79
- let server;
80
- before(function () {
81
- const dir = _path.default.resolve(__dirname, '..', 'fixtures');
82
-
83
- const serve = (0, _serveStatic.default)(dir, {
84
- index: false,
85
- setHeaders: (res, path) => {
86
- res.setHeader('Content-Disposition', (0, _contentDisposition.default)(path));
87
- }
88
- });
89
- server = _http.default.createServer(function (req, res) {
90
- if (req.url.indexOf('missing') !== -1) {
91
- res.writeHead(404);
92
- res.end();
93
- return;
94
- }
95
-
96
- const contentType = new URLSearchParams(_url.default.parse(req.url).search).get('content-type');
97
-
98
- if (contentType !== null) {
99
- res.setHeader('content-type', contentType);
100
- }
101
-
102
- serve(req, res, (0, _finalhandler.default)(req, res));
103
- });
104
- const close = server.close.bind(server);
105
-
106
- server.close = async function () {
107
- await _bluebird.default.delay(1000);
108
- return await new _bluebird.default((resolve, reject) => {
109
- server.on('close', resolve);
110
- close(err => {
111
- if (err) reject(err);
112
- });
113
- });
114
- };
115
-
116
- server.listen(port);
117
- });
118
- after(async function () {
119
- await server.close();
120
- });
121
- it('should download zip file', async function () {
122
- let newAppPath = await (0, _helpers.configureApp)(`${serverUrl}/FakeIOSApp.app.zip`, '.app');
123
- newAppPath.should.contain('FakeIOSApp.app');
124
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
125
- contents.should.eql('this is not really an app\n');
126
- });
127
- it('should download zip file with query string', async function () {
128
- let newAppPath = await (0, _helpers.configureApp)(`${serverUrl}/FakeIOSApp.app.zip?sv=abc&sr=def`, '.app');
129
- newAppPath.should.contain('.app');
130
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
131
- contents.should.eql('this is not really an app\n');
132
- });
133
- it('should download an app file', async function () {
134
- let newAppPath = await (0, _helpers.configureApp)(`${serverUrl}/FakeIOSApp.app`, '.app');
135
- newAppPath.should.contain('.app');
136
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
137
- contents.should.eql('this is not really an app\n');
138
- });
139
- it('should accept multiple extensions', async function () {
140
- let newAppPath = await (0, _helpers.configureApp)(`${serverUrl}/FakeIOSApp.app.zip`, ['.app', '.aab']);
141
- newAppPath.should.contain('FakeIOSApp.app');
142
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
143
- contents.should.eql('this is not really an app\n');
144
- });
145
- it('should download an apk file', async function () {
146
- let newAppPath = await (0, _helpers.configureApp)(`${serverUrl}/FakeAndroidApp.apk`, '.apk');
147
- newAppPath.should.contain('.apk');
148
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
149
- contents.should.eql('this is not really an apk\n');
150
- });
151
- it('should handle zip file that cannot be downloaded', async function () {
152
- await (0, _helpers.configureApp)(`${serverUrl}/missing/FakeIOSApp.app.zip`, '.app').should.eventually.be.rejected;
153
- });
154
- it('should handle invalid protocol', async function () {
155
- await (0, _helpers.configureApp)('file://C:/missing/FakeIOSApp.app.zip', '.app').should.eventually.be.rejectedWith(/is not supported/);
156
- await (0, _helpers.configureApp)(`ftp://${_helpers2.TEST_HOST}:${port}/missing/FakeIOSApp.app.zip`, '.app').should.eventually.be.rejectedWith(/is not supported/);
157
- });
158
- it('should handle missing file in Windows path format', async function () {
159
- await (0, _helpers.configureApp)('C:\\missing\\FakeIOSApp.app.zip', '.app').should.eventually.be.rejectedWith(/does not exist or is not accessible/);
160
- });
161
- it('should recognize zip mime types and unzip the downloaded file', async function () {
162
- let newAppPath = await (0, _helpers.configureApp)(`${serverUrl}/FakeAndroidApp.asd?content-type=${encodeURIComponent('application/zip')}`, '.apk');
163
- newAppPath.should.contain('FakeAndroidApp.apk');
164
- newAppPath.should.not.contain('.asd');
165
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
166
- contents.should.eql('this is not really an apk\n');
167
- });
168
- it('should recognize zip mime types with parameter and unzip the downloaded file', async function () {
169
- let newAppPath = await (0, _helpers.configureApp)(`${serverUrl}/FakeAndroidApp.asd?content-type=${encodeURIComponent('application/zip; parameter=value')}`, '.apk');
170
- newAppPath.should.contain('FakeAndroidApp.apk');
171
- newAppPath.should.not.contain('.asd');
172
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
173
- contents.should.eql('this is not really an apk\n');
174
- });
175
- it('should recognize zip mime types and unzip the downloaded file with query string', async function () {
176
- let newAppPath = await (0, _helpers.configureApp)(`${serverUrl}/FakeAndroidApp.asd?content-type=${encodeURIComponent('application/zip')}&sv=abc&sr=def`, '.apk');
177
- newAppPath.should.contain('FakeAndroidApp.apk');
178
- newAppPath.should.not.contain('.asd');
179
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
180
- contents.should.eql('this is not really an apk\n');
181
- });
182
- it('should treat an unknown mime type as an app', async function () {
183
- let newAppPath = await (0, _helpers.configureApp)(`${serverUrl}/FakeAndroidApp.apk?content-type=${encodeURIComponent('application/bip')}`, '.apk');
184
- newAppPath.should.contain('.apk');
185
- let contents = await _support.fs.readFile(newAppPath, 'utf8');
186
- contents.should.eql('this is not really an apk\n');
187
- });
188
- });
189
- });
190
- });
191
- });
192
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRGaXh0dXJlIiwiZmlsZSIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiZGVzY3JpYmUiLCJpdCIsIm5ld0FwcFBhdGgiLCJjb25maWd1cmVBcHAiLCJzaG91bGQiLCJjb250YWluIiwiY29udGVudHMiLCJmcyIsInJlYWRGaWxlIiwiZXFsIiwiYmUiLCJyZWplY3RlZFdpdGgiLCJwb3J0Iiwic2VydmVyVXJsIiwiYmVmb3JlIiwiZ2V0VGVzdFBvcnQiLCJURVNUX0hPU1QiLCJldmVudHVhbGx5Iiwic2VydmVyIiwiZGlyIiwic2VydmUiLCJzZXJ2ZVN0YXRpYyIsImluZGV4Iiwic2V0SGVhZGVycyIsInJlcyIsInNldEhlYWRlciIsImNvbnRlbnREaXNwb3NpdGlvbiIsImh0dHAiLCJjcmVhdGVTZXJ2ZXIiLCJyZXEiLCJ1cmwiLCJpbmRleE9mIiwid3JpdGVIZWFkIiwiZW5kIiwiY29udGVudFR5cGUiLCJVUkxTZWFyY2hQYXJhbXMiLCJwYXJzZSIsInNlYXJjaCIsImdldCIsImZpbmFsaGFuZGxlciIsImNsb3NlIiwiYmluZCIsIkIiLCJkZWxheSIsInJlamVjdCIsIm9uIiwiZXJyIiwibGlzdGVuIiwiYWZ0ZXIiLCJyZWplY3RlZCIsImVuY29kZVVSSUNvbXBvbmVudCIsIm5vdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvZTJlL2Jhc2Vkcml2ZXIvaGVscGVycy5lMmUuc3BlYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCB7ZnN9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge2NvbmZpZ3VyZUFwcH0gZnJvbSAnLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvaGVscGVycyc7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCBmaW5hbGhhbmRsZXIgZnJvbSAnZmluYWxoYW5kbGVyJztcbmltcG9ydCBzZXJ2ZVN0YXRpYyBmcm9tICdzZXJ2ZS1zdGF0aWMnO1xuaW1wb3J0IGNvbnRlbnREaXNwb3NpdGlvbiBmcm9tICdjb250ZW50LWRpc3Bvc2l0aW9uJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7VEVTVF9IT1NULCBnZXRUZXN0UG9ydH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XG5cbmZ1bmN0aW9uIGdldEZpeHR1cmUoZmlsZSkge1xuICAvLyBYWFg6IF9fZGlybmFtZSBkaXNhbGxvd2VkIGluIG5hdGl2ZSBFU01cbiAgcmV0dXJuIHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICdmaXh0dXJlcycsIGZpbGUpO1xufVxuXG5kZXNjcmliZSgnYXBwIGRvd25sb2FkIGFuZCBjb25maWd1cmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnY29uZmlndXJlQXBwJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2V0IHRoZSBwYXRoIGZvciBhIGxvY2FsIC5hcHAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgbmV3QXBwUGF0aCA9IGF3YWl0IGNvbmZpZ3VyZUFwcChnZXRGaXh0dXJlKCdGYWtlSU9TQXBwLmFwcCcpLCAnLmFwcCcpO1xuICAgICAgbmV3QXBwUGF0aC5zaG91bGQuY29udGFpbignRmFrZUlPU0FwcC5hcHAnKTtcbiAgICAgIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKG5ld0FwcFBhdGgsICd1dGY4Jyk7XG4gICAgICBjb250ZW50cy5zaG91bGQuZXFsKCd0aGlzIGlzIG5vdCByZWFsbHkgYW4gYXBwXFxuJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBnZXQgdGhlIHBhdGggZm9yIGEgbG9jYWwgLmFwaycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBuZXdBcHBQYXRoID0gYXdhaXQgY29uZmlndXJlQXBwKGdldEZpeHR1cmUoJ0Zha2VBbmRyb2lkQXBwLmFwaycpLCAnLmFwaycpO1xuICAgICAgbmV3QXBwUGF0aC5zaG91bGQuY29udGFpbignRmFrZUFuZHJvaWRBcHAuYXBrJyk7XG4gICAgICBsZXQgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShuZXdBcHBQYXRoLCAndXRmOCcpO1xuICAgICAgY29udGVudHMuc2hvdWxkLmVxbCgndGhpcyBpcyBub3QgcmVhbGx5IGFuIGFwa1xcbicpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdW56aXAgYW5kIGdldCB0aGUgcGF0aCBmb3IgYSBsb2NhbCAuYXBwLnppcCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBuZXdBcHBQYXRoID0gYXdhaXQgY29uZmlndXJlQXBwKGdldEZpeHR1cmUoJ0Zha2VJT1NBcHAuYXBwLnppcCcpLCAnLmFwcCcpO1xuICAgICAgbmV3QXBwUGF0aC5zaG91bGQuY29udGFpbignRmFrZUlPU0FwcC5hcHAnKTtcbiAgICAgIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKG5ld0FwcFBhdGgsICd1dGY4Jyk7XG4gICAgICBjb250ZW50cy5zaG91bGQuZXFsKCd0aGlzIGlzIG5vdCByZWFsbHkgYW4gYXBwXFxuJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB1bnppcCBhbmQgZ2V0IHRoZSBwYXRoIGZvciBhIGxvY2FsIC5pcGEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgbmV3QXBwUGF0aCA9IGF3YWl0IGNvbmZpZ3VyZUFwcChnZXRGaXh0dXJlKCdGYWtlSU9TQXBwLmlwYScpLCAnLmFwcCcpO1xuICAgICAgbmV3QXBwUGF0aC5zaG91bGQuY29udGFpbignRmFrZUlPU0FwcC5hcHAnKTtcbiAgICAgIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKG5ld0FwcFBhdGgsICd1dGY4Jyk7XG4gICAgICBjb250ZW50cy5zaG91bGQuZXFsKCd0aGlzIGlzIG5vdCByZWFsbHkgYW4gYXBwXFxuJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBhIGJhZCB6aXAgZmlsZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGNvbmZpZ3VyZUFwcChnZXRGaXh0dXJlKCdCYWRaaXBwZWRBcHAuemlwJyksICcuYXBwJykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvUEsvKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgZXh0ZW5zaW9ucyBkbyBub3QgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBjb25maWd1cmVBcHAoZ2V0Rml4dHVyZSgnRmFrZUlPU0FwcC5hcHAnKSwgJy53cm9uZycpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgIC9kaWQgbm90IGhhdmUgZXh0ZW5zaW9uL1xuICAgICAgKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgemlwIGZpbGUgZG9lcyBub3QgY29udGFpbiBhbiBhcHAgd2hvc2UgZXh0ZW5zaW9uIG1hdGNoZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBjb25maWd1cmVBcHAoZ2V0Rml4dHVyZSgnRmFrZUlPU0FwcC5hcHAuemlwJyksICcud3JvbmcnKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAvZGlkIG5vdCBoYXZlIGV4dGVuc2lvbi9cbiAgICAgICk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ3Nob3VsZCBkb3dubG9hZCBhbiBhcHAgZnJvbSB0aGUgd2ViJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHBvcnQ7XG4gICAgICBsZXQgc2VydmVyVXJsO1xuXG4gICAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBwb3J0ID0gYXdhaXQgZ2V0VGVzdFBvcnQodHJ1ZSk7XG4gICAgICAgIHNlcnZlclVybCA9IGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH1gO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdzZXJ2ZXIgbm90IGF2YWlsYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2VydmVyIG5vdCBhdmFpbGFibGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgY29uZmlndXJlQXBwKFxuICAgICAgICAgICAgYCR7c2VydmVyVXJsfS9GYWtlSU9TQXBwLmFwcC56aXBgLFxuICAgICAgICAgICAgJy5hcHAnXG4gICAgICAgICAgKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoL0VDT05OUkVGVVNFRC8pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgZGVzY3JpYmUoJ3NlcnZlciBhdmFpbGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIHVzZSBhIGxvY2FsIHNlcnZlciBzbyB0aGVyZSBpcyBubyBkZXBlbmRlbmN5IG9uIHRoZSBpbnRlcm5ldFxuICAgICAgICBsZXQgc2VydmVyO1xuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICdmaXh0dXJlcycpO1xuICAgICAgICAgIGNvbnN0IHNlcnZlID0gc2VydmVTdGF0aWMoZGlyLCB7XG4gICAgICAgICAgICBpbmRleDogZmFsc2UsXG4gICAgICAgICAgICBzZXRIZWFkZXJzOiAocmVzLCBwYXRoKSA9PiB7XG4gICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBjb250ZW50RGlzcG9zaXRpb24ocGF0aCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGZ1bmN0aW9uIChyZXEsIHJlcykge1xuICAgICAgICAgICAgaWYgKHJlcS51cmwuaW5kZXhPZignbWlzc2luZycpICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXMud3JpdGVIZWFkKDQwNCk7XG4gICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZm9yIHRlc3RpbmcgemlwIGZpbGUgY29udGVudCB0eXBlc1xuICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHVybC5wYXJzZShyZXEudXJsKS5zZWFyY2gpLmdldCgnY29udGVudC10eXBlJyk7XG4gICAgICAgICAgICBpZiAoY29udGVudFR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcignY29udGVudC10eXBlJywgY29udGVudFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VydmUocmVxLCByZXMsIGZpbmFsaGFuZGxlcihyZXEsIHJlcykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGNsb3NlID0gc2VydmVyLmNsb3NlLmJpbmQoc2VydmVyKTtcbiAgICAgICAgICBzZXJ2ZXIuY2xvc2UgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBwYXVzZSBhIG1vbWVudCBvciB3ZSBnZXQgRUNPTlJFU0VUIGVycm9yc1xuICAgICAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIHNlcnZlci5vbignY2xvc2UnLCByZXNvbHZlKTtcbiAgICAgICAgICAgICAgY2xvc2UoKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBzZXJ2ZXIubGlzdGVuKHBvcnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGF3YWl0IHNlcnZlci5jbG9zZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGRvd25sb2FkIHppcCBmaWxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCBuZXdBcHBQYXRoID0gYXdhaXQgY29uZmlndXJlQXBwKGAke3NlcnZlclVybH0vRmFrZUlPU0FwcC5hcHAuemlwYCwgJy5hcHAnKTtcbiAgICAgICAgICBuZXdBcHBQYXRoLnNob3VsZC5jb250YWluKCdGYWtlSU9TQXBwLmFwcCcpO1xuICAgICAgICAgIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKG5ld0FwcFBhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgY29udGVudHMuc2hvdWxkLmVxbCgndGhpcyBpcyBub3QgcmVhbGx5IGFuIGFwcFxcbicpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBkb3dubG9hZCB6aXAgZmlsZSB3aXRoIHF1ZXJ5IHN0cmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsZXQgbmV3QXBwUGF0aCA9IGF3YWl0IGNvbmZpZ3VyZUFwcChcbiAgICAgICAgICAgIGAke3NlcnZlclVybH0vRmFrZUlPU0FwcC5hcHAuemlwP3N2PWFiYyZzcj1kZWZgLFxuICAgICAgICAgICAgJy5hcHAnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXdBcHBQYXRoLnNob3VsZC5jb250YWluKCcuYXBwJyk7XG4gICAgICAgICAgbGV0IGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEZpbGUobmV3QXBwUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgICBjb250ZW50cy5zaG91bGQuZXFsKCd0aGlzIGlzIG5vdCByZWFsbHkgYW4gYXBwXFxuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIGRvd25sb2FkIGFuIGFwcCBmaWxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCBuZXdBcHBQYXRoID0gYXdhaXQgY29uZmlndXJlQXBwKGAke3NlcnZlclVybH0vRmFrZUlPU0FwcC5hcHBgLCAnLmFwcCcpO1xuICAgICAgICAgIG5ld0FwcFBhdGguc2hvdWxkLmNvbnRhaW4oJy5hcHAnKTtcbiAgICAgICAgICBsZXQgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShuZXdBcHBQYXRoLCAndXRmOCcpO1xuICAgICAgICAgIGNvbnRlbnRzLnNob3VsZC5lcWwoJ3RoaXMgaXMgbm90IHJlYWxseSBhbiBhcHBcXG4nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgYWNjZXB0IG11bHRpcGxlIGV4dGVuc2lvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGV0IG5ld0FwcFBhdGggPSBhd2FpdCBjb25maWd1cmVBcHAoYCR7c2VydmVyVXJsfS9GYWtlSU9TQXBwLmFwcC56aXBgLCBbJy5hcHAnLCAnLmFhYiddKTtcbiAgICAgICAgICBuZXdBcHBQYXRoLnNob3VsZC5jb250YWluKCdGYWtlSU9TQXBwLmFwcCcpO1xuICAgICAgICAgIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKG5ld0FwcFBhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgY29udGVudHMuc2hvdWxkLmVxbCgndGhpcyBpcyBub3QgcmVhbGx5IGFuIGFwcFxcbicpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBkb3dubG9hZCBhbiBhcGsgZmlsZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsZXQgbmV3QXBwUGF0aCA9IGF3YWl0IGNvbmZpZ3VyZUFwcChgJHtzZXJ2ZXJVcmx9L0Zha2VBbmRyb2lkQXBwLmFwa2AsICcuYXBrJyk7XG4gICAgICAgICAgbmV3QXBwUGF0aC5zaG91bGQuY29udGFpbignLmFwaycpO1xuICAgICAgICAgIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKG5ld0FwcFBhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgY29udGVudHMuc2hvdWxkLmVxbCgndGhpcyBpcyBub3QgcmVhbGx5IGFuIGFwa1xcbicpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgemlwIGZpbGUgdGhhdCBjYW5ub3QgYmUgZG93bmxvYWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhd2FpdCBjb25maWd1cmVBcHAoYCR7c2VydmVyVXJsfS9taXNzaW5nL0Zha2VJT1NBcHAuYXBwLnppcGAsICcuYXBwJykuc2hvdWxkLmV2ZW50dWFsbHkuYmVcbiAgICAgICAgICAgIC5yZWplY3RlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGludmFsaWQgcHJvdG9jb2wnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgY29uZmlndXJlQXBwKFxuICAgICAgICAgICAgJ2ZpbGU6Ly9DOi9taXNzaW5nL0Zha2VJT1NBcHAuYXBwLnppcCcsXG4gICAgICAgICAgICAnLmFwcCdcbiAgICAgICAgICApLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aCgvaXMgbm90IHN1cHBvcnRlZC8pO1xuICAgICAgICAgIGF3YWl0IGNvbmZpZ3VyZUFwcChcbiAgICAgICAgICAgIGBmdHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9taXNzaW5nL0Zha2VJT1NBcHAuYXBwLnppcGAsXG4gICAgICAgICAgICAnLmFwcCdcbiAgICAgICAgICApLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aCgvaXMgbm90IHN1cHBvcnRlZC8pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbWlzc2luZyBmaWxlIGluIFdpbmRvd3MgcGF0aCBmb3JtYXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXdhaXQgY29uZmlndXJlQXBwKFxuICAgICAgICAgICAgJ0M6XFxcXG1pc3NpbmdcXFxcRmFrZUlPU0FwcC5hcHAuemlwJyxcbiAgICAgICAgICAgICcuYXBwJ1xuICAgICAgICAgICkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKC9kb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZS8pO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZWNvZ25pemUgemlwIG1pbWUgdHlwZXMgYW5kIHVuemlwIHRoZSBkb3dubG9hZGVkIGZpbGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGV0IG5ld0FwcFBhdGggPSBhd2FpdCBjb25maWd1cmVBcHAoXG4gICAgICAgICAgICBgJHtzZXJ2ZXJVcmx9L0Zha2VBbmRyb2lkQXBwLmFzZD9jb250ZW50LXR5cGU9JHtlbmNvZGVVUklDb21wb25lbnQoJ2FwcGxpY2F0aW9uL3ppcCcpfWAsXG4gICAgICAgICAgICAnLmFwaydcbiAgICAgICAgICApO1xuICAgICAgICAgIG5ld0FwcFBhdGguc2hvdWxkLmNvbnRhaW4oJ0Zha2VBbmRyb2lkQXBwLmFwaycpO1xuICAgICAgICAgIG5ld0FwcFBhdGguc2hvdWxkLm5vdC5jb250YWluKCcuYXNkJyk7XG4gICAgICAgICAgbGV0IGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEZpbGUobmV3QXBwUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgICBjb250ZW50cy5zaG91bGQuZXFsKCd0aGlzIGlzIG5vdCByZWFsbHkgYW4gYXBrXFxuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJlY29nbml6ZSB6aXAgbWltZSB0eXBlcyB3aXRoIHBhcmFtZXRlciBhbmQgdW56aXAgdGhlIGRvd25sb2FkZWQgZmlsZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsZXQgbmV3QXBwUGF0aCA9IGF3YWl0IGNvbmZpZ3VyZUFwcChcbiAgICAgICAgICAgIGAke3NlcnZlclVybH0vRmFrZUFuZHJvaWRBcHAuYXNkP2NvbnRlbnQtdHlwZT0ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ppcDsgcGFyYW1ldGVyPXZhbHVlJ1xuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgICAgJy5hcGsnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXdBcHBQYXRoLnNob3VsZC5jb250YWluKCdGYWtlQW5kcm9pZEFwcC5hcGsnKTtcbiAgICAgICAgICBuZXdBcHBQYXRoLnNob3VsZC5ub3QuY29udGFpbignLmFzZCcpO1xuICAgICAgICAgIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKG5ld0FwcFBhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgY29udGVudHMuc2hvdWxkLmVxbCgndGhpcyBpcyBub3QgcmVhbGx5IGFuIGFwa1xcbicpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZWNvZ25pemUgemlwIG1pbWUgdHlwZXMgYW5kIHVuemlwIHRoZSBkb3dubG9hZGVkIGZpbGUgd2l0aCBxdWVyeSBzdHJpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGV0IG5ld0FwcFBhdGggPSBhd2FpdCBjb25maWd1cmVBcHAoXG4gICAgICAgICAgICBgJHtzZXJ2ZXJVcmx9L0Zha2VBbmRyb2lkQXBwLmFzZD9jb250ZW50LXR5cGU9JHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi96aXAnXG4gICAgICAgICAgICApfSZzdj1hYmMmc3I9ZGVmYCxcbiAgICAgICAgICAgICcuYXBrJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgbmV3QXBwUGF0aC5zaG91bGQuY29udGFpbignRmFrZUFuZHJvaWRBcHAuYXBrJyk7XG4gICAgICAgICAgbmV3QXBwUGF0aC5zaG91bGQubm90LmNvbnRhaW4oJy5hc2QnKTtcbiAgICAgICAgICBsZXQgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShuZXdBcHBQYXRoLCAndXRmOCcpO1xuICAgICAgICAgIGNvbnRlbnRzLnNob3VsZC5lcWwoJ3RoaXMgaXMgbm90IHJlYWxseSBhbiBhcGtcXG4nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgdHJlYXQgYW4gdW5rbm93biBtaW1lIHR5cGUgYXMgYW4gYXBwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxldCBuZXdBcHBQYXRoID0gYXdhaXQgY29uZmlndXJlQXBwKFxuICAgICAgICAgICAgYCR7c2VydmVyVXJsfS9GYWtlQW5kcm9pZEFwcC5hcGs/Y29udGVudC10eXBlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCdhcHBsaWNhdGlvbi9iaXAnKX1gLFxuICAgICAgICAgICAgJy5hcGsnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXdBcHBQYXRoLnNob3VsZC5jb250YWluKCcuYXBrJyk7XG4gICAgICAgICAgbGV0IGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEZpbGUobmV3QXBwUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgICBjb250ZW50cy5zaG91bGQuZXFsKCd0aGlzIGlzIG5vdCByZWFsbHkgYW4gYXBrXFxuJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLFNBQVNBLFVBQVQsQ0FBb0JDLElBQXBCLEVBQTBCO0VBRXhCLE9BQU9DLGFBQUEsQ0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCLElBQXhCLEVBQThCLFVBQTlCLEVBQTBDSCxJQUExQyxDQUFQO0FBQ0Q7O0FBRURJLFFBQVEsQ0FBQyxnQ0FBRCxFQUFtQyxZQUFZO0VBQ3JEQSxRQUFRLENBQUMsY0FBRCxFQUFpQixZQUFZO0lBQ25DQyxFQUFFLENBQUMsc0NBQUQsRUFBeUMsa0JBQWtCO01BQzNELElBQUlDLFVBQVUsR0FBRyxNQUFNLElBQUFDLHFCQUFBLEVBQWFSLFVBQVUsQ0FBQyxnQkFBRCxDQUF2QixFQUEyQyxNQUEzQyxDQUF2QjtNQUNB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
@@ -1,87 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _lodash = _interopRequireDefault(require("lodash"));
8
-
9
- var _lib = require("../../../lib");
10
-
11
- var _fakeDriver = require("../protocol/fake-driver");
12
-
13
- var _ws = _interopRequireDefault(require("ws"));
14
-
15
- var _bluebird = _interopRequireDefault(require("bluebird"));
16
-
17
- var _helpers = require("../../helpers");
18
-
19
- describe('Websockets (e2e)', function () {
20
- let baseServer;
21
- let driver;
22
- let port;
23
- const SESSION_ID = 'foo';
24
- const WS_DATA = 'Hello';
25
- before(async function () {
26
- driver = new _fakeDriver.FakeDriver();
27
- driver.sessionId = SESSION_ID;
28
- port = await (0, _helpers.getTestPort)();
29
- baseServer = await (0, _lib.server)({
30
- routeConfiguringFunction: (0, _lib.routeConfiguringFunction)(driver),
31
- port
32
- });
33
- });
34
- after(async function () {
35
- await baseServer.close();
36
- });
37
- describe('web sockets support', function () {
38
- it('should be able to add websocket handler and remove it', async function () {
39
- const wss = new _ws.default.Server({
40
- noServer: true
41
- });
42
- wss.on('connection', ws => {
43
- if (ws && ws.readyState === _ws.default.OPEN) {
44
- ws.send(WS_DATA);
45
- }
46
- });
47
- const previousListenerCount = baseServer.listenerCount('upgrade');
48
- const endpoint = `${_lib.DEFAULT_WS_PATHNAME_PREFIX}/hello`;
49
- const timeout = 5000;
50
- await baseServer.addWebSocketHandler(endpoint, wss);
51
- baseServer.listenerCount('upgrade').should.be.above(previousListenerCount);
52
-
53
- _lodash.default.keys(await baseServer.getWebSocketHandlers()).length.should.eql(1);
54
-
55
- await new _bluebird.default((resolve, reject) => {
56
- const client = new _ws.default(`ws://${_helpers.TEST_HOST}:${port}${endpoint}`);
57
- client.once('connection', (ws, req) => {
58
- try {
59
- ws.should.not.be.empty;
60
- req.connection.remoteAddress.should.not.be.empty;
61
- } catch (e) {
62
- reject(e);
63
- }
64
- });
65
- client.once('message', data => {
66
- const dataStr = _lodash.default.isString(data) ? data : data.toString();
67
- dataStr.should.eql(WS_DATA);
68
- resolve();
69
- });
70
- client.once('error', reject);
71
- setTimeout(() => reject(new Error('No websocket messages have been received after the timeout')), timeout);
72
- });
73
- (await baseServer.removeWebSocketHandler(endpoint)).should.be.true;
74
-
75
- _lodash.default.keys(await baseServer.getWebSocketHandlers()).length.should.eql(0);
76
-
77
- await new _bluebird.default((resolve, reject) => {
78
- const client = new _ws.default(`ws://${_helpers.TEST_HOST}:${port}${endpoint}`);
79
- client.on('message', data => reject(new Error(`No websocket messages are expected after the handler ` + `has been removed. '${data}' is received instead. `)));
80
- client.on('error', resolve);
81
- setTimeout(resolve, timeout);
82
- });
83
- baseServer.listenerCount('upgrade').should.be.above(previousListenerCount);
84
- });
85
- });
86
- });
87
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsImJhc2VTZXJ2ZXIiLCJkcml2ZXIiLCJwb3J0IiwiU0VTU0lPTl9JRCIsIldTX0RBVEEiLCJiZWZvcmUiLCJGYWtlRHJpdmVyIiwic2Vzc2lvbklkIiwiZ2V0VGVzdFBvcnQiLCJzZXJ2ZXIiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJhZnRlciIsImNsb3NlIiwiaXQiLCJ3c3MiLCJXZWJTb2NrZXQiLCJTZXJ2ZXIiLCJub1NlcnZlciIsIm9uIiwid3MiLCJyZWFkeVN0YXRlIiwiT1BFTiIsInNlbmQiLCJwcmV2aW91c0xpc3RlbmVyQ291bnQiLCJsaXN0ZW5lckNvdW50IiwiZW5kcG9pbnQiLCJERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCIsInRpbWVvdXQiLCJhZGRXZWJTb2NrZXRIYW5kbGVyIiwic2hvdWxkIiwiYmUiLCJhYm92ZSIsIl8iLCJrZXlzIiwiZ2V0V2ViU29ja2V0SGFuZGxlcnMiLCJsZW5ndGgiLCJlcWwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImNsaWVudCIsIlRFU1RfSE9TVCIsIm9uY2UiLCJyZXEiLCJub3QiLCJlbXB0eSIsImNvbm5lY3Rpb24iLCJyZW1vdGVBZGRyZXNzIiwiZSIsImRhdGEiLCJkYXRhU3RyIiwiaXNTdHJpbmciLCJ0b1N0cmluZyIsInNldFRpbWVvdXQiLCJFcnJvciIsInJlbW92ZVdlYlNvY2tldEhhbmRsZXIiLCJ0cnVlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9lMmUvYmFzZWRyaXZlci93ZWJzb2NrZXRzLmUyZS5zcGVjLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge3NlcnZlciwgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCBERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWH0gZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCB7RmFrZURyaXZlcn0gZnJvbSAnLi4vcHJvdG9jb2wvZmFrZS1kcml2ZXInO1xuaW1wb3J0IFdlYlNvY2tldCBmcm9tICd3cyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge1RFU1RfSE9TVCwgZ2V0VGVzdFBvcnR9IGZyb20gJy4uLy4uL2hlbHBlcnMnO1xuXG5kZXNjcmliZSgnV2Vic29ja2V0cyAoZTJlKScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJhc2VTZXJ2ZXI7XG4gIGxldCBkcml2ZXI7XG4gIGxldCBwb3J0O1xuICBjb25zdCBTRVNTSU9OX0lEID0gJ2Zvbyc7XG4gIGNvbnN0IFdTX0RBVEEgPSAnSGVsbG8nO1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZHJpdmVyID0gbmV3IEZha2VEcml2ZXIoKTtcbiAgICBkcml2ZXIuc2Vzc2lvbklkID0gU0VTU0lPTl9JRDtcbiAgICBwb3J0ID0gYXdhaXQgZ2V0VGVzdFBvcnQoKTtcbiAgICBiYXNlU2VydmVyID0gYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uKGRyaXZlciksXG4gICAgICBwb3J0LFxuICAgIH0pO1xuICB9KTtcbiAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGJhc2VTZXJ2ZXIuY2xvc2UoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dlYiBzb2NrZXRzIHN1cHBvcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIGFkZCB3ZWJzb2NrZXQgaGFuZGxlciBhbmQgcmVtb3ZlIGl0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd3NzID0gbmV3IFdlYlNvY2tldC5TZXJ2ZXIoe1xuICAgICAgICBub1NlcnZlcjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgd3NzLm9uKCdjb25uZWN0aW9uJywgKHdzKSA9PiB7XG4gICAgICAgIGlmICh3cyAmJiB3cy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgICAgIHdzLnNlbmQoV1NfREFUQSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJldmlvdXNMaXN0ZW5lckNvdW50ID0gYmFzZVNlcnZlci5saXN0ZW5lckNvdW50KCd1cGdyYWRlJyk7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IGAke0RFRkFVTFRfV1NfUEFUSE5BTUVfUFJFRklYfS9oZWxsb2A7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gNTAwMDtcbiAgICAgIGF3YWl0IGJhc2VTZXJ2ZXIuYWRkV2ViU29ja2V0SGFuZGxlcihlbmRwb2ludCwgd3NzKTtcbiAgICAgIGJhc2VTZXJ2ZXIubGlzdGVuZXJDb3VudCgndXBncmFkZScpLnNob3VsZC5iZS5hYm92ZShwcmV2aW91c0xpc3RlbmVyQ291bnQpO1xuICAgICAgXy5rZXlzKGF3YWl0IGJhc2VTZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMoKSkubGVuZ3RoLnNob3VsZC5lcWwoMSk7XG4gICAgICBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBXZWJTb2NrZXQoYHdzOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0ke2VuZHBvaW50fWApO1xuICAgICAgICBjbGllbnQub25jZSgnY29ubmVjdGlvbicsICh3cywgcmVxKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdzLnNob3VsZC5ub3QuYmUuZW1wdHk7XG4gICAgICAgICAgICByZXEuY29ubmVjdGlvbi5yZW1vdGVBZGRyZXNzLnNob3VsZC5ub3QuYmUuZW1wdHk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNsaWVudC5vbmNlKCdtZXNzYWdlJywgKGRhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhU3RyID0gXy5pc1N0cmluZyhkYXRhKSA/IGRhdGEgOiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgICAgZGF0YVN0ci5zaG91bGQuZXFsKFdTX0RBVEEpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNsaWVudC5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignTm8gd2Vic29ja2V0IG1lc3NhZ2VzIGhhdmUgYmVlbiByZWNlaXZlZCBhZnRlciB0aGUgdGltZW91dCcpKSxcbiAgICAgICAgICB0aW1lb3V0XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgKGF3YWl0IGJhc2VTZXJ2ZXIucmVtb3ZlV2ViU29ja2V0SGFuZGxlcihlbmRwb2ludCkpLnNob3VsZC5iZS50cnVlO1xuICAgICAgXy5rZXlzKGF3YWl0IGJhc2VTZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMoKSkubGVuZ3RoLnNob3VsZC5lcWwoMCk7XG4gICAgICBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBXZWJTb2NrZXQoYHdzOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0ke2VuZHBvaW50fWApO1xuICAgICAgICBjbGllbnQub24oJ21lc3NhZ2UnLCAoZGF0YSkgPT5cbiAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBObyB3ZWJzb2NrZXQgbWVzc2FnZXMgYXJlIGV4cGVjdGVkIGFmdGVyIHRoZSBoYW5kbGVyIGAgK1xuICAgICAgICAgICAgICAgIGBoYXMgYmVlbiByZW1vdmVkLiAnJHtkYXRhfScgaXMgcmVjZWl2ZWQgaW5zdGVhZC4gYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY2xpZW50Lm9uKCdlcnJvcicsIHJlc29sdmUpO1xuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpO1xuICAgICAgfSk7XG4gICAgICBiYXNlU2VydmVyLmxpc3RlbmVyQ291bnQoJ3VwZ3JhZGUnKS5zaG91bGQuYmUuYWJvdmUocHJldmlvdXNMaXN0ZW5lckNvdW50KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUFBLFFBQVEsQ0FBQyxrQkFBRCxFQUFxQixZQUFZO0VBQ3ZDLElBQUlDLFVBQUo7RUFDQSxJQUFJQyxNQUFKO0VBQ0EsSUFBSUMsSUFBSjtFQUNBLE1BQU1DLFVBQVUsR0FBRyxLQUFuQjtFQUNBLE1BQU1DLE9BQU8sR0FBRyxPQUFoQjtFQUVBQyxNQUFNLENBQUMsa0JBQWtCO0lBQ3ZCSixNQUFNLEdBQUcsSUFBSUssc0JBQUosRUFBVDtJQUNBTCxNQUFNLENBQUNNLFNBQVAsR0FBbUJKLFVBQW5CO0lBQ0FELElBQUksR0FBRyxNQUFNLElBQUFNLG9CQUFBLEdBQWI7SUFDQVIsVUFBVSxHQUFHLE1BQU0sSUFBQVMsV0FBQSxFQUFPO01BQ3hCQyx3QkFBd0IsRUFBRSxJQUFBQSw2QkFBQSxFQUF5QlQsTUFBekIsQ0FERjtNQUV4QkM7SUFGd0IsQ0FBUCxDQUFuQjtFQUlELENBUkssQ0FBTjtFQVNBUyxLQUFLLENBQUMsa0JBQWtCO0lBQ3RCLE1BQU1YLFVBQVUsQ0FBQ1ksS0FBWCxFQUFOO0VBQ0QsQ0FGSSxDQUFMO0VBSUFiLFFBQVEsQ0FBQyxxQkFBRCxFQUF3QixZQUFZO0lBQzFDYyxFQUFFLENBQUMsdURBQUQsRUFBMEQsa0JBQWtCO01BQzVFLE1BQU1DLEdBQUcsR0FBRyxJQUFJQyxXQUFBLENBQVVDLE1BQWQsQ0FBcUI7UUFDL0JDLFFBQVEsRUFBRTtNQURxQixDQUFyQixDQUFaO01BR0FILEdBQUcsQ0FBQ0ksRUFBSixDQUFPLFlBQVAsRUFBc0JDLEVBQUQsSUFBUTtRQUMzQixJQUFJQSxFQUFFLElBQUlBLEVBQUUsQ0FBQ0MsVUFBSCxLQUFrQkwsV0FBQSxDQUFVTSxJ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
@@ -1,159 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _lib = require("../../../lib");
8
-
9
- var _axios = _interopRequireDefault(require("axios"));
10
-
11
- var _sinon = require("sinon");
12
-
13
- var _bluebird = _interopRequireDefault(require("bluebird"));
14
-
15
- var _lodash = _interopRequireDefault(require("lodash"));
16
-
17
- var _helpers = require("../../helpers");
18
-
19
- describe('server', function () {
20
- let hwServer;
21
- let port;
22
- let sandbox;
23
- before(async function () {
24
- port = await (0, _helpers.getTestPort)(true);
25
-
26
- function configureRoutes(app) {
27
- app.get('/', (req, res) => {
28
- res.header['content-type'] = 'text/html';
29
- res.status(200).send('Hello World!');
30
- });
31
- app.get('/python', (req, res) => {
32
- res.status(200).send(req.headers['content-type']);
33
- });
34
- app.get('/error', () => {
35
- throw new Error('hahaha');
36
- });
37
- app.get('/pause', async (req, res) => {
38
- res.header['content-type'] = 'text/html';
39
- await _bluebird.default.delay(1000);
40
- res.status(200).send('We have waited!');
41
- });
42
- }
43
-
44
- hwServer = await (0, _lib.server)({
45
- routeConfiguringFunction: configureRoutes,
46
- port
47
- });
48
- });
49
- beforeEach(function () {
50
- sandbox = (0, _sinon.createSandbox)();
51
- sandbox.stub(console, 'error');
52
- });
53
- after(async function () {
54
- await hwServer.close();
55
- });
56
- afterEach(function () {
57
- sandbox.restore();
58
- });
59
- it('should start up with our middleware', async function () {
60
- const {
61
- data
62
- } = await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/`);
63
- data.should.eql('Hello World!');
64
- });
65
- it('should fix broken context type', async function () {
66
- const {
67
- data
68
- } = await (0, _axios.default)({
69
- url: `http://${_helpers.TEST_HOST}:${port}/python`,
70
- headers: {
71
- 'user-agent': 'Python',
72
- 'content-type': 'application/x-www-form-urlencoded'
73
- }
74
- });
75
- data.should.eql('application/json; charset=utf-8');
76
- });
77
- it('should catch errors in the catchall', async function () {
78
- await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/error`).should.be.rejected;
79
- });
80
- it('should error if we try to start again on a port that is used', async function () {
81
- await (0, _lib.server)({
82
- routeConfiguringFunction() {},
83
-
84
- port
85
- }).should.be.rejectedWith(/EADDRINUSE/);
86
- });
87
- it('should not wait for the server close connections before finishing closing', async function () {
88
- let bodyPromise = _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/pause`).catch(() => {});
89
-
90
- await _bluebird.default.delay(100);
91
- let before = Date.now();
92
- await hwServer.close();
93
- (Date.now() - before).should.not.be.above(800);
94
- await bodyPromise;
95
- });
96
- it('should error if we try to start on a bad hostname', async function () {
97
- this.timeout(60000);
98
- await (0, _lib.server)({
99
- routeConfiguringFunction: _lodash.default.noop,
100
- port,
101
- hostname: 'lolcathost'
102
- }).should.be.rejectedWith(/ENOTFOUND|EADDRNOTAVAIL|EAI_AGAIN/);
103
- await (0, _lib.server)({
104
- routeConfiguringFunction: _lodash.default.noop,
105
- port,
106
- hostname: '1.1.1.1'
107
- }).should.be.rejectedWith(/EADDRNOTAVAIL/);
108
- });
109
- });
110
- describe('server plugins', function () {
111
- let hwServer;
112
- let port;
113
- before(async function () {
114
- port = await (0, _helpers.getTestPort)(true);
115
- });
116
- afterEach(async function () {
117
- try {
118
- await hwServer.close();
119
- } catch (ign) {}
120
- });
121
-
122
- function updaterWithGetRoute(route, reply) {
123
- return async (app, httpServer) => {
124
- app.get(`/${route}`, (req, res) => {
125
- res.header['content-type'] = 'text/html';
126
- res.status(200).send(reply);
127
- });
128
- httpServer[`_updated_${route}`] = true;
129
- };
130
- }
131
-
132
- it('should allow one or more plugins to update the server', async function () {
133
- hwServer = await (0, _lib.server)({
134
- routeConfiguringFunction: _lodash.default.noop,
135
- port,
136
- serverUpdaters: [updaterWithGetRoute('plugin1', 'res from plugin1 route'), updaterWithGetRoute('plugin2', 'res from plugin2 route')]
137
- });
138
- let {
139
- data
140
- } = await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/plugin1`);
141
- data.should.eql('res from plugin1 route');
142
- ({
143
- data
144
- } = await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/plugin2`));
145
- data.should.eql('res from plugin2 route');
146
- hwServer._updated_plugin1.should.be.true;
147
- hwServer._updated_plugin2.should.be.true;
148
- });
149
- it('should pass on errors from the plugin updateServer method', async function () {
150
- await (0, _lib.server)({
151
- routeConfiguringFunction: _lodash.default.noop,
152
- port,
153
- serverUpdaters: [() => {
154
- throw new Error('ugh');
155
- }]
156
- }).should.eventually.be.rejectedWith(/ugh/);
157
- });
158
- });
159
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsImh3U2VydmVyIiwicG9ydCIsInNhbmRib3giLCJiZWZvcmUiLCJnZXRUZXN0UG9ydCIsImNvbmZpZ3VyZVJvdXRlcyIsImFwcCIsImdldCIsInJlcSIsInJlcyIsImhlYWRlciIsInN0YXR1cyIsInNlbmQiLCJoZWFkZXJzIiwiRXJyb3IiLCJCIiwiZGVsYXkiLCJzZXJ2ZXIiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJiZWZvcmVFYWNoIiwiY3JlYXRlU2FuZGJveCIsInN0dWIiLCJjb25zb2xlIiwiYWZ0ZXIiLCJjbG9zZSIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJpdCIsImRhdGEiLCJheGlvcyIsIlRFU1RfSE9TVCIsInNob3VsZCIsImVxbCIsInVybCIsImJlIiwicmVqZWN0ZWQiLCJyZWplY3RlZFdpdGgiLCJib2R5UHJvbWlzZSIsImNhdGNoIiwiRGF0ZSIsIm5vdyIsIm5vdCIsImFib3ZlIiwidGltZW91dCIsIl8iLCJub29wIiwiaG9zdG5hbWUiLCJpZ24iLCJ1cGRhdGVyV2l0aEdldFJvdXRlIiwicm91dGUiLCJyZXBseSIsImh0dHBTZXJ2ZXIiLCJzZXJ2ZXJVcGRhdGVycyIsIl91cGRhdGVkX3BsdWdpbjEiLCJ0cnVlIiwiX3VwZGF0ZWRfcGx1Z2luMiIsImV2ZW50dWFsbHkiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L2UyZS9leHByZXNzL3NlcnZlci5lMmUuc3BlYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bW9jaGFcblxuaW1wb3J0IHtzZXJ2ZXJ9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHtjcmVhdGVTYW5kYm94fSBmcm9tICdzaW5vbic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtURVNUX0hPU1QsIGdldFRlc3RQb3J0fSBmcm9tICcuLi8uLi9oZWxwZXJzJztcblxuZGVzY3JpYmUoJ3NlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGh3U2VydmVyO1xuICBsZXQgcG9ydDtcbiAgbGV0IHNhbmRib3g7XG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydCA9IGF3YWl0IGdldFRlc3RQb3J0KHRydWUpO1xuXG4gICAgZnVuY3Rpb24gY29uZmlndXJlUm91dGVzKGFwcCkge1xuICAgICAgYXBwLmdldCgnLycsIChyZXEsIHJlcykgPT4ge1xuICAgICAgICByZXMuaGVhZGVyWydjb250ZW50LXR5cGUnXSA9ICd0ZXh0L2h0bWwnO1xuICAgICAgICByZXMuc3RhdHVzKDIwMCkuc2VuZCgnSGVsbG8gV29ybGQhJyk7XG4gICAgICB9KTtcbiAgICAgIGFwcC5nZXQoJy9weXRob24nLCAocmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLnNlbmQocmVxLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKTtcbiAgICAgIH0pO1xuICAgICAgYXBwLmdldCgnL2Vycm9yJywgKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhaGFoYScpO1xuICAgICAgfSk7XG4gICAgICBhcHAuZ2V0KCcvcGF1c2UnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLmhlYWRlclsnY29udGVudC10eXBlJ10gPSAndGV4dC9odG1sJztcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLnNlbmQoJ1dlIGhhdmUgd2FpdGVkIScpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGh3U2VydmVyID0gYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogY29uZmlndXJlUm91dGVzLFxuICAgICAgcG9ydCxcbiAgICB9KTtcbiAgfSk7XG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3ggPSBjcmVhdGVTYW5kYm94KCk7XG4gICAgc2FuZGJveC5zdHViKGNvbnNvbGUsICdlcnJvcicpO1xuICB9KTtcbiAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGh3U2VydmVyLmNsb3NlKCk7XG4gIH0pO1xuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHN0YXJ0IHVwIHdpdGggb3VyIG1pZGRsZXdhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3MuZ2V0KGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vYCk7XG4gICAgZGF0YS5zaG91bGQuZXFsKCdIZWxsbyBXb3JsZCEnKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgZml4IGJyb2tlbiBjb250ZXh0IHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgdXJsOiBgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L3B5dGhvbmAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogJ1B5dGhvbicsXG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZGF0YS5zaG91bGQuZXFsKCdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIGNhdGNoIGVycm9ycyBpbiB0aGUgY2F0Y2hhbGwnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgYXhpb3MuZ2V0KGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vZXJyb3JgKS5zaG91bGQuYmUucmVqZWN0ZWQ7XG4gIH0pO1xuICBpdCgnc2hvdWxkIGVycm9yIGlmIHdlIHRyeSB0byBzdGFydCBhZ2FpbiBvbiBhIHBvcnQgdGhhdCBpcyB1c2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IHNlcnZlcih7XG4gICAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24oKSB7fSxcbiAgICAgIHBvcnQsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvRUFERFJJTlVTRS8pO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBub3Qgd2FpdCBmb3IgdGhlIHNlcnZlciBjbG9zZSBjb25uZWN0aW9ucyBiZWZvcmUgZmluaXNoaW5nIGNsb3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJvZHlQcm9taXNlID0gYXhpb3MuZ2V0KGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vcGF1c2VgKS5jYXRjaCgoKSA9PiB7fSk7XG5cbiAgICAvLyByZWxpbnF1aXNoIGNvbnRyb2wgc28gdGhhdCB3ZSBkb24ndCBjbG9zZSBiZWZvcmUgdGhlIHJlcXVlc3QgaXMgcmVjZWl2ZWRcbiAgICBhd2FpdCBCLmRlbGF5KDEwMCk7XG5cbiAgICBsZXQgYmVmb3JlID0gRGF0ZS5ub3coKTtcbiAgICBhd2FpdCBod1NlcnZlci5jbG9zZSgpO1xuICAgIC8vIGV4cGVjdCBzbGlnaHRseSBsZXNzIHRoYW4gdGhlIHJlcXVlc3Qgd2FpdGVkLCBzaW5jZSB3ZSBwYXVzZWQgYWJvdmVcbiAgICAoRGF0ZS5ub3coKSAtIGJlZm9yZSkuc2hvdWxkLm5vdC5iZS5hYm92ZSg4MDApO1xuXG4gICAgYXdhaXQgYm9keVByb21pc2U7XG4gIH0pO1xuICBpdCgnc2hvdWxkIGVycm9yIGlmIHdlIHRyeSB0byBzdGFydCBvbiBhIGJhZCBob3N0bmFtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRpbWVvdXQoNjAwMDApO1xuICAgIGF3YWl0IHNlcnZlcih7XG4gICAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb246IF8ubm9vcCxcbiAgICAgIHBvcnQsXG4gICAgICBob3N0bmFtZTogJ2xvbGNhdGhvc3QnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0VOT1RGT1VORHxFQUREUk5PVEFWQUlMfEVBSV9BR0FJTi8pO1xuICAgIGF3YWl0IHNlcnZlcih7XG4gICAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb246IF8ubm9vcCxcbiAgICAgIHBvcnQsXG4gICAgICBob3N0bmFtZTogJzEuMS4xLjEnLFxuICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0VBRERSTk9UQVZBSUwvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3NlcnZlciBwbHVnaW5zJywgZnVuY3Rpb24gKCkge1xuICBsZXQgaHdTZXJ2ZXI7XG4gIGxldCBwb3J0O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydCA9IGF3YWl0IGdldFRlc3RQb3J0KHRydWUpO1xuICB9KTtcblxuICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBod1NlcnZlci5jbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfSk7XG5cbiAgZnVuY3Rpb24gdXBkYXRlcldpdGhHZXRSb3V0ZShyb3V0ZSwgcmVwbHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHJldHVybiBhc3luYyAoYXBwLCBodHRwU2VydmVyKSA9PiB7XG4gICAgICBhcHAuZ2V0KGAvJHtyb3V0ZX1gLCAocmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLmhlYWRlclsnY29udGVudC10eXBlJ10gPSAndGV4dC9odG1sJztcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLnNlbmQocmVwbHkpO1xuICAgICAgfSk7XG4gICAgICBodHRwU2VydmVyW2BfdXBkYXRlZF8ke3JvdXRlfWBdID0gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgaXQoJ3Nob3VsZCBhbGxvdyBvbmUgb3IgbW9yZSBwbHVnaW5zIHRvIHVwZGF0ZSB0aGUgc2VydmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGh3U2VydmVyID0gYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogXy5ub29wLFxuICAgICAgcG9ydCxcbiAgICAgIHNlcnZlclVwZGF0ZXJzOiBbXG4gICAgICAgIHVwZGF0ZXJXaXRoR2V0Um91dGUoJ3BsdWdpbjEnLCAncmVzIGZyb20gcGx1Z2luMSByb3V0ZScpLFxuICAgICAgICB1cGRhdGVyV2l0aEdldFJvdXRlKCdwbHVnaW4yJywgJ3JlcyBmcm9tIHBsdWdpbjIgcm91dGUnKSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgbGV0IHtkYXRhfSA9IGF3YWl0IGF4aW9zLmdldChgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L3BsdWdpbjFgKTtcbiAgICBkYXRhLnNob3VsZC5lcWwoJ3JlcyBmcm9tIHBsdWdpbjEgcm91dGUnKTtcbiAgICAoe2RhdGF9ID0gYXdhaXQgYXhpb3MuZ2V0KGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vcGx1Z2luMmApKTtcbiAgICBkYXRhLnNob3VsZC5lcWwoJ3JlcyBmcm9tIHBsdWdpbjIgcm91dGUnKTtcbiAgICBod1NlcnZlci5fdXBkYXRlZF9wbHVnaW4xLnNob3VsZC5iZS50cnVlO1xuICAgIGh3U2VydmVyLl91cGRhdGVkX3BsdWdpbjIuc2hvdWxkLmJlLnRydWU7XG4gIH0pO1xuICBpdCgnc2hvdWxkIHBhc3Mgb24gZXJyb3JzIGZyb20gdGhlIHBsdWdpbiB1cGRhdGVTZXJ2ZXIgbWV0aG9kJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IHNlcnZlcih7XG4gICAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb246IF8ubm9vcCxcbiAgICAgIHBvcnQsXG4gICAgICBzZXJ2ZXJVcGRhdGVyczogW1xuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1Z2gnKTtcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVq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
@@ -1,59 +0,0 @@
1
- "use strict";
2
-
3
- require("source-map-support/register");
4
-
5
- var _lib = require("../../../lib");
6
-
7
- var _fakeDriver = require("../protocol/fake-driver");
8
-
9
- describe('proxy', function () {
10
- const jwproxy = new _lib.JWProxy();
11
- let baseServer;
12
- before(async function () {
13
- baseServer = await (0, _lib.server)({
14
- routeConfiguringFunction: (0, _lib.routeConfiguringFunction)(new _fakeDriver.FakeDriver()),
15
- port: 4444
16
- });
17
- });
18
- after(async function () {
19
- await baseServer.close();
20
- });
21
- it('should proxy status straight', async function () {
22
- let [res, resBody] = await jwproxy.proxy('/status', 'GET');
23
- res.statusCode.should.equal(200);
24
- resBody.value.should.equal(`I'm fine`);
25
- });
26
- it('should proxy status as command', async function () {
27
- const res = await jwproxy.command('/status', 'GET');
28
- res.should.eql(`I'm fine`);
29
- });
30
- describe('new session', function () {
31
- afterEach(async function () {
32
- await jwproxy.command('', 'DELETE');
33
- });
34
- it('should start a new session', async function () {
35
- const caps = {
36
- browserName: 'fake'
37
- };
38
- const res = await jwproxy.command('/session', 'POST', {
39
- capabilities: {
40
- alwaysMatch: caps
41
- }
42
- });
43
- res.capabilities.alwaysMatch.should.have.property('browserName');
44
- jwproxy.sessionId.should.have.length(48);
45
- });
46
- });
47
- describe('delete session', function () {
48
- beforeEach(async function () {
49
- await jwproxy.command('/session', 'POST', {
50
- desiredCapabilities: {}
51
- });
52
- });
53
- it('should quit a session', async function () {
54
- const res = await jwproxy.command('', 'DELETE');
55
- should.not.exist(res);
56
- });
57
- });
58
- });
59
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsImp3cHJveHkiLCJKV1Byb3h5IiwiYmFzZVNlcnZlciIsImJlZm9yZSIsInNlcnZlciIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsIkZha2VEcml2ZXIiLCJwb3J0IiwiYWZ0ZXIiLCJjbG9zZSIsIml0IiwicmVzIiwicmVzQm9keSIsInByb3h5Iiwic3RhdHVzQ29kZSIsInNob3VsZCIsImVxdWFsIiwidmFsdWUiLCJjb21tYW5kIiwiZXFsIiwiYWZ0ZXJFYWNoIiwiY2FwcyIsImJyb3dzZXJOYW1lIiwiY2FwYWJpbGl0aWVzIiwiYWx3YXlzTWF0Y2giLCJoYXZlIiwicHJvcGVydHkiLCJzZXNzaW9uSWQiLCJsZW5ndGgiLCJiZWZvcmVFYWNoIiwiZGVzaXJlZENhcGFiaWxpdGllcyIsIm5vdCIsImV4aXN0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9lMmUvanNvbndwLXByb3h5L3Byb3h5LmUyZS5zcGVjLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SldQcm94eSwgc2VydmVyLCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb259IGZyb20gJy4uLy4uLy4uL2xpYic7XG5pbXBvcnQge0Zha2VEcml2ZXJ9IGZyb20gJy4uL3Byb3RvY29sL2Zha2UtZHJpdmVyJztcblxuZGVzY3JpYmUoJ3Byb3h5JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBqd3Byb3h5ID0gbmV3IEpXUHJveHkoKTtcbiAgbGV0IGJhc2VTZXJ2ZXI7XG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZVNlcnZlciA9IGF3YWl0IHNlcnZlcih7XG4gICAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb246IHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbihuZXcgRmFrZURyaXZlcigpKSxcbiAgICAgIHBvcnQ6IDQ0NDQsXG4gICAgfSk7XG4gIH0pO1xuICBhZnRlcihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgYmFzZVNlcnZlci5jbG9zZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHByb3h5IHN0YXR1cyBzdHJhaWdodCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgW3JlcywgcmVzQm9keV0gPSBhd2FpdCBqd3Byb3h5LnByb3h5KCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgIHJlcy5zdGF0dXNDb2RlLnNob3VsZC5lcXVhbCgyMDApO1xuICAgIHJlc0JvZHkudmFsdWUuc2hvdWxkLmVxdWFsKGBJJ20gZmluZWApO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBwcm94eSBzdGF0dXMgYXMgY29tbWFuZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBqd3Byb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgcmVzLnNob3VsZC5lcWwoYEknbSBmaW5lYCk7XG4gIH0pO1xuICBkZXNjcmliZSgnbmV3IHNlc3Npb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGp3cHJveHkuY29tbWFuZCgnJywgJ0RFTEVURScpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgc3RhcnQgYSBuZXcgc2Vzc2lvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNhcHMgPSB7YnJvd3Nlck5hbWU6ICdmYWtlJ307XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBqd3Byb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICAgIGNhcGFiaWxpdGllczoge2Fsd2F5c01hdGNoOiBjYXBzfSxcbiAgICAgIH0pO1xuICAgICAgcmVzLmNhcGFiaWxpdGllcy5hbHdheXNNYXRjaC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnYnJvd3Nlck5hbWUnKTtcbiAgICAgIGp3cHJveHkuc2Vzc2lvbklkLnNob3VsZC5oYXZlLmxlbmd0aCg0OCk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnZGVsZXRlIHNlc3Npb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBqd3Byb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7ZGVzaXJlZENhcGFiaWxpdGllczoge319KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHF1aXQgYSBzZXNzaW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgandwcm94eS5jb21tYW5kKCcnLCAnREVMRVRFJyk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHJlcyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7QUFDQTs7QUFFQUEsUUFBUSxDQUFDLE9BQUQsRUFBVSxZQUFZO0VBQzVCLE1BQU1DLE9BQU8sR0FBRyxJQUFJQyxZQUFKLEVBQWhCO0VBQ0EsSUFBSUMsVUFBSjtFQUNBQyxNQUFNLENBQUMsa0JBQWtCO0lBQ3ZCRCxVQUFVLEdBQUcsTUFBTSxJQUFBRSxXQUFBLEVBQU87TUFDeEJDLHdCQUF3QixFQUFFLElBQUFBLDZCQUFBLEVBQXlCLElBQUlDLHNCQUFKLEVBQXpCLENBREY7TUFFeEJDLElBQUksRUFBRTtJQUZrQixDQUFQLENBQW5CO0VBSUQsQ0FMSyxDQUFOO0VBTUFDLEtBQUssQ0FBQyxrQkFBa0I7SUFDdEIsTUFBTU4sVUFBVSxDQUFDTyxLQUFYLEVBQU47RUFDRCxDQUZJLENBQUw7RUFJQUMsRUFBRSxDQUFDLDhCQUFELEVBQWlDLGtCQUFrQjtJQUNuRCxJQUFJLENBQUNDLEdBQUQsRUFBTUMsT0FBTixJQUFpQixNQUFNWixPQUFPLENBQUNhLEtBQVIsQ0FBYyxTQUFkLEVBQXlCLEtBQXpCLENBQTNCO0lBQ0FGLEdBQUcsQ0FBQ0csVUFBSixDQUFlQyxNQUFmLENBQXNCQyxLQUF0QixDQUE0QixHQUE1QjtJQUNBSixPQUFPLENBQUNLLEtBQVIsQ0FBY0YsTUFBZCxDQUFxQkMsS0FBckIsQ0FBNEIsVUFBNUI7RUFDRCxDQUpDLENBQUY7RUFLQU4sRUFBRSxDQUFDLGdDQUFELEVBQW1DLGtCQUFrQjtJQUNyRCxNQUFNQyxHQUFHLEdBQUcsTUFBTVgsT0FBTyxDQUFDa0IsT0FBUixDQUFnQixTQUFoQixFQUEyQixLQUEzQixDQUFsQjtJQUNBUCxHQUFHLENBQUNJLE1BQUosQ0FBV0ksR0FBWCxDQUFnQixVQUFoQjtFQUNELENBSEMsQ0FBRjtFQUlBcEIsUUFBUSxDQUFDLGFBQUQsRUFBZ0IsWUFBWTtJQUNsQ3FCLFNBQVMsQ0FBQyxrQkFBa0I7TUFDMUIsTUFBTXBCLE9BQU8sQ0FBQ2tCLE9BQVIsQ0FBZ0IsRUFBaEIsRUFBb0IsUUFBcEIsQ0FBTjtJQUNELENBRlEsQ0FBVDtJQUdBUixFQUFFLENBQUMsNEJBQUQsRUFBK0Isa0JBQWtCO01BQ2pELE1BQU1XLElBQUksR0FBRztRQUFDQyxXQUFXLEVBQUU7TUFBZCxDQUFiO01BQ0EsTUFBTVgsR0FBRyxHQUFHLE1BQU1YLE9BQU8sQ0FBQ2tCLE9BQVIsQ0FBZ0IsVUFBaEIsRUFBNEIsTUFBNUIsRUFBb0M7UUFDcERLLFlBQVksRUFBRTtVQUFDQyxXQUFXLEVBQUVIO1FBQWQ7TUFEc0MsQ0FBcEMsQ0FBbEI7TUFHQVYsR0FBRyxDQUFDWSxZQUFKLENBQWlCQyxXQUFqQixDQUE2QlQsTUFBN0IsQ0FBb0NVLElBQXBDLENBQXlDQyxRQUF6QyxDQUFrRCxhQUFsRDtNQUNBMUIsT0FBTyxDQUFDMkIsU0FBUixDQUFrQlosTUFBbEIsQ0FBeUJVLElBQXpCLENBQThCRyxNQUE5QixDQUFxQyxFQUFyQztJQUNELENBUEMsQ0FBRjtFQVFELENBWk8sQ0FBUjtFQWFBN0IsUUFBUSxDQUFDLGdCQUFELEVBQW1CLFlBQVk7SUFDckM4QixVQUFVLENBQUMsa0JBQWtCO01BQzNCLE1BQU03QixPQUFPLENBQUNrQixPQUFSLENBQWdCLFVBQWhCLEVBQTRCLE1BQTVCLEVBQW9DO1FBQUNZLG1CQUFtQixFQUFFO01BQXRCLENBQXBDLENBQU47SUFDRCxDQUZTLENBQVY7SUFHQXBCLEVBQUUsQ0FBQyx1QkFBRCxFQUEwQixrQkFBa0I7TUFDNUMsTUFBTUMsR0FBRyxHQUFHLE1BQU1YLE9BQU8sQ0FBQ2tCLE9BQVIsQ0FBZ0IsRUFBaEIsRUFBb0IsUUFBcEIsQ0FBbEI7TUFDQUgsTUFBTSxDQUFDZ0IsR0FBUCxDQUFXQyxLQUFYLENBQWlCckIsR0FBakI7SUFDRCxDQUhDLENBQUY7RUFJRCxDQVJPLENBQVI7QUFTRCxDQTVDTyxDQUFSIn0=