topsyde-utils 1.0.64 → 1.0.66
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/index.d.ts +1 -1
- package/dist/server/bun/websocket/Channel.d.ts +1 -1
- package/dist/server/bun/websocket/Channel.js +2 -1
- package/dist/server/bun/websocket/Channel.js.map +1 -1
- package/dist/server/bun/websocket/Client.d.ts +11 -5
- package/dist/server/bun/websocket/Client.js +41 -14
- package/dist/server/bun/websocket/Client.js.map +1 -1
- package/dist/server/bun/websocket/Websocket.d.ts +4 -2
- package/dist/server/bun/websocket/Websocket.js +16 -8
- package/dist/server/bun/websocket/Websocket.js.map +1 -1
- package/dist/server/bun/websocket/websocket.types.d.ts +12 -11
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
@@ -39,4 +39,4 @@ export { ClassConstructor, NonNullableType, ObjectKeys, KVObj, I_ApplicationResp
|
|
39
39
|
export { E_IS, E_ENVIRONMENTS } from "./enums";
|
40
40
|
export { ControllerResponse, ControllerAction, ControllerMap, ControllerOptions } from "./server/controller";
|
41
41
|
export { Routes } from "./server/bun/router/routes";
|
42
|
-
export {
|
42
|
+
export { WebsocketMessage, WebsocketChannel, WebsocketStructuredMessage, WebsocketClientData, I_WebsocketEntity, I_WebsocketClient, I_WebsocketInterface, } from "./server/bun/websocket/websocket.types";
|
@@ -8,7 +8,7 @@ export default class Channel {
|
|
8
8
|
protected members: Map<string, Client>;
|
9
9
|
protected metadata: Record<string, string>;
|
10
10
|
constructor(id: string, name: string, limit?: number, members?: Map<string, Client>, metadata?: Record<string, string>);
|
11
|
-
addMember(entity: I_WebsocketEntity):
|
11
|
+
addMember(entity: I_WebsocketEntity): Client | undefined;
|
12
12
|
removeMember(entity: I_WebsocketEntity): void;
|
13
13
|
broadcast(message: WebsocketStructuredMessage, exclude?: string[] | I_WebsocketEntity[]): void;
|
14
14
|
hasMember(client: I_WebsocketEntity | string): boolean;
|
@@ -18,8 +18,9 @@ class Channel {
|
|
18
18
|
if (!this.canAddMember())
|
19
19
|
return;
|
20
20
|
const client = new Client_1.default(entity.id, entity.ws);
|
21
|
-
this.members.set(client.
|
21
|
+
this.members.set(client.id, client);
|
22
22
|
client.joinChannel(this);
|
23
|
+
return client;
|
23
24
|
}
|
24
25
|
removeMember(entity) {
|
25
26
|
if (!this.members.has(entity.id))
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Channel.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,4DAAoC;AAGpC,MAAqB,OAAO;IAQ3B,YAAY,EAAU,EAAE,IAAY,EAAE,KAAc,EAAE,OAA6B,EAAE,QAAiC;QAP5G,cAAS,GAAU,IAAI,IAAI,EAAE,CAAC;QAQvC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;IAChC,CAAC;IAGM,SAAS,CAAC,MAAyB;QACzC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE,OAAO;QACjC,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,
|
1
|
+
{"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Channel.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,4DAAoC;AAGpC,MAAqB,OAAO;IAQ3B,YAAY,EAAU,EAAE,IAAY,EAAE,KAAc,EAAE,OAA6B,EAAE,QAAiC;QAP5G,cAAS,GAAU,IAAI,IAAI,EAAE,CAAC;QAQvC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;IAChC,CAAC;IAGM,SAAS,CAAC,MAAyB;QACzC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE,OAAO;QACjC,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,MAAM,CAAC;IACf,CAAC;IAEM,YAAY,CAAC,MAAyB;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,OAAO;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAEM,SAAS,CAAC,OAAmC,EAAE,OAAwC;QAC7F,mBAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAEM,SAAS,CAAC,MAAkC;QAClD,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAEM,SAAS,CAAC,MAAkC;QAClD,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAEM,UAAU;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAEM,WAAW;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAEM,YAAY;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAEM,KAAK;QACX,OAAO,IAAI,CAAC,EAAE,CAAC;IAChB,CAAC;IAEM,OAAO;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAEM,QAAQ;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAEM,OAAO;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC;IACO,YAAY;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1B,CAAC;CACD;AA9ED,0BA8EC"}
|
@@ -2,14 +2,20 @@ import { ServerWebSocket } from "bun";
|
|
2
2
|
import Channel from "./Channel";
|
3
3
|
import type { I_WebsocketClient, WebsocketClientData, WebsocketChannel, WebsocketStructuredMessage } from "./websocket.types";
|
4
4
|
export default class Client implements I_WebsocketClient {
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
private _id;
|
6
|
+
private _ws;
|
7
|
+
private _channels;
|
8
|
+
private set ws(value);
|
9
|
+
get ws(): ServerWebSocket<WebsocketClientData>;
|
10
|
+
private set id(value);
|
11
|
+
get id(): string;
|
12
|
+
private set channels(value);
|
13
|
+
get channels(): WebsocketChannel;
|
8
14
|
constructor(id: string, ws: ServerWebSocket<WebsocketClientData>);
|
9
15
|
joinChannel(channel: Channel): void;
|
10
16
|
leaveChannel(channel: Channel): void;
|
11
|
-
|
12
|
-
|
17
|
+
joinChannels(channels: Channel[]): void;
|
18
|
+
leaveChannels(channels?: Channel[]): void;
|
13
19
|
send(message: WebsocketStructuredMessage): void;
|
14
20
|
subscribe(channel: string): void;
|
15
21
|
unsubscribe(channel: string): void;
|
@@ -1,26 +1,53 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
class Client {
|
4
|
+
set ws(value) {
|
5
|
+
this._ws = value;
|
6
|
+
}
|
7
|
+
get ws() {
|
8
|
+
return this._ws;
|
9
|
+
}
|
10
|
+
set id(value) {
|
11
|
+
this._id = value;
|
12
|
+
}
|
13
|
+
get id() {
|
14
|
+
return this._id;
|
15
|
+
}
|
16
|
+
set channels(value) {
|
17
|
+
this._channels = value;
|
18
|
+
}
|
19
|
+
get channels() {
|
20
|
+
return this._channels;
|
21
|
+
}
|
4
22
|
constructor(id, ws) {
|
5
|
-
this.
|
6
|
-
this.
|
23
|
+
this._id = id;
|
24
|
+
this._ws = ws;
|
7
25
|
this.ws = ws;
|
26
|
+
this._channels = new Map();
|
8
27
|
}
|
9
28
|
joinChannel(channel) {
|
10
|
-
|
11
|
-
this.subscribe(
|
12
|
-
this.
|
29
|
+
const channel_id = channel.getId();
|
30
|
+
this.subscribe(channel_id);
|
31
|
+
this.channels.set(channel_id, channel);
|
32
|
+
this.send({ type: "client.channel.added", content: { channel_id } });
|
13
33
|
}
|
14
34
|
leaveChannel(channel) {
|
15
|
-
|
16
|
-
this.
|
17
|
-
this.
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
35
|
+
const channel_id = channel.getId();
|
36
|
+
this.channels.delete(channel_id);
|
37
|
+
this.unsubscribe(channel_id);
|
38
|
+
this.send({ type: "client.channel.removed", content: { channel_id } });
|
39
|
+
}
|
40
|
+
joinChannels(channels) {
|
41
|
+
channels.forEach((channel) => {
|
42
|
+
this.joinChannel(channel);
|
43
|
+
});
|
44
|
+
}
|
45
|
+
leaveChannels(channels) {
|
46
|
+
if (!channels)
|
47
|
+
channels = Array.from(this.channels.values());
|
48
|
+
channels.forEach((channel) => {
|
49
|
+
this.leaveChannel(channel);
|
50
|
+
});
|
24
51
|
}
|
25
52
|
send(message) {
|
26
53
|
this.ws.send(JSON.stringify(message));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Client.ts"],"names":[],"mappings":";;AAIA,MAAqB,MAAM;IAK1B,YAAY,EAAU,EAAE,EAAwC;
|
1
|
+
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Client.ts"],"names":[],"mappings":";;AAIA,MAAqB,MAAM;IAK1B,IAAY,EAAE,CAAC,KAA2C;QACzD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,IAAW,EAAE;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IAED,IAAY,EAAE,CAAC,KAAa;QAC3B,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,IAAW,EAAE;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IAED,IAAY,QAAQ,CAAC,KAAuB;QAC3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,YAAY,EAAU,EAAE,EAAwC;QAC/D,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,CAAC;IAEM,WAAW,CAAC,OAAgB;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAEM,YAAY,CAAC,OAAgB;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IACxE,CAAC;IAEM,YAAY,CAAC,QAAmB;QACtC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,QAAoB;QACxC,IAAI,CAAC,QAAQ;YAAE,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7D,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC;IAEM,IAAI,CAAC,OAAmC;QAC9C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,CAAC;IAEM,SAAS,CAAC,OAAe;QAC/B,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAEM,WAAW,CAAC,OAAe;QACjC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;CACD;AA1ED,yBA0EC"}
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import { Server, ServerWebSocket, WebSocketHandler } from "bun";
|
2
2
|
import Singleton from "../../../singleton";
|
3
|
-
import type { I_WebsocketEntity, I_WebsocketInterface, WebsocketChannel, WebsocketClientData, WebsocketMessage, WebsocketStructuredMessage } from "./websocket.types";
|
3
|
+
import type { I_WebsocketClient, I_WebsocketEntity, I_WebsocketInterface, WebsocketChannel, WebsocketClientData, WebsocketMessage, WebsocketStructuredMessage } from "./websocket.types";
|
4
4
|
export default class Websocket extends Singleton {
|
5
5
|
protected ws_interface?: I_WebsocketInterface | undefined;
|
6
6
|
protected channels: WebsocketChannel;
|
7
|
+
protected clients: Map<string, I_WebsocketClient>;
|
7
8
|
private _server;
|
8
9
|
protected constructor(ws_interface?: I_WebsocketInterface | undefined);
|
9
10
|
get server(): Server;
|
@@ -17,7 +18,8 @@ export default class Websocket extends Singleton {
|
|
17
18
|
static Heartbeat(ws: ServerWebSocket<WebsocketClientData>, message: WebsocketMessage): boolean;
|
18
19
|
static Server(): Server;
|
19
20
|
static Broadcast(channel: string, message: WebsocketStructuredMessage): void;
|
20
|
-
static
|
21
|
+
static BraodcastAll(message: WebsocketStructuredMessage): void;
|
21
22
|
static Join(channel: string, entity: I_WebsocketEntity): void;
|
22
23
|
static Leave(channel: string, entity: I_WebsocketEntity): void;
|
24
|
+
static GetClient(id: string): I_WebsocketClient | undefined;
|
23
25
|
}
|
@@ -12,6 +12,7 @@ class Websocket extends singleton_1.default {
|
|
12
12
|
super();
|
13
13
|
this.ws_interface = ws_interface;
|
14
14
|
this.channels = new Map();
|
15
|
+
this.clients = new Map();
|
15
16
|
this.clientMessageReceived = (ws, message) => {
|
16
17
|
if (Websocket.Heartbeat(ws, message))
|
17
18
|
return;
|
@@ -19,7 +20,7 @@ class Websocket extends singleton_1.default {
|
|
19
20
|
if (setup && setup.message)
|
20
21
|
return setup.message(ws, message);
|
21
22
|
ws.send("This is the message from the server: " + message);
|
22
|
-
Websocket.
|
23
|
+
Websocket.BraodcastAll({ type: "client.message.received", content: message });
|
23
24
|
};
|
24
25
|
this.handleHeartbeat = (ws, message) => {
|
25
26
|
if (message === "ping") {
|
@@ -31,14 +32,19 @@ class Websocket extends singleton_1.default {
|
|
31
32
|
};
|
32
33
|
this.clientConnected = (ws) => {
|
33
34
|
const global = this.channels.get("global");
|
34
|
-
if (global)
|
35
|
-
|
35
|
+
if (!global)
|
36
|
+
throw new Error("Global channel not found");
|
37
|
+
const client = global.addMember({ id: ws.data.id, ws: ws });
|
38
|
+
if (!client)
|
39
|
+
throw new Error("Failed to add client to global channel");
|
40
|
+
this.clients.set(client.id, client);
|
36
41
|
};
|
37
42
|
this.clientDisconnected = (ws) => {
|
38
43
|
utils_1.Lib.Log("WebSocket connection closed");
|
39
44
|
this.channels.forEach((channel) => {
|
40
|
-
channel.removeMember({ id: ws.data.id, ws });
|
45
|
+
channel.removeMember({ id: ws.data.id, ws: ws });
|
41
46
|
});
|
47
|
+
this.clients.delete(ws.data.id);
|
42
48
|
};
|
43
49
|
const global = new Channel_1.default("global", "Global Channel", 1000);
|
44
50
|
this.channels.set("global", global);
|
@@ -75,11 +81,9 @@ class Websocket extends singleton_1.default {
|
|
75
81
|
}
|
76
82
|
ws.server.publish(channel, JSON.stringify(message));
|
77
83
|
}
|
78
|
-
static
|
84
|
+
static BraodcastAll(message) {
|
79
85
|
const ws = this.GetInstance();
|
80
|
-
ws.channels.forEach((channel) =>
|
81
|
-
channel.broadcast(message);
|
82
|
-
});
|
86
|
+
ws.channels.forEach((channel) => channel.broadcast(message));
|
83
87
|
}
|
84
88
|
static Join(channel, entity) {
|
85
89
|
const ws = this.GetInstance();
|
@@ -89,6 +93,10 @@ class Websocket extends singleton_1.default {
|
|
89
93
|
const ws = this.GetInstance();
|
90
94
|
ws.channels.get(channel)?.removeMember(entity);
|
91
95
|
}
|
96
|
+
static GetClient(id) {
|
97
|
+
const ws = this.GetInstance();
|
98
|
+
return ws.clients.get(id);
|
99
|
+
}
|
92
100
|
}
|
93
101
|
exports.default = Websocket;
|
94
102
|
//# sourceMappingURL=Websocket.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Websocket.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Websocket.ts"],"names":[],"mappings":";;;;;AACA,mEAA2C;AAC3C,oDAAiD;AACjD,wDAAgC;
|
1
|
+
{"version":3,"file":"Websocket.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Websocket.ts"],"names":[],"mappings":"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"}
|
@@ -1,25 +1,26 @@
|
|
1
1
|
import { ServerWebSocket, WebSocketHandler } from "bun";
|
2
2
|
import Channel from "./Channel";
|
3
|
+
export type WebsocketMessage = string | Buffer<ArrayBufferLike>;
|
4
|
+
export type WebsocketChannel<T extends Channel = Channel> = Map<string, T>;
|
5
|
+
export type WebsocketStructuredMessage = {
|
6
|
+
type: string;
|
7
|
+
content: any;
|
8
|
+
channel?: string;
|
9
|
+
metadata?: Record<string, string>;
|
10
|
+
};
|
11
|
+
export type WebsocketClientData = {
|
12
|
+
id: string;
|
13
|
+
};
|
3
14
|
export interface I_WebsocketEntity {
|
4
15
|
ws: ServerWebSocket<WebsocketClientData>;
|
5
16
|
id: string;
|
6
17
|
}
|
7
18
|
export interface I_WebsocketClient extends I_WebsocketEntity {
|
19
|
+
channels: WebsocketChannel;
|
8
20
|
send(message: WebsocketStructuredMessage): void;
|
9
21
|
subscribe(channel: string): void;
|
10
22
|
unsubscribe(channel: string): void;
|
11
23
|
}
|
12
|
-
export type WebsocketClientData = {
|
13
|
-
id: string;
|
14
|
-
};
|
15
|
-
export type WebsocketMessage = string | Buffer<ArrayBufferLike>;
|
16
|
-
export type WebsocketStructuredMessage = {
|
17
|
-
type: string;
|
18
|
-
content: any;
|
19
|
-
channel?: string;
|
20
|
-
metadata?: Record<string, string>;
|
21
|
-
};
|
22
|
-
export type WebsocketChannel<T extends Channel = Channel> = Map<string, T>;
|
23
24
|
export interface I_WebsocketInterface {
|
24
25
|
setup: (channels: WebsocketChannel) => Partial<WebSocketHandler<WebsocketClientData>>;
|
25
26
|
}
|