testcafe 2.3.1 → 2.6.1

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 (235) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/LICENSE +1 -1
  3. package/README.md +40 -46
  4. package/bin/testcafe-with-v8-flag-filter.js +10 -16
  5. package/lib/api/exportable-lib/index.js +1 -11
  6. package/lib/api/structure/test.js +4 -11
  7. package/lib/api/test-controller/execution-context.js +4 -2
  8. package/lib/api/test-controller/index.js +8 -10
  9. package/lib/api/test-run-tracker.js +1 -1
  10. package/lib/assertions/executor.js +2 -11
  11. package/lib/browser/connection/gateway/index.js +272 -0
  12. package/lib/browser/connection/gateway/status.js +10 -0
  13. package/lib/browser/connection/index.js +60 -47
  14. package/lib/browser/connection/service-routes.js +4 -2
  15. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +3 -2
  16. package/lib/browser/provider/built-in/dedicated/chrome/index.js +48 -23
  17. package/lib/browser/provider/built-in/dedicated/edge/index.js +4 -1
  18. package/lib/browser/provider/index.js +13 -4
  19. package/lib/browser/provider/plugin-host.js +7 -1
  20. package/lib/cli/argument-parser/index.js +10 -16
  21. package/lib/cli/cli.js +4 -13
  22. package/lib/cli/remotes-wizard.js +2 -1
  23. package/lib/cli/utils/should-move-option-to-end.js +17 -0
  24. package/lib/client/automation/deps/hammerhead.js +24 -0
  25. package/lib/client/automation/deps/testcafe-core.js +24 -0
  26. package/lib/client/automation/index.js +567 -187
  27. package/lib/client/automation/index.min.js +1 -1
  28. package/lib/client/automation/playback/press/get-key-info.js +44 -0
  29. package/lib/client/automation/playback/press/utils.js +142 -0
  30. package/lib/client/automation/utils/get-key-code.js +15 -0
  31. package/lib/client/automation/utils/get-key-identifier.js +14 -0
  32. package/lib/client/automation/utils/is-letter.js +7 -0
  33. package/lib/client/automation/utils/key-identifier-maps.js +93 -0
  34. package/lib/client/browser/idle-page/index.html.mustache +2 -2
  35. package/lib/client/browser/idle-page/index.js +24 -11
  36. package/lib/client/core/index.js +67 -13
  37. package/lib/client/core/index.min.js +1 -1
  38. package/lib/client/core/utils/array.js +77 -0
  39. package/lib/client/core/utils/dom.js +459 -0
  40. package/lib/client/core/utils/send-request-to-frame.js +22 -0
  41. package/lib/client/core/utils/style.js +102 -0
  42. package/lib/client/core/utils/values/boundary-values.js +41 -0
  43. package/lib/client/driver/index.js +270 -242
  44. package/lib/client/driver/index.min.js +1 -1
  45. package/lib/client/test-run/iframe.js.mustache +6 -6
  46. package/lib/client/test-run/index.js.mustache +37 -33
  47. package/lib/client/ui/index.js +3238 -54
  48. package/lib/client/ui/index.min.js +1 -1
  49. package/lib/client/ui/sprite.svg +15 -0
  50. package/lib/client/ui/styles.css +184 -41
  51. package/lib/compiler/babel/load-libs.js +6 -6
  52. package/lib/compiler/compilers.js +7 -7
  53. package/lib/compiler/index.js +6 -6
  54. package/lib/compiler/interfaces.js +1 -1
  55. package/lib/compiler/test-file/add-export-api.js +3 -3
  56. package/lib/compiler/test-file/api-based.js +8 -37
  57. package/lib/compiler/test-file/formats/es-next/compiler.js +5 -5
  58. package/lib/compiler/test-file/formats/typescript/compiler.js +9 -9
  59. package/lib/compiler/test-file/get-exportable-lib-path.js +3 -3
  60. package/lib/configuration/configuration-base.js +9 -6
  61. package/lib/configuration/default-values.js +3 -3
  62. package/lib/configuration/formats.js +9 -5
  63. package/lib/configuration/interfaces.js +1 -1
  64. package/lib/configuration/option-names.js +3 -4
  65. package/lib/configuration/run-option-names.js +2 -2
  66. package/lib/configuration/testcafe-configuration.js +41 -24
  67. package/lib/configuration/types.js +1 -1
  68. package/lib/configuration/utils.js +32 -0
  69. package/lib/custom-client-scripts/client-script.js +2 -2
  70. package/lib/custom-client-scripts/get-code.js +3 -3
  71. package/lib/custom-client-scripts/routing.js +10 -12
  72. package/lib/errors/runtime/templates.js +3 -2
  73. package/lib/errors/test-run/templates.js +4 -1
  74. package/lib/errors/types.js +3 -1
  75. package/lib/index.js +6 -31
  76. package/lib/live/bootstrapper.js +3 -3
  77. package/lib/live/test-runner.js +9 -7
  78. package/lib/native-automation/add-custom-debug-formatters.js +23 -0
  79. package/lib/native-automation/api-base.js +27 -0
  80. package/lib/native-automation/client/event-descriptor.js +118 -0
  81. package/lib/native-automation/client/input.js +46 -0
  82. package/lib/native-automation/client/key-press/utils.js +31 -0
  83. package/lib/native-automation/client/types.js +11 -0
  84. package/lib/native-automation/client/utils.js +54 -0
  85. package/lib/native-automation/cookie-provider.js +115 -0
  86. package/lib/native-automation/empty-page-markup.js +11 -0
  87. package/lib/native-automation/error-route.js +7 -0
  88. package/lib/native-automation/errors.js +20 -0
  89. package/lib/native-automation/index.js +53 -0
  90. package/lib/native-automation/request-hooks/event-factory/frame-navigated-event-based.js +40 -0
  91. package/lib/native-automation/request-hooks/event-factory/request-paused-event-based.js +94 -0
  92. package/lib/native-automation/request-hooks/event-provider.js +55 -0
  93. package/lib/native-automation/request-hooks/pipeline-context.js +11 -0
  94. package/lib/{proxyless → native-automation}/request-pipeline/constants.js +1 -1
  95. package/lib/native-automation/request-pipeline/context-info.js +58 -0
  96. package/lib/native-automation/request-pipeline/index.js +329 -0
  97. package/lib/native-automation/request-pipeline/resendAuthRequest.js +23 -0
  98. package/lib/native-automation/request-pipeline/safe-api.js +66 -0
  99. package/lib/native-automation/request-pipeline/special-handlers.js +76 -0
  100. package/lib/native-automation/request-pipeline/test-run-bridge.js +45 -0
  101. package/lib/native-automation/resource-injector.js +175 -0
  102. package/lib/native-automation/session-storage/index.js +43 -0
  103. package/lib/native-automation/storages-provider.js +17 -0
  104. package/lib/native-automation/types.js +12 -0
  105. package/lib/native-automation/utils/cdp.js +71 -0
  106. package/lib/native-automation/utils/convert.js +11 -0
  107. package/lib/native-automation/utils/get-active-client.js +8 -0
  108. package/lib/native-automation/utils/headers.js +30 -0
  109. package/lib/native-automation/utils/string.js +32 -0
  110. package/lib/reporter/index.js +52 -4
  111. package/lib/reporter/interfaces.js +1 -1
  112. package/lib/reporter/plugin-host.js +44 -4
  113. package/lib/reporter/plugin-methods.js +2 -1
  114. package/lib/reporter/report-data-log.js +25 -0
  115. package/lib/role/role.js +4 -39
  116. package/lib/runner/bootstrapper.js +40 -15
  117. package/lib/runner/browser-job.js +4 -5
  118. package/lib/runner/fixture-hook-controller.js +1 -7
  119. package/lib/runner/index.js +87 -94
  120. package/lib/runner/interfaces.js +1 -1
  121. package/lib/runner/task/index.js +2 -32
  122. package/lib/runner/test-run-controller.js +46 -4
  123. package/lib/shared/errors/index.js +8 -2
  124. package/lib/shared/utils/is-file-protocol.js +2 -2
  125. package/lib/test-run/bookmark.js +5 -23
  126. package/lib/test-run/commands/actions.js +16 -4
  127. package/lib/test-run/commands/service.js +2 -3
  128. package/lib/test-run/commands/type.js +2 -1
  129. package/lib/test-run/commands/utils.js +4 -2
  130. package/lib/test-run/cookies/base.js +4 -1
  131. package/lib/test-run/cookies/factory.js +4 -4
  132. package/lib/test-run/cookies/provider.js +9 -2
  133. package/lib/test-run/execute-js-expression/index.js +4 -2
  134. package/lib/test-run/index.js +35 -151
  135. package/lib/test-run/request/create-request-options.js +37 -24
  136. package/lib/test-run/request/send.js +2 -3
  137. package/lib/test-run/role-provider.js +5 -5
  138. package/lib/test-run/session-controller.js +5 -5
  139. package/lib/test-run/storages/factory.js +4 -4
  140. package/lib/testcafe.js +17 -18
  141. package/lib/utils/check-is-vm.js +58 -0
  142. package/lib/utils/debug-loggers.js +9 -7
  143. package/lib/utils/get-browser.js +5 -2
  144. package/lib/utils/get-options/boolean-or-object-option.js +18 -0
  145. package/lib/utils/get-options/quarantine.js +10 -13
  146. package/lib/utils/get-options/skip-js-errors.js +12 -16
  147. package/lib/utils/parse-user-agent.js +20 -13
  148. package/lib/utils/string.js +1 -1
  149. package/package.json +14 -11
  150. package/ts-defs/index.d.ts +12 -2
  151. package/ts-defs/selectors.d.ts +8 -1
  152. package/ts-defs/testcafe-scripts.d.ts +8 -1
  153. package/lib/browser/connection/gateway.js +0 -205
  154. package/lib/compiler/test-file/test-file-temp-variable-name.js +0 -6
  155. package/lib/dashboard/config-storage.js +0 -26
  156. package/lib/dashboard/connector.js +0 -84
  157. package/lib/dashboard/documentation-url.js +0 -6
  158. package/lib/dashboard/formatting.js +0 -26
  159. package/lib/dashboard/get-dashboard-url.js +0 -10
  160. package/lib/dashboard/get-default-project-link.js +0 -23
  161. package/lib/dashboard/get-env-options.js +0 -26
  162. package/lib/dashboard/index.js +0 -145
  163. package/lib/dashboard/interfaces.js +0 -3
  164. package/lib/dashboard/messages.js +0 -21
  165. package/lib/proxyless/add-custom-debug-formatters.js +0 -22
  166. package/lib/proxyless/api-base.js +0 -25
  167. package/lib/proxyless/client/event-simulator.js +0 -40
  168. package/lib/proxyless/client/types.js +0 -11
  169. package/lib/proxyless/client/utils.js +0 -24
  170. package/lib/proxyless/cookie-provider.js +0 -87
  171. package/lib/proxyless/default-setup-options.js +0 -9
  172. package/lib/proxyless/empty-page-markup.js +0 -11
  173. package/lib/proxyless/error-route.js +0 -7
  174. package/lib/proxyless/index.js +0 -53
  175. package/lib/proxyless/request-hooks/event-factory/frame-navigated-event-based.js +0 -40
  176. package/lib/proxyless/request-hooks/event-factory/request-paused-event-based.js +0 -95
  177. package/lib/proxyless/request-hooks/event-provider.js +0 -52
  178. package/lib/proxyless/request-hooks/pipeline-context.js +0 -11
  179. package/lib/proxyless/request-pipeline/context-info.js +0 -55
  180. package/lib/proxyless/request-pipeline/index.js +0 -230
  181. package/lib/proxyless/request-pipeline/resendAuthRequest.js +0 -23
  182. package/lib/proxyless/request-pipeline/safe-api.js +0 -62
  183. package/lib/proxyless/request-pipeline/special-handlers.js +0 -73
  184. package/lib/proxyless/request-pipeline/test-run-bridge.js +0 -45
  185. package/lib/proxyless/resource-injector.js +0 -162
  186. package/lib/proxyless/session-storage/index.js +0 -39
  187. package/lib/proxyless/storages-provider.js +0 -17
  188. package/lib/proxyless/types.js +0 -10
  189. package/lib/proxyless/utils/cdp.js +0 -66
  190. package/lib/proxyless/utils/get-active-client.js +0 -8
  191. package/lib/proxyless/utils/headers.js +0 -30
  192. package/lib/proxyless/utils/string.js +0 -32
  193. package/lib/services/compiler/esm-runtime-holder-name.js +0 -6
  194. package/lib/services/compiler/host.js +0 -370
  195. package/lib/services/compiler/interfaces.js +0 -3
  196. package/lib/services/compiler/io.js +0 -10
  197. package/lib/services/compiler/protocol.js +0 -17
  198. package/lib/services/compiler/service-loader.js +0 -18
  199. package/lib/services/compiler/service.js +0 -361
  200. package/lib/services/compiler/test-run-proxy.js +0 -156
  201. package/lib/services/interfaces.js +0 -3
  202. package/lib/services/process-title.js +0 -10
  203. package/lib/services/serialization/prepare-options.js +0 -23
  204. package/lib/services/serialization/replicator/create-replicator.js +0 -58
  205. package/lib/services/serialization/replicator/interfaces.js +0 -3
  206. package/lib/services/serialization/replicator/transforms/base-transform.js +0 -16
  207. package/lib/services/serialization/replicator/transforms/browser-console-messages-transform.js +0 -23
  208. package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +0 -24
  209. package/lib/services/serialization/replicator/transforms/command-base-trasform/assertion-command-constructors.js +0 -28
  210. package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +0 -66
  211. package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +0 -49
  212. package/lib/services/serialization/replicator/transforms/command-base-trasform/types.js +0 -3
  213. package/lib/services/serialization/replicator/transforms/configure-response-event-option-transform.js +0 -21
  214. package/lib/services/serialization/replicator/transforms/custom-error-transform.js +0 -29
  215. package/lib/services/serialization/replicator/transforms/function-marker-transform/index.js +0 -21
  216. package/lib/services/serialization/replicator/transforms/function-marker-transform/marker.js +0 -9
  217. package/lib/services/serialization/replicator/transforms/promise-marker-transform/index.js +0 -21
  218. package/lib/services/serialization/replicator/transforms/promise-marker-transform/marker.js +0 -9
  219. package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +0 -22
  220. package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/index.js +0 -22
  221. package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/marker.js +0 -6
  222. package/lib/services/serialization/replicator/transforms/request-filter-rule-transform.js +0 -23
  223. package/lib/services/serialization/replicator/transforms/request-hook-event-data-transform.js +0 -41
  224. package/lib/services/serialization/replicator/transforms/response-mock-transform.js +0 -23
  225. package/lib/services/serialization/replicator/transforms/role-transform.js +0 -21
  226. package/lib/services/serialization/replicator/transforms/testcafe-error-list-transform.js +0 -23
  227. package/lib/services/serialization/replicator/transforms/url-transform.js +0 -23
  228. package/lib/services/serialization/test-structure.js +0 -91
  229. package/lib/services/utils/ipc/interfaces.js +0 -29
  230. package/lib/services/utils/ipc/io.js +0 -109
  231. package/lib/services/utils/ipc/message.js +0 -84
  232. package/lib/services/utils/ipc/packet.js +0 -57
  233. package/lib/services/utils/ipc/proxy.js +0 -94
  234. package/lib/services/utils/ipc/transport.js +0 -65
  235. package/lib/services/utils/method-should-not-be-called-error.js +0 -10
