UNPKG

1.33 kBJavaScriptView Raw
1import pm2 from "./pm2";
2import Route from "./route";
3import apiStatus from "./gateway-api-status";
4import apiWebHook from "./gateway-api-webhook";
5
6import log from "./log";
7
8
9let isConnected = false;
10pm2.connect().then(() => isConnected = true);
11
12
13
14export default (baseRoute, apps, middleware, manifest) => {
15 baseRoute = Route.parse(baseRoute);
16 const status = apiStatus(apps);
17 const webhook = apiWebHook(apps, manifest);
18
19 const isRouteMatch = (req) => {
20 const domain = req.get("host").split(":")[0];
21 return baseRoute.domain === "*" || domain === baseRoute.domain;
22 };
23
24 // Register routes.
25 const register = (verb, path, handler) => {
26 path = `/${ baseRoute.path + path }`;
27 log.info(` - ${ verb }: ${ baseRoute.domain }${ path }`);
28 middleware[verb](path, (req, res, next) => {
29 return isConnected
30 ? isRouteMatch(req) ? handler(req, res) : next()
31 : res.status(500).send({ isInitialized: false });
32 });
33 };
34 const get = (path, handler) => register("get", path, handler);
35 const post = (path, handler) => register("post", path, handler);
36
37 log.info("API:");
38 get(":app", status.getAppStatus);
39 get(":app/restart", status.getAppStatus);
40 get("", status.getStatuses);
41 post("repo", webhook.post);
42 log.info("");
43};