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.
- package/README.md +36 -251
- package/adapters/uws.d.ts +2 -0
- package/dist/adapters/bun.cjs +52 -29
- package/dist/adapters/bun.d.cts +7 -14
- package/dist/adapters/bun.d.mts +7 -14
- package/dist/adapters/bun.d.ts +7 -14
- package/dist/adapters/bun.mjs +52 -29
- package/dist/adapters/cloudflare.cjs +26 -16
- package/dist/adapters/cloudflare.d.cts +3 -3
- package/dist/adapters/cloudflare.d.mts +3 -3
- package/dist/adapters/cloudflare.d.ts +3 -3
- package/dist/adapters/cloudflare.mjs +26 -16
- package/dist/adapters/deno.cjs +32 -17
- package/dist/adapters/deno.d.cts +7 -3
- package/dist/adapters/deno.d.mts +7 -3
- package/dist/adapters/deno.d.ts +7 -3
- package/dist/adapters/deno.mjs +31 -16
- package/dist/adapters/node.cjs +48 -22
- package/dist/adapters/node.d.cts +2 -2
- package/dist/adapters/node.d.mts +2 -2
- package/dist/adapters/node.d.ts +2 -2
- package/dist/adapters/node.mjs +47 -21
- package/dist/adapters/uws.cjs +146 -0
- package/dist/adapters/uws.d.cts +19 -0
- package/dist/adapters/uws.d.mts +19 -0
- package/dist/adapters/uws.d.ts +19 -0
- package/dist/adapters/uws.mjs +144 -0
- package/dist/index.cjs +6 -4
- package/dist/index.d.cts +65 -17
- package/dist/index.d.mts +65 -17
- package/dist/index.d.ts +65 -17
- package/dist/index.mjs +2 -1
- package/dist/shared/crossws.6009d265.cjs +156 -0
- package/dist/shared/crossws.6f7f02b3.mjs +8 -0
- package/dist/shared/crossws.a6b0a7cc.mjs +150 -0
- package/dist/shared/crossws.deae10fd.cjs +10 -0
- package/package.json +27 -5
- package/dist/shared/crossws.21e14e0d.cjs +0 -59
- package/dist/shared/crossws.9536f626.mjs +0 -54
|
@@ -1,34 +1,38 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const peer = require('../shared/crossws.
|
|
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,
|
|
7
|
-
const
|
|
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
|
|
12
|
-
cloudflare: { client, server,
|
|
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
|
-
|
|
16
|
-
|
|
18
|
+
crossws.$("cloudflare:accept", peer$1);
|
|
19
|
+
crossws.open(peer$1);
|
|
17
20
|
server.addEventListener("message", (event) => {
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
23
|
-
|
|
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
|
-
|
|
27
|
-
|
|
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
|
|
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,
|
|
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,
|
|
5
|
-
const
|
|
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
|
|
10
|
-
cloudflare: { client, server,
|
|
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
|
-
|
|
14
|
-
|
|
16
|
+
crossws.$("cloudflare:accept", peer);
|
|
17
|
+
crossws.open(peer);
|
|
15
18
|
server.addEventListener("message", (event) => {
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
crossws.$("cloudflare:message", peer, event);
|
|
20
|
+
crossws.message(peer, new WSMessage(event.data));
|
|
18
21
|
});
|
|
19
22
|
server.addEventListener("error", (event) => {
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
crossws.$("cloudflare:error", peer, event);
|
|
24
|
+
crossws.error(peer, new WebSocketError(event.error));
|
|
22
25
|
});
|
|
23
26
|
server.addEventListener("close", (event) => {
|
|
24
|
-
|
|
25
|
-
|
|
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
|
|
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
|
}
|
package/dist/adapters/deno.cjs
CHANGED
|
@@ -1,29 +1,38 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const peer = require('../shared/crossws.
|
|
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,
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
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
|
-
|
|
14
|
-
|
|
22
|
+
crossws.$("deno:open", peer$1);
|
|
23
|
+
crossws.open(peer$1);
|
|
15
24
|
});
|
|
16
25
|
upgrade.socket.addEventListener("message", (event) => {
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
22
|
-
|
|
30
|
+
crossws.$("deno:close", peer$1);
|
|
31
|
+
crossws.close(peer$1, {});
|
|
23
32
|
});
|
|
24
|
-
upgrade.socket.addEventListener("error", (error) => {
|
|
25
|
-
|
|
26
|
-
|
|
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
|
|
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
|
}
|
package/dist/adapters/deno.d.cts
CHANGED
|
@@ -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
|
|
package/dist/adapters/deno.d.mts
CHANGED
|
@@ -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
|
|
package/dist/adapters/deno.d.ts
CHANGED
|
@@ -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
|
|
package/dist/adapters/deno.mjs
CHANGED
|
@@ -1,27 +1,36 @@
|
|
|
1
|
-
import { d as defineWebSocketAdapter,
|
|
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,
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
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
|
-
|
|
12
|
-
|
|
20
|
+
crossws.$("deno:open", peer);
|
|
21
|
+
crossws.open(peer);
|
|
13
22
|
});
|
|
14
23
|
upgrade.socket.addEventListener("message", (event) => {
|
|
15
|
-
|
|
16
|
-
|
|
24
|
+
crossws.$("deno:message", peer, event);
|
|
25
|
+
crossws.message(peer, new WSMessage(event.data));
|
|
17
26
|
});
|
|
18
27
|
upgrade.socket.addEventListener("close", () => {
|
|
19
|
-
|
|
20
|
-
|
|
28
|
+
crossws.$("deno:close", peer);
|
|
29
|
+
crossws.close(peer, {});
|
|
21
30
|
});
|
|
22
31
|
upgrade.socket.addEventListener("error", (error) => {
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
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
|
}
|
package/dist/adapters/node.cjs
CHANGED
|
@@ -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.
|
|
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,
|
|
624
|
-
const
|
|
624
|
+
(hooks, options = {}) => {
|
|
625
|
+
const crossws = peer.createCrossWS(hooks, options);
|
|
626
|
+
const wss = options.wss || new _WebSocketServer({
|
|
625
627
|
noServer: true,
|
|
626
|
-
...
|
|
628
|
+
...options.serverOptions
|
|
627
629
|
});
|
|
628
630
|
wss.on("connection", (ws, req) => {
|
|
629
|
-
const peer$1 = new
|
|
630
|
-
|
|
631
|
+
const peer$1 = new NodeWSPeer({ node: { ws, req, server: wss } });
|
|
632
|
+
crossws.open(peer$1);
|
|
631
633
|
ws.on("message", (data, isBinary) => {
|
|
632
|
-
|
|
634
|
+
crossws.$("node:message", peer$1, data, isBinary);
|
|
633
635
|
if (Array.isArray(data)) {
|
|
634
636
|
data = Buffer.concat(data);
|
|
635
637
|
}
|
|
636
|
-
|
|
638
|
+
crossws.message(peer$1, new peer.WSMessage(data, isBinary));
|
|
637
639
|
});
|
|
638
|
-
ws.on("error", (error) => {
|
|
639
|
-
|
|
640
|
-
|
|
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
|
-
|
|
644
|
-
|
|
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
|
-
|
|
652
|
+
crossws.$("node:open", peer$1);
|
|
651
653
|
});
|
|
652
654
|
ws.on("ping", (data) => {
|
|
653
|
-
|
|
655
|
+
crossws.$("node:ping", peer$1, data);
|
|
654
656
|
});
|
|
655
657
|
ws.on("pong", (data) => {
|
|
656
|
-
|
|
658
|
+
crossws.$("node:pong", peer$1, data);
|
|
657
659
|
});
|
|
658
660
|
ws.on(
|
|
659
661
|
"unexpected-response",
|
|
660
662
|
(req2, res) => {
|
|
661
|
-
|
|
663
|
+
crossws.$("node:unexpected-response", peer$1, req2, res);
|
|
662
664
|
}
|
|
663
665
|
);
|
|
664
666
|
ws.on("upgrade", (req2) => {
|
|
665
|
-
|
|
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
|
|
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,
|
|
690
|
-
this.ctx.node.ws.send(message, {
|
|
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
|
}
|
package/dist/adapters/node.d.cts
CHANGED
|
@@ -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
|
}
|
package/dist/adapters/node.d.mts
CHANGED
|
@@ -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
|
}
|
package/dist/adapters/node.d.ts
CHANGED
|
@@ -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
|
}
|