crossws 0.4.2 → 0.4.3
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/dist/_chunks/_request.mjs +82 -0
- package/dist/_chunks/_types.d.mts +24 -0
- package/dist/_chunks/adapter.d.mts +174 -0
- package/dist/_chunks/adapter.mjs +93 -0
- package/dist/_chunks/bun.d.mts +38 -0
- package/dist/_chunks/cloudflare.d.mts +45 -0
- package/dist/_chunks/deno.d.mts +17 -0
- package/dist/_chunks/error.mjs +10 -0
- package/dist/_chunks/libs/ws.mjs +3531 -0
- package/dist/_chunks/node.d.mts +299 -0
- package/dist/_chunks/peer.mjs +244 -0
- package/dist/_chunks/rolldown-runtime.mjs +32 -0
- package/dist/_chunks/sse.d.mts +12 -0
- package/dist/_chunks/web.d.mts +298 -0
- package/dist/adapters/bun.d.mts +2 -41
- package/dist/adapters/bun.mjs +83 -93
- package/dist/adapters/cloudflare.d.mts +2 -46
- package/dist/adapters/cloudflare.mjs +173 -219
- package/dist/adapters/deno.d.mts +2 -19
- package/dist/adapters/deno.mjs +65 -74
- package/dist/adapters/node.d.mts +2 -299
- package/dist/adapters/node.mjs +119 -156
- package/dist/adapters/sse.d.mts +2 -13
- package/dist/adapters/sse.mjs +98 -118
- package/dist/adapters/uws.d.mts +44 -44
- package/dist/adapters/uws.mjs +152 -175
- package/dist/index.d.mts +2 -170
- package/dist/index.mjs +3 -1
- package/dist/server/bun.d.mts +8 -21
- package/dist/server/bun.mjs +24 -31
- package/dist/server/cloudflare.d.mts +8 -21
- package/dist/server/cloudflare.mjs +21 -30
- package/dist/server/default.d.mts +8 -21
- package/dist/server/default.mjs +22 -26
- package/dist/server/deno.d.mts +8 -21
- package/dist/server/deno.mjs +21 -24
- package/dist/server/node.d.mts +8 -21
- package/dist/server/node.mjs +32 -43
- package/dist/websocket/native.d.mts +3 -2
- package/dist/websocket/native.mjs +4 -1
- package/dist/websocket/node.d.mts +3 -2
- package/dist/websocket/node.mjs +7 -13
- package/dist/websocket/sse.d.mts +34 -34
- package/dist/websocket/sse.mjs +112 -121
- package/package.json +3 -2
- package/dist/shared/crossws.B31KJMcF.mjs +0 -83
- package/dist/shared/crossws.BQXMA5bH.d.mts +0 -297
- package/dist/shared/crossws.By9qWDAI.mjs +0 -8
- package/dist/shared/crossws.C5pESzqN.mjs +0 -4993
- package/dist/shared/crossws.CP-89VBK.d.mts +0 -23
- package/dist/shared/crossws.CPlNx7g8.mjs +0 -105
- package/dist/shared/crossws.WpyOHUXc.mjs +0 -330
|
@@ -1,227 +1,181 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { i as AdapterHookable, r as getPeers, t as adapterUtils } from "../_chunks/adapter.mjs";
|
|
2
|
+
import { n as Message, r as toBufferLike, t as Peer } from "../_chunks/peer.mjs";
|
|
3
|
+
import { t as StubRequest } from "../_chunks/_request.mjs";
|
|
4
|
+
import { t as WSError } from "../_chunks/error.mjs";
|
|
5
|
+
import { env } from "cloudflare:workers";
|
|
6
6
|
|
|
7
|
+
//#region src/adapters/cloudflare.ts
|
|
7
8
|
const cloudflareAdapter = (opts = {}) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
9
|
+
const hooks = new AdapterHookable(opts);
|
|
10
|
+
const globalPeers = /* @__PURE__ */ new Map();
|
|
11
|
+
const resolveDurableStub = opts.resolveDurableStub || ((_req, env$1, _context) => {
|
|
12
|
+
const bindingName = opts.bindingName || "$DurableObject";
|
|
13
|
+
const binding = (env$1 || env)[bindingName];
|
|
14
|
+
if (binding) {
|
|
15
|
+
const instanceId = binding.idFromName(opts.instanceName || "crossws");
|
|
16
|
+
return binding.get(instanceId);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const { publish: durablePublish, ...utils } = adapterUtils(globalPeers);
|
|
20
|
+
return {
|
|
21
|
+
...utils,
|
|
22
|
+
handleUpgrade: async (request, cfEnv, cfCtx) => {
|
|
23
|
+
const stub = await resolveDurableStub(request, cfEnv, cfCtx);
|
|
24
|
+
if (stub) return stub.fetch(request);
|
|
25
|
+
const { upgradeHeaders, endResponse, context, namespace } = await hooks.upgrade(request);
|
|
26
|
+
if (endResponse) return endResponse;
|
|
27
|
+
const peers = getPeers(globalPeers, namespace);
|
|
28
|
+
const pair = new WebSocketPair();
|
|
29
|
+
const client = pair[0];
|
|
30
|
+
const server = pair[1];
|
|
31
|
+
const peer = new CloudflareFallbackPeer({
|
|
32
|
+
ws: client,
|
|
33
|
+
peers,
|
|
34
|
+
wsServer: server,
|
|
35
|
+
request,
|
|
36
|
+
cfEnv,
|
|
37
|
+
cfCtx,
|
|
38
|
+
context,
|
|
39
|
+
namespace
|
|
40
|
+
});
|
|
41
|
+
peers.add(peer);
|
|
42
|
+
server.accept();
|
|
43
|
+
hooks.callHook("open", peer);
|
|
44
|
+
server.addEventListener("message", (event) => {
|
|
45
|
+
hooks.callHook("message", peer, new Message(event.data, peer, event));
|
|
46
|
+
});
|
|
47
|
+
server.addEventListener("error", (event) => {
|
|
48
|
+
peers.delete(peer);
|
|
49
|
+
hooks.callHook("error", peer, new WSError(event.error));
|
|
50
|
+
});
|
|
51
|
+
server.addEventListener("close", (event) => {
|
|
52
|
+
peers.delete(peer);
|
|
53
|
+
hooks.callHook("close", peer, event);
|
|
54
|
+
server.close();
|
|
55
|
+
});
|
|
56
|
+
return new Response(null, {
|
|
57
|
+
status: 101,
|
|
58
|
+
webSocket: client,
|
|
59
|
+
headers: upgradeHeaders
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
handleDurableInit: async (obj, state, env$1) => {},
|
|
63
|
+
handleDurableUpgrade: async (obj, request) => {
|
|
64
|
+
const { upgradeHeaders, endResponse, namespace } = await hooks.upgrade(request);
|
|
65
|
+
if (endResponse) return endResponse;
|
|
66
|
+
const peers = getPeers(globalPeers, namespace);
|
|
67
|
+
const pair = new WebSocketPair();
|
|
68
|
+
const client = pair[0];
|
|
69
|
+
const server = pair[1];
|
|
70
|
+
const peer = CloudflareDurablePeer._restore(obj, server, request, namespace);
|
|
71
|
+
peers.add(peer);
|
|
72
|
+
obj.ctx.acceptWebSocket(server);
|
|
73
|
+
await hooks.callHook("open", peer);
|
|
74
|
+
return new Response(null, {
|
|
75
|
+
status: 101,
|
|
76
|
+
webSocket: client,
|
|
77
|
+
headers: upgradeHeaders
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
handleDurableMessage: async (obj, ws, message) => {
|
|
81
|
+
const peer = CloudflareDurablePeer._restore(obj, ws);
|
|
82
|
+
await hooks.callHook("message", peer, new Message(message, peer));
|
|
83
|
+
},
|
|
84
|
+
handleDurableClose: async (obj, ws, code, reason, wasClean) => {
|
|
85
|
+
const peer = CloudflareDurablePeer._restore(obj, ws);
|
|
86
|
+
getPeers(globalPeers, peer.namespace).delete(peer);
|
|
87
|
+
const details = {
|
|
88
|
+
code,
|
|
89
|
+
reason,
|
|
90
|
+
wasClean
|
|
91
|
+
};
|
|
92
|
+
await hooks.callHook("close", peer, details);
|
|
93
|
+
},
|
|
94
|
+
handleDurablePublish: async (_obj, topic, data, opts$1) => {
|
|
95
|
+
return durablePublish(topic, data, opts$1);
|
|
96
|
+
},
|
|
97
|
+
publish: async (topic, data, opts$1) => {
|
|
98
|
+
const stub = await resolveDurableStub(void 0, env, void 0);
|
|
99
|
+
if (!stub) throw new Error("[crossws] Durable Object binding cannot be resolved.");
|
|
100
|
+
try {
|
|
101
|
+
return await stub.webSocketPublish(topic, data, opts$1);
|
|
102
|
+
} catch (error) {
|
|
103
|
+
console.error(error);
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
var cloudflare_default = cloudflareAdapter;
|
|
110
|
+
var CloudflareDurablePeer = class CloudflareDurablePeer extends Peer {
|
|
111
|
+
get peers() {
|
|
112
|
+
return new Set(this.#getwebsockets().map((ws) => CloudflareDurablePeer._restore(this._internal.durable, ws)));
|
|
113
|
+
}
|
|
114
|
+
#getwebsockets() {
|
|
115
|
+
return this._internal.durable.ctx.getWebSockets();
|
|
116
|
+
}
|
|
117
|
+
send(data) {
|
|
118
|
+
return this._internal.ws.send(toBufferLike(data));
|
|
119
|
+
}
|
|
120
|
+
subscribe(topic) {
|
|
121
|
+
super.subscribe(topic);
|
|
122
|
+
const state = getAttachedState(this._internal.ws);
|
|
123
|
+
if (!state.t) state.t = /* @__PURE__ */ new Set();
|
|
124
|
+
state.t.add(topic);
|
|
125
|
+
setAttachedState(this._internal.ws, state);
|
|
126
|
+
}
|
|
127
|
+
publish(topic, data) {
|
|
128
|
+
const websockets = this.#getwebsockets();
|
|
129
|
+
if (websockets.length < 2) return;
|
|
130
|
+
const dataBuff = toBufferLike(data);
|
|
131
|
+
for (const ws of websockets) {
|
|
132
|
+
if (ws === this._internal.ws) continue;
|
|
133
|
+
if (getAttachedState(ws).t?.has(topic)) ws.send(dataBuff);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
close(code, reason) {
|
|
137
|
+
this._internal.ws.close(code, reason);
|
|
138
|
+
}
|
|
139
|
+
static _restore(durable, ws, request, namespace) {
|
|
140
|
+
let peer = ws._crosswsPeer;
|
|
141
|
+
if (peer) return peer;
|
|
142
|
+
const state = ws.deserializeAttachment() || {};
|
|
143
|
+
peer = ws._crosswsPeer = new CloudflareDurablePeer({
|
|
144
|
+
ws,
|
|
145
|
+
request: request || new StubRequest(state.u || ""),
|
|
146
|
+
namespace: namespace || state.n || "",
|
|
147
|
+
durable
|
|
148
|
+
});
|
|
149
|
+
if (state.i) peer._id = state.i;
|
|
150
|
+
if (request?.url) state.u = request.url;
|
|
151
|
+
state.i = peer.id;
|
|
152
|
+
setAttachedState(ws, state);
|
|
153
|
+
return peer;
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
var CloudflareFallbackPeer = class extends Peer {
|
|
157
|
+
send(data) {
|
|
158
|
+
this._internal.wsServer.send(toBufferLike(data));
|
|
159
|
+
return 0;
|
|
160
|
+
}
|
|
161
|
+
publish(_topic, _message) {
|
|
162
|
+
console.warn("[crossws] [cloudflare] pub/sub support requires Durable Objects.");
|
|
163
|
+
}
|
|
164
|
+
close(code, reason) {
|
|
165
|
+
this._internal.ws.close(code, reason);
|
|
166
|
+
}
|
|
133
167
|
};
|
|
134
|
-
class CloudflareDurablePeer extends Peer {
|
|
135
|
-
get peers() {
|
|
136
|
-
return new Set(
|
|
137
|
-
this.#getwebsockets().map(
|
|
138
|
-
(ws) => CloudflareDurablePeer._restore(this._internal.durable, ws)
|
|
139
|
-
)
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
#getwebsockets() {
|
|
143
|
-
return this._internal.durable.ctx.getWebSockets();
|
|
144
|
-
}
|
|
145
|
-
send(data) {
|
|
146
|
-
return this._internal.ws.send(toBufferLike(data));
|
|
147
|
-
}
|
|
148
|
-
subscribe(topic) {
|
|
149
|
-
super.subscribe(topic);
|
|
150
|
-
const state = getAttachedState(this._internal.ws);
|
|
151
|
-
if (!state.t) {
|
|
152
|
-
state.t = /* @__PURE__ */ new Set();
|
|
153
|
-
}
|
|
154
|
-
state.t.add(topic);
|
|
155
|
-
setAttachedState(this._internal.ws, state);
|
|
156
|
-
}
|
|
157
|
-
publish(topic, data) {
|
|
158
|
-
const websockets = this.#getwebsockets();
|
|
159
|
-
if (websockets.length < 2) {
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
const dataBuff = toBufferLike(data);
|
|
163
|
-
for (const ws of websockets) {
|
|
164
|
-
if (ws === this._internal.ws) {
|
|
165
|
-
continue;
|
|
166
|
-
}
|
|
167
|
-
const state = getAttachedState(ws);
|
|
168
|
-
if (state.t?.has(topic)) {
|
|
169
|
-
ws.send(dataBuff);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
close(code, reason) {
|
|
174
|
-
this._internal.ws.close(code, reason);
|
|
175
|
-
}
|
|
176
|
-
static _restore(durable, ws, request, namespace) {
|
|
177
|
-
let peer = ws._crosswsPeer;
|
|
178
|
-
if (peer) {
|
|
179
|
-
return peer;
|
|
180
|
-
}
|
|
181
|
-
const state = ws.deserializeAttachment() || {};
|
|
182
|
-
peer = ws._crosswsPeer = new CloudflareDurablePeer({
|
|
183
|
-
ws,
|
|
184
|
-
request: request || new StubRequest(state.u || ""),
|
|
185
|
-
namespace: namespace || state.n || "",
|
|
186
|
-
durable
|
|
187
|
-
});
|
|
188
|
-
if (state.i) {
|
|
189
|
-
peer._id = state.i;
|
|
190
|
-
}
|
|
191
|
-
if (request?.url) {
|
|
192
|
-
state.u = request.url;
|
|
193
|
-
}
|
|
194
|
-
state.i = peer.id;
|
|
195
|
-
setAttachedState(ws, state);
|
|
196
|
-
return peer;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
class CloudflareFallbackPeer extends Peer {
|
|
200
|
-
send(data) {
|
|
201
|
-
this._internal.wsServer.send(toBufferLike(data));
|
|
202
|
-
return 0;
|
|
203
|
-
}
|
|
204
|
-
publish(_topic, _message) {
|
|
205
|
-
console.warn(
|
|
206
|
-
"[crossws] [cloudflare] pub/sub support requires Durable Objects."
|
|
207
|
-
);
|
|
208
|
-
}
|
|
209
|
-
close(code, reason) {
|
|
210
|
-
this._internal.ws.close(code, reason);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
168
|
function getAttachedState(ws) {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
ws._crosswsState = state;
|
|
220
|
-
return state;
|
|
169
|
+
let state = ws._crosswsState;
|
|
170
|
+
if (state) return state;
|
|
171
|
+
state = ws.deserializeAttachment() || {};
|
|
172
|
+
ws._crosswsState = state;
|
|
173
|
+
return state;
|
|
221
174
|
}
|
|
222
175
|
function setAttachedState(ws, state) {
|
|
223
|
-
|
|
224
|
-
|
|
176
|
+
ws._crosswsState = state;
|
|
177
|
+
ws.serializeAttachment(state);
|
|
225
178
|
}
|
|
226
179
|
|
|
227
|
-
|
|
180
|
+
//#endregion
|
|
181
|
+
export { cloudflare_default as default };
|
package/dist/adapters/deno.d.mts
CHANGED
|
@@ -1,19 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
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 { denoAdapter as default };
|
|
19
|
-
export type { DenoAdapter, DenoOptions };
|
|
1
|
+
import { n as DenoOptions, r as denoAdapter, t as DenoAdapter } from "../_chunks/deno.mjs";
|
|
2
|
+
export { DenoAdapter, DenoOptions, denoAdapter as default };
|
package/dist/adapters/deno.mjs
CHANGED
|
@@ -1,78 +1,69 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { i as AdapterHookable, r as getPeers, t as adapterUtils } from "../_chunks/adapter.mjs";
|
|
2
|
+
import { n as Message, r as toBufferLike, t as Peer } from "../_chunks/peer.mjs";
|
|
3
|
+
import { t as WSError } from "../_chunks/error.mjs";
|
|
4
4
|
|
|
5
|
+
//#region src/adapters/deno.ts
|
|
5
6
|
const denoAdapter = (options = {}) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
7
|
+
if (typeof Deno === "undefined") throw new Error("[crossws] Using Deno adapter in an incompatible environment.");
|
|
8
|
+
const hooks = new AdapterHookable(options);
|
|
9
|
+
const globalPeers = /* @__PURE__ */ new Map();
|
|
10
|
+
return {
|
|
11
|
+
...adapterUtils(globalPeers),
|
|
12
|
+
handleUpgrade: async (request, info) => {
|
|
13
|
+
const { upgradeHeaders, endResponse, context, namespace } = await hooks.upgrade(request);
|
|
14
|
+
if (endResponse) return endResponse;
|
|
15
|
+
const headers = upgradeHeaders instanceof Headers ? upgradeHeaders : new Headers(upgradeHeaders);
|
|
16
|
+
const upgrade = Deno.upgradeWebSocket(request, {
|
|
17
|
+
headers,
|
|
18
|
+
protocol: headers.get("sec-websocket-protocol") ?? ""
|
|
19
|
+
});
|
|
20
|
+
const peers = getPeers(globalPeers, namespace);
|
|
21
|
+
const peer = new DenoPeer({
|
|
22
|
+
ws: upgrade.socket,
|
|
23
|
+
request,
|
|
24
|
+
peers,
|
|
25
|
+
denoInfo: info,
|
|
26
|
+
context,
|
|
27
|
+
namespace
|
|
28
|
+
});
|
|
29
|
+
peers.add(peer);
|
|
30
|
+
upgrade.socket.addEventListener("open", () => {
|
|
31
|
+
hooks.callHook("open", peer);
|
|
32
|
+
});
|
|
33
|
+
upgrade.socket.addEventListener("message", (event) => {
|
|
34
|
+
hooks.callHook("message", peer, new Message(event.data, peer, event));
|
|
35
|
+
});
|
|
36
|
+
upgrade.socket.addEventListener("close", () => {
|
|
37
|
+
peers.delete(peer);
|
|
38
|
+
hooks.callHook("close", peer, {});
|
|
39
|
+
});
|
|
40
|
+
upgrade.socket.addEventListener("error", (error) => {
|
|
41
|
+
peers.delete(peer);
|
|
42
|
+
hooks.callHook("error", peer, new WSError(error));
|
|
43
|
+
});
|
|
44
|
+
return upgrade.response;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
var deno_default = denoAdapter;
|
|
49
|
+
var DenoPeer = class extends Peer {
|
|
50
|
+
get remoteAddress() {
|
|
51
|
+
return this._internal.denoInfo.remoteAddr?.hostname;
|
|
52
|
+
}
|
|
53
|
+
send(data) {
|
|
54
|
+
return this._internal.ws.send(toBufferLike(data));
|
|
55
|
+
}
|
|
56
|
+
publish(topic, data) {
|
|
57
|
+
const dataBuff = toBufferLike(data);
|
|
58
|
+
for (const peer of this._internal.peers) if (peer !== this && peer._topics.has(topic)) peer._internal.ws.send(dataBuff);
|
|
59
|
+
}
|
|
60
|
+
close(code, reason) {
|
|
61
|
+
this._internal.ws.close(code, reason);
|
|
62
|
+
}
|
|
63
|
+
terminate() {
|
|
64
|
+
this._internal.ws.terminate();
|
|
65
|
+
}
|
|
54
66
|
};
|
|
55
|
-
class DenoPeer extends Peer {
|
|
56
|
-
get remoteAddress() {
|
|
57
|
-
return this._internal.denoInfo.remoteAddr?.hostname;
|
|
58
|
-
}
|
|
59
|
-
send(data) {
|
|
60
|
-
return this._internal.ws.send(toBufferLike(data));
|
|
61
|
-
}
|
|
62
|
-
publish(topic, data) {
|
|
63
|
-
const dataBuff = toBufferLike(data);
|
|
64
|
-
for (const peer of this._internal.peers) {
|
|
65
|
-
if (peer !== this && peer._topics.has(topic)) {
|
|
66
|
-
peer._internal.ws.send(dataBuff);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
close(code, reason) {
|
|
71
|
-
this._internal.ws.close(code, reason);
|
|
72
|
-
}
|
|
73
|
-
terminate() {
|
|
74
|
-
this._internal.ws.terminate();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
67
|
|
|
78
|
-
|
|
68
|
+
//#endregion
|
|
69
|
+
export { deno_default as default };
|