crossws 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +36 -251
  2. package/adapters/uws.d.ts +2 -0
  3. package/dist/adapters/bun.cjs +52 -29
  4. package/dist/adapters/bun.d.cts +7 -14
  5. package/dist/adapters/bun.d.mts +7 -14
  6. package/dist/adapters/bun.d.ts +7 -14
  7. package/dist/adapters/bun.mjs +52 -29
  8. package/dist/adapters/cloudflare.cjs +26 -16
  9. package/dist/adapters/cloudflare.d.cts +3 -3
  10. package/dist/adapters/cloudflare.d.mts +3 -3
  11. package/dist/adapters/cloudflare.d.ts +3 -3
  12. package/dist/adapters/cloudflare.mjs +26 -16
  13. package/dist/adapters/deno.cjs +32 -17
  14. package/dist/adapters/deno.d.cts +7 -3
  15. package/dist/adapters/deno.d.mts +7 -3
  16. package/dist/adapters/deno.d.ts +7 -3
  17. package/dist/adapters/deno.mjs +31 -16
  18. package/dist/adapters/node.cjs +48 -22
  19. package/dist/adapters/node.d.cts +2 -2
  20. package/dist/adapters/node.d.mts +2 -2
  21. package/dist/adapters/node.d.ts +2 -2
  22. package/dist/adapters/node.mjs +47 -21
  23. package/dist/adapters/uws.cjs +146 -0
  24. package/dist/adapters/uws.d.cts +19 -0
  25. package/dist/adapters/uws.d.mts +19 -0
  26. package/dist/adapters/uws.d.ts +19 -0
  27. package/dist/adapters/uws.mjs +144 -0
  28. package/dist/index.cjs +6 -4
  29. package/dist/index.d.cts +65 -17
  30. package/dist/index.d.mts +65 -17
  31. package/dist/index.d.ts +65 -17
  32. package/dist/index.mjs +2 -1
  33. package/dist/shared/crossws.6009d265.cjs +156 -0
  34. package/dist/shared/crossws.6f7f02b3.mjs +8 -0
  35. package/dist/shared/crossws.a6b0a7cc.mjs +150 -0
  36. package/dist/shared/crossws.deae10fd.cjs +10 -0
  37. package/package.json +27 -5
  38. package/dist/shared/crossws.21e14e0d.cjs +0 -59
  39. package/dist/shared/crossws.9536f626.mjs +0 -54
@@ -1,34 +1,38 @@
1
1
  'use strict';
2
2
 
3
- const peer = require('../shared/crossws.21e14e0d.cjs');
3
+ const peer = require('../shared/crossws.6009d265.cjs');
4
+ const error = require('../shared/crossws.deae10fd.cjs');
4
5
 
