@tomisakae/syosetu-api
Version:
Enterprise-grade Fastify TypeScript API for Syosetu.com data extraction using official API and web scraping. Run instantly with 'npx @tomisakae/syosetu-api'
53 lines β’ 2.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
require("module-alias/register");
require("dotenv/config");
const app_1 = require("./app");
const config_1 = require("@/config");
const utils_1 = require("@/utils");
async function startServer() {
try {
const app = await (0, app_1.createApp)();
await app.listen({
port: config_1.appConfig.port,
host: config_1.appConfig.host,
});
console.log(`π Server Δang chαΊ‘y trΓͺn http://${config_1.appConfig.host}:${config_1.appConfig.port}`);
console.log(`π Health check: http://${config_1.appConfig.host}:${config_1.appConfig.port}/health`);
console.log(`π Syosetu API: http://${config_1.appConfig.host}:${config_1.appConfig.port}/api/syosetu`);
console.log(`π API Documentation: http://${config_1.appConfig.host}:${config_1.appConfig.port}/docs`);
console.log(`π Environment: ${config_1.appConfig.nodeEnv}`);
utils_1.logger.info('Server started successfully');
const gracefulShutdown = async (signal) => {
utils_1.logger.info(`${signal} received, shutting down gracefully...`);
try {
await app.close();
utils_1.logger.info('β
Fastify server closed');
utils_1.logger.info('β
Graceful shutdown completed');
process.exit(0);
}
catch (error) {
utils_1.logger.error('β Error during graceful shutdown:', error);
process.exit(1);
}
};
process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));
process.on('SIGINT', () => gracefulShutdown('SIGINT'));
process.on('uncaughtException', error => {
utils_1.logger.error('β Uncaught Exception:', error);
process.exit(1);
});
process.on('unhandledRejection', (reason, promise) => {
utils_1.logger.error('β Unhandled Rejection at:', promise, 'reason:', reason);
process.exit(1);
});
}
catch (error) {
console.error('β Failed to start server:', error);
utils_1.logger.error('β Failed to start server:', error);
process.exit(1);
}
}
void startServer();
//# sourceMappingURL=server.js.map