@nsshunt/stsappframework 3.1.234 → 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.
- package/.github/workflows/npm-publish.yml +18 -29
- package/build.sh +12 -6
- package/eslint.config.mjs +7 -0
- package/package.json +11 -14
- package/.eslintrc.json +0 -27
- package/babel.config.json +0 -6
- package/dist/commonTypes.js +0 -69
- package/dist/commonTypes.js.map +0 -1
- package/dist/controller/stscontrollerbase.js +0 -14
- package/dist/controller/stscontrollerbase.js.map +0 -1
- package/dist/controller/stslatencycontroller.js +0 -28
- package/dist/controller/stslatencycontroller.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger/stsTransportLoggerWinston.js +0 -22
- package/dist/logger/stsTransportLoggerWinston.js.map +0 -1
- package/dist/logger/stsTransportWinston.js +0 -43
- package/dist/logger/stsTransportWinston.js.map +0 -1
- package/dist/middleware/serverNetworkMiddleware.js +0 -199
- package/dist/middleware/serverNetworkMiddleware.js.map +0 -1
- package/dist/network.js +0 -38
- package/dist/network.js.map +0 -1
- package/dist/process/masterprocessbase.js +0 -558
- package/dist/process/masterprocessbase.js.map +0 -1
- package/dist/process/processbase.js +0 -411
- package/dist/process/processbase.js.map +0 -1
- package/dist/process/serverprocessbase.js +0 -401
- package/dist/process/serverprocessbase.js.map +0 -1
- package/dist/process/singleprocessbase.js +0 -55
- package/dist/process/singleprocessbase.js.map +0 -1
- package/dist/process/workerprocessbase.js +0 -210
- package/dist/process/workerprocessbase.js.map +0 -1
- package/dist/publishertransports/publishTransportUtils.js +0 -47
- package/dist/publishertransports/publishTransportUtils.js.map +0 -1
- package/dist/route/stslatencyroute.js +0 -15
- package/dist/route/stslatencyroute.js.map +0 -1
- package/dist/route/stsrouterbase.js +0 -21
- package/dist/route/stsrouterbase.js.map +0 -1
- package/dist/stsexpressserver.js +0 -115
- package/dist/stsexpressserver.js.map +0 -1
- package/dist/validation/errors.js +0 -10
- package/dist/validation/errors.js.map +0 -1
- package/dist/vitesttesting/appConfig.js +0 -93
- package/dist/vitesttesting/appConfig.js.map +0 -1
- package/dist/vitesttesting/appSingleWSS.js +0 -122
- package/dist/vitesttesting/appSingleWSS.js.map +0 -1
- package/dist/vitesttesting/server.js +0 -15
- package/dist/vitesttesting/server.js.map +0 -1
- package/dist/vitesttesting/singleservertest.test.js +0 -286
- package/dist/vitesttesting/singleservertest.test.js.map +0 -1
- package/dist/vitesttesting/wsevents.js +0 -3
- 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:
|
|
20
|
-
cache: '
|
|
21
|
-
|
|
22
|
-
- run:
|
|
23
|
-
- run:
|
|
24
|
-
- run:
|
|
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:
|
|
34
|
-
cache: '
|
|
35
|
+
node-version: 23
|
|
36
|
+
cache: 'yarn'
|
|
37
|
+
#cache: 'npm'
|
|
35
38
|
registry-url: https://registry.npmjs.org/
|
|
36
|
-
- run:
|
|
37
|
-
- run:
|
|
38
|
-
- run:
|
|
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,22 +1,28 @@
|
|
|
1
1
|
#!/bin/sh
|
|
2
2
|
rm -rf dist
|
|
3
3
|
rm -rf types
|
|
4
|
-
npm i --verbose
|
|
5
|
-
|
|
4
|
+
#npm i --verbose
|
|
5
|
+
yarn install
|
|
6
|
+
#npm run build
|
|
7
|
+
yarn build
|
|
6
8
|
RESULT=$?
|
|
7
9
|
if [ $RESULT -eq 0 ]; then
|
|
8
10
|
echo success build
|
|
9
|
-
npm run lint
|
|
11
|
+
#npm run lint
|
|
12
|
+
yarn lint
|
|
10
13
|
RESULT=$?
|
|
11
14
|
if [ $RESULT -eq 0 ]; then
|
|
12
15
|
echo success lint
|
|
13
|
-
|
|
16
|
+
yarn test
|
|
17
|
+
#npm run test
|
|
14
18
|
RESULT=$?
|
|
15
19
|
if [ $RESULT -eq 0 ]; then
|
|
16
20
|
echo success test
|
|
17
21
|
git commit -a -m "changed"
|
|
18
|
-
|
|
19
|
-
npm
|
|
22
|
+
yarn version --patch
|
|
23
|
+
#npm version patch
|
|
24
|
+
yarn install
|
|
25
|
+
#npm i --verbose
|
|
20
26
|
git commit -a -m "changed"
|
|
21
27
|
git push
|
|
22
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.
|
|
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
|
-
"@
|
|
29
|
-
"@
|
|
30
|
-
"@eslint/eslintrc": "^3.1.0",
|
|
31
|
-
"@eslint/js": "^9.14.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.
|
|
38
|
-
"@typescript-eslint/parser": "^8.
|
|
39
|
-
"eslint": "^9.
|
|
35
|
+
"@typescript-eslint/eslint-plugin": "^8.15.0",
|
|
36
|
+
"@typescript-eslint/parser": "^8.15.0",
|
|
37
|
+
"eslint": "^9.15.0",
|
|
40
38
|
"globals": "^15.12.0",
|
|
41
|
-
"jest": "^29.7.0",
|
|
42
39
|
"testcontainers": "^10.14.0",
|
|
43
40
|
"typescript": "^5.6.3",
|
|
44
41
|
"vite": "^5.4.11",
|
|
45
42
|
"vitest": "^2.1.5"
|
|
46
43
|
},
|
|
47
44
|
"dependencies": {
|
|
48
|
-
"@nsshunt/stsconfig": "^1.
|
|
49
|
-
"@nsshunt/stsdatamanagement": "^1.18.
|
|
50
|
-
"@nsshunt/stsobservability": "^1.0.
|
|
51
|
-
"@nsshunt/stssocketioutils": "^1.
|
|
52
|
-
"@nsshunt/stsutils": "^1.
|
|
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",
|
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
package/dist/commonTypes.js
DELETED
|
@@ -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
|
package/dist/commonTypes.js.map
DELETED
|
@@ -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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"}
|