testcafe
Version:
Automated browser testing for the modern web development stack.
45 lines • 8.01 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.sendRequestThroughAPI = exports.send = void 0;
const create_request_options_1 = require("./create-request-options");
const process_response_data_1 = require("./process-response-data");
const http_headers_1 = __importDefault(require("../../utils/http-headers"));
const runtime_1 = require("../../errors/runtime");
const types_1 = require("../../errors/types");
const testcafe_hammerhead_1 = require("testcafe-hammerhead");
async function send(requestOptions, rawResponse) {
const request = new testcafe_hammerhead_1.DestinationRequest(requestOptions);
const dataWaiter = new Promise(resolve => {
request.on('response', (res) => resolve(res));
request.on('error', (err) => resolve(err.message));
request.on('fatalError', (message) => resolve(message));
});
const data = await dataWaiter;
if (typeof data === 'string')
return data;
const body = await (0, process_response_data_1.processResponseData)(data, rawResponse);
return {
status: data.statusCode,
statusText: data.statusMessage,
headers: data.headers,
body: body,
};
}
exports.send = send;
async function sendRequestThroughAPI(testRun, options, callsite) {
const currentPageUrl = new URL(await testRun.getCurrentUrl());
const requestOptions = await (0, create_request_options_1.createRequestOptions)(currentPageUrl, testRun, options, callsite);
const data = await send(requestOptions, options.rawResponse);
if (typeof data === 'string')
throw new runtime_1.RequestRuntimeError(callsite, types_1.RUNTIME_ERRORS.requestRuntimeError, data.replace(/<.*?(?:>|$)/g, ''));
const setCookie = data.headers[http_headers_1.default.setCookie];
const sameOrigin = !currentPageUrl.host || (0, testcafe_hammerhead_1.sameOriginCheck)(currentPageUrl.href, requestOptions.url);
if (setCookie && (sameOrigin || options.withCredentials))
await testRun.cookieProvider.setCookies(setCookie, currentPageUrl.href);
return data;
}
exports.sendRequestThroughAPI = sendRequestThroughAPI;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9yZXF1ZXN0L3NlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EscUVBQWdFO0FBQ2hFLG1FQUE4RDtBQUM5RCw0RUFBb0Q7QUFDcEQsa0RBQTJEO0FBRTNELDhDQUFvRDtBQUVwRCw2REFJNkI7QUFJdEIsS0FBSyxVQUFVLElBQUksQ0FBRSxjQUE4QixFQUFFLFdBQXFCO0lBQzdFLE1BQU0sT0FBTyxHQUFHLElBQUksd0NBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQWlDLE9BQU8sQ0FBQyxFQUFFO1FBQ3JFLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBMEIsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxNQUFNLFVBQVUsQ0FBQztJQUU5QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFFaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLDJDQUFtQixFQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUUxRCxPQUFPO1FBQ0gsTUFBTSxFQUFNLElBQUksQ0FBQyxVQUFVO1FBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYTtRQUM5QixPQUFPLEVBQUssSUFBSSxDQUFDLE9BQU87UUFDeEIsSUFBSSxFQUFRLElBQUk7S0FDbkIsQ0FBQztBQUNOLENBQUM7QUF0QkQsb0JBc0JDO0FBRU0sS0FBSyxVQUFVLHFCQUFxQixDQUFFLE9BQWdCLEVBQUUsT0FBK0IsRUFBRSxRQUErQjtJQUMzSCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBRTlELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBQSw2Q0FBb0IsRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUU5RixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTdELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtRQUN4QixNQUFNLElBQUksNkJBQW1CLENBQUMsUUFBUSxFQUFFLHNCQUFjLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVsSCxNQUFNLFNBQVMsR0FBSyxJQUFJLENBQUMsT0FBK0IsQ0FBQyxzQkFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sVUFBVSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxJQUFBLHFDQUFlLEVBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFcEcsSUFBSSxTQUFTLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNwRCxNQUFNLE9BQU8sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFNUUsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQWpCRCxzREFpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGVzdFJ1biBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgeyBJbmNvbWluZ0h0dHBIZWFkZXJzLCBJbmNvbWluZ01lc3NhZ2UgfSBmcm9tICdodHRwJztcbmltcG9ydCB7IEV4dGVybmFsUmVxdWVzdE9wdGlvbnMsIFJlc3BvbnNlT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBjcmVhdGVSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vY3JlYXRlLXJlcXVlc3Qtb3B0aW9ucyc7XG5pbXBvcnQgeyBwcm9jZXNzUmVzcG9uc2VEYXRhIH0gZnJvbSAnLi9wcm9jZXNzLXJlc3BvbnNlLWRhdGEnO1xuaW1wb3J0IEhUVFBfSEVBREVSUyBmcm9tICcuLi8uLi91dGlscy9odHRwLWhlYWRlcnMnO1xuaW1wb3J0IHsgUmVxdWVzdFJ1bnRpbWVFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IENhbGxzaXRlUmVjb3JkIH0gZnJvbSAnQGRldmV4cHJlc3MvY2FsbHNpdGUtcmVjb3JkJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgICBEZXN0aW5hdGlvblJlcXVlc3QsXG4gICAgc2FtZU9yaWdpbkNoZWNrLFxuICAgIFJlcXVlc3RPcHRpb25zLFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxudHlwZSBTdHJpY3RJbmNvbWluZ01lc3NhZ2UgPSBJbmNvbWluZ01lc3NhZ2UgJiB7IHN0YXR1c0NvZGU6IG51bWJlcjsgc3RhdHVzTWVzc2FnZTogc3RyaW5nIH07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kIChyZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnMsIHJhd1Jlc3BvbnNlPzogYm9vbGVhbik6IFByb21pc2U8UmVzcG9uc2VPcHRpb25zIHwgc3RyaW5nPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBEZXN0aW5hdGlvblJlcXVlc3QocmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgY29uc3QgZGF0YVdhaXRlciA9IG5ldyBQcm9taXNlPFN0cmljdEluY29taW5nTWVzc2FnZSB8IHN0cmluZz4ocmVzb2x2ZSA9PiB7XG4gICAgICAgIHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgKHJlczogU3RyaWN0SW5jb21pbmdNZXNzYWdlKSA9PiByZXNvbHZlKHJlcykpO1xuICAgICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiByZXNvbHZlKGVyci5tZXNzYWdlKSk7XG4gICAgICAgIHJlcXVlc3Qub24oJ2ZhdGFsRXJyb3InLCAobWVzc2FnZTogc3RyaW5nKSA9PiByZXNvbHZlKG1lc3NhZ2UpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBkYXRhV2FpdGVyO1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIGRhdGE7XG5cbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcHJvY2Vzc1Jlc3BvbnNlRGF0YShkYXRhLCByYXdSZXNwb25zZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6ICAgICBkYXRhLnN0YXR1c0NvZGUsXG4gICAgICAgIHN0YXR1c1RleHQ6IGRhdGEuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgaGVhZGVyczogICAgZGF0YS5oZWFkZXJzLFxuICAgICAgICBib2R5OiAgICAgICBib2R5LFxuICAgIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kUmVxdWVzdFRocm91Z2hBUEkgKHRlc3RSdW46IFRlc3RSdW4sIG9wdGlvbnM6IEV4dGVybmFsUmVxdWVzdE9wdGlvbnMsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCB8IG51bGwpOiBQcm9taXNlPFJlc3BvbnNlT3B0aW9ucz4ge1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlVXJsID0gbmV3IFVSTChhd2FpdCB0ZXN0UnVuLmdldEN1cnJlbnRVcmwoKSk7XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IGF3YWl0IGNyZWF0ZVJlcXVlc3RPcHRpb25zKGN1cnJlbnRQYWdlVXJsLCB0ZXN0UnVuLCBvcHRpb25zLCBjYWxsc2l0ZSk7XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgc2VuZChyZXF1ZXN0T3B0aW9ucywgb3B0aW9ucy5yYXdSZXNwb25zZSk7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKVxuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdFJ1bnRpbWVFcnJvcihjYWxsc2l0ZSwgUlVOVElNRV9FUlJPUlMucmVxdWVzdFJ1bnRpbWVFcnJvciwgZGF0YS5yZXBsYWNlKC88Lio/KD86PnwkKS9nLCAnJykpO1xuXG4gICAgY29uc3Qgc2V0Q29va2llICA9IChkYXRhLmhlYWRlcnMgYXMgSW5jb21pbmdIdHRwSGVhZGVycylbSFRUUF9IRUFERVJTLnNldENvb2tpZV07XG4gICAgY29uc3Qgc2FtZU9yaWdpbiA9ICFjdXJyZW50UGFnZVVybC5ob3N0IHx8IHNhbWVPcmlnaW5DaGVjayhjdXJyZW50UGFnZVVybC5ocmVmLCByZXF1ZXN0T3B0aW9ucy51cmwpO1xuXG4gICAgaWYgKHNldENvb2tpZSAmJiAoc2FtZU9yaWdpbiB8fCBvcHRpb25zLndpdGhDcmVkZW50aWFscykpXG4gICAgICAgIGF3YWl0IHRlc3RSdW4uY29va2llUHJvdmlkZXIuc2V0Q29va2llcyhzZXRDb29raWUsIGN1cnJlbnRQYWdlVXJsLmhyZWYpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59XG4iXX0=