1 | import pm2 from "./pm2";
|
2 | import Route from "./route";
|
3 | import apiStatus from "./gateway-api-status";
|
4 | import apiWebHook from "./gateway-api-webhook";
|
5 |
|
6 | import log from "./log";
|
7 |
|
8 |
|
9 | let isConnected = false;
|
10 | pm2.connect().then(() => isConnected = true);
|
11 |
|
12 |
|
13 |
|
14 | export 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 |
|
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 | };
|