@lyxa.ai/core 1.2.87 → 1.2.89

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.
Files changed (46) hide show
  1. package/dist/libraries/event/index.js +1 -0
  2. package/dist/libraries/event/index.js.map +1 -1
  3. package/dist/libraries/socket/BaseSocketEvent.d.ts +2 -2
  4. package/dist/libraries/socket/BaseSocketEvent.js +6 -8
  5. package/dist/libraries/socket/BaseSocketEvent.js.map +1 -1
  6. package/dist/libraries/socket/PushNotificationEvent.js.map +1 -1
  7. package/dist/libraries/socket/adapters/socket-subscription.d.ts +3 -3
  8. package/dist/libraries/socket/adapters/socket-subscription.js.map +1 -1
  9. package/dist/libraries/socket/core/socket-event-publisher.d.ts +2 -1
  10. package/dist/libraries/socket/core/socket-event-publisher.js +8 -6
  11. package/dist/libraries/socket/core/socket-event-publisher.js.map +1 -1
  12. package/dist/libraries/socket/core/socket-event-registry.d.ts +10 -19
  13. package/dist/libraries/socket/core/socket-event-registry.js +10 -8
  14. package/dist/libraries/socket/core/socket-event-registry.js.map +1 -1
  15. package/dist/libraries/socket/core/socket-event-registry.map.d.ts +21 -344
  16. package/dist/libraries/socket/core/socket-event-registry.map.js +17 -35
  17. package/dist/libraries/socket/core/socket-event-registry.map.js.map +1 -1
  18. package/dist/libraries/socket/core/socket-redis-connections.js +17 -3
  19. package/dist/libraries/socket/core/socket-redis-connections.js.map +1 -1
  20. package/dist/libraries/socket/events/chatlist-message-send.socket.event.d.ts +5 -36
  21. package/dist/libraries/socket/events/chatlist-message-send.socket.event.js +12 -8
  22. package/dist/libraries/socket/events/chatlist-message-send.socket.event.js.map +1 -1
  23. package/dist/libraries/socket/events/chatroom-message-send.socket.event.d.ts +95 -1
  24. package/dist/libraries/socket/events/chatroom-message-send.socket.event.js +22 -1
  25. package/dist/libraries/socket/events/chatroom-message-send.socket.event.js.map +1 -1
  26. package/dist/libraries/socket/events/notification.socket.event.d.ts +1 -0
  27. package/dist/libraries/socket/events/notification.socket.event.js +3 -0
  28. package/dist/libraries/socket/events/notification.socket.event.js.map +1 -1
  29. package/dist/libraries/socket/events/rider-connect.socket.event.d.ts +1 -0
  30. package/dist/libraries/socket/events/rider-connect.socket.event.js +3 -0
  31. package/dist/libraries/socket/events/rider-connect.socket.event.js.map +1 -1
  32. package/dist/libraries/socket/events/rider-location-update.socket.event.d.ts +1 -0
  33. package/dist/libraries/socket/events/rider-location-update.socket.event.js +3 -0
  34. package/dist/libraries/socket/events/rider-location-update.socket.event.js.map +1 -1
  35. package/dist/libraries/socket/events/ticket-actions.socket.event.d.ts +5 -7
  36. package/dist/libraries/socket/events/ticket-actions.socket.event.js +16 -7
  37. package/dist/libraries/socket/events/ticket-actions.socket.event.js.map +1 -1
  38. package/dist/libraries/socket/events/ticket-assign.socket.event.d.ts +1 -0
  39. package/dist/libraries/socket/events/ticket-assign.socket.event.js +3 -0
  40. package/dist/libraries/socket/events/ticket-assign.socket.event.js.map +1 -1
  41. package/dist/libraries/socket/events/ticket-unassign.socket.event.d.ts +2 -0
  42. package/dist/libraries/socket/events/ticket-unassign.socket.event.js +6 -0
  43. package/dist/libraries/socket/events/ticket-unassign.socket.event.js.map +1 -1
  44. package/dist/types/README.md +1 -1
  45. package/dist/types/package.json +1 -1
  46. package/package.json +1 -1
