@principal-ai/control-tower-core 0.3.2 → 0.4.1

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.
@@ -21,7 +21,7 @@
21
21
  "import type { Lock, LockRequest, LockState } from \"../types/index.js\";\n\nexport abstract class LockManager {\n\tprotected lockState: LockState = {\n\t\tlocks: new Map(),\n\t\tqueue: new Map(),\n\t\tuserLocks: new Map(),\n\t};\n\n\tabstract acquireLock(\n\t\tuserId: string,\n\t\tusername: string,\n\t\trequest: LockRequest,\n\t): Promise<Lock>;\n\tabstract releaseLock(lockId: string): Promise<void>;\n\tabstract releaseUserLocks(userId: string): Promise<void>;\n\tabstract getLock(path: string): Promise<Lock | null>;\n\tabstract getUserLocks(userId: string): Promise<Lock[]>;\n\tabstract getAllLocks(): Promise<Lock[]>;\n\tabstract isLocked(path: string): Promise<boolean>;\n\tabstract getQueueLength(path: string): Promise<number>;\n\tabstract extendLock(lockId: string, ttl: number): Promise<Lock>;\n\tabstract addToQueue(\n\t\tuserId: string,\n\t\tusername: string,\n\t\trequest: LockRequest,\n\t): Promise<void>;\n\tabstract removeFromQueue(path: string, userId: string): Promise<void>;\n}\n",
22
22
  "import type { Lock, LockQueueItem, LockRequest } from \"../types/index.js\";\nimport { LockManager } from \"./LockManager.js\";\n\nexport class DefaultLockManager extends LockManager {\n\tasync acquireLock(\n\t\tuserId: string,\n\t\tusername: string,\n\t\trequest: LockRequest,\n\t): Promise<Lock> {\n\t\tconst {\n\t\t\tpath,\n\t\t\ttype = \"file\",\n\t\t\tpriority = \"normal\",\n\t\t\tttl,\n\t\t\tbranch,\n\t\t\tmetadata,\n\t\t} = request;\n\n\t\t// Check if user already has a lock on this path\n\t\tconst userLocks = this.lockState.userLocks.get(userId) || new Set();\n\t\tif (userLocks.has(path)) {\n\t\t\tthrow new Error(`User ${username} already has a lock on ${path}`);\n\t\t}\n\n\t\t// Check if path is already locked\n\t\tconst existingLock = await this.getLock(path);\n\t\tif (existingLock) {\n\t\t\t// Add to queue\n\t\t\tawait this.addToQueue(userId, username, request);\n\t\t\tthrow new Error(\n\t\t\t\t`Path ${path} is already locked by ${existingLock.username}, added to queue`,\n\t\t\t);\n\t\t}\n\n\t\t// Generate lock ID\n\t\tconst lockId = this.generateId();\n\n\t\t// Create lock\n\t\tconst lock: Lock = {\n\t\t\tid: lockId,\n\t\t\ttype,\n\t\t\tpath,\n\t\t\tuserId,\n\t\t\tusername,\n\t\t\tacquiredAt: Date.now(),\n\t\t\texpiresAt: ttl ? Date.now() + ttl : undefined,\n\t\t\tpriority,\n\t\t\tbranch,\n\t\t\tmetadata,\n\t\t};\n\n\t\t// Store lock\n\t\tthis.lockState.locks.set(lockId, lock);\n\t\tthis.lockState.userLocks.set(userId, userLocks.add(path));\n\n\t\treturn lock;\n\t}\n\n\tasync releaseLock(lockId: string): Promise<void> {\n\t\tconst lock = this.lockState.locks.get(lockId);\n\t\tif (!lock) {\n\t\t\tthrow new Error(`Lock ${lockId} not found`);\n\t\t}\n\n\t\t// Remove from user locks\n\t\tconst userLocks = this.lockState.userLocks.get(lock.userId);\n\t\tif (userLocks) {\n\t\t\tuserLocks.delete(lock.path);\n\t\t\tif (userLocks.size === 0) {\n\t\t\t\tthis.lockState.userLocks.delete(lock.userId);\n\t\t\t}\n\t\t}\n\n\t\t// Remove lock\n\t\tthis.lockState.locks.delete(lockId);\n\n\t\t// Process queue for this path\n\t\tawait this.processQueue(lock.path);\n\t}\n\n\tasync releaseUserLocks(userId: string): Promise<void> {\n\t\tconst userLocks = this.lockState.userLocks.get(userId);\n\t\tif (!userLocks) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lockIds = Array.from(this.lockState.locks.entries())\n\t\t\t.filter(([, lock]) => lock.userId === userId)\n\t\t\t.map(([lockId]) => lockId);\n\n\t\tfor (const lockId of lockIds) {\n\t\t\tawait this.releaseLock(lockId);\n\t\t}\n\t}\n\n\tasync getLock(path: string): Promise<Lock | null> {\n\t\tfor (const lock of this.lockState.locks.values()) {\n\t\t\tif (lock.path === path) {\n\t\t\t\treturn lock;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tasync getUserLocks(userId: string): Promise<Lock[]> {\n\t\treturn Array.from(this.lockState.locks.values()).filter(\n\t\t\t(lock) => lock.userId === userId,\n\t\t);\n\t}\n\n\tasync getAllLocks(): Promise<Lock[]> {\n\t\treturn Array.from(this.lockState.locks.values());\n\t}\n\n\tasync isLocked(path: string): Promise<boolean> {\n\t\treturn (await this.getLock(path)) !== null;\n\t}\n\n\tasync getQueueLength(path: string): Promise<number> {\n\t\tconst queue = this.lockState.queue.get(path);\n\t\treturn queue ? queue.length : 0;\n\t}\n\n\tasync extendLock(lockId: string, ttl: number): Promise<Lock> {\n\t\tconst lock = this.lockState.locks.get(lockId);\n\t\tif (!lock) {\n\t\t\tthrow new Error(`Lock ${lockId} not found`);\n\t\t}\n\n\t\tlock.expiresAt = Date.now() + ttl;\n\t\treturn lock;\n\t}\n\n\tasync addToQueue(\n\t\tuserId: string,\n\t\tusername: string,\n\t\trequest: LockRequest,\n\t): Promise<void> {\n\t\tconst { path } = request;\n\t\tconst queue = this.lockState.queue.get(path) || [];\n\n\t\tconst queueItem: LockQueueItem = {\n\t\t\t...request,\n\t\t\tuserId,\n\t\t\tusername,\n\t\t\trequestedAt: Date.now(),\n\t\t\tresolve: () => {},\n\t\t\treject: () => {},\n\t\t};\n\n\t\tqueue.push(queueItem);\n\t\tthis.lockState.queue.set(path, queue);\n\t}\n\n\tasync removeFromQueue(path: string, userId: string): Promise<void> {\n\t\tconst queue = this.lockState.queue.get(path);\n\t\tif (!queue) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = queue.findIndex((item) => item.userId === userId);\n\t\tif (index !== -1) {\n\t\t\tqueue.splice(index, 1);\n\t\t\tif (queue.length === 0) {\n\t\t\t\tthis.lockState.queue.delete(path);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate generateId(): string {\n\t\treturn Math.random().toString(36).substring(2) + Date.now().toString(36);\n\t}\n\n\tprivate async processQueue(path: string): Promise<void> {\n\t\tconst queue = this.lockState.queue.get(path);\n\t\tif (!queue || queue.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Process first item in queue\n\t\tconst item = queue.shift()!;\n\t\tif (queue.length === 0) {\n\t\t\tthis.lockState.queue.delete(path);\n\t\t}\n\n\t\ttry {\n\t\t\tconst lock = await this.acquireLock(item.userId, item.username, {\n\t\t\t\tpath: item.path,\n\t\t\t\ttype: item.type,\n\t\t\t\tpriority: item.priority,\n\t\t\t\tttl: item.ttl,\n\t\t\t\tbranch: item.branch,\n\t\t\t\tmetadata: item.metadata,\n\t\t\t});\n\n\t\t\titem.resolve(lock);\n\t\t} catch (error) {\n\t\t\titem.reject(error as Error);\n\t\t}\n\t}\n}\n",
23
23
  "/**\n * Presence Manager Abstract Class\n *\n * Manages global user presence tracking independent of room membership.\n * Supports multi-device connections, activity monitoring, and grace periods.\n */\n\nimport type {\n\tActivityUpdate,\n\tDeviceInfo,\n\tPresenceChangeEvent,\n\tPresenceConfig,\n\tPresenceStatus,\n\tUserPresence,\n} from \"../types/presence.js\";\n\n/**\n * Abstract class for managing user presence\n *\n * Implementations should handle:\n * - Multi-device tracking per user\n * - Activity/heartbeat monitoring\n * - Grace period for disconnects\n * - Presence state persistence (if needed)\n */\nexport abstract class PresenceManager {\n\tprotected config: Required<PresenceConfig>;\n\n\tconstructor(config?: PresenceConfig) {\n\t\t// Set defaults\n\t\tthis.config = {\n\t\t\tenabled: config?.enabled ?? false,\n\t\t\theartbeatInterval: config?.heartbeatInterval ?? 30000,\n\t\t\tawayThreshold: config?.awayThreshold ?? 2,\n\t\t\tdisconnectThreshold: config?.disconnectThreshold ?? 3,\n\t\t\tgracePeriod: config?.gracePeriod ?? 30000,\n\t\t\ttrackDeviceActivity: config?.trackDeviceActivity ?? true,\n\t\t\tbroadcastPresenceUpdates: config?.broadcastPresenceUpdates ?? true,\n\t\t};\n\t}\n\n\t/**\n\t * Register a new device connection for a user\n\t *\n\t * @param userId - User identifier\n\t * @param deviceId - Device/client identifier\n\t * @param deviceInfo - Optional device metadata\n\t * @returns The updated user presence\n\t */\n\tabstract connectDevice(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t\tdeviceInfo?: Partial<DeviceInfo>,\n\t): Promise<UserPresence>;\n\n\t/**\n\t * Unregister a device connection\n\t *\n\t * May trigger grace period if this is the user's last device.\n\t *\n\t * @param userId - User identifier\n\t * @param deviceId - Device/client identifier\n\t * @returns The updated user presence, or null if user is completely offline\n\t */\n\tabstract disconnectDevice(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t): Promise<UserPresence | null>;\n\n\t/**\n\t * Update activity timestamp for a device\n\t *\n\t * Used for heartbeats and activity tracking.\n\t *\n\t * @param update - Activity update information\n\t * @returns The updated user presence\n\t */\n\tabstract updateActivity(update: ActivityUpdate): Promise<UserPresence>;\n\n\t/**\n\t * Get presence state for a user\n\t *\n\t * @param userId - User identifier\n\t * @returns User presence, or null if not found\n\t */\n\tabstract getUserPresence(userId: string): Promise<UserPresence | null>;\n\n\t/**\n\t * Get presence state for multiple users\n\t *\n\t * @param userIds - Array of user identifiers\n\t * @returns Map of userId to UserPresence\n\t */\n\tabstract getUsersPresence(\n\t\tuserIds: string[],\n\t): Promise<Map<string, UserPresence>>;\n\n\t/**\n\t * Get all online users\n\t *\n\t * @returns Array of user presences with status 'online'\n\t */\n\tabstract getOnlineUsers(): Promise<UserPresence[]>;\n\n\t/**\n\t * Get all devices for a user\n\t *\n\t * @param userId - User identifier\n\t * @returns Array of device info\n\t */\n\tabstract getUserDevices(userId: string): Promise<DeviceInfo[]>;\n\n\t/**\n\t * Manually set user status\n\t *\n\t * @param userId - User identifier\n\t * @param status - New presence status\n\t * @returns The updated user presence\n\t */\n\tabstract setUserStatus(\n\t\tuserId: string,\n\t\tstatus: PresenceStatus,\n\t): Promise<UserPresence>;\n\n\t/**\n\t * Check for stale connections and update presence accordingly\n\t *\n\t * This should be called periodically to:\n\t * - Mark idle devices as 'away'\n\t * - Disconnect devices that haven't sent heartbeats\n\t * - Expire grace periods\n\t *\n\t * @returns Array of presence change events\n\t */\n\tabstract processHeartbeats(): Promise<PresenceChangeEvent[]>;\n\n\t/**\n\t * Clear all presence data\n\t *\n\t * Useful for testing and cleanup.\n\t */\n\tabstract clear(): Promise<void>;\n\n\t/**\n\t * Get configuration\n\t */\n\tgetConfig(): Readonly<Required<PresenceConfig>> {\n\t\treturn { ...this.config };\n\t}\n\n\t/**\n\t * Check if presence tracking is enabled\n\t */\n\tisEnabled(): boolean {\n\t\treturn this.config.enabled;\n\t}\n\n\t/**\n\t * Calculate presence status based on device states\n\t *\n\t * Helper method for implementations to determine overall user status.\n\t *\n\t * @param devices - Map of devices for a user\n\t * @param now - Current timestamp\n\t * @returns Calculated presence status\n\t */\n\tprotected calculatePresenceStatus(\n\t\tdevices: Map<string, DeviceInfo>,\n\t\tnow: number = Date.now(),\n\t): PresenceStatus {\n\t\tif (devices.size === 0) {\n\t\t\treturn \"offline\";\n\t\t}\n\n\t\tconst heartbeatTimeout =\n\t\t\tthis.config.heartbeatInterval * this.config.awayThreshold;\n\n\t\t// Check if ANY device is active (within heartbeat threshold)\n\t\tfor (const device of devices.values()) {\n\t\t\tconst timeSinceActivity = now - device.lastActivity;\n\t\t\tif (timeSinceActivity < heartbeatTimeout) {\n\t\t\t\treturn \"online\";\n\t\t\t}\n\t\t}\n\n\t\t// All devices are idle\n\t\treturn \"away\";\n\t}\n\n\t/**\n\t * Check if a device should be disconnected due to missed heartbeats\n\t *\n\t * @param device - Device info\n\t * @param now - Current timestamp\n\t * @returns true if device should be disconnected\n\t */\n\tprotected shouldDisconnectDevice(\n\t\tdevice: DeviceInfo,\n\t\tnow: number = Date.now(),\n\t): boolean {\n\t\tconst timeout =\n\t\t\tthis.config.heartbeatInterval * this.config.disconnectThreshold;\n\t\treturn now - device.lastActivity > timeout;\n\t}\n}\n",
