PRIX / hf-start.js
Rachit-Tw's picture
Upload 139 files (#2)
fafeeda
Raw
History Blame Contribute Delete
2.57 kB
#!/usr/bin/env node
/**
* Hugging Face Spaces Entrypoint
* Ensures proper port binding and environment validation for HF Spaces deployment
*/
const {spawn} = require('child_process');
const http = require('http');
const PORT = process.env.PORT || 7860;
const HOST = process.env.HOST || '0.0.0.0';
function validateEnvironment() {
const required = ['APP_ID', 'WEBHOOK_SECRET', 'PRIVATE_KEY'];
const missing = required.filter(key => !process.env[key]);
if (missing.length > 0) {
console.warn(`WARNING: Missing environment variables: ${missing.join(', ')}`);
console.warn('The application may not function correctly without these.');
return false;
}
return true;
}
function checkServerHealth() {
return new Promise((resolve) => {
const req = http.request(
{
hostname: HOST,
port: PORT,
path: '/ping',
method: 'GET',
timeout: 5000
},
(res) => {
resolve(res.statusCode === 200);
}
);
req.on('error', () => resolve(false));
req.on('timeout', () => {
req.destroy();
resolve(false);
});
req.end();
});
}
async function startServer() {
console.log(`PRIX starting on ${HOST}:${PORT}...`);
const isValid = validateEnvironment();
if (!isValid) {
console.warn('Proceeding with missing environment variables...');
}
const server = spawn('npm', ['start'], {
stdio: 'inherit',
env: {...process.env, PORT, HOST}
});
server.on('error', (err) => {
console.error('Failed to start server:', err);
process.exit(1);
});
let healthCheckCount = 0;
const maxHealthChecks = 12;
const healthInterval = setInterval(async () => {
const isHealthy = await checkServerHealth();
if (isHealthy) {
console.log('PRIX server is healthy and ready!');
clearInterval(healthInterval);
} else {
healthCheckCount++;
if (healthCheckCount >= maxHealthChecks) {
console.warn('Server health check timeout, but continuing...');
clearInterval(healthInterval);
}
}
}, 5000);
process.on('SIGTERM', () => {
console.log('Received SIGTERM, shutting down gracefully...');
clearInterval(healthInterval);
server.kill('SIGTERM');
process.exit(0);
});
process.on('SIGINT', () => {
console.log('Received SIGINT, shutting down gracefully...');
clearInterval(healthInterval);
server.kill('SIGINT');
process.exit(0);
});
}
startServer();