@lyxa.ai/core 1.0.354 → 1.0.356

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.
@@ -8,6 +8,7 @@ export type SocketSubscriptionIdentifiersMap = {
8
8
  };
9
9
  export type SocketEmitMap = {
10
10
  [SocketSubscriptionType.ON_CHATROOM]: SocketEmits.MESSAGE_RECEIVE;
11
+ [SocketSubscriptionType.ON_CHATROOM]: SocketEmits;
11
12
  };
12
13
  export type SocketPayloadMap = {
13
14
  [SocketEmits.MESSAGE_RECEIVE]: {
@@ -1 +1 @@
1
- {"version":3,"file":"socket.types.js","sourceRoot":"/","sources":["libraries/socket/socket.types.ts"],"names":[],"mappings":";;AAAA,+CAA2E","sourcesContent":["import { SocketEmits, SocketSubscriptionType } from '../../utilities/enum';\n\nexport type SocketSubscriptionIdentifiersMap = {\n\t[SocketSubscriptionType.ON_CHATROOM]: { chatroomId: string };\n\t[SocketSubscriptionType.ON_CHATLIST]: {};\n\t[SocketSubscriptionType.NOTIFICATION]: {};\n};\n\nexport type SocketEmitMap = {\n\t[SocketSubscriptionType.ON_CHATROOM]: SocketEmits.MESSAGE_RECEIVE;\n};\n\nexport type SocketPayloadMap = {\n\t[SocketEmits.MESSAGE_RECEIVE]: {\n\t\t_id: string;\n\t\tsenderId: string;\n\t\tcontent: string;\n\t\tchatroomId: string;\n\t\tcreatedAt: string;\n\t};\n};\n"]}
1
+ {"version":3,"file":"socket.types.js","sourceRoot":"/","sources":["libraries/socket/socket.types.ts"],"names":[],"mappings":";;AAAA,+CAA2E","sourcesContent":["import { SocketEmits, SocketSubscriptionType } from '../../utilities/enum';\n\nexport type SocketSubscriptionIdentifiersMap = {\n\t[SocketSubscriptionType.ON_CHATROOM]: { chatroomId: string };\n\t[SocketSubscriptionType.ON_CHATLIST]: {};\n\t[SocketSubscriptionType.NOTIFICATION]: {};\n};\n\nexport type SocketEmitMap = {\n\t[SocketSubscriptionType.ON_CHATROOM]: SocketEmits.MESSAGE_RECEIVE;\n\t[SocketSubscriptionType.ON_CHATROOM]: SocketEmits;\n};\n\nexport type SocketPayloadMap = {\n\t[SocketEmits.MESSAGE_RECEIVE]: {\n\t\t_id: string;\n\t\tsenderId: string;\n\t\tcontent: string;\n\t\tchatroomId: string;\n\t\tcreatedAt: string;\n\t};\n};\n"]}
@@ -12,7 +12,5 @@ export declare function publishToSockets<TSub extends keyof SocketEmitMap, TEmit
12
12
  data: SocketPayloadMap[TEmit];
13
13
  socketEmit: TEmit;
14
14
  socketQueue: SocketServiceQueue;
15
- }): Promise<{
16
- missingUserIds: string[];
17
- }>;
15
+ }): Promise<string[]>;
18
16
  export declare function generateCacheKey<T extends SocketSubscriptionType>(userId: string | number, subscriptionType: T, identifiers: SocketSubscriptionIdentifiersMap[T]): string;
@@ -37,8 +37,7 @@ async function publishToSockets({ usersId, subscriptionType, identifiers, data,
37
37
  const event = new SocketEmitEvent_1.SocketEmitEvent(socketQueue, instanceId, payload);
38
38
  return (0, event_1.publishEvent)(event);
39
39
  }));
40
- const missingUserIds = usersId.filter((_, idx) => !cacheKeyToSockets.has(cacheKeys[idx]));
41
- return { missingUserIds };
40
+ return usersId.filter((_, idx) => !cacheKeyToSockets.has(cacheKeys[idx]));
42
41
  }