24
- "/**\n * Default In-Memory Presence Manager\n *\n * Reference implementation of PresenceManager using in-memory storage.\n * Suitable for single-server deployments and development.\n *\n * For multi-server deployments, implement a custom PresenceManager\n * backed by Redis or another shared data store.\n */\n\nimport type { BaseServer } from \"../server/BaseServer.js\";\nimport type {\n\tActivityUpdate,\n\tDeviceInfo,\n\tPresenceChangeEvent,\n\tPresenceConfig,\n\tPresenceStatus,\n\tUserPresence,\n} from \"../types/presence.js\";\nimport type {\n\tExtendedUserPresence,\n\tPresenceExtension,\n} from \"./PresenceExtension.js\";\nimport { PresenceManager } from \"./PresenceManager.js\";\n\n/**\n * Grace period entry for tracking disconnected users\n */\ninterface GracePeriodEntry {\n\tuserId: string;\n\tdisconnectedAt: number;\n\tpreviousPresence: UserPresence;\n}\n\nexport class DefaultPresenceManager<\n\tTExtendedData = Record<string, unknown>,\n> extends PresenceManager {\n\tprivate userPresences = new Map<string, UserPresence>();\n\tprivate deviceToUser = new Map<string, string>();\n\tprivate gracePeriodEntries = new Map<string, GracePeriodEntry>();\n\tprivate extensions: PresenceExtension<TExtendedData>[] = [];\n\tprivate server?: BaseServer;\n\n\tconstructor(\n\t\tconfig?: PresenceConfig & {\n\t\t\textensions?: PresenceExtension<TExtendedData>[];\n\t\t},\n\t) {\n\t\tsuper(config);\n\t\tthis.extensions = config?.extensions || [];\n\t}\n\n\t/**\n\t * Set server reference for auto-broadcasting\n\t *\n\t * This is called automatically by ServerBuilder.\n\t * @internal\n\t */\n\tsetServer(server: BaseServer): void {\n\t\tthis.server = server;\n\t}\n\n\t/**\n\t * Initialize all extensions\n\t * @internal\n\t */\n\tasync initializeExtensions(): Promise<void> {\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.initialize?.();\n\t\t}\n\t}\n\n\t/**\n\t * Destroy all extensions\n\t * @internal\n\t */\n\tasync destroyExtensions(): Promise<void> {\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.destroy?.();\n\t\t}\n\t}\n\n\tasync connectDevice(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t\tdeviceInfo?: Partial<DeviceInfo>,\n\t): Promise<UserPresence> {\n\t\tconst now = Date.now();\n\t\tconst isFirstDevice =\n\t\t\t!this.userPresences.has(userId) && !this.gracePeriodEntries.has(userId);\n\n\t\t// Check if user is in grace period (reconnecting)\n\t\tconst gracePeriodEntry = this.gracePeriodEntries.get(userId);\n\t\tif (gracePeriodEntry) {\n\t\t\t// Restore from grace period\n\t\t\tthis.gracePeriodEntries.delete(userId);\n\t\t\tconst presence = gracePeriodEntry.previousPresence;\n\n\t\t\t// Add the new device\n\t\t\tconst device: DeviceInfo = {\n\t\t\t\tdeviceId,\n\t\t\t\ttype: deviceInfo?.type,\n\t\t\t\tconnectedAt: now,\n\t\t\t\tlastActivity: now,\n\t\t\t\tmetadata: deviceInfo?.metadata,\n\t\t\t};\n\n\t\t\tpresence.devices.set(deviceId, device);\n\t\t\tpresence.status = \"online\";\n\t\t\tpresence.lastActivity = now;\n\n\t\t\tthis.userPresences.set(userId, presence);\n\t\t\tthis.deviceToUser.set(deviceId, userId);\n\n\t\t\t// Call extension hooks\n\t\t\tif (isFirstDevice) {\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tawait ext.onUserOnline?.(\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tdeviceInfo?.metadata || {},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tawait ext.onDeviceConnected?.(\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tdeviceInfo?.metadata || {},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Auto-broadcast\n\t\t\tif (this.config.broadcastPresenceUpdates && this.server) {\n\t\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\t\ttype: \"presence:user_online\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\t\ttimestamp: now,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn presence;\n\t\t}\n\n\t\t// Get or create user presence\n\t\tlet presence = this.userPresences.get(userId);\n\t\tconst wasOnline = presence !== undefined;\n\n\t\tif (!presence) {\n\t\t\t// New user\n\t\t\tpresence = {\n\t\t\t\tuserId,\n\t\t\t\tstatus: \"online\",\n\t\t\t\tdevices: new Map(),\n\t\t\t\tfirstConnectedAt: now,\n\t\t\t\tlastActivity: now,\n\t\t\t\tmetadata: {},\n\t\t\t};\n\t\t\tthis.userPresences.set(userId, presence);\n\t\t}\n\n\t\t// Add device\n\t\tconst device: DeviceInfo = {\n\t\t\tdeviceId,\n\t\t\ttype: deviceInfo?.type,\n\t\t\tconnectedAt: now,\n\t\t\tlastActivity: now,\n\t\t\tmetadata: deviceInfo?.metadata,\n\t\t};\n\n\t\tpresence.devices.set(deviceId, device);\n\t\tpresence.status = this.calculatePresenceStatus(presence.devices, now);\n\t\tpresence.lastActivity = now;\n\n\t\tthis.deviceToUser.set(deviceId, userId);\n\n\t\t// Call extension hooks\n\t\tif (!wasOnline) {\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tawait ext.onUserOnline?.(userId, deviceId, deviceInfo?.metadata || {});\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tawait ext.onDeviceConnected?.(\n\t\t\t\t\tuserId,\n\t\t\t\t\tdeviceId,\n\t\t\t\t\tdeviceInfo?.metadata || {},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Auto-broadcast if user came online\n\t\tif (!wasOnline && this.config.broadcastPresenceUpdates && this.server) {\n\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\ttype: \"presence:user_online\",\n\t\t\t\tpayload: {\n\t\t\t\t\tuserId,\n\t\t\t\t\tdeviceId,\n\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\ttimestamp: now,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\treturn presence;\n\t}\n\n\tasync disconnectDevice(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t): Promise<UserPresence | null> {\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Remove device\n\t\tpresence.devices.delete(deviceId);\n\t\tthis.deviceToUser.delete(deviceId);\n\n\t\tconst now = Date.now();\n\t\tconst isLastDevice = presence.devices.size === 0;\n\n\t\t// If no devices left, start grace period\n\t\tif (isLastDevice) {\n\t\t\t// Call extension hooks for user going offline\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tawait ext.onUserOffline?.(userId, deviceId);\n\t\t\t}\n\n\t\t\t// Auto-broadcast user offline\n\t\t\tif (this.config.broadcastPresenceUpdates && this.server) {\n\t\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\t\ttype: \"presence:user_offline\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tstatus: \"offline\",\n\t\t\t\t\t\ttimestamp: now,\n\t\t\t\t\t\tgracePeriod: this.config.gracePeriod,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.config.gracePeriod > 0) {\n\t\t\t\t// Move to grace period\n\t\t\t\tthis.gracePeriodEntries.set(userId, {\n\t\t\t\t\tuserId,\n\t\t\t\t\tdisconnectedAt: now,\n\t\t\t\t\tpreviousPresence: presence,\n\t\t\t\t});\n\t\t\t\tthis.userPresences.delete(userId);\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\t// No grace period, remove completely\n\t\t\t\tthis.userPresences.delete(userId);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Still has devices - call device disconnected hook\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.onDeviceDisconnected?.(userId, deviceId);\n\t\t}\n\n\t\t// Still has devices, update status\n\t\tpresence.status = this.calculatePresenceStatus(presence.devices, now);\n\n\t\t// Update lastActivity to most recent device activity\n\t\tlet mostRecentActivity = 0;\n\t\tfor (const device of presence.devices.values()) {\n\t\t\tif (device.lastActivity > mostRecentActivity) {\n\t\t\t\tmostRecentActivity = device.lastActivity;\n\t\t\t}\n\t\t}\n\t\tpresence.lastActivity = mostRecentActivity;\n\n\t\treturn presence;\n\t}\n\n\tasync updateActivity(update: ActivityUpdate): Promise<UserPresence> {\n\t\tconst { userId, deviceId, timestamp, activityType } = update;\n\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\tthrow new Error(`User ${userId} not found in presence system`);\n\t\t}\n\n\t\tconst device = presence.devices.get(deviceId);\n\t\tif (!device) {\n\t\t\tthrow new Error(`Device ${deviceId} not found for user ${userId}`);\n\t\t}\n\n\t\t// Update device activity\n\t\tdevice.lastActivity = timestamp;\n\n\t\t// Update user activity\n\t\tif (timestamp > presence.lastActivity) {\n\t\t\tpresence.lastActivity = timestamp;\n\t\t}\n\n\t\t// Recalculate status\n\t\tconst previousStatus = presence.status;\n\t\tpresence.status = this.calculatePresenceStatus(presence.devices, timestamp);\n\n\t\t// Call extension hooks\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.onActivity?.(userId, deviceId, activityType || \"heartbeat\");\n\t\t}\n\n\t\treturn presence;\n\t}\n\n\tasync getUserPresence(\n\t\tuserId: string,\n\t): Promise<ExtendedUserPresence<TExtendedData> | null> {\n\t\tconst basePresence = this.userPresences.get(userId);\n\t\tif (!basePresence) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Merge extended data from all extensions\n\t\tif (this.extensions.length > 0) {\n\t\t\tconst extendedData: Record<string, unknown> = {};\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tconst data = await ext.getExtendedData?.(userId);\n\t\t\t\tif (data) {\n\t\t\t\t\tObject.assign(extendedData, data);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...basePresence,\n\t\t\t\textended: extendedData as TExtendedData,\n\t\t\t};\n\t\t}\n\n\t\treturn basePresence;\n\t}\n\n\tasync getUsersPresence(\n\t\tuserIds: string[],\n\t): Promise<Map<string, UserPresence>> {\n\t\tconst result = new Map<string, UserPresence>();\n\n\t\tfor (const userId of userIds) {\n\t\t\tconst presence = this.userPresences.get(userId);\n\t\t\tif (presence) {\n\t\t\t\tresult.set(userId, presence);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tasync getOnlineUsers(): Promise<ExtendedUserPresence<TExtendedData>[]> {\n\t\tconst online: ExtendedUserPresence<TExtendedData>[] = [];\n\n\t\tfor (const presence of this.userPresences.values()) {\n\t\t\tif (presence.status === \"online\") {\n\t\t\t\t// Check visibility with extensions\n\t\t\t\tlet visible = true;\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tconst shouldShow = await ext.shouldBeVisible?.(presence.userId);\n\t\t\t\t\tif (shouldShow === false) {\n\t\t\t\t\t\tvisible = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (visible) {\n\t\t\t\t\t// Get full presence with extended data\n\t\t\t\t\tconst fullPresence = await this.getUserPresence(presence.userId);\n\t\t\t\t\tif (fullPresence) {\n\t\t\t\t\t\tonline.push(fullPresence);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn online;\n\t}\n\n\tasync getUserDevices(userId: string): Promise<DeviceInfo[]> {\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn Array.from(presence.devices.values());\n\t}\n\n\tasync setUserStatus(\n\t\tuserId: string,\n\t\tstatus: PresenceStatus,\n\t): Promise<UserPresence> {\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\tthrow new Error(`User ${userId} not found in presence system`);\n\t\t}\n\n\t\tpresence.status = status;\n\t\treturn presence;\n\t}\n\n\tasync processHeartbeats(): Promise<PresenceChangeEvent[]> {\n\t\tconst now = Date.now();\n\t\tconst changes: PresenceChangeEvent[] = [];\n\n\t\t// Process active presences\n\t\tfor (const [userId, presence] of this.userPresences.entries()) {\n\t\t\tconst devicesToRemove: string[] = [];\n\n\t\t\t// Check each device for timeout\n\t\t\tfor (const [deviceId, device] of presence.devices.entries()) {\n\t\t\t\tif (this.shouldDisconnectDevice(device, now)) {\n\t\t\t\t\tdevicesToRemove.push(deviceId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove timed-out devices\n\t\t\tfor (const deviceId of devicesToRemove) {\n\t\t\t\tpresence.devices.delete(deviceId);\n\t\t\t\tthis.deviceToUser.delete(deviceId);\n\t\t\t}\n\n\t\t\t// Update status after removing devices\n\t\t\tconst previousStatus = presence.status;\n\t\t\tconst newStatus = this.calculatePresenceStatus(presence.devices, now);\n\n\t\t\tif (newStatus !== previousStatus) {\n\t\t\t\tpresence.status = newStatus;\n\t\t\t\tchanges.push({\n\t\t\t\t\tuserId,\n\t\t\t\t\tpreviousStatus,\n\t\t\t\t\tstatus: newStatus,\n\t\t\t\t\ttimestamp: now,\n\t\t\t\t\treason: \"heartbeat_timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If no devices left, move to grace period\n\t\t\tif (presence.devices.size === 0) {\n\t\t\t\tif (this.config.gracePeriod > 0) {\n\t\t\t\t\tthis.gracePeriodEntries.set(userId, {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdisconnectedAt: now,\n\t\t\t\t\t\tpreviousPresence: presence,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.userPresences.delete(userId);\n\t\t\t}\n\t\t}\n\n\t\t// Process grace period expirations\n\t\tconst expiredGracePeriods: string[] = [];\n\n\t\tfor (const [userId, entry] of this.gracePeriodEntries.entries()) {\n\t\t\tconst gracePeriodElapsed = now - entry.disconnectedAt;\n\n\t\t\tif (gracePeriodElapsed > this.config.gracePeriod) {\n\t\t\t\texpiredGracePeriods.push(userId);\n\n\t\t\t\tchanges.push({\n\t\t\t\t\tuserId,\n\t\t\t\t\tpreviousStatus: entry.previousPresence.status,\n\t\t\t\t\tstatus: \"offline\",\n\t\t\t\t\ttimestamp: now,\n\t\t\t\t\treason: \"grace_period_expired\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Remove expired grace period entries\n\t\tfor (const userId of expiredGracePeriods) {\n\t\t\tthis.gracePeriodEntries.delete(userId);\n\t\t}\n\n\t\treturn changes;\n\t}\n\n\tasync clear(): Promise<void> {\n\t\t// Destroy extensions first\n\t\tawait this.destroyExtensions();\n\n\t\tthis.userPresences.clear();\n\t\tthis.deviceToUser.clear();\n\t\tthis.gracePeriodEntries.clear();\n\t}\n\n\t/**\n\t * Get count of users in grace period (useful for monitoring)\n\t */\n\tgetGracePeriodCount(): number {\n\t\treturn this.gracePeriodEntries.size;\n\t}\n\n\t/**\n\t * Get total connected device count\n\t */\n\tgetConnectedDeviceCount(): number {\n\t\treturn this.deviceToUser.size;\n\t}\n\n\t/**\n\t * Get total unique user count\n\t */\n\tgetUniqueUserCount(): number {\n\t\treturn this.userPresences.size + this.gracePeriodEntries.size;\n\t}\n}\n",
24
+ "/**\n * Default In-Memory Presence Manager\n *\n * Reference implementation of PresenceManager using in-memory storage.\n * Suitable for single-server deployments and development.\n *\n * For multi-server deployments, implement a custom PresenceManager\n * backed by Redis or another shared data store.\n */\n\nimport type { BaseServer } from \"../server/BaseServer.js\";\nimport type { Message } from \"../types/index.js\";\nimport type {\n\tActivityUpdate,\n\tDeviceInfo,\n\tPresenceActionResponse,\n\tPresenceChangeEvent,\n\tPresenceConfig,\n\tPresenceGetUserResponse,\n\tPresenceGetUsersResponse,\n\tPresenceRepoStatusUpdateRequest,\n\tPresenceRepoStatusUpdateResponse,\n\tPresenceStatus,\n\tSerializableUserPresence,\n\tUserPresence,\n} from \"../types/presence.js\";\nimport type {\n\tExtendedUserPresence,\n\tPresenceExtension,\n\tPresenceMessageHandlerResult,\n} from \"./PresenceExtension.js\";\nimport { PresenceManager } from \"./PresenceManager.js\";\n\n/**\n * Grace period entry for tracking disconnected users\n */\ninterface GracePeriodEntry {\n\tuserId: string;\n\tdisconnectedAt: number;\n\tpreviousPresence: UserPresence;\n}\n\nexport class DefaultPresenceManager<\n\tTExtendedData = Record<string, unknown>,\n> extends PresenceManager {\n\tprivate userPresences = new Map<string, UserPresence>();\n\tprivate deviceToUser = new Map<string, string>();\n\tprivate gracePeriodEntries = new Map<string, GracePeriodEntry>();\n\tprivate extensions: PresenceExtension<TExtendedData>[] = [];\n\tprivate server?: BaseServer;\n\n\tconstructor(\n\t\tconfig?: PresenceConfig & {\n\t\t\textensions?: PresenceExtension<TExtendedData>[];\n\t\t},\n\t) {\n\t\tsuper(config);\n\t\tthis.extensions = config?.extensions || [];\n\t}\n\n\t/**\n\t * Set server reference for auto-broadcasting\n\t *\n\t * This is called automatically by ServerBuilder.\n\t * @internal\n\t */\n\tsetServer(server: BaseServer): void {\n\t\tthis.server = server;\n\t}\n\n\t/**\n\t * Initialize all extensions\n\t * @internal\n\t */\n\tasync initializeExtensions(): Promise<void> {\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.initialize?.();\n\t\t}\n\t}\n\n\t/**\n\t * Destroy all extensions\n\t * @internal\n\t */\n\tasync destroyExtensions(): Promise<void> {\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.destroy?.();\n\t\t}\n\t}\n\n\tasync connectDevice(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t\tdeviceInfo?: Partial<DeviceInfo>,\n\t): Promise<UserPresence> {\n\t\tconst now = Date.now();\n\t\tconst isFirstDevice =\n\t\t\t!this.userPresences.has(userId) && !this.gracePeriodEntries.has(userId);\n\n\t\t// Check if user is in grace period (reconnecting)\n\t\tconst gracePeriodEntry = this.gracePeriodEntries.get(userId);\n\t\tif (gracePeriodEntry) {\n\t\t\t// Restore from grace period\n\t\t\tthis.gracePeriodEntries.delete(userId);\n\t\t\tconst presence = gracePeriodEntry.previousPresence;\n\n\t\t\t// Add the new device\n\t\t\tconst device: DeviceInfo = {\n\t\t\t\tdeviceId,\n\t\t\t\ttype: deviceInfo?.type,\n\t\t\t\tconnectedAt: now,\n\t\t\t\tlastActivity: now,\n\t\t\t\tmetadata: deviceInfo?.metadata,\n\t\t\t};\n\n\t\t\tpresence.devices.set(deviceId, device);\n\t\t\tpresence.status = \"online\";\n\t\t\tpresence.lastActivity = now;\n\n\t\t\tthis.userPresences.set(userId, presence);\n\t\t\tthis.deviceToUser.set(deviceId, userId);\n\n\t\t\t// Call extension hooks\n\t\t\tif (isFirstDevice) {\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tawait ext.onUserOnline?.(\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tdeviceInfo?.metadata || {},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tawait ext.onDeviceConnected?.(\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tdeviceInfo?.metadata || {},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Auto-broadcast\n\t\t\tif (this.config.broadcastPresenceUpdates && this.server) {\n\t\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\t\ttype: \"presence:user_online\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\t\ttimestamp: now,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn presence;\n\t\t}\n\n\t\t// Get or create user presence\n\t\tlet presence = this.userPresences.get(userId);\n\t\tconst wasOnline = presence !== undefined;\n\n\t\tif (!presence) {\n\t\t\t// New user\n\t\t\tpresence = {\n\t\t\t\tuserId,\n\t\t\t\tstatus: \"online\",\n\t\t\t\tdevices: new Map(),\n\t\t\t\tfirstConnectedAt: now,\n\t\t\t\tlastActivity: now,\n\t\t\t\tmetadata: {},\n\t\t\t};\n\t\t\tthis.userPresences.set(userId, presence);\n\t\t}\n\n\t\t// Add device\n\t\tconst device: DeviceInfo = {\n\t\t\tdeviceId,\n\t\t\ttype: deviceInfo?.type,\n\t\t\tconnectedAt: now,\n\t\t\tlastActivity: now,\n\t\t\tmetadata: deviceInfo?.metadata,\n\t\t};\n\n\t\tpresence.devices.set(deviceId, device);\n\t\tpresence.status = this.calculatePresenceStatus(presence.devices, now);\n\t\tpresence.lastActivity = now;\n\n\t\tthis.deviceToUser.set(deviceId, userId);\n\n\t\t// Call extension hooks\n\t\tif (!wasOnline) {\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tawait ext.onUserOnline?.(userId, deviceId, deviceInfo?.metadata || {});\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tawait ext.onDeviceConnected?.(\n\t\t\t\t\tuserId,\n\t\t\t\t\tdeviceId,\n\t\t\t\t\tdeviceInfo?.metadata || {},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Auto-broadcast if user came online\n\t\tif (!wasOnline && this.config.broadcastPresenceUpdates && this.server) {\n\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\ttype: \"presence:user_online\",\n\t\t\t\tpayload: {\n\t\t\t\t\tuserId,\n\t\t\t\t\tdeviceId,\n\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\ttimestamp: now,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\treturn presence;\n\t}\n\n\tasync disconnectDevice(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t): Promise<UserPresence | null> {\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Remove device\n\t\tpresence.devices.delete(deviceId);\n\t\tthis.deviceToUser.delete(deviceId);\n\n\t\tconst now = Date.now();\n\t\tconst isLastDevice = presence.devices.size === 0;\n\n\t\t// If no devices left, start grace period\n\t\tif (isLastDevice) {\n\t\t\t// Call extension hooks for user going offline\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tawait ext.onUserOffline?.(userId, deviceId);\n\t\t\t}\n\n\t\t\t// Auto-broadcast user offline\n\t\t\tif (this.config.broadcastPresenceUpdates && this.server) {\n\t\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\t\ttype: \"presence:user_offline\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tstatus: \"offline\",\n\t\t\t\t\t\ttimestamp: now,\n\t\t\t\t\t\tgracePeriod: this.config.gracePeriod,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.config.gracePeriod > 0) {\n\t\t\t\t// Move to grace period\n\t\t\t\tthis.gracePeriodEntries.set(userId, {\n\t\t\t\t\tuserId,\n\t\t\t\t\tdisconnectedAt: now,\n\t\t\t\t\tpreviousPresence: presence,\n\t\t\t\t});\n\t\t\t\tthis.userPresences.delete(userId);\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\t// No grace period, remove completely\n\t\t\t\tthis.userPresences.delete(userId);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Still has devices - call device disconnected hook\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.onDeviceDisconnected?.(userId, deviceId);\n\t\t}\n\n\t\t// Still has devices, update status\n\t\tpresence.status = this.calculatePresenceStatus(presence.devices, now);\n\n\t\t// Update lastActivity to most recent device activity\n\t\tlet mostRecentActivity = 0;\n\t\tfor (const device of presence.devices.values()) {\n\t\t\tif (device.lastActivity > mostRecentActivity) {\n\t\t\t\tmostRecentActivity = device.lastActivity;\n\t\t\t}\n\t\t}\n\t\tpresence.lastActivity = mostRecentActivity;\n\n\t\treturn presence;\n\t}\n\n\tasync updateActivity(update: ActivityUpdate): Promise<UserPresence> {\n\t\tconst { userId, deviceId, timestamp, activityType } = update;\n\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\tthrow new Error(`User ${userId} not found in presence system`);\n\t\t}\n\n\t\tconst device = presence.devices.get(deviceId);\n\t\tif (!device) {\n\t\t\tthrow new Error(`Device ${deviceId} not found for user ${userId}`);\n\t\t}\n\n\t\t// Update device activity\n\t\tdevice.lastActivity = timestamp;\n\n\t\t// Update user activity\n\t\tif (timestamp > presence.lastActivity) {\n\t\t\tpresence.lastActivity = timestamp;\n\t\t}\n\n\t\t// Recalculate status\n\t\tconst previousStatus = presence.status;\n\t\tpresence.status = this.calculatePresenceStatus(presence.devices, timestamp);\n\n\t\t// Call extension hooks\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.onActivity?.(userId, deviceId, activityType || \"heartbeat\");\n\t\t}\n\n\t\treturn presence;\n\t}\n\n\tasync getUserPresence(\n\t\tuserId: string,\n\t): Promise<ExtendedUserPresence<TExtendedData> | null> {\n\t\tconst basePresence = this.userPresences.get(userId);\n\t\tif (!basePresence) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Merge extended data from all extensions\n\t\tif (this.extensions.length > 0) {\n\t\t\tconst extendedData: Record<string, unknown> = {};\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tconst data = await ext.getExtendedData?.(userId);\n\t\t\t\tif (data) {\n\t\t\t\t\tObject.assign(extendedData, data);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...basePresence,\n\t\t\t\textended: extendedData as TExtendedData,\n\t\t\t};\n\t\t}\n\n\t\treturn basePresence;\n\t}\n\n\tasync getUsersPresence(\n\t\tuserIds: string[],\n\t): Promise<Map<string, UserPresence>> {\n\t\tconst result = new Map<string, UserPresence>();\n\n\t\tfor (const userId of userIds) {\n\t\t\tconst presence = this.userPresences.get(userId);\n\t\t\tif (presence) {\n\t\t\t\tresult.set(userId, presence);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tasync getOnlineUsers(): Promise<ExtendedUserPresence<TExtendedData>[]> {\n\t\tconst online: ExtendedUserPresence<TExtendedData>[] = [];\n\n\t\tfor (const presence of this.userPresences.values()) {\n\t\t\tif (presence.status === \"online\") {\n\t\t\t\t// Check visibility with extensions\n\t\t\t\tlet visible = true;\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tconst shouldShow = await ext.shouldBeVisible?.(presence.userId);\n\t\t\t\t\tif (shouldShow === false) {\n\t\t\t\t\t\tvisible = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (visible) {\n\t\t\t\t\t// Get full presence with extended data\n\t\t\t\t\tconst fullPresence = await this.getUserPresence(presence.userId);\n\t\t\t\t\tif (fullPresence) {\n\t\t\t\t\t\tonline.push(fullPresence);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn online;\n\t}\n\n\tasync getUserDevices(userId: string): Promise<DeviceInfo[]> {\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn Array.from(presence.devices.values());\n\t}\n\n\tasync setUserStatus(\n\t\tuserId: string,\n\t\tstatus: PresenceStatus,\n\t): Promise<UserPresence> {\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\tthrow new Error(`User ${userId} not found in presence system`);\n\t\t}\n\n\t\tpresence.status = status;\n\t\treturn presence;\n\t}\n\n\tasync processHeartbeats(): Promise<PresenceChangeEvent[]> {\n\t\tconst now = Date.now();\n\t\tconst changes: PresenceChangeEvent[] = [];\n\n\t\t// Process active presences\n\t\tfor (const [userId, presence] of this.userPresences.entries()) {\n\t\t\tconst devicesToRemove: string[] = [];\n\n\t\t\t// Check each device for timeout\n\t\t\tfor (const [deviceId, device] of presence.devices.entries()) {\n\t\t\t\tif (this.shouldDisconnectDevice(device, now)) {\n\t\t\t\t\tdevicesToRemove.push(deviceId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove timed-out devices\n\t\t\tfor (const deviceId of devicesToRemove) {\n\t\t\t\tpresence.devices.delete(deviceId);\n\t\t\t\tthis.deviceToUser.delete(deviceId);\n\t\t\t}\n\n\t\t\t// Update status after removing devices\n\t\t\tconst previousStatus = presence.status;\n\t\t\tconst newStatus = this.calculatePresenceStatus(presence.devices, now);\n\n\t\t\tif (newStatus !== previousStatus) {\n\t\t\t\tpresence.status = newStatus;\n\t\t\t\tchanges.push({\n\t\t\t\t\tuserId,\n\t\t\t\t\tpreviousStatus,\n\t\t\t\t\tstatus: newStatus,\n\t\t\t\t\ttimestamp: now,\n\t\t\t\t\treason: \"heartbeat_timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If no devices left, move to grace period\n\t\t\tif (presence.devices.size === 0) {\n\t\t\t\tif (this.config.gracePeriod > 0) {\n\t\t\t\t\tthis.gracePeriodEntries.set(userId, {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdisconnectedAt: now,\n\t\t\t\t\t\tpreviousPresence: presence,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.userPresences.delete(userId);\n\t\t\t}\n\t\t}\n\n\t\t// Process grace period expirations\n\t\tconst expiredGracePeriods: string[] = [];\n\n\t\tfor (const [userId, entry] of this.gracePeriodEntries.entries()) {\n\t\t\tconst gracePeriodElapsed = now - entry.disconnectedAt;\n\n\t\t\tif (gracePeriodElapsed > this.config.gracePeriod) {\n\t\t\t\texpiredGracePeriods.push(userId);\n\n\t\t\t\tchanges.push({\n\t\t\t\t\tuserId,\n\t\t\t\t\tpreviousStatus: entry.previousPresence.status,\n\t\t\t\t\tstatus: \"offline\",\n\t\t\t\t\ttimestamp: now,\n\t\t\t\t\treason: \"grace_period_expired\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Remove expired grace period entries\n\t\tfor (const userId of expiredGracePeriods) {\n\t\t\tthis.gracePeriodEntries.delete(userId);\n\t\t}\n\n\t\treturn changes;\n\t}\n\n\tasync clear(): Promise<void> {\n\t\t// Destroy extensions first\n\t\tawait this.destroyExtensions();\n\n\t\tthis.userPresences.clear();\n\t\tthis.deviceToUser.clear();\n\t\tthis.gracePeriodEntries.clear();\n\t}\n\n\t/**\n\t * Get count of users in grace period (useful for monitoring)\n\t */\n\tgetGracePeriodCount(): number {\n\t\treturn this.gracePeriodEntries.size;\n\t}\n\n\t/**\n\t * Get total connected device count\n\t */\n\tgetConnectedDeviceCount(): number {\n\t\treturn this.deviceToUser.size;\n\t}\n\n\t/**\n\t * Get total unique user count\n\t */\n\tgetUniqueUserCount(): number {\n\t\treturn this.userPresences.size + this.gracePeriodEntries.size;\n\t}\n\n\t/**\n\t * Convert UserPresence to SerializableUserPresence\n\t * Converts the devices Map to a plain object for JSON serialization\n\t */\n\tprivate serializePresence(presence: ExtendedUserPresence<TExtendedData>): SerializableUserPresence {\n\t\tconst { devices, extended, ...rest } = presence;\n\t\treturn {\n\t\t\t...rest,\n\t\t\tdevices: Object.fromEntries(devices) as Record<string, DeviceInfo>,\n\t\t\t// Spread extended data at top level for compatibility\n\t\t\t...(extended || {}),\n\t\t} as SerializableUserPresence;\n\t}\n\n\t/**\n\t * Handle presence WebSocket messages\n\t *\n\t * This method handles core presence messages and delegates to extensions\n\t * for extension-specific messages. Use this with CustomMessageHandler.\n\t *\n\t * @param userId - Authenticated user ID\n\t * @param deviceId - Device/client ID\n\t * @param message - The WebSocket message\n\t * @param sendResponse - Callback to send response\n\t * @returns true if the message was handled, false otherwise\n\t *\n\t * @example\n\t * ```typescript\n\t * const server = new ServerBuilder()\n\t * .withPresenceManager(presenceManager)\n\t * .withCustomMessageHandler(async (clientId, message, sendResponse) => {\n\t * const client = server.getClient(clientId);\n\t * if (!client?.authenticated || !client.userId) return false;\n\t * const deviceId = getDeviceIdForClient(clientId);\n\t * return presenceManager.handlePresenceMessage(\n\t * client.userId,\n\t * deviceId,\n\t * message,\n\t * sendResponse\n\t * );\n\t * })\n\t * .build();\n\t * ```\n\t */\n\tasync handlePresenceMessage(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t\tmessage: Message,\n\t\tsendResponse: (response: { type: string; payload: unknown }) => Promise<void>,\n\t): Promise<boolean> {\n\t\tswitch (message.type) {\n\t\t\tcase \"presence:get_users\": {\n\t\t\t\tconst onlineUsers = await this.getOnlineUsers();\n\t\t\t\tconst users = onlineUsers.map((u) => this.serializePresence(u));\n\t\t\t\tconst response: PresenceGetUsersResponse = {\n\t\t\t\t\tusers,\n\t\t\t\t\tstats: {\n\t\t\t\t\t\ttotalOnline: users.length,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tawait sendResponse({ type: \"presence:get_users\", payload: response });\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase \"presence:get_user\": {\n\t\t\t\tconst { userId: targetUserId } = message.payload as { userId: string };\n\t\t\t\tconst userPresence = await this.getUserPresence(targetUserId);\n\t\t\t\tconst response: PresenceGetUserResponse = {\n\t\t\t\t\tuser: userPresence ? this.serializePresence(userPresence) : null,\n\t\t\t\t};\n\t\t\t\tawait sendResponse({ type: \"presence:get_user\", payload: response });\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase \"presence:set_status\": {\n\t\t\t\tconst { status, statusMessage } = message.payload as {\n\t\t\t\t\tstatus: PresenceStatus;\n\t\t\t\t\tstatusMessage?: string;\n\t\t\t\t};\n\n\t\t\t\tawait this.setUserStatus(userId, status);\n\n\t\t\t\t// Broadcast status change\n\t\t\t\tif (this.config.broadcastPresenceUpdates && this.server) {\n\t\t\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\t\t\ttype: \"presence:status_changed\",\n\t\t\t\t\t\tpayload: { userId, status, statusMessage },\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst response: PresenceActionResponse = { success: true };\n\t\t\t\tawait sendResponse({ type: \"presence:set_status\", payload: response });\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase \"presence:set_visibility\": {\n\t\t\t\tconst { visible } = message.payload as { visible: boolean };\n\n\t\t\t\t// Visibility is handled by extensions\n\t\t\t\t// Find an extension that can handle visibility\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tif (typeof (ext as any).setVisibility === \"function\") {\n\t\t\t\t\t\t(ext as any).setVisibility(userId, visible);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst response: PresenceActionResponse = { success: true };\n\t\t\t\tawait sendResponse({ type: \"presence:set_visibility\", payload: response });\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcase \"presence:repo_status_update\": {\n\t\t\t\tconst { repoId, gitStatus } = message.payload as PresenceRepoStatusUpdateRequest;\n\n\t\t\t\t// Find extension that can handle git status update\n\t\t\t\tlet updated = false;\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tif (typeof (ext as any).updateRepositoryGitStatus === \"function\") {\n\t\t\t\t\t\tupdated = (ext as any).updateRepositoryGitStatus(\n\t\t\t\t\t\t\tuserId,\n\t\t\t\t\t\t\trepoId,\n\t\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\t\tgitStatus,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!updated) {\n\t\t\t\t\tconst response: PresenceRepoStatusUpdateResponse = {\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\tmessage: \"Repository session not found\",\n\t\t\t\t\t};\n\t\t\t\t\tawait sendResponse({ type: \"presence:repo_status_update\", payload: response });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Broadcast status change\n\t\t\t\tif (this.config.broadcastPresenceUpdates && this.server) {\n\t\t\t\t\t// Check visibility\n\t\t\t\t\tlet visible = true;\n\t\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\t\tconst shouldShow = await ext.shouldBeVisible?.(userId);\n\t\t\t\t\t\tif (shouldShow === false) {\n\t\t\t\t\t\t\tvisible = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (visible) {\n\t\t\t\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\t\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\t\t\t\ttype: \"presence:repo_status_changed\",\n\t\t\t\t\t\t\tpayload: { userId, repoId, deviceId, gitStatus },\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst response: PresenceRepoStatusUpdateResponse = {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tmessage: \"Status updated\",\n\t\t\t\t};\n\t\t\t\tawait sendResponse({ type: \"presence:repo_status_update\", payload: response });\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\t// Try extension handlers\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tif (ext.handleMessage) {\n\t\t\t\t\t\tconst result = await ext.handleMessage(\n\t\t\t\t\t\t\tuserId,\n\t\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\t\tmessage.type,\n\t\t\t\t\t\t\tmessage.payload,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\t// Send response\n\t\t\t\t\t\t\tawait sendResponse({\n\t\t\t\t\t\t\t\ttype: message.type,\n\t\t\t\t\t\t\t\tpayload: result.response,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t// Handle broadcast if specified\n\t\t\t\t\t\t\tif (result.broadcast && this.server) {\n\t\t\t\t\t\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\t\t\t\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\t\t\t\t\t\ttype: result.broadcast.type,\n\t\t\t\t\t\t\t\t\tpayload: result.broadcast.payload,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn false; // Message not handled\n\t\t\t}\n\t\t}\n\t}\n}\n",
25
25
  "// EventData represents any type of data that can be emitted as an event\nexport type EventData = unknown;\n\nexport type EventListener<T = EventData> = (data: T) => void | Promise<void>;\nexport type UnsubscribeFn = () => void;\n\nexport class TypedEventEmitter<TEvents extends Record<string, EventData>> {\n\t// Use unknown type for storage, will be cast appropriately when called\n\tprivate listeners = new Map<keyof TEvents, Set<EventListener<EventData>>>();\n\tprivate onceListeners = new Map<\n\t\tkeyof TEvents,\n\t\tSet<EventListener<EventData>>\n\t>();\n\n\ton<K extends keyof TEvents>(\n\t\tevent: K,\n\t\tlistener: EventListener<TEvents[K]>,\n\t): UnsubscribeFn {\n\t\tif (!this.listeners.has(event)) {\n\t\t\tthis.listeners.set(event, new Set());\n\t\t}\n\t\tthis.listeners.get(event)!.add(listener as EventListener<EventData>);\n\n\t\treturn () => this.off(event, listener);\n\t}\n\n\tonce<K extends keyof TEvents>(\n\t\tevent: K,\n\t\tlistener: EventListener<TEvents[K]>,\n\t): UnsubscribeFn {\n\t\tif (!this.onceListeners.has(event)) {\n\t\t\tthis.onceListeners.set(event, new Set());\n\t\t}\n\t\tthis.onceListeners.get(event)!.add(listener as EventListener<EventData>);\n\n\t\treturn () => this.off(event, listener);\n\t}\n\n\toff<K extends keyof TEvents>(\n\t\tevent: K,\n\t\tlistener: EventListener<TEvents[K]>,\n\t): void {\n\t\tthis.listeners.get(event)?.delete(listener as EventListener<EventData>);\n\t\tthis.onceListeners.get(event)?.delete(listener as EventListener<EventData>);\n\t}\n\n\tasync emit<K extends keyof TEvents>(\n\t\tevent: K,\n\t\tdata: TEvents[K],\n\t): Promise<void> {\n\t\tconst listeners = this.listeners.get(event);\n\t\tconst onceListeners = this.onceListeners.get(event);\n\n\t\tif (onceListeners) {\n\t\t\tconst listenersToCall = Array.from(onceListeners);\n\t\t\tthis.onceListeners.delete(event);\n\t\t\tfor (const listener of listenersToCall) {\n\t\t\t\tawait listener(data);\n\t\t\t}\n\t\t}\n\n\t\tif (listeners) {\n\t\t\tfor (const listener of Array.from(listeners)) {\n\t\t\t\tawait listener(data);\n\t\t\t}\n\t\t}\n\t}\n\n\tremoveAllListeners(event?: keyof TEvents): void {\n\t\tif (event) {\n\t\t\tthis.listeners.delete(event);\n\t\t\tthis.onceListeners.delete(event);\n\t\t} else {\n\t\t\tthis.listeners.clear();\n\t\t\tthis.onceListeners.clear();\n\t\t}\n\t}\n\n\tlistenerCount(event: keyof TEvents): number {\n\t\tconst regular = this.listeners.get(event)?.size ?? 0;\n\t\tconst once = this.onceListeners.get(event)?.size ?? 0;\n\t\treturn regular + once;\n\t}\n}\n",
