@dcl/http-server 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +3 -0
  2. package/dist/benchmark.d.ts +1 -0
  3. package/dist/benchmark.js +94 -0
  4. package/dist/benchmark.js.map +1 -0
  5. package/dist/cors.d.ts +35 -0
  6. package/dist/cors.js +138 -0
  7. package/dist/cors.js.map +1 -0
  8. package/dist/helpers.d.ts +1 -0
  9. package/dist/helpers.js +3 -0
  10. package/dist/helpers.js.map +1 -0
  11. package/dist/index.d.ts +8 -0
  12. package/dist/index.js +25 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/injectors.d.ts +5 -0
  15. package/dist/injectors.js +22 -0
  16. package/dist/injectors.js.map +1 -0
  17. package/dist/layer.d.ts +58 -0
  18. package/dist/layer.js +102 -0
  19. package/dist/layer.js.map +1 -0
  20. package/dist/logic.d.ts +12 -0
  21. package/dist/logic.js +288 -0
  22. package/dist/logic.js.map +1 -0
  23. package/dist/methods.d.ts +6 -0
  24. package/dist/methods.js +16 -0
  25. package/dist/methods.js.map +1 -0
  26. package/dist/metrics.d.ts +36 -0
  27. package/dist/metrics.js +107 -0
  28. package/dist/metrics.js.map +1 -0
  29. package/dist/middleware.d.ts +9 -0
  30. package/dist/middleware.js +35 -0
  31. package/dist/middleware.js.map +1 -0
  32. package/dist/router.d.ts +190 -0
  33. package/dist/router.js +516 -0
  34. package/dist/router.js.map +1 -0
  35. package/dist/server-handler.d.ts +1 -0
  36. package/dist/server-handler.js +34 -0
  37. package/dist/server-handler.js.map +1 -0
  38. package/dist/server.d.ts +17 -0
  39. package/dist/server.js +176 -0
  40. package/dist/server.js.map +1 -0
  41. package/dist/status-checks.d.ts +33 -0
  42. package/dist/status-checks.js +154 -0
  43. package/dist/status-checks.js.map +1 -0
  44. package/dist/terminator.d.ts +18 -0
  45. package/dist/terminator.js +128 -0
  46. package/dist/terminator.js.map +1 -0
  47. package/dist/test-component.d.ts +22 -0
  48. package/dist/test-component.js +89 -0
  49. package/dist/test-component.js.map +1 -0
  50. package/dist/test-server.d.ts +21 -0
  51. package/dist/test-server.js +81 -0
  52. package/dist/test-server.js.map +1 -0
  53. package/dist/types.d.ts +32 -0
  54. package/dist/types.js +3 -0
  55. package/dist/types.js.map +1 -0
  56. package/dist/ws.d.ts +8 -0
  57. package/dist/ws.js +32 -0
  58. package/dist/ws.js.map +1 -0
  59. package/package.json +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createServerHandler = createServerHandler;
