mirror of
https://github.com/Lissy93/web-check.git
synced 2025-06-19 03:16:45 +02:00
Send user direct to check page, if self-hosted
This commit is contained in:
parent
d9135883de
commit
42d6e0394f
@ -31,6 +31,9 @@ const site = unwrapEnvVar('SITE_URL', 'https://web-check.xyz');
|
|||||||
// The base URL of the site (if serving from a subdirectory)
|
// The base URL of the site (if serving from a subdirectory)
|
||||||
const base = unwrapEnvVar('BASE_URL', '/');
|
const base = unwrapEnvVar('BASE_URL', '/');
|
||||||
|
|
||||||
|
// Should run the app in boss-mode (requires extra configuration)
|
||||||
|
const isBossServer = unwrapEnvVar('BOSS_SERVER', false);
|
||||||
|
|
||||||
// Initialize Astro integrations
|
// Initialize Astro integrations
|
||||||
const integrations = [react(), partytown(), sitemap()];
|
const integrations = [react(), partytown(), sitemap()];
|
||||||
|
|
||||||
@ -62,17 +65,13 @@ console.log(
|
|||||||
`to help fund maintenance & development.\x1b[0m\n`,
|
`to help fund maintenance & development.\x1b[0m\n`,
|
||||||
);
|
);
|
||||||
|
|
||||||
const buildOptions = {
|
const redirects = {};
|
||||||
output: 'dist',
|
|
||||||
format: 'esm',
|
|
||||||
};
|
|
||||||
|
|
||||||
|
// Skip the marketing homepage for self-hosted users
|
||||||
const redirects = {
|
if (isBossServer && isBossServer === 'true') {
|
||||||
'/': '/test',
|
redirects['/'] = '/check';
|
||||||
// '/results/[...target]': '/check/[...target]', // The old path was /results (redirect to maintain compatibility)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Export Astro configuration
|
// Export Astro configuration
|
||||||
export default defineConfig({ output, base, integrations, site, adapter, redirects, buildOptions });
|
export default defineConfig({ output, base, integrations, site, adapter, redirects });
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "web-check",
|
"name": "web-check",
|
||||||
|
"type": "module",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"homepage": ".",
|
"homepage": ".",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
92
server.js
92
server.js
@ -79,54 +79,62 @@ fs.readdirSync(dirPath, { withFileTypes: true })
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Create a single API endpoint to execute all lambda functions
|
// Create a single API endpoint to execute all lambda functions
|
||||||
app.get('/api', async (req, res) => {
|
app.get('/api', async (req, res) => {
|
||||||
const results = {};
|
const results = {};
|
||||||
const { url } = req.query;
|
const { url } = req.query;
|
||||||
const maxExecutionTime = process.env.API_TIMEOUT_LIMIT || 20000;
|
const maxExecutionTime = process.env.API_TIMEOUT_LIMIT || 20000;
|
||||||
|
|
||||||
const executeHandler = async (handler, req, res) => {
|
const executeHandler = async (handler, req, res) => {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
try {
|
|
||||||
const mockRes = {
|
|
||||||
status: (statusCode) => mockRes,
|
|
||||||
json: (body) => resolve({ body }),
|
|
||||||
};
|
|
||||||
await handler({ ...req, query: { url } }, mockRes);
|
|
||||||
} catch (err) {
|
|
||||||
reject(err);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const timeout = (ms, jobName = null) => {
|
|
||||||
return new Promise((_, reject) => {
|
|
||||||
setTimeout(() => {
|
|
||||||
reject(new Error(
|
|
||||||
`Timed out after ${ms/1000} seconds${jobName ? `, when executing ${jobName}` : ''}`
|
|
||||||
));
|
|
||||||
}, ms);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const handlerPromises = Object.entries(handlers).map(async ([route, handler]) => {
|
|
||||||
const routeName = route.replace(`${API_DIR}/`, '');
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const result = await Promise.race([
|
const mockRes = {
|
||||||
executeHandler(handler, req, res),
|
status: (statusCode) => mockRes,
|
||||||
timeout(maxExecutionTime, routeName)
|
json: (body) => resolve({ body }),
|
||||||
]);
|
};
|
||||||
results[routeName] = result.body;
|
await handler({ ...req, query: { url } }, mockRes);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
results[routeName] = { error: err.message };
|
reject(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
};
|
||||||
await Promise.all(handlerPromises);
|
|
||||||
res.json(results);
|
const timeout = (ms, jobName = null) => {
|
||||||
|
return new Promise((_, reject) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
reject(new Error(
|
||||||
|
`Timed out after ${ms/1000} seconds${jobName ? `, when executing ${jobName}` : ''}`
|
||||||
|
));
|
||||||
|
}, ms);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const handlerPromises = Object.entries(handlers).map(async ([route, handler]) => {
|
||||||
|
const routeName = route.replace(`${API_DIR}/`, '');
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await Promise.race([
|
||||||
|
executeHandler(handler, req, res),
|
||||||
|
timeout(maxExecutionTime, routeName)
|
||||||
|
]);
|
||||||
|
results[routeName] = result.body;
|
||||||
|
} catch (err) {
|
||||||
|
results[routeName] = { error: err.message };
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await Promise.all(handlerPromises);
|
||||||
|
res.json(results);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Skip the marketing homepage, for self-hosted users
|
||||||
|
app.use((req, res, next) => {
|
||||||
|
if (req.path === '/' && process.env.BOSS_SERVER !== 'true') {
|
||||||
|
req.url = '/check';
|
||||||
|
}
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
|
||||||
// Serve up the GUI - if build dir exists, and GUI feature enabled
|
// Serve up the GUI - if build dir exists, and GUI feature enabled
|
||||||
if (process.env.DISABLE_GUI && process.env.DISABLE_GUI !== 'false') {
|
if (process.env.DISABLE_GUI && process.env.DISABLE_GUI !== 'false') {
|
||||||
app.get('*', async (req, res) => {
|
app.get('*', async (req, res) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user