26
26
  "import type { IAuthAdapter } from \"../../abstractions/AuthAdapter.js\";\nimport type { TokenPayload } from \"../../types/index.js\";\n\nexport class MockAuthAdapter implements IAuthAdapter {\n\tprivate tokens: Map<string, TokenPayload> = new Map();\n\tprivate revokedTokens: Set<string> = new Set();\n\tprivate simulateLatency: number = 0;\n\tprivate shouldFailAuth: boolean = false;\n\tprivate tokenCounter: number = 0;\n\tprivate currentToken: string | null = null;\n\n\tconstructor(options?: {\n\t\tsimulateLatency?: number;\n\t\tshouldFailAuth?: boolean;\n\t}) {\n\t\tthis.simulateLatency = options?.simulateLatency ?? 0;\n\t\tthis.shouldFailAuth = options?.shouldFailAuth ?? false;\n\t}\n\n\tasync validateToken(token: string): Promise<TokenPayload> {\n\t\tawait this.simulateDelay();\n\n\t\tif (this.shouldFailAuth) {\n\t\t\tthrow new Error(\"Mock auth validation failed\");\n\t\t}\n\n\t\tif (this.revokedTokens.has(token)) {\n\t\t\tthrow new Error(\"Token has been revoked\");\n\t\t}\n\n\t\tconst payload = this.tokens.get(token);\n\t\tif (!payload) {\n\t\t\tthrow new Error(\"Invalid token\");\n\t\t}\n\n\t\t// Check expiration\n\t\tif (payload.expiresAt && payload.expiresAt < Date.now()) {\n\t\t\tthis.tokens.delete(token);\n\t\t\tthrow new Error(\"Token expired\");\n\t\t}\n\n\t\treturn payload;\n\t}\n\n\tasync generateToken(payload: TokenPayload): Promise<string> {\n\t\tawait this.simulateDelay();\n\n\t\tif (this.shouldFailAuth) {\n\t\t\tthrow new Error(\"Mock token generation failed\");\n\t\t}\n\n\t\tconst token = `mock-token-${++this.tokenCounter}`;\n\n\t\t// Set default expiration to 1 hour if not specified\n\t\tconst expiresAt = payload.expiresAt ?? Date.now() + 3600000;\n\n\t\tthis.tokens.set(token, { ...payload, expiresAt });\n\t\treturn token;\n\t}\n\n\tasync refreshToken(token: string): Promise<string> {\n\t\tawait this.simulateDelay();\n\n\t\tif (this.shouldFailAuth) {\n\t\t\tthrow new Error(\"Mock token refresh failed\");\n\t\t}\n\n\t\tconst payload = await this.validateToken(token);\n\n\t\t// Revoke old token\n\t\tawait this.revokeToken(token);\n\n\t\t// Generate new token with extended expiration\n\t\tconst newPayload = {\n\t\t\t...payload,\n\t\t\texpiresAt: Date.now() + 3600000, // 1 hour from now\n\t\t};\n\n\t\treturn this.generateToken(newPayload);\n\t}\n\n\tasync revokeToken(token: string): Promise<void> {\n\t\tawait this.simulateDelay();\n\n\t\tif (this.shouldFailAuth) {\n\t\t\tthrow new Error(\"Mock token revocation failed\");\n\t\t}\n\n\t\tthis.tokens.delete(token);\n\t\tthis.revokedTokens.add(token);\n\t}\n\n\tgetCurrentToken(): string | null {\n\t\treturn this.currentToken;\n\t}\n\n\tisAuthRequired(): boolean {\n\t\treturn false; // Mock adapter doesn't require auth by default\n\t}\n\n\tgetAuthTimeout(): number {\n\t\treturn 10000; // 10 seconds for testing\n\t}\n\n\t// Test helper methods\n\tprivate async simulateDelay(): Promise<void> {\n\t\tif (this.simulateLatency > 0) {\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, this.simulateLatency));\n\t\t}\n\t}\n\n\t/**\n\t * Create and store a test token for a user\n\t */\n\tasync createTestToken(\n\t\tuserId: string,\n\t\toptions?: {\n\t\t\tpermissions?: string[];\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t\texpiresIn?: number;\n\t\t},\n\t): Promise<string> {\n\t\tconst payload: TokenPayload = {\n\t\t\tuserId,\n\t\t\tpermissions: options?.permissions ?? [\"read\", \"write\"],\n\t\t\tmetadata: options?.metadata,\n\t\t\texpiresAt: options?.expiresIn\n\t\t\t\t? Date.now() + options.expiresIn\n\t\t\t\t: undefined,\n\t\t};\n\t\tconst token = await this.generateToken(payload);\n\t\tthis.currentToken = token;\n\t\treturn token;\n\t}\n\n\tgetTokenCount(): number {\n\t\treturn this.tokens.size;\n\t}\n\n\tgetRevokedTokenCount(): number {\n\t\treturn this.revokedTokens.size;\n\t}\n\n\tclearTokens(): void {\n\t\tthis.tokens.clear();\n\t\tthis.revokedTokens.clear();\n\t\tthis.currentToken = null;\n\t}\n\n\tsetFailAuth(fail: boolean): void {\n\t\tthis.shouldFailAuth = fail;\n\t}\n\n\tsetCurrentToken(token: string | null): void {\n\t\tthis.currentToken = token;\n\t}\n}\n",
27
27
  "/**\n * Mock RTCDataChannel for simulation testing\n *\n * Simulates WebRTC data channel behavior without actual network I/O.\n * Supports linking two channels for bidirectional message passing.\n */\n\nexport type RTCDataChannelState = \"connecting\" | \"open\" | \"closing\" | \"closed\";\n\nexport interface MockRTCDataChannelConfig {\n\t/**\n\t * Simulated message delivery latency (ms)\n\t * @default 1\n\t */\n\tsimulateLatency?: number;\n\n\t/**\n\t * Maximum message size in bytes\n\t * @default 262144 (256 KB)\n\t */\n\tmaxMessageSize?: number;\n}\n\nexport class MockRTCDataChannel {\n\tpublic readonly label: string;\n\tpublic readonly ordered: boolean;\n\tpublic readonly id: number;\n\n\tprivate _readyState: RTCDataChannelState = \"connecting\";\n\tprivate _bufferedAmount = 0;\n\tprivate _linkedChannel: MockRTCDataChannel | null = null;\n\tprivate messageQueue: Array<string | ArrayBuffer> = [];\n\tprivate config: Required<MockRTCDataChannelConfig>;\n\tprivate static channelIdCounter = 0;\n\n\t// Event handlers\n\tpublic onopen: (() => void) | null = null;\n\tpublic onclose: (() => void) | null = null;\n\tpublic onerror: ((event: { error: Error }) => void) | null = null;\n\tpublic onmessage: ((event: { data: string | ArrayBuffer }) => void) | null =\n\t\tnull;\n\tpublic onbufferedamountlow: (() => void) | null = null;\n\n\tpublic bufferedAmountLowThreshold = 0;\n\n\tconstructor(\n\t\tlabel: string,\n\t\toptions?: { ordered?: boolean; id?: number },\n\t\tconfig?: MockRTCDataChannelConfig,\n\t) {\n\t\tthis.label = label;\n\t\tthis.ordered = options?.ordered ?? true;\n\t\tthis.id = options?.id ?? MockRTCDataChannel.channelIdCounter++;\n\t\tthis.config = {\n\t\t\tsimulateLatency: config?.simulateLatency ?? 1,\n\t\t\tmaxMessageSize: config?.maxMessageSize ?? 262144,\n\t\t};\n\t}\n\n\tget readyState(): RTCDataChannelState {\n\t\treturn this._readyState;\n\t}\n\n\tget bufferedAmount(): number {\n\t\treturn this._bufferedAmount;\n\t}\n\n\t/**\n\t * Send data to the linked peer channel\n\t */\n\tsend(data: string | ArrayBuffer): void {\n\t\tif (this._readyState !== \"open\") {\n\t\t\tthrow new Error(`Cannot send on channel in state: ${this._readyState}`);\n\t\t}\n\n\t\tconst size = typeof data === \"string\" ? data.length : data.byteLength;\n\n\t\tif (size > this.config.maxMessageSize) {\n\t\t\tthrow new Error(\n\t\t\t\t`Message size ${size} exceeds maximum ${this.config.maxMessageSize}`,\n\t\t\t);\n\t\t}\n\n\t\tthis._bufferedAmount += size;\n\n\t\t// Deliver to linked channel\n\t\tif (this._linkedChannel && this._linkedChannel._readyState === \"open\") {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._bufferedAmount -= size;\n\n\t\t\t\t// Check buffered amount low threshold\n\t\t\t\tif (this._bufferedAmount <= this.bufferedAmountLowThreshold) {\n\t\t\t\t\tthis.onbufferedamountlow?.();\n\t\t\t\t}\n\n\t\t\t\tthis._linkedChannel?.onmessage?.({ data });\n\t\t\t}, this.config.simulateLatency);\n\t\t} else {\n\t\t\t// Queue for later delivery when channel opens\n\t\t\tthis.messageQueue.push(data);\n\t\t}\n\t}\n\n\t/**\n\t * Close the data channel\n\t */\n\tclose(): void {\n\t\tif (this._readyState === \"closed\" || this._readyState === \"closing\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._readyState = \"closing\";\n\n\t\tsetTimeout(() => {\n\t\t\tthis._readyState = \"closed\";\n\t\t\tthis.onclose?.();\n\n\t\t\t// Notify linked channel\n\t\t\tif (this._linkedChannel && this._linkedChannel._readyState !== \"closed\") {\n\t\t\t\tthis._linkedChannel._handleRemoteClose();\n\t\t\t}\n\t\t}, this.config.simulateLatency);\n\t}\n\n\t// Internal methods (called by MockRTCPeerConnection)\n\n\t/**\n\t * Link this channel to a remote channel for message passing\n\t * @internal\n\t */\n\t_linkChannel(channel: MockRTCDataChannel): void {\n\t\tthis._linkedChannel = channel;\n\n\t\t// Deliver any queued messages once linked and both are open\n\t\tif (this._readyState === \"open\" && channel._readyState === \"open\") {\n\t\t\tthis._flushQueue();\n\t\t}\n\t}\n\n\t/**\n\t * Open the channel (called when peer connection is established)\n\t * @internal\n\t */\n\t_open(): void {\n\t\tif (this._readyState === \"connecting\") {\n\t\t\tthis._readyState = \"open\";\n\t\t\tthis.onopen?.();\n\n\t\t\t// Flush queued messages\n\t\t\tif (this._linkedChannel?._readyState === \"open\") {\n\t\t\t\tthis._flushQueue();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Handle remote channel closing\n\t * @internal\n\t */\n\t_handleRemoteClose(): void {\n\t\tif (this._readyState !== \"closed\" && this._readyState !== \"closing\") {\n\t\t\tthis._readyState = \"closed\";\n\t\t\tthis.onclose?.();\n\t\t}\n\t}\n\n\t/**\n\t * Get the linked channel (for testing)\n\t * @internal\n\t */\n\t_getLinkedChannel(): MockRTCDataChannel | null {\n\t\treturn this._linkedChannel;\n\t}\n\n\t/**\n\t * Flush queued messages to linked channel\n\t */\n\tprivate _flushQueue(): void {\n\t\tfor (const data of this.messageQueue) {\n\t\t\tconst size = typeof data === \"string\" ? data.length : data.byteLength;\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._bufferedAmount -= size;\n\t\t\t\tthis._linkedChannel?.onmessage?.({ data });\n\t\t\t}, this.config.simulateLatency);\n\t\t}\n\t\tthis.messageQueue = [];\n\t}\n\n\t/**\n\t * Reset the channel ID counter (for testing)\n\t */\n\tstatic resetIdCounter(): void {\n\t\tMockRTCDataChannel.channelIdCounter = 0;\n\t}\n}\n",
@@ -34,15 +34,15 @@
34
34
  "import type { Server as HttpServer, IncomingMessage } from \"http\";\nimport type { Server as HttpsServer } from \"https\";\nimport { WebSocket, WebSocketServer } from \"ws\";\nimport type { IAuthAdapter } from \"../../abstractions/AuthAdapter.js\";\nimport type { ITransportAdapter } from \"../../abstractions/TransportAdapter.js\";\nimport type {\n\tCloseHandler,\n\tConnectionOptions,\n\tConnectionState,\n\tErrorHandler,\n\tMessage,\n\tMessageHandler,\n} from \"../../types/index.js\";\n\ninterface ClientConnection {\n\tid: string;\n\tws: WebSocket;\n\tuserId?: string;\n\tauthenticated: boolean;\n\tmetadata?: Record<string, unknown>;\n\tauthTimeout?: NodeJS.Timeout;\n\tconnectedAt: number;\n}\n\nexport interface WebSocketServerTransportConfig {\n\tauthTimeout?: number;\n\tcloseOnAuthFailure?: boolean;\n\trequireAuth?: boolean;\n}\n\nexport class WebSocketServerTransportAdapter implements ITransportAdapter {\n\tprivate state: ConnectionState = \"disconnected\";\n\tprivate messageHandlers: Set<MessageHandler> = new Set();\n\tprivate errorHandlers: Set<ErrorHandler> = new Set();\n\tprivate closeHandlers: Set<CloseHandler> = new Set();\n\n\t// Standalone mode properties\n\tprivate wss?: WebSocketServer;\n\tprivate serverUrl?: string;\n\n\t// Integration mode properties\n\tprivate attachedServer?: HttpServer | HttpsServer;\n\tprivate attachedWss?: WebSocketServer;\n\tprivate webSocketPath?: string;\n\n\t// Client management\n\tprivate clients = new Map<string, ClientConnection>();\n\tprivate mode: \"standalone\" | \"integration\" = \"standalone\";\n\n\t// Authentication\n\tprivate authAdapter?: IAuthAdapter;\n\tprivate config: WebSocketServerTransportConfig;\n\n\tconstructor(config?: WebSocketServerTransportConfig) {\n\t\tthis.config = {\n\t\t\tauthTimeout: config?.authTimeout ?? 5000,\n\t\t\tcloseOnAuthFailure: config?.closeOnAuthFailure ?? false,\n\t\t\trequireAuth: config?.requireAuth ?? false,\n\t\t\t...config,\n\t\t};\n\t}\n\n\t// Set the auth adapter\n\tsetAuthAdapter(auth: IAuthAdapter): void {\n\t\tthis.authAdapter = auth;\n\t\t// Use auth adapter's preference only if requireAuth is not already true\n\t\t// This allows explicit requireAuth: true in config to take precedence\n\t\tif (auth.isAuthRequired && !this.config.requireAuth) {\n\t\t\tthis.config.requireAuth = auth.isAuthRequired();\n\t\t}\n\t\t// For authTimeout, use adapter's value if not explicitly set (not matching default)\n\t\tif (auth.getAuthTimeout && this.config.authTimeout === 5000) {\n\t\t\tthis.config.authTimeout = auth.getAuthTimeout();\n\t\t}\n\t}\n\n\t// Standalone mode implementation\n\tasync connect(url: string, _options?: ConnectionOptions): Promise<void> {\n\t\tif (this.state === \"connected\" || this.state === \"connecting\") {\n\t\t\tthrow new Error(\"Already connected or connecting\");\n\t\t}\n\n\t\tthis.state = \"connecting\";\n\t\tthis.serverUrl = url;\n\t\tthis.mode = \"standalone\";\n\n\t\ttry {\n\t\t\t// Extract port from URL\n\t\t\tconst urlObj = new URL(url);\n\t\t\tconst port =\n\t\t\t\tparseInt(urlObj.port) || (urlObj.protocol === \"wss:\" ? 443 : 80);\n\n\t\t\t// Create WebSocket server\n\t\t\tthis.wss = new WebSocketServer({ port });\n\n\t\t\tthis.wss.on(\"connection\", (ws, req) => {\n\t\t\t\tthis.handleConnection(ws, req);\n\t\t\t});\n\n\t\t\tthis.wss.on(\"error\", (error) => {\n\t\t\t\tthis.errorHandlers.forEach((handler) => handler(error));\n\t\t\t});\n\n\t\t\tthis.wss.on(\"close\", () => {\n\t\t\t\tthis.state = \"disconnected\";\n\t\t\t\tthis.closeHandlers.forEach((handler) => handler(1000, \"Server closed\"));\n\t\t\t});\n\n\t\t\tthis.state = \"connected\";\n\t\t} catch (error) {\n\t\t\tthis.state = \"disconnected\";\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t// Integration mode implementation\n\tasync attach(\n\t\tserver: HttpServer | HttpsServer,\n\t\tpath: string = \"/ws\",\n\t): Promise<void> {\n\t\tif (this.state === \"connected\" || this.state === \"connecting\") {\n\t\t\tthrow new Error(\"Already connected or connecting\");\n\t\t}\n\n\t\tthis.state = \"connecting\";\n\t\tthis.attachedServer = server;\n\t\tthis.webSocketPath = path;\n\t\tthis.mode = \"integration\";\n\n\t\ttry {\n\t\t\t// Create WebSocket server attached to the existing HTTP server\n\t\t\tthis.wss = new WebSocketServer({\n\t\t\t\tserver,\n\t\t\t\tpath,\n\t\t\t\tperMessageDeflate: false,\n\t\t\t});\n\n\t\t\tthis.wss.on(\"connection\", (ws, req) => {\n\t\t\t\tthis.handleConnection(ws, req);\n\t\t\t});\n\n\t\t\tthis.wss.on(\"error\", (error) => {\n\t\t\t\tthis.errorHandlers.forEach((handler) => handler(error));\n\t\t\t});\n\n\t\t\tthis.state = \"connected\";\n\t\t} catch (error) {\n\t\t\tthis.state = \"disconnected\";\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync attachToWebSocketServer(wss: WebSocketServer): Promise<void> {\n\t\tif (this.state === \"connected\" || this.state === \"connecting\") {\n\t\t\tthrow new Error(\"Already connected or connecting\");\n\t\t}\n\n\t\tthis.state = \"connecting\";\n\t\tthis.attachedWss = wss;\n\t\tthis.mode = \"integration\";\n\n\t\ttry {\n\t\t\tthis.wss = wss;\n\n\t\t\tthis.wss.on(\"connection\", (ws, req) => {\n\t\t\t\tthis.handleConnection(ws, req);\n\t\t\t});\n\n\t\t\tthis.wss.on(\"error\", (error) => {\n\t\t\t\tthis.errorHandlers.forEach((handler) => handler(error));\n\t\t\t});\n\n\t\t\tthis.state = \"connected\";\n\t\t} catch (error) {\n\t\t\tthis.state = \"disconnected\";\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async handleConnection(\n\t\tws: WebSocket,\n\t\treq: IncomingMessage,\n\t): Promise<void> {\n\t\tconst clientId = this.generateId();\n\n\t\t// Step 1: Try token authentication via Authorization header\n\t\tlet authenticated = false;\n\t\tlet userId: string | undefined;\n\t\tlet metadata: Record<string, unknown> | undefined;\n\n\t\tif (this.authAdapter && req.headers.authorization) {\n\t\t\tconst token = this.extractBearerToken(\n\t\t\t\treq.headers.authorization as string,\n\t\t\t);\n\t\t\tif (token) {\n\t\t\t\ttry {\n\t\t\t\t\tconst tokenPayload = await this.authAdapter.validateToken(token);\n\t\t\t\t\tauthenticated = true;\n\t\t\t\t\tuserId = tokenPayload.userId;\n\t\t\t\t\tmetadata = tokenPayload.metadata;\n\t\t\t\t} catch {\n\t\t\t\t\t// Header auth failed but don't reject connection yet\n\t\t\t\t\t// Client can still authenticate via message\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Step 2: Create client with auth state\n\t\tconst client: ClientConnection = {\n\t\t\tid: clientId,\n\t\t\tws,\n\t\t\tauthenticated,\n\t\t\tuserId,\n\t\t\tmetadata,\n\t\t\tconnectedAt: Date.now(),\n\t\t};\n\n\t\tthis.clients.set(clientId, client);\n\n\t\t// Step 3: Set up message handling\n\t\tws.on(\"message\", (data) => {\n\t\t\tthis.handleClientMessage(clientId, data);\n\t\t});\n\n\t\tws.on(\"error\", (error) => {\n\t\t\tthis.errorHandlers.forEach((handler) => handler(error));\n\t\t});\n\n\t\tws.on(\"close\", (_code, _reason) => {\n\t\t\t// Clear auth timeout if exists\n\t\t\tif (client.authTimeout) {\n\t\t\t\tclearTimeout(client.authTimeout);\n\t\t\t}\n\t\t\tthis.clients.delete(clientId);\n\t\t});\n\n\t\t// Step 4: Set auth timeout if not authenticated and auth is required\n\t\tif (!authenticated && this.config.requireAuth && this.authAdapter) {\n\t\t\tclient.authTimeout = setTimeout(() => {\n\t\t\t\tif (!client.authenticated) {\n\t\t\t\t\tws.close(1008, \"Authentication timeout\");\n\t\t\t\t\tthis.clients.delete(clientId);\n\t\t\t\t}\n\t\t\t}, this.config.authTimeout);\n\t\t}\n\n\t\t// Step 5: Notify about connection (with auth status)\n\t\tconst connectionMessage: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"connection\",\n\t\t\tpayload: {\n\t\t\t\tclientId,\n\t\t\t\tauthenticated,\n\t\t\t\tuserId: client.userId,\n\t\t\t\tmetadata: client.metadata,\n\t\t\t},\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tthis.messageHandlers.forEach((handler) => handler(connectionMessage));\n\t}\n\n\tprivate async handleClientMessage(\n\t\tclientId: string,\n\t\tdata: Buffer | ArrayBuffer | Buffer[],\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) return;\n\n\t\ttry {\n\t\t\tconst message = JSON.parse(data.toString()) as Message;\n\n\t\t\t// Special handling for authentication messages\n\t\t\tif (\n\t\t\t\tmessage.type === \"authenticate\" &&\n\t\t\t\t!client.authenticated &&\n\t\t\t\tthis.authAdapter\n\t\t\t) {\n\t\t\t\tawait this.handleAuthMessage(client, message);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Reject messages from unauthenticated clients if auth is required\n\t\t\tif (this.config.requireAuth && !client.authenticated) {\n\t\t\t\tthis.sendToClient(client, {\n\t\t\t\t\tid: this.generateId(),\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tpayload: { error: \"Authentication required\" },\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Add clientId to message payload for routing\n\t\t\tconst enrichedMessage = {\n\t\t\t\t...message,\n\t\t\t\tpayload: {\n\t\t\t\t\t...(message.payload as object),\n\t\t\t\t\tclientId,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tthis.messageHandlers.forEach((handler) => handler(enrichedMessage));\n\t\t} catch (error) {\n\t\t\tthis.errorHandlers.forEach((handler) => handler(error as Error));\n\t\t}\n\t}\n\n\tprivate async handleAuthMessage(\n\t\tclient: ClientConnection,\n\t\tmessage: Message,\n\t): Promise<void> {\n\t\tif (!this.authAdapter) {\n\t\t\tthis.sendToClient(client, {\n\t\t\t\tid: this.generateId(),\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tpayload: { success: false, error: \"No auth adapter configured\" },\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst payload = message.payload as Record<string, unknown>;\n\n\t\t// Token-based authentication only\n\t\tif (!payload.token || typeof payload.token !== \"string\") {\n\t\t\tthis.sendToClient(client, {\n\t\t\t\tid: this.generateId(),\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tpayload: { success: false, error: \"Token required for authentication\" },\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst tokenPayload = await this.authAdapter.validateToken(payload.token);\n\n\t\t\t// Clear auth timeout\n\t\t\tif (client.authTimeout) {\n\t\t\t\tclearTimeout(client.authTimeout);\n\t\t\t\tclient.authTimeout = undefined;\n\t\t\t}\n\n\t\t\t// Update client state\n\t\t\tclient.authenticated = true;\n\t\t\tclient.userId = tokenPayload.userId;\n\t\t\tclient.metadata = tokenPayload.metadata;\n\n\t\t\t// Send success response\n\t\t\tthis.sendToClient(client, {\n\t\t\t\tid: this.generateId(),\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tpayload: {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tuserId: client.userId,\n\t\t\t\t},\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\n\t\t\t// Notify handlers about authentication\n\t\t\tconst authMessage: Message = {\n\t\t\t\tid: this.generateId(),\n\t\t\t\ttype: \"client_authenticated\",\n\t\t\t\tpayload: {\n\t\t\t\t\tclientId: client.id,\n\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\tmetadata: client.metadata,\n\t\t\t\t},\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t};\n\n\t\t\tthis.messageHandlers.forEach((handler) => handler(authMessage));\n\t\t} catch (error) {\n\t\t\tthis.sendToClient(client, {\n\t\t\t\tid: this.generateId(),\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tpayload: {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: (error as Error).message,\n\t\t\t\t},\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\n\t\t\t// Optionally close connection on auth failure\n\t\t\tif (this.config.closeOnAuthFailure) {\n\t\t\t\tclient.ws.close(1008, \"Authentication failed\");\n\t\t\t\tthis.clients.delete(client.id);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate extractBearerToken(authHeader: string): string | null {\n\t\tif (authHeader.startsWith(\"Bearer \")) {\n\t\t\treturn authHeader.substring(7);\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate sendToClient(client: ClientConnection, message: Message): void {\n\t\tif (client.ws.readyState === WebSocket.OPEN) {\n\t\t\tclient.ws.send(JSON.stringify(message));\n\t\t}\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tif (this.state === \"disconnected\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.state = \"disconnecting\";\n\n\t\t// Close all client connections\n\t\tfor (const [_clientId, client] of this.clients) {\n\t\t\ttry {\n\t\t\t\tif (client.authTimeout) {\n\t\t\t\t\tclearTimeout(client.authTimeout);\n\t\t\t\t}\n\t\t\t\tclient.ws.close(1000, \"Server shutting down\");\n\t\t\t} catch {\n\t\t\t\t// Ignore errors when closing individual connections\n\t\t\t}\n\t\t}\n\t\tthis.clients.clear();\n\n\t\t// Close the WebSocket server (only if we created it)\n\t\tif (this.wss && this.mode === \"standalone\") {\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tthis.wss!.close(() => resolve());\n\t\t\t});\n\t\t}\n\n\t\tthis.state = \"disconnected\";\n\t\tthis.wss = undefined;\n\t\tthis.attachedServer = undefined;\n\t\tthis.attachedWss = undefined;\n\t}\n\n\tasync send(message: Message): Promise<void> {\n\t\tif (this.state !== \"connected\") {\n\t\t\tthrow new Error(\"Not connected\");\n\t\t}\n\n\t\t// Extract clientId from message payload for routing\n\t\tconst payload = message.payload as {\n\t\t\tclientId?: string;\n\t\t\t[key: string]: unknown;\n\t\t};\n\t\tconst { clientId, ...clientMessage } = payload;\n\n\t\tif (!clientId) {\n\t\t\tthrow new Error(\"Message must contain clientId in payload for routing\");\n\t\t}\n\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\tthrow new Error(`Client ${clientId} not found`);\n\t\t}\n\n\t\tif (client.ws.readyState !== WebSocket.OPEN) {\n\t\t\tthrow new Error(`Client ${clientId} connection is not open`);\n\t\t}\n\n\t\t// Fully unwrap the server_message envelope\n\t\t// The server_message wrapper is used internally for routing between BaseServer and transport\n\t\t// We need to extract the actual message from inside the wrapper before sending to the client\n\t\tconst messageToSend =\n\t\t\tmessage.type === \"server_message\" && clientMessage.type\n\t\t\t\t? {\n\t\t\t\t\t\tid: message.id,\n\t\t\t\t\t\ttype: clientMessage.type as string,\n\t\t\t\t\t\tpayload:\n\t\t\t\t\t\t\tclientMessage.payload ||\n\t\t\t\t\t\t\t((): Record<string, unknown> => {\n\t\t\t\t\t\t\t\t// If there's no explicit payload field, use all remaining fields except 'type'\n\t\t\t\t\t\t\t\tconst { type, ...rest } = clientMessage;\n\t\t\t\t\t\t\t\treturn rest;\n\t\t\t\t\t\t\t})(),\n\t\t\t\t\t\ttimestamp: message.timestamp,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\t...message,\n\t\t\t\t\t\tpayload: clientMessage,\n\t\t\t\t\t};\n\n\t\tclient.ws.send(JSON.stringify(messageToSend));\n\t}\n\n\tonMessage(handler: MessageHandler): void {\n\t\tthis.messageHandlers.add(handler);\n\t}\n\n\tonError(handler: ErrorHandler): void {\n\t\tthis.errorHandlers.add(handler);\n\t}\n\n\tonClose(handler: CloseHandler): void {\n\t\tthis.closeHandlers.add(handler);\n\t}\n\n\tgetState(): ConnectionState {\n\t\treturn this.state;\n\t}\n\n\tisConnected(): boolean {\n\t\treturn this.state === \"connected\";\n\t}\n\n\t// Utility methods\n\tgetConnectedClients(): ClientConnection[] {\n\t\treturn Array.from(this.clients.values());\n\t}\n\n\tgetAuthenticatedClients(): ClientConnection[] {\n\t\treturn Array.from(this.clients.values()).filter((c) => c.authenticated);\n\t}\n\n\tgetClientCount(): number {\n\t\treturn this.clients.size;\n\t}\n\n\tgetMode(): \"standalone\" | \"integration\" {\n\t\treturn this.mode;\n\t}\n\n\tisAuthRequired(): boolean {\n\t\treturn this.config.requireAuth ?? false;\n\t}\n\n\tprivate generateId(): string {\n\t\treturn Math.random().toString(36).substring(2) + Date.now().toString(36);\n\t}\n}\n",
