@litert/televoke 1.0.2 → 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.
Files changed (151) hide show
  1. package/CHANGES.md +13 -0
  2. package/lib/client/Client.decl.d.ts +0 -1
  3. package/lib/client/Client.decl.d.ts.map +1 -1
  4. package/lib/client/JsonApiClient.impl.d.ts.map +1 -1
  5. package/lib/client/JsonApiClient.impl.js +2 -2
  6. package/lib/client/JsonApiClient.impl.js.map +1 -1
  7. package/lib/client/index.d.ts +1 -1
  8. package/lib/client/index.d.ts.map +1 -1
  9. package/lib/client/index.js +1 -1
  10. package/lib/client/index.js.map +1 -1
  11. package/lib/server/LegacyServerChannel.impl.d.ts +2 -2
  12. package/lib/server/LegacyServerChannel.impl.d.ts.map +1 -1
  13. package/lib/server/LegacyServerChannel.impl.js +2 -0
  14. package/lib/server/LegacyServerChannel.impl.js.map +1 -1
  15. package/lib/server/Server.decl.d.ts +0 -1
  16. package/lib/server/Server.decl.d.ts.map +1 -1
  17. package/lib/server/Server.impl.d.ts +0 -1
  18. package/lib/server/Server.impl.d.ts.map +1 -1
  19. package/lib/server/SimpleJsonApiRouter.d.ts +0 -2
  20. package/lib/server/SimpleJsonApiRouter.d.ts.map +1 -1
  21. package/lib/shared/BinaryStream.d.ts +0 -2
  22. package/lib/shared/BinaryStream.d.ts.map +1 -1
  23. package/lib/shared/BinaryStreamManager.js +4 -4
  24. package/lib/shared/BinaryStreamManager.js.map +1 -1
  25. package/lib/shared/Channel.impl.d.ts +2 -3
  26. package/lib/shared/Channel.impl.d.ts.map +1 -1
  27. package/lib/shared/Channel.impl.js +2 -0
  28. package/lib/shared/Channel.impl.js.map +1 -1
  29. package/lib/shared/Encodings/v2/DecoderV2.d.ts +0 -1
  30. package/lib/shared/Encodings/v2/DecoderV2.d.ts.map +1 -1
  31. package/lib/shared/Encodings/v2/DecoderV2.js +14 -3
  32. package/lib/shared/Encodings/v2/DecoderV2.js.map +1 -1
  33. package/lib/shared/Encodings/v2/EncoderV2.d.ts +0 -1
  34. package/lib/shared/Encodings/v2/EncoderV2.d.ts.map +1 -1
  35. package/lib/shared/Encodings/v2/Encoding.v2.decl.d.ts +0 -1
  36. package/lib/shared/Encodings/v2/Encoding.v2.decl.d.ts.map +1 -1
  37. package/lib/shared/Errors.d.ts +4 -4
  38. package/lib/shared/Errors.d.ts.map +1 -1
  39. package/lib/shared/Errors.js +3 -3
  40. package/lib/shared/Errors.js.map +1 -1
  41. package/lib/shared/Shared.decl.d.ts +8 -2
  42. package/lib/shared/Shared.decl.d.ts.map +1 -1
  43. package/lib/shared/Utils.d.ts +0 -1
  44. package/lib/shared/Utils.d.ts.map +1 -1
  45. package/lib/shared/Utils.js +2 -3
  46. package/lib/shared/Utils.js.map +1 -1
  47. package/lib/transporters/Transporter.decl.d.ts +2 -3
  48. package/lib/transporters/Transporter.decl.d.ts.map +1 -1
  49. package/lib/transporters/http-listener/AbstractHttpListener.d.ts +0 -2
  50. package/lib/transporters/http-listener/AbstractHttpListener.d.ts.map +1 -1
  51. package/lib/transporters/http-listener/Http.Decl.d.ts +0 -4
  52. package/lib/transporters/http-listener/Http.Decl.d.ts.map +1 -1
  53. package/lib/transporters/http-listener/HttpListener.js +1 -2
  54. package/lib/transporters/http-listener/HttpListener.js.map +1 -1
  55. package/lib/transporters/http-listener/HttpUnixSocketListener.js +1 -2
  56. package/lib/transporters/http-listener/HttpUnixSocketListener.js.map +1 -1
  57. package/lib/transporters/http-listener/HttpsListener.js +1 -2
  58. package/lib/transporters/http-listener/HttpsListener.js.map +1 -1
  59. package/lib/{client/LegacyHttpClient.impl.d.ts → transporters/legacy-http/LegacyHttp.Client.Native.d.ts} +21 -4
  60. package/lib/transporters/legacy-http/LegacyHttp.Client.Native.d.ts.map +1 -0
  61. package/lib/{client/LegacyHttpClient.impl.js → transporters/legacy-http/LegacyHttp.Client.Native.js} +11 -11
  62. package/lib/transporters/legacy-http/LegacyHttp.Client.Native.js.map +1 -0
  63. package/lib/transporters/legacy-http/LegacyHttp.Server.d.ts.map +1 -1
  64. package/lib/transporters/legacy-http/LegacyHttp.Server.js +8 -2
  65. package/lib/transporters/legacy-http/LegacyHttp.Server.js.map +1 -1
  66. package/lib/transporters/legacy-http/LegacyHttp.Transporter.d.ts +0 -1
  67. package/lib/transporters/legacy-http/LegacyHttp.Transporter.d.ts.map +1 -1
  68. package/lib/transporters/legacy-http/index.d.ts +1 -0
  69. package/lib/transporters/legacy-http/index.d.ts.map +1 -1
  70. package/lib/transporters/legacy-http/index.js +1 -0
  71. package/lib/transporters/legacy-http/index.js.map +1 -1
  72. package/lib/transporters/lwdfx/LwDFX.Tcp.Client.js +1 -2
  73. package/lib/transporters/lwdfx/LwDFX.Tcp.Client.js.map +1 -1
  74. package/lib/transporters/lwdfx/LwDFX.Tcp.Server.js +1 -2
  75. package/lib/transporters/lwdfx/LwDFX.Tcp.Server.js.map +1 -1
  76. package/lib/transporters/lwdfx/LwDFX.Tls.Client.js +1 -2
  77. package/lib/transporters/lwdfx/LwDFX.Tls.Client.js.map +1 -1
  78. package/lib/transporters/lwdfx/LwDFX.Tls.Server.js +1 -2
  79. package/lib/transporters/lwdfx/LwDFX.Tls.Server.js.map +1 -1
  80. package/lib/transporters/lwdfx/LwDFX.Transporter.d.ts +2 -4
  81. package/lib/transporters/lwdfx/LwDFX.Transporter.d.ts.map +1 -1
  82. package/lib/transporters/lwdfx/LwDFX.Transporter.js +1 -4
  83. package/lib/transporters/lwdfx/LwDFX.Transporter.js.map +1 -1
  84. package/lib/transporters/lwdfx/LwDFX.UnixSocket.Client.js +1 -2
  85. package/lib/transporters/lwdfx/LwDFX.UnixSocket.Client.js.map +1 -1
  86. package/lib/transporters/lwdfx/LwDFX.UnixSocket.Server.js +1 -2
  87. package/lib/transporters/lwdfx/LwDFX.UnixSocket.Server.js.map +1 -1
  88. package/lib/transporters/memory/Memory.Impl.d.ts +0 -1
  89. package/lib/transporters/memory/Memory.Impl.d.ts.map +1 -1
  90. package/lib/transporters/memory/Memory.Impl.js +3 -10
  91. package/lib/transporters/memory/Memory.Impl.js.map +1 -1
  92. package/lib/transporters/websocket/WebSocket.Client.js +2 -3
  93. package/lib/transporters/websocket/WebSocket.Client.js.map +1 -1
  94. package/lib/transporters/websocket/WebSocket.Server.js +1 -2
  95. package/lib/transporters/websocket/WebSocket.Server.js.map +1 -1
  96. package/lib/transporters/websocket/WebSocket.Transporter.d.ts +2 -4
  97. package/lib/transporters/websocket/WebSocket.Transporter.d.ts.map +1 -1
  98. package/lib/transporters/websocket/WebSocket.Transporter.js +1 -9
  99. package/lib/transporters/websocket/WebSocket.Transporter.js.map +1 -1
  100. package/lib/transporters/worker-thread/WorkerThread.Client.d.ts +30 -0
  101. package/lib/transporters/worker-thread/WorkerThread.Client.d.ts.map +1 -0
  102. package/lib/transporters/worker-thread/WorkerThread.Client.js +70 -0
  103. package/lib/transporters/worker-thread/WorkerThread.Client.js.map +1 -0
  104. package/lib/transporters/worker-thread/WorkerThread.Constants.d.ts +18 -0
  105. package/lib/transporters/worker-thread/WorkerThread.Constants.d.ts.map +1 -0
  106. package/lib/transporters/worker-thread/WorkerThread.Constants.js +21 -0
  107. package/lib/transporters/worker-thread/WorkerThread.Constants.js.map +1 -0
  108. package/lib/transporters/worker-thread/WorkerThread.Errors.d.ts +49 -0
  109. package/lib/transporters/worker-thread/WorkerThread.Errors.d.ts.map +1 -0
  110. package/lib/transporters/worker-thread/WorkerThread.Errors.js +38 -0
  111. package/lib/transporters/worker-thread/WorkerThread.Errors.js.map +1 -0
  112. package/lib/transporters/worker-thread/WorkerThread.Server.d.ts +42 -0
  113. package/lib/transporters/worker-thread/WorkerThread.Server.d.ts.map +1 -0
  114. package/lib/transporters/worker-thread/WorkerThread.Server.js +94 -0
  115. package/lib/transporters/worker-thread/WorkerThread.Server.js.map +1 -0
  116. package/lib/transporters/worker-thread/WorkerThread.Transporter.d.ts +49 -0
  117. package/lib/transporters/worker-thread/WorkerThread.Transporter.d.ts.map +1 -0
  118. package/lib/transporters/worker-thread/WorkerThread.Transporter.js +140 -0
  119. package/lib/transporters/worker-thread/WorkerThread.Transporter.js.map +1 -0
  120. package/lib/transporters/worker-thread/index.d.ts +19 -0
  121. package/lib/transporters/worker-thread/index.d.ts.map +1 -0
  122. package/lib/transporters/worker-thread/index.js +35 -0
  123. package/lib/transporters/worker-thread/index.js.map +1 -0
  124. package/package.json +8 -8
  125. package/src/lib/client/JsonApiClient.impl.ts +1 -0
  126. package/src/lib/client/index.ts +2 -1
  127. package/src/lib/server/LegacyServerChannel.impl.ts +4 -0
  128. package/src/lib/shared/Channel.impl.ts +4 -0
  129. package/src/lib/shared/Encodings/v2/DecoderV2.ts +21 -3
  130. package/src/lib/shared/Errors.ts +3 -2
  131. package/src/lib/shared/Shared.decl.ts +10 -0
  132. package/src/lib/transporters/Transporter.decl.ts +2 -2
  133. package/src/lib/{client/LegacyHttpClient.impl.ts → transporters/legacy-http/LegacyHttp.Client.Native.ts} +31 -9
  134. package/src/lib/transporters/legacy-http/LegacyHttp.Server.ts +13 -0
  135. package/src/lib/transporters/legacy-http/README.md +13 -0
  136. package/src/lib/transporters/legacy-http/index.ts +1 -0
  137. package/src/lib/transporters/lwdfx/LwDFX.Transporter.ts +2 -7
  138. package/src/lib/transporters/lwdfx/README.md +12 -0
  139. package/src/lib/transporters/memory/Memory.Impl.ts +2 -12
  140. package/src/lib/transporters/memory/README.md +7 -0
  141. package/src/lib/transporters/websocket/README.md +14 -0
  142. package/src/lib/transporters/websocket/WebSocket.Transporter.ts +2 -14
  143. package/src/lib/transporters/worker-thread/README.md +18 -0
  144. package/src/lib/transporters/worker-thread/WorkerThread.Client.ts +88 -0
  145. package/src/lib/transporters/worker-thread/WorkerThread.Constants.ts +19 -0
  146. package/src/lib/transporters/worker-thread/WorkerThread.Errors.ts +53 -0
  147. package/src/lib/transporters/worker-thread/WorkerThread.Server.ts +136 -0
  148. package/src/lib/transporters/worker-thread/WorkerThread.Transporter.ts +204 -0
  149. package/src/lib/transporters/worker-thread/index.ts +19 -0
  150. package/lib/client/LegacyHttpClient.impl.d.ts.map +0 -1
  151. package/lib/client/LegacyHttpClient.impl.js.map +0 -1
