-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
65 lines (57 loc) · 1.85 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Require libraries
const
promisify = require('es6-promisify'),
express = require('express'),
bodyParser = require('body-parser'),
methodOverride = require('method-override'),
log = require('./logger'),
ngrokConnect = promisify(require('ngrok').connect),
config = require('./init')(require('./config.json')),
passport = require('passport'),
compression = require('compression'),
fork = require('child_process').fork;
require('./passport')(passport);
log.logLevel = config.log_level;
log.debug(`Route token: ${config.route_token}`);
// Express setup
const app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json({type: 'application/json'}));
app.use(methodOverride());
app.use(passport.initialize());
app.use(compression());
// Logging middleware
app.use('*', (req, res, next) => {
log.debug(`${req.method}: ${req.baseUrl}`);
next();
});
// CORS
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
const ngrok = () => new Promise(resolve => {
if(!config.url) {
ngrokConnect(config.port).then(url => {
config.url = url;
resolve(url);
});
} else resolve();
});
// Startup
app.listen(config.port);
ngrok()
.then(() => require('./startup'))
.then(startup => {
// Use routes
app.use('/', require('./routes')(passport, startup.queueConnection));
// Subscribe to queues
let queues = new Map();
queues.set('internal', 'internal.message.nlp');
queues.forEach((value, key) => {
log.debug(`Subscriber starting for ${key} queue`);
fork(__dirname + '/subscribe', [key, value, config.url], {silent: false, stdio: 'pipe'});
});
console.log('startup complete');
});