4
+ const logic_1 = require("./logic");
5
+ const middleware_1 = require("./middleware");
6
+ // @internal
7
+ function createServerHandler() {
8
+ let middlewares;
9
+ let theFinalHandler;
10
+ function doMiddlewareComposition() {
11
+ theFinalHandler = (0, middleware_1.compose)(...middlewares);
12
+ }
13
+ function resetMiddlewares() {
14
+ middlewares = (0, logic_1.getDefaultMiddlewares)();
15
+ doMiddlewareComposition();
16
+ }
17
+ // initialize default middleware
18
+ resetMiddlewares();
19
+ const use = async (handler) => {
20
+ middlewares.push(handler);
21
+ doMiddlewareComposition();
22
+ };
23
+ async function processRequest(currentContext, req) {
24
+ const ctx = (0, logic_1.contextFromRequest)(currentContext, req);
25
+ const res = await theFinalHandler(ctx, logic_1.defaultHandler);
26
+ return (0, logic_1.normalizeResponseBody)(req, res);
27
+ }
28
+ return {
29
+ resetMiddlewares,
30
+ use,
31
+ processRequest
32
+ };
33
+ }
34
+ //# sourceMappingURL=server-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-handler.js","sourceRoot":"","sources":["../src/server-handler.ts"],"names":[],"mappings":";;AAMA,kDAgCC;AAtCD,mCAA0G;AAC1G,6CAAkD;AAIlD,YAAY;AACZ,SAAgB,mBAAmB;IACjC,IAAI,WAA4C,CAAA;IAChD,IAAI,eAA8C,CAAA;IAElD,SAAS,uBAAuB;QAC9B,eAAe,GAAG,IAAA,oBAAO,EAAC,GAAG,WAAW,CAAC,CAAA;IAC3C,CAAC;IAED,SAAS,gBAAgB;QACvB,WAAW,GAAG,IAAA,6BAAqB,GAAE,CAAA;QACrC,uBAAuB,EAAE,CAAA;IAC3B,CAAC;IAED,gCAAgC;IAChC,gBAAgB,EAAE,CAAA;IAElB,MAAM,GAAG,GAAyB,KAAK,EAAE,OAAO,EAAE,EAAE;QAClD,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACzB,uBAAuB,EAAE,CAAA;IAC3B,CAAC,CAAA;IAED,KAAK,UAAU,cAAc,CAAC,cAAuB,EAAE,GAAkB;QACvE,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,cAAc,EAAE,GAAG,CAAC,CAAA;QACnD,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,sBAAc,CAAC,CAAA;QACtD,OAAO,IAAA,6BAAqB,EAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;IAED,OAAO;QACL,gBAAgB;QAChB,GAAG;QACH,cAAc;KACf,CAAA;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type IBaseComponent, type IHttpServerComponent, type IStatusCheckCapableComponent } from '@well-known-components/interfaces';
2
+ import type { ServerComponents, IHttpServerOptions } from './types';
3
+ /**
4
+ * @public
5
+ */
6
+ export type FullHttpServerComponent<Context extends object> = IHttpServerComponent<Context> & IBaseComponent & IStatusCheckCapableComponent & {
7
+ /**
8
+ * WARNING! this is a very destructive function, it resets all the .use middlewares
9
+ * you must reconfigure your handlers entirely after calling this function
10
+ */
11
+ resetMiddlewares(): void;
12
+ };
13
+ /**
14
+ * Creates a http-server component
15
+ * @public
16
+ */
17
+ export declare function createServerComponent<Context extends object>(components: ServerComponents, options: Partial<IHttpServerOptions>): Promise<FullHttpServerComponent<Context>>;
package/dist/server.js ADDED
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createServerComponent = createServerComponent;
40
+ const interfaces_1 = require("@well-known-components/interfaces");
41
+ const injectors_1 = require("./injectors");
42
+ const logic_1 = require("./logic");
43
+ const server_handler_1 = require("./server-handler");
44
+ const http = __importStar(require("http"));
45
+ const terminator_1 = require("./terminator");
46
+ const ws_1 = require("./ws");
47
+ const destroy_1 = __importDefault(require("destroy"));
48
+ const cors_1 = require("./cors");
49
+ /**
50
+ * Creates a http-server component
51
+ * @public
52
+ */
53
+ async function createServerComponent(components, options) {
54
+ const { config, logs, ws } = components;
55
+ const logger = logs.getLogger('http-server');
56
+ // config
57
+ const port = await config.requireNumber('HTTP_SERVER_PORT');
58
+ const host = await config.requireString('HTTP_SERVER_HOST');
59
+ let handlerFn = handler;
60
+ const server = (0, logic_1.getServer)(options, handlerFn);
61
+ let listen;
62
+ const terminator = (0, terminator_1.createServerTerminator)(server, { logger }, {});
63
+ async function start() {
64
+ if (listen) {
65
+ logger.error('start() called more than once');
66
+ await listen;
67
+ return;
68
+ }
69
+ listen = new Promise((resolve, reject) => {
70
+ const errorHandler = (err) => {
71
+ logger.error(err);
72
+ reject(err);
73
+ };
74
+ server.once('listening', () => {
75
+ logger.info(`Listening ${host}:${port}`);
76
+ resolve(server);
77
+ server.off('error', errorHandler);
78
+ });
79
+ server.once('error', errorHandler).listen(port, host, () => { });
80
+ });
81
+ await listen;
82
+ }
83
+ async function stop() {
84
+ logger.info(`Closing server`);
85
+ await terminator.terminate();
86
+ logger.info(`Server closed`);
87
+ }
88
+ let configuredContext = Object.create({});
89
+ const serverHandler = (0, server_handler_1.createServerHandler)();
90
+ const ret = {
91
+ // IBaseComponent
92
+ start,
93
+ stop,
94
+ [interfaces_1.START_COMPONENT]: start,
95
+ [interfaces_1.STOP_COMPONENT]: stop,
96
+ // IStatusCheckCapableComponent
97
+ async startupProbe() {
98
+ return true;
99
+ },
100
+ async readynessProbe() {
101
+ return server.listening;
102
+ },
103
+ // IHttpServerComponent
104
+ use: serverHandler.use,
105
+ setContext(context) {
106
+ configuredContext = context;
107
+ },
108
+ // extra
109
+ resetMiddlewares: serverHandler.resetMiddlewares
110
+ };
111
+ async function asyncHandle(req, res) {
112
+ const request = (0, logic_1.getRequestFromNodeMessage)(req, host);
113
+ const response = await serverHandler.processRequest(configuredContext, request);
114
+ (0, logic_1.success)(response, res);
115
+ }
116
+ async function handleUpgrade(req, socket, head) {
117
+ if (!ws) {
118
+ throw new Error('No WebSocketServer present');
119
+ }
120
+ const request = (0, logic_1.getRequestFromNodeMessage)(req, host);
121
+ const response = await serverHandler.processRequest(configuredContext, request);
122
+ const websocketConnect = (0, ws_1.getWebSocketCallback)(response);
123
+ if (websocketConnect) {
124
+ ws.handleUpgrade(req, socket, head, async (wsSocket) => {
125
+ try {
126
+ await websocketConnect(wsSocket);
127
+ }
128
+ catch (err) {
129
+ logger.error(err);
130
+ (0, destroy_1.default)(socket);
131
+ }
132
+ });
133
+ }
134
+ else {
135
+ if (response.status) {
136
+ const statusCode = isNaN(response.status) ? 404 : response.status;
137
+ const statusText = http.STATUS_CODES[statusCode] || 'Not Found';
138
+ socket.end(`HTTP/${req.httpVersion} ${statusCode} ${statusText}\r\n\r\n`);
139
+ }
140
+ else {
141
+ socket.end();
142
+ }
143
+ }
144
+ }
145
+ if (ws) {
146
+ server.on('upgrade', (req, socket, head) => {
147
+ return handleUpgrade(req, socket, head).catch((err) => {
148
+ logger.error(err);
149
+ (0, destroy_1.default)(socket);
150
+ });
151
+ });
152
+ }
153
+ function handler(request, response) {
154
+ asyncHandle(request, response).catch((error) => {
155
+ logger.error(error);
156
+ if (error.code == 'ERR_INVALID_URL') {
157
+ response.statusCode = 404;
158
+ response.end();
159
+ }
160
+ else {
161
+ response.statusCode = 500;
162
+ response.end();
163
+ }
164
+ });
165
+ }
166
+ (0, injectors_1._setUnderlyingServer)(ret, async () => {
167
+ if (!server)
168
+ throw new Error('The server is stopped');
169
+ return (await listen) || server;
170
+ });
171
+ if (options.cors) {
172
+ ret.use((0, cors_1.createCorsMiddleware)(options.cors));
173
+ }
174
+ return ret;
175
+ }
176
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { IBaseComponent, IConfigComponent, IHttpServerComponent } from '@well-known-components/interfaces';
2
+ /**
3
+ * @beta
4
+ */
5
+ export type StandardStatusResponse = {
6
+ status: 'pass' | 'fail' | 'warn';
7
+ version?: string;
8
+ releaseId?: string;
9
+ notes?: string[];
10
+ output?: string;
11
+ serviceId?: string;
12
+ description?: string;
13
+ details: Record<string, StandardStatusResponseDetail>;
14
+ };
15
+ /**
16
+ * @beta
17
+ */
18
+ export type StandardStatusResponseDetail = {
19
+ status: 'pass' | 'fail' | 'warn';
20
+ componentType?: string;
21
+ componentId?: string;
22
+ };
23
+ /**
24
+ * Binds status checks to the server
25
+ * - GET /health/ready - readyness probe
26
+ * - GET /health/startup - startup probe
27
+ * - GET /health/live - liveness probe
28
+ * @public
29
+ */
30
+ export declare function createStatusCheckComponent<Context extends object = {}>(components: {
31
+ server: IHttpServerComponent<Context>;
32
+ config: IConfigComponent;
33
+ }): Promise<IBaseComponent>;
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createStatusCheckComponent = createStatusCheckComponent;
4
+ const router_1 = require("./router");
5
+ /**
6
+ * Binds status checks to the server
7
+ * - GET /health/ready - readyness probe
8
+ * - GET /health/startup - startup probe
9
+ * - GET /health/live - liveness probe
10
+ * @public
11
+ */
12
+ async function createStatusCheckComponent(components) {
13
+ const { server } = components;
14
+ let mutStartOptions;
15
+ const routes = new router_1.Router();
16
+ const SUCCESSFUL_STATUS = 200;
17
+ const FAILED_STATUS = 503;
18
+ const MIME = 'application/health+json; charset=utf-8';
19
+ async function getDetails(startup) {
20
+ if (!mutStartOptions) {
21
+ return null;
22
+ }
23
+ const components = mutStartOptions.getComponents();
24
+ const probes = [];
25
+ let functionName = startup ? 'startupProbe' : 'readynessProbe';
26
+ for (let c in components) {
27
+ if (typeof components[c][functionName] == 'function') {
28
+ probes.push({
29
+ name: c,
30
+ promise: new Promise((ok) => {
31
+ components[c][functionName]()
32
+ .then(ok)
33
+ .catch(() => ok(false));
34
+ })
35
+ });
36
+ }
37
+ }
38
+ const results = await Promise.all(probes.map(($) => $.promise));
39
+ const content = {
40
+ details: {},
41
+ status: results.some(($) => $ === false) ? 'fail' : 'pass'
42
+ };
43
+ for (let it of probes) {
44
+ content.details[it.name] = {
45
+ status: (await it.promise) ? 'pass' : 'fail'
46
+ };
47
+ }
48
+ return content;
49
+ }
50
+ /**
51
+ * Readiness probes indicate whether your application is ready to
52
+ * handle requests. It could be that your application is alive, but
53
+ * that it just can't handle HTTP traffic. In that case, Kubernetes
54
+ * won't kill the container, but it will stop sending it requests.
55
+ * In practical terms, that means the pod is removed from an
56
+ * associated service's "pool" of pods that are handling requests,
57
+ * by marking the pod as "Unready".
58
+ */
59
+ routes.get('/health/ready', async () => {
60
+ if (!mutStartOptions) {
61
+ return {
62
+ body: { status: 'initializing' },
63
+ status: FAILED_STATUS,
64
+ headers: {
65
+ 'content-type': MIME
66
+ }
67
+ };
68
+ }
69
+ if (mutStartOptions.started()) {
70
+ const content = (await getDetails(false));
71
+ return {
72
+ status: content.status == 'pass' ? SUCCESSFUL_STATUS : FAILED_STATUS,
73
+ body: content,
74
+ headers: {
75
+ 'content-type': MIME
76
+ }
77
+ };
78
+ }
79
+ else if (mutStartOptions.live()) {
80
+ return {
81
+ body: 'unready',
82
+ status: FAILED_STATUS,
83
+ headers: {
84
+ 'content-type': MIME
85
+ }
86
+ };
87
+ }
88
+ return {
89
+ body: 'waiting',
90
+ status: FAILED_STATUS,
91
+ headers: {
92
+ 'content-type': MIME
93
+ }
94
+ };
95
+ });
96
+ /**
97
+ * The first probe to run is the Startup probe.
98
+ * When your app starts up, it might need to do a lot of work.
99
+ * It might need to fetch data from remote services, load dlls
100
+ * from plugins, who knows what else. During that process, your
101
+ * app should either not respond to requests, or if it does, it
102
+ * should return a status code of 400 or higher. Once the startup
103
+ * process has finished, you can switch to returning a success
104
+ * res (200) for the startup probe.
105
+ */
106
+ routes.get('/health/startup', async () => {
107
+ if (!mutStartOptions) {
108
+ return {
109
+ body: {
110
+ status: 'bootstrapping'
111
+ },
112
+ headers: {
113
+ 'content-type': MIME
114
+ },
115
+ status: FAILED_STATUS
116
+ };
117
+ }
118
+ else if (!mutStartOptions.started()) {
119
+ return {
120
+ body: {
121
+ status: 'starting'
122
+ },
123
+ headers: {
124
+ 'content-type': MIME
125
+ },
126
+ status: FAILED_STATUS
127
+ };
128
+ }
129
+ const content = (await getDetails(true));
130
+ return {
131
+ status: content.status == 'pass' ? SUCCESSFUL_STATUS : FAILED_STATUS,
132
+ body: content,
133
+ headers: {
134
+ 'content-type': MIME
135
+ }
136
+ };
137
+ });
138
+ /**
139
+ * The liveness probe is what you might expect-it indicates whether
140
+ * the container is alive or not. If a container fails its liveness
141
+ * probe, Kubernetes will kill the pod and restart another.
142
+ */
143
+ routes.get('/health/live', async () => {
144
+ return { status: SUCCESSFUL_STATUS, body: 'alive' };
145
+ });
146
+ const middleware = routes.middleware();
147
+ server.use(middleware);
148
+ return {
149
+ async start(opt) {
150
+ mutStartOptions = opt;
151
+ }
152
+ };
153
+ }
154
+ //# sourceMappingURL=status-checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-checks.js","sourceRoot":"","sources":["../src/status-checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ILoggerComponent } from '@well-known-components/interfaces';
2
+ import http from 'http';
3
+ import https from 'https';
4
+ import type { Duplex } from 'stream';
5
+ type Socket = Duplex & {
6
+ server?: http.Server | https.Server;
7
+ };
8
+ export type HttpTerminatorConfigurationInput = {
9
+ gracefulTerminationTimeout: number;
10
+ };
11
+ export declare function createServerTerminator(server: http.Server | https.Server, components: {
12
+ logger: ILoggerComponent.ILogger;
13
+ }, configurationInput: Partial<HttpTerminatorConfigurationInput>): {
14
+ secureSockets: Set<Socket>;
15
+ sockets: Set<Socket>;
16
+ terminate: () => Promise<void>;
17
+ };
18
+ export {};
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ // Based on work of https://github.com/gajus/http-terminator
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createServerTerminator = createServerTerminator;
8
+ const fp_future_1 = __importDefault(require("fp-future"));
9
+ const http_1 = __importDefault(require("http"));
10
+ const https_1 = __importDefault(require("https"));
11
+ const configurationDefaults = {
12
+ gracefulTerminationTimeout: 1000
13
+ };
14
+ function delay(ms) {
15
+ return new Promise((resolve) => setTimeout(resolve, ms));
16
+ }
17
+ function createServerTerminator(server, components, configurationInput) {
18
+ const { logger } = components;
19
+ const configuration = {
20
+ ...configurationDefaults,
21
+ ...configurationInput
22
+ };
23
+ const sockets = new Set();
24
+ const secureSockets = new Set();
25
+ let terminating;
26
+ server.on('connection', (socket) => {
27
+ if (terminating) {
28
+ socket.destroy();
29
+ }
30
+ else {
31
+ sockets.add(socket);
32
+ socket.once('close', () => {
33
+ sockets.delete(socket);
34
+ });
35
+ }
36
+ });
37
+ server.on('secureConnection', (socket) => {
38
+ if (terminating) {
39
+ socket.destroy();
40
+ }
41
+ else {
42
+ secureSockets.add(socket);
43
+ socket.once('close', () => {
44
+ secureSockets.delete(socket);
45
+ });
46
+ }
47
+ });
48
+ /**
49
+ * Evaluate whether additional steps are required to destroy the socket.
50
+ *
51
+ * @see https://github.com/nodejs/node/blob/57bd715d527aba8dae56b975056961b0e429e91e/lib/_http_client.js#L363-L413
52
+ */
53
+ const destroySocket = (socket) => {
54
+ socket.destroy();
55
+ if (socket.server instanceof http_1.default.Server) {
56
+ sockets.delete(socket);
57
+ }
58
+ else {
59
+ secureSockets.delete(socket);
60
+ }
61
+ };
62
+ const terminate = async () => {
63
+ if (terminating) {
64
+ logger.warn('Already terminating HTTP server');
65
+ return terminating;
66
+ }
67
+ terminating = (0, fp_future_1.default)();
68
+ server.on('request', (incomingMessage, outgoingMessage) => {
69
+ if (!outgoingMessage.headersSent) {
70
+ outgoingMessage.setHeader('connection', 'close');
71
+ }
72
+ });
73
+ for (const socket of sockets) {
74
+ // This is the HTTP CONNECT request socket.
75
+ // Unclear if I am using wrong type or how else this should be handled.
76
+ if (!(socket.server instanceof https_1.default.Server) && !(socket.server instanceof http_1.default.Server)) {
77
+ continue;
78
+ }
79
+ // @ts-expect-error Unclear if I am using wrong type or how else this should be handled.
80
+ const serverResponse = socket._httpMessage;
81
+ if (serverResponse) {
82
+ if (!serverResponse.headersSent) {
83
+ serverResponse.setHeader('connection', 'close');
84
+ }
85
+ continue;
86
+ }
87
+ destroySocket(socket);
88
+ }
89
+ for (const socket of secureSockets) {
90
+ // @ts-expect-error Unclear if I am using wrong type or how else this should be handled.
91
+ const serverResponse = socket._httpMessage;
92
+ if (serverResponse) {
93
+ if (!serverResponse.headersSent) {
94
+ serverResponse.setHeader('connection', 'close');
95
+ }
96
+ continue;
97
+ }
98
+ destroySocket(socket);
99
+ }
100
+ if (sockets.size) {
101
+ await delay(configuration.gracefulTerminationTimeout);
102
+ for (const socket of sockets) {
103
+ destroySocket(socket);
104
+ }
105
+ }
106
+ if (secureSockets.size) {
107
+ await delay(configuration.gracefulTerminationTimeout);
108
+ for (const socket of secureSockets) {
109
+ destroySocket(socket);
110
+ }
111
+ }
112
+ server.close((error) => {
113
+ if (error) {
114
+ terminating.reject(error);
115
+ }
116
+ else {
117
+ terminating.resolve();
118
+ }
119
+ });
120
+ return terminating;
121
+ };
122
+ return {
123
+ secureSockets,
124
+ sockets,
125
+ terminate
126
+ };
127
+ }
128
+ //# sourceMappingURL=terminator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminator.js","sourceRoot":"","sources":["../src/terminator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { IHttpServerComponent } from '@well-known-components/interfaces';
2
+ import { IFetchComponent } from '@well-known-components/interfaces';
3
+ import type { WebSocket as WS } from 'ws';
4
+ /** @alpha */
5
+ export type IWebSocketComponent<W = WS> = {
6
+ createWebSocket(url: string, protocols?: string | string[]): W;
7
+ };
8
+ /** @public */
9
+ export type ITestHttpServerComponent<Context extends object> = IHttpServerComponent<Context> & IFetchComponent & {
10
+ resetMiddlewares(): void;
11
+ };
12
+ /**
13
+ * @alpha
14
+ */
15
+ export type TestServerWithWs = {
16
+ ws(path: string, protocols: string | string[]): WS;
17
+ };
18
+ /**
19
+ * Creates a http-server component for tests
20
+ * @public
21
+ */
22
+ export declare function createTestServerComponent<Context extends object = {}>(): ITestHttpServerComponent<Context>;