@@ -0,0 +1,94 @@
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.createMainThreadGateway = createMainThreadGateway;
19
+ exports.createWorkerThreadGateway = createWorkerThreadGateway;
20
+ const NodeWorker = require("node:worker_threads");
21
+ const cWT = require("./WorkerThread.Constants");
22
+ const node_events_1 = require("node:events");
23
+ const WorkerThread_Transporter_1 = require("./WorkerThread.Transporter");
24
+ const eWT = require("./WorkerThread.Errors");
25
+ const VOID_OK_PROMISE = Promise.resolve();
26
+ class MainThreadGateway extends node_events_1.EventEmitter {
27
+ constructor(_server) {
28
+ super();
29
+ this._server = _server;
30
+ }
31
+ get running() {
32
+ return true;
33
+ }
34
+ start() {
35
+ return VOID_OK_PROMISE;
36
+ }
37
+ stop() {
38
+ return VOID_OK_PROMISE;
39
+ }
40
+ registerWorker(worker) {
41
+ if (worker?.threadId === -1) {
42
+ throw new eWT.E_WORKER_THREAD_OFFLINE();
43
+ }
44
+ this._server.registerChannel(new WorkerThread_Transporter_1.MainThreadTransporter(cWT.MAIN_THREAD_PROTOCOL_NAME, worker));
45
+ }
46
+ }
47
+ class WorkerThreadGateway extends node_events_1.EventEmitter {
48
+ constructor(_server) {
49
+ super();
50
+ this._server = _server;
51
+ this._transporter = null;
52
+ }
53
+ get running() {
54
+ return !!this._transporter;
55
+ }
56
+ start() {
57
+ if (this._transporter) {
58
+ return VOID_OK_PROMISE;
59
+ }
60
+ this._server.registerChannel(this._transporter = new WorkerThread_Transporter_1.WorkerThreadTransporter(cWT.WORKER_THREAD_PROTOCOL_NAME));
61
+ return VOID_OK_PROMISE;
62
+ }
63
+ stop() {
64
+ this._transporter?.end();
65
+ this._transporter = null;
66
+ return VOID_OK_PROMISE;
67
+ }
68
+ }
69
+ /**
70
+ * Create a gateway that runs in the main thread.
71
+ *
72
+ * @param server The server instance.
73
+ * @experimental
74
+ */
75
+ function createMainThreadGateway(server) {
76
+ if (!NodeWorker.isMainThread) {
77
+ throw new eWT.E_MAIN_THREAD_ONLY();
78
+ }
79
+ return new MainThreadGateway(server);
80
+ }
81
+ let workerThreadGateway = null;
82
+ /**
83
+ * Create a gateway that runs in the worker thread.
84
+ *
85
+ * @param server The server instance.
86
+ * @experimental
87
+ */
88
+ function createWorkerThreadGateway(server) {
89
+ if (NodeWorker.isMainThread) {
90
+ throw new eWT.E_WORKER_THREAD_ONLY();
91
+ }
92
+ return workerThreadGateway ?? (workerThreadGateway = new WorkerThreadGateway(server));
93
+ }
94
+ //# sourceMappingURL=WorkerThread.Server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerThread.Server.js","sourceRoot":"","sources":["../../../src/lib/transporters/worker-thread/WorkerThread.Server.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AA+FH,0DAQC;AAUD,8DAQC;AAvHD,kDAAkD;AAElD,gDAAgD;AAChD,6CAA2C;AAC3C,yEAA4F;AAC5F,6CAA6C;AAc7C,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AAE1C,MAAM,iBAAkB,SAAQ,0BAAY;IAExC,YACqB,OAAmB;QACpC,KAAK,EAAE,CAAC;QADS,YAAO,GAAP,OAAO,CAAY;IAC3B,CAAC;IAEd,IAAW,OAAO;QAEd,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,KAAK;QAER,OAAO,eAAe,CAAC;IAC3B,CAAC;IAEM,IAAI;QAEP,OAAO,eAAe,CAAC;IAC3B,CAAC;IAEM,cAAc,CAAC,MAAyB;QAE3C,IAAI,MAAM,EAAE,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YAE1B,MAAM,IAAI,GAAG,CAAC,uBAAuB,EAAE,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,gDAAqB,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC,CAAC;IACnG,CAAC;CACJ;AAED,MAAM,mBAAoB,SAAQ,0BAAY;IAI1C,YACqB,OAAmB;QACpC,KAAK,EAAE,CAAC;QADS,YAAO,GAAP,OAAO,CAAY;QAHhC,iBAAY,GAAmC,IAAI,CAAC;IAI/C,CAAC;IAEd,IAAW,OAAO;QAEd,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;IAC/B,CAAC;IAEM,KAAK;QAER,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,OAAO,eAAe,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,kDAAuB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAE/G,OAAO,eAAe,CAAC;IAC3B,CAAC;IAEM,IAAI;QAEP,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,OAAO,eAAe,CAAC;IAC3B,CAAC;CACJ;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CAAC,MAAkB;IAEtD,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;QAE3B,MAAM,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,mBAAmB,GAA+B,IAAI,CAAC;AAE3D;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,MAAkB;IAExD,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;QAE1B,MAAM,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,mBAAmB,KAAnB,mBAAmB,GAAK,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAC;AACnE,CAAC"}
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@litert/televoke",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "A simple RPC service framework.",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -32,16 +32,16 @@
32
32
  "types": "lib/index.d.ts",
33
33
  "typings": "lib/index.d.ts",
34
34
  "devDependencies": {
35
- "@commitlint/cli": "^18.6.1",
36
- "@commitlint/config-conventional": "^18.6.2",
37
- "@litert/eslint-plugin-rules": "^0.1.6",
35
+ "@commitlint/cli": "^19.2.1",
36
+ "@commitlint/config-conventional": "^19.1.0",
37
+ "@litert/eslint-plugin-rules": "^0.1.7",
38
38
  "@litert/lwdfx": "^1.1.3",
39
- "@litert/websocket": "^0.2.0",
39
+ "@litert/websocket": "^0.2.3",
40
40
  "@types/mocha": "^10.0.6",
41
- "@types/node": "^20.11.19",
41
+ "@types/node": "^20.12.5",
42
42
  "husky": "^9.0.11",
43
- "mocha": "^10.3.0",
44
- "typescript": "^5.3.3"
43
+ "mocha": "^10.4.0",
44
+ "typescript": "^5.4.4"
45
45
  },
46
46
  "engines": {
47
47
  "node": ">=18.0.0"
@@ -57,6 +57,7 @@ class TvJsonApiClient<TApis extends Shared.IObject> extends EventEmitter impleme
57
57
  .off('push_message', this._onMessage);
58
58
 
59
59
  this._channel = null;
60
+ this.emit('close');
60
61
  };
