@nsshunt/stsappframework 3.2.1 → 3.2.3

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 +8 -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
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.iss = exports.IPCMessageCommand = void 0;
4
+ exports.CreateServiceProcessContext = CreateServiceProcessContext;
5
+ const stsutils_1 = require("@nsshunt/stsutils");
6
+ function CreateServiceProcessContext(serviceName, serviceVersion, serviceInstanceId, hostName, processId, parentProcessId) {
7
+ const checkParams = [
8
+ ['servicename', serviceName],
9
+ ['serviceversion', serviceVersion],
10
+ ['hostname', hostName],
11
+ ['serviceInstanceId', serviceInstanceId]
12
+ ];
13
+ // CHeck for invalid strings
14
+ (0, stsutils_1.CheckValidChar)(checkParams);
15
+ return {
16
+ nid: `\
17
+ ${serviceName}${stsutils_1.ModelDelimeter.COMPONENT_SEPERATOR}${serviceVersion}\
18
+ ${stsutils_1.ModelDelimeter.SEPERATOR}\
19
+ ${serviceInstanceId}${stsutils_1.ModelDelimeter.COMPONENT_SEPERATOR}${hostName}\
20
+ ${stsutils_1.ModelDelimeter.NID_SEPERATOR}\
21
+ ${processId.toString()}${stsutils_1.ModelDelimeter.COMPONENT_SEPERATOR}${parentProcessId.toString()}`,
22
+ serviceName,
23
+ serviceVersion,
24
+ serviceInstanceId,
25
+ hostName,
26
+ processId: processId.toString(),
27
+ parentProcessId: parentProcessId.toString()
28
+ };
29
+ }
30
+ var IPCMessageCommand;
31
+ (function (IPCMessageCommand) {
32
+ IPCMessageCommand["AddWorker"] = "AddWorker";
33
+ IPCMessageCommand["DeleteWorker"] = "DeleteWorker";
34
+ IPCMessageCommand["GetConfig"] = "GetConfig";
35
+ })(IPCMessageCommand || (exports.IPCMessageCommand = IPCMessageCommand = {}));
36
+ // -----------------------------------------------------------------------------
37
+ /*
38
+ export interface IInfluxDBManagerOptions {
39
+ token: string // API access token
40
+ url: string // end-pont for API
41
+ org: string // organisation
42
+ bucket: string // bucket to store results
43
+ agent?: {
44
+ influxDB_keepAlive: boolean
45
+ influxDB_maxSockets?: number
46
+ influxDB_maxTotalSockets?: number
47
+ influxDB_maxFreeSockets?: number
48
+ influxDB_timeout?: number
49
+ influxDB_rejectUnauthorized?: boolean
50
+ }
51
+ logger: ISTSLogger
52
+ }
53
+ */
54
+ /*
55
+ export type ConsumeMessageCB = (topic: string, partition: number, message: KafkaMessage, heartbeat: () => Promise<void>, pause: () => () => void) => void;
56
+ export type ConsumeMessageErrorCB = (error: any) => void;
57
+
58
+ export interface IKafkaConsumer {
59
+ get consumer(): Consumer
60
+ get id(): string
61
+ Connect(errorCb: (error: any) => void): Promise<void>
62
+ Disconnect(errorCb: (error: any) => void): Promise<void>
63
+ Subscribe: (topics: string[], fromBeginning: boolean, errorCb: (error: any) => void) => Promise<void>
64
+ Stop: (errorCb: (error: any) => void) => Promise<void>
65
+ StartConsumingMessages: (autoCommit: boolean, cb: ConsumeMessageCB, errorCb: ConsumeMessageErrorCB) => Promise<void>
66
+ }
67
+ */
68
+ exports.iss = `https://stscore.stsmda.org/oauth2/v2.0`;
69
+ //# sourceMappingURL=commonTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonTypes.js","sourceRoot":"","sources":["../src/commonTypes.ts"],"names":[],"mappings":";;;AAiCA,kEA2BC;AAzDD,gDAA0F;AA8B1F,SAAgB,2BAA2B,CAAC,WAAmB,EAAE,cAAsB,EAAE,iBAAyB,EAC9G,QAAgB,EAAE,SAAiB,EAAE,eAAuB;IAE5D,MAAM,WAAW,GAAG;QAChB,CAAE,aAAa,EAAE,WAAW,CAAE;QAC9B,CAAE,gBAAgB,EAAE,cAAc,CAAE;QACpC,CAAE,UAAU,EAAE,QAAQ,CAAE;QACxB,CAAE,mBAAmB,EAAE,iBAAiB,CAAE;KAC7C,CAAC;IAEF,4BAA4B;IAC5B,IAAA,yBAAc,EAAC,WAAW,CAAC,CAAC;IAE5B,OAAO;QACH,GAAG,EAAE;EACX,WAAW,GAAG,yBAAc,CAAC,mBAAmB,GAAG,cAAc;EACjE,yBAAc,CAAC,SAAS;EACxB,iBAAiB,GAAG,yBAAc,CAAC,mBAAmB,GAAG,QAAQ;EACjE,yBAAc,CAAC,aAAa;EAC5B,SAAS,CAAC,QAAQ,EAAE,GAAG,yBAAc,CAAC,mBAAmB,GAAG,eAAe,CAAC,QAAQ,EAAE,EAAE;QAClF,WAAW;QACX,cAAc;QACd,iBAAiB;QACjB,QAAQ;QACR,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;QAC/B,eAAe,EAAE,eAAe,CAAC,QAAQ,EAAE;KAC9C,CAAA;AACL,CAAC;AAED,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IACzB,4CAAuB,CAAA;IACvB,kDAA6B,CAAA;IAC7B,4CAAuB,CAAA;AAC3B,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AA6GD,gFAAgF;AAEhF;;;;;;;;;;;;;;;;EAgBE;AAEF;;;;;;;;;;;;;EAaE;AAEW,QAAA,GAAG,GAAG,wCAAwC,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STSControllerBase = void 0;
4
+ class STSControllerBase {
5
+ #stsApp;
6
+ constructor(stsApp) {
7
+ this.#stsApp = stsApp;
8
+ }
9
+ get stsApp() {
10
+ return this.#stsApp;
11
+ }
12
+ }
13
+ exports.STSControllerBase = STSControllerBase;
14
+ //# sourceMappingURL=stscontrollerbase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stscontrollerbase.js","sourceRoot":"","sources":["../../src/controller/stscontrollerbase.ts"],"names":[],"mappings":";;;AAGA,MAAsB,iBAAiB;IACnC,OAAO,CAAM;IAEb,YAAY,MAAoB;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAA;IACvB,CAAC;CACJ;AAVD,8CAUC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STSLatencyController = void 0;
4
+ /* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF
5
+ const http_status_codes_1 = require("http-status-codes");
6
+ const stscontrollerbase_1 = require("./stscontrollerbase");
7
+ class STSLatencyController extends stscontrollerbase_1.STSControllerBase {
8
+ constructor(stsApp) {
9
+ super(stsApp);
10
+ }
11
+ // curl http://localhost:3000/api/v1/latency/latency
12
+ async stslatency(req, res) {
13
+ try {
14
+ const retVal = {
15
+ data: `Ping Completed At: ${Date.now()}`,
16
+ pid: process.pid,
17
+ ppid: process.ppid
18
+ };
19
+ return res.status(http_status_codes_1.StatusCodes.OK).send(retVal);
20
+ }
21
+ catch (error) {
22
+ this.stsApp.LogErrorMessage(error);
23
+ return res.status(http_status_codes_1.StatusCodes.INTERNAL_SERVER_ERROR).send({ status: http_status_codes_1.StatusCodes.INTERNAL_SERVER_ERROR, error: 'Operation was not successful', detail: error });
24
+ }
25
+ }
26
+ }
27
+ exports.STSLatencyController = STSLatencyController;
28
+ //# sourceMappingURL=stslatencycontroller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stslatencycontroller.js","sourceRoot":"","sources":["../../src/controller/stslatencycontroller.ts"],"names":[],"mappings":";;;AAAA,kDAAkD,CAAE,UAAU;AAC9D,yDAA+C;AAC/C,2DAAuD;AAGvD,MAAa,oBAAqB,SAAQ,qCAAiB;IACvD,YAAY,MAAoB;QAC5B,KAAK,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,UAAU,CAAC,GAAQ,EAAE,GAAQ;QAE/B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG;gBACX,IAAI,EAAE,sBAAsB,IAAI,CAAC,GAAG,EAAE,EAAE;gBACxC,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;aACrB,CAAC;YACF,OAAO,GAAG,CAAC,MAAM,CAAC,+BAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YACnC,OAAO,GAAG,CAAC,MAAM,CAAC,+BAAW,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAE,EAAE,MAAM,EAAE,+BAAW,CAAC,qBAAqB,EAAE,KAAK,EAAE,8BAA8B,EAAE,MAAM,EAAE,KAAK,EAAE,CAAE,CAAC;QACrK,CAAC;IACL,CAAC;CACJ;AApBD,oDAoBC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,8DAA2C;AAC3C,wDAAqC;AACrC,8DAA2C;AAC3C,8DAA2C;AAC3C,8DAA2C;AAC3C,iEAA8C;AAC9C,oEAAiD;AACjD,0DAAuC;AACvC,wDAAqC;AACrC,8EAA2D;AAC3D,qEAAkD;AAClD,+DAA4C"}
@@ -0,0 +1,22 @@
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.STSTransportLoggerWinston = void 0;
7
+ /* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF
8
+ const winston_transport_1 = __importDefault(require("winston-transport"));
9
+ class STSTransportLoggerWinston extends winston_transport_1.default {
10
+ #options;
11
+ constructor(opts) {
12
+ super(opts);
13
+ this.#options = opts;
14
+ }
15
+ log(info, callback) {
16
+ this.#options.stsApp.LogMessageToLoggerInstrument(info.message);
17
+ this.emit('logged', info);
18
+ callback();
19
+ }
20
+ }
21
+ exports.STSTransportLoggerWinston = STSTransportLoggerWinston;
22
+ //# sourceMappingURL=stsTransportLoggerWinston.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stsTransportLoggerWinston.js","sourceRoot":"","sources":["../../src/logger/stsTransportLoggerWinston.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAkD,CAAE,UAAU;AAC9D,0EAAqE;AAQrE,MAAa,yBAA0B,SAAQ,2BAAS;IAEpD,QAAQ,CAAoC;IAE5C,YAAY,IAAuC;QAC/C,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,IAAS,EAAE,QAAa;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1B,QAAQ,EAAE,CAAC;IACf,CAAC;CACJ;AAdD,8DAcC"}
@@ -0,0 +1,43 @@
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.STSTransportWinston = void 0;
7
+ exports.UpdateSTSTransportWithDebugger = UpdateSTSTransportWithDebugger;
8
+ /* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF
9
+ const winston_transport_1 = __importDefault(require("winston-transport"));
10
+ function UpdateSTSTransportWithDebugger(logger, newDebugger) {
11
+ const stsTransport = logger.transports.find((transport) => {
12
+ return transport instanceof STSTransportWinston;
13
+ });
14
+ if (stsTransport) {
15
+ stsTransport.debugger = newDebugger;
16
+ }
17
+ }
18
+ class STSTransportWinston extends winston_transport_1.default {
19
+ #options;
20
+ constructor(opts) {
21
+ super(opts);
22
+ this.#options = opts;
23
+ }
24
+ get debugger() {
25
+ return this.#options.debugger;
26
+ }
27
+ set debugger(newDebugger) {
28
+ this.#options.debugger = newDebugger;
29
+ }
30
+ log(info, callback) {
31
+ //setImmediate(() => {
32
+ if (info[Symbol.for('level')] == 'debug') {
33
+ if (this.#options.debugger) {
34
+ this.#options.debugger(info.message);
35
+ }
36
+ }
37
+ this.emit('logged', info);
38
+ callback();
39
+ //});
40
+ }
41
+ }
42
+ exports.STSTransportWinston = STSTransportWinston;
43
+ //# sourceMappingURL=stsTransportWinston.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stsTransportWinston.js","sourceRoot":"","sources":["../../src/logger/stsTransportWinston.ts"],"names":[],"mappings":";;;;;;AAUA,wEAOC;AAjBD,kDAAkD,CAAE,UAAU;AAC9D,0EAAqE;AASrE,SAAgB,8BAA8B,CAAC,MAAW,EAAE,WAAgB;IACxE,MAAM,YAAY,GAA0B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAc,EAAE,EAAE;QAClF,OAAO,SAAS,YAAY,mBAAmB,CAAA;IACnD,CAAC,CAAC,CAAC;IACH,IAAI,YAAY,EAAE,CAAC;QACd,YAAoC,CAAC,QAAQ,GAAG,WAAW,CAAA;IAChE,CAAC;AACL,CAAC;AAED,MAAa,mBAAoB,SAAQ,2BAAS;IAE9C,QAAQ,CAA8B;IAEtC,YAAY,IAAiC;QACzC,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,IAAI,QAAQ,CAAC,WAAiC;QAC1C,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,WAAW,CAAC;IACzC,CAAC;IAED,GAAG,CAAC,IAAS,EAAE,QAAa;QACxB,sBAAsB;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1B,QAAQ,EAAE,CAAC;QACX,KAAK;IACT,CAAC;CACJ;AA5BD,kDA4BC"}
@@ -1,120 +1,84 @@
1
- /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
2
- import chalk from 'chalk'; // Note: Do NOT upgrade beyond 4.1.2 as the ESM version (5.0.0+) breaks this entire codebase
3
- import { Request, Response, NextFunction } from 'express'
4
- import { Socket } from 'node:net'
5
- import { TinyEmitter } from 'tiny-emitter';
6
-
7
- import { ISTSLogger, STSOptionsBase } from '@nsshunt/stsutils';
8
-
9
- import { v4 as uuidv4 } from 'uuid';
10
- import onHeaders from 'on-headers';
11
-
12
- export enum ServerNetworkMiddlewareEventName {
13
- UpdateInstrument_SERVER_NET_VAL = 'UpdateInstrument_SERVER_NET_VAL' // request net stats
14
- }
15
-
16
- export interface ISocketRecord {
17
- id: string
18
- socket: Socket,
19
- currentBytesRead: number
20
- currentBytesWritten: number
21
- lastBytesRead: number
22
- lastBytesWritten: number
23
- requestBytesRead: number
24
- requestBytesWritten: number
25
- originalUrl: string
26
- eventName: string
27
- }
28
-
29
- export type ServerNetworkMiddlewareEventFunc = (data: ISocketRecord) => void;
30
-
31
- export interface IServerNetworkMiddleware {
32
- name: string
33
- outputDebug: boolean
34
- logger: ISTSLogger
35
- }
36
-
37
- export class ServerNetworkMiddleware extends STSOptionsBase
38
- {
39
- #tinyEmitter: TinyEmitter = new TinyEmitter();
40
- #socketCollection: Record<string, ISocketRecord> = { };
41
- #id: string = '';
42
-
43
- constructor(options: IServerNetworkMiddleware) {
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.ServerNetworkMiddleware = exports.ServerNetworkMiddlewareEventName = void 0;
7
+ /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
8
+ const chalk_1 = __importDefault(require("chalk")); // Note: Do NOT upgrade beyond 4.1.2 as the ESM version (5.0.0+) breaks this entire codebase
9
+ const tiny_emitter_1 = require("tiny-emitter");
10
+ const stsutils_1 = require("@nsshunt/stsutils");
11
+ const uuid_1 = require("uuid");
12
+ const on_headers_1 = __importDefault(require("on-headers"));
13
+ var ServerNetworkMiddlewareEventName;
14
+ (function (ServerNetworkMiddlewareEventName) {
15
+ ServerNetworkMiddlewareEventName["UpdateInstrument_SERVER_NET_VAL"] = "UpdateInstrument_SERVER_NET_VAL"; // request net stats
16
+ })(ServerNetworkMiddlewareEventName || (exports.ServerNetworkMiddlewareEventName = ServerNetworkMiddlewareEventName = {}));
17
+ class ServerNetworkMiddleware extends stsutils_1.STSOptionsBase {
18
+ #tinyEmitter = new tiny_emitter_1.TinyEmitter();
19
+ #socketCollection = {};
20
+ #id = '';
21
+ constructor(options) {
44
22
  super(options);
45
23
  }
46
-
47
- #LogSillyMessage(message: any) {
24
+ #LogSillyMessage(message) {
48
25
  this.options?.logger.silly(message);
49
26
  }
50
-
51
- #LogErrorMessage(message: any) {
27
+ #LogErrorMessage(message) {
52
28
  this.options?.logger.error(message);
53
29
  }
54
-
55
- on(eventName: ServerNetworkMiddlewareEventName, callBackFn: ServerNetworkMiddlewareEventFunc) {
30
+ on(eventName, callBackFn) {
56
31
  this.#tinyEmitter.on(eventName, callBackFn);
57
32
  }
58
-
59
- GetSocketRecord = (socket: Socket): ISocketRecord | null => {
33
+ GetSocketRecord = (socket) => {
60
34
  for (const [, socketRecord] of Object.entries(this.#socketCollection)) {
61
35
  if (socketRecord.socket === socket) {
62
36
  return socketRecord;
63
37
  }
64
38
  }
65
39
  return null;
66
- }
67
-
68
- UpdateNetworkStats = (workingSocketRecord: ISocketRecord, eventName: string, req: Request) => {
40
+ };
41
+ UpdateNetworkStats = (workingSocketRecord, eventName, req) => {
69
42
  workingSocketRecord.originalUrl = req.originalUrl;
70
43
  workingSocketRecord.eventName = eventName;
71
-
72
44
  workingSocketRecord.currentBytesRead = req.socket.bytesRead;
73
45
  workingSocketRecord.currentBytesWritten = req.socket.bytesWritten;
74
-
75
46
  workingSocketRecord.requestBytesRead = workingSocketRecord.currentBytesRead - workingSocketRecord.lastBytesRead;
76
47
  workingSocketRecord.requestBytesWritten = workingSocketRecord.currentBytesWritten - workingSocketRecord.lastBytesWritten;
77
-
78
48
  //this.#LogDebugMessage(chalk.gray(`totalBytesRead: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesRead}]`));
79
49
  //this.#LogDebugMessage(chalk.gray(`totalBytesWritten: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesWritten}]`));
80
-
81
50
  const workingSocketEventRecord = { ...workingSocketRecord };
82
- delete (workingSocketEventRecord as any).socket;
83
-
84
- this.#LogSillyMessage(chalk.gray(`Sending event: [${JSON.stringify(workingSocketEventRecord)}]`));
85
-
51
+ delete workingSocketEventRecord.socket;
52
+ this.#LogSillyMessage(chalk_1.default.gray(`Sending event: [${JSON.stringify(workingSocketEventRecord)}]`));
86
53
  this.#tinyEmitter.emit(ServerNetworkMiddlewareEventName.UpdateInstrument_SERVER_NET_VAL, workingSocketEventRecord);
87
-
88
54
  workingSocketRecord.lastBytesRead = workingSocketRecord.currentBytesRead;
89
55
  workingSocketRecord.lastBytesWritten = workingSocketRecord.currentBytesWritten;
90
- }
91
-
92
- #GetRequestContentSize = (req: Request) => {
56
+ };
57
+ #GetRequestContentSize = (req) => {
93
58
  try {
94
59
  let contentLength = 0;
95
- if ((req as any)['_contentLength']) {
96
- contentLength = (req as any)['_contentLength'];
97
- } else {
60
+ if (req['_contentLength']) {
61
+ contentLength = req['_contentLength'];
62
+ }
63
+ else {
98
64
  if (req.headers['content-length']) {
99
- contentLength = parseInt(req.headers['content-length'])
65
+ contentLength = parseInt(req.headers['content-length']);
100
66
  }
101
67
  }
102
68
  return contentLength;
103
- } catch (error) {
104
- this.#LogErrorMessage(chalk.red(`ServerNetworkMiddleware:#GetRequestContentSize(): Error: [${error}]`));
69
+ }
70
+ catch (error) {
71
+ this.#LogErrorMessage(chalk_1.default.red(`ServerNetworkMiddleware:#GetRequestContentSize(): Error: [${error}]`));
105
72
  return 0;
106
73
  }
107
- }
108
-
109
- Middleware = (req: Request, res: Response, next: NextFunction) => {
110
- let workingSocketRecord: ISocketRecord | null = null;
111
-
74
+ };
75
+ Middleware = (req, res, next) => {
76
+ let workingSocketRecord = null;
112
77
  workingSocketRecord = this.GetSocketRecord(req.socket);
113
-
114
78
  if (!workingSocketRecord) {
115
- this.#id = uuidv4();
79
+ this.#id = (0, uuid_1.v4)();
116
80
  workingSocketRecord = {
117
- id: `${(this.options as IServerNetworkMiddleware).name}_${this.#id.toString()}`,
81
+ id: `${this.options.name}_${this.#id.toString()}`,
118
82
  socket: req.socket,
119
83
  currentBytesRead: 0,
120
84
  currentBytesWritten: 0,
@@ -125,88 +89,82 @@ export class ServerNetworkMiddleware extends STSOptionsBase
125
89
  originalUrl: req.originalUrl,
126
90
  eventName: '',
127
91
  };
128
-
129
92
  this.#socketCollection[workingSocketRecord.id] = workingSocketRecord;
130
-
131
- this.#LogSillyMessage(chalk.gray(`Adding new socket to recordset: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`));
132
-
93
+ this.#LogSillyMessage(chalk_1.default.gray(`Adding new socket to recordset: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`));
133
94
  workingSocketRecord.socket.on('data', () => {
134
- const socketRecord = this.GetSocketRecord((workingSocketRecord as ISocketRecord).socket);
95
+ const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
135
96
  if (socketRecord) {
136
- this.#LogSillyMessage(chalk.gray(`Socket data event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
97
+ this.#LogSillyMessage(chalk_1.default.gray(`Socket data event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
137
98
  this.UpdateNetworkStats(socketRecord, 'socket_data', req);
138
- } else {
139
- this.#LogSillyMessage(chalk.magenta(`Socket data event: Could not find socket within recordset`));
99
+ }
100
+ else {
101
+ this.#LogSillyMessage(chalk_1.default.magenta(`Socket data event: Could not find socket within recordset`));
140
102
  }
141
103
  });
142
-
143
104
  workingSocketRecord.socket.on('close', () => {
144
- const socketRecord = this.GetSocketRecord((workingSocketRecord as ISocketRecord).socket);
105
+ const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
145
106
  if (socketRecord) {
146
- this.#LogSillyMessage(chalk.gray(`Socket close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
107
+ this.#LogSillyMessage(chalk_1.default.gray(`Socket close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
147
108
  this.UpdateNetworkStats(socketRecord, 'socket_close', req);
148
109
  delete this.#socketCollection[socketRecord.id];
149
- this.#LogSillyMessage(chalk.gray(`Socket removed from recordset: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
150
- } else {
151
- this.#LogSillyMessage(chalk.magenta(`Socket close event: Could not find socket within recordset`));
110
+ this.#LogSillyMessage(chalk_1.default.gray(`Socket removed from recordset: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
111
+ }
112
+ else {
113
+ this.#LogSillyMessage(chalk_1.default.magenta(`Socket close event: Could not find socket within recordset`));
152
114
  }
153
115
  });
154
-
155
116
  workingSocketRecord.socket.on('end', () => {
156
- const socketRecord = this.GetSocketRecord((workingSocketRecord as ISocketRecord).socket);
117
+ const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
157
118
  if (socketRecord) {
158
- this.#LogSillyMessage(chalk.gray(`Socket end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
119
+ this.#LogSillyMessage(chalk_1.default.gray(`Socket end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
159
120
  this.UpdateNetworkStats(socketRecord, 'socket_end', req);
160
- } else {
161
- this.#LogSillyMessage(chalk.magenta(`Socket end event: Could not find socket within recordset`));
121
+ }
122
+ else {
123
+ this.#LogSillyMessage(chalk_1.default.magenta(`Socket end event: Could not find socket within recordset`));
162
124
  }
163
125
  });
164
126
  }
165
-
166
127
  // The following gets the payload size from adding _contentLength or content-length to the header size.
167
128
  // From brief observations, this appears to be about 80 bytes short from what is reported by the socket writtenBytes.
168
- onHeaders(res, () => {
129
+ (0, on_headers_1.default)(res, () => {
169
130
  let contentLength = 0;
170
- if ((res as any)['_contentLength']) {
171
- contentLength = (res as any)['_contentLength'];
172
- } else {
131
+ if (res['_contentLength']) {
132
+ contentLength = res['_contentLength'];
133
+ }
134
+ else {
173
135
  if (res.hasHeader('content-length')) {
174
- contentLength = parseInt(res.getHeader('content-length') as string);
136
+ contentLength = parseInt(res.getHeader('content-length'));
175
137
  }
176
138
  }
177
-
178
139
  // Ensure that the client does NOT cache the response
179
140
  res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); // HTTP 1.1
180
141
  res.setHeader('Pragma', 'no-cache'); // HTTP 1.0
181
142
  res.setHeader('Expires', '0'); // Proxies
182
-
183
143
  const headerLength = JSON.stringify(res.getHeaders()).length;
184
144
  const totalSize = contentLength + headerLength;
185
-
186
- this.#LogSillyMessage(chalk.white.bgBlue(`contentLength: [${contentLength}], headerLength: [${headerLength}], total Size: [${totalSize}]`));
145
+ this.#LogSillyMessage(chalk_1.default.white.bgBlue(`contentLength: [${contentLength}], headerLength: [${headerLength}], total Size: [${totalSize}]`));
187
146
  });
188
-
189
147
  // This event is the one where bytesWritten is generally recorded
190
148
  req.on('end', () => {
191
149
  const socketRecord = this.GetSocketRecord(req.socket);
192
150
  if (socketRecord) {
193
- this.#LogSillyMessage(chalk.gray(`Request end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`))
151
+ this.#LogSillyMessage(chalk_1.default.gray(`Request end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
194
152
  this.UpdateNetworkStats(socketRecord, 'req_end', req);
195
- } else {
196
- this.#LogSillyMessage(chalk.magenta(`Request end event: Could not find socket within recordset`));
153
+ }
154
+ else {
155
+ this.#LogSillyMessage(chalk_1.default.magenta(`Request end event: Could not find socket within recordset`));
197
156
  }
198
157
  });
199
-
200
158
  req.on('close', () => {
201
159
  const socketRecord = this.GetSocketRecord(req.socket);
202
160
  if (socketRecord) {
203
- this.#LogSillyMessage(chalk.gray(`Request close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
161
+ this.#LogSillyMessage(chalk_1.default.gray(`Request close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
204
162
  this.UpdateNetworkStats(socketRecord, 'req_close', req);
205
- } else {
206
- this.#LogSillyMessage(chalk.magenta(`Request close event: Could not find socket within recordset`));
163
+ }
164
+ else {
165
+ this.#LogSillyMessage(chalk_1.default.magenta(`Request close event: Could not find socket within recordset`));
207
166
  }
208
167
  });
209
-
210
168
  /* These methods are also available but from testing they provide no specific value add, i.e. the calculated numbers are always 0.
211
169
  req.on('data', () => {
212
170
  workingSocketRecord = this.GetSocketRecord(req.socket);
@@ -228,16 +186,14 @@ export class ServerNetworkMiddleware extends STSOptionsBase
228
186
  }
229
187
  });
230
188
  */
