testcafe
Version:
Automated browser testing for the modern web development stack.
98 lines • 15.5 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const testcafe_hammerhead_1 = require("testcafe-hammerhead");
const lodash_1 = require("lodash");
const http_status_codes_1 = require("http-status-codes");
const headers_1 = require("../../utils/headers");
const lowercase_object_keys_1 = __importDefault(require("../../../utils/lowercase-object-keys"));
class RequestPausedEventBasedEventFactory extends testcafe_hammerhead_1.BaseRequestHookEventFactory {
constructor(event, sessionId) {
super();
this._event = event;
this._responseBody = Buffer.alloc(0);
this._sessionId = sessionId;
this._modifyResponseFunction = this._createModifyResponseFunctions();
this.headersModified = false;
}
_createModifyResponseFunctions() {
return {
setHeader: (name, value) => {
const header = this._event.responseHeaders.find(h => h.name.toLowerCase() === name.toLowerCase());
if (!header)
this._event.responseHeaders.push({ name, value });
else
header.value = value;
this.headersModified = true;
},
removeHeader: (name) => {
(0, lodash_1.remove)(this._event.responseHeaders, header => header.name.toLowerCase() === name.toLowerCase());
this.headersModified = true;
},
};
}
static _getRequestData(request) {
if (request.postData)
return Buffer.from(request.postData);
return Buffer.alloc(0);
}
static _getIsAjaxRequest(event) {
return event.resourceType === 'XHR'
|| event.resourceType === 'Fetch';
}
update(event) {
this._event = event;
}
setResponseBody(body) {
this._responseBody = body;
}
createRequestInfo() {
const { requestId, request } = this._event;
return new testcafe_hammerhead_1.RequestInfo({
requestId,
sessionId: this._sessionId,
userAgent: testcafe_hammerhead_1.RequestInfo.getUserAgent(request.headers),
url: request.url,
method: request.method.toLowerCase(),
headers: Object.assign({}, (0, lowercase_object_keys_1.default)(request.headers)),
body: RequestPausedEventBasedEventFactory._getRequestData(request),
isAjax: RequestPausedEventBasedEventFactory._getIsAjaxRequest(this._event),
});
}
createRequestOptions() {
const parsedUrl = new URL(this._event.request.url);
const requestParams = {
method: this._event.request.method,
url: this._event.request.url,
protocol: parsedUrl.protocol,
hostname: parsedUrl.hostname,
host: parsedUrl.host,
port: parsedUrl.port,
path: parsedUrl.pathname,
headers: Object.assign({}, (0, lowercase_object_keys_1.default)(this._event.request.headers)),
body: RequestPausedEventBasedEventFactory._getRequestData(this._event.request),
isAjax: RequestPausedEventBasedEventFactory._getIsAjaxRequest(this._event),
};
if (parsedUrl.username)
requestParams.auth = parsedUrl.username + ':' + parsedUrl.password;
return new testcafe_hammerhead_1.RequestOptions(requestParams, true);
}
createConfigureResponseEvent(rule) {
return new testcafe_hammerhead_1.ConfigureResponseEvent(rule, this._modifyResponseFunction);
}
createResponseInfo() {
return new testcafe_hammerhead_1.ResponseInfo({
statusCode: this._event.responseStatusCode || http_status_codes_1.StatusCodes.OK,
headers: (0, headers_1.convertToOutgoingHttpHeaders)(this._event.responseHeaders),
body: this._responseBody,
sessionId: this._sessionId,
requestId: this._event.requestId,
isSameOriginPolicyFailed: false,
});
}
}
exports.default = RequestPausedEventBasedEventFactory;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1ob29rcy9ldmVudC1mYWN0b3J5L3JlcXVlc3QtcGF1c2VkLWV2ZW50LWJhc2VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkRBUzZCO0FBQzdCLG1DQUFnQztBQUtoQyx5REFBZ0Q7QUFDaEQsaURBQW1FO0FBQ25FLGlHQUF1RTtBQUd2RSxNQUFxQixtQ0FBb0MsU0FBUSxpREFBMkI7SUFPeEYsWUFBb0IsS0FBeUIsRUFBRSxTQUFpQjtRQUM1RCxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxNQUFNLEdBQW9CLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFhLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBZ0IsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUNyRSxJQUFJLENBQUMsZUFBZSxHQUFXLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBRU8sOEJBQThCO1FBQ2xDLE9BQU87WUFDSCxTQUFTLEVBQUUsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQ3ZDLE1BQU0sTUFBTSxHQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBaUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUVySCxJQUFJLENBQUMsTUFBTTtvQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWlDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENB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RixNQUFNLEVBQUksbUNBQW1DLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUMvRSxDQUFDO1FBRUYsSUFBSSxTQUFTLENBQUMsUUFBUTtZQUNsQixhQUFhLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFFdkUsT0FBTyxJQUFJLG9DQUFjLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSw0QkFBNEIsQ0FBRSxJQUF1QjtRQUN4RCxPQUFPLElBQUksNENBQXNCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsT0FBTyxJQUFJLGtDQUFZLENBQUM7WUFDcEIsVUFBVSxFQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixJQUFJLCtCQUFXLENBQUMsRUFBRTtZQUMxRSxPQUFPLEVBQW1CLElBQUEsc0NBQTRCLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDbkYsSUFBSSxFQUFzQixJQUFJLENBQUMsYUFBYTtZQUM1QyxTQUFTLEVBQWlCLElBQUksQ0FBQyxVQUFVO1lBQ3pDLFNBQVMsRUFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQy9DLHdCQUF3QixFQUFFLEtBQUs7U0FDbEMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBNUdELHNEQTRHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5LFxuICAgIENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQsXG4gICAgTW9kaWZ5UmVzcG9uc2VGdW5jdGlvbnMsXG4gICAgUmVxdWVzdEZpbHRlclJ1bGUsXG4gICAgUmVxdWVzdEluZm8sXG4gICAgUmVxdWVzdE9wdGlvbnMsXG4gICAgUmVxdWVzdE9wdGlvbnNQYXJhbXMsXG4gICAgUmVzcG9uc2VJbmZvLFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcbmltcG9ydCB7IHJlbW92ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBSZXF1ZXN0ID0gUHJvdG9jb2wuTmV0d29yay5SZXF1ZXN0O1xuaW1wb3J0IEhlYWRlckVudHJ5ID0gUHJvdG9jb2wuRmV0Y2guSGVhZGVyRW50cnk7XG5pbXBvcnQgeyBTdGF0dXNDb2RlcyB9IGZyb20gJ2h0dHAtc3RhdHVzLWNvZGVzJztcbmltcG9ydCB7IGNvbnZlcnRUb091dGdvaW5nSHR0cEhlYWRlcnMgfSBmcm9tICcuLi8uLi91dGlscy9oZWFkZXJzJztcbmltcG9ydCBsb3dlcmNhc2VPYmplY3RLZXlzIGZyb20gJy4uLy4uLy4uL3V0aWxzL2xvd2VyY2FzZS1vYmplY3Qta2V5cyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkgZXh0ZW5kcyBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3Rvcnkge1xuICAgIHByaXZhdGUgX2V2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQ7XG4gICAgcHJpdmF0ZSBfcmVzcG9uc2VCb2R5OiBCdWZmZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kaWZ5UmVzcG9uc2VGdW5jdGlvbjogTW9kaWZ5UmVzcG9uc2VGdW5jdGlvbnM7XG4gICAgcHVibGljIGhlYWRlcnNNb2RpZmllZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLl9ldmVudCAgICAgICAgICAgICAgICAgID0gZXZlbnQ7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlQm9keSAgICAgICAgICAgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICAgIHRoaXMuX3Nlc3Npb25JZCAgICAgICAgICAgICAgPSBzZXNzaW9uSWQ7XG4gICAgICAgIHRoaXMuX21vZGlmeVJlc3BvbnNlRnVuY3Rpb24gPSB0aGlzLl9jcmVhdGVNb2RpZnlSZXNwb25zZUZ1bmN0aW9ucygpO1xuICAgICAgICB0aGlzLmhlYWRlcnNNb2RpZmllZCAgICAgICAgID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlTW9kaWZ5UmVzcG9uc2VGdW5jdGlvbnMgKCk6IE1vZGlmeVJlc3BvbnNlRnVuY3Rpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNldEhlYWRlcjogKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9ICh0aGlzLl9ldmVudC5yZXNwb25zZUhlYWRlcnMgYXMgSGVhZGVyRW50cnlbXSkuZmluZChoID0+IGgubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFoZWFkZXIpXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLl9ldmVudC5yZXNwb25zZUhlYWRlcnMgYXMgSGVhZGVyRW50cnlbXSkucHVzaCh7IG5hbWUsIHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlcnNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlSGVhZGVyOiAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlKHRoaXMuX2V2ZW50LnJlc3BvbnNlSGVhZGVycyBhcyBIZWFkZXJFbnRyeVtdLCBoZWFkZXIgPT4gaGVhZGVyLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyc01vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dldFJlcXVlc3REYXRhIChyZXF1ZXN0OiBSZXF1ZXN0KTogQnVmZmVyIHtcbiAgICAgICAgaWYgKHJlcXVlc3QucG9zdERhdGEpXG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20ocmVxdWVzdC5wb3N0RGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfZ2V0SXNBamF4UmVxdWVzdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQucmVzb3VyY2VUeXBlID09PSAnWEhSJ1xuICAgICAgICAgICAgfHwgZXZlbnQucmVzb3VyY2VUeXBlID09PSAnRmV0Y2gnO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGUgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXZlbnQgPSBldmVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UmVzcG9uc2VCb2R5IChib2R5OiBCdWZmZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VCb2R5ID0gYm9keTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUmVxdWVzdEluZm8gKCk6IFJlcXVlc3RJbmZvIHtcbiAgICAgICAgY29uc3QgeyByZXF1ZXN0SWQsIHJlcXVlc3QgfSA9IHRoaXMuX2V2ZW50O1xuXG4gICAgICAgIHJldHVybiBuZXcgUmVxdWVzdEluZm8oe1xuICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLl9zZXNzaW9uSWQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6IFJlcXVlc3RJbmZvLmdldFVzZXJBZ2VudChyZXF1ZXN0LmhlYWRlcnMpLFxuICAgICAgICAgICAgdXJsOiAgICAgICByZXF1ZXN0LnVybCxcbiAgICAgICAgICAgIG1ldGhvZDogICAgcmVxdWVzdC5tZXRob2QudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIGhlYWRlcnM6ICAgT2JqZWN0LmFzc2lnbih7fSwgbG93ZXJjYXNlT2JqZWN0S2V5cyhyZXF1ZXN0LmhlYWRlcnMpKSxcbiAgICAgICAgICAgIGJvZHk6ICAgICAgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkuX2dldFJlcXVlc3REYXRhKHJlcXVlc3QpLFxuICAgICAgICAgICAgaXNBamF4OiAgICBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeS5fZ2V0SXNBamF4UmVxdWVzdCh0aGlzLl9ldmVudCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVSZXF1ZXN0T3B0aW9ucyAoKTogUmVxdWVzdE9wdGlvbnMge1xuICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSBuZXcgVVJMKHRoaXMuX2V2ZW50LnJlcXVlc3QudXJsKTtcblxuICAgICAgICBjb25zdCByZXF1ZXN0UGFyYW1zOiBSZXF1ZXN0T3B0aW9uc1BhcmFtcyA9IHtcbiAgICAgICAgICAgIG1ldGhvZDogICB0aGlzLl9ldmVudC5yZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgIHVybDogICAgICB0aGlzLl9ldmVudC5yZXF1ZXN0LnVybCxcbiAgICAgICAgICAgIHByb3RvY29sOiBwYXJzZWRVcmwucHJvdG9jb2wsXG4gICAgICAgICAgICBob3N0bmFtZTogcGFyc2VkVXJsLmhvc3RuYW1lLFxuICAgICAgICAgICAgaG9zdDogICAgIHBhcnNlZFVybC5ob3N0LFxuICAgICAgICAgICAgcG9ydDogICAgIHBhcnNlZFVybC5wb3J0LFxuICAgICAgICAgICAgcGF0aDogICAgIHBhcnNlZFVybC5wYXRobmFtZSxcbiAgICAgICAgICAgIGhlYWRlcnM6ICBPYmplY3QuYXNzaWduKHt9LCBsb3dlcmNhc2VPYmplY3RLZXlzKHRoaXMuX2V2ZW50LnJlcXVlc3QuaGVhZGVycykpLFxuICAgICAgICAgICAgYm9keTogICAgIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5Ll9nZXRSZXF1ZXN0RGF0YSh0aGlzLl9ldmVudC5yZXF1ZXN0KSxcbiAgICAgICAgICAgIGlzQWpheDogICBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeS5fZ2V0SXNBamF4UmVxdWVzdCh0aGlzLl9ldmVudCksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHBhcnNlZFVybC51c2VybmFtZSlcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbXMuYXV0aCA9IHBhcnNlZFVybC51c2VybmFtZSArICc6JyArIHBhcnNlZFVybC5wYXNzd29yZDtcblxuICAgICAgICByZXR1cm4gbmV3IFJlcXVlc3RPcHRpb25zKHJlcXVlc3RQYXJhbXMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVDb25maWd1cmVSZXNwb25zZUV2ZW50IChydWxlOiBSZXF1ZXN0RmlsdGVyUnVsZSk6IENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQge1xuICAgICAgICByZXR1cm4gbmV3IENvbmZpZ3VyZVJlc3BvbnNlRXZlbnQocnVsZSwgdGhpcy5fbW9kaWZ5UmVzcG9uc2VGdW5jdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVJlc3BvbnNlSW5mbyAoKTogUmVzcG9uc2VJbmZvIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZUluZm8oe1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogICAgICAgICAgICAgICB0aGlzLl9ldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgfHwgU3RhdHVzQ29kZXMuT0ssXG4gICAgICAgICAgICBoZWFkZXJzOiAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb091dGdvaW5nSHR0cEhlYWRlcnModGhpcy5fZXZlbnQucmVzcG9uc2VIZWFkZXJzKSxcbiAgICAgICAgICAgIGJvZHk6ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2VCb2R5LFxuICAgICAgICAgICAgc2Vzc2lvbklkOiAgICAgICAgICAgICAgICB0aGlzLl9zZXNzaW9uSWQsXG4gICAgICAgICAgICByZXF1ZXN0SWQ6ICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50LnJlcXVlc3RJZCxcbiAgICAgICAgICAgIGlzU2FtZU9yaWdpblBvbGljeUZhaWxlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==