oxygen-cli 1.22.0 → 1.99.0-alpha.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 (232) hide show
  1. package/CHANGELOG.md +0 -50
  2. package/build/core/OxygenCore.js +56 -145
  3. package/build/errors/OxygenError.js +5 -15
  4. package/build/errors/helper.js +45 -49
  5. package/build/index.js +14 -6
  6. package/build/lib/cli-util.js +19 -19
  7. package/build/lib/cli.js +4 -2
  8. package/build/lib/parallel-launcher.js +333 -0
  9. package/build/lib/param-manager.js +66 -47
  10. package/build/lib/util.js +38 -9
  11. package/build/ox_modules/index.js +1 -97
  12. package/build/ox_modules/module-assert.js +19 -9
  13. package/build/ox_modules/module-dns.js +220 -0
  14. package/build/ox_modules/module-http.js +39 -51
  15. package/build/ox_modules/module-shell.js +19 -75
  16. package/build/ox_modules/module-utils.js +1 -108
  17. package/build/ox_modules/utils.js +1 -357
  18. package/build/reporter/FileReporterBase.js +5 -5
  19. package/build/reporter/ReportAggregator.js +127 -4
  20. package/build/runners/WorkerProcess.js +15 -28
  21. package/build/runners/index.js +2 -6
  22. package/build/runners/oxygen/OxygenWorker.js +8 -8
  23. package/build/runners/oxygen/index.js +17 -18
  24. package/build/runners/oxygen/worker.js +10 -8
  25. package/package.json +12 -46
  26. package/build/lib/img-merge.js +0 -163
  27. package/build/ox_modules/module-db.js +0 -146
  28. package/build/ox_modules/module-email.js +0 -212
  29. package/build/ox_modules/module-eyes.js +0 -189
  30. package/build/ox_modules/module-mailinator.js +0 -207
  31. package/build/ox_modules/module-mob/commands/alertAccept.js +0 -35
  32. package/build/ox_modules/module-mob/commands/alertDismiss.js +0 -35
  33. package/build/ox_modules/module-mob/commands/assertAlert.js +0 -56
  34. package/build/ox_modules/module-mob/commands/assertText.js +0 -45
  35. package/build/ox_modules/module-mob/commands/assertTitle.js +0 -43
  36. package/build/ox_modules/module-mob/commands/assertValue.js +0 -66
  37. package/build/ox_modules/module-mob/commands/back.js +0 -27
  38. package/build/ox_modules/module-mob/commands/clear.js +0 -40
  39. package/build/ox_modules/module-mob/commands/click.js +0 -35
  40. package/build/ox_modules/module-mob/commands/clickHidden.js +0 -52
  41. package/build/ox_modules/module-mob/commands/clickLong.js +0 -34
  42. package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +0 -37
  43. package/build/ox_modules/module-mob/commands/closeApp.js +0 -27
  44. package/build/ox_modules/module-mob/commands/debug.js +0 -26
  45. package/build/ox_modules/module-mob/commands/dragAndDrop.js +0 -38
  46. package/build/ox_modules/module-mob/commands/enableNetwork.js +0 -75
  47. package/build/ox_modules/module-mob/commands/execute.js +0 -32
  48. package/build/ox_modules/module-mob/commands/findElement.js +0 -36
  49. package/build/ox_modules/module-mob/commands/findElements.js +0 -39
  50. package/build/ox_modules/module-mob/commands/getAlertText.js +0 -31
  51. package/build/ox_modules/module-mob/commands/getAppiumLogs.js +0 -26
  52. package/build/ox_modules/module-mob/commands/getBrowserLogs.js +0 -66
  53. package/build/ox_modules/module-mob/commands/getCurrentActivity.js +0 -26
  54. package/build/ox_modules/module-mob/commands/getCurrentPackage.js +0 -26
  55. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +0 -57
  56. package/build/ox_modules/module-mob/commands/getDeviceTime.js +0 -27
  57. package/build/ox_modules/module-mob/commands/getLocation.js +0 -32
  58. package/build/ox_modules/module-mob/commands/getSource.js +0 -26
  59. package/build/ox_modules/module-mob/commands/getText.js +0 -36
  60. package/build/ox_modules/module-mob/commands/getTitle.js +0 -24
  61. package/build/ox_modules/module-mob/commands/getUrl.js +0 -28
  62. package/build/ox_modules/module-mob/commands/getValue.js +0 -50
  63. package/build/ox_modules/module-mob/commands/getWindowHandles.js +0 -27
  64. package/build/ox_modules/module-mob/commands/hideKeyboard.js +0 -33
  65. package/build/ox_modules/module-mob/commands/index.js +0 -594
  66. package/build/ox_modules/module-mob/commands/installApp.js +0 -28
  67. package/build/ox_modules/module-mob/commands/isAppInstalled.js +0 -28
  68. package/build/ox_modules/module-mob/commands/isCheckable.js +0 -31
  69. package/build/ox_modules/module-mob/commands/isChecked.js +0 -31
  70. package/build/ox_modules/module-mob/commands/isClickable.js +0 -31
  71. package/build/ox_modules/module-mob/commands/isExist.js +0 -36
  72. package/build/ox_modules/module-mob/commands/isSelected.js +0 -36
  73. package/build/ox_modules/module-mob/commands/isVisible.js +0 -36
  74. package/build/ox_modules/module-mob/commands/isWebViewContext.js +0 -27
  75. package/build/ox_modules/module-mob/commands/launchApp.js +0 -26
  76. package/build/ox_modules/module-mob/commands/longPressKeyCode.js +0 -30
  77. package/build/ox_modules/module-mob/commands/open.js +0 -43
  78. package/build/ox_modules/module-mob/commands/pause.js +0 -27
  79. package/build/ox_modules/module-mob/commands/removeApp.js +0 -28
  80. package/build/ox_modules/module-mob/commands/resetApp.js +0 -26
  81. package/build/ox_modules/module-mob/commands/scrollIntoElement.js +0 -86
  82. package/build/ox_modules/module-mob/commands/scrollIntoView.js +0 -40
  83. package/build/ox_modules/module-mob/commands/select.js +0 -54
  84. package/build/ox_modules/module-mob/commands/selectFrame.js +0 -53
  85. package/build/ox_modules/module-mob/commands/selectWindow.js +0 -149
  86. package/build/ox_modules/module-mob/commands/sendKeys.js +0 -84
  87. package/build/ox_modules/module-mob/commands/setContext.js +0 -28
  88. package/build/ox_modules/module-mob/commands/setNativeContext.js +0 -26
  89. package/build/ox_modules/module-mob/commands/setTimeout.js +0 -33
  90. package/build/ox_modules/module-mob/commands/setWebViewContext.js +0 -39
  91. package/build/ox_modules/module-mob/commands/shake.js +0 -27
  92. package/build/ox_modules/module-mob/commands/smsClickLink.js +0 -32
  93. package/build/ox_modules/module-mob/commands/smsGetText.js +0 -45
  94. package/build/ox_modules/module-mob/commands/swipe.js +0 -58
  95. package/build/ox_modules/module-mob/commands/swipeElement.js +0 -58
  96. package/build/ox_modules/module-mob/commands/swipeScreen.js +0 -56
  97. package/build/ox_modules/module-mob/commands/takeScreenshot.js +0 -27
  98. package/build/ox_modules/module-mob/commands/tap.js +0 -34
  99. package/build/ox_modules/module-mob/commands/type.js +0 -67
  100. package/build/ox_modules/module-mob/commands/unlockPattern.js +0 -92
  101. package/build/ox_modules/module-mob/commands/waitForExist.js +0 -29
  102. package/build/ox_modules/module-mob/commands/waitForInteractable.js +0 -42
  103. package/build/ox_modules/module-mob/commands/waitForVisible.js +0 -28
  104. package/build/ox_modules/module-mob.js +0 -699
  105. package/build/ox_modules/module-pdf.js +0 -328
  106. package/build/ox_modules/module-proxy.js +0 -324
  107. package/build/ox_modules/module-serial.js +0 -187
  108. package/build/ox_modules/module-soap.js +0 -260
  109. package/build/ox_modules/module-twilio.js +0 -192
  110. package/build/ox_modules/module-web/commands/alertAccept.js +0 -35
  111. package/build/ox_modules/module-web/commands/alertDismiss.js +0 -35
  112. package/build/ox_modules/module-web/commands/assertAlert.js +0 -55
  113. package/build/ox_modules/module-web/commands/assertExist.js +0 -28
  114. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +0 -51
  115. package/build/ox_modules/module-web/commands/assertSelectedValue.js +0 -45
  116. package/build/ox_modules/module-web/commands/assertText.js +0 -45
  117. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +0 -56
  118. package/build/ox_modules/module-web/commands/assertTextPresent.js +0 -52
  119. package/build/ox_modules/module-web/commands/assertTitle.js +0 -42
  120. package/build/ox_modules/module-web/commands/assertValue.js +0 -44
  121. package/build/ox_modules/module-web/commands/back.js +0 -27
  122. package/build/ox_modules/module-web/commands/clear.js +0 -41
  123. package/build/ox_modules/module-web/commands/click.js +0 -112
  124. package/build/ox_modules/module-web/commands/clickHidden.js +0 -79
  125. package/build/ox_modules/module-web/commands/closeWindow.js +0 -25
  126. package/build/ox_modules/module-web/commands/debug.js +0 -25
  127. package/build/ox_modules/module-web/commands/deleteCookies.js +0 -22
  128. package/build/ox_modules/module-web/commands/deselect.js +0 -34
  129. package/build/ox_modules/module-web/commands/doubleClick.js +0 -65
  130. package/build/ox_modules/module-web/commands/dragAndDrop.js +0 -36
  131. package/build/ox_modules/module-web/commands/execute.js +0 -36
  132. package/build/ox_modules/module-web/commands/fileBrowse.js +0 -72
  133. package/build/ox_modules/module-web/commands/findElement.js +0 -35
  134. package/build/ox_modules/module-web/commands/findElements.js +0 -38
  135. package/build/ox_modules/module-web/commands/fullscreenWindow.js +0 -24
  136. package/build/ox_modules/module-web/commands/getAlertText.js +0 -30
  137. package/build/ox_modules/module-web/commands/getAttribute.js +0 -38
  138. package/build/ox_modules/module-web/commands/getBrowserLogs.js +0 -34
  139. package/build/ox_modules/module-web/commands/getCookies.js +0 -23
  140. package/build/ox_modules/module-web/commands/getCssValue.js +0 -38
  141. package/build/ox_modules/module-web/commands/getElementCount.js +0 -29
  142. package/build/ox_modules/module-web/commands/getHTML.js +0 -30
  143. package/build/ox_modules/module-web/commands/getSource.js +0 -26
  144. package/build/ox_modules/module-web/commands/getText.js +0 -36
  145. package/build/ox_modules/module-web/commands/getTitle.js +0 -22
  146. package/build/ox_modules/module-web/commands/getUrl.js +0 -26
  147. package/build/ox_modules/module-web/commands/getValue.js +0 -43
  148. package/build/ox_modules/module-web/commands/getWindowHandles.js +0 -26
  149. package/build/ox_modules/module-web/commands/getWindowSize.js +0 -26
  150. package/build/ox_modules/module-web/commands/getXMLPageSource.js +0 -51
  151. package/build/ox_modules/module-web/commands/index.js +0 -634
  152. package/build/ox_modules/module-web/commands/isAlertPresent.js +0 -31
  153. package/build/ox_modules/module-web/commands/isChecked.js +0 -30
  154. package/build/ox_modules/module-web/commands/isExist.js +0 -36
  155. package/build/ox_modules/module-web/commands/isSelected.js +0 -35
  156. package/build/ox_modules/module-web/commands/isVisible.js +0 -36
  157. package/build/ox_modules/module-web/commands/makeVisible.js +0 -74
  158. package/build/ox_modules/module-web/commands/maximizeWindow.js +0 -24
  159. package/build/ox_modules/module-web/commands/minimizeWindow.js +0 -24
  160. package/build/ox_modules/module-web/commands/newWindow.js +0 -27
  161. package/build/ox_modules/module-web/commands/open.js +0 -42
  162. package/build/ox_modules/module-web/commands/pause.js +0 -26
  163. package/build/ox_modules/module-web/commands/point.js +0 -37
  164. package/build/ox_modules/module-web/commands/pointJS.js +0 -56
  165. package/build/ox_modules/module-web/commands/refresh.js +0 -26
  166. package/build/ox_modules/module-web/commands/rightClick.js +0 -61
  167. package/build/ox_modules/module-web/commands/rightClickActions.js +0 -57
  168. package/build/ox_modules/module-web/commands/scrollToElement.js +0 -33
  169. package/build/ox_modules/module-web/commands/select.js +0 -55
  170. package/build/ox_modules/module-web/commands/selectFrame.js +0 -52
  171. package/build/ox_modules/module-web/commands/selectWindow.js +0 -148
  172. package/build/ox_modules/module-web/commands/sendKeys.js +0 -56
  173. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +0 -33
  174. package/build/ox_modules/module-web/commands/setTimeout.js +0 -33
  175. package/build/ox_modules/module-web/commands/setWindowSize.js +0 -29
  176. package/build/ox_modules/module-web/commands/takeScreenshot.js +0 -37
  177. package/build/ox_modules/module-web/commands/type.js +0 -52
  178. package/build/ox_modules/module-web/commands/waitForAngular.js +0 -83
  179. package/build/ox_modules/module-web/commands/waitForExist.js +0 -28
  180. package/build/ox_modules/module-web/commands/waitForInteractable.js +0 -31
  181. package/build/ox_modules/module-web/commands/waitForNotExist.js +0 -57
  182. package/build/ox_modules/module-web/commands/waitForNotText.js +0 -45
  183. package/build/ox_modules/module-web/commands/waitForNotValue.js +0 -45
  184. package/build/ox_modules/module-web/commands/waitForText.js +0 -45
  185. package/build/ox_modules/module-web/commands/waitForValue.js +0 -45
  186. package/build/ox_modules/module-web/commands/waitForVisible.js +0 -28
  187. package/build/ox_modules/module-web/commands/waitForWindow.js +0 -118
  188. package/build/ox_modules/module-web.js +0 -909
  189. package/build/ox_modules/module-win/commands/assertText.js +0 -41
  190. package/build/ox_modules/module-win/commands/assertTitle.js +0 -38
  191. package/build/ox_modules/module-win/commands/assertValue.js +0 -62
  192. package/build/ox_modules/module-win/commands/back.js +0 -21
  193. package/build/ox_modules/module-win/commands/clear.js +0 -34
  194. package/build/ox_modules/module-win/commands/click.js +0 -25
  195. package/build/ox_modules/module-win/commands/clickLong.js +0 -30
  196. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +0 -33
  197. package/build/ox_modules/module-win/commands/findElement.js +0 -31
  198. package/build/ox_modules/module-win/commands/findElements.js +0 -31
  199. package/build/ox_modules/module-win/commands/getAppiumLogs.js +0 -22
  200. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +0 -25
  201. package/build/ox_modules/module-win/commands/getLocation.js +0 -26
  202. package/build/ox_modules/module-win/commands/getSource.js +0 -22
  203. package/build/ox_modules/module-win/commands/getText.js +0 -32
  204. package/build/ox_modules/module-win/commands/getValue.js +0 -46
  205. package/build/ox_modules/module-win/commands/getWindowHandles.js +0 -25
  206. package/build/ox_modules/module-win/commands/index.js +0 -298
  207. package/build/ox_modules/module-win/commands/isCheckable.js +0 -26
  208. package/build/ox_modules/module-win/commands/isChecked.js +0 -26
  209. package/build/ox_modules/module-win/commands/isClickable.js +0 -26
  210. package/build/ox_modules/module-win/commands/isExist.js +0 -32
  211. package/build/ox_modules/module-win/commands/isSelected.js +0 -26
  212. package/build/ox_modules/module-win/commands/isVisible.js +0 -32
  213. package/build/ox_modules/module-win/commands/open.js +0 -24
  214. package/build/ox_modules/module-win/commands/pause.js +0 -23
  215. package/build/ox_modules/module-win/commands/rightClick.js +0 -30
  216. package/build/ox_modules/module-win/commands/selectWindow.js +0 -97
  217. package/build/ox_modules/module-win/commands/sendKeys.js +0 -50
  218. package/build/ox_modules/module-win/commands/setTimeout.js +0 -29
  219. package/build/ox_modules/module-win/commands/takeScreenshot.js +0 -26
  220. package/build/ox_modules/module-win/commands/tap.js +0 -29
  221. package/build/ox_modules/module-win/commands/type.js +0 -38
  222. package/build/ox_modules/module-win/commands/waitForExist.js +0 -25
  223. package/build/ox_modules/module-win/commands/waitForInteractable.js +0 -43
  224. package/build/ox_modules/module-win/commands/waitForVisible.js +0 -24
  225. package/build/ox_modules/module-win.js +0 -367
  226. package/build/ox_services/service-devtools/submodule-network.js +0 -338
  227. package/build/ox_services/service-devtools.js +0 -83
  228. package/build/runners/cucumber/CucumberEventListener.js +0 -181
  229. package/build/runners/cucumber/CucumberReporter.js +0 -277
  230. package/build/runners/cucumber/CucumberWorker.js +0 -337
  231. package/build/runners/cucumber/index.js +0 -159
  232. package/build/runners/cucumber/worker.js +0 -184