231
-
232
189
  const inHeadersLength = JSON.stringify(req.headers).length;
233
190
  const inContentLength = this.#GetRequestContentSize(req);
234
191
  const inTotal = inHeadersLength + inContentLength;
235
-
236
- this.#LogSillyMessage(chalk.white.bgGray(`inHeadersLength: [${inHeadersLength}], inContentLength: [${inContentLength}], inTotal: [${inTotal}]`));
237
-
192
+ this.#LogSillyMessage(chalk_1.default.white.bgGray(`inHeadersLength: [${inHeadersLength}], inContentLength: [${inContentLength}], inTotal: [${inTotal}]`));
238
193
  // This event is the one where bytesRead is generally recorded
239
194
  this.UpdateNetworkStats(workingSocketRecord, 'middleware', req);
240
-
241
195
  next();
242
- }
196
+ };
243
197
  }
198
+ exports.ServerNetworkMiddleware = ServerNetworkMiddleware;
199
+ //# sourceMappingURL=serverNetworkMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverNetworkMiddleware.js","sourceRoot":"","sources":["../../src/middleware/serverNetworkMiddleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
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.GetNetworkInterfaces = GetNetworkInterfaces;
7
+ exports.GetFirstNetworkInterface = GetFirstNetworkInterface;
8
+ const os_1 = __importDefault(require("os"));
9
+ function GetNetworkInterfaces() {
10
+ const nets = os_1.default.networkInterfaces();
11
+ const results = {};
12
+ for (const name of Object.keys(nets)) {
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+ for (const net of nets[name]) {
15
+ // Skip over non-IPv4 and internal (i.e. 127.0.0.1) addresses
16
+ if (net.family === 'IPv4' && !net.internal) {
17
+ if (!results[name]) {
18
+ results[name] = [];
19
+ }
20
+ results[name].push(net.address);
21
+ }
22
+ }
23
+ }
24
+ return results;
25
+ }
26
+ function GetFirstNetworkInterface() {
27
+ const nics = GetNetworkInterfaces();
28
+ let hostaddr = null;
29
+ for (const nic in nics) {
30
+ const val = nics[nic];
31
+ if (val.length > 0) {
32
+ hostaddr = val[0];
33
+ break;
34
+ }
35
+ }
36
+ return hostaddr;
37
+ }
38
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":";;;;;AAIA,oDAgBC;AAED,4DAaC;AAnCD,4CAAmB;AAInB,SAAgB,oBAAoB;IAChC,MAAM,IAAI,GAAG,YAAE,CAAC,iBAAiB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAsB,EAAG,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,8DAA8D;QAC9D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAQ,EAAE,CAAC;YAClC,6DAA6D;YAC7D,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAgB,wBAAwB;IACpC,MAAM,IAAI,GAAsB,oBAAoB,EAAE,CAAC;IACvD,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EACtB,CAAC;QACG,MAAM,GAAG,GAAa,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAClB,CAAC;YACG,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM;QACV,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC"}