@nsshunt/stsappframework 3.2.1 → 3.2.2

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 (97) hide show
  1. package/dist/commonTypes.js +69 -0
  2. package/dist/commonTypes.js.map +1 -0
  3. package/dist/controller/stscontrollerbase.js +14 -0
  4. package/dist/controller/stscontrollerbase.js.map +1 -0
  5. package/dist/controller/stslatencycontroller.js +28 -0
  6. package/dist/controller/stslatencycontroller.js.map +1 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/logger/stsTransportLoggerWinston.js +22 -0
  9. package/dist/logger/stsTransportLoggerWinston.js.map +1 -0
  10. package/dist/logger/stsTransportWinston.js +43 -0
  11. package/dist/logger/stsTransportWinston.js.map +1 -0
  12. package/{src/middleware/serverNetworkMiddleware.ts → dist/middleware/serverNetworkMiddleware.js} +80 -124
  13. package/dist/middleware/serverNetworkMiddleware.js.map +1 -0
  14. package/dist/network.js +38 -0
  15. package/dist/network.js.map +1 -0
  16. package/dist/process/masterprocessbase.js +558 -0
  17. package/dist/process/masterprocessbase.js.map +1 -0
  18. package/{src/process/processbase.ts → dist/process/processbase.js} +150 -222
  19. package/dist/process/processbase.js.map +1 -0
  20. package/{src/process/serverprocessbase.ts → dist/process/serverprocessbase.js} +158 -212
  21. package/dist/process/serverprocessbase.js.map +1 -0
  22. package/dist/process/singleprocessbase.js +55 -0
  23. package/dist/process/singleprocessbase.js.map +1 -0
  24. package/{src/process/workerprocessbase.ts → dist/process/workerprocessbase.js} +93 -107
  25. package/dist/process/workerprocessbase.js.map +1 -0
  26. package/{src/publishertransports/publishTransportUtils.ts → dist/publishertransports/publishTransportUtils.js} +18 -24
  27. package/dist/publishertransports/publishTransportUtils.js.map +1 -0
  28. package/dist/route/stslatencyroute.js +15 -0
  29. package/dist/route/stslatencyroute.js.map +1 -0
  30. package/dist/route/stsrouterbase.js +21 -0
  31. package/dist/route/stsrouterbase.js.map +1 -0
  32. package/dist/stsexpressserver.js +115 -0
  33. package/dist/stsexpressserver.js.map +1 -0
  34. package/dist/validation/errors.js +10 -0
  35. package/dist/validation/errors.js.map +1 -0
  36. package/dist/vitesttesting/appConfig.js +93 -0
  37. package/dist/vitesttesting/appConfig.js.map +1 -0
  38. package/dist/vitesttesting/appSingleWSS.js +122 -0
  39. package/dist/vitesttesting/appSingleWSS.js.map +1 -0
  40. package/dist/vitesttesting/server.js +15 -0
  41. package/dist/vitesttesting/server.js.map +1 -0
  42. package/dist/vitesttesting/singleservertest.test.js +286 -0
  43. package/dist/vitesttesting/singleservertest.test.js.map +1 -0
  44. package/dist/vitesttesting/wsevents.js +3 -0
  45. package/dist/vitesttesting/wsevents.js.map +1 -0
  46. package/package.json +7 -3
  47. package/.github/dependabot.yml +0 -13
  48. package/.github/workflows/npm-publish.yml +0 -47
  49. package/.gitignore copy +0 -108
  50. package/build.sh +0 -37
  51. package/esbuild.config.js +0 -81
  52. package/eslint.config.mjs +0 -55
  53. package/jest/setEnvVars.js +0 -19
  54. package/keys/server.cert +0 -21
  55. package/keys/server.key +0 -28
  56. package/local-redis-stack.conf +0 -2
  57. package/run-grpc-client.sh +0 -2
  58. package/run-grpc-server.sh +0 -2
  59. package/run1.sh +0 -20
  60. package/run2.sh +0 -20
  61. package/run3.sh +0 -20
  62. package/runc1.sh +0 -19
  63. package/runc2.sh +0 -19
  64. package/runkafka.sh +0 -19
  65. package/runkafkaconsume01.sh +0 -21
  66. package/runkafkaconsume02.sh +0 -21
  67. package/runpromise.sh +0 -5
  68. package/runredis.sh +0 -5
  69. package/runredis1.sh +0 -4
  70. package/runredis2.sh +0 -24
  71. package/runredis3.sh +0 -4
  72. package/runtest1.sh +0 -19
  73. package/runtest2.sh +0 -19
  74. package/runtest_ipc_legacy.sh +0 -19
  75. package/runtest_ipcex.sh +0 -19
  76. package/runtest_redis.sh +0 -19
  77. package/runtest_ww.sh +0 -19
  78. package/src/commonTypes.ts +0 -374
  79. package/src/controller/stscontrollerbase.ts +0 -14
  80. package/src/controller/stslatencycontroller.ts +0 -26
  81. package/src/index.ts +0 -13
  82. package/src/logger/stsTransportLoggerWinston.ts +0 -24
  83. package/src/logger/stsTransportWinston.ts +0 -48
  84. package/src/network.ts +0 -36
  85. package/src/process/masterprocessbase.ts +0 -674
  86. package/src/process/singleprocessbase.ts +0 -63
  87. package/src/route/stslatencyroute.ts +0 -15
  88. package/src/route/stsrouterbase.ts +0 -21
  89. package/src/stsexpressserver.ts +0 -137
  90. package/src/validation/errors.ts +0 -6
  91. package/src/vitesttesting/appConfig.ts +0 -111
  92. package/src/vitesttesting/appSingleWSS.ts +0 -142
  93. package/src/vitesttesting/server.ts +0 -17
  94. package/src/vitesttesting/singleservertest.test.ts +0 -352
  95. package/src/vitesttesting/wsevents.ts +0 -44
  96. package/tsconfig.json +0 -42
  97. package/vite.config.ts +0 -19