35
35
  "import type { ITransportAdapter } from \"../../abstractions/TransportAdapter.js\";\nimport type {\n\tCloseHandler,\n\tConnectionOptions,\n\tConnectionState,\n\tErrorHandler,\n\tMessage,\n\tMessageHandler,\n} from \"../../types/index.js\";\n\nexport interface BrowserWebSocketConfig {\n\t/**\n\t * Connection timeout in milliseconds\n\t * @default 30000\n\t */\n\tconnectionTimeout?: number;\n\n\t/**\n\t * Enable automatic ping/pong for connection health checks\n\t * @default true\n\t */\n\tenableHeartbeat?: boolean;\n\n\t/**\n\t * Heartbeat interval in milliseconds\n\t * @default 30000\n\t */\n\theartbeatInterval?: number;\n\n\t/**\n\t * Authorization token for WebSocket connection\n\t */\n\tauthToken?: string;\n}\n\n/**\n * Browser-compatible WebSocket transport adapter using native WebSocket API\n *\n * This adapter is designed for use in browser environments (Electron renderer, React, etc.)\n * and uses the native browser WebSocket API instead of the 'ws' npm package.\n *\n * For Node.js environments, use WebSocketClientTransportAdapter instead.\n *\n * @example\n * ```typescript\n * const transport = new BrowserWebSocketTransportAdapter();\n * const client = new ClientBuilder()\n * .withTransport(transport)\n * .build();\n *\n * await client.connect('ws://localhost:3000');\n * ```\n */\nexport class BrowserWebSocketTransportAdapter implements ITransportAdapter {\n\tprivate ws?: WebSocket; // Native browser WebSocket\n\tprivate state: ConnectionState = \"disconnected\";\n\tprivate messageHandlers: Set<MessageHandler> = new Set();\n\tprivate errorHandlers: Set<ErrorHandler> = new Set();\n\tprivate closeHandlers: Set<CloseHandler> = new Set();\n\tprivate config: Omit<Required<BrowserWebSocketConfig>, \"authToken\"> & {\n\t\tauthToken?: string;\n\t};\n\tprivate heartbeatTimer?: number; // Browser uses number for setTimeout\n\tprivate connectionTimer?: number;\n\tprivate authToken?: string;\n\n\tconstructor(config?: BrowserWebSocketConfig) {\n\t\tthis.config = {\n\t\t\tconnectionTimeout: config?.connectionTimeout ?? 30000,\n\t\t\tenableHeartbeat: config?.enableHeartbeat ?? true,\n\t\t\theartbeatInterval: config?.heartbeatInterval ?? 30000,\n\t\t\tauthToken: config?.authToken,\n\t\t};\n\t\tthis.authToken = config?.authToken;\n\t}\n\n\t/**\n\t * Set authentication token for WebSocket connection\n\t * Note: Browser WebSocket doesn't support custom headers directly,\n\t * so we'll send auth token in first message after connection\n\t */\n\tsetAuthToken(token: string): void {\n\t\tthis.authToken = token;\n\t}\n\n\tasync connect(url: string, _options?: ConnectionOptions): Promise<void> {\n\t\tif (this.state === \"connected\" || this.state === \"connecting\") {\n\t\t\tthrow new Error(\"Already connected or connecting\");\n\t\t}\n\n\t\tthis.state = \"connecting\";\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\t// For browser WebSocket, we append auth token as query param if needed\n\t\t\t\t// This is a workaround since browser WebSocket doesn't support custom headers\n\t\t\t\tconst wsUrl = this.authToken\n\t\t\t\t\t? `${url}${url.includes(\"?\") ? \"&\" : \"?\"}token=${encodeURIComponent(this.authToken)}`\n\t\t\t\t\t: url;\n\n\t\t\t\t// Create native browser WebSocket\n\t\t\t\tthis.ws = new WebSocket(wsUrl);\n\n\t\t\t\t// Set up connection timeout\n\t\t\t\tthis.connectionTimer = window.setTimeout(() => {\n\t\t\t\t\tif (this.state === \"connecting\") {\n\t\t\t\t\t\tthis.ws?.close();\n\t\t\t\t\t\tthis.state = \"disconnected\";\n\t\t\t\t\t\tconst error = new Error(\"Connection timeout\");\n\t\t\t\t\t\tthis.errorHandlers.forEach((handler) => handler(error));\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t}, this.config.connectionTimeout);\n\n\t\t\t\t// Handle connection open\n\t\t\t\tthis.ws.onopen = () => {\n\t\t\t\t\tif (this.connectionTimer) {\n\t\t\t\t\t\tclearTimeout(this.connectionTimer);\n\t\t\t\t\t\tthis.connectionTimer = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.state = \"connected\";\n\n\t\t\t\t\t// Start heartbeat if enabled\n\t\t\t\t\tif (this.config.enableHeartbeat) {\n\t\t\t\t\t\tthis.startHeartbeat();\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve();\n\t\t\t\t};\n\n\t\t\t\t// Handle incoming messages\n\t\t\t\tthis.ws.onmessage = (event: MessageEvent) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst message = JSON.parse(event.data) as Message;\n\t\t\t\t\t\tthis.messageHandlers.forEach((handler) => handler(message));\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = new Error(`Failed to parse message: ${error}`);\n\t\t\t\t\t\tthis.errorHandlers.forEach((handler) => handler(err));\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Handle errors\n\t\t\t\tthis.ws.onerror = (_event: Event) => {\n\t\t\t\t\tif (this.connectionTimer) {\n\t\t\t\t\t\tclearTimeout(this.connectionTimer);\n\t\t\t\t\t\tthis.connectionTimer = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst error = new Error(\"WebSocket error occurred\");\n\t\t\t\t\tthis.errorHandlers.forEach((handler) => handler(error));\n\n\t\t\t\t\tif (this.state === \"connecting\") {\n\t\t\t\t\t\tthis.state = \"disconnected\";\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Handle connection close\n\t\t\t\tthis.ws.onclose = (event: CloseEvent) => {\n\t\t\t\t\tif (this.connectionTimer) {\n\t\t\t\t\t\tclearTimeout(this.connectionTimer);\n\t\t\t\t\t\tthis.connectionTimer = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.stopHeartbeat();\n\n\t\t\t\t\tconst wasConnected = this.state === \"connected\";\n\t\t\t\t\tconst wasConnecting = this.state === \"connecting\";\n\t\t\t\t\tthis.state = \"disconnected\";\n\n\t\t\t\t\tif (wasConnected) {\n\t\t\t\t\t\tthis.closeHandlers.forEach((handler) =>\n\t\t\t\t\t\t\thandler(event.code, event.reason || \"Connection closed\"),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (wasConnecting) {\n\t\t\t\t\t\treject(new Error(`Connection closed: ${event.reason}`));\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tif (this.connectionTimer) {\n\t\t\t\t\tclearTimeout(this.connectionTimer);\n\t\t\t\t\tthis.connectionTimer = undefined;\n\t\t\t\t}\n\t\t\t\tthis.state = \"disconnected\";\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tif (this.state === \"disconnected\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.state = \"disconnecting\";\n\t\tthis.stopHeartbeat();\n\n\t\tif (this.connectionTimer) {\n\t\t\tclearTimeout(this.connectionTimer);\n\t\t\tthis.connectionTimer = undefined;\n\t\t}\n\n\t\tif (this.ws) {\n\t\t\t// Close with normal closure code\n\t\t\tthis.ws.close(1000, \"Client disconnecting\");\n\n\t\t\t// Wait for close event or timeout\n\t\t\tawait new Promise<void>((resolve) => {\n\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\tresolve();\n\t\t\t\t}, 5000);\n\n\t\t\t\tconst onClose = () => {\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\tresolve();\n\t\t\t\t};\n\n\t\t\t\tif (this.ws) {\n\t\t\t\t\tthis.ws.addEventListener(\"close\", onClose, { once: true });\n\t\t\t\t} else {\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.ws = undefined;\n\t\t}\n\n\t\tthis.state = \"disconnected\";\n\t}\n\n\tasync send(message: Message): Promise<void> {\n\t\tif (this.state !== \"connected\") {\n\t\t\tthrow new Error(\"Not connected\");\n\t\t}\n\n\t\tif (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n\t\t\tthrow new Error(\"WebSocket connection is not open\");\n\t\t}\n\n\t\ttry {\n\t\t\tconst data = JSON.stringify(message);\n\t\t\tthis.ws.send(data);\n\t\t} catch (error) {\n\t\t\tthis.errorHandlers.forEach((handler) => handler(error as Error));\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tonMessage(handler: MessageHandler): void {\n\t\tthis.messageHandlers.add(handler);\n\t}\n\n\tonError(handler: ErrorHandler): void {\n\t\tthis.errorHandlers.add(handler);\n\t}\n\n\tonClose(handler: CloseHandler): void {\n\t\tthis.closeHandlers.add(handler);\n\t}\n\n\tgetState(): ConnectionState {\n\t\treturn this.state;\n\t}\n\n\tisConnected(): boolean {\n\t\treturn this.state === \"connected\" && this.ws?.readyState === WebSocket.OPEN;\n\t}\n\n\t/**\n\t * Get the underlying WebSocket instance\n\t * Useful for advanced use cases\n\t */\n\tgetWebSocket(): WebSocket | undefined {\n\t\treturn this.ws;\n\t}\n\n\t// Private methods\n\n\tprivate startHeartbeat(): void {\n\t\tif (this.heartbeatTimer) {\n\t\t\tclearInterval(this.heartbeatTimer);\n\t\t}\n\n\t\tthis.heartbeatTimer = window.setInterval(() => {\n\t\t\tif (this.ws && this.ws.readyState === WebSocket.OPEN) {\n\t\t\t\t// Send an actual heartbeat message instead of just a WebSocket ping\n\t\t\t\t// This ensures the server processes it and updates presence activity\n\t\t\t\tconst heartbeatMessage: Message = {\n\t\t\t\t\tid: `heartbeat-${Date.now()}`,\n\t\t\t\t\ttype: \"heartbeat\",\n\t\t\t\t\tpayload: { timestamp: Date.now() },\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t};\n\t\t\t\tthis.ws.send(JSON.stringify(heartbeatMessage));\n\t\t\t}\n\t\t}, this.config.heartbeatInterval);\n\t}\n\n\tprivate stopHeartbeat(): void {\n\t\tif (this.heartbeatTimer) {\n\t\t\tclearInterval(this.heartbeatTimer);\n\t\t\tthis.heartbeatTimer = undefined;\n\t\t}\n\t}\n}\n",
36
36
  "import type { Event } from \"./events.js\";\nimport type { Lock } from \"./lock.js\";\n\nexport type RoomPermission = \"read\" | \"write\" | \"admin\";\n\nexport interface Room {\n\tid: string;\n\tname: string;\n\tcreatedAt: number;\n\tmaxUsers?: number;\n\tmaxHistory?: number;\n\tpermissions?: RoomPermission[];\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface RoomUser {\n\tid: string;\n\tusername: string;\n\temail?: string;\n\tjoinedAt: number;\n\tlastActivity: number;\n\tpermissions: RoomPermission[];\n\tstatus: UserStatus;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport type UserStatus = \"online\" | \"away\" | \"offline\";\n\nexport interface RoomState {\n\troom: Room;\n\tusers: Map<string, RoomUser>;\n\teventHistory: Array<Event>;\n\tlocks: Map<string, Lock>;\n}\n\n/**\n * Serializable version of RoomState for JSON transmission over WebSocket\n * Maps are converted to plain objects for JSON compatibility\n */\nexport interface SerializableRoomState {\n\troom: Room;\n\tusers: Record<string, RoomUser>;\n\teventHistory: Array<Event>;\n\tlocks: Record<string, Lock>;\n}\n\n/**\n * Convert RoomState with Maps to a serializable format for JSON transmission\n */\nexport function serializeRoomState(state: RoomState): SerializableRoomState {\n\treturn {\n\t\troom: state.room,\n\t\tusers: Object.fromEntries(state.users),\n\t\teventHistory: state.eventHistory,\n\t\tlocks: Object.fromEntries(state.locks),\n\t};\n}\n\n/**\n * Convert serialized RoomState back to proper RoomState with Maps\n */\nexport function deserializeRoomState(\n\tserialized: SerializableRoomState,\n): RoomState {\n\treturn {\n\t\troom: serialized.room,\n\t\tusers: new Map(Object.entries(serialized.users)),\n\t\teventHistory: serialized.eventHistory,\n\t\tlocks: new Map(Object.entries(serialized.locks)),\n\t};\n}\n\nexport interface RoomConfig {\n\tname?: string;\n\tmaxUsers?: number;\n\tmaxHistory?: number;\n\tpermissions?: RoomPermission[];\n\trequireAuth?: boolean;\n\tallowAnonymous?: boolean;\n\tpersistHistory?: boolean;\n\tmetadata?: Record<string, unknown>;\n}\n",
