@nsshunt/stsappframework 3.1.233 → 3.1.235

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 (51) hide show
  1. package/.github/workflows/npm-publish.yml +18 -29
  2. package/build.sh +12 -9
  3. package/eslint.config.mjs +7 -0
  4. package/package.json +18 -21
  5. package/.eslintrc.json +0 -27
  6. package/babel.config.json +0 -6
  7. package/dist/commonTypes.js +0 -69
  8. package/dist/commonTypes.js.map +0 -1
  9. package/dist/controller/stscontrollerbase.js +0 -14
  10. package/dist/controller/stscontrollerbase.js.map +0 -1
  11. package/dist/controller/stslatencycontroller.js +0 -28
  12. package/dist/controller/stslatencycontroller.js.map +0 -1
  13. package/dist/index.js.map +0 -1
  14. package/dist/logger/stsTransportLoggerWinston.js +0 -22
  15. package/dist/logger/stsTransportLoggerWinston.js.map +0 -1
  16. package/dist/logger/stsTransportWinston.js +0 -43
  17. package/dist/logger/stsTransportWinston.js.map +0 -1
  18. package/dist/middleware/serverNetworkMiddleware.js +0 -199
  19. package/dist/middleware/serverNetworkMiddleware.js.map +0 -1
  20. package/dist/network.js +0 -38
  21. package/dist/network.js.map +0 -1
  22. package/dist/process/masterprocessbase.js +0 -558
  23. package/dist/process/masterprocessbase.js.map +0 -1
  24. package/dist/process/processbase.js +0 -411
  25. package/dist/process/processbase.js.map +0 -1
  26. package/dist/process/serverprocessbase.js +0 -401
  27. package/dist/process/serverprocessbase.js.map +0 -1
  28. package/dist/process/singleprocessbase.js +0 -55
  29. package/dist/process/singleprocessbase.js.map +0 -1
  30. package/dist/process/workerprocessbase.js +0 -210
  31. package/dist/process/workerprocessbase.js.map +0 -1
  32. package/dist/publishertransports/publishTransportUtils.js +0 -47
  33. package/dist/publishertransports/publishTransportUtils.js.map +0 -1
  34. package/dist/route/stslatencyroute.js +0 -15
  35. package/dist/route/stslatencyroute.js.map +0 -1
  36. package/dist/route/stsrouterbase.js +0 -21
  37. package/dist/route/stsrouterbase.js.map +0 -1
  38. package/dist/stsexpressserver.js +0 -115
  39. package/dist/stsexpressserver.js.map +0 -1
  40. package/dist/validation/errors.js +0 -10
  41. package/dist/validation/errors.js.map +0 -1
  42. package/dist/vitesttesting/appConfig.js +0 -93
  43. package/dist/vitesttesting/appConfig.js.map +0 -1
  44. package/dist/vitesttesting/appSingleWSS.js +0 -122
  45. package/dist/vitesttesting/appSingleWSS.js.map +0 -1
  46. package/dist/vitesttesting/server.js +0 -15
  47. package/dist/vitesttesting/server.js.map +0 -1
  48. package/dist/vitesttesting/singleservertest.test.js +0 -286
  49. package/dist/vitesttesting/singleservertest.test.js.map +0 -1
  50. package/dist/vitesttesting/wsevents.js +0 -3
  51. package/dist/vitesttesting/wsevents.js.map +0 -1
@@ -1,6 +1,5 @@
1
1
  # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
2
2
  # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
3
-
4
3
  name: Node.js Package
5
4
 
6
5
  on:
@@ -16,12 +15,15 @@ jobs:
16
15
  - uses: actions/checkout@v4
17
16
  - uses: actions/setup-node@v4
18
17
  with:
19
- node-version: 22
20
- cache: 'npm'
21
- - run: npm ci
22
- - run: npm run lint
23
- - run: npm run build
24
- - run: npm test
18
+ node-version: 23
19
+ cache: 'yarn'
20
+ #cache: 'npm'
21
+ - run: yarn install --frozen-lockfile
22
+ - run: yarn lint
23
+ - run: yarn test
24
+ #- run: npm ci
25
+ #- run: npm run lint
26
+ #- run: npm test
25
27
 
26
28
  publish-npm:
27
29
  needs: build
@@ -30,28 +32,15 @@ jobs:
30
32
  - uses: actions/checkout@v4