@@ -1,137 +1,112 @@
1
- /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
2
- import chalk from 'chalk';
3
-
4
- import { goptions } from '@nsshunt/stsconfig'
5
-
6
- import fs from 'node:fs'
7
-
8
- import { JSONObject, Sleep } from '@nsshunt/stsutils'
9
-
10
- import { ProcessOptions, IServerProcessBase } from './../commonTypes'
11
- import { ProcessBase } from './processbase';
12
-
13
- import { register, Counter, collectDefaultMetrics, AggregatorRegistry } from 'prom-client'
14
-
15
- import { createServer as createServerHttps } from 'node:https'
16
- import { createServer } from 'node:http'
17
- import tls from 'node:tls'
18
- import net from 'node:net'
19
-
20
- import { Server, ServerOptions } from "socket.io";
21
- import { STSExpressServer } from './../stsexpressserver'
22
- import { Express } from 'express'
23
-
24
- import { createAdapter as clusterCreateAdapter } from '@socket.io/cluster-adapter'
25
- import { createAdapter } from "@socket.io/redis-streams-adapter";
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ServerProcessBase = void 0;
7
+ /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const stsconfig_1 = require("@nsshunt/stsconfig");
10
+ const node_fs_1 = __importDefault(require("node:fs"));
11
+ const stsutils_1 = require("@nsshunt/stsutils");
12
+ const processbase_1 = require("./processbase");
13
+ const prom_client_1 = require("prom-client");
14
+ const node_https_1 = require("node:https");
15
+ const node_http_1 = require("node:http");
16
+ const node_tls_1 = __importDefault(require("node:tls"));
17
+ const socket_io_1 = require("socket.io");
18
+ const stsexpressserver_1 = require("./../stsexpressserver");
19
+ const cluster_adapter_1 = require("@socket.io/cluster-adapter");
20
+ const redis_streams_adapter_1 = require("@socket.io/redis-streams-adapter");
26
21
  //import { ClusterAdapterWithHeartbeat } from 'socket.io-adaptor';
27
-
28
22
  //import { createAdapter } from "@socket.io/redis-adapter";
29
-
30
- import { createClient, RedisClientType } from 'redis';
31
- import { Redis } from 'ioredis';
32
-
33
- import jayson from 'jayson'
34
-
35
- import { STSTransportLoggerWinston } from './../logger/stsTransportLoggerWinston'
36
-
23
+ const redis_1 = require("redis");
24
+ const jayson_1 = __importDefault(require("jayson"));
25
+ const stsTransportLoggerWinston_1 = require("./../logger/stsTransportLoggerWinston");
37
26
  /**
38
27
  * todo
39
28
  * @typedef {Object} options - todo
40
29
  * @property {boolean} [wssServer=false] - Create a web socket server on this worker instance
41
30
  */
