// @flow import bodyParser from 'body-parser' import { Router } from 'express' import log from './log' import type { BotContext, Handlers } from './types' const jsonParser = bodyParser.json() export const createRouter = ( handlers: Handlers, context: BotContext, ): Router => { log('create router with handlers: %s', Object.keys(handlers).join(', ')) const router = new Router() router.use(jsonParser) if (handlers.enable) { router.post('/enable', (req, res) => { handlers.enable(req.body || {}, context) res.sendStatus(200) }) } if (handlers.disable) { router.post('/disable', (req, res) => { handlers.disable(req.body || {}, context) res.sendStatus(200) }) } if (handlers.conversation_added) { router.post('/conversation_added', (req, res) => { handlers.conversation_added(req.body || {}, context) res.sendStatus(200) }) } if (handlers.conversation_removed) { router.post('/conversation_removed', (req, res) => { handlers.conversation_removed(req.body || {}, context) res.sendStatus(200) }) } if (handlers.edit_subscription) { router.post('/edit_subscription', (req, res) => { handlers.edit_subscription(req.body || {}, context) res.sendStatus(200) }) } if (handlers.delete_subscription) { router.post('/delete_subscription', (req, res) => { handlers.delete_subscription(req.body || {}, context) res.sendStatus(200) }) } if (handlers.post) { router.post('/post', async (req, res) => { const params = req.body || {} if (!params.user_id) { return res.status(400).send('Missing user_id') } if (!params.data) { return res.status(400).send('Missing data') } if (!params.context) { return res.status(400).send('Missing context') } try { const postResult = handlers.post(params, context) const payload = postResult.then ? await postResult : postResult if (payload) { res.send(payload) } else { res.send({ success: true }) } } catch (err) { log('error handling post request', params, err) res.sendStatus(500) } }) } return router }