31
33
  - uses: actions/setup-node@v4
32
34
  with:
33
- node-version: 22
34
- cache: 'npm'
35
+ node-version: 23
36
+ cache: 'yarn'
37
+ #cache: 'npm'
35
38
  registry-url: https://registry.npmjs.org/
36
- - run: npm ci
37
- - run: npm run build
38
- - run: npm publish --access public
39
+ - run: yarn install --frozen-lockfile
40
+ - run: yarn build
41
+ - run: yarn publish --access public
42
+ #- run: npm ci
43
+ #- run: npm run build
44
+ #- run: npm publish --access public
39
45
  env:
40
46
  NODE_AUTH_TOKEN: ${{secrets.npm_token}}
41
-
42
- # publish-gpr:
43
- # needs: build
44
- # runs-on: ubuntu-latest
45
- # permissions:
46
- # contents: read
47
- # packages: write
48
- # steps:
49
- # - uses: actions/checkout@v2
50
- # - uses: actions/setup-node@v2
51
- # with:
52
- # node-version: 17
53
- # registry-url: https://npm.pkg.github.com/
54
- # - run: npm ci
55
- # - run: npm publish
56
- # env:
57
- # NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
package/build.sh CHANGED
@@ -1,25 +1,28 @@
1
1
  #!/bin/sh
2
- echo Remove build files
3
2
  rm -rf dist
4
3
  rm -rf types
5
- echo Install npm modules
6
- npm i
7
- echo Build
8
- npm run build
4
+ #npm i --verbose
5
+ yarn install
6
+ #npm run build
7
+ yarn build
9
8
  RESULT=$?
10
9
  if [ $RESULT -eq 0 ]; then
11
10
  echo success build
12
- npm run lint
11
+ #npm run lint
12
+ yarn lint
13
13
  RESULT=$?
14
14
  if [ $RESULT -eq 0 ]; then
15
15
  echo success lint
16
- npm run test
16
+ yarn test
17
+ #npm run test
17
18
  RESULT=$?
18
19
  if [ $RESULT -eq 0 ]; then
19
20
  echo success test
20
21
  git commit -a -m "changed"
21
- npm version patch
22
- npm i
22
+ yarn version --patch
23
+ #npm version patch
24
+ yarn install
25
+ #npm i --verbose
23
26
  git commit -a -m "changed"
24
27
  git push
25
28
  else
package/eslint.config.mjs CHANGED
@@ -44,5 +44,12 @@ export default [{
44
44
  "no-mixed-spaces-and-tabs": [2],
45
45
  "@typescript-eslint/no-var-requires": "warn",
46
46
  "@typescript-eslint/no-this-alias": "warn",
47
+ "@typescript-eslint/no-unused-expressions": [
48
+ "error",
49
+ {
50
+ "allowTernary": true,
51
+ "allowTaggedTemplates": true
52
+ }
53
+ ]
47
54
  },
48
55
  }];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nsshunt/stsappframework",
3
- "version": "3.1.233",
3
+ "version": "3.1.235",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "./types/index.d.ts",
@@ -25,31 +25,28 @@
25
25
  },
26
26
  "homepage": "https://github.com/nsshunt/stsappframework#readme",
27
27
  "devDependencies": {
28
- "@babel/preset-env": "^7.26.0",
29
- "@babel/preset-typescript": "^7.26.0",
30
- "@eslint/eslintrc": "^3.1.0",
31
- "@eslint/js": "^9.13.0",
28
+ "@eslint/eslintrc": "^3.2.0",
29
+ "@eslint/js": "^9.15.0",
32
30
  "@tsconfig/node20": "^20.1.4",
33
31
  "@types/cookie-parser": "^1.4.7",
34
32
  "@types/debug": "^4.1.12",
35
33
  "@types/express": "^4.17.21",
36
34
  "@types/uuid": "^10.0.0",
37
- "@typescript-eslint/eslint-plugin": "^8.12.1",
38
- "@typescript-eslint/parser": "^8.12.1",
39
- "eslint": "^9.13.0",
40
- "globals": "^15.11.0",
41
- "jest": "^29.7.0",
42
- "testcontainers": "^10.13.1",
35
+ "@typescript-eslint/eslint-plugin": "^8.15.0",
36
+ "@typescript-eslint/parser": "^8.15.0",
37
+ "eslint": "^9.15.0",
38
+ "globals": "^15.12.0",
39
+ "testcontainers": "^10.14.0",
43
40
  "typescript": "^5.6.3",
44
- "vite": "^5.4.10",
45
- "vitest": "^2.1.4"
41
+ "vite": "^5.4.11",
42
+ "vitest": "^2.1.5"
46
43
  },
