1
1
import type { File , TaskResultPack } from '@vitest/runner'
2
2
3
+ import type { IncomingMessage } from 'node:http'
3
4
import type { ViteDevServer } from 'vite'
4
5
import type { WebSocket } from 'ws'
5
6
import type { Vitest } from '../node/core'
@@ -21,6 +22,7 @@ import { API_PATH } from '../constants'
21
22
import { getModuleGraph } from '../utils/graph'
22
23
import { stringifyReplace } from '../utils/serialization'
23
24
import { parseErrorStacktrace } from '../utils/source-map'
25
+ import { isValidApiRequest } from './check'
24
26
25
27
export function setup ( ctx : Vitest , _server ?: ViteDevServer ) {
26
28
const wss = new WebSocketServer ( { noServer : true } )
@@ -29,7 +31,7 @@ export function setup(ctx: Vitest, _server?: ViteDevServer) {
29
31
30
32
const server = _server || ctx . server
31
33
32
- server . httpServer ?. on ( 'upgrade' , ( request , socket , head ) => {
34
+ server . httpServer ?. on ( 'upgrade' , ( request : IncomingMessage , socket , head ) => {
33
35
if ( ! request . url ) {
34
36
return
35
37
}
@@ -39,6 +41,11 @@ export function setup(ctx: Vitest, _server?: ViteDevServer) {
39
41
return
40
42
}
41
43
44
+ if ( ! isValidApiRequest ( ctx . config , request ) ) {
45
+ socket . destroy ( )
46
+ return
47
+ }
48
+
42
49
wss . handleUpgrade ( request , socket , head , ( ws ) => {
43
50
wss . emit ( 'connection' , ws , request )
44
51
setupClient ( ws )
0 commit comments