testcafe 2.3.1 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/CHANGELOG.md +129 -0
  2. package/LICENSE +1 -1
  3. package/README.md +40 -46
  4. package/bin/testcafe-with-v8-flag-filter.js +2 -2
  5. package/lib/api/test-controller/execution-context.js +4 -2
  6. package/lib/api/test-controller/index.js +6 -1
  7. package/lib/api/test-run-tracker.js +1 -1
  8. package/lib/browser/connection/gateway/index.js +273 -0
  9. package/lib/browser/connection/gateway/status.js +10 -0
  10. package/lib/browser/connection/index.js +60 -47
  11. package/lib/browser/connection/service-routes.js +4 -2
  12. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +3 -2
  13. package/lib/browser/provider/built-in/dedicated/chrome/index.js +48 -23
  14. package/lib/browser/provider/built-in/dedicated/edge/index.js +4 -1
  15. package/lib/browser/provider/index.js +13 -4
  16. package/lib/browser/provider/plugin-host.js +7 -1
  17. package/lib/cli/argument-parser/index.js +10 -14
  18. package/lib/cli/cli.js +3 -4
  19. package/lib/cli/remotes-wizard.js +2 -1
  20. package/lib/cli/utils/should-move-option-to-end.js +17 -0
  21. package/lib/client/automation/deps/hammerhead.js +24 -0
  22. package/lib/client/automation/deps/testcafe-core.js +24 -0
  23. package/lib/client/automation/index.js +528 -161
  24. package/lib/client/automation/index.min.js +1 -1
  25. package/lib/client/automation/playback/press/get-key-info.js +44 -0
  26. package/lib/client/automation/playback/press/utils.js +142 -0
  27. package/lib/client/automation/utils/get-key-code.js +15 -0
  28. package/lib/client/automation/utils/get-key-identifier.js +14 -0
  29. package/lib/client/automation/utils/is-letter.js +7 -0
  30. package/lib/client/automation/utils/key-identifier-maps.js +93 -0
  31. package/lib/client/browser/idle-page/index.html.mustache +2 -2
  32. package/lib/client/browser/idle-page/index.js +13 -8
  33. package/lib/client/core/index.js +58 -10
  34. package/lib/client/core/index.min.js +1 -1
  35. package/lib/client/core/utils/array.js +77 -0
  36. package/lib/client/core/utils/dom.js +459 -0
  37. package/lib/client/core/utils/send-request-to-frame.js +22 -0
  38. package/lib/client/core/utils/style.js +102 -0
  39. package/lib/client/core/utils/values/boundary-values.js +41 -0
  40. package/lib/client/driver/index.js +253 -224
  41. package/lib/client/driver/index.min.js +1 -1
  42. package/lib/client/test-run/iframe.js.mustache +6 -6
  43. package/lib/client/test-run/index.js.mustache +37 -33
  44. package/lib/client/ui/index.js +3238 -54
  45. package/lib/client/ui/index.min.js +1 -1
  46. package/lib/client/ui/sprite.svg +15 -0
  47. package/lib/client/ui/styles.css +184 -41
  48. package/lib/compiler/babel/load-libs.js +6 -6
  49. package/lib/compiler/compilers.js +7 -7
  50. package/lib/compiler/index.js +6 -6
  51. package/lib/compiler/interfaces.js +1 -1
  52. package/lib/compiler/test-file/api-based.js +5 -5
  53. package/lib/compiler/test-file/formats/es-next/compiler.js +5 -5
  54. package/lib/compiler/test-file/formats/typescript/compiler.js +9 -9
  55. package/lib/compiler/test-file/get-exportable-lib-path.js +3 -3
  56. package/lib/configuration/configuration-base.js +9 -6
  57. package/lib/configuration/default-values.js +3 -3
  58. package/lib/configuration/formats.js +9 -5
  59. package/lib/configuration/interfaces.js +1 -1
  60. package/lib/configuration/option-names.js +3 -3
  61. package/lib/configuration/run-option-names.js +2 -2
  62. package/lib/configuration/testcafe-configuration.js +41 -24
  63. package/lib/configuration/types.js +1 -1
  64. package/lib/configuration/utils.js +32 -0
  65. package/lib/custom-client-scripts/client-script.js +2 -2
  66. package/lib/custom-client-scripts/get-code.js +3 -3
  67. package/lib/custom-client-scripts/routing.js +10 -12
  68. package/lib/errors/runtime/templates.js +4 -2
  69. package/lib/errors/test-run/templates.js +4 -1
  70. package/lib/errors/types.js +4 -1
  71. package/lib/index.js +6 -29
  72. package/lib/live/test-runner.js +5 -3
  73. package/lib/native-automation/add-custom-debug-formatters.js +22 -0
  74. package/lib/native-automation/api-base.js +27 -0
  75. package/lib/native-automation/client/event-descriptor.js +112 -0
  76. package/lib/native-automation/client/input.js +50 -0
  77. package/lib/native-automation/client/key-press/utils.js +31 -0
  78. package/lib/native-automation/client/types.js +11 -0
  79. package/lib/native-automation/client/utils.js +54 -0
  80. package/lib/native-automation/cookie-provider.js +115 -0
  81. package/lib/native-automation/empty-page-markup.js +11 -0
  82. package/lib/native-automation/error-route.js +7 -0
  83. package/lib/native-automation/errors.js +20 -0
  84. package/lib/native-automation/index.js +53 -0
  85. package/lib/native-automation/request-hooks/event-factory/frame-navigated-event-based.js +40 -0
  86. package/lib/native-automation/request-hooks/event-factory/request-paused-event-based.js +94 -0
  87. package/lib/native-automation/request-hooks/event-provider.js +52 -0
  88. package/lib/native-automation/request-hooks/pipeline-context.js +11 -0
  89. package/lib/{proxyless → native-automation}/request-pipeline/constants.js +1 -1
  90. package/lib/native-automation/request-pipeline/context-info.js +55 -0
  91. package/lib/native-automation/request-pipeline/index.js +309 -0
  92. package/lib/native-automation/request-pipeline/resendAuthRequest.js +23 -0
  93. package/lib/native-automation/request-pipeline/safe-api.js +63 -0
  94. package/lib/native-automation/request-pipeline/special-handlers.js +73 -0
  95. package/lib/native-automation/request-pipeline/test-run-bridge.js +45 -0
  96. package/lib/native-automation/resource-injector.js +175 -0
  97. package/lib/native-automation/session-storage/index.js +43 -0
  98. package/lib/native-automation/storages-provider.js +17 -0
  99. package/lib/native-automation/types.js +12 -0
  100. package/lib/native-automation/utils/cdp.js +70 -0
  101. package/lib/native-automation/utils/convert.js +11 -0
  102. package/lib/native-automation/utils/get-active-client.js +8 -0
  103. package/lib/native-automation/utils/headers.js +30 -0
  104. package/lib/native-automation/utils/string.js +32 -0
  105. package/lib/reporter/index.js +52 -4
  106. package/lib/reporter/interfaces.js +1 -1
  107. package/lib/reporter/plugin-host.js +44 -4
  108. package/lib/reporter/plugin-methods.js +2 -1
  109. package/lib/reporter/report-data-log.js +25 -0
  110. package/lib/runner/bootstrapper.js +38 -6
  111. package/lib/runner/index.js +87 -47
  112. package/lib/runner/interfaces.js +1 -1
  113. package/lib/runner/task/index.js +1 -29
  114. package/lib/runner/test-run-controller.js +45 -1
  115. package/lib/services/compiler/host.js +3 -3
  116. package/lib/services/compiler/interfaces.js +1 -1
  117. package/lib/services/compiler/service.js +6 -5
  118. package/lib/services/compiler/test-run-proxy.js +3 -2
  119. package/lib/services/interfaces.js +1 -1
  120. package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +2 -1
  121. package/lib/shared/errors/index.js +8 -2
  122. package/lib/shared/utils/is-file-protocol.js +2 -2
  123. package/lib/test-run/commands/actions.js +16 -4
  124. package/lib/test-run/commands/type.js +2 -1
  125. package/lib/test-run/cookies/base.js +4 -1
  126. package/lib/test-run/cookies/factory.js +4 -4
  127. package/lib/test-run/cookies/provider.js +9 -2
  128. package/lib/test-run/execute-js-expression/index.js +4 -2
  129. package/lib/test-run/index.js +29 -22
  130. package/lib/test-run/request/create-request-options.js +37 -24
  131. package/lib/test-run/request/send.js +2 -3
  132. package/lib/test-run/role-provider.js +5 -5
  133. package/lib/test-run/session-controller.js +5 -5
  134. package/lib/test-run/storages/factory.js +4 -4
  135. package/lib/testcafe.js +17 -10
  136. package/lib/utils/check-is-vm.js +58 -0
  137. package/lib/utils/debug-loggers.js +7 -7
  138. package/lib/utils/get-browser.js +5 -2
  139. package/lib/utils/get-options/boolean-or-object-option.js +18 -0
  140. package/lib/utils/get-options/quarantine.js +10 -13
  141. package/lib/utils/get-options/skip-js-errors.js +12 -16
  142. package/lib/utils/parse-user-agent.js +4 -12
  143. package/lib/utils/string.js +1 -1
  144. package/package.json +13 -9
  145. package/ts-defs/index.d.ts +12 -2
  146. package/ts-defs/selectors.d.ts +8 -1
  147. package/ts-defs/testcafe-scripts.d.ts +8 -1
  148. package/lib/browser/connection/gateway.js +0 -205
  149. package/lib/proxyless/add-custom-debug-formatters.js +0 -22
  150. package/lib/proxyless/api-base.js +0 -25
  151. package/lib/proxyless/client/event-simulator.js +0 -40
  152. package/lib/proxyless/client/types.js +0 -11
  153. package/lib/proxyless/client/utils.js +0 -24
  154. package/lib/proxyless/cookie-provider.js +0 -87
  155. package/lib/proxyless/default-setup-options.js +0 -9
  156. package/lib/proxyless/empty-page-markup.js +0 -11
  157. package/lib/proxyless/error-route.js +0 -7
  158. package/lib/proxyless/index.js +0 -53
  159. package/lib/proxyless/request-hooks/event-factory/frame-navigated-event-based.js +0 -40
  160. package/lib/proxyless/request-hooks/event-factory/request-paused-event-based.js +0 -95
  161. package/lib/proxyless/request-hooks/event-provider.js +0 -52
  162. package/lib/proxyless/request-hooks/pipeline-context.js +0 -11
  163. package/lib/proxyless/request-pipeline/context-info.js +0 -55
  164. package/lib/proxyless/request-pipeline/index.js +0 -230
  165. package/lib/proxyless/request-pipeline/resendAuthRequest.js +0 -23
  166. package/lib/proxyless/request-pipeline/safe-api.js +0 -62
  167. package/lib/proxyless/request-pipeline/special-handlers.js +0 -73
  168. package/lib/proxyless/request-pipeline/test-run-bridge.js +0 -45
  169. package/lib/proxyless/resource-injector.js +0 -162
  170. package/lib/proxyless/session-storage/index.js +0 -39
  171. package/lib/proxyless/storages-provider.js +0 -17
  172. package/lib/proxyless/types.js +0 -10
  173. package/lib/proxyless/utils/cdp.js +0 -66
  174. package/lib/proxyless/utils/get-active-client.js +0 -8
  175. package/lib/proxyless/utils/headers.js +0 -30
  176. package/lib/proxyless/utils/string.js +0 -32
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1ob29rcy9ldmVudC1mYWN0b3J5L3JlcXVlc3QtcGF1c2VkLWV2ZW50LWJhc2VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkRBUzZCO0FBQzdCLG1DQUFnQztBQUtoQyx5REFBZ0Q7QUFDaEQsaURBQXlGO0FBR3pGLE1BQXFCLG1DQUFvQyxTQUFRLGlEQUEyQjtJQU94RixZQUFvQixLQUF5QixFQUFFLFNBQWlCO1FBQzVELEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLE1BQU0sR0FBb0IsS0FBSyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQWEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFnQixTQUFTLENBQUM7UUFDekMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxlQUFlLEdBQVcsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFTyw4QkFBOEI7UUFDbEMsT0FBTztZQUNILFNBQVMsRUFBRSxDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsRUFBRTtnQkFDdkMsTUFBTSxNQUFNLEdBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFpQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBRXJILElBQUksQ0FBQyxNQUFNO29CQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBaUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzs7b0JBRXJFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUV6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUNoQyxDQUFDO1lBQ0QsWUFBWSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7Z0JBQzNCLElBQUEsZUFBTSxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZ0MsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBRWpILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztJQUVPLE1BQU0sQ0FBQyxlQUFlLENBQUUsT0FBZ0I7UUFDNUMsSUFBSSxPQUFPLENBQUMsUUFBUTtZQUNoQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXpDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU8sTUFBTSxDQUFDLGlCQUFpQixDQUFFLEtBQXlCO1FBQ3ZELE9BQU8sS0FBSyxDQUFDLFlBQVksS0FBSyxLQUFLO2VBQzVCLEtBQUssQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDO0lBQzFDLENBQUM7SUFFTSxNQUFNLENBQUUsS0FBeUI7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVNLGVBQWUsQ0FBRSxJQUFZO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTNDLE9BQU8sSUFBSSxpQ0FBVyxDQUFDO1lBQ25CLFNBQVM7WUFDVCxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDMUIsU0FBUyxFQUFFLGlDQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDcEQsR0FBRyxFQUFRLE9BQU8sQ0FBQyxHQUFHO1lBQ3RCLE1BQU0sRUFBSyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN2QyxPQUFPLEVBQUksSUFBQSw4QkFBb0IsRUFBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ2hELElBQUksRUFBTyxtQ0FBbUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO1lBQ3ZFLE1BQU0sRUFBSyxtQ0FBbUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ2hGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxvQkFBb0I7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkQsTUFBTSxhQUFhLEdBQXlCO1lBQ3hDLE1BQU0sRUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ3BDLEdBQUcsRUFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHO1lBQ2pDLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtZQUM1QixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7WUFDNUIsSUFBSSxFQUFNLFNBQVMsQ0FBQyxJQUFJO1lBQ3hCLElBQUksRUFBTSxTQUFTLENBQUMsSUFBSTtZQUN4QixJQUFJLEVBQU0sU0FBUyxDQUFDLFFBQVE7WUFDNUIsT0FBTyxFQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU87WUFDckMsSUFBSSxFQUFNLG1DQUFtQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNsRixNQUFNLEVBQUksbUNBQW1DLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUMvRSxDQUFDO1FBRUYsSUFBSSxTQUFTLENBQUMsUUFBUTtZQUNsQixhQUFhLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFFdkUsT0FBTyxJQUFJLG9DQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLDRCQUE0QixDQUFFLElBQXVCO1FBQ3hELE9BQU8sSUFBSSw0Q0FBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixPQUFPLElBQUksa0NBQVksQ0FBQztZQUNwQixVQUFVLEVBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLElBQUksK0JBQVcsQ0FBQyxFQUFFO1lBQzFFLE9BQU8sRUFBbUIsSUFBQSxzQ0FBNEIsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNuRixJQUFJLEVBQXNCLElBQUksQ0FBQyxhQUFhO1lBQzVDLFNBQVMsRUFBaUIsRUFBRTtZQUM1QixTQUFTLEVBQWlCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztZQUMvQyx3QkFBd0IsRUFBRSxLQUFLO1NBQ2xDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQTVHRCxzREE0R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEJhc2VSZXF1ZXN0SG9va0V2ZW50RmFjdG9yeSxcbiAgICBDb25maWd1cmVSZXNwb25zZUV2ZW50LFxuICAgIE1vZGlmeVJlc3BvbnNlRnVuY3Rpb25zLFxuICAgIFJlcXVlc3RGaWx0ZXJSdWxlLFxuICAgIFJlcXVlc3RJbmZvLFxuICAgIFJlcXVlc3RPcHRpb25zLFxuICAgIFJlcXVlc3RPcHRpb25zUGFyYW1zLFxuICAgIFJlc3BvbnNlSW5mbyxcbn0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgeyByZW1vdmUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgUmVxdWVzdCA9IFByb3RvY29sLk5ldHdvcmsuUmVxdWVzdDtcbmltcG9ydCBIZWFkZXJFbnRyeSA9IFByb3RvY29sLkZldGNoLkhlYWRlckVudHJ5O1xuaW1wb3J0IHsgU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XG5pbXBvcnQgeyBjb252ZXJ0VG9PdXRnb2luZ0h0dHBIZWFkZXJzLCBsb3dlckNhc2VIZWFkZXJOYW1lcyB9IGZyb20gJy4uLy4uL3V0aWxzL2hlYWRlcnMnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5IGV4dGVuZHMgQmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5IHtcbiAgICBwcml2YXRlIF9ldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50O1xuICAgIHByaXZhdGUgX3Jlc3BvbnNlQm9keTogQnVmZmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vZGlmeVJlc3BvbnNlRnVuY3Rpb246IE1vZGlmeVJlc3BvbnNlRnVuY3Rpb25zO1xuICAgIHB1YmxpYyBoZWFkZXJzTW9kaWZpZWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fZXZlbnQgICAgICAgICAgICAgICAgICA9IGV2ZW50O1xuICAgICAgICB0aGlzLl9yZXNwb25zZUJvZHkgICAgICAgICAgID0gQnVmZmVyLmFsbG9jKDApO1xuICAgICAgICB0aGlzLl9zZXNzaW9uSWQgICAgICAgICAgICAgID0gc2Vzc2lvbklkO1xuICAgICAgICB0aGlzLl9tb2RpZnlSZXNwb25zZUZ1bmN0aW9uID0gdGhpcy5fY3JlYXRlTW9kaWZ5UmVzcG9uc2VGdW5jdGlvbnMoKTtcbiAgICAgICAgdGhpcy5oZWFkZXJzTW9kaWZpZWQgICAgICAgICA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZU1vZGlmeVJlc3BvbnNlRnVuY3Rpb25zICgpOiBNb2RpZnlSZXNwb25zZUZ1bmN0aW9ucyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZXRIZWFkZXI6IChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSAodGhpcy5fZXZlbnQucmVzcG9uc2VIZWFkZXJzIGFzIEhlYWRlckVudHJ5W10pLmZpbmQoaCA9PiBoLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICAgIGlmICghaGVhZGVyKVxuICAgICAgICAgICAgICAgICAgICAodGhpcy5fZXZlbnQucmVzcG9uc2VIZWFkZXJzIGFzIEhlYWRlckVudHJ5W10pLnB1c2goeyBuYW1lLCB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZUhlYWRlcjogKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHJlbW92ZSh0aGlzLl9ldmVudC5yZXNwb25zZUhlYWRlcnMgYXMgSGVhZGVyRW50cnlbXSwgaGVhZGVyID0+IGhlYWRlci5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlcnNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZXRSZXF1ZXN0RGF0YSAocmVxdWVzdDogUmVxdWVzdCk6IEJ1ZmZlciB7XG4gICAgICAgIGlmIChyZXF1ZXN0LnBvc3REYXRhKVxuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlcXVlc3QucG9zdERhdGEpO1xuXG4gICAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dldElzQWpheFJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnJlc291cmNlVHlwZSA9PT0gJ1hIUidcbiAgICAgICAgICAgIHx8IGV2ZW50LnJlc291cmNlVHlwZSA9PT0gJ0ZldGNoJztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50ID0gZXZlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFJlc3BvbnNlQm9keSAoYm9keTogQnVmZmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlQm9keSA9IGJvZHk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVJlcXVlc3RJbmZvICgpOiBSZXF1ZXN0SW5mbyB7XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdElkLCByZXF1ZXN0IH0gPSB0aGlzLl9ldmVudDtcblxuICAgICAgICByZXR1cm4gbmV3IFJlcXVlc3RJbmZvKHtcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5fc2Vzc2lvbklkLFxuICAgICAgICAgICAgdXNlckFnZW50OiBSZXF1ZXN0SW5mby5nZXRVc2VyQWdlbnQocmVxdWVzdC5oZWFkZXJzKSxcbiAgICAgICAgICAgIHVybDogICAgICAgcmVxdWVzdC51cmwsXG4gICAgICAgICAgICBtZXRob2Q6ICAgIHJlcXVlc3QubWV0aG9kLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICBoZWFkZXJzOiAgIGxvd2VyQ2FzZUhlYWRlck5hbWVzKHJlcXVlc3QuaGVhZGVycyksXG4gICAgICAgICAgICBib2R5OiAgICAgIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5Ll9nZXRSZXF1ZXN0RGF0YShyZXF1ZXN0KSxcbiAgICAgICAgICAgIGlzQWpheDogICAgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkuX2dldElzQWpheFJlcXVlc3QodGhpcy5fZXZlbnQpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUmVxdWVzdE9wdGlvbnMgKCk6IFJlcXVlc3RPcHRpb25zIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh0aGlzLl9ldmVudC5yZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdFBhcmFtczogUmVxdWVzdE9wdGlvbnNQYXJhbXMgPSB7XG4gICAgICAgICAgICBtZXRob2Q6ICAgdGhpcy5fZXZlbnQucmVxdWVzdC5tZXRob2QsXG4gICAgICAgICAgICB1cmw6ICAgICAgdGhpcy5fZXZlbnQucmVxdWVzdC51cmwsXG4gICAgICAgICAgICBwcm90b2NvbDogcGFyc2VkVXJsLnByb3RvY29sLFxuICAgICAgICAgICAgaG9zdG5hbWU6IHBhcnNlZFVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgIGhvc3Q6ICAgICBwYXJzZWRVcmwuaG9zdCxcbiAgICAgICAgICAgIHBvcnQ6ICAgICBwYXJzZWRVcmwucG9ydCxcbiAgICAgICAgICAgIHBhdGg6ICAgICBwYXJzZWRVcmwucGF0aG5hbWUsXG4gICAgICAgICAgICBoZWFkZXJzOiAgdGhpcy5fZXZlbnQucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgYm9keTogICAgIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5Ll9nZXRSZXF1ZXN0RGF0YSh0aGlzLl9ldmVudC5yZXF1ZXN0KSxcbiAgICAgICAgICAgIGlzQWpheDogICBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeS5fZ2V0SXNBamF4UmVxdWVzdCh0aGlzLl9ldmVudCksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHBhcnNlZFVybC51c2VybmFtZSlcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMuYXV0aCA9IHBhcnNlZFVybC51c2VybmFtZSArICc6JyArIHBhcnNlZFVybC5wYXNzd29yZDtcblxuICAgICAgICByZXR1cm4gbmV3IFJlcXVlc3RPcHRpb25zKHJlcXVlc3RQYXJhbXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVDb25maWd1cmVSZXNwb25zZUV2ZW50IChydWxlOiBSZXF1ZXN0RmlsdGVyUnVsZSk6IENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQge1xuICAgICAgICByZXR1cm4gbmV3IENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQocnVsZSwgdGhpcy5fbW9kaWZ5UmVzcG9uc2VGdW5jdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVJlc3BvbnNlSW5mbyAoKTogUmVzcG9uc2VJbmZvIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZUluZm8oe1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogICAgICAgICAgICAgICB0aGlzLl9ldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgfHwgU3RhdHVzQ29kZXMuT0ssXG4gICAgICAgICAgICBoZWFkZXJzOiAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb091dGdvaW5nSHR0cEhlYWRlcnModGhpcy5fZXZlbnQucmVzcG9uc2VIZWFkZXJzKSxcbiAgICAgICAgICAgIGJvZHk6ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2VCb2R5LFxuICAgICAgICAgICAgc2Vzc2lvbklkOiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIHJlcXVlc3RJZDogICAgICAgICAgICAgICAgdGhpcy5fZXZlbnQucmVxdWVzdElkLFxuICAgICAgICAgICAgaXNTYW1lT3JpZ2luUG9saWN5RmFpbGVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,52 @@
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
+ eventFactory.update(event);
34
+ await pipelineContext.onRequestHookConfigureResponse(this, eventFactory);
35
+ if (eventFactory.headersModified)
36
+ modified = true;
37
+ await NativeAutomationRequestHookEventProvider._setResponseBody({
38
+ pipelineContext,
39
+ resourceBody,
40
+ eventFactory,
41
+ event,
42
+ client,
43
+ });
44
+ await Promise.all(pipelineContext.onResponseEventData.map(async (eventData) => {
45
+ await pipelineContext.onRequestHookResponse(this, eventFactory, eventData.rule, eventData.opts);
46
+ }));
47
+ return modified;
48
+ }
49
+ }
50
+ exports.default = NativeAutomationRequestHookEventProvider;
51
+ module.exports = exports.default;
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1ob29rcy9ldmVudC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZEQUk2QjtBQUk3Qiw0Q0FBc0Q7QUFDdEQsc0NBQWtEO0FBS2xELE1BQXFCLHdDQUF5QyxTQUFRLDhDQUF3QjtJQUNsRixNQUFNLENBQUMsb0JBQW9CLENBQUUsT0FBd0M7UUFDekUsT0FBTyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBOEIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBRSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWdMO1FBQy9RLElBQUksQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsTUFBTSxLQUFJLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEQsWUFBb0QsQ0FBQyxlQUFlLENBQUMsWUFBc0IsQ0FBQyxDQUFDO1lBRTlGLE9BQU87U0FDVjtRQUdELE1BQU0scUJBQXFCLEdBQUcsd0NBQXdDLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFN0csSUFBSSxDQUFDLHFCQUFxQjtZQUN0QixPQUFPO1FBRVgsTUFBTSxXQUFXLEdBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4RixNQUFNLFlBQVksR0FBRyxJQUFBLDRCQUFtQixFQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJELFlBQW9ELENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFFLEtBQXlCLEVBQUUsV0FBK0M7UUFDOUYsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoQyxPQUFPO1FBRVgsTUFBTSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVFLE1BQU0sZUFBZSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBRSxLQUF5QixFQUFFLFlBQTJCLEVBQUUsV0FBK0MsRUFBRSxNQUFtQjtRQUNqSixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFckIsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoQyxPQUFPLEtBQUssQ0FBQztRQUVqQixNQUFNLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0UsWUFBb0QsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEUsTUFBTSxlQUFlLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXpFLElBQUssWUFBb0QsQ0FBQyxlQUFlO1lBQ3JFLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFcEIsTUFBTSx3Q0FBd0MsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM1RCxlQUFlO1lBQ2YsWUFBWTtZQUNaLFlBQVk7WUFDWixLQUFLO1lBQ0wsTUFBTTtTQUNULENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxTQUFTLEVBQUMsRUFBRTtZQUN4RSxNQUFNLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFSixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUE5REQsMkRBOERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3RvcnksXG4gICAgT25SZXNwb25zZUV2ZW50RGF0YSxcbiAgICBSZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIsXG59IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZnJvbSAnLi9waXBlbGluZS1jb250ZXh0JztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSBmcm9tICcuL2V2ZW50LWZhY3RvcnkvcmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQnO1xuaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgeyBnZXRSZXNwb25zZUFzQnVmZmVyIH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCB7IGlzUHJlZmxpZ2h0UmVxdWVzdCB9IGZyb20gJy4uL3V0aWxzL2NkcCc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvIGZyb20gJy4uL3JlcXVlc3QtcGlwZWxpbmUvY29udGV4dC1pbmZvJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlciBleHRlbmRzIFJlcXVlc3RIb29rRXZlbnRQcm92aWRlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2hhc1Jlc3BvbnNlV2l0aEJvZHkgKGNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub25SZXNwb25zZUV2ZW50RGF0YS5zb21lKChldmVudERhdGE6IE9uUmVzcG9uc2VFdmVudERhdGEpID0+IGV2ZW50RGF0YS5vcHRzLmluY2x1ZGVCb2R5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBfc2V0UmVzcG9uc2VCb2R5ICh7IHBpcGVsaW5lQ29udGV4dCwgcmVzb3VyY2VCb2R5LCBldmVudEZhY3RvcnksIGV2ZW50LCBjbGllbnQgfTogeyBwaXBlbGluZUNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQsIHJlc291cmNlQm9keTogQnVmZmVyIHwgbnVsbCwgZXZlbnRGYWN0b3J5OiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3RvcnksIGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNsaWVudDogUHJvdG9jb2xBcGkgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAocmVzb3VyY2VCb2R5Py5sZW5ndGggfHwgaXNQcmVmbGlnaHRSZXF1ZXN0KGV2ZW50KSkge1xuICAgICAgICAgICAgKGV2ZW50RmFjdG9yeSBhcyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSkuc2V0UmVzcG9uc2VCb2R5KHJlc291cmNlQm9keSBhcyBCdWZmZXIpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IGhhc09uUmVzcG9uc2VXaXRoQm9keSA9IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIuX2hhc1Jlc3BvbnNlV2l0aEJvZHkocGlwZWxpbmVDb250ZXh0KTtcblxuICAgICAgICBpZiAoIWhhc09uUmVzcG9uc2VXaXRoQm9keSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCByZXNwb25zZU9iaiAgPSBhd2FpdCBjbGllbnQuRmV0Y2guZ2V0UmVzcG9uc2VCb2R5KHsgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQgfSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGdldFJlc3BvbnNlQXNCdWZmZXIocmVzcG9uc2VPYmopO1xuXG4gICAgICAgIChldmVudEZhY3RvcnkgYXMgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkpLnNldFJlc3BvbnNlQm9keShyZXNwb25zZUJvZHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvblJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNvbnRleHRJbmZvOiBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5oYXNSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMoKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IHBpcGVsaW5lQ29udGV4dCwgZXZlbnRGYWN0b3J5IH0gPSBjb250ZXh0SW5mby5nZXRDb250ZXh0RGF0YShldmVudCk7XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmVDb250ZXh0Lm9uUmVxdWVzdEhvb2tSZXF1ZXN0KHRoaXMsIGV2ZW50RmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9uUmVzcG9uc2UgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHJlc291cmNlQm9keTogQnVmZmVyIHwgbnVsbCwgY29udGV4dEluZm86IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8sIGNsaWVudDogUHJvdG9jb2xBcGkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IG1vZGlmaWVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLmhhc1JlcXVlc3RFdmVudExpc3RlbmVycygpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHsgcGlwZWxpbmVDb250ZXh0LCBldmVudEZhY3RvcnkgfSA9IGNvbnRleHRJbmZvLmdldENvbnRleHREYXRhKGV2ZW50KTtcblxuICAgICAgICAoZXZlbnRGYWN0b3J5IGFzIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5KS51cGRhdGUoZXZlbnQpO1xuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lQ29udGV4dC5vblJlcXVlc3RIb29rQ29uZmlndXJlUmVzcG9uc2UodGhpcywgZXZlbnRGYWN0b3J5KTtcblxuICAgICAgICBpZiAoKGV2ZW50RmFjdG9yeSBhcyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSkuaGVhZGVyc01vZGlmaWVkKVxuICAgICAgICAgICAgbW9kaWZpZWQgPSB0cnVlO1xuXG4gICAgICAgIGF3YWl0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIuX3NldFJlc3BvbnNlQm9keSh7XG4gICAgICAgICAgICBwaXBlbGluZUNvbnRleHQsXG4gICAgICAgICAgICByZXNvdXJjZUJvZHksXG4gICAgICAgICAgICBldmVudEZhY3RvcnksXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocGlwZWxpbmVDb250ZXh0Lm9uUmVzcG9uc2VFdmVudERhdGEubWFwKGFzeW5jIGV2ZW50RGF0YSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQub25SZXF1ZXN0SG9va1Jlc3BvbnNlKHRoaXMsIGV2ZW50RmFjdG9yeSwgZXZlbnREYXRhLnJ1bGUsIGV2ZW50RGF0YS5vcHRzKTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHJldHVybiBtb2RpZmllZDtcbiAgICB9XG59XG4iXX0=
@@ -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,55 @@
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
+ class NativeAutomationRequestContextInfo {
11
+ constructor(testRunBridge) {
12
+ this._pipelineContexts = {};
13
+ this._eventFactories = {};
14
+ this._testRunBridge = testRunBridge;
15
+ }
16
+ _createPipelineContext(requestId) {
17
+ const pipelineContext = new pipeline_context_1.default(requestId);
18
+ this._pipelineContexts[requestId] = pipelineContext;
19
+ return pipelineContext;
20
+ }
21
+ _createEventFactory(event) {
22
+ const sessionId = this._testRunBridge.getSessionId();
23
+ const requestId = (0, cdp_1.getRequestId)(event);
24
+ 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);
25
+ this._eventFactories[requestId] = eventFactory;
26
+ return eventFactory;
27
+ }
28
+ _getEventFactory(requestId) {
29
+ return this._eventFactories[requestId];
30
+ }
31
+ init(event) {
32
+ const requestId = (0, cdp_1.getRequestId)(event);
33
+ const pipelineContext = this._createPipelineContext(requestId);
34
+ const eventFactory = this._createEventFactory(event);
35
+ pipelineContext.setRequestOptions(eventFactory);
36
+ }
37
+ dispose(requestId) {
38
+ if (!requestId)
39
+ return;
40
+ delete this._pipelineContexts[requestId];
41
+ delete this._eventFactories[requestId];
42
+ }
43
+ getPipelineContext(requestId) {
44
+ return this._pipelineContexts[requestId];
45
+ }
46
+ getContextData(event) {
47
+ const requestId = (0, cdp_1.getRequestId)(event);
48
+ const pipelineContext = this.getPipelineContext(requestId);
49
+ const eventFactory = this._getEventFactory(requestId);
50
+ return { pipelineContext, eventFactory };
51
+ }
52
+ }
53
+ exports.default = NativeAutomationRequestContextInfo;
54
+ module.exports = exports.default;
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25hdGl2ZS1hdXRvbWF0aW9uL3JlcXVlc3QtcGlwZWxpbmUvY29udGV4dC1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EseUZBQWdGO0FBQ2hGLDJIQUE0RztBQUs1RyxzQ0FBa0U7QUFFbEUsNkhBQThHO0FBTzlHLE1BQXFCLGtDQUFrQztJQUtuRCxZQUFvQixhQUE0QjtRQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQU0sYUFBYSxDQUFDO0lBQzNDLENBQUM7SUFFTyxzQkFBc0IsQ0FBRSxTQUFpQjtRQUM3QyxNQUFNLGVBQWUsR0FBRyxJQUFJLDBCQUErQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxlQUFlLENBQUM7UUFFcEQsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUVPLG1CQUFtQixDQUFFLEtBQStDO1FBQ3hFLE1BQU0sU0FBUyxHQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsTUFBTSxTQUFTLEdBQU0sSUFBQSxrQkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLElBQUEsMEJBQW9CLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksb0NBQW1DLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLHFDQUFvQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUUxSyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUUvQyxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRU8sZ0JBQWdCLENBQUUsU0FBaUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxJQUFJLENBQUUsS0FBK0M7UUFDeEQsTUFBTSxTQUFTLEdBQVMsSUFBQSxrQkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRCxNQUFNLFlBQVksR0FBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEQsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDTSxPQUFPLENBQUUsU0FBa0I7UUFDOUIsSUFBSSxDQUFDLFNBQVM7WUFDVixPQUFPO1FBRVgsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxrQkFBa0IsQ0FBRSxTQUFpQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sY0FBYyxDQUFFLEtBQStDO1FBQ2xFLE1BQU0sU0FBUyxHQUFTLElBQUEsa0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsTUFBTSxZQUFZLEdBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDN0MsQ0FBQztDQUNKO0FBM0RELHFEQTJEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9waXBlbGluZS1jb250ZXh0JztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2V2ZW50LWZhY3RvcnkvcmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudCA9IFByb3RvY29sLlBhZ2UuRnJhbWVOYXZpZ2F0ZWRFdmVudDtcbmltcG9ydCBUZXN0UnVuQnJpZGdlIGZyb20gJy4vdGVzdC1ydW4tYnJpZGdlJztcbmltcG9ydCB7IGdldFJlcXVlc3RJZCwgaXNSZXF1ZXN0UGF1c2VkRXZlbnQgfSBmcm9tICcuLi91dGlscy9jZHAnO1xuaW1wb3J0IHsgQmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5IH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5IGZyb20gJy4uL3JlcXVlc3QtaG9va3MvZXZlbnQtZmFjdG9yeS9mcmFtZS1uYXZpZ2F0ZWQtZXZlbnQtYmFzZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHREYXRhIHtcbiAgICBwaXBlbGluZUNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQ7XG4gICAgZXZlbnRGYWN0b3J5OiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3Rvcnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3BpcGVsaW5lQ29udGV4dHM6IERpY3Rpb25hcnk8TmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRGYWN0b3JpZXM6IERpY3Rpb25hcnk8QmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5PjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICh0ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlKSB7XG4gICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dHMgPSB7fTtcbiAgICAgICAgdGhpcy5fZXZlbnRGYWN0b3JpZXMgICA9IHt9O1xuICAgICAgICB0aGlzLl90ZXN0UnVuQnJpZGdlICAgID0gdGVzdFJ1bkJyaWRnZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVQaXBlbGluZUNvbnRleHQgKHJlcXVlc3RJZDogc3RyaW5nKTogTmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dCB7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lQ29udGV4dCA9IG5ldyBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0KHJlcXVlc3RJZCk7XG5cbiAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0c1tyZXF1ZXN0SWRdID0gcGlwZWxpbmVDb250ZXh0O1xuXG4gICAgICAgIHJldHVybiBwaXBlbGluZUNvbnRleHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlRXZlbnRGYWN0b3J5IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50IHwgRnJhbWVOYXZpZ2F0ZWRFdmVudCk6IEJhc2VSZXF1ZXN0SG9va0V2ZW50RmFjdG9yeSB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25JZCAgICA9IHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0U2Vzc2lvbklkKCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCAgICA9IGdldFJlcXVlc3RJZChldmVudCk7XG4gICAgICAgIGNvbnN0IGV2ZW50RmFjdG9yeSA9IGlzUmVxdWVzdFBhdXNlZEV2ZW50KGV2ZW50KSA/IG5ldyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeShldmVudCwgc2Vzc2lvbklkKSA6IG5ldyBGcmFtZU5hdmlnYXRlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkoZXZlbnQsIHNlc3Npb25JZCk7XG5cbiAgICAgICAgdGhpcy5fZXZlbnRGYWN0b3JpZXNbcmVxdWVzdElkXSA9IGV2ZW50RmFjdG9yeTtcblxuICAgICAgICByZXR1cm4gZXZlbnRGYWN0b3J5O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEV2ZW50RmFjdG9yeSAocmVxdWVzdElkOiBzdHJpbmcpOiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3Rvcnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRGYWN0b3JpZXNbcmVxdWVzdElkXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCB8IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdElkICAgICAgID0gZ2V0UmVxdWVzdElkKGV2ZW50KTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVDb250ZXh0ID0gdGhpcy5fY3JlYXRlUGlwZWxpbmVDb250ZXh0KHJlcXVlc3RJZCk7XG4gICAgICAgIGNvbnN0IGV2ZW50RmFjdG9yeSAgICA9IHRoaXMuX2NyZWF0ZUV2ZW50RmFjdG9yeShldmVudCk7XG5cbiAgICAgICAgcGlwZWxpbmVDb250ZXh0LnNldFJlcXVlc3RPcHRpb25zKGV2ZW50RmFjdG9yeSk7XG4gICAgfVxuICAgIHB1YmxpYyBkaXNwb3NlIChyZXF1ZXN0SWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0SWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX3BpcGVsaW5lQ29udGV4dHNbcmVxdWVzdElkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50RmFjdG9yaWVzW3JlcXVlc3RJZF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBpcGVsaW5lQ29udGV4dCAocmVxdWVzdElkOiBzdHJpbmcpOiBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BpcGVsaW5lQ29udGV4dHNbcmVxdWVzdElkXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGV4dERhdGEgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQgfCBGcmFtZU5hdmlnYXRlZEV2ZW50KTogQ29udGV4dERhdGEge1xuICAgICAgICBjb25zdCByZXF1ZXN0SWQgICAgICAgPSBnZXRSZXF1ZXN0SWQoZXZlbnQpO1xuICAgICAgICBjb25zdCBwaXBlbGluZUNvbnRleHQgPSB0aGlzLmdldFBpcGVsaW5lQ29udGV4dChyZXF1ZXN0SWQpO1xuICAgICAgICBjb25zdCBldmVudEZhY3RvcnkgICAgPSB0aGlzLl9nZXRFdmVudEZhY3RvcnkocmVxdWVzdElkKTtcblxuICAgICAgICByZXR1cm4geyBwaXBlbGluZUNvbnRleHQsIGV2ZW50RmFjdG9yeSB9O1xuICAgIH1cbn1cbiJdfQ==