@litert/televoke 1.0.3 → 1.2.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 +17 -0
- package/lib/client/Client.decl.d.ts +1 -2
- package/lib/client/Client.decl.d.ts.map +1 -1
- package/lib/client/Client.decl.js +1 -1
- package/lib/client/JsonApiClient.impl.d.ts +1 -1
- package/lib/client/JsonApiClient.impl.js +2 -3
- package/lib/client/JsonApiClient.impl.js.map +1 -1
- package/lib/client/index.d.ts +1 -1
- package/lib/client/index.js +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/server/LegacyServerChannel.impl.d.ts +3 -3
- package/lib/server/LegacyServerChannel.impl.d.ts.map +1 -1
- package/lib/server/LegacyServerChannel.impl.js +3 -1
- package/lib/server/LegacyServerChannel.impl.js.map +1 -1
- package/lib/server/Server.decl.d.ts +1 -2
- package/lib/server/Server.decl.d.ts.map +1 -1
- package/lib/server/Server.decl.js +1 -1
- package/lib/server/Server.impl.d.ts +1 -2
- package/lib/server/Server.impl.d.ts.map +1 -1
- package/lib/server/Server.impl.js +1 -1
- package/lib/server/ServerChannel.d.ts +1 -1
- package/lib/server/ServerChannel.js +1 -1
- package/lib/server/SimpleJsonApiRouter.d.ts +1 -3
- package/lib/server/SimpleJsonApiRouter.d.ts.map +1 -1
- package/lib/server/SimpleJsonApiRouter.js +1 -1
- package/lib/server/index.d.ts +1 -1
- package/lib/server/index.js +1 -1
- package/lib/shared/BinaryStream.d.ts +1 -3
- package/lib/shared/BinaryStream.d.ts.map +1 -1
- package/lib/shared/BinaryStream.js +1 -1
- package/lib/shared/BinaryStreamManager.d.ts +1 -1
- package/lib/shared/BinaryStreamManager.js +5 -5
- package/lib/shared/BinaryStreamManager.js.map +1 -1
- package/lib/shared/Channel.impl.d.ts +3 -4
- package/lib/shared/Channel.impl.d.ts.map +1 -1
- package/lib/shared/Channel.impl.js +3 -1
- package/lib/shared/Channel.impl.js.map +1 -1
- package/lib/shared/Constants.d.ts +1 -1
- package/lib/shared/Constants.js +1 -1
- package/lib/shared/Encodings/index.d.ts +1 -1
- package/lib/shared/Encodings/index.js +1 -1
- package/lib/shared/Encodings/v1/EncoderV1.d.ts +1 -1
- package/lib/shared/Encodings/v1/EncoderV1.js +1 -1
- package/lib/shared/Encodings/v1/Protocol.v1.decls.d.ts +1 -1
- package/lib/shared/Encodings/v1/Protocol.v1.decls.js +1 -1
- package/lib/shared/Encodings/v1/index.d.ts +1 -1
- package/lib/shared/Encodings/v1/index.js +1 -1
- package/lib/shared/Encodings/v2/Constants.v2.d.ts +1 -1
- package/lib/shared/Encodings/v2/Constants.v2.js +1 -1
- package/lib/shared/Encodings/v2/DecoderV2.d.ts +1 -2
- package/lib/shared/Encodings/v2/DecoderV2.d.ts.map +1 -1
- package/lib/shared/Encodings/v2/DecoderV2.js +15 -4
- package/lib/shared/Encodings/v2/DecoderV2.js.map +1 -1
- package/lib/shared/Encodings/v2/EncoderV2.d.ts +1 -2
- package/lib/shared/Encodings/v2/EncoderV2.d.ts.map +1 -1
- package/lib/shared/Encodings/v2/EncoderV2.js +1 -1
- package/lib/shared/Encodings/v2/Encoding.v2.decl.d.ts +1 -2
- package/lib/shared/Encodings/v2/Encoding.v2.decl.d.ts.map +1 -1
- package/lib/shared/Encodings/v2/Encoding.v2.decl.js +1 -1
- package/lib/shared/Encodings/v2/index.d.ts +1 -1
- package/lib/shared/Encodings/v2/index.js +1 -1
- package/lib/shared/Errors.d.ts +5 -5
- package/lib/shared/Errors.d.ts.map +1 -1
- package/lib/shared/Errors.js +4 -4
- package/lib/shared/Errors.js.map +1 -1
- package/lib/shared/Shared.decl.d.ts +10 -4
- package/lib/shared/Shared.decl.d.ts.map +1 -1
- package/lib/shared/Shared.decl.js +1 -1
- package/lib/shared/Utils.d.ts +1 -2
- package/lib/shared/Utils.d.ts.map +1 -1
- package/lib/shared/Utils.js +3 -4
- package/lib/shared/Utils.js.map +1 -1
- package/lib/shared/index.d.ts +1 -1
- package/lib/shared/index.js +1 -1
- package/lib/transporters/Transporter.decl.d.ts +3 -4
- package/lib/transporters/Transporter.decl.d.ts.map +1 -1
- package/lib/transporters/Transporter.decl.js +1 -1
- package/lib/transporters/http-listener/AbstractHttpListener.d.ts +2 -4
- package/lib/transporters/http-listener/AbstractHttpListener.d.ts.map +1 -1
- package/lib/transporters/http-listener/AbstractHttpListener.js +10 -6
- package/lib/transporters/http-listener/AbstractHttpListener.js.map +1 -1
- package/lib/transporters/http-listener/Http.Decl.d.ts +1 -9
- package/lib/transporters/http-listener/Http.Decl.d.ts.map +1 -1
- package/lib/transporters/http-listener/Http.Decl.js +2 -21
- package/lib/transporters/http-listener/Http.Decl.js.map +1 -1
- package/lib/transporters/http-listener/HttpListener.d.ts +1 -1
- package/lib/transporters/http-listener/HttpListener.d.ts.map +1 -1
- package/lib/transporters/http-listener/HttpListener.js +5 -4
- package/lib/transporters/http-listener/HttpListener.js.map +1 -1
- package/lib/transporters/http-listener/HttpUnixSocketListener.d.ts +1 -1
- package/lib/transporters/http-listener/HttpUnixSocketListener.d.ts.map +1 -1
- package/lib/transporters/http-listener/HttpUnixSocketListener.js +5 -4
- package/lib/transporters/http-listener/HttpUnixSocketListener.js.map +1 -1
- package/lib/transporters/http-listener/HttpsListener.d.ts +1 -1
- package/lib/transporters/http-listener/HttpsListener.d.ts.map +1 -1
- package/lib/transporters/http-listener/HttpsListener.js +7 -6
- package/lib/transporters/http-listener/HttpsListener.js.map +1 -1
- package/lib/transporters/http-listener/index.d.ts +1 -1
- package/lib/transporters/http-listener/index.js +1 -1
- package/lib/transporters/index.d.ts +1 -1
- package/lib/transporters/index.js +1 -1
- package/lib/transporters/legacy-http/LegacyHttp.Client.Native.d.ts +12 -3
- package/lib/transporters/legacy-http/LegacyHttp.Client.Native.d.ts.map +1 -1
- package/lib/transporters/legacy-http/LegacyHttp.Client.Native.js +12 -3
- package/lib/transporters/legacy-http/LegacyHttp.Client.Native.js.map +1 -1
- package/lib/transporters/legacy-http/LegacyHttp.Server.d.ts +29 -1
- package/lib/transporters/legacy-http/LegacyHttp.Server.d.ts.map +1 -1
- package/lib/transporters/legacy-http/LegacyHttp.Server.js +43 -12
- package/lib/transporters/legacy-http/LegacyHttp.Server.js.map +1 -1
- package/lib/transporters/legacy-http/LegacyHttp.Transporter.d.ts +1 -2
- package/lib/transporters/legacy-http/LegacyHttp.Transporter.d.ts.map +1 -1
- package/lib/transporters/legacy-http/LegacyHttp.Transporter.js +1 -1
- package/lib/transporters/legacy-http/index.d.ts +1 -1
- package/lib/transporters/legacy-http/index.js +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tcp.Client.d.ts +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tcp.Client.js +2 -3
- package/lib/transporters/lwdfx/LwDFX.Tcp.Client.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tcp.Server.d.ts +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tcp.Server.js +2 -3
- package/lib/transporters/lwdfx/LwDFX.Tcp.Server.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tls.Client.d.ts +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tls.Client.js +2 -3
- package/lib/transporters/lwdfx/LwDFX.Tls.Client.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tls.Server.d.ts +1 -1
- package/lib/transporters/lwdfx/LwDFX.Tls.Server.js +2 -3
- package/lib/transporters/lwdfx/LwDFX.Tls.Server.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.Transporter.d.ts +3 -5
- package/lib/transporters/lwdfx/LwDFX.Transporter.d.ts.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.Transporter.js +2 -5
- package/lib/transporters/lwdfx/LwDFX.Transporter.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.UnixSocket.Client.d.ts +1 -1
- package/lib/transporters/lwdfx/LwDFX.UnixSocket.Client.js +2 -3
- package/lib/transporters/lwdfx/LwDFX.UnixSocket.Client.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.UnixSocket.Server.d.ts +1 -1
- package/lib/transporters/lwdfx/LwDFX.UnixSocket.Server.js +2 -3
- package/lib/transporters/lwdfx/LwDFX.UnixSocket.Server.js.map +1 -1
- package/lib/transporters/lwdfx/LwDFX.decl.d.ts +1 -1
- package/lib/transporters/lwdfx/LwDFX.decl.js +1 -1
- package/lib/transporters/lwdfx/index.d.ts +1 -1
- package/lib/transporters/lwdfx/index.js +1 -1
- package/lib/transporters/memory/Memory.Impl.d.ts +1 -2
- package/lib/transporters/memory/Memory.Impl.d.ts.map +1 -1
- package/lib/transporters/memory/Memory.Impl.js +4 -11
- package/lib/transporters/memory/Memory.Impl.js.map +1 -1
- package/lib/transporters/memory/index.d.ts +1 -1
- package/lib/transporters/memory/index.js +1 -1
- package/lib/transporters/websocket/WebSocket.Client.d.ts +18 -3
- package/lib/transporters/websocket/WebSocket.Client.d.ts.map +1 -1
- package/lib/transporters/websocket/WebSocket.Client.js +23 -4
- package/lib/transporters/websocket/WebSocket.Client.js.map +1 -1
- package/lib/transporters/websocket/WebSocket.Server.d.ts +24 -2
- package/lib/transporters/websocket/WebSocket.Server.d.ts.map +1 -1
- package/lib/transporters/websocket/WebSocket.Server.js +30 -12
- package/lib/transporters/websocket/WebSocket.Server.js.map +1 -1
- package/lib/transporters/websocket/WebSocket.Transporter.d.ts +3 -5
- package/lib/transporters/websocket/WebSocket.Transporter.d.ts.map +1 -1
- package/lib/transporters/websocket/WebSocket.Transporter.js +2 -10
- package/lib/transporters/websocket/WebSocket.Transporter.js.map +1 -1
- package/lib/transporters/websocket/WebSocket.decl.d.ts +1 -1
- package/lib/transporters/websocket/WebSocket.decl.js +1 -1
- package/lib/transporters/websocket/index.d.ts +1 -1
- package/lib/transporters/websocket/index.js +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 +5 -5
- package/src/lib/client/Client.decl.ts +1 -1
- package/src/lib/client/JsonApiClient.impl.ts +1 -1
- package/src/lib/client/index.ts +1 -1
- package/src/lib/index.ts +1 -1
- package/src/lib/server/LegacyServerChannel.impl.ts +5 -1
- package/src/lib/server/Server.decl.ts +1 -1
- package/src/lib/server/Server.impl.ts +1 -1
- package/src/lib/server/ServerChannel.ts +1 -1
- package/src/lib/server/SimpleJsonApiRouter.ts +1 -1
- package/src/lib/server/index.ts +1 -1
- package/src/lib/shared/BinaryStream.ts +1 -1
- package/src/lib/shared/BinaryStreamManager.ts +1 -1
- package/src/lib/shared/Channel.impl.ts +5 -1
- package/src/lib/shared/Constants.ts +1 -1
- package/src/lib/shared/Encodings/index.ts +1 -1
- package/src/lib/shared/Encodings/v1/EncoderV1.ts +1 -1
- package/src/lib/shared/Encodings/v1/Protocol.v1.decls.ts +1 -1
- package/src/lib/shared/Encodings/v1/index.ts +1 -1
- package/src/lib/shared/Encodings/v2/Constants.v2.ts +1 -1
- package/src/lib/shared/Encodings/v2/DecoderV2.ts +22 -4
- package/src/lib/shared/Encodings/v2/EncoderV2.ts +1 -1
- package/src/lib/shared/Encodings/v2/Encoding.v2.decl.ts +1 -1
- package/src/lib/shared/Encodings/v2/index.ts +1 -1
- package/src/lib/shared/Errors.ts +4 -3
- package/src/lib/shared/Shared.decl.ts +13 -3
- package/src/lib/shared/Utils.ts +1 -1
- package/src/lib/shared/index.ts +1 -1
- package/src/lib/transporters/Transporter.decl.ts +3 -3
- package/src/lib/transporters/http-listener/AbstractHttpListener.ts +14 -6
- package/src/lib/transporters/http-listener/Http.Decl.ts +1 -26
- package/src/lib/transporters/http-listener/HttpListener.ts +10 -2
- package/src/lib/transporters/http-listener/HttpUnixSocketListener.ts +10 -2
- package/src/lib/transporters/http-listener/HttpsListener.ts +12 -4
- package/src/lib/transporters/http-listener/index.ts +1 -1
- package/src/lib/transporters/index.ts +1 -1
- package/src/lib/transporters/legacy-http/LegacyHttp.Client.Native.ts +30 -3
- package/src/lib/transporters/legacy-http/LegacyHttp.Server.ts +70 -9
- package/src/lib/transporters/legacy-http/LegacyHttp.Transporter.ts +1 -1
- package/src/lib/transporters/legacy-http/README.md +13 -0
- package/src/lib/transporters/legacy-http/index.ts +1 -1
- package/src/lib/transporters/lwdfx/LwDFX.Tcp.Client.ts +1 -1
- package/src/lib/transporters/lwdfx/LwDFX.Tcp.Server.ts +1 -1
- package/src/lib/transporters/lwdfx/LwDFX.Tls.Client.ts +1 -1
- package/src/lib/transporters/lwdfx/LwDFX.Tls.Server.ts +1 -1
- package/src/lib/transporters/lwdfx/LwDFX.Transporter.ts +3 -8
- package/src/lib/transporters/lwdfx/LwDFX.UnixSocket.Client.ts +1 -1
- package/src/lib/transporters/lwdfx/LwDFX.UnixSocket.Server.ts +1 -1
- package/src/lib/transporters/lwdfx/LwDFX.decl.ts +1 -1
- package/src/lib/transporters/lwdfx/README.md +12 -0
- package/src/lib/transporters/lwdfx/index.ts +1 -1
- package/src/lib/transporters/memory/Memory.Impl.ts +3 -13
- package/src/lib/transporters/memory/README.md +7 -0
- package/src/lib/transporters/memory/index.ts +1 -1
- package/src/lib/transporters/websocket/README.md +14 -0
- package/src/lib/transporters/websocket/WebSocket.Client.ts +52 -7
- package/src/lib/transporters/websocket/WebSocket.Server.ts +55 -9
- package/src/lib/transporters/websocket/WebSocket.Transporter.ts +3 -15
- package/src/lib/transporters/websocket/WebSocket.decl.ts +1 -1
- package/src/lib/transporters/websocket/index.ts +1 -1
- 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
package/src/lib/shared/Errors.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2025 Angus.Fenying <fenying@litert.org>
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -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;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2025 Angus.Fenying <fenying@litert.org>
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -20,7 +20,7 @@ export type IFn<TArgs extends any[], TRet> = (...args: TArgs) => TRet;
|
|
|
20
20
|
|
|
21
21
|
export type IVoidFn<TArgs extends any[]> = IFn<TArgs, void>;
|
|
22
22
|
|
|
23
|
-
// eslint-disable-next-line @typescript-eslint/
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-restricted-types, @typescript-eslint/consistent-type-definitions
|
|
24
24
|
export type IObject = {};
|
|
25
25
|
|
|
26
26
|
export type IfIsFn<T, TTrue = T, TFalse = never> = T extends IFn<any[], any> ? TTrue : TFalse;
|
|
@@ -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
|
*/
|
|
@@ -362,5 +372,5 @@ export interface IChannelBase<TEvents extends IDefaultEvents> extends IEventList
|
|
|
362
372
|
/**
|
|
363
373
|
* Close the channel.
|
|
364
374
|
*/
|
|
365
|
-
close(): void
|
|
375
|
+
close(): void | Promise<void>;
|
|
366
376
|
}
|
package/src/lib/shared/Utils.ts
CHANGED
package/src/lib/shared/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2025 Angus.Fenying <fenying@litert.org>
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -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 {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2025 Angus.Fenying <fenying@litert.org>
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -24,7 +24,7 @@ export abstract class AbstractHttpListener extends EventEmitter implements dH.IH
|
|
|
24
24
|
|
|
25
25
|
public port: number = 0;
|
|
26
26
|
|
|
27
|
-
protected _upgradeProcessor: dH.IUpgradeProcessor =
|
|
27
|
+
protected _upgradeProcessor: dH.IUpgradeProcessor | null = null;
|
|
28
28
|
|
|
29
29
|
protected _apiProcessor: dH.ILegacyHttpApiProcessor = dH.DEFAULT_LEGACY_HTTP_API_PROCESSOR;
|
|
30
30
|
|
|
@@ -39,11 +39,19 @@ export abstract class AbstractHttpListener extends EventEmitter implements dH.IH
|
|
|
39
39
|
|
|
40
40
|
public setUpgradeProcessor(processor: dH.IUpgradeProcessor | null): void {
|
|
41
41
|
|
|
42
|
-
this._upgradeProcessor = processor
|
|
42
|
+
this._upgradeProcessor = processor;
|
|
43
43
|
|
|
44
|
-
this._gateway
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
if (!this._gateway) {
|
|
45
|
+
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
this._gateway.removeAllListeners('upgrade');
|
|
50
|
+
|
|
51
|
+
if (this._upgradeProcessor !== null) {
|
|
52
|
+
|
|
53
|
+
this._gateway.addListener('upgrade', this._upgradeProcessor);
|
|
54
|
+
}
|
|
47
55
|
}
|
|
48
56
|
|
|
49
57
|
public get running(): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2025 Angus.Fenying <fenying@litert.org>
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -75,31 +75,6 @@ export const DEFAULT_LEGACY_HTTP_API_PROCESSOR: ILegacyHttpApiProcessor = functi
|
|
|
75
75
|
resp.end(DEFAULT_REFUSE_PAYLOAD);
|
|
76
76
|
};
|
|
77
77
|
|
|
78
|
-
/**
|
|
79
|
-
* The default upgrade processor, it will destroy the socket.
|
|
80
|
-
*/
|
|
81
|
-
export const DEFAULT_UPGRADE_PROCESSOR: IUpgradeProcessor = function(req): void {
|
|
82
|
-
|
|
83
|
-
const socket = req.socket;
|
|
84
|
-
|
|
85
|
-
const header: Http.OutgoingHttpHeaders = {
|
|
86
|
-
'Content-Type': 'text/plain',
|
|
87
|
-
'Content-Length': DEFAULT_REFUSE_PAYLOAD.byteLength,
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
socket.write([
|
|
91
|
-
`HTTP/1.1 ${DEFAULT_REFUSE_STATUS_CODE}`,
|
|
92
|
-
...Object.entries(header).map(([k, v]) => `${k}: ${v as string}`),
|
|
93
|
-
''
|
|
94
|
-
].join('\r\n'));
|
|
95
|
-
|
|
96
|
-
socket.write(DEFAULT_REFUSE_PAYLOAD);
|
|
97
|
-
|
|
98
|
-
socket.write('\r\n');
|
|
99
|
-
|
|
100
|
-
socket.end();
|
|
101
|
-
};
|
|
102
|
-
|
|
103
78
|
export interface IHttpListenerOptions {
|
|
104
79
|
|
|
105
80
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2025 Angus.Fenying <fenying@litert.org>
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -46,13 +46,21 @@ class HttpListener extends AbstractHttpListener {
|
|
|
46
46
|
}).on('listening', () => {
|
|
47
47
|
|
|
48
48
|
gateway.removeAllListeners('error');
|
|
49
|
+
|
|
49
50
|
this._gateway = gateway;
|
|
51
|
+
|
|
50
52
|
if (this.port === 0) {
|
|
51
53
|
|
|
52
54
|
this.port = (gateway.address() as $Net.AddressInfo).port;
|
|
53
55
|
}
|
|
56
|
+
|
|
54
57
|
gateway.on('error', (e) => this.emit('error', e));
|
|
55
|
-
|
|
58
|
+
|
|
59
|
+
if (this._upgradeProcessor !== null) {
|
|
60
|
+
|
|
61
|
+
gateway.on('upgrade', this._upgradeProcessor);
|
|
62
|
+
}
|
|
63
|
+
|
|
56
64
|
resolve();
|
|
57
65
|
});
|
|
58
66
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2025 Angus.Fenying <fenying@litert.org>
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -45,13 +45,21 @@ class HttpUnixSocketListener extends AbstractHttpListener {
|
|
|
45
45
|
}).on('listening', () => {
|
|
46
46
|
|
|
47
47
|
gateway.removeAllListeners('error');
|
|
48
|
+
|
|
48
49
|
this._gateway = gateway;
|
|
50
|
+
|
|
49
51
|
if (this.port === 0) {
|
|
50
52
|
|
|
51
53
|
this.port = (gateway.address() as $Net.AddressInfo).port;
|
|
52
54
|
}
|
|
55
|
+
|
|
53
56
|
gateway.on('error', (e) => this.emit('error', e));
|
|
54
|
-
|
|
57
|
+
|
|
58
|
+
if (this._upgradeProcessor !== null) {
|
|
59
|
+
|
|
60
|
+
gateway.on('upgrade', this._upgradeProcessor);
|
|
61
|
+
}
|
|
62
|
+
|
|
55
63
|
resolve();
|
|
56
64
|
});
|
|
57
65
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2025 Angus.Fenying <fenying@litert.org>
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -46,13 +46,21 @@ class HttpsListener extends AbstractHttpListener {
|
|
|
46
46
|
}).on('listening', () => {
|
|
47
47
|
|
|
48
48
|
gateway.removeAllListeners('error');
|
|
49
|
+
|
|
49
50
|
this._gateway = gateway;
|
|
50
|
-
if (this._opts.port === 0) {
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
if (this.port === 0) {
|
|
53
|
+
|
|
54
|
+
this.port = (gateway.address() as $Net.AddressInfo).port;
|
|
53
55
|
}
|
|
56
|
+
|
|
54
57
|
gateway.on('error', (e) => this.emit('error', e));
|
|
55
|
-
|
|
58
|
+
|
|
59
|
+
if (this._upgradeProcessor !== null) {
|
|
60
|
+
|
|
61
|
+
gateway.on('upgrade', this._upgradeProcessor);
|
|
62
|
+
}
|
|
63
|
+
|
|
56
64
|
resolve();
|
|
57
65
|
});
|
|
58
66
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2025 Angus.Fenying <fenying@litert.org>
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -29,7 +29,18 @@ const DEFAULT_TIMEOUT = 30_000;
|
|
|
29
29
|
|
|
30
30
|
const disabledStreamManager = Shared.createDisabledStreamManagerFactory()(null as any);
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
export interface ILegacyHttpClient<T extends Shared.IObject> extends C.IClient<T> {
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Setup the headers for the every HTTP request.
|
|
36
|
+
*
|
|
37
|
+
* @param newHeaders The new headers to set.
|
|
38
|
+
* @param append Whether to append the new headers to existing headers, or replace all headers. [Default: true]
|
|
39
|
+
*/
|
|
40
|
+
setHeaders(newHeaders: $Http.OutgoingHttpHeaders, append?: boolean): void;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
class TvLegacyHttpClient extends EventEmitter implements ILegacyHttpClient<any> {
|
|
33
44
|
|
|
34
45
|
public onError!: any;
|
|
35
46
|
|
|
@@ -42,6 +53,8 @@ class TvLegacyHttpClient extends EventEmitter implements C.IClient<any> {
|
|
|
42
53
|
) {
|
|
43
54
|
|
|
44
55
|
super();
|
|
56
|
+
|
|
57
|
+
this._opts.headers ??= {};
|
|
45
58
|
}
|
|
46
59
|
|
|
47
60
|
public get timeout(): number {
|
|
@@ -62,6 +75,18 @@ class TvLegacyHttpClient extends EventEmitter implements C.IClient<any> {
|
|
|
62
75
|
|
|
63
76
|
public readonly transporter = null;
|
|
64
77
|
|
|
78
|
+
public setHeaders(newHeaders: $Http.OutgoingHttpHeaders, append: boolean = true): void {
|
|
79
|
+
|
|
80
|
+
if (append) {
|
|
81
|
+
|
|
82
|
+
Object.assign(this._opts.headers!, newHeaders);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
|
|
86
|
+
this._opts.headers = newHeaders;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
65
90
|
public sendBinaryChunk(): Promise<void> {
|
|
66
91
|
|
|
67
92
|
return Promise.reject(new Shared.errors.cmd_not_impl());
|
|
@@ -312,7 +337,9 @@ export interface IHttpClientUnixSocketOptions extends IHttpClientOptionsBase {
|
|
|
312
337
|
|
|
313
338
|
export type IHttpClientOptions = IHttpClientNetworkOptions | IHttpClientUnixSocketOptions;
|
|
314
339
|
|
|
315
|
-
export function createLegacyHttpClient<TAPIs extends Shared.IObject>(
|
|
340
|
+
export function createLegacyHttpClient<TAPIs extends Shared.IObject>(
|
|
341
|
+
opts: IHttpClientOptions,
|
|
342
|
+
): ILegacyHttpClient<TAPIs> {
|
|
316
343
|
|
|
317
344
|
return new TvLegacyHttpClient(
|
|
318
345
|
opts.https ? $Https.request : $Http.request,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2025 Angus.Fenying <fenying@litert.org>
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -57,10 +57,28 @@ export interface IHttpGatewayOptions {
|
|
|
57
57
|
backlog?: number;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
export interface IRegisterListenerOptions {
|
|
61
|
+
|
|
62
|
+
onErrorCallback: (e: Error) => void;
|
|
63
|
+
|
|
64
|
+
onRequestCallback: (req: Http.IncomingMessage, resp: Http.ServerResponse) => void;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface IRegisterListenerResult {
|
|
68
|
+
|
|
69
|
+
stop?: () => void | Promise<void>;
|
|
70
|
+
|
|
71
|
+
start?: () => void | Promise<void>;
|
|
72
|
+
|
|
73
|
+
readonly running: boolean;
|
|
74
|
+
}
|
|
75
|
+
|
|
60
76
|
class LegacyHttpGateway extends EventEmitter implements dT.IGateway {
|
|
61
77
|
|
|
78
|
+
private readonly _listener: IRegisterListenerResult;
|
|
79
|
+
|
|
62
80
|
public constructor(
|
|
63
|
-
|
|
81
|
+
registerListener: (opts: IRegisterListenerOptions) => IRegisterListenerResult,
|
|
64
82
|
private readonly _server: dT.IServer,
|
|
65
83
|
) {
|
|
66
84
|
|
|
@@ -71,9 +89,10 @@ class LegacyHttpGateway extends EventEmitter implements dT.IGateway {
|
|
|
71
89
|
throw new TypeError('Legacy HTTP gateway only supports JSON encoding');
|
|
72
90
|
}
|
|
73
91
|
|
|
74
|
-
this._listener
|
|
75
|
-
|
|
76
|
-
|
|
92
|
+
this._listener = registerListener({
|
|
93
|
+
onErrorCallback: (e) => this.emit('error', e),
|
|
94
|
+
onRequestCallback: this._onRequest,
|
|
95
|
+
});
|
|
77
96
|
}
|
|
78
97
|
|
|
79
98
|
private _sendResponse(resp: Http.ServerResponse, data: string): void {
|
|
@@ -157,7 +176,7 @@ class LegacyHttpGateway extends EventEmitter implements dT.IGateway {
|
|
|
157
176
|
|
|
158
177
|
let input: any;
|
|
159
178
|
|
|
160
|
-
if (offset !== length
|
|
179
|
+
if (offset !== length) {
|
|
161
180
|
|
|
162
181
|
refuseBadRequest(resp);
|
|
163
182
|
return;
|
|
@@ -212,6 +231,19 @@ class LegacyHttpGateway extends EventEmitter implements dT.IGateway {
|
|
|
212
231
|
recvAt
|
|
213
232
|
));
|
|
214
233
|
}
|
|
234
|
+
else if (result instanceof Shared.ProtocolError) {
|
|
235
|
+
|
|
236
|
+
this._sendResponse(resp, encoder.encodeApiErrorResponse(
|
|
237
|
+
input.rid,
|
|
238
|
+
v1.EResponseCode.SYSTEM_ERROR,
|
|
239
|
+
JSON.stringify({
|
|
240
|
+
name: result.name,
|
|
241
|
+
message: result.message,
|
|
242
|
+
data: result.data,
|
|
243
|
+
}),
|
|
244
|
+
recvAt
|
|
245
|
+
));
|
|
246
|
+
}
|
|
215
247
|
else {
|
|
216
248
|
|
|
217
249
|
this._sendResponse(resp, encoder.encodeApiErrorResponse(
|
|
@@ -256,7 +288,7 @@ class LegacyHttpGateway extends EventEmitter implements dT.IGateway {
|
|
|
256
288
|
return;
|
|
257
289
|
}
|
|
258
290
|
|
|
259
|
-
await this._listener.start();
|
|
291
|
+
await this._listener.start?.();
|
|
260
292
|
}
|
|
261
293
|
|
|
262
294
|
public async stop(): Promise<void> {
|
|
@@ -266,14 +298,43 @@ class LegacyHttpGateway extends EventEmitter implements dT.IGateway {
|
|
|
266
298
|
return Promise.resolve();
|
|
267
299
|
}
|
|
268
300
|
|
|
269
|
-
await this._listener.stop();
|
|
301
|
+
await this._listener.stop?.();
|
|
270
302
|
}
|
|
271
303
|
}
|
|
272
304
|
|
|
305
|
+
/**
|
|
306
|
+
* Create a legacy HTTP gateway, binding to a built-in simple HTTP server.
|
|
307
|
+
*
|
|
308
|
+
* > When using built-in HTTP server, the api will ignore headers, path and query string in the URL.
|
|
309
|
+
*
|
|
310
|
+
* @param listener The built-in HTTP listener to bind to.
|
|
311
|
+
* @param server The server to process the requests.
|
|
312
|
+
*/
|
|
273
313
|
export function createLegacyHttpGateway(
|
|
274
314
|
listener: Listener.IHttpListener,
|
|
275
315
|
server: dT.IServer
|
|
276
316
|
): dT.IGateway {
|
|
277
317
|
|
|
278
|
-
return new LegacyHttpGateway(
|
|
318
|
+
return new LegacyHttpGateway((o) => {
|
|
319
|
+
listener.on('error', o.onErrorCallback);
|
|
320
|
+
listener.setLegacyApiProcessor(o.onRequestCallback);
|
|
321
|
+
return listener;
|
|
322
|
+
}, server);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Create a legacy HTTP gateway, binding to a custom HTTP server.
|
|
327
|
+
*
|
|
328
|
+
* > When using a custom HTTP server, it's able to preprocess the request before passing to the server, like
|
|
329
|
+
* > authentication, rate limiting, etc.
|
|
330
|
+
*
|
|
331
|
+
* @param registerListener The function to register the listener to the custom HTTP server.
|
|
332
|
+
* @param server The server to process the requests.
|
|
333
|
+
*/
|
|
334
|
+
export function createCustomLegacyHttpGateway(
|
|
335
|
+
registerListener: (opts: IRegisterListenerOptions) => IRegisterListenerResult,
|
|
336
|
+
server: dT.IServer
|
|
337
|
+
): dT.IGateway {
|
|
338
|
+
|
|
339
|
+
return new LegacyHttpGateway(registerListener, server);
|
|
279
340
|
}
|
|
@@ -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)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright
|
|
2
|
+
* Copyright 2025 Angus.Fenying <fenying@litert.org>
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -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)
|