47
44
  "dependencies": {
48
- "@nsshunt/stsconfig": "^1.25.167",
49
- "@nsshunt/stsdatamanagement": "^1.18.83",
50
- "@nsshunt/stsobservability": "^1.0.84",
51
- "@nsshunt/stssocketioutils": "^1.0.3",
52
- "@nsshunt/stsutils": "^1.16.91",
45
+ "@nsshunt/stsconfig": "^1.27.4",
46
+ "@nsshunt/stsdatamanagement": "^1.18.85",
47
+ "@nsshunt/stsobservability": "^1.0.89",
48
+ "@nsshunt/stssocketioutils": "^1.1.5",
49
+ "@nsshunt/stsutils": "^1.19.7",
53
50
  "@socket.io/cluster-adapter": "^0.2.2",
54
51
  "@socket.io/redis-adapter": "^8.3.0",
55
52
  "@socket.io/redis-streams-adapter": "^0.2.2",
@@ -57,10 +54,10 @@
57
54
  "@types/pidusage": "^2.0.5",
58
55
  "axios": "^1.7.7",
59
56
  "chalk": "^4.1.2",
60
- "cookie-parser": "^1.4.6",
57
+ "cookie-parser": "^1.4.7",
61
58
  "cors": "^2.8.5",
62
59
  "debug": "^4.3.7",
63
- "express": "^4.19.1",
60
+ "express": "^4.21.1",
64
61
  "http-status-codes": "^2.3.0",
65
62
  "jayson": "^4.1.2",
66
63
  "on-headers": "^1.0.2",
@@ -72,6 +69,6 @@
72
69
  "systeminformation": "^5.23.5",
73
70
  "tiny-emitter": "^2.1.0",
74
71
  "uuid": "^10.0.0",
75
- "winston": "^3.14.2"
72
+ "winston": "^3.17.0"
76
73
  }
77
74
  }