43
42
  function generateCacheKey(userId, subscriptionType, identifiers) {
44
43
  const serializedIdentifiers = Object.entries(identifiers)
@@ -1 +1 @@
1
- {"version":3,"file":"socket.utils.js","sourceRoot":"/","sources":["libraries/socket/socket.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { publishEvent } from '../event';\nimport { createHash } from 'crypto';\nimport { SocketEmitEvent, SocketEventParams } from './SocketEmitEvent';\nimport { SocketEmits, SocketServiceQueue, SocketSubscriptionType } from '../../utilities/enum';\nimport { getLibraries } from '../../index';\nimport { SocketEmitMap, SocketPayloadMap, SocketSubscriptionIdentifiersMap } from './socket.types';\n\nexport interface InstanceSockets {\n\tinstanceId: string;\n\tsocketIds: string[];\n}\n\nexport async function getInstanceSocketsMap(cacheKeys: string[]): Promise<InstanceSockets[]> {\n\tconst instanceMap: Record<string, Set<string>> = {};\n\tconst redis = getLibraries().getRedisService();\n\tfor (const cacheKey of cacheKeys) {\n\t\tconst instanceIds = await redis.redisClient.smembers(`cacheKey:${cacheKey}:instances`);\n\t\tfor (const instanceId of instanceIds) {\n\t\t\tif (!instanceMap[instanceId]) instanceMap[instanceId] = new Set();\n\t\t\tconst socketIds = await redis.redisClient.smembers(\n\t\t\t\t`cacheKey:${cacheKey}:instance:${instanceId}:sockets`\n\t\t\t);\n\t\t\tsocketIds.forEach(id => instanceMap[instanceId].add(id));\n\t\t}\n\t}\n\n\treturn Object.entries(instanceMap).map(([instanceId, socketSet]) => ({\n\t\tinstanceId,\n\t\tsocketIds: [...socketSet],\n\t}));\n}\n\nexport async function publishToSockets<\n\tTSub extends keyof SocketEmitMap,\n\tTEmit extends SocketEmitMap[TSub] & keyof SocketPayloadMap,\n>({\n\tusersId,\n\tsubscriptionType,\n\tidentifiers,\n\tdata,\n\tsocketEmit,\n\tsocketQueue,\n}: {\n\tusersId: string[];\n\tsubscriptionType: TSub;\n\tidentifiers: SocketSubscriptionIdentifiersMap[TSub];\n\tdata: SocketPayloadMap[TEmit];\n\tsocketEmit: TEmit;\n\tsocketQueue: SocketServiceQueue;\n}): Promise<{ missingUserIds: string[] }> {\n\tconst cacheKeys = usersId.map(userId => generateCacheKey(userId, subscriptionType, identifiers));\n\tconst recipients = await getInstanceSocketsMap(cacheKeys);\n\n\tconst cacheKeyToSockets = new Set(recipients.map(r => r.instanceId));\n\n\tawait Promise.all(\n\t\trecipients.map(({ instanceId, socketIds }) => {\n\t\t\tconst payload: SocketEventParams<typeof data> = {\n\t\t\t\tdata,\n\t\t\t\tsockets: socketIds,\n\t\t\t\tsocketEmit,\n\t\t\t};\n\t\t\tconst event = new SocketEmitEvent(socketQueue, instanceId, payload);\n\t\t\treturn publishEvent(event);\n\t\t})\n\t);\n\n\tconst missingUserIds = usersId.filter((_, idx) => !cacheKeyToSockets.has(cacheKeys[idx]));\n\treturn { missingUserIds };\n}\n\nexport function generateCacheKey<T extends SocketSubscriptionType>(\n\tuserId: string | number,\n\tsubscriptionType: T,\n\tidentifiers: SocketSubscriptionIdentifiersMap[T]\n): string {\n\tconst serializedIdentifiers = Object.entries(identifiers)\n\t\t.sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n\t\t.map(([key, value]) => `${key}:${JSON.stringify(value)}`)\n\t\t.join('|');\n\n\tconst serialized = `userId:${userId}|subscriptionType:${subscriptionType}|${serializedIdentifiers}`;\n\n\treturn createHash('sha256').update(serialized).digest('hex');\n}\n"]}
1
+ {"version":3,"file":"socket.utils.js","sourceRoot":"/","sources":["libraries/socket/socket.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { publishEvent } from '../event';\nimport { createHash } from 'crypto';\nimport { SocketEmitEvent, SocketEventParams } from './SocketEmitEvent';\nimport { SocketEmits, SocketServiceQueue, SocketSubscriptionType } from '../../utilities/enum';\nimport { getLibraries } from '../../index';\nimport { SocketEmitMap, SocketPayloadMap, SocketSubscriptionIdentifiersMap } from './socket.types';\n\nexport interface InstanceSockets {\n\tinstanceId: string;\n\tsocketIds: string[];\n}\n\nexport async function getInstanceSocketsMap(cacheKeys: string[]): Promise<InstanceSockets[]> {\n\tconst instanceMap: Record<string, Set<string>> = {};\n\tconst redis = getLibraries().getRedisService();\n\tfor (const cacheKey of cacheKeys) {\n\t\tconst instanceIds = await redis.redisClient.smembers(`cacheKey:${cacheKey}:instances`);\n\t\tfor (const instanceId of instanceIds) {\n\t\t\tif (!instanceMap[instanceId]) instanceMap[instanceId] = new Set();\n\t\t\tconst socketIds = await redis.redisClient.smembers(\n\t\t\t\t`cacheKey:${cacheKey}:instance:${instanceId}:sockets`\n\t\t\t);\n\t\t\tsocketIds.forEach(id => instanceMap[instanceId].add(id));\n\t\t}\n\t}\n\n\treturn Object.entries(instanceMap).map(([instanceId, socketSet]) => ({\n\t\tinstanceId,\n\t\tsocketIds: [...socketSet],\n\t}));\n}\n\nexport async function publishToSockets<\n\tTSub extends keyof SocketEmitMap,\n\tTEmit extends SocketEmitMap[TSub] & keyof SocketPayloadMap,\n>({\n\t\tusersId,\n\t\tsubscriptionType,\n\t\tidentifiers,\n\t\tdata,\n\t\tsocketEmit,\n\t\tsocketQueue,\n\t}: {\n\tusersId: string[];\n\tsubscriptionType: TSub;\n\tidentifiers: SocketSubscriptionIdentifiersMap[TSub];\n\tdata: SocketPayloadMap[TEmit];\n\tsocketEmit: TEmit;\n\tsocketQueue: SocketServiceQueue;\n}): Promise<string[]> {\n\tconst cacheKeys = usersId.map(userId => generateCacheKey(userId, subscriptionType, identifiers));\n\tconst recipients = await getInstanceSocketsMap(cacheKeys);\n\n\tconst cacheKeyToSockets = new Set(recipients.map(r => r.instanceId));\n\n\tawait Promise.all(\n\t\trecipients.map(({ instanceId, socketIds }) => {\n\t\t\tconst payload: SocketEventParams<typeof data> = {\n\t\t\t\tdata,\n\t\t\t\tsockets: socketIds,\n\t\t\t\tsocketEmit,\n\t\t\t};\n\t\t\tconst event = new SocketEmitEvent(socketQueue, instanceId, payload);\n\t\t\treturn publishEvent(event);\n\t\t})\n\t);\n\n\treturn usersId.filter((_, idx) => !cacheKeyToSockets.has(cacheKeys[idx]));\n}\n\nexport function generateCacheKey<T extends SocketSubscriptionType>(\n\tuserId: string | number,\n\tsubscriptionType: T,\n\tidentifiers: SocketSubscriptionIdentifiersMap[T]\n): string {\n\tconst serializedIdentifiers = Object.entries(identifiers)\n\t\t.sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n\t\t.map(([key, value]) => `${key}:${JSON.stringify(value)}`)\n\t\t.join('|');\n\n\tconst serialized = `userId:${userId}|subscriptionType:${subscriptionType}|${serializedIdentifiers}`;\n\n\treturn createHash('sha256').update(serialized).digest('hex');\n}\n"]}
@@ -22,7 +22,7 @@ Perfect for sharing types between frontend and backend applications.
22
22
 
23
23
  ## Version
24
24
 
25
- Version: 1.0.354
25
+ Version: 1.0.356
26
26
 
27
27
  ## Dependencies
28
28
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lyxa.ai/types",
3
- "version": "1.0.354",
3
+ "version": "1.0.356",
4
4
  "description": "Lyxa type definitions and validation schemas for both frontend and backend",
5
5
  "author": "elie <42282499+Internalizable@users.noreply.github.com>",
6
6
  "license": "MIT",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lyxa.ai/core",
3
- "version": "1.0.354",
3
+ "version": "1.0.356",
4
4
  "description": "The Core system of the Lyxa services.",
5
5
  "author": "elie <42282499+Internalizable@users.noreply.github.com>",
6
6
  "license": "MIT",