support grapheneOS Vanadium browser

This commit is contained in:
Your Name 2025-10-31 00:04:43 -05:00
parent fc527e897d
commit a8473cb696

View File

@ -88,10 +88,15 @@
attempts: 0, attempts: 0,
startTime: new Date().getTime(), startTime: new Date().getTime(),
}; };
const progressBarContainer = element.querySelector(".pow-bot-deterrent-progress-bar-container");
progressBarContainer.style.display = "block";
const mainElement = element.querySelector(".pow-bot-deterrent"); const mainElement = element.querySelector(".pow-bot-deterrent");
mainElement.style.display = "inline-block"; mainElement.style.display = "inline-block";
const progressBarContainer = element.querySelector(".pow-bot-deterrent-progress-bar-container");
// if progressBarContainer is null, that means that WASM is disabled
if(!progressBarContainer) {
return;
}
progressBarContainer.style.display = "block";
const gears = element.querySelector(".pow-gears-icon"); const gears = element.querySelector(".pow-gears-icon");
gears.style.display = "block"; gears.style.display = "block";
@ -131,7 +136,7 @@
let webWorkers; let webWorkers;
webWorkers = [...Array(numberOfWebWorkersToCreate)].map((_, i) => { webWorkers = [...Array(numberOfWebWorkersToCreate)].map((_, i) => {
const webWorker = new Worker(`/${staticAssetsPath}/proofOfWorker.js`); const webWorker = new Worker(`/${staticAssetsPath}/proofOfWorker.js?v=2`);
webWorker.onmessage = function(e) { webWorker.onmessage = function(e) {
const challengeState = challengesMap[e.data.challenge] const challengeState = challengesMap[e.data.challenge]
if(!challengeState) { if(!challengeState) {
@ -244,6 +249,7 @@
} }
function renderProgressInfo(parent) { function renderProgressInfo(parent) {
const svgXMLNS = "http://www.w3.org/2000/svg"; const svgXMLNS = "http://www.w3.org/2000/svg";
const xmlnsXMLNS = 'http://www.w3.org/2000/xmlns/'; const xmlnsXMLNS = 'http://www.w3.org/2000/xmlns/';
const xmlSpaceXMLNS = 'http://www.w3.org/XML/1998/namespace'; const xmlSpaceXMLNS = 'http://www.w3.org/XML/1998/namespace';
@ -265,56 +271,91 @@
); );
createElement(headerLink, "span", null, "Bot Deterrent"); createElement(headerLink, "span", null, "Bot Deterrent");
const description = createElement(mainColumn, "div", {"class": "pow-bot-deterrent-description"}); const description = createElement(mainColumn, "div", {"class": "pow-bot-deterrent-description"});
appendFragment(description, "Creating ");
createElement(
description,
"a",
{ "href": "https://en.wikipedia.org/wiki/Proof_of_work", "target": "_blank" },
"Proof of Work"
);
appendFragment(description, ". ");
createElement(description, "br");
appendFragment(description, "Privacy-respecting anti-spam measure.");
const bestHashContainer = createElement(mainRow, "div");
createElement(bestHashContainer, "div", {"class": "pow-bot-deterrent-best-hash"}, "loading...");
const progressBarContainer = createElement(main, "div", {
"class": "pow-bot-deterrent-progress-bar-container pow-bot-deterrent-hidden"
});
createElement(progressBarContainer, "div", {"class": "pow-bot-deterrent-progress-bar"});
const iconContainer = createElement(mainRow, "div", {"class": "pow-bot-deterrent-icon-container"});
const checkmarkIcon = createElementNS(iconContainer, svgXMLNS, "svg", {
"xmlns": [xmlnsXMLNS, svgXMLNS],
"xml:space": [xmlSpaceXMLNS, 'preserve'],
"version": "1.1",
"viewBox": "0 0 512 512",
"class": "pow-checkmark-icon pow-bot-deterrent-icon pow-bot-deterrent-hidden"
});
createElementNS(checkmarkIcon, svgXMLNS, "polyline", {
"class": "pow-checkmark-icon-checkmark",
"points": "444,110 206,343 120,252"
});
createElementNS(checkmarkIcon, svgXMLNS, "polyline", {
"class": "pow-checkmark-icon-border",
"points": "240,130 30,130 30,470 370,470 370,350"
});
const gearsIcon = createElementNS(iconContainer, svgXMLNS, "svg", { if (typeof WebAssembly === 'undefined') {
"xmlns": [xmlnsXMLNS, svgXMLNS], appendFragment(description, "Browser Compatibility Issue (WebAssembly)");
"xml:space": [xmlSpaceXMLNS, 'preserve'],
"version": "1.1", const steps = createElement(description, "ol");
"viewBox": "-30 -5 250 223", const firstStep = createElement(steps, "li");
"class": "pow-gears-icon pow-bot-deterrent-icon pow-bot-deterrent-hidden" appendFragment(firstStep, 'Click the "Site Settings" Button to the left of the URL. It should look like this: ');
}); const settingsIcon = createElementNS(firstStep, svgXMLNS, "svg", {
createElementNS(gearsIcon, svgXMLNS, "path", { "xmlns": [xmlnsXMLNS, svgXMLNS],
"class": "pow-gears-icon-gear-large", "viewBox": "0 2 25 25",
"d": "M113.595,133.642l-5.932-13.169c5.655-4.151,10.512-9.315,14.307-15.209l13.507,5.118c2.583,0.979,5.469-0.322,6.447-2.904 l4.964-13.103c0.47-1.24,0.428-2.616-0.117-3.825c-0.545-1.209-1.547-2.152-2.788-2.622l-13.507-5.118 c1.064-6.93,0.848-14.014-0.637-20.871l13.169-5.932c1.209-0.545,2.152-1.547,2.622-2.788c0.47-1.24,0.428-2.616-0.117-3.825 l-5.755-12.775c-1.134-2.518-4.096-3.638-6.612-2.505l-13.169,5.932c-4.151-5.655-9.315-10.512-15.209-14.307l5.118-13.507 c0.978-2.582-0.322-5.469-2.904-6.447L93.88,0.82c-1.239-0.469-2.615-0.428-3.825,0.117c-1.209,0.545-2.152,1.547-2.622,2.788 l-5.117,13.506c-6.937-1.07-14.033-0.849-20.872,0.636L55.513,4.699c-0.545-1.209-1.547-2.152-2.788-2.622 c-1.239-0.469-2.616-0.428-3.825,0.117L36.124,7.949c-2.518,1.134-3.639,4.094-2.505,6.612l5.932,13.169 c-5.655,4.151-10.512,9.315-14.307,15.209l-13.507-5.118c-1.239-0.469-2.615-0.427-3.825,0.117 c-1.209,0.545-2.152,1.547-2.622,2.788L0.326,53.828c-0.978,2.582,0.322,5.469,2.904,6.447l13.507,5.118 c-1.064,6.929-0.848,14.015,0.637,20.871L4.204,92.196c-1.209,0.545-2.152,1.547-2.622,2.788c-0.47,1.24-0.428,2.616,0.117,3.825 l5.755,12.775c0.544,1.209,1.547,2.152,2.787,2.622c1.241,0.47,2.616,0.429,3.825-0.117l13.169-5.932 c4.151,5.656,9.314,10.512,15.209,14.307l-5.118,13.507c-0.978,2.582,0.322,5.469,2.904,6.447l13.103,4.964 c0.571,0.216,1.172,0.324,1.771,0.324c0.701,0,1.402-0.147,2.054-0.441c1.209-0.545,2.152-1.547,2.622-2.788l5.117-13.506 c6.937,1.069,14.034,0.849,20.872-0.636l5.931,13.168c0.545,1.209,1.547,2.152,2.788,2.622c1.24,0.47,2.617,0.429,3.825-0.117 l12.775-5.754C113.607,139.12,114.729,136.16,113.595,133.642z M105.309,86.113c-4.963,13.1-17.706,21.901-31.709,21.901 c-4.096,0-8.135-0.744-12.005-2.21c-8.468-3.208-15.18-9.522-18.899-17.779c-3.719-8.256-4-17.467-0.792-25.935 c4.963-13.1,17.706-21.901,31.709-21.901c4.096,0,8.135,0.744,12.005,2.21c8.468,3.208,15.18,9.522,18.899,17.778 C108.237,68.434,108.518,77.645,105.309,86.113z" });
}); settingsIcon.style.display = 'inline';
createElementNS(gearsIcon, svgXMLNS, "path", { settingsIcon.style.width = '5vw';
"class": "pow-gears-icon-gear-small", settingsIcon.style.height = '5vw';
"d": "M216.478,154.389c-0.896-0.977-2.145-1.558-3.469-1.615l-9.418-0.404 c-0.867-4.445-2.433-8.736-4.633-12.697l6.945-6.374c2.035-1.867,2.17-5.03,0.303-7.064l-6.896-7.514 c-0.896-0.977-2.145-1.558-3.47-1.615c-1.322-0.049-2.618,0.416-3.595,1.312l-6.944,6.374c-3.759-2.531-7.9-4.458-12.254-5.702 l0.404-9.418c0.118-2.759-2.023-5.091-4.782-5.209l-10.189-0.437c-2.745-0.104-5.091,2.023-5.209,4.781l-0.404,9.418 c-4.444,0.867-8.735,2.433-12.697,4.632l-6.374-6.945c-0.896-0.977-2.145-1.558-3.469-1.615c-1.324-0.054-2.618,0.416-3.595,1.312 l-7.514,6.896c-2.035,1.867-2.17,5.03-0.303,7.064l6.374,6.945c-2.531,3.759-4.458,7.899-5.702,12.254l-9.417-0.404 c-2.747-0.111-5.092,2.022-5.21,4.781l-0.437,10.189c-0.057,1.325,0.415,2.618,1.312,3.595c0.896,0.977,2.145,1.558,3.47,1.615 l9.417,0.403c0.867,4.445,2.433,8.736,4.632,12.698l-6.944,6.374c-0.977,0.896-1.558,2.145-1.615,3.469 c-0.057,1.325,0.415,2.618,1.312,3.595l6.896,7.514c0.896,0.977,2.145,1.558,3.47,1.615c1.319,0.053,2.618-0.416,3.595-1.312 l6.944-6.374c3.759,2.531,7.9,4.458,12.254,5.702l-0.404,9.418c-0.118,2.759,2.022,5.091,4.781,5.209l10.189,0.437 c0.072,0.003,0.143,0.004,0.214,0.004c1.25,0,2.457-0.468,3.381-1.316c0.977-0.896,1.558-2.145,1.615-3.469l0.404-9.418 c4.444-0.867,8.735-2.433,12.697-4.632l6.374,6.945c0.896,0.977,2.145,1.558,3.469,1.615c1.33,0.058,2.619-0.416,3.595-1.312 l7.514-6.896c2.035-1.867,2.17-5.03,0.303-7.064l-6.374-6.945c2.531-3.759,4.458-7.899,5.702-12.254l9.417,0.404 c2.756,0.106,5.091-2.022,5.21-4.781l0.437-10.189C217.847,156.659,217.375,155.366,216.478,154.389z M160.157,183.953 c-12.844-0.55-22.846-11.448-22.295-24.292c0.536-12.514,10.759-22.317,23.273-22.317c0.338,0,0.678,0.007,1.019,0.022 c12.844,0.551,22.846,11.448,22.295,24.292C183.898,174.511,173.106,184.497,160.157,183.953z" settingsIcon.style.position = 'relative';
}); settingsIcon.style.top = '1.5vw';
settingsIcon.style.marginTop = '-2vw';
createElementNS(settingsIcon, svgXMLNS, "circle", {cx: "6", cy: "10", stroke:"#ffffff", fill:"#ffffff", "stroke-width":"5", r:"3"});
createElementNS(settingsIcon, svgXMLNS, "circle", {cx: "6", cy: "10", stroke:"#000000", fill:"none", "stroke-width":"2", r:"3"});
createElementNS(settingsIcon, svgXMLNS, "line", {x1:"14", y1:"10", x2:"21", y2:"10", stroke:"#ffffff", "stroke-width":"5", "stroke-linecap":"round"});
createElementNS(settingsIcon, svgXMLNS, "line", {x1:"14", y1:"10", x2:"21", y2:"10", stroke:"#000000", "stroke-width":"2", "stroke-linecap":"round"});
createElementNS(settingsIcon, svgXMLNS, "circle", {cx: "19", cy: "20", stroke:"#ffffff", fill:"#ffffff", "stroke-width":"5", r:"3"});
createElementNS(settingsIcon, svgXMLNS, "circle", {cx: "19", cy: "20", stroke:"#000000", fill:"none", "stroke-width":"2", r:"3"});
createElementNS(settingsIcon, svgXMLNS, "line", {x1:"4", y1:"20", x2:"11", y2:"20", stroke:"#ffffff", "stroke-width":"5", "stroke-linecap":"round"});
createElementNS(settingsIcon, svgXMLNS, "line", {x1:"4", y1:"20", x2:"11", y2:"20", stroke:"#000000", "stroke-width":"2", "stroke-linecap":"round"});
createElement(steps, "li", {}, 'Click on "Permissions"');
createElement(steps, "li", {}, 'Enable "JavaScript JIT"');
appendFragment(description, `JavaScript Just In Time compilation is disabled on some privacy-focused web browsers, like on GrapheneOS.
This site requires it for the hash function we use to stick it to the bots.
Sorry for the inconvenience.`);
} else {
appendFragment(description, "Creating ");
createElement(
description,
"a",
{ "href": "https://en.wikipedia.org/wiki/Proof_of_work", "target": "_blank" },
"Proof of Work"
);
appendFragment(description, ". ");
createElement(description, "br");
appendFragment(description, "Privacy-respecting anti-spam measure.");
const bestHashContainer = createElement(mainRow, "div");
createElement(bestHashContainer, "div", {"class": "pow-bot-deterrent-best-hash"}, "loading...");
const progressBarContainer = createElement(main, "div", {
"class": "pow-bot-deterrent-progress-bar-container pow-bot-deterrent-hidden"
});
createElement(progressBarContainer, "div", {"class": "pow-bot-deterrent-progress-bar"});
const iconContainer = createElement(mainRow, "div", {"class": "pow-bot-deterrent-icon-container"});
const checkmarkIcon = createElementNS(iconContainer, svgXMLNS, "svg", {
"xmlns": [xmlnsXMLNS, svgXMLNS],
"xml:space": [xmlSpaceXMLNS, 'preserve'],
"version": "1.1",
"viewBox": "0 0 512 512",
"class": "pow-checkmark-icon pow-bot-deterrent-icon pow-bot-deterrent-hidden"
});
createElementNS(checkmarkIcon, svgXMLNS, "polyline", {
"class": "pow-checkmark-icon-checkmark",
"points": "444,110 206,343 120,252"
});
createElementNS(checkmarkIcon, svgXMLNS, "polyline", {
"class": "pow-checkmark-icon-border",
"points": "240,130 30,130 30,470 370,470 370,350"
});
const gearsIcon = createElementNS(iconContainer, svgXMLNS, "svg", {
"xmlns": [xmlnsXMLNS, svgXMLNS],
"xml:space": [xmlSpaceXMLNS, 'preserve'],
"version": "1.1",
"viewBox": "-30 -5 250 223",
"class": "pow-gears-icon pow-bot-deterrent-icon pow-bot-deterrent-hidden"
});
createElementNS(gearsIcon, svgXMLNS, "path", {
"class": "pow-gears-icon-gear-large",
"d": "M113.595,133.642l-5.932-13.169c5.655-4.151,10.512-9.315,14.307-15.209l13.507,5.118c2.583,0.979,5.469-0.322,6.447-2.904 l4.964-13.103c0.47-1.24,0.428-2.616-0.117-3.825c-0.545-1.209-1.547-2.152-2.788-2.622l-13.507-5.118 c1.064-6.93,0.848-14.014-0.637-20.871l13.169-5.932c1.209-0.545,2.152-1.547,2.622-2.788c0.47-1.24,0.428-2.616-0.117-3.825 l-5.755-12.775c-1.134-2.518-4.096-3.638-6.612-2.505l-13.169,5.932c-4.151-5.655-9.315-10.512-15.209-14.307l5.118-13.507 c0.978-2.582-0.322-5.469-2.904-6.447L93.88,0.82c-1.239-0.469-2.615-0.428-3.825,0.117c-1.209,0.545-2.152,1.547-2.622,2.788 l-5.117,13.506c-6.937-1.07-14.033-0.849-20.872,0.636L55.513,4.699c-0.545-1.209-1.547-2.152-2.788-2.622 c-1.239-0.469-2.616-0.428-3.825,0.117L36.124,7.949c-2.518,1.134-3.639,4.094-2.505,6.612l5.932,13.169 c-5.655,4.151-10.512,9.315-14.307,15.209l-13.507-5.118c-1.239-0.469-2.615-0.427-3.825,0.117 c-1.209,0.545-2.152,1.547-2.622,2.788L0.326,53.828c-0.978,2.582,0.322,5.469,2.904,6.447l13.507,5.118 c-1.064,6.929-0.848,14.015,0.637,20.871L4.204,92.196c-1.209,0.545-2.152,1.547-2.622,2.788c-0.47,1.24-0.428,2.616,0.117,3.825 l5.755,12.775c0.544,1.209,1.547,2.152,2.787,2.622c1.241,0.47,2.616,0.429,3.825-0.117l13.169-5.932 c4.151,5.656,9.314,10.512,15.209,14.307l-5.118,13.507c-0.978,2.582,0.322,5.469,2.904,6.447l13.103,4.964 c0.571,0.216,1.172,0.324,1.771,0.324c0.701,0,1.402-0.147,2.054-0.441c1.209-0.545,2.152-1.547,2.622-2.788l5.117-13.506 c6.937,1.069,14.034,0.849,20.872-0.636l5.931,13.168c0.545,1.209,1.547,2.152,2.788,2.622c1.24,0.47,2.617,0.429,3.825-0.117 l12.775-5.754C113.607,139.12,114.729,136.16,113.595,133.642z M105.309,86.113c-4.963,13.1-17.706,21.901-31.709,21.901 c-4.096,0-8.135-0.744-12.005-2.21c-8.468-3.208-15.18-9.522-18.899-17.779c-3.719-8.256-4-17.467-0.792-25.935 c4.963-13.1,17.706-21.901,31.709-21.901c4.096,0,8.135,0.744,12.005,2.21c8.468,3.208,15.18,9.522,18.899,17.778 C108.237,68.434,108.518,77.645,105.309,86.113z"
});
createElementNS(gearsIcon, svgXMLNS, "path", {
"class": "pow-gears-icon-gear-small",
"d": "M216.478,154.389c-0.896-0.977-2.145-1.558-3.469-1.615l-9.418-0.404 c-0.867-4.445-2.433-8.736-4.633-12.697l6.945-6.374c2.035-1.867,2.17-5.03,0.303-7.064l-6.896-7.514 c-0.896-0.977-2.145-1.558-3.47-1.615c-1.322-0.049-2.618,0.416-3.595,1.312l-6.944,6.374c-3.759-2.531-7.9-4.458-12.254-5.702 l0.404-9.418c0.118-2.759-2.023-5.091-4.782-5.209l-10.189-0.437c-2.745-0.104-5.091,2.023-5.209,4.781l-0.404,9.418 c-4.444,0.867-8.735,2.433-12.697,4.632l-6.374-6.945c-0.896-0.977-2.145-1.558-3.469-1.615c-1.324-0.054-2.618,0.416-3.595,1.312 l-7.514,6.896c-2.035,1.867-2.17,5.03-0.303,7.064l6.374,6.945c-2.531,3.759-4.458,7.899-5.702,12.254l-9.417-0.404 c-2.747-0.111-5.092,2.022-5.21,4.781l-0.437,10.189c-0.057,1.325,0.415,2.618,1.312,3.595c0.896,0.977,2.145,1.558,3.47,1.615 l9.417,0.403c0.867,4.445,2.433,8.736,4.632,12.698l-6.944,6.374c-0.977,0.896-1.558,2.145-1.615,3.469 c-0.057,1.325,0.415,2.618,1.312,3.595l6.896,7.514c0.896,0.977,2.145,1.558,3.47,1.615c1.319,0.053,2.618-0.416,3.595-1.312 l6.944-6.374c3.759,2.531,7.9,4.458,12.254,5.702l-0.404,9.418c-0.118,2.759,2.022,5.091,4.781,5.209l10.189,0.437 c0.072,0.003,0.143,0.004,0.214,0.004c1.25,0,2.457-0.468,3.381-1.316c0.977-0.896,1.558-2.145,1.615-3.469l0.404-9.418 c4.444-0.867,8.735-2.433,12.697-4.632l6.374,6.945c0.896,0.977,2.145,1.558,3.469,1.615c1.33,0.058,2.619-0.416,3.595-1.312 l7.514-6.896c2.035-1.867,2.17-5.03,0.303-7.064l-6.374-6.945c2.531-3.759,4.458-7.899,5.702-12.254l9.417,0.404 c2.756,0.106,5.091-2.022,5.21-4.781l0.437-10.189C217.847,156.659,217.375,155.366,216.478,154.389z M160.157,183.953 c-12.844-0.55-22.846-11.448-22.295-24.292c0.536-12.514,10.759-22.317,23.273-22.317c0.338,0,0.678,0.007,1.019,0.022 c12.844,0.551,22.846,11.448,22.295,24.292C183.898,174.511,173.106,184.497,160.157,183.953z"
});
}
} }
function createElementNS(parent, ns, tag, attr) { function createElementNS(parent, ns, tag, attr) {