// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
///
///
declare namespace Deno {
export interface RequestEvent {
readonly request: Request;
respondWith(r: Response | Promise): Promise;
}
export interface HttpConn extends AsyncIterable {
readonly rid: number;
nextRequest(): Promise;
close(): void;
}
export interface WebSocketUpgrade {
response: Response;
websocket: WebSocket;
}
export interface UpgradeWebSocketOptions {
protocol?: string;
}
/** **UNSTABLE**: new API, yet to be vetted.
*
* Used to upgrade an incoming HTTP request to a WebSocket.
*
* Given a request, returns a pair of WebSocket and Response. The original
* request must be responded to with the returned response for the websocket
* upgrade to be successful.
*
* ```ts
* const conn = await Deno.connect({ port: 80, hostname: "127.0.0.1" });
* const httpConn = Deno.serveHttp(conn);
* const e = await httpConn.nextRequest();
* if (e) {
* const { websocket, response } = Deno.upgradeWebSocket(e.request);
* websocket.onopen = () => {
* websocket.send("Hello World!");
* };
* websocket.onmessage = (e) => {
* console.log(e.data);
* websocket.close();
* };
* websocket.onclose = () => console.log("WebSocket has been closed.");
* websocket.onerror = (e) => console.error("WebSocket error:", e.message);
* e.respondWith(response);
* }
* ```
*
* If the request body is disturbed (read from) before the upgrade is
* completed, upgrading fails.
*
* This operation does not yet consume the request or open the websocket. This
* only happens once the returned response has been passed to `respondWith`.
*/
export function upgradeWebSocket(
request: Request,
options?: UpgradeWebSocketOptions,
): WebSocketUpgrade;
}