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.
- package/CHANGELOG.md +150 -0
- package/LICENSE +1 -1
- package/README.md +40 -46
- package/bin/testcafe-with-v8-flag-filter.js +10 -16
- package/lib/api/exportable-lib/index.js +1 -11
- package/lib/api/structure/test.js +4 -11
- package/lib/api/test-controller/execution-context.js +4 -2
- package/lib/api/test-controller/index.js +8 -10
- package/lib/api/test-run-tracker.js +1 -1
- package/lib/assertions/executor.js +2 -11
- package/lib/browser/connection/gateway/index.js +272 -0
- package/lib/browser/connection/gateway/status.js +10 -0
- package/lib/browser/connection/index.js +60 -47
- package/lib/browser/connection/service-routes.js +4 -2
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +3 -2
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +48 -23
- package/lib/browser/provider/built-in/dedicated/edge/index.js +4 -1
- package/lib/browser/provider/index.js +13 -4
- package/lib/browser/provider/plugin-host.js +7 -1
- package/lib/cli/argument-parser/index.js +10 -16
- package/lib/cli/cli.js +4 -13
- package/lib/cli/remotes-wizard.js +2 -1
- package/lib/cli/utils/should-move-option-to-end.js +17 -0
- package/lib/client/automation/deps/hammerhead.js +24 -0
- package/lib/client/automation/deps/testcafe-core.js +24 -0
- package/lib/client/automation/index.js +567 -187
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/automation/playback/press/get-key-info.js +44 -0
- package/lib/client/automation/playback/press/utils.js +142 -0
- package/lib/client/automation/utils/get-key-code.js +15 -0
- package/lib/client/automation/utils/get-key-identifier.js +14 -0
- package/lib/client/automation/utils/is-letter.js +7 -0
- package/lib/client/automation/utils/key-identifier-maps.js +93 -0
- package/lib/client/browser/idle-page/index.html.mustache +2 -2
- package/lib/client/browser/idle-page/index.js +24 -11
- package/lib/client/core/index.js +67 -13
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/core/utils/array.js +77 -0
- package/lib/client/core/utils/dom.js +459 -0
- package/lib/client/core/utils/send-request-to-frame.js +22 -0
- package/lib/client/core/utils/style.js +102 -0
- package/lib/client/core/utils/values/boundary-values.js +41 -0
- package/lib/client/driver/index.js +270 -242
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/test-run/iframe.js.mustache +6 -6
- package/lib/client/test-run/index.js.mustache +37 -33
- package/lib/client/ui/index.js +3238 -54
- package/lib/client/ui/index.min.js +1 -1
- package/lib/client/ui/sprite.svg +15 -0
- package/lib/client/ui/styles.css +184 -41
- package/lib/compiler/babel/load-libs.js +6 -6
- package/lib/compiler/compilers.js +7 -7
- package/lib/compiler/index.js +6 -6
- package/lib/compiler/interfaces.js +1 -1
- package/lib/compiler/test-file/add-export-api.js +3 -3
- package/lib/compiler/test-file/api-based.js +8 -37
- package/lib/compiler/test-file/formats/es-next/compiler.js +5 -5
- package/lib/compiler/test-file/formats/typescript/compiler.js +9 -9
- package/lib/compiler/test-file/get-exportable-lib-path.js +3 -3
- package/lib/configuration/configuration-base.js +9 -6
- package/lib/configuration/default-values.js +3 -3
- package/lib/configuration/formats.js +9 -5
- package/lib/configuration/interfaces.js +1 -1
- package/lib/configuration/option-names.js +3 -4
- package/lib/configuration/run-option-names.js +2 -2
- package/lib/configuration/testcafe-configuration.js +41 -24
- package/lib/configuration/types.js +1 -1
- package/lib/configuration/utils.js +32 -0
- package/lib/custom-client-scripts/client-script.js +2 -2
- package/lib/custom-client-scripts/get-code.js +3 -3
- package/lib/custom-client-scripts/routing.js +10 -12
- package/lib/errors/runtime/templates.js +3 -2
- package/lib/errors/test-run/templates.js +4 -1
- package/lib/errors/types.js +3 -1
- package/lib/index.js +6 -31
- package/lib/live/bootstrapper.js +3 -3
- package/lib/live/test-runner.js +9 -7
- package/lib/native-automation/add-custom-debug-formatters.js +23 -0
- package/lib/native-automation/api-base.js +27 -0
- package/lib/native-automation/client/event-descriptor.js +118 -0
- package/lib/native-automation/client/input.js +46 -0
- package/lib/native-automation/client/key-press/utils.js +31 -0
- package/lib/native-automation/client/types.js +11 -0
- package/lib/native-automation/client/utils.js +54 -0
- package/lib/native-automation/cookie-provider.js +115 -0
- package/lib/native-automation/empty-page-markup.js +11 -0
- package/lib/native-automation/error-route.js +7 -0
- package/lib/native-automation/errors.js +20 -0
- package/lib/native-automation/index.js +53 -0
- package/lib/native-automation/request-hooks/event-factory/frame-navigated-event-based.js +40 -0
- package/lib/native-automation/request-hooks/event-factory/request-paused-event-based.js +94 -0
- package/lib/native-automation/request-hooks/event-provider.js +55 -0
- package/lib/native-automation/request-hooks/pipeline-context.js +11 -0
- package/lib/{proxyless → native-automation}/request-pipeline/constants.js +1 -1
- package/lib/native-automation/request-pipeline/context-info.js +58 -0
- package/lib/native-automation/request-pipeline/index.js +329 -0
- package/lib/native-automation/request-pipeline/resendAuthRequest.js +23 -0
- package/lib/native-automation/request-pipeline/safe-api.js +66 -0
- package/lib/native-automation/request-pipeline/special-handlers.js +76 -0
- package/lib/native-automation/request-pipeline/test-run-bridge.js +45 -0
- package/lib/native-automation/resource-injector.js +175 -0
- package/lib/native-automation/session-storage/index.js +43 -0
- package/lib/native-automation/storages-provider.js +17 -0
- package/lib/native-automation/types.js +12 -0
- package/lib/native-automation/utils/cdp.js +71 -0
- package/lib/native-automation/utils/convert.js +11 -0
- package/lib/native-automation/utils/get-active-client.js +8 -0
- package/lib/native-automation/utils/headers.js +30 -0
- package/lib/native-automation/utils/string.js +32 -0
- package/lib/reporter/index.js +52 -4
- package/lib/reporter/interfaces.js +1 -1
- package/lib/reporter/plugin-host.js +44 -4
- package/lib/reporter/plugin-methods.js +2 -1
- package/lib/reporter/report-data-log.js +25 -0
- package/lib/role/role.js +4 -39
- package/lib/runner/bootstrapper.js +40 -15
- package/lib/runner/browser-job.js +4 -5
- package/lib/runner/fixture-hook-controller.js +1 -7
- package/lib/runner/index.js +87 -94
- package/lib/runner/interfaces.js +1 -1
- package/lib/runner/task/index.js +2 -32
- package/lib/runner/test-run-controller.js +46 -4
- package/lib/shared/errors/index.js +8 -2
- package/lib/shared/utils/is-file-protocol.js +2 -2
- package/lib/test-run/bookmark.js +5 -23
- package/lib/test-run/commands/actions.js +16 -4
- package/lib/test-run/commands/service.js +2 -3
- package/lib/test-run/commands/type.js +2 -1
- package/lib/test-run/commands/utils.js +4 -2
- package/lib/test-run/cookies/base.js +4 -1
- package/lib/test-run/cookies/factory.js +4 -4
- package/lib/test-run/cookies/provider.js +9 -2
- package/lib/test-run/execute-js-expression/index.js +4 -2
- package/lib/test-run/index.js +35 -151
- package/lib/test-run/request/create-request-options.js +37 -24
- package/lib/test-run/request/send.js +2 -3
- package/lib/test-run/role-provider.js +5 -5
- package/lib/test-run/session-controller.js +5 -5
- package/lib/test-run/storages/factory.js +4 -4
- package/lib/testcafe.js +17 -18
- package/lib/utils/check-is-vm.js +58 -0
- package/lib/utils/debug-loggers.js +9 -7
- package/lib/utils/get-browser.js +5 -2
- package/lib/utils/get-options/boolean-or-object-option.js +18 -0
- package/lib/utils/get-options/quarantine.js +10 -13
- package/lib/utils/get-options/skip-js-errors.js +12 -16
- package/lib/utils/parse-user-agent.js +20 -13
- package/lib/utils/string.js +1 -1
- package/package.json +14 -11
- package/ts-defs/index.d.ts +12 -2
- package/ts-defs/selectors.d.ts +8 -1
- package/ts-defs/testcafe-scripts.d.ts +8 -1
- package/lib/browser/connection/gateway.js +0 -205
- package/lib/compiler/test-file/test-file-temp-variable-name.js +0 -6
- package/lib/dashboard/config-storage.js +0 -26
- package/lib/dashboard/connector.js +0 -84
- package/lib/dashboard/documentation-url.js +0 -6
- package/lib/dashboard/formatting.js +0 -26
- package/lib/dashboard/get-dashboard-url.js +0 -10
- package/lib/dashboard/get-default-project-link.js +0 -23
- package/lib/dashboard/get-env-options.js +0 -26
- package/lib/dashboard/index.js +0 -145
- package/lib/dashboard/interfaces.js +0 -3
- package/lib/dashboard/messages.js +0 -21
- package/lib/proxyless/add-custom-debug-formatters.js +0 -22
- package/lib/proxyless/api-base.js +0 -25
- package/lib/proxyless/client/event-simulator.js +0 -40
- package/lib/proxyless/client/types.js +0 -11
- package/lib/proxyless/client/utils.js +0 -24
- package/lib/proxyless/cookie-provider.js +0 -87
- package/lib/proxyless/default-setup-options.js +0 -9
- package/lib/proxyless/empty-page-markup.js +0 -11
- package/lib/proxyless/error-route.js +0 -7
- package/lib/proxyless/index.js +0 -53
- package/lib/proxyless/request-hooks/event-factory/frame-navigated-event-based.js +0 -40
- package/lib/proxyless/request-hooks/event-factory/request-paused-event-based.js +0 -95
- package/lib/proxyless/request-hooks/event-provider.js +0 -52
- package/lib/proxyless/request-hooks/pipeline-context.js +0 -11
- package/lib/proxyless/request-pipeline/context-info.js +0 -55
- package/lib/proxyless/request-pipeline/index.js +0 -230
- package/lib/proxyless/request-pipeline/resendAuthRequest.js +0 -23
- package/lib/proxyless/request-pipeline/safe-api.js +0 -62
- package/lib/proxyless/request-pipeline/special-handlers.js +0 -73
- package/lib/proxyless/request-pipeline/test-run-bridge.js +0 -45
- package/lib/proxyless/resource-injector.js +0 -162
- package/lib/proxyless/session-storage/index.js +0 -39
- package/lib/proxyless/storages-provider.js +0 -17
- package/lib/proxyless/types.js +0 -10
- package/lib/proxyless/utils/cdp.js +0 -66
- package/lib/proxyless/utils/get-active-client.js +0 -8
- package/lib/proxyless/utils/headers.js +0 -30
- package/lib/proxyless/utils/string.js +0 -32
- package/lib/services/compiler/esm-runtime-holder-name.js +0 -6
- package/lib/services/compiler/host.js +0 -370
- package/lib/services/compiler/interfaces.js +0 -3
- package/lib/services/compiler/io.js +0 -10
- package/lib/services/compiler/protocol.js +0 -17
- package/lib/services/compiler/service-loader.js +0 -18
- package/lib/services/compiler/service.js +0 -361
- package/lib/services/compiler/test-run-proxy.js +0 -156
- package/lib/services/interfaces.js +0 -3
- package/lib/services/process-title.js +0 -10
- package/lib/services/serialization/prepare-options.js +0 -23
- package/lib/services/serialization/replicator/create-replicator.js +0 -58
- package/lib/services/serialization/replicator/interfaces.js +0 -3
- package/lib/services/serialization/replicator/transforms/base-transform.js +0 -16
- package/lib/services/serialization/replicator/transforms/browser-console-messages-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +0 -24
- package/lib/services/serialization/replicator/transforms/command-base-trasform/assertion-command-constructors.js +0 -28
- package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +0 -66
- package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +0 -49
- package/lib/services/serialization/replicator/transforms/command-base-trasform/types.js +0 -3
- package/lib/services/serialization/replicator/transforms/configure-response-event-option-transform.js +0 -21
- package/lib/services/serialization/replicator/transforms/custom-error-transform.js +0 -29
- package/lib/services/serialization/replicator/transforms/function-marker-transform/index.js +0 -21
- package/lib/services/serialization/replicator/transforms/function-marker-transform/marker.js +0 -9
- package/lib/services/serialization/replicator/transforms/promise-marker-transform/index.js +0 -21
- package/lib/services/serialization/replicator/transforms/promise-marker-transform/marker.js +0 -9
- package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +0 -22
- package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/index.js +0 -22
- package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/marker.js +0 -6
- package/lib/services/serialization/replicator/transforms/request-filter-rule-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/request-hook-event-data-transform.js +0 -41
- package/lib/services/serialization/replicator/transforms/response-mock-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/role-transform.js +0 -21
- package/lib/services/serialization/replicator/transforms/testcafe-error-list-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/url-transform.js +0 -23
- package/lib/services/serialization/test-structure.js +0 -91
- package/lib/services/utils/ipc/interfaces.js +0 -29
- package/lib/services/utils/ipc/io.js +0 -109
- package/lib/services/utils/ipc/message.js +0 -84
- package/lib/services/utils/ipc/packet.js +0 -57
- package/lib/services/utils/ipc/proxy.js +0 -94
- package/lib/services/utils/ipc/transport.js +0 -65
- 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,
|
|
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
|