@@ -0,0 +1,115 @@
1
+ "use strict";
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.CdpCookieProvider = void 0;
7
+ const url_1 = require("url");
8
+ const base_1 = require("../test-run/cookies/base");
9
+ const match_collection_1 = __importDefault(require("../utils/match-collection"));
10
+ const get_active_client_1 = require("./utils/get-active-client");
11
+ const set_cookie_parser_1 = require("set-cookie-parser");
12
+ const lodash_1 = require("lodash");
13
+ const MAX_TIMESTAMP = 8640000000000000;
14
+ class CdpCookieProvider extends base_1.CookieProviderBase {
15
+ async _getCdpClient() {
16
+ const browserConnection = this.testRun.browserConnection;
17
+ return (0, get_active_client_1.getActiveClient)(browserConnection);
18
+ }
19
+ async initialize() {
20
+ return this.deleteCookies();
21
+ }
22
+ async getCookies(externalCookies) {
23
+ const client = await this._getCdpClient();
24
+ const { cookies } = await client.Storage.getCookies({});
25
+ return (0, match_collection_1.default)(cookies, externalCookies).map(this._cdpCookieToExternalCookie);
26
+ }
27
+ async setCookies(cookies, url) {
28
+ const client = await this._getCdpClient();
29
+ const { hostname = '', pathname = '/' } = url ? new url_1.URL(url) : {};
30
+ const cookiesArray = (0, lodash_1.castArray)(cookies);
31
+ const parsedCookies = this._isCookieOptionsArray(cookiesArray)
32
+ ? cookiesArray
33
+ : this._parseSetCookieStrings(cookiesArray);
34
+ await client.Network.setCookies({
35
+ cookies: parsedCookies.map(cookie => this._cookieOptionToCdpCookieParam(cookie, hostname, pathname)),
36
+ });
37
+ }
38
+ async deleteCookies(cookies = [], urls = []) {
39
+ const client = await this._getCdpClient();
40
+ if (!cookies || !cookies.length)
41
+ return client.Network.clearBrowserCookies();
42
+ const parsedUrls = this._parseUrls(urls);
43
+ let existingCookies = await this.getCookies([]);
44
+ if (parsedUrls.length) {
45
+ existingCookies = existingCookies.filter(cookie => parsedUrls
46
+ .find(url => url.domain === cookie.domain && url.path === cookie.path));
47
+ }
48
+ existingCookies = (0, match_collection_1.default)(existingCookies, cookies);
49
+ for (const cookie of existingCookies) {
50
+ await client.Network.deleteCookies({
51
+ name: cookie.name || '',
52
+ domain: cookie.domain,
53
+ path: cookie.path,
54
+ });
55
+ }
56
+ return void 0;
57
+ }
58
+ async getCookieHeader(url) {
59
+ const [{ domain, path }] = this._parseUrls([url]);
60
+ const cookies = await this.getCookies([{ domain }]);
61
+ const filteredCookies = cookies.filter(c => this._includesPath(c.path || '/', path));
62
+ return filteredCookies.map(c => `${c.name}=${c.value}`).join(';');
63
+ }
64
+ _cdpCookieToExternalCookie(cookie) {
65
+ var _a;
66
+ return {
67
+ name: cookie.name,
68
+ value: cookie.value,
69
+ domain: cookie.domain,
70
+ maxAge: void 0,
71
+ path: cookie.path,
72
+ expires: void 0,
73
+ secure: cookie.secure,
74
+ httpOnly: cookie.httpOnly,
75
+ sameSite: (_a = cookie.sameSite) !== null && _a !== void 0 ? _a : 'none',
76
+ };
77
+ }
78
+ _cookieOptionToCdpCookieParam(cookie, hostname, pathname) {
79
+ var _a, _b, _c;
80
+ return {
81
+ name: cookie.name,
82
+ value: cookie.value,
83
+ domain: (_a = cookie.domain) !== null && _a !== void 0 ? _a : hostname,
84
+ path: (_b = cookie.path) !== null && _b !== void 0 ? _b : pathname,
85
+ secure: cookie.secure,
86
+ httpOnly: false,
87
+ sameSite: cookie.sameSite,
88
+ expires: ((_c = cookie.expires) === null || _c === void 0 ? void 0 : _c.getTime()) || MAX_TIMESTAMP,
89
+ };
90
+ }
91
+ _parseUrls(urls) {
92
+ return urls.map(url => {
93
+ const { hostname, pathname } = new url_1.URL(url);
94
+ return { domain: hostname, path: pathname };
95
+ });
96
+ }
97
+ _includesPath(cookiePath, urlPath) {
98
+ if (cookiePath === '/')
99
+ return true;
100
+ const cookieParts = cookiePath.split('/');
101
+ const urlParts = urlPath.split('/');
102
+ if (cookieParts.length > urlParts.length)
103
+ return false;
104
+ while (cookieParts.length) {
105
+ if (cookieParts.shift() !== urlParts.shift())
106
+ return false;
107
+ }
108
+ return true;
109
+ }
110
+ _parseSetCookieStrings(cookies) {
111
+ return (0, set_cookie_parser_1.parse)(cookies);
112
+ }
113
+ }
114
+ exports.CdpCookieProvider = CdpCookieProvider;
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS1hdXRvbWF0aW9uL2Nvb2tpZS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQSw2QkFBMEI7QUFFMUIsbURBQThFO0FBRTlFLGlGQUF3RDtBQUN4RCxpRUFBNEQ7QUFDNUQseURBQTBDO0FBQzFDLG1DQUFtQztBQUluQyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztBQUV2QyxNQUFhLGlCQUFrQixTQUFRLHlCQUFrQjtJQUM3QyxLQUFLLENBQUMsYUFBYTtRQUN2QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFFekQsT0FBTyxJQUFBLG1DQUFlLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBRSxlQUFrQztRQUNoRCxNQUFNLE1BQU0sR0FBUSxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMvQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4RCxPQUFRLElBQUEsMEJBQWUsRUFBQyxPQUFPLEVBQUUsZUFBZSxDQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFFLE9BQTRDLEVBQUUsR0FBVztRQUN2RSxNQUFNLE1BQU0sR0FBOEIsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckUsTUFBTSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEdBQUcsRUFBRSxHQUFH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QUVPLGFBQWEsQ0FBRSxVQUFrQixFQUFFLE9BQWU7UUFDdEQsSUFBSSxVQUFVLEtBQUssR0FBRztZQUNsQixPQUFPLElBQUksQ0FBQztRQUVoQixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1FBRWpCLE9BQU8sV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUN2QixJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFO2dCQUN4QyxPQUFPLEtBQUssQ0FBQztTQUNwQjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxzQkFBc0IsQ0FBRSxPQUFpQjtRQUM3QyxPQUFPLElBQUEseUJBQUssRUFBQyxPQUFPLENBQW9CLENBQUM7SUFDN0MsQ0FBQztDQUNKO0FBM0hELDhDQTJIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZW1vdGVDaHJvbWUgZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRXh0ZXJuYWxDb29raWVzIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IENvb2tpZSA9IFByb3RvY29sLk5ldHdvcmsuQ29va2llO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJztcbmltcG9ydCB7IENvb2tpZU9wdGlvbnMgfSBmcm9tICcuLi90ZXN0LXJ1bi9jb21tYW5kcy9vcHRpb25zJztcbmltcG9ydCB7IENvb2tpZVByb3ZpZGVyLCBDb29raWVQcm92aWRlckJhc2UgfSBmcm9tICcuLi90ZXN0LXJ1bi9jb29raWVzL2Jhc2UnO1xuaW1wb3J0IENvb2tpZVBhcmFtID0gUHJvdG9jb2wuTmV0d29yay5Db29raWVQYXJhbTtcbmltcG9ydCBtYXRjaENvbGxlY3Rpb24gZnJvbSAnLi4vdXRpbHMvbWF0Y2gtY29sbGVjdGlvbic7XG5pbXBvcnQgeyBnZXRBY3RpdmVDbGllbnQgfSBmcm9tICcuL3V0aWxzL2dldC1hY3RpdmUtY2xpZW50JztcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSAnc2V0LWNvb2tpZS1wYXJzZXInO1xuaW1wb3J0IHsgY2FzdEFycmF5IH0gZnJvbSAnbG9kYXNoJztcblxuZGVjbGFyZSB0eXBlIENvb2tpZVNhbWVTaXRlID0gJ0xheCcgfCAnU3RyaWN0JyB8ICdOb25lJztcblxuY29uc3QgTUFYX1RJTUVTVEFNUCA9IDg2NDAwMDAwMDAwMDAwMDA7XG5cbmV4cG9ydCBjbGFzcyBDZHBDb29raWVQcm92aWRlciBleHRlbmRzIENvb2tpZVByb3ZpZGVyQmFzZSBpbXBsZW1lbnRzIENvb2tpZVByb3ZpZGVyIHtcbiAgICBwcml2YXRlIGFzeW5jIF9nZXRDZHBDbGllbnQgKCk6IFByb21pc2U8cmVtb3RlQ2hyb21lLlByb3RvY29sQXBpPiB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJDb25uZWN0aW9uID0gdGhpcy50ZXN0UnVuLmJyb3dzZXJDb25uZWN0aW9uO1xuXG4gICAgICAgIHJldHVybiBnZXRBY3RpdmVDbGllbnQoYnJvd3NlckNvbm5lY3Rpb24pO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRpYWxpemUgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVDb29raWVzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29va2llcyAoZXh0ZXJuYWxDb29raWVzOiBFeHRlcm5hbENvb2tpZXNbXSk6IFByb21pc2U8RXh0ZXJuYWxDb29raWVzW10+IHtcbiAgICAgICAgY29uc3QgY2xpZW50ICAgICAgPSBhd2FpdCB0aGlzLl9nZXRDZHBDbGllbnQoKTtcbiAgICAgICAgY29uc3QgeyBjb29raWVzIH0gPSBhd2FpdCBjbGllbnQuU3RvcmFnZS5nZXRDb29raWVzKHt9KTtcblxuICAgICAgICByZXR1cm4gKG1hdGNoQ29sbGVjdGlvbihjb29raWVzLCBleHRlcm5hbENvb2tpZXMpIGFzIENvb2tpZVtdKS5tYXAodGhpcy5fY2RwQ29va2llVG9FeHRlcm5hbENvb2tpZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0Q29va2llcyAoY29va2llczogc3RyaW5nIHwgc3RyaW5nW10gfCBDb29raWVPcHRpb25zW10sIHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGF3YWl0IHRoaXMuX2dldENkcENsaWVudCgpO1xuICAgICAgICBjb25zdCB7IGhvc3RuYW1lID0gJycsIHBhdGhuYW1lID0gJy8nIH0gPSB1cmwgPyBuZXcgVVJMKHVybCkgOiB7fTtcbiAgICAgICAgY29uc3QgY29va2llc0FycmF5ICAgICAgICAgICAgICAgICAgICAgID0gY2FzdEFycmF5PHN0cmluZyB8IENvb2tpZU9wdGlvbnM+KGNvb2tpZXMpO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlZENvb2tpZXMgPSB0aGlzLl9pc0Nvb2tpZU9wdGlvbnNBcnJheShjb29raWVzQXJyYXkpXG4gICAgICAgICAgICA/IGNvb2tpZXNBcnJheVxuICAgICAgICAgICAgOiB0aGlzLl9wYXJzZVNldENvb2tpZVN0cmluZ3MoY29va2llc0FycmF5IGFzIHN0cmluZ1tdKTtcblxuICAgICAgICBhd2FpdCBjbGllbnQuTmV0d29yay5zZXRDb29raWVzKHtcbiAgICAgICAgICAgIGNvb2tpZXM6IHBhcnNlZENvb2tpZXMubWFwKGNvb2tpZSA9PiB0aGlzLl9jb29raWVPcHRpb25Ub0NkcENvb2tpZVBhcmFtKGNvb2tpZSwgaG9zdG5hbWUsIHBhdGhuYW1lKSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGRlbGV0ZUNvb2tpZXMgKGNvb2tpZXM6IENvb2tpZU9wdGlvbnNbXSA9IFtdLCB1cmxzOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuX2dldENkcENsaWVudCgpO1xuXG4gICAgICAgIGlmICghY29va2llcyB8fCAhY29va2llcy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gY2xpZW50Lk5ldHdvcmsuY2xlYXJCcm93c2VyQ29va2llcygpO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlZFVybHMgICAgPSB0aGlzLl9wYXJzZVVybHModXJscyk7XG4gICAgICAgIGxldCBleGlzdGluZ0Nvb2tpZXMgPSBhd2FpdCB0aGlzLmdldENvb2tpZXMoW10pO1xuXG4gICAgICAgIGlmIChwYXJzZWRVcmxzLmxlbmd0aCkge1xuICAgICAgICAgICAgZXhpc3RpbmdDb29raWVzID0gZXhpc3RpbmdDb29raWVzLmZpbHRlcihjb29raWUgPT4gcGFyc2VkVXJsc1xuICAgICAgICAgICAgICAgIC5maW5kKHVybCA9PiB1cmwuZG9tYWluID09PSBjb29raWUuZG9tYWluICYmIHVybC5wYXRoID09PSBjb29raWUucGF0aCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhpc3RpbmdDb29raWVzID0gbWF0Y2hDb2xsZWN0aW9uKGV4aXN0aW5nQ29va2llcywgY29va2llcykgYXMgRXh0ZXJuYWxDb29raWVzW107XG5cbiAgICAgICAgZm9yIChjb25zdCBjb29raWUgb2YgZXhpc3RpbmdDb29raWVzKSB7XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuTmV0d29yay5kZWxldGVDb29raWVzKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAgIGNvb2tpZS5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgIGRvbWFpbjogY29va2llLmRvbWFpbixcbiAgICAgICAgICAgICAgICBwYXRoOiAgIGNvb2tpZS5wYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cblxuICAgIGFzeW5jIGdldENvb2tpZUhlYWRlciAodXJsOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgY29uc3QgW3sgZG9tYWluLCBwYXRoIH1dID0gdGhpcy5fcGFyc2VVcmxzKFt1cmxdKTtcbiAgICAgICAgY29uc3QgY29va2llcyAgICAgICAgICAgID0gYXdhaXQgdGhpcy5nZXRDb29raWVzKFt7IGRvbWFpbiB9XSk7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQ29va2llcyAgICA9IGNvb2tpZXMuZmlsdGVyKGMgPT4gdGhpcy5faW5jbHVkZXNQYXRoKGMucGF0aCB8fCAnLycsIHBhdGgpKTtcblxuICAgICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzLm1hcChjID0+IGAkeyBjLm5hbWUgfT0keyBjLnZhbHVlIH1gKS5qb2luKCc7Jyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2RwQ29va2llVG9FeHRlcm5hbENvb2tpZSAoY29va2llOiBDb29raWUpOiBFeHRlcm5hbENvb2tpZXMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogICAgIGNvb2tpZS5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6ICAgIGNvb2tpZS52YWx1ZSxcbiAgICAgICAgICAgIGRvbWFpbjogICBjb29raWUuZG9tYWluLFxuICAgICAgICAgICAgbWF4QWdlOiAgIHZvaWQgMCxcbiAgICAgICAgICAgIHBhdGg6ICAgICBjb29raWUucGF0aCxcbiAgICAgICAgICAgIGV4cGlyZXM6ICB2b2lkIDAsXG4gICAgICAgICAgICBzZWN1cmU6ICAgY29va2llLnNlY3VyZSxcbiAgICAgICAgICAgIGh0dHBPbmx5OiBjb29raWUuaHR0cE9ubHksXG4gICAgICAgICAgICBzYW1lU2l0ZTogY29va2llLnNhbWVTaXRlID8/ICdub25lJyxcbiAgICAgICAgfSBhcyB1bmtub3duIGFzIEV4dGVybmFsQ29va2llcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb29raWVPcHRpb25Ub0NkcENvb2tpZVBhcmFtIChjb29raWU6IENvb2tpZU9wdGlvbnMsIGhvc3RuYW1lOiBzdHJpbmcsIHBhdGhuYW1lOiBzdHJpbmcpOiBDb29raWVQYXJhbSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiAgICAgY29va2llLm5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogICAgY29va2llLnZhbHVlLFxuICAgICAgICAgICAgZG9tYWluOiAgIGNvb2tpZS5kb21haW4gPz8gaG9zdG5hbWUsXG4gICAgICAgICAgICBwYXRoOiAgICAgY29va2llLnBhdGggPz8gcGF0aG5hbWUsXG4gICAgICAgICAgICBzZWN1cmU6ICAgY29va2llLnNlY3VyZSxcbiAgICAgICAgICAgIGh0dHBPbmx5OiBmYWxzZSxcbiAgICAgICAgICAgIHNhbWVTaXRlOiBjb29raWUuc2FtZVNpdGUgYXMgQ29va2llU2FtZVNpdGUsXG4gICAgICAgICAgICBleHBpcmVzOiAgY29va2llLmV4cGlyZXM/LmdldFRpbWUoKSB8fCBNQVhfVElNRVNUQU1QLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcnNlVXJscyAodXJsczogc3RyaW5nW10pOiB7IGRvbWFpbjogc3RyaW5nLCBwYXRoOiBzdHJpbmcgfVtdIHtcbiAgICAgICAgcmV0dXJuIHVybHMubWFwKHVybCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGhvc3RuYW1lLCBwYXRobmFtZSB9ID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgICAgICAgICByZXR1cm4geyBkb21haW46IGhvc3RuYW1lLCBwYXRoOiBwYXRobmFtZSB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbmNsdWRlc1BhdGggKGNvb2tpZVBhdGg6IHN0cmluZywgdXJsUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChjb29raWVQYXRoID09PSAnLycpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjb25zdCBjb29raWVQYXJ0cyA9IGNvb2tpZVBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgY29uc3QgdXJsUGFydHMgICAgPSB1cmxQYXRoLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgaWYgKGNvb2tpZVBhcnRzLmxlbmd0aCA+IHVybFBhcnRzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoY29va2llUGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoY29va2llUGFydHMuc2hpZnQoKSAhPT0gdXJsUGFydHMuc2hpZnQoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYXJzZVNldENvb2tpZVN0cmluZ3MgKGNvb2tpZXM6IHN0cmluZ1tdKTogQ29va2llT3B0aW9uc1tdIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlKGNvb2tpZXMpIGFzIENvb2tpZU9wdGlvbnNbXTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const EMPTY_PAGE_MARKUP = `
4
+ <html>
5
+ <head></head>
6
+ <body></body>
7
+ </html>
8
+ `;
9
+ exports.default = EMPTY_PAGE_MARKUP;
10
+ module.exports = exports.default;
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktcGFnZS1tYXJrdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vZW1wdHktcGFnZS1tYXJrdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNLGlCQUFpQixHQUFHOzs7OztDQUt6QixDQUFDO0FBRUYsa0JBQWUsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBFTVBUWV9QQUdFX01BUktVUCA9IGBcbjxodG1sPlxuICAgIDxoZWFkPjwvaGVhZD5cbiAgICA8Ym9keT48L2JvZHk+XG48L2h0bWw+XG5gO1xuXG5leHBvcnQgZGVmYXVsdCBFTVBUWV9QQUdFX01BUktVUDtcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const testcafe_hammerhead_1 = require("testcafe-hammerhead");
4
+ const ERROR_ROUTE = '/' + testcafe_hammerhead_1.SPECIAL_ERROR_PAGE;
5
+ exports.default = ERROR_ROUTE;
6
+ module.exports = exports.default;
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3Itcm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vZXJyb3Itcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2REFBeUQ7QUFFekQsTUFBTSxXQUFXLEdBQUcsR0FBRyxHQUFHLHdDQUFrQixDQUFDO0FBRTdDLGtCQUFlLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNQRUNJQUxfRVJST1JfUEFHRSB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuXG5jb25zdCBFUlJPUl9ST1VURSA9ICcvJyArIFNQRUNJQUxfRVJST1JfUEFHRTtcblxuZXhwb3J0IGRlZmF1bHQgRVJST1JfUk9VVEU7XG4iXX0=
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unknownCDPEventType = exports.sslCertificateError = exports.failedToFindDNSError = exports.notImplementedError = void 0;
4
+ function notImplementedError() {
5
+ return new Error('Not implemented');
6
+ }
7
+ exports.notImplementedError = notImplementedError;
8
+ function failedToFindDNSError(url) {
9
+ return new Error(`Failed to find a DNS-record for the resource at "${url}"`);
10
+ }
11
+ exports.failedToFindDNSError = failedToFindDNSError;
12
+ function sslCertificateError(type) {
13
+ return new Error(`SSL certificate error (${type})`);
14
+ }
15
+ exports.sslCertificateError = sslCertificateError;
16
+ function unknownCDPEventType(type) {
17
+ return new Error(`Unknown CDP event type: ${type}`);
18
+ }
19
+ exports.unknownCDPEventType = unknownCDPEventType;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25hdGl2ZS1hdXRvbWF0aW9uL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFnQixtQkFBbUI7SUFDL0IsT0FBTyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFGRCxrREFFQztBQUVELFNBQWdCLG9CQUFvQixDQUFFLEdBQVc7SUFDN0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxvREFBb0QsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRkQsb0RBRUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBRSxJQUFZO0lBQzdDLE9BQU8sSUFBSSxLQUFLLENBQUMsMEJBQTBCLElBQUksR0FBRyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUZELGtEQUVDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUUsSUFBWTtJQUM3QyxPQUFPLElBQUksS0FBSyxDQUFDLDJCQUEyQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFGRCxrREFFQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBub3RJbXBsZW1lbnRlZEVycm9yICgpOiBFcnJvciB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWlsZWRUb0ZpbmRETlNFcnJvciAodXJsOiBzdHJpbmcpOiBFcnJvciB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihgRmFpbGVkIHRvIGZpbmQgYSBETlMtcmVjb3JkIGZvciB0aGUgcmVzb3VyY2UgYXQgXCIke3VybH1cImApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3NsQ2VydGlmaWNhdGVFcnJvciAodHlwZTogc3RyaW5nKTogRXJyb3Ige1xuICAgIHJldHVybiBuZXcgRXJyb3IoYFNTTCBjZXJ0aWZpY2F0ZSBlcnJvciAoJHt0eXBlfSlgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVua25vd25DRFBFdmVudFR5cGUgKHR5cGU6IHN0cmluZyk6IEVycm9yIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKGBVbmtub3duIENEUCBldmVudCB0eXBlOiAke3R5cGV9YCk7XG59XG5cbiJdfQ==
@@ -0,0 +1,53 @@
1
+ "use strict";
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
+ const request_pipeline_1 = __importDefault(require("./request-pipeline"));
7
+ const add_custom_debug_formatters_1 = __importDefault(require("./add-custom-debug-formatters"));
8
+ const debug_loggers_1 = require("../utils/debug-loggers");
9
+ const session_storage_1 = __importDefault(require("./session-storage"));
10
+ class NativeAutomation {
11
+ constructor(browserId, client, options) {
12
+ this._client = client;
13
+ this.options = options;
14
+ this.requestPipeline = new request_pipeline_1.default(browserId, client, options);
15
+ this.sessionStorage = new session_storage_1.default(browserId, client, options);
16
+ (0, add_custom_debug_formatters_1.default)();
17
+ }
18
+ _onContextStorageSynHandler({ sessionStorage, testRunId, frameDriverId }) {
19
+ if (sessionStorage) {
20
+ this.requestPipeline.contextStorage = this.requestPipeline.contextStorage || {};
21
+ this.requestPipeline.contextStorage[testRunId] = this.requestPipeline.contextStorage[testRunId] || {};
22
+ this.requestPipeline.contextStorage[testRunId][frameDriverId] = sessionStorage;
23
+ }
24
+ }
25
+ _onContextStorageTestRunDoneHandler({ testRunId }) {
26
+ if (this.requestPipeline.contextStorage)
27
+ delete this.requestPipeline.contextStorage[testRunId];
28
+ }
29
+ _addEventListeners() {
30
+ this.sessionStorage.on('contextStorageSync', this._onContextStorageSynHandler.bind(this));
31
+ this.sessionStorage.on('contextStorageTestRunDone', this._onContextStorageTestRunDoneHandler.bind(this));
32
+ }
33
+ async start() {
34
+ for (const apiSystem of this.apiSystems)
35
+ await apiSystem.start();
36
+ this._addEventListeners();
37
+ (0, debug_loggers_1.nativeAutomationLogger)('nativeAutomation initialized');
38
+ }
39
+ async dispose() {
40
+ this.requestPipeline.stop();
41
+ await this.requestPipeline.dispose();
42
+ (0, debug_loggers_1.nativeAutomationLogger)('nativeAutomation disposed');
43
+ }
44
+ get apiSystems() {
45
+ return [
46
+ this.requestPipeline,
47
+ this.sessionStorage,
48
+ ];
49
+ }
50
+ }
51
+ exports.default = NativeAutomation;
52
+ module.exports = exports.default;
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSwwRUFBaUU7QUFDakUsZ0dBQXFFO0FBRXJFLDBEQUFnRTtBQUNoRSx3RUFBK0M7QUFHL0MsTUFBcUIsZ0JBQWdCO0lBTWpDLFlBQW9CLFNBQWlCLEVBQUUsTUFBbUIsRUFBRSxPQUFvQztRQUM1RixJQUFJLENBQUMsT0FBTyxHQUFXLE1BQU0sQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFXLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksMEJBQStCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsY0FBYyxHQUFJLElBQUkseUJBQWMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXRFLElBQUEscUNBQXdCLEdBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU8sMkJBQTJCLENBQUUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBTztRQUNsRixJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsR0FBNkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1lBQzFHLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFrQixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsY0FBYyxDQUFDO1NBQ2xGO0lBQ0wsQ0FBQztJQUVPLG1DQUFtQyxDQUFFLEVBQUUsU0FBUyxFQUFPO1FBQzNELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjO1lBQ25DLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNkLEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVU7WUFDbkMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBQSxzQ0FBc0IsRUFBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTVCLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVyQyxJQUFBLHNDQUFzQixFQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPO1lBQ0gsSUFBSSxDQUFDLGVBQWU7WUFDcEIsSUFBSSxDQUFDLGNBQWM7U0FDdEIsQ0FBQztJQUNOLENBQUM7Q0FDSjtBQXhERCxtQ0F3REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm90b2NvbEFwaSB9IGZyb20gJ2Nocm9tZS1yZW1vdGUtaW50ZXJmYWNlJztcbmltcG9ydCBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdFBpcGVsaW5lIGZyb20gJy4vcmVxdWVzdC1waXBlbGluZSc7XG5pbXBvcnQgYWRkQ3VzdG9tRGVidWdGb3JtYXR0ZXJzIGZyb20gJy4vYWRkLWN1c3RvbS1kZWJ1Zy1mb3JtYXR0ZXJzJztcbmltcG9ydCB7IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBuYXRpdmVBdXRvbWF0aW9uTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvZGVidWctbG9nZ2Vycyc7XG5pbXBvcnQgU2Vzc2lvblN0b3JhZ2UgZnJvbSAnLi9zZXNzaW9uLXN0b3JhZ2UnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25BcGlCYXNlIGZyb20gJy4vYXBpLWJhc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXRpdmVBdXRvbWF0aW9uIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnQ6IFByb3RvY29sQXBpO1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1ZXN0UGlwZWxpbmU7XG4gICAgcHVibGljIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoYnJvd3NlcklkOiBzdHJpbmcsIGNsaWVudDogUHJvdG9jb2xBcGksIG9wdGlvbnM6IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucykge1xuICAgICAgICB0aGlzLl9jbGllbnQgICAgICAgICA9IGNsaWVudDtcbiAgICAgICAgdGhpcy5vcHRpb25zICAgICAgICAgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnJlcXVlc3RQaXBlbGluZSA9IG5ldyBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdFBpcGVsaW5lKGJyb3dzZXJJZCwgY2xpZW50LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZSAgPSBuZXcgU2Vzc2lvblN0b3JhZ2UoYnJvd3NlcklkLCBjbGllbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGFkZEN1c3RvbURlYnVnRm9ybWF0dGVycygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX29uQ29udGV4dFN0b3JhZ2VTeW5IYW5kbGVyICh7IHNlc3Npb25TdG9yYWdlLCB0ZXN0UnVuSWQsIGZyYW1lRHJpdmVySWQgfTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZSkge1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UGlwZWxpbmUuY29udGV4dFN0b3JhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHRoaXMucmVxdWVzdFBpcGVsaW5lLmNvbnRleHRTdG9yYWdlIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UGlwZWxpbmUuY29udGV4dFN0b3JhZ2VbdGVzdFJ1bklkXSAgICAgICAgICAgICAgICA9IHRoaXMucmVxdWVzdFBpcGVsaW5lLmNvbnRleHRTdG9yYWdlW3Rlc3RSdW5JZF0gfHwge307XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RQaXBlbGluZS5jb250ZXh0U3RvcmFnZVt0ZXN0UnVuSWRdW2ZyYW1lRHJpdmVySWRdID0gc2Vzc2lvblN0b3JhZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9vbkNvbnRleHRTdG9yYWdlVGVzdFJ1bkRvbmVIYW5kbGVyICh7IHRlc3RSdW5JZCB9OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdFBpcGVsaW5lLmNvbnRleHRTdG9yYWdlKVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVxdWVzdFBpcGVsaW5lLmNvbnRleHRTdG9yYWdlW3Rlc3RSdW5JZF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYWRkRXZlbnRMaXN0ZW5lcnMgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlLm9uKCdjb250ZXh0U3RvcmFnZVN5bmMnLCB0aGlzLl9vbkNvbnRleHRTdG9yYWdlU3luSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5vbignY29udGV4dFN0b3JhZ2VUZXN0UnVuRG9uZScsIHRoaXMuX29uQ29udGV4dFN0b3JhZ2VUZXN0UnVuRG9uZUhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBhcGlTeXN0ZW0gb2YgdGhpcy5hcGlTeXN0ZW1zKVxuICAgICAgICAgICAgYXdhaXQgYXBpU3lzdGVtLnN0YXJ0KCk7XG5cbiAgICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgICAgICBuYXRpdmVBdXRvbWF0aW9uTG9nZ2VyKCduYXRpdmVBdXRvbWF0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRpc3Bvc2UgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnJlcXVlc3RQaXBlbGluZS5zdG9wKCk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0UGlwZWxpbmUuZGlzcG9zZSgpO1xuXG4gICAgICAgIG5hdGl2ZUF1dG9tYXRpb25Mb2dnZXIoJ25hdGl2ZUF1dG9tYXRpb24gZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwaVN5c3RlbXMgKCk6IE5hdGl2ZUF1dG9tYXRpb25BcGlCYXNlIFtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFBpcGVsaW5lLFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZSxcbiAgICAgICAgXTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const testcafe_hammerhead_1 = require("testcafe-hammerhead");
4
+ const cdp_1 = require("../../utils/cdp");
5
+ class FrameNavigatedEventBasedEventFactory extends testcafe_hammerhead_1.BaseRequestHookEventFactory {
6
+ constructor(event, sessionId) {
7
+ super();
8
+ this._event = event;
9
+ this._sessionId = sessionId;
10
+ }
11
+ createRequestInfo() {
12
+ // NOTE: We can't get some request information from the FrameNavigated event.
13
+ // So, we initialize the RequestInfo object with empty or default values.
14
+ return new testcafe_hammerhead_1.RequestInfo({
15
+ requestId: (0, cdp_1.getRequestId)(this._event),
16
+ sessionId: this._sessionId,
17
+ userAgent: '',
18
+ url: this._event.frame.url,
19
+ method: '',
20
+ headers: {},
21
+ body: Buffer.alloc(0),
22
+ isAjax: false,
23
+ });
24
+ }
25
+ createConfigureResponseEvent(rule) {
26
+ // NOTE: Used as a stub
27
+ return new testcafe_hammerhead_1.ConfigureResponseEvent(rule, {});
28
+ }
29
+ createRequestOptions() {
30
+ // NOTE: Used as a stub
31
+ return {};
32
+ }
33
+ createResponseInfo() {
34
+ // NOTE: Used as a stub
35
+ return {};
36
+ }
37
+ }
38
+ exports.default = FrameNavigatedEventBasedEventFactory;
39
+ module.exports = exports.default;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtbmF2aWdhdGVkLWV2ZW50LWJhc2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25hdGl2ZS1hdXRvbWF0aW9uL3JlcXVlc3QtaG9va3MvZXZlbnQtZmFjdG9yeS9mcmFtZS1uYXZpZ2F0ZWQtZXZlbnQtYmFzZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2REFRNkI7QUFHN0IseUNBQStDO0FBRS9DLE1BQXFCLG9DQUFxQyxTQUFRLGlEQUEyQjtJQUd6RixZQUFvQixLQUEwQixFQUFFLFNBQWlCO1FBQzdELEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLE1BQU0sR0FBTyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVNLGlCQUFpQjtRQUNwQiw2RUFBNkU7UUFDN0UseUVBQXlFO1FBQ3pFLE9BQU8sSUFBSSxpQ0FBVyxDQUFDO1lBQ25CLFNBQVMsRUFBRSxJQUFBLGtCQUFZLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDMUIsU0FBUyxFQUFFLEVBQUU7WUFDYixHQUFHLEVBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRztZQUNoQyxNQUFNLEVBQUssRUFBRTtZQUNiLE9BQU8sRUFBSSxFQUFFO1lBQ2IsSUFBSSxFQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sRUFBSyxLQUFLO1NBQ25CLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSw0QkFBNEIsQ0FBRSxJQUF1QjtRQUN4RCx1QkFBdUI7UUFDdkIsT0FBTyxJQUFJLDRDQUFzQixDQUFDLElBQUksRUFBRSxFQUE2QixDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVNLG9CQUFvQjtRQUN2Qix1QkFBdUI7UUFDdkIsT0FBTyxFQUFvQixDQUFDO0lBQ2hDLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsdUJBQXVCO1FBQ3ZCLE9BQU8sRUFBa0IsQ0FBQztJQUM5QixDQUFDO0NBQ0o7QUF2Q0QsdURBdUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3RvcnksXG4gICAgQ29uZmlndXJlUmVzcG9uc2VFdmVudCxcbiAgICBNb2RpZnlSZXNwb25zZUZ1bmN0aW9ucyxcbiAgICBSZXF1ZXN0RmlsdGVyUnVsZSxcbiAgICBSZXF1ZXN0SW5mbyxcbiAgICBSZXF1ZXN0T3B0aW9ucyxcbiAgICBSZXNwb25zZUluZm8sXG59IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBGcmFtZU5hdmlnYXRlZEV2ZW50ID0gUHJvdG9jb2wuUGFnZS5GcmFtZU5hdmlnYXRlZEV2ZW50O1xuaW1wb3J0IHsgZ2V0UmVxdWVzdElkIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2RwJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJhbWVOYXZpZ2F0ZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5IGV4dGVuZHMgQmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudDogRnJhbWVOYXZpZ2F0ZWRFdmVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGV2ZW50OiBGcmFtZU5hdmlnYXRlZEV2ZW50LCBzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuX2V2ZW50ICAgICA9IGV2ZW50O1xuICAgICAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVJlcXVlc3RJbmZvICgpOiBSZXF1ZXN0SW5mbyB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGNhbid0IGdldCBzb21lIHJlcXVlc3QgaW5mb3JtYXRpb24gZnJvbSB0aGUgRnJhbWVOYXZpZ2F0ZWQgZXZlbnQuXG4gICAgICAgIC8vIFNvLCB3ZSBpbml0aWFsaXplIHRoZSBSZXF1ZXN0SW5mbyBvYmplY3Qgd2l0aCBlbXB0eSBvciBkZWZhdWx0IHZhbHVlcy5cbiAgICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0SW5mbyh7XG4gICAgICAgICAgICByZXF1ZXN0SWQ6IGdldFJlcXVlc3RJZCh0aGlzLl9ldmVudCksXG4gICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuX3Nlc3Npb25JZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogJycsXG4gICAgICAgICAgICB1cmw6ICAgICAgIHRoaXMuX2V2ZW50LmZyYW1lLnVybCxcbiAgICAgICAgICAgIG1ldGhvZDogICAgJycsXG4gICAgICAgICAgICBoZWFkZXJzOiAgIHt9LFxuICAgICAgICAgICAgYm9keTogICAgICBCdWZmZXIuYWxsb2MoMCksXG4gICAgICAgICAgICBpc0FqYXg6ICAgIGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlQ29uZmlndXJlUmVzcG9uc2VFdmVudCAocnVsZTogUmVxdWVzdEZpbHRlclJ1bGUpOiBDb25maWd1cmVSZXNwb25zZUV2ZW50IHtcbiAgICAgICAgLy8gTk9URTogVXNlZCBhcyBhIHN0dWJcbiAgICAgICAgcmV0dXJuIG5ldyBDb25maWd1cmVSZXNwb25zZUV2ZW50KHJ1bGUsIHt9IGFzIE1vZGlmeVJlc3BvbnNlRnVuY3Rpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUmVxdWVzdE9wdGlvbnMgKCk6IFJlcXVlc3RPcHRpb25zIHtcbiAgICAgICAgLy8gTk9URTogVXNlZCBhcyBhIHN0dWJcbiAgICAgICAgcmV0dXJuIHt9IGFzIFJlcXVlc3RPcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVSZXNwb25zZUluZm8gKCk6IFJlc3BvbnNlSW5mbyB7XG4gICAgICAgIC8vIE5PVEU6IFVzZWQgYXMgYSBzdHViXG4gICAgICAgIHJldHVybiB7fSBhcyBSZXNwb25zZUluZm87XG4gICAgfVxufVxuIl19
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const testcafe_hammerhead_1 = require("testcafe-hammerhead");
4
+ const lodash_1 = require("lodash");
5
+ const http_status_codes_1 = require("http-status-codes");
6
+ const headers_1 = require("../../utils/headers");
7
+ class RequestPausedEventBasedEventFactory extends testcafe_hammerhead_1.BaseRequestHookEventFactory {
8
+ constructor(event, sessionId) {
9
+ super();
10
+ this._event = event;
11
+ this._responseBody = Buffer.alloc(0);
12
+ this._sessionId = sessionId;
13
+ this._modifyResponseFunction = this._createModifyResponseFunctions();
14
+ this.headersModified = false;
15
+ }
16
+ _createModifyResponseFunctions() {
17
+ return {
18
+ setHeader: (name, value) => {
19
+ const header = this._event.responseHeaders.find(h => h.name.toLowerCase() === name.toLowerCase());
20
+ if (!header)
21
+ this._event.responseHeaders.push({ name, value });
22
+ else
23
+ header.value = value;
24
+ this.headersModified = true;
25
+ },
26
+ removeHeader: (name) => {
27
+ (0, lodash_1.remove)(this._event.responseHeaders, header => header.name.toLowerCase() === name.toLowerCase());
28
+ this.headersModified = true;
29
+ },
30
+ };
31
+ }
32
+ static _getRequestData(request) {
33
+ if (request.postData)
34
+ return Buffer.from(request.postData);
35
+ return Buffer.alloc(0);
36
+ }
37
+ static _getIsAjaxRequest(event) {
38
+ return event.resourceType === 'XHR'
39
+ || event.resourceType === 'Fetch';
40
+ }
41
+ update(event) {
42
+ this._event = event;
43
+ }
44
+ setResponseBody(body) {
45
+ this._responseBody = body;
46
+ }
47
+ createRequestInfo() {
48
+ const { requestId, request } = this._event;
49
+ return new testcafe_hammerhead_1.RequestInfo({
50
+ requestId,
51
+ sessionId: this._sessionId,
52
+ userAgent: testcafe_hammerhead_1.RequestInfo.getUserAgent(request.headers),
53
+ url: request.url,
54
+ method: request.method.toLowerCase(),
55
+ headers: (0, headers_1.lowerCaseHeaderNames)(request.headers),
56
+ body: RequestPausedEventBasedEventFactory._getRequestData(request),
57
+ isAjax: RequestPausedEventBasedEventFactory._getIsAjaxRequest(this._event),
58
+ });
59
+ }
60
+ createRequestOptions() {
61
+ const parsedUrl = new URL(this._event.request.url);
62
+ const requestParams = {
63
+ method: this._event.request.method,
64
+ url: this._event.request.url,
65
+ protocol: parsedUrl.protocol,
66
+ hostname: parsedUrl.hostname,
67
+ host: parsedUrl.host,
68
+ port: parsedUrl.port,
69
+ path: parsedUrl.pathname,
70
+ headers: this._event.request.headers,
71
+ body: RequestPausedEventBasedEventFactory._getRequestData(this._event.request),
72
+ isAjax: RequestPausedEventBasedEventFactory._getIsAjaxRequest(this._event),
73
+ };
74
+ if (parsedUrl.username)
75
+ requestParams.auth = parsedUrl.username + ':' + parsedUrl.password;
76
+ return new testcafe_hammerhead_1.RequestOptions(requestParams);
77
+ }
78
+ createConfigureResponseEvent(rule) {
79
+ return new testcafe_hammerhead_1.ConfigureResponseEvent(rule, this._modifyResponseFunction);
80
+ }
81
+ createResponseInfo() {
82
+ return new testcafe_hammerhead_1.ResponseInfo({
83
+ statusCode: this._event.responseStatusCode || http_status_codes_1.StatusCodes.OK,
84
+ headers: (0, headers_1.convertToOutgoingHttpHeaders)(this._event.responseHeaders),
85
+ body: this._responseBody,
86
+ sessionId: '',
87
+ requestId: this._event.requestId,
88
+ isSameOriginPolicyFailed: false,
89
+ });
90
+ }
91
+ }
92
+ exports.default = RequestPausedEventBasedEventFactory;
93
+ module.exports = exports.default;
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1ob29rcy9ldmVudC1mYWN0b3J5L3JlcXVlc3QtcGF1c2VkLWV2ZW50LWJhc2VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkRBUzZCO0FBQzdCLG1DQUFnQztBQUtoQyx5REFBZ0Q7QUFDaEQsaURBQXlGO0FBR3pGLE1BQXFCLG1DQUFvQyxTQUFRLGlEQUEyQjtJQU94RixZQUFvQixLQUF5QixFQUFFLFNBQWlCO1FBQzVELEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLE1BQU0sR0FBb0IsS0FBSyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFnQixTQUFTLENBQUM7UUFDekMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxlQUFlLEdBQVcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFTyw4QkFBOEI7UUFDbEMsT0FBTztZQUNILFNBQVMsRUFBRSxDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsRUFBRTtnQkFDdkMsTUFBTSxNQUFNLEdBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFpQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBRXJILElBQUksQ0FBQyxNQUFNO29CQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBaUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzs7b0JBRXJFLE1BQU0s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SUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFFdkUsT0FBTyxJQUFJLG9DQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLDRCQUE0QixDQUFFLElBQXVCO1FBQ3hELE9BQU8sSUFBSSw0Q0FBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixPQUFPLElBQUksa0NBQVksQ0FBQztZQUNwQixVQUFVLEVBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLElBQUksK0JBQVcsQ0FBQyxFQUFFO1lBQzFFLE9BQU8sRUFBbUIsSUFBQSxzQ0FBNEIsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNuRixJQUFJLEVBQXNCLElBQUksQ0FBQyxhQUFhO1lBQzVDLFNBQVMsRUFBaUIsRUFBRTtZQUM1QixTQUFTLEVBQWlCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztZQUMvQyx3QkFBd0IsRUFBRSxLQUFLO1NBQ2xDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQTVHRCxzREE0R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEJhc2VSZXF1ZXN0SG9va0V2ZW50RmFjdG9yeSxcbiAgICBDb25maWd1cmVSZXNwb25zZUV2ZW50LFxuICAgIE1vZGlmeVJlc3BvbnNlRnVuY3Rpb25zLFxuICAgIFJlcXVlc3RGaWx0ZXJSdWxlLFxuICAgIFJlcXVlc3RJbmZvLFxuICAgIFJlcXVlc3RPcHRpb25zLFxuICAgIFJlcXVlc3RPcHRpb25zUGFyYW1zLFxuICAgIFJlc3BvbnNlSW5mbyxcbn0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgeyByZW1vdmUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgUmVxdWVzdCA9IFByb3RvY29sLk5ldHdvcmsuUmVxdWVzdDtcbmltcG9ydCBIZWFkZXJFbnRyeSA9IFByb3RvY29sLkZldGNoLkhlYWRlckVudHJ5O1xuaW1wb3J0IHsgU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XG5pbXBvcnQgeyBjb252ZXJ0VG9PdXRnb2luZ0h0dHBIZWFkZXJzLCBsb3dlckNhc2VIZWFkZXJOYW1lcyB9IGZyb20gJy4uLy4uL3V0aWxzL2hlYWRlcnMnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5IGV4dGVuZHMgQmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5IHtcbiAgICBwcml2YXRlIF9ldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50O1xuICAgIHByaXZhdGUgX3Jlc3BvbnNlQm9keTogQnVmZmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vZGlmeVJlc3BvbnNlRnVuY3Rpb246IE1vZGlmeVJlc3BvbnNlRnVuY3Rpb25zO1xuICAgIHB1YmxpYyBoZWFkZXJzTW9kaWZpZWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fZXZlbnQgICAgICAgICAgICAgICAgICA9IGV2ZW50O1xuICAgICAgICB0aGlzLl9yZXNwb25zZUJvZHkgICAgICAgICAgID0gQnVmZmVyLmFsbG9jKDApO1xuICAgICAgICB0aGlzLl9zZXNzaW9uSWQgICAgICAgICAgICAgID0gc2Vzc2lvbklkO1xuICAgICAgICB0aGlzLl9tb2RpZnlSZXNwb25zZUZ1bmN0aW9uID0gdGhpcy5fY3JlYXRlTW9kaWZ5UmVzcG9uc2VGdW5jdGlvbnMoKTtcbiAgICAgICAgdGhpcy5oZWFkZXJzTW9kaWZpZWQgICAgICAgICA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZU1vZGlmeVJlc3BvbnNlRnVuY3Rpb25zICgpOiBNb2RpZnlSZXNwb25zZUZ1bmN0aW9ucyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZXRIZWFkZXI6IChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSAodGhpcy5fZXZlbnQucmVzcG9uc2VIZWFkZXJzIGFzIEhlYWRlckVudHJ5W10pLmZpbmQoaCA9PiBoLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICAgIGlmICghaGVhZGVyKVxuICAgICAgICAgICAgICAgICAgICAodGhpcy5fZXZlbnQucmVzcG9uc2VIZWFkZXJzIGFzIEhlYWRlckVudHJ5W10pLnB1c2goeyBuYW1lLCB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZUhlYWRlcjogKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHJlbW92ZSh0aGlzLl9ldmVudC5yZXNwb25zZUhlYWRlcnMgYXMgSGVhZGVyRW50cnlbXSwgaGVhZGVyID0+IGhlYWRlci5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlcnNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZXRSZXF1ZXN0RGF0YSAocmVxdWVzdDogUmVxdWVzdCk6IEJ1ZmZlciB7XG4gICAgICAgIGlmIChyZXF1ZXN0LnBvc3REYXRhKVxuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlcXVlc3QucG9zdERhdGEpO1xuXG4gICAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dldElzQWpheFJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnJlc291cmNlVHlwZSA9PT0gJ1hIUidcbiAgICAgICAgICAgIHx8IGV2ZW50LnJlc291cmNlVHlwZSA9PT0gJ0ZldGNoJztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50ID0gZXZlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFJlc3BvbnNlQm9keSAoYm9keTogQnVmZmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlQm9keSA9IGJvZHk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVJlcXVlc3RJbmZvICgpOiBSZXF1ZXN0SW5mbyB7XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdElkLCByZXF1ZXN0IH0gPSB0aGlzLl9ldmVudDtcblxuICAgICAgICByZXR1cm4gbmV3IFJlcXVlc3RJbmZvKHtcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5fc2Vzc2lvbklkLFxuICAgICAgICAgICAgdXNlckFnZW50OiBSZXF1ZXN0SW5mby5nZXRVc2VyQWdlbnQocmVxdWVzdC5oZWFkZXJzKSxcbiAgICAgICAgICAgIHVybDogICAgICAgcmVxdWVzdC51cmwsXG4gICAgICAgICAgICBtZXRob2Q6ICAgIHJlcXVlc3QubWV0aG9kLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICBoZWFkZXJzOiAgIGxvd2VyQ2FzZUhlYWRlck5hbWVzKHJlcXVlc3QuaGVhZGVycyksXG4gICAgICAgICAgICBib2R5OiAgICAgIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5Ll9nZXRSZXF1ZXN0RGF0YShyZXF1ZXN0KSxcbiAgICAgICAgICAgIGlzQWpheDogICAgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkuX2dldElzQWpheFJlcXVlc3QodGhpcy5fZXZlbnQpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUmVxdWVzdE9wdGlvbnMgKCk6IFJlcXVlc3RPcHRpb25zIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh0aGlzLl9ldmVudC5yZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdFBhcmFtczogUmVxdWVzdE9wdGlvbnNQYXJhbXMgPSB7XG4gICAgICAgICAgICBtZXRob2Q6ICAgdGhpcy5fZXZlbnQucmVxdWVzdC5tZXRob2QsXG4gICAgICAgICAgICB1cmw6ICAgICAgdGhpcy5fZXZlbnQucmVxdWVzdC51cmwsXG4gICAgICAgICAgICBwcm90b2NvbDogcGFyc2VkVXJsLnByb3RvY29sLFxuICAgICAgICAgICAgaG9zdG5hbWU6IHBhcnNlZFVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgIGhvc3Q6ICAgICBwYXJzZWRVcmwuaG9zdCxcbiAgICAgICAgICAgIHBvcnQ6ICAgICBwYXJzZWRVcmwucG9ydCxcbiAgICAgICAgICAgIHBhdGg6ICAgICBwYXJzZWRVcmwucGF0aG5hbWUsXG4gICAgICAgICAgICBoZWFkZXJzOiAgdGhpcy5fZXZlbnQucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgYm9keTogICAgIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5Ll9nZXRSZXF1ZXN0RGF0YSh0aGlzLl9ldmVudC5yZXF1ZXN0KSxcbiAgICAgICAgICAgIGlzQWpheDogICBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeS5fZ2V0SXNBamF4UmVxdWVzdCh0aGlzLl9ldmVudCksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHBhcnNlZFVybC51c2VybmFtZSlcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMuYXV0aCA9IHBhcnNlZFVybC51c2VybmFtZSArICc6JyArIHBhcnNlZFVybC5wYXNzd29yZDtcblxuICAgICAgICByZXR1cm4gbmV3IFJlcXVlc3RPcHRpb25zKHJlcXVlc3RQYXJhbXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVDb25maWd1cmVSZXNwb25zZUV2ZW50IChydWxlOiBSZXF1ZXN0RmlsdGVyUnVsZSk6IENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQge1xuICAgICAgICByZXR1cm4gbmV3IENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQocnVsZSwgdGhpcy5fbW9kaWZ5UmVzcG9uc2VGdW5jdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVJlc3BvbnNlSW5mbyAoKTogUmVzcG9uc2VJbmZvIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZUluZm8oe1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogICAgICAgICAgICAgICB0aGlzLl9ldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgfHwgU3RhdHVzQ29kZXMuT0ssXG4gICAgICAgICAgICBoZWFkZXJzOiAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb091dGdvaW5nSHR0cEhlYWRlcnModGhpcy5fZXZlbnQucmVzcG9uc2VIZWFkZXJzKSxcbiAgICAgICAgICAgIGJvZHk6ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2VCb2R5LFxuICAgICAgICAgICAgc2Vzc2lvbklkOiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIHJlcXVlc3RJZDogICAgICAgICAgICAgICAgdGhpcy5fZXZlbnQucmVxdWVzdElkLFxuICAgICAgICAgICAgaXNTYW1lT3JpZ2luUG9saWN5RmFpbGVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const testcafe_hammerhead_1 = require("testcafe-hammerhead");
4
+ const string_1 = require("../utils/string");
5
+ const cdp_1 = require("../utils/cdp");
6
+ class NativeAutomationRequestHookEventProvider extends testcafe_hammerhead_1.RequestHookEventProvider {
7
+ static _hasResponseWithBody(context) {
8
+ return context.onResponseEventData.some((eventData) => eventData.opts.includeBody);
9
+ }
10
+ static async _setResponseBody({ pipelineContext, resourceBody, eventFactory, event, client }) {
11
+ if ((resourceBody === null || resourceBody === void 0 ? void 0 : resourceBody.length) || (0, cdp_1.isPreflightRequest)(event)) {
12
+ eventFactory.setResponseBody(resourceBody);
13
+ return;
14
+ }
15
+ const hasOnResponseWithBody = NativeAutomationRequestHookEventProvider._hasResponseWithBody(pipelineContext);
16
+ if (!hasOnResponseWithBody)
17
+ return;
18
+ const responseObj = await client.Fetch.getResponseBody({ requestId: event.requestId });
19
+ const responseBody = (0, string_1.getResponseAsBuffer)(responseObj);
20
+ eventFactory.setResponseBody(responseBody);
21
+ }
22
+ async onRequest(event, contextInfo) {
23
+ if (!this.hasRequestEventListeners())
24
+ return;
25
+ const { pipelineContext, eventFactory } = contextInfo.getContextData(event);
26
+ await pipelineContext.onRequestHookRequest(this, eventFactory);
27
+ }
28
+ async onResponse(event, resourceBody, contextInfo, client) {
29
+ let modified = false;
30
+ if (!this.hasRequestEventListeners())
31
+ return false;
32
+ const { pipelineContext, eventFactory } = contextInfo.getContextData(event);
33
+ // NOTE: A long request can be responded after the test is finished.
34
+ if (!eventFactory)
35
+ return false;
36
+ eventFactory.update(event);
37
+ await pipelineContext.onRequestHookConfigureResponse(this, eventFactory);
38
+ if (eventFactory.headersModified)
39
+ modified = true;
40
+ await NativeAutomationRequestHookEventProvider._setResponseBody({
41
+ pipelineContext,
42
+ resourceBody,
43
+ eventFactory,
44
+ event,
45
+ client,
46
+ });
47
+ await Promise.all(pipelineContext.onResponseEventData.map(async (eventData) => {
48
+ await pipelineContext.onRequestHookResponse(this, eventFactory, eventData.rule, eventData.opts);
49
+ }));
50
+ return modified;
51
+ }
52
+ }
53
+ exports.default = NativeAutomationRequestHookEventProvider;
54
+ module.exports = exports.default;
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1ob29rcy9ldmVudC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZEQUk2QjtBQUk3Qiw0Q0FBc0Q7QUFDdEQsc0NBQWtEO0FBS2xELE1BQXFCLHdDQUF5QyxTQUFRLDhDQUF3QjtJQUNsRixNQUFNLENBQUMsb0JBQW9CLENBQUUsT0FBd0M7UUFDekUsT0FBTyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBOEIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBRSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWdMO1FBQy9RLElBQUksQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsTUFBTSxLQUFJLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEQsWUFBb0QsQ0FBQyxlQUFlLENBQUMsWUFBc0IsQ0FBQyxDQUFDO1lBRTlGLE9BQU87U0FDVjtRQUdELE1BQU0scUJBQXFCLEdBQUcsd0NBQXdDLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFN0csSUFBSSxDQUFDLHFCQUFxQjtZQUN0QixPQUFPO1FBRVgsTUFBTSxXQUFXLEdBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4RixNQUFNLFlBQVksR0FBRyxJQUFBLDRCQUFtQixFQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJELFlBQW9ELENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFFLEtBQXlCLEVBQUUsV0FBK0M7UUFDOUYsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoQyxPQUFPO1FBRVgsTUFBTSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVFLE1BQU0sZUFBZSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBRSxLQUF5QixFQUFFLFlBQTJCLEVBQUUsV0FBK0MsRUFBRSxNQUFtQjtRQUNqSixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFckIsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoQyxPQUFPLEtBQUssQ0FBQztRQUVqQixNQUFNLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUUsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxZQUFZO1lBQ2IsT0FBTyxLQUFLLENBQUM7UUFFaEIsWUFBb0QsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEUsTUFBTSxlQUFlLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXpFLElBQUssWUFBb0QsQ0FBQyxlQUFlO1lBQ3JFLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFcEIsTUFBTSx3Q0FBd0MsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM1RCxlQUFlO1lBQ2YsWUFBWTtZQUNaLFlBQVk7WUFDWixLQUFLO1lBQ0wsTUFBTTtTQUNULENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxTQUFTLEVBQUMsRUFBRTtZQUN4RSxNQUFNLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFSixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFsRUQsMkRBa0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3RvcnksXG4gICAgT25SZXNwb25zZUV2ZW50RGF0YSxcbiAgICBSZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIsXG59IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZnJvbSAnLi9waXBlbGluZS1jb250ZXh0JztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSBmcm9tICcuL2V2ZW50LWZhY3RvcnkvcmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQnO1xuaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgeyBnZXRSZXNwb25zZUFzQnVmZmVyIH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCB7IGlzUHJlZmxpZ2h0UmVxdWVzdCB9IGZyb20gJy4uL3V0aWxzL2NkcCc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvIGZyb20gJy4uL3JlcXVlc3QtcGlwZWxpbmUvY29udGV4dC1pbmZvJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlciBleHRlbmRzIFJlcXVlc3RIb29rRXZlbnRQcm92aWRlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2hhc1Jlc3BvbnNlV2l0aEJvZHkgKGNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub25SZXNwb25zZUV2ZW50RGF0YS5zb21lKChldmVudERhdGE6IE9uUmVzcG9uc2VFdmVudERhdGEpID0+IGV2ZW50RGF0YS5vcHRzLmluY2x1ZGVCb2R5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBfc2V0UmVzcG9uc2VCb2R5ICh7IHBpcGVsaW5lQ29udGV4dCwgcmVzb3VyY2VCb2R5LCBldmVudEZhY3RvcnksIGV2ZW50LCBjbGllbnQgfTogeyBwaXBlbGluZUNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQsIHJlc291cmNlQm9keTogQnVmZmVyIHwgbnVsbCwgZXZlbnRGYWN0b3J5OiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3RvcnksIGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNsaWVudDogUHJvdG9jb2xBcGkgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAocmVzb3VyY2VCb2R5Py5sZW5ndGggfHwgaXNQcmVmbGlnaHRSZXF1ZXN0KGV2ZW50KSkge1xuICAgICAgICAgICAgKGV2ZW50RmFjdG9yeSBhcyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSkuc2V0UmVzcG9uc2VCb2R5KHJlc291cmNlQm9keSBhcyBCdWZmZXIpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IGhhc09uUmVzcG9uc2VXaXRoQm9keSA9IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIuX2hhc1Jlc3BvbnNlV2l0aEJvZHkocGlwZWxpbmVDb250ZXh0KTtcblxuICAgICAgICBpZiAoIWhhc09uUmVzcG9uc2VXaXRoQm9keSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCByZXNwb25zZU9iaiAgPSBhd2FpdCBjbGllbnQuRmV0Y2guZ2V0UmVzcG9uc2VCb2R5KHsgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQgfSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGdldFJlc3BvbnNlQXNCdWZmZXIocmVzcG9uc2VPYmopO1xuXG4gICAgICAgIChldmVudEZhY3RvcnkgYXMgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkpLnNldFJlc3BvbnNlQm9keShyZXNwb25zZUJvZHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvblJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNvbnRleHRJbmZvOiBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5oYXNSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMoKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IHBpcGVsaW5lQ29udGV4dCwgZXZlbnRGYWN0b3J5IH0gPSBjb250ZXh0SW5mby5nZXRDb250ZXh0RGF0YShldmVudCk7XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmVDb250ZXh0Lm9uUmVxdWVzdEhvb2tSZXF1ZXN0KHRoaXMsIGV2ZW50RmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9uUmVzcG9uc2UgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHJlc291cmNlQm9keTogQnVmZmVyIHwgbnVsbCwgY29udGV4dEluZm86IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8sIGNsaWVudDogUHJvdG9jb2xBcGkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IG1vZGlmaWVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLmhhc1JlcXVlc3RFdmVudExpc3RlbmVycygpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHsgcGlwZWxpbmVDb250ZXh0LCBldmVudEZhY3RvcnkgfSA9IGNvbnRleHRJbmZvLmdldENvbnRleHREYXRhKGV2ZW50KTtcblxuICAgICAgICAvLyBOT1RFOiBBIGxvbmcgcmVxdWVzdCBjYW4gYmUgcmVzcG9uZGVkIGFmdGVyIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLlxuICAgICAgICBpZiAoIWV2ZW50RmFjdG9yeSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAoZXZlbnRGYWN0b3J5IGFzIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5KS51cGRhdGUoZXZlbnQpO1xuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lQ29udGV4dC5vblJlcXVlc3RIb29rQ29uZmlndXJlUmVzcG9uc2UodGhpcywgZXZlbnRGYWN0b3J5KTtcblxuICAgICAgICBpZiAoKGV2ZW50RmFjdG9yeSBhcyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSkuaGVhZGVyc01vZGlmaWVkKVxuICAgICAgICAgICAgbW9kaWZpZWQgPSB0cnVlO1xuXG4gICAgICAgIGF3YWl0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIuX3NldFJlc3BvbnNlQm9keSh7XG4gICAgICAgICAgICBwaXBlbGluZUNvbnRleHQsXG4gICAgICAgICAgICByZXNvdXJjZUJvZHksXG4gICAgICAgICAgICBldmVudEZhY3RvcnksXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocGlwZWxpbmVDb250ZXh0Lm9uUmVzcG9uc2VFdmVudERhdGEubWFwKGFzeW5jIGV2ZW50RGF0YSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQub25SZXF1ZXN0SG9va1Jlc3BvbnNlKHRoaXMsIGV2ZW50RmFjdG9yeSwgZXZlbnREYXRhLnJ1bGUsIGV2ZW50RGF0YS5vcHRzKTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHJldHVybiBtb2RpZmllZDtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const testcafe_hammerhead_1 = require("testcafe-hammerhead");
4
+ class NativeAutomationPipelineContext extends testcafe_hammerhead_1.BaseRequestPipelineContext {
5
+ constructor(requestId) {
6
+ super(requestId);
7
+ }
8
+ }
9
+ exports.default = NativeAutomationPipelineContext;
10
+ module.exports = exports.default;
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uYXRpdmUtYXV0b21hdGlvbi9yZXF1ZXN0LWhvb2tzL3BpcGVsaW5lLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2REFBaUU7QUFFakUsTUFBcUIsK0JBQWdDLFNBQVEsZ0RBQTBCO0lBQ25GLFlBQW9CLFNBQWlCO1FBQ2pDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyQixDQUFDO0NBQ0o7QUFKRCxrREFJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VSZXF1ZXN0UGlwZWxpbmVDb250ZXh0IH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZXh0ZW5kcyBCYXNlUmVxdWVzdFBpcGVsaW5lQ29udGV4dCB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChyZXF1ZXN0SWQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcihyZXF1ZXN0SWQpO1xuICAgIH1cbn1cbiJdfQ==
@@ -10,4 +10,4 @@ const FAVICON_CONTENT_TYPE_HEADER = {
10
10
  value: content_types_1.default.icon,
11
11
  };