@@ -1 +1 @@
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';\nimport { AuthEntityType } from '../../auth';\n\nexport type EntitySubscription = {\n\tid: string;\n\ttype?: AuthEntityType;\n};\n\nexport interface SocketRedisEventInformation {\n\teventKey: string;\n\tinstanceId: string;\n\tsocketId: string;\n}\n\n// Zero-overhead key generation with memoization\nconst keyCache = new Map<string, string>();\n\nexport const entityKey = (entity: EntitySubscription): string => {\n\tconst cacheKey = `${entity.type}:${entity.id}`;\n\tlet key = keyCache.get(cacheKey);\n\tif (!key) {\n\t\tkey = `${entity.type ?? 'default'}:${entity.id}`;\n\t\tkeyCache.set(cacheKey, key);\n\t}\n\treturn key;\n};\n\n// Ultra-simplified structure: Direct event lookup, no parsing!\nconst kEntityEventSockets = (entity: EntitySubscription, eventKey: string) => \n\t`socket:entity:${entityKey(entity)}:${eventKey}`;\nconst kEventSubscribers = (eventKey: string) => `socket:event:${eventKey}`;\n\n// Export for use in publisher (avoid duplication)\nexport const getEntityEventSocketsKey = kEntityEventSockets;\n\n// LRU Cache for hot entities (reduces Redis load by 80-90%)\nclass LRUCache<K, V> {\n\tprivate cache = new Map<K, V>();\n\tprivate maxSize: number;\n\n\tconstructor(maxSize = 10000) {\n\t\tthis.maxSize = maxSize;\n\t}\n\n\tget(key: K): V | undefined {\n\t\tconst value = this.cache.get(key);\n\t\tif (value !== undefined) {\n\t\t\t// Move to end (most recently used)\n\t\t\tthis.cache.delete(key);\n\t\t\tthis.cache.set(key, value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tset(key: K, value: V): void {\n\t\t// Remove if exists (will re-add at end)\n\t\tthis.cache.delete(key);\n\n\t\t// Evict oldest if at capacity\n\t\tif (this.cache.size >= this.maxSize) {\n\t\t\tconst firstKey = this.cache.keys().next().value;\n\t\t\tif (firstKey !== undefined) {\n\t\t\t\tthis.cache.delete(firstKey);\n\t\t\t}\n\t\t}\n\n\t\tthis.cache.set(key, value);\n\t}\n\n\tdelete(key: K): void {\n\t\tthis.cache.delete(key);\n\t}\n\n\tclear(): void {\n\t\tthis.cache.clear();\n\t}\n}\n\n// Cache subscription info for 5 seconds (hot path optimization)\nconst subscriptionCache = new LRUCache<\n\tstring,\n\t{ isSubscribed: boolean; instances: string[]; timestamp: number }\n>(10000);\n\n// Cache event subscribers (who's listening to what event)\nconst eventSubscribersCache = new LRUCache<string, { subscribers: EntitySubscription[]; timestamp: number }>(\n\t5000\n);\n\nconst CACHE_TTL = 5000; // 5 seconds\n\nexport async function connectEntityToSocketEvent(\n\tentity: EntitySubscription,\n\tsocketRedisEventInformation: SocketRedisEventInformation\n) {\n\tconst redis = getLibraries().getRedisService();\n\tconst entityKeyStr = entityKey(entity);\n\n\t// Simple: just store instanceId and socketId\n\tconst socketData = JSON.stringify({\n\t\tinstanceId: socketRedisEventInformation.instanceId,\n\t\tsocketId: socketRedisEventInformation.socketId,\n\t});\n\n\tconst subscriberData = JSON.stringify({\n\t\tentity: entityKeyStr,\n\t\tsocketId: socketRedisEventInformation.socketId,\n\t\tinstanceId: socketRedisEventInformation.instanceId,\n\t});\n\n\t// 2 Redis operations with event-specific key\n\tawait Promise.all([\n\t\tredis.addToSet(kEntityEventSockets(entity, socketRedisEventInformation.eventKey), socketData),\n\t\tredis.addToSet(kEventSubscribers(socketRedisEventInformation.eventKey), subscriberData),\n\t]);\n\n\t// Lazy cache invalidation\n\tconst cacheKey = `${entityKeyStr}:${socketRedisEventInformation.eventKey}`;\n\tsubscriptionCache.delete(cacheKey);\n\teventSubscribersCache.delete(socketRedisEventInformation.eventKey);\n}\n\nexport async function getConnectedEntityByType(type: AuthEntityType): Promise<string[]> {\n\tconst redis = getLibraries().getRedisService();\n\t// Use pattern matching via ioredis directly\n\tconst pattern = `socket:entity:${type}:*`;\n\tconst keys = await redis.redisClient.keys(pattern);\n\t// Extract entity IDs from keys: socket:entity:type:id:eventKey\n\t// Get unique IDs (since one entity can have multiple event subscriptions)\n\tconst idSet = new Set<string>();\n\tfor (const key of keys) {\n\t\tconst parts = key.split(':');\n\t\tidSet.add(parts[3]); // Extract ID from socket:entity:type:id:eventKey\n\t}\n\treturn Array.from(idSet);\n}\n\nexport async function disconnectEntityFromSocketEvent(\n\tentity: EntitySubscription,\n\tsocketRedisEventInformation: SocketRedisEventInformation\n) {\n\tconst redis = getLibraries().getRedisService();\n\tconst entityKeyStr = entityKey(entity);\n\n\tconst socketData = JSON.stringify({\n\t\tinstanceId: socketRedisEventInformation.instanceId,\n\t\tsocketId: socketRedisEventInformation.socketId,\n\t});\n\n\tconst entityEventKey = kEntityEventSockets(entity, socketRedisEventInformation.eventKey);\n\tconst eventKey = kEventSubscribers(socketRedisEventInformation.eventKey);\n\n\t// Parallel operations for speed\n\tconst [, eventSubscribers] = await Promise.all([\n\t\tredis.removeFromSet(entityEventKey, socketData),\n\t\tredis.getSetMembers(eventKey),\n\t]);\n\n\t// Check remaining sockets AFTER removal (atomic check)\n\tconst remainingSockets = await redis.getSetMembers(entityEventKey);\n\n\t// Remove from event subscribers\n\tconst toRemove = eventSubscribers.find(s => {\n\t\tconst parsed = JSON.parse(s);\n\t\treturn parsed.entity === entityKeyStr && parsed.socketId === socketRedisEventInformation.socketId;\n\t});\n\n\tconst cleanupOps = [];\n\tif (toRemove) {\n\t\tcleanupOps.push(redis.removeFromSet(eventKey, toRemove));\n\t}\n\n\t// If no more sockets for this event, delete the key (safe after atomic check)\n\tif (remainingSockets.length === 0) {\n\t\tcleanupOps.push(redis.deleteCachedObject(entityEventKey));\n\t}\n\n\tif (cleanupOps.length > 0) {\n\t\tawait Promise.all(cleanupOps);\n\t}\n\n\t// Invalidate caches\n\tconst cacheKey = `${entityKeyStr}:${socketRedisEventInformation.eventKey}`;\n\tsubscriptionCache.delete(cacheKey);\n\teventSubscribersCache.delete(socketRedisEventInformation.eventKey);\n}\n\n// Ultra-simple: Direct key lookup, no parsing!\nexport async function getEntitySubscriptionInfo(\n\tentity: EntitySubscription,\n\teventKey: string\n): Promise<{ isSubscribed: boolean; instances: string[] }> {\n\tconst entityKeyStr = entityKey(entity);\n\tconst cacheKey = `${entityKeyStr}:${eventKey}`;\n\n\t// Inline cache check\n\tconst cached = subscriptionCache.get(cacheKey);\n\tif (cached) {\n\t\tconst age = Date.now() - cached.timestamp;\n\t\tif (age < CACHE_TTL) {\n\t\t\treturn { isSubscribed: cached.isSubscribed, instances: cached.instances };\n\t\t}\n\t}\n\n\tconst redis = getLibraries().getRedisService();\n\n\t// Direct lookup - event-specific key!\n\tconst sockets = await redis.getSetMembers(kEntityEventSockets(entity, eventKey));\n\n\tconst isSubscribed = sockets.length > 0;\n\tconst instanceSet = new Set<string>();\n\n\t// Extract instances (no filtering needed!)\n\tfor (let i = 0; i < sockets.length; i++) {\n\t\tconst socketInfo = JSON.parse(sockets[i]);\n\t\tinstanceSet.add(socketInfo.instanceId);\n\t}\n\n\tconst instances = Array.from(instanceSet);\n\tconst result = { isSubscribed, instances };\n\tsubscriptionCache.set(cacheKey, { ...result, timestamp: Date.now() });\n\n\treturn result;\n}\n\n// Batch lookup - parallel direct lookups, no parsing/filtering!\nexport async function getEntitySubscriptionInfoBatch(\n\tentities: Array<{ entity: EntitySubscription; eventKey: string }>\n): Promise<Map<string, { isSubscribed: boolean; instances: string[] }>> {\n\tif (entities.length === 0) return new Map();\n\n\tconst redis = getLibraries().getRedisService();\n\tconst results = new Map<string, { isSubscribed: boolean; instances: string[] }>();\n\tconst now = Date.now();\n\tconst uncached: typeof entities = [];\n\n\t// Check cache first\n\tfor (let i = 0; i < entities.length; i++) {\n\t\tconst { entity, eventKey } = entities[i];\n\t\tconst cacheKey = `${entityKey(entity)}:${eventKey}`;\n\t\tconst cached = subscriptionCache.get(cacheKey);\n\n\t\tif (cached && now - cached.timestamp < CACHE_TTL) {\n\t\t\tresults.set(cacheKey, { isSubscribed: cached.isSubscribed, instances: cached.instances });\n\t\t} else {\n\t\t\tuncached.push(entities[i]);\n\t\t}\n\t}\n\n\tif (uncached.length === 0) return results;\n\n\t// Fetch all uncached in parallel - direct event-specific lookups!\n\tawait Promise.all(\n\t\tuncached.map(async ({ entity, eventKey }) => {\n\t\t\tconst sockets = await redis.getSetMembers(kEntityEventSockets(entity, eventKey));\n\n\t\t\tconst isSubscribed = sockets.length > 0;\n\t\t\tconst instanceSet = new Set<string>();\n\n\t\t\t// Just extract instances, no filtering!\n\t\t\tfor (let i = 0; i < sockets.length; i++) {\n\t\t\t\tconst socketInfo = JSON.parse(sockets[i]);\n\t\t\t\tinstanceSet.add(socketInfo.instanceId);\n\t\t\t}\n\n\t\t\tconst cacheKey = `${entityKey(entity)}:${eventKey}`;\n\t\t\tconst result = { isSubscribed, instances: Array.from(instanceSet) };\n\n\t\t\tsubscriptionCache.set(cacheKey, { ...result, timestamp: now });\n\t\t\tresults.set(cacheKey, result);\n\t\t})\n\t);\n\n\treturn results;\n}\n\nexport async function isEntityConnected(entity: EntitySubscription, eventKey: string): Promise<boolean> {\n\tconst redis = getLibraries().getRedisService();\n\tconst sockets = await redis.getSetMembers(kEntityEventSockets(entity, eventKey));\n\treturn sockets.length > 0;\n}\n\nexport async function disconnectAllEntitiesFromInstance(entityType?: AuthEntityType) {\n\tconst instanceId = getInstanceId();\n\tconst redis = getLibraries().getRedisService();\n\n\t// Find all entity-event keys matching the pattern\n\tconst pattern = entityType ? `socket:entity:${entityType}:*` : 'socket:entity:*';\n\tconst entityEventKeys = await redis.redisClient.keys(pattern);\n\tif (!entityEventKeys.length) return;\n\n\tconst affectedEvents = new Set<string>();\n\n\t// Use allSettled for resilience - don't fail all if one fails\n\tconst results = await Promise.allSettled(\n\t\tentityEventKeys.map(async (keyPath: string) => {\n\t\t\tconst sockets = await redis.getSetMembers(keyPath);\n\t\t\tif (!sockets.length) return;\n\n\t\t\t// Extract event from key: socket:entity:type:id:eventKey\n\t\t\tconst keyParts = keyPath.split(':');\n\t\t\tconst eventKey = keyParts.slice(4).join(':'); // Handle eventKeys with colons\n\t\t\tconst entityKeyStr = `${keyParts[2]}:${keyParts[3]}`;\n\n\t\t\t// Find sockets from this instance\n\t\t\tconst socketsToRemove = sockets.filter(s => {\n\t\t\t\ttry {\n\t\t\t\t\tconst parsed = JSON.parse(s);\n\t\t\t\t\treturn parsed.instanceId === instanceId;\n\t\t\t\t} catch {\n\t\t\t\t\treturn false; // Skip malformed data\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!socketsToRemove.length) return;\n\n\t\t\taffectedEvents.add(eventKey);\n\n\t\t\t// Remove from entity-event key\n\t\t\tawait Promise.all(socketsToRemove.map(s => redis.removeFromSet(keyPath, s)));\n\n\t\t\t// Remove from event subscribers\n\t\t\tconst eventCleanup = [];\n\t\t\tfor (const socketStr of socketsToRemove) {\n\t\t\t\ttry {\n\t\t\t\t\tconst parsed = JSON.parse(socketStr);\n\t\t\t\t\tconst eventSubs = await redis.getSetMembers(kEventSubscribers(eventKey));\n\t\t\t\t\tconst toRemove = eventSubs.find(s => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst sub = JSON.parse(s);\n\t\t\t\t\t\t\treturn sub.entity === entityKeyStr && sub.socketId === parsed.socketId;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (toRemove) {\n\t\t\t\t\t\teventCleanup.push(redis.removeFromSet(kEventSubscribers(eventKey), toRemove));\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.error(`[Socket] Failed to cleanup subscriber for ${eventKey}:`, err);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check if this entity-event has any sockets left\n\t\t\tconst remainingSockets = sockets.length - socketsToRemove.length;\n\t\t\tif (remainingSockets === 0) {\n\t\t\t\teventCleanup.push(redis.deleteCachedObject(keyPath));\n\t\t\t}\n\n\t\t\tif (eventCleanup.length > 0) {\n\t\t\t\tawait Promise.all(eventCleanup);\n\t\t\t}\n\n\t\t\t// Clear cache\n\t\t\tsubscriptionCache.delete(`${entityKeyStr}:${eventKey}`);\n\t\t})\n\t);\n\n\t// Log any failures\n\tconst failures = results.filter(r => r.status === 'rejected');\n\tif (failures.length > 0) {\n\t\tconsole.error(`[Socket] ${failures.length} cleanup operations failed during instance disconnect`);\n\t}\n\n\t// Invalidate affected event caches\n\taffectedEvents.forEach(eventKey => eventSubscribersCache.delete(eventKey));\n}\n\n// Zero-allocation hot path for event subscribers\nexport async function getEventSubscribers(eventKey: string): Promise<EntitySubscription[]> {\n\tconst cached = eventSubscribersCache.get(eventKey);\n\tconst now = Date.now();\n\n\tif (cached && now - cached.timestamp < CACHE_TTL) {\n\t\treturn cached.subscribers;\n\t}\n\n\tconst redis = getLibraries().getRedisService();\n\tconst subscriberData = await redis.getSetMembers(kEventSubscribers(eventKey));\n\n\tif (subscriberData.length === 0) {\n\t\tconst empty: EntitySubscription[] = [];\n\t\teventSubscribersCache.set(eventKey, { subscribers: empty, timestamp: now });\n\t\treturn empty;\n\t}\n\n\t// Parse subscriber data and extract unique entities\n\tconst entityMap = new Map<string, EntitySubscription>();\n\tfor (let i = 0; i < subscriberData.length; i++) {\n\t\tconst sub = JSON.parse(subscriberData[i]);\n\t\tconst entityKeyStr = sub.entity;\n\n\t\tif (!entityMap.has(entityKeyStr)) {\n\t\t\tconst colonIndex = entityKeyStr.indexOf(':');\n\t\t\tconst type = entityKeyStr.substring(0, colonIndex);\n\t\t\tconst id = entityKeyStr.substring(colonIndex + 1);\n\n\t\t\tentityMap.set(entityKeyStr, {\n\t\t\t\tid,\n\t\t\t\ttype: type === 'default' ? undefined : (type as AuthEntityType),\n\t\t\t});\n\t\t}\n\t}\n\n\tconst subscribers = Array.from(entityMap.values());\n\teventSubscribersCache.set(eventKey, { subscribers, timestamp: now });\n\treturn subscribers;\n}\n\n// ⚡ Batch variant: Get subscribers for multiple events at once\nexport async function getEventSubscribersBatch(\n\teventKeys: string[]\n): Promise<Map<string, EntitySubscription[]>> {\n\tconst redis = getLibraries().getRedisService();\n\tconst results = new Map<string, EntitySubscription[]>();\n\tconst now = Date.now();\n\n\t// Separate cached vs uncached\n\tconst uncached: string[] = [];\n\tfor (const eventKey of eventKeys) {\n\t\tconst cached = eventSubscribersCache.get(eventKey);\n\t\tif (cached && now - cached.timestamp < CACHE_TTL) {\n\t\t\tresults.set(eventKey, cached.subscribers);\n\t\t} else {\n\t\t\tuncached.push(eventKey);\n\t\t}\n\t}\n\n\t// Fetch uncached in parallel\n\tif (uncached.length > 0) {\n\t\tawait Promise.all(\n\t\t\tuncached.map(async eventKey => {\n\t\t\t\tconst subscriberData = await redis.getSetMembers(kEventSubscribers(eventKey));\n\n\t\t\t\tconst entityMap = new Map<string, EntitySubscription>();\n\t\t\t\tfor (let i = 0; i < subscriberData.length; i++) {\n\t\t\t\t\tconst sub = JSON.parse(subscriberData[i]);\n\t\t\t\t\tconst entityKeyStr = sub.entity;\n\n\t\t\t\t\tif (!entityMap.has(entityKeyStr)) {\n\t\t\t\t\t\tconst colonIndex = entityKeyStr.indexOf(':');\n\t\t\t\t\t\tconst type = entityKeyStr.substring(0, colonIndex);\n\t\t\t\t\t\tconst id = entityKeyStr.substring(colonIndex + 1);\n\n\t\t\t\t\t\tentityMap.set(entityKeyStr, {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\ttype: type === 'default' ? undefined : (type as AuthEntityType),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst subscribers = Array.from(entityMap.values());\n\t\t\t\teventSubscribersCache.set(eventKey, { subscribers, timestamp: now });\n\t\t\t\tresults.set(eventKey, subscribers);\n\t\t\t})\n\t\t);\n\t}\n\n\treturn results;\n}\n\n// Zero-copy filtered query - inline filtering to avoid double allocation\nexport async function getEventSubscribersByType(\n\teventKey: string,\n\tentityType: AuthEntityType\n): Promise<EntitySubscription[]> {\n\tconst cached = eventSubscribersCache.get(eventKey);\n\tconst now = Date.now();\n\n\tif (cached && now - cached.timestamp < CACHE_TTL) {\n\t\t// Fast filter on cached data\n\t\tconst filtered: EntitySubscription[] = [];\n\t\tfor (let i = 0; i < cached.subscribers.length; i++) {\n\t\t\tif (cached.subscribers[i].type === entityType) {\n\t\t\t\tfiltered.push(cached.subscribers[i]);\n\t\t\t}\n\t\t}\n\t\treturn filtered;\n\t}\n\n\t// Fetch and filter in one pass\n\tconst redis = getLibraries().getRedisService();\n\tconst subscriberData = await redis.getSetMembers(kEventSubscribers(eventKey));\n\tconst typePrefix = `${entityType}:`;\n\n\tconst filtered: EntitySubscription[] = [];\n\tconst entityMap = new Map<string, EntitySubscription>();\n\n\tfor (let i = 0; i < subscriberData.length; i++) {\n\t\tconst sub = JSON.parse(subscriberData[i]);\n\t\tconst entityKeyStr = sub.entity;\n\n\t\tif (!entityMap.has(entityKeyStr)) {\n\t\t\tconst colonIndex = entityKeyStr.indexOf(':');\n\t\t\tconst type = entityKeyStr.substring(0, colonIndex);\n\t\t\tconst id = entityKeyStr.substring(colonIndex + 1);\n\n\t\t\tconst entity: EntitySubscription = {\n\t\t\t\tid,\n\t\t\t\ttype: type === 'default' ? undefined : (type as AuthEntityType),\n\t\t\t};\n\n\t\t\tentityMap.set(entityKeyStr, entity);\n\n\t\t\tif (entityKeyStr.startsWith(typePrefix)) {\n\t\t\t\tfiltered.push(entity);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Cache all unique subscribers for future calls\n\tconst all = Array.from(entityMap.values());\n\teventSubscribersCache.set(eventKey, { subscribers: all, timestamp: now });\n\n\treturn filtered;\n}\n\n// ⚡ Get subscriber count (fast, check cache or count)\nexport async function getEventSubscriberCount(eventKey: string): Promise<number> {\n\t// Check cache first\n\tconst cached = eventSubscribersCache.get(eventKey);\n\tif (cached && Date.now() - cached.timestamp < CACHE_TTL) {\n\t\treturn cached.subscribers.length;\n\t}\n\n\t// Otherwise fetch and count\n\tconst redis = getLibraries().getRedisService();\n\tconst members = await redis.getSetMembers(kEventSubscribers(eventKey));\n\treturn members.length;\n}\n"]}
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';\nimport { AuthEntityType } from '../../auth';\nimport type { Redis } from 'ioredis';\n\nexport type EntitySubscription = {\n\tid: string;\n\ttype?: AuthEntityType;\n};\n\nexport interface SocketRedisEventInformation {\n\teventKey: string;\n\tinstanceId: string;\n\tsocketId: string;\n}\n\n// Zero-overhead key generation with memoization\nconst keyCache = new Map<string, string>();\n\nexport const entityKey = (entity: EntitySubscription): string => {\n\tconst cacheKey = `${entity.type}:${entity.id}`;\n\tlet key = keyCache.get(cacheKey);\n\tif (!key) {\n\t\tkey = `${entity.type ?? 'default'}:${entity.id}`;\n\t\tkeyCache.set(cacheKey, key);\n\t}\n\treturn key;\n};\n\n// Ultra-simplified structure: Direct event lookup, no parsing!\nconst kEntityEventSockets = (entity: EntitySubscription, eventKey: string) =>\n\t`socket:entity:${entityKey(entity)}:${eventKey}`;\nconst kEventSubscribers = (eventKey: string) => `socket:event:${eventKey}`;\n\n// Export for use in publisher (avoid duplication)\nexport const getEntityEventSocketsKey = kEntityEventSockets;\n\n// LRU Cache for hot entities (reduces Redis load by 80-90%)\nclass LRUCache<K, V> {\n\tprivate cache = new Map<K, V>();\n\tprivate maxSize: number;\n\n\tconstructor(maxSize = 10000) {\n\t\tthis.maxSize = maxSize;\n\t}\n\n\tget(key: K): V | undefined {\n\t\tconst value = this.cache.get(key);\n\t\tif (value !== undefined) {\n\t\t\t// Move to end (most recently used)\n\t\t\tthis.cache.delete(key);\n\t\t\tthis.cache.set(key, value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tset(key: K, value: V): void {\n\t\t// Remove if exists (will re-add at end)\n\t\tthis.cache.delete(key);\n\n\t\t// Evict oldest if at capacity\n\t\tif (this.cache.size >= this.maxSize) {\n\t\t\tconst firstKey = this.cache.keys().next().value;\n\t\t\tif (firstKey !== undefined) {\n\t\t\t\tthis.cache.delete(firstKey);\n\t\t\t}\n\t\t}\n\n\t\tthis.cache.set(key, value);\n\t}\n\n\tdelete(key: K): void {\n\t\tthis.cache.delete(key);\n\t}\n\n\tclear(): void {\n\t\tthis.cache.clear();\n\t}\n}\n\n// Cache subscription info for 5 seconds (hot path optimization)\nconst subscriptionCache = new LRUCache<\n\tstring,\n\t{ isSubscribed: boolean; instances: string[]; timestamp: number }\n>(10000);\n\n// Cache event subscribers (who's listening to what event)\nconst eventSubscribersCache = new LRUCache<string, { subscribers: EntitySubscription[]; timestamp: number }>(\n\t5000\n);\n\nconst CACHE_TTL = 5000; // 5 seconds\n\nexport async function connectEntityToSocketEvent(\n\tentity: EntitySubscription,\n\tsocketRedisEventInformation: SocketRedisEventInformation\n) {\n\tconst redis = getLibraries().getRedisService();\n\tconst entityKeyStr = entityKey(entity);\n\n\t// Simple: just store instanceId and socketId\n\tconst socketData = JSON.stringify({\n\t\tinstanceId: socketRedisEventInformation.instanceId,\n\t\tsocketId: socketRedisEventInformation.socketId,\n\t});\n\n\tconst subscriberData = JSON.stringify({\n\t\tentity: entityKeyStr,\n\t\tsocketId: socketRedisEventInformation.socketId,\n\t\tinstanceId: socketRedisEventInformation.instanceId,\n\t});\n\n\t// 2 Redis operations with event-specific key\n\tawait Promise.all([\n\t\tredis.addToSet(kEntityEventSockets(entity, socketRedisEventInformation.eventKey), socketData),\n\t\tredis.addToSet(kEventSubscribers(socketRedisEventInformation.eventKey), subscriberData),\n\t]);\n\n\t// Lazy cache invalidation\n\tconst cacheKey = `${entityKeyStr}:${socketRedisEventInformation.eventKey}`;\n\tsubscriptionCache.delete(cacheKey);\n\teventSubscribersCache.delete(socketRedisEventInformation.eventKey);\n}\n\n// Helper for non-blocking key scanning\nasync function scanKeys(redis: Redis, pattern: string): Promise<string[]> {\n\tconst keys: string[] = [];\n\tlet cursor = '0';\n\tdo {\n\t\t// Scan with count 100 to avoid blocking\n\t\tconst [newCursor, foundKeys] = await redis.scan(cursor, 'MATCH', pattern, 'COUNT', 100);\n\t\tcursor = newCursor;\n\t\tif (foundKeys.length > 0) {\n\t\t\tkeys.push(...foundKeys);\n\t\t}\n\t} while (cursor !== '0');\n\treturn keys;\n}\n\nexport async function getConnectedEntityByType(type: AuthEntityType): Promise<string[]> {\n\tconst redis = getLibraries().getRedisService();\n\t// Use pattern matching via ioredis directly\n\tconst pattern = `socket:entity:${type}:*`;\n\n\t// Use non-blocking scan instead of keys\n\tconst keys = await scanKeys(redis.redisClient, pattern);\n\n\t// Extract entity IDs from keys: socket:entity:type:id:eventKey\n\t// Get unique IDs (since one entity can have multiple event subscriptions)\n\tconst idSet = new Set<string>();\n\tfor (const key of keys) {\n\t\tconst parts = key.split(':');\n\t\tif (parts.length >= 4) {\n\t\t\tidSet.add(parts[3]); // Extract ID from socket:entity:type:id:eventKey\n\t\t}\n\t}\n\treturn Array.from(idSet);\n}\n\nexport async function disconnectEntityFromSocketEvent(\n\tentity: EntitySubscription,\n\tsocketRedisEventInformation: SocketRedisEventInformation\n) {\n\tconst redis = getLibraries().getRedisService();\n\tconst entityKeyStr = entityKey(entity);\n\n\tconst socketData = JSON.stringify({\n\t\tinstanceId: socketRedisEventInformation.instanceId,\n\t\tsocketId: socketRedisEventInformation.socketId,\n\t});\n\n\tconst entityEventKey = kEntityEventSockets(entity, socketRedisEventInformation.eventKey);\n\tconst eventKey = kEventSubscribers(socketRedisEventInformation.eventKey);\n\n\t// Parallel operations for speed\n\tconst [, eventSubscribers] = await Promise.all([\n\t\tredis.removeFromSet(entityEventKey, socketData),\n\t\tredis.getSetMembers(eventKey),\n\t]);\n\n\t// Check remaining sockets AFTER removal (atomic check)\n\tconst remainingSockets = await redis.getSetMembers(entityEventKey);\n\n\t// Remove from event subscribers\n\tconst toRemove = eventSubscribers.find(s => {\n\t\tconst parsed = JSON.parse(s);\n\t\treturn parsed.entity === entityKeyStr && parsed.socketId === socketRedisEventInformation.socketId;\n\t});\n\n\tconst cleanupOps = [];\n\tif (toRemove) {\n\t\tcleanupOps.push(redis.removeFromSet(eventKey, toRemove));\n\t}\n\n\t// If no more sockets for this event, delete the key (safe after atomic check)\n\tif (remainingSockets.length === 0) {\n\t\tcleanupOps.push(redis.deleteCachedObject(entityEventKey));\n\t}\n\n\tif (cleanupOps.length > 0) {\n\t\tawait Promise.all(cleanupOps);\n\t}\n\n\t// Invalidate caches\n\tconst cacheKey = `${entityKeyStr}:${socketRedisEventInformation.eventKey}`;\n\tsubscriptionCache.delete(cacheKey);\n\teventSubscribersCache.delete(socketRedisEventInformation.eventKey);\n}\n\n// Ultra-simple: Direct key lookup, no parsing!\nexport async function getEntitySubscriptionInfo(\n\tentity: EntitySubscription,\n\teventKey: string\n): Promise<{ isSubscribed: boolean; instances: string[] }> {\n\tconst entityKeyStr = entityKey(entity);\n\tconst cacheKey = `${entityKeyStr}:${eventKey}`;\n\n\t// Inline cache check\n\tconst cached = subscriptionCache.get(cacheKey);\n\tif (cached) {\n\t\tconst age = Date.now() - cached.timestamp;\n\t\tif (age < CACHE_TTL) {\n\t\t\treturn { isSubscribed: cached.isSubscribed, instances: cached.instances };\n\t\t}\n\t}\n\n\tconst redis = getLibraries().getRedisService();\n\n\t// Direct lookup - event-specific key!\n\tconst sockets = await redis.getSetMembers(kEntityEventSockets(entity, eventKey));\n\n\tconst isSubscribed = sockets.length > 0;\n\tconst instanceSet = new Set<string>();\n\n\t// Extract instances (no filtering needed!)\n\tfor (let i = 0; i < sockets.length; i++) {\n\t\tconst socketInfo = JSON.parse(sockets[i]);\n\t\tinstanceSet.add(socketInfo.instanceId);\n\t}\n\n\tconst instances = Array.from(instanceSet);\n\tconst result = { isSubscribed, instances };\n\tsubscriptionCache.set(cacheKey, { ...result, timestamp: Date.now() });\n\n\treturn result;\n}\n\n// Batch lookup - parallel direct lookups, no parsing/filtering!\nexport async function getEntitySubscriptionInfoBatch(\n\tentities: Array<{ entity: EntitySubscription; eventKey: string }>\n): Promise<Map<string, { isSubscribed: boolean; instances: string[] }>> {\n\tif (entities.length === 0) return new Map();\n\n\tconst redis = getLibraries().getRedisService();\n\tconst results = new Map<string, { isSubscribed: boolean; instances: string[] }>();\n\tconst now = Date.now();\n\tconst uncached: typeof entities = [];\n\n\t// Check cache first\n\tfor (let i = 0; i < entities.length; i++) {\n\t\tconst { entity, eventKey } = entities[i];\n\t\tconst cacheKey = `${entityKey(entity)}:${eventKey}`;\n\t\tconst cached = subscriptionCache.get(cacheKey);\n\n\t\tif (cached && now - cached.timestamp < CACHE_TTL) {\n\t\t\tresults.set(cacheKey, { isSubscribed: cached.isSubscribed, instances: cached.instances });\n\t\t} else {\n\t\t\tuncached.push(entities[i]);\n\t\t}\n\t}\n\n\tif (uncached.length === 0) return results;\n\n\t// Fetch all uncached in parallel - direct event-specific lookups!\n\tawait Promise.all(\n\t\tuncached.map(async ({ entity, eventKey }) => {\n\t\t\tconst sockets = await redis.getSetMembers(kEntityEventSockets(entity, eventKey));\n\n\t\t\tconst isSubscribed = sockets.length > 0;\n\t\t\tconst instanceSet = new Set<string>();\n\n\t\t\t// Just extract instances, no filtering!\n\t\t\tfor (let i = 0; i < sockets.length; i++) {\n\t\t\t\tconst socketInfo = JSON.parse(sockets[i]);\n\t\t\t\tinstanceSet.add(socketInfo.instanceId);\n\t\t\t}\n\n\t\t\tconst cacheKey = `${entityKey(entity)}:${eventKey}`;\n\t\t\tconst result = { isSubscribed, instances: Array.from(instanceSet) };\n\n\t\t\tsubscriptionCache.set(cacheKey, { ...result, timestamp: now });\n\t\t\tresults.set(cacheKey, result);\n\t\t})\n\t);\n\n\treturn results;\n}\n\nexport async function isEntityConnected(entity: EntitySubscription, eventKey: string): Promise<boolean> {\n\tconst redis = getLibraries().getRedisService();\n\tconst sockets = await redis.getSetMembers(kEntityEventSockets(entity, eventKey));\n\treturn sockets.length > 0;\n}\n\nexport async function disconnectAllEntitiesFromInstance(entityType?: AuthEntityType) {\n\tconst instanceId = getInstanceId();\n\tconst redis = getLibraries().getRedisService();\n\n\t// Find all entity-event keys matching the pattern\n\tconst pattern = entityType ? `socket:entity:${entityType}:*` : 'socket:entity:*';\n\tconst entityEventKeys = await scanKeys(redis.redisClient, pattern);\n\tif (!entityEventKeys.length) return;\n\n\tconst affectedEvents = new Set<string>();\n\n\t// Use allSettled for resilience - don't fail all if one fails\n\tconst results = await Promise.allSettled(\n\t\tentityEventKeys.map(async (keyPath: string) => {\n\t\t\tconst sockets = await redis.getSetMembers(keyPath);\n\t\t\tif (!sockets.length) return;\n\n\t\t\t// Extract event from key: socket:entity:type:id:eventKey\n\t\t\tconst keyParts = keyPath.split(':');\n\t\t\tconst eventKey = keyParts.slice(4).join(':'); // Handle eventKeys with colons\n\t\t\tconst entityKeyStr = `${keyParts[2]}:${keyParts[3]}`;\n\n\t\t\t// Find sockets from this instance\n\t\t\tconst socketsToRemove = sockets.filter(s => {\n\t\t\t\ttry {\n\t\t\t\t\tconst parsed = JSON.parse(s);\n\t\t\t\t\treturn parsed.instanceId === instanceId;\n\t\t\t\t} catch {\n\t\t\t\t\treturn false; // Skip malformed data\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!socketsToRemove.length) return;\n\n\t\t\taffectedEvents.add(eventKey);\n\n\t\t\t// Remove from entity-event key\n\t\t\tawait Promise.all(socketsToRemove.map(s => redis.removeFromSet(keyPath, s)));\n\n\t\t\t// Remove from event subscribers\n\t\t\tconst eventCleanup = [];\n\t\t\tfor (const socketStr of socketsToRemove) {\n\t\t\t\ttry {\n\t\t\t\t\tconst parsed = JSON.parse(socketStr);\n\t\t\t\t\tconst eventSubs = await redis.getSetMembers(kEventSubscribers(eventKey));\n\t\t\t\t\tconst toRemove = eventSubs.find(s => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst sub = JSON.parse(s);\n\t\t\t\t\t\t\treturn sub.entity === entityKeyStr && sub.socketId === parsed.socketId;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (toRemove) {\n\t\t\t\t\t\teventCleanup.push(redis.removeFromSet(kEventSubscribers(eventKey), toRemove));\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.error(`[Socket] Failed to cleanup subscriber for ${eventKey}:`, err);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check if this entity-event has any sockets left\n\t\t\tconst remainingSockets = sockets.length - socketsToRemove.length;\n\t\t\tif (remainingSockets === 0) {\n\t\t\t\teventCleanup.push(redis.deleteCachedObject(keyPath));\n\t\t\t}\n\n\t\t\tif (eventCleanup.length > 0) {\n\t\t\t\tawait Promise.all(eventCleanup);\n\t\t\t}\n\n\t\t\t// Clear cache\n\t\t\tsubscriptionCache.delete(`${entityKeyStr}:${eventKey}`);\n\t\t})\n\t);\n\n\t// Log any failures\n\tconst failures = results.filter(r => r.status === 'rejected');\n\tif (failures.length > 0) {\n\t\tconsole.error(`[Socket] ${failures.length} cleanup operations failed during instance disconnect`);\n\t}\n\n\t// Invalidate affected event caches\n\taffectedEvents.forEach(eventKey => eventSubscribersCache.delete(eventKey));\n}\n\n// Zero-allocation hot path for event subscribers\nexport async function getEventSubscribers(eventKey: string): Promise<EntitySubscription[]> {\n\tconst cached = eventSubscribersCache.get(eventKey);\n\tconst now = Date.now();\n\n\tif (cached && now - cached.timestamp < CACHE_TTL) {\n\t\treturn cached.subscribers;\n\t}\n\n\tconst redis = getLibraries().getRedisService();\n\tconst subscriberData = await redis.getSetMembers(kEventSubscribers(eventKey));\n\n\tif (subscriberData.length === 0) {\n\t\tconst empty: EntitySubscription[] = [];\n\t\teventSubscribersCache.set(eventKey, { subscribers: empty, timestamp: now });\n\t\treturn empty;\n\t}\n\n\t// Parse subscriber data and extract unique entities\n\tconst entityMap = new Map<string, EntitySubscription>();\n\tfor (let i = 0; i < subscriberData.length; i++) {\n\t\tconst sub = JSON.parse(subscriberData[i]);\n\t\tconst entityKeyStr = sub.entity;\n\n\t\tif (!entityMap.has(entityKeyStr)) {\n\t\t\tconst colonIndex = entityKeyStr.indexOf(':');\n\t\t\tconst type = entityKeyStr.substring(0, colonIndex);\n\t\t\tconst id = entityKeyStr.substring(colonIndex + 1);\n\n\t\t\tentityMap.set(entityKeyStr, {\n\t\t\t\tid,\n\t\t\t\ttype: type === 'default' ? undefined : (type as AuthEntityType),\n\t\t\t});\n\t\t}\n\t}\n\n\tconst subscribers = Array.from(entityMap.values());\n\teventSubscribersCache.set(eventKey, { subscribers, timestamp: now });\n\treturn subscribers;\n}\n\n// ⚡ Batch variant: Get subscribers for multiple events at once\nexport async function getEventSubscribersBatch(\n\teventKeys: string[]\n): Promise<Map<string, EntitySubscription[]>> {\n\tconst redis = getLibraries().getRedisService();\n\tconst results = new Map<string, EntitySubscription[]>();\n\tconst now = Date.now();\n\n\t// Separate cached vs uncached\n\tconst uncached: string[] = [];\n\tfor (const eventKey of eventKeys) {\n\t\tconst cached = eventSubscribersCache.get(eventKey);\n\t\tif (cached && now - cached.timestamp < CACHE_TTL) {\n\t\t\tresults.set(eventKey, cached.subscribers);\n\t\t} else {\n\t\t\tuncached.push(eventKey);\n\t\t}\n\t}\n\n\t// Fetch uncached in parallel\n\tif (uncached.length > 0) {\n\t\tawait Promise.all(\n\t\t\tuncached.map(async eventKey => {\n\t\t\t\tconst subscriberData = await redis.getSetMembers(kEventSubscribers(eventKey));\n\n\t\t\t\tconst entityMap = new Map<string, EntitySubscription>();\n\t\t\t\tfor (let i = 0; i < subscriberData.length; i++) {\n\t\t\t\t\tconst sub = JSON.parse(subscriberData[i]);\n\t\t\t\t\tconst entityKeyStr = sub.entity;\n\n\t\t\t\t\tif (!entityMap.has(entityKeyStr)) {\n\t\t\t\t\t\tconst colonIndex = entityKeyStr.indexOf(':');\n\t\t\t\t\t\tconst type = entityKeyStr.substring(0, colonIndex);\n\t\t\t\t\t\tconst id = entityKeyStr.substring(colonIndex + 1);\n\n\t\t\t\t\t\tentityMap.set(entityKeyStr, {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\ttype: type === 'default' ? undefined : (type as AuthEntityType),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst subscribers = Array.from(entityMap.values());\n\t\t\t\teventSubscribersCache.set(eventKey, { subscribers, timestamp: now });\n\t\t\t\tresults.set(eventKey, subscribers);\n\t\t\t})\n\t\t);\n\t}\n\n\treturn results;\n}\n\n// Zero-copy filtered query - inline filtering to avoid double allocation\nexport async function getEventSubscribersByType(\n\teventKey: string,\n\tentityType: AuthEntityType\n): Promise<EntitySubscription[]> {\n\tconst cached = eventSubscribersCache.get(eventKey);\n\tconst now = Date.now();\n\n\tif (cached && now - cached.timestamp < CACHE_TTL) {\n\t\t// Fast filter on cached data\n\t\tconst filtered: EntitySubscription[] = [];\n\t\tfor (let i = 0; i < cached.subscribers.length; i++) {\n\t\t\tif (cached.subscribers[i].type === entityType) {\n\t\t\t\tfiltered.push(cached.subscribers[i]);\n\t\t\t}\n\t\t}\n\t\treturn filtered;\n\t}\n\n\t// Fetch and filter in one pass\n\tconst redis = getLibraries().getRedisService();\n\tconst subscriberData = await redis.getSetMembers(kEventSubscribers(eventKey));\n\tconst typePrefix = `${entityType}:`;\n\n\tconst filtered: EntitySubscription[] = [];\n\tconst entityMap = new Map<string, EntitySubscription>();\n\n\tfor (let i = 0; i < subscriberData.length; i++) {\n\t\tconst sub = JSON.parse(subscriberData[i]);\n\t\tconst entityKeyStr = sub.entity;\n\n\t\tif (!entityMap.has(entityKeyStr)) {\n\t\t\tconst colonIndex = entityKeyStr.indexOf(':');\n\t\t\tconst type = entityKeyStr.substring(0, colonIndex);\n\t\t\tconst id = entityKeyStr.substring(colonIndex + 1);\n\n\t\t\tconst entity: EntitySubscription = {\n\t\t\t\tid,\n\t\t\t\ttype: type === 'default' ? undefined : (type as AuthEntityType),\n\t\t\t};\n\n\t\t\tentityMap.set(entityKeyStr, entity);\n\n\t\t\tif (entityKeyStr.startsWith(typePrefix)) {\n\t\t\t\tfiltered.push(entity);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Cache all unique subscribers for future calls\n\tconst all = Array.from(entityMap.values());\n\teventSubscribersCache.set(eventKey, { subscribers: all, timestamp: now });\n\n\treturn filtered;\n}\n\n// ⚡ Get subscriber count (fast, check cache or count)\nexport async function getEventSubscriberCount(eventKey: string): Promise<number> {\n\t// Check cache first\n\tconst cached = eventSubscribersCache.get(eventKey);\n\tif (cached && Date.now() - cached.timestamp < CACHE_TTL) {\n\t\treturn cached.subscribers.length;\n\t}\n\n\t// Otherwise fetch and count\n\tconst redis = getLibraries().getRedisService();\n\tconst members = await redis.getSetMembers(kEventSubscribers(eventKey));\n\treturn members.length;\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import z from 'zod';
2
- import { ClickType } from '../../../utilities/enum';
3
2
  import { DTO } from '../../../utilities/validation';