37
- "import type { IAuthAdapter } from \"../abstractions/AuthAdapter.js\";\nimport { TypedEventEmitter } from \"../abstractions/EventEmitter.js\";\nimport type { IStorageAdapter } from \"../abstractions/StorageAdapter.js\";\nimport type { ITransportAdapter } from \"../abstractions/TransportAdapter.js\";\nimport type {\n\tAuthenticatePayload,\n\tAuthenticateResult,\n\tConnectionOptions,\n\tConnectionState,\n\tEvent,\n\tLock,\n\tLockRequest,\n\tMessage,\n\tRoomState,\n\tRoomUser,\n} from \"../types/index.js\";\nimport type { SerializableRoomState } from \"../types/room.js\";\nimport { deserializeRoomState } from \"../types/room.js\";\n\nexport interface ClientConfig {\n\ttransport: ITransportAdapter;\n\tauth?: IAuthAdapter;\n\tstorage?: IStorageAdapter;\n\treconnection?: {\n\t\tenabled: boolean;\n\t\tmaxAttempts: number;\n\t\tinitialDelay: number;\n\t\tmaxDelay: number;\n\t\tbackoffFactor: number;\n\t};\n}\n\nexport interface ClientEvents {\n\tconnected: { url: string };\n\tauthenticated: { userId: string };\n\tauthentication_failed: { error: string };\n\tdisconnected: { code: number; reason: string };\n\treconnecting: { attempt: number; delay: number };\n\treconnected: { url: string };\n\terror: { error: Error };\n\troom_joined: { roomId: string; state: RoomState };\n\troom_left: { roomId: string };\n\tevent_received: { event: Event };\n\tlock_acquired: { lock: Lock };\n\tlock_released: { lockId: string };\n\tlock_denied: { request: LockRequest; reason: string };\n\tpresence_updated: { users: RoomUser[] };\n\t[key: string]: unknown;\n}\n\nexport class BaseClient extends TypedEventEmitter<ClientEvents> {\n\tprivate transport: ITransportAdapter;\n\tprivate auth?: IAuthAdapter;\n\tprivate storage?: IStorageAdapter;\n\tprivate config: ClientConfig;\n\n\tprivate connectionState: ConnectionState = \"disconnected\";\n\tprivate currentRoomId: string | null = null;\n\tprivate currentRoomState: RoomState | null = null;\n\tprivate authToken: string | null = null;\n\tprivate userId: string | null = null;\n\n\t// Reconnection state\n\tprivate reconnectAttempts = 0;\n\tprivate reconnectTimer: NodeJS.Timeout | null = null;\n\tprivate lastConnectionUrl: string | null = null;\n\tprivate lastToken: string | null = null;\n\n\t// Request/response tracking for request() method\n\tprivate pendingRequests = new Map<\n\t\tstring,\n\t\t{\n\t\t\tresolve: (value: unknown) => void;\n\t\t\treject: (error: Error) => void;\n\t\t\ttimeout: NodeJS.Timeout;\n\t\t}\n\t>();\n\n\tconstructor(config: ClientConfig) {\n\t\tsuper();\n\t\tthis.config = config;\n\t\tthis.transport = config.transport;\n\t\tthis.auth = config.auth;\n\t\tthis.storage = config.storage;\n\n\t\t// Set up transport event handlers\n\t\tthis.transport.onMessage(this.handleMessage.bind(this));\n\t\tthis.transport.onError(this.handleError.bind(this));\n\t\tthis.transport.onClose(this.handleClose.bind(this));\n\t}\n\n\t// Connection Management\n\t/**\n\t * Connect to the server with an optional authentication token.\n\t *\n\t * @param url The WebSocket URL to connect to\n\t * @param token Optional JWT token for authentication\n\t */\n\tasync connect(url: string, token?: string): Promise<void> {\n\t\tif (this.connectionState !== \"disconnected\") {\n\t\t\tthrow new Error(\"Client is already connected or connecting\");\n\t\t}\n\n\t\tthis.connectionState = \"connecting\";\n\t\tthis.lastConnectionUrl = url;\n\t\tthis.lastToken = token || null;\n\n\t\ttry {\n\t\t\t// Use provided token or try to get existing token from auth adapter\n\t\t\tlet tokenToApply = token || null;\n\n\t\t\tif (\n\t\t\t\t!tokenToApply &&\n\t\t\t\tthis.auth &&\n\t\t\t\ttypeof this.auth.getCurrentToken === \"function\"\n\t\t\t) {\n\t\t\t\ttokenToApply = this.auth.getCurrentToken();\n\t\t\t}\n\n\t\t\tif (tokenToApply) {\n\t\t\t\tthis.authToken = tokenToApply;\n\n\t\t\t\t// Try to validate and get user info from token\n\t\t\t\tif (this.auth) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst payload = await this.auth.validateToken(tokenToApply);\n\t\t\t\t\t\tthis.userId = payload.userId;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Token validation failed locally, server will validate\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply token to transport if it supports it\n\t\t\t\tif (typeof (this.transport as any).setAuthToken === \"function\") {\n\t\t\t\t\t(this.transport as any).setAuthToken(tokenToApply);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst options: ConnectionOptions = {\n\t\t\t\turl,\n\t\t\t\treconnect: false, // We handle reconnection ourselves\n\t\t\t\t...this.config.reconnection,\n\t\t\t};\n\n\t\t\tawait this.transport.connect(url, options);\n\t\t\tthis.connectionState = \"connected\";\n\n\t\t\tawait this.emit(\"connected\", { url });\n\t\t} catch (error) {\n\t\t\tthis.connectionState = \"disconnected\";\n\t\t\tawait this.emit(\"error\", { error: error as Error });\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tif (this.connectionState === \"disconnected\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.connectionState = \"disconnecting\";\n\n\t\t// Clear reconnection timer\n\t\tif (this.reconnectTimer) {\n\t\t\tclearTimeout(this.reconnectTimer);\n\t\t\tthis.reconnectTimer = null;\n\t\t}\n\n\t\t// Leave room if joined\n\t\tif (this.currentRoomId) {\n\t\t\tawait this.leaveRoom();\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.transport.disconnect();\n\t\t} finally {\n\t\t\tthis.connectionState = \"disconnected\";\n\t\t\tthis.currentRoomId = null;\n\t\t\tthis.currentRoomState = null;\n\t\t\tthis.authToken = null;\n\t\t\tthis.userId = null;\n\t\t\tthis.reconnectAttempts = 0;\n\n\t\t\tawait this.emit(\"disconnected\", {\n\t\t\t\tcode: 1000,\n\t\t\t\treason: \"Client disconnected\",\n\t\t\t});\n\t\t}\n\t}\n\n\tasync reconnect(): Promise<void> {\n\t\tif (!this.lastConnectionUrl) {\n\t\t\tthrow new Error(\"No previous connection to reconnect to\");\n\t\t}\n\n\t\tif (this.connectionState !== \"disconnected\") {\n\t\t\tawait this.disconnect();\n\t\t}\n\n\t\tawait this.connect(this.lastConnectionUrl, this.lastToken || undefined);\n\t}\n\n\t// Authentication\n\t/**\n\t * Send an authenticate message to the server with the current token.\n\t * This must be called after connect() to complete the authentication handshake.\n\t *\n\t * @param options Optional authentication options including deviceId and metadata\n\t * @throws Error if client is not connected or no auth token is available\n\t */\n\tasync authenticate(\n\t\toptions?: Omit<AuthenticatePayload, \"token\">,\n\t): Promise<void> {\n\t\tif (this.connectionState !== \"connected\") {\n\t\t\tthrow new Error(\"Client must be connected to authenticate\");\n\t\t}\n\n\t\tif (!this.authToken) {\n\t\t\tthrow new Error(\n\t\t\t\t\"No auth token available. Connect with credentials first.\",\n\t\t\t);\n\t\t}\n\n\t\tconst payload: AuthenticatePayload = {\n\t\t\ttoken: this.authToken,\n\t\t\t...options,\n\t\t};\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"authenticate\",\n\t\t\tpayload,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t\t// Response will be handled in handleMessage via auth_result\n\t}\n\n\t/**\n\t * Check if the client has an auth token available.\n\t */\n\thasAuthToken(): boolean {\n\t\treturn this.authToken !== null;\n\t}\n\n\t// Room Management\n\tasync joinRoom(roomId: string): Promise<void> {\n\t\tif (this.connectionState !== \"connected\") {\n\t\t\tthrow new Error(\"Client must be connected to join a room\");\n\t\t}\n\n\t\tif (this.currentRoomId) {\n\t\t\tawait this.leaveRoom();\n\t\t}\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"join_room\",\n\t\t\tpayload: { roomId, token: this.authToken },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t\t// Response will be handled in handleMessage\n\t}\n\n\tasync leaveRoom(): Promise<void> {\n\t\tif (!this.currentRoomId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"leave_room\",\n\t\t\tpayload: { roomId: this.currentRoomId },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t\t// Response will be handled in handleMessage\n\n\t\tthis.currentRoomId = null;\n\t\tthis.currentRoomState = null;\n\t}\n\n\t// Event Operations\n\tasync broadcast(event: Event): Promise<void> {\n\t\tif (this.connectionState !== \"connected\" || !this.currentRoomId) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Client must be connected and in a room to broadcast events\",\n\t\t\t);\n\t\t}\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"broadcast_event\",\n\t\t\tpayload: { event, roomId: this.currentRoomId },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t}\n\n\t// Lock Operations\n\tasync requestLock(request: LockRequest): Promise<void> {\n\t\tif (this.connectionState !== \"connected\" || !this.currentRoomId) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Client must be connected and in a room to request locks\",\n\t\t\t);\n\t\t}\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"request_lock\",\n\t\t\tpayload: { request, roomId: this.currentRoomId },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t}\n\n\tasync releaseLock(lockId: string): Promise<void> {\n\t\tif (this.connectionState !== \"connected\" || !this.currentRoomId) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Client must be connected and in a room to release locks\",\n\t\t\t);\n\t\t}\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"release_lock\",\n\t\t\tpayload: { lockId, roomId: this.currentRoomId },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t}\n\n\t// Request/Response Pattern\n\t/**\n\t * Send a request message and wait for a response.\n\t *\n\t * This enables request/response patterns over WebSocket by correlating\n\t * the response message with the request via the message ID.\n\t *\n\t * @param type The message type to send\n\t * @param payload The message payload\n\t * @param timeoutMs Timeout in milliseconds (default: 5000)\n\t * @returns Promise that resolves with the response payload\n\t * @throws Error if the request times out or the client is not connected\n\t *\n\t * @example\n\t * ```typescript\n\t * const response = await client.request<PresenceGetUsersResponse>(\n\t * 'presence:get_users',\n\t * {}\n\t * );\n\t * console.log(response.users);\n\t * ```\n\t */\n\tasync request<T>(\n\t\ttype: string,\n\t\tpayload: unknown,\n\t\ttimeoutMs = 5000,\n\t): Promise<T> {\n\t\tif (this.connectionState !== \"connected\") {\n\t\t\tthrow new Error(\"Client must be connected to send requests\");\n\t\t}\n\n\t\tconst id = this.generateId();\n\t\tconst message: Message = {\n\t\t\tid,\n\t\t\ttype,\n\t\t\tpayload,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\tthis.pendingRequests.delete(id);\n\t\t\t\treject(new Error(`Request '${type}' timed out after ${timeoutMs}ms`));\n\t\t\t}, timeoutMs);\n\n\t\t\tthis.pendingRequests.set(id, {\n\t\t\t\tresolve: resolve as (value: unknown) => void,\n\t\t\t\treject,\n\t\t\t\ttimeout,\n\t\t\t});\n\n\t\t\tthis.transport.send(message).catch((error) => {\n\t\t\t\tthis.pendingRequests.delete(id);\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t}\n\n\t// State Getters\n\tgetConnectionState(): ConnectionState {\n\t\treturn this.connectionState;\n\t}\n\n\tgetRoomState(): RoomState | null {\n\t\treturn this.currentRoomState;\n\t}\n\n\tgetPresence(): RoomUser[] {\n\t\treturn this.currentRoomState\n\t\t\t? Array.from(this.currentRoomState.users.values())\n\t\t\t: [];\n\t}\n\n\tgetCurrentRoomId(): string | null {\n\t\treturn this.currentRoomId;\n\t}\n\n\tgetUserId(): string | null {\n\t\treturn this.userId;\n\t}\n\n\t// Private Methods\n\tprivate async handleMessage(message: Message): Promise<void> {\n\t\t// Check for pending request response (matched by message id)\n\t\tif (message.id && this.pendingRequests.has(message.id)) {\n\t\t\tconst pending = this.pendingRequests.get(message.id)!;\n\t\t\tclearTimeout(pending.timeout);\n\t\t\tthis.pendingRequests.delete(message.id);\n\t\t\tpending.resolve(message.payload);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tswitch (message.type) {\n\t\t\t\tcase \"auth_result\":\n\t\t\t\t\tawait this.handleAuthResult(message.payload as AuthenticateResult);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"room_joined\":\n\t\t\t\t\tawait this.handleRoomJoined(\n\t\t\t\t\t\tmessage.payload as { roomId: string; state: SerializableRoomState },\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"room_left\":\n\t\t\t\t\tawait this.handleRoomLeft(message.payload as { roomId: string });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"event_broadcast\":\n\t\t\t\t\tawait this.handleEventBroadcast(message.payload as { event: Event });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"lock_acquired\":\n\t\t\t\t\tawait this.handleLockAcquired(message.payload as { lock: Lock });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"lock_released\":\n\t\t\t\t\tawait this.handleLockReleased(message.payload as { lockId: string });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"lock_denied\":\n\t\t\t\t\tawait this.handleLockDenied(\n\t\t\t\t\t\tmessage.payload as { request: LockRequest; reason: string },\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"presence_updated\":\n\t\t\t\t\tawait this.handlePresenceUpdated(\n\t\t\t\t\t\tmessage.payload as { users: RoomUser[] },\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"error\":\n\t\t\t\t\tawait this.handleServerError(message.payload as { error: string });\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", { error: error as Error });\n\t\t\t// Error is already emitted, no additional handling needed\n\t\t}\n\t}\n\n\tprivate async handleError(error: Error): Promise<void> {\n\t\tawait this.emit(\"error\", { error });\n\t}\n\n\tprivate async handleClose(code: number, reason: string): Promise<void> {\n\t\tconst wasConnected = this.connectionState === \"connected\";\n\t\tthis.connectionState = \"disconnected\";\n\n\t\tif (wasConnected) {\n\t\t\tawait this.emit(\"disconnected\", { code, reason });\n\n\t\t\t// Attempt reconnection if enabled\n\t\t\tif (this.config.reconnection?.enabled && this.lastConnectionUrl) {\n\t\t\t\tthis.scheduleReconnect();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handleAuthResult(payload: AuthenticateResult): Promise<void> {\n\t\tif (payload.success) {\n\t\t\tif (payload.userId) {\n\t\t\t\tthis.userId = payload.userId;\n\t\t\t}\n\t\t\tawait this.emit(\"authenticated\", { userId: this.userId || \"\" });\n\t\t} else {\n\t\t\tawait this.emit(\"authentication_failed\", {\n\t\t\t\terror: payload.error || \"Authentication failed\",\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleRoomJoined(payload: {\n\t\troomId: string;\n\t\tstate: SerializableRoomState;\n\t}): Promise<void> {\n\t\tthis.currentRoomId = payload.roomId;\n\n\t\t// Deserialize the plain objects back to Maps\n\t\tconst roomState = deserializeRoomState(payload.state);\n\t\tthis.currentRoomState = roomState;\n\n\t\tawait this.emit(\"room_joined\", {\n\t\t\troomId: payload.roomId,\n\t\t\tstate: roomState,\n\t\t});\n\t}\n\n\tprivate async handleRoomLeft(payload: { roomId: string }): Promise<void> {\n\t\tif (this.currentRoomId === payload.roomId) {\n\t\t\tthis.currentRoomId = null;\n\t\t\tthis.currentRoomState = null;\n\t\t}\n\t\tawait this.emit(\"room_left\", payload);\n\t}\n\n\tprivate async handleEventBroadcast(payload: { event: Event }): Promise<void> {\n\t\tawait this.emit(\"event_received\", payload);\n\t}\n\n\tprivate async handleLockAcquired(payload: { lock: Lock }): Promise<void> {\n\t\tawait this.emit(\"lock_acquired\", payload);\n\t}\n\n\tprivate async handleLockReleased(payload: { lockId: string }): Promise<void> {\n\t\tawait this.emit(\"lock_released\", payload);\n\t}\n\n\tprivate async handleLockDenied(payload: {\n\t\trequest: LockRequest;\n\t\treason: string;\n\t}): Promise<void> {\n\t\tawait this.emit(\"lock_denied\", payload);\n\t}\n\n\tprivate async handlePresenceUpdated(payload: {\n\t\tusers: RoomUser[];\n\t}): Promise<void> {\n\t\tif (this.currentRoomState) {\n\t\t\t// Convert array back to Map\n\t\t\tthis.currentRoomState.users = new Map(\n\t\t\t\tpayload.users.map((user) => [user.id, user]),\n\t\t\t);\n\t\t}\n\t\tawait this.emit(\"presence_updated\", payload);\n\t}\n\n\tprivate async handleServerError(payload: { error: string }): Promise<void> {\n\t\tconst error = new Error(payload.error);\n\t\tawait this.emit(\"error\", { error });\n\t}\n\n\tprivate async scheduleReconnect(): Promise<void> {\n\t\tif (\n\t\t\t!this.config.reconnection ||\n\t\t\tthis.reconnectAttempts >= this.config.reconnection.maxAttempts\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst delay = Math.min(\n\t\t\tthis.config.reconnection.initialDelay *\n\t\t\t\tMath.pow(\n\t\t\t\t\tthis.config.reconnection.backoffFactor,\n\t\t\t\t\tthis.reconnectAttempts,\n\t\t\t\t),\n\t\t\tthis.config.reconnection.maxDelay,\n\t\t);\n\n\t\tthis.reconnectAttempts++;\n\n\t\tawait this.emit(\"reconnecting\", { attempt: this.reconnectAttempts, delay });\n\n\t\tthis.reconnectTimer = setTimeout(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.reconnect();\n\t\t\t\tthis.reconnectAttempts = 0;\n\t\t\t\tawait this.emit(\"reconnected\", { url: this.lastConnectionUrl! });\n\t\t\t} catch {\n\t\t\t\t// Reconnection failed, schedule next attempt\n\t\t\t\tthis.scheduleReconnect();\n\t\t\t}\n\t\t}, delay);\n\t}\n\n\tprivate generateId(): string {\n\t\treturn Math.random().toString(36).substring(2) + Date.now().toString(36);\n\t}\n}\n",
37
+ "import type { IAuthAdapter } from \"../abstractions/AuthAdapter.js\";\nimport { TypedEventEmitter } from \"../abstractions/EventEmitter.js\";\nimport type { IStorageAdapter } from \"../abstractions/StorageAdapter.js\";\nimport type { ITransportAdapter } from \"../abstractions/TransportAdapter.js\";\nimport type {\n\tAuthenticatePayload,\n\tAuthenticateResult,\n\tConnectionOptions,\n\tConnectionState,\n\tEvent,\n\tLock,\n\tLockRequest,\n\tMessage,\n\tRoomState,\n\tRoomUser,\n} from \"../types/index.js\";\nimport type { SerializableRoomState } from \"../types/room.js\";\nimport { deserializeRoomState } from \"../types/room.js\";\n\nexport interface ClientConfig {\n\ttransport: ITransportAdapter;\n\tauth?: IAuthAdapter;\n\tstorage?: IStorageAdapter;\n\treconnection?: {\n\t\tenabled: boolean;\n\t\tmaxAttempts: number;\n\t\tinitialDelay: number;\n\t\tmaxDelay: number;\n\t\tbackoffFactor: number;\n\t};\n}\n\nexport interface ClientEvents {\n\tconnected: { url: string };\n\tauthenticated: { userId: string };\n\tauthentication_failed: { error: string };\n\tdisconnected: { code: number; reason: string };\n\treconnecting: { attempt: number; delay: number };\n\treconnected: { url: string };\n\terror: { error: Error };\n\troom_joined: { roomId: string; state: RoomState };\n\troom_left: { roomId: string };\n\tevent_received: { event: Event };\n\tlock_acquired: { lock: Lock };\n\tlock_released: { lockId: string };\n\tlock_denied: { request: LockRequest; reason: string };\n\tpresence_updated: { users: RoomUser[] };\n\t[key: string]: unknown;\n}\n\nexport class BaseClient extends TypedEventEmitter<ClientEvents> {\n\tprivate transport: ITransportAdapter;\n\tprivate auth?: IAuthAdapter;\n\tprivate storage?: IStorageAdapter;\n\tprivate config: ClientConfig;\n\n\tprivate connectionState: ConnectionState = \"disconnected\";\n\tprivate currentRoomId: string | null = null;\n\tprivate currentRoomState: RoomState | null = null;\n\tprivate authToken: string | null = null;\n\tprivate userId: string | null = null;\n\n\t// Reconnection state\n\tprivate reconnectAttempts = 0;\n\tprivate reconnectTimer: NodeJS.Timeout | null = null;\n\tprivate lastConnectionUrl: string | null = null;\n\tprivate lastToken: string | null = null;\n\n\t// Request/response tracking for request() method\n\tprivate pendingRequests = new Map<\n\t\tstring,\n\t\t{\n\t\t\tresolve: (value: unknown) => void;\n\t\t\treject: (error: Error) => void;\n\t\t\ttimeout: NodeJS.Timeout;\n\t\t}\n\t>();\n\n\tconstructor(config: ClientConfig) {\n\t\tsuper();\n\t\tthis.config = config;\n\t\tthis.transport = config.transport;\n\t\tthis.auth = config.auth;\n\t\tthis.storage = config.storage;\n\n\t\t// Set up transport event handlers\n\t\tthis.transport.onMessage(this.handleMessage.bind(this));\n\t\tthis.transport.onError(this.handleError.bind(this));\n\t\tthis.transport.onClose(this.handleClose.bind(this));\n\t}\n\n\t// Connection Management\n\t/**\n\t * Connect to the server with an optional authentication token.\n\t *\n\t * @param url The WebSocket URL to connect to\n\t * @param token Optional JWT token for authentication\n\t */\n\tasync connect(url: string, token?: string): Promise<void> {\n\t\tif (this.connectionState !== \"disconnected\") {\n\t\t\tthrow new Error(\"Client is already connected or connecting\");\n\t\t}\n\n\t\tthis.connectionState = \"connecting\";\n\t\tthis.lastConnectionUrl = url;\n\t\tthis.lastToken = token || null;\n\n\t\ttry {\n\t\t\t// Use provided token or try to get existing token from auth adapter\n\t\t\tlet tokenToApply = token || null;\n\n\t\t\tif (\n\t\t\t\t!tokenToApply &&\n\t\t\t\tthis.auth &&\n\t\t\t\ttypeof this.auth.getCurrentToken === \"function\"\n\t\t\t) {\n\t\t\t\ttokenToApply = this.auth.getCurrentToken();\n\t\t\t}\n\n\t\t\tif (tokenToApply) {\n\t\t\t\tthis.authToken = tokenToApply;\n\n\t\t\t\t// Try to validate and get user info from token\n\t\t\t\tif (this.auth) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst payload = await this.auth.validateToken(tokenToApply);\n\t\t\t\t\t\tthis.userId = payload.userId;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Token validation failed locally, server will validate\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply token to transport if it supports it\n\t\t\t\tif (typeof (this.transport as any).setAuthToken === \"function\") {\n\t\t\t\t\t(this.transport as any).setAuthToken(tokenToApply);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst options: ConnectionOptions = {\n\t\t\t\turl,\n\t\t\t\treconnect: false, // We handle reconnection ourselves\n\t\t\t\t...this.config.reconnection,\n\t\t\t};\n\n\t\t\tawait this.transport.connect(url, options);\n\t\t\tthis.connectionState = \"connected\";\n\n\t\t\tawait this.emit(\"connected\", { url });\n\t\t} catch (error) {\n\t\t\tthis.connectionState = \"disconnected\";\n\t\t\tawait this.emit(\"error\", { error: error as Error });\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tif (this.connectionState === \"disconnected\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.connectionState = \"disconnecting\";\n\n\t\t// Clear reconnection timer\n\t\tif (this.reconnectTimer) {\n\t\t\tclearTimeout(this.reconnectTimer);\n\t\t\tthis.reconnectTimer = null;\n\t\t}\n\n\t\t// Leave room if joined\n\t\tif (this.currentRoomId) {\n\t\t\tawait this.leaveRoom();\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.transport.disconnect();\n\t\t} finally {\n\t\t\tthis.connectionState = \"disconnected\";\n\t\t\tthis.currentRoomId = null;\n\t\t\tthis.currentRoomState = null;\n\t\t\tthis.authToken = null;\n\t\t\tthis.userId = null;\n\t\t\tthis.reconnectAttempts = 0;\n\n\t\t\tawait this.emit(\"disconnected\", {\n\t\t\t\tcode: 1000,\n\t\t\t\treason: \"Client disconnected\",\n\t\t\t});\n\t\t}\n\t}\n\n\tasync reconnect(): Promise<void> {\n\t\tif (!this.lastConnectionUrl) {\n\t\t\tthrow new Error(\"No previous connection to reconnect to\");\n\t\t}\n\n\t\tif (this.connectionState !== \"disconnected\") {\n\t\t\tawait this.disconnect();\n\t\t}\n\n\t\tawait this.connect(this.lastConnectionUrl, this.lastToken || undefined);\n\t}\n\n\t// Authentication\n\t/**\n\t * Send an authenticate message to the server with the current token.\n\t * This must be called after connect() to complete the authentication handshake.\n\t *\n\t * @param options Optional authentication options including deviceId and metadata\n\t * @throws Error if client is not connected or no auth token is available\n\t */\n\tasync authenticate(\n\t\toptions?: Omit<AuthenticatePayload, \"token\">,\n\t): Promise<void> {\n\t\tif (this.connectionState !== \"connected\") {\n\t\t\tthrow new Error(\"Client must be connected to authenticate\");\n\t\t}\n\n\t\tif (!this.authToken) {\n\t\t\tthrow new Error(\n\t\t\t\t\"No auth token available. Connect with credentials first.\",\n\t\t\t);\n\t\t}\n\n\t\tconst payload: AuthenticatePayload = {\n\t\t\ttoken: this.authToken,\n\t\t\t...options,\n\t\t};\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"authenticate\",\n\t\t\tpayload,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t\t// Response will be handled in handleMessage via auth_result\n\t}\n\n\t/**\n\t * Check if the client has an auth token available.\n\t */\n\thasAuthToken(): boolean {\n\t\treturn this.authToken !== null;\n\t}\n\n\t// Room Management\n\tasync joinRoom(roomId: string): Promise<void> {\n\t\tif (this.connectionState !== \"connected\") {\n\t\t\tthrow new Error(\"Client must be connected to join a room\");\n\t\t}\n\n\t\tif (this.currentRoomId) {\n\t\t\tawait this.leaveRoom();\n\t\t}\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"join_room\",\n\t\t\tpayload: { roomId, token: this.authToken },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t\t// Response will be handled in handleMessage\n\t}\n\n\tasync leaveRoom(): Promise<void> {\n\t\tif (!this.currentRoomId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"leave_room\",\n\t\t\tpayload: { roomId: this.currentRoomId },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t\t// Response will be handled in handleMessage\n\n\t\tthis.currentRoomId = null;\n\t\tthis.currentRoomState = null;\n\t}\n\n\t// Event Operations\n\tasync broadcast(event: Event): Promise<void> {\n\t\tif (this.connectionState !== \"connected\" || !this.currentRoomId) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Client must be connected and in a room to broadcast events\",\n\t\t\t);\n\t\t}\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"broadcast_event\",\n\t\t\tpayload: { event, roomId: this.currentRoomId },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t}\n\n\t// Lock Operations\n\tasync requestLock(request: LockRequest): Promise<void> {\n\t\tif (this.connectionState !== \"connected\" || !this.currentRoomId) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Client must be connected and in a room to request locks\",\n\t\t\t);\n\t\t}\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"request_lock\",\n\t\t\tpayload: { request, roomId: this.currentRoomId },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t}\n\n\tasync releaseLock(lockId: string): Promise<void> {\n\t\tif (this.connectionState !== \"connected\" || !this.currentRoomId) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Client must be connected and in a room to release locks\",\n\t\t\t);\n\t\t}\n\n\t\tconst message: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"release_lock\",\n\t\t\tpayload: { lockId, roomId: this.currentRoomId },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(message);\n\t}\n\n\t// Request/Response Pattern\n\t/**\n\t * Send a request message and wait for a response.\n\t *\n\t * This enables request/response patterns over WebSocket by correlating\n\t * the response message with the request via the message ID.\n\t *\n\t * @param type The message type to send\n\t * @param payload The message payload\n\t * @param timeoutMs Timeout in milliseconds (default: 5000)\n\t * @returns Promise that resolves with the response payload\n\t * @throws Error if the request times out or the client is not connected\n\t *\n\t * @example\n\t * ```typescript\n\t * const response = await client.request<PresenceGetUsersResponse>(\n\t * 'presence:get_users',\n\t * {}\n\t * );\n\t * console.log(response.users);\n\t * ```\n\t */\n\tasync request<T>(\n\t\ttype: string,\n\t\tpayload: unknown,\n\t\ttimeoutMs = 5000,\n\t): Promise<T> {\n\t\tif (this.connectionState !== \"connected\") {\n\t\t\tthrow new Error(\"Client must be connected to send requests\");\n\t\t}\n\n\t\tconst id = this.generateId();\n\t\tconst message: Message = {\n\t\t\tid,\n\t\t\ttype,\n\t\t\tpayload,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\tthis.pendingRequests.delete(id);\n\t\t\t\treject(new Error(`Request '${type}' timed out after ${timeoutMs}ms`));\n\t\t\t}, timeoutMs);\n\n\t\t\tthis.pendingRequests.set(id, {\n\t\t\t\tresolve: resolve as (value: unknown) => void,\n\t\t\t\treject,\n\t\t\t\ttimeout,\n\t\t\t});\n\n\t\t\tthis.transport.send(message).catch((error) => {\n\t\t\t\tthis.pendingRequests.delete(id);\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t}\n\n\t// State Getters\n\tgetConnectionState(): ConnectionState {\n\t\treturn this.connectionState;\n\t}\n\n\tgetRoomState(): RoomState | null {\n\t\treturn this.currentRoomState;\n\t}\n\n\tgetPresence(): RoomUser[] {\n\t\treturn this.currentRoomState\n\t\t\t? Array.from(this.currentRoomState.users.values())\n\t\t\t: [];\n\t}\n\n\tgetCurrentRoomId(): string | null {\n\t\treturn this.currentRoomId;\n\t}\n\n\tgetUserId(): string | null {\n\t\treturn this.userId;\n\t}\n\n\t// Private Methods\n\tprivate async handleMessage(message: Message): Promise<void> {\n\t\t// Check for pending request response (matched by message id)\n\t\tif (message.id && this.pendingRequests.has(message.id)) {\n\t\t\tconst pending = this.pendingRequests.get(message.id)!;\n\t\t\tclearTimeout(pending.timeout);\n\t\t\tthis.pendingRequests.delete(message.id);\n\t\t\tpending.resolve(message.payload);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tswitch (message.type) {\n\t\t\t\tcase \"auth_result\":\n\t\t\t\t\tawait this.handleAuthResult(message.payload as AuthenticateResult);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"room_joined\":\n\t\t\t\t\tawait this.handleRoomJoined(\n\t\t\t\t\t\tmessage.payload as { roomId: string; state: SerializableRoomState },\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"room_left\":\n\t\t\t\t\tawait this.handleRoomLeft(message.payload as { roomId: string });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"event_broadcast\":\n\t\t\t\t\tawait this.handleEventBroadcast(message.payload as { event: Event });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"lock_acquired\":\n\t\t\t\t\tawait this.handleLockAcquired(message.payload as { lock: Lock });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"lock_released\":\n\t\t\t\t\tawait this.handleLockReleased(message.payload as { lockId: string });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"lock_denied\":\n\t\t\t\t\tawait this.handleLockDenied(\n\t\t\t\t\t\tmessage.payload as { request: LockRequest; reason: string },\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"presence_updated\":\n\t\t\t\t\tawait this.handlePresenceUpdated(\n\t\t\t\t\t\tmessage.payload as { users: RoomUser[] },\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"error\":\n\t\t\t\t\tawait this.handleServerError(message.payload as { error: string });\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// Emit unrecognized message types as events for custom handlers\n\t\t\t\t\t// This allows PresenceClient and other extensions to receive\n\t\t\t\t\t// server-initiated messages like presence:user_online, presence:repo_status_changed\n\t\t\t\t\tawait this.emit(message.type, message.payload);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", { error: error as Error });\n\t\t\t// Error is already emitted, no additional handling needed\n\t\t}\n\t}\n\n\tprivate async handleError(error: Error): Promise<void> {\n\t\tawait this.emit(\"error\", { error });\n\t}\n\n\tprivate async handleClose(code: number, reason: string): Promise<void> {\n\t\tconst wasConnected = this.connectionState === \"connected\";\n\t\tthis.connectionState = \"disconnected\";\n\n\t\tif (wasConnected) {\n\t\t\tawait this.emit(\"disconnected\", { code, reason });\n\n\t\t\t// Attempt reconnection if enabled\n\t\t\tif (this.config.reconnection?.enabled && this.lastConnectionUrl) {\n\t\t\t\tthis.scheduleReconnect();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handleAuthResult(payload: AuthenticateResult): Promise<void> {\n\t\tif (payload.success) {\n\t\t\tif (payload.userId) {\n\t\t\t\tthis.userId = payload.userId;\n\t\t\t}\n\t\t\tawait this.emit(\"authenticated\", { userId: this.userId || \"\" });\n\t\t} else {\n\t\t\tawait this.emit(\"authentication_failed\", {\n\t\t\t\terror: payload.error || \"Authentication failed\",\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleRoomJoined(payload: {\n\t\troomId: string;\n\t\tstate: SerializableRoomState;\n\t}): Promise<void> {\n\t\tthis.currentRoomId = payload.roomId;\n\n\t\t// Deserialize the plain objects back to Maps\n\t\tconst roomState = deserializeRoomState(payload.state);\n\t\tthis.currentRoomState = roomState;\n\n\t\tawait this.emit(\"room_joined\", {\n\t\t\troomId: payload.roomId,\n\t\t\tstate: roomState,\n\t\t});\n\t}\n\n\tprivate async handleRoomLeft(payload: { roomId: string }): Promise<void> {\n\t\tif (this.currentRoomId === payload.roomId) {\n\t\t\tthis.currentRoomId = null;\n\t\t\tthis.currentRoomState = null;\n\t\t}\n\t\tawait this.emit(\"room_left\", payload);\n\t}\n\n\tprivate async handleEventBroadcast(payload: { event: Event }): Promise<void> {\n\t\tawait this.emit(\"event_received\", payload);\n\t}\n\n\tprivate async handleLockAcquired(payload: { lock: Lock }): Promise<void> {\n\t\tawait this.emit(\"lock_acquired\", payload);\n\t}\n\n\tprivate async handleLockReleased(payload: { lockId: string }): Promise<void> {\n\t\tawait this.emit(\"lock_released\", payload);\n\t}\n\n\tprivate async handleLockDenied(payload: {\n\t\trequest: LockRequest;\n\t\treason: string;\n\t}): Promise<void> {\n\t\tawait this.emit(\"lock_denied\", payload);\n\t}\n\n\tprivate async handlePresenceUpdated(payload: {\n\t\tusers: RoomUser[];\n\t}): Promise<void> {\n\t\tif (this.currentRoomState) {\n\t\t\t// Convert array back to Map\n\t\t\tthis.currentRoomState.users = new Map(\n\t\t\t\tpayload.users.map((user) => [user.id, user]),\n\t\t\t);\n\t\t}\n\t\tawait this.emit(\"presence_updated\", payload);\n\t}\n\n\tprivate async handleServerError(payload: { error: string }): Promise<void> {\n\t\tconst error = new Error(payload.error);\n\t\tawait this.emit(\"error\", { error });\n\t}\n\n\tprivate async scheduleReconnect(): Promise<void> {\n\t\tif (\n\t\t\t!this.config.reconnection ||\n\t\t\tthis.reconnectAttempts >= this.config.reconnection.maxAttempts\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst delay = Math.min(\n\t\t\tthis.config.reconnection.initialDelay *\n\t\t\t\tMath.pow(\n\t\t\t\t\tthis.config.reconnection.backoffFactor,\n\t\t\t\t\tthis.reconnectAttempts,\n\t\t\t\t),\n\t\t\tthis.config.reconnection.maxDelay,\n\t\t);\n\n\t\tthis.reconnectAttempts++;\n\n\t\tawait this.emit(\"reconnecting\", { attempt: this.reconnectAttempts, delay });\n\n\t\tthis.reconnectTimer = setTimeout(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.reconnect();\n\t\t\t\tthis.reconnectAttempts = 0;\n\t\t\t\tawait this.emit(\"reconnected\", { url: this.lastConnectionUrl! });\n\t\t\t} catch {\n\t\t\t\t// Reconnection failed, schedule next attempt\n\t\t\t\tthis.scheduleReconnect();\n\t\t\t}\n\t\t}, delay);\n\t}\n\n\tprivate generateId(): string {\n\t\treturn Math.random().toString(36).substring(2) + Date.now().toString(36);\n\t}\n}\n",
38
38
  "import type { IAuthAdapter } from \"../abstractions/AuthAdapter.js\";\nimport type { IStorageAdapter } from \"../abstractions/StorageAdapter.js\";\nimport type { ITransportAdapter } from \"../abstractions/TransportAdapter.js\";\nimport { BaseClient, type ClientConfig } from \"./BaseClient.js\";\n\nexport class ClientBuilder {\n\tprivate transport?: ITransportAdapter;\n\tprivate auth?: IAuthAdapter;\n\tprivate storage?: IStorageAdapter;\n\tprivate reconnection?: ClientConfig[\"reconnection\"];\n\n\twithTransport(transport: ITransportAdapter): this {\n\t\tthis.transport = transport;\n\t\treturn this;\n\t}\n\n\twithAuth(auth: IAuthAdapter): this {\n\t\tthis.auth = auth;\n\t\treturn this;\n\t}\n\n\twithStorage(storage: IStorageAdapter): this {\n\t\tthis.storage = storage;\n\t\treturn this;\n\t}\n\n\twithReconnection(config: NonNullable<ClientConfig[\"reconnection\"]>): this {\n\t\tthis.reconnection = config;\n\t\treturn this;\n\t}\n\n\tbuild(): BaseClient {\n\t\tif (!this.transport) {\n\t\t\tthrow new Error(\"Transport adapter is required\");\n\t\t}\n\n\t\tconst config: ClientConfig = {\n\t\t\ttransport: this.transport,\n\t\t\tauth: this.auth,\n\t\t\tstorage: this.storage,\n\t\t\treconnection: this.reconnection || {\n\t\t\t\tenabled: true,\n\t\t\t\tmaxAttempts: 5,\n\t\t\t\tinitialDelay: 1000,\n\t\t\t\tmaxDelay: 30000,\n\t\t\t\tbackoffFactor: 2,\n\t\t\t},\n\t\t};\n\n\t\treturn new BaseClient(config);\n\t}\n}\n",
