@@ -88,7 +88,6 @@ import {
88
88
} from "../util/header-utils" ;
89
89
import { AbortError } from "../rules/requests/request-handlers" ;
90
90
import { WebSocketRuleData , WebSocketRule } from "../rules/websockets/websocket-rule" ;
91
- import { RejectWebSocketHandler , WebSocketHandler } from "../rules/websockets/websocket-handlers" ;
92
91
import { SocksServerOptions } from "./socks-server" ;
93
92
94
93
type ExtendedRawRequest = ( http . IncomingMessage | http2 . Http2ServerRequest ) & {
@@ -125,8 +124,6 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
125
124
126
125
private readonly initialDebugSetting : boolean ;
127
126
128
- private readonly defaultWsHandler ! : WebSocketHandler ;
129
-
130
127
constructor ( options : MockttpOptions = { } ) {
131
128
super ( options ) ;
132
129
@@ -139,8 +136,6 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
139
136
this . maxBodySize = options . maxBodySize ?? Infinity ;
140
137
this . eventEmitter = new EventEmitter ( ) ;
141
138
142
- this . defaultWsHandler = new RejectWebSocketHandler ( 503 , "Request for unmocked endpoint" ) ;
143
-
144
139
this . app = connect ( ) ;
145
140
146
141
if ( this . corsOptions ) {
@@ -858,18 +853,7 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
858
853
: undefined
859
854
} ) ;
860
855
} else {
861
- // Unmatched requests get passed through untouched automatically. This exists for
862
- // historical/backward-compat reasons, to match the initial WS implementation, and
863
- // will probably be removed to match handleRequest in future.
864
- await this . defaultWsHandler . handle (
865
- request as OngoingRequest & http . IncomingMessage ,
866
- socket ,
867
- head ,
868
- { emitEventCallback : ( this . eventEmitter . listenerCount ( 'rule-event' ) !== 0 )
869
- ? ( type , event ) => this . announceRuleEventAsync ( request . id , nextRule ! . id , type , event )
870
- : undefined
871
- }
872
- ) ;
856
+ await this . sendUnmatchedWebSocketError ( request , socket , head ) ;
873
857
}
874
858
} catch ( e ) {
875
859
if ( e instanceof AbortError ) {
@@ -951,6 +935,23 @@ ${await this.suggestRule(request)}`
951
935
response . end ( await this . getUnmatchedRequestExplanation ( request ) ) ;
952
936
}
953
937
938
+ private async sendUnmatchedWebSocketError (
939
+ request : OngoingRequest ,
940
+ socket : net . Socket ,
941
+ head : Buffer
942
+ ) {
943
+ const errorBody = await this . getUnmatchedRequestExplanation ( request ) ;
944
+ socket . on ( 'error' , ( ) => { } ) ; // Best efforts, we don't care about failures here.
945
+ socket . end ( [
946
+ 'HTTP/1.1 503 Request for unmocked endpoint' ,
947
+ 'Connection: close' ,
948
+ 'Content-Type: text/plain'
949
+ ] . join ( '\r\n' ) +
950
+ '\r\n\r\n' +
951
+ errorBody ) ;
952
+ socket . destroy ( ) ;
953
+ }
954
+
954
955
private async sendWebSocketErrorResponse ( socket : net . Socket , error : unknown ) {
955
956
if ( socket . writable ) {
956
957
socket . end (
0 commit comments