@@ -17,12 +17,13 @@ import type { CorsOptions, CorsOptionsDelegate } from "cors";
17
17
import type { Duplex } from "stream" ;
18
18
import { WebTransport } from "./transports/webtransport" ;
19
19
import { createPacketDecoderStream } from "engine.io-parser" ;
20
+ import type { EngineRequest } from "./transport" ;
20
21
21
22
const debug = debugModule ( "engine" ) ;
22
23
23
24
const kResponseHeaders = Symbol ( "responseHeaders" ) ;
24
25
25
- type Transport = "polling" | "websocket" ;
26
+ type Transport = "polling" | "websocket" | "webtransport" ;
26
27
27
28
export interface AttachOptions {
28
29
/**
@@ -169,7 +170,6 @@ export abstract class BaseServer extends EventEmitter {
169
170
* Server constructor.
170
171
*
171
172
* @param {Object } opts - options
172
- * @api public
173
173
*/
174
174
constructor ( opts : ServerOptions = { } ) {
175
175
super ( ) ;
@@ -246,21 +246,25 @@ export abstract class BaseServer extends EventEmitter {
246
246
* Returns a list of available transports for upgrade given a certain transport.
247
247
*
248
248
* @return {Array }
249
- * @api public
250
249
*/
251
- public upgrades ( transport ) {
250
+ public upgrades ( transport : string ) {
252
251
if ( ! this . opts . allowUpgrades ) return [ ] ;
253
252
return transports [ transport ] . upgradesTo || [ ] ;
254
253
}
255
254
256
255
/**
257
256
* Verifies a request.
258
257
*
259
- * @param {http.IncomingMessage }
260
- * @return {Boolean } whether the request is valid
261
- * @api private
258
+ * @param {EngineRequest } req
259
+ * @param upgrade - whether it's an upgrade request
260
+ * @param fn
261
+ * @protected
262
262
*/
263
- protected verify ( req , upgrade , fn ) {
263
+ protected verify (
264
+ req : any ,
265
+ upgrade : boolean ,
266
+ fn : ( errorCode ?: number , errorContext ?: any ) => void
267
+ ) {
264
268
// transport check
265
269
const transport = req . _query . transport ;
266
270
// WebTransport does not go through the verify() method, see the onWebTransportSession() method
@@ -384,8 +388,6 @@ export abstract class BaseServer extends EventEmitter {
384
388
385
389
/**
386
390
* Closes all clients.
387
- *
388
- * @api public
389
391
*/
390
392
public close ( ) {
391
393
debug ( "closing all open clients" ) ;
@@ -404,23 +406,26 @@ export abstract class BaseServer extends EventEmitter {
404
406
* generate a socket id.
405
407
* Overwrite this method to generate your custom socket id
406
408
*
407
- * @param {Object } request object
408
- * @api public
409
+ * @param {IncomingMessage } req - the request object
409
410
*/
410
- public generateId ( req ) {
411
+ public generateId ( req : IncomingMessage ) {
411
412
return base64id . generateId ( ) ;
412
413
}
413
414
414
415
/**
415
416
* Handshakes a new client.
416
417
*
417
- * @param {String } transport name
418
- * @param {Object } request object
418
+ * @param {String } transportName
419
+ * @param {Object } req - the request object
419
420
* @param {Function } closeConnection
420
421
*
421
- * @api protected
422
+ * @protected
422
423
*/
423
- protected async handshake ( transportName , req , closeConnection ) {
424
+ protected async handshake (
425
+ transportName : string ,
426
+ req : any ,
427
+ closeConnection : ( errorCode ?: number , errorContext ?: any ) => void
428
+ ) {
424
429
const protocol = req . _query . EIO === "4" ? 4 : 3 ; // 3rd revision by default
425
430
if ( protocol === 3 && ! this . opts . allowEIO3 ) {
426
431
debug ( "unsupported protocol version" ) ;
@@ -661,7 +666,7 @@ export class Server extends BaseServer {
661
666
/**
662
667
* Initialize websocket server
663
668
*
664
- * @api protected
669
+ * @protected
665
670
*/
666
671
protected init ( ) {
667
672
if ( ! ~ this . opts . transports . indexOf ( "websocket" ) ) return ;
@@ -708,30 +713,30 @@ export class Server extends BaseServer {
708
713
/**
709
714
* Prepares a request by processing the query string.
710
715
*
711
- * @api private
716
+ * @private
712
717
*/
713
- private prepare ( req ) {
718
+ private prepare ( req : EngineRequest ) {
714
719
// try to leverage pre-existing `req._query` (e.g: from connect)
715
720
if ( ! req . _query ) {
716
- req . _query = ~ req . url . indexOf ( "?" ) ? qs . parse ( parse ( req . url ) . query ) : { } ;
721
+ req . _query = (
722
+ ~ req . url . indexOf ( "?" ) ? qs . parse ( parse ( req . url ) . query ) : { }
723
+ ) as Record < string , string > ;
717
724
}
718
725
}
719
726
720
- protected createTransport ( transportName , req ) {
727
+ protected createTransport ( transportName : string , req : IncomingMessage ) {
721
728
return new transports [ transportName ] ( req ) ;
722
729
}
723
730
724
731
/**
725
732
* Handles an Engine.IO HTTP request.
726
733
*
727
- * @param {IncomingMessage } req
734
+ * @param {EngineRequest } req
728
735
* @param {ServerResponse } res
729
- * @api public
730
736
*/
731
- public handleRequest ( req : IncomingMessage , res : ServerResponse ) {
737
+ public handleRequest ( req : EngineRequest , res : ServerResponse ) {
732
738
debug ( 'handling "%s" http request "%s"' , req . method , req . url ) ;
733
739
this . prepare ( req ) ;
734
- // @ts -ignore
735
740
req . res = res ;
736
741
737
742
const callback = ( errorCode , errorContext ) => {
@@ -746,15 +751,13 @@ export class Server extends BaseServer {
746
751
return ;
747
752
}
748
753
749
- // @ts -ignore
750
754
if ( req . _query . sid ) {
751
755
debug ( "setting new request for existing client" ) ;
752
756
// @ts -ignore
753
757
this . clients [ req . _query . sid ] . transport . onRequest ( req ) ;
754
758
} else {
755
759
const closeConnection = ( errorCode , errorContext ) =>
756
760
abortRequest ( res , errorCode , errorContext ) ;
757
- // @ts -ignore
758
761
this . handshake ( req . _query . transport , req , closeConnection ) ;
759
762
}
760
763
} ;
@@ -770,11 +773,9 @@ export class Server extends BaseServer {
770
773
771
774
/**
772
775
* Handles an Engine.IO HTTP Upgrade.
773
- *
774
- * @api public
775
776
*/
776
777
public handleUpgrade (
777
- req : IncomingMessage ,
778
+ req : EngineRequest ,
778
779
socket : Duplex ,
779
780
upgradeHead : Buffer
780
781
) {
@@ -819,7 +820,7 @@ export class Server extends BaseServer {
819
820
* Called upon a ws.io connection.
820
821
*
821
822
* @param {ws.Socket } websocket
822
- * @api private
823
+ * @private
823
824
*/
824
825
private onWebSocket ( req , socket , websocket ) {
825
826
websocket . on ( "error" , onUpgradeError ) ;
@@ -877,7 +878,6 @@ export class Server extends BaseServer {
877
878
*
878
879
* @param {http.Server } server
879
880
* @param {Object } options
880
- * @api public
881
881
*/
882
882
public attach ( server : HttpServer , options : AttachOptions = { } ) {
883
883
const path = this . _computePath ( options ) ;
@@ -898,7 +898,7 @@ export class Server extends BaseServer {
898
898
server . on ( "request" , ( req , res ) => {
899
899
if ( check ( req ) ) {
900
900
debug ( 'intercepting request for path "%s"' , path ) ;
901
- this . handleRequest ( req , res ) ;
901
+ this . handleRequest ( req as EngineRequest , res ) ;
902
902
} else {
903
903
let i = 0 ;
904
904
const l = listeners . length ;
@@ -911,7 +911,7 @@ export class Server extends BaseServer {
911
911
if ( ~ this . opts . transports . indexOf ( "websocket" ) ) {
912
912
server . on ( "upgrade" , ( req , socket , head ) => {
913
913
if ( check ( req ) ) {
914
- this . handleUpgrade ( req , socket , head ) ;
914
+ this . handleUpgrade ( req as EngineRequest , socket , head ) ;
915
915
} else if ( false !== options . destroyUpgrade ) {
916
916
// default node behavior is to disconnect when no handlers
917
917
// but by adding a handler, we prevent that
@@ -939,7 +939,7 @@ export class Server extends BaseServer {
939
939
* @param errorCode - the error code
940
940
* @param errorContext - additional error context
941
941
*
942
- * @api private
942
+ * @private
943
943
*/
944
944
945
945
function abortRequest ( res , errorCode , errorContext ) {
@@ -964,8 +964,6 @@ function abortRequest(res, errorCode, errorContext) {
964
964
* @param {net.Socket } socket
965
965
* @param {string } errorCode - the error code
966
966
* @param {object } errorContext - additional error context
967
- *
968
- * @api private
969
967
*/
970
968
971
969
function abortUpgrade (
0 commit comments