Here's the relevant code, with some of the syntax simplified so it fits in the post limit:
/*!
https://github.com/Joe12387/detectIncognito */
function checkIncognito() {
if (window.isIncognito !== undefined) {return;}
if (!navigator.maxTouchPoints || navigator.vendor === undefined) { window.isIncognito = false; return; }
(new Promise(function(resolve, reject) {
let eh = eval.toString().length;
if (navigator.vendor.indexOf('Apple') === 0 && eh === 37) {
if (navigator.maxTouchPoints === undefined) { resolve(false); }
let db_name = Math.random().toString();
try {
let db = window.indexedDB.open(db_name, 1);
db.onupgradeneeded = function (e) {
let res = e.target.result;
try { res.createObjectStore('test', { autoIncrement: true }).put(new Blob); resolve(false); }
catch(err) {
let msg;
if (err instanceof Error) {
msg = err.message;
}
if (typeof msg !== 'string') {
resolve(false);
}
resolve(/BlobURLs are not yet supported/.test(msg));
}
finally { res.close(); window.indexedDB.deleteDatabase(db_name); }
};
}
catch(err) { resolve(false); }
}
else if (navigator.vendor.indexOf('Google') === 0 && eh === 33) {
let hsl;
try { hsl = performance.memory.jsHeapSizeLimit; }
catch(err) { hsl = 1073741824; }
navigator.webkitTemporaryStorage.queryUsageAndQuota(function (_, quota) {
let q = Math.round(quota / (1024 * 1024));
let q_lim = Math.round(hsl / (1024 * 1024)) * 2;
resolve(q < q_lim);
}, function (err) { resolve(false); });
}
else if (document.body.style.MozAppearance !== undefined && eh === 37) { resolve(navigator.serviceWorker === undefined); }
else { resolve(false); }
})).then((v) => window.isIncognito = v);
}