1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.createHTTPServer = createHTTPServer;
|
7 |
|
8 | var _http = _interopRequireDefault(require("http"));
|
9 |
|
10 | var _http2 = require("http2");
|
11 |
|
12 | var _nullthrows = _interopRequireDefault(require("nullthrows"));
|
13 |
|
14 | var _ = require("../");
|
15 |
|
16 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | async function createHTTPServer(options) {
|
22 | let server;
|
23 |
|
24 | if (!options.https) {
|
25 | server = _http.default.createServer(options.listener);
|
26 | } else if (options.https === true) {
|
27 | let {
|
28 | cert,
|
29 | key
|
30 | } = await (0, _.generateCertificate)(options.outputFS, options.cacheDir, options.host);
|
31 | server = (0, _http2.createSecureServer)({
|
32 | cert,
|
33 | key,
|
34 | allowHTTP1: true
|
35 | }, options.listener);
|
36 | } else {
|
37 | let {
|
38 | cert,
|
39 | key
|
40 | } = await (0, _.getCertificate)(options.inputFS, options.https);
|
41 | server = (0, _http2.createSecureServer)({
|
42 | cert,
|
43 | key,
|
44 | allowHTTP1: true
|
45 | }, options.listener);
|
46 | }
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 | let sockets = new Set();
|
53 | server.on('connection', socket => {
|
54 | (0, _nullthrows.default)(sockets).add(socket);
|
55 | socket.on('close', () => {
|
56 | (0, _nullthrows.default)(sockets).delete(socket);
|
57 | });
|
58 | });
|
59 | return {
|
60 | server,
|
61 |
|
62 | stop() {
|
63 | return new Promise((resolve, reject) => {
|
64 | for (let socket of (0, _nullthrows.default)(sockets)) {
|
65 | socket.destroy();
|
66 | }
|
67 |
|
68 | sockets = new Set();
|
69 | server.close(err => {
|
70 | if (err != null) {
|
71 | reject(err);
|
72 | return;
|
73 | }
|
74 |
|
75 | resolve();
|
76 | });
|
77 | });
|
78 | }
|
79 |
|
80 | };
|
81 | } |
\ | No newline at end of file |