crossws 0.3.4 → 0.4.0
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 +7 -7
- package/adapters/bun.d.ts +2 -2
- package/adapters/cloudflare.d.ts +2 -2
- package/adapters/deno.d.ts +2 -2
- package/adapters/node.d.ts +2 -2
- package/adapters/sse.d.ts +2 -2
- package/adapters/uws.d.ts +2 -2
- package/dist/adapters/bun.d.mts +9 -6
- package/dist/adapters/bun.mjs +23 -13
- package/dist/adapters/cloudflare.d.mts +41 -7
- package/dist/adapters/cloudflare.mjs +172 -14
- package/dist/adapters/deno.d.mts +4 -3
- package/dist/adapters/deno.mjs +18 -9
- package/dist/adapters/node.d.mts +8 -7
- package/dist/adapters/node.mjs +39 -33
- package/dist/adapters/sse.d.mts +4 -3
- package/dist/adapters/sse.mjs +9 -8
- package/dist/adapters/uws.d.mts +15 -11
- package/dist/adapters/uws.mjs +25 -27
- package/dist/index.d.mts +35 -21
- package/dist/index.mjs +1 -1
- package/dist/server/bun.d.mts +24 -0
- package/dist/server/bun.mjs +37 -0
- package/dist/server/cloudflare.d.mts +24 -0
- package/dist/server/cloudflare.mjs +36 -0
- package/dist/server/default.d.mts +24 -0
- package/dist/server/default.mjs +32 -0
- package/dist/server/deno.d.mts +24 -0
- package/dist/server/deno.mjs +30 -0
- package/dist/server/node.d.mts +24 -0
- package/dist/server/node.mjs +43 -0
- package/dist/shared/crossws.95-eYp2D.d.mts +23 -0
- package/dist/shared/crossws.B31KJMcF.mjs +83 -0
- package/dist/shared/{crossws.ChIJSJVK.d.mts → crossws.BQXMA5bH.d.mts} +1 -1
- package/dist/shared/{crossws.D9ehKjSh.mjs → crossws.CPlNx7g8.mjs} +44 -25
- package/dist/shared/{crossws.DelSCW9g.mjs → crossws.CipVM6lf.mjs} +197 -7
- package/dist/shared/{crossws.BS81iGZK.mjs → crossws.WpyOHUXc.mjs} +21 -16
- package/dist/websocket/node.mjs +1 -1
- package/dist/websocket/sse.d.mts +3 -2
- package/dist/websocket/sse.mjs +1 -1
- package/package.json +61 -64
- package/server/bun.d.ts +2 -0
- package/server/deno.d.ts +2 -0
- package/server/node.d.ts +2 -0
- package/server.d.ts +2 -0
- package/websocket/sse.d.ts +2 -0
- package/websocket.d.ts +2 -2
- package/dist/adapters/bun.d.ts +0 -38
- package/dist/adapters/cloudflare-durable.d.mts +0 -41
- package/dist/adapters/cloudflare-durable.d.ts +0 -41
- package/dist/adapters/cloudflare-durable.mjs +0 -141
- package/dist/adapters/cloudflare.d.ts +0 -12
- package/dist/adapters/deno.d.ts +0 -18
- package/dist/adapters/node.d.ts +0 -298
- package/dist/adapters/sse.d.ts +0 -12
- package/dist/adapters/uws.d.ts +0 -58
- package/dist/index.d.ts +0 -156
- package/dist/shared/crossws.ChIJSJVK.d.ts +0 -297
- package/dist/websocket/native.d.ts +0 -3
- package/dist/websocket/node.d.ts +0 -3
- package/dist/websocket/sse.d.ts +0 -41
package/dist/websocket/node.mjs
CHANGED
package/dist/websocket/sse.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as WebSocket, C as CloseEvent,
|
|
1
|
+
import { E as EventTarget, W as WebSocket, C as CloseEvent, a as Event, M as MessageEvent } from '../shared/crossws.BQXMA5bH.mjs';
|
|
2
2
|
|
|
3
3
|
type Ctor<T> = {
|
|
4
4
|
prototype: T;
|
|
@@ -38,4 +38,5 @@ declare class WebSocketSSE extends _EventTarget implements WebSocket {
|
|
|
38
38
|
send(data: any): Promise<void>;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
export { WebSocketSSE
|
|
41
|
+
export { WebSocketSSE };
|
|
42
|
+
export type { WebSocketSSEOptions };
|
package/dist/websocket/sse.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,46 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "crossws",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Cross-platform WebSocket Servers for Node.js, Deno, Bun and Cloudflare Workers",
|
|
5
|
-
"
|
|
5
|
+
"homepage": "https://crossws.h3.dev",
|
|
6
|
+
"repository": "h3js/crossws",
|
|
6
7
|
"license": "MIT",
|
|
7
8
|
"sideEffects": false,
|
|
8
9
|
"type": "module",
|
|
9
10
|
"exports": {
|
|
10
|
-
".":
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"./adapters/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"./
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
"./adapters/cloudflare-durable": {
|
|
27
|
-
"types": "./dist/adapters/cloudflare-durable.d.mts",
|
|
28
|
-
"default": "./dist/adapters/cloudflare-durable.mjs"
|
|
29
|
-
},
|
|
30
|
-
"./adapters/sse": {
|
|
31
|
-
"types": "./dist/adapters/sse.d.mts",
|
|
32
|
-
"default": "./dist/adapters/sse.mjs"
|
|
33
|
-
},
|
|
34
|
-
"./adapters/node": {
|
|
35
|
-
"types": "./dist/adapters/node.d.mts",
|
|
36
|
-
"default": "./dist/adapters/node.mjs"
|
|
37
|
-
},
|
|
38
|
-
"./adapters/uws": {
|
|
39
|
-
"types": "./dist/adapters/uws.d.mts",
|
|
40
|
-
"default": "./dist/adapters/uws.mjs"
|
|
11
|
+
".": "./dist/index.mjs",
|
|
12
|
+
"./adapters/bun": "./dist/adapters/bun.mjs",
|
|
13
|
+
"./adapters/deno": "./dist/adapters/deno.mjs",
|
|
14
|
+
"./adapters/cloudflare": "./dist/adapters/cloudflare.mjs",
|
|
15
|
+
"./adapters/sse": "./dist/adapters/sse.mjs",
|
|
16
|
+
"./adapters/node": "./dist/adapters/node.mjs",
|
|
17
|
+
"./adapters/uws": "./dist/adapters/uws.mjs",
|
|
18
|
+
"./server/bun": "./dist/server/bun.mjs",
|
|
19
|
+
"./server/deno": "./dist/server/deno.mjs",
|
|
20
|
+
"./server/node": "./dist/server/node.mjs",
|
|
21
|
+
"./server": {
|
|
22
|
+
"deno": "./dist/server/deno.mjs",
|
|
23
|
+
"bun": "./dist/server/bun.mjs",
|
|
24
|
+
"workerd": "./dist/server/cloudflare.mjs",
|
|
25
|
+
"node": "./dist/server/node.mjs",
|
|
26
|
+
"default": "./dist/server/default.mjs"
|
|
41
27
|
},
|
|
28
|
+
"./websocket/sse": "./dist/websocket/sse.mjs",
|
|
42
29
|
"./websocket": {
|
|
43
|
-
"types": "./dist/websocket/native.d.mts",
|
|
44
30
|
"browser": "./dist/websocket/native.mjs",
|
|
45
31
|
"worker": "./dist/websocket/native.mjs",
|
|
46
32
|
"bun": "./dist/websocket/native.mjs",
|
|
@@ -49,10 +35,6 @@
|
|
|
49
35
|
"workerd": "./dist/websocket/native.mjs",
|
|
50
36
|
"node": "./dist/websocket/node.mjs",
|
|
51
37
|
"default": "./dist/websocket/native.mjs"
|
|
52
|
-
},
|
|
53
|
-
"./websocket/sse": {
|
|
54
|
-
"types": "./dist/websocket/sse.d.mts",
|
|
55
|
-
"default": "./dist/websocket/sse.mjs"
|
|
56
38
|
}
|
|
57
39
|
},
|
|
58
40
|
"main": "./dist/index.mjs",
|
|
@@ -61,6 +43,8 @@
|
|
|
61
43
|
"files": [
|
|
62
44
|
"dist",
|
|
63
45
|
"adapters",
|
|
46
|
+
"websocket",
|
|
47
|
+
"server",
|
|
64
48
|
"*.d.ts"
|
|
65
49
|
],
|
|
66
50
|
"scripts": {
|
|
@@ -83,37 +67,50 @@
|
|
|
83
67
|
"resolutions": {
|
|
84
68
|
"crossws": "workspace:*"
|
|
85
69
|
},
|
|
86
|
-
"dependencies": {
|
|
87
|
-
"uncrypto": "^0.1.3"
|
|
88
|
-
},
|
|
89
70
|
"devDependencies": {
|
|
90
|
-
"@cloudflare/workers-types": "^4.
|
|
91
|
-
"@types/bun": "^1.2.
|
|
92
|
-
"@types/deno": "^2.
|
|
93
|
-
"@types/
|
|
94
|
-
"@types/
|
|
95
|
-
"@types/
|
|
96
|
-
"@
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"eslint": "^9.20.0",
|
|
71
|
+
"@cloudflare/workers-types": "^4.20250523.0",
|
|
72
|
+
"@types/bun": "^1.2.14",
|
|
73
|
+
"@types/deno": "^2.3.0",
|
|
74
|
+
"@types/node": "^22.15.21",
|
|
75
|
+
"@types/web": "^0.0.235",
|
|
76
|
+
"@types/ws": "^8.18.1",
|
|
77
|
+
"@vitest/coverage-v8": "^3.1.4",
|
|
78
|
+
"automd": "^0.4.0",
|
|
79
|
+
"changelogen": "^0.6.1",
|
|
80
|
+
"consola": "^3.4.2",
|
|
81
|
+
"eslint": "^9.27.0",
|
|
102
82
|
"eslint-config-unjs": "^0.4.2",
|
|
103
|
-
"eventsource": "^
|
|
104
|
-
"execa": "^9.5.
|
|
83
|
+
"eventsource": "^4.0.0",
|
|
84
|
+
"execa": "^9.5.3",
|
|
105
85
|
"get-port-please": "^3.1.2",
|
|
106
|
-
"h3": "^1.15.
|
|
86
|
+
"h3": "^1.15.3",
|
|
107
87
|
"jiti": "^2.4.2",
|
|
108
88
|
"listhen": "^1.9.0",
|
|
109
|
-
"prettier": "^3.5.
|
|
110
|
-
"
|
|
89
|
+
"prettier": "^3.5.3",
|
|
90
|
+
"srvx": "^0.7.1",
|
|
91
|
+
"typescript": "^5.8.3",
|
|
111
92
|
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.44.0",
|
|
112
|
-
"unbuild": "^3.
|
|
113
|
-
"undici": "^7.
|
|
114
|
-
"vitest": "^3.
|
|
115
|
-
"wrangler": "^
|
|
116
|
-
"ws": "^8.18.
|
|
93
|
+
"unbuild": "^3.5.0",
|
|
94
|
+
"undici": "^7.10.0",
|
|
95
|
+
"vitest": "^3.1.4",
|
|
96
|
+
"wrangler": "^4.16.1",
|
|
97
|
+
"ws": "^8.18.2"
|
|
98
|
+
},
|
|
99
|
+
"peerDependencies": {
|
|
100
|
+
"srvx": ">=0.7.1"
|
|
101
|
+
},
|
|
102
|
+
"peerDependenciesMeta": {
|
|
103
|
+
"srvx": {
|
|
104
|
+
"optional": true
|
|
105
|
+
}
|
|
117
106
|
},
|
|
118
|
-
"packageManager": "pnpm@10.
|
|
107
|
+
"packageManager": "pnpm@10.11.0",
|
|
108
|
+
"pnpm": {
|
|
109
|
+
"ignoredBuiltDependencies": [
|
|
110
|
+
"@parcel/watcher",
|
|
111
|
+
"esbuild",
|
|
112
|
+
"sharp",
|
|
113
|
+
"workerd"
|
|
114
|
+
]
|
|
115
|
+
}
|
|
119
116
|
}
|
package/server/bun.d.ts
ADDED
package/server/deno.d.ts
ADDED
package/server/node.d.ts
ADDED
package/server.d.ts
ADDED
package/websocket.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./dist/websocket";
|
|
2
|
-
export { default } from "./dist/websocket";
|
|
1
|
+
export * from "./dist/websocket/native.mjs";
|
|
2
|
+
export { default } from "./dist/websocket/native.mjs";
|
package/dist/adapters/bun.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { WebSocketHandler, Server, ServerWebSocket } from 'bun';
|
|
2
|
-
import { AdapterInstance, AdapterOptions, Peer, Adapter } from '../index.js';
|
|
3
|
-
import '../shared/crossws.ChIJSJVK.js';
|
|
4
|
-
|
|
5
|
-
interface BunAdapter extends AdapterInstance {
|
|
6
|
-
websocket: WebSocketHandler<ContextData>;
|
|
7
|
-
handleUpgrade(req: Request, server: Server): Promise<Response | undefined>;
|
|
8
|
-
}
|
|
9
|
-
interface BunOptions extends AdapterOptions {
|
|
10
|
-
}
|
|
11
|
-
type ContextData = {
|
|
12
|
-
peer?: BunPeer;
|
|
13
|
-
request: Request;
|
|
14
|
-
server?: Server;
|
|
15
|
-
context: Peer["context"];
|
|
16
|
-
};
|
|
17
|
-
declare const bunAdapter: Adapter<BunAdapter, BunOptions>;
|
|
18
|
-
|
|
19
|
-
declare class BunPeer extends Peer<{
|
|
20
|
-
ws: ServerWebSocket<ContextData>;
|
|
21
|
-
request: Request;
|
|
22
|
-
peers: Set<BunPeer>;
|
|
23
|
-
}> {
|
|
24
|
-
get remoteAddress(): string;
|
|
25
|
-
get context(): Peer["context"];
|
|
26
|
-
send(data: unknown, options?: {
|
|
27
|
-
compress?: boolean;
|
|
28
|
-
}): number;
|
|
29
|
-
publish(topic: string, data: unknown, options?: {
|
|
30
|
-
compress?: boolean;
|
|
31
|
-
}): number;
|
|
32
|
-
subscribe(topic: string): void;
|
|
33
|
-
unsubscribe(topic: string): void;
|
|
34
|
-
close(code?: number, reason?: string): void;
|
|
35
|
-
terminate(): void;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export { type BunAdapter, type BunOptions, bunAdapter as default };
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import * as CF from '@cloudflare/workers-types';
|
|
2
|
-
import { DurableObject } from 'cloudflare:workers';
|
|
3
|
-
import { AdapterOptions, Adapter, AdapterInstance } from '../index.mjs';
|
|
4
|
-
import { W as WebSocket$1 } from '../shared/crossws.ChIJSJVK.mjs';
|
|
5
|
-
|
|
6
|
-
type ResolveDurableStub = (req: CF.Request, env: unknown, context: CF.ExecutionContext) => CF.DurableObjectStub | Promise<CF.DurableObjectStub>;
|
|
7
|
-
interface CloudflareOptions extends AdapterOptions {
|
|
8
|
-
/**
|
|
9
|
-
* Durable Object binding name from environment.
|
|
10
|
-
*
|
|
11
|
-
* **Note:** This option will be ignored if `resolveDurableStub` is provided.
|
|
12
|
-
*
|
|
13
|
-
* @default "$DurableObject"
|
|
14
|
-
*/
|
|
15
|
-
bindingName?: string;
|
|
16
|
-
/**
|
|
17
|
-
* Durable Object instance name.
|
|
18
|
-
*
|
|
19
|
-
* **Note:** This option will be ignored if `resolveDurableStub` is provided.
|
|
20
|
-
*
|
|
21
|
-
* @default "crossws"
|
|
22
|
-
*/
|
|
23
|
-
instanceName?: string;
|
|
24
|
-
/**
|
|
25
|
-
* Custom function that resolves Durable Object binding to handle the WebSocket upgrade.
|
|
26
|
-
*
|
|
27
|
-
* **Note:** This option will override `bindingName` and `instanceName`.
|
|
28
|
-
*/
|
|
29
|
-
resolveDurableStub?: ResolveDurableStub;
|
|
30
|
-
}
|
|
31
|
-
declare const cloudflareDurableAdapter: Adapter<CloudflareDurableAdapter, CloudflareOptions>;
|
|
32
|
-
|
|
33
|
-
interface CloudflareDurableAdapter extends AdapterInstance {
|
|
34
|
-
handleUpgrade(req: Request | CF.Request, env: unknown, context: CF.ExecutionContext): Promise<Response>;
|
|
35
|
-
handleDurableInit(obj: DurableObject, state: DurableObjectState, env: unknown): void;
|
|
36
|
-
handleDurableUpgrade(obj: DurableObject, req: Request | CF.Request): Promise<Response>;
|
|
37
|
-
handleDurableMessage(obj: DurableObject, ws: WebSocket | CF.WebSocket | WebSocket$1, message: ArrayBuffer | string): Promise<void>;
|
|
38
|
-
handleDurableClose(obj: DurableObject, ws: WebSocket | CF.WebSocket | WebSocket$1, code: number, reason: string, wasClean: boolean): Promise<void>;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export { type CloudflareDurableAdapter, type CloudflareOptions, cloudflareDurableAdapter as default };
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import * as CF from '@cloudflare/workers-types';
|
|
2
|
-
import { DurableObject } from 'cloudflare:workers';
|
|
3
|
-
import { AdapterOptions, Adapter, AdapterInstance } from '../index.js';
|
|
4
|
-
import { W as WebSocket$1 } from '../shared/crossws.ChIJSJVK.js';
|
|
5
|
-
|
|
6
|
-
type ResolveDurableStub = (req: CF.Request, env: unknown, context: CF.ExecutionContext) => CF.DurableObjectStub | Promise<CF.DurableObjectStub>;
|
|
7
|
-
interface CloudflareOptions extends AdapterOptions {
|
|
8
|
-
/**
|
|
9
|
-
* Durable Object binding name from environment.
|
|
10
|
-
*
|
|
11
|
-
* **Note:** This option will be ignored if `resolveDurableStub` is provided.
|
|
12
|
-
*
|
|
13
|
-
* @default "$DurableObject"
|
|
14
|
-
*/
|
|
15
|
-
bindingName?: string;
|
|
16
|
-
/**
|
|
17
|
-
* Durable Object instance name.
|
|
18
|
-
*
|
|
19
|
-
* **Note:** This option will be ignored if `resolveDurableStub` is provided.
|
|
20
|
-
*
|
|
21
|
-
* @default "crossws"
|
|
22
|
-
*/
|
|
23
|
-
instanceName?: string;
|
|
24
|
-
/**
|
|
25
|
-
* Custom function that resolves Durable Object binding to handle the WebSocket upgrade.
|
|
26
|
-
*
|
|
27
|
-
* **Note:** This option will override `bindingName` and `instanceName`.
|
|
28
|
-
*/
|
|
29
|
-
resolveDurableStub?: ResolveDurableStub;
|
|
30
|
-
}
|
|
31
|
-
declare const cloudflareDurableAdapter: Adapter<CloudflareDurableAdapter, CloudflareOptions>;
|
|
32
|
-
|
|
33
|
-
interface CloudflareDurableAdapter extends AdapterInstance {
|
|
34
|
-
handleUpgrade(req: Request | CF.Request, env: unknown, context: CF.ExecutionContext): Promise<Response>;
|
|
35
|
-
handleDurableInit(obj: DurableObject, state: DurableObjectState, env: unknown): void;
|
|
36
|
-
handleDurableUpgrade(obj: DurableObject, req: Request | CF.Request): Promise<Response>;
|
|
37
|
-
handleDurableMessage(obj: DurableObject, ws: WebSocket | CF.WebSocket | WebSocket$1, message: ArrayBuffer | string): Promise<void>;
|
|
38
|
-
handleDurableClose(obj: DurableObject, ws: WebSocket | CF.WebSocket | WebSocket$1, code: number, reason: string, wasClean: boolean): Promise<void>;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export { type CloudflareDurableAdapter, type CloudflareOptions, cloudflareDurableAdapter as default };
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { M as Message, P as Peer, t as toBufferLike } from '../shared/crossws.BS81iGZK.mjs';
|
|
2
|
-
import { a as adapterUtils, A as AdapterHookable } from '../shared/crossws.D9ehKjSh.mjs';
|
|
3
|
-
import 'uncrypto';
|
|
4
|
-
|
|
5
|
-
const cloudflareDurableAdapter = (opts = {}) => {
|
|
6
|
-
const hooks = new AdapterHookable(opts);
|
|
7
|
-
const peers = /* @__PURE__ */ new Set();
|
|
8
|
-
const resolveDurableStub = opts.resolveDurableStub || ((_req, env, _context) => {
|
|
9
|
-
const bindingName = opts.bindingName || "$DurableObject";
|
|
10
|
-
const binding = env[bindingName];
|
|
11
|
-
if (!binding) {
|
|
12
|
-
throw new Error(
|
|
13
|
-
`Durable Object binding "${bindingName}" not available`
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
const instanceId = binding.idFromName(opts.instanceName || "crossws");
|
|
17
|
-
return binding.get(instanceId);
|
|
18
|
-
});
|
|
19
|
-
return {
|
|
20
|
-
...adapterUtils(peers),
|
|
21
|
-
handleUpgrade: async (req, env, context) => {
|
|
22
|
-
const stub = await resolveDurableStub(req, env, context);
|
|
23
|
-
return stub.fetch(req);
|
|
24
|
-
},
|
|
25
|
-
handleDurableInit: async (obj, state, env) => {
|
|
26
|
-
},
|
|
27
|
-
handleDurableUpgrade: async (obj, request) => {
|
|
28
|
-
const { upgradeHeaders, endResponse } = await hooks.upgrade(
|
|
29
|
-
request
|
|
30
|
-
);
|
|
31
|
-
if (endResponse) {
|
|
32
|
-
return endResponse;
|
|
33
|
-
}
|
|
34
|
-
const pair = new WebSocketPair();
|
|
35
|
-
const client = pair[0];
|
|
36
|
-
const server = pair[1];
|
|
37
|
-
const peer = CloudflareDurablePeer._restore(
|
|
38
|
-
obj,
|
|
39
|
-
server,
|
|
40
|
-
request
|
|
41
|
-
);
|
|
42
|
-
peers.add(peer);
|
|
43
|
-
obj.ctx.acceptWebSocket(server);
|
|
44
|
-
await hooks.callHook("open", peer);
|
|
45
|
-
return new Response(null, {
|
|
46
|
-
status: 101,
|
|
47
|
-
webSocket: client,
|
|
48
|
-
headers: upgradeHeaders
|
|
49
|
-
});
|
|
50
|
-
},
|
|
51
|
-
handleDurableMessage: async (obj, ws, message) => {
|
|
52
|
-
const peer = CloudflareDurablePeer._restore(obj, ws);
|
|
53
|
-
await hooks.callHook("message", peer, new Message(message, peer));
|
|
54
|
-
},
|
|
55
|
-
handleDurableClose: async (obj, ws, code, reason, wasClean) => {
|
|
56
|
-
const peer = CloudflareDurablePeer._restore(obj, ws);
|
|
57
|
-
peers.delete(peer);
|
|
58
|
-
const details = { code, reason, wasClean };
|
|
59
|
-
await hooks.callHook("close", peer, details);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
|
-
class CloudflareDurablePeer extends Peer {
|
|
64
|
-
get peers() {
|
|
65
|
-
return new Set(
|
|
66
|
-
this.#getwebsockets().map(
|
|
67
|
-
(ws) => CloudflareDurablePeer._restore(this._internal.durable, ws)
|
|
68
|
-
)
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
#getwebsockets() {
|
|
72
|
-
return this._internal.durable.ctx.getWebSockets();
|
|
73
|
-
}
|
|
74
|
-
send(data) {
|
|
75
|
-
return this._internal.ws.send(toBufferLike(data));
|
|
76
|
-
}
|
|
77
|
-
subscribe(topic) {
|
|
78
|
-
super.subscribe(topic);
|
|
79
|
-
const state = getAttachedState(this._internal.ws);
|
|
80
|
-
if (!state.t) {
|
|
81
|
-
state.t = /* @__PURE__ */ new Set();
|
|
82
|
-
}
|
|
83
|
-
state.t.add(topic);
|
|
84
|
-
setAttachedState(this._internal.ws, state);
|
|
85
|
-
}
|
|
86
|
-
publish(topic, data) {
|
|
87
|
-
const websockets = this.#getwebsockets();
|
|
88
|
-
if (websockets.length < 2) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
const dataBuff = toBufferLike(data);
|
|
92
|
-
for (const ws of websockets) {
|
|
93
|
-
if (ws === this._internal.ws) {
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
const state = getAttachedState(ws);
|
|
97
|
-
if (state.t?.has(topic)) {
|
|
98
|
-
ws.send(dataBuff);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
close(code, reason) {
|
|
103
|
-
this._internal.ws.close(code, reason);
|
|
104
|
-
}
|
|
105
|
-
static _restore(durable, ws, request) {
|
|
106
|
-
let peer = ws._crosswsPeer;
|
|
107
|
-
if (peer) {
|
|
108
|
-
return peer;
|
|
109
|
-
}
|
|
110
|
-
const state = ws.deserializeAttachment() || {};
|
|
111
|
-
peer = ws._crosswsPeer = new CloudflareDurablePeer({
|
|
112
|
-
ws,
|
|
113
|
-
request: request || { url: state.u },
|
|
114
|
-
durable
|
|
115
|
-
});
|
|
116
|
-
if (state.i) {
|
|
117
|
-
peer._id = state.i;
|
|
118
|
-
}
|
|
119
|
-
if (request?.url) {
|
|
120
|
-
state.u = request.url;
|
|
121
|
-
}
|
|
122
|
-
state.i = peer.id;
|
|
123
|
-
setAttachedState(ws, state);
|
|
124
|
-
return peer;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
function getAttachedState(ws) {
|
|
128
|
-
let state = ws._crosswsState;
|
|
129
|
-
if (state) {
|
|
130
|
-
return state;
|
|
131
|
-
}
|
|
132
|
-
state = ws.deserializeAttachment() || {};
|
|
133
|
-
ws._crosswsState = state;
|
|
134
|
-
return state;
|
|
135
|
-
}
|
|
136
|
-
function setAttachedState(ws, state) {
|
|
137
|
-
ws._crosswsState = state;
|
|
138
|
-
ws.serializeAttachment(state);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export { cloudflareDurableAdapter as default };
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { AdapterInstance, AdapterOptions, Adapter } from '../index.js';
|
|
2
|
-
import * as CF from '@cloudflare/workers-types';
|
|
3
|
-
import '../shared/crossws.ChIJSJVK.js';
|
|
4
|
-
|
|
5
|
-
interface CloudflareAdapter extends AdapterInstance {
|
|
6
|
-
handleUpgrade(req: CF.Request, env: unknown, context: CF.ExecutionContext): Promise<CF.Response>;
|
|
7
|
-
}
|
|
8
|
-
interface CloudflareOptions extends AdapterOptions {
|
|
9
|
-
}
|
|
10
|
-
declare const cloudflareAdapter: Adapter<CloudflareAdapter, CloudflareOptions>;
|
|
11
|
-
|
|
12
|
-
export { type CloudflareAdapter, type CloudflareOptions, cloudflareAdapter as default };
|
package/dist/adapters/deno.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { AdapterInstance, AdapterOptions, Adapter } from '../index.js';
|
|
2
|
-
import '../shared/crossws.ChIJSJVK.js';
|
|
3
|
-
|
|
4
|
-
interface DenoAdapter extends AdapterInstance {
|
|
5
|
-
handleUpgrade(req: Request, info: ServeHandlerInfo): Promise<Response>;
|
|
6
|
-
}
|
|
7
|
-
interface DenoOptions extends AdapterOptions {
|
|
8
|
-
}
|
|
9
|
-
type ServeHandlerInfo = {
|
|
10
|
-
remoteAddr?: {
|
|
11
|
-
transport: string;
|
|
12
|
-
hostname: string;
|
|
13
|
-
port: number;
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
declare const denoAdapter: Adapter<DenoAdapter, DenoOptions>;
|
|
17
|
-
|
|
18
|
-
export { type DenoAdapter, type DenoOptions, denoAdapter as default };
|