Compare commits

..

1 Commits

Author SHA1 Message Date
liss-bot
e8aedd1ad9 docs: Updates contributors list 2025-01-26 02:08:13 +00:00
4 changed files with 71 additions and 116 deletions

73
.github/README.md vendored
View File

@@ -1014,13 +1014,6 @@ Credit to the following users for contributing to Web-Check
<sub><b>Ulises Gascón</b></sub> <sub><b>Ulises Gascón</b></sub>
</a> </a>
</td> </td>
<td align="center">
<a href="https://github.com/CrazyWolf13">
<img src="https://avatars.githubusercontent.com/u/96661824?v=4" width="80;" alt="CrazyWolf13"/>
<br />
<sub><b>Tobias</b></sub>
</a>
</td>
<td align="center"> <td align="center">
<a href="https://github.com/PhiRequiem"> <a href="https://github.com/PhiRequiem">
<img src="https://avatars.githubusercontent.com/u/1323576?v=4" width="80;" alt="PhiRequiem"/> <img src="https://avatars.githubusercontent.com/u/1323576?v=4" width="80;" alt="PhiRequiem"/>
@@ -1029,14 +1022,12 @@ Credit to the following users for contributing to Web-Check
</a> </a>
</td> </td>
<td align="center"> <td align="center">
<a href="https://github.com/ntaiko"> <a href="https://github.com/34bits">
<img src="https://avatars.githubusercontent.com/u/108784453?v=4" width="80;" alt="ntaiko"/> <img src="https://avatars.githubusercontent.com/u/108784453?v=4" width="80;" alt="34bits"/>
<br /> <br />
<sub><b>Nikolaos G. Ntaiko</b></sub> <sub><b>Nikolaos G. Ntaiko</b></sub>
</a> </a>
</td> </td>
</tr>
<tr>
<td align="center"> <td align="center">
<a href="https://github.com/Myzel394"> <a href="https://github.com/Myzel394">
<img src="https://avatars.githubusercontent.com/u/50424412?v=4" width="80;" alt="Myzel394"/> <img src="https://avatars.githubusercontent.com/u/50424412?v=4" width="80;" alt="Myzel394"/>
@@ -1044,6 +1035,8 @@ Credit to the following users for contributing to Web-Check
<sub><b>Myzel394</b></sub> <sub><b>Myzel394</b></sub>
</a> </a>
</td> </td>
</tr>
<tr>
<td align="center"> <td align="center">
<a href="https://github.com/murrple-1"> <a href="https://github.com/murrple-1">
<img src="https://avatars.githubusercontent.com/u/5559656?v=4" width="80;" alt="murrple-1"/> <img src="https://avatars.githubusercontent.com/u/5559656?v=4" width="80;" alt="murrple-1"/>
@@ -1079,8 +1072,6 @@ Credit to the following users for contributing to Web-Check
<sub><b>Gertje823</b></sub> <sub><b>Gertje823</b></sub>
</a> </a>
</td> </td>
</tr>
<tr>
<td align="center"> <td align="center">
<a href="https://github.com/epreston"> <a href="https://github.com/epreston">
<img src="https://avatars.githubusercontent.com/u/347224?v=4" width="80;" alt="epreston"/> <img src="https://avatars.githubusercontent.com/u/347224?v=4" width="80;" alt="epreston"/>
@@ -1088,6 +1079,8 @@ Credit to the following users for contributing to Web-Check
<sub><b>Ed Preston</b></sub> <sub><b>Ed Preston</b></sub>
</a> </a>
</td> </td>
</tr>
<tr>
<td align="center"> <td align="center">
<a href="https://github.com/dimitri-kandassamy"> <a href="https://github.com/dimitri-kandassamy">
<img src="https://avatars.githubusercontent.com/u/21193806?v=4" width="80;" alt="dimitri-kandassamy"/> <img src="https://avatars.githubusercontent.com/u/21193806?v=4" width="80;" alt="dimitri-kandassamy"/>
@@ -1117,7 +1110,7 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
<tr> <tr>
<td align="center"> <td align="center">
<a href="https://github.com/vincentkoc"> <a href="https://github.com/vincentkoc">
<img src="https://avatars.githubusercontent.com/u/25068?u=fbd5b2d51142daa4bdbc21e21953a3b8b8188a4a&v=4" width="80;" alt="vincentkoc"/> <img src="https://avatars.githubusercontent.com/u/25068?v=4" width="80;" alt="vincentkoc"/>
<br /> <br />
<sub><b>Vincent Koc</b></sub> <sub><b>Vincent Koc</b></sub>
</a> </a>
@@ -1180,6 +1173,13 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
<sub><b>Brian McGonagill</b></sub> <sub><b>Brian McGonagill</b></sub>
</a> </a>
</td> </td>
<td align="center">
<a href="https://github.com/arcestia">
<img src="https://avatars.githubusercontent.com/u/7936962?v=4" width="80;" alt="arcestia"/>
<br />
<sub><b>Laurensius Jeffrey</b></sub>
</a>
</td>
<td align="center"> <td align="center">
<a href="https://github.com/vlad-tim"> <a href="https://github.com/vlad-tim">
<img src="https://avatars.githubusercontent.com/u/11474041?u=eee43705b54d2ec9f51fc4fcce5ad18dd17c87e4&v=4" width="80;" alt="vlad-tim"/> <img src="https://avatars.githubusercontent.com/u/11474041?u=eee43705b54d2ec9f51fc4fcce5ad18dd17c87e4&v=4" width="80;" alt="vlad-tim"/>
@@ -1193,6 +1193,15 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
<br /> <br />
<sub><b>HeliXZz</b></sub> <sub><b>HeliXZz</b></sub>
</a> </a>
</td>
</tr>
<tr>
<td align="center">
<a href="https://github.com/patvdv">
<img src="https://avatars.githubusercontent.com/u/12430107?u=e8911c2fb91af4d30432f76da8c40927b2830bd7&v=4" width="80;" alt="patvdv"/>
<br />
<sub><b>Patrick Van Der Veken</b></sub>
</a>
</td> </td>
<td align="center"> <td align="center">
<a href="https://github.com/mryesiller"> <a href="https://github.com/mryesiller">
@@ -1201,8 +1210,6 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
<sub><b>Göksel Yeşiller</b></sub> <sub><b>Göksel Yeşiller</b></sub>
</a> </a>
</td> </td>
</tr>
<tr>
<td align="center"> <td align="center">
<a href="https://github.com/sushibait"> <a href="https://github.com/sushibait">
<img src="https://avatars.githubusercontent.com/u/26634535?v=4" width="80;" alt="sushibait"/> <img src="https://avatars.githubusercontent.com/u/26634535?v=4" width="80;" alt="sushibait"/>
@@ -1210,6 +1217,13 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
<sub><b>Shiverme Timbers</b></sub> <sub><b>Shiverme Timbers</b></sub>
</a> </a>
</td> </td>
<td align="center">
<a href="https://github.com/forwardemail">
<img src="https://avatars.githubusercontent.com/u/32481436?v=4" width="80;" alt="forwardemail"/>
<br />
<sub><b>Forward Email - Open-source & Privacy-focused Email Service (2023)</b></sub>
</a>
</td>
<td align="center"> <td align="center">
<a href="https://github.com/getumbrel"> <a href="https://github.com/getumbrel">
<img src="https://avatars.githubusercontent.com/u/59408891?v=4" width="80;" alt="getumbrel"/> <img src="https://avatars.githubusercontent.com/u/59408891?v=4" width="80;" alt="getumbrel"/>
@@ -1224,6 +1238,8 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
<sub><b>HamburgerJung</b></sub> <sub><b>HamburgerJung</b></sub>
</a> </a>
</td> </td>
</tr>
<tr>
<td align="center"> <td align="center">
<a href="https://github.com/frankdez93"> <a href="https://github.com/frankdez93">
<img src="https://avatars.githubusercontent.com/u/87549420?v=4" width="80;" alt="frankdez93"/> <img src="https://avatars.githubusercontent.com/u/87549420?v=4" width="80;" alt="frankdez93"/>
@@ -1245,14 +1261,35 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
<sub><b>st617</b></sub> <sub><b>st617</b></sub>
</a> </a>
</td> </td>
</tr> <td align="center">
<tr> <a href="https://github.com/nrvo">
<img src="https://avatars.githubusercontent.com/u/151435968?u=e1dcb307fd0efdc45cddbe9490a7b956e4da6835&v=4" width="80;" alt="nrvo"/>
<br />
<sub><b>Nrvo</b></sub>
</a>
</td>
<td align="center"> <td align="center">
<a href="https://github.com/hudsonrock-partnerships"> <a href="https://github.com/hudsonrock-partnerships">
<img src="https://avatars.githubusercontent.com/u/163282900?u=5f2667f7fe5d284ac7a2da6b0800ea8970b0fcbf&v=4" width="80;" alt="hudsonrock-partnerships"/> <img src="https://avatars.githubusercontent.com/u/163282900?u=5f2667f7fe5d284ac7a2da6b0800ea8970b0fcbf&v=4" width="80;" alt="hudsonrock-partnerships"/>
<br /> <br />
<sub><b>hudsonrock-partnerships</b></sub> <sub><b>hudsonrock-partnerships</b></sub>
</a> </a>
</td>
<td align="center">
<a href="https://github.com/adamt279">
<img src="https://avatars.githubusercontent.com/u/173125775?v=4" width="80;" alt="adamt279"/>
<br />
<sub><b>adamt279</b></sub>
</a>
</td>
</tr>
<tr>
<td align="center">
<a href="https://github.com/CarterPerez-dev">
<img src="https://avatars.githubusercontent.com/u/188120068?v=4" width="80;" alt="CarterPerez-dev"/>
<br />
<sub><b>Carter Perez</b></sub>
</a>
</td> </td>
</tr> </tr>
<tbody> <tbody>

