testcafe
Version:
Automated browser testing for the modern web development stack.
73 lines • 11.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.safeFailRequest = exports.safeContinueRequest = exports.safeFulfillRequest = exports.safeContinueResponse = exports.connectionResetGuard = void 0;
const debug_loggers_1 = require("../../utils/debug-loggers");
const cdp_1 = require("../utils/cdp");
const IGNORED_ERROR_CODES = {
// In some cases (a request was aborted, any page that initiated the request doesn't exist, etc.)
// Chrome Debug Protocol doesn't allow to continue request pipeline
// and raises the "Invalid InterceptionId" error.
INVALID_INTERCEPTION_ID: -32602,
// The "Session not found" error can occur in iframes for unclear reasons.
SESSION_WITH_GIVEN_ID_NOT_FOUND: -32001,
};
//The "WebSocket connection closed" error occurs on closeWindow in multiple windows mode
const IGNORED_ERROR_MESSAGES = ['WebSocket connection closed'];
async function connectionResetGuard(handleRequestFn, handleErrorFn) {
var _a;
try {
await handleRequestFn();
}
catch (err) {
if (Object.values(IGNORED_ERROR_CODES).includes((_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.code) || IGNORED_ERROR_MESSAGES.includes(err.message))
return;
handleErrorFn(err);
throw err;
}
}
exports.connectionResetGuard = connectionResetGuard;
async function safeContinueResponse(client, data, sessionId) {
const isPausedEvent = (0, cdp_1.isRequestPausedEvent)(data);
await connectionResetGuard(async () => {
const param = isPausedEvent
? { requestId: data.requestId }
: data;
// @ts-ignore
await client.Fetch.continueResponse(param, sessionId);
}, err => {
const formatter = isPausedEvent ? '%r' : '%s';
(0, debug_loggers_1.requestPipelineLogger)(`Fetch.continueResponse. Unhandled error %s during processing ${formatter}`, err, data);
});
}
exports.safeContinueResponse = safeContinueResponse;
async function safeFulfillRequest(client, fulfillInfo, sessionId) {
await connectionResetGuard(async () => {
// @ts-ignore
await client.Fetch.fulfillRequest(fulfillInfo, sessionId);
}, err => {
(0, debug_loggers_1.requestPipelineLogger)(`Fetch.fulfillRequest. Unhandled error %s during processing %s`, err, fulfillInfo.requestId);
});
}
exports.safeFulfillRequest = safeFulfillRequest;
async function safeContinueRequest(client, event, sessionId, continueRequestArgs) {
const { postData, method, url, headers } = continueRequestArgs || {};
await connectionResetGuard(async () => {
// @ts-ignore
await client.Fetch.continueRequest({ requestId: event.requestId, postData, method, url, headers }, sessionId);
}, err => {
(0, debug_loggers_1.requestPipelineLogger)(`Fetch.continueRequest. Unhandled error %s during processing %r`, err, event);
});
}
exports.safeContinueRequest = safeContinueRequest;
async function safeFailRequest(client, event, errorReason = 'Aborted') {
await connectionResetGuard(async () => {
await client.Fetch.failRequest({
requestId: event.requestId,
errorReason,
});
}, err => {
(0, debug_loggers_1.requestPipelineLogger)(`Fetch.failRequest. Unhandled error %s during processing %s`, err, event.requestId);
});
}
exports.safeFailRequest = safeFailRequest;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1waXBlbGluZS9zYWZlLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2REFBa0U7QUFNbEUsc0NBQW9EO0FBR3BELE1BQU0sbUJBQW1CLEdBQUc7SUFDeEIsaUdBQWlHO0lBQ2pHLG1FQUFtRTtJQUNuRSxpREFBaUQ7SUFDakQsdUJBQXVCLEVBQVUsQ0FBQyxLQUFLO0lBQ3ZDLDBFQUEwRTtJQUMxRSwrQkFBK0IsRUFBRSxDQUFDLEtBQUs7Q0FDMUMsQ0FBQztBQUNGLHdGQUF3RjtBQUN4RixNQUFNLHNCQUFzQixHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUV4RCxLQUFLLFVBQVUsb0JBQW9CLENBQUUsZUFBb0MsRUFBRSxhQUFpQzs7SUFDL0csSUFBSTtRQUNBLE1BQU0sZUFBZSxFQUFFLENBQUM7S0FDM0I7SUFDRCxPQUFPLEdBQVEsRUFBRTtRQUNiLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxRQUFRLDBDQUFFLElBQUksQ0FBQyxJQUFJLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ2hILE9BQU87UUFFWCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkIsTUFBTSxHQUFHLENBQUM7S0FDYjtBQUNMLENBQUM7QUFaRCxvREFZQztBQUVNLEtBQUssVUFBVSxvQkFBb0IsQ0FBRSxNQUFtQixFQUFFLElBQWtELEVBQUUsU0FBb0I7SUFDckksTUFBTSxhQUFhLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUVqRCxNQUFNLG9CQUFvQixDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLGFBQWE7WUFDdkIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVYLGFBQWE7UUFDYixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNMLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFOUMsSUFBQSxxQ0FBcUIsRUFBQyxnRUFBZ0UsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQWZELG9EQWVDO0FBRU0sS0FBSyxVQUFVLGtCQUFrQixDQUFFLE1BQW1CLEVBQUUsV0FBa0MsRUFBRSxTQUFvQjtJQUNuSCxNQUFNLG9CQUFvQixDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2xDLGFBQWE7UUFDYixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RCxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDTCxJQUFBLHFDQUFxQixFQUFDLCtEQUErRCxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkgsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBUEQsZ0RBT0M7QUFFTSxLQUFLLFVBQVUsbUJBQW1CLENBQUUsTUFBbUIsRUFBRSxLQUF5QixFQUFFLFNBQW9CLEVBQUUsbUJBQXlDO0lBQ3RKLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxtQkFBbUIsSUFBSSxFQUFFLENBQUM7SUFFckUsTUFBTSxvQkFBb0IsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQyxhQUFhO1FBQ2IsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xILENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNMLElBQUEscUNBQXFCLEVBQUMsZ0VBQWdFLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hHLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQVRELGtEQVNDO0FBRU0sS0FBSyxVQUFVLGVBQWUsQ0FBRSxNQUFtQixFQUFFLEtBQXlCLEVBQUUsY0FBMkIsU0FBUztJQUN2SCxNQUFNLG9CQUFvQixDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2xDLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDM0IsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLFdBQVc7U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDTCxJQUFBLHFDQUFxQixFQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUcsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBVEQsMENBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm90b2NvbEFwaSB9IGZyb20gJ2Nocm9tZS1yZW1vdGUtaW50ZXJmYWNlJztcbmltcG9ydCB7IHJlcXVlc3RQaXBlbGluZUxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2RlYnVnLWxvZ2dlcnMnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgRnVsZmlsbFJlcXVlc3RSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guRnVsZmlsbFJlcXVlc3RSZXF1ZXN0O1xuaW1wb3J0IENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guQ29udGludWVSZXNwb25zZVJlcXVlc3Q7XG5pbXBvcnQgRXJyb3JSZWFzb24gPSBQcm90b2NvbC5OZXR3b3JrLkVycm9yUmVhc29uO1xuaW1wb3J0IHsgaXNSZXF1ZXN0UGF1c2VkRXZlbnQgfSBmcm9tICcuLi91dGlscy9jZHAnO1xuaW1wb3J0IHsgQ29udGludWVSZXF1ZXN0QXJncywgU2Vzc2lvbklkIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBJR05PUkVEX0VSUk9SX0NPREVTID0ge1xuICAgIC8vIEluIHNvbWUgY2FzZXMgKGEgcmVxdWVzdCB3YXMgYWJvcnRlZCwgYW55IHBhZ2UgdGhhdCBpbml0aWF0ZWQgdGhlIHJlcXVlc3QgZG9lc24ndCBleGlzdCwgZXRjLilcbiAgICAvLyBDaHJvbWUgRGVidWcgUHJvdG9jb2wgZG9lc24ndCBhbGxvdyB0byBjb250aW51ZSByZXF1ZXN0IHBpcGVsaW5lXG4gICAgLy8gYW5kIHJhaXNlcyB0aGUgXCJJbnZhbGlkIEludGVyY2VwdGlvbklkXCIgZXJyb3IuXG4gICAgSU5WQUxJRF9JTlRFUkNFUFRJT05fSUQ6ICAgICAgICAgLTMyNjAyLFxuICAgIC8vIFRoZSBcIlNlc3Npb24gbm90IGZvdW5kXCIgZXJyb3IgY2FuIG9jY3VyIGluIGlmcmFtZXMgZm9yIHVuY2xlYXIgcmVhc29ucy5cbiAgICBTRVNTSU9OX1dJVEhfR0lWRU5fSURfTk9UX0ZPVU5EOiAtMzIwMDEsXG59O1xuLy9UaGUgXCJXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZWRcIiBlcnJvciBvY2N1cnMgb24gY2xvc2VXaW5kb3cgaW4gbXVsdGlwbGUgd2luZG93cyBtb2RlXG5jb25zdCBJR05PUkVEX0VSUk9SX01FU1NBR0VTID0gWydXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZWQnXTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbm5lY3Rpb25SZXNldEd1YXJkIChoYW5kbGVSZXF1ZXN0Rm46ICgpID0+IFByb21pc2U8dm9pZD4sIGhhbmRsZUVycm9yRm46IChlcnI6IGFueSkgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZVJlcXVlc3RGbigpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMoSUdOT1JFRF9FUlJPUl9DT0RFUykuaW5jbHVkZXMoZXJyPy5yZXNwb25zZT8uY29kZSkgfHwgSUdOT1JFRF9FUlJPUl9NRVNTQUdFUy5pbmNsdWRlcyhlcnIubWVzc2FnZSkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaGFuZGxlRXJyb3JGbihlcnIpO1xuXG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlQ29udGludWVSZXNwb25zZSAoY2xpZW50OiBQcm90b2NvbEFwaSwgZGF0YTogUmVxdWVzdFBhdXNlZEV2ZW50IHwgQ29udGludWVSZXNwb25zZVJlcXVlc3QsIHNlc3Npb25JZDogU2Vzc2lvbklkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNQYXVzZWRFdmVudCA9IGlzUmVxdWVzdFBhdXNlZEV2ZW50KGRhdGEpO1xuXG4gICAgYXdhaXQgY29ubmVjdGlvblJlc2V0R3VhcmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbSA9IGlzUGF1c2VkRXZlbnRcbiAgICAgICAgICAgID8geyByZXF1ZXN0SWQ6IGRhdGEucmVxdWVzdElkIH1cbiAgICAgICAgICAgIDogZGF0YTtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGF3YWl0IGNsaWVudC5GZXRjaC5jb250aW51ZVJlc3BvbnNlKHBhcmFtLCBzZXNzaW9uSWQpO1xuICAgIH0sIGVyciA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGlzUGF1c2VkRXZlbnQgPyAnJXInIDogJyVzJztcblxuICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoYEZldGNoLmNvbnRpbnVlUmVzcG9uc2UuIFVuaGFuZGxlZCBlcnJvciAlcyBkdXJpbmcgcHJvY2Vzc2luZyAke2Zvcm1hdHRlcn1gLCBlcnIsIGRhdGEpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FmZUZ1bGZpbGxSZXF1ZXN0IChjbGllbnQ6IFByb3RvY29sQXBpLCBmdWxmaWxsSW5mbzogRnVsZmlsbFJlcXVlc3RSZXF1ZXN0LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGNvbm5lY3Rpb25SZXNldEd1YXJkKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBhd2FpdCBjbGllbnQuRmV0Y2guZnVsZmlsbFJlcXVlc3QoZnVsZmlsbEluZm8sIHNlc3Npb25JZCk7XG4gICAgfSwgZXJyID0+IHtcbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKGBGZXRjaC5mdWxmaWxsUmVxdWVzdC4gVW5oYW5kbGVkIGVycm9yICVzIGR1cmluZyBwcm9jZXNzaW5nICVzYCwgZXJyLCBmdWxmaWxsSW5mby5yZXF1ZXN0SWQpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FmZUNvbnRpbnVlUmVxdWVzdCAoY2xpZW50OiBQcm90b2NvbEFwaSwgZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgc2Vzc2lvbklkOiBTZXNzaW9uSWQsIGNvbnRpbnVlUmVxdWVzdEFyZ3M/OiBDb250aW51ZVJlcXVlc3RBcmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBwb3N0RGF0YSwgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSA9IGNvbnRpbnVlUmVxdWVzdEFyZ3MgfHwge307XG5cbiAgICBhd2FpdCBjb25uZWN0aW9uUmVzZXRHdWFyZChhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYXdhaXQgY2xpZW50LkZldGNoLmNvbnRpbnVlUmVxdWVzdCh7IHJlcXVlc3RJZDogZXZlbnQucmVxdWVzdElkLCBwb3N0RGF0YSwgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSwgc2Vzc2lvbklkKTtcbiAgICB9LCBlcnIgPT4ge1xuICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoYEZldGNoLmNvbnRpbnVlUmVxdWVzdC4gVW5oYW5kbGVkIGVycm9yICVzIGR1cmluZyBwcm9jZXNzaW5nICVyYCwgZXJyLCBldmVudCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlRmFpbFJlcXVlc3QgKGNsaWVudDogUHJvdG9jb2xBcGksIGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGVycm9yUmVhc29uOiBFcnJvclJlYXNvbiA9ICdBYm9ydGVkJyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGNvbm5lY3Rpb25SZXNldEd1YXJkKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LkZldGNoLmZhaWxSZXF1ZXN0KHtcbiAgICAgICAgICAgIHJlcXVlc3RJZDogZXZlbnQucmVxdWVzdElkLFxuICAgICAgICAgICAgZXJyb3JSZWFzb24sXG4gICAgICAgIH0pO1xuICAgIH0sIGVyciA9PiB7XG4gICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcihgRmV0Y2guZmFpbFJlcXVlc3QuIFVuaGFuZGxlZCBlcnJvciAlcyBkdXJpbmcgcHJvY2Vzc2luZyAlc2AsIGVyciwgZXZlbnQucmVxdWVzdElkKTtcbiAgICB9KTtcbn1cbiJdfQ==