mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 19:08:15 +00:00
fix(ext/node): handle 'upgrade' responses (#19412)
This commit adds support for "upgrade" events in "node:http" "ClientRequest". Currently only "Websocket" upgrades are handled. Thanks to this change package like "npm:puppeteer" and "npm:discord" should work. Closes https://github.com/denoland/deno/issues/18913 Closes https://github.com/denoland/deno/issues/17847
This commit is contained in:
parent
44bd59c05e
commit
07cbec4a82
4 changed files with 298 additions and 19 deletions
|
@ -649,3 +649,53 @@ Deno.test("[node/http] HTTPS server", async () => {
|
|||
await Promise.all([promise, promise2]);
|
||||
client.close();
|
||||
});
|
||||
|
||||
Deno.test(
|
||||
"[node/http] client upgrade",
|
||||
{ permissions: { net: true } },
|
||||
async () => {
|
||||
const promise = deferred();
|
||||
const server = http.createServer((_req, res) => {
|
||||
res.writeHead(200, { "Content-Type": "text/plain" });
|
||||
res.end("okay");
|
||||
});
|
||||
// @ts-ignore it's a socket for real
|
||||
let serverSocket;
|
||||
server.on("upgrade", (_req, socket, _head) => {
|
||||
socket.write(
|
||||
"HTTP/1.1 101 Web Socket Protocol Handshake\r\n" +
|
||||
"Upgrade: WebSocket\r\n" +
|
||||
"Connection: Upgrade\r\n" +
|
||||
"\r\n",
|
||||
);
|
||||
serverSocket = socket;
|
||||
});
|
||||
|
||||
// Now that server is running
|
||||
server.listen(1337, "127.0.0.1", () => {
|
||||
// make a request
|
||||
const options = {
|
||||
port: 1337,
|
||||
host: "127.0.0.1",
|
||||
headers: {
|
||||
"Connection": "Upgrade",
|
||||
"Upgrade": "websocket",
|
||||
},
|
||||
};
|
||||
|
||||
const req = http.request(options);
|
||||
req.end();
|
||||
|
||||
req.on("upgrade", (_res, socket, _upgradeHead) => {
|
||||
socket.end();
|
||||
// @ts-ignore it's a socket for real
|
||||
serverSocket!.end();
|
||||
server.close(() => {
|
||||
promise.resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
await promise;
|
||||
},
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue