nodecommons-esm-socket-io-inter-system 0.0.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/apis/spawn.api.d.mts +7 -0
- package/dist/apis/spawn.api.mjs +21 -0
- package/dist/apis/spawn.api.mjs.map +1 -0
- package/dist/apps/process-exec.app.d.mts +13 -0
- package/dist/apps/process-exec.app.mjs +38 -0
- package/dist/apps/process-exec.app.mjs.map +1 -0
- package/dist/apps/spawn.app.d.mts +12 -0
- package/dist/apps/spawn.app.mjs +32 -0
- package/dist/apps/spawn.app.mjs.map +1 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.mjs +7 -0
- package/dist/index.mjs.map +1 -0
- package/dist/servers/socket-io.server.d.mts +9 -0
- package/dist/servers/socket-io.server.mjs +43 -0
- package/dist/servers/socket-io.server.mjs.map +1 -0
- package/dist/services/socket-io-client.service.d.mts +19 -0
- package/dist/services/socket-io-client.service.mjs +66 -0
- package/dist/services/socket-io-client.service.mjs.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as express from 'express';
|
|
2
|
+
import { TPropertyObject } from 'tscommons-esm-core';
|
|
3
|
+
import { ICommonsRequestWithStrictParams } from 'nodecommons-esm-express';
|
|
4
|
+
import { CommonsRestKeyApi, CommonsRestServer } from 'nodecommons-esm-rest';
|
|
5
|
+
export declare class CommonsInterSystemSpawnApi extends CommonsRestKeyApi<ICommonsRequestWithStrictParams, express.Response> {
|
|
6
|
+
constructor(restServer: CommonsRestServer<ICommonsRequestWithStrictParams, express.Response>, path: string, key: string, spawn: (command: string, socketIoId: string, params: TPropertyObject<unknown>, body: TPropertyObject<unknown>) => Promise<string>);
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { commonsBase62HasPropertyId } from 'tscommons-esm-core';
|
|
2
|
+
import { commonsLogDebug } from 'nodecommons-esm-log';
|
|
3
|
+
import { commonsRestApiBadRequest, CommonsRestKeyApi } from 'nodecommons-esm-rest';
|
|
4
|
+
export class CommonsInterSystemSpawnApi extends CommonsRestKeyApi {
|
|
5
|
+
constructor(restServer, path, key, spawn) {
|
|
6
|
+
super(restServer, key);
|
|
7
|
+
super.postHandler(`${path}spawn/:command`, async (req, _res) => {
|
|
8
|
+
commonsLogDebug(`API call to POST ${path}generate/${req.params.model}`);
|
|
9
|
+
if (!commonsBase62HasPropertyId(req.body, 'socketIoId'))
|
|
10
|
+
return commonsRestApiBadRequest('No socket.io ID supplied in body');
|
|
11
|
+
const socketIoId = req.body.socketIoId;
|
|
12
|
+
const params = { ...req.strictParams };
|
|
13
|
+
delete params['command'];
|
|
14
|
+
const body = { ...req.body };
|
|
15
|
+
delete body['socketIoId'];
|
|
16
|
+
const processId = await spawn(req.strictParams.command, socketIoId, params, body);
|
|
17
|
+
return processId;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=spawn.api.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn.api.mjs","sourceRoot":"","sources":["../../src/apis/spawn.api.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAmB,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAqB,MAAM,sBAAsB,CAAC;AAEtG,MAAM,OAAO,0BAA2B,SAAQ,iBAAoE;IACnH,YACE,UAAgF,EAChF,IAAY,EACZ,GAAW,EACX,KAKoB;QAErB,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAEvB,KAAK,CAAC,WAAW,CACf,GAAG,IAAI,gBAAgB,EACvB,KAAK,EAAE,GAAoC,EAAE,IAAsB,EAAmB,EAAE;YACvF,eAAe,CAAC,oBAAoB,IAAI,YAAY,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAExE,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC;gBAAE,OAAO,wBAAwB,CAAC,kCAAkC,CAAC,CAAC;YAC7H,MAAM,UAAU,GAAW,GAAG,CAAC,IAAI,CAAC,UAAoB,CAAC;YAEzD,MAAM,MAAM,GAA6B,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;YACjE,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;YAEzB,MAAM,IAAI,GAA6B,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC;YAE1B,MAAM,SAAS,GAAW,MAAM,KAAK,CACnC,GAAG,CAAC,YAAY,CAAC,OAAiB,EAClC,UAAU,EACV,MAAM,EACN,IAAI,CACL,CAAC;YAEF,OAAO,SAAS,CAAC;QAClB,CAAC,CACF,CAAC;IACH,CAAC;CACD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TPropertyObject } from 'tscommons-esm-core';
|
|
2
|
+
import { CommonsInterSystemSocketIoServer } from '../servers/socket-io.server.mjs';
|
|
3
|
+
import { CommonsInterSystemSpawnApp } from './spawn.app.mjs';
|
|
4
|
+
export declare abstract class CommonsInterSystemProcessExecApp extends CommonsInterSystemSpawnApp {
|
|
5
|
+
protected abstract process(command: string, processId: string, body: TPropertyObject<unknown>): Promise<{
|
|
6
|
+
command: string;
|
|
7
|
+
params: string[];
|
|
8
|
+
timeout: number;
|
|
9
|
+
cwd: string;
|
|
10
|
+
}>;
|
|
11
|
+
protected abstract cleanup(processId: string): void;
|
|
12
|
+
protected spawn(command: string, socketIoId: string, _params: TPropertyObject<unknown>, body: TPropertyObject<unknown>, socketIoServer: CommonsInterSystemSocketIoServer): Promise<string>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { commonsBase62GenerateRandomId } from 'tscommons-esm-core';
|
|
2
|
+
import { commonsAsyncTimeout } from 'tscommons-esm-async';
|
|
3
|
+
import { commonsExecAsObservables } from 'nodecommons-esm-process';
|
|
4
|
+
import { CommonsInterSystemSpawnApp } from './spawn.app.mjs';
|
|
5
|
+
export class CommonsInterSystemProcessExecApp extends CommonsInterSystemSpawnApp {
|
|
6
|
+
async spawn(command, socketIoId, _params, body, socketIoServer) {
|
|
7
|
+
const processId = commonsBase62GenerateRandomId();
|
|
8
|
+
const processed = await this.process(command, processId, body);
|
|
9
|
+
void (async () => {
|
|
10
|
+
// delay this so the processId has definitely been returned
|
|
11
|
+
await commonsAsyncTimeout(100);
|
|
12
|
+
const [promise, observables, _process] = commonsExecAsObservables(processed.command, processed.params, processed.timeout, processed.cwd);
|
|
13
|
+
const stdoutSubscription = observables.stdout
|
|
14
|
+
.subscribe((buffer) => {
|
|
15
|
+
void socketIoServer.stdout(socketIoId, processId, buffer.toString('utf8'));
|
|
16
|
+
});
|
|
17
|
+
const stderrSubscription = observables.stderr
|
|
18
|
+
.subscribe((buffer) => {
|
|
19
|
+
void socketIoServer.stderr(socketIoId, processId, buffer.toString('utf8'));
|
|
20
|
+
});
|
|
21
|
+
try {
|
|
22
|
+
const [exitCode, _signals] = await promise;
|
|
23
|
+
void socketIoServer.exit(socketIoId, processId, exitCode);
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
void socketIoServer.stderr(socketIoId, processId, `<exception>${e.message}</exception>`);
|
|
27
|
+
void socketIoServer.exit(socketIoId, processId, e.errno);
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
stdoutSubscription.unsubscribe();
|
|
31
|
+
stderrSubscription.unsubscribe();
|
|
32
|
+
this.cleanup(processId);
|
|
33
|
+
}
|
|
34
|
+
})();
|
|
35
|
+
return processId;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=process-exec.app.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-exec.app.mjs","sourceRoot":"","sources":["../../src/apps/process-exec.app.mts"],"names":[],"mappings":"AAIA,OAAO,EAAE,6BAA6B,EAAmB,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAc,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAI/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAE7D,MAAM,OAAgB,gCAAiC,SAAQ,0BAA0B;IAcrE,KAAK,CAAC,KAAK,CAC5B,OAAe,EACf,UAAkB,EAClB,OAAiC,EACjC,IAA8B,EAC9B,cAAgD;QAEjD,MAAM,SAAS,GAAW,6BAA6B,EAAE,CAAC;QAE1D,MAAM,SAAS,GAKX,MAAM,IAAI,CAAC,OAAO,CACpB,OAAO,EACP,SAAS,EACT,IAAI,CACL,CAAC;QAEF,KAAK,CAAC,KAAK,IAAmB,EAAE;YAC/B,2DAA2D;YAC3D,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAE/B,MAAM,CAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAE,GAAwG,wBAAwB,CACtK,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,GAAG,CACd,CAAC;YAEF,MAAM,kBAAkB,GAAiB,WAAW,CAAC,MAAM;iBACxD,SAAS,CAAC,CAAC,MAAc,EAAQ,EAAE;gBACnC,KAAK,cAAc,CAAC,MAAM,CACxB,UAAU,EACV,SAAS,EACT,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CACxB,CAAC;YACH,CAAC,CAAC,CAAC;YACL,MAAM,kBAAkB,GAAiB,WAAW,CAAC,MAAM;iBACxD,SAAS,CAAC,CAAC,MAAc,EAAQ,EAAE;gBACnC,KAAK,cAAc,CAAC,MAAM,CACxB,UAAU,EACV,SAAS,EACT,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CACxB,CAAC;YACH,CAAC,CAAC,CAAC;YAEL,IAAI,CAAC;gBACJ,MAAM,CAAE,QAAQ,EAAE,QAAQ,CAAE,GAA+B,MAAM,OAAO,CAAC;gBAEzE,KAAK,cAAc,CAAC,IAAI,CACtB,UAAU,EACV,SAAS,EACT,QAAQ,CACT,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,KAAK,cAAc,CAAC,MAAM,CACxB,UAAU,EACV,SAAS,EACT,cAAe,CAAW,CAAC,OAAO,cAAc,CACjD,CAAC;gBACF,KAAK,cAAc,CAAC,IAAI,CACtB,UAAU,EACV,SAAS,EACR,CAAqB,CAAC,KAAe,CACvC,CAAC;YACH,CAAC;oBAAS,CAAC;gBACV,kBAAkB,CAAC,WAAW,EAAE,CAAC;gBACjC,kBAAkB,CAAC,WAAW,EAAE,CAAC;gBAEjC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;QACF,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,SAAS,CAAC;IAClB,CAAC;CACD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TPropertyObject } from 'tscommons-esm-core';
|
|
2
|
+
import { CommonsStrictExpressServer, ICommonsExpressConfig } from 'nodecommons-esm-express';
|
|
3
|
+
import { CommonsSocketIoApp } from 'nodecommons-esm-app-socket-io';
|
|
4
|
+
import { CommonsInterSystemSocketIoServer } from '../servers/socket-io.server.mjs';
|
|
5
|
+
export declare abstract class CommonsInterSystemSpawnApp extends CommonsSocketIoApp<CommonsInterSystemSocketIoServer> {
|
|
6
|
+
private key;
|
|
7
|
+
constructor(name: string, key: string);
|
|
8
|
+
protected buildSocketIoServer(expressServer: CommonsStrictExpressServer, expressConfig: ICommonsExpressConfig): CommonsInterSystemSocketIoServer;
|
|
9
|
+
protected buildHttpServer(): CommonsStrictExpressServer;
|
|
10
|
+
protected init(): Promise<void>;
|
|
11
|
+
protected abstract spawn(command: string, socketIoId: string, params: TPropertyObject<unknown>, body: TPropertyObject<unknown>, socketIoServer: CommonsInterSystemSocketIoServer): Promise<string>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { commonsExpressBuildDefaultServer, isICommonsExpressConfig } from 'nodecommons-esm-express';
|
|
2
|
+
import { assertSet } from 'nodecommons-esm-app';
|
|
3
|
+
import { CommonsSocketIoApp } from 'nodecommons-esm-app-socket-io';
|
|
4
|
+
import { CommonsInterSystemSocketIoServer } from '../servers/socket-io.server.mjs';
|
|
5
|
+
import { CommonsInterSystemSpawnApi } from '../apis/spawn.api.mjs';
|
|
6
|
+
export class CommonsInterSystemSpawnApp extends CommonsSocketIoApp {
|
|
7
|
+
key;
|
|
8
|
+
constructor(name, key) {
|
|
9
|
+
super(name);
|
|
10
|
+
this.key = key;
|
|
11
|
+
}
|
|
12
|
+
buildSocketIoServer(expressServer, expressConfig) {
|
|
13
|
+
return new CommonsInterSystemSocketIoServer(expressServer, expressConfig);
|
|
14
|
+
}
|
|
15
|
+
buildHttpServer() {
|
|
16
|
+
const expressConfig = this.getConfigArea('express');
|
|
17
|
+
if (!isICommonsExpressConfig(expressConfig))
|
|
18
|
+
throw new Error('Invalid express config');
|
|
19
|
+
return commonsExpressBuildDefaultServer(this.httpConfig.port, expressConfig.bodyParserLimit);
|
|
20
|
+
}
|
|
21
|
+
async init() {
|
|
22
|
+
this.install((restServer, path) => {
|
|
23
|
+
new CommonsInterSystemSpawnApi(restServer, path, this.key, (command, socketIoId, params, body) => {
|
|
24
|
+
const socketIoServer = this.socketIoServer;
|
|
25
|
+
assertSet(socketIoServer, 'socketIoServer');
|
|
26
|
+
return this.spawn(command, socketIoId, params, body, socketIoServer);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
await super.init();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=spawn.app.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn.app.mjs","sourceRoot":"","sources":["../../src/apps/spawn.app.mts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gCAAgC,EAAsF,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACxL,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,OAAgB,0BAA2B,SAAQ,kBAAoD;IAGlG;IAFV,YACE,IAAY,EACJ,GAAW;QAEpB,KAAK,CAAC,IAAI,CAAC,CAAC;QAFH,QAAG,GAAH,GAAG,CAAQ;IAGrB,CAAC;IAEkB,mBAAmB,CACpC,aAAyC,EACzC,aAAoC;QAErC,OAAO,IAAI,gCAAgC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAC3E,CAAC;IAEkB,eAAe;QACjC,MAAM,aAAa,GAAY,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAEvF,OAAO,gCAAgC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC9F,CAAC;IAEkB,KAAK,CAAC,IAAI;QAC5B,IAAI,CAAC,OAAO,CACV,CAAC,UAAgF,EAAE,IAAY,EAAQ,EAAE;YACxG,IAAI,0BAA0B,CAC5B,UAAU,EACV,IAAI,EACJ,IAAI,CAAC,GAAG,EACR,CACE,OAAe,EACf,UAAkB,EAClB,MAAgC,EAChC,IAA8B,EACb,EAAE;gBACpB,MAAM,cAAc,GAA+C,IAAI,CAAC,cAAc,CAAC;gBACvF,SAAS,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;gBAE5C,OAAO,IAAI,CAAC,KAAK,CACf,OAAO,EACP,UAAU,EACV,MAAM,EACN,IAAI,EACJ,cAAc,CACf,CAAC;YACH,CAAC,CACF,CAAC;QACH,CAAC,CACF,CAAC;QAEF,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;CASD"}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CommonsInterSystemSocketIoServer } from './servers/socket-io.server.mjs';
|
|
2
|
+
import { CommonsInterSystemSpawnApp } from './apps/spawn.app.mjs';
|
|
3
|
+
import { CommonsInterSystemProcessExecApp } from './apps/process-exec.app.mjs';
|
|
4
|
+
import { CommonsInterSystemSocketIoClientService } from './services/socket-io-client.service.mjs';
|
|
5
|
+
import { CommonsInterSystemSpawnApi } from './apis/spawn.api.mjs';
|
|
6
|
+
export { CommonsInterSystemSocketIoServer, CommonsInterSystemSpawnApp, CommonsInterSystemProcessExecApp, CommonsInterSystemSocketIoClientService, CommonsInterSystemSpawnApi };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CommonsInterSystemSocketIoServer } from './servers/socket-io.server.mjs';
|
|
2
|
+
import { CommonsInterSystemSpawnApp } from './apps/spawn.app.mjs';
|
|
3
|
+
import { CommonsInterSystemProcessExecApp } from './apps/process-exec.app.mjs';
|
|
4
|
+
import { CommonsInterSystemSocketIoClientService } from './services/socket-io-client.service.mjs';
|
|
5
|
+
import { CommonsInterSystemSpawnApi } from './apis/spawn.api.mjs';
|
|
6
|
+
export { CommonsInterSystemSocketIoServer, CommonsInterSystemSpawnApp, CommonsInterSystemProcessExecApp, CommonsInterSystemSocketIoClientService, CommonsInterSystemSpawnApi };
|
|
7
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,uCAAuC,EAAE,MAAM,yCAAyC,CAAC;AAClG,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACN,gCAAgC,EAChC,0BAA0B,EAC1B,gCAAgC,EAChC,uCAAuC,EACvC,0BAA0B,EAC1B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TEncoded } from 'tscommons-esm-core';
|
|
2
|
+
import { CommonsStrictExpressServer, ICommonsExpressConfig } from 'nodecommons-esm-express';
|
|
3
|
+
import { CommonsAppSocketIoServer } from 'nodecommons-esm-app-socket-io';
|
|
4
|
+
export declare class CommonsInterSystemSocketIoServer extends CommonsAppSocketIoServer {
|
|
5
|
+
constructor(expressServer: CommonsStrictExpressServer, expressConfig: ICommonsExpressConfig);
|
|
6
|
+
stdout(socketIoId: string, processId: string, data: TEncoded): Promise<boolean>;
|
|
7
|
+
stderr(socketIoId: string, processId: string, data: TEncoded): Promise<boolean>;
|
|
8
|
+
exit(socketIoId: string, processId: string, exitCode: number): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { CommonsAppSocketIoServer } from 'nodecommons-esm-app-socket-io';
|
|
2
|
+
// can be subclassed to implement other on calls if desired
|
|
3
|
+
export class CommonsInterSystemSocketIoServer extends CommonsAppSocketIoServer {
|
|
4
|
+
constructor(expressServer, expressConfig) {
|
|
5
|
+
super(expressServer, expressConfig, true);
|
|
6
|
+
// this.on(
|
|
7
|
+
// 'todo',
|
|
8
|
+
// (data?: TEncoded): void => {
|
|
9
|
+
// console.log(data);
|
|
10
|
+
// }
|
|
11
|
+
// );
|
|
12
|
+
}
|
|
13
|
+
async stdout(socketIoId, processId, data) {
|
|
14
|
+
const socket = this.getSocketById(socketIoId);
|
|
15
|
+
if (!socket)
|
|
16
|
+
return false;
|
|
17
|
+
await this.broadcast('stdout', {
|
|
18
|
+
processId: processId,
|
|
19
|
+
data: data
|
|
20
|
+
});
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
async stderr(socketIoId, processId, data) {
|
|
24
|
+
const socket = this.getSocketById(socketIoId);
|
|
25
|
+
if (!socket)
|
|
26
|
+
return false;
|
|
27
|
+
await this.broadcast('stderr', {
|
|
28
|
+
processId: processId,
|
|
29
|
+
data: data
|
|
30
|
+
});
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
async exit(socketIoId, processId, exitCode) {
|
|
34
|
+
const socket = this.getSocketById(socketIoId);
|
|
35
|
+
if (!socket)
|
|
36
|
+
return;
|
|
37
|
+
await this.broadcast('exit', {
|
|
38
|
+
processId: processId,
|
|
39
|
+
exitCode: exitCode
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=socket-io.server.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-io.server.mjs","sourceRoot":"","sources":["../../src/servers/socket-io.server.mts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,2DAA2D;AAC3D,MAAM,OAAO,gCAAiC,SAAQ,wBAAwB;IAC7E,YACE,aAAyC,EACzC,aAAoC;QAErC,KAAK,CACH,aAAa,EACb,aAAa,EACb,IAAI,CACL,CAAC;QAEF,WAAW;QACX,YAAY;QACZ,iCAAiC;QACjC,wBAAwB;QACxB,MAAM;QACN,KAAK;IACN,CAAC;IAEM,KAAK,CAAC,MAAM,CACjB,UAAkB,EAClB,SAAiB,EACjB,IAAc;QAEf,MAAM,MAAM,GAAqB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,MAAM,IAAI,CAAC,SAAS,CAClB,QAAQ,EACR;YACE,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,IAAI;SACX,CACF,CAAC;QAEF,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,MAAM,CACjB,UAAkB,EAClB,SAAiB,EACjB,IAAc;QAEf,MAAM,MAAM,GAAqB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,MAAM,IAAI,CAAC,SAAS,CAClB,QAAQ,EACR;YACE,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,IAAI;SACX,CACF,CAAC;QAEF,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,UAAkB,EAClB,SAAiB,EACjB,QAAgB;QAEjB,MAAM,MAAM,GAAqB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,IAAI,CAAC,SAAS,CAClB,MAAM,EACN;YACE,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,QAAQ;SACnB,CACF,CAAC;IACH,CAAC;CACD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Observable, Subject } from 'rxjs';
|
|
2
|
+
import { TEncoded } from 'tscommons-esm-core';
|
|
3
|
+
import { CommonsSocketIoClientService } from 'nodecommons-esm-socket-io';
|
|
4
|
+
type TProcess = {
|
|
5
|
+
stdout: Subject<TEncoded>;
|
|
6
|
+
stderr: Subject<TEncoded>;
|
|
7
|
+
exit: Subject<number>;
|
|
8
|
+
};
|
|
9
|
+
export declare class CommonsInterSystemSocketIoClientService extends CommonsSocketIoClientService {
|
|
10
|
+
private processes;
|
|
11
|
+
constructor(url: string);
|
|
12
|
+
assert(processId: string): TProcess;
|
|
13
|
+
stdout(processId: string): Observable<TEncoded>;
|
|
14
|
+
stderr(processId: string): Observable<TEncoded>;
|
|
15
|
+
exit(processId: string): Observable<number>;
|
|
16
|
+
exitAsPromise(processId: string): Promise<number>;
|
|
17
|
+
protected setupOns(): void;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
import { commonsTypeHasProperty, commonsTypeHasPropertyNumber, commonsTypeHasPropertyString } from 'tscommons-esm-core';
|
|
3
|
+
import { CommonsSocketIoClientService } from 'nodecommons-esm-socket-io';
|
|
4
|
+
export class CommonsInterSystemSocketIoClientService extends CommonsSocketIoClientService {
|
|
5
|
+
processes = new Map();
|
|
6
|
+
constructor(url) {
|
|
7
|
+
super(url, true);
|
|
8
|
+
}
|
|
9
|
+
assert(processId) {
|
|
10
|
+
if (!this.processes.has(processId)) {
|
|
11
|
+
this.processes.set(processId, {
|
|
12
|
+
stdout: new Subject(),
|
|
13
|
+
stderr: new Subject(),
|
|
14
|
+
exit: new Subject()
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return this.processes.get(processId);
|
|
18
|
+
}
|
|
19
|
+
stdout(processId) {
|
|
20
|
+
return this.assert(processId).stdout.asObservable();
|
|
21
|
+
}
|
|
22
|
+
stderr(processId) {
|
|
23
|
+
return this.assert(processId).stderr.asObservable();
|
|
24
|
+
}
|
|
25
|
+
exit(processId) {
|
|
26
|
+
return this.assert(processId).exit.asObservable();
|
|
27
|
+
}
|
|
28
|
+
exitAsPromise(processId) {
|
|
29
|
+
return new Promise((resolve, _reject) => {
|
|
30
|
+
this.exit(processId)
|
|
31
|
+
.subscribe((exitCode) => {
|
|
32
|
+
resolve(exitCode);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
setupOns() {
|
|
37
|
+
this.on('stdout', (data) => {
|
|
38
|
+
if (!commonsTypeHasPropertyString(data, 'processId'))
|
|
39
|
+
return;
|
|
40
|
+
const processId = data.processId;
|
|
41
|
+
if (!commonsTypeHasProperty(data, 'data'))
|
|
42
|
+
return;
|
|
43
|
+
const data2 = data.data;
|
|
44
|
+
this.assert(processId).stdout.next(data2);
|
|
45
|
+
});
|
|
46
|
+
this.on('stderr', (data) => {
|
|
47
|
+
if (!commonsTypeHasPropertyString(data, 'processId'))
|
|
48
|
+
return;
|
|
49
|
+
const processId = data.processId;
|
|
50
|
+
if (!commonsTypeHasProperty(data, 'data'))
|
|
51
|
+
return;
|
|
52
|
+
const data2 = data.data;
|
|
53
|
+
this.assert(processId).stderr.next(data2);
|
|
54
|
+
});
|
|
55
|
+
this.on('exit', (data) => {
|
|
56
|
+
if (!commonsTypeHasPropertyString(data, 'processId'))
|
|
57
|
+
return;
|
|
58
|
+
const processId = data.processId;
|
|
59
|
+
if (!commonsTypeHasPropertyNumber(data, 'exitCode'))
|
|
60
|
+
return;
|
|
61
|
+
const exitCode = data.exitCode;
|
|
62
|
+
this.assert(processId).exit.next(exitCode);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=socket-io-client.service.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-io-client.service.mjs","sourceRoot":"","sources":["../../src/services/socket-io-client.service.mts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nodecommons-esm-socket-io-inter-system",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"tsc": "./node_modules/typescript/bin/tsc",
|
|
7
|
+
"preprepare": "rm -rf ./dist; php ~/Dev/etim.php src/ && npm run tsc",
|
|
8
|
+
"publish-major": "rm -rf dist; npm run tsc && npx eslint . && npm run preprepare && npm version major && npm install && npm publish && git add . && git commit -m 'publish'",
|
|
9
|
+
"publish-minor": "rm -rf dist; npm run tsc && npx eslint . && npm run preprepare && npm version minor && npm install && npm publish && git add . && git commit -m 'publish'",
|
|
10
|
+
"publish-patch": "rm -rf dist; npm run tsc && npx eslint . && npm run preprepare && npm version patch && npm install && npm publish && git add . && git commit -m 'publish'"
|
|
11
|
+
},
|
|
12
|
+
"main": "dist/index.mjs",
|
|
13
|
+
"types": "dist/index.d.mjs",
|
|
14
|
+
"type": "module",
|
|
15
|
+
"author": "Pete Morris",
|
|
16
|
+
"license": "ISC",
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@stylistic/eslint-plugin-ts": "^2.11.0",
|
|
19
|
+
"@types/node": "^22.10.0",
|
|
20
|
+
"eslint-plugin-import": "^2.31.0",
|
|
21
|
+
"eslint-plugin-prefer-arrow-functions": "^3.4.1",
|
|
22
|
+
"typescript": "^5.7.2",
|
|
23
|
+
"typescript-eslint": "^8.16.0"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist/**/*"
|
|
27
|
+
],
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"express": "^5.1.0",
|
|
30
|
+
"nodecommons-esm-app": "^0.0.10",
|
|
31
|
+
"nodecommons-esm-app-socket-io": "^0.0.7",
|
|
32
|
+
"nodecommons-esm-express": "^0.0.10",
|
|
33
|
+
"nodecommons-esm-log": "^0.0.7",
|
|
34
|
+
"nodecommons-esm-process": "^0.1.0",
|
|
35
|
+
"nodecommons-esm-rest": "^0.0.9",
|
|
36
|
+
"nodecommons-esm-socket-io": "^0.0.6",
|
|
37
|
+
"rxjs": "^7.8.2",
|
|
38
|
+
"socket.io": "^4.8.1",
|
|
39
|
+
"tscommons-esm-async": "^0.0.9",
|
|
40
|
+
"tscommons-esm-core": "^0.0.5"
|
|
41
|
+
}
|
|
42
|
+
}
|