55 lines
1.3 KiB
JavaScript
55 lines
1.3 KiB
JavaScript
/**
|
|
* @fileoverview Express application factory for the Zapier-facing HTTP edge.
|
|
* @module app
|
|
*/
|
|
|
|
import express from 'express';
|
|
import { sendError } from './errors.js';
|
|
import { createDebugger } from './debug/logger.js';
|
|
import { traceMiddleware } from './debug/trace.js';
|
|
import { apiRoutes } from './routes/index.js';
|
|
import { loadStore } from './store/db.js';
|
|
import { config } from './config.js';
|
|
import { isNatsConnected } from './nats/connection.js';
|
|
|
|
const log = createDebugger('app');
|
|
|
|
/**
|
|
* Create the Express app (does not listen).
|
|
*
|
|
* @param {{ load?: boolean }} [options]
|
|
* @returns {import('express').Express}
|
|
*/
|
|
export function createApp(options = {}) {
|
|
if (options.load !== false) {
|
|
loadStore();
|
|
}
|
|
|
|
const app = express();
|
|
app.disable('x-powered-by');
|
|
|
|
app.use(express.json({ limit: '12mb' }));
|
|
app.use(traceMiddleware);
|
|
|
|
/**
|
|
* Liveness probe.
|
|
*/
|
|
app.get('/health', (_req, res) => {
|
|
res.json({
|
|
status: 'ok',
|
|
service: 'verae-zapier-middleware',
|
|
mockVerae: config.mockVerae,
|
|
natsEnabled: config.natsEnabled,
|
|
natsConnected: isNatsConnected(),
|
|
});
|
|
});
|
|
|
|
app.use('/zapier', apiRoutes);
|
|
|
|
app.use((err, _req, res, _next) => {
|
|
sendError(res, err);
|
|
});
|
|
|
|
log.info('express app created');
|
|
return app;
|
|
}
|