12
12
  exports.FAVICON_CONTENT_TYPE_HEADER = FAVICON_CONTENT_TYPE_HEADER;
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3h5bGVzcy9yZXF1ZXN0LXBpcGVsaW5lL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwrRUFBdUQ7QUFFdkQsTUFBTSwyQkFBMkIsR0FBRztJQUNoQyxJQUFJLEVBQUcsY0FBYztJQUNyQixLQUFLLEVBQUUsdUJBQWEsQ0FBQyxJQUFJO0NBQzVCLENBQUM7QUFHRSxrRUFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ09OVEVOVF9UWVBFUyBmcm9tICcuLi8uLi9hc3NldHMvY29udGVudC10eXBlcyc7XG5cbmNvbnN0IEZBVklDT05fQ09OVEVOVF9UWVBFX0hFQURFUiA9IHtcbiAgICBuYW1lOiAgJ2NvbnRlbnQtdHlwZScsXG4gICAgdmFsdWU6IENPTlRFTlRfVFlQRVMuaWNvbixcbn07XG5cbmV4cG9ydCB7XG4gICAgRkFWSUNPTl9DT05URU5UX1RZUEVfSEVBREVSLFxufTtcbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25hdGl2ZS1hdXRvbWF0aW9uL3JlcXVlc3QtcGlwZWxpbmUvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLCtFQUF1RDtBQUV2RCxNQUFNLDJCQUEyQixHQUFHO0lBQ2hDLElBQUksRUFBRyxjQUFjO0lBQ3JCLEtBQUssRUFBRSx1QkFBYSxDQUFDLElBQUk7Q0FDNUIsQ0FBQztBQUdFLGtFQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDT05URU5UX1RZUEVTIGZyb20gJy4uLy4uL2Fzc2V0cy9jb250ZW50LXR5cGVzJztcblxuY29uc3QgRkFWSUNPTl9DT05URU5UX1RZUEVfSEVBREVSID0ge1xuICAgIG5hbWU6ICAnY29udGVudC10eXBlJyxcbiAgICB2YWx1ZTogQ09OVEVOVF9UWVBFUy5pY29uLFxufTtcblxuZXhwb3J0IHtcbiAgICBGQVZJQ09OX0NPTlRFTlRfVFlQRV9IRUFERVIsXG59O1xuIl19
@@ -0,0 +1,58 @@
1
+ "use strict";
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
+ const pipeline_context_1 = __importDefault(require("../request-hooks/pipeline-context"));
7
+ const request_paused_event_based_1 = __importDefault(require("../request-hooks/event-factory/request-paused-event-based"));
8
+ const cdp_1 = require("../utils/cdp");
9
+ const frame_navigated_event_based_1 = __importDefault(require("../request-hooks/event-factory/frame-navigated-event-based"));
10
+ const debug_loggers_1 = require("../../utils/debug-loggers");
11
+ class NativeAutomationRequestContextInfo {
12
+ constructor(testRunBridge) {
13
+ this._pipelineContexts = {};
14
+ this._eventFactories = {};
15
+ this._testRunBridge = testRunBridge;
16
+ }
17
+ _createPipelineContext(requestId) {
18
+ const pipelineContext = new pipeline_context_1.default(requestId);
19
+ this._pipelineContexts[requestId] = pipelineContext;
20
+ return pipelineContext;
21
+ }
22
+ _createEventFactory(event) {
23
+ const sessionId = this._testRunBridge.getSessionId();
24
+ const requestId = (0, cdp_1.getRequestId)(event);
25
+ const eventFactory = (0, cdp_1.isRequestPausedEvent)(event) ? new request_paused_event_based_1.default(event, sessionId) : new frame_navigated_event_based_1.default(event, sessionId);
26
+ this._eventFactories[requestId] = eventFactory;
27
+ return eventFactory;
28
+ }
29
+ _getEventFactory(requestId) {
30
+ return this._eventFactories[requestId];
31
+ }
32
+ init(event) {
33
+ const requestId = (0, cdp_1.getRequestId)(event);
34
+ const pipelineContext = this._createPipelineContext(requestId);
35
+ const eventFactory = this._createEventFactory(event);
36
+ pipelineContext.setRequestOptions(eventFactory);
37
+ (0, debug_loggers_1.requestPipelineContextLogger)('initialized %s', requestId);
38
+ }
39
+ dispose(requestId) {
40
+ if (!requestId)
41
+ return;
42
+ delete this._pipelineContexts[requestId];
43
+ delete this._eventFactories[requestId];
44
+ (0, debug_loggers_1.requestPipelineContextLogger)('disposed %s', requestId);
45
+ }
46
+ getPipelineContext(requestId) {
47
+ return this._pipelineContexts[requestId];
48
+ }
49
+ getContextData(event) {
50
+ const requestId = (0, cdp_1.getRequestId)(event);
51
+ const pipelineContext = this.getPipelineContext(requestId);
52
+ const eventFactory = this._getEventFactory(requestId);
53
+ return { pipelineContext, eventFactory };
54
+ }
55
+ }
56
+ exports.default = NativeAutomationRequestContextInfo;
57
+ module.exports = exports.default;
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25hdGl2ZS1hdXRvbWF0aW9uL3JlcXVlc3QtcGlwZWxpbmUvY29udGV4dC1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EseUZBQWdGO0FBQ2hGLDJIQUE0RztBQUs1RyxzQ0FBa0U7QUFFbEUsNkhBQThHO0FBQzlHLDZEQUF5RTtBQU96RSxNQUFxQixrQ0FBa0M7SUFLbkQsWUFBb0IsYUFBNEI7UUFDNUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFLLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFNLGFBQWEsQ0FBQztJQUMzQyxDQUFDO0lBRU8sc0JBQXNCLENBQUUsU0FBaUI7UUFDN0MsTUFBTSxlQUFlLEdBQUcsSUFBSSwwQkFBK0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV2RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsZUFBZSxDQUFDO1FBRXBELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFTyxtQkFBbUIsQ0FBRSxLQUErQztRQUN4RSxNQUFNLFNBQVMsR0FBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUFNLElBQUEsa0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFBLDBCQUFvQixFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLG9DQUFtQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxxQ0FBb0MsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFMUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxZQUFZLENBQUM7UUFFL0MsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVPLGdCQUFnQixDQUFFLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU0sSUFBSSxDQUFFLEtBQStDO1FBQ3hELE1BQU0sU0FBUyxHQUFTLElBQUEsa0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0QsTUFBTSxZQUFZLEdBQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhELGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVoRCxJQUFBLDRDQUE0QixFQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDTSxPQUFPLENBQUUsU0FBa0I7UUFDOUIsSUFBSSxDQUFDLFNBQVM7WUFDVixPQUFPO1FBRVgsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXZDLElBQUEsNENBQTRCLEVBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxrQkFBa0IsQ0FBRSxTQUFpQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sY0FBYyxDQUFFLEtBQStDO1FBQ2xFLE1BQU0sU0FBUyxHQUFTLElBQUEsa0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsTUFBTSxZQUFZLEdBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDN0MsQ0FBQztDQUNKO0FBL0RELHFEQStEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9waXBlbGluZS1jb250ZXh0JztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2V2ZW50LWZhY3RvcnkvcmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudCA9IFByb3RvY29sLlBhZ2UuRnJhbWVOYXZpZ2F0ZWRFdmVudDtcbmltcG9ydCBUZXN0UnVuQnJpZGdlIGZyb20gJy4vdGVzdC1ydW4tYnJpZGdlJztcbmltcG9ydCB7IGdldFJlcXVlc3RJZCwgaXNSZXF1ZXN0UGF1c2VkRXZlbnQgfSBmcm9tICcuLi91dGlscy9jZHAnO1xuaW1wb3J0IHsgQmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5IH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5IGZyb20gJy4uL3JlcXVlc3QtaG9va3MvZXZlbnQtZmFjdG9yeS9mcmFtZS1uYXZpZ2F0ZWQtZXZlbnQtYmFzZWQnO1xuaW1wb3J0IHsgcmVxdWVzdFBpcGVsaW5lQ29udGV4dExvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2RlYnVnLWxvZ2dlcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHREYXRhIHtcbiAgICBwaXBlbGluZUNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQ7XG4gICAgZXZlbnRGYWN0b3J5OiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3Rvcnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3BpcGVsaW5lQ29udGV4dHM6IERpY3Rpb25hcnk8TmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRGYWN0b3JpZXM6IERpY3Rpb25hcnk8QmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5PjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICh0ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlKSB7XG4gICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dHMgPSB7fTtcbiAgICAgICAgdGhpcy5fZXZlbnRGYWN0b3JpZXMgICA9IHt9O1xuICAgICAgICB0aGlzLl90ZXN0UnVuQnJpZGdlICAgID0gdGVzdFJ1bkJyaWRnZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVQaXBlbGluZUNvbnRleHQgKHJlcXVlc3RJZDogc3RyaW5nKTogTmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dCB7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lQ29udGV4dCA9IG5ldyBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0KHJlcXVlc3RJZCk7XG5cbiAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0c1tyZXF1ZXN0SWRdID0gcGlwZWxpbmVDb250ZXh0O1xuXG4gICAgICAgIHJldHVybiBwaXBlbGluZUNvbnRleHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlRXZlbnRGYWN0b3J5IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50IHwgRnJhbWVOYXZpZ2F0ZWRFdmVudCk6IEJhc2VSZXF1ZXN0SG9va0V2ZW50RmFjdG9yeSB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25JZCAgICA9IHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0U2Vzc2lvbklkKCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCAgICA9IGdldFJlcXVlc3RJZChldmVudCk7XG4gICAgICAgIGNvbnN0IGV2ZW50RmFjdG9yeSA9IGlzUmVxdWVzdFBhdXNlZEV2ZW50KGV2ZW50KSA/IG5ldyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeShldmVudCwgc2Vzc2lvbklkKSA6IG5ldyBGcmFtZU5hdmlnYXRlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkoZXZlbnQsIHNlc3Npb25JZCk7XG5cbiAgICAgICAgdGhpcy5fZXZlbnRGYWN0b3JpZXNbcmVxdWVzdElkXSA9IGV2ZW50RmFjdG9yeTtcblxuICAgICAgICByZXR1cm4gZXZlbnRGYWN0b3J5O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEV2ZW50RmFjdG9yeSAocmVxdWVzdElkOiBzdHJpbmcpOiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3Rvcnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRGYWN0b3JpZXNbcmVxdWVzdElkXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCB8IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdElkICAgICAgID0gZ2V0UmVxdWVzdElkKGV2ZW50KTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVDb250ZXh0ID0gdGhpcy5fY3JlYXRlUGlwZWxpbmVDb250ZXh0KHJlcXVlc3RJZCk7XG4gICAgICAgIGNvbnN0IGV2ZW50RmFjdG9yeSAgICA9IHRoaXMuX2NyZWF0ZUV2ZW50RmFjdG9yeShldmVudCk7XG5cbiAgICAgICAgcGlwZWxpbmVDb250ZXh0LnNldFJlcXVlc3RPcHRpb25zKGV2ZW50RmFjdG9yeSk7XG5cbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lQ29udGV4dExvZ2dlcignaW5pdGlhbGl6ZWQgJXMnLCByZXF1ZXN0SWQpO1xuICAgIH1cbiAgICBwdWJsaWMgZGlzcG9zZSAocmVxdWVzdElkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghcmVxdWVzdElkKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9waXBlbGluZUNvbnRleHRzW3JlcXVlc3RJZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudEZhY3Rvcmllc1tyZXF1ZXN0SWRdO1xuXG4gICAgICAgIHJlcXVlc3RQaXBlbGluZUNvbnRleHRMb2dnZXIoJ2Rpc3Bvc2VkICVzJywgcmVxdWVzdElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGlwZWxpbmVDb250ZXh0IChyZXF1ZXN0SWQ6IHN0cmluZyk6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGlwZWxpbmVDb250ZXh0c1tyZXF1ZXN0SWRdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250ZXh0RGF0YSAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCB8IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiBDb250ZXh0RGF0YSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCAgICAgICA9IGdldFJlcXVlc3RJZChldmVudCk7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lQ29udGV4dCA9IHRoaXMuZ2V0UGlwZWxpbmVDb250ZXh0KHJlcXVlc3RJZCk7XG4gICAgICAgIGNvbnN0IGV2ZW50RmFjdG9yeSAgICA9IHRoaXMuX2dldEV2ZW50RmFjdG9yeShyZXF1ZXN0SWQpO1xuXG4gICAgICAgIHJldHVybiB7IHBpcGVsaW5lQ29udGV4dCwgZXZlbnRGYWN0b3J5IH07XG4gICAgfVxufVxuIl19