UNPKG

3.66 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('/accounts/:accountId/operate', 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 const operateOptions = {
30 accountId: ctx.params.accountId,
31 appletId,
32 body: ctx.request.body,
33 };
34 try {
35 ctx.body = await exports.app.appletManager.operateAccount(operateOptions);
36 }
37 catch (e) {
38 if (e.name === 'StatusCodeError') {
39 ctx.status = e.statusCode;
40 ctx.body = e.error;
41 }
42 else {
43 throw e;
44 }
45 }
46});
47exports.app
48 .use(bodyParser())
49 .use(router.routes())
50 .use(router.allowedMethods());
51const routerPathRegex = pathToRegexp('/applets/:appletId/:naType/:naVersion/:packageName/:version/:path*');
52const callback = exports.app.callback();
53const httpServerCallback = async function (req, res) {
54 LOG.info('Receiving request', {
55 url: req.url,
56 method: req.method,
57 headers: req.headers,
58 });
59 const path = url.parse(req.url);
60 const result = routerPathRegex.exec(path.pathname);
61 if (result != null) {
62 const appletId = result[1];
63 const naType = result[2];
64 const naVersion = result[3];
65 const packageName = result[4];
66 const version = result[5];
67 const newPath = result[6] || '';
68 const route = await exports.app.appletManager.route({
69 appletId, naType, naVersion, packageName, version,
70 });
71 if (newPath === 'sstruct') {
72 const origin = req.headers.origin;
73 if (origin != null) {
74 res.setHeader('Access-Control-Allow-Origin', origin);
75 res.setHeader('Access-Control-Allow-Credentials', 'true');
76 }
77 }
78 if (route != null) {
79 req.url = newPath;
80 req.headers[sbase.constants.headers.request.NODESWORK_FORWARDED_TO] = (route.route);
81 proxy.web(req, res, {
82 target: route.target,
83 xfwd: true,
84 toProxy: true,
85 }, (e) => {
86 res.writeHead(500, { 'Content-Type': 'text/plain' });
87 const message = 'Routing Error in nam.';
88 res.end(message);
89 console.error(message, e);
90 });
91 return;
92 }
93 else {
94 LOG.warn('Route not found', { path: result[0] });
95 }
96 }
97 callback(req, res);
98};
99exports.server = http.createServer(httpServerCallback);
100async function sstats(ctx) {
101 ctx.body = {
102 app: {
103 name: 'nam',
104 version,
105 },
106 applets: {
107 status: await exports.app.appletManager.ps(),
108 },
109 };
110}
111
112//# sourceMappingURL=server.js.map