tinylink/core/connectors/httpJson.js
mahdahar 10f8dbbb83 refactor: consolidate core runtime and docs
Move middleware sources into core/, refresh config paths, and update design/user docs to reflect the raw payload pipeline.
2026-04-07 11:30:11 +07:00

66 lines
1.8 KiB
JavaScript

const express = require('express');
const config = require('../config/config');
const logger = require('../logger');
function createHttpJsonConnector(options = {}) {
let server;
let messageHandler = async () => {};
let errorHandler = (err) => logger.error({ err }, 'connector error');
const port = Number(options.port || config.connectors.httpJsonPort);
const instrumentId = options.instrument_id || null;
const app = express();
app.use(express.json());
app.post('/messages', async (req, res) => {
try {
await messageHandler({
payload: req.body,
context: {
connector: 'http-json',
instrument_id: instrumentId,
remoteAddress: req.socket?.remoteAddress,
remotePort: req.socket?.remotePort,
localPort: req.socket?.localPort || port
}
});
res.status(202).json({ status: 'queued' });
} catch (err) {
errorHandler(err);
res.status(500).json({ status: 'error', message: err.message });
}
});
return {
name: () => 'http-json',
type: () => 'http-json',
async start() {
return new Promise((resolve) => {
server = app.listen(port, () => {
logger.info({ port, instrument_id: instrumentId }, 'http-json connector listening');
resolve();
});
});
},
async stop() {
if (!server) return;
return new Promise((resolve, reject) => {
server.close((err) => {
if (err) return reject(err);
resolve();
});
});
},
health() {
return { status: server ? 'up' : 'down', port, instrument_id: instrumentId };
},
onMessage(handler) {
messageHandler = handler;
},
onError(handler) {
errorHandler = handler;
}
};
}
module.exports = { createHttpJsonConnector };