View File

@@ -1,116 +1,40 @@
import puppeteer from 'puppeteer-core'; import puppeteer from 'puppeteer-core';
import chromium from 'chrome-aws-lambda'; import chromium from 'chrome-aws-lambda';
import middleware from './_common/middleware.js'; import middleware from './_common/middleware.js';
import { execFile } from 'child_process';
import { promises as fs } from 'fs';
import path from 'path';
import pkg from 'uuid';
const { v4: uuidv4 } = pkg;
// Helper function for direct chromium screenshot as fallback
const directChromiumScreenshot = async (url) => {
console.log(`[DIRECT-SCREENSHOT] Starting direct screenshot process for URL: ${url}`);
// Create a tmp filename
const tmpDir = '/tmp';
const uuid = uuidv4();
const screenshotPath = path.join(tmpDir, `screenshot-${uuid}.png`);
console.log(`[DIRECT-SCREENSHOT] Will save screenshot to: ${screenshotPath}`);
return new Promise((resolve, reject) => {
const chromePath = process.env.CHROME_PATH || '/usr/bin/chromium';
const args = [
'--headless',
'--disable-gpu',
'--no-sandbox',
`--screenshot=${screenshotPath}`,
url
];
console.log(`[DIRECT-SCREENSHOT] Executing: ${chromePath} ${args.join(' ')}`);
execFile(chromePath, args, async (error, stdout, stderr) => {
if (error) {
console.error(`[DIRECT-SCREENSHOT] Chromium error: ${error.message}`);
return reject(error);
}
try {
// Read the screenshot file
const screenshotData = await fs.readFile(screenshotPath);
console.log(`[DIRECT-SCREENSHOT] Screenshot read successfully`);
// Convert to base64
const base64Data = screenshotData.toString('base64');
await fs.unlink(screenshotPath).catch(err =>
console.warn(`[DIRECT-SCREENSHOT] Failed to delete temp file: ${err.message}`)
);
resolve(base64Data);
} catch (readError) {
console.error(`[DIRECT-SCREENSHOT] Failed reading screenshot: ${readError.message}`);
reject(readError);
}
});
});
};
const screenshotHandler = async (targetUrl) => { const screenshotHandler = async (targetUrl) => {
console.log(`[SCREENSHOT] Request received for URL: ${targetUrl}`);
if (!targetUrl) { if (!targetUrl) {
console.error('[SCREENSHOT] URL is missing from queryStringParameters');
throw new Error('URL is missing from queryStringParameters'); throw new Error('URL is missing from queryStringParameters');
} }
if (!targetUrl.startsWith('http://') && !targetUrl.startsWith('https://')) { if (!targetUrl.startsWith('http://') && !targetUrl.startsWith('https://')) {
targetUrl = 'http://' + targetUrl; targetUrl = 'http://' + targetUrl;
} }
try { try {
new URL(targetUrl); new URL(targetUrl);
} catch (error) { } catch (error) {
console.error(`[SCREENSHOT] URL provided is invalid: ${targetUrl}`);
throw new Error('URL provided is invalid'); throw new Error('URL provided is invalid');
} }
// First try direct Chromium
try {
console.log(`[SCREENSHOT] Using direct Chromium method for URL: ${targetUrl}`);
const base64Screenshot = await directChromiumScreenshot(targetUrl);
console.log(`[SCREENSHOT] Direct screenshot successful`);
return { image: base64Screenshot };
} catch (directError) {
console.error(`[SCREENSHOT] Direct screenshot method failed: ${directError.message}`);
console.log(`[SCREENSHOT] Falling back to puppeteer method...`);
}
// fall back puppeteer
let browser = null; let browser = null;
try { try {
console.log(`[SCREENSHOT] Launching puppeteer browser`); browser = await puppeteer.launch({
browser = await puppeteer.launch({
args: [...chromium.args, '--no-sandbox'], // Add --no-sandbox flag args: [...chromium.args, '--no-sandbox'], // Add --no-sandbox flag
defaultViewport: { width: 800, height: 600 }, defaultViewport: { width: 800, height: 600 },
executablePath: process.env.CHROME_PATH || '/usr/bin/chromium', executablePath: process.env.CHROME_PATH || await chromium.executablePath,
headless: true, headless: chromium.headless,
ignoreHTTPSErrors: true, ignoreHTTPSErrors: true,
ignoreDefaultArgs: ['--disable-extensions'], ignoreDefaultArgs: ['--disable-extensions'],
}); });
console.log(`[SCREENSHOT] Creating new page`);
let page = await browser.newPage(); let page = await browser.newPage();
console.log(`[SCREENSHOT] Setting page preferences`);
await page.emulateMediaFeatures([{ name: 'prefers-color-scheme', value: 'dark' }]); await page.emulateMediaFeatures([{ name: 'prefers-color-scheme', value: 'dark' }]);
page.setDefaultNavigationTimeout(8000); page.setDefaultNavigationTimeout(8000);
console.log(`[SCREENSHOT] Navigating to URL: ${targetUrl}`);
await page.goto(targetUrl, { waitUntil: 'domcontentloaded' }); await page.goto(targetUrl, { waitUntil: 'domcontentloaded' });
console.log(`[SCREENSHOT] Checking if body element exists`);
await page.evaluate(() => { await page.evaluate(() => {
const selector = 'body'; const selector = 'body';
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@@ -121,21 +45,14 @@ const screenshotHandler = async (targetUrl) => {
resolve(); resolve();
}); });
}); });
console.log(`[SCREENSHOT] Taking screenshot`);
const screenshotBuffer = await page.screenshot(); const screenshotBuffer = await page.screenshot();
console.log(`[SCREENSHOT] Converting screenshot to base64`);
const base64Screenshot = screenshotBuffer.toString('base64'); const base64Screenshot = screenshotBuffer.toString('base64');
console.log(`[SCREENSHOT] Screenshot complete, returning image`);
return { image: base64Screenshot }; return { image: base64Screenshot };
} catch (error) {
console.error(`[SCREENSHOT] Puppeteer screenshot failed: ${error.message}`);
throw error;
} finally { } finally {
if (browser !== null) { if (browser !== null) {
console.log(`[SCREENSHOT] Closing browser`);
await browser.close(); await browser.close();
} }
} }

