@appium/base-driver 8.7.2 → 9.0.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 (121) hide show
  1. package/build/lib/basedriver/capabilities.d.ts +11 -163
  2. package/build/lib/basedriver/capabilities.d.ts.map +1 -1
  3. package/build/lib/basedriver/capabilities.js +354 -236
  4. package/build/lib/basedriver/capabilities.js.map +1 -1
  5. package/build/lib/basedriver/commands/event.d.ts +7 -6
  6. package/build/lib/basedriver/commands/event.d.ts.map +1 -1
  7. package/build/lib/basedriver/commands/event.js +55 -35
  8. package/build/lib/basedriver/commands/event.js.map +1 -1
  9. package/build/lib/basedriver/commands/execute.d.ts +7 -6
  10. package/build/lib/basedriver/commands/execute.d.ts.map +1 -1
  11. package/build/lib/basedriver/commands/execute.js +66 -58
  12. package/build/lib/basedriver/commands/execute.js.map +1 -1
  13. package/build/lib/basedriver/commands/find.d.ts +9 -7
  14. package/build/lib/basedriver/commands/find.d.ts.map +1 -1
  15. package/build/lib/basedriver/commands/find.js +102 -54
  16. package/build/lib/basedriver/commands/find.js.map +1 -1
  17. package/build/lib/basedriver/commands/index.d.ts +3 -7
  18. package/build/lib/basedriver/commands/index.d.ts.map +1 -1
  19. package/build/lib/basedriver/commands/index.js +30 -33
  20. package/build/lib/basedriver/commands/index.js.map +1 -1
  21. package/build/lib/basedriver/commands/log.d.ts +8 -9
  22. package/build/lib/basedriver/commands/log.d.ts.map +1 -1
  23. package/build/lib/basedriver/commands/log.js +54 -38
  24. package/build/lib/basedriver/commands/log.js.map +1 -1
  25. package/build/lib/basedriver/commands/session.d.ts +7 -6
  26. package/build/lib/basedriver/commands/session.d.ts.map +1 -1
  27. package/build/lib/basedriver/commands/session.js +46 -39
  28. package/build/lib/basedriver/commands/session.js.map +1 -1
  29. package/build/lib/basedriver/commands/settings.d.ts +7 -7
  30. package/build/lib/basedriver/commands/settings.d.ts.map +1 -1
  31. package/build/lib/basedriver/commands/settings.js +35 -28
  32. package/build/lib/basedriver/commands/settings.js.map +1 -1
  33. package/build/lib/basedriver/commands/timeout.d.ts +7 -5
  34. package/build/lib/basedriver/commands/timeout.d.ts.map +1 -1
  35. package/build/lib/basedriver/commands/timeout.js +144 -162
  36. package/build/lib/basedriver/commands/timeout.js.map +1 -1
  37. package/build/lib/basedriver/core.d.ts +6 -157
  38. package/build/lib/basedriver/core.d.ts.map +1 -1
  39. package/build/lib/basedriver/core.js +361 -230
  40. package/build/lib/basedriver/core.js.map +1 -1
  41. package/build/lib/basedriver/desired-caps.js +80 -110
  42. package/build/lib/basedriver/desired-caps.js.map +1 -1
  43. package/build/lib/basedriver/device-settings.js +57 -62
  44. package/build/lib/basedriver/device-settings.js.map +1 -1
  45. package/build/lib/basedriver/driver.d.ts +21 -267
  46. package/build/lib/basedriver/driver.d.ts.map +1 -1
  47. package/build/lib/basedriver/driver.js +362 -258
  48. package/build/lib/basedriver/driver.js.map +1 -1
  49. package/build/lib/basedriver/helpers.js +500 -495
  50. package/build/lib/basedriver/helpers.js.map +1 -1
  51. package/build/lib/basedriver/logger.d.ts +1 -1
  52. package/build/lib/basedriver/logger.d.ts.map +1 -1
  53. package/build/lib/basedriver/logger.js +5 -15
  54. package/build/lib/basedriver/logger.js.map +1 -1
  55. package/build/lib/constants.js +14 -14
  56. package/build/lib/constants.js.map +1 -1
  57. package/build/lib/express/crash.js +8 -15
  58. package/build/lib/express/crash.js.map +1 -1
  59. package/build/lib/express/express-logging.js +49 -59
  60. package/build/lib/express/express-logging.js.map +1 -1
  61. package/build/lib/express/idempotency.js +125 -177
  62. package/build/lib/express/idempotency.js.map +1 -1
  63. package/build/lib/express/logger.d.ts +1 -1
  64. package/build/lib/express/logger.d.ts.map +1 -1
  65. package/build/lib/express/logger.js +5 -15
  66. package/build/lib/express/logger.js.map +1 -1
  67. package/build/lib/express/middleware.js +82 -107
  68. package/build/lib/express/middleware.js.map +1 -1
  69. package/build/lib/express/server.d.ts +17 -5
  70. package/build/lib/express/server.d.ts.map +1 -1
  71. package/build/lib/express/server.js +259 -224
  72. package/build/lib/express/server.js.map +1 -1
  73. package/build/lib/express/static.js +64 -81
  74. package/build/lib/express/static.js.map +1 -1
  75. package/build/lib/express/websocket.js +115 -87
  76. package/build/lib/express/websocket.js.map +1 -1
  77. package/build/lib/helpers/capabilities.d.ts +1 -59
  78. package/build/lib/helpers/capabilities.d.ts.map +1 -1
  79. package/build/lib/helpers/capabilities.js +72 -69
  80. package/build/lib/helpers/capabilities.js.map +1 -1
  81. package/build/lib/index.js +64 -180
  82. package/build/lib/index.js.map +1 -1
  83. package/build/lib/jsonwp-proxy/protocol-converter.js +215 -227
  84. package/build/lib/jsonwp-proxy/protocol-converter.js.map +1 -1
  85. package/build/lib/jsonwp-proxy/proxy.d.ts.map +1 -1
  86. package/build/lib/jsonwp-proxy/proxy.js +355 -393
  87. package/build/lib/jsonwp-proxy/proxy.js.map +1 -1
  88. package/build/lib/jsonwp-status/status.js +119 -130
  89. package/build/lib/jsonwp-status/status.js.map +1 -1
  90. package/build/lib/protocol/errors.d.ts +135 -32
  91. package/build/lib/protocol/errors.d.ts.map +1 -1
  92. package/build/lib/protocol/errors.js +871 -919
  93. package/build/lib/protocol/errors.js.map +1 -1
  94. package/build/lib/protocol/helpers.js +37 -37
  95. package/build/lib/protocol/helpers.js.map +1 -1
  96. package/build/lib/protocol/index.js +22 -109
  97. package/build/lib/protocol/index.js.map +1 -1
  98. package/build/lib/protocol/protocol.js +394 -350
  99. package/build/lib/protocol/protocol.js.map +1 -1
  100. package/build/lib/protocol/routes.d.ts +1238 -4
  101. package/build/lib/protocol/routes.d.ts.map +1 -1
  102. package/build/lib/protocol/routes.js +964 -1327
  103. package/build/lib/protocol/routes.js.map +1 -1
  104. package/build/lib/protocol/validators.js +32 -39
  105. package/build/lib/protocol/validators.js.map +1 -1
  106. package/build/tsconfig.tsbuildinfo +1 -1
  107. package/lib/basedriver/capabilities.js +80 -39
  108. package/lib/basedriver/commands/event.js +10 -5
  109. package/lib/basedriver/commands/execute.js +14 -9
  110. package/lib/basedriver/commands/find.js +18 -12
  111. package/lib/basedriver/commands/index.js +21 -16
  112. package/lib/basedriver/commands/log.js +24 -18
  113. package/lib/basedriver/commands/session.js +10 -5
  114. package/lib/basedriver/commands/settings.js +9 -6
  115. package/lib/basedriver/commands/timeout.js +10 -4
  116. package/lib/basedriver/core.js +2 -3
  117. package/lib/basedriver/driver.js +29 -18
  118. package/lib/express/server.js +6 -3
  119. package/lib/protocol/errors.js +155 -44
  120. package/lib/protocol/routes.js +11 -7
  121. package/package.json +14 -16
@@ -1,96 +1,79 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.STATIC_DIR = void 0;
7
- exports.guineaPig = guineaPig;
8
- exports.guineaPigAppBanner = guineaPigAppBanner;
9
- exports.guineaPigScrollable = guineaPigScrollable;
10
- exports.welcome = welcome;
11
-
12
- require("source-map-support/register");
13
-
14
- var _path = _interopRequireDefault(require("path"));
15
-
16
- var _logger = _interopRequireDefault(require("./logger"));
17
-
18
- var _lodash = _interopRequireDefault(require("lodash"));
19
-
20
- var _support = require("@appium/support");
21
-
22
- var _bluebird = _interopRequireDefault(require("bluebird"));
23
-
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
- let STATIC_DIR = _path.default.resolve(__dirname, '..', '..', '..', 'static');
27
-
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.STATIC_DIR = exports.welcome = exports.guineaPigAppBanner = exports.guineaPigScrollable = exports.guineaPig = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const logger_1 = __importDefault(require("./logger"));
9
+ const lodash_1 = __importDefault(require("lodash"));
10
+ const support_1 = require("@appium/support");
11
+ const bluebird_1 = __importDefault(require("bluebird"));
12
+ let STATIC_DIR = path_1.default.resolve(__dirname, '..', '..', '..', 'static');
28
13
  exports.STATIC_DIR = STATIC_DIR;