5
6
  const cloudflare = peer.defineWebSocketAdapter(
6
- (hooks, opts = {}) => {
7
- const handleUpgrade = (request, env, context) => {
7
+ (hooks, options = {}) => {
8
+ const crossws = peer.createCrossWS(hooks, options);
9
+ const handleUpgrade = async (req, env, context) => {
8
10
  const pair = new WebSocketPair();
9
11
  const client = pair[0];
10
12
  const server = pair[1];
11
- const peer$1 = new CloudflareWebSocketPeer({
12
- cloudflare: { client, server, request, env, context }
13
+ const peer$1 = new CloudflarePeer({
14
+ cloudflare: { client, server, req, env, context }
13
15
  });
16
+ const { headers } = await crossws.upgrade(peer$1);
14
17
  server.accept();
15
- hooks["cloudflare:accept"]?.(peer$1);
16
- hooks.open?.(peer$1);
18
+ crossws.$("cloudflare:accept", peer$1);
19
+ crossws.open(peer$1);
17
20
  server.addEventListener("message", (event) => {
18
- hooks["cloudflare:message"]?.(peer$1, event);
19
- hooks.message?.(peer$1, new peer.WebSocketMessage(event.data));
21
+ crossws.$("cloudflare:message", peer$1, event);
22
+ crossws.message(peer$1, new peer.WSMessage(event.data));
20
23
  });
21
24
  server.addEventListener("error", (event) => {
22
- hooks["cloudflare:error"]?.(peer$1, event);
23
- hooks.error?.(peer$1, new peer.WebSocketError(event.error));
25
+ crossws.$("cloudflare:error", peer$1, event);
26
+ crossws.error(peer$1, new error.WebSocketError(event.error));
24
27
  });
25
28
  server.addEventListener("close", (event) => {
26
- hooks["cloudflare:close"]?.(peer$1, event);
27
- hooks.close?.(peer$1, { code: event.code, reason: event.reason });
29
+ crossws.$("cloudflare:close", peer$1, event);
30
+ crossws.close(peer$1, { code: event.code, reason: event.reason });
28
31
  });
29
32
  return new Response(null, {
30
33
  status: 101,
31
- webSocket: client
34
+ webSocket: client,
35
+ headers
32
36
  });
33
37
  };
34
38
  return {
@@ -36,15 +40,21 @@ const cloudflare = peer.defineWebSocketAdapter(
36
40
  };
37
41
  }
38
42
  );
39
- class CloudflareWebSocketPeer extends peer.WebSocketPeerBase {
43
+ class CloudflarePeer extends peer.WSPeer {
40
44
  get id() {
41
45
  return void 0;
42
46
  }
47
+ get url() {
48
+ return this.ctx.cloudflare.req.url;
49
+ }
50
+ get headers() {
51
+ return this.ctx.cloudflare.req.headers;
52
+ }
43
53
  get readyState() {
44
54
  return this.ctx.cloudflare.client.readyState;
45
55
  }
46
56
  send(message) {
47
- this.ctx.cloudflare.server.send(message);
57
+ this.ctx.cloudflare.server.send(peer.toBufferLike(message));
48
58
  return 0;
49
59
  }
50
60
  }
@@ -1,11 +1,11 @@
1
- import { WebSocketAdapter } from '../index.cjs';
1
+ import { CrossWSOptions, WebSocketAdapter } from '../index.cjs';
2
2
  import * as _cf from '@cloudflare/workers-types';
3
3
 
4
4
  type Env = Record<string, any>;
5
- interface AdapterOptions {
5
+ interface AdapterOptions extends CrossWSOptions {
6
6
  }
7
7
  interface Adapter {
8
- handleUpgrade(req: _cf.Request, env: Env, context: _cf.ExecutionContext): _cf.Response;
8
+ handleUpgrade(req: _cf.Request, env: Env, context: _cf.ExecutionContext): Promise<_cf.Response>;
9
9
  }
10
10
  declare const _default: WebSocketAdapter<Adapter, AdapterOptions>;
11
11
 
@@ -1,11 +1,11 @@
1
- import { WebSocketAdapter } from '../index.mjs';
1
+ import { CrossWSOptions, WebSocketAdapter } from '../index.mjs';
2
2
  import * as _cf from '@cloudflare/workers-types';
3
3
 
4
4
  type Env = Record<string, any>;
5
- interface AdapterOptions {
5
+ interface AdapterOptions extends CrossWSOptions {
6
6
  }
7
7
  interface Adapter {
8
- handleUpgrade(req: _cf.Request, env: Env, context: _cf.ExecutionContext): _cf.Response;
8
+ handleUpgrade(req: _cf.Request, env: Env, context: _cf.ExecutionContext): Promise<_cf.Response>;
9
9
  }
10
10
  declare const _default: WebSocketAdapter<Adapter, AdapterOptions>;
11
11
 
@@ -1,11 +1,11 @@
1
- import { WebSocketAdapter } from '../index.js';
1
+ import { CrossWSOptions, WebSocketAdapter } from '../index.js';
2
2
  import * as _cf from '@cloudflare/workers-types';
3
3
 
4
4
  type Env = Record<string, any>;
5
- interface AdapterOptions {
5
+ interface AdapterOptions extends CrossWSOptions {
6
6
  }
7
7
  interface Adapter {
8
- handleUpgrade(req: _cf.Request, env: Env, context: _cf.ExecutionContext): _cf.Response;
8
+ handleUpgrade(req: _cf.Request, env: Env, context: _cf.ExecutionContext): Promise<_cf.Response>;
9
9
  }
10
10
  declare const _default: WebSocketAdapter<Adapter, AdapterOptions>;
11
11
 
@@ -1,32 +1,36 @@
1
- import { d as defineWebSocketAdapter, a as WebSocketMessage, W as WebSocketError, b as WebSocketPeerBase } from '../shared/crossws.9536f626.mjs';
1
+ import { d as defineWebSocketAdapter, c as createCrossWS, W as WSMessage, a as WSPeer, t as toBufferLike } from '../shared/crossws.a6b0a7cc.mjs';
2
+ import { W as WebSocketError } from '../shared/crossws.6f7f02b3.mjs';
2
3
 
3
4
  const cloudflare = defineWebSocketAdapter(
4
- (hooks, opts = {}) => {
5
- const handleUpgrade = (request, env, context) => {
5
+ (hooks, options = {}) => {
6
+ const crossws = createCrossWS(hooks, options);
7
+ const handleUpgrade = async (req, env, context) => {
6
8
  const pair = new WebSocketPair();
7
9
  const client = pair[0];
8
10
  const server = pair[1];
9
- const peer = new CloudflareWebSocketPeer({
10
- cloudflare: { client, server, request, env, context }
11
+ const peer = new CloudflarePeer({
12
+ cloudflare: { client, server, req, env, context }
11
13
  });
14
+ const { headers } = await crossws.upgrade(peer);
12
15
  server.accept();
13
- hooks["cloudflare:accept"]?.(peer);
14
- hooks.open?.(peer);
16
+ crossws.$("cloudflare:accept", peer);
17
+ crossws.open(peer);
15
18
  server.addEventListener("message", (event) => {
16
- hooks["cloudflare:message"]?.(peer, event);
17
- hooks.message?.(peer, new WebSocketMessage(event.data));
19
+ crossws.$("cloudflare:message", peer, event);
20
+ crossws.message(peer, new WSMessage(event.data));
18
21
  });
19
22
  server.addEventListener("error", (event) => {
20
- hooks["cloudflare:error"]?.(peer, event);
21
- hooks.error?.(peer, new WebSocketError(event.error));
23
+ crossws.$("cloudflare:error", peer, event);
24
+ crossws.error(peer, new WebSocketError(event.error));
22
25
  });
23
26
  server.addEventListener("close", (event) => {
24
- hooks["cloudflare:close"]?.(peer, event);
25
- hooks.close?.(peer, { code: event.code, reason: event.reason });
27
+ crossws.$("cloudflare:close", peer, event);
28
+ crossws.close(peer, { code: event.code, reason: event.reason });
26
29
  });
27
30
  return new Response(null, {
28
31
  status: 101,
29
- webSocket: client
32
+ webSocket: client,
33
+ headers
30
34
  });
31
35
  };
32
36
  return {
@@ -34,15 +38,21 @@ const cloudflare = defineWebSocketAdapter(
34
38
  };
35
39
  }
36
40
  );
37
- class CloudflareWebSocketPeer extends WebSocketPeerBase {
41
+ class CloudflarePeer extends WSPeer {
38
42
  get id() {
39
43
  return void 0;
40
44
  }
45
+ get url() {
46
+ return this.ctx.cloudflare.req.url;
47
+ }
48
+ get headers() {
49
+ return this.ctx.cloudflare.req.headers;
50
+ }
41
51
  get readyState() {
42
52
  return this.ctx.cloudflare.client.readyState;
43
53
  }
44
54
  send(message) {
45
- this.ctx.cloudflare.server.send(message);
55
+ this.ctx.cloudflare.server.send(toBufferLike(message));
46
56
  return 0;
47
57
  }
48
58
  }
@@ -1,29 +1,38 @@
1
1
  'use strict';
2
2
 
3
- const peer = require('../shared/crossws.21e14e0d.cjs');
3
+ const peer = require('../shared/crossws.6009d265.cjs');
4
+ const error = require('../shared/crossws.deae10fd.cjs');
4
5
 
5
6
  const deno = peer.defineWebSocketAdapter(
6
- (hooks, opts = {}) => {
7
- const handleUpgrade = (request) => {
8
- const upgrade = Deno.upgradeWebSocket(request);
9
- const peer$1 = new DenoWebSocketPeer({
10
- deno: { ws: upgrade.socket, request }
7
+ (hooks, options = {}) => {
8
+ const crossws = peer.createCrossWS(hooks, options);
9
+ const handleUpgrade = async (req) => {
10
+ const { headers } = await crossws.upgrade({
11
+ url: req.url,
12
+ headers: req.headers
13
+ });
14
+ const upgrade = Deno.upgradeWebSocket(req, {
15
+ // @ts-expect-error https://github.com/denoland/deno/pull/22242
16
+ headers
17
+ });
18
+ const peer$1 = new DenoWSPeer({
19
+ deno: { ws: upgrade.socket, req }
11
20
  });
12
21
  upgrade.socket.addEventListener("open", () => {
13
- hooks["deno:open"]?.(peer$1);
14
- hooks.open?.(peer$1);
22
+ crossws.$("deno:open", peer$1);
23
+ crossws.open(peer$1);
15
24
  });
16
25
  upgrade.socket.addEventListener("message", (event) => {
17
- hooks["deno:message"]?.(peer$1, event);
18
- hooks.message?.(peer$1, new peer.WebSocketMessage(event.data));
26
+ crossws.$("deno:message", peer$1, event);
27
+ crossws.message(peer$1, new peer.WSMessage(event.data));
19
28
  });
20
29
  upgrade.socket.addEventListener("close", () => {
21
- hooks["deno:close"]?.(peer$1);
22
- hooks.close?.(peer$1, {});
30
+ crossws.$("deno:close", peer$1);
31
+ crossws.close(peer$1, {});
23
32
  });
24
- upgrade.socket.addEventListener("error", (error) => {
25
- hooks["deno:error"]?.(peer$1, error);
26
- hooks.error?.(peer$1, new peer.WebSocketError(error));
33
+ upgrade.socket.addEventListener("error", (error$1) => {
34
+ crossws.$("deno:error", peer$1, error$1);
35
+ crossws.error(peer$1, new error.WebSocketError(error$1));
27
36
  });
28
37
  return upgrade.response;
29
38
  };
@@ -32,15 +41,21 @@ const deno = peer.defineWebSocketAdapter(
32
41
  };
33
42
  }
34
43
  );
35
- class DenoWebSocketPeer extends peer.WebSocketPeerBase {
44
+ class DenoWSPeer extends peer.WSPeer {
36
45
  get id() {
37
46
  return this.ctx.deno.ws.remoteAddress;
38
47
  }
39
48
  get readyState() {
40
49
  return this.ctx.deno.ws.readyState;
41
50
  }
51
+ get url() {
52
+ return this.ctx.deno.req.url;
53
+ }
54
+ get headers() {
55
+ return this.ctx.deno.req.headers || new Headers();
56
+ }
42
57
  send(message) {
43
- this.ctx.deno.ws.send(message);
58
+ this.ctx.deno.ws.send(peer.toBufferLike(message));
44
59
  return 0;
45
60
  }
46
61
  }
@@ -1,9 +1,13 @@
1
- import { WebSocketAdapter } from '../index.cjs';
1
+ import { CrossWSOptions, WebSocketAdapter } from '../index.cjs';
2
+ import * as _deno_types from '@deno/types';
2
3
 
3
- interface AdapterOptions {
4
+ interface AdapterOptions extends CrossWSOptions {
4
5
  }
5
6
  interface Adapter {
6
- handleUpgrade(req: Request): Response;
7
+ handleUpgrade(req: Request): Promise<Response>;
8
+ }
9
+ declare global {
10
+ const Deno: typeof _deno_types.Deno;
7
11
  }
8
12
  declare const _default: WebSocketAdapter<Adapter, AdapterOptions>;
9
13
 
@@ -1,9 +1,13 @@
1
- import { WebSocketAdapter } from '../index.mjs';
1
+ import { CrossWSOptions, WebSocketAdapter } from '../index.mjs';
2
+ import * as _deno_types from '@deno/types';
2
3
 
3
- interface AdapterOptions {
4
+ interface AdapterOptions extends CrossWSOptions {
4
5
  }
5
6
  interface Adapter {
6
- handleUpgrade(req: Request): Response;
7
+ handleUpgrade(req: Request): Promise<Response>;
8
+ }
9
+ declare global {
10
+ const Deno: typeof _deno_types.Deno;
7
11
  }
8
12
  declare const _default: WebSocketAdapter<Adapter, AdapterOptions>;
9
13
 
@@ -1,9 +1,13 @@
1
- import { WebSocketAdapter } from '../index.js';
1
+ import { CrossWSOptions, WebSocketAdapter } from '../index.js';
2
+ import * as _deno_types from '@deno/types';
2
3
 
3
- interface AdapterOptions {
4
+ interface AdapterOptions extends CrossWSOptions {
4
5
  }
5
6
  interface Adapter {
6
- handleUpgrade(req: Request): Response;
7
+ handleUpgrade(req: Request): Promise<Response>;
8
+ }
9
+ declare global {
10
+ const Deno: typeof _deno_types.Deno;
7
11
  }
8
12
  declare const _default: WebSocketAdapter<Adapter, AdapterOptions>;
9
13
 
@@ -1,27 +1,36 @@
1
- import { d as defineWebSocketAdapter, a as WebSocketMessage, W as WebSocketError, b as WebSocketPeerBase } from '../shared/crossws.9536f626.mjs';
1
+ import { d as defineWebSocketAdapter, c as createCrossWS, W as WSMessage, a as WSPeer, t as toBufferLike } from '../shared/crossws.a6b0a7cc.mjs';
2
+ import { W as WebSocketError } from '../shared/crossws.6f7f02b3.mjs';
2
3
 
3
4
  const deno = defineWebSocketAdapter(
4
- (hooks, opts = {}) => {
5
- const handleUpgrade = (request) => {
6
- const upgrade = Deno.upgradeWebSocket(request);
7
- const peer = new DenoWebSocketPeer({
8
- deno: { ws: upgrade.socket, request }
5
+ (hooks, options = {}) => {
6
+ const crossws = createCrossWS(hooks, options);
7
+ const handleUpgrade = async (req) => {
8
+ const { headers } = await crossws.upgrade({
9
+ url: req.url,
10
+ headers: req.headers
11
+ });
12
+ const upgrade = Deno.upgradeWebSocket(req, {
13
+ // @ts-expect-error https://github.com/denoland/deno/pull/22242
14
+ headers
15
+ });
16
+ const peer = new DenoWSPeer({
17
+ deno: { ws: upgrade.socket, req }
9
18
  });
10
19
  upgrade.socket.addEventListener("open", () => {
11
- hooks["deno:open"]?.(peer);
12
- hooks.open?.(peer);
20
+ crossws.$("deno:open", peer);
21
+ crossws.open(peer);
13
22
  });
14
23
  upgrade.socket.addEventListener("message", (event) => {
15
- hooks["deno:message"]?.(peer, event);
16
- hooks.message?.(peer, new WebSocketMessage(event.data));
24
+ crossws.$("deno:message", peer, event);
25
+ crossws.message(peer, new WSMessage(event.data));
17
26
  });
18
27
  upgrade.socket.addEventListener("close", () => {
19
- hooks["deno:close"]?.(peer);
20
- hooks.close?.(peer, {});
28
+ crossws.$("deno:close", peer);
29
+ crossws.close(peer, {});
21
30
  });
22
31
  upgrade.socket.addEventListener("error", (error) => {
23
- hooks["deno:error"]?.(peer, error);
24
- hooks.error?.(peer, new WebSocketError(error));
32
+ crossws.$("deno:error", peer, error);
33
+ crossws.error(peer, new WebSocketError(error));
25
34
  });
26
35
  return upgrade.response;
27
36
  };
@@ -30,15 +39,21 @@ const deno = defineWebSocketAdapter(
30
39
  };
31
40
  }
32
41
  );
33
- class DenoWebSocketPeer extends WebSocketPeerBase {
42
+ class DenoWSPeer extends WSPeer {
34
43
  get id() {
35
44
  return this.ctx.deno.ws.remoteAddress;
36
45
  }
37
46
  get readyState() {
38
47
  return this.ctx.deno.ws.readyState;
39
48
  }
49
+ get url() {
50
+ return this.ctx.deno.req.url;
51
+ }
52
+ get headers() {
53
+ return this.ctx.deno.req.headers || new Headers();
54
+ }
40
55
  send(message) {
41
- this.ctx.deno.ws.send(message);
56
+ this.ctx.deno.ws.send(toBufferLike(message));
42
57
  return 0;
43
58
  }
44
59
  }
@@ -5,7 +5,8 @@ const websocket = require('../shared/crossws.2ed26345.cjs');
5
5
  const require$$0 = require('events');
6
6
  const require$$2 = require('http');
7
7
  const require$$1 = require('crypto');
8
- const peer = require('../shared/crossws.21e14e0d.cjs');
8
+ const peer = require('../shared/crossws.6009d265.cjs');
9
+ const error = require('../shared/crossws.deae10fd.cjs');
9
10
  require('https');
10
11
  require('net');
11
12
  require('tls');
@@ -620,53 +621,68 @@ function abortHandshakeOrEmitwsClientError(server, req, socket, code, message) {
620
621
  const _WebSocketServer = /*@__PURE__*/websocket.getDefaultExportFromCjs(websocketServer);
621
622
 
622
623
  const node = peer.defineWebSocketAdapter(
623
- (hooks, opts = {}) => {
624
- const wss = opts.wss || new _WebSocketServer({
624
+ (hooks, options = {}) => {
625
+ const crossws = peer.createCrossWS(hooks, options);
626
+ const wss = options.wss || new _WebSocketServer({
625
627
  noServer: true,
626
- ...opts.serverOptions
628
+ ...options.serverOptions
627
629
  });
628
630
  wss.on("connection", (ws, req) => {
629
- const peer$1 = new NodeWebSocketPeer({ node: { ws, req, server: wss } });
630
- hooks.open?.(peer$1);
631
+ const peer$1 = new NodeWSPeer({ node: { ws, req, server: wss } });
632
+ crossws.open(peer$1);
631
633
  ws.on("message", (data, isBinary) => {
632
- hooks["node:message"]?.(peer$1, data, isBinary);
634
+ crossws.$("node:message", peer$1, data, isBinary);
633
635
  if (Array.isArray(data)) {
634
636
  data = Buffer.concat(data);
635
637
  }
636
- hooks.message?.(peer$1, new peer.WebSocketMessage(data, isBinary));
638
+ crossws.message(peer$1, new peer.WSMessage(data, isBinary));
637
639
  });
638
- ws.on("error", (error) => {
639
- hooks["node:error"]?.(peer$1, error);
640
- hooks.error?.(peer$1, new peer.WebSocketError(error));
640
+ ws.on("error", (error$1) => {
641
+ crossws.$("node:error", peer$1, error$1);
642
+ crossws.error(peer$1, new error.WebSocketError(error$1));
641
643
  });
642
644
  ws.on("close", (code, reason) => {
643
- hooks["node:close"]?.(peer$1, code, reason);
644
- hooks.close?.(peer$1, {
645
+ crossws.$("node:close", peer$1, code, reason);
646
+ crossws.close(peer$1, {
645
647
  code,
646
648
  reason: reason?.toString()
647
649
  });
648
650
  });
649
651
  ws.on("open", () => {
650
- hooks["node:open"]?.(peer$1);
652
+ crossws.$("node:open", peer$1);
651
653
  });
652
654
  ws.on("ping", (data) => {
653
- hooks["node:ping"]?.(peer$1, data);
655
+ crossws.$("node:ping", peer$1, data);
654
656
  });
655
657
  ws.on("pong", (data) => {
656
- hooks["node:pong"]?.(peer$1, data);
658
+ crossws.$("node:pong", peer$1, data);
657
659
  });
658
660
  ws.on(
659
661
  "unexpected-response",
660
662
  (req2, res) => {
661
- hooks["node:unexpected-response"]?.(peer$1, req2, res);
663
+ crossws.$("node:unexpected-response", peer$1, req2, res);
662
664
  }
663
665
  );
664
666
  ws.on("upgrade", (req2) => {
665
- hooks["node:upgrade"]?.(peer$1, req2);
667
+ crossws.$("node:upgrade", peer$1, req2);
666
668
  });
667
669
  });
670
+ wss.on("headers", function(outgoingHeaders, req) {
671
+ const upgradeHeaders = req._upgradeHeaders;
672
+ if (upgradeHeaders) {
673
+ const _headers = new Headers(upgradeHeaders);
674
+ for (const [key, value] of _headers) {
675
+ outgoingHeaders.push(`${key}: ${value}`);
676
+ }
677
+ }
678
+ });
668
679
  return {
669
- handleUpgrade: (req, socket, head) => {
680
+ handleUpgrade: async (req, socket, head) => {
681
+ const { headers } = await crossws.upgrade({
682
+ url: req.url || "",
683
+ headers: req.headers
684
+ });
685
+ req._upgradeHeaders = headers;
670
686
  wss.handleUpgrade(req, socket, head, (ws) => {
671
687
  wss.emit("connection", ws, req);
672
688
  });
@@ -674,7 +690,7 @@ const node = peer.defineWebSocketAdapter(
674
690
  };
675
691
  }
676
692
  );
677
- class NodeWebSocketPeer extends peer.WebSocketPeerBase {
693
+ class NodeWSPeer extends peer.WSPeer {
678
694
  get id() {
679
695
  const socket = this.ctx.node.req.socket;
680
696
  if (!socket) {
@@ -683,11 +699,21 @@ class NodeWebSocketPeer extends peer.WebSocketPeerBase {
683
699
  const addr = socket.remoteFamily === "IPv6" ? `[${socket.remoteAddress}]` : socket.remoteAddress;
684
700
  return `${addr}:${socket.remotePort}`;
685
701
  }
702
+ get url() {
703
+ return this.ctx.node.req.url || "/";
704
+ }
705
+ get headers() {
706
+ return this.ctx.node.req.headers;
707
+ }
686
708
  get readyState() {
687
709
  return this.ctx.node.ws.readyState;
688
710
  }
689
- send(message, compress) {
690
- this.ctx.node.ws.send(message, { compress });
711
+ send(message, options) {
712
+ this.ctx.node.ws.send(peer.toBufferLike(message), {
713
+ compress: options?.compress,
714
+ binary: options?.binary,
715
+ ...options
716
+ });
691
717
  return 0;
692
718
  }
693
719
  }
@@ -1,4 +1,4 @@
1
- import { WebSocketAdapter } from '../index.cjs';
1
+ import { CrossWSOptions, WebSocketAdapter } from '../index.cjs';
2
2
  import { IncomingMessage as IncomingMessage$1 } from 'node:http';
3
3
  import { Duplex as Duplex$1 } from 'node:stream';
4
4
  import { EventEmitter } from 'events';
@@ -286,7 +286,7 @@ declare class Server<T extends typeof WebSocket = typeof WebSocket, U extends ty
286
286
  type WebSocketServer = Server;
287
287
  declare function createWebSocketStream(websocket: WebSocket, options?: DuplexOptions): Duplex;
288
288
 
289
- interface AdapterOptions {
289
+ interface AdapterOptions extends CrossWSOptions {
290
290
  wss?: WebSocketServer;
291
291
  serverOptions?: ServerOptions;
292
292
  }
@@ -1,4 +1,4 @@
1
- import { WebSocketAdapter } from '../index.mjs';
1
+ import { CrossWSOptions, WebSocketAdapter } from '../index.mjs';
2
2
  import { IncomingMessage as IncomingMessage$1 } from 'node:http';
3
3
  import { Duplex as Duplex$1 } from 'node:stream';
4
4
  import { EventEmitter } from 'events';
@@ -286,7 +286,7 @@ declare class Server<T extends typeof WebSocket = typeof WebSocket, U extends ty
286
286
  type WebSocketServer = Server;
287
287
  declare function createWebSocketStream(websocket: WebSocket, options?: DuplexOptions): Duplex;
288
288
 
289
- interface AdapterOptions {
289
+ interface AdapterOptions extends CrossWSOptions {
290
290
  wss?: WebSocketServer;
291
291
  serverOptions?: ServerOptions;
292
292
  }
@@ -1,4 +1,4 @@
1
- import { WebSocketAdapter } from '../index.js';
1
+ import { CrossWSOptions, WebSocketAdapter } from '../index.js';
2
2
  import { IncomingMessage as IncomingMessage$1 } from 'node:http';
3
3
  import { Duplex as Duplex$1 } from 'node:stream';
4
4
  import { EventEmitter } from 'events';
@@ -286,7 +286,7 @@ declare class Server<T extends typeof WebSocket = typeof WebSocket, U extends ty
286
286
  type WebSocketServer = Server;
287
287
  declare function createWebSocketStream(websocket: WebSocket, options?: DuplexOptions): Duplex;
288
288
 
289
- interface AdapterOptions {
289
+ interface AdapterOptions extends CrossWSOptions {
290
290
  wss?: WebSocketServer;
291
291
  serverOptions?: ServerOptions;
292
292
  }