42
- export abstract class ServerProcessBase extends ProcessBase implements IServerProcessBase
43
- {
44
- #masterProcessExitTime = goptions.masterProcessExitTime;
45
- #io: Server | null = null;
46
- #redisClient: RedisClientType | Redis | null = null;
47
- #httpServer: any = null;
48
- #expressServer: STSExpressServer | null = null;
49
- #sockets: net.Socket[] = [ ];
31
+ class ServerProcessBase extends processbase_1.ProcessBase {
32
+ #masterProcessExitTime = stsconfig_1.goptions.masterProcessExitTime;
33
+ #io = null;
34
+ #redisClient = null;
35
+ #httpServer = null;
36
+ #expressServer = null;
37
+ #sockets = [];
50
38
  #shuttingDown = false;
51
-
52
- constructor(options: ProcessOptions) {
39
+ constructor(options) {
53
40
  super(options);
54
41
  }
55
-
56
42
  get httpServer() {
57
43
  return this.#httpServer;
58
44
  }
59
-
60
45
  get io() {
61
46
  return this.#io;
62
47
  }
63
-
64
- get expressServer(): STSExpressServer | null {
48
+ get expressServer() {
65
49
  return this.#expressServer;
66
50
  }
67
- set expressServer(val: STSExpressServer | null) {
51
+ set expressServer(val) {
68
52
  this.#expressServer = val;
69
53
  }
70
-
71
54
  // Setup server to Prometheus scrapes:
72
- #SetupPrometheusEndPoints = (expressServer: Express) => {
55
+ #SetupPrometheusEndPoints = (expressServer) => {
73
56
  // AggregatorRegistry is required here in the worker as well as the master in order for prom-client to work correctly.
74
- new AggregatorRegistry();
75
-
57
+ new prom_client_1.AggregatorRegistry();
76
58
  const prefix = 'sts_';
77
-
78
- collectDefaultMetrics({
59
+ (0, prom_client_1.collectDefaultMetrics)({
79
60
  labels: { NODE_APP_INSTANCE: process.pid },
80
61
  prefix: prefix
81
62
  });
82
-
83
- const c = new Counter({
63
+ const c = new prom_client_1.Counter({
84
64
  name: 'sts_test_counter',
85
65
  help: 'Example of a counter',
86
66
  labelNames: ['code'],
87
67
  });
88
-
89
68
  setInterval(() => {
90
69
  c.inc({ code: 200 });
91
70
  }, 1000).unref();
92
-
93
71
  setInterval(() => {
94
72
  c.inc({ code: 400 });
95
73
  c.inc({ code: 'worker_' + process.pid });
96
74
  }, 500).unref();
97
-
98
- expressServer.get('/metrics', async (req: any, res: any) => {
75
+ expressServer.get('/metrics', async (req, res) => {
99
76
  try {
100
- res.set('Content-Type', register.contentType);
101
- res.end(await register.metrics());
102
- } catch (ex) {
77
+ res.set('Content-Type', prom_client_1.register.contentType);
78
+ res.end(await prom_client_1.register.metrics());
79
+ }
80
+ catch (ex) {
103
81
  res.status(500).end(ex);
104
82
  }
105
83
  });
106
-
107
- expressServer.get('/metrics/counter', async (req: any, res: any) => {
84
+ expressServer.get('/metrics/counter', async (req, res) => {
108
85
  try {
109
- res.set('Content-Type', register.contentType);
110
- res.end(await register.getSingleMetricAsString('test_counter'));
111
- } catch (ex) {
86
+ res.set('Content-Type', prom_client_1.register.contentType);
87
+ res.end(await prom_client_1.register.getSingleMetricAsString('test_counter'));
88
+ }
89
+ catch (ex) {
112
90
  res.status(500).end(ex);
113
91
  }
114
92
  });
115
- }
116
-
117
- #SetupTLSServer = async (socket: net.Socket): Promise<void> => {
93
+ };
94
+ #SetupTLSServer = async (socket) => {
118
95
  // Add a 'close' event handler to this instance of socket
119
96
  this.LogInfoMessage('CONNECTED: ' + socket.remoteAddress + ':' + socket.remotePort + ' ' + process.pid);
120
97
  this.#sockets.push(socket);
121
-
122
98
  //const self = this;
123
- socket.on('close', (data: any) => {
124
- const index = this.#sockets.findIndex(function(o) {
99
+ socket.on('close', (data) => {
100
+ const index = this.#sockets.findIndex(function (o) {
125
101
  return o.remoteAddress === socket.remoteAddress && o.remotePort === socket.remotePort;
126
- })
127
- if (index !== -1) this.#sockets.splice(index, 1);
102
+ });
103
+ if (index !== -1)
104
+ this.#sockets.splice(index, 1);
128
105
  this.LogInfoMessage('CLOSED: ' + socket.remoteAddress + ' ' + socket.remotePort + ' ' + process.pid);
129
106
  });
130
-
131
- socket.on('data', (data: any) => {
107
+ socket.on('data', (data) => {
132
108
  this.LogInfoMessage('DATA ' + socket.remoteAddress + ': ' + socket.remotePort + ': ' + data);
133
109
  socket.write(socket.remoteAddress + ':' + socket.remotePort + " said " + data + '\n');
134
-
135
110
  // Write the data back to all the connected, the client will receive it as data from the server
136
111
  /*
137
112
  self.#sockets.forEach(function(socket, index, array) {
@@ -140,86 +115,77 @@ export abstract class ServerProcessBase extends ProcessBase implements IServerPr
140
115
 
141
116
  */
142
117
  });
143
- }
144
-
145
- #SetupRPCServer = async (socket: net.Socket): Promise<void> => {
118
+ };
119
+ #SetupRPCServer = async (socket) => {
146
120
  this.LogInfoMessage('CONNECTED: ' + socket.remoteAddress + ':' + socket.remotePort + ' ' + process.pid);
147
-
148
- socket.on('close', (data: any) => {
121
+ socket.on('close', (data) => {
149
122
  this.LogInfoMessage('CLOSED: ' + socket.remoteAddress + ' ' + socket.remotePort + ' ' + process.pid);
150
123
  });
151
-
152
- socket.on('data', (data: any) => {
124
+ socket.on('data', (data) => {
153
125
  this.LogInfoMessage('DATA ' + socket.remoteAddress + ': ' + data);
154
126
  });
155
- }
156
-
157
- #SetupWSSServer = async (): Promise<void> => {
127
+ };
128
+ #SetupWSSServer = async () => {
158
129
  // socket.io
159
130
  // WebSocket
160
- const options: Partial<ServerOptions> = {
161
- transports: [ "websocket" ] // or [ "websocket", "polling" ] (to use long-poolling. Note that the order matters)
131
+ const options = {
132
+ transports: ["websocket"] // or [ "websocket", "polling" ] (to use long-poolling. Note that the order matters)
162
133
  // The default path is /socket.io
163
134
  // This can be changed with the path option as shown below
164
135
  //,path: '/zzz'
165
136
  };
166
-
167
137
  //this.#io = require("socket.io")(this.#httpServer, options);
168
- this.#io = new Server(this.#httpServer, options);
169
-
138
+ this.#io = new socket_io_1.Server(this.#httpServer, options);
170
139
  if (this.options.useSocketIoRedisAdaptor) {
171
140
  this.LogInfoMessage(`Using Redis for socket.io cluster management (worker)`);
172
141
  if (this.options.socketIoRedisAdaptorUrl) {
173
142
  this.LogInfoMessage(`Redis url: [${this.options.socketIoRedisAdaptorUrl}]`);
174
- this.#redisClient = createClient({url: this.options.socketIoRedisAdaptorUrl});
175
- } else {
143
+ this.#redisClient = (0, redis_1.createClient)({ url: this.options.socketIoRedisAdaptorUrl });
144
+ }
145
+ else {
176
146
  this.LogInfoMessage(`Redis url: [localhost]`);
177
- this.#redisClient = createClient();
147
+ this.#redisClient = (0, redis_1.createClient)();
178
148
  }
179
149
  await this.#redisClient.connect();
180
-
181
150
  //this.#redisClient = new Redis(this.options.socketIoRedisAdaptorUrl as string);
182
-
183
- this.#io.adapter(createAdapter(this.#redisClient));
184
-
151
+ this.#io.adapter((0, redis_streams_adapter_1.createAdapter)(this.#redisClient));
185
152
  this.LogInfoMessage(`Redis successfully connected.`);
186
- } else {
153
+ }
154
+ else {
187
155
  if (this.options.clusterMode) {
188
- this.#io.adapter(clusterCreateAdapter() as any);
156
+ this.#io.adapter((0, cluster_adapter_1.createAdapter)());
189
157
  this.LogInfoMessage(`Using nodejs cluster mode for socket.io cluster management`);
190
- } else {
158
+ }
159
+ else {
191
160
  this.LogInfoMessage(`Not using any adaptors for socket.io cluster management.}`);
192
161
  }
193
162
  }
194
-
195
163
  // To use a seperate socket server, the code below can be applied.
196
164
  // this.#io = require("socket.io")(options);
197
165
  // this.#io.adapter(createAdapter());
198
166
  // this.#io.listen(3006);
199
-
200
167
  this.#io.engine.on("connection_error", (err) => {
201
168
  this.LogInfoMessage(err.req); // the request object
202
169
  this.LogInfoMessage(err.code); // the error code, for example 1
203
170
  this.LogInfoMessage(err.message); // the error message, for example "Session ID unknown"
204
171
  this.LogInfoMessage(err.context); // some additional error context
205
172
  });
206
- }
207
-
208
- #GetTLSOptions = (): JSONObject => {
173
+ };
174
+ #GetTLSOptions = () => {
209
175
  return {
210
- key: fs.readFileSync(this.options.httpsServerKeyPath),
211
- cert: fs.readFileSync(this.options.httpsServerCertificatePath)
176
+ key: node_fs_1.default.readFileSync(this.options.httpsServerKeyPath),
177
+ cert: node_fs_1.default.readFileSync(this.options.httpsServerCertificatePath)
212
178
  };
213
- }
214
-
215
- #SetupExpressServer = async (useTls: boolean): Promise<void> => {
179
+ };
180
+ #SetupExpressServer = async (useTls) => {
216
181
  if (useTls) {
217
- this.#httpServer = createServerHttps(this.#GetTLSOptions(), (this.#expressServer as STSExpressServer).App);
218
- } else {
219
- this.#httpServer = createServer((this.#expressServer as STSExpressServer).App);
182
+ this.#httpServer = (0, node_https_1.createServer)(this.#GetTLSOptions(), this.#expressServer.App);
183
+ }
184
+ else {
185
+ this.#httpServer = (0, node_http_1.createServer)(this.#expressServer.App);
220
186
  }
221
187
  if (this.options.prometheusSupport === true) {
222
- this.#SetupPrometheusEndPoints((this.#expressServer as STSExpressServer).App);
188
+ this.#SetupPrometheusEndPoints(this.#expressServer.App);
223
189
  }
224
190
  if (this.options.wssServer === true) {
225
191
  await this.#SetupWSSServer();
@@ -227,76 +193,72 @@ export abstract class ServerProcessBase extends ProcessBase implements IServerPr
227
193
  // https://stackoverflow.com/questions/21342828/node-express-unix-domain-socket-permissions
228
194
  //@@httpServer.listen('/tmp/stsrest01.sock').on('listening', () =>
229
195
  //@@httpServer.listen('/var/run/sts/stsrest01.sock').on('listening', () =>
230
- this.#httpServer.listen(this.options.listenPort, () => {
196
+ this.#httpServer.listen(this.options.listenPort, () => {
231
197
  //@@chmodSync(this.options.port, 511);
232
198
  }).on('listening', () => {
233
199
  this.LogInfoMessage(`live on ${this.options.endpoint}:${this.options.listenPort}${this.options.apiRoot}`);
234
200
  });
235
- }
236
-
237
- #SetupTCPRawServer = async (): Promise<void> => {
201
+ };
202
+ #SetupTCPRawServer = async () => {
238
203
  // The second parameter is the automatic listener for the secureConnection event from the tls.Server class
239
- this.#httpServer = tls.createServer(this.#GetTLSOptions(), this.#SetupTLSServer);
240
- this.#httpServer.listen(this.options.listenPort, 'stscore.stsmda.org', () => {
204
+ this.#httpServer = node_tls_1.default.createServer(this.#GetTLSOptions(), this.#SetupTLSServer);
205
+ this.#httpServer.listen(this.options.listenPort, 'stscore.stsmda.org', () => {
241
206
  this.LogInfoMessage('TCP Server is running on port ' + this.options.listenPort + '.');
242
207
  }).on('listening', () => {
243
208
  this.LogInfoMessage(`TCP live on ${this.options.endpoint}:${this.options.listenPort}${this.options.apiRoot}`);
244
209
  });
245
- }
246
-
247
- #SetupJSONRPCServer = async (): Promise<void> => {
248
- const jaysonServer = new jayson.server();
210
+ };
211
+ #SetupJSONRPCServer = async () => {
212
+ const jaysonServer = new jayson_1.default.server();
249
213
  // Supported methods here - move somewhere else ...
