-
Notifications
You must be signed in to change notification settings - Fork 49
/
Copy pathbin.js
executable file
·37 lines (31 loc) · 1.29 KB
/
bin.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env node
const cat_n_mouse = require('.');
const fs = require('fs');
// FIXME: confirm every individual detect works
async function testDetects() {
const results = await cat_n_mouse({includeEvasions: false, suppressLogs: true});
// If any of the detects pass, then we conclude this is headless.
const wasHeadlessDetected = Object.values(results).some(Boolean);
console.assert(wasHeadlessDetected === true, 'Detections failed');
}
async function testEvasions() {
const results = await cat_n_mouse({includeEvasions: true});
const wasHeadlessDetected = Object.values(results).some(Boolean);
const result = wasHeadlessDetected
? 'Headless detection *succeeded*.\n🔍 Detectors are winning!'
: 'Headless detection *failed*.\n😎 Evaders are winning!';
console.log(`\n${result}`);
updateReadmeStatus(result);
}
function updateReadmeStatus(result) {
if (!fs.existsSync('.git')) return;
if (!fs.existsSync('readme.md')) return;
const readmeTxt = fs.readFileSync('readme.md', 'utf8');
if (/\*\*Current status:\*\*\n```txt/.test(readmeTxt) === false) return;
const newTxt = readmeTxt.replace(/(```txt)([^`]|\s)*/m, `$1\n${result}\n`);
fs.writeFileSync('readme.md', newTxt);
}
Promise.resolve()
.then(_ => testDetects())
.then(_ => testEvasions())
.catch(console.error);