View File

@@ -1,7 +1,7 @@
{ {
"name": "web-check", "name": "web-check",
"type": "module", "type": "module",
"version": "2.0.1", "version": "2.0.0",
"homepage": "https://web-check.xyz", "homepage": "https://web-check.xyz",
"scripts": { "scripts": {
"start": "node server", "start": "node server",

View File

@@ -22,7 +22,7 @@ const siteInfo = {
site: import.meta.env.SITE_URL || 'https://web-check.xyz', site: import.meta.env.SITE_URL || 'https://web-check.xyz',
analytics: { analytics: {
enable: import.meta.env.ENABLE_ANALYTICS, enable: import.meta.env.ENABLE_ANALYTICS,
domain: 'web-check.as93.net', domain: 'web-check.xyz',
script: 'https://no-track.as93.net/js/script.js', script: 'https://no-track.as93.net/js/script.js',
}, },
}; };
@@ -92,7 +92,8 @@ const makeBreadcrumbs = () => {
<!-- Non-tracking hit counter --> <!-- Non-tracking hit counter -->
{analytics.enable && ( {analytics.enable && (
<script defer data-domain={analytics.domain} src={analytics.script}></script> <script defer is:inline type="text/partytown"
data-domain={analytics.domain} src={analytics.script}></script>
)} )}
<!-- Schema.org markup for Google --> <!-- Schema.org markup for Google -->