topsyde-utils 1.0.32 → 1.0.34
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 -3
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/server/bun/websocket/Channel.d.ts +6 -6
- package/dist/server/bun/websocket/Channel.js +16 -9
- package/dist/server/bun/websocket/Channel.js.map +1 -1
- package/dist/server/bun/websocket/{WebsocketClient.d.ts → Client.d.ts} +5 -2
- package/dist/server/bun/websocket/Client.js +36 -0
- package/dist/server/bun/websocket/Client.js.map +1 -0
- package/dist/server/bun/websocket/Websocket.d.ts +6 -2
- package/dist/server/bun/websocket/Websocket.js +31 -9
- package/dist/server/bun/websocket/Websocket.js.map +1 -1
- package/dist/server/bun/websocket/index.d.ts +2 -2
- package/dist/server/bun/websocket/index.js +4 -4
- package/dist/server/bun/websocket/index.js.map +1 -1
- package/dist/server/bun/websocket/websocket.types.d.ts +9 -2
- package/package.json +1 -1
- package/dist/server/bun/websocket/WebsocketClient.js +0 -25
- package/dist/server/bun/websocket/WebsocketClient.js.map +0 -1
package/dist/index.d.ts
CHANGED
@@ -10,8 +10,8 @@ export * from "./server/controller";
|
|
10
10
|
export * from "./server/bun/router/routes";
|
11
11
|
export * from "./server/bun/router/router";
|
12
12
|
export * from "./server/bun/router/router.internal";
|
13
|
+
export * from "./server/bun/websocket/Client";
|
13
14
|
export * from "./server/bun/websocket/Websocket";
|
14
|
-
export * from "./server/bun/websocket/WebsocketClient";
|
15
15
|
export * from "./server/bun/websocket/websocket.types";
|
16
16
|
export * from "./server/bun/websocket/Channel";
|
17
17
|
export * from "./utils/Guards";
|
@@ -24,8 +24,8 @@ export { default as Throwable } from "./throwable";
|
|
24
24
|
export { default as Controller } from "./server/controller";
|
25
25
|
export { default as Router } from "./server/bun/router/router";
|
26
26
|
export { default as Router_Internal } from "./server/bun/router/router.internal";
|
27
|
+
export { default as Client } from "./server/bun/websocket/Client";
|
27
28
|
export { default as Websocket } from "./server/bun/websocket/Websocket";
|
28
|
-
export { default as WebsocketClient } from "./server/bun/websocket/WebsocketClient";
|
29
29
|
export { default as Channel } from "./server/bun/websocket/Channel";
|
30
30
|
export { default as Guards } from "./utils/Guards";
|
31
31
|
export { default as Lib } from "./utils/Lib";
|
@@ -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 { I_WebsocketClient, WebsocketClientData, WebsocketMessage, WebsocketStructuredMessage, WebsocketChannel } from "./server/bun/websocket/websocket.types";
|
42
|
+
export { I_WebsocketEntity, I_WebsocketClient, WebsocketClientData, WebsocketMessage, WebsocketStructuredMessage, WebsocketChannel, } 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.
|
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;
|
23
23
|
// Export all modules
|
24
24
|
__exportStar(require("./errors"), exports);
|
25
25
|
__exportStar(require("./singleton"), exports);
|
@@ -33,8 +33,8 @@ __exportStar(require("./server/controller"), exports);
|
|
33
33
|
__exportStar(require("./server/bun/router/routes"), exports);
|
34
34
|
__exportStar(require("./server/bun/router/router"), exports);
|
35
35
|
__exportStar(require("./server/bun/router/router.internal"), exports);
|
36
|
+
__exportStar(require("./server/bun/websocket/Client"), exports);
|
36
37
|
__exportStar(require("./server/bun/websocket/Websocket"), exports);
|
37
|
-
__exportStar(require("./server/bun/websocket/WebsocketClient"), exports);
|
38
38
|
__exportStar(require("./server/bun/websocket/websocket.types"), exports);
|
39
39
|
__exportStar(require("./server/bun/websocket/Channel"), exports);
|
40
40
|
__exportStar(require("./utils/Guards"), exports);
|
@@ -55,10 +55,10 @@ var router_1 = require("./server/bun/router/router");
|
|
55
55
|
Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return __importDefault(router_1).default; } });
|
56
56
|
var router_internal_1 = require("./server/bun/router/router.internal");
|
57
57
|
Object.defineProperty(exports, "Router_Internal", { enumerable: true, get: function () { return __importDefault(router_internal_1).default; } });
|
58
|
+
var Client_1 = require("./server/bun/websocket/Client");
|
59
|
+
Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return __importDefault(Client_1).default; } });
|
58
60
|
var Websocket_1 = require("./server/bun/websocket/Websocket");
|
59
61
|
Object.defineProperty(exports, "Websocket", { enumerable: true, get: function () { return __importDefault(Websocket_1).default; } });
|
60
|
-
var WebsocketClient_1 = require("./server/bun/websocket/WebsocketClient");
|
61
|
-
Object.defineProperty(exports, "WebsocketClient", { enumerable: true, get: function () { return __importDefault(WebsocketClient_1).default; } });
|
62
62
|
var Channel_1 = require("./server/bun/websocket/Channel");
|
63
63
|
Object.defineProperty(exports, "Channel", { enumerable: true, get: function () { return __importDefault(Channel_1).default; } });
|
64
64
|
var Guards_1 = require("./utils/Guards");
|
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,mEAAiD;AACjD,yEAAuD;AACvD,
|
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,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;AAGnD,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,5 +1,5 @@
|
|
1
|
-
import type { WebsocketStructuredMessage, I_WebsocketClient } from "./websocket.types";
|
2
|
-
import
|
1
|
+
import type { WebsocketStructuredMessage, I_WebsocketClient, I_WebsocketEntity } from "./websocket.types";
|
2
|
+
import Client from "./Client";
|
3
3
|
export default class Channel {
|
4
4
|
private createdAt?;
|
5
5
|
private id;
|
@@ -7,13 +7,13 @@ export default class Channel {
|
|
7
7
|
private limit;
|
8
8
|
private members;
|
9
9
|
private metadata;
|
10
|
-
constructor(id: string, name: string, limit?: number, members?: Map<string,
|
11
|
-
addMember(
|
12
|
-
removeMember(
|
10
|
+
constructor(id: string, name: string, limit?: number, members?: Map<string, Client>, metadata?: Record<string, string>);
|
11
|
+
addMember(entity: I_WebsocketEntity): void;
|
12
|
+
removeMember(entity: I_WebsocketEntity): void;
|
13
13
|
broadcast(message: WebsocketStructuredMessage, exclude?: string[] | I_WebsocketClient[]): void;
|
14
14
|
hasMember(client: I_WebsocketClient | string): void;
|
15
15
|
getMember(client: I_WebsocketClient | string): void;
|
16
|
-
getMembers():
|
16
|
+
getMembers(): I_WebsocketClient[];
|
17
17
|
getMetadata(): Record<string, string>;
|
18
18
|
getCreatedAt(): Date | undefined;
|
19
19
|
getId(): string;
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
const Websocket_1 = __importDefault(require("./Websocket"));
|
7
|
+
const Client_1 = __importDefault(require("./Client"));
|
7
8
|
class Channel {
|
8
9
|
constructor(id, name, limit, members, metadata) {
|
9
10
|
this.createdAt = new Date();
|
@@ -13,25 +14,31 @@ class Channel {
|
|
13
14
|
this.members = members ?? new Map();
|
14
15
|
this.metadata = metadata ?? {};
|
15
16
|
}
|
16
|
-
addMember(
|
17
|
-
if (this.canAddMember())
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
addMember(entity) {
|
18
|
+
if (!this.canAddMember())
|
19
|
+
return;
|
20
|
+
const client = new Client_1.default(entity.id, entity.ws);
|
21
|
+
this.members.set(client.getId(), client);
|
22
|
+
client.joinChannel(this);
|
21
23
|
this.broadcast({
|
22
24
|
type: "channel.member.added",
|
23
|
-
|
25
|
+
content: {
|
24
26
|
channelId: this.id,
|
25
27
|
clientId: client.getId(),
|
26
28
|
},
|
27
29
|
});
|
28
30
|
}
|
29
|
-
removeMember(
|
30
|
-
this.members.
|
31
|
+
removeMember(entity) {
|
32
|
+
if (!this.members.has(entity.id))
|
33
|
+
return;
|
34
|
+
const client = this.members.get(entity.id);
|
35
|
+
if (!client)
|
36
|
+
return;
|
31
37
|
client.leaveChannel(this);
|
38
|
+
this.members.delete(entity.id);
|
32
39
|
}
|
33
40
|
broadcast(message, exclude) {
|
34
|
-
Websocket_1.default.
|
41
|
+
Websocket_1.default.Broadcast(this.id, message);
|
35
42
|
}
|
36
43
|
hasMember(client) { }
|
37
44
|
getMember(client) { }
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Channel.ts"],"names":[],"mappings":";;;;;AAAA,4DAAoC;
|
1
|
+
{"version":3,"file":"Channel.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Channel.ts"],"names":[],"mappings":";;;;;AAAA,4DAAoC;AAEpC,sDAA8B;AAE9B,MAAqB,OAAO;IAQ3B,YAAY,EAAU,EAAE,IAAY,EAAE,KAAc,EAAE,OAA6B,EAAE,QAAiC;QAP9G,cAAS,GAAU,IAAI,IAAI,EAAE,CAAC;QAQrC,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,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,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,CAAC,SAAS,CAAC;YACd,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE;gBACR,SAAS,EAAE,IAAI,CAAC,EAAE;gBAClB,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE;aACxB;SACD,CAAC,CAAC;IACJ,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,IAAG,CAAC;IAEhD,SAAS,CAAC,MAAkC,IAAG,CAAC;IAEhD,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"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { ServerWebSocket } from "bun";
|
2
2
|
import Channel from "./Channel";
|
3
|
-
import type { I_WebsocketClient, WebsocketClientData, WebsocketChannel } from "./websocket.types";
|
4
|
-
export default class
|
3
|
+
import type { I_WebsocketClient, WebsocketClientData, WebsocketChannel, WebsocketStructuredMessage } from "./websocket.types";
|
4
|
+
export default class Client implements I_WebsocketClient {
|
5
5
|
id: string;
|
6
6
|
ws: ServerWebSocket<WebsocketClientData>;
|
7
7
|
private channels;
|
@@ -10,4 +10,7 @@ export default class WebsocketClient implements I_WebsocketClient {
|
|
10
10
|
leaveChannel(channel: Channel): void;
|
11
11
|
getChannels(): WebsocketChannel;
|
12
12
|
getId(): string;
|
13
|
+
send(message: WebsocketStructuredMessage): void;
|
14
|
+
subscribe(channel: string): void;
|
15
|
+
unsubscribe(channel: string): void;
|
13
16
|
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
class Client {
|
4
|
+
constructor(id, ws) {
|
5
|
+
this.channels = new Map();
|
6
|
+
this.id = id;
|
7
|
+
this.ws = ws;
|
8
|
+
}
|
9
|
+
joinChannel(channel) {
|
10
|
+
this.channels.set(channel.getId(), channel);
|
11
|
+
this.subscribe(channel.getId());
|
12
|
+
this.send({ type: "channel.join", content: { channelId: channel.getId() } });
|
13
|
+
}
|
14
|
+
leaveChannel(channel) {
|
15
|
+
this.channels.delete(channel.getId());
|
16
|
+
this.unsubscribe(channel.getId());
|
17
|
+
this.send({ type: "channel.leave", content: { channelId: channel.getId() } });
|
18
|
+
}
|
19
|
+
getChannels() {
|
20
|
+
return this.channels;
|
21
|
+
}
|
22
|
+
getId() {
|
23
|
+
return this.id;
|
24
|
+
}
|
25
|
+
send(message) {
|
26
|
+
this.ws.send(JSON.stringify(message));
|
27
|
+
}
|
28
|
+
subscribe(channel) {
|
29
|
+
this.ws.subscribe(channel);
|
30
|
+
}
|
31
|
+
unsubscribe(channel) {
|
32
|
+
this.ws.unsubscribe(channel);
|
33
|
+
}
|
34
|
+
}
|
35
|
+
exports.default = Client;
|
36
|
+
//# sourceMappingURL=Client.js.map
|
@@ -0,0 +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;QAFxD,aAAQ,GAAqB,IAAI,GAAG,EAAE,CAAC;QAG9C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,CAAC;IAEM,WAAW,CAAC,OAAgB;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC;IAEM,YAAY,CAAC,OAAgB;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/E,CAAC;IAEM,WAAW;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAEM,KAAK;QACX,OAAO,IAAI,CAAC,EAAE,CAAC;IAChB,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;AAzCD,yBAyCC"}
|
@@ -1,14 +1,18 @@
|
|
1
1
|
import { Server, WebSocketHandler } from "bun";
|
2
2
|
import Singleton from "../../../singleton";
|
3
|
-
import type { WebsocketClientData } from "./websocket.types";
|
3
|
+
import type { I_WebsocketEntity, WebsocketClientData, WebsocketStructuredMessage } from "./websocket.types";
|
4
4
|
export default class Websocket extends Singleton {
|
5
5
|
private channels;
|
6
6
|
private server;
|
7
7
|
private constructor();
|
8
8
|
set(server: Server): void;
|
9
9
|
static Server(): Server;
|
10
|
+
static Broadcast(channel: string, message: WebsocketStructuredMessage): void;
|
11
|
+
static Publish(message: WebsocketStructuredMessage): void;
|
12
|
+
static Join(channel: string, entity: I_WebsocketEntity): void;
|
13
|
+
static Leave(channel: string, entity: I_WebsocketEntity): void;
|
10
14
|
setup(): WebSocketHandler<WebsocketClientData>;
|
11
|
-
private
|
15
|
+
private clientMessageReceived;
|
12
16
|
private clientConnected;
|
13
17
|
private clientDisconnected;
|
14
18
|
}
|
@@ -8,43 +8,65 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
8
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
9
9
|
};
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
11
|
-
const Channel_1 = __importDefault(require("./Channel"));
|
12
|
-
const WebsocketClient_1 = __importDefault(require("./WebsocketClient"));
|
13
11
|
const singleton_1 = __importDefault(require("../../../singleton"));
|
12
|
+
const Console_1 = require("../../../utils/Console");
|
13
|
+
const Channel_1 = __importDefault(require("./Channel"));
|
14
14
|
class Websocket extends singleton_1.default {
|
15
15
|
constructor() {
|
16
16
|
super();
|
17
17
|
this.channels = new Map();
|
18
|
-
this.
|
18
|
+
this.clientMessageReceived = (ws, message) => {
|
19
19
|
console.log("Received message:", message);
|
20
|
-
if (message === "ping")
|
21
|
-
|
20
|
+
if (message === "ping") {
|
21
|
+
const pong = { type: "pong", content: "pong" };
|
22
|
+
ws.send(JSON.stringify(pong));
|
23
|
+
}
|
22
24
|
else
|
23
25
|
ws.send(message);
|
26
|
+
Websocket.Publish({ type: "client.message.received", content: message });
|
24
27
|
};
|
25
28
|
this.clientConnected = (ws) => {
|
26
|
-
console.log("WebSocket connection opened");
|
27
29
|
const global = this.channels.get("global");
|
28
|
-
const client = new WebsocketClient_1.default(ws.data.id, ws);
|
29
30
|
if (global)
|
30
|
-
global.addMember(
|
31
|
+
global.addMember({ id: ws.data.id, ws });
|
31
32
|
};
|
32
33
|
this.clientDisconnected = (ws) => {
|
33
34
|
console.log("WebSocket connection closed");
|
35
|
+
this.channels.forEach((channel) => {
|
36
|
+
channel.removeMember({ id: ws.data.id, ws });
|
37
|
+
});
|
34
38
|
};
|
35
39
|
const global = new Channel_1.default("global", "Global Channel", 1000);
|
36
40
|
this.channels.set("global", global);
|
37
41
|
}
|
38
42
|
set(server) {
|
39
43
|
this.server = server;
|
44
|
+
Console_1.Console.success("Websocket server set");
|
40
45
|
}
|
41
46
|
static Server() {
|
42
47
|
return Websocket.GetInstance().server;
|
43
48
|
}
|
49
|
+
static Broadcast(channel, message) {
|
50
|
+
this.Server().publish(channel, JSON.stringify(message));
|
51
|
+
}
|
52
|
+
static Publish(message) {
|
53
|
+
const ws = Websocket.GetInstance();
|
54
|
+
ws.channels.forEach((channel) => {
|
55
|
+
channel.broadcast(message);
|
56
|
+
});
|
57
|
+
}
|
58
|
+
static Join(channel, entity) {
|
59
|
+
const ws = Websocket.GetInstance();
|
60
|
+
ws.channels.get(channel)?.addMember(entity);
|
61
|
+
}
|
62
|
+
static Leave(channel, entity) {
|
63
|
+
const ws = Websocket.GetInstance();
|
64
|
+
ws.channels.get(channel)?.removeMember(entity);
|
65
|
+
}
|
44
66
|
setup() {
|
45
67
|
return {
|
46
|
-
message: this.messageReceived,
|
47
68
|
open: this.clientConnected,
|
69
|
+
message: this.clientMessageReceived,
|
48
70
|
close: this.clientDisconnected,
|
49
71
|
};
|
50
72
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Websocket.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Websocket.ts"],"names":[],"mappings":";AAAA;;;;0FAI0F;;;;;AAG1F,
|
1
|
+
{"version":3,"file":"Websocket.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/Websocket.ts"],"names":[],"mappings":"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"}
|
@@ -1,7 +1,7 @@
|
|
1
|
+
export * from './Client';
|
1
2
|
export * from './Websocket';
|
2
|
-
export * from './WebsocketClient';
|
3
3
|
export * from './websocket.types';
|
4
4
|
export * from './Channel';
|
5
|
+
export { default as Client } from './Client';
|
5
6
|
export { default as Websocket } from './Websocket';
|
6
|
-
export { default as WebsocketClient } from './WebsocketClient';
|
7
7
|
export { default as Channel } from './Channel';
|
@@ -19,15 +19,15 @@ 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.Channel = exports.
|
22
|
+
exports.Channel = exports.Websocket = exports.Client = void 0;
|
23
|
+
__exportStar(require("./Client"), exports);
|
23
24
|
__exportStar(require("./Websocket"), exports);
|
24
|
-
__exportStar(require("./WebsocketClient"), exports);
|
25
25
|
__exportStar(require("./websocket.types"), exports);
|
26
26
|
__exportStar(require("./Channel"), exports);
|
27
|
+
var Client_1 = require("./Client");
|
28
|
+
Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return __importDefault(Client_1).default; } });
|
27
29
|
var Websocket_1 = require("./Websocket");
|
28
30
|
Object.defineProperty(exports, "Websocket", { enumerable: true, get: function () { return __importDefault(Websocket_1).default; } });
|
29
|
-
var WebsocketClient_1 = require("./WebsocketClient");
|
30
|
-
Object.defineProperty(exports, "WebsocketClient", { enumerable: true, get: function () { return __importDefault(WebsocketClient_1).default; } });
|
31
31
|
var Channel_1 = require("./Channel");
|
32
32
|
Object.defineProperty(exports, "Channel", { enumerable: true, get: function () { return __importDefault(Channel_1).default; } });
|
33
33
|
//# 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,8CAA4B;AAC5B,oDAAkC;AAClC,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,iCAAiC;;;;;;;;;;;;;;;;;;;;AAEjC,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,15 +1,22 @@
|
|
1
1
|
import { ServerWebSocket } from "bun";
|
2
2
|
import Channel from "./Channel";
|
3
|
-
export interface
|
3
|
+
export interface I_WebsocketEntity {
|
4
4
|
ws: ServerWebSocket<WebsocketClientData>;
|
5
5
|
id: string;
|
6
6
|
}
|
7
|
+
export interface I_WebsocketClient extends I_WebsocketEntity {
|
8
|
+
send(message: WebsocketStructuredMessage): void;
|
9
|
+
subscribe(channel: string): void;
|
10
|
+
unsubscribe(channel: string): void;
|
11
|
+
}
|
7
12
|
export type WebsocketClientData = {
|
8
13
|
id: string;
|
9
14
|
};
|
10
15
|
export type WebsocketMessage = string | Buffer<ArrayBufferLike>;
|
11
16
|
export type WebsocketStructuredMessage = {
|
12
17
|
type: string;
|
13
|
-
|
18
|
+
content: any;
|
19
|
+
channel?: string;
|
20
|
+
metadata?: Record<string, string>;
|
14
21
|
};
|
15
22
|
export type WebsocketChannel<T extends Channel = Channel> = Map<string, T>;
|
package/package.json
CHANGED
@@ -1,25 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
class WebsocketClient {
|
4
|
-
constructor(id, ws) {
|
5
|
-
this.channels = new Map();
|
6
|
-
this.id = id;
|
7
|
-
this.ws = ws;
|
8
|
-
}
|
9
|
-
joinChannel(channel) {
|
10
|
-
this.channels.set(channel.getId(), channel);
|
11
|
-
this.ws.subscribe(channel.getId());
|
12
|
-
}
|
13
|
-
leaveChannel(channel) {
|
14
|
-
this.channels.delete(channel.getId());
|
15
|
-
this.ws.unsubscribe(channel.getId());
|
16
|
-
}
|
17
|
-
getChannels() {
|
18
|
-
return this.channels;
|
19
|
-
}
|
20
|
-
getId() {
|
21
|
-
return this.id;
|
22
|
-
}
|
23
|
-
}
|
24
|
-
exports.default = WebsocketClient;
|
25
|
-
//# sourceMappingURL=WebsocketClient.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"WebsocketClient.js","sourceRoot":"","sources":["../../../../src/server/bun/websocket/WebsocketClient.ts"],"names":[],"mappings":";;AAIA,MAAqB,eAAe;IAKnC,YAAY,EAAU,EAAE,EAAwC;QAFxD,aAAQ,GAAqB,IAAI,GAAG,EAAE,CAAC;QAG9C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,CAAC;IAEM,WAAW,CAAC,OAAgB;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACpC,CAAC;IAEM,YAAY,CAAC,OAAgB;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACtC,CAAC;IAEM,WAAW;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAEM,KAAK;QACX,OAAO,IAAI,CAAC,EAAE,CAAC;IAChB,CAAC;CACD;AA3BD,kCA2BC"}
|