@litert/televoke 1.0.3 → 1.1.0
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/CHANGES.md +8 -0
- package/lib/client/Client.decl.d.ts +0 -1
- package/lib/client/Client.decl.d.ts.map +1 -1
- package/lib/client/JsonApiClient.impl.js +1 -2
- package/lib/client/JsonApiClient.impl.js.map +1 -1
- package/lib/server/LegacyServerChannel.impl.d.ts +2 -2
- package/lib/server/LegacyServerChannel.impl.d.ts.map +1 -1
- package/lib/server/LegacyServerChannel.impl.js +2 -0
- package/lib/server/LegacyServerChannel.impl.js.map +1 -1
- package/lib/server/Server.decl.d.ts +0 -1
- package/lib/server/Server.decl.d.ts.map +1 -1
- package/lib/server/Server.impl.d.ts +0 -1
- package/lib/server/Server.impl.d.ts.map +1 -1
- package/lib/server/SimpleJsonApiRouter.d.ts +0 -2
- package/lib/server/SimpleJsonApiRouter.d.ts.map +1 -1
- package/lib/shared/BinaryStream.d.ts +0 -2
- package/lib/shared/BinaryStream.d.ts.map +1 -1
- package/lib/shared/BinaryStreamManager.js +4 -4
- package/lib/shared/BinaryStreamManager.js.map +1 -1
- package/lib/shared/Channel.impl.d.ts +2 -3
- package/lib/shared/Channel.impl.d.ts.map +1 -1
- package/lib/shared/Channel.impl.js +2 -0
- package/lib/shared/Channel.impl.js.map +1 -1
- package/lib/shared/Encodings/v2/DecoderV2.d.ts +0 -1
- package/lib/shared/Encodings/v2/DecoderV2.d.ts.map +1 -1
- package/lib/shared/Encodings/v2/DecoderV2.js +14 -3
- package/lib/shared/Encodings/v2/DecoderV2.js.map +1 -1
- package/lib/shared/Encodings/v2/EncoderV2.d.ts +0 -1
- package/lib/shared/Encodings/v2/EncoderV2.d.ts.map +1 -1
- package/lib/shared/Encodings/v2/Encoding.v2.decl.d.ts +0 -1
- package/lib/shared/Encodings/v2/Encoding.v2.decl.d.ts.map +1 -1
- package/lib/shared/Errors.d.ts +4 -4
- package/lib/shared/Errors.d.ts.map +1 -1
- package/lib/shared/Errors.js +3 -3
- package/lib/shared/Errors.js.map +1 -1
- package/lib/shared/Shared.decl.d.ts +8 -2
- package/lib/shared/Shared.decl.d.ts.map +1 -1
- package/lib/shared/Utils.d.ts +0 -1
- package/lib/shared/Utils.d.ts.map +1 -1
- package/lib/shared/Utils.js +2 -3
- package/lib/shared/Utils.js.map +1 -1
- package/lib/transporters/Transporter.decl.d.ts +2 -3
- package/lib/transporters/Transporter.decl.d.ts.map +1 -1
- package/lib/transporters/http-listener/AbstractHttpListener.d.ts +0 -2
- package/lib/transporters/http-listener/AbstractHttpListener.d.ts.map +1 -1
- package/lib/transporters/http-listener/Http.Decl.d.ts +0 -4
- package/lib/transporters/http-listener/Http.Decl.d.ts.map +1 -1
- package/lib/transporters/http-listener/HttpListener.js +1 -2
- package/lib/transporters/http-listener/HttpListener.js.map +1 -1
- package/lib/transporters/http-listener/HttpUnixSocketListener.js +1 -2
- package/lib/transporters/http-listener/HttpUnixSocketListener.js.map +1 -1
- package/lib/transporters/http-listener/HttpsListener.js +1 -2
- package/lib/transporters/http-listener/HttpsListener.js.map +1 -1
- package/lib/transporters/legacy-http/LegacyHttp.Client.Native.d.ts +0 -1
- package/lib/transporters/legacy-http/LegacyHttp.Client.Native.d.ts.map +1 -1
- package/lib/transporters/legacy-http/LegacyHttp.Client.Native.js +1 -2
- package/lib/transporters/legacy-http/LegacyHttp.Client.Native.js.map +1 -1
- package/lib/transporters/legacy-http/LegacyHttp.Server.d.ts.map +1 -1
- package/lib/transporters/legacy-http/LegacyHttp.Server.js +8 -2
- package/lib/transporters/legacy-http/LegacyHttp.Server.js.map +1 -1
- package/lib/transporters/legacy-http/LegacyHttp.Transporter.d.ts +0 -1
- package/lib/transporters/legacy-http/LegacyHttp.Transporter.d.ts.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tcp.Client.js +1 -2
- package/lib/transporters/lwdfx/LwDFX.Tcp.Client.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tcp.Server.js +1 -2
- package/lib/transporters/lwdfx/LwDFX.Tcp.Server.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tls.Client.js +1 -2
- package/lib/transporters/lwdfx/LwDFX.Tls.Client.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tls.Server.js +1 -2
- package/lib/transporters/lwdfx/LwDFX.Tls.Server.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.Transporter.d.ts +2 -4
- package/lib/transporters/lwdfx/LwDFX.Transporter.d.ts.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.Transporter.js +1 -4
- package/lib/transporters/lwdfx/LwDFX.Transporter.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.UnixSocket.Client.js +1 -2
- package/lib/transporters/lwdfx/LwDFX.UnixSocket.Client.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.UnixSocket.Server.js +1 -2
- package/lib/transporters/lwdfx/LwDFX.UnixSocket.Server.js.map +1 -1
- package/lib/transporters/memory/Memory.Impl.d.ts +0 -1
- package/lib/transporters/memory/Memory.Impl.d.ts.map +1 -1
- package/lib/transporters/memory/Memory.Impl.js +3 -10
- package/lib/transporters/memory/Memory.Impl.js.map +1 -1
- package/lib/transporters/websocket/WebSocket.Client.js +2 -3
- package/lib/transporters/websocket/WebSocket.Client.js.map +1 -1
- package/lib/transporters/websocket/WebSocket.Server.js +1 -2
- package/lib/transporters/websocket/WebSocket.Server.js.map +1 -1
- package/lib/transporters/websocket/WebSocket.Transporter.d.ts +2 -4
- package/lib/transporters/websocket/WebSocket.Transporter.d.ts.map +1 -1
- package/lib/transporters/websocket/WebSocket.Transporter.js +1 -9
- package/lib/transporters/websocket/WebSocket.Transporter.js.map +1 -1
- package/lib/transporters/worker-thread/WorkerThread.Client.d.ts +30 -0
- package/lib/transporters/worker-thread/WorkerThread.Client.d.ts.map +1 -0
- package/lib/transporters/worker-thread/WorkerThread.Client.js +70 -0
- package/lib/transporters/worker-thread/WorkerThread.Client.js.map +1 -0
- package/lib/transporters/worker-thread/WorkerThread.Constants.d.ts +18 -0
- package/lib/transporters/worker-thread/WorkerThread.Constants.d.ts.map +1 -0
- package/lib/transporters/worker-thread/WorkerThread.Constants.js +21 -0
- package/lib/transporters/worker-thread/WorkerThread.Constants.js.map +1 -0
- package/lib/transporters/worker-thread/WorkerThread.Errors.d.ts +49 -0
- package/lib/transporters/worker-thread/WorkerThread.Errors.d.ts.map +1 -0
- package/lib/transporters/worker-thread/WorkerThread.Errors.js +38 -0
- package/lib/transporters/worker-thread/WorkerThread.Errors.js.map +1 -0
- package/lib/transporters/worker-thread/WorkerThread.Server.d.ts +42 -0
- package/lib/transporters/worker-thread/WorkerThread.Server.d.ts.map +1 -0
- package/lib/transporters/worker-thread/WorkerThread.Server.js +94 -0
- package/lib/transporters/worker-thread/WorkerThread.Server.js.map +1 -0
- package/lib/transporters/worker-thread/WorkerThread.Transporter.d.ts +49 -0
- package/lib/transporters/worker-thread/WorkerThread.Transporter.d.ts.map +1 -0
- package/lib/transporters/worker-thread/WorkerThread.Transporter.js +140 -0
- package/lib/transporters/worker-thread/WorkerThread.Transporter.js.map +1 -0
- package/lib/transporters/worker-thread/index.d.ts +19 -0
- package/lib/transporters/worker-thread/index.d.ts.map +1 -0
- package/lib/transporters/worker-thread/index.js +35 -0
- package/lib/transporters/worker-thread/index.js.map +1 -0
- package/package.json +1 -1
- package/src/lib/server/LegacyServerChannel.impl.ts +4 -0
- package/src/lib/shared/Channel.impl.ts +4 -0
- package/src/lib/shared/Encodings/v2/DecoderV2.ts +21 -3
- package/src/lib/shared/Errors.ts +3 -2
- package/src/lib/shared/Shared.decl.ts +10 -0
- package/src/lib/transporters/Transporter.decl.ts +2 -2
- package/src/lib/transporters/legacy-http/LegacyHttp.Server.ts +13 -0
- package/src/lib/transporters/legacy-http/README.md +13 -0
- package/src/lib/transporters/lwdfx/LwDFX.Transporter.ts +2 -7
- package/src/lib/transporters/lwdfx/README.md +12 -0
- package/src/lib/transporters/memory/Memory.Impl.ts +2 -12
- package/src/lib/transporters/memory/README.md +7 -0
- package/src/lib/transporters/websocket/README.md +14 -0
- package/src/lib/transporters/websocket/WebSocket.Transporter.ts +2 -14
- package/src/lib/transporters/worker-thread/README.md +18 -0
- package/src/lib/transporters/worker-thread/WorkerThread.Client.ts +88 -0
- package/src/lib/transporters/worker-thread/WorkerThread.Constants.ts +19 -0
- package/src/lib/transporters/worker-thread/WorkerThread.Errors.ts +53 -0
- package/src/lib/transporters/worker-thread/WorkerThread.Server.ts +136 -0
- package/src/lib/transporters/worker-thread/WorkerThread.Transporter.ts +204 -0
- package/src/lib/transporters/worker-thread/index.ts +19 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Angus.Fenying <fenying@litert.org>
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import * as NodeWorker from 'node:worker_threads';
|
|
17
|
+
import * as Shared from '../../shared';
|
|
18
|
+
import type * as dT from '../Transporter.decl';
|
|
19
|
+
import { EventEmitter } from 'node:events';
|
|
20
|
+
declare abstract class AbstractThreadTransporter extends EventEmitter {
|
|
21
|
+
readonly protocol: string;
|
|
22
|
+
constructor(protocol: string);
|
|
23
|
+
getPropertyNames(): string[];
|
|
24
|
+
getAllProperties(): Record<string, unknown>;
|
|
25
|
+
getProperty(name: string): unknown;
|
|
26
|
+
abstract destroy(): void;
|
|
27
|
+
end(): void;
|
|
28
|
+
protected _write(worker: NodeWorker.MessagePort | NodeWorker.Worker, frame: Array<string | Buffer>): void;
|
|
29
|
+
protected _onMessage: (frame: unknown) => void;
|
|
30
|
+
}
|
|
31
|
+
export declare class MainThreadTransporter extends AbstractThreadTransporter implements dT.ITransporter, Shared.ITransporter {
|
|
32
|
+
protected readonly _worker: NodeWorker.Worker;
|
|
33
|
+
private _closed;
|
|
34
|
+
constructor(protocol: string, _worker: NodeWorker.Worker);
|
|
35
|
+
private readonly _onError;
|
|
36
|
+
private readonly _onExit;
|
|
37
|
+
destroy(): void;
|
|
38
|
+
get writable(): boolean;
|
|
39
|
+
write(frame: Array<string | Buffer>): void;
|
|
40
|
+
}
|
|
41
|
+
export declare class WorkerThreadTransporter extends AbstractThreadTransporter implements dT.ITransporter, Shared.ITransporter {
|
|
42
|
+
private _hold;
|
|
43
|
+
constructor(protocol: string);
|
|
44
|
+
destroy(): void;
|
|
45
|
+
get writable(): boolean;
|
|
46
|
+
write(frame: Array<string | Buffer>): void;
|
|
47
|
+
}
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=WorkerThread.Transporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerThread.Transporter.d.ts","sourceRoot":"","sources":["../../../src/lib/transporters/worker-thread/WorkerThread.Transporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,uBAAe,yBAA0B,SAAQ,YAAY;aAGrC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;IAM7B,gBAAgB,IAAI,MAAM,EAAE;IAK5B,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAW3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;aAkBzB,OAAO,IAAI,IAAI;IAExB,GAAG,IAAI,IAAI;IAKlB,SAAS,CAAC,MAAM,CACZ,MAAM,EAAE,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM,EAClD,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAC9B,IAAI;IAsBP,SAAS,CAAC,UAAU,UAAW,OAAO,KAAG,IAAI,CAQ3C;CACL;AAED,qBAAa,qBAAsB,SAAQ,yBAA0B,YAAW,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY;IAM5G,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM;IAJjD,OAAO,CAAC,OAAO,CAAkB;gBAG7B,QAAQ,EAAE,MAAM,EACG,OAAO,EAAE,UAAU,CAAC,MAAM;IAWjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoD;IAE7E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAEpD,OAAO,IAAI,IAAI;IAWtB,IAAW,QAAQ,IAAI,OAAO,CAG7B;IAEM,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI;CASpD;AAED,qBAAa,uBAAwB,SAAQ,yBAA0B,YAAW,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY;IAElH,OAAO,CAAC,KAAK,CAAmE;gBAE7D,QAAQ,EAAE,MAAM;IAY5B,OAAO,IAAI,IAAI;IAatB,IAAW,QAAQ,IAAI,OAAO,CAG7B;IAEM,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI;CASpD"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright 2024 Angus.Fenying <fenying@litert.org>
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.WorkerThreadTransporter = exports.MainThreadTransporter = void 0;
|
|
19
|
+
const NodeWorker = require("node:worker_threads");
|
|
20
|
+
const Shared = require("../../shared");
|
|
21
|
+
const eWT = require("./WorkerThread.Errors");
|
|
22
|
+
const node_events_1 = require("node:events");
|
|
23
|
+
const PROPERTY_NAMES = ['remoteAddress', 'remotePort', 'localAddress', 'localPort', 'threadId'];
|
|
24
|
+
const MSG_PREFIX = 'televoke2://';
|
|
25
|
+
class AbstractThreadTransporter extends node_events_1.EventEmitter {
|
|
26
|
+
constructor(protocol) {
|
|
27
|
+
super();
|
|
28
|
+
this.protocol = protocol;
|
|
29
|
+
this._onMessage = (frame) => {
|
|
30
|
+
if (typeof frame !== 'string' || !frame.startsWith(MSG_PREFIX)) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
this.emit('frame', [Buffer.from(frame.slice(MSG_PREFIX.length), 'base64')]);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
getPropertyNames() {
|
|
37
|
+
return PROPERTY_NAMES;
|
|
38
|
+
}
|
|
39
|
+
getAllProperties() {
|
|
40
|
+
return {
|
|
41
|
+
'remoteAddress': '127.0.0.1',
|
|
42
|
+
'remotePort': 0,
|
|
43
|
+
'localAddress': '127.0.0.1',
|
|
44
|
+
'localPort': 0,
|
|
45
|
+
'threadId': NodeWorker.threadId,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
getProperty(name) {
|
|
49
|
+
switch (name) {
|
|
50
|
+
case 'localPort':
|
|
51
|
+
return 0;
|
|
52
|
+
case 'localAddress':
|
|
53
|
+
return '127.0.0.1';
|
|
54
|
+
case 'remotePort':
|
|
55
|
+
return 0;
|
|
56
|
+
case 'remoteAddress':
|
|
57
|
+
return '127.0.0.1';
|
|
58
|
+
case 'threadId':
|
|
59
|
+
return NodeWorker.threadId;
|
|
60
|
+
default:
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
end() {
|
|
65
|
+
this.destroy();
|
|
66
|
+
}
|
|
67
|
+
_write(worker, frame) {
|
|
68
|
+
for (let i = 0; i < frame.length; i++) {
|
|
69
|
+
const f = frame[i];
|
|
70
|
+
if (!(f instanceof Buffer)) {
|
|
71
|
+
frame[i] = Buffer.from(f);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
worker.postMessage(MSG_PREFIX + Buffer.concat(frame).toString('base64'));
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
throw new Shared.errors.network_error({ reason: 'conn_lost', cause: e });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
class MainThreadTransporter extends AbstractThreadTransporter {
|
|
83
|
+
constructor(protocol, _worker) {
|
|
84
|
+
super(protocol);
|
|
85
|
+
this._worker = _worker;
|
|
86
|
+
this._closed = false;
|
|
87
|
+
this._onError = (e) => { this.emit('error', e); };
|
|
88
|
+
this._onExit = () => { this.destroy(); };
|
|
89
|
+
this._worker
|
|
90
|
+
.on('message', this._onMessage)
|
|
91
|
+
.on('error', this._onError)
|
|
92
|
+
.on('exit', this._onExit);
|
|
93
|
+
}
|
|
94
|
+
destroy() {
|
|
95
|
+
this._closed = true;
|
|
96
|
+
this._worker.removeListener('message', this._onMessage);
|
|
97
|
+
this._worker.removeListener('error', this._onError);
|
|
98
|
+
this._worker.removeListener('exit', this._onExit);
|
|
99
|
+
this.emit('close');
|
|
100
|
+
}
|
|
101
|
+
get writable() {
|
|
102
|
+
return !this._closed;
|
|
103
|
+
}
|
|
104
|
+
write(frame) {
|
|
105
|
+
if (this._closed) {
|
|
106
|
+
throw new Shared.errors.network_error({ reason: 'conn_lost' });
|
|
107
|
+
}
|
|
108
|
+
this._write(this._worker, frame);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.MainThreadTransporter = MainThreadTransporter;
|
|
112
|
+
class WorkerThreadTransporter extends AbstractThreadTransporter {
|
|
113
|
+
constructor(protocol) {
|
|
114
|
+
super(protocol);
|
|
115
|
+
this._hold = setInterval(() => { return; }, 3600000);
|
|
116
|
+
if (NodeWorker.isMainThread) {
|
|
117
|
+
throw new eWT.E_WORKER_THREAD_ONLY();
|
|
118
|
+
}
|
|
119
|
+
NodeWorker.parentPort.on('message', this._onMessage);
|
|
120
|
+
}
|
|
121
|
+
destroy() {
|
|
122
|
+
if (this._hold) {
|
|
123
|
+
clearInterval(this._hold);
|
|
124
|
+
this._hold = null;
|
|
125
|
+
NodeWorker.parentPort.removeListener('message', this._onMessage);
|
|
126
|
+
this.emit('close');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
get writable() {
|
|
130
|
+
return !!this._hold;
|
|
131
|
+
}
|
|
132
|
+
write(frame) {
|
|
133
|
+
if (!this._hold) {
|
|
134
|
+
throw new Shared.errors.network_error({ reason: 'conn_lost' });
|
|
135
|
+
}
|
|
136
|
+
super._write(NodeWorker.parentPort, frame);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.WorkerThreadTransporter = WorkerThreadTransporter;
|
|
140
|
+
//# sourceMappingURL=WorkerThread.Transporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerThread.Transporter.js","sourceRoot":"","sources":["../../../src/lib/transporters/worker-thread/WorkerThread.Transporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Angus.Fenying <fenying@litert.org>
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
export * from './WorkerThread.Client';
|
|
17
|
+
export * from './WorkerThread.Server';
|
|
18
|
+
export * from './WorkerThread.Constants';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/transporters/worker-thread/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright 2024 Angus.Fenying <fenying@litert.org>
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
29
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
__exportStar(require("./WorkerThread.Client"), exports);
|
|
33
|
+
__exportStar(require("./WorkerThread.Server"), exports);
|
|
34
|
+
__exportStar(require("./WorkerThread.Constants"), exports);
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/transporters/worker-thread/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;;;;AAEH,wDAAsC;AACtC,wDAAsC;AACtC,2DAAyC"}
|
package/package.json
CHANGED
|
@@ -32,6 +32,10 @@ export class TvLegacyServerChannelV1 extends EventEmitter implements Shared.ICha
|
|
|
32
32
|
|
|
33
33
|
public get writable(): boolean { return false; }
|
|
34
34
|
|
|
35
|
+
public get isMessageSupported(): boolean { return false; }
|
|
36
|
+
|
|
37
|
+
public get isBinaryStreamSupported(): boolean { return false; }
|
|
38
|
+
|
|
35
39
|
public get id(): number { return 0; }
|
|
36
40
|
|
|
37
41
|
public get timeout(): number { return 30_000; }
|
|
@@ -88,6 +88,10 @@ export abstract class AbstractTvChannelV2
|
|
|
88
88
|
|
|
89
89
|
public ended: boolean = false;
|
|
90
90
|
|
|
91
|
+
public get isMessageSupported(): boolean { return true; }
|
|
92
|
+
|
|
93
|
+
public get isBinaryStreamSupported(): boolean { return this.streams.maxStreams !== 0; }
|
|
94
|
+
|
|
91
95
|
public get finished(): boolean {
|
|
92
96
|
|
|
93
97
|
return this._state === EState.ENDED;
|
|
@@ -184,13 +184,31 @@ class TvErrorResponseDecoder implements IPacketDecoder {
|
|
|
184
184
|
|
|
185
185
|
const errorMsg = readString(len, ctx);
|
|
186
186
|
|
|
187
|
+
let err: TelevokeError;
|
|
188
|
+
|
|
189
|
+
if (errorMsg.startsWith(CS.PROTOCOL_ERROR_NAMESPACE)) {
|
|
190
|
+
|
|
191
|
+
const errMsg = errorMsg.slice(CS.PROTOCOL_ERROR_NAMESPACE.length + 1);
|
|
192
|
+
|
|
193
|
+
if (errMsg in errors) {
|
|
194
|
+
|
|
195
|
+
err = new (errors as any)[errMsg]();
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
|
|
199
|
+
err = new ProtocolError(errMsg, null, null);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
|
|
204
|
+
err = new errors.app_error(errorMsg.slice(CS.APP_ERROR_NAMESPACE.length + 1), null);
|
|
205
|
+
}
|
|
206
|
+
|
|
187
207
|
return {
|
|
188
208
|
'cmd': ctx.command,
|
|
189
209
|
'typ': CSv2.EPacketType.ERROR_RESPONSE,
|
|
190
210
|
'seq': ctx.seq,
|
|
191
|
-
'ct':
|
|
192
|
-
new ProtocolError(errorMsg.slice(CS.PROTOCOL_ERROR_NAMESPACE.length + 1), null) :
|
|
193
|
-
new errors.app_error(errorMsg.slice(CS.APP_ERROR_NAMESPACE.length + 1), null),
|
|
211
|
+
'ct': err,
|
|
194
212
|
} satisfies dEnc2.IErrorResponsePacket;
|
|
195
213
|
}
|
|
196
214
|
}
|
package/src/lib/shared/Errors.ts
CHANGED
|
@@ -36,6 +36,7 @@ export class ProtocolError extends TelevokeError {
|
|
|
36
36
|
|
|
37
37
|
public constructor(
|
|
38
38
|
message: string,
|
|
39
|
+
public readonly data: unknown,
|
|
39
40
|
origin: unknown,
|
|
40
41
|
) {
|
|
41
42
|
|
|
@@ -52,9 +53,9 @@ function defineProtocolError<T extends string>(name: T): Record<T, new (
|
|
|
52
53
|
|
|
53
54
|
[name]: class extends ProtocolError {
|
|
54
55
|
|
|
55
|
-
public constructor(
|
|
56
|
+
public constructor(data: unknown = null, origin: unknown = null) {
|
|
56
57
|
|
|
57
|
-
super(name, origin);
|
|
58
|
+
super(name, data, origin);
|
|
58
59
|
}
|
|
59
60
|
},
|
|
60
61
|
} as any;
|
|
@@ -303,6 +303,16 @@ export interface IChannelBase<TEvents extends IDefaultEvents> extends IEventList
|
|
|
303
303
|
*/
|
|
304
304
|
readonly transporter: ITransporter;
|
|
305
305
|
|
|
306
|
+
/**
|
|
307
|
+
* Whether this channel supports server-push messages or not.
|
|
308
|
+
*/
|
|
309
|
+
readonly isMessageSupported: boolean;
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Whether this channel supports binary streams or not.
|
|
313
|
+
*/
|
|
314
|
+
readonly isBinaryStreamSupported: boolean;
|
|
315
|
+
|
|
306
316
|
/**
|
|
307
317
|
* Tells whether this channel is closed on the local side or not.
|
|
308
318
|
*/
|
|
@@ -89,7 +89,7 @@ export interface ITransporter extends Shared.IEventListener<ITransporterEvents>
|
|
|
89
89
|
*
|
|
90
90
|
* @param lastFrame The last frame.
|
|
91
91
|
*/
|
|
92
|
-
end(
|
|
92
|
+
end(): void;
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
95
|
* Destroy the transporter.
|
|
@@ -101,7 +101,7 @@ export interface ITransporter extends Shared.IEventListener<ITransporterEvents>
|
|
|
101
101
|
*
|
|
102
102
|
* @param frame The frame to write.
|
|
103
103
|
*/
|
|
104
|
-
write(frame:
|
|
104
|
+
write(frame: Array<Buffer | string>): void;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
export interface IConnector {
|
|
@@ -212,6 +212,19 @@ class LegacyHttpGateway extends EventEmitter implements dT.IGateway {
|
|
|
212
212
|
recvAt
|
|
213
213
|
));
|
|
214
214
|
}
|
|
215
|
+
else if (result instanceof Shared.ProtocolError) {
|
|
216
|
+
|
|
217
|
+
this._sendResponse(resp, encoder.encodeApiErrorResponse(
|
|
218
|
+
input.rid,
|
|
219
|
+
v1.EResponseCode.SYSTEM_ERROR,
|
|
220
|
+
JSON.stringify({
|
|
221
|
+
name: result.name,
|
|
222
|
+
message: result.message,
|
|
223
|
+
data: result.data,
|
|
224
|
+
}),
|
|
225
|
+
recvAt
|
|
226
|
+
));
|
|
227
|
+
}
|
|
215
228
|
else {
|
|
216
229
|
|
|
217
230
|
this._sendResponse(resp, encoder.encodeApiErrorResponse(
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Televoke1/Http
|
|
2
|
+
|
|
3
|
+
This module provides the http/1.1 transporter for Televoke1 protocol. It's a compatibility module for Televoke1, working
|
|
4
|
+
with the Televoke v1.x library.
|
|
5
|
+
|
|
6
|
+
> It's okay to use the Televoke1 as a fallback if both Televoke1 and Televoke2 are used.
|
|
7
|
+
|
|
8
|
+
## Examples
|
|
9
|
+
|
|
10
|
+
- [Server](../../../examples/network/server.ts)
|
|
11
|
+
- [Client over TCP](../../../examples/network/legacy-http-client.ts)
|
|
12
|
+
- [Client over TLS](../../../examples/network/legacy-https-client.ts)
|
|
13
|
+
- [Client over Unix Domain Socket](../../../examples/network/legacy-http-unix-client.ts)
|
|
@@ -75,7 +75,7 @@ export class LwDFXTransporter extends EventEmitter implements dT.ITransporter, S
|
|
|
75
75
|
return this._conn.connected;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
public write(frame:
|
|
78
|
+
public write(frame: Array<string | Buffer>): void {
|
|
79
79
|
|
|
80
80
|
if (!this._conn.writable) {
|
|
81
81
|
|
|
@@ -85,15 +85,10 @@ export class LwDFXTransporter extends EventEmitter implements dT.ITransporter, S
|
|
|
85
85
|
this._conn.write(frame);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
public end(
|
|
88
|
+
public end(): void {
|
|
89
89
|
|
|
90
90
|
if (this._conn.writable) {
|
|
91
91
|
|
|
92
|
-
if (frame) {
|
|
93
|
-
|
|
94
|
-
this._conn.write(frame);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
92
|
this._conn.end();
|
|
98
93
|
}
|
|
99
94
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Televoke2/LwDFX
|
|
2
|
+
|
|
3
|
+
This module provides the Televoke2 protocol over LwDFXv1. It allows you to connect to the Televoke2 server with LwDFXv1.
|
|
4
|
+
|
|
5
|
+
> `@litert/lwdfx` is required to use this module.
|
|
6
|
+
|
|
7
|
+
## Examples
|
|
8
|
+
|
|
9
|
+
- [Server](../../../examples/network/server.ts)
|
|
10
|
+
- [Client over TCP](../../../examples/network/lwdfx-tcp-client.ts)
|
|
11
|
+
- [Client over TLS](../../../examples/network/lwdfx-tls-client.ts)
|
|
12
|
+
- [Client over Unix Domain Socket](../../../examples/network/lwdfx-unix-client.ts)
|
|
@@ -176,18 +176,13 @@ class MemorySocket extends EventEmitter implements dT.ITransporter, Shared.ITran
|
|
|
176
176
|
};
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
-
public write(data:
|
|
179
|
+
public write(data: Array<string | Buffer>): void {
|
|
180
180
|
|
|
181
181
|
if (this._exchange.isEnded(this._endpoint)) {
|
|
182
182
|
|
|
183
183
|
throw new Shared.errors.network_error({ reason: 'conn_lost' });
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
if (!Array.isArray(data)) {
|
|
187
|
-
|
|
188
|
-
data = [data];
|
|
189
|
-
}
|
|
190
|
-
|
|
191
186
|
for (let i = 0; i < data.length; ++i) {
|
|
192
187
|
|
|
193
188
|
if (!(data[i] instanceof Buffer)) {
|
|
@@ -204,12 +199,7 @@ class MemorySocket extends EventEmitter implements dT.ITransporter, Shared.ITran
|
|
|
204
199
|
this._exchange.close();
|
|
205
200
|
}
|
|
206
201
|
|
|
207
|
-
public end(
|
|
208
|
-
|
|
209
|
-
if (lastChunk !== undefined) {
|
|
210
|
-
|
|
211
|
-
this.write(lastChunk);
|
|
212
|
-
}
|
|
202
|
+
public end(): void {
|
|
213
203
|
|
|
214
204
|
this._exchange.end(this._endpoint);
|
|
215
205
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Televoke2/Websocket
|
|
2
|
+
|
|
3
|
+
This module provides the Televoke2 protocol over websocket. It allows you to connect to the Televoke2 server with websocket.
|
|
4
|
+
|
|
5
|
+
> `@litert/websocket` is required to use this module.
|
|
6
|
+
>
|
|
7
|
+
> And by default it uses unmasked data frames in client-side, which maybe incompatible with some server implementations. You could enable the mask feature by yourself, and improved the masking performance by use the `@litert/ws-utils` module, which is a C++ addon.
|
|
8
|
+
|
|
9
|
+
## Examples
|
|
10
|
+
|
|
11
|
+
- [Server](../../../examples/network/server.ts)
|
|
12
|
+
- [Client over TCP](../../../examples/network/ws-client.ts)
|
|
13
|
+
- [Client over TLS](../../../examples/network/wss-client.ts)
|
|
14
|
+
- [Client over Unix Domain Socket](../../../examples/network/ws-unix-client.ts)
|
|
@@ -93,7 +93,7 @@ export class WebSocketTransporter extends EventEmitter implements dT.ITransporte
|
|
|
93
93
|
return this._conn.connected;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
public write(frame:
|
|
96
|
+
public write(frame: Array<string | Buffer>): void {
|
|
97
97
|
|
|
98
98
|
if (!this._conn.writable) {
|
|
99
99
|
|
|
@@ -110,22 +110,10 @@ export class WebSocketTransporter extends EventEmitter implements dT.ITransporte
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
public end(
|
|
113
|
+
public end(): void {
|
|
114
114
|
|
|
115
115
|
if (this._conn.writable) {
|
|
116
116
|
|
|
117
|
-
if (frame) {
|
|
118
|
-
|
|
119
|
-
try {
|
|
120
|
-
|
|
121
|
-
this._conn.writeBinary(frame);
|
|
122
|
-
}
|
|
123
|
-
catch (e) {
|
|
124
|
-
|
|
125
|
-
throw new Shared.errors.network_error({ reason: 'conn_lost', cause: e });
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
117
|
this._conn.end();
|
|
130
118
|
}
|
|
131
119
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Televoke2/WorkerThread
|
|
2
|
+
|
|
3
|
+
This module provides the Televoke2 protocol over Node.js Worker Threads, which allows you to connect the main thread and
|
|
4
|
+
worker threads with the Televoke2 protocol.
|
|
5
|
+
|
|
6
|
+
You could either make the main thread as a server or a client, and the worker threads as clients or servers.
|
|
7
|
+
|
|
8
|
+
## Examples
|
|
9
|
+
|
|
10
|
+
- Main Thread As Server
|
|
11
|
+
|
|
12
|
+
- Check the [server code (main thread)](../../../examples/worker-thread/main-server.ts)
|
|
13
|
+
- Check the [client code (worker thread)](../../../examples/worker-thread/worker-client.ts)
|
|
14
|
+
|
|
15
|
+
- Worker Thread As Server
|
|
16
|
+
|
|
17
|
+
- Check the [server code (worker thread)](../../../examples/worker-thread/worker-server.ts)
|
|
18
|
+
- Check the [client code (main thread)](../../../examples/worker-thread/main-client.ts)
|