| 17639 | redirect: "error" |
| 17640 | }); |
| 17641 | if (options.headers) { |
| 17642 | const headersList = getHeadersList(new Headers2(options.headers)); |
| 17643 | request.headersList = headersList; |
| 17644 | } |
| 17645 | const keyValue = crypto2.randomBytes(16).toString("base64"); |
| 17646 | request.headersList.append("sec-websocket-key", keyValue); |
| 17647 | request.headersList.append("sec-websocket-version", "13"); |
| 17648 | for (const protocol of protocols) { |
| 17649 | request.headersList.append("sec-websocket-protocol", protocol); |
| 17650 | } |
| 17651 | const permessageDeflate = "permessage-deflate; client_max_window_bits"; |
| 17652 | request.headersList.append("sec-websocket-extensions", permessageDeflate); |
| 17653 | const controller = fetching({ |
| 17654 | request, |
| 17655 | useParallelQueue: true, |
| 17656 | dispatcher: options.dispatcher, |
| 17657 | processResponse(response) { |
| 17658 | var _a, _b; |
| 17659 | if (response.type === "error" || response.status !== 101) { |
| 17660 | failWebsocketConnection(ws, "Received network error or non-101 status code."); |
| 17661 | return; |
| 17662 | } |
| 17663 | if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) { |
| 17664 | failWebsocketConnection(ws, "Server did not respond with sent protocols."); |
| 17665 | return; |
| 17666 | } |
| 17667 | if (((_a = response.headersList.get("Upgrade")) == null ? void 0 : _a.toLowerCase()) !== "websocket") { |
| 17668 | failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".'); |
| 17669 | return; |
| 17670 | } |
| 17671 | if (((_b = response.headersList.get("Connection")) == null ? void 0 : _b.toLowerCase()) !== "upgrade") { |
| 17672 | failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".'); |
| 17673 | return; |
| 17674 | } |