250
- jaysonServer.method("add", function(args: any, callback: any) {
214
+ jaysonServer.method("add", function (args, callback) {
251
215
  callback(null, args[0] + args[1]);
252
216
  });
253
217
  this.#httpServer = jaysonServer.tls(this.#GetTLSOptions());
254
- (this.#httpServer as tls.Server).on('secureConnection', this.#SetupRPCServer);
255
- this.#httpServer.listen(this.options.listenPort, 'stscore.stsmda.org', () => {
218
+ this.#httpServer.on('secureConnection', this.#SetupRPCServer);
219
+ this.#httpServer.listen(this.options.listenPort, 'stscore.stsmda.org', () => {
256
220
  this.LogInfoMessage('JSON RPC 2.0 Server is running on port ' + this.options.listenPort + '.');
257
221
  }).on('listening', () => {
258
222
  this.LogInfoMessage(`JSON RPC 2.0 live on ${this.options.endpoint}:${this.options.listenPort}${this.options.apiRoot}`);
259
223
  });
260
- }
261
-
262
- override get shuttingDown(): boolean {
224
+ };
225
+ get shuttingDown() {
263
226
  return this.#shuttingDown;
264
227
  }
265
-
266
- TerminateSocketIO = async (): Promise<void> => {
228
+ TerminateSocketIO = async () => {
267
229
  if (this.options.wssServer === true && this.#io !== null) {
268
230
  const logPrefix = `ServerProcessBase:TerminateSockets():${process.pid}:`;
269
231
  this.LogInfoMessage(`${logPrefix} Disconnect SocketIO Sockets.`);
270
- await Sleep(250);
232
+ await (0, stsutils_1.Sleep)(250);
271
233
  await this.#io?.of('/').adapter.close();
272
234
  if (this.socketIoServerHelper !== null) {
273
235
  await this.socketIoServerHelper.CloseAdaptors();
274
- await Sleep(50);
236
+ await (0, stsutils_1.Sleep)(50);
275
237
  if (this.#redisClient) {
276
238
  this.#redisClient.disconnect();
277
- await Sleep(50);
239
+ await (0, stsutils_1.Sleep)(50);
278
240
  }
279
241
  this.LogInfoMessage(`${logPrefix} this.socketIoServerHelper.DisconnectSockets()`);
280
242
  await this.socketIoServerHelper.DisconnectSockets();
281
- } else {
243
+ }
244
+ else {
282
245
  this.LogInfoMessage(`${logPrefix} this.#io.disconnectSockets()`);
283
246
  if (this.#redisClient) {
284
247
  this.#redisClient.disconnect();
285
- await Sleep(50);
248
+ await (0, stsutils_1.Sleep)(50);
286
249
  }
287
250
  this.#io.disconnectSockets();
288
251
  }
289
252
  this.socketIoServerHelper = null;
290
253
  this.#io = null;
291
254
  }
292
- }
293
-
294
- TerminateHTTPServer = async (): Promise<void> => {
255
+ };
256
+ TerminateHTTPServer = async () => {
295
257
  const logPrefix = `ServerProcessBase:TerminateHTTPServer():${process.pid}:`;
296
258
  if (this.#httpServer !== null) {
297
- if (goptions.STSServerType.localeCompare('TCPRAW_TLS') === 0) {
298
- this.#sockets.forEach((socket: net.Socket, index, array) => {
299
- this.LogInfoMessage(chalk.yellow(`${logPrefix} TCP Socket destroy, remote address: [${socket.remoteAddress}], remote port: [${socket.remotePort}]`));
259
+ if (stsconfig_1.goptions.STSServerType.localeCompare('TCPRAW_TLS') === 0) {
260
+ this.#sockets.forEach((socket, index, array) => {
261
+ this.LogInfoMessage(chalk_1.default.yellow(`${logPrefix} TCP Socket destroy, remote address: [${socket.remoteAddress}], remote port: [${socket.remotePort}]`));
300
262
  socket.destroy();
301
263
  //socket.end();
302
264
  });
@@ -305,8 +267,7 @@ export abstract class ServerProcessBase extends ProcessBase implements IServerPr
305
267
  await this.#httpServer.close();
306
268
  this.#httpServer = null;
307
269
  }
308
- }
309
-
270
+ };
310
271
  // Terminate in order;
