mirror of
https://github.com/jambonz/jambonz-api-server.git
synced 2026-07-17 17:41:55 +00:00
ed51d8b13f
major merge of features from the hosted branch that was created temporarily during the initial launch of jambonz.org
130 lines
3.3 KiB
JavaScript
130 lines
3.3 KiB
JavaScript
const assert = require('assert');
|
|
const opts = Object.assign({
|
|
timestamp: () => {
|
|
return `, "time": "${new Date().toISOString()}"`;
|
|
}
|
|
}, {
|
|
level: process.env.JAMBONES_LOGLEVEL || 'info'
|
|
});
|
|
const logger = require('pino')(opts);
|
|
const express = require('express');
|
|
const app = express();
|
|
const cors = require('cors');
|
|
const passport = require('passport');
|
|
const routes = require('./lib/routes');
|
|
|
|
assert.ok(process.env.JAMBONES_MYSQL_HOST &&
|
|
process.env.JAMBONES_MYSQL_USER &&
|
|
process.env.JAMBONES_MYSQL_PASSWORD &&
|
|
process.env.JAMBONES_MYSQL_DATABASE, 'missing JAMBONES_MYSQL_XXX env vars');
|
|
assert.ok(process.env.JAMBONES_REDIS_HOST, 'missing JAMBONES_REDIS_HOST env var');
|
|
assert.ok(process.env.JAMBONES_TIME_SERIES_HOST, 'missing JAMBONES_TIME_SERIES_HOST env var');
|
|
const {queryCdrs, queryAlerts, writeCdrs, writeAlerts, AlertType} = require('@jambonz/time-series')(
|
|
logger, process.env.JAMBONES_TIME_SERIES_HOST
|
|
);
|
|
const {
|
|
retrieveCall,
|
|
deleteCall,
|
|
listCalls,
|
|
purgeCalls,
|
|
retrieveSet,
|
|
addKey,
|
|
retrieveKey,
|
|
deleteKey
|
|
} = require('@jambonz/realtimedb-helpers')({
|
|
host: process.env.JAMBONES_REDIS_HOST || 'localhost',
|
|
port: process.env.JAMBONES_REDIS_PORT || 6379
|
|
}, logger);
|
|
const {
|
|
lookupAppBySid,
|
|
lookupAccountBySid,
|
|
lookupAccountByPhoneNumber,
|
|
lookupAppByPhoneNumber,
|
|
lookupCarrierBySid,
|
|
lookupSipGatewayBySid,
|
|
lookupSmppGatewayBySid
|
|
} = require('@jambonz/db-helpers')({
|
|
host: process.env.JAMBONES_MYSQL_HOST,
|
|
user: process.env.JAMBONES_MYSQL_USER,
|
|
port: process.env.JAMBONES_MYSQL_PORT || 3306,
|
|
password: process.env.JAMBONES_MYSQL_PASSWORD,
|
|
database: process.env.JAMBONES_MYSQL_DATABASE,
|
|
connectionLimit: process.env.JAMBONES_MYSQL_CONNECTION_LIMIT || 10
|
|
}, logger);
|
|
const PORT = process.env.HTTP_PORT || 3000;
|
|
const authStrategy = require('./lib/auth')(logger, retrieveKey);
|
|
|
|
passport.use(authStrategy);
|
|
|
|
app.locals = app.locals || {};
|
|
app.locals = {
|
|
...app.locals,
|
|
logger,
|
|
retrieveCall,
|
|
deleteCall,
|
|
listCalls,
|
|
purgeCalls,
|
|
retrieveSet,
|
|
addKey,
|
|
retrieveKey,
|
|
deleteKey,
|
|
lookupAppBySid,
|
|
lookupAccountBySid,
|
|
lookupAccountByPhoneNumber,
|
|
lookupAppByPhoneNumber,
|
|
lookupCarrierBySid,
|
|
lookupSipGatewayBySid,
|
|
lookupSmppGatewayBySid,
|
|
queryCdrs,
|
|
queryAlerts,
|
|
writeCdrs,
|
|
writeAlerts,
|
|
AlertType
|
|
};
|
|
|
|
const unless = (paths, middleware) => {
|
|
return (req, res, next) => {
|
|
if (paths.find((path) => req.path.startsWith(path))) return next();
|
|
return middleware(req, res, next);
|
|
};
|
|
};
|
|
|
|
app.use(cors());
|
|
app.use(express.urlencoded({extended: true}));
|
|
app.use(unless(['/stripe'], express.json()));
|
|
app.use('/v1', unless(
|
|
[
|
|
'/register',
|
|
'/forgot-password',
|
|
'/signin',
|
|
'/login',
|
|
'/messaging',
|
|
'/outboundSMS',
|
|
'/AccountTest',
|
|
'/InviteCodes',
|
|
'/PredefinedCarriers'
|
|
], passport.authenticate('bearer', {session: false})));
|
|
app.use('/', routes);
|
|
app.use((err, req, res, next) => {
|
|
logger.error(err, 'burped error');
|
|
res.status(err.status || 500).json({
|
|
msg: err.message
|
|
});
|
|
});
|
|
logger.info(`listening for HTTP traffic on port ${PORT}`);
|
|
app.listen(PORT);
|
|
|
|
// purge old calls from active call set every 10 mins
|
|
async function purge() {
|
|
try {
|
|
const count = await purgeCalls();
|
|
logger.info(`purged ${count} calls from realtimedb`);
|
|
} catch (err) {
|
|
logger.error(err, 'Error purging calls');
|
|
}
|
|
setTimeout(purge, 10 * 60 * 1000);
|
|
}
|
|
purge();
|
|
|
|
module.exports = app;
|