@appium/base-driver 8.5.7 → 8.6.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 (62) hide show
  1. package/build/lib/basedriver/capabilities.js +2 -2
  2. package/build/lib/basedriver/commands/log.js +2 -4
  3. package/build/lib/basedriver/core.d.ts +8 -0
  4. package/build/lib/basedriver/core.d.ts.map +1 -1
  5. package/build/lib/basedriver/core.js +5 -1
  6. package/build/lib/basedriver/helpers.js +2 -2
  7. package/build/lib/express/server.d.ts +69 -7
  8. package/build/lib/express/server.d.ts.map +1 -1
  9. package/build/lib/express/server.js +18 -16
  10. package/build/lib/express/websocket.d.ts +12 -30
  11. package/build/lib/express/websocket.d.ts.map +1 -1
  12. package/build/lib/express/websocket.js +6 -4
  13. package/build/lib/index.d.ts +11 -180
  14. package/build/lib/index.js +107 -80
  15. package/build/lib/jsonwp-proxy/protocol-converter.js +2 -4
  16. package/build/lib/jsonwp-proxy/proxy.js +3 -7
  17. package/build/lib/protocol/protocol.d.ts +6 -4
  18. package/build/lib/protocol/protocol.d.ts.map +1 -1
  19. package/build/lib/protocol/protocol.js +5 -7
  20. package/build/lib/protocol/routes.js +2 -6
  21. package/build/tsconfig.tsbuildinfo +1 -1
  22. package/lib/basedriver/core.js +11 -0
  23. package/lib/express/server.js +124 -36
  24. package/lib/express/websocket.js +13 -11
  25. package/lib/index.js +16 -62
  26. package/lib/protocol/protocol.js +8 -1
  27. package/package.json +16 -14
  28. package/build/test/basedriver/README.md +0 -5
  29. package/build/test/basedriver/driver-e2e-tests.js +0 -413
  30. package/build/test/basedriver/driver-tests.js +0 -572
  31. package/build/test/basedriver/index.js +0 -26
  32. package/build/test/e2e/basedriver/driver.e2e.spec.js +0 -15
  33. package/build/test/e2e/basedriver/helpers.e2e.spec.js +0 -192
  34. package/build/test/e2e/basedriver/websockets.e2e.spec.js +0 -87
  35. package/build/test/e2e/express/server.e2e.spec.js +0 -159
  36. package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +0 -59
  37. package/build/test/e2e/protocol/fake-driver.js +0 -163
  38. package/build/test/e2e/protocol/helpers.js +0 -25
  39. package/build/test/e2e/protocol/protocol.e2e.spec.js +0 -1186
  40. package/build/test/helpers.js +0 -55
  41. package/build/test/unit/basedriver/capabilities.spec.js +0 -672
  42. package/build/test/unit/basedriver/capability.spec.js +0 -353
  43. package/build/test/unit/basedriver/commands/event.spec.js +0 -110
  44. package/build/test/unit/basedriver/commands/log.spec.js +0 -92
  45. package/build/test/unit/basedriver/device-settings.spec.js +0 -97
  46. package/build/test/unit/basedriver/driver.spec.js +0 -15
  47. package/build/test/unit/basedriver/helpers.spec.js +0 -151
  48. package/build/test/unit/basedriver/timeout.spec.js +0 -135
  49. package/build/test/unit/express/server.spec.js +0 -155
  50. package/build/test/unit/express/static.spec.js +0 -26
  51. package/build/test/unit/jsonwp-proxy/mock-request.js +0 -91
  52. package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +0 -171
  53. package/build/test/unit/jsonwp-proxy/proxy.spec.js +0 -292
  54. package/build/test/unit/jsonwp-proxy/url.spec.js +0 -165
  55. package/build/test/unit/jsonwp-status/status.spec.js +0 -34
  56. package/build/test/unit/protocol/errors.spec.js +0 -390
  57. package/build/test/unit/protocol/routes.spec.js +0 -80
  58. package/build/test/unit/protocol/validator.spec.js +0 -149
  59. package/test/basedriver/README.md +0 -5
  60. package/test/basedriver/driver-e2e-tests.js +0 -386
  61. package/test/basedriver/driver-tests.js +0 -624
  62. package/test/basedriver/index.js +0 -6
@@ -19,13 +19,75 @@ export type StartServerOpts = {
19
19
  */
20
20
  hostname?: string | undefined;
21
21
  };
22
- export function server(opts?: {}): Promise<any>;
23
- export function configureServer({ app, addRoutes, allowCors, basePath, extraMethodMap, }: {
24
- app: any;
25
- addRoutes: any;
22
+ export type AppiumServer = import('@appium/types').AppiumServer;
23
+ export type AppiumServerSocket = import('@appium/types').AppiumServerSocket;
24
+ export type MethodMap = import('@appium/types').MethodMap;
25
+ /**
26
+ * Options for {@linkcode configureHttp }
27
+ */
28
+ export type ConfigureHttpOpts = {
29
+ /**
30
+ * - HTTP server instance
31
+ */
32
+ httpServer: import('http').Server;
33
+ /**
34
+ * - Rejection function from `Promise` constructor
35
+ */
36
+ reject: (error?: any) => void;
37
+ /**
38
+ * - Keep-alive timeout in milliseconds
39
+ */
40
+ keepAliveTimeout: number;
41
+ };
42
+ /**
43
+ * Options for {@linkcode server }
44
+ */
45
+ export type ServerOpts = {
46
+ routeConfiguringFunction: RouteConfiguringFunction;
47
+ port: number;
48
+ hostname?: string | undefined;
26
49
  allowCors?: boolean | undefined;
27
50
  basePath?: string | undefined;
28
- extraMethodMap?: {} | undefined;
29
- }): void;
30
- export function normalizeBasePath(basePath: any): any;
51
+ extraMethodMap?: MethodMap | undefined;
52
+ serverUpdaters?: import("@appium/types").UpdateServerCallback[] | undefined;
53
+ keepAliveTimeout?: number | undefined;
54
+ };
55
+ /**
56
+ * A function which configures routes
57
+ */
58
+ export type RouteConfiguringFunction = (app: import('express').Express, opts?: RouteConfiguringFunctionOpts | undefined) => void;
59
+ /**
60
+ * Options for a {@linkcode RouteConfiguringFunction }
61
+ */
62
+ export type RouteConfiguringFunctionOpts = {
63
+ basePath?: string | undefined;
64
+ extraMethodMap?: MethodMap | undefined;
65
+ };
66
+ /**
67
+ * Options for {@linkcode configureServer }
68
+ */
69
+ export type ConfigureServerOpts = {
70
+ app: import('express').Express;
71
+ addRoutes: RouteConfiguringFunction;
72
+ allowCors?: boolean | undefined;
73
+ basePath?: string | undefined;
74
+ extraMethodMap?: MethodMap | undefined;
75
+ };
76
+ /**
77
+ *
78
+ * @param {ServerOpts} opts
79
+ * @returns {Promise<AppiumServer>}
80
+ */
81
+ export function server(opts: ServerOpts): Promise<AppiumServer>;
82
+ /**
83
+ * Sets up some Express middleware and stuff
84
+ * @param {ConfigureServerOpts} opts
85
+ */
86
+ export function configureServer({ app, addRoutes, allowCors, basePath, extraMethodMap, }: ConfigureServerOpts): void;
87
+ /**
88
+ * Normalize base path string
89
+ * @param {string} basePath
90
+ * @returns {string}
91
+ */
92
+ export function normalizeBasePath(basePath: string): string;
31
93
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../lib/express/server.js"],"names":[],"mappings":";;;;;;;gBAyOc,OAAO,MAAM,EAAE,MAAM;;;;UACrB,MAAM;;;;sBACN,MAAM;;;;;;AA3MpB,gDA8CC;AAED;;;;;;SA6CC;AAqFD,sDAgBC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../lib/express/server.js"],"names":[],"mappings":";;;;;;;gBA6Qc,OAAO,MAAM,EAAE,MAAM;;;;UACrB,MAAM;;;;sBACN,MAAM;;;;;;2BAKP,OAAO,eAAe,EAAE,YAAY;iCACpC,OAAO,eAAe,EAAE,kBAAkB;wBAC1C,OAAO,eAAe,EAAE,SAAS;;;;;;;;gBAMhC,OAAO,MAAM,EAAE,MAAM;;;;qBACZ,GAAG,KAAK,IAAI;;;;sBACrB,MAAM;;;;;;8BAMN,wBAAwB;UACxB,MAAM;;;;;;;;;;;6CAYT,OAAO,SAAS,EAAE,OAAO,sDAEvB,IAAI;;;;;;;;;;;;SAaH,OAAO,SAAS,EAAE,OAAO;eACzB,wBAAwB;;;;;AAjStC;;;;GAIG;AACH,6BAHW,UAAU,GACR,QAAQ,YAAY,CAAC,CAqDjC;AAED;;;GAGG;AACH,0FAFW,mBAAmB,QA+C7B;AAsGD;;;;GAIG;AACH,4CAHW,MAAM,GACJ,MAAM,CAkBlB"}
@@ -45,11 +45,11 @@ var _events = require("events");
45
45
 
46
46
  const KEEP_ALIVE_TIMEOUT_MS = 10 * 60 * 1000;
47
47
 
