UNPKG

4.18 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const Router = require("koa-router");
4const Koa = require("Koa");
5const url = require("url");
6const httpProxy = require("http-proxy");
7const http = require("http");
8const pathToRegexp = require("path-to-regexp");
9const sbase = require("@nodeswork/sbase");
10const logger = require("@nodeswork/logger");
11const applet = require("@nodeswork/applet");
12const utils_1 = require("@nodeswork/utils");
13const LOG = logger.getLogger();
14class Application extends Koa {
15}
16exports.Application = Application;
17const bodyParser = require('koa-bodyparser');
18exports.app = new Application();
19const router = new Router();
20const version = require('../package.json').version;
21const proxy = httpProxy.createProxyServer({});
22router
23 .get('/sstats', sstats)
24 .post('/executions/:executionId/metrics', async (ctx) => {
25 const appletId = ctx.request.get(applet.constants.headers.request.APPLET_ID);
26 if (appletId == null) {
27 throw utils_1.NodesworkError.badRequest('applet id is missing');
28 }
29 ctx.body = await exports.app.appletManager.updateExecutionMetrics(ctx.params.executionId, {
30 dimensions: ctx.request.body.dimensions,
31 name: ctx.request.body.name,
32 value: ctx.request.body.value,
33 });
34})
35 .post('/accounts/:accountId/operate', async (ctx) => {
36 const appletId = ctx.request.get(applet.constants.headers.request.APPLET_ID);
37 if (appletId == null) {
38 throw utils_1.NodesworkError.badRequest('applet id is missing');
39 }
40 const operateOptions = {
41 accountId: ctx.params.accountId,
42 appletId,
43 body: ctx.request.body,
44 };
45 try {
46 ctx.body = await exports.app.appletManager.operateAccount(operateOptions);
47 }
48 catch (e) {
49 if (e.name === 'StatusCodeError') {
50 ctx.status = e.statusCode;
51 ctx.body = e.error;
52 }
53 else {
54 throw e;
55 }
56 }
57});
58exports.app
59 .use(bodyParser())
60 .use(router.routes())
61 .use(router.allowedMethods());
62const routerPathRegex = pathToRegexp('/applets/:appletId/:naType/:naVersion/:packageName/:version/:path*');
63const callback = exports.app.callback();
64const httpServerCallback = async function (req, res) {
65 LOG.info('Receiving request', {
66 url: req.url,
67 method: req.method,
68 headers: req.headers,
69 });
70 const path = url.parse(req.url);
71 const result = routerPathRegex.exec(path.pathname);
72 if (result != null) {
73 const appletId = result[1];
74 const naType = result[2];
75 const naVersion = result[3];
76 const packageName = result[4];
77 const version = result[5];
78 const newPath = result[6] || '';
79 const route = await exports.app.appletManager.route({
80 appletId, naType, naVersion, packageName, version,
81 });
82 LOG.debug('Got routes', route);
83 if (newPath === 'sstruct') {
84 const origin = req.headers.origin;
85 if (origin != null) {
86 res.setHeader('Access-Control-Allow-Origin', origin);
87 res.setHeader('Access-Control-Allow-Credentials', 'true');
88 }
89 }
90 if (route != null) {
91 req.url = newPath;
92 req.headers[sbase.constants.headers.request.NODESWORK_FORWARDED_TO] = (route.route);
93 proxy.web(req, res, {
94 target: route.target,
95 xfwd: true,
96 toProxy: true,
97 }, (e) => {
98 res.writeHead(500, { 'Content-Type': 'text/plain' });
99 const message = 'Routing Error in nam.';
100 res.end(message);
101 console.error(message, e);
102 });
103 return;
104 }
105 else {
106 LOG.warn('Route not found', { path: result[0] });
107 }
108 }
109 callback(req, res);
110};
111exports.server = http.createServer(httpServerCallback);
112async function sstats(ctx) {
113 ctx.body = {
114 app: {
115 name: 'nam',
116 version,
117 },
118 applets: {
119 status: await exports.app.appletManager.ps(),
120 },
121 };
122}
123
124//# sourceMappingURL=server.js.map