UNPKG

6.86 kBJavaScriptView Raw
1"use strict";
2var __importStar = (this && this.__importStar) || function (mod) {
3 if (mod && mod.__esModule) return mod;
4 var result = {};
5 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
6 result["default"] = mod;
7 return result;
8};
9Object.defineProperty(exports, "__esModule", { value: true });
10const fs = __importStar(require("fs"));
11const akala = __importStar(require("@akala/core"));
12const path_1 = require("path");
13const router_1 = require("./router");
14var log = akala.log('akala:master');
15const microservice_1 = require("./microservice");
16const config_1 = require("./config");
17const master_meta_1 = require("./master-meta");
18var httpPackage = 'http';
19var port = process.env.PORT || '5678';
20akala.register('$updateConfig', new Proxy(config_1.updateConfig, {
21 get: function (uc, key) {
22 return function (config, subKey) {
23 return uc(config, key + '.' + subKey);
24 };
25 }
26}));
27akala.registerFactory('$config', new Proxy(config_1.getConfig, {
28 get: function (c, key) {
29 return function () {
30 return c().then(function (config) { return config[key]; });
31 };
32 }
33}));
34var lateBoundRoutes = router_1.router();
35var preAuthenticatedRouter = router_1.router();
36var authenticationRouter = router_1.router();
37var app = router_1.router();
38akala.register('$preAuthenticationRouter', preAuthenticatedRouter);
39akala.register('$authenticationRouter', authenticationRouter);
40akala.register('$router', lateBoundRoutes);
41var masterRouter = router_1.router();
42masterRouter.use(preAuthenticatedRouter.router);
43masterRouter.use(authenticationRouter.router);
44masterRouter.use(lateBoundRoutes.router);
45masterRouter.use(app.router);
46var root;
47var index;
48var privateKey;
49var fullchain;
50var configFile = fs.realpathSync('./config.json');
51fs.exists(configFile, function (exists) {
52 var config = exists && require(configFile) || {};
53 root = config && config['@akala/server'] && config['@akala/server'].root;
54 index = config && config['@akala/server'] && config['@akala/server'].index;
55 port = config && config['@akala/server'] && config['@akala/server'].port || port;
56 privateKey = config && config['@akala/server'] && config['@akala/server'].privateKey || 'privkey.pem';
57 fullchain = config && config['@akala/server'] && config['@akala/server'].fullchain || 'fullchain.pem';
58 if (fs.existsSync(privateKey) && fs.existsSync(fullchain))
59 httpPackage = 'https';
60 var dn = config && config['@akala/server'] && config['@akala/server'].dn || 'localhost';
61 akala.register('$rootUrl', httpPackage + '://' + dn + ':' + port);
62 var sourcesFile = './sources.list';
63 fs.readFile(sourcesFile, 'utf8', function (error, sourcesFileContent) {
64 var sources = [];
65 var modules = [];
66 if (error && error.code == 'ENOENT') {
67 var pkg = require(path_1.join(process.cwd(), './package.json'));
68 var [source, folder] = pkg.name.split('/');
69 microservice_1.microservice(pkg.name, source, [source], config);
70 modules.push(pkg.name);
71 }
72 else {
73 sources = JSON.parse(sourcesFileContent);
74 }
75 akala.eachAsync(sources, function (source, i, next) {
76 fs.readdir('node_modules/' + source, function (err, dirModules) {
77 if (err) {
78 console.error(err);
79 return;
80 }
81 dirModules.forEach(function (folder) {
82 microservice_1.microservice(source + '/' + folder, source, [source], config);
83 modules.push(source + '/' + folder);
84 });
85 next();
86 });
87 }, function (error) {
88 if (error) {
89 console.error(error);
90 return;
91 }
92 akala.register('$$modules', modules);
93 log(modules);
94 akala.module('bootstrap', ...modules).activate([], function () {
95 log('registering error handler');
96 var serveRoot = master_meta_1.serveStatic(root, { index: index || undefined });
97 preAuthenticatedRouter.use(master_meta_1.serveStatic(root, { index: index || undefined, fallthrough: true }));
98 preAuthenticatedRouter.get('/favicon.ico', master_meta_1.serveStatic(root, { index: index || undefined, fallthrough: false }));
99 preAuthenticatedRouter.get('/manifest.json', master_meta_1.serveStatic(root, { index: index || undefined, fallthrough: false }));
100 app.get('/@akala/client', function (_req, res) {
101 res.json(modules.map(m => { return { name: m, dep: akala.module(m).dep }; }));
102 });
103 app.get('*', function (request, response) {
104 if (request.url.endsWith('.map')) {
105 response.sendStatus(404);
106 }
107 else
108 serveRoot(request, response, function () {
109 fs.createReadStream(root + '/index.html').pipe(response);
110 });
111 });
112 masterRouter.use(function (err, req, res, next) {
113 try {
114 if (err) {
115 console.error('error occurred on ' + req.url);
116 console.error(err.stack);
117 res.statusCode = 500;
118 res.write(JSON.stringify(err));
119 res.end();
120 }
121 else
122 res.sendStatus(404);
123 }
124 catch (e) {
125 console.error(e.stack);
126 res.statusCode = 500;
127 res.end();
128 }
129 });
130 });
131 akala.module('bootstrap').activate(['$rootUrl'], function (url) {
132 console.log('server ready and listening on ' + url + '...');
133 });
134 akala.module('bootstrap').start();
135 });
136 });
137 switch (httpPackage) {
138 case 'http':
139 const http = require('http');
140 var server = http.createServer();
141 break;
142 case 'https':
143 // const http2 = require('http2');
144 // var server = http2.createSecureServer({ allowHTTP1: true, key: fs.readFileSync('priv.pem'), cert: fs.readFileSync('fullchain.pem') });
145 const https = require(httpPackage);
146 var server = https.createServer({ key: fs.readFileSync(privateKey), cert: fs.readFileSync(fullchain) });
147 break;
148 }
149 server.listen(port, dn);
150 akala.register('$server', server);
151 masterRouter.attachTo(server);
152});
153//# sourceMappingURL=master.js.map
\No newline at end of file