311
272
  // forked worker threads (send signal)
312
273
  // De-Register service
@@ -314,62 +275,54 @@ export abstract class ServerProcessBase extends ProcessBase implements IServerPr
314
275
  // instrument timers (gauge etc.)
315
276
  // publisher
316
277
  // terminate UI (if loaded)
317
- Terminate = async (clusterPerformExit: boolean, signal?: any): Promise<void> => {
278
+ Terminate = async (clusterPerformExit, signal) => {
318
279
  const logPrefix = `ServerProcessBase:Terminate():${process.pid}:`;
319
280
  if (this.#shuttingDown === false) {
320
281
  this.#shuttingDown = true;
321
-
322
282
  if (signal) {
323
283
  this.LogInfoMessage(this.GetSignalColour(signal)(`${logPrefix} Received signal: ${signal}`));
324
- } else {
284
+ }
285
+ else {
325
286
  this.LogInfoMessage(this.GetSignalColour(null)(`${logPrefix} Received Terminate without signal.`));
326
287
  }
327
-
328
288
  await this.ProcessTerminate();
329
-
330
289
  this.TerminateUIController();
331
-
332
290
  await this.TerminateSocketIO();
333
-
334
291
  await this.TerminateHTTPServer();
335
-
336
292
  await this.TerminateDatabase();
337
-
338
293
  // Output final messages here (before TerminateInstrumentController)
339
294
  if (this.options.clusterMode) {
340
295
  this.LogInfoMessage(`${logPrefix} clusterPerformExit value: [${clusterPerformExit}]`);
341
296
  if (clusterPerformExit) {
342
297
  this.LogInfoMessage(`${logPrefix} Process will self terminate with process.exit(0).`);
343
- } else {
298
+ }
299
+ else {
344
300
  this.LogInfoMessage(`${logPrefix} Child process will not self terminate. Terminate will be handled by master process.`);
345
301
  }
346
302
  }
347
-
348
303
  this.TerminateInstrumentController();
349
-
350
304
  //@@ always return here appears to always cleanly exit
351
305
  // and cleanly exit from socket.io cluster adaptor
352
306
  // without return here, socket.io cluster adaptor terminates in an error state
353
307
  // as the implementation relies on cluster.on to send messages to worker threads
354
308
  // but these have already been closed from the process.exit(0) below.
355
-
356
- await Sleep(1000); // Allow socket.io time to clean-up
357
-
309
+ await (0, stsutils_1.Sleep)(1000); // Allow socket.io time to clean-up
358
310
  if (this.options.clusterMode === true) {
359
311
  if (clusterPerformExit === true) {
360
312
  setTimeout(() => {
361
313
  process.exit(0);
362
314
  }, 0);
363
- }
364
- } else {
315
+ }
316
+ }
317
+ else {
365
318
  this.ProcessExit(this.#masterProcessExitTime);
366
319
  }
367
- } else {
320
+ }
321
+ else {
368
322
  this.LogInfoMessage(`${logPrefix} Process already terminating.`);
369
323
  }
370
- }
371
-
372
- async SetupServer(): Promise<boolean> {
324
+ };
325
+ async SetupServer() {
373
326
  return new Promise((resolve, reject) => {
374
327
  try {
375
328
  this.SetupInstrumentation();
@@ -377,79 +330,72 @@ export abstract class ServerProcessBase extends ProcessBase implements IServerPr
377
330
  try {
378
331
  await this.SetupServerEx();
379
332
  resolve(true);
380
- } catch (error) {
333
+ }
334
+ catch (error) {
381
335
  reject(error);
382
336
  }
383
337
  }, 100);
384
- } catch (error) {
338
+ }
339
+ catch (error) {
385
340
  reject(error);
386
341
  }
387
- })
342
+ });
388
343
  }
