51 lines
1.5 KiB
JavaScript
51 lines
1.5 KiB
JavaScript
/**
|
|
* @fileoverview Process entrypoint: HTTP listen + optional in-process poller.
|
|
* @module index
|
|
*/
|
|
|
|
import { createApp } from './app.js';
|
|
import { config } from './config.js';
|
|
import { createDebugger } from './debug/logger.js';
|
|
import { startInProcessJobPoller } from './workers/inProcessJobPoller.js';
|
|
import { connectNats, ensureStreams } from './nats/connection.js';
|
|
import { startJobPollerWorker } from './workers/jobPollerWorker.js';
|
|
import { startWebhookWorker } from './workers/webhookWorker.js';
|
|
|
|
const log = createDebugger('app');
|
|
|
|
/**
|
|
* Start the HTTP server and background workers.
|
|
* @returns {import('http').Server}
|
|
*/
|
|
export function startServer() {
|
|
const app = createApp();
|
|
|
|
if (config.natsEnabled) {
|
|
connectNats()
|
|
.then(({ jsm }) => ensureStreams(jsm))
|
|
.then(() => Promise.all([startJobPollerWorker(), startWebhookWorker()]))
|
|
.then(() => log.info('NATS workers started'))
|
|
.catch((err) => log.error('NATS worker start failed', { error: err.message }));
|
|
} else {
|
|
startInProcessJobPoller();
|
|
}
|
|
|
|
const server = app.listen(config.port, config.host, () => {
|
|
log.info('middleware listening', {
|
|
host: config.host,
|
|
port: config.port,
|
|
veraeApiBaseUrl: config.veraeApiBaseUrl,
|
|
mockVerae: config.mockVerae,
|
|
natsEnabled: config.natsEnabled,
|
|
});
|
|
// eslint-disable-next-line no-console
|
|
console.log(
|
|
`Verae Zapier middleware listening on http://${config.host}:${config.port}`,
|
|
);
|
|
});
|
|
return server;
|
|
}
|
|
|
|
if (process.argv[1]?.includes('index.js')) {
|
|
startServer();
|
|
}
|