kayle
Version:
Extremely fast and accurate accessibility engine built for any headless tool like playwright or puppeteer.
105 lines • 3.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sendCDPPageConfigurationReset = exports.sendCDPPageConfigurationEnable = exports.blockFilter = void 0;
const config_1 = require("../config");
const adblock_1 = require("./adblock");
const resource_ignore_1 = require("./resource-ignore");
const blockedResourceUrls = Object.keys(resource_ignore_1.skippedResources);
const blockFilter = async (e, client, o) => {
const resourceType = e.resourceType;
if (resourceType === "Document" && o.html && !o._initRequest) {
o._initRequest = true;
return await client.send("Fetch.fulfillRequest", {
requestId: e.requestId,
responseCode: 200,
body: Buffer.from(o.html).toString("base64"),
});
}
else if (!o.html && !o._initRequest) {
o._initRequest = true;
}
const url = e.request && e.request.url;
if ((!o.allowImages && resourceType === "Image") ||
(resourceType === "Script" &&
adblock_1.adEngine &&
url &&
(url.startsWith("https://") || url.startsWith("http://")) &&
adblock_1.adEngine.check(url, new URL(url).origin, resourceType, true))) {
return await client.send("Fetch.failRequest", {
requestId: e.requestId,
errorReason: "Aborted",
});
}
if (o._initRequest) {
return await client.send("Fetch.continueRequest", {
requestId: e.requestId,
});
}
};
exports.blockFilter = blockFilter;
const sendCDPPageConfigurationEnable = async (client, o) => {
if (!client || (client && !client.on)) {
return;
}
try {
await Promise.allSettled([
client.send("Network.setBlockedURLs", {
urls: blockedResourceUrls,
}),
client.send("Fetch.enable", {
patterns: resource_ignore_1.blockedResourcePatterns,
}),
client.send("Page.enable"),
client.send("Preload.disable"),
client.send("ServiceWorker.disable"),
!config_1._log.enabled ? client.send("Runtime.discardConsoleEntries") : undefined,
]);
}
catch (e) {
console.error(e);
}
client.on("Page.frameRequestedNavigation", (e) => {
if (e.reason == "scriptInitiated" &&
e.url &&
e.disposition === "currentTab") {
if (o._watcher && o._watcher.timer) {
return clearTimeout(o._watcher.timer);
}
}
});
client.on("Fetch.requestPaused", async (e) => {
try {
await (0, exports.blockFilter)(e, client, o);
}
catch (e) {
config_1._log.enabled && console.error(e);
}
});
};
exports.sendCDPPageConfigurationEnable = sendCDPPageConfigurationEnable;
const sendCDPPageConfigurationReset = async (client, o, _allowImages, all) => {
if (!client || (client && !client.on)) {
return;
}
if (o.html) {
o._initRequest = false;
}
if (all) {
try {
await Promise.allSettled([
client.send("Page.disable"),
client.send("Preload.enable"),
client.send("Fetch.disable"),
client.send("ServiceWorker.enable"),
!config_1._log.enabled
? client.send("Runtime.discardConsoleEntries")
: undefined,
]);
}
catch (e) {
console.error(e);
}
}
};
exports.sendCDPPageConfigurationReset = sendCDPPageConfigurationReset;
//# sourceMappingURL=cdp-blocking.js.map