topsyde-utils 1.0.111 → 1.0.112
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 +3 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/server/bun/websocket/Channel.d.ts +3 -2
- package/dist/server/bun/websocket/Channel.js +6 -77
- package/dist/server/bun/websocket/Channel.js.map +1 -1
- package/dist/server/bun/websocket/Message.d.ts +7 -0
- package/dist/server/bun/websocket/Message.js +80 -0
- package/dist/server/bun/websocket/Message.js.map +1 -0
- package/dist/server/bun/websocket/Websocket.d.ts +3 -2
- package/dist/server/bun/websocket/Websocket.js +7 -0
- package/dist/server/bun/websocket/Websocket.js.map +1 -1
- package/dist/server/bun/websocket/index.d.ts +2 -0
- package/dist/server/bun/websocket/index.js +2 -0
- package/dist/server/bun/websocket/index.js.map +1 -1
- package/dist/server/bun/websocket/websocket.types.d.ts +57 -64
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
@@ -17,6 +17,7 @@ export * from "./server/bun/websocket/Client";
|
|
17
17
|
export * from "./server/bun/websocket/Websocket";
|
18
18
|
export * from "./server/bun/websocket/websocket.enums";
|
19
19
|
export * from "./server/bun/websocket/websocket.types";
|
20
|
+
export * from "./server/bun/websocket/Message";
|
20
21
|
export * from "./server/bun/websocket/Channel";
|
21
22
|
export * from "./utils/Guards";
|
22
23
|
export * from "./utils/Lib";
|
@@ -31,6 +32,7 @@ export { default as Router } from "./server/bun/router/router";
|
|
31
32
|
export { default as Router_Internal } from "./server/bun/router/router.internal";
|
32
33
|
export { default as Client } from "./server/bun/websocket/Client";
|
33
34
|
export { default as Websocket } from "./server/bun/websocket/Websocket";
|
35
|
+
export { default as Message } from "./server/bun/websocket/Message";
|
34
36
|
export { default as Channel } from "./server/bun/websocket/Channel";
|
35
37
|
export { default as Guards } from "./utils/Guards";
|
36
38
|
export { default as Lib } from "./utils/Lib";
|
@@ -45,4 +47,4 @@ export { ControllerResponse, ControllerAction, ControllerMap, ControllerOptions
|
|
45
47
|
export { Routes } from "./server/bun/router/routes";
|
46
48
|
export { WebsocketConstructorOptions, I_WebsocketConstructor } from "./server/bun/websocket/Websocket";
|
47
49
|
export { E_WebsocketMessageType, E_WebsocketMessagePriority } from "./server/bun/websocket/websocket.enums";
|
48
|
-
export {
|
50
|
+
export { BunWebsocketMessage, WebsocketChannel, WebsocketClients, WebsocketMessageOptions, WebsocketMessage, WebsocketStructuredMessage, WebsocketEntityId, WebsocketEntityName, WebsocketEntityData, I_WebsocketEntity, I_WebsocketClient, I_WebsocketChannelEntity, BroadcastOptions, I_WebsocketChannel, I_WebsocketInterface, } from "./server/bun/websocket/websocket.types";
|
package/dist/index.js
CHANGED
@@ -20,6 +20,7 @@ export * from "./server/bun/websocket/Client";
|
|
20
20
|
export * from "./server/bun/websocket/Websocket";
|
21
21
|
export * from "./server/bun/websocket/websocket.enums";
|
22
22
|
export * from "./server/bun/websocket/websocket.types";
|
23
|
+
export * from "./server/bun/websocket/Message";
|
23
24
|
export * from "./server/bun/websocket/Channel";
|
24
25
|
export * from "./utils/Guards";
|
25
26
|
export * from "./utils/Lib";
|
@@ -35,6 +36,7 @@ export { default as Router } from "./server/bun/router/router";
|
|
35
36
|
export { default as Router_Internal } from "./server/bun/router/router.internal";
|
36
37
|
export { default as Client } from "./server/bun/websocket/Client";
|
37
38
|
export { default as Websocket } from "./server/bun/websocket/Websocket";
|
39
|
+
export { default as Message } from "./server/bun/websocket/Message";
|
38
40
|
export { default as Channel } from "./server/bun/websocket/Channel";
|
39
41
|
export { default as Guards } from "./utils/Guards";
|
40
42
|
export { default as Lib } from "./utils/Lib";
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,iCAAiC;AAEjC,qBAAqB;AACrB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0CAA0C,CAAC;AACzD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAEhC,yBAAyB;AACzB,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAErD,sDAAsD;AACtD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEzE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI/C,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,iCAAiC;AAEjC,qBAAqB;AACrB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0CAA0C,CAAC;AACzD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAEhC,yBAAyB;AACzB,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAErD,sDAAsD;AACtD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEzE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI/C,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import Websocket from "./Websocket";
|
2
|
-
import type { BroadcastOptions, I_WebsocketChannel, I_WebsocketClient, I_WebsocketEntity, WebsocketChannel,
|
2
|
+
import type { BroadcastOptions, I_WebsocketChannel, I_WebsocketClient, I_WebsocketEntity, WebsocketChannel, WebsocketMessage } from "./websocket.types";
|
3
3
|
export default class Channel<T extends Websocket = Websocket> implements I_WebsocketChannel<T> {
|
4
4
|
createdAt: Date;
|
5
5
|
id: string;
|
@@ -9,8 +9,9 @@ export default class Channel<T extends Websocket = Websocket> implements I_Webso
|
|
9
9
|
metadata: Record<string, string>;
|
10
10
|
ws: T;
|
11
11
|
private messageTemplate;
|
12
|
+
private message;
|
12
13
|
constructor(id: string, name: string, ws: T, limit?: number, members?: Map<string, I_WebsocketClient>, metadata?: Record<string, string>);
|
13
|
-
broadcast(message:
|
14
|
+
broadcast(message: WebsocketMessage, options?: BroadcastOptions): void;
|
14
15
|
private getFilteredMetadata;
|
15
16
|
hasMember(client: I_WebsocketEntity | string): boolean;
|
16
17
|
addMember(client: I_WebsocketClient): false | I_WebsocketClient;
|
@@ -1,4 +1,5 @@
|
|
1
|
-
import {
|
1
|
+
import { Lib } from "../../../utils";
|
2
|
+
import Message from "./Message";
|
2
3
|
export default class Channel {
|
3
4
|
constructor(id, name, ws, limit, members, metadata) {
|
4
5
|
this.createdAt = new Date();
|
@@ -8,6 +9,7 @@ export default class Channel {
|
|
8
9
|
this.members = members ?? new Map();
|
9
10
|
this.metadata = metadata ?? {};
|
10
11
|
this.ws = ws;
|
12
|
+
this.message = new Message();
|
11
13
|
this.messageTemplate = {
|
12
14
|
type: "",
|
13
15
|
content: {},
|
@@ -16,85 +18,18 @@ export default class Channel {
|
|
16
18
|
};
|
17
19
|
}
|
18
20
|
broadcast(message, options) {
|
19
|
-
|
20
|
-
const output = Object.assign({}, this.messageTemplate);
|
21
|
-
const debug = options?.debug ?? false;
|
22
|
-
// Set the dynamic properties in a single pass
|
23
|
-
output.type = message.type;
|
24
|
-
output.channel = this.id;
|
25
|
-
// Process message content based on type
|
26
|
-
if (typeof message.content === "string") {
|
27
|
-
output.content = { message: message.content };
|
28
|
-
}
|
29
|
-
else if (typeof message.content === "object" && message.content !== null) {
|
30
|
-
output.content = { ...message.content };
|
31
|
-
}
|
32
|
-
else {
|
33
|
-
output.content = {};
|
34
|
-
}
|
35
|
-
if (debug)
|
36
|
-
console.log("Channel- Options: ", options);
|
37
|
-
// Process options in a single pass if provided
|
21
|
+
const output = this.message.create(message, { ...options, channel: this.id });
|
38
22
|
if (options) {
|
39
|
-
// Add data if provided
|
40
|
-
if (options.data !== undefined) {
|
41
|
-
if (typeof options.data === "object" && options.data !== null && !Array.isArray(options.data)) {
|
42
|
-
// Merge object data with content
|
43
|
-
Object.assign(output.content, options.data);
|
44
|
-
}
|
45
|
-
else {
|
46
|
-
// Set as data property for other types
|
47
|
-
output.content.data = options.data;
|
48
|
-
}
|
49
|
-
}
|
50
|
-
if (debug)
|
51
|
-
console.log("Channel- Client data: ", options.client, Guards.IsObject(options.client), Guards.IsString(options.client?.id, true));
|
52
|
-
// Add client information if provided
|
53
|
-
if (options.client && Guards.IsObject(options.client) && Guards.IsString(options.client.id, true)) {
|
54
|
-
output.client = {
|
55
|
-
id: options.client.id,
|
56
|
-
name: options.client.name,
|
57
|
-
};
|
58
|
-
}
|
59
|
-
if (debug)
|
60
|
-
console.log("Channel- Client: ", output.client);
|
61
23
|
// Include channel metadata if requested
|
62
24
|
if (options.includeMetadata) {
|
63
25
|
output.metadata = options.includeMetadata === true ? this.getMetadata() : this.getFilteredMetadata(options.includeMetadata);
|
64
26
|
}
|
65
|
-
// Add timestamp if requested (default: true)
|
66
|
-
if (options.includeTimestamp !== false) {
|
67
|
-
output.timestamp = new Date().toISOString();
|
68
|
-
}
|
69
|
-
else {
|
70
|
-
// Remove timestamp if explicitly disabled
|
71
|
-
delete output.timestamp;
|
72
|
-
}
|
73
|
-
// Add priority if specified
|
74
|
-
if (options.priority !== undefined) {
|
75
|
-
output.priority = options.priority;
|
76
|
-
}
|
77
|
-
// Add expiration if specified
|
78
|
-
if (options.expiresAt !== undefined) {
|
79
|
-
output.expiresAt = options.expiresAt;
|
80
|
-
}
|
81
|
-
// Add any custom fields to the root of the message
|
82
|
-
if (options.customFields) {
|
83
|
-
Object.assign(output, options.customFields);
|
84
|
-
}
|
85
|
-
// Apply custom transformation if provided
|
86
|
-
if (options.transform) {
|
87
|
-
const transformed = options.transform(output);
|
88
|
-
// Publish the transformed output
|
89
|
-
this.ws.server.publish(this.id, JSON.stringify(transformed));
|
90
|
-
return;
|
91
|
-
}
|
92
27
|
// Handle excluded clients if needed
|
93
28
|
if (options.excludeClients && options.excludeClients.length > 0) {
|
94
29
|
// For large channels with many excluded clients, it might be more efficient
|
95
30
|
// to send directly to each client instead of using channel publish
|
96
31
|
if (this.members.size > 10 && options.excludeClients.length > this.members.size / 3) {
|
97
|
-
const serializedMessage =
|
32
|
+
const serializedMessage = this.message.serialize(output);
|
98
33
|
for (const [clientId, client] of this.members) {
|
99
34
|
if (!options.excludeClients.includes(clientId)) {
|
100
35
|
client.ws.send(serializedMessage);
|
@@ -104,14 +39,8 @@ export default class Channel {
|
|
104
39
|
}
|
105
40
|
}
|
106
41
|
}
|
107
|
-
else {
|
108
|
-
// Default timestamp behavior when no options provided
|
109
|
-
output.timestamp = new Date().toISOString();
|
110
|
-
}
|
111
42
|
// Publish to the channel
|
112
|
-
|
113
|
-
console.log("Channel- Output: ", output);
|
114
|
-
this.ws.server.publish(this.id, JSON.stringify(output));
|
43
|
+
this.ws.server.publish(this.id, this.message.serialize(output));
|
115
44
|
}
|
116
45
|
// Helper method for filtered metadata
|
117
46
|
getFilteredMetadata(keys) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Channel.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { WebsocketStructuredMessage, WebsocketMessage, WebsocketMessageOptions } from "./websocket.types";
|
2
|
+
export default class Message {
|
3
|
+
private messageTemplate;
|
4
|
+
constructor();
|
5
|
+
create(message: WebsocketMessage, options?: WebsocketMessageOptions): any;
|
6
|
+
serialize(message: WebsocketStructuredMessage): string;
|
7
|
+
}
|
@@ -0,0 +1,80 @@
|
|
1
|
+
import Guards from "../../../utils/Guards";
|
2
|
+
export default class Message {
|
3
|
+
constructor() {
|
4
|
+
this.messageTemplate = { type: "", content: {}, channel: "", timestamp: "", client: undefined };
|
5
|
+
}
|
6
|
+
create(message, options) {
|
7
|
+
// Clone the template (faster than creating new objects)
|
8
|
+
const output = Object.assign({}, this.messageTemplate);
|
9
|
+
// Set the dynamic properties in a single pass
|
10
|
+
output.type = message.type;
|
11
|
+
output.channel = message.channel || options?.channel || "";
|
12
|
+
// Process message content based on type
|
13
|
+
if (typeof message.content === "string") {
|
14
|
+
output.content = { message: message.content };
|
15
|
+
}
|
16
|
+
else if (typeof message.content === "object" && message.content !== null) {
|
17
|
+
output.content = { ...message.content };
|
18
|
+
}
|
19
|
+
else {
|
20
|
+
output.content = {};
|
21
|
+
}
|
22
|
+
// Process options in a single pass if provided
|
23
|
+
if (options) {
|
24
|
+
// Add data if provided
|
25
|
+
if (options.data !== undefined) {
|
26
|
+
if (typeof options.data === "object" && options.data !== null && !Array.isArray(options.data)) {
|
27
|
+
// Merge object data with content
|
28
|
+
Object.assign(output.content, options.data);
|
29
|
+
}
|
30
|
+
else {
|
31
|
+
// Set as data property for other types
|
32
|
+
output.content.data = options.data;
|
33
|
+
}
|
34
|
+
}
|
35
|
+
// Add client information if provided
|
36
|
+
if (options.client && Guards.IsObject(options.client) && Guards.IsString(options.client.id, true)) {
|
37
|
+
output.client = {
|
38
|
+
id: options.client.id,
|
39
|
+
name: options.client.name,
|
40
|
+
};
|
41
|
+
}
|
42
|
+
// Include channel metadata if requested
|
43
|
+
if (options.includeMetadata !== false)
|
44
|
+
output.metadata = options.metadata;
|
45
|
+
// Add timestamp if requested (default: true)
|
46
|
+
if (options.includeTimestamp !== false) {
|
47
|
+
output.timestamp = new Date().toISOString();
|
48
|
+
}
|
49
|
+
else {
|
50
|
+
// Remove timestamp if explicitly disabled
|
51
|
+
delete output.timestamp;
|
52
|
+
}
|
53
|
+
// Add priority if specified
|
54
|
+
if (options.priority !== undefined) {
|
55
|
+
output.priority = options.priority;
|
56
|
+
}
|
57
|
+
// Add expiration if specified
|
58
|
+
if (options.expiresAt !== undefined) {
|
59
|
+
output.expiresAt = options.expiresAt;
|
60
|
+
}
|
61
|
+
// Add any custom fields to the root of the message
|
62
|
+
if (options.customFields) {
|
63
|
+
Object.assign(output, options.customFields);
|
64
|
+
}
|
65
|
+
// Apply custom transformation if provided
|
66
|
+
if (options.transform) {
|
67
|
+
const transformed = options.transform(output);
|
68
|
+
return transformed;
|
69
|
+
}
|
70
|
+
}
|
71
|
+
else {
|
72
|
+
output.timestamp = new Date().toISOString();
|
73
|
+
}
|
74
|
+
return output;
|
75
|
+
}
|
76
|
+
serialize(message) {
|
77
|
+
return JSON.stringify(message);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
//# sourceMappingURL=Message.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Message.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Message.ts"],"names":[],"mappings":"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"}
|
@@ -2,7 +2,7 @@ import { Server, ServerWebSocket, WebSocketHandler } from "bun";
|
|
2
2
|
import Singleton from "../../../singleton";
|
3
3
|
import Channel from "./Channel";
|
4
4
|
import Client from "./Client";
|
5
|
-
import type { I_WebsocketChannel, I_WebsocketClient, I_WebsocketEntity, I_WebsocketInterface, WebsocketChannel, WebsocketEntityData,
|
5
|
+
import type { I_WebsocketChannel, I_WebsocketClient, I_WebsocketEntity, I_WebsocketInterface, WebsocketChannel, WebsocketEntityData, BunWebsocketMessage, WebsocketStructuredMessage } from "./websocket.types";
|
6
6
|
export type WebsocketConstructorOptions = {
|
7
7
|
debug?: boolean;
|
8
8
|
};
|
@@ -34,7 +34,7 @@ export default class Websocket extends Singleton {
|
|
34
34
|
private clientDisconnected;
|
35
35
|
private handleHeartbeat;
|
36
36
|
protected createClient(entity: I_WebsocketEntity): I_WebsocketClient;
|
37
|
-
static Heartbeat(ws: ServerWebSocket<WebsocketEntityData>, message:
|
37
|
+
static Heartbeat(ws: ServerWebSocket<WebsocketEntityData>, message: BunWebsocketMessage): boolean;
|
38
38
|
static Server(): Server;
|
39
39
|
static Broadcast(channel: string, message: WebsocketStructuredMessage, ...args: any[]): void;
|
40
40
|
static BraodcastAll(message: WebsocketStructuredMessage, ...args: any[]): void;
|
@@ -47,4 +47,5 @@ export default class Websocket extends Singleton {
|
|
47
47
|
static GetClientCount(): number;
|
48
48
|
static GetChannelCount(): number;
|
49
49
|
static CreateClient(entity: I_WebsocketEntity): I_WebsocketClient;
|
50
|
+
static GenerateMessage(): WebsocketStructuredMessage;
|
50
51
|
}
|
@@ -155,5 +155,12 @@ export default class Websocket extends Singleton {
|
|
155
155
|
const ws = this.GetInstance();
|
156
156
|
return ws.createClient(entity);
|
157
157
|
}
|
158
|
+
static GenerateMessage() {
|
159
|
+
const msg = {
|
160
|
+
type: "",
|
161
|
+
content: {}
|
162
|
+
};
|
163
|
+
return msg;
|
164
|
+
}
|
158
165
|
}
|
159
166
|
//# sourceMappingURL=Websocket.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Websocket.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Websocket.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,MAAM,MAAM,UAAU,CAAC;AAW9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAc3D,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,SAAS;IAQ/C,YAAsB,OAAgC;QACrD,KAAK,EAAE,CAAC;QAPC,aAAQ,GAAmC,IAAI,GAAG,EAAE,CAAC;QAqDvD,0BAAqB,GAAG,CAAC,EAAwC,EAAE,
|
1
|
+
{"version":3,"file":"Websocket.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Websocket.ts"],"names":[],"mappings":"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"}
|
@@ -3,7 +3,9 @@ export * from './Client';
|
|
3
3
|
export * from './Websocket';
|
4
4
|
export * from './websocket.enums';
|
5
5
|
export * from './websocket.types';
|
6
|
+
export * from './Message';
|
6
7
|
export * from './Channel';
|
7
8
|
export { default as Client } from './Client';
|
8
9
|
export { default as Websocket } from './Websocket';
|
10
|
+
export { default as Message } from './Message';
|
9
11
|
export { default as Channel } from './Channel';
|
@@ -5,8 +5,10 @@ export * from './Client';
|
|
5
5
|
export * from './Websocket';
|
6
6
|
export * from './websocket.enums';
|
7
7
|
export * from './websocket.types';
|
8
|
+
export * from './Message';
|
8
9
|
export * from './Channel';
|
9
10
|
export { default as Client } from './Client';
|
10
11
|
export { default as Websocket } from './Websocket';
|
12
|
+
export { default as Message } from './Message';
|
11
13
|
export { default as Channel } from './Channel';
|
12
14
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,iCAAiC;AAEjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,iCAAiC;AAEjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC"}
|
@@ -1,72 +1,10 @@
|
|
1
1
|
import { ServerWebSocket, WebSocketHandler } from "bun";
|
2
2
|
import Channel from "./Channel";
|
3
3
|
import Websocket from "./Websocket";
|
4
|
-
export type
|
4
|
+
export type BunWebsocketMessage = string | Buffer<ArrayBufferLike>;
|
5
5
|
export type WebsocketChannel<T extends I_WebsocketChannel = Channel> = Map<string, T>;
|
6
6
|
export type WebsocketClients = Map<string, I_WebsocketClient>;
|
7
|
-
export type
|
8
|
-
/**
|
9
|
-
* Message type identifier used for client-side routing
|
10
|
-
*/
|
11
|
-
type: string;
|
12
|
-
/**
|
13
|
-
* Message content - can be any data structure
|
14
|
-
* If a string is provided, it will be wrapped in {message: string}
|
15
|
-
*/
|
16
|
-
content: T;
|
17
|
-
/**
|
18
|
-
* Optional channel identifier
|
19
|
-
* If not provided, the channel ID will be added automatically during broadcast
|
20
|
-
*/
|
21
|
-
channel?: string;
|
22
|
-
/**
|
23
|
-
* Optional metadata key-value pairs
|
24
|
-
* Can be used to add additional context to the message
|
25
|
-
*/
|
26
|
-
metadata?: Record<string, string>;
|
27
|
-
/**
|
28
|
-
* Optional timestamp
|
29
|
-
* If not provided, it will be added automatically during broadcast
|
30
|
-
*/
|
31
|
-
timestamp?: string;
|
32
|
-
/**
|
33
|
-
* Optional sender information
|
34
|
-
* Can be used to identify the source of the message
|
35
|
-
*/
|
36
|
-
client?: {
|
37
|
-
id: string;
|
38
|
-
name?: string;
|
39
|
-
[key: string]: any;
|
40
|
-
};
|
41
|
-
/**
|
42
|
-
* Any additional custom fields
|
43
|
-
*/
|
44
|
-
[key: string]: any;
|
45
|
-
};
|
46
|
-
export type WebsocketEntityId = string;
|
47
|
-
export type WebsocketEntityName = string;
|
48
|
-
export type WebsocketEntityData = {
|
49
|
-
id: WebsocketEntityId;
|
50
|
-
name: WebsocketEntityName;
|
51
|
-
};
|
52
|
-
export interface I_WebsocketEntity extends WebsocketEntityData {
|
53
|
-
ws: ServerWebSocket<WebsocketEntityData>;
|
54
|
-
}
|
55
|
-
export interface I_WebsocketClient extends I_WebsocketEntity {
|
56
|
-
channels: WebsocketChannel<I_WebsocketChannel>;
|
57
|
-
send(message: WebsocketStructuredMessage): any;
|
58
|
-
subscribe(channel: string): any;
|
59
|
-
joinChannel(channel: I_WebsocketChannel, send?: boolean): void;
|
60
|
-
leaveChannel(channel: I_WebsocketChannel, send?: boolean): void;
|
61
|
-
joinChannels(channels: I_WebsocketChannel[], send?: boolean): void;
|
62
|
-
leaveChannels(channels?: I_WebsocketChannel[], send?: boolean): void;
|
63
|
-
unsubscribe(channel: string): any;
|
64
|
-
whoami(): WebsocketEntityData;
|
65
|
-
}
|
66
|
-
export interface I_WebsocketChannelEntity<T extends Websocket = Websocket> extends WebsocketEntityData {
|
67
|
-
ws: T;
|
68
|
-
}
|
69
|
-
export type BroadcastOptions = {
|
7
|
+
export type WebsocketMessageOptions = {
|
70
8
|
/**
|
71
9
|
* Additional data to include in the message content
|
72
10
|
* If an object is provided, it will be merged with the content
|
@@ -91,6 +29,11 @@ export type BroadcastOptions = {
|
|
91
29
|
* Useful for sending messages to all clients except the sender
|
92
30
|
*/
|
93
31
|
excludeClients?: string[];
|
32
|
+
/**
|
33
|
+
* Channel to include in the message
|
34
|
+
* Defaults to the channel of the message
|
35
|
+
*/
|
36
|
+
channel?: string;
|
94
37
|
/**
|
95
38
|
* Whether to include timestamp in the message
|
96
39
|
* Defaults to true
|
@@ -116,6 +59,56 @@ export type BroadcastOptions = {
|
|
116
59
|
* Can be used by clients to ignore outdated messages
|
117
60
|
*/
|
118
61
|
expiresAt?: number;
|
62
|
+
/**
|
63
|
+
* Metadata to include in the message
|
64
|
+
* If an array of strings, only the specified keys will be included
|
65
|
+
*/
|
66
|
+
metadata?: boolean | string[] | Record<string, string>;
|
67
|
+
};
|
68
|
+
export type WebsocketMessage<T extends Record<string, any> = Record<string, any>> = {
|
69
|
+
/**
|
70
|
+
* Message type identifier used for client-side routing
|
71
|
+
*/
|
72
|
+
type: string;
|
73
|
+
/**
|
74
|
+
* Message content - can be any data structure
|
75
|
+
* If a string is provided, it will be wrapped in {message: string}
|
76
|
+
*/
|
77
|
+
content: T;
|
78
|
+
/**
|
79
|
+
* Channel ID
|
80
|
+
*/
|
81
|
+
channel?: string;
|
82
|
+
/**
|
83
|
+
* Any additional custom fields
|
84
|
+
*/
|
85
|
+
[key: string]: any;
|
86
|
+
};
|
87
|
+
export type WebsocketStructuredMessage<T extends Record<string, any> = Record<string, any>> = WebsocketMessage<T> & WebsocketMessageOptions;
|
88
|
+
export type WebsocketEntityId = string;
|
89
|
+
export type WebsocketEntityName = string;
|
90
|
+
export type WebsocketEntityData = {
|
91
|
+
id: WebsocketEntityId;
|
92
|
+
name: WebsocketEntityName;
|
93
|
+
};
|
94
|
+
export interface I_WebsocketEntity extends WebsocketEntityData {
|
95
|
+
ws: ServerWebSocket<WebsocketEntityData>;
|
96
|
+
}
|
97
|
+
export interface I_WebsocketClient extends I_WebsocketEntity {
|
98
|
+
channels: WebsocketChannel<I_WebsocketChannel>;
|
99
|
+
send(message: WebsocketStructuredMessage): any;
|
100
|
+
subscribe(channel: string): any;
|
101
|
+
joinChannel(channel: I_WebsocketChannel, send?: boolean): void;
|
102
|
+
leaveChannel(channel: I_WebsocketChannel, send?: boolean): void;
|
103
|
+
joinChannels(channels: I_WebsocketChannel[], send?: boolean): void;
|
104
|
+
leaveChannels(channels?: I_WebsocketChannel[], send?: boolean): void;
|
105
|
+
unsubscribe(channel: string): any;
|
106
|
+
whoami(): WebsocketEntityData;
|
107
|
+
}
|
108
|
+
export interface I_WebsocketChannelEntity<T extends Websocket = Websocket> extends WebsocketEntityData {
|
109
|
+
ws: T;
|
110
|
+
}
|
111
|
+
export type BroadcastOptions = WebsocketMessageOptions & {
|
119
112
|
debug?: boolean;
|
120
113
|
};
|
121
114
|
export interface I_WebsocketChannel<T extends Websocket = Websocket> extends I_WebsocketChannelEntity<T> {
|