topsyde-utils 1.0.76 → 1.0.78
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 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/server/bun/websocket/Channel.d.ts +8 -8
- package/dist/server/bun/websocket/Channel.js +31 -13
- package/dist/server/bun/websocket/Channel.js.map +1 -1
- package/dist/server/bun/websocket/Client.d.ts +7 -7
- package/dist/server/bun/websocket/Client.js +29 -8
- package/dist/server/bun/websocket/Client.js.map +1 -1
- package/dist/server/bun/websocket/Websocket.d.ts +11 -5
- package/dist/server/bun/websocket/Websocket.js +28 -24
- package/dist/server/bun/websocket/Websocket.js.map +1 -1
- package/dist/server/bun/websocket/index.d.ts +1 -0
- package/dist/server/bun/websocket/index.js +1 -0
- package/dist/server/bun/websocket/index.js.map +1 -1
- package/dist/server/bun/websocket/websocket.enums.d.ts +8 -0
- package/dist/server/bun/websocket/websocket.enums.js +13 -0
- package/dist/server/bun/websocket/websocket.enums.js.map +1 -0
- package/dist/server/bun/websocket/websocket.types.d.ts +13 -9
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
@@ -13,6 +13,7 @@ export * from "./server/bun/router/router.internal";
|
|
13
13
|
export * from "./server/bun/websocket/websocket.guards";
|
14
14
|
export * from "./server/bun/websocket/Client";
|
15
15
|
export * from "./server/bun/websocket/Websocket";
|
16
|
+
export * from "./server/bun/websocket/websocket.enums";
|
16
17
|
export * from "./server/bun/websocket/websocket.types";
|
17
18
|
export * from "./server/bun/websocket/Channel";
|
18
19
|
export * from "./utils/Guards";
|
@@ -39,4 +40,6 @@ export { ClassConstructor, NonNullableType, ObjectKeys, KVObj, I_ApplicationResp
|
|
39
40
|
export { E_IS, E_ENVIRONMENTS } from "./enums";
|
40
41
|
export { ControllerResponse, ControllerAction, ControllerMap, ControllerOptions } from "./server/controller";
|
41
42
|
export { Routes } from "./server/bun/router/routes";
|
43
|
+
export { I_WebsocketConstructor } from "./server/bun/websocket/Websocket";
|
44
|
+
export { E_WebsocketMessageType } from "./server/bun/websocket/websocket.enums";
|
42
45
|
export { WebsocketMessage, WebsocketChannel, WebsocketStructuredMessage, WebsocketClientData, I_WebsocketEntity, I_WebsocketClient, I_WebsocketChannel, I_WebsocketInterface, } from "./server/bun/websocket/websocket.types";
|
package/dist/index.js
CHANGED
@@ -19,7 +19,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
19
19
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
20
20
|
};
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
22
|
-
exports.E_ENVIRONMENTS = exports.E_IS = exports.LOG_ICONS = exports.LOG_COLORS = exports.DEFAULT_FALSE_RESPONSE = exports.RESPONSE_METHOD_OPTIONS = exports.RESPONSE_INIT = exports.WS_ERROR_CODE = exports.HTTP_ERROR_CODE = exports.ERROR_CODE = exports.Console = exports.Lib = exports.Guards = exports.Channel = exports.Websocket = exports.Client = exports.Router_Internal = exports.Router = exports.Controller = exports.Throwable = exports.Application = exports.Initializable = exports.Singleton = void 0;
|
22
|
+
exports.E_WebsocketMessageType = exports.E_ENVIRONMENTS = exports.E_IS = exports.LOG_ICONS = exports.LOG_COLORS = exports.DEFAULT_FALSE_RESPONSE = exports.RESPONSE_METHOD_OPTIONS = exports.RESPONSE_INIT = exports.WS_ERROR_CODE = exports.HTTP_ERROR_CODE = exports.ERROR_CODE = exports.Console = exports.Lib = exports.Guards = exports.Channel = exports.Websocket = exports.Client = exports.Router_Internal = exports.Router = exports.Controller = exports.Throwable = exports.Application = exports.Initializable = exports.Singleton = void 0;
|
23
23
|
// Export all modules
|
24
24
|
__exportStar(require("./errors"), exports);
|
25
25
|
__exportStar(require("./singleton"), exports);
|
@@ -36,6 +36,7 @@ __exportStar(require("./server/bun/router/router.internal"), exports);
|
|
36
36
|
__exportStar(require("./server/bun/websocket/websocket.guards"), exports);
|
37
37
|
__exportStar(require("./server/bun/websocket/Client"), exports);
|
38
38
|
__exportStar(require("./server/bun/websocket/Websocket"), exports);
|
39
|
+
__exportStar(require("./server/bun/websocket/websocket.enums"), exports);
|
39
40
|
__exportStar(require("./server/bun/websocket/websocket.types"), exports);
|
40
41
|
__exportStar(require("./server/bun/websocket/Channel"), exports);
|
41
42
|
__exportStar(require("./utils/Guards"), exports);
|
@@ -83,4 +84,6 @@ Object.defineProperty(exports, "LOG_ICONS", { enumerable: true, get: function ()
|
|
83
84
|
var enums_1 = require("./enums");
|
84
85
|
Object.defineProperty(exports, "E_IS", { enumerable: true, get: function () { return enums_1.E_IS; } });
|
85
86
|
Object.defineProperty(exports, "E_ENVIRONMENTS", { enumerable: true, get: function () { return enums_1.E_ENVIRONMENTS; } });
|
87
|
+
var websocket_enums_1 = require("./server/bun/websocket/websocket.enums");
|
88
|
+
Object.defineProperty(exports, "E_WebsocketMessageType", { enumerable: true, get: function () { return websocket_enums_1.E_WebsocketMessageType; } });
|
86
89
|
//# sourceMappingURL=index.js.map
|
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,2CAAyB;AACzB,8CAA4B;AAC5B,kDAAgC;AAChC,gDAA8B;AAC9B,2CAAyB;AACzB,0CAAwB;AACxB,8CAA4B;AAC5B,0CAAwB;AACxB,sDAAoC;AACpC,6DAA2C;AAC3C,6DAA2C;AAC3C,sEAAoD;AACpD,0EAAwD;AACxD,gEAA8C;AAC9C,mEAAiD;AACjD,yEAAuD;AACvD,iEAA+C;AAC/C,iDAA+B;AAC/B,8CAA4B;AAC5B,kDAAgC;AAEhC,yBAAyB;AACzB,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,iDAA2D;AAAlD,+HAAA,OAAO,OAAiB;AACjC,6CAAuD;AAA9C,2HAAA,OAAO,OAAe;AAC/B,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,kDAA4D;AAAnD,yHAAA,OAAO,OAAc;AAC9B,qDAA+D;AAAtD,iHAAA,OAAO,OAAU;AAC1B,uEAAiF;AAAxE,mIAAA,OAAO,OAAmB;AACnC,wDAAkE;AAAzD,iHAAA,OAAO,OAAU;AAC1B,8DAAwE;AAA/D,uHAAA,OAAO,OAAa;AAC7B,0DAAoE;AAA3D,mHAAA,OAAO,OAAW;AAC3B,yCAAmD;AAA1C,iHAAA,OAAO,OAAU;AAC1B,mCAA6C;AAApC,2GAAA,OAAO,OAAO;AACvB,2CAAqD;AAA5C,mHAAA,OAAO,OAAW;AAE3B,sDAAsD;AACtD,mCAAsE;AAA7D,oGAAA,UAAU,OAAA;AAAE,yGAAA,eAAe,OAAA;AAAE,uGAAA,aAAa,OAAA;AAEnD,6CAAuE;AAA9D,4GAAA,aAAa,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAC/C,mCAAyE;AAAhE,gHAAA,sBAAsB,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAEtD,iCAA+C;AAAtC,6FAAA,IAAI,OAAA;AAAE,uGAAA,cAAc,OAAA"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;;;;;;;;;;;;;;;AAEjC,qBAAqB;AACrB,2CAAyB;AACzB,8CAA4B;AAC5B,kDAAgC;AAChC,gDAA8B;AAC9B,2CAAyB;AACzB,0CAAwB;AACxB,8CAA4B;AAC5B,0CAAwB;AACxB,sDAAoC;AACpC,6DAA2C;AAC3C,6DAA2C;AAC3C,sEAAoD;AACpD,0EAAwD;AACxD,gEAA8C;AAC9C,mEAAiD;AACjD,yEAAuD;AACvD,yEAAuD;AACvD,iEAA+C;AAC/C,iDAA+B;AAC/B,8CAA4B;AAC5B,kDAAgC;AAEhC,yBAAyB;AACzB,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,iDAA2D;AAAlD,+HAAA,OAAO,OAAiB;AACjC,6CAAuD;AAA9C,2HAAA,OAAO,OAAe;AAC/B,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,kDAA4D;AAAnD,yHAAA,OAAO,OAAc;AAC9B,qDAA+D;AAAtD,iHAAA,OAAO,OAAU;AAC1B,uEAAiF;AAAxE,mIAAA,OAAO,OAAmB;AACnC,wDAAkE;AAAzD,iHAAA,OAAO,OAAU;AAC1B,8DAAwE;AAA/D,uHAAA,OAAO,OAAa;AAC7B,0DAAoE;AAA3D,mHAAA,OAAO,OAAW;AAC3B,yCAAmD;AAA1C,iHAAA,OAAO,OAAU;AAC1B,mCAA6C;AAApC,2GAAA,OAAO,OAAO;AACvB,2CAAqD;AAA5C,mHAAA,OAAO,OAAW;AAE3B,sDAAsD;AACtD,mCAAsE;AAA7D,oGAAA,UAAU,OAAA;AAAE,yGAAA,eAAe,OAAA;AAAE,uGAAA,aAAa,OAAA;AAEnD,6CAAuE;AAA9D,4GAAA,aAAa,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAC/C,mCAAyE;AAAhE,gHAAA,sBAAsB,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAEtD,iCAA+C;AAAtC,6FAAA,IAAI,OAAA;AAAE,uGAAA,cAAc,OAAA;AAI7B,0EAAgF;AAAvE,yHAAA,sBAAsB,OAAA"}
|
@@ -1,19 +1,18 @@
|
|
1
|
-
import
|
2
|
-
import type { I_WebsocketChannel, I_WebsocketClient, I_WebsocketEntity, WebsocketStructuredMessage } from "./websocket.types";
|
1
|
+
import type { I_WebsocketChannel, I_WebsocketClient, I_WebsocketEntity, WebsocketChannel, WebsocketStructuredMessage } from "./websocket.types";
|
3
2
|
export default class Channel implements I_WebsocketChannel {
|
4
3
|
createdAt: Date;
|
5
4
|
id: string;
|
6
5
|
name: string;
|
7
6
|
limit: number;
|
8
|
-
members: Map<string,
|
7
|
+
members: Map<string, I_WebsocketClient>;
|
9
8
|
metadata: Record<string, string>;
|
10
|
-
constructor(id: string, name: string, limit?: number, members?: Map<string,
|
11
|
-
addMember(entity: I_WebsocketEntity): false | Client;
|
12
|
-
removeMember(entity: I_WebsocketEntity): false | Client;
|
9
|
+
constructor(id: string, name: string, limit?: number, members?: Map<string, I_WebsocketClient>, metadata?: Record<string, string>);
|
13
10
|
broadcast(message: WebsocketStructuredMessage): void;
|
14
11
|
hasMember(client: I_WebsocketEntity | string): boolean;
|
15
|
-
|
16
|
-
|
12
|
+
addMember(client: I_WebsocketClient): false | I_WebsocketClient;
|
13
|
+
removeMember(entity: I_WebsocketEntity): false | I_WebsocketClient;
|
14
|
+
getMember(client: I_WebsocketEntity | string): I_WebsocketClient | undefined;
|
15
|
+
getMembers(clients?: string[] | I_WebsocketEntity[]): I_WebsocketClient[];
|
17
16
|
getMetadata(): Record<string, string>;
|
18
17
|
getCreatedAt(): Date;
|
19
18
|
getId(): string;
|
@@ -21,4 +20,5 @@ export default class Channel implements I_WebsocketChannel {
|
|
21
20
|
getLimit(): number;
|
22
21
|
getSize(): number;
|
23
22
|
canAddMember(): boolean;
|
23
|
+
static GetChannelType(channels: WebsocketChannel<I_WebsocketChannel> | undefined): typeof Channel;
|
24
24
|
}
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
const
|
6
|
+
const utils_1 = require("../../../utils");
|
7
7
|
const Websocket_1 = __importDefault(require("./Websocket"));
|
8
8
|
class Channel {
|
9
9
|
constructor(id, name, limit, members, metadata) {
|
@@ -14,10 +14,17 @@ class Channel {
|
|
14
14
|
this.members = members ?? new Map();
|
15
15
|
this.metadata = metadata ?? {};
|
16
16
|
}
|
17
|
-
|
17
|
+
broadcast(message) {
|
18
|
+
Websocket_1.default.Broadcast(this.id, message);
|
19
|
+
}
|
20
|
+
hasMember(client) {
|
21
|
+
if (typeof client === "string")
|
22
|
+
return this.members.has(client);
|
23
|
+
return this.members.has(client.id);
|
24
|
+
}
|
25
|
+
addMember(client) {
|
18
26
|
if (!this.canAddMember())
|
19
27
|
return false;
|
20
|
-
const client = new Client_1.default(entity);
|
21
28
|
this.members.set(client.id, client);
|
22
29
|
client.joinChannel(this);
|
23
30
|
return client;
|
@@ -32,21 +39,15 @@ class Channel {
|
|
32
39
|
this.members.delete(entity.id);
|
33
40
|
return client;
|
34
41
|
}
|
35
|
-
broadcast(message) {
|
36
|
-
Websocket_1.default.Broadcast(this.id, message);
|
37
|
-
}
|
38
|
-
hasMember(client) {
|
39
|
-
if (typeof client === "string")
|
40
|
-
return this.members.has(client);
|
41
|
-
return this.members.has(client.id);
|
42
|
-
}
|
43
42
|
getMember(client) {
|
44
43
|
if (typeof client === "string")
|
45
44
|
return this.members.get(client);
|
46
45
|
return this.members.get(client.id);
|
47
46
|
}
|
48
|
-
getMembers() {
|
49
|
-
|
47
|
+
getMembers(clients) {
|
48
|
+
if (!clients)
|
49
|
+
return Array.from(this.members.values());
|
50
|
+
return clients.map((client) => this.getMember(client)).filter((client) => client !== undefined);
|
50
51
|
}
|
51
52
|
getMetadata() {
|
52
53
|
return this.metadata;
|
@@ -70,6 +71,23 @@ class Channel {
|
|
70
71
|
const size = this.getSize();
|
71
72
|
return size < this.limit;
|
72
73
|
}
|
74
|
+
static GetChannelType(channels) {
|
75
|
+
if (!channels)
|
76
|
+
return Channel;
|
77
|
+
if (channels.size > 0) {
|
78
|
+
const firstChannel = channels.values().next().value;
|
79
|
+
if (firstChannel) {
|
80
|
+
return firstChannel.constructor;
|
81
|
+
}
|
82
|
+
else {
|
83
|
+
return Channel;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
else {
|
87
|
+
utils_1.Lib.Warn("Channels are empty, using default channel class");
|
88
|
+
return Channel;
|
89
|
+
}
|
90
|
+
}
|
73
91
|
}
|
74
92
|
exports.default = Channel;
|
75
93
|
//# sourceMappingURL=Channel.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Channel.ts"],"names":[],"mappings":";;;;;AAAA,
|
1
|
+
{"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Channel.ts"],"names":[],"mappings":";;;;;AAAA,0CAAqC;AACrC,4DAAoC;AAGpC,MAAqB,OAAO;IAQ3B,YAAY,EAAU,EAAE,IAAY,EAAE,KAAc,EAAE,OAAwC,EAAE,QAAiC;QAP1H,cAAS,GAAS,IAAI,IAAI,EAAE,CAAC;QAQnC,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;IAEM,SAAS,CAAC,OAAmC;QACnD,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,MAAyB;QACzC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE,OAAO,KAAK,CAAC;QACvC,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,KAAK,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC;IACf,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,CAAC,OAAwC;QACzD,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAwB,CAAC;IACxH,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;IAEM,YAAY;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1B,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,QAA0D;QACtF,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC;QAC9B,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACpD,IAAI,YAAY,EAAE,CAAC;gBAClB,OAAO,YAAY,CAAC,WAA6B,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACP,OAAO,OAAO,CAAC;YAChB,CAAC;QACF,CAAC;aAAM,CAAC;YACP,WAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC5D,OAAO,OAAO,CAAC;QAChB,CAAC;IACF,CAAC;CACD;AA9FD,0BA8FC"}
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import { ServerWebSocket } from "bun";
|
2
|
-
import
|
3
|
-
import type { I_WebsocketClient, WebsocketClientData, WebsocketChannel, WebsocketStructuredMessage, I_WebsocketEntity } from "./websocket.types";
|
2
|
+
import type { I_WebsocketClient, WebsocketClientData, WebsocketChannel, WebsocketStructuredMessage, I_WebsocketEntity, I_WebsocketChannel } from "./websocket.types";
|
4
3
|
export default class Client implements I_WebsocketClient {
|
5
4
|
private _id;
|
6
5
|
private _name;
|
@@ -13,12 +12,12 @@ export default class Client implements I_WebsocketClient {
|
|
13
12
|
get name(): string;
|
14
13
|
private set name(value);
|
15
14
|
private set channels(value);
|
16
|
-
get channels(): WebsocketChannel
|
15
|
+
get channels(): WebsocketChannel<I_WebsocketChannel>;
|
17
16
|
constructor(entity: I_WebsocketEntity);
|
18
|
-
joinChannel(channel:
|
19
|
-
leaveChannel(channel:
|
20
|
-
joinChannels(channels:
|
21
|
-
leaveChannels(channels?:
|
17
|
+
joinChannel(channel: I_WebsocketChannel, send?: boolean): void;
|
18
|
+
leaveChannel(channel: I_WebsocketChannel, send?: boolean): void;
|
19
|
+
joinChannels(channels: I_WebsocketChannel[], send?: boolean): void;
|
20
|
+
leaveChannels(channels?: I_WebsocketChannel[], send?: boolean): void;
|
22
21
|
whoami(): {
|
23
22
|
id: string;
|
24
23
|
name: string;
|
@@ -26,4 +25,5 @@ export default class Client implements I_WebsocketClient {
|
|
26
25
|
send(message: WebsocketStructuredMessage): void;
|
27
26
|
subscribe(channel: string): void;
|
28
27
|
unsubscribe(channel: string): void;
|
28
|
+
static GetClientType(clients: Map<string, I_WebsocketClient> | undefined): typeof Client;
|
29
29
|
}
|
@@ -1,5 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const websocket_enums_1 = require("./websocket.enums");
|
4
|
+
const utils_1 = require("../../../utils");
|
3
5
|
class Client {
|
4
6
|
set ws(value) {
|
5
7
|
this._ws = value;
|
@@ -32,29 +34,35 @@ class Client {
|
|
32
34
|
this.ws = entity.ws;
|
33
35
|
this._channels = new Map();
|
34
36
|
}
|
35
|
-
joinChannel(channel) {
|
37
|
+
joinChannel(channel, send = true) {
|
36
38
|
const channel_id = channel.getId();
|
37
39
|
this.subscribe(channel_id);
|
38
40
|
this.channels.set(channel_id, channel);
|
39
|
-
|
41
|
+
if (send)
|
42
|
+
this.send({ type: websocket_enums_1.E_WebsocketMessageType.CLIENT_JOIN_CHANNEL, content: { channel_id } });
|
40
43
|
}
|
41
|
-
leaveChannel(channel) {
|
44
|
+
leaveChannel(channel, send = true) {
|
42
45
|
const channel_id = channel.getId();
|
43
46
|
this.channels.delete(channel_id);
|
44
47
|
this.unsubscribe(channel_id);
|
45
|
-
|
48
|
+
if (send)
|
49
|
+
this.send({ type: websocket_enums_1.E_WebsocketMessageType.CLIENT_LEAVE_CHANNEL, content: { channel_id } });
|
46
50
|
}
|
47
|
-
joinChannels(channels) {
|
51
|
+
joinChannels(channels, send = true) {
|
48
52
|
channels.forEach((channel) => {
|
49
|
-
this.joinChannel(channel);
|
53
|
+
this.joinChannel(channel, false);
|
50
54
|
});
|
55
|
+
if (send)
|
56
|
+
this.send({ type: websocket_enums_1.E_WebsocketMessageType.CLIENT_JOIN_CHANNELS, content: { channels } });
|
51
57
|
}
|
52
|
-
leaveChannels(channels) {
|
58
|
+
leaveChannels(channels, send = true) {
|
53
59
|
if (!channels)
|
54
60
|
channels = Array.from(this.channels.values());
|
55
61
|
channels.forEach((channel) => {
|
56
|
-
this.leaveChannel(channel);
|
62
|
+
this.leaveChannel(channel, false);
|
57
63
|
});
|
64
|
+
if (send)
|
65
|
+
this.send({ type: websocket_enums_1.E_WebsocketMessageType.CLIENT_LEAVE_CHANNELS, content: { channels } });
|
58
66
|
}
|
59
67
|
whoami() {
|
60
68
|
return { id: this.id, name: this.name };
|
@@ -68,6 +76,19 @@ class Client {
|
|
68
76
|
unsubscribe(channel) {
|
69
77
|
this.ws.unsubscribe(channel);
|
70
78
|
}
|
79
|
+
static GetClientType(clients) {
|
80
|
+
if (!clients)
|
81
|
+
return Client;
|
82
|
+
if (clients.size > 0) {
|
83
|
+
const firstClient = clients.values().next().value;
|
84
|
+
if (firstClient) {
|
85
|
+
return firstClient.constructor;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
// Fallback to default Client class
|
89
|
+
utils_1.Lib.Warn("Clients map is empty, using default client class");
|
90
|
+
return Client;
|
91
|
+
}
|
71
92
|
}
|
72
93
|
exports.default = Client;
|
73
94
|
//# sourceMappingURL=Client.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Client.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Client.ts"],"names":[],"mappings":"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"}
|
@@ -1,27 +1,33 @@
|
|
1
1
|
import { Server, ServerWebSocket, WebSocketHandler } from "bun";
|
2
2
|
import Singleton from "../../../singleton";
|
3
3
|
import Channel from "./Channel";
|
4
|
+
import Client from "./Client";
|
4
5
|
import type { I_WebsocketChannel, I_WebsocketClient, I_WebsocketEntity, I_WebsocketInterface, WebsocketChannel, WebsocketClientData, WebsocketMessage, WebsocketStructuredMessage } from "./websocket.types";
|
6
|
+
export interface I_WebsocketConstructor {
|
7
|
+
ws_interface?: I_WebsocketInterface;
|
8
|
+
channels?: WebsocketChannel;
|
9
|
+
clientClass?: typeof Client;
|
10
|
+
}
|
5
11
|
export default class Websocket extends Singleton {
|
6
12
|
protected _channels: WebsocketChannel;
|
7
13
|
protected _clients: Map<string, I_WebsocketClient>;
|
8
14
|
private _server;
|
9
15
|
private _channelClass;
|
16
|
+
private _clientClass;
|
10
17
|
private _ws_interface?;
|
11
|
-
protected constructor(options?:
|
12
|
-
ws_interface?: I_WebsocketInterface;
|
13
|
-
channels?: WebsocketChannel;
|
14
|
-
});
|
18
|
+
protected constructor(options?: I_WebsocketConstructor);
|
15
19
|
private set server(value);
|
16
20
|
get server(): Server;
|
17
21
|
set(server: Server): void;
|
18
22
|
createChannel(id: string, name: string, limit?: number): I_WebsocketChannel;
|
23
|
+
removeChannel(id: string): void;
|
19
24
|
static CreateChannel(id: string, name: string, limit?: number): I_WebsocketChannel;
|
20
25
|
setup(): WebSocketHandler<WebsocketClientData>;
|
21
26
|
private clientMessageReceived;
|
22
27
|
private handleHeartbeat;
|
23
28
|
private clientConnected;
|
24
29
|
private clientDisconnected;
|
30
|
+
protected createClient(entity: I_WebsocketEntity): I_WebsocketClient;
|
25
31
|
static Heartbeat(ws: ServerWebSocket<WebsocketClientData>, message: WebsocketMessage): boolean;
|
26
32
|
static Server(): Server;
|
27
33
|
static Broadcast(channel: string, message: WebsocketStructuredMessage): void;
|
@@ -34,5 +40,5 @@ export default class Websocket extends Singleton {
|
|
34
40
|
static GetClients(): I_WebsocketClient[];
|
35
41
|
static GetClientCount(): number;
|
36
42
|
static GetChannelCount(): number;
|
37
|
-
|
43
|
+
static CreateClient(entity: I_WebsocketEntity): I_WebsocketClient;
|
38
44
|
}
|
@@ -7,6 +7,8 @@ const singleton_1 = __importDefault(require("../../../singleton"));
|
|
7
7
|
const utils_1 = require("../../../utils");
|
8
8
|
const Console_1 = require("../../../utils/Console");
|
9
9
|
const Channel_1 = __importDefault(require("./Channel"));
|
10
|
+
const Client_1 = __importDefault(require("./Client"));
|
11
|
+
const websocket_enums_1 = require("./websocket.enums");
|
10
12
|
class Websocket extends singleton_1.default {
|
11
13
|
constructor(options) {
|
12
14
|
super();
|
@@ -32,22 +34,25 @@ class Websocket extends singleton_1.default {
|
|
32
34
|
const global = this._channels.get("global");
|
33
35
|
if (!global)
|
34
36
|
throw new Error("Global channel not found");
|
35
|
-
const client =
|
36
|
-
if (!client)
|
37
|
-
throw new Error("Failed to add client to global channel");
|
37
|
+
const client = Websocket.CreateClient({ id: ws.data.id, ws: ws, name: ws.data.name });
|
38
38
|
this._clients.set(client.id, client);
|
39
|
-
|
39
|
+
global.addMember(client);
|
40
|
+
client.send({ type: websocket_enums_1.E_WebsocketMessageType.CLIENT_CONNECTED, content: { client: client.whoami() } });
|
40
41
|
};
|
41
42
|
this.clientDisconnected = (ws) => {
|
42
43
|
utils_1.Lib.Log("WebSocket connection closed");
|
44
|
+
const client = this._clients.get(ws.data.id);
|
45
|
+
if (!client)
|
46
|
+
return;
|
43
47
|
this._channels.forEach((channel) => {
|
44
|
-
channel.removeMember(
|
48
|
+
channel.removeMember(client);
|
45
49
|
});
|
46
50
|
this._clients.delete(ws.data.id);
|
47
51
|
};
|
48
52
|
this._ws_interface = options?.ws_interface;
|
49
53
|
this._channels = options?.channels ?? new Map();
|
50
|
-
this.
|
54
|
+
this._clientClass = options?.clientClass ?? Client_1.default;
|
55
|
+
this._channelClass = Channel_1.default.GetChannelType(options?.channels);
|
51
56
|
this.createChannel("global", "Global", 1000);
|
52
57
|
}
|
53
58
|
set server(value) {
|
@@ -67,6 +72,9 @@ class Websocket extends singleton_1.default {
|
|
67
72
|
this._channels.set(id, channel);
|
68
73
|
return channel;
|
69
74
|
}
|
75
|
+
removeChannel(id) {
|
76
|
+
this._channels.delete(id);
|
77
|
+
}
|
70
78
|
static CreateChannel(id, name, limit) {
|
71
79
|
const ws = this.GetInstance();
|
72
80
|
return ws.createChannel(id, name, limit);
|
@@ -78,6 +86,9 @@ class Websocket extends singleton_1.default {
|
|
78
86
|
close: this.clientDisconnected,
|
79
87
|
};
|
80
88
|
}
|
89
|
+
createClient(entity) {
|
90
|
+
return new this._clientClass(entity);
|
91
|
+
}
|
81
92
|
static Heartbeat(ws, message) {
|
82
93
|
const self = this.GetInstance();
|
83
94
|
return self.handleHeartbeat(ws, message);
|
@@ -99,11 +110,17 @@ class Websocket extends singleton_1.default {
|
|
99
110
|
}
|
100
111
|
static Join(channel, entity) {
|
101
112
|
const ws = this.GetInstance();
|
102
|
-
ws.
|
113
|
+
const client = ws._clients.get(entity.id);
|
114
|
+
if (!client)
|
115
|
+
return;
|
116
|
+
ws._channels.get(channel)?.addMember(client);
|
103
117
|
}
|
104
118
|
static Leave(channel, entity) {
|
105
119
|
const ws = this.GetInstance();
|
106
|
-
ws.
|
120
|
+
const client = ws._clients.get(entity.id);
|
121
|
+
if (!client)
|
122
|
+
return;
|
123
|
+
ws._channels.get(channel)?.removeMember(client);
|
107
124
|
}
|
108
125
|
static GetClient(id) {
|
109
126
|
const ws = this.GetInstance();
|
@@ -129,22 +146,9 @@ class Websocket extends singleton_1.default {
|
|
129
146
|
const ws = this.GetInstance();
|
130
147
|
return ws._channels.size;
|
131
148
|
}
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
if (channels.size > 0) {
|
136
|
-
const firstChannel = channels.values().next().value;
|
137
|
-
if (firstChannel) {
|
138
|
-
return firstChannel.constructor;
|
139
|
-
}
|
140
|
-
else {
|
141
|
-
return Channel_1.default;
|
142
|
-
}
|
143
|
-
}
|
144
|
-
else {
|
145
|
-
utils_1.Lib.Warn("Channels are empty, using default channel class");
|
146
|
-
return Channel_1.default;
|
147
|
-
}
|
149
|
+
static CreateClient(entity) {
|
150
|
+
const ws = this.GetInstance();
|
151
|
+
return ws.createClient(entity);
|
148
152
|
}
|
149
153
|
}
|
150
154
|
exports.default = Websocket;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Websocket.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Websocket.ts"],"names":[],"mappings":";;;;;AACA,mEAA2C;AAC3C,0CAAqC;AACrC,oDAAiD;AACjD,wDAAgC;
|
1
|
+
{"version":3,"file":"Websocket.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Websocket.ts"],"names":[],"mappings":"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"}
|
@@ -23,6 +23,7 @@ exports.Channel = exports.Websocket = exports.Client = void 0;
|
|
23
23
|
__exportStar(require("./websocket.guards"), exports);
|
24
24
|
__exportStar(require("./Client"), exports);
|
25
25
|
__exportStar(require("./Websocket"), exports);
|
26
|
+
__exportStar(require("./websocket.enums"), exports);
|
26
27
|
__exportStar(require("./websocket.types"), exports);
|
27
28
|
__exportStar(require("./Channel"), exports);
|
28
29
|
var Client_1 = require("./Client");
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;;;;;;;;;;;;;;;AAEjC,qDAAmC;AACnC,2CAAyB;AACzB,8CAA4B;AAC5B,oDAAkC;AAClC,4CAA0B;AAC1B,mCAA6C;AAApC,iHAAA,OAAO,OAAU;AAC1B,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,qCAA+C;AAAtC,mHAAA,OAAO,OAAW"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;;;;;;;;;;;;;;;AAEjC,qDAAmC;AACnC,2CAAyB;AACzB,8CAA4B;AAC5B,oDAAkC;AAClC,oDAAkC;AAClC,4CAA0B;AAC1B,mCAA6C;AAApC,iHAAA,OAAO,OAAU;AAC1B,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,qCAA+C;AAAtC,mHAAA,OAAO,OAAW"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export declare enum E_WebsocketMessageType {
|
2
|
+
CLIENT_CONNECTED = "client.connected",
|
3
|
+
CLIENT_DISCONNECTED = "client.disconnected",
|
4
|
+
CLIENT_JOIN_CHANNEL = "client.join.channel",
|
5
|
+
CLIENT_LEAVE_CHANNEL = "client.leave.channel",
|
6
|
+
CLIENT_JOIN_CHANNELS = "client.join.channels",
|
7
|
+
CLIENT_LEAVE_CHANNELS = "client.leave.channels"
|
8
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.E_WebsocketMessageType = void 0;
|
4
|
+
var E_WebsocketMessageType;
|
5
|
+
(function (E_WebsocketMessageType) {
|
6
|
+
E_WebsocketMessageType["CLIENT_CONNECTED"] = "client.connected";
|
7
|
+
E_WebsocketMessageType["CLIENT_DISCONNECTED"] = "client.disconnected";
|
8
|
+
E_WebsocketMessageType["CLIENT_JOIN_CHANNEL"] = "client.join.channel";
|
9
|
+
E_WebsocketMessageType["CLIENT_LEAVE_CHANNEL"] = "client.leave.channel";
|
10
|
+
E_WebsocketMessageType["CLIENT_JOIN_CHANNELS"] = "client.join.channels";
|
11
|
+
E_WebsocketMessageType["CLIENT_LEAVE_CHANNELS"] = "client.leave.channels";
|
12
|
+
})(E_WebsocketMessageType || (exports.E_WebsocketMessageType = E_WebsocketMessageType = {}));
|
13
|
+
//# sourceMappingURL=websocket.enums.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"websocket.enums.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/websocket.enums.ts"],"names":[],"mappings":";;;AAAA,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IACjC,+DAAqC,CAAA;IACrC,qEAA2C,CAAA;IAC3C,qEAA2C,CAAA;IAC3C,uEAA6C,CAAA;IAC7C,uEAA6C,CAAA;IAC7C,yEAA+C,CAAA;AAChD,CAAC,EAPW,sBAAsB,sCAAtB,sBAAsB,QAOjC"}
|
@@ -2,9 +2,9 @@ import { ServerWebSocket, WebSocketHandler } from "bun";
|
|
2
2
|
import Channel from "./Channel";
|
3
3
|
export type WebsocketMessage = string | Buffer<ArrayBufferLike>;
|
4
4
|
export type WebsocketChannel<T extends I_WebsocketChannel = Channel> = Map<string, T>;
|
5
|
-
export type WebsocketStructuredMessage = {
|
5
|
+
export type WebsocketStructuredMessage<T = any> = {
|
6
6
|
type: string;
|
7
|
-
content:
|
7
|
+
content: T;
|
8
8
|
channel?: string;
|
9
9
|
metadata?: Record<string, string>;
|
10
10
|
};
|
@@ -18,10 +18,14 @@ export interface I_WebsocketEntity {
|
|
18
18
|
name: string;
|
19
19
|
}
|
20
20
|
export interface I_WebsocketClient extends I_WebsocketEntity {
|
21
|
-
channels: WebsocketChannel
|
22
|
-
send(message: WebsocketStructuredMessage):
|
23
|
-
subscribe(channel: string):
|
24
|
-
|
21
|
+
channels: WebsocketChannel<I_WebsocketChannel>;
|
22
|
+
send(message: WebsocketStructuredMessage): any;
|
23
|
+
subscribe(channel: string): any;
|
24
|
+
joinChannel(channel: I_WebsocketChannel, send?: boolean): void;
|
25
|
+
leaveChannel(channel: I_WebsocketChannel, send?: boolean): void;
|
26
|
+
joinChannels(channels: I_WebsocketChannel[], send?: boolean): void;
|
27
|
+
leaveChannels(channels?: I_WebsocketChannel[], send?: boolean): void;
|
28
|
+
unsubscribe(channel: string): any;
|
25
29
|
whoami(): WebsocketClientData;
|
26
30
|
}
|
27
31
|
export interface I_WebsocketChannel {
|
@@ -31,12 +35,12 @@ export interface I_WebsocketChannel {
|
|
31
35
|
members: Map<string, I_WebsocketClient>;
|
32
36
|
metadata: Record<string, string>;
|
33
37
|
createdAt: Date;
|
34
|
-
broadcast(message: WebsocketStructuredMessage):
|
38
|
+
broadcast(message: WebsocketStructuredMessage): any;
|
35
39
|
hasMember(client: I_WebsocketEntity | string): boolean;
|
36
|
-
addMember(entity:
|
40
|
+
addMember(entity: I_WebsocketClient): I_WebsocketClient | false;
|
37
41
|
removeMember(entity: I_WebsocketEntity): I_WebsocketClient | false;
|
38
42
|
getMember(client: I_WebsocketEntity | string): I_WebsocketClient | undefined;
|
39
|
-
getMembers(): I_WebsocketClient[];
|
43
|
+
getMembers(clients?: string[] | I_WebsocketEntity[]): I_WebsocketClient[];
|
40
44
|
getMetadata(): Record<string, string>;
|
41
45
|
getCreatedAt(): Date;
|
42
46
|
getId(): string;
|