@lyxa.ai/core 1.0.382 → 1.0.383
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/libraries/socket/core/socket-redis-connections.d.ts +1 -1
- package/dist/libraries/socket/core/socket-redis-connections.js +3 -1
- package/dist/libraries/socket/core/socket-redis-connections.js.map +1 -1
- package/dist/types/README.md +1 -1
- package/dist/types/package.json +1 -1
- package/package.json +1 -1
- package/dist/libraries/socket-manager/connection.store.d.ts +0 -12
- package/dist/libraries/socket-manager/connection.store.js +0 -57
- package/dist/libraries/socket-manager/connection.store.js.map +0 -1
- package/dist/libraries/socket-manager/index.d.ts +0 -1
- package/dist/libraries/socket-manager/index.js +0 -18
- package/dist/libraries/socket-manager/index.js.map +0 -1
- package/dist/libraries/socket-manager/socket-manager.service.d.ts +0 -22
- package/dist/libraries/socket-manager/socket-manager.service.js +0 -90
- package/dist/libraries/socket-manager/socket-manager.service.js.map +0 -1
|
@@ -9,4 +9,4 @@ export interface SocketRedisEventInformation {
|
|
|
9
9
|
export declare function connectEntityToSocketEvent(entityId: string, socketRedisEventInformation: SocketRedisEventInformation): Promise<void>;
|
|
10
10
|
export declare function disconnectEntityFromSocketEvent(entityId: string, socketRedisEventInformation: SocketRedisEventInformation): Promise<void>;
|
|
11
11
|
export declare function isEntitySubscribed(entityId: string, eventKey: string): Promise<boolean>;
|
|
12
|
-
export declare function disconnectAllEntitiesFromInstance(
|
|
12
|
+
export declare function disconnectAllEntitiesFromInstance(): Promise<void>;
|
|
@@ -6,6 +6,7 @@ exports.disconnectEntityFromSocketEvent = disconnectEntityFromSocketEvent;
|
|
|
6
6
|
exports.isEntitySubscribed = isEntitySubscribed;
|
|
7
7
|
exports.disconnectAllEntitiesFromInstance = disconnectAllEntitiesFromInstance;
|
|
8
8
|
const __1 = require("../../..");
|
|
9
|
+
const instance_utils_1 = require("../../../utilities/instance.utils");
|
|
9
10
|
const kEntityEvents = (entityId) => `socket:events:entity:${entityId}`;
|
|
10
11
|
exports.kEntityEvents = kEntityEvents;
|
|
11
12
|
const kEntityInstances = (entityId) => `socket:instances:entity:${entityId}`;
|
|
@@ -34,7 +35,8 @@ async function isEntitySubscribed(entityId, eventKey) {
|
|
|
34
35
|
const events = await redis.getSetMembers((0, exports.kEntityEvents)(entityId));
|
|
35
36
|
return events.map(e => JSON.parse(e)).some(e => e.eventKey === eventKey);
|
|
36
37
|
}
|
|
37
|
-
async function disconnectAllEntitiesFromInstance(
|
|
38
|
+
async function disconnectAllEntitiesFromInstance() {
|
|
39
|
+
const instanceId = (0, instance_utils_1.getInstanceId)();
|
|
38
40
|
const redis = (0, __1.getLibraries)().getRedisService();
|
|
39
41
|
const connectedEntities = await redis.getSetMembers((0, exports.kEntityConnection)());
|
|
40
42
|
if (connectedEntities.length === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-redis-connections.js","sourceRoot":"/","sources":["libraries/socket/core/socket-redis-connections.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"socket-redis-connections.js","sourceRoot":"/","sources":["libraries/socket/core/socket-redis-connections.ts"],"names":[],"mappings":"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","sourcesContent":["import { getLibraries } from '../../..';\nimport { getInstanceId } from '../../../utilities/instance.utils';\n\nexport const kEntityEvents = (entityId: string) => `socket:events:entity:${entityId}`;\nexport const kEntityInstances = (entityId: string) => `socket:instances:entity:${entityId}`;\nexport const kEntityConnection = () => `socket:connections`;\n\nexport interface SocketRedisEventInformation {\n\teventKey: string;\n\tinstanceId: string;\n\tsocketId: string;\n}\n\nexport async function connectEntityToSocketEvent(\n\tentityId: string,\n\tsocketRedisEventInformation: SocketRedisEventInformation\n) {\n\tconst redis = getLibraries().getRedisService();\n\n\tawait redis.addToSet(kEntityEvents(entityId), JSON.stringify(socketRedisEventInformation));\n\tawait redis.addToSet(kEntityInstances(entityId), socketRedisEventInformation.instanceId);\n\tawait redis.addToSet(kEntityConnection(), entityId);\n}\n\nexport async function disconnectEntityFromSocketEvent(\n\tentityId: string,\n\tsocketRedisEventInformation: SocketRedisEventInformation\n) {\n\tconst redis = getLibraries().getRedisService();\n\n\tawait redis.removeFromSet(kEntityEvents(entityId), JSON.stringify(socketRedisEventInformation));\n\n\tconst remainingEvents = (await redis.getSetMembers(kEntityEvents(entityId))).map(\n\t\tr => JSON.parse(r) as SocketRedisEventInformation\n\t);\n\n\tif (remainingEvents.filter(e => e.instanceId === socketRedisEventInformation.instanceId).length === 0) {\n\t\tawait redis.removeFromSet(kEntityInstances(entityId), socketRedisEventInformation.instanceId);\n\t}\n\n\tif (remainingEvents.length === 0) {\n\t\tawait redis.removeFromSet(kEntityConnection(), entityId);\n\t}\n}\n\nexport async function isEntitySubscribed(entityId: string, eventKey: string): Promise<boolean> {\n\tconst redis = getLibraries().getRedisService();\n\tconst events = await redis.getSetMembers(kEntityEvents(entityId));\n\treturn events.map(e => JSON.parse(e) as SocketRedisEventInformation).some(e => e.eventKey === eventKey);\n}\n\nexport async function disconnectAllEntitiesFromInstance() {\n\tconst instanceId = getInstanceId();\n\tconst redis = getLibraries().getRedisService();\n\n\tconst connectedEntities = await redis.getSetMembers(kEntityConnection());\n\tif (connectedEntities.length === 0) return;\n\n\tfor (const entityId of connectedEntities) {\n\t\tconst allEvents = await redis.getSetMembers(kEntityEvents(entityId));\n\t\tif (allEvents.length === 0) continue;\n\n\t\tconst eventsToKeep: string[] = [];\n\n\t\tfor (const e of allEvents) {\n\t\t\tconst parsed = JSON.parse(e) as SocketRedisEventInformation;\n\t\t\tif (parsed.instanceId === instanceId) {\n\t\t\t\tawait redis.removeFromSet(kEntityEvents(entityId), e);\n\t\t\t} else {\n\t\t\t\teventsToKeep.push(e);\n\t\t\t}\n\t\t}\n\n\t\tconst stillOnInstance = eventsToKeep.some(\n\t\t\te => (JSON.parse(e) as SocketRedisEventInformation).instanceId === instanceId\n\t\t);\n\t\tif (!stillOnInstance) {\n\t\t\tawait redis.removeFromSet(kEntityInstances(entityId), instanceId);\n\t\t}\n\t\tif (eventsToKeep.length === 0) {\n\t\t\tawait redis.removeFromSet(kEntityConnection(), entityId);\n\t\t}\n\t}\n}\n"]}
|
package/dist/types/README.md
CHANGED
package/dist/types/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ConnectionInfo } from '../../utilities/connection.types';
|
|
2
|
-
export declare class ConnectionStore {
|
|
3
|
-
private connections;
|
|
4
|
-
private entityConnections;
|
|
5
|
-
add(contextId: string, info: ConnectionInfo): void;
|
|
6
|
-
remove(contextId: string): void;
|
|
7
|
-
getByContext(contextId: string): ConnectionInfo | undefined;
|
|
8
|
-
getContextsByClientId(clientIdStr: string): string[];
|
|
9
|
-
getAll(): Map<string, ConnectionInfo>;
|
|
10
|
-
clear(): void;
|
|
11
|
-
}
|
|
12
|
-
export declare const connectionStore: ConnectionStore;
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.connectionStore = exports.ConnectionStore = void 0;
|
|
10
|
-
const typedi_1 = require("typedi");
|
|
11
|
-
let ConnectionStore = class ConnectionStore {
|
|
12
|
-
connections = new Map();
|
|
13
|
-
entityConnections = new Map();
|
|
14
|
-
add(contextId, info) {
|
|
15
|
-
this.connections.set(contextId, info);
|
|
16
|
-
const clientId = info.clientId.toString();
|
|
17
|
-
if (!this.entityConnections.has(clientId)) {
|
|
18
|
-
this.entityConnections.set(clientId, []);
|
|
19
|
-
}
|
|
20
|
-
const contexts = this.entityConnections.get(clientId);
|
|
21
|
-
if (!contexts.includes(contextId))
|
|
22
|
-
contexts.push(contextId);
|
|
23
|
-
}
|
|
24
|
-
remove(contextId) {
|
|
25
|
-
const info = this.connections.get(contextId);
|
|
26
|
-
if (!info)
|
|
27
|
-
return;
|
|
28
|
-
const clientId = info.clientId.toString();
|
|
29
|
-
this.connections.delete(contextId);
|
|
30
|
-
const updated = (this.entityConnections.get(clientId) || []).filter(id => id !== contextId);
|
|
31
|
-
if (updated.length === 0) {
|
|
32
|
-
this.entityConnections.delete(clientId);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
this.entityConnections.set(clientId, updated);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
getByContext(contextId) {
|
|
39
|
-
return this.connections.get(contextId);
|
|
40
|
-
}
|
|
41
|
-
getContextsByClientId(clientIdStr) {
|
|
42
|
-
return this.entityConnections.get(clientIdStr) || [];
|
|
43
|
-
}
|
|
44
|
-
getAll() {
|
|
45
|
-
return new Map(this.connections);
|
|
46
|
-
}
|
|
47
|
-
clear() {
|
|
48
|
-
this.connections.clear();
|
|
49
|
-
this.entityConnections.clear();
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
exports.ConnectionStore = ConnectionStore;
|
|
53
|
-
exports.ConnectionStore = ConnectionStore = __decorate([
|
|
54
|
-
(0, typedi_1.Service)()
|
|
55
|
-
], ConnectionStore);
|
|
56
|
-
exports.connectionStore = typedi_1.Container.get(ConnectionStore);
|
|
57
|
-
//# sourceMappingURL=connection.store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connection.store.js","sourceRoot":"/","sources":["libraries/socket-manager/connection.store.ts"],"names":[],"mappings":";;;;;;;;;AAAA,mCAA4C;AAIrC,IAAM,eAAe,GAArB,MAAM,eAAe;IACnB,WAAW,GAAgC,IAAI,GAAG,EAAE,CAAC;IACrD,iBAAiB,GAA0B,IAAI,GAAG,EAAE,CAAC;IAE7D,GAAG,CAAC,SAAiB,EAAE,IAAoB;QAC1C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,SAAiB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAC5F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;IAED,YAAY,CAAC,SAAiB;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,qBAAqB,CAAC,WAAmB;QACxC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC;IAED,MAAM;QACL,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;CACD,CAAA;AA/CY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,gBAAO,GAAE;GACG,eAAe,CA+C3B;AAEY,QAAA,eAAe,GAAG,kBAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC","sourcesContent":["import { Service, Container } from 'typedi';\nimport { ConnectionInfo } from '../../utilities/connection.types';\n\n@Service()\nexport class ConnectionStore {\n\tprivate connections: Map<string, ConnectionInfo> = new Map();\n\tprivate entityConnections: Map<string, string[]> = new Map();\n\n\tadd(contextId: string, info: ConnectionInfo) {\n\t\tthis.connections.set(contextId, info);\n\n\t\tconst clientId = info.clientId.toString();\n\t\tif (!this.entityConnections.has(clientId)) {\n\t\t\tthis.entityConnections.set(clientId, []);\n\t\t}\n\n\t\tconst contexts = this.entityConnections.get(clientId)!;\n\t\tif (!contexts.includes(contextId)) contexts.push(contextId);\n\t}\n\n\tremove(contextId: string): void {\n\t\tconst info = this.connections.get(contextId);\n\t\tif (!info) return;\n\n\t\tconst clientId = info.clientId.toString();\n\t\tthis.connections.delete(contextId);\n\n\t\tconst updated = (this.entityConnections.get(clientId) || []).filter(id => id !== contextId);\n\t\tif (updated.length === 0) {\n\t\t\tthis.entityConnections.delete(clientId);\n\t\t} else {\n\t\t\tthis.entityConnections.set(clientId, updated);\n\t\t}\n\t}\n\n\tgetByContext(contextId: string): ConnectionInfo | undefined {\n\t\treturn this.connections.get(contextId);\n\t}\n\n\tgetContextsByClientId(clientIdStr: string): string[] {\n\t\treturn this.entityConnections.get(clientIdStr) || [];\n\t}\n\n\tgetAll(): Map<string, ConnectionInfo> {\n\t\treturn new Map(this.connections);\n\t}\n\n\tclear(): void {\n\t\tthis.connections.clear();\n\t\tthis.entityConnections.clear();\n\t}\n}\n\nexport const connectionStore = Container.get(ConnectionStore);\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './socket-manager.service';
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./socket-manager.service"), exports);
|
|
18
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/socket-manager/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC","sourcesContent":["export * from './socket-manager.service';\n"]}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { mongoose } from '@typegoose/typegoose';
|
|
2
|
-
import { UserRef } from '../../utilities/enum';
|
|
3
|
-
import { ConnectionInfo } from '../../utilities/connection.types';
|
|
4
|
-
import { Observer } from '@trpc/server/observable';
|
|
5
|
-
export declare class SocketManager {
|
|
6
|
-
private readonly store;
|
|
7
|
-
private readonly instanceId;
|
|
8
|
-
constructor();
|
|
9
|
-
subscribeUser(userId: mongoose.Types.ObjectId, userType: UserRef, emit: Observer<unknown, unknown>): {
|
|
10
|
-
cleanup: () => void;
|
|
11
|
-
};
|
|
12
|
-
private addConnection;
|
|
13
|
-
private removeConnection;
|
|
14
|
-
sendToClient(clientIds: mongoose.Types.ObjectId[], event: string, data: any): Promise<{
|
|
15
|
-
successCount: number;
|
|
16
|
-
failedClientIds: string[];
|
|
17
|
-
}>;
|
|
18
|
-
getAllConnections(): Map<string, ConnectionInfo>;
|
|
19
|
-
getInstanceId(): string;
|
|
20
|
-
cleanup(): Promise<void>;
|
|
21
|
-
}
|
|
22
|
-
export declare const socketManager: SocketManager;
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.socketManager = exports.SocketManager = void 0;
|
|
13
|
-
const typedi_1 = require("typedi");
|
|
14
|
-
const connection_store_1 = require("./connection.store");
|
|
15
|
-
let SocketManager = class SocketManager {
|
|
16
|
-
store;
|
|
17
|
-
instanceId = `instance-${process.pid}-${Date.now()}`;
|
|
18
|
-
constructor() {
|
|
19
|
-
this.store = connection_store_1.connectionStore;
|
|
20
|
-
}
|
|
21
|
-
subscribeUser(userId, userType, emit) {
|
|
22
|
-
const contextId = `${userId}-${Date.now()}-${Math.random()}`;
|
|
23
|
-
this.addConnection(contextId, userId, userType, emit.next.bind(emit));
|
|
24
|
-
return {
|
|
25
|
-
cleanup: () => {
|
|
26
|
-
this.removeConnection(contextId);
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
addConnection(contextId, clientId, entityType, emitter) {
|
|
31
|
-
this.store.remove(contextId);
|
|
32
|
-
this.store.add(contextId, {
|
|
33
|
-
clientId,
|
|
34
|
-
entityType,
|
|
35
|
-
emitter,
|
|
36
|
-
connectedAt: new Date(),
|
|
37
|
-
instanceId: this.instanceId,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
removeConnection(contextId) {
|
|
41
|
-
this.store.remove(contextId);
|
|
42
|
-
}
|
|
43
|
-
async sendToClient(clientIds, event, data) {
|
|
44
|
-
let successCount = 0;
|
|
45
|
-
const failedClientIds = [];
|
|
46
|
-
const message = {
|
|
47
|
-
type: event,
|
|
48
|
-
data,
|
|
49
|
-
timestamp: new Date().toISOString(),
|
|
50
|
-
};
|
|
51
|
-
for (const clientId of clientIds) {
|
|
52
|
-
const clientIdStr = clientId.toString();
|
|
53
|
-
const contexts = this.store.getContextsByClientId(clientIdStr);
|
|
54
|
-
let sent = false;
|
|
55
|
-
for (const ctx of contexts) {
|
|
56
|
-
const connection = this.store.getByContext(ctx);
|
|
57
|
-
if (connection && typeof connection.emitter === 'function') {
|
|
58
|
-
try {
|
|
59
|
-
connection.emitter(message);
|
|
60
|
-
sent = true;
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
this.store.remove(ctx);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (sent)
|
|
68
|
-
successCount++;
|
|
69
|
-
else
|
|
70
|
-
failedClientIds.push(clientIdStr);
|
|
71
|
-
}
|
|
72
|
-
return { successCount, failedClientIds };
|
|
73
|
-
}
|
|
74
|
-
getAllConnections() {
|
|
75
|
-
return this.store.getAll();
|
|
76
|
-
}
|
|
77
|
-
getInstanceId() {
|
|
78
|
-
return this.instanceId;
|
|
79
|
-
}
|
|
80
|
-
async cleanup() {
|
|
81
|
-
this.store.clear();
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
exports.SocketManager = SocketManager;
|
|
85
|
-
exports.SocketManager = SocketManager = __decorate([
|
|
86
|
-
(0, typedi_1.Service)(),
|
|
87
|
-
__metadata("design:paramtypes", [])
|
|
88
|
-
], SocketManager);
|
|
89
|
-
exports.socketManager = typedi_1.Container.get(SocketManager);
|
|
90
|
-
//# sourceMappingURL=socket-manager.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"socket-manager.service.js","sourceRoot":"/","sources":["libraries/socket-manager/socket-manager.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Service, Container } from 'typedi';\nimport { ConnectionStore, connectionStore } from './connection.store';\nimport { mongoose } from '@typegoose/typegoose';\nimport { UserRef } from '../../utilities/enum';\nimport { ConnectionInfo } from '../../utilities/connection.types';\nimport { Observer } from '@trpc/server/observable';\n\n@Service()\nexport class SocketManager {\n\tprivate readonly store: ConnectionStore;\n\tprivate readonly instanceId = `instance-${process.pid}-${Date.now()}`;\n\n\tconstructor() {\n\t\tthis.store = connectionStore;\n\t}\n\n\tpublic subscribeUser(\n\t\tuserId: mongoose.Types.ObjectId,\n\t\tuserType: UserRef,\n\t\temit: Observer<unknown, unknown>\n\t): { cleanup: () => void } {\n\t\tconst contextId = `${userId}-${Date.now()}-${Math.random()}`;\n\t\tthis.addConnection(contextId, userId, userType, emit.next.bind(emit));\n\n\t\treturn {\n\t\t\tcleanup: () => {\n\t\t\t\tthis.removeConnection(contextId);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate addConnection(\n\t\tcontextId: string,\n\t\tclientId: mongoose.Types.ObjectId,\n\t\tentityType: UserRef,\n\t\temitter: (data: any) => void\n\t): void {\n\t\tthis.store.remove(contextId);\n\t\tthis.store.add(contextId, {\n\t\t\tclientId,\n\t\t\tentityType,\n\t\t\temitter,\n\t\t\tconnectedAt: new Date(),\n\t\t\tinstanceId: this.instanceId,\n\t\t});\n\t}\n\n\tprivate removeConnection(contextId: string): void {\n\t\tthis.store.remove(contextId);\n\t}\n\n\tpublic async sendToClient(\n\t\tclientIds: mongoose.Types.ObjectId[],\n\t\tevent: string,\n\t\tdata: any\n\t): Promise<{ successCount: number; failedClientIds: string[] }> {\n\t\tlet successCount = 0;\n\t\tconst failedClientIds: string[] = [];\n\n\t\tconst message = {\n\t\t\ttype: event,\n\t\t\tdata,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t};\n\n\t\tfor (const clientId of clientIds) {\n\t\t\tconst clientIdStr = clientId.toString();\n\t\t\tconst contexts = this.store.getContextsByClientId(clientIdStr);\n\n\t\t\tlet sent = false;\n\t\t\tfor (const ctx of contexts) {\n\t\t\t\tconst connection = this.store.getByContext(ctx);\n\t\t\t\tif (connection && typeof connection.emitter === 'function') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconnection.emitter(message);\n\t\t\t\t\t\tsent = true;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tthis.store.remove(ctx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (sent) successCount++;\n\t\t\telse failedClientIds.push(clientIdStr);\n\t\t}\n\n\t\treturn { successCount, failedClientIds };\n\t}\n\n\tpublic getAllConnections(): Map<string, ConnectionInfo> {\n\t\treturn this.store.getAll();\n\t}\n\n\tpublic getInstanceId(): string {\n\t\treturn this.instanceId;\n\t}\n\n\tpublic async cleanup(): Promise<void> {\n\t\tthis.store.clear();\n\t}\n}\n\nexport const socketManager = Container.get(SocketManager);\n"]}
|