389
-
390
344
  ProcessStarted() {
391
- const transport = new STSTransportLoggerWinston({
345
+ const transport = new stsTransportLoggerWinston_1.STSTransportLoggerWinston({
392
346
  stsApp: this
393
347
  });
394
348
  setTimeout(() => {
395
- (this.options.logger as any).add(transport);
349
+ this.options.logger.add(transport);
396
350
  }, 0);
397
351
  }
398
-
399
- async SetupServerEx(): Promise<boolean> {
400
- this.LogInfoMessage(chalk.green(`ServerProcessBase:SetupServerEx(): Main Process:${process.pid} Starting ...`));
401
-
352
+ async SetupServerEx() {
353
+ this.LogInfoMessage(chalk_1.default.green(`ServerProcessBase:SetupServerEx(): Main Process:${process.pid} Starting ...`));
402
354
  this.ProcessStartup();
403
-
404
355
  if (this.options.expressServerRouteFactory || this.options.expressServerRouteStaticFactory) {
405
- this.expressServer = new STSExpressServer(this.options, this);
356
+ this.expressServer = new stsexpressserver_1.STSExpressServer(this.options, this);
406
357
  }
407
-
408
358
  this.LogInfoMessage(`ServerProcessBase:SetupServerEx(): Worker instance starting. Service instance Id: [${this.options.serviceInstanceId}]`);
409
-
410
359
  // Signal Codes
411
360
  // https://en.wikipedia.org/wiki/Signal_(IPC)
412
361
  process.on('SIGTERM', async () => {
413
362
  this.LogInfoMessage(`ServerProcessBase:SetupServerEx(): SIGTERM signal received for worker: ${process.pid}`);
414
363
  await this.Terminate(true, true);
415
364
  });
416
-
417
365
  process.on('SIGINT', async () => {
418
366
  this.LogInfoMessage(`ServerProcessBase:SetupServerEx(): SIGINT signal received for worker: ${process.pid}`);
419
367
  await this.Terminate(true, true);
420
368
  });
421
-
422
369
  process.on('exit', (code) => {
423
370
  if (code === 0) {
424
- this.LogInfoMessage(chalk.green(`ServerProcessBase:SetupServerEx(): Process: ${process.pid} terminated gracefully with code: ${code}`));
425
- } else {
426
- this.LogInfoMessage(chalk.red(`ServerProcessBase:SetupServerEx(): Process: ${process.pid} terminated with code: ${code}`));
371
+ this.LogInfoMessage(chalk_1.default.green(`ServerProcessBase:SetupServerEx(): Process: ${process.pid} terminated gracefully with code: ${code}`));
372
+ }
373
+ else {
374
+ this.LogInfoMessage(chalk_1.default.red(`ServerProcessBase:SetupServerEx(): Process: ${process.pid} terminated with code: ${code}`));
427
375
  }
428
376
  });
429
-
430
377
  await this.SetupSTSServer();
431
-
432
378
  this.ProcessStarted();
433
-
434
- this.LogInfoMessage(chalk.green(`ServerProcessBase:SetupServerEx(): Main Process:${process.pid} Started`));
435
-
379
+ this.LogInfoMessage(chalk_1.default.green(`ServerProcessBase:SetupServerEx(): Main Process:${process.pid} Started`));
436
380
  return true;
437
- };
438
-
439
- SetupSTSServer = async(): Promise<void> => {
440
- switch (goptions.STSServerType) {
441
- case 'EXPRESS' :
442
- await this.#SetupExpressServer(false);
443
- break;
444
- case 'EXPRESS_TLS' :
445
- await this.#SetupExpressServer(true);
446
- break;
447
- case 'TCPRAW_TLS' :
448
- await this.#SetupTCPRawServer();
449
- break;
450
- case 'JSONRPC2_TLS' :
451
- await this.#SetupJSONRPCServer();
452
- break;
453
- }
454
381
  }
382
+ ;
383
+ SetupSTSServer = async () => {
384
+ switch (stsconfig_1.goptions.STSServerType) {
385
+ case 'EXPRESS':
386
+ await this.#SetupExpressServer(false);
387
+ break;
388
+ case 'EXPRESS_TLS':
389
+ await this.#SetupExpressServer(true);
390
+ break;
391
+ case 'TCPRAW_TLS':
392
+ await this.#SetupTCPRawServer();
393
+ break;
394
+ case 'JSONRPC2_TLS':
395
+ await this.#SetupJSONRPCServer();
396
+ break;
397
+ }
398
+ };
455
399
  }
400
+ exports.ServerProcessBase = ServerProcessBase;
401
+ //# sourceMappingURL=serverprocessbase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverprocessbase.js","sourceRoot":"","sources":["../../src/process/serverprocessbase.ts"],"names":[],"mappings":"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"}