@litert/televoke 1.0.0-1 → 1.0.0-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,13 +17,27 @@
17
17
  import * as $Https from 'https';
18
18
  import * as C from './Client.decl';
19
19
  import * as Shared from '../shared';
20
- export interface IHttpClientNetworkOptions extends $Https.RequestOptions {
20
+ interface IHttpClientOptionsBase extends $Https.RequestOptions {
21
21
  /**
22
22
  * Whether to use HTTPS.
23
23
  *
24
24
  * @default false
25
25
  */
26
26
  https?: boolean;
27
+ /**
28
+ * Wrap the API name before sending to server.
29
+ *
30
+ * @default null
31
+ */
32
+ apiNameWrapper?: (name: string) => string;
33
+ /**
34
+ * Whether to retry on connection reset.
35
+ *
36
+ * @default true
37
+ */
38
+ retryOnConnReset?: boolean;
39
+ }
40
+ export interface IHttpClientNetworkOptions extends IHttpClientOptionsBase {
27
41
  /**
28
42
  * The hostname of HTTP server.
29
43
  *
@@ -36,27 +50,14 @@ export interface IHttpClientNetworkOptions extends $Https.RequestOptions {
36
50
  * @default 80 or 443
37
51
  */
38
52
  port?: number;
39
- /**
40
- * The path to the RPC entry.
41
- *
42
- * @default '/'
43
- */
44
- path?: string;
45
- apiNameWrapper?: (name: string) => string;
46
53
  }
47
- export interface IHttpClientUnixSocketOptions extends $Https.RequestOptions {
48
- /**
49
- * Whether to use HTTPS.
50
- *
51
- * > Always `false` for Unix domain socket.
52
- */
53
- https?: false;
54
+ export interface IHttpClientUnixSocketOptions extends IHttpClientOptionsBase {
54
55
  /**
55
56
  * The path of Unix domain socket to connect to.
56
57
  */
57
58
  socketPath: string;
58
- apiNameWrapper?: (name: string) => string;
59
59
  }
60
60
  export type IHttpClientOptions = IHttpClientNetworkOptions | IHttpClientUnixSocketOptions;
61
61
  export declare function createLegacyHttpClient<TAPIs extends Shared.IObject>(opts: IHttpClientOptions): C.IClient<TAPIs>;
62
+ export {};
62
63
  //# sourceMappingURL=LegacyHttpClient.impl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LegacyHttpClient.impl.d.ts","sourceRoot":"","sources":["../../src/lib/client/LegacyHttpClient.impl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;EAcE;;AAGF,OAAO,KAAK,MAAM,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AA8LpC,MAAM,WAAW,yBAA0B,SAAQ,MAAM,CAAC,cAAc;IAEpE;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7C;AAED,MAAM,WAAW,4BAA6B,SAAQ,MAAM,CAAC,cAAc;IAEvE;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7C;AAED,MAAM,MAAM,kBAAkB,GAAG,yBAAyB,GAAG,4BAA4B,CAAC;AAE1F,wBAAgB,sBAAsB,CAAC,KAAK,SAAS,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,kBAAkB,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAgB/G"}
1
+ {"version":3,"file":"LegacyHttpClient.impl.d.ts","sourceRoot":"","sources":["../../src/lib/client/LegacyHttpClient.impl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;EAcE;;AAGF,OAAO,KAAK,MAAM,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AAkNpC,UAAU,sBAAuB,SAAQ,MAAM,CAAC,cAAc;IAE1D;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAE1C;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IAErE;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA6B,SAAQ,sBAAsB;IAExE;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,kBAAkB,GAAG,yBAAyB,GAAG,4BAA4B,CAAC;AAE1F,wBAAgB,sBAAsB,CAAC,KAAK,SAAS,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,kBAAkB,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAiB/G"}
@@ -26,11 +26,12 @@ const HTTP_HEADER_TV_VER = 'x-tv-ver';
26
26
  const DEFAULT_TIMEOUT = 30000;
27
27
  const disabledStreamManager = Shared.createDisabledStreamManagerFactory()(null);
28
28
  class TvLegacyHttpClient extends node_events_1.EventEmitter {
29
- constructor(_request, _opts, _agent, _apiNameWrapper) {
29
+ constructor(_request, _opts, _agent, _retryOnConnReset = true, _apiNameWrapper) {
30
30
  super();
31
31
  this._request = _request;
32
32
  this._opts = _opts;
33
33
  this._agent = _agent;
34
+ this._retryOnConnReset = _retryOnConnReset;
34
35
  this._apiNameWrapper = _apiNameWrapper;
35
36
  this.writable = true;
36
37
  this.ended = false;
@@ -52,14 +53,27 @@ class TvLegacyHttpClient extends node_events_1.EventEmitter {
52
53
  ping() {
53
54
  return Promise.reject(new Shared.errors.cmd_not_impl());
54
55
  }
55
- invoke(api, ...args) {
56
+ async invoke(api, ...args) {
57
+ try {
58
+ return await this._invoke(api, ...args);
59
+ }
60
+ catch (e) {
61
+ if (this._retryOnConnReset && e?.code === 'ECONNRESET') {
62
+ return this._invoke(api, ...args);
63
+ }
64
+ else {
65
+ throw e;
66
+ }
67
+ }
68
+ }
69
+ _invoke(api, ...args) {
56
70
  const CST = Date.now();
57
71
  const content = JSON.stringify({
58
72
  ttl: this._opts.timeout ?? DEFAULT_TIMEOUT,
59
73
  rid: 0,
60
74
  cst: CST,
61
75
  args,
62
- api: this._apiNameWrapper ? this._apiNameWrapper(api) : api
76
+ api: this._apiNameWrapper?.(api) ?? api
63
77
  });
64
78
  return new Promise((resolve, reject) => {
65
79
  const length = Buffer.byteLength(content);
@@ -150,14 +164,14 @@ class TvLegacyHttpClient extends node_events_1.EventEmitter {
150
164
  }
151
165
  function createLegacyHttpClient(opts) {
152
166
  return new TvLegacyHttpClient(opts.https ? $Https.request : $Http.request, opts, opts.https ? new $Https.Agent({
153
- maxSockets: 0,
154
- keepAlive: true,
155
- keepAliveMsecs: DEFAULT_TIMEOUT
167
+ 'maxSockets': 0,
168
+ 'keepAlive': true,
169
+ 'keepAliveMsecs': DEFAULT_TIMEOUT
156
170
  }) : new $Http.Agent({
157
- maxSockets: 0,
158
- keepAlive: true,
159
- keepAliveMsecs: DEFAULT_TIMEOUT
160
- }), opts.apiNameWrapper);
171
+ 'maxSockets': 0,
172
+ 'keepAlive': true,
173
+ 'keepAliveMsecs': DEFAULT_TIMEOUT
174
+ }), opts.retryOnConnReset, opts.apiNameWrapper);
161
175
  }
162
176
  exports.createLegacyHttpClient = createLegacyHttpClient;
163
177
  //# sourceMappingURL=LegacyHttpClient.impl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LegacyHttpClient.impl.js","sourceRoot":"","sources":["../../src/lib/client/LegacyHttpClient.impl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LegacyHttpClient.impl.js","sourceRoot":"","sources":["../../src/lib/client/LegacyHttpClient.impl.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;AAEF,8BAA8B;AAC9B,gCAAgC;AAEhC,oCAAoC;AACpC,6CAA6C;AAC7C,6CAA2C;AAE3C,MAAM,0BAA0B,GAAG,gBAAgB,CAAC;AACpD,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAEtC,MAAM,eAAe,GAAG,KAAM,CAAC;AAE/B,MAAM,qBAAqB,GAAG,MAAM,CAAC,kCAAkC,EAAE,CAAC,IAAW,CAAC,CAAC;AAEvF,MAAM,kBAAmB,SAAQ,0BAAY;IAIzC,YACqB,QAAuF,EACvF,KAA4B,EAC5B,MAAmB,EACnB,oBAA6B,IAAI,EACjC,eAA0C;QAG3D,KAAK,EAAE,CAAC;QAPS,aAAQ,GAAR,QAAQ,CAA+E;QACvF,UAAK,GAAL,KAAK,CAAuB;QAC5B,WAAM,GAAN,MAAM,CAAa;QACnB,sBAAiB,GAAjB,iBAAiB,CAAgB;QACjC,oBAAe,GAAf,eAAe,CAA2B;QAgB/C,aAAQ,GAAY,IAAI,CAAC;QAEzB,UAAK,GAAY,KAAK,CAAC;QAEvB,aAAQ,GAAY,KAAK,CAAC;QAE1B,gBAAW,GAAG,IAAI,CAAC;IAlBnC,CAAC;IAED,IAAW,OAAO;QAEd,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC;IACjD,CAAC;IAED,IAAW,OAAO;QAEd,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAUM,eAAe;QAElB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,CAAC;IAEM,WAAW;QAEd,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,CAAC;IAEM,IAAI;QAEP,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAQ,EAAE,GAAG,IAAW;QAExC,IAAI;YAEA,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;SAC3C;QACD,OAAO,CAAC,EAAE;YAEN,IAAI,IAAI,CAAC,iBAAiB,IAAK,CAAS,EAAE,IAAI,KAAK,YAAY,EAAE;gBAE7D,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;aACrC;iBACI;gBAED,MAAM,CAAC,CAAC;aACX;SACJ;IACL,CAAC;IAEO,OAAO,CAAC,GAAQ,EAAE,GAAG,IAAW;QAEpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,eAAe;YAC1C,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,GAAG;YACR,IAAI;YACJ,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG;SAC1C,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAEnC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAE1C,IAAI,MAAM,GAAG,EAAE,CAAC,eAAe,EAAE;gBAE7B,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;gBACzE,OAAO;aACV;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACtB,GAAG,IAAI,CAAC,KAAK;gBACb,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;oBACrB,CAAC,0BAA0B,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;oBACxD,CAAC,kBAAkB,CAAC,EAAE,CAAC;iBAC1B;aACJ,EAAE,CAAC,IAAI,EAAE,EAAE;gBAER,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAE;oBAE3C,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;oBAC7C,OAAO;iBACV;gBAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBAElE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,eAAe,EAAE,EAAE,iCAAiC;oBAEjG,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;oBACzE,OAAO;iBACV;gBAED,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAEvC,IAAI,MAAM,GAAW,CAAC,CAAC;gBAEvB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;oBAE9B,MAAM,KAAK,GAAG,MAAM,CAAC;oBAErB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;oBAE3B,IAAI,MAAM,GAAG,MAAM,EAAE;wBAEjB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;wBAC/B,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;wBAChC,IAAI,CAAC,OAAO,EAAE,CAAC;wBAEf,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC;wBACjF,OAAO;qBACV;oBAED,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAE3B,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBAEd,IAAI,IAA2B,CAAC;oBAEhC,IAAI;wBAEA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAU,CAAC,CAAC;qBACjC;oBACD,OAAO,CAAC,EAAE;wBAEN,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;4BACtC,MAAM,EAAE,cAAc;4BACtB,GAAG,EAAE,GAAG;yBACX,EAAE,CAAC,CAAC,CAAC,CAAC;wBACP,OAAO;qBACV;oBAED,QAAQ,IAAI,CAAC,IAAI,EAAE;wBACf,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE;4BACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACnB,MAAM;wBACV,KAAK,EAAE,CAAC,aAAa,CAAC,OAAO;4BACzB,MAAM,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;4BAC9C,MAAM;wBACV,KAAK,EAAE,CAAC,aAAa,CAAC,aAAa;4BAC/B,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;4BACjD,MAAM;wBACV,KAAK,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC;wBAC1C,KAAK,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC;wBACnC;4BACI,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;gCAC7B,GAAG,EAAE,GAAG,IAAI;6BACf,CAAC,CAAC,CAAC;4BACJ,MAAM;qBACb;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;gBACrB,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;oBAC7B,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;iBACrD,CAAC,CAAC,CAAC;YACR,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAE1B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,OAAO;QAEV,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAEM,KAAK;QAER,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAEtB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACJ;AAqDD,SAAgB,sBAAsB,CAA+B,IAAwB;IAEzF,OAAO,IAAI,kBAAkB,CACzB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAC3C,IAAI,EACJ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;QAC1B,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE,eAAe;KACpC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;QACjB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE,eAAe;KACpC,CAAC,EACF,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,cAAc,CACtB,CAAC;AACN,CAAC;AAjBD,wDAiBC"}
@@ -15,11 +15,21 @@
15
15
  */
16
16
  import type * as Listener from '../http-listener';
17
17
  import type * as dT from '../Transporter.decl';
18
+ export interface IWebSocketGatewayOptions {
19
+ /**
20
+ * The timeout of WebSocket connections.
21
+ *
22
+ * > Set to 0 to disable timeout.
23
+ *
24
+ * @default 60000
25
+ */
26
+ timeout?: number;
27
+ }
18
28
  /**
19
29
  * Create a WebSocket gateway.
20
30
  *
21
31
  * @param listener The HTTP(S) listener object.
22
32
  * @param server The televoke server object.
23
33
  */
24
- export declare function createWebsocketGateway(listener: Listener.IHttpListener, server: dT.IServer): dT.IGateway;
34
+ export declare function createWebsocketGateway(listener: Listener.IHttpListener, server: dT.IServer, options?: IWebSocketGatewayOptions): dT.IGateway;
25
35
  //# sourceMappingURL=WebSocket.Server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebSocket.Server.d.ts","sourceRoot":"","sources":["../../../src/lib/transporters/websocket/WebSocket.Server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;EAcE;AAIF,OAAO,KAAK,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAsF/C;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAClC,QAAQ,EAAE,QAAQ,CAAC,aAAa,EAChC,MAAM,EAAE,EAAE,CAAC,OAAO,GACnB,EAAE,CAAC,QAAQ,CAGb"}
1
+ {"version":3,"file":"WebSocket.Server.d.ts","sourceRoot":"","sources":["../../../src/lib/transporters/websocket/WebSocket.Server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;EAcE;AAIF,OAAO,KAAK,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAwF/C,MAAM,WAAW,wBAAwB;IAErC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAClC,QAAQ,EAAE,QAAQ,CAAC,aAAa,EAChC,MAAM,EAAE,EAAE,CAAC,OAAO,EAClB,OAAO,GAAE,wBAA6B,GACvC,EAAE,CAAC,QAAQ,CAGb"}
@@ -21,7 +21,7 @@ const dWS = require("./WebSocket.decl");
21
21
  const node_events_1 = require("node:events");
22
22
  const WebSocket_Transporter_1 = require("./WebSocket.Transporter");
23
23
  class WebSocketGateway extends node_events_1.EventEmitter {
24
- constructor(_listener, _server) {
24
+ constructor(_listener, _server, timeout) {
25
25
  super();
26
26
  this._listener = _listener;
27
27
  this._server = _server;
@@ -56,6 +56,7 @@ class WebSocketGateway extends node_events_1.EventEmitter {
56
56
  .setUpgradeProcessor(this._onUpgrade);
57
57
  this._wsServer = LibWS.createServer({
58
58
  liteFrameMode: true,
59
+ timeout,
59
60
  });
60
61
  }
61
62
  get running() {
@@ -80,8 +81,8 @@ class WebSocketGateway extends node_events_1.EventEmitter {
80
81
  * @param listener The HTTP(S) listener object.
81
82
  * @param server The televoke server object.
82
83
  */
83
- function createWebsocketGateway(listener, server) {
84
- return new WebSocketGateway(listener, server);
84
+ function createWebsocketGateway(listener, server, options = {}) {
85
+ return new WebSocketGateway(listener, server, options.timeout);
85
86
  }
86
87
  exports.createWebsocketGateway = createWebsocketGateway;
87
88
  //# sourceMappingURL=WebSocket.Server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebSocket.Server.js","sourceRoot":"","sources":["../../../src/lib/transporters/websocket/WebSocket.Server.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;AAEF,2CAA2C;AAC3C,wCAAwC;AAGxC,6CAA2C;AAC3C,mEAA+D;AAE/D,MAAM,gBAAiB,SAAQ,0BAAY;IAIvC,YACqB,SAAiC,EACjC,OAAmB;QAGpC,KAAK,EAAE,CAAC;QAJS,cAAS,GAAT,SAAS,CAAwB;QACjC,YAAO,GAAP,OAAO,CAAY;QAcvB,eAAU,GAA+B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YAEtE,IAAI,GAAG,GAAsB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAE,CAAC;YAEzE,IAAI,CAAC,GAAG,EAAE;gBAEN,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;oBAClB,SAAS,EAAE,GAAG;oBACd,QAAQ,EAAE,MAAa;iBAC1B,CAAC,CAAC;gBACH,OAAO;aACV;YAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAErB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;aACf;YAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE;gBAE3C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;oBAClB,SAAS,EAAE,GAAG;oBACd,QAAQ,EAAE,MAAa;iBAC1B,CAAC,CAAC;gBACH,OAAO;aACV;YAED,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC7B,SAAS,EAAE,GAAG;gBACd,QAAQ,EAAE,MAAa;gBACvB,aAAa,EAAE,GAAG,CAAC,sBAAsB;aAC5C,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,4CAAoB,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;QACrF,CAAC,CAAC;QA3CE,IAAI,CAAC,SAAS;aACT,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;aACzC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC;YAChC,aAAa,EAAE,IAAI;SACtB,CAAC,CAAC;IACP,CAAC;IAsCD,IAAW,OAAO;QAEd,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,KAAK;QAEd,IAAI,IAAI,CAAC,OAAO,EAAE;YAEd,OAAO;SACV;QAED,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,IAAI;QAEb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAEf,OAAO;SACV;QAED,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;CACJ;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CAClC,QAAgC,EAChC,MAAkB;IAGlB,OAAO,IAAI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAND,wDAMC"}
1
+ {"version":3,"file":"WebSocket.Server.js","sourceRoot":"","sources":["../../../src/lib/transporters/websocket/WebSocket.Server.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;EAcE;;;AAEF,2CAA2C;AAC3C,wCAAwC;AAGxC,6CAA2C;AAC3C,mEAA+D;AAE/D,MAAM,gBAAiB,SAAQ,0BAAY;IAIvC,YACqB,SAAiC,EACjC,OAAmB,EACpC,OAAgB;QAGhB,KAAK,EAAE,CAAC;QALS,cAAS,GAAT,SAAS,CAAwB;QACjC,YAAO,GAAP,OAAO,CAAY;QAgBvB,eAAU,GAA+B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YAEtE,IAAI,GAAG,GAAsB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAE,CAAC;YAEzE,IAAI,CAAC,GAAG,EAAE;gBAEN,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;oBAClB,SAAS,EAAE,GAAG;oBACd,QAAQ,EAAE,MAAa;iBAC1B,CAAC,CAAC;gBACH,OAAO;aACV;YAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAErB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;aACf;YAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE;gBAE3C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;oBAClB,SAAS,EAAE,GAAG;oBACd,QAAQ,EAAE,MAAa;iBAC1B,CAAC,CAAC;gBACH,OAAO;aACV;YAED,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC7B,SAAS,EAAE,GAAG;gBACd,QAAQ,EAAE,MAAa;gBACvB,aAAa,EAAE,GAAG,CAAC,sBAAsB;aAC5C,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,4CAAoB,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;QACrF,CAAC,CAAC;QA5CE,IAAI,CAAC,SAAS;aACT,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;aACzC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC;YAChC,aAAa,EAAE,IAAI;YACnB,OAAO;SACV,CAAC,CAAC;IACP,CAAC;IAsCD,IAAW,OAAO;QAEd,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,KAAK;QAEd,IAAI,IAAI,CAAC,OAAO,EAAE;YAEd,OAAO;SACV;QAED,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,IAAI;QAEb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAEf,OAAO;SACV;QAED,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;CACJ;AAcD;;;;;GAKG;AACH,SAAgB,sBAAsB,CAClC,QAAgC,EAChC,MAAkB,EAClB,UAAoC,EAAE;IAGtC,OAAO,IAAI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AACnE,CAAC;AAPD,wDAOC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@litert/televoke",
3
- "version": "1.0.0-1",
3
+ "version": "1.0.0-2",
4
4
  "description": "A simple RPC service framework.",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -35,7 +35,7 @@
35
35
  "@commitlint/cli": "^18.4.1",
36
36
  "@commitlint/config-conventional": "^18.4.0",
37
37
  "@litert/eslint-plugin-rules": "^0.1.6",
38
- "@litert/lwdfx": "^1.1.1",
38
+ "@litert/lwdfx": "^1.1.2",
39
39
  "@litert/websocket": "^0.1.0",
40
40
  "@types/mocha": "^10.0.4",
41
41
  "@types/node": "^20.9.0",
@@ -36,7 +36,8 @@ class TvLegacyHttpClient extends EventEmitter implements C.IClient<any> {
36
36
  private readonly _request: (opts: any, cb: (resp: $Http.IncomingMessage) => void) => $Http.ClientRequest,
37
37
  private readonly _opts: $Https.RequestOptions,
38
38
  private readonly _agent: $Http.Agent,
39
- private readonly _apiNameWrapper?: (name: string) => string
39
+ private readonly _retryOnConnReset: boolean = true,
40
+ private readonly _apiNameWrapper?: (name: string) => string,
40
41
  ) {
41
42
 
42
43
  super();
@@ -75,7 +76,26 @@ class TvLegacyHttpClient extends EventEmitter implements C.IClient<any> {
75
76
  return Promise.reject(new Shared.errors.cmd_not_impl());
76
77
  }
77
78
 
78
- public invoke(api: any, ...args: any[]): Promise<any> {
79
+ public async invoke(api: any, ...args: any[]): Promise<any> {
80
+
81
+ try {
82
+
83
+ return await this._invoke(api, ...args);
84
+ }
85
+ catch (e) {
86
+
87
+ if (this._retryOnConnReset && (e as any)?.code === 'ECONNRESET') {
88
+
89
+ return this._invoke(api, ...args);
90
+ }
91
+ else {
92
+
93
+ throw e;
94
+ }
95
+ }
96
+ }
97
+
98
+ private _invoke(api: any, ...args: any[]): Promise<any> {
79
99
 
80
100
  const CST = Date.now();
81
101
 
@@ -84,7 +104,7 @@ class TvLegacyHttpClient extends EventEmitter implements C.IClient<any> {
84
104
  rid: 0,
85
105
  cst: CST,
86
106
  args,
87
- api: this._apiNameWrapper ? this._apiNameWrapper(api) : api
107
+ api: this._apiNameWrapper?.(api) ?? api
88
108
  });
89
109
 
90
110
  return new Promise((resolve, reject) => {
@@ -207,7 +227,7 @@ class TvLegacyHttpClient extends EventEmitter implements C.IClient<any> {
207
227
  }
208
228
  }
209
229
 
210
- export interface IHttpClientNetworkOptions extends $Https.RequestOptions {
230
+ interface IHttpClientOptionsBase extends $Https.RequestOptions {
211
231
 
212
232
  /**
213
233
  * Whether to use HTTPS.
@@ -217,44 +237,43 @@ export interface IHttpClientNetworkOptions extends $Https.RequestOptions {
217
237
  https?: boolean;
218
238
 
219
239
  /**
220
- * The hostname of HTTP server.
240
+ * Wrap the API name before sending to server.
221
241
  *
222
- * @default 'localhost'
242
+ * @default null
223
243
  */
224
- hostname: string;
244
+ apiNameWrapper?: (name: string) => string;
225
245
 
226
246
  /**
227
- * The port of HTTP server.
247
+ * Whether to retry on connection reset.
228
248
  *
229
- * @default 80 or 443
249
+ * @default true
230
250
  */
231
- port?: number;
251
+ retryOnConnReset?: boolean;
252
+ }
253
+
254
+ export interface IHttpClientNetworkOptions extends IHttpClientOptionsBase {
232
255
 
233
256
  /**
234
- * The path to the RPC entry.
257
+ * The hostname of HTTP server.
235
258
  *
236
- * @default '/'
259
+ * @default 'localhost'
237
260
  */
238
- path?: string;
239
-
240
- apiNameWrapper?: (name: string) => string;
241
- }
242
-
243
- export interface IHttpClientUnixSocketOptions extends $Https.RequestOptions {
261
+ hostname: string;
244
262
 
245
263
  /**
246
- * Whether to use HTTPS.
264
+ * The port of HTTP server.
247
265
  *
248
- * > Always `false` for Unix domain socket.
266
+ * @default 80 or 443
249
267
  */
250
- https?: false;
268
+ port?: number;
269
+ }
270
+
271
+ export interface IHttpClientUnixSocketOptions extends IHttpClientOptionsBase {
251
272
 
252
273
  /**
253
274
  * The path of Unix domain socket to connect to.
254
275
  */
255
276
  socketPath: string;
256
-
257
- apiNameWrapper?: (name: string) => string;
258
277
  }
259
278
 
260
279
  export type IHttpClientOptions = IHttpClientNetworkOptions | IHttpClientUnixSocketOptions;
@@ -265,14 +284,15 @@ export function createLegacyHttpClient<TAPIs extends Shared.IObject>(opts: IHttp
265
284
  opts.https ? $Https.request : $Http.request,
266
285
  opts,
267
286
  opts.https ? new $Https.Agent({
268
- maxSockets: 0,
269
- keepAlive: true,
270
- keepAliveMsecs: DEFAULT_TIMEOUT
287
+ 'maxSockets': 0,
288
+ 'keepAlive': true,
289
+ 'keepAliveMsecs': DEFAULT_TIMEOUT
271
290
  }) : new $Http.Agent({
272
- maxSockets: 0,
273
- keepAlive: true,
274
- keepAliveMsecs: DEFAULT_TIMEOUT
291
+ 'maxSockets': 0,
292
+ 'keepAlive': true,
293
+ 'keepAliveMsecs': DEFAULT_TIMEOUT
275
294
  }),
276
- opts.apiNameWrapper
295
+ opts.retryOnConnReset,
296
+ opts.apiNameWrapper,
277
297
  );
278
298
  }
@@ -28,6 +28,7 @@ class WebSocketGateway extends EventEmitter implements dT.IGateway {
28
28
  public constructor(
29
29
  private readonly _listener: Listener.IHttpListener,
30
30
  private readonly _server: dT.IServer,
31
+ timeout?: number,
31
32
  ) {
32
33
 
33
34
  super();
@@ -38,6 +39,7 @@ class WebSocketGateway extends EventEmitter implements dT.IGateway {
38
39
 
39
40
  this._wsServer = LibWS.createServer({
40
41
  liteFrameMode: true,
42
+ timeout,
41
43
  });
42
44
  }
43
45
 
@@ -103,6 +105,18 @@ class WebSocketGateway extends EventEmitter implements dT.IGateway {
103
105
  }
104
106
  }
105
107
 
108
+ export interface IWebSocketGatewayOptions {
109
+
110
+ /**
111
+ * The timeout of WebSocket connections.
112
+ *
113
+ * > Set to 0 to disable timeout.
114
+ *
115
+ * @default 60000
116
+ */
117
+ timeout?: number;
118
+ }
119
+
106
120
  /**
107
121
  * Create a WebSocket gateway.
108
122
  *
@@ -112,7 +126,8 @@ class WebSocketGateway extends EventEmitter implements dT.IGateway {
112
126
  export function createWebsocketGateway(
113
127
  listener: Listener.IHttpListener,
114
128
  server: dT.IServer,
129
+ options: IWebSocketGatewayOptions = {}
115
130
  ): dT.IGateway {
116
131
 
117
- return new WebSocketGateway(listener, server);
132
+ return new WebSocketGateway(listener, server, options.timeout);
118
133
  }