package/.eslintrc.json DELETED
@@ -1,27 +0,0 @@
1
- {
2
- "env": {
3
- "browser": true,
4
- "es2021": true,
5
- "node": true,
6
- "jest": true
7
- },
8
- "extends": [
9
- "eslint:recommended",
10
- "plugin:@typescript-eslint/recommended"
11
- ],
12
- "parser": "@typescript-eslint/parser",
13
- "parserOptions": {
14
- "ecmaVersion": "latest",
15
- "sourceType": "module"
16
- },
17
- "plugins": [
18
- "@typescript-eslint"
19
- ],
20
- "ignorePatterns": ["temp.js", "**/k6scripts/*.js", "**/public/*", "**/dist/*", "**/types/*"],
21
- "rules": {
22
- "indent": ["error", 4],
23
- "no-mixed-spaces-and-tabs": [2],
24
- "@typescript-eslint/no-var-requires": "warn",
25
- "@typescript-eslint/no-this-alias": "warn"
26
- }
27
- }
package/babel.config.json DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "presets": [
3
- ["@babel/preset-env", {"targets": {"node": "current"}}],
4
- "@babel/preset-typescript"
5
- ]
6
- }
@@ -1,69 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,14 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,28 +0,0 @@
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
@@ -1 +0,0 @@
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"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
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"}
@@ -1,22 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,43 +0,0 @@
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
@@ -1 +0,0 @@
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,199 +0,0 @@
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) {
22
- super(options);
23
- }
24
- #LogSillyMessage(message) {
25
- this.options?.logger.silly(message);
26
- }
27
- #LogErrorMessage(message) {
28
- this.options?.logger.error(message);
29
- }
30
- on(eventName, callBackFn) {
31
- this.#tinyEmitter.on(eventName, callBackFn);
32
- }
33
- GetSocketRecord = (socket) => {
34
- for (const [, socketRecord] of Object.entries(this.#socketCollection)) {
35
- if (socketRecord.socket === socket) {
36
- return socketRecord;
37
- }
38
- }
39
- return null;
40
- };
41
- UpdateNetworkStats = (workingSocketRecord, eventName, req) => {
42
- workingSocketRecord.originalUrl = req.originalUrl;
43
- workingSocketRecord.eventName = eventName;
44
- workingSocketRecord.currentBytesRead = req.socket.bytesRead;
45
- workingSocketRecord.currentBytesWritten = req.socket.bytesWritten;
46
- workingSocketRecord.requestBytesRead = workingSocketRecord.currentBytesRead - workingSocketRecord.lastBytesRead;
47
- workingSocketRecord.requestBytesWritten = workingSocketRecord.currentBytesWritten - workingSocketRecord.lastBytesWritten;
48
- //this.#LogDebugMessage(chalk.gray(`totalBytesRead: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesRead}]`));
49
- //this.#LogDebugMessage(chalk.gray(`totalBytesWritten: [${workingSocketRecord.id}] [${workingSocketRecord.originalUrl}] [${eventName}] [${workingSocketRecord.requestBytesWritten}]`));
50
- const workingSocketEventRecord = { ...workingSocketRecord };
51
- delete workingSocketEventRecord.socket;
52
- this.#LogSillyMessage(chalk_1.default.gray(`Sending event: [${JSON.stringify(workingSocketEventRecord)}]`));
53
- this.#tinyEmitter.emit(ServerNetworkMiddlewareEventName.UpdateInstrument_SERVER_NET_VAL, workingSocketEventRecord);
54
- workingSocketRecord.lastBytesRead = workingSocketRecord.currentBytesRead;
55
- workingSocketRecord.lastBytesWritten = workingSocketRecord.currentBytesWritten;
56
- };
57
- #GetRequestContentSize = (req) => {
58
- try {
59
- let contentLength = 0;
60
- if (req['_contentLength']) {
61
- contentLength = req['_contentLength'];
62
- }
63
- else {
64
- if (req.headers['content-length']) {
65
- contentLength = parseInt(req.headers['content-length']);
66
- }
67
- }
68
- return contentLength;
69
- }
70
- catch (error) {
71
- this.#LogErrorMessage(chalk_1.default.red(`ServerNetworkMiddleware:#GetRequestContentSize(): Error: [${error}]`));
72
- return 0;
73
- }
74
- };
75
- Middleware = (req, res, next) => {
76
- let workingSocketRecord = null;
77
- workingSocketRecord = this.GetSocketRecord(req.socket);
78
- if (!workingSocketRecord) {
79
- this.#id = (0, uuid_1.v4)();
80
- workingSocketRecord = {
81
- id: `${this.options.name}_${this.#id.toString()}`,
82
- socket: req.socket,
83
- currentBytesRead: 0,
84
- currentBytesWritten: 0,
85
- lastBytesRead: 0,
86
- lastBytesWritten: 0,
87
- requestBytesRead: 0,
88
- requestBytesWritten: 0,
89
- originalUrl: req.originalUrl,
90
- eventName: '',
91
- };
92
- this.#socketCollection[workingSocketRecord.id] = workingSocketRecord;
93
- this.#LogSillyMessage(chalk_1.default.gray(`Adding new socket to recordset: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`));
94
- workingSocketRecord.socket.on('data', () => {
95
- const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
96
- if (socketRecord) {
97
- this.#LogSillyMessage(chalk_1.default.gray(`Socket data event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
98
- this.UpdateNetworkStats(socketRecord, 'socket_data', req);
99
- }
100
- else {
101
- this.#LogSillyMessage(chalk_1.default.magenta(`Socket data event: Could not find socket within recordset`));
102
- }
103
- });
104
- workingSocketRecord.socket.on('close', () => {
105
- const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
106
- if (socketRecord) {
107
- this.#LogSillyMessage(chalk_1.default.gray(`Socket close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
108
- this.UpdateNetworkStats(socketRecord, 'socket_close', req);
109
- delete this.#socketCollection[socketRecord.id];
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`));
114
- }
115
- });
116
- workingSocketRecord.socket.on('end', () => {
117
- const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
118
- if (socketRecord) {
119
- this.#LogSillyMessage(chalk_1.default.gray(`Socket end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
120
- this.UpdateNetworkStats(socketRecord, 'socket_end', req);
121
- }
122
- else {
123
- this.#LogSillyMessage(chalk_1.default.magenta(`Socket end event: Could not find socket within recordset`));
124
- }
125
- });
126
- }
127
- // The following gets the payload size from adding _contentLength or content-length to the header size.
128
- // From brief observations, this appears to be about 80 bytes short from what is reported by the socket writtenBytes.
129
- (0, on_headers_1.default)(res, () => {
130
- let contentLength = 0;
131
- if (res['_contentLength']) {
132
- contentLength = res['_contentLength'];
133
- }
134
- else {
135
- if (res.hasHeader('content-length')) {
136
- contentLength = parseInt(res.getHeader('content-length'));
137
- }
138
- }
139
- // Ensure that the client does NOT cache the response
140
- res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); // HTTP 1.1
141
- res.setHeader('Pragma', 'no-cache'); // HTTP 1.0
142
- res.setHeader('Expires', '0'); // Proxies
143
- const headerLength = JSON.stringify(res.getHeaders()).length;
144
- const totalSize = contentLength + headerLength;
145
- this.#LogSillyMessage(chalk_1.default.white.bgBlue(`contentLength: [${contentLength}], headerLength: [${headerLength}], total Size: [${totalSize}]`));
146
- });
147
- // This event is the one where bytesWritten is generally recorded
148
- req.on('end', () => {
149
- const socketRecord = this.GetSocketRecord(req.socket);
150
- if (socketRecord) {
151
- this.#LogSillyMessage(chalk_1.default.gray(`Request end event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
152
- this.UpdateNetworkStats(socketRecord, 'req_end', req);
153
- }
154
- else {
155
- this.#LogSillyMessage(chalk_1.default.magenta(`Request end event: Could not find socket within recordset`));
156
- }
157
- });
158
- req.on('close', () => {
159
- const socketRecord = this.GetSocketRecord(req.socket);
160
- if (socketRecord) {
161
- this.#LogSillyMessage(chalk_1.default.gray(`Request close event: ID: [${socketRecord.id}], originalUrl: [${socketRecord.originalUrl}]`));
162
- this.UpdateNetworkStats(socketRecord, 'req_close', req);
163
- }
164
- else {
165
- this.#LogSillyMessage(chalk_1.default.magenta(`Request close event: Could not find socket within recordset`));
166
- }
167
- });
168
- /* These methods are also available but from testing they provide no specific value add, i.e. the calculated numbers are always 0.
169
- req.on('data', () => {
170
- workingSocketRecord = this.GetSocketRecord(req.socket);
171
- if (workingSocketRecord) {
172
- this.#LogDebugMessage(chalk.gray(`Request close event: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`));
173
- this.UpdateNetworkStats(workingSocketRecord, 'data', req);
174
- } else {
175
- this.#LogDebugMessage(chalk.magenta(`Request close event: Could not find socket within recordset`));
176
- }
177
- });
178
-
179
- req.on('readable', () => {
180
- workingSocketRecord = this.GetSocketRecord(req.socket);
181
- if (workingSocketRecord) {
182
- this.#LogDebugMessage(chalk.gray(`Request close event: ID: [${workingSocketRecord.id}], originalUrl: [${workingSocketRecord.originalUrl}]`));
183
- this.UpdateNetworkStats(workingSocketRecord, 'readable', req);
184
- } else {
185
- this.#LogDebugMessage(chalk.magenta(`Request close event: Could not find socket within recordset`));
186
- }
187
- });
188
- */
189
- const inHeadersLength = JSON.stringify(req.headers).length;
190
- const inContentLength = this.#GetRequestContentSize(req);
191
- const inTotal = inHeadersLength + inContentLength;
192
- this.#LogSillyMessage(chalk_1.default.white.bgGray(`inHeadersLength: [${inHeadersLength}], inContentLength: [${inContentLength}], inTotal: [${inTotal}]`));
193
- // This event is the one where bytesRead is generally recorded
194
- this.UpdateNetworkStats(workingSocketRecord, 'middleware', req);
195
- next();
196
- };
197
- }
198
- exports.ServerNetworkMiddleware = ServerNetworkMiddleware;
199
- //# sourceMappingURL=serverNetworkMiddleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serverNetworkMiddleware.js","sourceRoot":"","sources":["../../src/middleware/serverNetworkMiddleware.ts"],"names":[],"mappings":"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"}