@@ -88,7 +88,6 @@ import {
8888} from "../util/header-utils" ;
8989import { AbortError } from "../rules/requests/request-handlers" ;
9090import { WebSocketRuleData , WebSocketRule } from "../rules/websockets/websocket-rule" ;
91- import { RejectWebSocketHandler , WebSocketHandler } from "../rules/websockets/websocket-handlers" ;
9291import { SocksServerOptions } from "./socks-server" ;
9392
9493type ExtendedRawRequest = ( http . IncomingMessage | http2 . Http2ServerRequest ) & {
@@ -125,8 +124,6 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
125124
126125 private readonly initialDebugSetting : boolean ;
127126
128- private readonly defaultWsHandler ! : WebSocketHandler ;
129-
130127 constructor ( options : MockttpOptions = { } ) {
131128 super ( options ) ;
132129
@@ -139,8 +136,6 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
139136 this . maxBodySize = options . maxBodySize ?? Infinity ;
140137 this . eventEmitter = new EventEmitter ( ) ;
141138
142- this . defaultWsHandler = new RejectWebSocketHandler ( 503 , "Request for unmocked endpoint" ) ;
143-
144139 this . app = connect ( ) ;
145140
146141 if ( this . corsOptions ) {
@@ -858,18 +853,7 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
858853 : undefined
859854 } ) ;
860855 } 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 ) ;
873857 }
874858 } catch ( e ) {
875859 if ( e instanceof AbortError ) {
@@ -951,6 +935,23 @@ ${await this.suggestRule(request)}`
951935 response . end ( await this . getUnmatchedRequestExplanation ( request ) ) ;
952936 }
953937
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+
954955 private async sendWebSocketErrorResponse ( socket : net . Socket , error : unknown ) {
955956 if ( socket . writable ) {
956957 socket . end (
0 commit comments