UNPKG

testcafe

Version:

Automated browser testing for the modern web development stack.

65 lines 11.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const testcafe_hammerhead_1 = require("testcafe-hammerhead"); const string_1 = require("../utils/string"); const cdp_1 = require("../utils/cdp"); class NativeAutomationRequestHookEventProvider extends testcafe_hammerhead_1.RequestHookEventProvider { static _hasResponseWithBody(context) { return context.onResponseEventData.some((eventData) => eventData.opts.includeBody); } static async _safeGetResponseBody(client, event) { try { const responseObj = await client.Fetch.getResponseBody({ requestId: event.requestId }); return (0, string_1.getResponseAsBuffer)(responseObj); } catch (_a) { // NOTE: The 'Fetch.getResponseBody' method crashes on some Protobuf requests (https://protobuf.dev/). // This is a bug of the Chrome DevTools Protocol. return Buffer.alloc(0); } } static async _setResponseBody({ pipelineContext, resourceBody, eventFactory, event, client }) { if ((resourceBody === null || resourceBody === void 0 ? void 0 : resourceBody.length) || (0, cdp_1.isPreflightRequest)(event)) { eventFactory.setResponseBody(resourceBody || Buffer.alloc(0)); return; } const hasOnResponseWithBody = NativeAutomationRequestHookEventProvider._hasResponseWithBody(pipelineContext); if (!hasOnResponseWithBody) return; const responseBody = await NativeAutomationRequestHookEventProvider._safeGetResponseBody(client, event); eventFactory.setResponseBody(responseBody); } async onRequest(event, contextInfo) { if (!this.hasRequestEventListeners()) return; const { pipelineContext, eventFactory } = contextInfo.getContextData(event); await pipelineContext.onRequestHookRequest(this, eventFactory); } async onResponse(event, resourceBody, contextInfo, client) { let modified = false; if (!this.hasRequestEventListeners()) return false; const { pipelineContext, eventFactory } = contextInfo.getContextData(event); // NOTE: A long request can be responded after the test is finished. if (!eventFactory) return false; eventFactory.update(event); await pipelineContext.onRequestHookConfigureResponse(this, eventFactory); if (eventFactory.headersModified) modified = true; await NativeAutomationRequestHookEventProvider._setResponseBody({ pipelineContext, resourceBody, eventFactory, event, client, }); await Promise.all(pipelineContext.onResponseEventData.map(async (eventData) => { await pipelineContext.onRequestHookResponse(this, eventFactory, eventData.rule, eventData.opts); })); return modified; } } exports.default = NativeAutomationRequestHookEventProvider; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1ob29rcy9ldmVudC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZEQUk2QjtBQUk3Qiw0Q0FBc0Q7QUFDdEQsc0NBQWtEO0FBS2xELE1BQXFCLHdDQUF5QyxTQUFRLDhDQUF3QjtJQUNsRixNQUFNLENBQUMsb0JBQW9CLENBQUUsT0FBd0M7UUFDekUsT0FBTyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBOEIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBRSxNQUFtQixFQUFFLEtBQXlCO1FBQ3JGLElBQUk7WUFDQSxNQUFNLFdBQVcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBRXZGLE9BQU8sSUFBQSw0QkFBbUIsRUFBQyxXQUFXLENBQUMsQ0FBQztTQUMzQztRQUNELFdBQU07WUFDRixzR0FBc0c7WUFDdEcsaURBQWlEO1lBQ2pELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFTyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFFLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZ0w7UUFDL1EsSUFBSSxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxNQUFNLEtBQUksSUFBQSx3QkFBa0IsRUFBQyxLQUFLLENBQUMsRUFBRTtZQUNsRCxZQUFvRCxDQUFDLGVBQWUsQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXZHLE9BQU87U0FDVjtRQUdELE1BQU0scUJBQXFCLEdBQUcsd0NBQXdDLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFN0csSUFBSSxDQUFDLHFCQUFxQjtZQUN0QixPQUFPO1FBRVgsTUFBTSxZQUFZLEdBQUcsTUFBTSx3Q0FBd0MsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdkcsWUFBb0QsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUUsS0FBeUIsRUFBRSxXQUErQztRQUM5RixJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQ2hDLE9BQU87UUFFWCxNQUFNLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUUsTUFBTSxlQUFlLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFFLEtBQXlCLEVBQUUsWUFBMkIsRUFBRSxXQUErQyxFQUFFLE1BQW1CO1FBQ2pKLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUVyQixJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQ2hDLE9BQU8sS0FBSyxDQUFDO1FBRWpCLE1BQU0sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1RSxvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLFlBQVk7WUFDYixPQUFPLEtBQUssQ0FBQztRQUVoQixZQUFvRCxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwRSxNQUFNLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFekUsSUFBSyxZQUFvRCxDQUFDLGVBQWU7WUFDckUsUUFBUSxHQUFHLElBQUksQ0FBQztRQUVwQixNQUFNLHdDQUF3QyxDQUFDLGdCQUFnQixDQUFDO1lBQzVELGVBQWU7WUFDZixZQUFZO1lBQ1osWUFBWTtZQUNaLEtBQUs7WUFDTCxNQUFNO1NBQ1QsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLFNBQVMsRUFBQyxFQUFFO1lBQ3hFLE1BQU0sZUFBZSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQTlFRCwyREE4RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEJhc2VSZXF1ZXN0SG9va0V2ZW50RmFjdG9yeSxcbiAgICBPblJlc3BvbnNlRXZlbnREYXRhLFxuICAgIFJlcXVlc3RIb29rRXZlbnRQcm92aWRlcixcbn0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgTmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dCBmcm9tICcuL3BpcGVsaW5lLWNvbnRleHQnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5IGZyb20gJy4vZXZlbnQtZmFjdG9yeS9yZXF1ZXN0LXBhdXNlZC1ldmVudC1iYXNlZCc7XG5pbXBvcnQgeyBQcm90b2NvbEFwaSB9IGZyb20gJ2Nocm9tZS1yZW1vdGUtaW50ZXJmYWNlJztcbmltcG9ydCB7IGdldFJlc3BvbnNlQXNCdWZmZXIgfSBmcm9tICcuLi91dGlscy9zdHJpbmcnO1xuaW1wb3J0IHsgaXNQcmVmbGlnaHRSZXF1ZXN0IH0gZnJvbSAnLi4vdXRpbHMvY2RwJztcbmltcG9ydCBQcm90b2NvbCBmcm9tICdkZXZ0b29scy1wcm90b2NvbCc7XG5pbXBvcnQgUmVxdWVzdFBhdXNlZEV2ZW50ID0gUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50O1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8gZnJvbSAnLi4vcmVxdWVzdC1waXBlbGluZS9jb250ZXh0LWluZm8nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyIGV4dGVuZHMgUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaGFzUmVzcG9uc2VXaXRoQm9keSAoY29udGV4dDogTmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY29udGV4dC5vblJlc3BvbnNlRXZlbnREYXRhLnNvbWUoKGV2ZW50RGF0YTogT25SZXNwb25zZUV2ZW50RGF0YSkgPT4gZXZlbnREYXRhLm9wdHMuaW5jbHVkZUJvZHkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFzeW5jIF9zYWZlR2V0UmVzcG9uc2VCb2R5IChjbGllbnQ6IFByb3RvY29sQXBpLCBldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlT2JqID0gYXdhaXQgY2xpZW50LkZldGNoLmdldFJlc3BvbnNlQm9keSh7IHJlcXVlc3RJZDogZXZlbnQucmVxdWVzdElkIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZ2V0UmVzcG9uc2VBc0J1ZmZlcihyZXNwb25zZU9iaik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgLy8gTk9URTogVGhlICdGZXRjaC5nZXRSZXNwb25zZUJvZHknIG1ldGhvZCBjcmFzaGVzIG9uIHNvbWUgUHJvdG9idWYgcmVxdWVzdHMgKGh0dHBzOi8vcHJvdG9idWYuZGV2LykuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgYnVnIG9mIHRoZSBDaHJvbWUgRGV2VG9vbHMgUHJvdG9jb2wuXG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgX3NldFJlc3BvbnNlQm9keSAoeyBwaXBlbGluZUNvbnRleHQsIHJlc291cmNlQm9keSwgZXZlbnRGYWN0b3J5LCBldmVudCwgY2xpZW50IH06IHsgcGlwZWxpbmVDb250ZXh0OiBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0LCByZXNvdXJjZUJvZHk6IEJ1ZmZlciB8IG51bGwsIGV2ZW50RmFjdG9yeTogQmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5LCBldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBjbGllbnQ6IFByb3RvY29sQXBpIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHJlc291cmNlQm9keT8ubGVuZ3RoIHx8IGlzUHJlZmxpZ2h0UmVxdWVzdChldmVudCkpIHtcbiAgICAgICAgICAgIChldmVudEZhY3RvcnkgYXMgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkpLnNldFJlc3BvbnNlQm9keShyZXNvdXJjZUJvZHkgfHwgQnVmZmVyLmFsbG9jKDApKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCBoYXNPblJlc3BvbnNlV2l0aEJvZHkgPSBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLl9oYXNSZXNwb25zZVdpdGhCb2R5KHBpcGVsaW5lQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKCFoYXNPblJlc3BvbnNlV2l0aEJvZHkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5ID0gYXdhaXQgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlci5fc2FmZUdldFJlc3BvbnNlQm9keShjbGllbnQsIGV2ZW50KTtcblxuICAgICAgICAoZXZlbnRGYWN0b3J5IGFzIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5KS5zZXRSZXNwb25zZUJvZHkocmVzcG9uc2VCb2R5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb25SZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBjb250ZXh0SW5mbzogTmF0aXZlQXV0b21hdGlvblJlcXVlc3RDb250ZXh0SW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWVzdEV2ZW50TGlzdGVuZXJzKCkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgeyBwaXBlbGluZUNvbnRleHQsIGV2ZW50RmFjdG9yeSB9ID0gY29udGV4dEluZm8uZ2V0Q29udGV4dERhdGEoZXZlbnQpO1xuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lQ29udGV4dC5vblJlcXVlc3RIb29rUmVxdWVzdCh0aGlzLCBldmVudEZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvblJlc3BvbnNlIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCByZXNvdXJjZUJvZHk6IEJ1ZmZlciB8IG51bGwsIGNvbnRleHRJbmZvOiBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvLCBjbGllbnQ6IFByb3RvY29sQXBpKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGxldCBtb2RpZmllZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5oYXNSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBjb25zdCB7IHBpcGVsaW5lQ29udGV4dCwgZXZlbnRGYWN0b3J5IH0gPSBjb250ZXh0SW5mby5nZXRDb250ZXh0RGF0YShldmVudCk7XG5cbiAgICAgICAgLy8gTk9URTogQSBsb25nIHJlcXVlc3QgY2FuIGJlIHJlc3BvbmRlZCBhZnRlciB0aGUgdGVzdCBpcyBmaW5pc2hlZC5cbiAgICAgICAgaWYgKCFldmVudEZhY3RvcnkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgKGV2ZW50RmFjdG9yeSBhcyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSkudXBkYXRlKGV2ZW50KTtcblxuICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQub25SZXF1ZXN0SG9va0NvbmZpZ3VyZVJlc3BvbnNlKHRoaXMsIGV2ZW50RmFjdG9yeSk7XG5cbiAgICAgICAgaWYgKChldmVudEZhY3RvcnkgYXMgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkpLmhlYWRlcnNNb2RpZmllZClcbiAgICAgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICBhd2FpdCBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLl9zZXRSZXNwb25zZUJvZHkoe1xuICAgICAgICAgICAgcGlwZWxpbmVDb250ZXh0LFxuICAgICAgICAgICAgcmVzb3VyY2VCb2R5LFxuICAgICAgICAgICAgZXZlbnRGYWN0b3J5LFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjbGllbnQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHBpcGVsaW5lQ29udGV4dC5vblJlc3BvbnNlRXZlbnREYXRhLm1hcChhc3luYyBldmVudERhdGEgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcGlwZWxpbmVDb250ZXh0Lm9uUmVxdWVzdEhvb2tSZXNwb25zZSh0aGlzLCBldmVudEZhY3RvcnksIGV2ZW50RGF0YS5ydWxlLCBldmVudERhdGEub3B0cyk7XG4gICAgICAgIH0pKTtcblxuICAgICAgICByZXR1cm4gbW9kaWZpZWQ7XG4gICAgfVxufVxuIl19