1 |
|
2 | import {STATUS_CODES as p} from "worktop";
|
3 | import {byteLength as d} from "worktop/utils";
|
4 | function r(t) {
|
5 | let e = p[t];
|
6 | return new Response(e, {
|
7 | status: t,
|
8 | statusText: e,
|
9 | headers: {
|
10 | Connection: "close",
|
11 | "Content-Type": "text/plain",
|
12 | "Content-Length": "" + d(e)
|
13 | }
|
14 | });
|
15 | }
|
16 |
|
17 |
|
18 | var f = function(t) {
|
19 | if (t.method !== "GET")
|
20 | return r(405);
|
21 | let e = t.headers.get("upgrade");
|
22 | if (e !== "websocket")
|
23 | return r(426);
|
24 | if (e = (t.headers.get("sec-websocket-key") || "").trim(), !/^[+/0-9A-Za-z]{22}==$/.test(e))
|
25 | return r(400);
|
26 | if (e = t.headers.get("sec-websocket-version"), e !== "13")
|
27 | return r(400);
|
28 | };
|
29 | function v(t) {
|
30 | return function(e, a) {
|
31 | let s = f(e, a);
|
32 | if (s)
|
33 | return s;
|
34 | let {0: l, 1: n} = new WebSocketPair(), u = {};
|
35 | function i(o) {
|
36 | return t(e, {
|
37 | send: n.send.bind(n),
|
38 | close: n.close.bind(n),
|
39 | context: u,
|
40 | event: o
|
41 | });
|
42 | }
|
43 | async function c(o) {
|
44 | try {
|
45 | await i(o);
|
46 | } finally {
|
47 | n.close();
|
48 | }
|
49 | }
|
50 | return n.accept(), n.addEventListener("close", c), n.addEventListener("message", i), n.addEventListener("error", c), new Response(null, {
|
51 | status: 101,
|
52 | statusText: "Switching Protocols",
|
53 | webSocket: l
|
54 | });
|
55 | };
|
56 | }
|
57 | export {
|
58 | f as connect,
|
59 | v as listen
|
60 | };
|