39
- "/**\n * Presence Client Helper\n *\n * Simplifies client-side presence integration for web/Electron applications.\n * Automatically handles connection, authentication, and presence event forwarding.\n */\n\nimport { TypedEventEmitter } from \"../abstractions/EventEmitter.js\";\nimport type {\n\tPresenceActionResponse,\n\tPresenceGetRepoUsersResponse,\n\tPresenceGetUserResponse,\n\tPresenceGetUsersResponse,\n\tSerializableUserPresence,\n} from \"../types/presence.js\";\nimport { BaseClient, type ClientConfig } from \"./BaseClient.js\";\n\nexport interface PresenceClientConfig {\n\t/**\n\t * Base client configuration\n\t * Provide the full client config including transport and auth adapters\n\t */\n\tclientConfig: ClientConfig;\n\n\t/**\n\t * WebSocket URL to connect to\n\t */\n\twsUrl: string;\n\n\t/**\n\t * Automatically connect on construction\n\t * @default false\n\t */\n\tautoConnect?: boolean;\n\n\t/**\n\t * Automatically reconnect on disconnect\n\t * @default true\n\t */\n\tautoReconnect?: boolean;\n\n\t/**\n\t * Global presence room ID\n\t * @default '__global_presence__'\n\t */\n\tglobalRoomId?: string;\n}\n\nexport interface PresenceClientEvents {\n\t/**\n\t * User came online\n\t */\n\tuserOnline: { userId: string; devices: unknown[] };\n\n\t/**\n\t * User went offline\n\t */\n\tuserOffline: { userId: string };\n\n\t/**\n\t * User's presence status changed\n\t */\n\tstatusChanged: { userId: string; status: string; statusMessage?: string };\n\n\t/**\n\t * Connected to presence system\n\t */\n\tconnected: {};\n\n\t/**\n\t * Disconnected from presence system\n\t */\n\tdisconnected: {};\n\n\t/**\n\t * Error occurred\n\t */\n\terror: { error: Error };\n\n\t[key: string]: unknown;\n}\n\n/**\n * High-level presence client for easy integration\n *\n * Example:\n * ```typescript\n * import { PresenceClient } from '@principal-ai/control-tower-core';\n * import { WebSocketClientTransportAdapter } from '@principal-ai/control-tower-core';\n * import { ClientBuilder } from '@principal-ai/control-tower-core';\n *\n * const transport = new WebSocketClientTransportAdapter();\n *\n * const client = new ClientBuilder()\n * .withTransport(transport)\n * .build();\n *\n * const presence = new PresenceClient({\n * clientConfig: client,\n * wsUrl: 'ws://localhost:3000/ws',\n * autoConnect: true,\n * autoReconnect: true\n * });\n *\n * presence.on('userOnline', (data) => {\n * console.log(`${data.userId} came online`);\n * });\n *\n * presence.on('userOffline', (data) => {\n * console.log(`${data.userId} went offline`);\n * });\n * ```\n */\nexport class PresenceClient extends TypedEventEmitter<PresenceClientEvents> {\n\tprivate client: BaseClient;\n\tprivate wsUrl: string;\n\tprivate autoReconnectEnabled: boolean;\n\tprivate globalRoomId: string;\n\tprivate reconnectTimeout?: NodeJS.Timeout;\n\n\tconstructor(config: PresenceClientConfig) {\n\t\tsuper();\n\n\t\tthis.wsUrl = config.wsUrl;\n\t\tthis.autoReconnectEnabled = config.autoReconnect ?? true;\n\t\tthis.globalRoomId = config.globalRoomId ?? \"__global_presence__\";\n\n\t\t// Create base client\n\t\tthis.client = new BaseClient(config.clientConfig);\n\n\t\tthis.setupEventForwarding();\n\n\t\tif (config.autoConnect) {\n\t\t\tvoid this.connect();\n\t\t}\n\t}\n\n\t/**\n\t * Connect to the presence system\n\t */\n\tasync connect(): Promise<void> {\n\t\ttry {\n\t\t\t// Connect base client\n\t\t\tawait this.client.connect(this.wsUrl);\n\n\t\t\t// Join global presence room\n\t\t\tawait this.client.joinRoom(this.globalRoomId);\n\n\t\t\tawait this.emit(\"connected\", {});\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", { error: error as Error });\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Disconnect from the presence system\n\t */\n\tasync disconnect(): Promise<void> {\n\t\t// Disable auto-reconnect\n\t\tthis.autoReconnectEnabled = false;\n\n\t\t// Clear any pending reconnect\n\t\tif (this.reconnectTimeout) {\n\t\t\tclearTimeout(this.reconnectTimeout);\n\t\t\tthis.reconnectTimeout = undefined;\n\t\t}\n\n\t\ttry {\n\t\t\t// Leave global presence room\n\t\t\tawait this.client.leaveRoom();\n\n\t\t\t// Disconnect\n\t\t\tawait this.client.disconnect();\n\n\t\t\tawait this.emit(\"disconnected\", {});\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", { error: error as Error });\n\t\t}\n\t}\n\n\t/**\n\t * Get all online users with their presence data\n\t *\n\t * @returns Array of user presence objects\n\t */\n\tasync getOnlineUsers(): Promise<SerializableUserPresence[]> {\n\t\tconst response = await this.client.request<PresenceGetUsersResponse>(\n\t\t\t\"presence:get_users\",\n\t\t\t{},\n\t\t);\n\t\treturn response.users;\n\t}\n\n\t/**\n\t * Get presence information for a specific user\n\t *\n\t * @param userId The user ID to look up\n\t * @returns User presence or null if not found\n\t */\n\tasync getUserPresence(userId: string): Promise<SerializableUserPresence | null> {\n\t\tconst response = await this.client.request<PresenceGetUserResponse>(\n\t\t\t\"presence:get_user\",\n\t\t\t{ userId },\n\t\t);\n\t\treturn response.user;\n\t}\n\n\t/**\n\t * Get all users in a specific repository\n\t *\n\t * @param owner Repository owner\n\t * @param repo Repository name\n\t * @returns Array of user presence objects\n\t */\n\tasync getRepoUsers(owner: string, repo: string): Promise<SerializableUserPresence[]> {\n\t\tconst response = await this.client.request<PresenceGetRepoUsersResponse>(\n\t\t\t\"presence:get_repo_users\",\n\t\t\t{ owner, repo },\n\t\t);\n\t\treturn response.users;\n\t}\n\n\t/**\n\t * Set user status\n\t *\n\t * @param status The status to set ('online' or 'away')\n\t * @param statusMessage Optional status message\n\t */\n\tasync setStatus(status: \"online\" | \"away\", statusMessage?: string): Promise<void> {\n\t\tconst response = await this.client.request<PresenceActionResponse>(\n\t\t\t\"presence:set_status\",\n\t\t\t{ status, statusMessage },\n\t\t);\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error || \"Failed to set status\");\n\t\t}\n\t}\n\n\t/**\n\t * Set visibility (invisible/lurker mode)\n\t *\n\t * @param visible Whether the user should be visible to others\n\t */\n\tasync setVisibility(visible: boolean): Promise<void> {\n\t\tconst response = await this.client.request<PresenceActionResponse>(\n\t\t\t\"presence:set_visibility\",\n\t\t\t{ visible },\n\t\t);\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error || \"Failed to set visibility\");\n\t\t}\n\t}\n\n\t/**\n\t * Report that a repository was opened\n\t *\n\t * @param repoId Repository ID (format: \"owner/repo\")\n\t * @param branch Branch name\n\t */\n\tasync reportRepoOpened(repoId: string, branch: string): Promise<void> {\n\t\tconst response = await this.client.request<PresenceActionResponse>(\n\t\t\t\"presence:repo_open\",\n\t\t\t{ repoId, branch },\n\t\t);\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error || \"Failed to report repo opened\");\n\t\t}\n\t}\n\n\t/**\n\t * Report that a repository was closed\n\t *\n\t * @param repoId Repository ID (format: \"owner/repo\")\n\t */\n\tasync reportRepoClosed(repoId: string): Promise<void> {\n\t\tconst response = await this.client.request<PresenceActionResponse>(\n\t\t\t\"presence:repo_close\",\n\t\t\t{ repoId },\n\t\t);\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error || \"Failed to report repo closed\");\n\t\t}\n\t}\n\n\t/**\n\t * Report that a repository is now focused/active\n\t *\n\t * @param repoId Repository ID (format: \"owner/repo\")\n\t */\n\tasync reportRepoFocused(repoId: string): Promise<void> {\n\t\tconst response = await this.client.request<PresenceActionResponse>(\n\t\t\t\"presence:repo_focus\",\n\t\t\t{ repoId },\n\t\t);\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error || \"Failed to report repo focused\");\n\t\t}\n\t}\n\n\t/**\n\t * Get the underlying BaseClient\n\t */\n\tgetClient(): BaseClient {\n\t\treturn this.client;\n\t}\n\n\t/**\n\t * Check if connected\n\t */\n\tisConnected(): boolean {\n\t\t// BaseClient doesn't expose getState(), so we check internal state via a workaround\n\t\t// In practice, you can track connection state via events\n\t\treturn (this.client as any).connectionState === \"connected\";\n\t}\n\n\t/**\n\t * Set up event forwarding from BaseClient\n\t * @private\n\t */\n\tprivate setupEventForwarding(): void {\n\t\t// Forward presence events with simplified API\n\t\tthis.client.on(\"presence:user_online\", (data) => {\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tconst payload = data as { userId: string; devices?: unknown[] };\n\t\t\t\tvoid this.emit(\"userOnline\", {\n\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\tdevices: payload.devices || [],\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.client.on(\"presence:user_offline\", (data) => {\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tconst payload = data as { userId: string };\n\t\t\t\tvoid this.emit(\"userOffline\", { userId: payload.userId });\n\t\t\t}\n\t\t});\n\n\t\tthis.client.on(\"presence:status_changed\", (data) => {\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tconst payload = data as {\n\t\t\t\t\tuserId: string;\n\t\t\t\t\tstatus: string;\n\t\t\t\t\tstatusMessage?: string;\n\t\t\t\t};\n\t\t\t\tvoid this.emit(\"statusChanged\", {\n\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\tstatus: payload.status,\n\t\t\t\t\tstatusMessage: payload.statusMessage,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Handle disconnection\n\t\tthis.client.on(\"disconnected\", () => {\n\t\t\tvoid this.emit(\"disconnected\", {});\n\n\t\t\t// Auto-reconnect if enabled\n\t\t\tif (this.autoReconnectEnabled) {\n\t\t\t\tthis.reconnectTimeout = setTimeout(() => {\n\t\t\t\t\tvoid this.connect().catch((error) => {\n\t\t\t\t\t\tvoid this.emit(\"error\", { error: error as Error });\n\t\t\t\t\t});\n\t\t\t\t}, 5000);\n\t\t\t}\n\t\t});\n\n\t\t// Forward errors\n\t\tthis.client.on(\"error\", (data) => {\n\t\t\tif (data && typeof data === \"object\" && \"error\" in data) {\n\t\t\t\tconst payload = data as { error: Error };\n\t\t\t\tvoid this.emit(\"error\", { error: payload.error });\n\t\t\t}\n\t\t});\n\t}\n}\n",
39
+ "/**\n * Presence Client Helper\n *\n * Simplifies client-side presence integration for web/Electron applications.\n * Automatically handles connection, authentication, and presence event forwarding.\n */\n\nimport { TypedEventEmitter } from \"../abstractions/EventEmitter.js\";\nimport type {\n\tPresenceActionResponse,\n\tPresenceGetRepoUsersResponse,\n\tPresenceGetUserResponse,\n\tPresenceGetUsersResponse,\n\tPresenceRepoStatusUpdateResponse,\n\tSerializableUserPresence,\n\tSharedGitStatus,\n} from \"../types/presence.js\";\nimport { BaseClient, type ClientConfig } from \"./BaseClient.js\";\n\nexport interface PresenceClientConfig {\n\t/**\n\t * Base client configuration\n\t * Provide the full client config including transport and auth adapters\n\t */\n\tclientConfig: ClientConfig;\n\n\t/**\n\t * WebSocket URL to connect to\n\t */\n\twsUrl: string;\n\n\t/**\n\t * Automatically connect on construction\n\t * @default false\n\t */\n\tautoConnect?: boolean;\n\n\t/**\n\t * Automatically reconnect on disconnect\n\t * @default true\n\t */\n\tautoReconnect?: boolean;\n\n\t/**\n\t * Global presence room ID\n\t * @default '__global_presence__'\n\t */\n\tglobalRoomId?: string;\n}\n\nexport interface PresenceClientEvents {\n\t/**\n\t * User came online\n\t */\n\tuserOnline: { userId: string; devices: unknown[] };\n\n\t/**\n\t * User went offline\n\t */\n\tuserOffline: { userId: string };\n\n\t/**\n\t * User's presence status changed\n\t */\n\tstatusChanged: { userId: string; status: string; statusMessage?: string };\n\n\t/**\n\t * Repository git status changed (another user updated their status)\n\t */\n\trepoStatusChanged: {\n\t\tuserId: string;\n\t\trepoId: string;\n\t\tdeviceId: string;\n\t\tgitStatus: SharedGitStatus;\n\t};\n\n\t/**\n\t * Connected to presence system\n\t */\n\tconnected: {};\n\n\t/**\n\t * Disconnected from presence system\n\t */\n\tdisconnected: {};\n\n\t/**\n\t * Error occurred\n\t */\n\terror: { error: Error };\n\n\t[key: string]: unknown;\n}\n\n/**\n * High-level presence client for easy integration\n *\n * Example:\n * ```typescript\n * import { PresenceClient } from '@principal-ai/control-tower-core';\n * import { WebSocketClientTransportAdapter } from '@principal-ai/control-tower-core';\n * import { ClientBuilder } from '@principal-ai/control-tower-core';\n *\n * const transport = new WebSocketClientTransportAdapter();\n *\n * const client = new ClientBuilder()\n * .withTransport(transport)\n * .build();\n *\n * const presence = new PresenceClient({\n * clientConfig: client,\n * wsUrl: 'ws://localhost:3000/ws',\n * autoConnect: true,\n * autoReconnect: true\n * });\n *\n * presence.on('userOnline', (data) => {\n * console.log(`${data.userId} came online`);\n * });\n *\n * presence.on('userOffline', (data) => {\n * console.log(`${data.userId} went offline`);\n * });\n * ```\n */\nexport class PresenceClient extends TypedEventEmitter<PresenceClientEvents> {\n\tprivate client: BaseClient;\n\tprivate wsUrl: string;\n\tprivate autoReconnectEnabled: boolean;\n\tprivate globalRoomId: string;\n\tprivate reconnectTimeout?: NodeJS.Timeout;\n\n\tconstructor(config: PresenceClientConfig) {\n\t\tsuper();\n\n\t\tthis.wsUrl = config.wsUrl;\n\t\tthis.autoReconnectEnabled = config.autoReconnect ?? true;\n\t\tthis.globalRoomId = config.globalRoomId ?? \"__global_presence__\";\n\n\t\t// Create base client\n\t\tthis.client = new BaseClient(config.clientConfig);\n\n\t\tthis.setupEventForwarding();\n\n\t\tif (config.autoConnect) {\n\t\t\tvoid this.connect();\n\t\t}\n\t}\n\n\t/**\n\t * Connect to the presence system\n\t */\n\tasync connect(): Promise<void> {\n\t\ttry {\n\t\t\t// Connect base client\n\t\t\tawait this.client.connect(this.wsUrl);\n\n\t\t\t// Join global presence room\n\t\t\tawait this.client.joinRoom(this.globalRoomId);\n\n\t\t\tawait this.emit(\"connected\", {});\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", { error: error as Error });\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Disconnect from the presence system\n\t */\n\tasync disconnect(): Promise<void> {\n\t\t// Disable auto-reconnect\n\t\tthis.autoReconnectEnabled = false;\n\n\t\t// Clear any pending reconnect\n\t\tif (this.reconnectTimeout) {\n\t\t\tclearTimeout(this.reconnectTimeout);\n\t\t\tthis.reconnectTimeout = undefined;\n\t\t}\n\n\t\ttry {\n\t\t\t// Leave global presence room\n\t\t\tawait this.client.leaveRoom();\n\n\t\t\t// Disconnect\n\t\t\tawait this.client.disconnect();\n\n\t\t\tawait this.emit(\"disconnected\", {});\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", { error: error as Error });\n\t\t}\n\t}\n\n\t/**\n\t * Get all online users with their presence data\n\t *\n\t * @returns Array of user presence objects\n\t */\n\tasync getOnlineUsers(): Promise<SerializableUserPresence[]> {\n\t\tconst response = await this.client.request<PresenceGetUsersResponse>(\n\t\t\t\"presence:get_users\",\n\t\t\t{},\n\t\t);\n\t\treturn response.users;\n\t}\n\n\t/**\n\t * Get presence information for a specific user\n\t *\n\t * @param userId The user ID to look up\n\t * @returns User presence or null if not found\n\t */\n\tasync getUserPresence(userId: string): Promise<SerializableUserPresence | null> {\n\t\tconst response = await this.client.request<PresenceGetUserResponse>(\n\t\t\t\"presence:get_user\",\n\t\t\t{ userId },\n\t\t);\n\t\treturn response.user;\n\t}\n\n\t/**\n\t * Get all users in a specific repository\n\t *\n\t * @param owner Repository owner\n\t * @param repo Repository name\n\t * @returns Array of user presence objects\n\t */\n\tasync getRepoUsers(owner: string, repo: string): Promise<SerializableUserPresence[]> {\n\t\tconst response = await this.client.request<PresenceGetRepoUsersResponse>(\n\t\t\t\"presence:get_repo_users\",\n\t\t\t{ owner, repo },\n\t\t);\n\t\treturn response.users;\n\t}\n\n\t/**\n\t * Set user status\n\t *\n\t * @param status The status to set ('online' or 'away')\n\t * @param statusMessage Optional status message\n\t */\n\tasync setStatus(status: \"online\" | \"away\", statusMessage?: string): Promise<void> {\n\t\tconst response = await this.client.request<PresenceActionResponse>(\n\t\t\t\"presence:set_status\",\n\t\t\t{ status, statusMessage },\n\t\t);\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error || \"Failed to set status\");\n\t\t}\n\t}\n\n\t/**\n\t * Set visibility (invisible/lurker mode)\n\t *\n\t * @param visible Whether the user should be visible to others\n\t */\n\tasync setVisibility(visible: boolean): Promise<void> {\n\t\tconst response = await this.client.request<PresenceActionResponse>(\n\t\t\t\"presence:set_visibility\",\n\t\t\t{ visible },\n\t\t);\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error || \"Failed to set visibility\");\n\t\t}\n\t}\n\n\t/**\n\t * Report that a repository was opened\n\t *\n\t * @param repoId Repository ID (format: \"owner/repo\")\n\t * @param branch Branch name\n\t */\n\tasync reportRepoOpened(repoId: string, branch: string): Promise<void> {\n\t\tconst response = await this.client.request<PresenceActionResponse>(\n\t\t\t\"presence:repo_open\",\n\t\t\t{ repoId, branch },\n\t\t);\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error || \"Failed to report repo opened\");\n\t\t}\n\t}\n\n\t/**\n\t * Report that a repository was closed\n\t *\n\t * @param repoId Repository ID (format: \"owner/repo\")\n\t */\n\tasync reportRepoClosed(repoId: string): Promise<void> {\n\t\tconst response = await this.client.request<PresenceActionResponse>(\n\t\t\t\"presence:repo_close\",\n\t\t\t{ repoId },\n\t\t);\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error || \"Failed to report repo closed\");\n\t\t}\n\t}\n\n\t/**\n\t * Report that a repository is now focused/active\n\t *\n\t * @param repoId Repository ID (format: \"owner/repo\")\n\t */\n\tasync reportRepoFocused(repoId: string): Promise<void> {\n\t\tconst response = await this.client.request<PresenceActionResponse>(\n\t\t\t\"presence:repo_focus\",\n\t\t\t{ repoId },\n\t\t);\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.error || \"Failed to report repo focused\");\n\t\t}\n\t}\n\n\t/**\n\t * Update git status for a repository\n\t *\n\t * Sends the current git status (branch, dirty state, file changes) to the\n\t * presence system, which broadcasts it to other users viewing the same repo.\n\t *\n\t * @param repoId Repository ID (format: \"owner/repo\")\n\t * @param gitStatus The current git status to share\n\t */\n\tasync updateRepoStatus(repoId: string, gitStatus: SharedGitStatus): Promise<void> {\n\t\tconst response = await this.client.request<PresenceRepoStatusUpdateResponse>(\n\t\t\t\"presence:repo_status_update\",\n\t\t\t{ repoId, gitStatus },\n\t\t);\n\t\tif (!response.success) {\n\t\t\tthrow new Error(response.message || \"Failed to update repo status\");\n\t\t}\n\t}\n\n\t/**\n\t * Get the underlying BaseClient\n\t */\n\tgetClient(): BaseClient {\n\t\treturn this.client;\n\t}\n\n\t/**\n\t * Check if connected\n\t */\n\tisConnected(): boolean {\n\t\t// BaseClient doesn't expose getState(), so we check internal state via a workaround\n\t\t// In practice, you can track connection state via events\n\t\treturn (this.client as any).connectionState === \"connected\";\n\t}\n\n\t/**\n\t * Set up event forwarding from BaseClient\n\t * @private\n\t */\n\tprivate setupEventForwarding(): void {\n\t\t// Forward presence events with simplified API\n\t\tthis.client.on(\"presence:user_online\", (data) => {\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tconst payload = data as { userId: string; devices?: unknown[] };\n\t\t\t\tvoid this.emit(\"userOnline\", {\n\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\tdevices: payload.devices || [],\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.client.on(\"presence:user_offline\", (data) => {\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tconst payload = data as { userId: string };\n\t\t\t\tvoid this.emit(\"userOffline\", { userId: payload.userId });\n\t\t\t}\n\t\t});\n\n\t\tthis.client.on(\"presence:status_changed\", (data) => {\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tconst payload = data as {\n\t\t\t\t\tuserId: string;\n\t\t\t\t\tstatus: string;\n\t\t\t\t\tstatusMessage?: string;\n\t\t\t\t};\n\t\t\t\tvoid this.emit(\"statusChanged\", {\n\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\tstatus: payload.status,\n\t\t\t\t\tstatusMessage: payload.statusMessage,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.client.on(\"presence:repo_status_changed\", (data) => {\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tconst payload = data as {\n\t\t\t\t\tuserId: string;\n\t\t\t\t\trepoId: string;\n\t\t\t\t\tdeviceId: string;\n\t\t\t\t\tgitStatus: SharedGitStatus;\n\t\t\t\t};\n\t\t\t\tvoid this.emit(\"repoStatusChanged\", {\n\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\trepoId: payload.repoId,\n\t\t\t\t\tdeviceId: payload.deviceId,\n\t\t\t\t\tgitStatus: payload.gitStatus,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Handle disconnection\n\t\tthis.client.on(\"disconnected\", () => {\n\t\t\tvoid this.emit(\"disconnected\", {});\n\n\t\t\t// Auto-reconnect if enabled\n\t\t\tif (this.autoReconnectEnabled) {\n\t\t\t\tthis.reconnectTimeout = setTimeout(() => {\n\t\t\t\t\tvoid this.connect().catch((error) => {\n\t\t\t\t\t\tvoid this.emit(\"error\", { error: error as Error });\n\t\t\t\t\t});\n\t\t\t\t}, 5000);\n\t\t\t}\n\t\t});\n\n\t\t// Forward errors\n\t\tthis.client.on(\"error\", (data) => {\n\t\t\tif (data && typeof data === \"object\" && \"error\" in data) {\n\t\t\t\tconst payload = data as { error: Error };\n\t\t\t\tvoid this.emit(\"error\", { error: payload.error });\n\t\t\t}\n\t\t});\n\t}\n}\n",
40
40
  "/**\n * Experimental API Types\n *\n * ⚠️ WARNING: Types in this file are experimental and may change or be removed\n * without major version bumps. Use only for prototyping and internal tooling.\n *\n * For production use, submit a feature request to graduate these APIs:\n * @see docs/FEATURE_REQUEST_TEMPLATE.md\n */\n\nimport type { ConnectedClient } from \"../server/BaseServer.js\";\n\n/**\n * Configuration for experimental features\n */\nexport interface ExperimentalFeatureConfig {\n\t/**\n\t * Enable experimental broadcast APIs\n\t *\n\t * ⚠️ DEVELOPMENT USE ONLY\n\t * Allows use of server.experimental.broadcast() and related methods\n\t *\n\t * @default false\n\t */\n\tenableBroadcast?: boolean;\n\n\t/**\n\t * Enable runtime warnings for experimental API usage\n\t *\n\t * When true, logs warnings each time an experimental API is called\n\t * Useful for tracking experimental API usage in development\n\t *\n\t * @default true\n\t */\n\twarnOnExperimentalUse?: boolean;\n\n\t/**\n\t * Track experimental API usage metrics\n\t *\n\t * When true, emits events for experimental API calls that can be\n\t * monitored to understand usage patterns\n\t *\n\t * @default false\n\t */\n\ttrackUsageMetrics?: boolean;\n}\n\n/**\n * Client predicate function for filtering broadcasts\n *\n * @param client - The connected client to evaluate\n * @returns true if the client should receive the broadcast\n *\n * @example\n * // Broadcast only to admin users\n * const isAdmin: ClientPredicate = (client) => {\n * return getUserRole(client.userId) === 'admin';\n * };\n */\nexport type ClientPredicate = (client: ConnectedClient) => boolean;\n\n/**\n * Result of a broadcast operation\n */\nexport interface BroadcastResult {\n\t/**\n\t * Number of clients that successfully received the message\n\t */\n\tsent: number;\n\n\t/**\n\t * Number of clients that failed to receive the message\n\t */\n\tfailed: number;\n\n\t/**\n\t * Errors that occurred during broadcast\n\t */\n\terrors: Array<{\n\t\tclientId: string;\n\t\terror: Error;\n\t}>;\n\n\t/**\n\t * Total time taken to complete the broadcast (milliseconds)\n\t */\n\tdurationMs: number;\n}\n\n/**\n * Options for broadcast operations\n */\nexport interface BroadcastOptions {\n\t/**\n\t * Whether to continue broadcasting even if some sends fail\n\t *\n\t * @default true\n\t */\n\tcontinueOnError?: boolean;\n\n\t/**\n\t * Timeout for each individual send operation (milliseconds)\n\t *\n\t * @default 5000\n\t */\n\tsendTimeout?: number;\n\n\t/**\n\t * Whether to include detailed error information in the result\n\t *\n\t * @default false\n\t */\n\tincludeErrors?: boolean;\n}\n\n/**\n * Experimental API usage metrics event\n */\nexport interface ExperimentalUsageEvent {\n\t/**\n\t * The experimental method that was called\n\t */\n\tmethod:\n\t\t| \"broadcast\"\n\t\t| \"broadcastAuthenticated\"\n\t\t| \"broadcastWhere\"\n\t\t| \"sendToUsers\";\n\n\t/**\n\t * Message type being broadcast\n\t */\n\tmessageType: string;\n\n\t/**\n\t * Number of recipients\n\t */\n\trecipientCount: number;\n\n\t/**\n\t * Timestamp of the call\n\t */\n\ttimestamp: number;\n\n\t/**\n\t * Size of the message payload (bytes)\n\t */\n\tpayloadSize?: number;\n}\n\n/**\n * Error thrown when experimental features are not enabled\n */\nexport class ExperimentalFeatureError extends Error {\n\tconstructor(\n\t\tpublic readonly feature: string,\n\t\tpublic readonly configKey: keyof ExperimentalFeatureConfig,\n\t) {\n\t\tsuper(\n\t\t\t`Experimental feature '${feature}' is not enabled.\\n\\n` +\n\t\t\t\t`To enable, set '${String(configKey)}: true' in your server configuration:\\n\\n` +\n\t\t\t\t` const server = new ServerBuilder()\\n` +\n\t\t\t\t` .withExperimentalFeatures({ ${String(configKey)}: true })\\n` +\n\t\t\t\t` .build();\\n\\n` +\n\t\t\t\t`⚠️ WARNING: Experimental APIs are for development only.\\n` +\n\t\t\t\t`For production use, submit a feature request:\\n` +\n\t\t\t\t`https://github.com/your-org/control-tower-core/issues/new\\n\\n` +\n\t\t\t\t`See docs/EXPERIMENTAL_BROADCAST.md for details.`,\n\t\t);\n\t\tthis.name = \"ExperimentalFeatureError\";\n\t}\n}\n",
41
41
  "/**\n * Experimental Broadcast APIs\n *\n * ⚠️ DEVELOPMENT USE ONLY\n *\n * This namespace provides experimental broadcast methods for rapid prototyping\n * and internal tooling. These APIs may change or be removed without major version bumps.\n *\n * For production use, submit a feature request to graduate these APIs to first-class APIs.\n *\n * @see docs/EXPERIMENTAL_BROADCAST.md\n * @see docs/FEATURE_REQUEST_TEMPLATE.md\n */\n\nimport type {\n\tBroadcastOptions,\n\tBroadcastResult,\n\tClientPredicate,\n\tExperimentalFeatureConfig,\n\tExperimentalUsageEvent,\n} from \"../types/experimental.js\";\nimport { ExperimentalFeatureError } from \"../types/experimental.js\";\nimport type { Message } from \"../types/index.js\";\nimport type { ConnectedClient } from \"./BaseServer.js\";\n\n/**\n * Experimental API namespace\n *\n * Provides broadcast methods that bypass normal room isolation.\n * Requires explicit opt-in via configuration.\n */\nexport class ExperimentalAPI {\n\tprivate readonly config: ExperimentalFeatureConfig;\n\tprivate readonly logger?: {\n\t\twarn: (message: string, ...args: unknown[]) => void;\n\t};\n\tprivate readonly emitMetric?: (event: ExperimentalUsageEvent) => void;\n\tprivate readonly getClients: () => ConnectedClient[];\n\tprivate readonly sendToClient: (\n\t\tclientId: string,\n\t\tmessage: Record<string, unknown>,\n\t) => Promise<void>;\n\n\tconstructor(options: {\n\t\tconfig: ExperimentalFeatureConfig;\n\t\tlogger?: { warn: (message: string, ...args: unknown[]) => void };\n\t\temitMetric?: (event: ExperimentalUsageEvent) => void;\n\t\tgetClients: () => ConnectedClient[];\n\t\tsendToClient: (\n\t\t\tclientId: string,\n\t\t\tmessage: Record<string, unknown>,\n\t\t) => Promise<void>;\n\t}) {\n\t\tthis.config = options.config;\n\t\tthis.logger = options.logger;\n\t\tthis.emitMetric = options.emitMetric;\n\t\tthis.getClients = options.getClients;\n\t\tthis.sendToClient = options.sendToClient;\n\t}\n\n\t/**\n\t * Broadcasts a message to all connected clients\n\t *\n\t * ⚠️ WARNING: This bypasses room isolation and sends to every connected client.\n\t *\n\t * @experimental\n\t * @param message - Message to broadcast\n\t * @param options - Broadcast options\n\t * @returns Broadcast result with success/failure counts\n\t *\n\t * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n\t *\n\t * @example\n\t * ```typescript\n\t * await server.experimental.broadcast({\n\t * type: 'system:announcement',\n\t * data: { message: 'Server maintenance in 5 minutes' }\n\t * });\n\t * ```\n\t */\n\tasync broadcast(\n\t\tmessage: Omit<Message, \"id\" | \"timestamp\">,\n\t\toptions?: BroadcastOptions,\n\t): Promise<BroadcastResult> {\n\t\tthis.ensureEnabled(\"broadcast\", \"enableBroadcast\");\n\t\tthis.warnIfEnabled(\"broadcast()\");\n\n\t\tconst clients = this.getClients();\n\n\t\tconst result = await this.broadcastToClients(clients, message, options);\n\n\t\tthis.trackUsage(\"broadcast\", message.type, clients.length, message.payload);\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Broadcasts a message to all authenticated clients\n\t *\n\t * Skips unauthenticated connections. Useful for user-specific notifications.\n\t *\n\t * @experimental\n\t * @param message - Message to broadcast\n\t * @param options - Broadcast options\n\t * @returns Broadcast result with success/failure counts\n\t *\n\t * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n\t *\n\t * @example\n\t * ```typescript\n\t * await server.experimental.broadcastAuthenticated({\n\t * type: 'presence:user_online',\n\t * data: { userId: 'alice', status: 'online' }\n\t * });\n\t * ```\n\t */\n\tasync broadcastAuthenticated(\n\t\tmessage: Omit<Message, \"id\" | \"timestamp\">,\n\t\toptions?: BroadcastOptions,\n\t): Promise<BroadcastResult> {\n\t\tthis.ensureEnabled(\"broadcastAuthenticated\", \"enableBroadcast\");\n\t\tthis.warnIfEnabled(\"broadcastAuthenticated()\");\n\n\t\tconst clients = this.getClients().filter((client) => client.authenticated);\n\n\t\tconst result = await this.broadcastToClients(clients, message, options);\n\n\t\tthis.trackUsage(\n\t\t\t\"broadcastAuthenticated\",\n\t\t\tmessage.type,\n\t\t\tclients.length,\n\t\t\tmessage.payload,\n\t\t);\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Broadcasts a message to clients matching a predicate function\n\t *\n\t * Allows custom filtering logic for targeted broadcasts.\n\t *\n\t * @experimental\n\t * @param predicate - Function to filter clients\n\t * @param message - Message to broadcast\n\t * @param options - Broadcast options\n\t * @returns Broadcast result with success/failure counts\n\t *\n\t * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n\t *\n\t * @example\n\t * ```typescript\n\t * // Broadcast only to admin users\n\t * await server.experimental.broadcastWhere(\n\t * (client) => getUserRole(client.userId) === 'admin',\n\t * {\n\t * type: 'admin:alert',\n\t * data: { message: 'Critical system event' }\n\t * }\n\t * );\n\t * ```\n\t */\n\tasync broadcastWhere(\n\t\tpredicate: ClientPredicate,\n\t\tmessage: Omit<Message, \"id\" | \"timestamp\">,\n\t\toptions?: BroadcastOptions,\n\t): Promise<BroadcastResult> {\n\t\tthis.ensureEnabled(\"broadcastWhere\", \"enableBroadcast\");\n\t\tthis.warnIfEnabled(\"broadcastWhere()\");\n\n\t\tconst clients = this.getClients().filter(predicate);\n\n\t\tconst result = await this.broadcastToClients(clients, message, options);\n\n\t\tthis.trackUsage(\n\t\t\t\"broadcastWhere\",\n\t\t\tmessage.type,\n\t\t\tclients.length,\n\t\t\tmessage.payload,\n\t\t);\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Sends a message to specific users by their user IDs\n\t *\n\t * Useful for direct notifications and cross-room messaging.\n\t *\n\t * @experimental\n\t * @param userIds - Array of user IDs to send to\n\t * @param message - Message to send\n\t * @param options - Broadcast options\n\t * @returns Broadcast result with success/failure counts\n\t *\n\t * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n\t *\n\t * @example\n\t * ```typescript\n\t * await server.experimental.sendToUsers(\n\t * ['user123', 'user456'],\n\t * {\n\t * type: 'notification:mention',\n\t * data: { mentionedBy: 'alice', context: 'issue-42' }\n\t * }\n\t * );\n\t * ```\n\t */\n\tasync sendToUsers(\n\t\tuserIds: string[],\n\t\tmessage: Omit<Message, \"id\" | \"timestamp\">,\n\t\toptions?: BroadcastOptions,\n\t): Promise<BroadcastResult> {\n\t\tthis.ensureEnabled(\"sendToUsers\", \"enableBroadcast\");\n\t\tthis.warnIfEnabled(\"sendToUsers()\");\n\n\t\tconst userIdSet = new Set(userIds);\n\t\tconst clients = this.getClients().filter((client) =>\n\t\t\tuserIdSet.has(client.userId),\n\t\t);\n\n\t\tconst result = await this.broadcastToClients(clients, message, options);\n\n\t\tthis.trackUsage(\n\t\t\t\"sendToUsers\",\n\t\t\tmessage.type,\n\t\t\tclients.length,\n\t\t\tmessage.payload,\n\t\t);\n\n\t\treturn result;\n\t}\n\n\t// Private helper methods\n\n\tprivate ensureEnabled(\n\t\tfeature: string,\n\t\tconfigKey: keyof ExperimentalFeatureConfig,\n\t): void {\n\t\tif (!this.config[configKey]) {\n\t\t\tthrow new ExperimentalFeatureError(feature, configKey);\n\t\t}\n\t}\n\n\tprivate warnIfEnabled(method: string): void {\n\t\tif (this.config.warnOnExperimentalUse !== false) {\n\t\t\tthis.logger?.warn(\n\t\t\t\t`⚠️ Experimental API: server.experimental.${method} is for development only. ` +\n\t\t\t\t\t`See docs/EXPERIMENTAL_BROADCAST.md for details.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate trackUsage(\n\t\tmethod:\n\t\t\t| \"broadcast\"\n\t\t\t| \"broadcastAuthenticated\"\n\t\t\t| \"broadcastWhere\"\n\t\t\t| \"sendToUsers\",\n\t\tmessageType: string,\n\t\trecipientCount: number,\n\t\tpayload?: unknown,\n\t): void {\n\t\tif (this.config.trackUsageMetrics && this.emitMetric) {\n\t\t\tconst payloadSize = payload ? JSON.stringify(payload).length : undefined;\n\n\t\t\tthis.emitMetric({\n\t\t\t\tmethod,\n\t\t\t\tmessageType,\n\t\t\t\trecipientCount,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tpayloadSize,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async broadcastToClients(\n\t\tclients: ConnectedClient[],\n\t\tmessage: Omit<Message, \"id\" | \"timestamp\">,\n\t\toptions?: BroadcastOptions,\n\t): Promise<BroadcastResult> {\n\t\tconst startTime = Date.now();\n\t\tconst opts = {\n\t\t\tcontinueOnError: options?.continueOnError ?? true,\n\t\t\tsendTimeout: options?.sendTimeout ?? 5000,\n\t\t\tincludeErrors: options?.includeErrors ?? false,\n\t\t};\n\n\t\tconst fullMessage: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttimestamp: Date.now(),\n\t\t\ttype: message.type,\n\t\t\tpayload: message.payload,\n\t\t};\n\n\t\tlet sent = 0;\n\t\tlet failed = 0;\n\t\tconst errors: Array<{ clientId: string; error: Error }> = [];\n\n\t\tconst sendPromises = clients.map(async (client) => {\n\t\t\ttry {\n\t\t\t\t// Create timeout promise\n\t\t\t\tconst timeoutPromise = new Promise<never>((_, reject) => {\n\t\t\t\t\tsetTimeout(() => reject(new Error(\"Send timeout\")), opts.sendTimeout);\n\t\t\t\t});\n\n\t\t\t\t// Convert Message to Record<string, unknown> for sendToClient\n\t\t\t\tconst messageRecord: Record<string, unknown> = {\n\t\t\t\t\tid: fullMessage.id,\n\t\t\t\t\ttype: fullMessage.type,\n\t\t\t\t\tpayload: fullMessage.payload,\n\t\t\t\t\ttimestamp: fullMessage.timestamp,\n\t\t\t\t};\n\n\t\t\t\t// Race between send and timeout\n\t\t\t\tawait Promise.race([\n\t\t\t\t\tthis.sendToClient(client.id, messageRecord),\n\t\t\t\t\ttimeoutPromise,\n\t\t\t\t]);\n\n\t\t\t\tsent++;\n\t\t\t} catch (error) {\n\t\t\t\tfailed++;\n\t\t\t\tif (opts.includeErrors) {\n\t\t\t\t\terrors.push({\n\t\t\t\t\t\tclientId: client.id,\n\t\t\t\t\t\terror: error as Error,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (!opts.continueOnError) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tawait Promise.all(sendPromises);\n\n\t\treturn {\n\t\t\tsent,\n\t\t\tfailed,\n\t\t\terrors,\n\t\t\tdurationMs: Date.now() - startTime,\n\t\t};\n\t}\n\n\tprivate generateId(): string {\n\t\treturn `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\t}\n}\n",
42
42
  "import type { Server as HttpServer } from \"http\";\nimport type { Server as HttpsServer } from \"https\";\nimport type { WebSocketServer } from \"ws\";\nimport type { IAuthAdapter } from \"../abstractions/AuthAdapter.js\";\nimport { TypedEventEmitter } from \"../abstractions/EventEmitter.js\";\nimport type { LockManager } from \"../abstractions/LockManager.js\";\nimport type { PresenceManager } from \"../abstractions/PresenceManager.js\";\nimport type { RoomManager } from \"../abstractions/RoomManager.js\";\nimport type { IStorageAdapter } from \"../abstractions/StorageAdapter.js\";\nimport type { ITransportAdapter } from \"../abstractions/TransportAdapter.js\";\nimport type {\n\tEvent,\n\tExperimentalFeatureConfig,\n\tExperimentalUsageEvent,\n\tLock,\n\tLockRequest,\n\tMessage,\n\tRoom,\n\tRoomConfig,\n\tRoomUser,\n} from \"../types/index.js\";\nimport { serializeRoomState } from \"../types/room.js\";\nimport { ExperimentalAPI } from \"./ExperimentalAPI.js\";\n\n/**\n * Custom message handler for application-specific message types.\n *\n * Called when a message type is not recognized by the built-in handler.\n * Return true if the message was handled, false to fall through to the default error response.\n *\n * @param clientId - The ID of the client that sent the message\n * @param message - The message received\n * @param sendResponse - Function to send a response back to the client (preserves message.id for correlation)\n * @returns Promise<boolean> - true if handled, false otherwise\n */\nexport type CustomMessageHandler = (\n\tclientId: string,\n\tmessage: Message,\n\tsendResponse: (response: Record<string, unknown>) => Promise<void>,\n) => Promise<boolean>;\n\nexport interface ServerConfig {\n\ttransport: ITransportAdapter;\n\tauth?: IAuthAdapter;\n\tstorage?: IStorageAdapter;\n\troomManager: RoomManager;\n\tlockManager: LockManager;\n\tpresenceManager?: PresenceManager;\n\tdefaultRoomConfig?: Partial<RoomConfig>;\n\thttpServer?: HttpServer | HttpsServer;\n\twebSocketPath?: string;\n\twebSocketServer?: WebSocketServer;\n\texperimental?: ExperimentalFeatureConfig;\n\t/**\n\t * Custom message handler for application-specific message types.\n\t * Called when a message type is not recognized by the built-in handler.\n\t */\n\tcustomMessageHandler?: CustomMessageHandler;\n}\n\nexport interface ConnectedClient {\n\tid: string;\n\tuserId: string;\n\t/**\n\t * Device ID for presence tracking.\n\t * By default equals clientId, but can be overridden via setClientDeviceId()\n\t * to support multi-window scenarios where multiple clients share a device.\n\t */\n\tdeviceId: string;\n\t/**\n\t * Set of room IDs the client is currently in\n\t *\n\t * Multi-room support: A client can be in multiple rooms simultaneously.\n\t * This enables the two-tier architecture where clients can maintain\n\t * global presence while participating in multiple repository rooms.\n\t */\n\troomIds: Set<string>;\n\t/**\n\t * Legacy single-room accessor for backward compatibility\n\t *\n\t * Returns the first room the client is in, or null if not in any rooms.\n\t *\n\t * @deprecated Use roomIds for multi-room support\n\t */\n\troomId: string | null;\n\tauthenticated: boolean;\n\tconnectedAt: number;\n}\n\nexport interface ServerEvents {\n\tstarted: { port: number };\n\tstopped: {}; // eslint-disable-line @typescript-eslint/no-empty-object-type\n\tclient_connected: { client: ConnectedClient };\n\tclient_disconnected: { clientId: string; reason: string };\n\tclient_authenticated: {\n\t\tclientId: string;\n\t\tuserId: string;\n\t\tmetadata?: Record<string, unknown>;\n\t};\n\troom_created: { room: Room };\n\troom_deleted: { roomId: string };\n\tclient_joined_room: { clientId: string; roomId: string };\n\tclient_left_room: { clientId: string; roomId: string };\n\tevent_broadcast: { roomId: string; event: Event; fromClientId: string };\n\tlock_acquired: { lock: Lock; clientId: string };\n\tlock_released: { lockId: string; clientId: string };\n\terror: { error: Error; context?: string };\n\texperimental_usage: ExperimentalUsageEvent;\n\t// Presence events\n\tpresence_changed: { userId: string; status: string; timestamp: number };\n\tpresence_device_connected: {\n\t\tuserId: string;\n\t\tdeviceId: string;\n\t\ttimestamp: number;\n\t};\n\tpresence_device_disconnected: {\n\t\tuserId: string;\n\t\tdeviceId: string;\n\t\ttimestamp: number;\n\t};\n\tpresence_activity: { userId: string; deviceId: string; timestamp: number };\n\t[key: string]: unknown;\n}\n\nexport class BaseServer extends TypedEventEmitter<ServerEvents> {\n\tprivate transport: ITransportAdapter;\n\tprivate auth?: IAuthAdapter;\n\tprivate storage?: IStorageAdapter;\n\tprivate roomManager: RoomManager;\n\tprivate lockManager: LockManager;\n\tprivate presenceManager?: PresenceManager;\n\tprivate config: ServerConfig;\n\n\tprivate clients = new Map<string, ConnectedClient>();\n\tprivate clientMessageHandlers = new Map<\n\t\tstring,\n\t\t(message: Message) => Promise<void>\n\t>();\n\tprivate clientUserMap = new Map<string, string>(); // clientId -> userId\n\tprivate userClientMap = new Map<string, Set<string>>(); // userId -> Set<clientId>\n\tprivate running = false;\n\tprivate initialized = false;\n\tprivate mode: \"standalone\" | \"integration\";\n\tprivate heartbeatIntervalId?: NodeJS.Timeout;\n\n\t/**\n\t * Experimental APIs namespace\n\t *\n\t * ⚠️ WARNING: Experimental features are for development only.\n\t * APIs may change or be removed without major version bumps.\n\t *\n\t * @see docs/EXPERIMENTAL_BROADCAST.md\n\t */\n\tpublic readonly experimental: ExperimentalAPI;\n\n\tconstructor(config: ServerConfig) {\n\t\tsuper();\n\t\tthis.config = config;\n\t\tthis.transport = config.transport;\n\t\tthis.auth = config.auth;\n\t\tthis.storage = config.storage;\n\t\tthis.roomManager = config.roomManager;\n\t\tthis.lockManager = config.lockManager;\n\t\tthis.presenceManager = config.presenceManager;\n\n\t\t// Initialize experimental API namespace\n\t\tthis.experimental = new ExperimentalAPI({\n\t\t\tconfig: config.experimental || {\n\t\t\t\tenableBroadcast: false,\n\t\t\t\twarnOnExperimentalUse: true,\n\t\t\t\ttrackUsageMetrics: false,\n\t\t\t},\n\t\t\tlogger: console,\n\t\t\temitMetric: (event: ExperimentalUsageEvent) => {\n\t\t\t\tvoid this.emit(\"experimental_usage\", event);\n\t\t\t},\n\t\t\tgetClients: () => Array.from(this.clients.values()),\n\t\t\tsendToClient: (clientId: string, message: Record<string, unknown>) =>\n\t\t\t\tthis.sendToClient(clientId, message),\n\t\t});\n\n\t\t// Determine mode based on configuration\n\t\tthis.mode =\n\t\t\tconfig.httpServer || config.webSocketServer\n\t\t\t\t? \"integration\"\n\t\t\t\t: \"standalone\";\n\n\t\t// Connect auth adapter to transport if both exist and transport supports it\n\t\tif (this.auth && this.transport) {\n\t\t\tconst transportWithAuth = this.transport as ITransportAdapter & {\n\t\t\t\tsetAuthAdapter?: (auth: IAuthAdapter) => void;\n\t\t\t};\n\t\t\tif (typeof transportWithAuth.setAuthAdapter === \"function\") {\n\t\t\t\ttransportWithAuth.setAuthAdapter(this.auth);\n\t\t\t}\n\t\t}\n\n\t\t// Set up transport event handlers\n\t\tthis.transport.onMessage(this.handleTransportMessage.bind(this));\n\t\tthis.transport.onError(this.handleTransportError.bind(this));\n\t\tthis.transport.onClose(this.handleTransportClose.bind(this));\n\n\t\t// Start heartbeat processor if presence is enabled\n\t\tif (this.presenceManager?.isEnabled()) {\n\t\t\tthis.startHeartbeatProcessor();\n\t\t}\n\t}\n\n\t/**\n\t * Start periodic heartbeat processing for presence management\n\t */\n\tprivate startHeartbeatProcessor(): void {\n\t\tif (!this.presenceManager) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = this.presenceManager.getConfig();\n\t\tconst interval = config.heartbeatInterval;\n\n\t\tthis.heartbeatIntervalId = setInterval(async () => {\n\t\t\ttry {\n\t\t\t\tconst changes = await this.presenceManager!.processHeartbeats();\n\n\t\t\t\t// Emit presence change events\n\t\t\t\tfor (const change of changes) {\n\t\t\t\t\tawait this.emit(\"presence_changed\", {\n\t\t\t\t\t\tuserId: change.userId,\n\t\t\t\t\t\tstatus: change.status,\n\t\t\t\t\t\ttimestamp: change.timestamp,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Broadcast presence updates if enabled\n\t\t\t\t\tif (config.broadcastPresenceUpdates) {\n\t\t\t\t\t\tawait this.experimental.broadcastAuthenticated({\n\t\t\t\t\t\t\ttype: \"presence:status_changed\",\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tuserId: change.userId,\n\t\t\t\t\t\t\t\tstatus: change.status,\n\t\t\t\t\t\t\t\tpreviousStatus: change.previousStatus,\n\t\t\t\t\t\t\t\treason: change.reason,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: \"heartbeat_processor\",\n\t\t\t\t});\n\t\t\t}\n\t\t}, interval);\n\t}\n\n\t/**\n\t * Stop heartbeat processor\n\t */\n\tprivate stopHeartbeatProcessor(): void {\n\t\tif (this.heartbeatIntervalId) {\n\t\t\tclearInterval(this.heartbeatIntervalId);\n\t\t\tthis.heartbeatIntervalId = undefined;\n\t\t}\n\t}\n\n\t// Server Lifecycle\n\tasync start(port?: number): Promise<void> {\n\t\tif (this.mode === \"integration\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"Cannot use start() in integration mode. Use initialize() instead.\",\n\t\t\t);\n\t\t}\n\n\t\tif (!port) {\n\t\t\tthrow new Error(\"Port is required for standalone mode\");\n\t\t}\n\n\t\tif (this.running) {\n\t\t\tthrow new Error(\"Server is already running\");\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.transport.connect(`ws://localhost:${port}`, {\n\t\t\t\turl: `ws://localhost:${port}`,\n\t\t\t});\n\t\t\tthis.running = true;\n\t\t\tthis.initialized = true;\n\t\t\tawait this.emit(\"started\", { port });\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"server_start\",\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync initialize(): Promise<void> {\n\t\tif (this.mode === \"standalone\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"Cannot use initialize() in standalone mode. Use start() instead.\",\n\t\t\t);\n\t\t}\n\n\t\tif (this.initialized) {\n\t\t\tthrow new Error(\"Server is already initialized\");\n\t\t}\n\n\t\ttry {\n\t\t\tconst transport = this.transport as ITransportAdapter & {\n\t\t\t\tattach?: (\n\t\t\t\t\tserver: HttpServer | HttpsServer,\n\t\t\t\t\tpath?: string,\n\t\t\t\t) => Promise<void>;\n\t\t\t\tattachToWebSocketServer?: (wss: WebSocketServer) => Promise<void>;\n\t\t\t};\n\n\t\t\tif (this.config.webSocketServer) {\n\t\t\t\t// Attach to existing WebSocket server\n\t\t\t\tif (typeof transport.attachToWebSocketServer === \"function\") {\n\t\t\t\t\tawait transport.attachToWebSocketServer(this.config.webSocketServer);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"Transport adapter does not support attachToWebSocketServer\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (this.config.httpServer) {\n\t\t\t\t// Attach to existing HTTP server\n\t\t\t\tif (typeof transport.attach === \"function\") {\n\t\t\t\t\tawait transport.attach(\n\t\t\t\t\t\tthis.config.httpServer,\n\t\t\t\t\t\tthis.config.webSocketPath || \"/ws\",\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Transport adapter does not support attach\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Either httpServer or webSocketServer must be provided in integration mode\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.running = true;\n\t\t\tthis.initialized = true;\n\t\t\tawait this.emit(\"started\", { port: 0 }); // Port 0 indicates integration mode\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"server_initialize\",\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync stop(): Promise<void> {\n\t\tif (!this.running) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.running = false;\n\n\t\t// Stop heartbeat processor\n\t\tthis.stopHeartbeatProcessor();\n\n\t\t// Disconnect all clients\n\t\tfor (const [clientId] of Array.from(this.clients)) {\n\t\t\tawait this.disconnectClient(clientId, \"Server shutting down\");\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.transport.disconnect();\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"server_stop\",\n\t\t\t});\n\t\t}\n\n\t\tthis.clients.clear();\n\t\tthis.clientMessageHandlers.clear();\n\t\tthis.clientUserMap.clear();\n\t\tthis.userClientMap.clear();\n\n\t\t// Clear presence data\n\t\tif (this.presenceManager) {\n\t\t\tawait this.presenceManager.clear();\n\t\t}\n\n\t\tawait this.emit(\"stopped\", {});\n\t}\n\n\t// Client Management\n\tprivate async handleTransportMessage(message: Message): Promise<void> {\n\t\t// Handle special transport messages\n\t\tif (message.type === \"connection\") {\n\t\t\tawait this.handleConnectionMessage(message);\n\t\t\treturn;\n\t\t}\n\n\t\tif (message.type === \"client_authenticated\") {\n\t\t\tawait this.handleClientAuthenticatedMessage(message);\n\t\t\treturn;\n\t\t}\n\n\t\tif (message.type === \"disconnect\") {\n\t\t\tconst payload = message.payload as { clientId: string; reason?: string };\n\t\t\tawait this.disconnectClient(\n\t\t\t\tpayload.clientId,\n\t\t\t\tpayload.reason || \"Client disconnected\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Transport messages contain clientId in the payload for routing\n\t\tconst payload = message.payload as {\n\t\t\tclientId?: string;\n\t\t\ttype?: string;\n\t\t\t[key: string]: unknown;\n\t\t};\n\t\tconst { clientId, type, ...clientMessage } = payload;\n\n\t\tconst clientMsg: Message = {\n\t\t\tid: message.id,\n\t\t\ttype: type || message.type, // Use inner type if present, otherwise outer type\n\t\t\tpayload: clientMessage,\n\t\t\ttimestamp: message.timestamp,\n\t\t};\n\n\t\tif (!clientId) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: new Error(\"Message missing clientId\"),\n\t\t\t\tcontext: \"transport_message\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst handler = this.clientMessageHandlers.get(clientId);\n\t\tif (handler) {\n\t\t\tawait handler(clientMsg);\n\t\t} else {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: new Error(`No handler for client ${clientId}`),\n\t\t\t\tcontext: \"transport_message\",\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleConnectionMessage(message: Message): Promise<void> {\n\t\tconst payload = message.payload as {\n\t\t\tclientId: string;\n\t\t\tauthenticated: boolean;\n\t\t\tuserId?: string;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t};\n\n\t\t// Add the client with initial auth state\n\t\tconst roomIds = new Set<string>();\n\t\tconst client: ConnectedClient = {\n\t\t\tid: payload.clientId,\n\t\t\tuserId: payload.userId || \"\",\n\t\t\tdeviceId: payload.clientId, // Default to clientId, can be overridden via setClientDeviceId()\n\t\t\troomIds,\n\t\t\tget roomId() {\n\t\t\t\treturn roomIds.size > 0 ? roomIds.values().next().value || null : null;\n\t\t\t},\n\t\t\tauthenticated: payload.authenticated,\n\t\t\tconnectedAt: Date.now(),\n\t\t};\n\n\t\tthis.clients.set(payload.clientId, client);\n\t\tthis.clientMessageHandlers.set(\n\t\t\tpayload.clientId,\n\t\t\tthis.createClientMessageHandler(payload.clientId),\n\t\t);\n\n\t\tawait this.emit(\"client_connected\", { client });\n\n\t\t// Register with presence manager if authenticated\n\t\tif (\n\t\t\tpayload.authenticated &&\n\t\t\tthis.presenceManager?.isEnabled() &&\n\t\t\tpayload.userId\n\t\t) {\n\t\t\ttry {\n\t\t\t\tawait this.presenceManager.connectDevice(\n\t\t\t\t\tpayload.userId,\n\t\t\t\t\tpayload.clientId,\n\t\t\t\t\t{\n\t\t\t\t\t\tconnectedAt: Date.now(),\n\t\t\t\t\t\tlastActivity: Date.now(),\n\t\t\t\t\t\tmetadata: payload.metadata,\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tawait this.emit(\"presence_device_connected\", {\n\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\tdeviceId: payload.clientId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t});\n\n\t\t\t\t// Broadcast presence update\n\t\t\t\tconst presenceConfig = this.presenceManager.getConfig();\n\t\t\t\tif (presenceConfig.broadcastPresenceUpdates) {\n\t\t\t\t\tawait this.experimental.broadcastAuthenticated({\n\t\t\t\t\t\ttype: \"presence:user_online\",\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\t\t\tdeviceId: payload.clientId,\n\t\t\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: \"presence_connect_device\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (payload.authenticated) {\n\t\t\tawait this.emit(\"client_authenticated\", {\n\t\t\t\tclientId: payload.clientId,\n\t\t\t\tuserId: payload.userId || \"\",\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleClientAuthenticatedMessage(\n\t\tmessage: Message,\n\t): Promise<void> {\n\t\tconst payload = message.payload as {\n\t\t\tclientId: string;\n\t\t\tuserId: string;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t};\n\n\t\tconst client = this.clients.get(payload.clientId);\n\t\tif (client) {\n\t\t\tclient.authenticated = true;\n\t\t\tclient.userId = payload.userId;\n\n\t\t\t// Auto-update client mappings\n\t\t\tthis.clientUserMap.set(payload.clientId, payload.userId);\n\t\t\tif (!this.userClientMap.has(payload.userId)) {\n\t\t\t\tthis.userClientMap.set(payload.userId, new Set());\n\t\t\t}\n\t\t\tthis.userClientMap.get(payload.userId)!.add(payload.clientId);\n\n\t\t\tawait this.emit(\"client_authenticated\", {\n\t\t\t\tclientId: payload.clientId,\n\t\t\t\tuserId: payload.userId,\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleTransportError(error: Error): Promise<void> {\n\t\tawait this.emit(\"error\", { error, context: \"transport\" });\n\t}\n\n\tprivate async handleTransportClose(\n\t\t_code: number,\n\t\t_reason: string,\n\t): Promise<void> {\n\t\t// Transport close means server is shutting down\n\t\tif (this.running) {\n\t\t\tawait this.stop();\n\t\t}\n\t}\n\n\tprivate async addClient(clientId: string): Promise<void> {\n\t\tconst roomIds = new Set<string>();\n\t\tconst client: ConnectedClient = {\n\t\t\tid: clientId,\n\t\t\tuserId: \"\",\n\t\t\tdeviceId: clientId, // Default to clientId, can be overridden via setClientDeviceId()\n\t\t\troomIds,\n\t\t\tget roomId() {\n\t\t\t\treturn roomIds.size > 0 ? roomIds.values().next().value || null : null;\n\t\t\t},\n\t\t\tauthenticated: false,\n\t\t\tconnectedAt: Date.now(),\n\t\t};\n\n\t\tthis.clients.set(clientId, client);\n\n\t\t// Set up message handler for this client\n\t\tthis.clientMessageHandlers.set(\n\t\t\tclientId,\n\t\t\tthis.createClientMessageHandler(clientId),\n\t\t);\n\n\t\tawait this.emit(\"client_connected\", { client });\n\t}\n\n\tprivate async disconnectClient(\n\t\tclientId: string,\n\t\treason: string,\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Auto-clean client mappings\n\t\tif (client.userId) {\n\t\t\tthis.clientUserMap.delete(clientId);\n\t\t\tconst clientSet = this.userClientMap.get(client.userId);\n\t\t\tif (clientSet) {\n\t\t\t\tclientSet.delete(clientId);\n\t\t\t\tif (clientSet.size === 0) {\n\t\t\t\t\tthis.userClientMap.delete(client.userId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Unregister from presence manager\n\t\tif (this.presenceManager?.isEnabled() && client.userId) {\n\t\t\ttry {\n\t\t\t\tconst presence = await this.presenceManager.disconnectDevice(\n\t\t\t\t\tclient.userId,\n\t\t\t\t\tclient.deviceId,\n\t\t\t\t);\n\n\t\t\t\tawait this.emit(\"presence_device_disconnected\", {\n\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\tdeviceId: client.deviceId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t});\n\n\t\t\t\t// Broadcast presence update if user went offline or into grace period\n\t\t\t\tconst presenceConfig = this.presenceManager.getConfig();\n\t\t\t\tif (\n\t\t\t\t\tpresenceConfig.broadcastPresenceUpdates &&\n\t\t\t\t\t(!presence || presence.status === \"offline\")\n\t\t\t\t) {\n\t\t\t\t\tawait this.experimental.broadcastAuthenticated({\n\t\t\t\t\t\ttype: \"presence:user_offline\",\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\t\t\tdeviceId: client.deviceId,\n\t\t\t\t\t\t\tstatus: presence?.status || \"offline\",\n\t\t\t\t\t\t\tgracePeriod: presenceConfig.gracePeriod,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: \"presence_disconnect_device\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Leave all rooms the client is in and broadcast to other room members\n\t\tfor (const roomId of client.roomIds) {\n\t\t\t// Broadcast member_left to other room members\n\t\t\ttry {\n\t\t\t\tawait this.experimental.broadcastWhere(\n\t\t\t\t\t(c) => c.roomIds.has(roomId) && c.id !== clientId,\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"member_left\",\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\troomId,\n\t\t\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t// Experimental broadcast not enabled, skip silently\n\t\t\t}\n\n\t\t\tawait this.roomManager.leaveRoom(roomId, client.userId);\n\t\t\tawait this.emit(\"client_left_room\", { clientId, roomId });\n\t\t}\n\n\t\t// Release all locks held by this client\n\t\tawait this.lockManager.releaseUserLocks(client.userId);\n\n\t\t// Clean up\n\t\tthis.clients.delete(clientId);\n\t\tthis.clientMessageHandlers.delete(clientId);\n\n\t\tawait this.emit(\"client_disconnected\", { clientId, reason });\n\t}\n\n\tprivate createClientMessageHandler(\n\t\tclientId: string,\n\t): (message: Message) => Promise<void> {\n\t\treturn async (message: Message) => {\n\t\t\ttry {\n\t\t\t\tconst client = this.clients.get(clientId);\n\t\t\t\tif (!client) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Auto-update presence activity on ANY message\n\t\t\t\tif (\n\t\t\t\t\tthis.presenceManager?.isEnabled() &&\n\t\t\t\t\tclient.userId &&\n\t\t\t\t\tclient.authenticated\n\t\t\t\t) {\n\t\t\t\t\tawait this.updatePresenceActivity(client.userId, client.deviceId, \"message\");\n\t\t\t\t}\n\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase \"authenticate\":\n\t\t\t\t\t\tawait this.handleAuthenticate(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { token: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"join_room\":\n\t\t\t\t\t\tawait this.handleJoinRoom(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { roomId: string; token?: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"leave_room\":\n\t\t\t\t\t\tawait this.handleLeaveRoom(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { roomId?: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"broadcast_event\":\n\t\t\t\t\t\tawait this.handleBroadcastEvent(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { event: Event; roomId: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"request_lock\":\n\t\t\t\t\t\tawait this.handleLockRequest(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { request: LockRequest; roomId: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"release_lock\":\n\t\t\t\t\t\tawait this.handleLockRelease(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { lockId: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ping\":\n\t\t\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\t\t\ttype: \"pong\",\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// Presence activity already updated automatically above\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"heartbeat\":\n\t\t\t\t\t\t// Heartbeat messages are used to keep presence activity updated\n\t\t\t\t\t\t// The activity is already tracked above (line ~570), so we just acknowledge\n\t\t\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\t\t\ttype: \"heartbeat_ack\",\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\t// Try custom message handler if configured\n\t\t\t\t\t\tif (this.config.customMessageHandler) {\n\t\t\t\t\t\t\tconst sendResponse = async (\n\t\t\t\t\t\t\t\tresponse: Record<string, unknown>,\n\t\t\t\t\t\t\t): Promise<void> => {\n\t\t\t\t\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\t\t\t\t\tid: message.id,\n\t\t\t\t\t\t\t\t\t...response,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst handled = await this.config.customMessageHandler(\n\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\tsendResponse,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (handled) break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Fall through to error if not handled\n\t\t\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\terror: `Unknown message type: ${message.type}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\terror: (error as Error).message,\n\t\t\t\t});\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: `client_${clientId}`,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n\n\t// Message Handlers\n\tprivate async handleAuthenticate(\n\t\tclientId: string,\n\t\tpayload: { token: string },\n\t): Promise<void> {\n\t\tif (!this.auth) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Authentication not configured\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst tokenPayload = await this.auth.validateToken(payload.token);\n\t\t\tconst client = this.clients.get(clientId);\n\t\t\tif (client) {\n\t\t\t\tclient.userId = tokenPayload.userId;\n\t\t\t\tclient.authenticated = true;\n\n\t\t\t\t// Update client-user mappings so getUserIdFromClientId works\n\t\t\t\tthis.clientUserMap.set(clientId, tokenPayload.userId);\n\t\t\t\tif (!this.userClientMap.has(tokenPayload.userId)) {\n\t\t\t\t\tthis.userClientMap.set(tokenPayload.userId, new Set());\n\t\t\t\t}\n\t\t\t\tthis.userClientMap.get(tokenPayload.userId)!.add(clientId);\n\n\t\t\t\tawait this.emit(\"client_authenticated\", {\n\t\t\t\t\tclientId,\n\t\t\t\t\tuserId: tokenPayload.userId,\n\t\t\t\t\tmetadata: tokenPayload.metadata,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tsuccess: true,\n\t\t\t\tuserId: tokenPayload.userId,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tsuccess: false,\n\t\t\t\terror: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleJoinRoom(\n\t\tclientId: string,\n\t\tpayload: { roomId: string; token?: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Authenticate if token provided\n\t\tif (payload.token && !client.authenticated) {\n\t\t\tawait this.handleAuthenticate(clientId, { token: payload.token });\n\t\t}\n\n\t\tif (!client.authenticated) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: \"Authentication required to join room\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\t// Check if already in the room\n\t\t\tif (client.roomIds.has(payload.roomId)) {\n\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\terror: \"Already in this room\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Get or create room\n\t\t\tlet roomState = await this.roomManager.getRoomState(payload.roomId);\n\t\t\tif (!roomState) {\n\t\t\t\tconst roomConfig = {\n\t\t\t\t\t...this.config.defaultRoomConfig,\n\t\t\t\t\tid: payload.roomId,\n\t\t\t\t};\n\t\t\t\tconst room = await this.roomManager.createRoom(\n\t\t\t\t\tpayload.roomId,\n\t\t\t\t\troomConfig,\n\t\t\t\t);\n\t\t\t\troomState = await this.roomManager.getRoomState(payload.roomId);\n\t\t\t\tawait this.emit(\"room_created\", { room });\n\t\t\t}\n\n\t\t\tif (!roomState) {\n\t\t\t\tthrow new Error(\"Failed to create or get room state\");\n\t\t\t}\n\n\t\t\t// Join room\n\t\t\tconst user: RoomUser = {\n\t\t\t\tid: client.userId,\n\t\t\t\tusername: client.userId, // TODO: Get from auth token\n\t\t\t\tstatus: \"online\",\n\t\t\t\tjoinedAt: Date.now(),\n\t\t\t\tlastActivity: Date.now(),\n\t\t\t\tpermissions: roomState.room.permissions || [\"read\", \"write\"],\n\t\t\t};\n\n\t\t\tawait this.roomManager.joinRoom(payload.roomId, user);\n\t\t\tclient.roomIds.add(payload.roomId);\n\n\t\t\tawait this.emit(\"client_joined_room\", {\n\t\t\t\tclientId,\n\t\t\t\troomId: payload.roomId,\n\t\t\t});\n\n\t\t\t// Get updated room state after joining (so it includes the current user)\n\t\t\tconst updatedRoomState = await this.roomManager.getRoomState(\n\t\t\t\tpayload.roomId,\n\t\t\t);\n\t\t\tif (!updatedRoomState) {\n\t\t\t\tthrow new Error(\"Failed to get updated room state after joining\");\n\t\t\t}\n\n\t\t\t// Convert Maps to plain objects for JSON serialization\n\t\t\tconst serializableState = serializeRoomState(updatedRoomState);\n\n\t\t\t// Send room state to client\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"room_joined\",\n\t\t\t\troomId: payload.roomId,\n\t\t\t\tstate: serializableState,\n\t\t\t});\n\n\t\t\t// Send event history\n\t\t\tconst history = await this.roomManager.getEventHistory(\n\t\t\t\tpayload.roomId,\n\t\t\t\t50,\n\t\t\t);\n\t\t\tif (history.length > 0) {\n\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\ttype: \"event_history\",\n\t\t\t\t\tevents: history,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleLeaveRoom(\n\t\tclientId: string,\n\t\tpayload?: { roomId?: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If roomId is specified, leave that specific room\n\t\t// Otherwise, leave all rooms (backward compatibility)\n\t\tconst roomsToLeave = payload?.roomId\n\t\t\t? [payload.roomId]\n\t\t\t: Array.from(client.roomIds);\n\n\t\tif (roomsToLeave.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const roomId of roomsToLeave) {\n\t\t\tif (!client.roomIds.has(roomId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Broadcast to other room members BEFORE removing this client\n\t\t\t// Use experimental broadcast if enabled, otherwise silently skip\n\t\t\ttry {\n\t\t\t\tawait this.experimental.broadcastWhere(\n\t\t\t\t\t(c) => c.roomIds.has(roomId) && c.id !== clientId,\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"member_left\",\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\troomId,\n\t\t\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t// Experimental broadcast not enabled, skip silently\n\t\t\t}\n\n\t\t\tawait this.roomManager.leaveRoom(roomId, client.userId);\n\t\t\tclient.roomIds.delete(roomId);\n\n\t\t\tawait this.emit(\"client_left_room\", { clientId, roomId });\n\t\t\tawait this.sendToClient(clientId, { type: \"room_left\", roomId });\n\t\t}\n\t}\n\n\tprivate async handleBroadcastEvent(\n\t\tclientId: string,\n\t\tpayload: { event: Event; roomId: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client || !client.roomIds.has(payload.roomId)) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: \"Not in specified room\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Add metadata to event\n\t\tconst enrichedEvent = {\n\t\t\t...payload.event,\n\t\t\tmetadata: {\n\t\t\t\t...payload.event.metadata,\n\t\t\t\tuserId: client.userId,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\troomId: payload.roomId,\n\t\t\t},\n\t\t};\n\n\t\t// Add to history\n\t\tawait this.roomManager.addEventToHistory(payload.roomId, enrichedEvent);\n\n\t\t// Broadcast to room\n\t\tawait this.roomManager.broadcastToRoom(\n\t\t\tpayload.roomId,\n\t\t\tenrichedEvent,\n\t\t\tclient.userId,\n\t\t);\n\n\t\tawait this.emit(\"event_broadcast\", {\n\t\t\troomId: payload.roomId,\n\t\t\tevent: enrichedEvent,\n\t\t\tfromClientId: clientId,\n\t\t});\n\t}\n\n\tprivate async handleLockRequest(\n\t\tclientId: string,\n\t\tpayload: { request: LockRequest; roomId: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client || !client.roomIds.has(payload.roomId)) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: \"Not in specified room\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst lock = await this.lockManager.acquireLock(\n\t\t\t\tclient.userId,\n\t\t\t\tclient.userId,\n\t\t\t\tpayload.request,\n\t\t\t);\n\t\t\tawait this.emit(\"lock_acquired\", { lock, clientId });\n\n\t\t\tawait this.sendToClient(clientId, { type: \"lock_acquired\", lock });\n\n\t\t\t// Broadcast lock status to room\n\t\t\tawait this.roomManager.broadcastToRoom(payload.roomId, {\n\t\t\t\tid: this.generateId(),\n\t\t\t\ttype: \"lock_status\",\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tuserId: client.userId,\n\t\t\t\troomId: payload.roomId,\n\t\t\t\tdata: { lock, action: \"acquired\" },\n\t\t\t\tmetadata: {\n\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\troomId: payload.roomId,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"lock_denied\",\n\t\t\t\trequest: payload.request,\n\t\t\t\treason: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleLockRelease(\n\t\tclientId: string,\n\t\tpayload: { lockId: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.lockManager.releaseLock(payload.lockId);\n\t\t\tawait this.emit(\"lock_released\", { lockId: payload.lockId, clientId });\n\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"lock_released\",\n\t\t\t\tlockId: payload.lockId,\n\t\t\t});\n\n\t\t\t// Broadcast lock status to all rooms the client is in\n\t\t\tfor (const roomId of client.roomIds) {\n\t\t\t\tawait this.roomManager.broadcastToRoom(roomId, {\n\t\t\t\t\tid: this.generateId(),\n\t\t\t\t\ttype: \"lock_status\",\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\troomId,\n\t\t\t\t\tdata: { lockId: payload.lockId, action: \"released\" },\n\t\t\t\t\tmetadata: { userId: client.userId, timestamp: Date.now(), roomId },\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Utility Methods\n\tprivate async sendToClient(\n\t\tclientId: string,\n\t\tmessage: Record<string, unknown>,\n\t): Promise<void> {\n\t\t// Preserve the message ID if provided (for request/response correlation)\n\t\tconst messageId = (message.id as string) || this.generateId();\n\t\tconst { id: _id, ...messageWithoutId } = message;\n\n\t\tconst transportMessage: Message = {\n\t\t\tid: messageId,\n\t\t\ttype: \"server_message\",\n\t\t\tpayload: { clientId, ...messageWithoutId },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(transportMessage);\n\t}\n\n\tprivate generateId(): string {\n\t\treturn Math.random().toString(36).substring(2) + Date.now().toString(36);\n\t}\n\n\t// Public API for external management\n\tasync createRoom(roomId: string, config: RoomConfig): Promise<Room> {\n\t\tconst room = await this.roomManager.createRoom(roomId, config);\n\t\tawait this.emit(\"room_created\", { room });\n\t\treturn room;\n\t}\n\n\tasync deleteRoom(roomId: string): Promise<void> {\n\t\tawait this.roomManager.deleteRoom(roomId);\n\t\tawait this.emit(\"room_deleted\", { roomId });\n\t}\n\n\tgetConnectedClients(): ConnectedClient[] {\n\t\treturn Array.from(this.clients.values());\n\t}\n\n\tgetClient(clientId: string): ConnectedClient | null {\n\t\treturn this.clients.get(clientId) || null;\n\t}\n\n\tisRunning(): boolean {\n\t\treturn this.running;\n\t}\n\n\tgetMode(): \"standalone\" | \"integration\" {\n\t\treturn this.mode;\n\t}\n\n\tisInitialized(): boolean {\n\t\treturn this.initialized;\n\t}\n\n\t/**\n\t * Update presence activity for a user's device\n\t *\n\t * @param userId - User identifier\n\t * @param deviceId - Device/client identifier\n\t * @param activityType - Type of activity\n\t */\n\tprivate async updatePresenceActivity(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t\tactivityType: \"heartbeat\" | \"message\" | \"user_action\",\n\t): Promise<void> {\n\t\tif (!this.presenceManager?.isEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.presenceManager.updateActivity({\n\t\t\t\tuserId,\n\t\t\t\tdeviceId,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tactivityType,\n\t\t\t});\n\n\t\t\tawait this.emit(\"presence_activity\", {\n\t\t\t\tuserId,\n\t\t\t\tdeviceId,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\t// Don't throw, just log the error\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"presence_update_activity\",\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Get presence manager (if configured)\n\t */\n\tgetPresenceManager(): PresenceManager | undefined {\n\t\treturn this.presenceManager;\n\t}\n\n\t/**\n\t * Get user ID from client ID\n\t *\n\t * @param clientId - Client identifier\n\t * @returns User ID, or undefined if not found or not authenticated\n\t */\n\tgetUserIdFromClientId(clientId: string): string | undefined {\n\t\treturn this.clientUserMap.get(clientId);\n\t}\n\n\t/**\n\t * Get all client IDs for a user\n\t *\n\t * A user may have multiple connected devices/clients.\n\t *\n\t * @param userId - User identifier\n\t * @returns Array of client IDs\n\t */\n\tgetClientIdsForUser(userId: string): string[] {\n\t\treturn Array.from(this.userClientMap.get(userId) || []);\n\t}\n\n\t/**\n\t * Get all client IDs for a user in a specific room\n\t *\n\t * @param roomId - Room identifier\n\t * @param userId - User identifier\n\t * @returns Array of client IDs\n\t */\n\tgetClientIdsInRoom(roomId: string, userId: string): string[] {\n\t\tconst allClientIds = this.getClientIdsForUser(userId);\n\t\treturn allClientIds.filter(clientId => {\n\t\t\tconst client = this.clients.get(clientId);\n\t\t\treturn client && client.roomIds.has(roomId);\n\t\t});\n\t}\n\n\t/**\n\t * Get device ID from client ID\n\t *\n\t * By default, deviceId === clientId. Use setClientDeviceId() to override\n\t * for multi-window scenarios where multiple clients share a device.\n\t *\n\t * @param clientId - Client identifier\n\t * @returns Device ID for this client\n\t */\n\tgetDeviceIdFromClientId(clientId: string): string {\n\t\tconst client = this.clients.get(clientId);\n\t\treturn client?.deviceId ?? clientId;\n\t}\n\n\t/**\n\t * Set the device ID for a client\n\t *\n\t * Use this to associate a custom deviceId with a client, e.g., when\n\t * the deviceId comes from a JWT token and differs from the WebSocket clientId.\n\t * This is useful for multi-window scenarios where multiple WebSocket clients\n\t * share the same device/user session.\n\t *\n\t * @param clientId - Client identifier\n\t * @param deviceId - Device identifier to associate with this client\n\t * @returns true if the client was found and updated, false otherwise\n\t */\n\tsetClientDeviceId(clientId: string, deviceId: string): boolean {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (client) {\n\t\t\tclient.deviceId = deviceId;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n}\n",
43
43
  "import type { Server as HttpServer } from \"http\";\nimport type { Server as HttpsServer } from \"https\";\nimport type { WebSocketServer } from \"ws\";\nimport type { IAuthAdapter } from \"../abstractions/AuthAdapter.js\";\nimport { ConnectedRoomManager } from \"../abstractions/ConnectedRoomManager.js\";\nimport { DefaultPresenceManager } from \"../abstractions/DefaultPresenceManager.js\";\nimport type { LockManager } from \"../abstractions/LockManager.js\";\nimport type { PresenceManager } from \"../abstractions/PresenceManager.js\";\nimport type { RoomManager } from \"../abstractions/RoomManager.js\";\nimport type { IStorageAdapter } from \"../abstractions/StorageAdapter.js\";\nimport type { ITransportAdapter } from \"../abstractions/TransportAdapter.js\";\nimport type { ExperimentalFeatureConfig, RoomConfig } from \"../types/index.js\";\nimport {\n\tBaseServer,\n\ttype CustomMessageHandler,\n\ttype ServerConfig,\n} from \"./BaseServer.js\";\n\nexport class ServerBuilder {\n\tprivate transport?: ITransportAdapter;\n\tprivate auth?: IAuthAdapter;\n\tprivate storage?: IStorageAdapter;\n\tprivate roomManager?: RoomManager;\n\tprivate lockManager?: LockManager;\n\tprivate presenceManager?: PresenceManager;\n\tprivate defaultRoomConfig?: Partial<RoomConfig>;\n\tprivate httpServer?: HttpServer | HttpsServer;\n\tprivate webSocketPath?: string;\n\tprivate webSocketServer?: WebSocketServer;\n\tprivate experimentalFeatures?: ExperimentalFeatureConfig;\n\tprivate customMessageHandler?: CustomMessageHandler;\n\n\twithTransport(transport: ITransportAdapter): this {\n\t\tthis.transport = transport;\n\t\treturn this;\n\t}\n\n\twithAuth(auth: IAuthAdapter): this {\n\t\tthis.auth = auth;\n\t\treturn this;\n\t}\n\n\twithStorage(storage: IStorageAdapter): this {\n\t\tthis.storage = storage;\n\t\treturn this;\n\t}\n\n\twithRoomManager(roomManager: RoomManager): this {\n\t\tthis.roomManager = roomManager;\n\t\treturn this;\n\t}\n\n\twithLockManager(lockManager: LockManager): this {\n\t\tthis.lockManager = lockManager;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Configure presence management for global user tracking\n\t *\n\t * Enables two-tier connection architecture where users maintain\n\t * global presence while participating in multiple rooms.\n\t *\n\t * @param presenceManager - PresenceManager implementation\n\t */\n\twithPresenceManager(presenceManager: PresenceManager): this {\n\t\tthis.presenceManager = presenceManager;\n\t\treturn this;\n\t}\n\n\twithDefaultRoomConfig(config: Partial<RoomConfig>): this {\n\t\tthis.defaultRoomConfig = config;\n\t\treturn this;\n\t}\n\n\twithHttpServer(server: HttpServer | HttpsServer): this {\n\t\tthis.httpServer = server;\n\t\treturn this;\n\t}\n\n\twithWebSocketPath(path: string): this {\n\t\tthis.webSocketPath = path;\n\t\treturn this;\n\t}\n\n\twithWebSocketServer(wss: WebSocketServer): this {\n\t\tthis.webSocketServer = wss;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Enable experimental features\n\t *\n\t * ⚠️ WARNING: Experimental features are for development only.\n\t * APIs may change or be removed without major version bumps.\n\t *\n\t * @see docs/EXPERIMENTAL_BROADCAST.md\n\t */\n\twithExperimentalFeatures(features: ExperimentalFeatureConfig): this {\n\t\tthis.experimentalFeatures = features;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set a custom message handler for application-specific message types.\n\t *\n\t * The handler is called when a message type is not recognized by the built-in handlers.\n\t * Return true from the handler if the message was handled, false to fall through\n\t * to the default error response.\n\t *\n\t * @example\n\t * ```typescript\n\t * builder.withCustomMessageHandler(async (clientId, message, sendResponse) => {\n\t * if (message.type === 'presence:get_users') {\n\t * const users = await getPresenceUsers();\n\t * await sendResponse({ type: 'presence:users', payload: { users } });\n\t * return true;\n\t * }\n\t * return false;\n\t * });\n\t * ```\n\t */\n\twithCustomMessageHandler(handler: CustomMessageHandler): this {\n\t\tthis.customMessageHandler = handler;\n\t\treturn this;\n\t}\n\n\tbuild(): BaseServer {\n\t\tif (!this.transport) {\n\t\t\tthrow new Error(\"Transport adapter is required\");\n\t\t}\n\n\t\tif (!this.roomManager) {\n\t\t\tthrow new Error(\"Room manager is required\");\n\t\t}\n\n\t\tif (!this.lockManager) {\n\t\t\tthrow new Error(\"Lock manager is required\");\n\t\t}\n\n\t\tconst config: ServerConfig = {\n\t\t\ttransport: this.transport,\n\t\t\tauth: this.auth,\n\t\t\tstorage: this.storage,\n\t\t\troomManager: this.roomManager,\n\t\t\tlockManager: this.lockManager,\n\t\t\tpresenceManager: this.presenceManager,\n\t\t\tdefaultRoomConfig: this.defaultRoomConfig || {\n\t\t\t\tmaxUsers: 50,\n\t\t\t\tmaxHistory: 100,\n\t\t\t\tpermissions: [\"read\" as const, \"write\" as const],\n\t\t\t},\n\t\t\thttpServer: this.httpServer,\n\t\t\twebSocketPath: this.webSocketPath,\n\t\t\twebSocketServer: this.webSocketServer,\n\t\t\texperimental: this.experimentalFeatures || {\n\t\t\t\tenableBroadcast: false,\n\t\t\t\twarnOnExperimentalUse: true,\n\t\t\t\ttrackUsageMetrics: false,\n\t\t\t},\n\t\t\tcustomMessageHandler: this.customMessageHandler,\n\t\t};\n\n\t\tconst server = new BaseServer(config);\n\n\t\t// Auto-enhance DefaultRoomManager with broadcasting capabilities\n\t\t// This happens after server construction so we have access to server methods\n\t\tif (this.roomManager.constructor.name === 'DefaultRoomManager') {\n\t\t\t// Create enhanced room manager with server callbacks\n\t\t\tconst connectedManager = new ConnectedRoomManager(\n\t\t\t\t(clientId: string, message: Record<string, unknown>) =>\n\t\t\t\t\t(server as any).sendToClient(clientId, message),\n\t\t\t\t(roomId: string, userId: string) =>\n\t\t\t\t\tserver.getClientIdsInRoom(roomId, userId)\n\t\t\t);\n\n\t\t\t// Copy existing room state\n\t\t\t(connectedManager as any).rooms = (this.roomManager as any).rooms;\n\n\t\t\t// Replace the room manager in the server\n\t\t\t(server as any).roomManager = connectedManager;\n\t\t}\n\n\t\t// Auto-link presence manager to server for broadcasting\n\t\tif (this.presenceManager instanceof DefaultPresenceManager) {\n\t\t\tthis.presenceManager.setServer(server);\n\t\t}\n\n\t\t// Auto-wire presence extension hooks to server events\n\t\tif (this.presenceManager instanceof DefaultPresenceManager) {\n\t\t\tthis.wirePresenceExtensionHooks(server, this.presenceManager);\n\t\t}\n\n\t\treturn server;\n\t}\n\n\t/**\n\t * Wire presence extension hooks to server events\n\t * @private\n\t */\n\tprivate wirePresenceExtensionHooks(\n\t\tserver: BaseServer,\n\t\tpresenceManager: DefaultPresenceManager<any>,\n\t): void {\n\t\t// Initialize extensions when server starts\n\t\tserver.on(\"started\", async () => {\n\t\t\tawait presenceManager.initializeExtensions();\n\t\t});\n\n\t\t// Wire room join/leave events to presence extensions\n\t\tserver.on(\"client_joined_room\", async ({ clientId, roomId }) => {\n\t\t\tconst userId = server.getUserIdFromClientId(clientId);\n\t\t\tif (userId && presenceManager.isEnabled()) {\n\t\t\t\t// Call onRoomJoined for all extensions\n\t\t\t\tconst extensions = (presenceManager as any).extensions;\n\t\t\t\tif (extensions) {\n\t\t\t\t\tfor (const ext of extensions) {\n\t\t\t\t\t\tawait ext.onRoomJoined?.(userId, roomId, clientId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tserver.on(\"client_left_room\", async ({ clientId, roomId }) => {\n\t\t\tconst userId = server.getUserIdFromClientId(clientId);\n\t\t\tif (userId && presenceManager.isEnabled()) {\n\t\t\t\t// Call onRoomLeft for all extensions\n\t\t\t\tconst extensions = (presenceManager as any).extensions;\n\t\t\t\tif (extensions) {\n\t\t\t\t\tfor (const ext of extensions) {\n\t\t\t\t\t\tawait ext.onRoomLeft?.(userId, roomId, clientId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Destroy extensions when server stops\n\t\tserver.on(\"stopped\", async () => {\n\t\t\tawait presenceManager.destroyExtensions();\n\t\t});\n\t}\n}\n"
44
44
  ],
45
- "mappings": "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",
46
- "debugId": "2344FC62E16D571364756E2164756E21",
45
+ "mappings": "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",
46
+ "debugId": "1FAB6CDDEC349C3164756E2164756E21",
47
47
  "names": []
48
48
  }