@@ -1,212 +0,0 @@
1
- "use strict";
2
-
3
- require("source-map-support/register");
4
-
5
- var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
6
-
7
- var _utils = _interopRequireDefault(require("./utils"));
8
-
9
- var _lodash = _interopRequireDefault(require("lodash"));
10
-
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
-
13
- /*
14
- * Copyright (C) 2015-present CloudBeat Limited
15
- *
16
- * This program is free software: you can redistribute it and/or modify
17
- * it under the terms of the GNU General Public License as published by
18
- * the Free Software Foundation, either version 3 of the License, or
19
- * (at your option) any later version.
20
- */
21
-
22
- /**
23
- * @name email
24
- * @description Provides methods for working with email via IMAP.
25
- */
26
- var errHelper = require('../errors/helper');
27
-
28
- module.exports = function () {
29
- var imaps = require('imap-simple');
30
-
31
- const simpleParser = require('mailparser').simpleParser;
32
-
33
- var _config;
34
-
35
- module.isInitialized = function () {
36
- return _config !== undefined;
37
- };
38
- /**
39
- * @summary Set email connection details.
40
- * @function init
41
- * @param {String} user - Username (e.g. 'your@email.address').
42
- * @param {String} password - Password.
43
- * @param {String} host - Host name (e.g. 'imap.gmail.com').
44
- * @param {Number} port - Port number (e.g. 993).
45
- * @param {Boolean} tls - true to use TLS, false otherwise.
46
- * @param {Number} authTimeout - Authentication timeout in milliseconds.
47
- * @param {Boolean=} enableSNI - Enable sending SNI when establishing the connection. This is required for some mail servers. Default is false.
48
- */
49
-
50
-
51
- module.init = function (user, password, host, port, tls, authTimeout, enableSNI) {
52
- _utils.default.assertArgumentNonEmptyString(user, 'user');
53
-
54
- _utils.default.assertArgumentNonEmptyString(password, 'password');
55
-
56
- _utils.default.assertArgumentNonEmptyString(host, 'host');
57
-
58
- _utils.default.assertArgumentNumberNonNegative(port, 'port');
59
-
60
- _utils.default.assertArgumentBool(tls, 'tls');
61
-
62
- _utils.default.assertArgumentNumberNonNegative(authTimeout, 'authTimeout');
63
-
64
- _config = {
65
- imap: {
66
- user: user,
67
- password: password,
68
- host: host,
69
- port: port,
70
- tls: tls,
71
- authTimeout: authTimeout
72
- }
73
- }; // set servername if SNI is enabled or we are using Gmail
74
-
75
- if (enableSNI || host === 'imap.gmail.com') {
76
- _config.imap.tlsOptions = {
77
- servername: host
78
- };
79
- }
80
- };
81
- /**
82
- * @summary Retrieves last unseen email.
83
- * @function getLastEmail
84
- * @param {Number} sinceMinutes - Search for emails received since the specified amount of minutes into past.
85
- * @param {String|Regex} subject - Return email matching the specified subject.
86
- * @param {Number} timeout - Timeout (in milliseconds) for waiting for the message to arrive.
87
- * @return {Object} Email body, text, textAsHtml, attachments if any, and TO, FROM, SUBJECT, DATE headers.
88
- * @example <caption>[javascript] Usage example</caption>
89
- * email.init('[YOUR_EMAIL]@gmail.com', 'password', 'imap.gmail.com', 993, true, 3000);
90
- * var mail = email.getLastEmail(60, 'email subject', 5000);
91
- * log.info(mail);
92
- *
93
- * if(r.attachments && r.attachments.length > 0){
94
- * const fs = require('fs');
95
- * r.attachments.map((attachment) => {
96
- * let fileDescriptor;
97
- * try{
98
- * fileDescriptor = fs.openSync(attachment.filename, 'w');
99
- * } catch(e) {
100
- * throw 'could not open file: ' + e;
101
- * }
102
- *
103
- * try{
104
- * fs.writeFileSync(fileDescriptor, attachment.data);
105
- * } catch(e) {
106
- * throw 'error writing file: ' + e;
107
- * }
108
- *
109
- * fs.closeSync(fileDescriptor);
110
- * });
111
- * }
112
- */
113
-
114
-
115
- module.getLastEmail = async function (sinceMinutes, subject, timeout) {
116
- _utils.default.assertArgumentNumberNonNegative(sinceMinutes, 'sinceMinutes');
117
-
118
- _utils.default.assertArgumentNumberNonNegative(timeout, 'timeout');
119
-
120
- var mail;
121
- var now = new Date().getTime();
122
- var err;
123
-
124
- while (!err && !mail && new Date().getTime() - now < timeout) {
125
- try {
126
- const connection = await imaps.connect(_config);
127
- await connection.openBox('INBOX'); // fetch unseen emails from the last sinceMinutes
128
-
129
- var startDate = new Date();
130
- startDate.setTime(Date.now() - sinceMinutes * 60 * 1000);
131
- startDate = startDate.toISOString();
132
- var searchCriteria = ['UNSEEN', ['SINCE', startDate]]; // fetch certain headers and stripped down body
133
-
134
- var fetchOptions = {
135
- bodies: ['HEADER.FIELDS (FROM TO SUBJECT DATE)', 'TEXT'],
136
- struct: true,
137
- markSeen: false
138
- };
139
- const results = await connection.search(searchCriteria, fetchOptions);
140
-
141
- for (var result of results) {
142
- const headerPart = _lodash.default.find(result.parts, {
143
- 'which': fetchOptions.bodies[0]
144
- });
145
-
146
- const bodyPart = _lodash.default.find(result.parts, {
147
- 'which': fetchOptions.bodies[1]
148
- });
149
-
150
- const id = result.attributes.uid;
151
- const idHeader = 'Imap-Id: ' + id + '\r\n';
152
- const simple = await simpleParser(idHeader + bodyPart.body);
153
- const attachments = [];
154
- const parts = imaps.getParts(result.attributes.struct);
155
-
156
- for (const part of parts) {
157
- if (part.disposition && part.disposition.type.toUpperCase() === 'ATTACHMENT') {
158
- const partData = await connection.getPartData(result, part);
159
- attachments.push({
160
- filename: part.disposition.params.filename,
161
- data: partData
162
- });
163
- }
164
- }
165
-
166
- let body;
167
- let html;
168
- let textAsHtml;
169
-
170
- if (simple.html || simple.text || simple.textAsHtml) {
171
- // parsed success
172
- body = bodyPart.text;
173
- html = simple.html;
174
- textAsHtml = simple.textAsHtml;
175
- } else {
176
- // don't parsed
177
- body = bodyPart.body;
178
- }
179
-
180
- if (headerPart) {
181
- if (subject && (subject.constructor.name === 'RegExp' && subject.test(headerPart.body.subject[0]) || subject === headerPart.body.subject[0])) {
182
- let to = headerPart.body.to ? headerPart.body.to[0] : null;
183
- mail = {
184
- from: headerPart.body.from[0],
185
- to: to,
186
- subject: headerPart.body.subject[0],
187
- date: headerPart.body.date[0],
188
- body: body,
189
- attachments: attachments,
190
- textAsHtml: textAsHtml,
191
- html: html
192
- };
193
- }
194
- }
195
- }
196
- } catch (e) {
197
- err = e;
198
- }
199
- }
200
-
201
- if (err) {
202
- throw new _OxygenError.default(errHelper.errorCode.EMAIL_ERROR, err.toString());
203
- } else if (!mail) {
204
- throw new _OxygenError.default(errHelper.errorCode.TIMEOUT, "Couldn't get an email within " + timeout + ' ms.');
205
- }
206
-
207
- return mail;
208
- };
209
-
210
- return module;
211
- };
212
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1lbWFpbC5qcyJdLCJuYW1lcyI6WyJlcnJIZWxwZXIiLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsImltYXBzIiwic2ltcGxlUGFyc2VyIiwiX2NvbmZpZyIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwidXNlciIsInBhc3N3b3JkIiwiaG9zdCIsInBvcnQiLCJ0bHMiLCJhdXRoVGltZW91dCIsImVuYWJsZVNOSSIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJpbWFwIiwidGxzT3B0aW9ucyIsInNlcnZlcm5hbWUiLCJnZXRMYXN0RW1haWwiLCJzaW5jZU1pbnV0ZXMiLCJzdWJqZWN0IiwidGltZW91dCIsIm1haWwiLCJub3ciLCJEYXRlIiwiZ2V0VGltZSIsImVyciIsImNvbm5lY3Rpb24iLCJjb25uZWN0Iiwib3BlbkJveCIsInN0YXJ0RGF0ZSIsInNldFRpbWUiLCJ0b0lTT1N0cmluZyIsInNlYXJjaENyaXRlcmlhIiwiZmV0Y2hPcHRpb25zIiwiYm9kaWVzIiwic3RydWN0IiwibWFya1NlZW4iLCJyZXN1bHRzIiwic2VhcmNoIiwicmVzdWx0IiwiaGVhZGVyUGFydCIsIl8iLCJmaW5kIiwicGFydHMiLCJib2R5UGFydCIsImlkIiwiYXR0cmlidXRlcyIsInVpZCIsImlkSGVhZGVyIiwic2ltcGxlIiwiYm9keSIsImF0dGFjaG1lbnRzIiwiZ2V0UGFydHMiLCJwYXJ0IiwiZGlzcG9zaXRpb24iLCJ0eXBlIiwidG9VcHBlckNhc2UiLCJwYXJ0RGF0YSIsImdldFBhcnREYXRhIiwicHVzaCIsImZpbGVuYW1lIiwicGFyYW1zIiwiZGF0YSIsImh0bWwiLCJ0ZXh0QXNIdG1sIiwidGV4dCIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJ0byIsImZyb20iLCJkYXRlIiwiZSIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJFTUFJTF9FUlJPUiIsInRvU3RyaW5nIiwiVElNRU9VVCJdLCJtYXBwaW5ncyI6Ijs7OztBQWNBOztBQUNBOztBQUNBOzs7O0FBaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQSxJQUFJQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUF2Qjs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFlBQVc7QUFDeEIsTUFBSUMsS0FBSyxHQUFHSCxPQUFPLENBQUMsYUFBRCxDQUFuQjs7QUFDQSxRQUFNSSxZQUFZLEdBQUdKLE9BQU8sQ0FBQyxZQUFELENBQVAsQ0FBc0JJLFlBQTNDOztBQUNBLE1BQUlDLE9BQUo7O0FBRUFKLEVBQUFBLE1BQU0sQ0FBQ0ssYUFBUCxHQUF1QixZQUFXO0FBQzlCLFdBQU9ELE9BQU8sS0FBS0UsU0FBbkI7QUFDSCxHQUZEO0FBSUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lOLEVBQUFBLE1BQU0sQ0FBQ08sSUFBUCxHQUFjLFVBQVNDLElBQVQsRUFBZUMsUUFBZixFQUF5QkMsSUFBekIsRUFBK0JDLElBQS9CLEVBQXFDQyxHQUFyQyxFQUEwQ0MsV0FBMUMsRUFBdURDLFNBQXZELEVBQWtFO0FBQzVFQyxtQkFBTUMsNEJBQU4sQ0FBbUNSLElBQW5DLEVBQXlDLE1BQXpDOztBQUNBTyxtQkFBTUMsNEJBQU4sQ0FBbUNQLFFBQW5DLEVBQTZDLFVBQTdDOztBQUNBTSxtQkFBTUMsNEJBQU4sQ0FBbUNOLElBQW5DLEVBQXlDLE1BQXpDOztBQUNBSyxtQkFBTUUsK0JBQU4sQ0FBc0NOLElBQXRDLEVBQTRDLE1BQTVDOztBQUNBSSxtQkFBTUcsa0JBQU4sQ0FBeUJOLEdBQXpCLEVBQThCLEtBQTlCOztBQUNBRyxtQkFBTUUsK0JBQU4sQ0FBc0NKLFdBQXRDLEVBQW1ELGFBQW5EOztB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QUFTO0FBQ0wsWUFBTSxJQUFJZ0Qsb0JBQUosQ0FBWWhGLFNBQVMsQ0FBQ2lGLFNBQVYsQ0FBb0JDLFdBQWhDLEVBQTZDbEQsR0FBRyxDQUFDbUQsUUFBSixFQUE3QyxDQUFOO0FBQ0gsS0FGRCxNQUVPLElBQUksQ0FBQ3ZELElBQUwsRUFBVztBQUNkLFlBQU0sSUFBSW9ELG9CQUFKLENBQVloRixTQUFTLENBQUNpRixTQUFWLENBQW9CRyxPQUFoQyxFQUF5QyxrQ0FBa0N6RCxPQUFsQyxHQUE0QyxNQUFyRixDQUFOO0FBQ0g7O0FBRUQsV0FBT0MsSUFBUDtBQUNILEdBL0ZEOztBQWlHQSxTQUFPMUIsTUFBUDtBQUNILENBL0tEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZW1haWxcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBlbWFpbCB2aWEgSU1BUC5cclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbnZhciBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGltYXBzID0gcmVxdWlyZSgnaW1hcC1zaW1wbGUnKTtcclxuICAgIGNvbnN0IHNpbXBsZVBhcnNlciA9IHJlcXVpcmUoJ21haWxwYXJzZXInKS5zaW1wbGVQYXJzZXI7XHJcbiAgICB2YXIgX2NvbmZpZztcclxuXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfY29uZmlnICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0IGVtYWlsIGNvbm5lY3Rpb24gZGV0YWlscy5cclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXNlciAtIFVzZXJuYW1lIChlLmcuICd5b3VyQGVtYWlsLmFkZHJlc3MnKS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzd29yZCAtIFBhc3N3b3JkLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhvc3QgLSBIb3N0IG5hbWUgKGUuZy4gJ2ltYXAuZ21haWwuY29tJykuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gcG9ydCAtIFBvcnQgbnVtYmVyIChlLmcuIDk5MykuXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHRscyAtIHRydWUgdG8gdXNlIFRMUywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGF1dGhUaW1lb3V0IC0gQXV0aGVudGljYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW49fSBlbmFibGVTTkkgLSBFbmFibGUgc2VuZGluZyBTTkkgd2hlbiBlc3RhYmxpc2hpbmcgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHNvbWUgbWFpbCBzZXJ2ZXJzLiBEZWZhdWx0IGlzIGZhbHNlLiBcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmluaXQgPSBmdW5jdGlvbih1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCwgdGxzLCBhdXRoVGltZW91dCwgZW5hYmxlU05JKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyh1c2VyLCAndXNlcicpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcocGFzc3dvcmQsICdwYXNzd29yZCcpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcoaG9zdCwgJ2hvc3QnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKHBvcnQsICdwb3J0Jyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sKHRscywgJ3RscycpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoYXV0aFRpbWVvdXQsICdhdXRoVGltZW91dCcpO1xyXG5cclxuICAgICAgICBfY29uZmlnID0ge1xyXG4gICAgICAgICAgICBpbWFwOiB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdCxcclxuICAgICAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgICAgICB0bHM6IHRscyxcclxuICAgICAgICAgICAgICAgIGF1dGhUaW1lb3V0OiBhdXRoVGltZW91dFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHNlcnZlcm5hbWUgaWYgU05JIGlzIGVuYWJsZWQgb3Igd2UgYXJlIHVzaW5nIEdtYWlsXHJcbiAgICAgICAgaWYgKGVuYWJsZVNOSSB8fCBob3N0ID09PSAnaW1hcC5nbWFpbC5jb20nKSB7XHJcbiAgICAgICAgICAgIF9jb25maWcuaW1hcC50bHNPcHRpb25zID0geyBzZXJ2ZXJuYW1lOiBob3N0IH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IHVuc2VlbiBlbWFpbC5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRMYXN0RW1haWxcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzaW5jZU1pbnV0ZXMgLSBTZWFyY2ggZm9yIGVtYWlscyByZWNlaXZlZCBzaW5jZSB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiBtaW51dGVzIGludG8gcGFzdC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ2V4fSBzdWJqZWN0IC0gUmV0dXJuIGVtYWlsIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgc3ViamVjdC5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lb3V0IC0gVGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Igd2FpdGluZyBmb3IgdGhlIG1lc3NhZ2UgdG8gYXJyaXZlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBFbWFpbCBib2R5LCB0ZXh0LCB0ZXh0QXNIdG1sLCBhdHRhY2htZW50cyBpZiBhbnksIGFuZCBUTywgRlJPTSwgU1VCSkVDVCwgREFURSBoZWFkZXJzLlxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiBlbWFpbC5pbml0KCdbWU9VUl9FTUFJTF1AZ21haWwuY29tJywgJ3Bhc3N3b3JkJywgJ2ltYXAuZ21haWwuY29tJywgOTkzLCB0cnVlLCAzMDAwKTtcclxuICAgICAqIHZhciBtYWlsID0gZW1haWwuZ2V0TGFzdEVtYWlsKDYwLCAnZW1haWwgc3ViamVjdCcsIDUwMDApO1xyXG4gICAgICogbG9nLmluZm8obWFpbCk7XHJcbiAgICAgKiBcclxuICAgICAqIGlmKHIuYXR0YWNobWVudHMgJiYgci5hdHRhY2htZW50cy5sZW5ndGggPiAwKXtcclxuICAgICAqIFx0Y29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xyXG4gICAgICogXHRyLmF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCkgPT4ge1xyXG4gICAgICogXHRcdGxldCBmaWxlRGVzY3JpcHRvcjtcclxuICAgICAqIFx0XHR0cnl7XHJcbiAgICAgKiBcdFx0XHRmaWxlRGVzY3JpcHRvciA9IGZzLm9wZW5TeW5jKGF0dGFjaG1lbnQuZmlsZW5hbWUsICd3Jyk7XHJcbiAgICAgKiBcdFx0fSBjYXRjaChlKSB7XHJcbiAgICAgKiBcdFx0XHR0aHJvdyAnY291bGQgbm90IG9wZW4gZmlsZTogJyArIGU7XHJcbiAgICAgKiBcdFx0fVxyXG4gICAgICogXHRcdFxyXG4gICAgICogXHRcdHRyeXtcclxuICAgICAqIFx0XHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZURlc2NyaXB0b3IsIGF0dGFjaG1lbnQuZGF0YSk7XHJcbiAgICAgKiBcdFx0fSBjYXRjaChlKSB7XHJcbiAgICAgKiBcdFx0XHR0aHJvdyAnZXJyb3Igd3JpdGluZyBmaWxlOiAnICsgZTtcclxuICAgICAqIFx0XHR9XHJcbiAgICAgKiBcdFx0XHJcbiAgICAgKiBcdFx0ZnMuY2xvc2VTeW5jKGZpbGVEZXNjcmlwdG9yKTtcclxuICAgICAqIFx0fSk7XHJcbiAgICAgKiB9XHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRMYXN0RW1haWwgPSBhc3luYyBmdW5jdGlvbihzaW5jZU1pbnV0ZXMsIHN1YmplY3QsIHRpbWVvdXQpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKHNpbmNlTWludXRlcywgJ3NpbmNlTWludXRlcycpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuXHJcbiAgICAgICAgdmFyIG1haWw7XHJcbiAgICAgICAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgdmFyIGVycjtcclxuXHJcbiAgICAgICAgd2hpbGUgKCFlcnIgJiYgIW1haWwgJiYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSBub3cpIDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGltYXBzLmNvbm5lY3QoX2NvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLm9wZW5Cb3goJ0lOQk9YJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZmV0Y2ggdW5zZWVuIGVtYWlscyBmcm9tIHRoZSBsYXN0IHNpbmNlTWludXRlc1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGUuc2V0VGltZShEYXRlLm5vdygpIC0gKHNpbmNlTWludXRlcyAqIDYwICogMTAwMCkpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoQ3JpdGVyaWEgPSBbJ1VOU0VFTicsIFsnU0lOQ0UnLCBzdGFydERhdGVdXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBmZXRjaCBjZXJ0YWluIGhlYWRlcnMgYW5kIHN0cmlwcGVkIGRvd24gYm9keVxyXG4gICAgICAgICAgICAgICAgdmFyIGZldGNoT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBib2RpZXM6IFsnSEVBREVSLkZJRUxEUyAoRlJPTSBUTyBTVUJKRUNUIERBVEUpJywgJ1RFWFQnXSxcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFya1NlZW46IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBjb25uZWN0aW9uLnNlYXJjaChzZWFyY2hDcml0ZXJpYSwgZmV0Y2hPcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciByZXN1bHQgb2YgcmVzdWx0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlclBhcnQgPSBfLmZpbmQocmVzdWx0LnBhcnRzLCB7ICd3aGljaCc6IGZldGNoT3B0aW9ucy5ib2RpZXNbMF0gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keVBhcnQgPSBfLmZpbmQocmVzdWx0LnBhcnRzLCB7ICd3aGljaCc6IGZldGNoT3B0aW9ucy5ib2RpZXNbMV0gfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gcmVzdWx0LmF0dHJpYnV0ZXMudWlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkSGVhZGVyID0gJ0ltYXAtSWQ6ICcraWQrJ1xcclxcbic7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2ltcGxlID0gYXdhaXQgc2ltcGxlUGFyc2VyKGlkSGVhZGVyK2JvZHlQYXJ0LmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBpbWFwcy5nZXRQYXJ0cyhyZXN1bHQuYXR0cmlidXRlcy5zdHJ1Y3QpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnQuZGlzcG9zaXRpb24gJiYgcGFydC5kaXNwb3NpdGlvbi50eXBlLnRvVXBwZXJDYXNlKCkgPT09ICdBVFRBQ0hNRU5UJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydERhdGEgPSBhd2FpdCBjb25uZWN0aW9uLmdldFBhcnREYXRhKHJlc3VsdCwgcGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogcGFydC5kaXNwb3NpdGlvbi5wYXJhbXMuZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFydERhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dEFzSHRtbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2ltcGxlLmh0bWwgfHwgc2ltcGxlLnRleHQgfHwgc2ltcGxlLnRleHRBc0h0bWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VkIHN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGJvZHlQYXJ0LnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBzaW1wbGUuaHRtbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFzSHRtbCA9IHNpbXBsZS50ZXh0QXNIdG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gYm9keVBhcnQuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXJQYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJqZWN0LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIHN1YmplY3QudGVzdChoZWFkZXJQYXJ0LmJvZHkuc3ViamVjdFswXSkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YmplY3QgPT09IGhlYWRlclBhcnQuYm9keS5zdWJqZWN0WzBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0byA9IGhlYWRlclBhcnQuYm9keS50byA/IGhlYWRlclBhcnQuYm9keS50b1swXSA6IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBoZWFkZXJQYXJ0LmJvZHkuZnJvbVswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdDogaGVhZGVyUGFydC5ib2R5LnN1YmplY3RbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogaGVhZGVyUGFydC5ib2R5LmRhdGVbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogYm9keSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFzSHRtbDogdGV4dEFzSHRtbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sOiBodG1sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlcnIgPSBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRU1BSUxfRVJST1IsIGVyci50b1N0cmluZygpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFtYWlsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVElNRU9VVCwgXCJDb3VsZG4ndCBnZXQgYW4gZW1haWwgd2l0aGluIFwiICsgdGltZW91dCArICcgbXMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWFpbDtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1vZHVsZTtcclxufTtcclxuIl19
@@ -1,189 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- require("source-map-support/register");
9
-
10
- var _OxygenModule = _interopRequireDefault(require("../core/OxygenModule"));
11
-
12
- var _ModuleError = _interopRequireDefault(require("../errors/ModuleError"));
13
-
14
- var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
15
-
16
- var _helper = _interopRequireDefault(require("../errors/helper"));
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
- /*
21
- * Copyright (C) 2015-present CloudBeat Limited
22
- *
23
- * This program is free software: you can redistribute it and/or modify
24
- * it under the terms of the GNU General Public License as published by
25
- * the Free Software Foundation, either version 3 of the License, or
26
- * (at your option) any later version.
27
- */
28
-
29
- /**
30
- * @name eyes
31
- * @description Provides access to Applitools Eyes service.
32
- */
33
- const DEFAULT_VIEWPORT = {
34
- width: 1440,
35
- height: 900
36
- };
37
- const MODULE_NAME = 'eyes';
38
-
39
- class ApplitoolsModule extends _OxygenModule.default {
40
- constructor(options, context, rs, logger, modules, services) {
41
- super(options, context, rs, logger, modules, services); // this module doesn't require calling init() method
42
-
43
- this._eyes = null;
44
- }
45
-
46
- get name() {
47
- return MODULE_NAME;
48
- }
49
- /**
50
- * @summary Initializes Applitools Eyes session.
51
- * @function init
52
- * @param {string|object} module - A module name or a reference to the mododule to be associated with Eyes current session.
53
- * @param {apiKey} [apiKey] - An optional Applitools API Key.
54
- * If this parameter is not provided, API Key must be specified in the test configuration file.
55
- */
56
-
57
-
58
- async init(module, apiKey = null) {
59
- this._eyesConfig = this.options.applitoolsOpts;
60
-
61
- if (!this.options.applitoolsOpts) {
62
- throw new _ModuleError.default('Applitools settings are missing.');
63
- }
64
-
65
- this._viewport = Object.assign(DEFAULT_VIEWPORT, this._eyesConfig.viewport || {});
66
- this._apiKey = apiKey || this.options.applitoolsKey || this._eyesConfig.key || process.env.APPLITOOLS_KEY || null;
67
-
68
- if (!this._apiKey) {
69
- throw new _ModuleError.default('API key is missing. To use Applitools service, you must specify Applitools API key.');
70
- }
71
-
72
- if (typeof module === 'string') {
73
- if (Object.prototype.hasOwnProperty.call(this.modules, module)) {
74
- module = this.modules[module];
75
- } else {
76
- throw new _ModuleError.default(`Module not found: ${module}.`);
77
- }
78
- }
79
-
80
- if (typeof module.getDriver !== 'function') {
81
- throw new _ModuleError.default(`The module "${module.name}" does not have "getDriver" function implemented.`);
82
- }
83
-
84
- const driver = module.getDriver();
85
- this._driver = driver;
86
-
87
- const Eyes = require('@applitools/eyes-webdriverio').Eyes;
88
-
89
- this._eyes = new Eyes();
90
-
91
- this._eyes.setApiKey(this._apiKey);
92
-
93
- let appName = 'Oxygen App';
94
- let testName = 'Oxygen Test';
95
-
96
- if (this.options.appName && typeof this.options.appName === 'string') {
97
- appName = this.options.appName;
98
- }
99
-
100
- if (this.options.name && typeof this.options.name === 'string') {
101
- testName = this.options.name;
102
- }
103
-
104
- try {
105
- await driver.call(() => this._eyes.open(driver, appName, testName, this._viewport));
106
- } catch (e) {
107
- throw new _ModuleError.default(`Failed to initialize "eyes" module: ${e.message}`);
108
- }
109
-
110
- super.init();
111
- }
112
- /**
113
- * @summary Closes Applitools Eyes session, terminates the sequence of checkpoints, and then waits for and returns the test results.
114
- * @function dispose
115
- * @return {TestResult} Eyes test result.
116
- */
117
-
118
-
119
- async dispose() {
120
- if (!this.isInitialized || !this._eyes) {
121
- return;
122
- }
123
-
124
- let results = null;
125
-
126
- try {
127
- results = this._eyes.close(false);
128
- } finally {
129
- this._eyes.abortIfNotClosed();
130
- }
131
-
132
- this._eyes = null;
133
- super.dispose();
134
- return results;
135
- }
136
- /**
137
- * @summary Preform visual validation for a certain target.
138
- * @function check
139
- * @param {string} name - A name to be associated with the match.
140
- * @param {Target} [target] - An optional target instance which describes whether we want a window/region/frame.
141
- * @return {boolean} A promise which is resolved when the validation is finished.
142
- */
143
-
144
-
145
- async check(name, target = null) {
146
- if (!this._eyes) {
147
- return false;
148
- }
149
-
150
- const Target = require('@applitools/eyes-webdriverio').Target;
151
-
152
- const result = await this._eyes.check(name, target || Target.window().fully());
153
-
154
- if (result._asExpected) {
155
- return true;
156
- }
157
-
158
- throw new _OxygenError.default(_helper.default.errorCode.ASSERT_ERROR, null);
159
- }
160
- /**
161
- * @summary Takes a snapshot of the application under test and matches it with
162
- * the expected output.
163
- * @function checkWindow
164
- * @param {string} [name=] - An optional tag to be associated with the snapshot.
165
- * @param {number} [matchTimeout=-1] - The amount of time to retry matching (Milliseconds).
166
- * @return {boolean} A promise which is resolved when the validation is finished.
167
- */
168
-
169
-
170
- async checkWindow(name, matchTimeout) {
171
- if (!this._eyes) {
172
- return false;
173
- }
174
-
175
- const result = await this._driver.call(async () => {
176
- return await this._eyes.checkWindow(name, matchTimeout);
177
- });
178
-
179
- if (result._asExpected) {
180
- return true;
181
- }
182
-
183
- throw new _OxygenError.default(_helper.default.errorCode.ASSERT_ERROR, null);
184
- }
185
-
186
- }
187
-
188
- exports.default = ApplitoolsModule;
189
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1leWVzLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfVklFV1BPUlQiLCJ3aWR0aCIsImhlaWdodCIsIk1PRFVMRV9OQU1FIiwiQXBwbGl0b29sc01vZHVsZSIsIk94eWdlbk1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsIl9leWVzIiwibmFtZSIsImluaXQiLCJtb2R1bGUiLCJhcGlLZXkiLCJfZXllc0NvbmZpZyIsImFwcGxpdG9vbHNPcHRzIiwiTW9kdWxlRXJyb3IiLCJfdmlld3BvcnQiLCJPYmplY3QiLCJhc3NpZ24iLCJ2aWV3cG9ydCIsIl9hcGlLZXkiLCJhcHBsaXRvb2xzS2V5Iiwia2V5IiwicHJvY2VzcyIsImVudiIsIkFQUExJVE9PTFNfS0VZIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0RHJpdmVyIiwiZHJpdmVyIiwiX2RyaXZlciIsIkV5ZXMiLCJyZXF1aXJlIiwic2V0QXBpS2V5IiwiYXBwTmFtZSIsInRlc3ROYW1lIiwib3BlbiIsImUiLCJtZXNzYWdlIiwiZGlzcG9zZSIsImlzSW5pdGlhbGl6ZWQiLCJyZXN1bHRzIiwiY2xvc2UiLCJhYm9ydElmTm90Q2xvc2VkIiwiY2hlY2siLCJ0YXJnZXQiLCJUYXJnZXQiLCJyZXN1bHQiLCJ3aW5kb3ciLCJmdWxseSIsIl9hc0V4cGVjdGVkIiwiT3hFcnJvciIsImVyckhlbHBlciIsImVycm9yQ29kZSIsIkFTU0VSVF9FUlJPUiIsImNoZWNrV2luZG93IiwibWF0Y2hUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFjQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQWpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBT0EsTUFBTUEsZ0JBQWdCLEdBQUc7QUFDckJD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S0FBS3hDLEtBQUwsQ0FBV3FDLEtBQVgsQ0FBaUJwQyxJQUFqQixFQUF1QnFDLE1BQU0sSUFBSUMsTUFBTSxDQUFDRSxNQUFQLEdBQWdCQyxLQUFoQixFQUFqQyxDQUF0Qjs7QUFDQSxRQUFJRixNQUFNLENBQUNHLFdBQVgsRUFBd0I7QUFDcEIsYUFBTyxJQUFQO0FBQ0g7O0FBQ0QsVUFBTSxJQUFJQyxvQkFBSixDQUFZQyxnQkFBVUMsU0FBVixDQUFvQkMsWUFBaEMsRUFBOEMsSUFBOUMsQ0FBTjtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ3FCLFFBQVhDLFdBQVcsQ0FBQy9DLElBQUQsRUFBT2dELFlBQVAsRUFBcUI7QUFDbEMsUUFBSSxDQUFDLEtBQUtqRCxLQUFWLEVBQWlCO0FBQ2IsYUFBTyxLQUFQO0FBQ0g7O0FBRUQsVUFBTXdDLE1BQU0sR0FBRyxNQUFNLEtBQUtqQixPQUFMLENBQWFILElBQWIsQ0FBa0IsWUFBVztBQUM5QyxhQUFPLE1BQU0sS0FBS3BCLEtBQUwsQ0FBV2dELFdBQVgsQ0FBdUIvQyxJQUF2QixFQUE2QmdELFlBQTdCLENBQWI7QUFDSCxLQUZvQixDQUFyQjs7QUFJQSxRQUFJVCxNQUFNLENBQUNHLFdBQVgsRUFBd0I7QUFDcEIsYUFBTyxJQUFQO0FBQ0g7O0FBQ0QsVUFBTSxJQUFJQyxvQkFBSixDQUFZQyxnQkFBVUMsU0FBVixDQUFvQkMsWUFBaEMsRUFBOEMsSUFBOUMsQ0FBTjtBQUNIOztBQTdIc0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBleWVzXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBhY2Nlc3MgdG8gQXBwbGl0b29scyBFeWVzIHNlcnZpY2UuXHJcbiAqL1xyXG5cclxuaW1wb3J0IE94eWdlbk1vZHVsZSBmcm9tICcuLi9jb3JlL094eWdlbk1vZHVsZSc7XHJcbmltcG9ydCBNb2R1bGVFcnJvciBmcm9tICcuLi9lcnJvcnMvTW9kdWxlRXJyb3InO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuY29uc3QgREVGQVVMVF9WSUVXUE9SVCA9IHtcclxuICAgIHdpZHRoOiAxNDQwLFxyXG4gICAgaGVpZ2h0OiA5MDBcclxufTtcclxuY29uc3QgTU9EVUxFX05BTUUgPSAnZXllcyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaXRvb2xzTW9kdWxlIGV4dGVuZHMgT3h5Z2VuTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIC8vIHRoaXMgbW9kdWxlIGRvZXNuJ3QgcmVxdWlyZSBjYWxsaW5nIGluaXQoKSBtZXRob2RcclxuICAgICAgICB0aGlzLl9leWVzID0gbnVsbDtcclxuICAgIH1cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgQXBwbGl0b29scyBFeWVzIHNlc3Npb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBtb2R1bGUgLSBBIG1vZHVsZSBuYW1lIG9yIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2RvZHVsZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggRXllcyBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge2FwaUtleX0gW2FwaUtleV0gLSBBbiBvcHRpb25hbCBBcHBsaXRvb2xzIEFQSSBLZXkuIFxyXG4gICAgICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHByb3ZpZGVkLCBBUEkgS2V5IG11c3QgYmUgc3BlY2lmaWVkIGluIHRoZSB0ZXN0IGNvbmZpZ3VyYXRpb24gZmlsZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdChtb2R1bGUsIGFwaUtleSA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9leWVzQ29uZmlnID0gdGhpcy5vcHRpb25zLmFwcGxpdG9vbHNPcHRzO1xyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmFwcGxpdG9vbHNPcHRzKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2R1bGVFcnJvcignQXBwbGl0b29scyBzZXR0aW5ncyBhcmUgbWlzc2luZy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdmlld3BvcnQgPSBPYmplY3QuYXNzaWduKERFRkFVTFRfVklFV1BPUlQsIHRoaXMuX2V5ZXNDb25maWcudmlld3BvcnQgfHwge30pO1xyXG4gICAgICAgIHRoaXMuX2FwaUtleSA9IGFwaUtleSB8fCB0aGlzLm9wdGlvbnMuYXBwbGl0b29sc0tleSB8fCB0aGlzLl9leWVzQ29uZmlnLmtleSB8fCBwcm9jZXNzLmVudi5BUFBMSVRPT0xTX0tFWSB8fCBudWxsO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2FwaUtleSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9kdWxlRXJyb3IoJ0FQSSBrZXkgaXMgbWlzc2luZy4gVG8gdXNlIEFwcGxpdG9vbHMgc2VydmljZSwgeW91IG11c3Qgc3BlY2lmeSBBcHBsaXRvb2xzIEFQSSBrZXkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMubW9kdWxlcywgbW9kdWxlKSkge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlID0gdGhpcy5tb2R1bGVzW21vZHVsZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTW9kdWxlRXJyb3IoYE1vZHVsZSBub3QgZm91bmQ6ICR7bW9kdWxlfS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZS5nZXREcml2ZXIgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZUVycm9yKGBUaGUgbW9kdWxlIFwiJHttb2R1bGUubmFtZX1cIiBkb2VzIG5vdCBoYXZlIFwiZ2V0RHJpdmVyXCIgZnVuY3Rpb24gaW1wbGVtZW50ZWQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRyaXZlciA9IG1vZHVsZS5nZXREcml2ZXIoKTtcclxuICAgICAgICB0aGlzLl9kcml2ZXIgPSBkcml2ZXI7XHJcblxyXG4gICAgICAgIGNvbnN0IEV5ZXMgPSByZXF1aXJlKCdAYXBwbGl0b29scy9leWVzLXdlYmRyaXZlcmlvJykuRXllcztcclxuICAgICAgICB0aGlzLl9leWVzID0gbmV3IEV5ZXMoKTtcclxuICAgICAgICB0aGlzLl9leWVzLnNldEFwaUtleSh0aGlzLl9hcGlLZXkpO1xyXG5cclxuICAgICAgICBsZXQgYXBwTmFtZSA9ICdPeHlnZW4gQXBwJztcclxuICAgICAgICBsZXQgdGVzdE5hbWUgPSAnT3h5Z2VuIFRlc3QnO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFwcE5hbWUgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5hcHBOYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBhcHBOYW1lID0gdGhpcy5vcHRpb25zLmFwcE5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubmFtZSAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLm5hbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRlc3ROYW1lID0gdGhpcy5vcHRpb25zLm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGRyaXZlci5jYWxsKCgpID0+IHRoaXMuX2V5ZXMub3Blbihkcml2ZXIsIGFwcE5hbWUsIHRlc3ROYW1lLCB0aGlzLl92aWV3cG9ydCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9kdWxlRXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIFwiZXllc1wiIG1vZHVsZTogJHtlLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLmluaXQoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQ2xvc2VzIEFwcGxpdG9vbHMgRXllcyBzZXNzaW9uLCB0ZXJtaW5hdGVzIHRoZSBzZXF1ZW5jZSBvZiBjaGVja3BvaW50cywgYW5kIHRoZW4gd2FpdHMgZm9yIGFuZCByZXR1cm5zIHRoZSB0ZXN0IHJlc3VsdHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHJldHVybiB7VGVzdFJlc3VsdH0gRXllcyB0ZXN0IHJlc3VsdC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCB8fCAhdGhpcy5fZXllcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmVzdWx0cyA9IG51bGw7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSB0aGlzLl9leWVzLmNsb3NlKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2V5ZXMuYWJvcnRJZk5vdENsb3NlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9leWVzID0gbnVsbDtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQcmVmb3JtIHZpc3VhbCB2YWxpZGF0aW9uIGZvciBhIGNlcnRhaW4gdGFyZ2V0LlxyXG4gICAgICogQGZ1bmN0aW9uIGNoZWNrXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIEEgbmFtZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1hdGNoLlxyXG4gICAgICogQHBhcmFtIHtUYXJnZXR9IFt0YXJnZXRdIC0gQW4gb3B0aW9uYWwgdGFyZ2V0IGluc3RhbmNlIHdoaWNoIGRlc2NyaWJlcyB3aGV0aGVyIHdlIHdhbnQgYSB3aW5kb3cvcmVnaW9uL2ZyYW1lLlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gQSBwcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gdGhlIHZhbGlkYXRpb24gaXMgZmluaXNoZWQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNoZWNrKG5hbWUsIHRhcmdldCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2V5ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBUYXJnZXQgPSByZXF1aXJlKCdAYXBwbGl0b29scy9leWVzLXdlYmRyaXZlcmlvJykuVGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9ICBhd2FpdCB0aGlzLl9leWVzLmNoZWNrKG5hbWUsIHRhcmdldCB8fCBUYXJnZXQud2luZG93KCkuZnVsbHkoKSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5fYXNFeHBlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgVGFrZXMgYSBzbmFwc2hvdCBvZiB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCBhbmQgbWF0Y2hlcyBpdCB3aXRoXHJcbiAgICAgKiB0aGUgZXhwZWN0ZWQgb3V0cHV0LlxyXG4gICAgICogQGZ1bmN0aW9uIGNoZWNrV2luZG93XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9XSAtIEFuIG9wdGlvbmFsIHRhZyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNuYXBzaG90LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFttYXRjaFRpbWVvdXQ9LTFdIC0gVGhlIGFtb3VudCBvZiB0aW1lIHRvIHJldHJ5IG1hdGNoaW5nIChNaWxsaXNlY29uZHMpLlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gQSBwcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gdGhlIHZhbGlkYXRpb24gaXMgZmluaXNoZWQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNoZWNrV2luZG93KG5hbWUsIG1hdGNoVGltZW91dCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZXllcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9kcml2ZXIuY2FsbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2V5ZXMuY2hlY2tXaW5kb3cobmFtZSwgbWF0Y2hUaW1lb3V0KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5fYXNFeHBlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG51bGwpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==