66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
import express, {
|
|
Response,
|
|
Router,
|
|
NextFunction,
|
|
RequestHandler,
|
|
} from 'express';
|
|
import multer from 'multer';
|
|
|
|
import { IRequest } from '@automatisch/types';
|
|
import appConfig from '../config/app';
|
|
import webhookHandlerByFlowId from '../controllers/webhooks/handler-by-flow-id';
|
|
import webhookHandlerByConnectionIdAndRefValue from '../controllers/webhooks/handler-by-connection-id-and-ref-value';
|
|
import webhookHandlerByApp from '../controllers/webhooks/handler-by-app';
|
|
|
|
const router = Router();
|
|
const upload = multer();
|
|
|
|
router.use(upload.none());
|
|
|
|
router.use(
|
|
express.text({
|
|
limit: appConfig.requestBodySizeLimit,
|
|
verify(req, res, buf) {
|
|
(req as IRequest).rawBody = buf;
|
|
},
|
|
})
|
|
);
|
|
|
|
const exposeError =
|
|
(handler: RequestHandler) =>
|
|
async (req: IRequest, res: Response, next: NextFunction) => {
|
|
try {
|
|
await handler(req, res, next);
|
|
} catch (err) {
|
|
next(err);
|
|
}
|
|
};
|
|
|
|
function createRouteHandler(
|
|
path: string,
|
|
handler: (req: IRequest, res: Response, next: NextFunction) => void
|
|
) {
|
|
const wrappedHandler = exposeError(handler);
|
|
|
|
router
|
|
.route(path)
|
|
.get(wrappedHandler)
|
|
.put(wrappedHandler)
|
|
.patch(wrappedHandler)
|
|
.post(wrappedHandler);
|
|
}
|
|
|
|
createRouteHandler(
|
|
'/connections/:connectionId/:refValue',
|
|
webhookHandlerByConnectionIdAndRefValue
|
|
);
|
|
createRouteHandler(
|
|
'/connections/:connectionId',
|
|
webhookHandlerByConnectionIdAndRefValue
|
|
);
|
|
createRouteHandler('/flows/:flowId', webhookHandlerByFlowId);
|
|
createRouteHandler('/:flowId', webhookHandlerByFlowId);
|
|
createRouteHandler('/apps/vonage', webhookHandlerByApp);
|
|
|
|
export default router;
|