@nsshunt/stsappframework 3.2.1 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonTypes.js +69 -0
- package/dist/commonTypes.js.map +1 -0
- package/dist/controller/stscontrollerbase.js +14 -0
- package/dist/controller/stscontrollerbase.js.map +1 -0
- package/dist/controller/stslatencycontroller.js +28 -0
- package/dist/controller/stslatencycontroller.js.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/stsTransportLoggerWinston.js +22 -0
- package/dist/logger/stsTransportLoggerWinston.js.map +1 -0
- package/dist/logger/stsTransportWinston.js +43 -0
- package/dist/logger/stsTransportWinston.js.map +1 -0
- package/{src/middleware/serverNetworkMiddleware.ts → dist/middleware/serverNetworkMiddleware.js} +80 -124
- package/dist/middleware/serverNetworkMiddleware.js.map +1 -0
- package/dist/network.js +38 -0
- package/dist/network.js.map +1 -0
- package/dist/process/masterprocessbase.js +558 -0
- package/dist/process/masterprocessbase.js.map +1 -0
- package/{src/process/processbase.ts → dist/process/processbase.js} +150 -222
- package/dist/process/processbase.js.map +1 -0
- package/{src/process/serverprocessbase.ts → dist/process/serverprocessbase.js} +158 -212
- package/dist/process/serverprocessbase.js.map +1 -0
- package/dist/process/singleprocessbase.js +55 -0
- package/dist/process/singleprocessbase.js.map +1 -0
- package/{src/process/workerprocessbase.ts → dist/process/workerprocessbase.js} +93 -107
- package/dist/process/workerprocessbase.js.map +1 -0
- package/{src/publishertransports/publishTransportUtils.ts → dist/publishertransports/publishTransportUtils.js} +18 -24
- package/dist/publishertransports/publishTransportUtils.js.map +1 -0
- package/dist/route/stslatencyroute.js +15 -0
- package/dist/route/stslatencyroute.js.map +1 -0
- package/dist/route/stsrouterbase.js +21 -0
- package/dist/route/stsrouterbase.js.map +1 -0
- package/dist/stsexpressserver.js +115 -0
- package/dist/stsexpressserver.js.map +1 -0
- package/dist/validation/errors.js +10 -0
- package/dist/validation/errors.js.map +1 -0
- package/dist/vitesttesting/appConfig.js +93 -0
- package/dist/vitesttesting/appConfig.js.map +1 -0
- package/dist/vitesttesting/appSingleWSS.js +122 -0
- package/dist/vitesttesting/appSingleWSS.js.map +1 -0
- package/dist/vitesttesting/server.js +15 -0
- package/dist/vitesttesting/server.js.map +1 -0
- package/dist/vitesttesting/singleservertest.test.js +286 -0
- package/dist/vitesttesting/singleservertest.test.js.map +1 -0
- package/dist/vitesttesting/wsevents.js +3 -0
- package/dist/vitesttesting/wsevents.js.map +1 -0
- package/package.json +7 -3
- package/.github/dependabot.yml +0 -13
- package/.github/workflows/npm-publish.yml +0 -47
- package/.gitignore copy +0 -108
- package/build.sh +0 -37
- package/esbuild.config.js +0 -81
- package/eslint.config.mjs +0 -55
- package/jest/setEnvVars.js +0 -19
- package/keys/server.cert +0 -21
- package/keys/server.key +0 -28
- package/local-redis-stack.conf +0 -2
- package/run-grpc-client.sh +0 -2
- package/run-grpc-server.sh +0 -2
- package/run1.sh +0 -20
- package/run2.sh +0 -20
- package/run3.sh +0 -20
- package/runc1.sh +0 -19
- package/runc2.sh +0 -19
- package/runkafka.sh +0 -19
- package/runkafkaconsume01.sh +0 -21
- package/runkafkaconsume02.sh +0 -21
- package/runpromise.sh +0 -5
- package/runredis.sh +0 -5
- package/runredis1.sh +0 -4
- package/runredis2.sh +0 -24
- package/runredis3.sh +0 -4
- package/runtest1.sh +0 -19
- package/runtest2.sh +0 -19
- package/runtest_ipc_legacy.sh +0 -19
- package/runtest_ipcex.sh +0 -19
- package/runtest_redis.sh +0 -19
- package/runtest_ww.sh +0 -19
- package/src/commonTypes.ts +0 -374
- package/src/controller/stscontrollerbase.ts +0 -14
- package/src/controller/stslatencycontroller.ts +0 -26
- package/src/index.ts +0 -13
- package/src/logger/stsTransportLoggerWinston.ts +0 -24
- package/src/logger/stsTransportWinston.ts +0 -48
- package/src/network.ts +0 -36
- package/src/process/masterprocessbase.ts +0 -674
- package/src/process/singleprocessbase.ts +0 -63
- package/src/route/stslatencyroute.ts +0 -15
- package/src/route/stsrouterbase.ts +0 -21
- package/src/stsexpressserver.ts +0 -137
- package/src/validation/errors.ts +0 -6
- package/src/vitesttesting/appConfig.ts +0 -111
- package/src/vitesttesting/appSingleWSS.ts +0 -142
- package/src/vitesttesting/server.ts +0 -17
- package/src/vitesttesting/singleservertest.test.ts +0 -352
- package/src/vitesttesting/wsevents.ts +0 -44
- package/tsconfig.json +0 -42
- 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"}
|
package/{src/middleware/serverNetworkMiddleware.ts → dist/middleware/serverNetworkMiddleware.js}
RENAMED
|
@@ -1,120 +1,84 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
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 (
|
|
96
|
-
contentLength =
|
|
97
|
-
}
|
|
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
|
-
}
|
|
104
|
-
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
this.#LogErrorMessage(chalk_1.default.red(`ServerNetworkMiddleware:#GetRequestContentSize(): Error: [${error}]`));
|
|
105
72
|
return 0;
|
|
106
73
|
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
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 =
|
|
79
|
+
this.#id = (0, uuid_1.v4)();
|
|
116
80
|
workingSocketRecord = {
|
|
117
|
-
id: `${
|
|
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(
|
|
95
|
+
const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
|
|
135
96
|
if (socketRecord) {
|
|
136
|
-
this.#LogSillyMessage(
|
|
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
|
-
}
|
|
139
|
-
|
|
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(
|
|
105
|
+
const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
|
|
145
106
|
if (socketRecord) {
|
|
146
|
-
this.#LogSillyMessage(
|
|
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(
|
|
150
|
-
}
|
|
151
|
-
|
|
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(
|
|
117
|
+
const socketRecord = this.GetSocketRecord(workingSocketRecord.socket);
|
|
157
118
|
if (socketRecord) {
|
|
158
|
-
this.#LogSillyMessage(
|
|
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
|
-
}
|
|
161
|
-
|
|
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
|
-
|
|
129
|
+
(0, on_headers_1.default)(res, () => {
|
|
169
130
|
let contentLength = 0;
|
|
170
|
-
if (
|
|
171
|
-
contentLength =
|
|
172
|
-
}
|
|
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')
|
|
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(
|
|
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
|
-
}
|
|
196
|
-
|
|
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(
|
|
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
|
-
}
|
|
206
|
-
|
|
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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"}
|
package/dist/network.js
ADDED
|
@@ -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"}
|