61
62
 
62
63
  private readonly _onMessage = (msg: Buffer[]): void => {
@@ -16,4 +16,5 @@
16
16
 
17
17
  export * from './Client.decl';
18
18
  export * from './JsonApiClient.impl';
19
- export * from './LegacyHttpClient.impl';
19
+
20
+ export * from '../../lib/transporters/legacy-http/LegacyHttp.Client.Native';
@@ -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': errorMsg.startsWith(CS.PROTOCOL_ERROR_NAMESPACE) ?
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
  }
@@ -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(public readonly data: unknown = null, origin: unknown = null) {
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(lastFrame?: Buffer | string | Array<Buffer | string>): void;
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: Buffer | string | Array<Buffer | string>): void;
104
+ write(frame: Array<Buffer | string>): void;
105
105
  }
106
106
 
107
107
  export interface IConnector {
@@ -16,14 +16,15 @@
16
16
 
17
17
  import * as $Http from 'http';
18
18
  import * as $Https from 'https';
19
- import * as C from './Client.decl';
20
- import * as Shared from '../shared';
21
- import * as v1 from '../shared/Encodings/v1';
19
+ import type * as C from '../../client/Client.decl';
20
+ import * as Shared from '../../shared';
21
+ import * as v1 from '../../shared/Encodings/v1';
22
22
  import { EventEmitter } from 'node:events';
23
23
 
24
24
  const HTTP_HEADER_CONTENT_LENGTH = 'content-length';
25
25
  const HTTP_HEADER_TV_VER = 'x-tv-ver';
26
26
 
27
+ const DEFAULT_MAX_CONNECTIONS = 100;
27
28
  const DEFAULT_TIMEOUT = 30_000;
28
29
 
29
30
  const disabledStreamManager = Shared.createDisabledStreamManagerFactory()(null as any);
@@ -261,6 +262,27 @@ interface IHttpClientOptionsBase extends $Https.RequestOptions {
261
262
  * @default true
262
263
  */
263
264
  retryOnConnReset?: boolean;
265
+
266
+ /**
267
+ * The maximum number of connections.
268
+ *
269
+ * @default 100
270
+ */
271
+ maxConnections?: number;
272
+
273
+ /**
274
+ * The timeout of keep-alive.
275
+ *
276
+ * @default 30000
277
+ */
278
+ keepAliveTimeout?: number;
279
+
280
+ /**
281
+ * Whether to keep-alive.
282
+ *
283
+ * @default true
284
+ */
285
+ keepAlive?: boolean;
264
286
  }
265
287
 
266
288
  export interface IHttpClientNetworkOptions extends IHttpClientOptionsBase {
@@ -296,13 +318,13 @@ export function createLegacyHttpClient<TAPIs extends Shared.IObject>(opts: IHttp
296
318
  opts.https ? $Https.request : $Http.request,
297
319
  opts,
298
320
  opts.https ? new $Https.Agent({
299
- 'maxSockets': 0,
300
- 'keepAlive': true,
301
- 'keepAliveMsecs': DEFAULT_TIMEOUT
321
+ 'maxSockets': opts.maxConnections ?? DEFAULT_MAX_CONNECTIONS,
322
+ 'keepAlive': opts.keepAlive ?? true,
323
+ 'keepAliveMsecs': opts.keepAliveTimeout ?? DEFAULT_TIMEOUT
302
324
  }) : new $Http.Agent({
303
- 'maxSockets': 0,
304
- 'keepAlive': true,
305
- 'keepAliveMsecs': DEFAULT_TIMEOUT
325
+ 'maxSockets': opts.maxConnections ?? DEFAULT_MAX_CONNECTIONS,
326
+ 'keepAlive': opts.keepAlive ?? true,
327
+ 'keepAliveMsecs': opts.keepAliveTimeout ?? DEFAULT_TIMEOUT
306
328
  }),
307
329
  opts.retryOnConnReset,
308
330
  opts.apiNameWrapper,
@@ -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)
@@ -16,3 +16,4 @@
16
16
 
17
17
  export * from './LegacyHttp.Server';
18
18
  export * from './LegacyHttp.Transporter';
19
+ export * from './LegacyHttp.Client.Native';