UNPKG

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