4
3
  import { BaseSocketEvent } from '../BaseSocketEvent';
4
+ import { NotificationSettings } from '../PushNotificationEvent';
5
5
  export declare const ChatlistMessageSendSocketInputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
6
6
  export declare const ChatlistMessageSendSocketOutputSchema: z.ZodObject<{
7
7
  chatroomId: z.ZodEffects<z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>, import("mongoose").Types.ObjectId, import("mongoose").Types.ObjectId>;
@@ -62,7 +62,7 @@ export declare const ChatlistMessageSendPushOutputSchema: z.ZodObject<{
62
62
  export type ChatlistMessageSendPushOutputDTO = DTO<typeof ChatlistMessageSendPushOutputSchema>;
63
63
  export type ChatlistMessageSendSocketOutputDTO = DTO<typeof ChatlistMessageSendSocketOutputSchema>;
64
64
  export type ChatlistMessageSendSocketInputDTO = DTO<typeof ChatlistMessageSendSocketInputSchema>;
65
- export declare class ChatlistMessageSendSocketEvent extends BaseSocketEvent<typeof ChatlistMessageSendSocketInputSchema, typeof ChatlistMessageSendSocketOutputSchema, typeof ChatlistMessageSendPushOutputSchema> {
65
+ export declare class ChatlistMessageSendSocketEvent extends BaseSocketEvent<typeof ChatlistMessageSendSocketInputSchema, typeof ChatlistMessageSendSocketOutputSchema> {
66
66
  static readonly schemas: {
67
67
  input: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
68
68
  output: z.ZodObject<{
@@ -93,39 +93,8 @@ export declare class ChatlistMessageSendSocketEvent extends BaseSocketEvent<type
93
93
  createdAt: Date;
94
94
  } | undefined;
95
95
  }>;
96
- pushNotificationOutput: z.ZodObject<{
97
- chatroomId: z.ZodEffects<z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>, import("mongoose").Types.ObjectId, import("mongoose").Types.ObjectId>;
98
- lastMessage: z.ZodOptional<z.ZodObject<{
99
- content: z.ZodString | z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
100
- createdAt: z.ZodEffects<z.ZodEffects<z.ZodDate, Date, Date>, Date, Date>;
101
- }, "strip", z.ZodTypeAny, {
102
- content: string;
103
- createdAt: Date;
104
- }, {
105
- content: string;
106
- createdAt: Date;
107
- }>>;
108
- unreadCount: z.ZodNumber;
109
- }, "strip", z.ZodTypeAny, {
110
- unreadCount: number;
111
- chatroomId: import("mongoose").Types.ObjectId;
112
- lastMessage?: {
113
- content: string;
114
- createdAt: Date;
115
- } | undefined;
116
- }, {
117
- unreadCount: number;
118
- chatroomId: import("mongoose").Types.ObjectId;
119
- lastMessage?: {
120
- content: string;
121
- createdAt: Date;
122
- } | undefined;
123
- }>;
124
- };
125
- static readonly notificationSettings: {
126
- isPushNotification: boolean;
127
- isClickable: boolean;
128
- clickType: ClickType;
129
96
  };
130
- constructor(payload: ChatlistMessageSendSocketOutputDTO, pushNotificationPayload?: ChatlistMessageSendPushOutputDTO);
97
+ get notificationSettings(): NotificationSettings | undefined;
98
+ constructor(payload: ChatlistMessageSendSocketOutputDTO);
99
+ protected getIdentifier(): string;
131
100
  }
@@ -24,15 +24,19 @@ class ChatlistMessageSendSocketEvent extends BaseSocketEvent_1.BaseSocketEvent {
24
24
  static schemas = {
25
25
  input: exports.ChatlistMessageSendSocketInputSchema,
26
26
  output: exports.ChatlistMessageSendSocketOutputSchema,
27
- pushNotificationOutput: exports.ChatlistMessageSendPushOutputSchema,
28
27
  };
29
- static notificationSettings = {
30
- isPushNotification: true,
31
- isClickable: true,
32
- clickType: enum_1.ClickType.CLICKABLE_MESSAGE,
33
- };
34
- constructor(payload, pushNotificationPayload) {
35
- super(enum_1.SocketEventType.CHATLIST_MESSAGE_RECEIVED, ChatlistMessageSendSocketEvent.schemas, payload, pushNotificationPayload);
28
+ get notificationSettings() {
29
+ return {
30
+ isPushNotification: true,
31
+ isClickable: true,
32
+ clickType: enum_1.ClickType.CLICKABLE_MESSAGE,
33
+ };
34
+ }
35
+ constructor(payload) {
36
+ super(enum_1.SocketEventType.CHATLIST_MESSAGE_RECEIVED, ChatlistMessageSendSocketEvent.schemas, payload);
37
+ }
38
+ getIdentifier() {
39
+ return 'default';
36
40
  }
37
41
  }
38
42
  exports.ChatlistMessageSendSocketEvent = ChatlistMessageSendSocketEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"chatlist-message-send.socket.event.js","sourceRoot":"/","sources":["libraries/socket/events/chatlist-message-send.socket.event.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAoB;AACpB,kDAAqE;AACrE,8DAAmE;AACnE,wDAAqD;AAExC,QAAA,oCAAoC,GAAG,aAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACpD,QAAA,qCAAqC,GAAG,aAAC,CAAC,MAAM,CAAC;IAC7D,UAAU,EAAE,0BAAa,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC3C,WAAW,EAAE,aAAC;SACZ,MAAM,CAAC;QACP,OAAO,EAAE,0BAAa,CAAC,MAAM,EAAE;QAC/B,SAAS,EAAE,0BAAa,CAAC,MAAM,CAAC,IAAI,EAAE;KACtC,CAAC;SACD,QAAQ,EAAE;IACZ,WAAW,EAAE,0BAAa,CAAC,MAAM,EAAE;CACnC,CAAC,CAAC;AAEU,QAAA,mCAAmC,GAAG,6CAAqC,CAAC;AAMzF,MAAa,8BAA+B,SAAQ,iCAInD;IACA,MAAM,CAAU,OAAO,GAAG;QACzB,KAAK,EAAE,4CAAoC;QAC3C,MAAM,EAAE,6CAAqC;QAC7C,sBAAsB,EAAE,2CAAmC;KAC3D,CAAC;IAEF,MAAM,CAAU,oBAAoB,GAAG;QACtC,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,gBAAS,CAAC,iBAAiB;KACtC,CAAC;IAEF,YACC,OAA2C,EAC3C,uBAA0D;QAE1D,KAAK,CACJ,sBAAe,CAAC,yBAAyB,EACzC,8BAA8B,CAAC,OAAO,EACtC,OAAO,EACP,uBAAuB,CACvB,CAAC;IACH,CAAC;;AA3BF,wEA4BC","sourcesContent":["import z from 'zod';\nimport { SocketEventType, ClickType } from '../../../utilities/enum';\nimport { DTO, ZodValidation } from '../../../utilities/validation';\nimport { BaseSocketEvent } from '../BaseSocketEvent';\n\nexport const ChatlistMessageSendSocketInputSchema = z.object({});\nexport const ChatlistMessageSendSocketOutputSchema = z.object({\n\tchatroomId: ZodValidation.coerce.objectId(),\n\tlastMessage: z\n\t\t.object({\n\t\t\tcontent: ZodValidation.string(),\n\t\t\tcreatedAt: ZodValidation.coerce.date(),\n\t\t})\n\t\t.optional(),\n\tunreadCount: ZodValidation.number(),\n});\n\nexport const ChatlistMessageSendPushOutputSchema = ChatlistMessageSendSocketOutputSchema;\n\nexport type ChatlistMessageSendPushOutputDTO = DTO<typeof ChatlistMessageSendPushOutputSchema>;\nexport type ChatlistMessageSendSocketOutputDTO = DTO<typeof ChatlistMessageSendSocketOutputSchema>;\nexport type ChatlistMessageSendSocketInputDTO = DTO<typeof ChatlistMessageSendSocketInputSchema>;\n\nexport class ChatlistMessageSendSocketEvent extends BaseSocketEvent<\n\ttypeof ChatlistMessageSendSocketInputSchema,\n\ttypeof ChatlistMessageSendSocketOutputSchema,\n\ttypeof ChatlistMessageSendPushOutputSchema\n> {\n\tstatic readonly schemas = {\n\t\tinput: ChatlistMessageSendSocketInputSchema,\n\t\toutput: ChatlistMessageSendSocketOutputSchema,\n\t\tpushNotificationOutput: ChatlistMessageSendPushOutputSchema,\n\t};\n\n\tstatic readonly notificationSettings = {\n\t\tisPushNotification: true,\n\t\tisClickable: true,\n\t\tclickType: ClickType.CLICKABLE_MESSAGE,\n\t};\n\n\tconstructor(\n\t\tpayload: ChatlistMessageSendSocketOutputDTO,\n\t\tpushNotificationPayload?: ChatlistMessageSendPushOutputDTO\n\t) {\n\t\tsuper(\n\t\t\tSocketEventType.CHATLIST_MESSAGE_RECEIVED,\n\t\t\tChatlistMessageSendSocketEvent.schemas,\n\t\t\tpayload,\n\t\t\tpushNotificationPayload\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"chatlist-message-send.socket.event.js","sourceRoot":"/","sources":["libraries/socket/events/chatlist-message-send.socket.event.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAoB;AACpB,kDAAqE;AACrE,8DAAmE;AACnE,wDAAqD;AAIxC,QAAA,oCAAoC,GAAG,aAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACpD,QAAA,qCAAqC,GAAG,aAAC,CAAC,MAAM,CAAC;IAC7D,UAAU,EAAE,0BAAa,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC3C,WAAW,EAAE,aAAC;SACZ,MAAM,CAAC;QACP,OAAO,EAAE,0BAAa,CAAC,MAAM,EAAE;QAC/B,SAAS,EAAE,0BAAa,CAAC,MAAM,CAAC,IAAI,EAAE;KACtC,CAAC;SACD,QAAQ,EAAE;IACZ,WAAW,EAAE,0BAAa,CAAC,MAAM,EAAE;CACnC,CAAC,CAAC;AAEU,QAAA,mCAAmC,GAAG,6CAAqC,CAAC;AAMzF,MAAa,8BAA+B,SAAQ,iCAGnD;IACA,MAAM,CAAU,OAAO,GAAG;QACzB,KAAK,EAAE,4CAAoC;QAC3C,MAAM,EAAE,6CAAqC;KAC7C,CAAC;IAEF,IAAW,oBAAoB;QAC9B,OAAO;YACN,kBAAkB,EAAE,IAAI;YACxB,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,gBAAS,CAAC,iBAAiB;SACtC,CAAC;IACH,CAAC;IAED,YAAY,OAA2C;QAGtD,KAAK,CACJ,sBAAe,CAAC,yBAAyB,EACzC,8BAA8B,CAAC,OAAO,EACtC,OAAO,CACP,CAAC;IACH,CAAC;IAES,aAAa;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;;AA7BF,wEA8BC","sourcesContent":["import z from 'zod';\nimport { SocketEventType, ClickType } from '../../../utilities/enum';\nimport { DTO, ZodValidation } from '../../../utilities/validation';\nimport { BaseSocketEvent } from '../BaseSocketEvent';\n\nimport { NotificationSettings } from '../PushNotificationEvent';\n\nexport const ChatlistMessageSendSocketInputSchema = z.object({});\nexport const ChatlistMessageSendSocketOutputSchema = z.object({\n\tchatroomId: ZodValidation.coerce.objectId(),\n\tlastMessage: z\n\t\t.object({\n\t\t\tcontent: ZodValidation.string(),\n\t\t\tcreatedAt: ZodValidation.coerce.date(),\n\t\t})\n\t\t.optional(),\n\tunreadCount: ZodValidation.number(),\n});\n\nexport const ChatlistMessageSendPushOutputSchema = ChatlistMessageSendSocketOutputSchema;\n\nexport type ChatlistMessageSendPushOutputDTO = DTO<typeof ChatlistMessageSendPushOutputSchema>;\nexport type ChatlistMessageSendSocketOutputDTO = DTO<typeof ChatlistMessageSendSocketOutputSchema>;\nexport type ChatlistMessageSendSocketInputDTO = DTO<typeof ChatlistMessageSendSocketInputSchema>;\n\nexport class ChatlistMessageSendSocketEvent extends BaseSocketEvent<\n\ttypeof ChatlistMessageSendSocketInputSchema,\n\ttypeof ChatlistMessageSendSocketOutputSchema\n> {\n\tstatic readonly schemas = {\n\t\tinput: ChatlistMessageSendSocketInputSchema,\n\t\toutput: ChatlistMessageSendSocketOutputSchema,\n\t};\n\n\tpublic get notificationSettings(): NotificationSettings | undefined {\n\t\treturn {\n\t\t\tisPushNotification: true,\n\t\t\tisClickable: true,\n\t\t\tclickType: ClickType.CLICKABLE_MESSAGE,\n\t\t};\n\t}\n\n\tconstructor(payload: ChatlistMessageSendSocketOutputDTO) {\n\n\n\t\tsuper(\n\t\t\tSocketEventType.CHATLIST_MESSAGE_RECEIVED,\n\t\t\tChatlistMessageSendSocketEvent.schemas,\n\t\t\tpayload,\n\t\t);\n\t}\n\n\tprotected getIdentifier(): string {\n\t\treturn 'default';\n\t}\n}\n"]}
@@ -2,6 +2,7 @@ import z from 'zod';
2
2
  import { MediaType, UserRef } from '../../../utilities/enum';
3
3
  import { DTO } from '../../../utilities/validation';
4
4
  import { BaseSocketEvent } from '../BaseSocketEvent';
5
+ import { NotificationSettings } from '../PushNotificationEvent';
5
6
  export declare const ChatroomMessageSendSocketInputSchema: z.ZodObject<{
6
7
  chatroomId: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>;
7
8
  }, "strip", z.ZodTypeAny, {
@@ -102,7 +103,7 @@ export declare const ChatroomMessageSendOutputSchema: z.ZodObject<{
102
103
  }>;
103
104
  export type ChatroomMessageSendSocketOutputDTO = DTO<typeof ChatroomMessageSendOutputSchema>;
104
105
  export type ChatroomMessageSendSocketInputDTO = DTO<typeof ChatroomMessageSendSocketInputSchema>;
105
- export declare class ChatroomMessageSendSocketEvent extends BaseSocketEvent<typeof ChatroomMessageSendSocketInputSchema, typeof ChatroomMessageSendOutputSchema> {
106
+ export declare class ChatroomMessageSendSocketEvent extends BaseSocketEvent<typeof ChatroomMessageSendSocketInputSchema, typeof ChatroomMessageSendOutputSchema, typeof ChatroomMessageSendOutputSchema> {
106
107
  static readonly schemas: {
107
108
  input: z.ZodObject<{
108
109
  chatroomId: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("mongoose").Types.ObjectId, string>, z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>]>;
@@ -202,7 +203,100 @@ export declare class ChatroomMessageSendSocketEvent extends BaseSocketEvent<type
202
203
  content?: string | undefined;
203
204
  chatroomId?: import("mongoose").Types.ObjectId | undefined;
204
205
  }>;
206
+ pushNotificationOutput: z.ZodObject<{
207
+ _id: z.ZodEffects<z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>, import("mongoose").Types.ObjectId, import("mongoose").Types.ObjectId>;
208
+ senderId: z.ZodEffects<z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>, import("mongoose").Types.ObjectId, import("mongoose").Types.ObjectId>;
209
+ senderType: z.ZodNativeEnum<typeof UserRef>;
210
+ sender: z.ZodObject<{
211
+ id: z.ZodEffects<z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>, import("mongoose").Types.ObjectId, import("mongoose").Types.ObjectId>;
212
+ type: z.ZodNativeEnum<typeof UserRef>;
213
+ }, "strip", z.ZodTypeAny, {
214
+ type: UserRef;
215
+ id: import("mongoose").Types.ObjectId;
216
+ }, {
217
+ type: UserRef;
218
+ id: import("mongoose").Types.ObjectId;
219
+ }>;
220
+ content: z.ZodOptional<z.ZodString> | z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>;
221
+ media: z.ZodArray<z.ZodObject<{
222
+ mimeType: z.ZodString | z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
223
+ mediaType: z.ZodNativeEnum<typeof MediaType>;
224
+ mediaUrl: z.ZodString | z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
225
+ thumbnailUrl: z.ZodOptional<z.ZodString> | z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>;
226
+ name: z.ZodOptional<z.ZodString> | z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>;
227
+ }, "strip", z.ZodTypeAny, {
228
+ mediaType: MediaType;
229
+ mediaUrl: string;
230
+ mimeType: string;
231
+ name?: string | undefined;
232
+ thumbnailUrl?: string | undefined;
233
+ }, {
234
+ mediaType: MediaType;
235
+ mediaUrl: string;
236
+ mimeType: string;
237
+ name?: string | undefined;
238
+ thumbnailUrl?: string | undefined;
239
+ }>, "many">;
240
+ location: z.ZodOptional<z.ZodObject<{
241
+ longitude: z.ZodOptional<z.ZodNumber>;
242
+ latitude: z.ZodOptional<z.ZodNumber>;
243
+ }, "strip", z.ZodTypeAny, {
244
+ latitude?: number | undefined;
245
+ longitude?: number | undefined;
246
+ }, {
247
+ latitude?: number | undefined;
248
+ longitude?: number | undefined;
249
+ }>>;
250
+ chatroomId: z.ZodOptional<z.ZodEffects<z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>, import("mongoose").Types.ObjectId, import("mongoose").Types.ObjectId>>;
251
+ createdAt: z.ZodEffects<z.ZodEffects<z.ZodDate, Date, Date>, Date, Date>;
252
+ }, "strip", z.ZodTypeAny, {
253
+ media: {
254
+ mediaType: MediaType;
255
+ mediaUrl: string;
256
+ mimeType: string;
257
+ name?: string | undefined;
258
+ thumbnailUrl?: string | undefined;
259
+ }[];
260
+ _id: import("mongoose").Types.ObjectId;
261
+ createdAt: Date;
262
+ sender: {
263
+ type: UserRef;
264
+ id: import("mongoose").Types.ObjectId;
265
+ };
266
+ senderType: UserRef;
267
+ senderId: import("mongoose").Types.ObjectId;
268
+ location?: {
269
+ latitude?: number | undefined;
270
+ longitude?: number | undefined;
271
+ } | undefined;
272
+ content?: string | undefined;
273
+ chatroomId?: import("mongoose").Types.ObjectId | undefined;
274
+ }, {
275
+ media: {
276
+ mediaType: MediaType;
277
+ mediaUrl: string;
278
+ mimeType: string;
279
+ name?: string | undefined;
280
+ thumbnailUrl?: string | undefined;
281
+ }[];
282
+ _id: import("mongoose").Types.ObjectId;
283
+ createdAt: Date;
284
+ sender: {
285
+ type: UserRef;
286
+ id: import("mongoose").Types.ObjectId;
287
+ };
288
+ senderType: UserRef;
289
+ senderId: import("mongoose").Types.ObjectId;
290
+ location?: {
291
+ latitude?: number | undefined;
292
+ longitude?: number | undefined;
293
+ } | undefined;
294
+ content?: string | undefined;
295
+ chatroomId?: import("mongoose").Types.ObjectId | undefined;
296
+ }>;
205
297
  };
298
+ get notificationSettings(): NotificationSettings | undefined;
206
299
  constructor(payload: ChatroomMessageSendSocketOutputDTO);
207
300
  static identifier(input: z.infer<typeof ChatroomMessageSendSocketInputSchema>): string;
301
+ protected getIdentifier(): string;
208
302
  }
@@ -40,13 +40,34 @@ class ChatroomMessageSendSocketEvent extends BaseSocketEvent_1.BaseSocketEvent {
40
40
  static schemas = {
41
41
  input: exports.ChatroomMessageSendSocketInputSchema,
42
42
  output: exports.ChatroomMessageSendOutputSchema,
43
+ pushNotificationOutput: exports.ChatroomMessageSendOutputSchema,
43
44
  };
45
+ get notificationSettings() {
46
+ return {
47
+ isPushNotification: true,
48
+ isClickable: true,
49
+ clickType: enum_1.ClickType.CLICKABLE_MESSAGE,
50
+ };
51
+ }
44
52
  constructor(payload) {
45
- super(enum_1.SocketEventType.CHATROOM_MESSAGE_SEND, ChatroomMessageSendSocketEvent.schemas, payload);
53
+ const pushPayload = {
54
+ _id: payload._id,
55
+ sender: payload.sender,
56
+ content: payload.content,
57
+ createdAt: payload.createdAt,
58
+ senderId: payload.senderId,
59
+ senderType: payload.senderType,
60
+ media: [],
61
+ chatroomId: payload.chatroomId,
62
+ };
63
+ super(enum_1.SocketEventType.CHATROOM_MESSAGE_SEND, ChatroomMessageSendSocketEvent.schemas, payload, pushPayload);
46
64
  }
47
65
  static identifier(input) {
48
66
  return input.chatroomId.toString();
49
67
  }
68
+ getIdentifier() {
69
+ return this.data.chatroomId?.toString() ?? 'default';
70
+ }
50
71
  }
51
72
  exports.ChatroomMessageSendSocketEvent = ChatroomMessageSendSocketEvent;
52
73
  //# sourceMappingURL=chatroom-message-send.socket.event.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chatroom-message-send.socket.event.js","sourceRoot":"/","sources":["libraries/socket/events/chatroom-message-send.socket.event.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAoB;AACpB,kDAA8E;AAC9E,8DAA6E;AAC7E,wDAAqD;AAIxC,QAAA,oCAAoC,GAAG,aAAC,CAAC,MAAM,CAAC;IAC5D,UAAU,EAAE,qBAAQ;CACpB,CAAC,CAAC;AAEU,QAAA,+BAA+B,GAAG,aAAC,CAAC,MAAM,CAAC;IACvD,GAAG,EAAE,0BAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IACzC,QAAQ,EAAE,0BAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;IACnD,UAAU,EAAE,0BAAa,CAAC,QAAQ,CAAC,cAAO,EAAE,YAAY,CAAC;IACzD,MAAM,EAAE,aAAC,CAAC,MAAM,CAAC;QAChB,EAAE,EAAE,0BAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC9C,IAAI,EAAE,0BAAa,CAAC,QAAQ,CAAC,cAAO,EAAE,aAAa,CAAC;KACpD,CAAC;IACF,OAAO,EAAE,0BAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;IACnD,KAAK,EAAE,aAAC,CAAC,KAAK,CACb,aAAC,CAAC,MAAM,CAAC;QACR,QAAQ,EAAE,0BAAa,CAAC,MAAM,CAAC,UAAU,CAAC;QAC1C,SAAS,EAAE,0BAAa,CAAC,QAAQ,CAAC,gBAAS,EAAE,WAAW,CAAC;QACzD,QAAQ,EAAE,0BAAa,CAAC,MAAM,CAAC,KAAK,CAAC;QACrC,YAAY,EAAE,0BAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;QAC7D,IAAI,EAAE,0BAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;KAC7C,CAAC,CACF;IACD,QAAQ,EAAE,aAAC;SACT,MAAM,CAAC;QACP,SAAS,EAAE,0BAAa,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;QAC9D,QAAQ,EAAE,0BAAa,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;KAC5D,CAAC;SACD,QAAQ,EAAE;IACZ,UAAU,EAAE,0BAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;IAClE,SAAS,EAAE,0BAAa,CAAC,MAAM,CAAC,IAAI,EAAE;CACtC,CAAC,CAAC;AAKH,MAAa,8BAA+B,SAAQ,iCAGnD;IACA,MAAM,CAAU,OAAO,GAAG;QACzB,KAAK,EAAE,4CAAoC;QAC3C,MAAM,EAAE,uCAA+B;KACvC,CAAC;IAEF,YAAY,OAA2C;QACtD,KAAK,CAAC,sBAAe,CAAC,qBAAqB,EAAE,8BAA8B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,KAA2D;QAC5E,OAAO,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC;;AAfF,wEAgBC","sourcesContent":["import z from 'zod';\nimport { MediaType, SocketEventType, UserRef } from '../../../utilities/enum';\nimport { DTO, IdSchema, ZodValidation } from '../../../utilities/validation';\nimport { BaseSocketEvent } from '../BaseSocketEvent';\nimport { NotificationSocketEvent } from './notification.socket.event';\nimport { Chatroom } from '../../mongo/models';\n\nexport const ChatroomMessageSendSocketInputSchema = z.object({\n\tchatroomId: IdSchema,\n});\n\nexport const ChatroomMessageSendOutputSchema = z.object({\n\t_id: ZodValidation.coerce.objectId('_id'),\n\tsenderId: ZodValidation.coerce.objectId('senderId'), // DEPRECATED\n\tsenderType: ZodValidation.enumType(UserRef, 'senderType'), // DEPRECATED\n\tsender: z.object({\n\t\tid: ZodValidation.coerce.objectId('sender.id'),\n\t\ttype: ZodValidation.enumType(UserRef, 'sender.type'),\n\t}),\n\tcontent: ZodValidation.string('content').optional(),\n\tmedia: z.array(\n\t\tz.object({\n\t\t\tmimeType: ZodValidation.string('mimeType'),\n\t\t\tmediaType: ZodValidation.enumType(MediaType, 'mediaType'),\n\t\t\tmediaUrl: ZodValidation.string('url'),\n\t\t\tthumbnailUrl: ZodValidation.string('thumbnailUrl').optional(),\n\t\t\tname: ZodValidation.string('name').optional(),\n\t\t})\n\t),\n\tlocation: z\n\t\t.object({\n\t\t\tlongitude: ZodValidation.coerce.number('longitude').optional(),\n\t\t\tlatitude: ZodValidation.coerce.number('latitude').optional(),\n\t\t})\n\t\t.optional(),\n\tchatroomId: ZodValidation.coerce.objectId('chatroomId').optional(),\n\tcreatedAt: ZodValidation.coerce.date(),\n});\n\nexport type ChatroomMessageSendSocketOutputDTO = DTO<typeof ChatroomMessageSendOutputSchema>;\nexport type ChatroomMessageSendSocketInputDTO = DTO<typeof ChatroomMessageSendSocketInputSchema>;\n\nexport class ChatroomMessageSendSocketEvent extends BaseSocketEvent<\n\ttypeof ChatroomMessageSendSocketInputSchema,\n\ttypeof ChatroomMessageSendOutputSchema\n> {\n\tstatic readonly schemas = {\n\t\tinput: ChatroomMessageSendSocketInputSchema,\n\t\toutput: ChatroomMessageSendOutputSchema,\n\t};\n\n\tconstructor(payload: ChatroomMessageSendSocketOutputDTO) {\n\t\tsuper(SocketEventType.CHATROOM_MESSAGE_SEND, ChatroomMessageSendSocketEvent.schemas, payload);\n\t}\n\n\tstatic identifier(input: z.infer<typeof ChatroomMessageSendSocketInputSchema>): string {\n\t\treturn input.chatroomId.toString();\n\t}\n}\n"]}
1
+ {"version":3,"file":"chatroom-message-send.socket.event.js","sourceRoot":"/","sources":["libraries/socket/events/chatroom-message-send.socket.event.ts"],"names":[],"mappings":"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","sourcesContent":["import z from 'zod';\nimport { MediaType, SocketEventType, UserRef, ClickType } from '../../../utilities/enum';\nimport { DTO, IdSchema, ZodValidation } from '../../../utilities/validation';\nimport { BaseSocketEvent } from '../BaseSocketEvent';\nimport { NotificationSettings } from '../PushNotificationEvent';\nimport { Chatroom } from '../../mongo/models';\n\nexport const ChatroomMessageSendSocketInputSchema = z.object({\n\tchatroomId: IdSchema,\n});\n\nexport const ChatroomMessageSendOutputSchema = z.object({\n\t_id: ZodValidation.coerce.objectId('_id'),\n\tsenderId: ZodValidation.coerce.objectId('senderId'), // DEPRECATED\n\tsenderType: ZodValidation.enumType(UserRef, 'senderType'), // DEPRECATED\n\tsender: z.object({\n\t\tid: ZodValidation.coerce.objectId('sender.id'),\n\t\ttype: ZodValidation.enumType(UserRef, 'sender.type'),\n\t}),\n\tcontent: ZodValidation.string('content').optional(),\n\tmedia: z.array(\n\t\tz.object({\n\t\t\tmimeType: ZodValidation.string('mimeType'),\n\t\t\tmediaType: ZodValidation.enumType(MediaType, 'mediaType'),\n\t\t\tmediaUrl: ZodValidation.string('url'),\n\t\t\tthumbnailUrl: ZodValidation.string('thumbnailUrl').optional(),\n\t\t\tname: ZodValidation.string('name').optional(),\n\t\t})\n\t),\n\tlocation: z\n\t\t.object({\n\t\t\tlongitude: ZodValidation.coerce.number('longitude').optional(),\n\t\t\tlatitude: ZodValidation.coerce.number('latitude').optional(),\n\t\t})\n\t\t.optional(),\n\tchatroomId: ZodValidation.coerce.objectId('chatroomId').optional(),\n\tcreatedAt: ZodValidation.coerce.date(),\n});\n\nexport type ChatroomMessageSendSocketOutputDTO = DTO<typeof ChatroomMessageSendOutputSchema>;\nexport type ChatroomMessageSendSocketInputDTO = DTO<typeof ChatroomMessageSendSocketInputSchema>;\n\nexport class ChatroomMessageSendSocketEvent extends BaseSocketEvent<\n\ttypeof ChatroomMessageSendSocketInputSchema,\n\ttypeof ChatroomMessageSendOutputSchema,\n\ttypeof ChatroomMessageSendOutputSchema\n> {\n\tstatic readonly schemas = {\n\t\tinput: ChatroomMessageSendSocketInputSchema,\n\t\toutput: ChatroomMessageSendOutputSchema,\n\t\tpushNotificationOutput: ChatroomMessageSendOutputSchema,\n\t};\n\n\tpublic get notificationSettings(): NotificationSettings | undefined {\n\t\treturn {\n\t\t\tisPushNotification: true,\n\t\t\tisClickable: true,\n\t\t\tclickType: ClickType.CLICKABLE_MESSAGE,\n\t\t};\n\t}\n\n\tconstructor(payload: ChatroomMessageSendSocketOutputDTO) {\n\t\t// Extract optimized push notification payload - only essential fields\n\t\tconst pushPayload: ChatroomMessageSendSocketOutputDTO = {\n\t\t\t_id: payload._id,\n\t\t\tsender: payload.sender,\n\t\t\tcontent: payload.content,\n\t\t\tcreatedAt: payload.createdAt,\n\t\t\t// Exclude heavy fields like media, location for push notifications\n\t\t\tsenderId: payload.senderId,\n\t\t\tsenderType: payload.senderType,\n\t\t\tmedia: [],\n\t\t\tchatroomId: payload.chatroomId,\n\t\t};\n\n\t\tsuper(SocketEventType.CHATROOM_MESSAGE_SEND, ChatroomMessageSendSocketEvent.schemas, payload, pushPayload);\n\t}\n\n\tstatic identifier(input: z.infer<typeof ChatroomMessageSendSocketInputSchema>): string {\n\t\treturn input.chatroomId.toString();\n\t}\n\n\tprotected getIdentifier(): string {\n\t\treturn this.data.chatroomId?.toString() ?? 'default';\n\t}\n}\n"]}
@@ -22,4 +22,5 @@ export declare class NotificationSocketEvent extends BaseSocketEvent<typeof Noti
22
22
  }>;
23
23
  };
24
24
  constructor(payload: DTO<typeof NotificationSocketOutputSchema>);
25
+ protected getIdentifier(): string;
25
26
  }
@@ -17,6 +17,9 @@ class NotificationSocketEvent extends BaseSocketEvent_1.BaseSocketEvent {
17
17
  constructor(payload) {
18
18
  super(enum_1.SocketEventType.NOTIFICATION, NotificationSocketEvent.schemas, payload);
19
19
  }
20
+ getIdentifier() {
21
+ return 'default';
22
+ }
20
23
  }
21
24
  exports.NotificationSocketEvent = NotificationSocketEvent;
22
25
  //# sourceMappingURL=notification.socket.event.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notification.socket.event.js","sourceRoot":"/","sources":["libraries/socket/events/notification.socket.event.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAqD;AACrD,8CAAoB;AACpB,8DAAmE;AACnE,kDAAqF;AAExE,QAAA,6BAA6B,GAAG,aAAC,CAAC,SAAS,EAAE,CAAC;AAC9C,QAAA,8BAA8B,GAAG,aAAC,CAAC,MAAM,CAAC;IACtD,OAAO,EAAE,0BAAa,CAAC,MAAM,EAAE;CAC/B,CAAC,CAAC;AAIH,MAAa,uBAAwB,SAAQ,iCAG5C;IACA,MAAM,CAAU,OAAO,GAAG,EAAE,KAAK,EAAE,qCAA6B,EAAE,MAAM,EAAE,sCAA8B,EAAE,CAAC;IAE3G,YAAY,OAAmD;QAC9D,KAAK,CAAC,sBAAe,CAAC,YAAY,EAAE,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/E,CAAC;;AARF,0DASC","sourcesContent":["import { BaseSocketEvent } from '../BaseSocketEvent';\nimport z from 'zod';\nimport { DTO, ZodValidation } from '../../../utilities/validation';\nimport { PushNotificationEventType, SocketEventType } from '../../../utilities/enum';\n\nexport const NotificationSocketInputSchema = z.undefined();\nexport const NotificationSocketOutputSchema = z.object({\n\tmessage: ZodValidation.string(),\n});\n\nexport type NotificationSocketOutputDTO = DTO<typeof NotificationSocketOutputSchema>;\n\nexport class NotificationSocketEvent extends BaseSocketEvent<\n\ttypeof NotificationSocketInputSchema,\n\ttypeof NotificationSocketOutputSchema\n> {\n\tstatic readonly schemas = { input: NotificationSocketInputSchema, output: NotificationSocketOutputSchema };\n\n\tconstructor(payload: DTO<typeof NotificationSocketOutputSchema>) {\n\t\tsuper(SocketEventType.NOTIFICATION, NotificationSocketEvent.schemas, payload);\n\t}\n}\n"]}
1
+ {"version":3,"file":"notification.socket.event.js","sourceRoot":"/","sources":["libraries/socket/events/notification.socket.event.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAqD;AACrD,8CAAoB;AACpB,8DAAmE;AACnE,kDAAqF;AAExE,QAAA,6BAA6B,GAAG,aAAC,CAAC,SAAS,EAAE,CAAC;AAC9C,QAAA,8BAA8B,GAAG,aAAC,CAAC,MAAM,CAAC;IACtD,OAAO,EAAE,0BAAa,CAAC,MAAM,EAAE;CAC/B,CAAC,CAAC;AAIH,MAAa,uBAAwB,SAAQ,iCAG5C;IACA,MAAM,CAAU,OAAO,GAAG,EAAE,KAAK,EAAE,qCAA6B,EAAE,MAAM,EAAE,sCAA8B,EAAE,CAAC;IAE3G,YAAY,OAAmD;QAC9D,KAAK,CAAC,sBAAe,CAAC,YAAY,EAAE,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/E,CAAC;IAES,aAAa;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;;AAZF,0DAaC","sourcesContent":["import { BaseSocketEvent } from '../BaseSocketEvent';\nimport z from 'zod';\nimport { DTO, ZodValidation } from '../../../utilities/validation';\nimport { PushNotificationEventType, SocketEventType } from '../../../utilities/enum';\n\nexport const NotificationSocketInputSchema = z.undefined();\nexport const NotificationSocketOutputSchema = z.object({\n\tmessage: ZodValidation.string(),\n});\n\nexport type NotificationSocketOutputDTO = DTO<typeof NotificationSocketOutputSchema>;\n\nexport class NotificationSocketEvent extends BaseSocketEvent<\n\ttypeof NotificationSocketInputSchema,\n\ttypeof NotificationSocketOutputSchema\n> {\n\tstatic readonly schemas = { input: NotificationSocketInputSchema, output: NotificationSocketOutputSchema };\n\n\tconstructor(payload: DTO<typeof NotificationSocketOutputSchema>) {\n\t\tsuper(SocketEventType.NOTIFICATION, NotificationSocketEvent.schemas, payload);\n\t}\n\n\tprotected getIdentifier(): string {\n\t\treturn 'default';\n\t}\n}\n"]}
@@ -9,4 +9,5 @@ export declare class RiderConnectSocketEvent extends BaseSocketEvent<typeof Ride
9
9
  output: z.ZodAny;
10
10
  };
11
11
  constructor(payload: RiderConnectionSocketOutputDTO);
12
+ protected getIdentifier(): string;
12
13
  }
@@ -14,6 +14,9 @@ class RiderConnectSocketEvent extends BaseSocketEvent_1.BaseSocketEvent {
14
14
  constructor(payload) {
15
15
  super(enum_1.SocketEventType.RIDER_CONNECT, RiderConnectSocketEvent.schemas, payload);
16
16
  }
17
+ getIdentifier() {
18
+ return 'default';
19
+ }
17
20
  }
18
21
  exports.RiderConnectSocketEvent = RiderConnectSocketEvent;
19
22
  //# sourceMappingURL=rider-connect.socket.event.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rider-connect.socket.event.js","sourceRoot":"/","sources":["libraries/socket/events/rider-connect.socket.event.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,wDAAqD;AACrD,kDAA0D;AAE7C,QAAA,gCAAgC,GAAG,OAAC,CAAC,SAAS,EAAE,CAAC;AACjD,QAAA,iCAAiC,GAAG,OAAC,CAAC,GAAG,EAAE,CAAC;AAIzD,MAAa,uBAAwB,SAAQ,iCAG5C;IACA,MAAM,CAAU,OAAO,GAAG;QACzB,KAAK,EAAE,wCAAgC;QACvC,MAAM,EAAE,yCAAiC;KACzC,CAAC;IAEF,YAAY,OAAuC;QAClD,KAAK,CAAC,sBAAe,CAAC,aAAa,EAAE,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;;AAXF,0DAYC","sourcesContent":["import { z } from 'zod';\nimport { BaseSocketEvent } from '../BaseSocketEvent';\nimport { SocketEventType } from '../../../utilities/enum';\n\nexport const RiderConnectionSocketInputSchema = z.undefined();\nexport const RiderConnectionSocketOutputSchema = z.any();\n\nexport type RiderConnectionSocketOutputDTO = void;\n\nexport class RiderConnectSocketEvent extends BaseSocketEvent<\n\ttypeof RiderConnectionSocketInputSchema,\n\ttypeof RiderConnectionSocketOutputSchema\n> {\n\tstatic readonly schemas = {\n\t\tinput: RiderConnectionSocketInputSchema,\n\t\toutput: RiderConnectionSocketOutputSchema,\n\t};\n\n\tconstructor(payload: RiderConnectionSocketOutputDTO) {\n\t\tsuper(SocketEventType.RIDER_CONNECT, RiderConnectSocketEvent.schemas, payload);\n\t}\n}\n"]}
1
+ {"version":3,"file":"rider-connect.socket.event.js","sourceRoot":"/","sources":["libraries/socket/events/rider-connect.socket.event.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,wDAAqD;AACrD,kDAA0D;AAE7C,QAAA,gCAAgC,GAAG,OAAC,CAAC,SAAS,EAAE,CAAC;AACjD,QAAA,iCAAiC,GAAG,OAAC,CAAC,GAAG,EAAE,CAAC;AAIzD,MAAa,uBAAwB,SAAQ,iCAG5C;IACA,MAAM,CAAU,OAAO,GAAG;QACzB,KAAK,EAAE,wCAAgC;QACvC,MAAM,EAAE,yCAAiC;KACzC,CAAC;IAEF,YAAY,OAAuC;QAClD,KAAK,CAAC,sBAAe,CAAC,aAAa,EAAE,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAES,aAAa;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;;AAfF,0DAgBC","sourcesContent":["import { z } from 'zod';\nimport { BaseSocketEvent } from '../BaseSocketEvent';\nimport { SocketEventType } from '../../../utilities/enum';\n\nexport const RiderConnectionSocketInputSchema = z.undefined();\nexport const RiderConnectionSocketOutputSchema = z.any();\n\nexport type RiderConnectionSocketOutputDTO = void;\n\nexport class RiderConnectSocketEvent extends BaseSocketEvent<\n\ttypeof RiderConnectionSocketInputSchema,\n\ttypeof RiderConnectionSocketOutputSchema\n> {\n\tstatic readonly schemas = {\n\t\tinput: RiderConnectionSocketInputSchema,\n\t\toutput: RiderConnectionSocketOutputSchema,\n\t};\n\n\tconstructor(payload: RiderConnectionSocketOutputDTO) {\n\t\tsuper(SocketEventType.RIDER_CONNECT, RiderConnectSocketEvent.schemas, payload);\n\t}\n\n\tprotected getIdentifier(): string {\n\t\treturn 'default';\n\t}\n}\n"]}
@@ -66,4 +66,5 @@ export declare class RiderLocationUpdateSocketEvent extends BaseSocketEvent<type
66
66
  };
67
67
  constructor(payload: RiderLocationUpdateSocketOutputDTO);
68
68
  static identifier(input: z.infer<typeof RiderLocationUpdateSocketInputSchema>): string;
69
+ protected getIdentifier(): string;
69
70
  }
@@ -30,6 +30,9 @@ class RiderLocationUpdateSocketEvent extends BaseSocketEvent_1.BaseSocketEvent {
30
30
  static identifier(input) {
31
31
  return input.riderId.toString();
32
32
  }
33
+ getIdentifier() {
34
+ return this.data.riderId.toString();
35
+ }
33
36
  }
34
37
  exports.RiderLocationUpdateSocketEvent = RiderLocationUpdateSocketEvent;
35
38
  //# sourceMappingURL=rider-location-update.socket.event.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rider-location-update.socket.event.js","sourceRoot":"/","sources":["libraries/socket/events/rider-location-update.socket.event.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAoB;AACpB,wDAAqD;AACrD,8DAA6E;AAC7E,kDAA0D;AAE7C,QAAA,oCAAoC,GAAG,aAAC,CAAC,MAAM,CAAC;IAC5D,OAAO,EAAE,0BAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC1C,OAAO,EAAE,0BAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAEU,QAAA,qCAAqC,GAAG,aAAC,CAAC,MAAM,CAAC;IAC7D,GAAG,EAAE,qBAAQ;IACb,OAAO,EAAE,0BAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC1C,QAAQ,EAAE,0BAAa,CAAC,MAAM,CAAC,UAAU,CAAC;IAC1C,SAAS,EAAE,0BAAa,CAAC,MAAM,CAAC,WAAW,CAAC;IAC5C,SAAS,EAAE,0BAAa,CAAC,IAAI,CAAC,WAAW,CAAC;CAC1C,CAAC,CAAC;AAKH,MAAa,8BAA+B,SAAQ,iCAGnD;IACA,MAAM,CAAU,OAAO,GAAG;QACzB,KAAK,EAAE,4CAAoC;QAC3C,MAAM,EAAE,6CAAqC;KAC7C,CAAC;IAEF,YAAY,OAA2C;QACtD,KAAK,CAAC,sBAAe,CAAC,qBAAqB,EAAE,8BAA8B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,KAA2D;QAC5E,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;;AAfF,wEAgBC","sourcesContent":["import z from 'zod';\nimport { BaseSocketEvent } from '../BaseSocketEvent';\nimport { DTO, IdSchema, ZodValidation } from '../../../utilities/validation';\nimport { SocketEventType } from '../../../utilities/enum';\n\nexport const RiderLocationUpdateSocketInputSchema = z.object({\n\triderId: ZodValidation.objectId('riderId'),\n\torderId: ZodValidation.objectId('orderId').optional(),\n});\n\nexport const RiderLocationUpdateSocketOutputSchema = z.object({\n\t_id: IdSchema,\n\triderId: ZodValidation.objectId('riderId'),\n\tlatitude: ZodValidation.number('latitude'),\n\tlongitude: ZodValidation.number('longitude'),\n\tupdatedAt: ZodValidation.date('updatedAt'),\n});\n\nexport type RiderLocationUpdateSocketInputDTO = DTO<typeof RiderLocationUpdateSocketInputSchema>;\nexport type RiderLocationUpdateSocketOutputDTO = DTO<typeof RiderLocationUpdateSocketOutputSchema>;\n\nexport class RiderLocationUpdateSocketEvent extends BaseSocketEvent<\n\ttypeof RiderLocationUpdateSocketInputSchema,\n\ttypeof RiderLocationUpdateSocketOutputSchema\n> {\n\tstatic readonly schemas = {\n\t\tinput: RiderLocationUpdateSocketInputSchema,\n\t\toutput: RiderLocationUpdateSocketOutputSchema,\n\t};\n\n\tconstructor(payload: RiderLocationUpdateSocketOutputDTO) {\n\t\tsuper(SocketEventType.RIDER_LOCATION_UPDATE, RiderLocationUpdateSocketEvent.schemas, payload);\n\t}\n\n\tstatic identifier(input: z.infer<typeof RiderLocationUpdateSocketInputSchema>): string {\n\t\treturn input.riderId.toString();\n\t}\n}\n"]}
1
+ {"version":3,"file":"rider-location-update.socket.event.js","sourceRoot":"/","sources":["libraries/socket/events/rider-location-update.socket.event.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAoB;AACpB,wDAAqD;AACrD,8DAA6E;AAC7E,kDAA0D;AAE7C,QAAA,oCAAoC,GAAG,aAAC,CAAC,MAAM,CAAC;IAC5D,OAAO,EAAE,0BAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC1C,OAAO,EAAE,0BAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAEU,QAAA,qCAAqC,GAAG,aAAC,CAAC,MAAM,CAAC;IAC7D,GAAG,EAAE,qBAAQ;IACb,OAAO,EAAE,0BAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC1C,QAAQ,EAAE,0BAAa,CAAC,MAAM,CAAC,UAAU,CAAC;IAC1C,SAAS,EAAE,0BAAa,CAAC,MAAM,CAAC,WAAW,CAAC;IAC5C,SAAS,EAAE,0BAAa,CAAC,IAAI,CAAC,WAAW,CAAC;CAC1C,CAAC,CAAC;AAKH,MAAa,8BAA+B,SAAQ,iCAGnD;IACA,MAAM,CAAU,OAAO,GAAG;QACzB,KAAK,EAAE,4CAAoC;QAC3C,MAAM,EAAE,6CAAqC;KAC7C,CAAC;IAEF,YAAY,OAA2C;QACtD,KAAK,CAAC,sBAAe,CAAC,qBAAqB,EAAE,8BAA8B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,KAA2D;QAC5E,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAES,aAAa;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACrC,CAAC;;AAnBF,wEAoBC","sourcesContent":["import z from 'zod';\nimport { BaseSocketEvent } from '../BaseSocketEvent';\nimport { DTO, IdSchema, ZodValidation } from '../../../utilities/validation';\nimport { SocketEventType } from '../../../utilities/enum';\n\nexport const RiderLocationUpdateSocketInputSchema = z.object({\n\triderId: ZodValidation.objectId('riderId'),\n\torderId: ZodValidation.objectId('orderId').optional(),\n});\n\nexport const RiderLocationUpdateSocketOutputSchema = z.object({\n\t_id: IdSchema,\n\triderId: ZodValidation.objectId('riderId'),\n\tlatitude: ZodValidation.number('latitude'),\n\tlongitude: ZodValidation.number('longitude'),\n\tupdatedAt: ZodValidation.date('updatedAt'),\n});\n\nexport type RiderLocationUpdateSocketInputDTO = DTO<typeof RiderLocationUpdateSocketInputSchema>;\nexport type RiderLocationUpdateSocketOutputDTO = DTO<typeof RiderLocationUpdateSocketOutputSchema>;\n\nexport class RiderLocationUpdateSocketEvent extends BaseSocketEvent<\n\ttypeof RiderLocationUpdateSocketInputSchema,\n\ttypeof RiderLocationUpdateSocketOutputSchema\n> {\n\tstatic readonly schemas = {\n\t\tinput: RiderLocationUpdateSocketInputSchema,\n\t\toutput: RiderLocationUpdateSocketOutputSchema,\n\t};\n\n\tconstructor(payload: RiderLocationUpdateSocketOutputDTO) {\n\t\tsuper(SocketEventType.RIDER_LOCATION_UPDATE, RiderLocationUpdateSocketEvent.schemas, payload);\n\t}\n\n\tstatic identifier(input: z.infer<typeof RiderLocationUpdateSocketInputSchema>): string {\n\t\treturn input.riderId.toString();\n\t}\n\n\tprotected getIdentifier(): string {\n\t\treturn this.data.riderId.toString();\n\t}\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import z from 'zod';
2
- import { ClickType, TicketStatus } from '../../../utilities/enum';
2
+ import { TicketStatus } from '../../../utilities/enum';
3
3
  import { DTO } from '../../../utilities/validation';
4
4
  import { BaseSocketEvent } from '../BaseSocketEvent';
5
+ import { NotificationSettings } from '../PushNotificationEvent';
5
6
  export declare const TicketActionsSocketInputSchema: z.ZodUndefined;
6
7
  export declare const TicketActionsSocketOutputSchema: z.ZodObject<{
7
8
  _id: z.ZodEffects<z.ZodType<import("mongoose").Types.ObjectId, z.ZodTypeDef, import("mongoose").Types.ObjectId>, import("mongoose").Types.ObjectId, import("mongoose").Types.ObjectId>;
@@ -50,10 +51,7 @@ export declare class TicketActionsSocketEvent extends BaseSocketEvent<typeof Tic
50
51
  _id: import("mongoose").Types.ObjectId;
51
52
  }>;
52
53
  };
53
- static readonly notificationSettings: {
54
- isPushNotification: boolean;
55
- isClickable: boolean;
56
- clickType: ClickType;
57
- };
58
- constructor(payload: TicketActionsSocketOutputDTO, pushNotificationPayload?: TicketActionsPushOutputDTO);
54
+ get notificationSettings(): NotificationSettings | undefined;
55
+ constructor(payload: TicketActionsSocketOutputDTO);
56
+ protected getIdentifier(): string;
59
57
  }
@@ -20,13 +20,22 @@ class TicketActionsSocketEvent extends BaseSocketEvent_1.BaseSocketEvent {
20
20
  output: exports.TicketActionsSocketOutputSchema,
21
21
  pushNotificationOutput: exports.TicketActionsPushOutputSchema,
22
22
  };
23
- static notificationSettings = {
24
- isPushNotification: true,
25
- isClickable: true,
26
- clickType: enum_1.ClickType.CLICKABLE_TICKET,
27
- };
28
- constructor(payload, pushNotificationPayload) {
29
- super(enum_1.SocketEventType.TICKET_ACTIONS, TicketActionsSocketEvent.schemas, payload, pushNotificationPayload);
23
+ get notificationSettings() {
24
+ return {
25
+ isPushNotification: true,
26
+ isClickable: true,
27
+ clickType: enum_1.ClickType.CLICKABLE_TICKET,
28
+ };
29
+ }
30
+ constructor(payload) {
31
+ const pushPayload = {
32
+ _id: payload._id,
33
+ status: payload.status,
34
+ };
35
+ super(enum_1.SocketEventType.TICKET_ACTIONS, TicketActionsSocketEvent.schemas, payload, pushPayload);
36
+ }
37
+ getIdentifier() {
38
+ return 'default';
30
39
  }
31
40
  }
32
41
  exports.TicketActionsSocketEvent = TicketActionsSocketEvent;