testcafe
Version:
Automated browser testing for the modern web development stack.
65 lines • 11.5 kB
JavaScript
;
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