@lyxa.ai/core 1.1.103 → 1.1.104
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/adapters/socket-subscription.d.ts +1 -1
- package/dist/libraries/socket/adapters/socket-subscription.js +6 -8
- package/dist/libraries/socket/adapters/socket-subscription.js.map +1 -1
- package/dist/libraries/socket/core/local-subscription-registry.d.ts +4 -4
- package/dist/libraries/socket/core/local-subscription-registry.js +39 -24
- package/dist/libraries/socket/core/local-subscription-registry.js.map +1 -1
- package/dist/types/README.md +1 -1
- package/dist/types/package.json +1 -1
- package/package.json +1 -1
|
@@ -12,5 +12,5 @@ interface _SubscriptionOpts<TEventType extends SocketEventType, TInput> {
|
|
|
12
12
|
ctx: _SubscriptionContext;
|
|
13
13
|
input: TInput;
|
|
14
14
|
}
|
|
15
|
-
export declare function createSocketSubscriptionAdapter<TEventType extends SocketEventType, TInput>(eventType: TEventType
|
|
15
|
+
export declare function createSocketSubscriptionAdapter<TEventType extends SocketEventType, TInput>(eventType: TEventType): (opts: _SubscriptionOpts<TEventType, TInput>) => AsyncGenerator<Awaited<OutputFor<TEventType>>, void, unknown>;
|
|
16
16
|
export {};
|
|
@@ -5,35 +5,33 @@ const index_1 = require("../index");
|
|
|
5
5
|
const crypto_1 = require("crypto");
|
|
6
6
|
const instance_utils_1 = require("../../../utilities/instance.utils");
|
|
7
7
|
const ws_1 = require("ws");
|
|
8
|
-
const server_1 = require("@trpc/server");
|
|
9
8
|
async function* _createSocketSubscription(options) {
|
|
10
|
-
const { eventType, ctx, input
|
|
9
|
+
const { eventType, ctx, input } = options;
|
|
11
10
|
const registration = index_1.EventFactory.getRegistration(eventType);
|
|
12
11
|
const socketId = (0, crypto_1.randomUUID)();
|
|
13
12
|
const localEE = new index_1.LocalEventEmitter(socketId);
|
|
14
13
|
const entityId = ctx.entity.id;
|
|
15
14
|
const entityType = ctx.entity.type;
|
|
15
|
+
const entity = { id: entityId, type: entityType };
|
|
16
16
|
const eventKey = index_1.EventFactory.getSubscriptionKey(eventType, input);
|
|
17
17
|
const instanceId = (0, instance_utils_1.getInstanceId)();
|
|
18
18
|
const socketInfo = { socketId, eventKey, instanceId };
|
|
19
19
|
await (0, index_1.connectEntityToSocketEvent)(ctx.entity, socketInfo);
|
|
20
|
-
index_1.LocalSubs.bind(
|
|
20
|
+
index_1.LocalSubs.bind(entity, eventKey, localEE);
|
|
21
21
|
ctx.signal?.addEventListener('abort', () => {
|
|
22
|
-
index_1.LocalSubs.unbind(
|
|
22
|
+
index_1.LocalSubs.unbind(entity, eventKey, localEE);
|
|
23
23
|
(0, index_1.disconnectEntityFromSocketEvent)(ctx.entity, socketInfo).catch(console.error);
|
|
24
24
|
});
|
|
25
25
|
for await (const [data] of (0, ws_1.on)(localEE.ee, eventKey, { signal: ctx.signal })) {
|
|
26
26
|
const payload = data;
|
|
27
|
-
|
|
28
|
-
yield (0, server_1.tracked)(id, payload);
|
|
27
|
+
yield payload;
|
|
29
28
|
}
|
|
30
29
|
}
|
|
31
|
-
function createSocketSubscriptionAdapter(eventType
|
|
30
|
+
function createSocketSubscriptionAdapter(eventType) {
|
|
32
31
|
return (opts) => _createSocketSubscription({
|
|
33
32
|
eventType,
|
|
34
33
|
ctx: opts.ctx,
|
|
35
34
|
input: opts.input,
|
|
36
|
-
getTrackingId,
|
|
37
35
|
});
|
|
38
36
|
}
|
|
39
37
|
//# sourceMappingURL=socket-subscription.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-subscription.js","sourceRoot":"/","sources":["libraries/socket/adapters/socket-subscription.ts"],"names":[],"mappings":";;AAiEA,
|
|
1
|
+
{"version":3,"file":"socket-subscription.js","sourceRoot":"/","sources":["libraries/socket/adapters/socket-subscription.ts"],"names":[],"mappings":";;AAiEA,0EAOC;AAvED,oCAQkB;AAClB,mCAAoC;AACpC,sEAAkE;AAClE,2BAAwB;AAmBxB,KAAK,SAAS,CAAC,CAAC,yBAAyB,CACxC,OAAuD;IAEvD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1C,MAAM,YAAY,GAAG,oBAAY,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,IAAA,mBAAU,GAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,yBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAO,CAAC,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAO,CAAC,IAAI,CAAC;IAEpC,MAAM,MAAM,GAAuB,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAEtE,MAAM,QAAQ,GAAG,oBAAY,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEnE,MAAM,UAAU,GAAG,IAAA,8BAAa,GAAE,CAAC;IACnC,MAAM,UAAU,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEtD,MAAM,IAAA,kCAA0B,EAAC,GAAG,CAAC,MAAO,EAAE,UAAU,CAAC,CAAC;IAC1D,iBAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE1C,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QAC1C,iBAAS,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAA,uCAA+B,EAAC,GAAG,CAAC,MAAO,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAGH,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAA,OAAE,EAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QAC7E,MAAM,OAAO,GAAG,IAAW,CAAC;QAC5B,MAAM,OAAO,CAAC;IACf,CAAC;AACF,CAAC;AAED,SAAgB,+BAA+B,CAA6C,SAAqB;IAChH,OAAO,CAAC,IAA2C,EAAE,EAAE,CACtD,yBAAyB,CAAC;QACzB,SAAS;QACT,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;KACjB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { SocketEventType } from '../../../utilities/enum';\nimport {\n\tconnectEntityToSocketEvent,\n\tdisconnectEntityFromSocketEvent,\n\tEntitySubscription,\n\tEventFactory,\n\tLocalEventEmitter,\n\tLocalSubs,\n\tOutputFor,\n} from '../index';\nimport { randomUUID } from 'crypto';\nimport { getInstanceId } from '../../../utilities/instance.utils';\nimport { on } from 'ws';\nimport { AuthEntityType } from '../../auth';\n\ninterface _SubscriptionContext {\n\tentity?: { id: string; type: AuthEntityType };\n\tsignal?: AbortSignal;\n}\n\ninterface _SubscriptionOpts<TEventType extends SocketEventType, TInput> {\n\tctx: _SubscriptionContext;\n\tinput: TInput;\n}\n\ninterface _CreateSubscriptionOptions<TEventType extends SocketEventType, TInput> {\n\teventType: TEventType;\n\tctx: _SubscriptionContext;\n\tinput: TInput;\n}\n\nasync function* _createSocketSubscription<TEventType extends SocketEventType, TInput>(\n\toptions: _CreateSubscriptionOptions<TEventType, TInput>\n) {\n\tconst { eventType, ctx, input } = options;\n\n\tconst registration = EventFactory.getRegistration(eventType);\n\tconst socketId = randomUUID();\n\tconst localEE = new LocalEventEmitter(socketId);\n\n\tconst entityId = ctx.entity!.id;\n\tconst entityType = ctx.entity!.type;\n\n\tconst entity: EntitySubscription = { id: entityId, type: entityType };\n\n\tconst eventKey = EventFactory.getSubscriptionKey(eventType, input);\n\n\tconst instanceId = getInstanceId();\n\tconst socketInfo = { socketId, eventKey, instanceId };\n\n\tawait connectEntityToSocketEvent(ctx.entity!, socketInfo);\n\tLocalSubs.bind(entity, eventKey, localEE);\n\n\tctx.signal?.addEventListener('abort', () => {\n\t\tLocalSubs.unbind(entity, eventKey, localEE);\n\t\tdisconnectEntityFromSocketEvent(ctx.entity!, socketInfo).catch(console.error);\n\t});\n\n\ttype Out = OutputFor<TEventType>;\n\tfor await (const [data] of on(localEE.ee, eventKey, { signal: ctx.signal })) {\n\t\tconst payload = data as Out;\n\t\tyield payload;\n\t}\n}\n\nexport function createSocketSubscriptionAdapter<TEventType extends SocketEventType, TInput>(eventType: TEventType) {\n\treturn (opts: _SubscriptionOpts<TEventType, TInput>) =>\n\t\t_createSocketSubscription({\n\t\t\teventType,\n\t\t\tctx: opts.ctx,\n\t\t\tinput: opts.input,\n\t\t});\n}\n\n/**\n * @Example\n * const socketRouterTwo = createTRPCRouter({\n * \tonMessage: createAuthenticatedProcedure({ entityTypes: [AuthEntityType.CRM] })\n * \t\t.input(ChatroomMessageSendSocketInputSchema)\n * \t\t.output(\n * \t\t\tzAsyncIterable({\n * \t\t\t\tyield: ChatroomMessageSendOutputSchema,\n * \t\t\t})\n * \t\t)\n * \t\t.subscription(createSocketSubscriptionAdapter(SocketEventType.CHATROOM_MESSAGE_SEND)),\n * });\n */\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import EventEmitter from 'events';
|
|
2
|
+
import { EntitySubscription } from './socket-redis-connections';
|
|
2
3
|
type EventKey = string;
|
|
3
|
-
type EntityId = string;
|
|
4
4
|
type SocketId = string;
|
|
5
5
|
export declare class LocalEventEmitter {
|
|
6
6
|
private _ee;
|
|
@@ -11,9 +11,9 @@ export declare class LocalEventEmitter {
|
|
|
11
11
|
}
|
|
12
12
|
declare class LocalSubscriptionRegistry {
|
|
13
13
|
private byEntity;
|
|
14
|
-
bind(
|
|
15
|
-
unbind(
|
|
16
|
-
emit(
|
|
14
|
+
bind(entity: EntitySubscription, eventKey: EventKey, ee: LocalEventEmitter): void;
|
|
15
|
+
unbind(entity: EntitySubscription, eventKey: EventKey, ee: LocalEventEmitter): void;
|
|
16
|
+
emit(entity: EntitySubscription, eventKey: EventKey, payload: unknown): void;
|
|
17
17
|
}
|
|
18
18
|
export declare const LocalSubs: LocalSubscriptionRegistry;
|
|
19
19
|
export {};
|
|
@@ -5,6 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.LocalSubs = exports.LocalEventEmitter = void 0;
|
|
7
7
|
const events_1 = __importDefault(require("events"));
|
|
8
|
+
function entityKey(entity) {
|
|
9
|
+
return entity.type ? `${entity.type}:${entity.id}` : entity.id;
|
|
10
|
+
}
|
|
8
11
|
class LocalEventEmitter {
|
|
9
12
|
_ee;
|
|
10
13
|
_socketId;
|
|
@@ -22,36 +25,48 @@ class LocalEventEmitter {
|
|
|
22
25
|
exports.LocalEventEmitter = LocalEventEmitter;
|
|
23
26
|
class LocalSubscriptionRegistry {
|
|
24
27
|
byEntity = new Map();
|
|
25
|
-
bind(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
bind(entity, eventKey, ee) {
|
|
29
|
+
const key = entityKey(entity);
|
|
30
|
+
let eventMap = this.byEntity.get(key);
|
|
31
|
+
if (!eventMap) {
|
|
32
|
+
eventMap = new Map();
|
|
33
|
+
this.byEntity.set(key, eventMap);
|
|
30
34
|
}
|
|
31
|
-
|
|
32
|
-
if (!
|
|
33
|
-
|
|
35
|
+
let listenerSet = eventMap.get(eventKey);
|
|
36
|
+
if (!listenerSet) {
|
|
37
|
+
listenerSet = new Set();
|
|
38
|
+
eventMap.set(eventKey, listenerSet);
|
|
34
39
|
}
|
|
35
|
-
|
|
40
|
+
listenerSet.add(ee);
|
|
41
|
+
console.log(`[LocalSubs] Bound ${key} -> ${eventKey}, socket=${ee.socketId}`);
|
|
36
42
|
}
|
|
37
|
-
unbind(
|
|
38
|
-
const
|
|
39
|
-
|
|
43
|
+
unbind(entity, eventKey, ee) {
|
|
44
|
+
const key = entityKey(entity);
|
|
45
|
+
const eventMap = this.byEntity.get(key);
|
|
46
|
+
if (!eventMap)
|
|
40
47
|
return;
|
|
41
|
-
const
|
|
42
|
-
if (
|
|
43
|
-
|
|
44
|
-
if (
|
|
45
|
-
|
|
48
|
+
const listenerSet = eventMap.get(eventKey);
|
|
49
|
+
if (listenerSet) {
|
|
50
|
+
listenerSet.delete(ee);
|
|
51
|
+
if (listenerSet.size === 0)
|
|
52
|
+
eventMap.delete(eventKey);
|
|
46
53
|
}
|
|
47
|
-
if (
|
|
48
|
-
this.byEntity.delete(
|
|
54
|
+
if (eventMap.size === 0)
|
|
55
|
+
this.byEntity.delete(key);
|
|
56
|
+
console.log(`[LocalSubs] Unbound ${key} -> ${eventKey}, socket=${ee.socketId}`);
|
|
49
57
|
}
|
|
50
|
-
emit(
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
emit(entity, eventKey, payload) {
|
|
59
|
+
const key = entityKey(entity);
|
|
60
|
+
const eventMap = this.byEntity.get(key);
|
|
61
|
+
const listeners = eventMap?.get(eventKey);
|
|
62
|
+
console.log('LocalSubs emit called', {
|
|
63
|
+
payload,
|
|
64
|
+
});
|
|
65
|
+
if (!listeners)
|
|
66
|
+
return;
|
|
67
|
+
for (const listener of listeners) {
|
|
68
|
+
listener.ee.emit(eventKey, payload);
|
|
69
|
+
}
|
|
55
70
|
}
|
|
56
71
|
}
|
|
57
72
|
exports.LocalSubs = new LocalSubscriptionRegistry();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-subscription-registry.js","sourceRoot":"/","sources":["libraries/socket/core/local-subscription-registry.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAkC;
|
|
1
|
+
{"version":3,"file":"local-subscription-registry.js","sourceRoot":"/","sources":["libraries/socket/core/local-subscription-registry.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from 'events';\nimport { EntitySubscription } from './socket-redis-connections';\n\ntype EventKey = string;\ntype SocketId = string;\n\n// Utility: create a unique key for each EntitySubscription\nfunction entityKey(entity: EntitySubscription): string {\n\treturn entity.type ? `${entity.type}:${entity.id}` : entity.id;\n}\n\nexport class LocalEventEmitter {\n\tprivate _ee: EventEmitter;\n\tprivate _socketId: SocketId;\n\n\tconstructor(socketId: SocketId) {\n\t\tthis._ee = new EventEmitter();\n\t\tthis._socketId = socketId;\n\t}\n\n\tget socketId() {\n\t\treturn this._socketId;\n\t}\n\n\tget ee() {\n\t\treturn this._ee;\n\t}\n}\n\nclass LocalSubscriptionRegistry {\n\tprivate byEntity = new Map<string, Map<EventKey, Set<LocalEventEmitter>>>();\n\n\tbind(entity: EntitySubscription, eventKey: EventKey, ee: LocalEventEmitter) {\n\t\tconst key = entityKey(entity);\n\t\tlet eventMap = this.byEntity.get(key);\n\t\tif (!eventMap) {\n\t\t\teventMap = new Map();\n\t\t\tthis.byEntity.set(key, eventMap);\n\t\t}\n\n\t\tlet listenerSet = eventMap.get(eventKey);\n\t\tif (!listenerSet) {\n\t\t\tlistenerSet = new Set();\n\t\t\teventMap.set(eventKey, listenerSet);\n\t\t}\n\n\t\tlistenerSet.add(ee);\n\n\t\tconsole.log(`[LocalSubs] Bound ${key} -> ${eventKey}, socket=${ee.socketId}`);\n\t}\n\n\tunbind(entity: EntitySubscription, eventKey: EventKey, ee: LocalEventEmitter) {\n\t\tconst key = entityKey(entity);\n\t\tconst eventMap = this.byEntity.get(key);\n\t\tif (!eventMap) return;\n\n\t\tconst listenerSet = eventMap.get(eventKey);\n\t\tif (listenerSet) {\n\t\t\tlistenerSet.delete(ee);\n\t\t\tif (listenerSet.size === 0) eventMap.delete(eventKey);\n\t\t}\n\t\tif (eventMap.size === 0) this.byEntity.delete(key);\n\n\t\tconsole.log(`[LocalSubs] Unbound ${key} -> ${eventKey}, socket=${ee.socketId}`);\n\t}\n\n\temit(entity: EntitySubscription, eventKey: EventKey, payload: unknown) {\n\t\tconst key = entityKey(entity);\n\t\tconst eventMap = this.byEntity.get(key);\n\t\tconst listeners = eventMap?.get(eventKey);\n\n\t\tconsole.log('LocalSubs emit called', {\n\t\t\tpayload,\n\t\t});\n\n\t\tif (!listeners) return;\n\n\t\tfor (const listener of listeners) {\n\t\t\tlistener.ee.emit(eventKey, payload);\n\t\t}\n\t}\n}\n\nexport const LocalSubs = new LocalSubscriptionRegistry();\n"]}
|
package/dist/types/README.md
CHANGED
package/dist/types/package.json
CHANGED