29
-
30
- if (_lodash.default.isNull(_path.default.resolve(__dirname).match(/build[/\\]lib[/\\]express$/))) {
31
- exports.STATIC_DIR = STATIC_DIR = _path.default.resolve(__dirname, '..', '..', 'static');
14
+ if (lodash_1.default.isNull(path_1.default.resolve(__dirname).match(/build[/\\]lib[/\\]express$/))) {
15
+ // in some contexts we are not in the build directory,
16
+ // so we don't want to go back the extra level
17
+ exports.STATIC_DIR = STATIC_DIR = path_1.default.resolve(__dirname, '..', '..', 'static');
32
18
  }
33
-
34
19
  async function guineaPigTemplate(req, res, page) {
35
- const delay = parseInt(req.params.delay || req.query.delay || 0, 10);
36
- const throwError = req.params.throwError || req.query.throwError || '';
37
- let params = {
38
- throwError,
39
- serverTime: new Date(),
40
- userAgent: req.headers['user-agent'],
41
- comment: 'None'
42
- };
43
-
44
- if (req.method === 'POST') {
45
- params.comment = req.body.comments || params.comment;
46
- }
47
-
48
- _logger.default.debug(`Sending guinea pig response with params: ${JSON.stringify(params)}`);
49
-
50
- if (delay) {
51
- _logger.default.debug(`Waiting ${delay}ms before responding`);
52
-
53
- await _bluebird.default.delay(delay);
54
- }
55
-
56
- res.set('content-type', 'text/html');
57
- res.cookie('guineacookie1', 'i am a cookie value', {
58
- path: '/'
59
- });
60
- res.cookie('guineacookie2', 'cookié2', {
61
- path: '/'
62
- });
63
- res.cookie('guineacookie3', 'cant access this', {
64
- domain: '.blargimarg.com',
65
- path: '/'
66
- });
67
- res.send((await getTemplate(page))(params));
20
+ const delay = parseInt(req.params.delay || req.query.delay || 0, 10);
21
+ const throwError = req.params.throwError || req.query.throwError || '';
22
+ let params = {
23
+ throwError,
24
+ serverTime: new Date(),
25
+ userAgent: req.headers['user-agent'],
26
+ comment: 'None',
27
+ };
28
+ if (req.method === 'POST') {
29
+ params.comment = req.body.comments || params.comment;
30
+ }
31
+ logger_1.default.debug(`Sending guinea pig response with params: ${JSON.stringify(params)}`);
32
+ if (delay) {
33
+ logger_1.default.debug(`Waiting ${delay}ms before responding`);
34
+ await bluebird_1.default.delay(delay);
35
+ }
36
+ res.set('content-type', 'text/html');
37
+ res.cookie('guineacookie1', 'i am a cookie value', { path: '/' });
38
+ res.cookie('guineacookie2', 'cookié2', { path: '/' });
39
+ res.cookie('guineacookie3', 'cant access this', {
40
+ domain: '.blargimarg.com',
41
+ path: '/',
42
+ });
43
+ res.send((await getTemplate(page))(params));
68
44
  }
69
-
45
+ /*
46
+ * Dynamic page mapped to /test/guinea-pig
47
+ */
70
48
  async function guineaPig(req, res) {
71
- return await guineaPigTemplate(req, res, 'guinea-pig.html');
49
+ return await guineaPigTemplate(req, res, 'guinea-pig.html');
72
50
  }
73
-
51
+ exports.guineaPig = guineaPig;
52
+ /*
53
+ * Dynamic page mapped to /test/guinea-pig-scrollable
54
+ */
74
55
  async function guineaPigScrollable(req, res) {
75
- return await guineaPigTemplate(req, res, 'guinea-pig-scrollable.html');
56
+ return await guineaPigTemplate(req, res, 'guinea-pig-scrollable.html');
76
57
  }
77
-
58
+ exports.guineaPigScrollable = guineaPigScrollable;
59
+ /*
60
+ * Dynamic page mapped to /test/guinea-pig-app-banner
61
+ */
78
62
  async function guineaPigAppBanner(req, res) {
79
- return await guineaPigTemplate(req, res, 'guinea-pig-app-banner.html');
63
+ return await guineaPigTemplate(req, res, 'guinea-pig-app-banner.html');
80
64
  }
81
-
65
+ exports.guineaPigAppBanner = guineaPigAppBanner;
66
+ /*
67
+ * Dynamic page mapped to /welcome
68
+ */
82
69
  async function welcome(req, res) {
83
- let params = {
84
- message: "Let's browse!"
85
- };
86
-
87
- _logger.default.debug(`Sending welcome response with params: ${JSON.stringify(params)}`);
88
-
89
- res.send((await getTemplate('welcome.html'))(params));
70
+ let params = { message: "Let's browse!" };
71
+ logger_1.default.debug(`Sending welcome response with params: ${JSON.stringify(params)}`);
72
+ res.send((await getTemplate('welcome.html'))(params));
90
73
  }
91
-
74
+ exports.welcome = welcome;
92
75
  async function getTemplate(templateName) {
93
- let content = await _support.fs.readFile(_path.default.resolve(STATIC_DIR, 'test', templateName));
94
- return _lodash.default.template(content.toString());
76
+ let content = await support_1.fs.readFile(path_1.default.resolve(STATIC_DIR, 'test', templateName));
77
+ return lodash_1.default.template(content.toString());
95
78
  }
96
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVEFUSUNfRElSIiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJfIiwiaXNOdWxsIiwibWF0Y2giLCJndWluZWFQaWdUZW1wbGF0ZSIsInJlcSIsInJlcyIsInBhZ2UiLCJkZWxheSIsInBhcnNlSW50IiwicGFyYW1zIiwicXVlcnkiLCJ0aHJvd0Vycm9yIiwic2VydmVyVGltZSIsIkRhdGUiLCJ1c2VyQWdlbnQiLCJoZWFkZXJzIiwiY29tbWVudCIsIm1ldGhvZCIsImJvZHkiLCJjb21tZW50cyIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsIkIiLCJzZXQiLCJjb29raWUiLCJkb21haW4iLCJzZW5kIiwiZ2V0VGVtcGxhdGUiLCJndWluZWFQaWciLCJndWluZWFQaWdTY3JvbGxhYmxlIiwiZ3VpbmVhUGlnQXBwQmFubmVyIiwid2VsY29tZSIsIm1lc3NhZ2UiLCJ0ZW1wbGF0ZU5hbWUiLCJjb250ZW50IiwiZnMiLCJyZWFkRmlsZSIsInRlbXBsYXRlIiwidG9TdHJpbmciXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXhwcmVzcy9zdGF0aWMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge2ZzfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5sZXQgU1RBVElDX0RJUiA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicsICdzdGF0aWMnKTtcbmlmIChfLmlzTnVsbChwYXRoLnJlc29sdmUoX19kaXJuYW1lKS5tYXRjaCgvYnVpbGRbL1xcXFxdbGliWy9cXFxcXWV4cHJlc3MkLykpKSB7XG4gIC8vIGluIHNvbWUgY29udGV4dHMgd2UgYXJlIG5vdCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LFxuICAvLyBzbyB3ZSBkb24ndCB3YW50IHRvIGdvIGJhY2sgdGhlIGV4dHJhIGxldmVsXG4gIFNUQVRJQ19ESVIgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnc3RhdGljJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGd1aW5lYVBpZ1RlbXBsYXRlKHJlcSwgcmVzLCBwYWdlKSB7XG4gIGNvbnN0IGRlbGF5ID0gcGFyc2VJbnQocmVxLnBhcmFtcy5kZWxheSB8fCByZXEucXVlcnkuZGVsYXkgfHwgMCwgMTApO1xuICBjb25zdCB0aHJvd0Vycm9yID0gcmVxLnBhcmFtcy50aHJvd0Vycm9yIHx8IHJlcS5xdWVyeS50aHJvd0Vycm9yIHx8ICcnO1xuICBsZXQgcGFyYW1zID0ge1xuICAgIHRocm93RXJyb3IsXG4gICAgc2VydmVyVGltZTogbmV3IERhdGUoKSxcbiAgICB1c2VyQWdlbnQ6IHJlcS5oZWFkZXJzWyd1c2VyLWFnZW50J10sXG4gICAgY29tbWVudDogJ05vbmUnLFxuICB9O1xuICBpZiAocmVxLm1ldGhvZCA9PT0gJ1BPU1QnKSB7XG4gICAgcGFyYW1zLmNvbW1lbnQgPSByZXEuYm9keS5jb21tZW50cyB8fCBwYXJhbXMuY29tbWVudDtcbiAgfVxuICBsb2cuZGVidWcoYFNlbmRpbmcgZ3VpbmVhIHBpZyByZXNwb25zZSB3aXRoIHBhcmFtczogJHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfWApO1xuICBpZiAoZGVsYXkpIHtcbiAgICBsb2cuZGVidWcoYFdhaXRpbmcgJHtkZWxheX1tcyBiZWZvcmUgcmVzcG9uZGluZ2ApO1xuICAgIGF3YWl0IEIuZGVsYXkoZGVsYXkpO1xuICB9XG4gIHJlcy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgcmVzLmNvb2tpZSgnZ3VpbmVhY29va2llMScsICdpIGFtIGEgY29va2llIHZhbHVlJywge3BhdGg6ICcvJ30pO1xuICByZXMuY29va2llKCdndWluZWFjb29raWUyJywgJ2Nvb2tpw6kyJywge3BhdGg6ICcvJ30pO1xuICByZXMuY29va2llKCdndWluZWFjb29raWUzJywgJ2NhbnQgYWNjZXNzIHRoaXMnLCB7XG4gICAgZG9tYWluOiAnLmJsYXJnaW1hcmcuY29tJyxcbiAgICBwYXRoOiAnLycsXG4gIH0pO1xuICByZXMuc2VuZCgoYXdhaXQgZ2V0VGVtcGxhdGUocGFnZSkpKHBhcmFtcykpO1xufVxuXG4vKlxuICogRHluYW1pYyBwYWdlIG1hcHBlZCB0byAvdGVzdC9ndWluZWEtcGlnXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGd1aW5lYVBpZyhyZXEsIHJlcykge1xuICByZXR1cm4gYXdhaXQgZ3VpbmVhUGlnVGVtcGxhdGUocmVxLCByZXMsICdndWluZWEtcGlnLmh0bWwnKTtcbn1cblxuLypcbiAqIER5bmFtaWMgcGFnZSBtYXBwZWQgdG8gL3Rlc3QvZ3VpbmVhLXBpZy1zY3JvbGxhYmxlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGd1aW5lYVBpZ1Njcm9sbGFibGUocmVxLCByZXMpIHtcbiAgcmV0dXJuIGF3YWl0IGd1aW5lYVBpZ1RlbXBsYXRlKHJlcSwgcmVzLCAnZ3VpbmVhLXBpZy1zY3JvbGxhYmxlLmh0bWwnKTtcbn1cblxuLypcbiAqIER5bmFtaWMgcGFnZSBtYXBwZWQgdG8gL3Rlc3QvZ3VpbmVhLXBpZy1hcHAtYmFubmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGd1aW5lYVBpZ0FwcEJhbm5lcihyZXEsIHJlcykge1xuICByZXR1cm4gYXdhaXQgZ3VpbmVhUGlnVGVtcGxhdGUocmVxLCByZXMsICdndWluZWEtcGlnLWFwcC1iYW5uZXIuaHRtbCcpO1xufVxuXG4vKlxuICogRHluYW1pYyBwYWdlIG1hcHBlZCB0byAvd2VsY29tZVxuICovXG5hc3luYyBmdW5jdGlvbiB3ZWxjb21lKHJlcSwgcmVzKSB7XG4gIGxldCBwYXJhbXMgPSB7bWVzc2FnZTogXCJMZXQncyBicm93c2UhXCJ9O1xuICBsb2cuZGVidWcoYFNlbmRpbmcgd2VsY29tZSByZXNwb25zZSB3aXRoIHBhcmFtczogJHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfWApO1xuICByZXMuc2VuZCgoYXdhaXQgZ2V0VGVtcGxhdGUoJ3dlbGNvbWUuaHRtbCcpKShwYXJhbXMpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0VGVtcGxhdGUodGVtcGxhdGVOYW1lKSB7XG4gIGxldCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocGF0aC5yZXNvbHZlKFNUQVRJQ19ESVIsICd0ZXN0JywgdGVtcGxhdGVOYW1lKSk7XG4gIHJldHVybiBfLnRlbXBsYXRlKGNvbnRlbnQudG9TdHJpbmcoKSk7XG59XG5cbmV4cG9ydCB7Z3VpbmVhUGlnLCBndWluZWFQaWdTY3JvbGxhYmxlLCBndWluZWFQaWdBcHBCYW5uZXIsIHdlbGNvbWUsIFNUQVRJQ19ESVJ9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxJQUFJQSxVQUFVLEdBQUdDLGFBQUEsQ0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCLElBQXhCLEVBQThCLElBQTlCLEVBQW9DLElBQXBDLEVBQTBDLFFBQTFDLENBQWpCOzs7O0FBQ0EsSUFBSUMsZUFBQSxDQUFFQyxNQUFGLENBQVNKLGFBQUEsQ0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCRyxLQUF4QixDQUE4Qiw0QkFBOUIsQ0FBVCxDQUFKLEVBQTJFO0VBR3pFLHFCQUFBTixVQUFVLEdBQUdDLGFBQUEsQ0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCLElBQXhCLEVBQThCLElBQTlCLEVBQW9DLFFBQXBDLENBQWI7QUFDRDs7QUFFRCxlQUFlSSxpQkFBZixDQUFpQ0MsR0FBakMsRUFBc0NDLEdBQXRDLEVBQTJDQyxJQUEzQyxFQUFpRDtFQUMvQyxNQUFNQyxLQUFLLEdBQUdDLFFBQVEsQ0FBQ0osR0FBRyxDQUFDSyxNQUFKLENBQVdGLEtBQVgsSUFBb0JILEdBQUcsQ0FBQ00sS0FBSixDQUFVSCxLQUE5QixJQUF1QyxDQUF4QyxFQUEyQyxFQUEzQyxDQUF0QjtFQUNBLE1BQU1JLFVBQVUsR0FBR1AsR0FBRyxDQUFDSyxNQUFKLENBQVdFLFVBQVgsSUFBeUJQLEdBQUcsQ0FBQ00sS0FBSixDQUFVQyxVQUFuQyxJQUFpRCxFQUFwRTtFQUNBLElBQUlGLE1BQU0sR0FBRztJQUNYRSxVQURXO0lBRVhDLFVBQVUsRUFBRSxJQUFJQyxJQUFKLEVBRkQ7SUFHWEMsU0FBUyxFQUFFVixHQUFHLENBQUNXLE9BQUosQ0FBWSxZQUFaLENBSEE7SUFJWEMsT0FBTyxFQUFFO0VBSkUsQ0FBYjs7RUFNQSxJQUFJWixHQUFHLENBQUNhLE1BQUosS0FBZSxNQUFuQixFQUEyQjtJQUN6QlIsTUFBTSxDQUFDTyxPQUFQLEdBQWlCWixHQUFHLENBQUNjLElBQUosQ0FBU0MsUUFBVCxJQUFxQlYsTUFBTSxDQUFDTyxPQUE3QztFQUNEOztFQUNESSxlQUFBLENBQUlDLEtBQUosQ0FBVyw0Q0FBMkNDLElBQUksQ0FBQ0MsU0FBTCxDQUFlZCxNQUFmLENBQXVCLEVBQTdFOztFQUNBLElBQUlGLEtBQUosRUFBVztJQUNUYSxlQUFBLENBQUlDLEtBQUosQ0FBVyxXQUFVZCxLQUFNLHNCQUEzQjs7SUFDQSxNQUFNaUIsaUJBQUEsQ0FBRWpCLEtBQUYsQ0FBUUEsS0FBUixDQUFOO0VBQ0Q7O0VBQ0RGLEdBQUcsQ0FBQ29CLEdBQUosQ0FBUSxjQUFSLEVBQXdCLFdBQXhCO0VBQ0FwQixHQUFHLENBQUNxQixNQUFKLENBQVcsZUFBWCxFQUE0QixxQkFBNUIsRUFBbUQ7SUFBQzdCLElBQUksRUFBRTtFQUFQLENBQW5EO0VBQ0FRLEdBQUcsQ0FBQ3FCLE1BQUosQ0FBVyxlQUFYLEVBQTRCLFNBQTVCLEVBQXVDO0lBQUM3QixJQUFJLEVBQUU7RUFBUCxDQUF2QztFQUNBUSxHQUFHLENBQUNxQixNQUFKLENBQVcsZUFBWCxFQUE0QixrQkFBNUIsRUFBZ0Q7SUFDOUNDLE1BQU0sRUFBRSxpQkFEc0M7SUFFOUM5QixJQUFJLEVBQUU7RUFGd0MsQ0FBaEQ7RUFJQVEsR0FBRyxDQUFDdUIsSUFBSixDQUFTLENBQUMsTUFBTUMsV0FBVyxDQUFDdkIsSUFBRCxDQUFsQixFQUEwQkcsTUFBMUIsQ0FBVDtBQUNEOztBQUtELGVBQWVxQixTQUFmLENBQXlCMUIsR0FBekIsRUFBOEJDLEdBQTlCLEVBQW1DO0VBQ2pDLE9BQU8sTUFBTUYsaUJBQWlCLENBQUNDLEdBQUQsRUFBTUMsR0FBTixFQUFXLGlCQUFYLENBQTlCO0FBQ0Q7O0FBS0QsZUFBZTBCLG1CQUFmLENBQW1DM0IsR0FBbkMsRUFBd0NDLEdBQXhDLEVBQTZDO0VBQzNDLE9BQU8sTUFBTUYsaUJBQWlCLENBQUNDLEdBQUQsRUFBTUMsR0FBTixFQUFXLDRCQUFYLENBQTlCO0FBQ0Q7O0FBS0QsZUFBZTJCLGtCQUFmLENBQWtDNUIsR0FBbEMsRUFBdUNDLEdBQXZDLEVBQTRDO0VBQzFDLE9BQU8sTUFBTUYsaUJBQWlCLENBQUNDLEdBQUQsRUFBTUMsR0FBTixFQUFXLDRCQUFYLENBQTlCO0FBQ0Q7O0FBS0QsZUFBZTRCLE9BQWYsQ0FBdUI3QixHQUF2QixFQUE0QkMsR0FBNUIsRUFBaUM7RUFDL0IsSUFBSUksTUFBTSxHQUFHO0lBQUN5QixPQUFPLEVBQUU7RUFBVixDQUFiOztFQUNBZCxlQUFBLENBQUlDLEtBQUosQ0FBVyx5Q0FBd0NDLElBQUksQ0FBQ0MsU0FBTCxDQUFlZCxNQUFmLENBQXVCLEVBQTFFOztFQUNBSixHQUFHLENBQUN1QixJQUFKLENBQVMsQ0FBQyxNQUFNQyxXQUFXLENBQUMsY0FBRCxDQUFsQixFQUFvQ3BCLE1BQXBDLENBQVQ7QUFDRDs7QUFFRCxlQUFlb0IsV0FBZixDQUEyQk0sWUFBM0IsRUFBeUM7RUFDdkMsSUFBSUMsT0FBTyxHQUFHLE1BQU1DLFdBQUEsQ0FBR0MsUUFBSCxDQUFZekMsYUFBQSxDQUFLQyxPQUFMLENBQWFGLFVBQWIsRUFBeUIsTUFBekIsRUFBaUN1QyxZQUFqQyxDQUFaLENBQXBCO0VBQ0EsT0FBT25DLGVBQUEsQ0FBRXVDLFFBQUYsQ0FBV0gsT0FBTyxDQUFDSSxRQUFSLEVBQVgsQ0FBUDtBQUNEIn0=
79
+ //# sourceMappingURL=static.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"static.js","names":["STATIC_DIR","path","resolve","__dirname","_","isNull","match","guineaPigTemplate","req","res","page","delay","parseInt","params","query","throwError","serverTime","Date","userAgent","headers","comment","method","body","comments","log","debug","JSON","stringify","B","set","cookie","domain","send","getTemplate","guineaPig","guineaPigScrollable","guineaPigAppBanner","welcome","message","templateName","content","fs","readFile","template","toString"],"sources":["../../../lib/express/static.js"],"sourcesContent":["import path from 'path';\nimport log from './logger';\nimport _ from 'lodash';\nimport {fs} from '@appium/support';\nimport B from 'bluebird';\n\nlet STATIC_DIR = path.resolve(__dirname, '..', '..', '..', 'static');\nif (_.isNull(path.resolve(__dirname).match(/build[/\\\\]lib[/\\\\]express$/))) {\n // in some contexts we are not in the build directory,\n // so we don't want to go back the extra level\n STATIC_DIR = path.resolve(__dirname, '..', '..', 'static');\n}\n\nasync function guineaPigTemplate(req, res, page) {\n const delay = parseInt(req.params.delay || req.query.delay || 0, 10);\n const throwError = req.params.throwError || req.query.throwError || '';\n let params = {\n throwError,\n serverTime: new Date(),\n userAgent: req.headers['user-agent'],\n comment: 'None',\n };\n if (req.method === 'POST') {\n params.comment = req.body.comments || params.comment;\n }\n log.debug(`Sending guinea pig response with params: ${JSON.stringify(params)}`);\n if (delay) {\n log.debug(`Waiting ${delay}ms before responding`);\n await B.delay(delay);\n }\n res.set('content-type', 'text/html');\n res.cookie('guineacookie1', 'i am a cookie value', {path: '/'});\n res.cookie('guineacookie2', 'cookié2', {path: '/'});\n res.cookie('guineacookie3', 'cant access this', {\n domain: '.blargimarg.com',\n path: '/',\n });\n res.send((await getTemplate(page))(params));\n}\n\n/*\n * Dynamic page mapped to /test/guinea-pig\n */\nasync function guineaPig(req, res) {\n return await guineaPigTemplate(req, res, 'guinea-pig.html');\n}\n\n/*\n * Dynamic page mapped to /test/guinea-pig-scrollable\n */\nasync function guineaPigScrollable(req, res) {\n return await guineaPigTemplate(req, res, 'guinea-pig-scrollable.html');\n}\n\n/*\n * Dynamic page mapped to /test/guinea-pig-app-banner\n */\nasync function guineaPigAppBanner(req, res) {\n return await guineaPigTemplate(req, res, 'guinea-pig-app-banner.html');\n}\n\n/*\n * Dynamic page mapped to /welcome\n */\nasync function welcome(req, res) {\n let params = {message: \"Let's browse!\"};\n log.debug(`Sending welcome response with params: ${JSON.stringify(params)}`);\n res.send((await getTemplate('welcome.html'))(params));\n}\n\nasync function getTemplate(templateName) {\n let content = await fs.readFile(path.resolve(STATIC_DIR, 'test', templateName));\n return _.template(content.toString());\n}\n\nexport {guineaPig, guineaPigScrollable, guineaPigAppBanner, welcome, STATIC_DIR};\n"],"mappings":"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"}
1
+ {"version":3,"file":"static.js","sourceRoot":"","sources":["../../../lib/express/static.js"],"names":[],"mappings":"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"}
@@ -1,100 +1,128 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.DEFAULT_WS_PATHNAME_PREFIX = void 0;
7
- exports.addWebSocketHandler = addWebSocketHandler;
8
- exports.getWebSocketHandlers = getWebSocketHandlers;
9
- exports.removeAllWebSocketHandlers = removeAllWebSocketHandlers;
10
- exports.removeWebSocketHandler = removeWebSocketHandler;
11
-
12
- require("source-map-support/register");
13
-
14
- var _lodash = _interopRequireDefault(require("lodash"));
15
-
16
- var _url = require("url");
17
-
18
- var _bluebird = _interopRequireDefault(require("bluebird"));
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DEFAULT_WS_PATHNAME_PREFIX = exports.getWebSocketHandlers = exports.removeAllWebSocketHandlers = exports.removeWebSocketHandler = exports.addWebSocketHandler = void 0;
7
+ /* eslint-disable require-await */
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const url_1 = require("url");
10
+ const bluebird_1 = __importDefault(require("bluebird"));
22
11
  const DEFAULT_WS_PATHNAME_PREFIX = '/ws';
23
12
  exports.DEFAULT_WS_PATHNAME_PREFIX = DEFAULT_WS_PATHNAME_PREFIX;
24
-
13
+ /**
14
+ * Adds websocket handler to express server instance.
15
+ * It is expected this function is called in Express
16
+ * server instance context.
17
+ *
18
+ * @this {AppiumServer} - An instance of express HTTP server.
19
+ * @param {string} handlerPathname - Web socket endpoint path starting with
20
+ * a single slash character. It is recommended to always add
21
+ * DEFAULT_WS_PATHNAME_PREFIX to all web socket pathnames.
22
+ * @param {import('ws').Server} handlerServer - WebSocket server instance. See
23
+ * https://github.com/websockets/ws/pull/885 for more details
24
+ * on how to configure the handler properly.
25
+ * @returns {Promise<void>}
26
+ */
25
27
  async function addWebSocketHandler(handlerPathname, handlerServer) {
26
- const server = this;
27
-
28
- if (_lodash.default.isUndefined(this.webSocketsMapping)) {
29
- server.webSocketsMapping = {};
30
- server.on('upgrade', (request, socket, head) => {
31
- let currentPathname;
32
-
33
- try {
34
- currentPathname = new _url.URL(request.url).pathname;
35
- } catch {
36
- currentPathname = request.url;
37
- }
38
-
39
- for (const [pathname, wsServer] of _lodash.default.toPairs(server.webSocketsMapping)) {
40
- if (currentPathname === pathname) {
41
- wsServer.handleUpgrade(request, socket, head, ws => {
42
- wsServer.emit('connection', ws, request);
43
- });
44
- return;
45
- }
46
- }
47
-
48
- socket.destroy();
49
- });
50
- }
51
-
52
- this.webSocketsMapping[handlerPathname] = handlerServer;
28
+ const server = /** @type {AppiumServer} */ (this);
29
+ if (lodash_1.default.isUndefined(this.webSocketsMapping)) {
30
+ server.webSocketsMapping = {};
31
+ // https://github.com/websockets/ws/pull/885
32
+ server.on('upgrade', (request, socket, head) => {
33
+ let currentPathname;
34
+ try {
35
+ // @ts-expect-error
36
+ currentPathname = new url_1.URL(request.url).pathname;
37
+ }
38
+ catch {
39
+ currentPathname = request.url;
40
+ }
41
+ for (const [pathname, wsServer] of lodash_1.default.toPairs(server.webSocketsMapping)) {
42
+ if (currentPathname === pathname) {
43
+ wsServer.handleUpgrade(request, socket, head, (ws) => {
44
+ wsServer.emit('connection', ws, request);
45
+ });
46
+ return;
47
+ }
48
+ }
49
+ socket.destroy();
50
+ });
51
+ }
52
+ this.webSocketsMapping[handlerPathname] = handlerServer;
53
53
  }
54
-
54
+ exports.addWebSocketHandler = addWebSocketHandler;
55
+ /**
56
+ * Returns web socket handlers registered for the given server
57
+ * instance.
58
+ * It is expected this function is called in Express
59
+ * server instance context.
60
+ *
61
+ * @this {AppiumServer}
62
+ * @param {string?} [keysFilter] - Only include pathnames with given
63
+ * `keysFilter` value if set. All pairs will be included by default.
64
+ * @returns {Promise<Record<string, import('ws').Server>>} pathnames to websocket server instances mapping matching the search criteria or an empty object otherwise.
65
+ */
66
+ // eslint-disable-next-line require-await
55
67
  async function getWebSocketHandlers(keysFilter = null) {
56
- if (_lodash.default.isEmpty(this.webSocketsMapping)) {
57
- return {};
58
- }
59
-
60
- return _lodash.default.toPairs(this.webSocketsMapping).reduce((acc, [pathname, wsServer]) => {
61
- if (!_lodash.default.isString(keysFilter) || pathname.includes(keysFilter)) {
62
- acc[pathname] = wsServer;
68
+ if (lodash_1.default.isEmpty(this.webSocketsMapping)) {
69
+ return {};
63
70
  }
64
-
65
- return acc;
66
- }, {});
71
+ return lodash_1.default.toPairs(this.webSocketsMapping).reduce((acc, [pathname, wsServer]) => {
72
+ if (!lodash_1.default.isString(keysFilter) || pathname.includes(keysFilter)) {
73
+ acc[pathname] = wsServer;
74
+ }
75
+ return acc;
76
+ }, {});
67
77
  }
68
-
78
+ exports.getWebSocketHandlers = getWebSocketHandlers;
79
+ /**
80
+ * Removes existing websocket handler from express server instance.
81
+ * The call is ignored if the given `handlerPathname` handler
82
+ * is not present in the handlers list.
83
+ * It is expected this function is called in Express
84
+ * server instance context.
85
+ * @this {AppiumServer}
86
+ * @param {string} handlerPathname - Websocket endpoint path.
87
+ * @returns {Promise<boolean>} true if the handlerPathname was found and deleted
88
+ */
89
+ // eslint-disable-next-line require-await
69
90
  async function removeWebSocketHandler(handlerPathname) {
70
- var _this$webSocketsMappi;
71
-
72
- const wsServer = (_this$webSocketsMappi = this.webSocketsMapping) === null || _this$webSocketsMappi === void 0 ? void 0 : _this$webSocketsMappi[handlerPathname];
73
-
74
- if (!wsServer) {
75
- return false;
76
- }
77
-
78
- try {
79
- wsServer.close();
80
-
81
- for (const client of wsServer.clients || []) {
82
- client.terminate();
91
+ const wsServer = this.webSocketsMapping?.[handlerPathname];
92
+ if (!wsServer) {
93
+ return false;
83
94
  }
84
-
85
- return true;
86
- } catch (ign) {} finally {
87
- delete this.webSocketsMapping[handlerPathname];
88
- }
89
-
90
- return false;
95
+ try {
96
+ wsServer.close();
97
+ for (const client of wsServer.clients || []) {
98
+ client.terminate();
99
+ }
100
+ return true;
101
+ }
102
+ catch (ign) {
103
+ // ignore
104
+ }
105
+ finally {
106
+ delete this.webSocketsMapping[handlerPathname];
107
+ }
108
+ return false;
91
109
  }
92
-
110
+ exports.removeWebSocketHandler = removeWebSocketHandler;
111
+ /**
112
+ * Removes all existing websocket handler from express server instance.
113
+ * It is expected this function is called in Express
114
+ * server instance context.
115
+ * @this {AppiumServer}
116
+ * @returns {Promise<boolean>} true if at least one handler has been deleted
117
+ */
93
118
  async function removeAllWebSocketHandlers() {
94
- if (_lodash.default.isEmpty(this.webSocketsMapping)) {
95
- return false;
96
- }
97
-
98
- return _lodash.default.some(await _bluebird.default.all(_lodash.default.keys(this.webSocketsMapping).map(pathname => this.removeWebSocketHandler(pathname))));
119
+ if (lodash_1.default.isEmpty(this.webSocketsMapping)) {
120
+ return false;
121
+ }
122
+ return lodash_1.default.some(await bluebird_1.default.all(lodash_1.default.keys(this.webSocketsMapping).map((pathname) => this.removeWebSocketHandler(pathname))));
99
123
  }
100
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCIsImFkZFdlYlNvY2tldEhhbmRsZXIiLCJoYW5kbGVyUGF0aG5hbWUiLCJoYW5kbGVyU2VydmVyIiwic2VydmVyIiwiXyIsImlzVW5kZWZpbmVkIiwid2ViU29ja2V0c01hcHBpbmciLCJvbiIsInJlcXVlc3QiLCJzb2NrZXQiLCJoZWFkIiwiY3VycmVudFBhdGhuYW1lIiwiVVJMIiwidXJsIiwicGF0aG5hbWUiLCJ3c1NlcnZlciIsInRvUGFpcnMiLCJoYW5kbGVVcGdyYWRlIiwid3MiLCJlbWl0IiwiZGVzdHJveSIsImdldFdlYlNvY2tldEhhbmRsZXJzIiwia2V5c0ZpbHRlciIsImlzRW1wdHkiLCJyZWR1Y2UiLCJhY2MiLCJpc1N0cmluZyIsImluY2x1ZGVzIiwicmVtb3ZlV2ViU29ja2V0SGFuZGxlciIsImNsb3NlIiwiY2xpZW50IiwiY2xpZW50cyIsInRlcm1pbmF0ZSIsImlnbiIsInJlbW92ZUFsbFdlYlNvY2tldEhhbmRsZXJzIiwic29tZSIsIkIiLCJhbGwiLCJrZXlzIiwibWFwIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2V4cHJlc3Mvd2Vic29ja2V0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXdhaXQgKi9cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1VSTH0gZnJvbSAndXJsJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgREVGQVVMVF9XU19QQVRITkFNRV9QUkVGSVggPSAnL3dzJztcblxuLyoqXG4gKiBBZGRzIHdlYnNvY2tldCBoYW5kbGVyIHRvIGV4cHJlc3Mgc2VydmVyIGluc3RhbmNlLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gRXhwcmVzc1xuICogc2VydmVyIGluc3RhbmNlIGNvbnRleHQuXG4gKlxuICogQHRoaXMge0FwcGl1bVNlcnZlcn0gLSBBbiBpbnN0YW5jZSBvZiBleHByZXNzIEhUVFAgc2VydmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGhhbmRsZXJQYXRobmFtZSAtIFdlYiBzb2NrZXQgZW5kcG9pbnQgcGF0aCBzdGFydGluZyB3aXRoXG4gKiBhIHNpbmdsZSBzbGFzaCBjaGFyYWN0ZXIuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGFsd2F5cyBhZGRcbiAqIERFRkFVTFRfV1NfUEFUSE5BTUVfUFJFRklYIHRvIGFsbCB3ZWIgc29ja2V0IHBhdGhuYW1lcy5cbiAqIEBwYXJhbSB7aW1wb3J0KCd3cycpLlNlcnZlcn0gaGFuZGxlclNlcnZlciAtIFdlYlNvY2tldCBzZXJ2ZXIgaW5zdGFuY2UuIFNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC84ODUgZm9yIG1vcmUgZGV0YWlsc1xuICogb24gaG93IHRvIGNvbmZpZ3VyZSB0aGUgaGFuZGxlciBwcm9wZXJseS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBhZGRXZWJTb2NrZXRIYW5kbGVyKGhhbmRsZXJQYXRobmFtZSwgaGFuZGxlclNlcnZlcikge1xuICBjb25zdCBzZXJ2ZXIgPSAvKiogQHR5cGUge0FwcGl1bVNlcnZlcn0gKi8gKHRoaXMpO1xuICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLndlYlNvY2tldHNNYXBwaW5nKSkge1xuICAgIHNlcnZlci53ZWJTb2NrZXRzTWFwcGluZyA9IHt9O1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJzb2NrZXRzL3dzL3B1bGwvODg1XG4gICAgc2VydmVyLm9uKCd1cGdyYWRlJywgKHJlcXVlc3QsIHNvY2tldCwgaGVhZCkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRQYXRobmFtZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgY3VycmVudFBhdGhuYW1lID0gbmV3IFVSTChyZXF1ZXN0LnVybCkucGF0aG5hbWU7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY3VycmVudFBhdGhuYW1lID0gcmVxdWVzdC51cmw7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtwYXRobmFtZSwgd3NTZXJ2ZXJdIG9mIF8udG9QYWlycyhzZXJ2ZXIud2ViU29ja2V0c01hcHBpbmcpKSB7XG4gICAgICAgIGlmIChjdXJyZW50UGF0aG5hbWUgPT09IHBhdGhuYW1lKSB7XG4gICAgICAgICAgd3NTZXJ2ZXIuaGFuZGxlVXBncmFkZShyZXF1ZXN0LCBzb2NrZXQsIGhlYWQsICh3cykgPT4ge1xuICAgICAgICAgICAgd3NTZXJ2ZXIuZW1pdCgnY29ubmVjdGlvbicsIHdzLCByZXF1ZXN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgfSk7XG4gIH1cbiAgdGhpcy53ZWJTb2NrZXRzTWFwcGluZ1toYW5kbGVyUGF0aG5hbWVdID0gaGFuZGxlclNlcnZlcjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdlYiBzb2NrZXQgaGFuZGxlcnMgcmVnaXN0ZXJlZCBmb3IgdGhlIGdpdmVuIHNlcnZlclxuICogaW5zdGFuY2UuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBFeHByZXNzXG4gKiBzZXJ2ZXIgaW5zdGFuY2UgY29udGV4dC5cbiAqXG4gKiBAdGhpcyB7QXBwaXVtU2VydmVyfVxuICogQHBhcmFtIHtzdHJpbmc/fSBba2V5c0ZpbHRlcl0gLSBPbmx5IGluY2x1ZGUgcGF0aG5hbWVzIHdpdGggZ2l2ZW5cbiAqIGBrZXlzRmlsdGVyYCB2YWx1ZSBpZiBzZXQuIEFsbCBwYWlycyB3aWxsIGJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoJ3dzJykuU2VydmVyPj59IHBhdGhuYW1lcyB0byB3ZWJzb2NrZXQgc2VydmVyIGluc3RhbmNlcyBtYXBwaW5nIG1hdGNoaW5nIHRoZSBzZWFyY2ggY3JpdGVyaWEgb3IgYW4gZW1wdHkgb2JqZWN0IG90aGVyd2lzZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmFzeW5jIGZ1bmN0aW9uIGdldFdlYlNvY2tldEhhbmRsZXJzKGtleXNGaWx0ZXIgPSBudWxsKSB7XG4gIGlmIChfLmlzRW1wdHkodGhpcy53ZWJTb2NrZXRzTWFwcGluZykpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4gXy50b1BhaXJzKHRoaXMud2ViU29ja2V0c01hcHBpbmcpLnJlZHVjZSgoYWNjLCBbcGF0aG5hbWUsIHdzU2VydmVyXSkgPT4ge1xuICAgIGlmICghXy5pc1N0cmluZyhrZXlzRmlsdGVyKSB8fCBwYXRobmFtZS5pbmNsdWRlcyhrZXlzRmlsdGVyKSkge1xuICAgICAgYWNjW3BhdGhuYW1lXSA9IHdzU2VydmVyO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBleGlzdGluZyB3ZWJzb2NrZXQgaGFuZGxlciBmcm9tIGV4cHJlc3Mgc2VydmVyIGluc3RhbmNlLlxuICogVGhlIGNhbGwgaXMgaWdub3JlZCBpZiB0aGUgZ2l2ZW4gYGhhbmRsZXJQYXRobmFtZWAgaGFuZGxlclxuICogaXMgbm90IHByZXNlbnQgaW4gdGhlIGhhbmRsZXJzIGxpc3QuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBFeHByZXNzXG4gKiBzZXJ2ZXIgaW5zdGFuY2UgY29udGV4dC5cbiAqIEB0aGlzIHtBcHBpdW1TZXJ2ZXJ9XG4gKiBAcGFyYW0ge3N0cmluZ30gaGFuZGxlclBhdGhuYW1lIC0gV2Vic29ja2V0IGVuZHBvaW50IHBhdGguXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gdHJ1ZSBpZiB0aGUgaGFuZGxlclBhdGhuYW1lIHdhcyBmb3VuZCBhbmQgZGVsZXRlZFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuYXN5bmMgZnVuY3Rpb24gcmVtb3ZlV2ViU29ja2V0SGFuZGxlcihoYW5kbGVyUGF0aG5hbWUpIHtcbiAgY29uc3Qgd3NTZXJ2ZXIgPSB0aGlzLndlYlNvY2tldHNNYXBwaW5nPy5baGFuZGxlclBhdGhuYW1lXTtcbiAgaWYgKCF3c1NlcnZlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgd3NTZXJ2ZXIuY2xvc2UoKTtcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB3c1NlcnZlci5jbGllbnRzIHx8IFtdKSB7XG4gICAgICBjbGllbnQudGVybWluYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICAvLyBpZ25vcmVcbiAgfSBmaW5hbGx5IHtcbiAgICBkZWxldGUgdGhpcy53ZWJTb2NrZXRzTWFwcGluZ1toYW5kbGVyUGF0aG5hbWVdO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBleGlzdGluZyB3ZWJzb2NrZXQgaGFuZGxlciBmcm9tIGV4cHJlc3Mgc2VydmVyIGluc3RhbmNlLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gRXhwcmVzc1xuICogc2VydmVyIGluc3RhbmNlIGNvbnRleHQuXG4gKiBAdGhpcyB7QXBwaXVtU2VydmVyfVxuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IHRydWUgaWYgYXQgbGVhc3Qgb25lIGhhbmRsZXIgaGFzIGJlZW4gZGVsZXRlZFxuICovXG5hc3luYyBmdW5jdGlvbiByZW1vdmVBbGxXZWJTb2NrZXRIYW5kbGVycygpIHtcbiAgaWYgKF8uaXNFbXB0eSh0aGlzLndlYlNvY2tldHNNYXBwaW5nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBfLnNvbWUoXG4gICAgYXdhaXQgQi5hbGwoXG4gICAgICBfLmtleXModGhpcy53ZWJTb2NrZXRzTWFwcGluZykubWFwKChwYXRobmFtZSkgPT4gdGhpcy5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKSlcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCB7XG4gIGFkZFdlYlNvY2tldEhhbmRsZXIsXG4gIHJlbW92ZVdlYlNvY2tldEhhbmRsZXIsXG4gIHJlbW92ZUFsbFdlYlNvY2tldEhhbmRsZXJzLFxuICBnZXRXZWJTb2NrZXRIYW5kbGVycyxcbiAgREVGQVVMVF9XU19QQVRITkFNRV9QUkVGSVgsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1TZXJ2ZXJ9IEFwcGl1bVNlcnZlclxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLDBCQUEwQixHQUFHLEtBQW5DOzs7QUFnQkEsZUFBZUMsbUJBQWYsQ0FBbUNDLGVBQW5DLEVBQW9EQyxhQUFwRCxFQUFtRTtFQUNqRSxNQUFNQyxNQUFNLEdBQWdDLElBQTVDOztFQUNBLElBQUlDLGVBQUEsQ0FBRUMsV0FBRixDQUFjLEtBQUtDLGlCQUFuQixDQUFKLEVBQTJDO0lBQ3pDSCxNQUFNLENBQUNHLGlCQUFQLEdBQTJCLEVBQTNCO0lBRUFILE1BQU0sQ0FBQ0ksRUFBUCxDQUFVLFNBQVYsRUFBcUIsQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQWtCQyxJQUFsQixLQUEyQjtNQUM5QyxJQUFJQyxlQUFKOztNQUNBLElBQUk7UUFFRkEsZUFBZSxHQUFHLElBQUlDLFFBQUosQ0FBUUosT0FBTyxDQUFDSyxHQUFoQixFQUFxQkMsUUFBdkM7TUFDRCxDQUhELENBR0UsTUFBTTtRQUNOSCxlQUFlLEdBQUdILE9BQU8sQ0FBQ0ssR0FBMUI7TUFDRDs7TUFDRCxLQUFLLE1BQU0sQ0FBQ0MsUUFBRCxFQUFXQyxRQUFYLENBQVgsSUFBbUNYLGVBQUEsQ0FBRVksT0FBRixDQUFVYixNQUFNLENBQUNHLGlCQUFqQixDQUFuQyxFQUF3RTtRQUN0RSxJQUFJSyxlQUFlLEtBQUtHLFFBQXhCLEVBQWtDO1VBQ2hDQyxRQUFRLENBQUNFLGFBQVQsQ0FBdUJULE9BQXZCLEVBQWdDQyxNQUFoQyxFQUF3Q0MsSUFBeEMsRUFBK0NRLEVBQUQsSUFBUTtZQUNwREgsUUFBUSxDQUFDSSxJQUFULENBQWMsWUFBZCxFQUE0QkQsRUFBNUIsRUFBZ0NWLE9BQWhDO1VBQ0QsQ0FGRDtVQUdBO1FBQ0Q7TUFDRjs7TUFDREMsTUFBTSxDQUFDVyxPQUFQO0lBQ0QsQ0FqQkQ7RUFrQkQ7O0VBQ0QsS0FBS2QsaUJBQUwsQ0FBdUJMLGVBQXZCLElBQTBDQyxhQUExQztBQUNEOztBQWNELGVBQWVtQixvQkFBZixDQUFvQ0MsVUFBVSxHQUFHLElBQWpELEVBQXVEO0VBQ3JELElBQUlsQixlQUFBLENBQUVtQixPQUFGLENBQVUsS0FBS2pCLGlCQUFmLENBQUosRUFBdUM7SUFDckMsT0FBTyxFQUFQO0VBQ0Q7O0VBRUQsT0FBT0YsZUFBQSxDQUFFWSxPQUFGLENBQVUsS0FBS1YsaUJBQWYsRUFBa0NrQixNQUFsQyxDQUF5QyxDQUFDQyxHQUFELEVBQU0sQ0FBQ1gsUUFBRCxFQUFXQyxRQUFYLENBQU4sS0FBK0I7SUFDN0UsSUFBSSxDQUFDWCxlQUFBLENBQUVzQixRQUFGLENBQVdKLFVBQVgsQ0FBRCxJQUEyQlIsUUFBUSxDQUFDYSxRQUFULENBQWtCTCxVQUFsQixDQUEvQixFQUE4RDtNQUM1REcsR0FBRyxDQUFDWCxRQUFELENBQUgsR0FBZ0JDLFFBQWhCO0lBQ0Q7O0lBQ0QsT0FBT1UsR0FBUDtFQUNELENBTE0sRUFLSixFQUxJLENBQVA7QUFNRDs7QUFhRCxlQUFlRyxzQkFBZixDQUFzQzNCLGVBQXRDLEVBQXVEO0VBQUE7O0VBQ3JELE1BQU1jLFFBQVEsNEJBQUcsS0FBS1QsaUJBQVIsMERBQUcsc0JBQXlCTCxlQUF6QixDQUFqQjs7RUFDQSxJQUFJLENBQUNjLFFBQUwsRUFBZTtJQUNiLE9BQU8sS0FBUDtFQUNEOztFQUVELElBQUk7SUFDRkEsUUFBUSxDQUFDYyxLQUFUOztJQUNBLEtBQUssTUFBTUMsTUFBWCxJQUFxQmYsUUFBUSxDQUFDZ0IsT0FBVCxJQUFvQixFQUF6QyxFQUE2QztNQUMzQ0QsTUFBTSxDQUFDRSxTQUFQO0lBQ0Q7O0lBQ0QsT0FBTyxJQUFQO0VBQ0QsQ0FORCxDQU1FLE9BQU9DLEdBQVAsRUFBWSxDQUViLENBUkQsU0FRVTtJQUNSLE9BQU8sS0FBSzNCLGlCQUFMLENBQXVCTCxlQUF2QixDQUFQO0VBQ0Q7O0VBQ0QsT0FBTyxLQUFQO0FBQ0Q7O0FBU0QsZUFBZWlDLDBCQUFmLEdBQTRDO0VBQzFDLElBQUk5QixlQUFBLENBQUVtQixPQUFGLENBQVUsS0FBS2pCLGlCQUFmLENBQUosRUFBdUM7SUFDckMsT0FBTyxLQUFQO0VBQ0Q7O0VBRUQsT0FBT0YsZUFBQSxDQUFFK0IsSUFBRixDQUNMLE1BQU1DLGlCQUFBLENBQUVDLEdBQUYsQ0FDSmpDLGVBQUEsQ0FBRWtDLElBQUYsQ0FBTyxLQUFLaEMsaUJBQVosRUFBK0JpQyxHQUEvQixDQUFvQ3pCLFFBQUQsSUFBYyxLQUFLYyxzQkFBTCxDQUE0QmQsUUFBNUIsQ0FBakQsQ0FESSxDQURELENBQVA7QUFLRCJ9
124
+ exports.removeAllWebSocketHandlers = removeAllWebSocketHandlers;
125
+ /**
126
+ * @typedef {import('@appium/types').AppiumServer} AppiumServer
127
+ */
128
+ //# sourceMappingURL=websocket.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.js","names":["DEFAULT_WS_PATHNAME_PREFIX","addWebSocketHandler","handlerPathname","handlerServer","server","_","isUndefined","webSocketsMapping","on","request","socket","head","currentPathname","URL","url","pathname","wsServer","toPairs","handleUpgrade","ws","emit","destroy","getWebSocketHandlers","keysFilter","isEmpty","reduce","acc","isString","includes","removeWebSocketHandler","close","client","clients","terminate","ign","removeAllWebSocketHandlers","some","B","all","keys","map"],"sources":["../../../lib/express/websocket.js"],"sourcesContent":["/* eslint-disable require-await */\nimport _ from 'lodash';\nimport {URL} from 'url';\nimport B from 'bluebird';\n\nconst DEFAULT_WS_PATHNAME_PREFIX = '/ws';\n\n/**\n * Adds websocket handler to express server instance.\n * It is expected this function is called in Express\n * server instance context.\n *\n * @this {AppiumServer} - An instance of express HTTP server.\n * @param {string} handlerPathname - Web socket endpoint path starting with\n * a single slash character. It is recommended to always add\n * DEFAULT_WS_PATHNAME_PREFIX to all web socket pathnames.\n * @param {import('ws').Server} handlerServer - WebSocket server instance. See\n * https://github.com/websockets/ws/pull/885 for more details\n * on how to configure the handler properly.\n * @returns {Promise<void>}\n */\nasync function addWebSocketHandler(handlerPathname, handlerServer) {\n const server = /** @type {AppiumServer} */ (this);\n if (_.isUndefined(this.webSocketsMapping)) {\n server.webSocketsMapping = {};\n // https://github.com/websockets/ws/pull/885\n server.on('upgrade', (request, socket, head) => {\n let currentPathname;\n try {\n // @ts-expect-error\n currentPathname = new URL(request.url).pathname;\n } catch {\n currentPathname = request.url;\n }\n for (const [pathname, wsServer] of _.toPairs(server.webSocketsMapping)) {\n if (currentPathname === pathname) {\n wsServer.handleUpgrade(request, socket, head, (ws) => {\n wsServer.emit('connection', ws, request);\n });\n return;\n }\n }\n socket.destroy();\n });\n }\n this.webSocketsMapping[handlerPathname] = handlerServer;\n}\n\n/**\n * Returns web socket handlers registered for the given server\n * instance.\n * It is expected this function is called in Express\n * server instance context.\n *\n * @this {AppiumServer}\n * @param {string?} [keysFilter] - Only include pathnames with given\n * `keysFilter` value if set. All pairs will be included by default.\n * @returns {Promise<Record<string, import('ws').Server>>} pathnames to websocket server instances mapping matching the search criteria or an empty object otherwise.\n */\n// eslint-disable-next-line require-await\nasync function getWebSocketHandlers(keysFilter = null) {\n if (_.isEmpty(this.webSocketsMapping)) {\n return {};\n }\n\n return _.toPairs(this.webSocketsMapping).reduce((acc, [pathname, wsServer]) => {\n if (!_.isString(keysFilter) || pathname.includes(keysFilter)) {\n acc[pathname] = wsServer;\n }\n return acc;\n }, {});\n}\n\n/**\n * Removes existing websocket handler from express server instance.\n * The call is ignored if the given `handlerPathname` handler\n * is not present in the handlers list.\n * It is expected this function is called in Express\n * server instance context.\n * @this {AppiumServer}\n * @param {string} handlerPathname - Websocket endpoint path.\n * @returns {Promise<boolean>} true if the handlerPathname was found and deleted\n */\n// eslint-disable-next-line require-await\nasync function removeWebSocketHandler(handlerPathname) {\n const wsServer = this.webSocketsMapping?.[handlerPathname];\n if (!wsServer) {\n return false;\n }\n\n try {\n wsServer.close();\n for (const client of wsServer.clients || []) {\n client.terminate();\n }\n return true;\n } catch (ign) {\n // ignore\n } finally {\n delete this.webSocketsMapping[handlerPathname];\n }\n return false;\n}\n\n/**\n * Removes all existing websocket handler from express server instance.\n * It is expected this function is called in Express\n * server instance context.\n * @this {AppiumServer}\n * @returns {Promise<boolean>} true if at least one handler has been deleted\n */\nasync function removeAllWebSocketHandlers() {\n if (_.isEmpty(this.webSocketsMapping)) {\n return false;\n }\n\n return _.some(\n await B.all(\n _.keys(this.webSocketsMapping).map((pathname) => this.removeWebSocketHandler(pathname))\n )\n );\n}\n\nexport {\n addWebSocketHandler,\n removeWebSocketHandler,\n removeAllWebSocketHandlers,\n getWebSocketHandlers,\n DEFAULT_WS_PATHNAME_PREFIX,\n};\n\n/**\n * @typedef {import('@appium/types').AppiumServer} AppiumServer\n */\n"],"mappings":";;;;;;;;;;;;;AACA;;AACA;;AACA;;;;AAEA,MAAMA,0BAA0B,GAAG,KAAnC;;;AAgBA,eAAeC,mBAAf,CAAmCC,eAAnC,EAAoDC,aAApD,EAAmE;EACjE,MAAMC,MAAM,GAAgC,IAA5C;;EACA,IAAIC,eAAA,CAAEC,WAAF,CAAc,KAAKC,iBAAnB,CAAJ,EAA2C;IACzCH,MAAM,CAACG,iBAAP,GAA2B,EAA3B;IAEAH,MAAM,CAACI,EAAP,CAAU,SAAV,EAAqB,CAACC,OAAD,EAAUC,MAAV,EAAkBC,IAAlB,KAA2B;MAC9C,IAAIC,eAAJ;;MACA,IAAI;QAEFA,eAAe,GAAG,IAAIC,QAAJ,CAAQJ,OAAO,CAACK,GAAhB,EAAqBC,QAAvC;MACD,CAHD,CAGE,MAAM;QACNH,eAAe,GAAGH,OAAO,CAACK,GAA1B;MACD;;MACD,KAAK,MAAM,CAACC,QAAD,EAAWC,QAAX,CAAX,IAAmCX,eAAA,CAAEY,OAAF,CAAUb,MAAM,CAACG,iBAAjB,CAAnC,EAAwE;QACtE,IAAIK,eAAe,KAAKG,QAAxB,EAAkC;UAChCC,QAAQ,CAACE,aAAT,CAAuBT,OAAvB,EAAgCC,MAAhC,EAAwCC,IAAxC,EAA+CQ,EAAD,IAAQ;YACpDH,QAAQ,CAACI,IAAT,CAAc,YAAd,EAA4BD,EAA5B,EAAgCV,OAAhC;UACD,CAFD;UAGA;QACD;MACF;;MACDC,MAAM,CAACW,OAAP;IACD,CAjBD;EAkBD;;EACD,KAAKd,iBAAL,CAAuBL,eAAvB,IAA0CC,aAA1C;AACD;;AAcD,eAAemB,oBAAf,CAAoCC,UAAU,GAAG,IAAjD,EAAuD;EACrD,IAAIlB,eAAA,CAAEmB,OAAF,CAAU,KAAKjB,iBAAf,CAAJ,EAAuC;IACrC,OAAO,EAAP;EACD;;EAED,OAAOF,eAAA,CAAEY,OAAF,CAAU,KAAKV,iBAAf,EAAkCkB,MAAlC,CAAyC,CAACC,GAAD,EAAM,CAACX,QAAD,EAAWC,QAAX,CAAN,KAA+B;IAC7E,IAAI,CAACX,eAAA,CAAEsB,QAAF,CAAWJ,UAAX,CAAD,IAA2BR,QAAQ,CAACa,QAAT,CAAkBL,UAAlB,CAA/B,EAA8D;MAC5DG,GAAG,CAACX,QAAD,CAAH,GAAgBC,QAAhB;IACD;;IACD,OAAOU,GAAP;EACD,CALM,EAKJ,EALI,CAAP;AAMD;;AAaD,eAAeG,sBAAf,CAAsC3B,eAAtC,EAAuD;EAAA;;EACrD,MAAMc,QAAQ,4BAAG,KAAKT,iBAAR,0DAAG,sBAAyBL,eAAzB,CAAjB;;EACA,IAAI,CAACc,QAAL,EAAe;IACb,OAAO,KAAP;EACD;;EAED,IAAI;IACFA,QAAQ,CAACc,KAAT;;IACA,KAAK,MAAMC,MAAX,IAAqBf,QAAQ,CAACgB,OAAT,IAAoB,EAAzC,EAA6C;MAC3CD,MAAM,CAACE,SAAP;IACD;;IACD,OAAO,IAAP;EACD,CAND,CAME,OAAOC,GAAP,EAAY,CAEb,CARD,SAQU;IACR,OAAO,KAAK3B,iBAAL,CAAuBL,eAAvB,CAAP;EACD;;EACD,OAAO,KAAP;AACD;;AASD,eAAeiC,0BAAf,GAA4C;EAC1C,IAAI9B,eAAA,CAAEmB,OAAF,CAAU,KAAKjB,iBAAf,CAAJ,EAAuC;IACrC,OAAO,KAAP;EACD;;EAED,OAAOF,eAAA,CAAE+B,IAAF,CACL,MAAMC,iBAAA,CAAEC,GAAF,CACJjC,eAAA,CAAEkC,IAAF,CAAO,KAAKhC,iBAAZ,EAA+BiC,GAA/B,CAAoCzB,QAAD,IAAc,KAAKc,sBAAL,CAA4Bd,QAA5B,CAAjD,CADI,CADD,CAAP;AAKD"}
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../lib/express/websocket.js"],"names":[],"mappings":"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"}
@@ -2,65 +2,7 @@ export type Constraints = import('@appium/types').Constraints;
2
2
  export type AppiumLogger = import('@appium/types').AppiumLogger;
3
3
  export type StringRecord = import('@appium/types').StringRecord;
4
4
  export type BaseDriverCapConstraints = import('@appium/types').BaseDriverCapConstraints;
5
- export type Capabilities<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {
6
- readonly platformName: {
7
- readonly presence: true;
8
- readonly isString: true;
9
- };
10
- readonly app: {
11
- readonly isString: true;
12
- };
13
- readonly deviceName: {
14
- readonly isString: true;
15
- };
16
- readonly platformVersion: {
17
- readonly isString: true;
18
- };
19
- readonly newCommandTimeout: {
20
- readonly isNumber: true;
21
- };
22
- readonly automationName: {
23
- readonly isString: true;
24
- };
25
- readonly autoLaunch: {
26
- readonly isBoolean: true;
27
- };
28
- readonly udid: {
29
- readonly isString: true;
30
- };
31
- /**
32
- *
33
- * @template {Constraints} C
34
- * @param {any} oldCaps
35
- * @param {C} desiredCapConstraints
36
- * @param {AppiumLogger} log
37
- * @returns {Capabilities<C>}
38
- */
39
- readonly orientation: {
40
- readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
41
- };
42
- readonly autoWebview: {
43
- readonly isBoolean: true;
44
- };
45
- readonly noReset: {
46
- readonly isBoolean: true;
47
- };
48
- readonly fullReset: {
49
- readonly isBoolean: true;
50
- };
51
- readonly language: {
52
- readonly isString: true;
53
- };
54
- readonly locale: {
55
- readonly isString: true;
56
- };
57
- readonly eventTimings: {
58
- readonly isBoolean: true;
59
- };
60
- readonly printPageSourceOnFindFailure: {
61
- readonly isBoolean: true;
62
- };
63
- }, Extra extends void | import("@appium/types").StringRecord = void> = import('@appium/types').Capabilities<C, Extra>;
5
+ export type Capabilities<C extends Readonly<Record<string, import("@appium/types").Constraint>> = typeof import("@appium/types").BASE_DESIRED_CAP_CONSTRAINTS, Extra extends void | import("@appium/types").StringRecord = void> = import('@appium/types').Capabilities<C, Extra>;
64
6
  export function isW3cCaps(caps: any): boolean;
65
7
  /**
66
8
  *
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../lib/helpers/capabilities.js"],"names":[],"mappings":"0BA8Ea,OAAO,eAAe,EAAE,WAAW;2BACnC,OAAO,eAAe,EAAE,YAAY;2BACpC,OAAO,eAAe,EAAE,YAAY;uCACpC,OAAO,eAAe,EAAE,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;IAvD7D;;;;;;;OAOG;;;;;;;;;;;;;;;;;;;;;;;;;uEAsDU,OAAO,eAAe,EAAE,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;AAnF3D,8CAoBC;AAED;;;;;;;GAOG;AACH,yGALW,GAAG,iCAEH,YAAY,gEA0CtB"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../lib/helpers/capabilities.js"],"names":[],"mappings":"0BA8Ea,OAAO,eAAe,EAAE,WAAW;2BACnC,OAAO,eAAe,EAAE,YAAY;2BACpC,OAAO,eAAe,EAAE,YAAY;uCACpC,OAAO,eAAe,EAAE,wBAAwB;mOAMhD,OAAO,eAAe,EAAE,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;AAnF3D,8CAoBC;AAED;;;;;;;GAOG;AACH,yGALW,GAAG,iCAEH,YAAY,gEA0CtB"}