48
- async function server(opts = {}) {
48
+ async function server(opts) {
49
49
  const {
50
50
  routeConfiguringFunction,
51
51
  port,
52
- hostname = null,
52
+ hostname,
53
53
  allowCors = true,
54
54
  basePath = _constants.DEFAULT_BASE_PATH,
55
55
  extraMethodMap = {},
@@ -62,7 +62,7 @@ async function server(opts = {}) {
62
62
 
63
63
  return await new _bluebird.default(async (resolve, reject) => {
64
64
  try {
65
- configureHttp({
65
+ const appiumServer = configureHttp({
66
66
  httpServer,
67
67
  reject,
68
68
  keepAliveTimeout
@@ -76,7 +76,7 @@ async function server(opts = {}) {
76
76
  });
77
77
 
78
78
  for (const updater of serverUpdaters) {
79
- await updater(app, httpServer);
79
+ await updater(app, appiumServer);
80
80
  }
81
81
 
82
82
  app.all('*', _middleware.catch404Handler);
@@ -86,7 +86,7 @@ async function server(opts = {}) {
86
86
  port,
87
87
  keepAliveTimeout
88
88
  });
89
- resolve(httpServer);
89
+ resolve(appiumServer);
90
90
  } catch (err) {
91
91
  reject(err);
92
92
  }
@@ -144,13 +144,14 @@ function configureHttp({
144
144
  notifier: new _events.EventEmitter(),
145
145
  closed: false
146
146
  };
147
- httpServer.addWebSocketHandler = _websocket.addWebSocketHandler;
148
- httpServer.removeWebSocketHandler = _websocket.removeWebSocketHandler;
149
- httpServer.removeAllWebSocketHandlers = _websocket.removeAllWebSocketHandlers;
150
- httpServer.getWebSocketHandlers = _websocket.getWebSocketHandlers;
151
- const close = httpServer.close.bind(httpServer);
152
-
153
- httpServer.close = async () => await new _bluebird.default((resolve, reject) => {
147
+ const appiumServer = httpServer;
148
+ appiumServer.addWebSocketHandler = _websocket.addWebSocketHandler;
149
+ appiumServer.removeWebSocketHandler = _websocket.removeWebSocketHandler;
150
+ appiumServer.removeAllWebSocketHandlers = _websocket.removeAllWebSocketHandlers;
151
+ appiumServer.getWebSocketHandlers = _websocket.getWebSocketHandlers;
152
+ const close = appiumServer.close.bind(appiumServer);
153
+
154
+ appiumServer.close = async () => await new _bluebird.default((resolve, reject) => {
154
155
  serverState.closed = true;
155
156
  serverState.notifier.emit('shutdown');
156
157
 
@@ -166,7 +167,7 @@ function configureHttp({
166
167
  });
167
168
  });
168
169
 
169
- httpServer.on('error', err => {
170
+ appiumServer.on('error', err => {
170
171
  if (err.code === 'EADDRNOTAVAIL') {
171
172
  _logger.default.error('Could not start REST http interface listener. ' + 'Requested address is not available.');
172
173
  } else {
@@ -175,7 +176,7 @@ function configureHttp({
175
176
 
176
177
  reject(err);
177
178
  });
178
- httpServer.on('connection', socket => {
179
+ appiumServer.on('connection', socket => {
179
180
  socket.setTimeout(keepAliveTimeout);
180
181
  socket.on('error', reject);
181
182
 
@@ -187,7 +188,7 @@ function configureHttp({
187
188
  socket.once('close', () => serverState.notifier.removeListener('shutdown', destroy));
188
189
  serverState.notifier.once('shutdown', destroy);
189
190
  });
190
- httpServer.on('request', function (req, res) {
191
+ appiumServer.on('request', function (req, res) {
191
192
  const socket = req.connection || req.socket;
192
193
  socket._openReqCount++;
193
194
  res.on('finish', function () {
@@ -198,6 +199,7 @@ function configureHttp({
198
199
  }
199
200
  });
200
201
  });
202
+ return appiumServer;
201
203
  }
202
204
 
203
205
  async function startServer({
@@ -229,4 +231,4 @@ function normalizeBasePath(basePath) {
229
231
 
230
232
  return basePath;
231
233
  }
232
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJLRUVQX0FMSVZFX1RJTUVPVVRfTVMiLCJzZXJ2ZXIiLCJvcHRzIiwicm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIiwicG9ydCIsImhvc3RuYW1lIiwiYWxsb3dDb3JzIiwiYmFzZVBhdGgiLCJERUZBVUxUX0JBU0VfUEFUSCIsImV4dHJhTWV0aG9kTWFwIiwic2VydmVyVXBkYXRlcnMiLCJrZWVwQWxpdmVUaW1lb3V0IiwiYXBwIiwiZXhwcmVzcyIsImh0dHBTZXJ2ZXIiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJjb25maWd1cmVIdHRwIiwiY29uZmlndXJlU2VydmVyIiwiYWRkUm91dGVzIiwidXBkYXRlciIsImFsbCIsImNhdGNoNDA0SGFuZGxlciIsInN0YXJ0U2VydmVyIiwiZXJyIiwibm9ybWFsaXplQmFzZVBhdGgiLCJ1c2UiLCJlbmRMb2dGb3JtYXR0ZXIiLCJmYXZpY29uIiwicGF0aCIsIlNUQVRJQ19ESVIiLCJzdGF0aWMiLCJwcm9kdWNlRXJyb3IiLCJwcm9kdWNlQ3Jhc2giLCJhbGxvd0Nyb3NzRG9tYWluIiwiYWxsb3dDcm9zc0RvbWFpbkFzeW5jRXhlY3V0ZSIsImhhbmRsZUlkZW1wb3RlbmN5IiwiZml4UHl0aG9uQ29udGVudFR5cGUiLCJkZWZhdWx0VG9KU09OQ29udGVudFR5cGUiLCJib2R5UGFyc2VyIiwidXJsZW5jb2RlZCIsImV4dGVuZGVkIiwibWV0aG9kT3ZlcnJpZGUiLCJjYXRjaEFsbEhhbmRsZXIiLCJqc29uIiwibGltaXQiLCJzdGFydExvZ0Zvcm1hdHRlciIsIndlbGNvbWUiLCJndWluZWFQaWciLCJndWluZWFQaWdTY3JvbGxhYmxlIiwiZ3VpbmVhUGlnQXBwQmFubmVyIiwic2VydmVyU3RhdGUiLCJub3RpZmllciIsIkV2ZW50RW1pdHRlciIsImNsb3NlZCIsImFkZFdlYlNvY2tldEhhbmRsZXIiLCJyZW1vdmVXZWJTb2NrZXRIYW5kbGVyIiwicmVtb3ZlQWxsV2ViU29ja2V0SGFuZGxlcnMiLCJnZXRXZWJTb2NrZXRIYW5kbGVycyIsImNsb3NlIiwiYmluZCIsImVtaXQiLCJsb2ciLCJpbmZvIiwib24iLCJjb2RlIiwiZXJyb3IiLCJzb2NrZXQiLCJzZXRUaW1lb3V0IiwiZGVzdHJveSIsIl9vcGVuUmVxQ291bnQiLCJvbmNlIiwicmVtb3ZlTGlzdGVuZXIiLCJyZXEiLCJyZXMiLCJjb25uZWN0aW9uIiwic3RhcnQiLCJwcm9taXNpZnkiLCJsaXN0ZW4iLCJjb250ZXh0Iiwic3RhcnRQcm9taXNlIiwiaGVhZGVyc1RpbWVvdXQiLCJfIiwiaXNTdHJpbmciLCJFcnJvciIsInJlcGxhY2UiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXhwcmVzcy9zZXJ2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCBmYXZpY29uIGZyb20gJ3NlcnZlLWZhdmljb24nO1xuaW1wb3J0IGJvZHlQYXJzZXIgZnJvbSAnYm9keS1wYXJzZXInO1xuaW1wb3J0IG1ldGhvZE92ZXJyaWRlIGZyb20gJ21ldGhvZC1vdmVycmlkZSc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7c3RhcnRMb2dGb3JtYXR0ZXIsIGVuZExvZ0Zvcm1hdHRlcn0gZnJvbSAnLi9leHByZXNzLWxvZ2dpbmcnO1xuaW1wb3J0IHtcbiAgYWxsb3dDcm9zc0RvbWFpbixcbiAgZml4UHl0aG9uQ29udGVudFR5cGUsXG4gIGRlZmF1bHRUb0pTT05Db250ZW50VHlwZSxcbiAgY2F0Y2hBbGxIYW5kbGVyLFxuICBhbGxvd0Nyb3NzRG9tYWluQXN5bmNFeGVjdXRlLFxuICBoYW5kbGVJZGVtcG90ZW5jeSxcbiAgY2F0Y2g0MDRIYW5kbGVyLFxufSBmcm9tICcuL21pZGRsZXdhcmUnO1xuaW1wb3J0IHtndWluZWFQaWcsIGd1aW5lYVBpZ1Njcm9sbGFibGUsIGd1aW5lYVBpZ0FwcEJhbm5lciwgd2VsY29tZSwgU1RBVElDX0RJUn0gZnJvbSAnLi9zdGF0aWMnO1xuaW1wb3J0IHtwcm9kdWNlRXJyb3IsIHByb2R1Y2VDcmFzaH0gZnJvbSAnLi9jcmFzaCc7XG5pbXBvcnQge1xuICBhZGRXZWJTb2NrZXRIYW5kbGVyLFxuICByZW1vdmVXZWJTb2NrZXRIYW5kbGVyLFxuICByZW1vdmVBbGxXZWJTb2NrZXRIYW5kbGVycyxcbiAgZ2V0V2ViU29ja2V0SGFuZGxlcnMsXG59IGZyb20gJy4vd2Vic29ja2V0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7REVGQVVMVF9CQVNFX1BBVEh9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgS0VFUF9BTElWRV9USU1FT1VUX01TID0gMTAgKiA2MCAqIDEwMDA7IC8vIDEwIG1pbnV0ZXNcblxuYXN5bmMgZnVuY3Rpb24gc2VydmVyKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLFxuICAgIHBvcnQsXG4gICAgaG9zdG5hbWUgPSBudWxsLFxuICAgIGFsbG93Q29ycyA9IHRydWUsXG4gICAgYmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSCxcbiAgICBleHRyYU1ldGhvZE1hcCA9IHt9LFxuICAgIHNlcnZlclVwZGF0ZXJzID0gW10sXG4gICAga2VlcEFsaXZlVGltZW91dCA9IEtFRVBfQUxJVkVfVElNRU9VVF9NUyxcbiAgfSA9IG9wdHM7XG5cbiAgLy8gY3JlYXRlIHRoZSBhY3R1YWwgaHR0cCBzZXJ2ZXJcbiAgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuICBjb25zdCBodHRwU2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXBwKTtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAvLyB3ZSBwdXQgYW4gYXN5bmMgZnVuY3Rpb24gYXMgdGhlIHByb21pc2UgY29uc3RydWN0b3IgYmVjYXVzZSB3ZSB3YW50IHNvbWUgdGhpbmdzIHRvIGhhcHBlbiBpblxuICAgIC8vIHNlcmlhbCAoYXBwbGljYXRpb24gb2YgcGx1Z2luIHVwZGF0ZXMsIGZvciBleGFtcGxlKS4gQnV0IHdlIHN0aWxsIG5lZWQgdG8gdXNlIGEgcHJvbWlzZSBoZXJlXG4gICAgLy8gYmVjYXVzZSBzb21lIGVsZW1lbnRzIG9mIHNlcnZlciBzdGFydCBmYWlsdXJlIG9ubHkgaGFwcGVuIGluIGh0dHBTZXJ2ZXIgbGlzdGVuZXJzLiBTbyB0aGVcbiAgICAvLyB3YXkgd2UgcmVzb2x2ZSBpdCBpcyB0byB1c2UgYW4gYXN5bmMgZnVuY3Rpb24gaGVyZSBidXQgdG8gd3JhcCBhbGwgdGhlIGlubmVyIGxvZ2ljIGluXG4gICAgLy8gdHJ5L2NhdGNoIHNvIGFueSBlcnJvcnMgY2FuIGJlIHBhc3NlZCB0byByZWplY3QuXG4gICAgdHJ5IHtcbiAgICAgIGNvbmZpZ3VyZUh0dHAoe2h0dHBTZXJ2ZXIsIHJlamVjdCwga2VlcEFsaXZlVGltZW91dH0pO1xuICAgICAgY29uZmlndXJlU2VydmVyKHtcbiAgICAgICAgYXBwLFxuICAgICAgICBhZGRSb3V0ZXM6IHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbixcbiAgICAgICAgYWxsb3dDb3JzLFxuICAgICAgICBiYXNlUGF0aCxcbiAgICAgICAgZXh0cmFNZXRob2RNYXAsXG4gICAgICB9KTtcbiAgICAgIC8vIGFsbG93IGV4dGVuc2lvbnMgdG8gdXBkYXRlIHRoZSBhcHAgYW5kIGh0dHAgc2VydmVyIG9iamVjdHNcbiAgICAgIGZvciAoY29uc3QgdXBkYXRlciBvZiBzZXJ2ZXJVcGRhdGVycykge1xuICAgICAgICBhd2FpdCB1cGRhdGVyKGFwcCwgaHR0cFNlcnZlcik7XG4gICAgICB9XG5cbiAgICAgIC8vIG9uY2UgYWxsIGNvbmZpZ3VyYXRpb25zIGFuZCB1cGRhdGVycyBoYXZlIGJlZW4gYXBwbGllZCwgbWFrZSBzdXJlIHRvIHNldCB1cCBhIGNhdGNoYWxsXG4gICAgICAvLyBoYW5kbGVyIHNvIHRoYXQgYW55dGhpbmcgdW5rbm93biA0MDRzLiBCdXQgZG8gdGhpcyBhZnRlciBldmVyeXRoaW5nIGVsc2Ugc2luY2Ugd2UgZG9uJ3RcbiAgICAgIC8vIHdhbnQgdG8gYmxvY2sgZXh0ZW5zaW9ucycgYWJpbGl0eSB0byBhZGQgcm91dGVzIGlmIHRoZXkgd2FudC5cbiAgICAgIGFwcC5hbGwoJyonLCBjYXRjaDQwNEhhbmRsZXIpO1xuXG4gICAgICBhd2FpdCBzdGFydFNlcnZlcih7aHR0cFNlcnZlciwgaG9zdG5hbWUsIHBvcnQsIGtlZXBBbGl2ZVRpbWVvdXR9KTtcbiAgICAgIHJlc29sdmUoaHR0cFNlcnZlcik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb25maWd1cmVTZXJ2ZXIoe1xuICBhcHAsXG4gIGFkZFJvdXRlcyxcbiAgYWxsb3dDb3JzID0gdHJ1ZSxcbiAgYmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSCxcbiAgZXh0cmFNZXRob2RNYXAgPSB7fSxcbn0pIHtcbiAgYmFzZVBhdGggPSBub3JtYWxpemVCYXNlUGF0aChiYXNlUGF0aCk7XG5cbiAgYXBwLnVzZShlbmRMb2dGb3JtYXR0ZXIpO1xuXG4gIC8vIHNldCB1cCBzdGF0aWMgYXNzZXRzXG4gIGFwcC51c2UoZmF2aWNvbihwYXRoLnJlc29sdmUoU1RBVElDX0RJUiwgJ2Zhdmljb24uaWNvJykpKTtcbiAgYXBwLnVzZShleHByZXNzLnN0YXRpYyhTVEFUSUNfRElSKSk7XG5cbiAgLy8gY3Jhc2ggcm91dGVzLCBmb3IgdGVzdGluZ1xuICBhcHAudXNlKGAke2Jhc2VQYXRofS9wcm9kdWNlX2Vycm9yYCwgcHJvZHVjZUVycm9yKTtcbiAgYXBwLnVzZShgJHtiYXNlUGF0aH0vY3Jhc2hgLCBwcm9kdWNlQ3Jhc2gpO1xuXG4gIC8vIGFkZCBtaWRkbGV3YXJlc1xuICBpZiAoYWxsb3dDb3JzKSB7XG4gICAgYXBwLnVzZShhbGxvd0Nyb3NzRG9tYWluKTtcbiAgfSBlbHNlIHtcbiAgICBhcHAudXNlKGFsbG93Q3Jvc3NEb21haW5Bc3luY0V4ZWN1dGUoYmFzZVBhdGgpKTtcbiAgfVxuICBhcHAudXNlKGhhbmRsZUlkZW1wb3RlbmN5KTtcbiAgYXBwLnVzZShmaXhQeXRob25Db250ZW50VHlwZShiYXNlUGF0aCkpO1xuICBhcHAudXNlKGRlZmF1bHRUb0pTT05Db250ZW50VHlwZSk7XG4gIGFwcC51c2UoYm9keVBhcnNlci51cmxlbmNvZGVkKHtleHRlbmRlZDogdHJ1ZX0pKTtcbiAgYXBwLnVzZShtZXRob2RPdmVycmlkZSgpKTtcbiAgYXBwLnVzZShjYXRjaEFsbEhhbmRsZXIpO1xuXG4gIC8vIG1ha2Ugc3VyZSBhcHBpdW0gbmV2ZXIgZmFpbHMgYmVjYXVzZSBvZiBhIGZpbGUgc2l6ZSB1cGxvYWQgbGltaXRcbiAgYXBwLnVzZShib2R5UGFyc2VyLmpzb24oe2xpbWl0OiAnMWdiJ30pKTtcblxuICAvLyBzZXQgdXAgc3RhcnQgbG9nZ2luZyAod2hpY2ggZGVwZW5kcyBvbiBib2R5UGFyc2VyIGRvaW5nIGl0cyB0aGluZylcbiAgYXBwLnVzZShzdGFydExvZ0Zvcm1hdHRlcik7XG5cbiAgYWRkUm91dGVzKGFwcCwge2Jhc2VQYXRoLCBleHRyYU1ldGhvZE1hcH0pO1xuXG4gIC8vIGR5bmFtaWMgcm91dGVzIGZvciB0ZXN0aW5nLCBldGMuXG4gIGFwcC5hbGwoJy93ZWxjb21lJywgd2VsY29tZSk7XG4gIGFwcC5hbGwoJy90ZXN0L2d1aW5lYS1waWcnLCBndWluZWFQaWcpO1xuICBhcHAuYWxsKCcvdGVzdC9ndWluZWEtcGlnLXNjcm9sbGFibGUnLCBndWluZWFQaWdTY3JvbGxhYmxlKTtcbiAgYXBwLmFsbCgnL3Rlc3QvZ3VpbmVhLXBpZy1hcHAtYmFubmVyJywgZ3VpbmVhUGlnQXBwQmFubmVyKTtcbn1cblxuZnVuY3Rpb24gY29uZmlndXJlSHR0cCh7aHR0cFNlcnZlciwgcmVqZWN0LCBrZWVwQWxpdmVUaW1lb3V0fSkge1xuICBjb25zdCBzZXJ2ZXJTdGF0ZSA9IHtcbiAgICBub3RpZmllcjogbmV3IEV2ZW50RW1pdHRlcigpLFxuICAgIGNsb3NlZDogZmFsc2UsXG4gIH07XG4gIGh0dHBTZXJ2ZXIuYWRkV2ViU29ja2V0SGFuZGxlciA9IGFkZFdlYlNvY2tldEhhbmRsZXI7XG4gIGh0dHBTZXJ2ZXIucmVtb3ZlV2ViU29ja2V0SGFuZGxlciA9IHJlbW92ZVdlYlNvY2tldEhhbmRsZXI7XG4gIGh0dHBTZXJ2ZXIucmVtb3ZlQWxsV2ViU29ja2V0SGFuZGxlcnMgPSByZW1vdmVBbGxXZWJTb2NrZXRIYW5kbGVycztcbiAgaHR0cFNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycyA9IGdldFdlYlNvY2tldEhhbmRsZXJzO1xuXG4gIC8vIGh0dHAuU2VydmVyLmNsb3NlKCkgb25seSBzdG9wcyBuZXcgY29ubmVjdGlvbnMsIGJ1dCB3ZSBuZWVkIHRvIHdhaXQgdW50aWxcbiAgLy8gYWxsIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQgYW5kIHRoZSBgY2xvc2VgIGV2ZW50IGlzIGVtaXR0ZWRcbiAgY29uc3QgY2xvc2UgPSBodHRwU2VydmVyLmNsb3NlLmJpbmQoaHR0cFNlcnZlcik7XG4gIGh0dHBTZXJ2ZXIuY2xvc2UgPSBhc3luYyAoKSA9PlxuICAgIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS12MC54LWFyY2hpdmUvaXNzdWVzLzkwNjYjaXNzdWVjb21tZW50LTEyNDIxMDU3NlxuICAgICAgc2VydmVyU3RhdGUuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHNlcnZlclN0YXRlLm5vdGlmaWVyLmVtaXQoJ3NodXRkb3duJyk7XG4gICAgICBsb2cuaW5mbygnV2FpdGluZyB1bnRpbCB0aGUgc2VydmVyIGlzIGNsb3NlZCcpO1xuICAgICAgaHR0cFNlcnZlci5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIGxvZy5pbmZvKCdSZWNlaXZlZCBzZXJ2ZXIgY2xvc2UgZXZlbnQnKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICBjbG9zZSgoZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgICB9KTtcbiAgICB9KTtcblxuICBodHRwU2VydmVyLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFQUREUk5PVEFWQUlMJykge1xuICAgICAgbG9nLmVycm9yKFxuICAgICAgICAnQ291bGQgbm90IHN0YXJ0IFJFU1QgaHR0cCBpbnRlcmZhY2UgbGlzdGVuZXIuICcgKyAnUmVxdWVzdGVkIGFkZHJlc3MgaXMgbm90IGF2YWlsYWJsZS4nXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZXJyb3IoXG4gICAgICAgICdDb3VsZCBub3Qgc3RhcnQgUkVTVCBodHRwIGludGVyZmFjZSBsaXN0ZW5lci4gVGhlIHJlcXVlc3RlZCAnICtcbiAgICAgICAgICAncG9ydCBtYXkgYWxyZWFkeSBiZSBpbiB1c2UuIFBsZWFzZSBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gJyArXG4gICAgICAgICAgJ290aGVyIGluc3RhbmNlIG9mIHRoaXMgc2VydmVyIHJ1bm5pbmcgYWxyZWFkeS4nXG4gICAgICApO1xuICAgIH1cbiAgICByZWplY3QoZXJyKTtcbiAgfSk7XG5cbiAgaHR0cFNlcnZlci5vbignY29ubmVjdGlvbicsIChzb2NrZXQpID0+IHtcbiAgICBzb2NrZXQuc2V0VGltZW91dChrZWVwQWxpdmVUaW1lb3V0KTtcbiAgICBzb2NrZXQub24oJ2Vycm9yJywgcmVqZWN0KTtcblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgIH1cbiAgICBzb2NrZXQuX29wZW5SZXFDb3VudCA9IDA7XG4gICAgc29ja2V0Lm9uY2UoJ2Nsb3NlJywgKCkgPT4gc2VydmVyU3RhdGUubm90aWZpZXIucmVtb3ZlTGlzdGVuZXIoJ3NodXRkb3duJywgZGVzdHJveSkpO1xuICAgIHNlcnZlclN0YXRlLm5vdGlmaWVyLm9uY2UoJ3NodXRkb3duJywgZGVzdHJveSk7XG4gIH0pO1xuXG4gIGh0dHBTZXJ2ZXIub24oJ3JlcXVlc3QnLCBmdW5jdGlvbiAocmVxLCByZXMpIHtcbiAgICBjb25zdCBzb2NrZXQgPSByZXEuY29ubmVjdGlvbiB8fCByZXEuc29ja2V0O1xuICAgIHNvY2tldC5fb3BlblJlcUNvdW50Kys7XG4gICAgcmVzLm9uKCdmaW5pc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzb2NrZXQuX29wZW5SZXFDb3VudC0tO1xuICAgICAgaWYgKHNlcnZlclN0YXRlLmNsb3NlZCAmJiBzb2NrZXQuX29wZW5SZXFDb3VudCA9PT0gMCkge1xuICAgICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtTdGFydFNlcnZlck9wdHN9IG9wdHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXJ2ZXIoe2h0dHBTZXJ2ZXIsIHBvcnQsIGhvc3RuYW1lLCBrZWVwQWxpdmVUaW1lb3V0fSkge1xuICAvLyBJZiB0aGUgaG9zdG5hbWUgaXMgb21pdHRlZCwgdGhlIHNlcnZlciB3aWxsIGFjY2VwdFxuICAvLyBjb25uZWN0aW9ucyBvbiBhbnkgSVAgYWRkcmVzc1xuICAvKiogQHR5cGUgeyhwb3J0OiBudW1iZXIsIGhvc3RuYW1lPzogc3RyaW5nKSA9PiBCPGh0dHAuU2VydmVyPn0gKi9cbiAgY29uc3Qgc3RhcnQgPSBCLnByb21pc2lmeShodHRwU2VydmVyLmxpc3Rlbiwge2NvbnRleHQ6IGh0dHBTZXJ2ZXJ9KTtcbiAgY29uc3Qgc3RhcnRQcm9taXNlID0gc3RhcnQocG9ydCwgaG9zdG5hbWUpO1xuICBodHRwU2VydmVyLmtlZXBBbGl2ZVRpbWVvdXQgPSBrZWVwQWxpdmVUaW1lb3V0O1xuICAvLyBoZWFkZXJzIHRpbWVvdXQgbXVzdCBiZSBncmVhdGVyIHRoYW4ga2VlcEFsaXZlVGltZW91dFxuICBodHRwU2VydmVyLmhlYWRlcnNUaW1lb3V0ID0ga2VlcEFsaXZlVGltZW91dCArIDUgKiAxMDAwO1xuICBhd2FpdCBzdGFydFByb21pc2U7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUJhc2VQYXRoKGJhc2VQYXRoKSB7XG4gIGlmICghXy5pc1N0cmluZyhiYXNlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGF0aCBwcmVmaXggJHtiYXNlUGF0aH1gKTtcbiAgfVxuXG4gIC8vIGVuc3VyZSB0aGUgcGF0aCBwcmVmaXggZG9lcyBub3QgZW5kIGluICcvJywgc2luY2Ugb3VyIG1ldGhvZCBtYXBcbiAgLy8gc3RhcnRzIGFsbCBwYXRocyB3aXRoICcvJ1xuICBiYXNlUGF0aCA9IGJhc2VQYXRoLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgLy8gbGlrZXdpc2UsIGVuc3VyZSB0aGUgcGF0aCBwcmVmaXggZG9lcyBhbHdheXMgU1RBUlQgd2l0aCAvLCB1bmxlc3MgdGhlIHBhdGhcbiAgLy8gaXMgZW1wdHkgbWVhbmluZyBubyBiYXNlIHBhdGggYXQgYWxsXG4gIGlmIChiYXNlUGF0aCAhPT0gJycgJiYgYmFzZVBhdGhbMF0gIT09ICcvJykge1xuICAgIGJhc2VQYXRoID0gYC8ke2Jhc2VQYXRofWA7XG4gIH1cblxuICByZXR1cm4gYmFzZVBhdGg7XG59XG5cbmV4cG9ydCB7c2VydmVyLCBjb25maWd1cmVTZXJ2ZXIsIG5vcm1hbGl6ZUJhc2VQYXRofTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmtjb2RlIHN0YXJ0U2VydmVyfS5cbiAqIEB0eXBlZGVmIFN0YXJ0U2VydmVyT3B0c1xuICogQHByb3BlcnR5IHtpbXBvcnQoJ2h0dHAnKS5TZXJ2ZXJ9IGh0dHBTZXJ2ZXIgLSBIVFRQIHNlcnZlciBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHBvcnQgLSBQb3J0IHRvIHJ1biBvblxuICogQHByb3BlcnR5IHtudW1iZXJ9IGtlZXBBbGl2ZVRpbWVvdXQgLSBLZWVwLWFsaXZlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hvc3RuYW1lXSAtIE9wdGlvbmFsIGhvc3RuYW1lXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVNBOztBQUNBOztBQUNBOztBQU1BOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLHFCQUFxQixHQUFHLEtBQUssRUFBTCxHQUFVLElBQXhDOztBQUVBLGVBQWVDLE1BQWYsQ0FBc0JDLElBQUksR0FBRyxFQUE3QixFQUFpQztFQUMvQixNQUFNO0lBQ0pDLHdCQURJO0lBRUpDLElBRkk7SUFHSkMsUUFBUSxHQUFHLElBSFA7SUFJSkMsU0FBUyxHQUFHLElBSlI7SUFLSkMsUUFBUSxHQUFHQyw0QkFMUDtJQU1KQyxjQUFjLEdBQUcsRUFOYjtJQU9KQyxjQUFjLEdBQUcsRUFQYjtJQVFKQyxnQkFBZ0IsR0FBR1g7RUFSZixJQVNGRSxJQVRKO0VBWUEsTUFBTVUsR0FBRyxHQUFHLElBQUFDLGdCQUFBLEdBQVo7O0VBQ0EsTUFBTUMsVUFBVSxHQUFHQyxhQUFBLENBQUtDLFlBQUwsQ0FBa0JKLEdBQWxCLENBQW5COztFQUNBLE9BQU8sTUFBTSxJQUFJSyxpQkFBSixDQUFNLE9BQU9DLE9BQVAsRUFBZ0JDLE1BQWhCLEtBQTJCO0lBTTVDLElBQUk7TUFDRkMsYUFBYSxDQUFDO1FBQUNOLFVBQUQ7UUFBYUssTUFBYjtRQUFxQlI7TUFBckIsQ0FBRCxDQUFiO01BQ0FVLGVBQWUsQ0FBQztRQUNkVCxHQURjO1FBRWRVLFNBQVMsRUFBRW5CLHdCQUZHO1FBR2RHLFNBSGM7UUFJZEMsUUFKYztRQUtkRTtNQUxj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
234
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJLRUVQX0FMSVZFX1RJTUVPVVRfTVMiLCJzZXJ2ZXIiLCJvcHRzIiwicm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIiwicG9ydCIsImhvc3RuYW1lIiwiYWxsb3dDb3JzIiwiYmFzZVBhdGgiLCJERUZBVUxUX0JBU0VfUEFUSCIsImV4dHJhTWV0aG9kTWFwIiwic2VydmVyVXBkYXRlcnMiLCJrZWVwQWxpdmVUaW1lb3V0IiwiYXBwIiwiZXhwcmVzcyIsImh0dHBTZXJ2ZXIiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJhcHBpdW1TZXJ2ZXIiLCJjb25maWd1cmVIdHRwIiwiY29uZmlndXJlU2VydmVyIiwiYWRkUm91dGVzIiwidXBkYXRlciIsImFsbCIsImNhdGNoNDA0SGFuZGxlciIsInN0YXJ0U2VydmVyIiwiZXJyIiwibm9ybWFsaXplQmFzZVBhdGgiLCJ1c2UiLCJlbmRMb2dGb3JtYXR0ZXIiLCJmYXZpY29uIiwicGF0aCIsIlNUQVRJQ19ESVIiLCJzdGF0aWMiLCJwcm9kdWNlRXJyb3IiLCJwcm9kdWNlQ3Jhc2giLCJhbGxvd0Nyb3NzRG9tYWluIiwiYWxsb3dDcm9zc0RvbWFpbkFzeW5jRXhlY3V0ZSIsImhhbmRsZUlkZW1wb3RlbmN5IiwiZml4UHl0aG9uQ29udGVudFR5cGUiLCJkZWZhdWx0VG9KU09OQ29udGVudFR5cGUiLCJib2R5UGFyc2VyIiwidXJsZW5jb2RlZCIsImV4dGVuZGVkIiwibWV0aG9kT3ZlcnJpZGUiLCJjYXRjaEFsbEhhbmRsZXIiLCJqc29uIiwibGltaXQiLCJzdGFydExvZ0Zvcm1hdHRlciIsIndlbGNvbWUiLCJndWluZWFQaWciLCJndWluZWFQaWdTY3JvbGxhYmxlIiwiZ3VpbmVhUGlnQXBwQmFubmVyIiwic2VydmVyU3RhdGUiLCJub3RpZmllciIsIkV2ZW50RW1pdHRlciIsImNsb3NlZCIsImFkZFdlYlNvY2tldEhhbmRsZXIiLCJyZW1vdmVXZWJTb2NrZXRIYW5kbGVyIiwicmVtb3ZlQWxsV2ViU29ja2V0SGFuZGxlcnMiLCJnZXRXZWJTb2NrZXRIYW5kbGVycyIsImNsb3NlIiwiYmluZCIsImVtaXQiLCJsb2ciLCJpbmZvIiwib24iLCJjb2RlIiwiZXJyb3IiLCJzb2NrZXQiLCJzZXRUaW1lb3V0IiwiZGVzdHJveSIsIl9vcGVuUmVxQ291bnQiLCJvbmNlIiwicmVtb3ZlTGlzdGVuZXIiLCJyZXEiLCJyZXMiLCJjb25uZWN0aW9uIiwic3RhcnQiLCJwcm9taXNpZnkiLCJsaXN0ZW4iLCJjb250ZXh0Iiwic3RhcnRQcm9taXNlIiwiaGVhZGVyc1RpbWVvdXQiLCJfIiwiaXNTdHJpbmciLCJFcnJvciIsInJlcGxhY2UiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXhwcmVzcy9zZXJ2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCBmYXZpY29uIGZyb20gJ3NlcnZlLWZhdmljb24nO1xuaW1wb3J0IGJvZHlQYXJzZXIgZnJvbSAnYm9keS1wYXJzZXInO1xuaW1wb3J0IG1ldGhvZE92ZXJyaWRlIGZyb20gJ21ldGhvZC1vdmVycmlkZSc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7c3RhcnRMb2dGb3JtYXR0ZXIsIGVuZExvZ0Zvcm1hdHRlcn0gZnJvbSAnLi9leHByZXNzLWxvZ2dpbmcnO1xuaW1wb3J0IHtcbiAgYWxsb3dDcm9zc0RvbWFpbixcbiAgZml4UHl0aG9uQ29udGVudFR5cGUsXG4gIGRlZmF1bHRUb0pTT05Db250ZW50VHlwZSxcbiAgY2F0Y2hBbGxIYW5kbGVyLFxuICBhbGxvd0Nyb3NzRG9tYWluQXN5bmNFeGVjdXRlLFxuICBoYW5kbGVJZGVtcG90ZW5jeSxcbiAgY2F0Y2g0MDRIYW5kbGVyLFxufSBmcm9tICcuL21pZGRsZXdhcmUnO1xuaW1wb3J0IHtndWluZWFQaWcsIGd1aW5lYVBpZ1Njcm9sbGFibGUsIGd1aW5lYVBpZ0FwcEJhbm5lciwgd2VsY29tZSwgU1RBVElDX0RJUn0gZnJvbSAnLi9zdGF0aWMnO1xuaW1wb3J0IHtwcm9kdWNlRXJyb3IsIHByb2R1Y2VDcmFzaH0gZnJvbSAnLi9jcmFzaCc7XG5pbXBvcnQge1xuICBhZGRXZWJTb2NrZXRIYW5kbGVyLFxuICByZW1vdmVXZWJTb2NrZXRIYW5kbGVyLFxuICByZW1vdmVBbGxXZWJTb2NrZXRIYW5kbGVycyxcbiAgZ2V0V2ViU29ja2V0SGFuZGxlcnMsXG59IGZyb20gJy4vd2Vic29ja2V0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7REVGQVVMVF9CQVNFX1BBVEh9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgS0VFUF9BTElWRV9USU1FT1VUX01TID0gMTAgKiA2MCAqIDEwMDA7IC8vIDEwIG1pbnV0ZXNcblxuLyoqXG4gKlxuICogQHBhcmFtIHtTZXJ2ZXJPcHRzfSBvcHRzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcHBpdW1TZXJ2ZXI+fVxuICovXG5hc3luYyBmdW5jdGlvbiBzZXJ2ZXIob3B0cykge1xuICBjb25zdCB7XG4gICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLFxuICAgIHBvcnQsXG4gICAgaG9zdG5hbWUsXG4gICAgYWxsb3dDb3JzID0gdHJ1ZSxcbiAgICBiYXNlUGF0aCA9IERFRkFVTFRfQkFTRV9QQVRILFxuICAgIGV4dHJhTWV0aG9kTWFwID0ge30sXG4gICAgc2VydmVyVXBkYXRlcnMgPSBbXSxcbiAgICBrZWVwQWxpdmVUaW1lb3V0ID0gS0VFUF9BTElWRV9USU1FT1VUX01TLFxuICB9ID0gb3B0cztcblxuICAvLyBjcmVhdGUgdGhlIGFjdHVhbCBodHRwIHNlcnZlclxuICBjb25zdCBhcHAgPSBleHByZXNzKCk7XG4gIGNvbnN0IGh0dHBTZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihhcHApO1xuICByZXR1cm4gYXdhaXQgbmV3IEIoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIC8vIHdlIHB1dCBhbiBhc3luYyBmdW5jdGlvbiBhcyB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvciBiZWNhdXNlIHdlIHdhbnQgc29tZSB0aGluZ3MgdG8gaGFwcGVuIGluXG4gICAgLy8gc2VyaWFsIChhcHBsaWNhdGlvbiBvZiBwbHVnaW4gdXBkYXRlcywgZm9yIGV4YW1wbGUpLiBCdXQgd2Ugc3RpbGwgbmVlZCB0byB1c2UgYSBwcm9taXNlIGhlcmVcbiAgICAvLyBiZWNhdXNlIHNvbWUgZWxlbWVudHMgb2Ygc2VydmVyIHN0YXJ0IGZhaWx1cmUgb25seSBoYXBwZW4gaW4gaHR0cFNlcnZlciBsaXN0ZW5lcnMuIFNvIHRoZVxuICAgIC8vIHdheSB3ZSByZXNvbHZlIGl0IGlzIHRvIHVzZSBhbiBhc3luYyBmdW5jdGlvbiBoZXJlIGJ1dCB0byB3cmFwIGFsbCB0aGUgaW5uZXIgbG9naWMgaW5cbiAgICAvLyB0cnkvY2F0Y2ggc28gYW55IGVycm9ycyBjYW4gYmUgcGFzc2VkIHRvIHJlamVjdC5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBwaXVtU2VydmVyID0gY29uZmlndXJlSHR0cCh7XG4gICAgICAgIGh0dHBTZXJ2ZXIsXG4gICAgICAgIHJlamVjdCxcbiAgICAgICAga2VlcEFsaXZlVGltZW91dCxcbiAgICAgIH0pO1xuICAgICAgY29uZmlndXJlU2VydmVyKHtcbiAgICAgICAgYXBwLFxuICAgICAgICBhZGRSb3V0ZXM6IHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbixcbiAgICAgICAgYWxsb3dDb3JzLFxuICAgICAgICBiYXNlUGF0aCxcbiAgICAgICAgZXh0cmFNZXRob2RNYXAsXG4gICAgICB9KTtcbiAgICAgIC8vIGFsbG93IGV4dGVuc2lvbnMgdG8gdXBkYXRlIHRoZSBhcHAgYW5kIGh0dHAgc2VydmVyIG9iamVjdHNcbiAgICAgIGZvciAoY29uc3QgdXBkYXRlciBvZiBzZXJ2ZXJVcGRhdGVycykge1xuICAgICAgICBhd2FpdCB1cGRhdGVyKGFwcCwgYXBwaXVtU2VydmVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gb25jZSBhbGwgY29uZmlndXJhdGlvbnMgYW5kIHVwZGF0ZXJzIGhhdmUgYmVlbiBhcHBsaWVkLCBtYWtlIHN1cmUgdG8gc2V0IHVwIGEgY2F0Y2hhbGxcbiAgICAgIC8vIGhhbmRsZXIgc28gdGhhdCBhbnl0aGluZyB1bmtub3duIDQwNHMuIEJ1dCBkbyB0aGlzIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZSBzaW5jZSB3ZSBkb24ndFxuICAgICAgLy8gd2FudCB0byBibG9jayBleHRlbnNpb25zJyBhYmlsaXR5IHRvIGFkZCByb3V0ZXMgaWYgdGhleSB3YW50LlxuICAgICAgYXBwLmFsbCgnKicsIGNhdGNoNDA0SGFuZGxlcik7XG5cbiAgICAgIGF3YWl0IHN0YXJ0U2VydmVyKHtodHRwU2VydmVyLCBob3N0bmFtZSwgcG9ydCwga2VlcEFsaXZlVGltZW91dH0pO1xuXG4gICAgICByZXNvbHZlKGFwcGl1bVNlcnZlcik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldHMgdXAgc29tZSBFeHByZXNzIG1pZGRsZXdhcmUgYW5kIHN0dWZmXG4gKiBAcGFyYW0ge0NvbmZpZ3VyZVNlcnZlck9wdHN9IG9wdHNcbiAqL1xuZnVuY3Rpb24gY29uZmlndXJlU2VydmVyKHtcbiAgYXBwLFxuICBhZGRSb3V0ZXMsXG4gIGFsbG93Q29ycyA9IHRydWUsXG4gIGJhc2VQYXRoID0gREVGQVVMVF9CQVNFX1BBVEgsXG4gIGV4dHJhTWV0aG9kTWFwID0ge30sXG59KSB7XG4gIGJhc2VQYXRoID0gbm9ybWFsaXplQmFzZVBhdGgoYmFzZVBhdGgpO1xuXG4gIGFwcC51c2UoZW5kTG9nRm9ybWF0dGVyKTtcblxuICAvLyBzZXQgdXAgc3RhdGljIGFzc2V0c1xuICBhcHAudXNlKGZhdmljb24ocGF0aC5yZXNvbHZlKFNUQVRJQ19ESVIsICdmYXZpY29uLmljbycpKSk7XG4gIGFwcC51c2UoZXhwcmVzcy5zdGF0aWMoU1RBVElDX0RJUikpO1xuXG4gIC8vIGNyYXNoIHJvdXRlcywgZm9yIHRlc3RpbmdcbiAgYXBwLnVzZShgJHtiYXNlUGF0aH0vcHJvZHVjZV9lcnJvcmAsIHByb2R1Y2VFcnJvcik7XG4gIGFwcC51c2UoYCR7YmFzZVBhdGh9L2NyYXNoYCwgcHJvZHVjZUNyYXNoKTtcblxuICAvLyBhZGQgbWlkZGxld2FyZXNcbiAgaWYgKGFsbG93Q29ycykge1xuICAgIGFwcC51c2UoYWxsb3dDcm9zc0RvbWFpbik7XG4gIH0gZWxzZSB7XG4gICAgYXBwLnVzZShhbGxvd0Nyb3NzRG9tYWluQXN5bmNFeGVjdXRlKGJhc2VQYXRoKSk7XG4gIH1cbiAgYXBwLnVzZShoYW5kbGVJZGVtcG90ZW5jeSk7XG4gIGFwcC51c2UoZml4UHl0aG9uQ29udGVudFR5cGUoYmFzZVBhdGgpKTtcbiAgYXBwLnVzZShkZWZhdWx0VG9KU09OQ29udGVudFR5cGUpO1xuICBhcHAudXNlKGJvZHlQYXJzZXIudXJsZW5jb2RlZCh7ZXh0ZW5kZWQ6IHRydWV9KSk7XG4gIGFwcC51c2UobWV0aG9kT3ZlcnJpZGUoKSk7XG4gIGFwcC51c2UoY2F0Y2hBbGxIYW5kbGVyKTtcblxuICAvLyBtYWtlIHN1cmUgYXBwaXVtIG5ldmVyIGZhaWxzIGJlY2F1c2Ugb2YgYSBmaWxlIHNpemUgdXBsb2FkIGxpbWl0XG4gIGFwcC51c2UoYm9keVBhcnNlci5qc29uKHtsaW1pdDogJzFnYid9KSk7XG5cbiAgLy8gc2V0IHVwIHN0YXJ0IGxvZ2dpbmcgKHdoaWNoIGRlcGVuZHMgb24gYm9keVBhcnNlciBkb2luZyBpdHMgdGhpbmcpXG4gIGFwcC51c2Uoc3RhcnRMb2dGb3JtYXR0ZXIpO1xuXG4gIGFkZFJvdXRlcyhhcHAsIHtiYXNlUGF0aCwgZXh0cmFNZXRob2RNYXB9KTtcblxuICAvLyBkeW5hbWljIHJvdXRlcyBmb3IgdGVzdGluZywgZXRjLlxuICBhcHAuYWxsKCcvd2VsY29tZScsIHdlbGNvbWUpO1xuICBhcHAuYWxsKCcvdGVzdC9ndWluZWEtcGlnJywgZ3VpbmVhUGlnKTtcbiAgYXBwLmFsbCgnL3Rlc3QvZ3VpbmVhLXBpZy1zY3JvbGxhYmxlJywgZ3VpbmVhUGlnU2Nyb2xsYWJsZSk7XG4gIGFwcC5hbGwoJy90ZXN0L2d1aW5lYS1waWctYXBwLWJhbm5lcicsIGd1aW5lYVBpZ0FwcEJhbm5lcik7XG59XG5cbi8qKlxuICogTW9ua2V5cGF0Y2hlcyB0aGUgYGh0dHAuU2VydmVyYCBpbnN0YW5jZSBhbmQgcmV0dXJucyBhIHtAbGlua2NvZGUgQXBwaXVtU2VydmVyfS5cbiAqIFRoaXMgZnVuY3Rpb24gX211dGF0ZXNfIHRoZSBgaHR0cFNlcnZlcmAgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb25maWd1cmVIdHRwT3B0c30gb3B0c1xuICogQHJldHVybnMge0FwcGl1bVNlcnZlcn1cbiAqL1xuZnVuY3Rpb24gY29uZmlndXJlSHR0cCh7aHR0cFNlcnZlciwgcmVqZWN0LCBrZWVwQWxpdmVUaW1lb3V0fSkge1xuICBjb25zdCBzZXJ2ZXJTdGF0ZSA9IHtcbiAgICBub3RpZmllcjogbmV3IEV2ZW50RW1pdHRlcigpLFxuICAgIGNsb3NlZDogZmFsc2UsXG4gIH07XG4gIC8vIFRTIGRvZXMgbm90IGxvdmUgbW9ua2V5cGF0Y2hpbmcuXG4gIGNvbnN0IGFwcGl1bVNlcnZlciA9IC8qKiBAdHlwZSB7QXBwaXVtU2VydmVyfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoaHR0cFNlcnZlcikpO1xuICBhcHBpdW1TZXJ2ZXIuYWRkV2ViU29ja2V0SGFuZGxlciA9IGFkZFdlYlNvY2tldEhhbmRsZXI7XG4gIGFwcGl1bVNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyID0gcmVtb3ZlV2ViU29ja2V0SGFuZGxlcjtcbiAgYXBwaXVtU2VydmVyLnJlbW92ZUFsbFdlYlNvY2tldEhhbmRsZXJzID0gcmVtb3ZlQWxsV2ViU29ja2V0SGFuZGxlcnM7XG4gIGFwcGl1bVNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycyA9IGdldFdlYlNvY2tldEhhbmRsZXJzO1xuXG4gIC8vIGh0dHAuU2VydmVyLmNsb3NlKCkgb25seSBzdG9wcyBuZXcgY29ubmVjdGlvbnMsIGJ1dCB3ZSBuZWVkIHRvIHdhaXQgdW50aWxcbiAgLy8gYWxsIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQgYW5kIHRoZSBgY2xvc2VgIGV2ZW50IGlzIGVtaXR0ZWRcbiAgY29uc3QgY2xvc2UgPSBhcHBpdW1TZXJ2ZXIuY2xvc2UuYmluZChhcHBpdW1TZXJ2ZXIpO1xuICBhcHBpdW1TZXJ2ZXIuY2xvc2UgPSBhc3luYyAoKSA9PlxuICAgIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS12MC54LWFyY2hpdmUvaXNzdWVzLzkwNjYjaXNzdWVjb21tZW50LTEyNDIxMDU3NlxuICAgICAgc2VydmVyU3RhdGUuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHNlcnZlclN0YXRlLm5vdGlmaWVyLmVtaXQoJ3NodXRkb3duJyk7XG4gICAgICBsb2cuaW5mbygnV2FpdGluZyB1bnRpbCB0aGUgc2VydmVyIGlzIGNsb3NlZCcpO1xuICAgICAgaHR0cFNlcnZlci5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIGxvZy5pbmZvKCdSZWNlaXZlZCBzZXJ2ZXIgY2xvc2UgZXZlbnQnKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICBjbG9zZSgoZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgICB9KTtcbiAgICB9KTtcblxuICBhcHBpdW1TZXJ2ZXIub24oXG4gICAgJ2Vycm9yJyxcbiAgICAvKiogQHBhcmFtIHtOb2RlSlMuRXJybm9FeGNlcHRpb259IGVyciAqLyAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFQUREUk5PVEFWQUlMJykge1xuICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgJ0NvdWxkIG5vdCBzdGFydCBSRVNUIGh0dHAgaW50ZXJmYWNlIGxpc3RlbmVyLiAnICsgJ1JlcXVlc3RlZCBhZGRyZXNzIGlzIG5vdCBhdmFpbGFibGUuJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yKFxuICAgICAgICAgICdDb3VsZCBub3Qgc3RhcnQgUkVTVCBodHRwIGludGVyZmFjZSBsaXN0ZW5lci4gVGhlIHJlcXVlc3RlZCAnICtcbiAgICAgICAgICAgICdwb3J0IG1heSBhbHJlYWR5IGJlIGluIHVzZS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyAnICtcbiAgICAgICAgICAgICdvdGhlciBpbnN0YW5jZSBvZiB0aGlzIHNlcnZlciBydW5uaW5nIGFscmVhZHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuICApO1xuXG4gIGFwcGl1bVNlcnZlci5vbihcbiAgICAnY29ubmVjdGlvbicsXG4gICAgLyoqIEBwYXJhbSB7QXBwaXVtU2VydmVyU29ja2V0fSBzb2NrZXQgKi8gKHNvY2tldCkgPT4ge1xuICAgICAgc29ja2V0LnNldFRpbWVvdXQoa2VlcEFsaXZlVGltZW91dCk7XG4gICAgICBzb2NrZXQub24oJ2Vycm9yJywgcmVqZWN0KTtcblxuICAgICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgIHNvY2tldC5fb3BlblJlcUNvdW50ID0gMDtcbiAgICAgIHNvY2tldC5vbmNlKCdjbG9zZScsICgpID0+IHNlcnZlclN0YXRlLm5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKCdzaHV0ZG93bicsIGRlc3Ryb3kpKTtcbiAgICAgIHNlcnZlclN0YXRlLm5vdGlmaWVyLm9uY2UoJ3NodXRkb3duJywgZGVzdHJveSk7XG4gICAgfVxuICApO1xuXG4gIGFwcGl1bVNlcnZlci5vbigncmVxdWVzdCcsIGZ1bmN0aW9uIChyZXEsIHJlcykge1xuICAgIGNvbnN0IHNvY2tldCA9IC8qKiBAdHlwZSB7QXBwaXVtU2VydmVyU29ja2V0fSAqLyAocmVxLmNvbm5lY3Rpb24gfHwgcmVxLnNvY2tldCk7XG4gICAgc29ja2V0Ll9vcGVuUmVxQ291bnQrKztcbiAgICByZXMub24oJ2ZpbmlzaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNvY2tldC5fb3BlblJlcUNvdW50LS07XG4gICAgICBpZiAoc2VydmVyU3RhdGUuY2xvc2VkICYmIHNvY2tldC5fb3BlblJlcUNvdW50ID09PSAwKSB7XG4gICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBhcHBpdW1TZXJ2ZXI7XG59XG5cbi8qKlxuICogU3RhcnRzIGFuIHtAbGlua2NvZGUgQXBwaXVtU2VydmVyfVxuICogQHBhcmFtIHtTdGFydFNlcnZlck9wdHN9IG9wdHNcbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydFNlcnZlcih7aHR0cFNlcnZlciwgcG9ydCwgaG9zdG5hbWUsIGtlZXBBbGl2ZVRpbWVvdXR9KSB7XG4gIC8vIElmIHRoZSBob3N0bmFtZSBpcyBvbWl0dGVkLCB0aGUgc2VydmVyIHdpbGwgYWNjZXB0XG4gIC8vIGNvbm5lY3Rpb25zIG9uIGFueSBJUCBhZGRyZXNzXG4gIC8qKiBAdHlwZSB7KHBvcnQ6IG51bWJlciwgaG9zdG5hbWU/OiBzdHJpbmcpID0+IEI8aHR0cC5TZXJ2ZXI+fSAqL1xuICBjb25zdCBzdGFydCA9IEIucHJvbWlzaWZ5KGh0dHBTZXJ2ZXIubGlzdGVuLCB7Y29udGV4dDogaHR0cFNlcnZlcn0pO1xuICBjb25zdCBzdGFydFByb21pc2UgPSBzdGFydChwb3J0LCBob3N0bmFtZSk7XG4gIGh0dHBTZXJ2ZXIua2VlcEFsaXZlVGltZW91dCA9IGtlZXBBbGl2ZVRpbWVvdXQ7XG4gIC8vIGhlYWRlcnMgdGltZW91dCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBrZWVwQWxpdmVUaW1lb3V0XG4gIGh0dHBTZXJ2ZXIuaGVhZGVyc1RpbWVvdXQgPSBrZWVwQWxpdmVUaW1lb3V0ICsgNSAqIDEwMDA7XG4gIGF3YWl0IHN0YXJ0UHJvbWlzZTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYmFzZSBwYXRoIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VQYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVCYXNlUGF0aChiYXNlUGF0aCkge1xuICBpZiAoIV8uaXNTdHJpbmcoYmFzZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhdGggcHJlZml4ICR7YmFzZVBhdGh9YCk7XG4gIH1cblxuICAvLyBlbnN1cmUgdGhlIHBhdGggcHJlZml4IGRvZXMgbm90IGVuZCBpbiAnLycsIHNpbmNlIG91ciBtZXRob2QgbWFwXG4gIC8vIHN0YXJ0cyBhbGwgcGF0aHMgd2l0aCAnLydcbiAgYmFzZVBhdGggPSBiYXNlUGF0aC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIGxpa2V3aXNlLCBlbnN1cmUgdGhlIHBhdGggcHJlZml4IGRvZXMgYWx3YXlzIFNUQVJUIHdpdGggLywgdW5sZXNzIHRoZSBwYXRoXG4gIC8vIGlzIGVtcHR5IG1lYW5pbmcgbm8gYmFzZSBwYXRoIGF0IGFsbFxuICBpZiAoYmFzZVBhdGggIT09ICcnICYmIGJhc2VQYXRoWzBdICE9PSAnLycpIHtcbiAgICBiYXNlUGF0aCA9IGAvJHtiYXNlUGF0aH1gO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VQYXRoO1xufVxuXG5leHBvcnQge3NlcnZlciwgY29uZmlndXJlU2VydmVyLCBub3JtYWxpemVCYXNlUGF0aH07XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBzdGFydFNlcnZlcn0uXG4gKiBAdHlwZWRlZiBTdGFydFNlcnZlck9wdHNcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCdodHRwJykuU2VydmVyfSBodHRwU2VydmVyIC0gSFRUUCBzZXJ2ZXIgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwb3J0IC0gUG9ydCB0byBydW4gb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZWVwQWxpdmVUaW1lb3V0IC0gS2VlcC1hbGl2ZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0bmFtZV0gLSBPcHRpb25hbCBob3N0bmFtZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkFwcGl1bVNlcnZlcn0gQXBwaXVtU2VydmVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtU2VydmVyU29ja2V0fSBBcHBpdW1TZXJ2ZXJTb2NrZXRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5NZXRob2RNYXB9IE1ldGhvZE1hcFxuICovXG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBjb25maWd1cmVIdHRwfVxuICogQHR5cGVkZWYgQ29uZmlndXJlSHR0cE9wdHNcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCdodHRwJykuU2VydmVyfSBodHRwU2VydmVyIC0gSFRUUCBzZXJ2ZXIgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7KGVycm9yPzogYW55KSA9PiB2b2lkfSByZWplY3QgLSBSZWplY3Rpb24gZnVuY3Rpb24gZnJvbSBgUHJvbWlzZWAgY29uc3RydWN0b3JcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZWVwQWxpdmVUaW1lb3V0IC0gS2VlcC1hbGl2ZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kc1xuICovXG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBzZXJ2ZXJ9XG4gKiBAdHlwZWRlZiBTZXJ2ZXJPcHRzXG4gKiBAcHJvcGVydHkge1JvdXRlQ29uZmlndXJpbmdGdW5jdGlvbn0gcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uXG4gKiBAcHJvcGVydHkge251bWJlcn0gcG9ydFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0bmFtZV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FsbG93Q29yc11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYmFzZVBhdGhdXG4gKiBAcHJvcGVydHkge01ldGhvZE1hcH0gW2V4dHJhTWV0aG9kTWFwXVxuICogQHByb3BlcnR5IHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5VcGRhdGVTZXJ2ZXJDYWxsYmFja1tdfSBbc2VydmVyVXBkYXRlcnNdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2tlZXBBbGl2ZVRpbWVvdXRdXG4gKi9cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHdoaWNoIGNvbmZpZ3VyZXMgcm91dGVzXG4gKiBAY2FsbGJhY2sgUm91dGVDb25maWd1cmluZ0Z1bmN0aW9uXG4gKiBAcGFyYW0ge2ltcG9ydCgnZXhwcmVzcycpLkV4cHJlc3N9IGFwcFxuICogQHBhcmFtIHtSb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb25PcHRzfSBbb3B0c11cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYSB7QGxpbmtjb2RlIFJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbn1cbiAqIEB0eXBlZGVmIFJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbk9wdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYmFzZVBhdGhdXG4gKiBAcHJvcGVydHkge01ldGhvZE1hcH0gW2V4dHJhTWV0aG9kTWFwXVxuICovXG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rY29kZSBjb25maWd1cmVTZXJ2ZXJ9XG4gKiBAdHlwZWRlZiBDb25maWd1cmVTZXJ2ZXJPcHRzXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnZXhwcmVzcycpLkV4cHJlc3N9IGFwcFxuICogQHByb3BlcnR5IHtSb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb259IGFkZFJvdXRlc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbYWxsb3dDb3JzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtiYXNlUGF0aF1cbiAqIEBwcm9wZXJ0eSB7TWV0aG9kTWFwfSBbZXh0cmFNZXRob2RNYXBdXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVNBOztBQUNBOztBQUNBOztBQU1BOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLHFCQUFxQixHQUFHLEtBQUssRUFBTCxHQUFVLElBQXhDOztBQU9BLGVBQWVDLE1BQWYsQ0FBc0JDLElBQXRCLEVBQTRCO0VBQzFCLE1BQU07SUFDSkMsd0JBREk7SUFFSkMsSUFGSTtJQUdKQyxRQUhJO0lBSUpDLFNBQVMsR0FBRyxJQUpSO0lBS0pDLFFBQVEsR0FBR0MsNEJBTFA7SUFNSkMsY0FBYyxHQUFHLEVBTmI7SUFPSkMsY0FBYyxHQUFHLEVBUGI7SUFRSkMsZ0JBQWdCLEdBQUdYO0VBUmYsSUFTRkUsSUFUSjtFQVlBLE1BQU1VLEdBQUcsR0FBRyxJQUFBQyxnQkFBQSxHQUFaOztFQUNBLE1BQU1DLFVBQVUsR0FBR0MsYUFBQSxDQUFLQyxZQUFMLENBQWtCSixHQUFsQixDQUFuQjs7RUFDQSxPQUFPLE1BQU0sSUFBSUssaUJBQUosQ0FBTSxPQUFPQyxPQUFQLEVBQWdCQyxNQUFoQixLQUEyQjtJQU01QyxJQUFJO01BQ0YsTUFBTUMsWUFBWSxHQUFHQyxhQUFhLENBQUM7UUFDakNQLFVBRGlDO1FBRWpDSyxNQUZpQztRQUdqQ1I7TUFIaUMsQ0FBRCxDQUFsQztNQUtBVyxlQUFlLENBQUM7UUFDZFYsR0FEYztRQUVkVyxTQUFTLEVBQUVwQix3QkFGRztRQUdkRyxTQUhjO1FBSWRDLFFBSmM7UUFLZEU7TUFMYyxDQUFELENBQWY7O01BUUEsS0FBSyxNQUFNZSxPQUFYLElBQXNCZCxjQUF0QixFQUFzQztRQUNw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
@@ -1,67 +1,49 @@
1
- export type WebSocketServer = import('http').Server & {
2
- webSocketsMapping: Record<string, import('ws').Server>;
3
- };
1
+ export type AppiumServer = import('@appium/types').AppiumServer;
4
2
  /**
5
3
  * Adds websocket handler to express server instance.
6
4
  * It is expected this function is called in Express
7
5
  * server instance context.
8
6
  *
9
- * @this {WebSocketServer} - An instance of express HTTP server.
7
+ * @this {AppiumServer} - An instance of express HTTP server.
10
8
  * @param {string} handlerPathname - Web socket endpoint path starting with
11
9
  * a single slash character. It is recommended to always add
12
10
  * DEFAULT_WS_PATHNAME_PREFIX to all web socket pathnames.
13
- * @param {Object} handlerServer - WebSocket server instance. See
11
+ * @param {import('ws').Server} handlerServer - WebSocket server instance. See
14
12
  * https://github.com/websockets/ws/pull/885 for more details
15
13
  * on how to configure the handler properly.
14
+ * @returns {Promise<void>}
16
15
  */
17
- export function addWebSocketHandler(this: WebSocketServer, handlerPathname: string, handlerServer: any): Promise<void>;
18
- export class addWebSocketHandler {
19
- /**
20
- * Adds websocket handler to express server instance.
21
- * It is expected this function is called in Express
22
- * server instance context.
23
- *
24
- * @this {WebSocketServer} - An instance of express HTTP server.
25
- * @param {string} handlerPathname - Web socket endpoint path starting with
26
- * a single slash character. It is recommended to always add
27
- * DEFAULT_WS_PATHNAME_PREFIX to all web socket pathnames.
28
- * @param {Object} handlerServer - WebSocket server instance. See
29
- * https://github.com/websockets/ws/pull/885 for more details
30
- * on how to configure the handler properly.
31
- */
32
- constructor(this: WebSocketServer, handlerPathname: string, handlerServer: any);
33
- webSocketsMapping: {};
34
- }
16
+ export function addWebSocketHandler(this: import("@appium/types").AppiumServer, handlerPathname: string, handlerServer: import('ws').Server): Promise<void>;
35
17
  /**
36
18
  * Removes existing websocket handler from express server instance.
37
19
  * The call is ignored if the given `handlerPathname` handler
38
20
  * is not present in the handlers list.
39
21
  * It is expected this function is called in Express
40
22
  * server instance context.
41
- *
23
+ * @this {AppiumServer}
42
24
  * @param {string} handlerPathname - Websocket endpoint path.
43
25
  * @returns {Promise<boolean>} true if the handlerPathname was found and deleted
44
26
  */
45
- export function removeWebSocketHandler(handlerPathname: string): Promise<boolean>;
27
+ export function removeWebSocketHandler(this: import("@appium/types").AppiumServer, handlerPathname: string): Promise<boolean>;
46
28
  /**
47
29
  * Removes all existing websocket handler from express server instance.
48
30
  * It is expected this function is called in Express
49
31
  * server instance context.
50
- *
32
+ * @this {AppiumServer}
51
33
  * @returns {Promise<boolean>} true if at least one handler has been deleted
52
34
  */
53
- export function removeAllWebSocketHandlers(): Promise<boolean>;
35
+ export function removeAllWebSocketHandlers(this: import("@appium/types").AppiumServer): Promise<boolean>;
54
36
  /**
55
37
  * Returns web socket handlers registered for the given server
56
38
  * instance.
57
39
  * It is expected this function is called in Express
58
40
  * server instance context.
59
41
  *
42
+ * @this {AppiumServer}
60
43
  * @param {string?} [keysFilter] - Only include pathnames with given
61
44
  * `keysFilter` value if set. All pairs will be included by default.
62
- * @returns {Promise<Object>} pathnames to websocket server isntances mapping
63
- * matching the search criteria or an empty object otherwise.
45
+ * @returns {Promise<Record<string, import('ws').Server>>} pathnames to websocket server instances mapping matching the search criteria or an empty object otherwise.
64
46
  */
65
- export function getWebSocketHandlers(keysFilter?: string | null | undefined): Promise<any>;
47
+ export function getWebSocketHandlers(this: import("@appium/types").AppiumServer, keysFilter?: string | null | undefined): Promise<Record<string, import('ws').Server>>;
66
48
  export const DEFAULT_WS_PATHNAME_PREFIX: "/ws";
67
49
  //# sourceMappingURL=websocket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../lib/express/websocket.js"],"names":[],"mappings":"8BAkIa,OAAO,MAAM,EAAE,MAAM,GAAG;IAAC,iBAAiB,EAAE,OAAO,MAAM,EAAC,OAAO,IAAI,EAAE,MAAM,CAAC,CAAA;CAAC;AA5H5F;;;;;;;;;;;;GAYG;AAEH,4EARW,MAAM,qCAgChB;;IAtCD;;;;;;;;;;;;OAYG;IAEH,oDARW,MAAM,sBAgChB;IAtBG,sBAA2B;;AAiD/B;;;;;;;;;GASG;AAEH,wDAJW,MAAM,GACJ,QAAQ,OAAO,CAAC,CAqB5B;AAED;;;;;;GAMG;AACH,8CAFa,QAAQ,OAAO,CAAC,CAY5B;AAzED;;;;;;;;;;GAUG;AAEH,8EAJa,YAAe,CAe3B;AAjED,+CAAyC"}
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../lib/express/websocket.js"],"names":[],"mappings":"2BAoIa,OAAO,eAAe,EAAE,YAAY;AA7HjD;;;;;;;;;;;;;GAaG;AACH,iGARW,MAAM,iBAGN,OAAO,IAAI,EAAE,MAAM,GAGjB,QAAQ,IAAI,CAAC,CA2BzB;AA2BD;;;;;;;;;GASG;AAEH,oGAJW,MAAM,GACJ,QAAQ,OAAO,CAAC,CAqB5B;AAED;;;;;;GAMG;AACH,wFAFa,QAAQ,OAAO,CAAC,CAY5B;AAzED;;;;;;;;;;GAUG;AAEH,0HAHa,QAAQ,OAAO,MAAM,EAAE,OAAO,IAAI,EAAE,MAAM,CAAC,CAAC,CAcxD;AAlED,+CAAyC"}
@@ -23,9 +23,11 @@ const DEFAULT_WS_PATHNAME_PREFIX = '/ws';
23
23
  exports.DEFAULT_WS_PATHNAME_PREFIX = DEFAULT_WS_PATHNAME_PREFIX;
24
24
 
25
25
  async function addWebSocketHandler(handlerPathname, handlerServer) {
26
+ const server = this;
27
+
26
28
  if (_lodash.default.isUndefined(this.webSocketsMapping)) {
27
- this.webSocketsMapping = {};
28
- this.on('upgrade', (request, socket, head) => {
29
+ server.webSocketsMapping = {};
30
+ server.on('upgrade', (request, socket, head) => {
29
31
  let currentPathname;
30
32
 
31
33
  try {
@@ -34,7 +36,7 @@ async function addWebSocketHandler(handlerPathname, handlerServer) {
34
36
  currentPathname = request.url;
35
37
  }
36
38
 
37
- for (const [pathname, wsServer] of _lodash.default.toPairs(this.webSocketsMapping)) {
39
+ for (const [pathname, wsServer] of _lodash.default.toPairs(server.webSocketsMapping)) {
38
40
  if (currentPathname === pathname) {
39
41
  wsServer.handleUpgrade(request, socket, head, ws => {
40
42
  wsServer.emit('connection', ws, request);
@@ -95,4 +97,4 @@ async function removeAllWebSocketHandlers() {
95
97
 
96
98
  return _lodash.default.some(await _bluebird.default.all(_lodash.default.keys(this.webSocketsMapping).map(pathname => this.removeWebSocketHandler(pathname))));
97
99
  }
98
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCIsImFkZFdlYlNvY2tldEhhbmRsZXIiLCJoYW5kbGVyUGF0aG5hbWUiLCJoYW5kbGVyU2VydmVyIiwiXyIsImlzVW5kZWZpbmVkIiwid2ViU29ja2V0c01hcHBpbmciLCJvbiIsInJlcXVlc3QiLCJzb2NrZXQiLCJoZWFkIiwiY3VycmVudFBhdGhuYW1lIiwiVVJMIiwidXJsIiwicGF0aG5hbWUiLCJ3c1NlcnZlciIsInRvUGFpcnMiLCJoYW5kbGVVcGdyYWRlIiwid3MiLCJlbWl0IiwiZGVzdHJveSIsImdldFdlYlNvY2tldEhhbmRsZXJzIiwia2V5c0ZpbHRlciIsImlzRW1wdHkiLCJyZWR1Y2UiLCJhY2MiLCJpc1N0cmluZyIsImluY2x1ZGVzIiwicmVtb3ZlV2ViU29ja2V0SGFuZGxlciIsImNsb3NlIiwiY2xpZW50IiwiY2xpZW50cyIsInRlcm1pbmF0ZSIsImlnbiIsInJlbW92ZUFsbFdlYlNvY2tldEhhbmRsZXJzIiwic29tZSIsIkIiLCJhbGwiLCJrZXlzIiwibWFwIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2V4cHJlc3Mvd2Vic29ja2V0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1VSTH0gZnJvbSAndXJsJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgREVGQVVMVF9XU19QQVRITkFNRV9QUkVGSVggPSAnL3dzJztcblxuLyoqXG4gKiBBZGRzIHdlYnNvY2tldCBoYW5kbGVyIHRvIGV4cHJlc3Mgc2VydmVyIGluc3RhbmNlLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gRXhwcmVzc1xuICogc2VydmVyIGluc3RhbmNlIGNvbnRleHQuXG4gKlxuICogQHRoaXMge1dlYlNvY2tldFNlcnZlcn0gLSBBbiBpbnN0YW5jZSBvZiBleHByZXNzIEhUVFAgc2VydmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGhhbmRsZXJQYXRobmFtZSAtIFdlYiBzb2NrZXQgZW5kcG9pbnQgcGF0aCBzdGFydGluZyB3aXRoXG4gKiBhIHNpbmdsZSBzbGFzaCBjaGFyYWN0ZXIuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGFsd2F5cyBhZGRcbiAqIERFRkFVTFRfV1NfUEFUSE5BTUVfUFJFRklYIHRvIGFsbCB3ZWIgc29ja2V0IHBhdGhuYW1lcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBoYW5kbGVyU2VydmVyIC0gV2ViU29ja2V0IHNlcnZlciBpbnN0YW5jZS4gU2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzg4NSBmb3IgbW9yZSBkZXRhaWxzXG4gKiBvbiBob3cgdG8gY29uZmlndXJlIHRoZSBoYW5kbGVyIHByb3Blcmx5LlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuYXN5bmMgZnVuY3Rpb24gYWRkV2ViU29ja2V0SGFuZGxlcihoYW5kbGVyUGF0aG5hbWUsIGhhbmRsZXJTZXJ2ZXIpIHtcbiAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy53ZWJTb2NrZXRzTWFwcGluZykpIHtcbiAgICB0aGlzLndlYlNvY2tldHNNYXBwaW5nID0ge307XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC84ODVcbiAgICB0aGlzLm9uKCd1cGdyYWRlJywgKHJlcXVlc3QsIHNvY2tldCwgaGVhZCkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRQYXRobmFtZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgY3VycmVudFBhdGhuYW1lID0gbmV3IFVSTChyZXF1ZXN0LnVybCkucGF0aG5hbWU7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY3VycmVudFBhdGhuYW1lID0gcmVxdWVzdC51cmw7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtwYXRobmFtZSwgd3NTZXJ2ZXJdIG9mIF8udG9QYWlycyh0aGlzLndlYlNvY2tldHNNYXBwaW5nKSkge1xuICAgICAgICBpZiAoY3VycmVudFBhdGhuYW1lID09PSBwYXRobmFtZSkge1xuICAgICAgICAgIHdzU2VydmVyLmhhbmRsZVVwZ3JhZGUocmVxdWVzdCwgc29ja2V0LCBoZWFkLCAod3MpID0+IHtcbiAgICAgICAgICAgIHdzU2VydmVyLmVtaXQoJ2Nvbm5lY3Rpb24nLCB3cywgcmVxdWVzdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgIH0pO1xuICB9XG4gIHRoaXMud2ViU29ja2V0c01hcHBpbmdbaGFuZGxlclBhdGhuYW1lXSA9IGhhbmRsZXJTZXJ2ZXI7XG59XG5cbi8qKlxuICogUmV0dXJucyB3ZWIgc29ja2V0IGhhbmRsZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBnaXZlbiBzZXJ2ZXJcbiAqIGluc3RhbmNlLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gRXhwcmVzc1xuICogc2VydmVyIGluc3RhbmNlIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc/fSBba2V5c0ZpbHRlcl0gLSBPbmx5IGluY2x1ZGUgcGF0aG5hbWVzIHdpdGggZ2l2ZW5cbiAqIGBrZXlzRmlsdGVyYCB2YWx1ZSBpZiBzZXQuIEFsbCBwYWlycyB3aWxsIGJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBwYXRobmFtZXMgdG8gd2Vic29ja2V0IHNlcnZlciBpc250YW5jZXMgbWFwcGluZ1xuICogbWF0Y2hpbmcgdGhlIHNlYXJjaCBjcml0ZXJpYSBvciBhbiBlbXB0eSBvYmplY3Qgb3RoZXJ3aXNlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuYXN5bmMgZnVuY3Rpb24gZ2V0V2ViU29ja2V0SGFuZGxlcnMoa2V5c0ZpbHRlciA9IG51bGwpIHtcbiAgaWYgKF8uaXNFbXB0eSh0aGlzLndlYlNvY2tldHNNYXBwaW5nKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiBfLnRvUGFpcnModGhpcy53ZWJTb2NrZXRzTWFwcGluZykucmVkdWNlKChhY2MsIFtwYXRobmFtZSwgd3NTZXJ2ZXJdKSA9PiB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKGtleXNGaWx0ZXIpIHx8IHBhdGhuYW1lLmluY2x1ZGVzKGtleXNGaWx0ZXIpKSB7XG4gICAgICBhY2NbcGF0aG5hbWVdID0gd3NTZXJ2ZXI7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGV4aXN0aW5nIHdlYnNvY2tldCBoYW5kbGVyIGZyb20gZXhwcmVzcyBzZXJ2ZXIgaW5zdGFuY2UuXG4gKiBUaGUgY2FsbCBpcyBpZ25vcmVkIGlmIHRoZSBnaXZlbiBgaGFuZGxlclBhdGhuYW1lYCBoYW5kbGVyXG4gKiBpcyBub3QgcHJlc2VudCBpbiB0aGUgaGFuZGxlcnMgbGlzdC5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIEV4cHJlc3NcbiAqIHNlcnZlciBpbnN0YW5jZSBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYW5kbGVyUGF0aG5hbWUgLSBXZWJzb2NrZXQgZW5kcG9pbnQgcGF0aC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSB0cnVlIGlmIHRoZSBoYW5kbGVyUGF0aG5hbWUgd2FzIGZvdW5kIGFuZCBkZWxldGVkXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG5hc3luYyBmdW5jdGlvbiByZW1vdmVXZWJTb2NrZXRIYW5kbGVyKGhhbmRsZXJQYXRobmFtZSkge1xuICBjb25zdCB3c1NlcnZlciA9IHRoaXMud2ViU29ja2V0c01hcHBpbmc/LltoYW5kbGVyUGF0aG5hbWVdO1xuICBpZiAoIXdzU2VydmVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICB3c1NlcnZlci5jbG9zZSgpO1xuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHdzU2VydmVyLmNsaWVudHMgfHwgW10pIHtcbiAgICAgIGNsaWVudC50ZXJtaW5hdGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIC8vIGlnbm9yZVxuICB9IGZpbmFsbHkge1xuICAgIGRlbGV0ZSB0aGlzLndlYlNvY2tldHNNYXBwaW5nW2hhbmRsZXJQYXRobmFtZV07XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGV4aXN0aW5nIHdlYnNvY2tldCBoYW5kbGVyIGZyb20gZXhwcmVzcyBzZXJ2ZXIgaW5zdGFuY2UuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBFeHByZXNzXG4gKiBzZXJ2ZXIgaW5zdGFuY2UgY29udGV4dC5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgaGFuZGxlciBoYXMgYmVlbiBkZWxldGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFsbFdlYlNvY2tldEhhbmRsZXJzKCkge1xuICBpZiAoXy5pc0VtcHR5KHRoaXMud2ViU29ja2V0c01hcHBpbmcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIF8uc29tZShcbiAgICBhd2FpdCBCLmFsbChcbiAgICAgIF8ua2V5cyh0aGlzLndlYlNvY2tldHNNYXBwaW5nKS5tYXAoKHBhdGhuYW1lKSA9PiB0aGlzLnJlbW92ZVdlYlNvY2tldEhhbmRsZXIocGF0aG5hbWUpKVxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IHtcbiAgYWRkV2ViU29ja2V0SGFuZGxlcixcbiAgcmVtb3ZlV2ViU29ja2V0SGFuZGxlcixcbiAgcmVtb3ZlQWxsV2ViU29ja2V0SGFuZGxlcnMsXG4gIGdldFdlYlNvY2tldEhhbmRsZXJzLFxuICBERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCxcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnaHR0cCcpLlNlcnZlciAmIHt3ZWJTb2NrZXRzTWFwcGluZzogUmVjb3JkPHN0cmluZyxpbXBvcnQoJ3dzJykuU2VydmVyPn19IFdlYlNvY2tldFNlcnZlclxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLDBCQUEwQixHQUFHLEtBQW5DOzs7QUFnQkEsZUFBZUMsbUJBQWYsQ0FBbUNDLGVBQW5DLEVBQW9EQyxhQUFwRCxFQUFtRTtFQUNqRSxJQUFJQyxlQUFBLENBQUVDLFdBQUYsQ0FBYyxLQUFLQyxpQkFBbkIsQ0FBSixFQUEyQztJQUN6QyxLQUFLQSxpQkFBTCxHQUF5QixFQUF6QjtJQUVBLEtBQUtDLEVBQUwsQ0FBUSxTQUFSLEVBQW1CLENBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUFrQkMsSUFBbEIsS0FBMkI7TUFDNUMsSUFBSUMsZUFBSjs7TUFDQSxJQUFJO1FBRUZBLGVBQWUsR0FBRyxJQUFJQyxRQUFKLENBQVFKLE9BQU8sQ0FBQ0ssR0FBaEIsRUFBcUJDLFFBQXZDO01BQ0QsQ0FIRCxDQUdFLE1BQU07UUFDTkgsZUFBZSxHQUFHSCxPQUFPLENBQUNLLEdBQTFCO01BQ0Q7O01BQ0QsS0FBSyxNQUFNLENBQUNDLFFBQUQsRUFBV0MsUUFBWCxDQUFYLElBQW1DWCxlQUFBLENBQUVZLE9BQUYsQ0FBVSxLQUFLVixpQkFBZixDQUFuQyxFQUFzRTtRQUNwRSxJQUFJSyxlQUFlLEtBQUtHLFFBQXhCLEVBQWtDO1VBQ2hDQyxRQUFRLENBQUNFLGFBQVQsQ0FBdUJULE9BQXZCLEVBQWdDQyxNQUFoQyxFQUF3Q0MsSUFBeEMsRUFBK0NRLEVBQUQsSUFBUTtZQUNwREgsUUFBUSxDQUFDSSxJQUFULENBQWMsWUFBZCxFQUE0QkQsRUFBNUIsRUFBZ0NWLE9BQWhDO1VBQ0QsQ0FGRDtVQUdBO1FBQ0Q7TUFDRjs7TUFDREMsTUFBTSxDQUFDVyxPQUFQO0lBQ0QsQ0FqQkQ7RUFrQkQ7O0VBQ0QsS0FBS2QsaUJBQUwsQ0FBdUJKLGVBQXZCLElBQTBDQyxhQUExQztBQUNEOztBQWNELGVBQWVrQixvQkFBZixDQUFvQ0MsVUFBVSxHQUFHLElBQWpELEVBQXVEO0VBQ3JELElBQUlsQixlQUFBLENBQUVtQixPQUFGLENBQVUsS0FBS2pCLGlCQUFmLENBQUosRUFBdUM7SUFDckMsT0FBTyxFQUFQO0VBQ0Q7O0VBRUQsT0FBT0YsZUFBQSxDQUFFWSxPQUFGLENBQVUsS0FBS1YsaUJBQWYsRUFBa0NrQixNQUFsQyxDQUF5QyxDQUFDQyxHQUFELEVBQU0sQ0FBQ1gsUUFBRCxFQUFXQyxRQUFYLENBQU4sS0FBK0I7SUFDN0UsSUFBSSxDQUFDWCxlQUFBLENBQUVzQixRQUFGLENBQVdKLFVBQVgsQ0FBRCxJQUEyQlIsUUFBUSxDQUFDYSxRQUFULENBQWtCTCxVQUFsQixDQUEvQixFQUE4RDtNQUM1REcsR0FBRyxDQUFDWCxRQUFELENBQUgsR0FBZ0JDLFFBQWhCO0lBQ0Q7O0lBQ0QsT0FBT1UsR0FBUDtFQUNELENBTE0sRUFLSixFQUxJLENBQVA7QUFNRDs7QUFhRCxlQUFlRyxzQkFBZixDQUFzQzFCLGVBQXRDLEVBQXVEO0VBQUE7O0VBQ3JELE1BQU1hLFFBQVEsNEJBQUcsS0FBS1QsaUJBQVIsMERBQUcsc0JBQXlCSixlQUF6QixDQUFqQjs7RUFDQSxJQUFJLENBQUNhLFFBQUwsRUFBZTtJQUNiLE9BQU8sS0FBUDtFQUNEOztFQUVELElBQUk7SUFDRkEsUUFBUSxDQUFDYyxLQUFUOztJQUNBLEtBQUssTUFBTUMsTUFBWCxJQUFxQmYsUUFBUSxDQUFDZ0IsT0FBVCxJQUFvQixFQUF6QyxFQUE2QztNQUMzQ0QsTUFBTSxDQUFDRSxTQUFQO0lBQ0Q7O0lBQ0QsT0FBTyxJQUFQO0VBQ0QsQ0FORCxDQU1FLE9BQU9DLEdBQVAsRUFBWSxDQUViLENBUkQsU0FRVTtJQUNSLE9BQU8sS0FBSzNCLGlCQUFMLENBQXVCSixlQUF2QixDQUFQO0VBQ0Q7O0VBQ0QsT0FBTyxLQUFQO0FBQ0Q7O0FBU0QsZUFBZWdDLDBCQUFmLEdBQTRDO0VBQzFDLElBQUk5QixlQUFBLENBQUVtQixPQUFGLENBQVUsS0FBS2pCLGlCQUFmLENBQUosRUFBdUM7SUFDckMsT0FBTyxLQUFQO0VBQ0Q7O0VBRUQsT0FBT0YsZUFBQSxDQUFFK0IsSUFBRixDQUNMLE1BQU1DLGlCQUFBLENBQUVDLEdBQUYsQ0FDSmpDLGVBQUEsQ0FBRWtDLElBQUYsQ0FBTyxLQUFLaEMsaUJBQVosRUFBK0JpQyxHQUEvQixDQUFvQ3pCLFFBQUQsSUFBYyxLQUFLYyxzQkFBTCxDQUE0QmQsUUFBNUIsQ0FBakQsQ0FESSxDQURELENBQVA7QUFLRCJ9
100
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCIsImFkZFdlYlNvY2tldEhhbmRsZXIiLCJoYW5kbGVyUGF0aG5hbWUiLCJoYW5kbGVyU2VydmVyIiwic2VydmVyIiwiXyIsImlzVW5kZWZpbmVkIiwid2ViU29ja2V0c01hcHBpbmciLCJvbiIsInJlcXVlc3QiLCJzb2NrZXQiLCJoZWFkIiwiY3VycmVudFBhdGhuYW1lIiwiVVJMIiwidXJsIiwicGF0aG5hbWUiLCJ3c1NlcnZlciIsInRvUGFpcnMiLCJoYW5kbGVVcGdyYWRlIiwid3MiLCJlbWl0IiwiZGVzdHJveSIsImdldFdlYlNvY2tldEhhbmRsZXJzIiwia2V5c0ZpbHRlciIsImlzRW1wdHkiLCJyZWR1Y2UiLCJhY2MiLCJpc1N0cmluZyIsImluY2x1ZGVzIiwicmVtb3ZlV2ViU29ja2V0SGFuZGxlciIsImNsb3NlIiwiY2xpZW50IiwiY2xpZW50cyIsInRlcm1pbmF0ZSIsImlnbiIsInJlbW92ZUFsbFdlYlNvY2tldEhhbmRsZXJzIiwic29tZSIsIkIiLCJhbGwiLCJrZXlzIiwibWFwIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2V4cHJlc3Mvd2Vic29ja2V0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXdhaXQgKi9cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1VSTH0gZnJvbSAndXJsJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgREVGQVVMVF9XU19QQVRITkFNRV9QUkVGSVggPSAnL3dzJztcblxuLyoqXG4gKiBBZGRzIHdlYnNvY2tldCBoYW5kbGVyIHRvIGV4cHJlc3Mgc2VydmVyIGluc3RhbmNlLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gRXhwcmVzc1xuICogc2VydmVyIGluc3RhbmNlIGNvbnRleHQuXG4gKlxuICogQHRoaXMge0FwcGl1bVNlcnZlcn0gLSBBbiBpbnN0YW5jZSBvZiBleHByZXNzIEhUVFAgc2VydmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGhhbmRsZXJQYXRobmFtZSAtIFdlYiBzb2NrZXQgZW5kcG9pbnQgcGF0aCBzdGFydGluZyB3aXRoXG4gKiBhIHNpbmdsZSBzbGFzaCBjaGFyYWN0ZXIuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGFsd2F5cyBhZGRcbiAqIERFRkFVTFRfV1NfUEFUSE5BTUVfUFJFRklYIHRvIGFsbCB3ZWIgc29ja2V0IHBhdGhuYW1lcy5cbiAqIEBwYXJhbSB7aW1wb3J0KCd3cycpLlNlcnZlcn0gaGFuZGxlclNlcnZlciAtIFdlYlNvY2tldCBzZXJ2ZXIgaW5zdGFuY2UuIFNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC84ODUgZm9yIG1vcmUgZGV0YWlsc1xuICogb24gaG93IHRvIGNvbmZpZ3VyZSB0aGUgaGFuZGxlciBwcm9wZXJseS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBhZGRXZWJTb2NrZXRIYW5kbGVyKGhhbmRsZXJQYXRobmFtZSwgaGFuZGxlclNlcnZlcikge1xuICBjb25zdCBzZXJ2ZXIgPSAvKiogQHR5cGUge0FwcGl1bVNlcnZlcn0gKi8gKHRoaXMpO1xuICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLndlYlNvY2tldHNNYXBwaW5nKSkge1xuICAgIHNlcnZlci53ZWJTb2NrZXRzTWFwcGluZyA9IHt9O1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJzb2NrZXRzL3dzL3B1bGwvODg1XG4gICAgc2VydmVyLm9uKCd1cGdyYWRlJywgKHJlcXVlc3QsIHNvY2tldCwgaGVhZCkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRQYXRobmFtZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgY3VycmVudFBhdGhuYW1lID0gbmV3IFVSTChyZXF1ZXN0LnVybCkucGF0aG5hbWU7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY3VycmVudFBhdGhuYW1lID0gcmVxdWVzdC51cmw7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtwYXRobmFtZSwgd3NTZXJ2ZXJdIG9mIF8udG9QYWlycyhzZXJ2ZXIud2ViU29ja2V0c01hcHBpbmcpKSB7XG4gICAgICAgIGlmIChjdXJyZW50UGF0aG5hbWUgPT09IHBhdGhuYW1lKSB7XG4gICAgICAgICAgd3NTZXJ2ZXIuaGFuZGxlVXBncmFkZShyZXF1ZXN0LCBzb2NrZXQsIGhlYWQsICh3cykgPT4ge1xuICAgICAgICAgICAgd3NTZXJ2ZXIuZW1pdCgnY29ubmVjdGlvbicsIHdzLCByZXF1ZXN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgfSk7XG4gIH1cbiAgdGhpcy53ZWJTb2NrZXRzTWFwcGluZ1toYW5kbGVyUGF0aG5hbWVdID0gaGFuZGxlclNlcnZlcjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdlYiBzb2NrZXQgaGFuZGxlcnMgcmVnaXN0ZXJlZCBmb3IgdGhlIGdpdmVuIHNlcnZlclxuICogaW5zdGFuY2UuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBFeHByZXNzXG4gKiBzZXJ2ZXIgaW5zdGFuY2UgY29udGV4dC5cbiAqXG4gKiBAdGhpcyB7QXBwaXVtU2VydmVyfVxuICogQHBhcmFtIHtzdHJpbmc/fSBba2V5c0ZpbHRlcl0gLSBPbmx5IGluY2x1ZGUgcGF0aG5hbWVzIHdpdGggZ2l2ZW5cbiAqIGBrZXlzRmlsdGVyYCB2YWx1ZSBpZiBzZXQuIEFsbCBwYWlycyB3aWxsIGJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoJ3dzJykuU2VydmVyPj59IHBhdGhuYW1lcyB0byB3ZWJzb2NrZXQgc2VydmVyIGluc3RhbmNlcyBtYXBwaW5nIG1hdGNoaW5nIHRoZSBzZWFyY2ggY3JpdGVyaWEgb3IgYW4gZW1wdHkgb2JqZWN0IG90aGVyd2lzZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmFzeW5jIGZ1bmN0aW9uIGdldFdlYlNvY2tldEhhbmRsZXJzKGtleXNGaWx0ZXIgPSBudWxsKSB7XG4gIGlmIChfLmlzRW1wdHkodGhpcy53ZWJTb2NrZXRzTWFwcGluZykpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4gXy50b1BhaXJzKHRoaXMud2ViU29ja2V0c01hcHBpbmcpLnJlZHVjZSgoYWNjLCBbcGF0aG5hbWUsIHdzU2VydmVyXSkgPT4ge1xuICAgIGlmICghXy5pc1N0cmluZyhrZXlzRmlsdGVyKSB8fCBwYXRobmFtZS5pbmNsdWRlcyhrZXlzRmlsdGVyKSkge1xuICAgICAgYWNjW3BhdGhuYW1lXSA9IHdzU2VydmVyO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBleGlzdGluZyB3ZWJzb2NrZXQgaGFuZGxlciBmcm9tIGV4cHJlc3Mgc2VydmVyIGluc3RhbmNlLlxuICogVGhlIGNhbGwgaXMgaWdub3JlZCBpZiB0aGUgZ2l2ZW4gYGhhbmRsZXJQYXRobmFtZWAgaGFuZGxlclxuICogaXMgbm90IHByZXNlbnQgaW4gdGhlIGhhbmRsZXJzIGxpc3QuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBFeHByZXNzXG4gKiBzZXJ2ZXIgaW5zdGFuY2UgY29udGV4dC5cbiAqIEB0aGlzIHtBcHBpdW1TZXJ2ZXJ9XG4gKiBAcGFyYW0ge3N0cmluZ30gaGFuZGxlclBhdGhuYW1lIC0gV2Vic29ja2V0IGVuZHBvaW50IHBhdGguXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gdHJ1ZSBpZiB0aGUgaGFuZGxlclBhdGhuYW1lIHdhcyBmb3VuZCBhbmQgZGVsZXRlZFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuYXN5bmMgZnVuY3Rpb24gcmVtb3ZlV2ViU29ja2V0SGFuZGxlcihoYW5kbGVyUGF0aG5hbWUpIHtcbiAgY29uc3Qgd3NTZXJ2ZXIgPSB0aGlzLndlYlNvY2tldHNNYXBwaW5nPy5baGFuZGxlclBhdGhuYW1lXTtcbiAgaWYgKCF3c1NlcnZlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgd3NTZXJ2ZXIuY2xvc2UoKTtcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB3c1NlcnZlci5jbGllbnRzIHx8IFtdKSB7XG4gICAgICBjbGllbnQudGVybWluYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICAvLyBpZ25vcmVcbiAgfSBmaW5hbGx5IHtcbiAgICBkZWxldGUgdGhpcy53ZWJTb2NrZXRzTWFwcGluZ1toYW5kbGVyUGF0aG5hbWVdO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBleGlzdGluZyB3ZWJzb2NrZXQgaGFuZGxlciBmcm9tIGV4cHJlc3Mgc2VydmVyIGluc3RhbmNlLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gRXhwcmVzc1xuICogc2VydmVyIGluc3RhbmNlIGNvbnRleHQuXG4gKiBAdGhpcyB7QXBwaXVtU2VydmVyfVxuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IHRydWUgaWYgYXQgbGVhc3Qgb25lIGhhbmRsZXIgaGFzIGJlZW4gZGVsZXRlZFxuICovXG5hc3luYyBmdW5jdGlvbiByZW1vdmVBbGxXZWJTb2NrZXRIYW5kbGVycygpIHtcbiAgaWYgKF8uaXNFbXB0eSh0aGlzLndlYlNvY2tldHNNYXBwaW5nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBfLnNvbWUoXG4gICAgYXdhaXQgQi5hbGwoXG4gICAgICBfLmtleXModGhpcy53ZWJTb2NrZXRzTWFwcGluZykubWFwKChwYXRobmFtZSkgPT4gdGhpcy5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKSlcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCB7XG4gIGFkZFdlYlNvY2tldEhhbmRsZXIsXG4gIHJlbW92ZVdlYlNvY2tldEhhbmRsZXIsXG4gIHJlbW92ZUFsbFdlYlNvY2tldEhhbmRsZXJzLFxuICBnZXRXZWJTb2NrZXRIYW5kbGVycyxcbiAgREVGQVVMVF9XU19QQVRITkFNRV9QUkVGSVgsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1TZXJ2ZXJ9IEFwcGl1bVNlcnZlclxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLDBCQUEwQixHQUFHLEtBQW5DOzs7QUFnQkEsZUFBZUMsbUJBQWYsQ0FBbUNDLGVBQW5DLEVBQW9EQyxhQUFwRCxFQUFtRTtFQUNqRSxNQUFNQyxNQUFNLEdBQWdDLElBQTVDOztFQUNBLElBQUlDLGVBQUEsQ0FBRUMsV0FBRixDQUFjLEtBQUtDLGlCQUFuQixDQUFKLEVBQTJDO0lBQ3pDSCxNQUFNLENBQUNHLGlCQUFQLEdBQTJCLEVBQTNCO0lBRUFILE1BQU0sQ0FBQ0ksRUFBUCxDQUFVLFNBQVYsRUFBcUIsQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQWtCQyxJQUFsQixLQUEyQjtNQUM5QyxJQUFJQyxlQUFKOztNQUNBLElBQUk7UUFFRkEsZUFBZSxHQUFHLElBQUlDLFFBQUosQ0FBUUosT0FBTyxDQUFDSyxHQUFoQixFQUFxQkMsUUFBdkM7TUFDRCxDQUhELENBR0UsTUFBTTtRQUNOSCxlQUFlLEdBQUdILE9BQU8sQ0FBQ0ssR0FBMUI7TUFDRDs7TUFDRCxLQUFLLE1BQU0sQ0FBQ0MsUUFBRCxFQUFXQyxRQUFYLENBQVgsSUFBbUNYLGVBQUEsQ0FBRVksT0FBRixDQUFVYixNQUFNLENBQUNHLGlCQUFqQixDQUFuQyxFQUF3RTtRQUN0RSxJQUFJSyxlQUFlLEtBQUtHLFFBQXhCLEVBQWtDO1VBQ2hDQyxRQUFRLENBQUNFLGFBQVQsQ0FBdUJULE9BQXZCLEVBQWdDQyxNQUFoQyxFQUF3Q0MsSUFBeEMsRUFBK0NRLEVBQUQsSUFBUTtZQUNwREgsUUFBUSxDQUFDSSxJQUFULENBQWMsWUFBZCxFQUE0QkQsRUFBNUIsRUFBZ0NWLE9BQWhDO1VBQ0QsQ0FGRDtVQUdBO1FBQ0Q7TUFDRjs7TUFDREMsTUFBTSxDQUFDVyxPQUFQO0lBQ0QsQ0FqQkQ7RUFrQkQ7O0VBQ0QsS0FBS2QsaUJBQUwsQ0FBdUJMLGVBQXZCLElBQTBDQyxhQUExQztBQUNEOztBQWNELGVBQWVtQixvQkFBZixDQUFvQ0MsVUFBVSxHQUFHLElBQWpELEVBQXVEO0VBQ3JELElBQUlsQixlQUFBLENBQUVtQixPQUFGLENBQVUsS0FBS2pCLGlCQUFmLENBQUosRUFBdUM7SUFDckMsT0FBTyxFQUFQO0VBQ0Q7O0VBRUQsT0FBT0YsZUFBQSxDQUFFWSxPQUFGLENBQVUsS0FBS1YsaUJBQWYsRUFBa0NrQixNQUFsQyxDQUF5QyxDQUFDQyxHQUFELEVBQU0sQ0FBQ1gsUUFBRCxFQUFXQyxRQUFYLENBQU4sS0FBK0I7SUFDN0UsSUFBSSxDQUFDWCxlQUFBLENBQUVzQixRQUFGLENBQVdKLFVBQVgsQ0FBRCxJQUEyQlIsUUFBUSxDQUFDYSxRQUFULENBQWtCTCxVQUFsQixDQUEvQixFQUE4RDtNQUM1REcsR0FBRyxDQUFDWCxRQUFELENBQUgsR0FBZ0JDLFFBQWhCO0lBQ0Q7O0lBQ0QsT0FBT1UsR0FBUDtFQUNELENBTE0sRUFLSixFQUxJLENBQVA7QUFNRDs7QUFhRCxlQUFlRyxzQkFBZixDQUFzQzNCLGVBQXRDLEVBQXVEO0VBQUE7O0VBQ3JELE1BQU1jLFFBQVEsNEJBQUcsS0FBS1QsaUJBQVIsMERBQUcsc0JBQXlCTCxlQUF6QixDQUFqQjs7RUFDQSxJQUFJLENBQUNjLFFBQUwsRUFBZTtJQUNiLE9BQU8sS0FBUDtFQUNEOztFQUVELElBQUk7SUFDRkEsUUFBUSxDQUFDYyxLQUFUOztJQUNBLEtBQUssTUFBTUMsTUFBWCxJQUFxQmYsUUFBUSxDQUFDZ0IsT0FBVCxJQUFvQixFQUF6QyxFQUE2QztNQUMzQ0QsTUFBTSxDQUFDRSxTQUFQO0lBQ0Q7O0lBQ0QsT0FBTyxJQUFQO0VBQ0QsQ0FORCxDQU1FLE9BQU9DLEdBQVAsRUFBWSxDQUViLENBUkQsU0FRVTtJQUNSLE9BQU8sS0FBSzNCLGlCQUFMLENBQXVCTCxlQUF2QixDQUFQO0VBQ0Q7O0VBQ0QsT0FBTyxLQUFQO0FBQ0Q7O0FBU0QsZUFBZWlDLDBCQUFmLEdBQTRDO0VBQzFDLElBQUk5QixlQUFBLENBQUVtQixPQUFGLENBQVUsS0FBS2pCLGlCQUFmLENBQUosRUFBdUM7SUFDckMsT0FBTyxLQUFQO0VBQ0Q7O0VBRUQsT0FBT0YsZUFBQSxDQUFFK0IsSUFBRixDQUNMLE1BQU1DLGlCQUFBLENBQUVDLEdBQUYsQ0FDSmpDLGVBQUEsQ0FBRWtDLElBQUYsQ0FBTyxLQUFLaEMsaUJBQVosRUFBK0JpQyxHQUEvQixDQUFvQ3pCLFFBQUQsSUFBYyxLQUFLYyxzQkFBTCxDQUE0QmQsUUFBNUIsQ0FBakQsQ0FESSxDQURELENBQVA7QUFLRCJ9
@@ -1,184 +1,15 @@
1
1
  export { DriverCore } from "./basedriver/core";
2
+ export { DeviceSettings } from "./basedriver/device-settings";
3
+ export { BaseDriver };
2
4
  export default BaseDriver;
3
- export { PREFIXED_APPIUM_OPTS_CAP } from "./basedriver/capabilities";
5
+ export * from "./protocol";
6
+ export { errorFromMJSONWPStatusCode as errorFromCode } from "./protocol";
7
+ export { STATIC_DIR } from "./express/static";
8
+ export { JWProxy } from "./jsonwp-proxy/proxy";
9
+ export { DEFAULT_WS_PATHNAME_PREFIX } from "./express/websocket";
4
10
  import { BaseDriver } from "./basedriver/driver";
5
- import { DeviceSettings } from "./basedriver/device-settings";
6
- export const routeConfiguringFunction: typeof protocol.routeConfiguringFunction;
7
- export const errors: {
8
- NotYetImplementedError: typeof import("./protocol/errors").NotYetImplementedError;
9
- NotImplementedError: typeof import("./protocol/errors").NotImplementedError;
10
- BadParametersError: typeof import("./protocol/errors").BadParametersError;
11
- InvalidArgumentError: typeof import("./protocol/errors").InvalidArgumentError;
12
- NoSuchDriverError: typeof import("./protocol/errors").NoSuchDriverError;
13
- NoSuchElementError: typeof import("./protocol/errors").NoSuchElementError;
14
- UnknownCommandError: typeof import("./protocol/errors").UnknownCommandError;
15
- StaleElementReferenceError: typeof import("./protocol/errors").StaleElementReferenceError;
16
- ElementNotVisibleError: typeof import("./protocol/errors").ElementNotVisibleError;
17
- InvalidElementStateError: typeof import("./protocol/errors").InvalidElementStateError;
18
- UnknownError: typeof import("./protocol/errors").UnknownError;
19
- ElementIsNotSelectableError: typeof import("./protocol/errors").ElementIsNotSelectableError;
20
- ElementClickInterceptedError: typeof import("./protocol/errors").ElementClickInterceptedError;
21
- ElementNotInteractableError: typeof import("./protocol/errors").ElementNotInteractableError;
22
- InsecureCertificateError: typeof import("./protocol/errors").InsecureCertificateError;
23
- JavaScriptError: typeof import("./protocol/errors").JavaScriptError;
24
- XPathLookupError: typeof import("./protocol/errors").XPathLookupError;
25
- TimeoutError: typeof import("./protocol/errors").TimeoutError;
26
- NoSuchWindowError: typeof import("./protocol/errors").NoSuchWindowError;
27
- NoSuchCookieError: typeof import("./protocol/errors").NoSuchCookieError;
28
- InvalidCookieDomainError: typeof import("./protocol/errors").InvalidCookieDomainError;
29
- InvalidCoordinatesError: typeof import("./protocol/errors").InvalidCoordinatesError;
30
- UnableToSetCookieError: typeof import("./protocol/errors").UnableToSetCookieError;
31
- UnexpectedAlertOpenError: typeof import("./protocol/errors").UnexpectedAlertOpenError;
32
- NoAlertOpenError: typeof import("./protocol/errors").NoAlertOpenError;
33
- ScriptTimeoutError: typeof import("./protocol/errors").ScriptTimeoutError;
34
- InvalidElementCoordinatesError: typeof import("./protocol/errors").InvalidElementCoordinatesError;
35
- IMENotAvailableError: typeof import("./protocol/errors").IMENotAvailableError;
36
- IMEEngineActivationFailedError: typeof import("./protocol/errors").IMEEngineActivationFailedError;
37
- InvalidSelectorError: typeof import("./protocol/errors").InvalidSelectorError;
38
- SessionNotCreatedError: typeof import("./protocol/errors").SessionNotCreatedError;
39
- MoveTargetOutOfBoundsError: typeof import("./protocol/errors").MoveTargetOutOfBoundsError;
40
- NoSuchAlertError: typeof import("./protocol/errors").NoSuchAlertError;
41
- NoSuchContextError: typeof import("./protocol/errors").NoSuchContextError;
42
- InvalidContextError: typeof import("./protocol/errors").InvalidContextError;
43
- NoSuchFrameError: typeof import("./protocol/errors").NoSuchFrameError;
44
- UnableToCaptureScreen: typeof import("./protocol/errors").UnableToCaptureScreen;
45
- UnknownMethodError: typeof import("./protocol/errors").UnknownMethodError;
46
- UnsupportedOperationError: typeof import("./protocol/errors").UnsupportedOperationError;
47
- ProxyRequestError: typeof import("./protocol/errors").ProxyRequestError;
48
- };
49
- export const isErrorType: typeof protocol.isErrorType;
50
- import { PROTOCOLS } from "./constants";
51
- export const errorFromMJSONWPStatusCode: typeof protocol.errorFromMJSONWPStatusCode;
52
- export const errorFromW3CJsonCode: typeof protocol.errorFromW3CJsonCode;
53
- export const determineProtocol: typeof protocol.determineProtocol;
54
- export const ALL_COMMANDS: any[];
55
- export const METHOD_MAP: import("./protocol/routes").MethodMap;
56
- export const routeToCommandName: typeof protocol.routeToCommandName;
57
- export const NO_SESSION_ID_COMMANDS: string[];
58
- export const isSessionCommand: typeof protocol.isSessionCommand;
59
- import { DEFAULT_BASE_PATH } from "./constants";
60
- export const CREATE_SESSION_COMMAND: "createSession";
61
- export const DELETE_SESSION_COMMAND: "deleteSession";
62
- export const GET_STATUS_COMMAND: "getStatus";
63
- export const STATIC_DIR: string;
64
- export const server: typeof serverIndex.server;
65
- export const normalizeBasePath: typeof serverIndex.normalizeBasePath;
66
- export const JWProxy: typeof proxyIndex.JWProxy;
67
- export const statusCodes: {
68
- Success: {
69
- code: number;
70
- summary: string;
71
- };
72
- NoSuchDriver: {
73
- code: number;
74
- summary: string;
75
- };
76
- NoSuchElement: {
77
- code: number;
78
- summary: string;
79
- };
80
- NoSuchFrame: {
81
- code: number;
82
- summary: string;
83
- };
84
- UnknownCommand: {
85
- code: number;
86
- summary: string;
87
- };
88
- StaleElementReference: {
89
- code: number;
90
- summary: string;
91
- };
92
- ElementNotVisible: {
93
- code: number;
94
- summary: string;
95
- };
96
- InvalidElementState: {
97
- code: number;
98
- summary: string;
99
- };
100
- UnknownError: {
101
- code: number;
102
- summary: string;
103
- };
104
- ElementIsNotSelectable: {
105
- code: number;
106
- summary: string;
107
- };
108
- JavaScriptError: {
109
- code: number;
110
- summary: string;
111
- };
112
- XPathLookupError: {
113
- code: number;
114
- summary: string;
115
- };
116
- Timeout: {
117
- code: number;
118
- summary: string;
119
- };
120
- NoSuchWindow: {
121
- code: number;
122
- summary: string;
123
- };
124
- InvalidCookieDomain: {
125
- code: number;
126
- summary: string;
127
- };
128
- UnableToSetCookie: {
129
- code: number;
130
- summary: string;
131
- };
132
- UnexpectedAlertOpen: {
133
- code: number;
134
- summary: string;
135
- };
136
- NoAlertOpenError: {
137
- code: number;
138
- summary: string;
139
- };
140
- ScriptTimeout: {
141
- code: number;
142
- summary: string;
143
- };
144
- InvalidElementCoordinates: {
145
- code: number;
146
- summary: string;
147
- };
148
- IMENotAvailable: {
149
- code: number;
150
- summary: string;
151
- };
152
- IMEEngineActivationFailed: {
153
- code: number;
154
- summary: string;
155
- };
156
- InvalidSelector: {
157
- code: number;
158
- summary: string;
159
- };
160
- SessionNotCreatedException: {
161
- code: number;
162
- summary: string;
163
- };
164
- MoveTargetOutOfBounds: {
165
- code: number;
166
- summary: string;
167
- };
168
- NoSuchContext: {
169
- code: number;
170
- summary: string;
171
- };
172
- };
173
- export const getSummaryByCode: typeof statusIndex.getSummaryByCode;
174
- export const processCapabilities: typeof caps.processCapabilities;
175
- export const isStandardCap: typeof caps.isStandardCap;
176
- export const validateCaps: typeof caps.validateCaps;
177
- export const DEFAULT_WS_PATHNAME_PREFIX: "/ws";
178
- import * as protocol from "./protocol";
179
- import * as serverIndex from "./express/server";
180
- import * as proxyIndex from "./jsonwp-proxy/proxy";
181
- import * as statusIndex from "./jsonwp-status/status";
182
- import * as caps from "./basedriver/capabilities";
183
- export { BaseDriver, DeviceSettings, PROTOCOLS, errorFromMJSONWPStatusCode as errorFromCode, DEFAULT_BASE_PATH };
11
+ export { DEFAULT_BASE_PATH, PROTOCOLS } from "./constants";
12
+ export { server, normalizeBasePath } from "./express/server";
13
+ export { getSummaryByCode, codes as statusCodes } from "./jsonwp-status/status";
14
+ export { PREFIXED_APPIUM_OPTS_CAP, processCapabilities, isStandardCap, validateCaps } from "./basedriver/capabilities";
184
15
  //# sourceMappingURL=index.d.ts.map