@@ -58,14 +58,21 @@ class RPCServer extends EventTarget {
5858 * path and `JSONRPCResponse` to `Uint8Array` on the reverse path.
5959 * @param obj.sensitive - If true, sanitises any rpc error messages of any
6060 * sensitive information.
61+ * @param obj.streamKeepAliveTimeoutTime - Time before a connection is cleaned up due to no activity. This is the
62+ * value used if the handler doesn't specify its own timeout time. This timeout is advisory and only results in a
63+ * signal sent to the handler. Stream is forced to end after the timeoutForceCloseTime. Defaults to 60,000
64+ * milliseconds.
65+ * @param obj.timeoutForceCloseTime - Time before the stream is forced to end after the initial timeout time.
66+ * The stream will be forced to close after this amount of time after the initial timeout. This is a grace period for
67+ * the handler to handle timeout before it is forced to end. Defaults to 2,000 milliseconds.
6168 * @param obj.logger
6269 */
6370 public static async createRPCServer ( {
6471 manifest,
6572 middlewareFactory = middlewareUtils . defaultServerMiddlewareWrapper ( ) ,
6673 sensitive = false ,
67- defaultTimeout = 60_000 , // 1 minuet
68- forceEndDelay = 2_000 , // 2 seconds
74+ streamKeepAliveTimeoutTime = 60_000 , // 1 minute
75+ timeoutForceCloseTime = 2_000 , // 2 seconds
6976 logger = new Logger ( this . name ) ,
7077 } : {
7178 manifest : ServerManifest ;
@@ -76,17 +83,17 @@ class RPCServer extends EventTarget {
7683 JSONRPCResponse
7784 > ;
7885 sensitive ?: boolean ;
79- defaultTimeout ?: number ;
80- forceEndDelay ?: number ;
86+ streamKeepAliveTimeoutTime ?: number ;
87+ timeoutForceCloseTime ?: number ;
8188 logger ?: Logger ;
8289 } ) : Promise < RPCServer > {
8390 logger . info ( `Creating ${ this . name } ` ) ;
8491 const rpcServer = new this ( {
8592 manifest,
8693 middlewareFactory,
8794 sensitive,
88- defaultTimeout ,
89- forceEndDelay ,
95+ streamKeepAliveTimeoutTime : streamKeepAliveTimeoutTime ,
96+ timeoutForceCloseTime : timeoutForceCloseTime ,
9097 logger,
9198 } ) ;
9299 logger . info ( `Created ${ this . name } ` ) ;
@@ -96,8 +103,8 @@ class RPCServer extends EventTarget {
96103 protected logger : Logger ;
97104 protected handlerMap : Map < string , RawHandlerImplementation > = new Map ( ) ;
98105 protected defaultTimeoutMap : Map < string , number | undefined > = new Map ( ) ;
99- protected defaultTimeout : number ;
100- protected forceEndDelay : number ;
106+ protected streamKeepAliveTimeoutTime : number ;
107+ protected timeoutForceCloseTime : number ;
101108 protected activeStreams : Set < PromiseCancellable < void > > = new Set ( ) ;
102109 protected sensitive : boolean ;
103110 protected middlewareFactory : MiddlewareFactory <
@@ -111,8 +118,8 @@ class RPCServer extends EventTarget {
111118 manifest,
112119 middlewareFactory,
113120 sensitive,
114- defaultTimeout = 60_000 , // 1 minuet
115- forceEndDelay = 2_000 , // 2 seconds
121+ streamKeepAliveTimeoutTime = 60_000 , // 1 minuet
122+ timeoutForceCloseTime = 2_000 , // 2 seconds
116123 logger,
117124 } : {
118125 manifest : ServerManifest ;
@@ -122,8 +129,8 @@ class RPCServer extends EventTarget {
122129 Uint8Array ,
123130 JSONRPCResponseResult
124131 > ;
125- defaultTimeout ?: number ;
126- forceEndDelay ?: number ;
132+ streamKeepAliveTimeoutTime ?: number ;
133+ timeoutForceCloseTime ?: number ;
127134 sensitive : boolean ;
128135 logger : Logger ;
129136 } ) {
@@ -181,8 +188,8 @@ class RPCServer extends EventTarget {
181188 }
182189 this . middlewareFactory = middlewareFactory ;
183190 this . sensitive = sensitive ;
184- this . defaultTimeout = defaultTimeout ;
185- this . forceEndDelay = forceEndDelay ;
191+ this . streamKeepAliveTimeoutTime = streamKeepAliveTimeoutTime ;
192+ this . timeoutForceCloseTime = timeoutForceCloseTime ;
186193 this . logger = logger ;
187194 }
188195
@@ -406,13 +413,13 @@ class RPCServer extends EventTarget {
406413 const forceStreamEndController = new AbortController ( ) ;
407414 // Setting up timeout timer logic
408415 const timer = new Timer ( {
409- delay : this . defaultTimeout ,
416+ delay : this . streamKeepAliveTimeoutTime ,
410417 handler : ( signal ) => {
411418 abortController . abort ( new rpcErrors . ErrorRpcTimedOut ( ) ) ;
412419 if ( signal . aborted ) return ;
413420 // Grace timer for force ending stream
414421 const graceTimer = new Timer ( {
415- delay : this . forceEndDelay ,
422+ delay : this . timeoutForceCloseTime ,
416423 handler : ( ) => {
417424 forceStreamEndController . abort ( ) ;
418425 } ,
@@ -489,7 +496,7 @@ class RPCServer extends EventTarget {
489496 }
490497 // Setting up Timeout logic
491498 const timeout = this . defaultTimeoutMap . get ( method ) ;
492- if ( timeout != null && timeout < this . defaultTimeout ) {
499+ if ( timeout != null && timeout < this . streamKeepAliveTimeoutTime ) {
493500 // Reset timeout with new delay if it is less than the default
494501 timer . reset ( timeout ) ;
495502 } else {
0 commit comments