| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- // src/adapter/cloudflare-workers/websocket.ts
- import { WSContext, defineWebSocketHelper } from "../../helper/websocket/index.js";
- var upgradeWebSocket = defineWebSocketHelper(async (c, events) => {
- const upgradeHeader = c.req.header("Upgrade");
- if (upgradeHeader !== "websocket") {
- return;
- }
- const webSocketPair = new WebSocketPair();
- const client = webSocketPair[0];
- const server = webSocketPair[1];
- const wsContext = new WSContext({
- close: (code, reason) => server.close(code, reason),
- get protocol() {
- return server.protocol;
- },
- raw: server,
- get readyState() {
- return server.readyState;
- },
- url: server.url ? new URL(server.url) : null,
- send: (source) => server.send(source)
- });
- if (events.onClose) {
- server.addEventListener("close", (evt) => events.onClose?.(evt, wsContext));
- }
- if (events.onMessage) {
- server.addEventListener("message", (evt) => events.onMessage?.(evt, wsContext));
- }
- if (events.onError) {
- server.addEventListener("error", (evt) => events.onError?.(evt, wsContext));
- }
- server.accept?.();
- return new Response(null, {
- status: 101,
- // @ts-expect-error - webSocket is not typed
- webSocket: client
- });
- });
- export {
- upgradeWebSocket
- };
|