mirror of
https://github.com/graphql-hive/console
synced 2026-04-21 14:37:17 +00:00
74 lines
1.9 KiB
JavaScript
74 lines
1.9 KiB
JavaScript
#!/usr/bin/env node
|
|
process.on('SIGTERM', () => process.exit(0));
|
|
process.on('SIGINT', () => process.exit(0));
|
|
const { createServer } = require('node:http');
|
|
const { randomUUID } = require('node:crypto');
|
|
const { AsyncLocalStorage } = require('node:async_hooks');
|
|
const { parse } = require('node:url');
|
|
const next = require('next');
|
|
|
|
const requestIdAsyncLocalStorage = new AsyncLocalStorage();
|
|
|
|
const loggerHandler = require('pino-http')({
|
|
redact: ['headers', 'req.headers', 'res.headers'],
|
|
quietReqLogger: true,
|
|
autoLogging: {
|
|
ignore(req) {
|
|
const isHealthCheck = req.url.startsWith('/api/health');
|
|
|
|
if (isHealthCheck) {
|
|
return true;
|
|
}
|
|
|
|
const isApi = req.url.startsWith('/api');
|
|
const isAuth = req.url.startsWith('/auth');
|
|
|
|
return !isApi && !isAuth;
|
|
},
|
|
},
|
|
genReqId(req, res) {
|
|
const existingID = req.id ?? req.headers['x-request-id'];
|
|
if (existingID) {
|
|
return existingID;
|
|
}
|
|
const id = 'gen-' + randomUUID();
|
|
res.setHeader('x-request-id', id);
|
|
return id;
|
|
},
|
|
mixin() {
|
|
const reqId = requestIdAsyncLocalStorage.getStore();
|
|
if (reqId) {
|
|
return { reqId };
|
|
}
|
|
return {};
|
|
},
|
|
});
|
|
|
|
const logger = loggerHandler.logger;
|
|
// server-logger.ts will reuse this logger instance
|
|
globalThis.logger = logger;
|
|
|
|
// <-- additionalRequire -->
|
|
|
|
const port = parseInt(process.env.PORT);
|
|
const hostname = '0.0.0.0';
|
|
const app = next({ dev: false, hostname, conf: {}, port, dir: __dirname });
|
|
const handle = app.getRequestHandler();
|
|
|
|
app
|
|
.prepare()
|
|
.then(() => {
|
|
createServer((req, res) => {
|
|
loggerHandler(req, res);
|
|
const parsedUrl = parse(req.url, true);
|
|
requestIdAsyncLocalStorage.run(req.id, () => {
|
|
handle(req, res, parsedUrl);
|
|
});
|
|
}).listen(port);
|
|
|
|
logger.info(`Server listening at http://${hostname}:${port}`);
|
|
})
|
|
.catch(error => {
|
|
logger.error(error);
|
|
process.exit(1);
|
|
});
|