@principal-ai/control-tower-core 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abstractions/AuthAdapter.d.ts +1 -0
- package/dist/abstractions/AuthAdapter.d.ts.map +1 -1
- package/dist/abstractions/DefaultPresenceManager.d.ts +27 -4
- package/dist/abstractions/DefaultPresenceManager.d.ts.map +1 -1
- package/dist/abstractions/DefaultPresenceManager.js +145 -4
- package/dist/abstractions/PresenceExtension.d.ts +121 -0
- package/dist/abstractions/PresenceExtension.d.ts.map +1 -0
- package/dist/abstractions/PresenceExtension.js +14 -0
- package/dist/abstractions/index.d.ts +1 -0
- package/dist/abstractions/index.d.ts.map +1 -1
- package/dist/client/BaseClient.d.ts.map +1 -1
- package/dist/client/BaseClient.js +21 -3
- package/dist/client/PresenceClient.d.ts +152 -0
- package/dist/client/PresenceClient.d.ts.map +1 -0
- package/dist/client/PresenceClient.js +193 -0
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +8 -7
- package/dist/index.mjs +305 -12
- package/dist/index.mjs.map +8 -7
- package/dist/server/BaseServer.d.ts +27 -0
- package/dist/server/BaseServer.d.ts.map +1 -1
- package/dist/server/BaseServer.js +57 -4
- package/dist/server/ServerBuilder.d.ts +5 -0
- package/dist/server/ServerBuilder.d.ts.map +1 -1
- package/dist/server/ServerBuilder.js +50 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../node_modules/ws/lib/constants.js", "../node_modules/ws/lib/buffer-util.js", "../node_modules/ws/lib/limiter.js", "../node_modules/ws/lib/permessage-deflate.js", "../node_modules/ws/lib/validation.js", "../node_modules/ws/lib/receiver.js", "../node_modules/ws/lib/sender.js", "../node_modules/ws/lib/event-target.js", "../node_modules/ws/lib/extension.js", "../node_modules/ws/lib/websocket.js", "../node_modules/ws/lib/stream.js", "../node_modules/ws/lib/subprotocol.js", "../node_modules/ws/lib/websocket-server.js", "../src/types/experimental.ts", "../src/abstractions/EventEmitter.ts", "../src/abstractions/RoomManager.ts", "../src/abstractions/LockManager.ts", "../src/abstractions/DefaultRoomManager.ts", "../src/abstractions/DefaultLockManager.ts", "../src/abstractions/PresenceManager.ts", "../src/abstractions/DefaultPresenceManager.ts", "../src/adapters/mock/MockTransportAdapter.ts", "../src/adapters/mock/MockStorageAdapter.ts", "../src/adapters/mock/MockAuthAdapter.ts", "../node_modules/ws/wrapper.mjs", "../src/adapters/websocket/WebSocketServerTransportAdapter.ts", "../src/adapters/websocket/WebSocketClientTransportAdapter.ts", "../src/client/BaseClient.ts", "../src/client/ClientBuilder.ts", "../src/server/ExperimentalAPI.ts", "../src/server/BaseServer.ts", "../src/server/ServerBuilder.ts"],
|
|
3
|
+
"sources": ["../node_modules/ws/lib/constants.js", "../node_modules/ws/lib/buffer-util.js", "../node_modules/ws/lib/limiter.js", "../node_modules/ws/lib/permessage-deflate.js", "../node_modules/ws/lib/validation.js", "../node_modules/ws/lib/receiver.js", "../node_modules/ws/lib/sender.js", "../node_modules/ws/lib/event-target.js", "../node_modules/ws/lib/extension.js", "../node_modules/ws/lib/websocket.js", "../node_modules/ws/lib/stream.js", "../node_modules/ws/lib/subprotocol.js", "../node_modules/ws/lib/websocket-server.js", "../src/types/experimental.ts", "../src/abstractions/EventEmitter.ts", "../src/abstractions/RoomManager.ts", "../src/abstractions/LockManager.ts", "../src/abstractions/DefaultRoomManager.ts", "../src/abstractions/DefaultLockManager.ts", "../src/abstractions/PresenceManager.ts", "../src/abstractions/DefaultPresenceManager.ts", "../src/adapters/mock/MockTransportAdapter.ts", "../src/adapters/mock/MockStorageAdapter.ts", "../src/adapters/mock/MockAuthAdapter.ts", "../node_modules/ws/wrapper.mjs", "../src/adapters/websocket/WebSocketServerTransportAdapter.ts", "../src/adapters/websocket/WebSocketClientTransportAdapter.ts", "../src/client/BaseClient.ts", "../src/client/ClientBuilder.ts", "../src/client/PresenceClient.ts", "../src/server/ExperimentalAPI.ts", "../src/server/BaseServer.ts", "../src/server/ServerBuilder.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n BINARY_TYPES,\n EMPTY_BUFFER: Buffer.alloc(0),\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n hasBlob,\n kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n kListener: Symbol('kListener'),\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n NOOP: () => {}\n};\n",
|
|
6
6
|
"'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) {\n return new FastBuffer(target.buffer, target.byteOffset, offset);\n }\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.length === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = new FastBuffer(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\nmodule.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n};\n\n/* istanbul ignore else */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n try {\n const bufferUtil = require('bufferutil');\n\n module.exports.mask = function (source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bufferUtil.mask(source, mask, output, offset, length);\n };\n\n module.exports.unmask = function (buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bufferUtil.unmask(buffer, mask);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n",
|
|
@@ -22,20 +22,21 @@
|
|
|
22
22
|
"import type {\n Room,\n RoomUser,\n RoomState,\n RoomConfig,\n Event\n} from '../types/index.js';\nimport { RoomManager } from './RoomManager.js';\n\nexport class DefaultRoomManager extends RoomManager {\n async createRoom(id: string, config: RoomConfig): Promise<Room> {\n const room: Room = {\n id,\n name: config.name || id,\n createdAt: Date.now(),\n maxUsers: config.maxUsers,\n maxHistory: config.maxHistory,\n permissions: config.permissions,\n metadata: config.metadata || {}\n };\n\n const roomState: RoomState = {\n room,\n users: new Map(),\n eventHistory: [],\n locks: new Map()\n };\n\n this.rooms.set(id, roomState);\n return room;\n }\n\n async deleteRoom(id: string): Promise<void> {\n this.rooms.delete(id);\n }\n\n async joinRoom(roomId: string, user: RoomUser): Promise<void> {\n const roomState = this.rooms.get(roomId);\n if (!roomState) {\n throw new Error(`Room ${roomId} not found`);\n }\n\n if (roomState.room.maxUsers && roomState.users.size >= roomState.room.maxUsers) {\n throw new Error(`Room ${roomId} is full`);\n }\n\n roomState.users.set(user.id, user);\n }\n\n async leaveRoom(roomId: string, userId: string): Promise<void> {\n const roomState = this.rooms.get(roomId);\n if (!roomState) {\n return; // Room doesn't exist, nothing to do\n }\n\n roomState.users.delete(userId);\n }\n\n async broadcastToRoom(roomId: string, event: Event, _excludeUserId?: string): Promise<void> {\n const roomState = this.rooms.get(roomId);\n if (!roomState) {\n throw new Error(`Room ${roomId} not found`);\n }\n\n // In a real implementation, this would broadcast to connected clients\n // For now, we'll just store the event in history\n await this.addEventToHistory(roomId, event);\n }\n\n async getRoomState(roomId: string): Promise<RoomState | null> {\n return this.rooms.get(roomId) || null;\n }\n\n async getUsersInRoom(roomId: string): Promise<RoomUser[]> {\n const roomState = this.rooms.get(roomId);\n if (!roomState) {\n return [];\n }\n\n return Array.from(roomState.users.values());\n }\n\n async addEventToHistory(roomId: string, event: Event): Promise<void> {\n const roomState = this.rooms.get(roomId);\n if (!roomState) {\n throw new Error(`Room ${roomId} not found`);\n }\n\n roomState.eventHistory.push(event);\n\n // Trim history if needed\n if (roomState.room.maxHistory && roomState.eventHistory.length > roomState.room.maxHistory) {\n roomState.eventHistory = roomState.eventHistory.slice(-roomState.room.maxHistory);\n }\n }\n\n async getEventHistory(roomId: string, limit?: number): Promise<Event[]> {\n const roomState = this.rooms.get(roomId);\n if (!roomState) {\n return [];\n }\n\n const history = roomState.eventHistory;\n return limit ? history.slice(-limit) : history;\n }\n\n async updateUserStatus(roomId: string, userId: string, status: RoomUser['status']): Promise<void> {\n const roomState = this.rooms.get(roomId);\n if (!roomState) {\n throw new Error(`Room ${roomId} not found`);\n }\n\n const user = roomState.users.get(userId);\n if (user) {\n user.status = status;\n user.lastActivity = Date.now();\n }\n }\n}",
|
|
23
23
|
"import type {\n Lock,\n LockRequest,\n LockQueueItem\n} from '../types/index.js';\nimport { LockManager } from './LockManager.js';\n\nexport class DefaultLockManager extends LockManager {\n async acquireLock(userId: string, username: string, request: LockRequest): Promise<Lock> {\n const { path, type = 'file', priority = 'normal', ttl, branch, metadata } = request;\n\n // Check if user already has a lock on this path\n const userLocks = this.lockState.userLocks.get(userId) || new Set();\n if (userLocks.has(path)) {\n throw new Error(`User ${username} already has a lock on ${path}`);\n }\n\n // Check if path is already locked\n const existingLock = await this.getLock(path);\n if (existingLock) {\n // Add to queue\n await this.addToQueue(userId, username, request);\n throw new Error(`Path ${path} is already locked by ${existingLock.username}, added to queue`);\n }\n\n // Generate lock ID\n const lockId = this.generateId();\n\n // Create lock\n const lock: Lock = {\n id: lockId,\n type,\n path,\n userId,\n username,\n acquiredAt: Date.now(),\n expiresAt: ttl ? Date.now() + ttl : undefined,\n priority,\n branch,\n metadata\n };\n\n // Store lock\n this.lockState.locks.set(lockId, lock);\n this.lockState.userLocks.set(userId, userLocks.add(path));\n\n return lock;\n }\n\n async releaseLock(lockId: string): Promise<void> {\n const lock = this.lockState.locks.get(lockId);\n if (!lock) {\n throw new Error(`Lock ${lockId} not found`);\n }\n\n // Remove from user locks\n const userLocks = this.lockState.userLocks.get(lock.userId);\n if (userLocks) {\n userLocks.delete(lock.path);\n if (userLocks.size === 0) {\n this.lockState.userLocks.delete(lock.userId);\n }\n }\n\n // Remove lock\n this.lockState.locks.delete(lockId);\n\n // Process queue for this path\n await this.processQueue(lock.path);\n }\n\n async releaseUserLocks(userId: string): Promise<void> {\n const userLocks = this.lockState.userLocks.get(userId);\n if (!userLocks) {\n return;\n }\n\n const lockIds = Array.from(this.lockState.locks.entries())\n .filter(([, lock]) => lock.userId === userId)\n .map(([lockId]) => lockId);\n\n for (const lockId of lockIds) {\n await this.releaseLock(lockId);\n }\n }\n\n async getLock(path: string): Promise<Lock | null> {\n for (const lock of this.lockState.locks.values()) {\n if (lock.path === path) {\n return lock;\n }\n }\n return null;\n }\n\n async getUserLocks(userId: string): Promise<Lock[]> {\n return Array.from(this.lockState.locks.values())\n .filter(lock => lock.userId === userId);\n }\n\n async getAllLocks(): Promise<Lock[]> {\n return Array.from(this.lockState.locks.values());\n }\n\n async isLocked(path: string): Promise<boolean> {\n return await this.getLock(path) !== null;\n }\n\n async getQueueLength(path: string): Promise<number> {\n const queue = this.lockState.queue.get(path);\n return queue ? queue.length : 0;\n }\n\n async extendLock(lockId: string, ttl: number): Promise<Lock> {\n const lock = this.lockState.locks.get(lockId);\n if (!lock) {\n throw new Error(`Lock ${lockId} not found`);\n }\n\n lock.expiresAt = Date.now() + ttl;\n return lock;\n }\n\n async addToQueue(userId: string, username: string, request: LockRequest): Promise<void> {\n const { path } = request;\n const queue = this.lockState.queue.get(path) || [];\n\n const queueItem: LockQueueItem = {\n ...request,\n userId,\n username,\n requestedAt: Date.now(),\n resolve: () => {},\n reject: () => {}\n };\n\n queue.push(queueItem);\n this.lockState.queue.set(path, queue);\n }\n\n async removeFromQueue(path: string, userId: string): Promise<void> {\n const queue = this.lockState.queue.get(path);\n if (!queue) {\n return;\n }\n\n const index = queue.findIndex(item => item.userId === userId);\n if (index !== -1) {\n queue.splice(index, 1);\n if (queue.length === 0) {\n this.lockState.queue.delete(path);\n }\n }\n }\n\n private generateId(): string {\n return Math.random().toString(36).substring(2) + Date.now().toString(36);\n }\n\n private async processQueue(path: string): Promise<void> {\n const queue = this.lockState.queue.get(path);\n if (!queue || queue.length === 0) {\n return;\n }\n\n // Process first item in queue\n const item = queue.shift()!;\n if (queue.length === 0) {\n this.lockState.queue.delete(path);\n }\n\n try {\n const lock = await this.acquireLock(item.userId, item.username, {\n path: item.path,\n type: item.type,\n priority: item.priority,\n ttl: item.ttl,\n branch: item.branch,\n metadata: item.metadata\n });\n\n item.resolve(lock);\n } catch (error) {\n item.reject(error as Error);\n }\n }\n}",
|
|
24
24
|
"/**\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 UserPresence,\n DeviceInfo,\n PresenceStatus,\n PresenceConfig,\n PresenceChangeEvent,\n ActivityUpdate\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 protected config: Required<PresenceConfig>;\n\n constructor(config?: PresenceConfig) {\n // Set defaults\n this.config = {\n enabled: config?.enabled ?? false,\n heartbeatInterval: config?.heartbeatInterval ?? 30000,\n awayThreshold: config?.awayThreshold ?? 2,\n disconnectThreshold: config?.disconnectThreshold ?? 3,\n gracePeriod: config?.gracePeriod ?? 30000,\n trackDeviceActivity: config?.trackDeviceActivity ?? true,\n broadcastPresenceUpdates: config?.broadcastPresenceUpdates ?? true\n };\n }\n\n /**\n * Register a new device connection for a user\n *\n * @param userId - User identifier\n * @param deviceId - Device/client identifier\n * @param deviceInfo - Optional device metadata\n * @returns The updated user presence\n */\n abstract connectDevice(\n userId: string,\n deviceId: string,\n deviceInfo?: Partial<DeviceInfo>\n ): Promise<UserPresence>;\n\n /**\n * Unregister a device connection\n *\n * May trigger grace period if this is the user's last device.\n *\n * @param userId - User identifier\n * @param deviceId - Device/client identifier\n * @returns The updated user presence, or null if user is completely offline\n */\n abstract disconnectDevice(\n userId: string,\n deviceId: string\n ): Promise<UserPresence | null>;\n\n /**\n * Update activity timestamp for a device\n *\n * Used for heartbeats and activity tracking.\n *\n * @param update - Activity update information\n * @returns The updated user presence\n */\n abstract updateActivity(update: ActivityUpdate): Promise<UserPresence>;\n\n /**\n * Get presence state for a user\n *\n * @param userId - User identifier\n * @returns User presence, or null if not found\n */\n abstract getUserPresence(userId: string): Promise<UserPresence | null>;\n\n /**\n * Get presence state for multiple users\n *\n * @param userIds - Array of user identifiers\n * @returns Map of userId to UserPresence\n */\n abstract getUsersPresence(userIds: string[]): Promise<Map<string, UserPresence>>;\n\n /**\n * Get all online users\n *\n * @returns Array of user presences with status 'online'\n */\n abstract getOnlineUsers(): Promise<UserPresence[]>;\n\n /**\n * Get all devices for a user\n *\n * @param userId - User identifier\n * @returns Array of device info\n */\n abstract getUserDevices(userId: string): Promise<DeviceInfo[]>;\n\n /**\n * Manually set user status\n *\n * @param userId - User identifier\n * @param status - New presence status\n * @returns The updated user presence\n */\n abstract setUserStatus(userId: string, status: PresenceStatus): Promise<UserPresence>;\n\n /**\n * Check for stale connections and update presence accordingly\n *\n * This should be called periodically to:\n * - Mark idle devices as 'away'\n * - Disconnect devices that haven't sent heartbeats\n * - Expire grace periods\n *\n * @returns Array of presence change events\n */\n abstract processHeartbeats(): Promise<PresenceChangeEvent[]>;\n\n /**\n * Clear all presence data\n *\n * Useful for testing and cleanup.\n */\n abstract clear(): Promise<void>;\n\n /**\n * Get configuration\n */\n getConfig(): Readonly<Required<PresenceConfig>> {\n return { ...this.config };\n }\n\n /**\n * Check if presence tracking is enabled\n */\n isEnabled(): boolean {\n return this.config.enabled;\n }\n\n /**\n * Calculate presence status based on device states\n *\n * Helper method for implementations to determine overall user status.\n *\n * @param devices - Map of devices for a user\n * @param now - Current timestamp\n * @returns Calculated presence status\n */\n protected calculatePresenceStatus(\n devices: Map<string, DeviceInfo>,\n now: number = Date.now()\n ): PresenceStatus {\n if (devices.size === 0) {\n return 'offline';\n }\n\n const heartbeatTimeout = this.config.heartbeatInterval * this.config.awayThreshold;\n\n // Check if ANY device is active (within heartbeat threshold)\n for (const device of devices.values()) {\n const timeSinceActivity = now - device.lastActivity;\n if (timeSinceActivity < heartbeatTimeout) {\n return 'online';\n }\n }\n\n // All devices are idle\n return 'away';\n }\n\n /**\n * Check if a device should be disconnected due to missed heartbeats\n *\n * @param device - Device info\n * @param now - Current timestamp\n * @returns true if device should be disconnected\n */\n protected shouldDisconnectDevice(\n device: DeviceInfo,\n now: number = Date.now()\n ): boolean {\n const timeout = this.config.heartbeatInterval * this.config.disconnectThreshold;\n return (now - device.lastActivity) > timeout;\n }\n}\n",
|
|
25
|
-
"/**\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 { PresenceManager } from './PresenceManager.js';\nimport type {\n UserPresence,\n DeviceInfo,\n PresenceStatus,\n PresenceConfig,\n PresenceChangeEvent,\n ActivityUpdate\n} from '../types/presence.js';\n\n/**\n * Grace period entry for tracking disconnected users\n */\ninterface GracePeriodEntry {\n userId: string;\n disconnectedAt: number;\n previousPresence: UserPresence;\n}\n\nexport class DefaultPresenceManager extends PresenceManager {\n private userPresences = new Map<string, UserPresence>();\n private deviceToUser = new Map<string, string>();\n private gracePeriodEntries = new Map<string, GracePeriodEntry>();\n\n constructor(config?: PresenceConfig) {\n super(config);\n }\n\n async connectDevice(\n userId: string,\n deviceId: string,\n deviceInfo?: Partial<DeviceInfo>\n ): Promise<UserPresence> {\n const now = Date.now();\n\n // Check if user is in grace period (reconnecting)\n const gracePeriodEntry = this.gracePeriodEntries.get(userId);\n if (gracePeriodEntry) {\n // Restore from grace period\n this.gracePeriodEntries.delete(userId);\n const presence = gracePeriodEntry.previousPresence;\n\n // Add the new device\n const device: DeviceInfo = {\n deviceId,\n type: deviceInfo?.type,\n connectedAt: now,\n lastActivity: now,\n metadata: deviceInfo?.metadata\n };\n\n presence.devices.set(deviceId, device);\n presence.status = 'online';\n presence.lastActivity = now;\n\n this.userPresences.set(userId, presence);\n this.deviceToUser.set(deviceId, userId);\n\n return presence;\n }\n\n // Get or create user presence\n let presence = this.userPresences.get(userId);\n\n if (!presence) {\n // New user\n presence = {\n userId,\n status: 'online',\n devices: new Map(),\n firstConnectedAt: now,\n lastActivity: now,\n metadata: {}\n };\n this.userPresences.set(userId, presence);\n }\n\n // Add device\n const device: DeviceInfo = {\n deviceId,\n type: deviceInfo?.type,\n connectedAt: now,\n lastActivity: now,\n metadata: deviceInfo?.metadata\n };\n\n presence.devices.set(deviceId, device);\n presence.status = this.calculatePresenceStatus(presence.devices, now);\n presence.lastActivity = now;\n\n this.deviceToUser.set(deviceId, userId);\n\n return presence;\n }\n\n async disconnectDevice(\n userId: string,\n deviceId: string\n ): Promise<UserPresence | null> {\n const presence = this.userPresences.get(userId);\n if (!presence) {\n return null;\n }\n\n // Remove device\n presence.devices.delete(deviceId);\n this.deviceToUser.delete(deviceId);\n\n const now = Date.now();\n\n // If no devices left, start grace period\n if (presence.devices.size === 0) {\n if (this.config.gracePeriod > 0) {\n // Move to grace period\n this.gracePeriodEntries.set(userId, {\n userId,\n disconnectedAt: now,\n previousPresence: presence\n });\n this.userPresences.delete(userId);\n return null;\n } else {\n // No grace period, remove completely\n this.userPresences.delete(userId);\n return null;\n }\n }\n\n // Still has devices, update status\n presence.status = this.calculatePresenceStatus(presence.devices, now);\n\n // Update lastActivity to most recent device activity\n let mostRecentActivity = 0;\n for (const device of presence.devices.values()) {\n if (device.lastActivity > mostRecentActivity) {\n mostRecentActivity = device.lastActivity;\n }\n }\n presence.lastActivity = mostRecentActivity;\n\n return presence;\n }\n\n async updateActivity(update: ActivityUpdate): Promise<UserPresence> {\n const { userId, deviceId, timestamp } = update;\n\n const presence = this.userPresences.get(userId);\n if (!presence) {\n throw new Error(`User ${userId} not found in presence system`);\n }\n\n const device = presence.devices.get(deviceId);\n if (!device) {\n throw new Error(`Device ${deviceId} not found for user ${userId}`);\n }\n\n // Update device activity\n device.lastActivity = timestamp;\n\n // Update user activity\n if (timestamp > presence.lastActivity) {\n presence.lastActivity = timestamp;\n }\n\n // Recalculate status\n const previousStatus = presence.status;\n presence.status = this.calculatePresenceStatus(presence.devices, timestamp);\n\n return presence;\n }\n\n async getUserPresence(userId: string): Promise<UserPresence | null> {\n return this.userPresences.get(userId) || null;\n }\n\n async getUsersPresence(userIds: string[]): Promise<Map<string, UserPresence>> {\n const result = new Map<string, UserPresence>();\n\n for (const userId of userIds) {\n const presence = this.userPresences.get(userId);\n if (presence) {\n result.set(userId, presence);\n }\n }\n\n return result;\n }\n\n async getOnlineUsers(): Promise<UserPresence[]> {\n const online: UserPresence[] = [];\n\n for (const presence of this.userPresences.values()) {\n if (presence.status === 'online') {\n online.push(presence);\n }\n }\n\n return online;\n }\n\n async getUserDevices(userId: string): Promise<DeviceInfo[]> {\n const presence = this.userPresences.get(userId);\n if (!presence) {\n return [];\n }\n\n return Array.from(presence.devices.values());\n }\n\n async setUserStatus(userId: string, status: PresenceStatus): Promise<UserPresence> {\n const presence = this.userPresences.get(userId);\n if (!presence) {\n throw new Error(`User ${userId} not found in presence system`);\n }\n\n presence.status = status;\n return presence;\n }\n\n async processHeartbeats(): Promise<PresenceChangeEvent[]> {\n const now = Date.now();\n const changes: PresenceChangeEvent[] = [];\n\n // Process active presences\n for (const [userId, presence] of this.userPresences.entries()) {\n const devicesToRemove: string[] = [];\n\n // Check each device for timeout\n for (const [deviceId, device] of presence.devices.entries()) {\n if (this.shouldDisconnectDevice(device, now)) {\n devicesToRemove.push(deviceId);\n }\n }\n\n // Remove timed-out devices\n for (const deviceId of devicesToRemove) {\n presence.devices.delete(deviceId);\n this.deviceToUser.delete(deviceId);\n }\n\n // Update status after removing devices\n const previousStatus = presence.status;\n const newStatus = this.calculatePresenceStatus(presence.devices, now);\n\n if (newStatus !== previousStatus) {\n presence.status = newStatus;\n changes.push({\n userId,\n previousStatus,\n status: newStatus,\n timestamp: now,\n reason: 'heartbeat_timeout'\n });\n }\n\n // If no devices left, move to grace period\n if (presence.devices.size === 0) {\n if (this.config.gracePeriod > 0) {\n this.gracePeriodEntries.set(userId, {\n userId,\n disconnectedAt: now,\n previousPresence: presence\n });\n }\n this.userPresences.delete(userId);\n }\n }\n\n // Process grace period expirations\n const expiredGracePeriods: string[] = [];\n\n for (const [userId, entry] of this.gracePeriodEntries.entries()) {\n const gracePeriodElapsed = now - entry.disconnectedAt;\n\n if (gracePeriodElapsed > this.config.gracePeriod) {\n expiredGracePeriods.push(userId);\n\n changes.push({\n userId,\n previousStatus: entry.previousPresence.status,\n status: 'offline',\n timestamp: now,\n reason: 'grace_period_expired'\n });\n }\n }\n\n // Remove expired grace period entries\n for (const userId of expiredGracePeriods) {\n this.gracePeriodEntries.delete(userId);\n }\n\n return changes;\n }\n\n async clear(): Promise<void> {\n this.userPresences.clear();\n this.deviceToUser.clear();\n this.gracePeriodEntries.clear();\n }\n\n /**\n * Get count of users in grace period (useful for monitoring)\n */\n getGracePeriodCount(): number {\n return this.gracePeriodEntries.size;\n }\n\n /**\n * Get total connected device count\n */\n getConnectedDeviceCount(): number {\n return this.deviceToUser.size;\n }\n\n /**\n * Get total unique user count\n */\n getUniqueUserCount(): number {\n return this.userPresences.size + this.gracePeriodEntries.size;\n }\n}\n",
|
|
25
|
+
"/**\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 { PresenceManager } from './PresenceManager.js';\nimport type {\n UserPresence,\n DeviceInfo,\n PresenceStatus,\n PresenceConfig,\n PresenceChangeEvent,\n ActivityUpdate\n} from '../types/presence.js';\nimport type { PresenceExtension, ExtendedUserPresence } from './PresenceExtension.js';\nimport type { BaseServer } from '../server/BaseServer.js';\n\n/**\n * Grace period entry for tracking disconnected users\n */\ninterface GracePeriodEntry {\n userId: string;\n disconnectedAt: number;\n previousPresence: UserPresence;\n}\n\nexport class DefaultPresenceManager<TExtendedData = Record<string, unknown>> extends PresenceManager {\n private userPresences = new Map<string, UserPresence>();\n private deviceToUser = new Map<string, string>();\n private gracePeriodEntries = new Map<string, GracePeriodEntry>();\n private extensions: PresenceExtension<TExtendedData>[] = [];\n private server?: BaseServer;\n\n constructor(config?: PresenceConfig & {\n extensions?: PresenceExtension<TExtendedData>[];\n }) {\n super(config);\n this.extensions = config?.extensions || [];\n }\n\n /**\n * Set server reference for auto-broadcasting\n *\n * This is called automatically by ServerBuilder.\n * @internal\n */\n setServer(server: BaseServer): void {\n this.server = server;\n }\n\n /**\n * Initialize all extensions\n * @internal\n */\n async initializeExtensions(): Promise<void> {\n for (const ext of this.extensions) {\n await ext.initialize?.();\n }\n }\n\n /**\n * Destroy all extensions\n * @internal\n */\n async destroyExtensions(): Promise<void> {\n for (const ext of this.extensions) {\n await ext.destroy?.();\n }\n }\n\n async connectDevice(\n userId: string,\n deviceId: string,\n deviceInfo?: Partial<DeviceInfo>\n ): Promise<UserPresence> {\n const now = Date.now();\n const isFirstDevice = !this.userPresences.has(userId) && !this.gracePeriodEntries.has(userId);\n\n // Check if user is in grace period (reconnecting)\n const gracePeriodEntry = this.gracePeriodEntries.get(userId);\n if (gracePeriodEntry) {\n // Restore from grace period\n this.gracePeriodEntries.delete(userId);\n const presence = gracePeriodEntry.previousPresence;\n\n // Add the new device\n const device: DeviceInfo = {\n deviceId,\n type: deviceInfo?.type,\n connectedAt: now,\n lastActivity: now,\n metadata: deviceInfo?.metadata\n };\n\n presence.devices.set(deviceId, device);\n presence.status = 'online';\n presence.lastActivity = now;\n\n this.userPresences.set(userId, presence);\n this.deviceToUser.set(deviceId, userId);\n\n // Call extension hooks\n if (isFirstDevice) {\n for (const ext of this.extensions) {\n await ext.onUserOnline?.(userId, deviceId, deviceInfo?.metadata || {});\n }\n } else {\n for (const ext of this.extensions) {\n await ext.onDeviceConnected?.(userId, deviceId, deviceInfo?.metadata || {});\n }\n }\n\n // Auto-broadcast\n if (this.config.broadcastPresenceUpdates && this.server) {\n const experimental = (this.server as any).experimental;\n await experimental?.broadcastAuthenticated({\n type: 'presence:user_online',\n payload: {\n userId,\n deviceId,\n status: 'online',\n timestamp: now\n }\n });\n }\n\n return presence;\n }\n\n // Get or create user presence\n let presence = this.userPresences.get(userId);\n const wasOnline = presence !== undefined;\n\n if (!presence) {\n // New user\n presence = {\n userId,\n status: 'online',\n devices: new Map(),\n firstConnectedAt: now,\n lastActivity: now,\n metadata: {}\n };\n this.userPresences.set(userId, presence);\n }\n\n // Add device\n const device: DeviceInfo = {\n deviceId,\n type: deviceInfo?.type,\n connectedAt: now,\n lastActivity: now,\n metadata: deviceInfo?.metadata\n };\n\n presence.devices.set(deviceId, device);\n presence.status = this.calculatePresenceStatus(presence.devices, now);\n presence.lastActivity = now;\n\n this.deviceToUser.set(deviceId, userId);\n\n // Call extension hooks\n if (!wasOnline) {\n for (const ext of this.extensions) {\n await ext.onUserOnline?.(userId, deviceId, deviceInfo?.metadata || {});\n }\n } else {\n for (const ext of this.extensions) {\n await ext.onDeviceConnected?.(userId, deviceId, deviceInfo?.metadata || {});\n }\n }\n\n // Auto-broadcast if user came online\n if (!wasOnline && this.config.broadcastPresenceUpdates && this.server) {\n const experimental = (this.server as any).experimental;\n await experimental?.broadcastAuthenticated({\n type: 'presence:user_online',\n payload: {\n userId,\n deviceId,\n status: 'online',\n timestamp: now\n }\n });\n }\n\n return presence;\n }\n\n async disconnectDevice(\n userId: string,\n deviceId: string\n ): Promise<UserPresence | null> {\n const presence = this.userPresences.get(userId);\n if (!presence) {\n return null;\n }\n\n // Remove device\n presence.devices.delete(deviceId);\n this.deviceToUser.delete(deviceId);\n\n const now = Date.now();\n const isLastDevice = presence.devices.size === 0;\n\n // If no devices left, start grace period\n if (isLastDevice) {\n // Call extension hooks for user going offline\n for (const ext of this.extensions) {\n await ext.onUserOffline?.(userId, deviceId);\n }\n\n // Auto-broadcast user offline\n if (this.config.broadcastPresenceUpdates && this.server) {\n const experimental = (this.server as any).experimental;\n await experimental?.broadcastAuthenticated({\n type: 'presence:user_offline',\n payload: {\n userId,\n deviceId,\n status: 'offline',\n timestamp: now,\n gracePeriod: this.config.gracePeriod\n }\n });\n }\n\n if (this.config.gracePeriod > 0) {\n // Move to grace period\n this.gracePeriodEntries.set(userId, {\n userId,\n disconnectedAt: now,\n previousPresence: presence\n });\n this.userPresences.delete(userId);\n return null;\n } else {\n // No grace period, remove completely\n this.userPresences.delete(userId);\n return null;\n }\n }\n\n // Still has devices - call device disconnected hook\n for (const ext of this.extensions) {\n await ext.onDeviceDisconnected?.(userId, deviceId);\n }\n\n // Still has devices, update status\n presence.status = this.calculatePresenceStatus(presence.devices, now);\n\n // Update lastActivity to most recent device activity\n let mostRecentActivity = 0;\n for (const device of presence.devices.values()) {\n if (device.lastActivity > mostRecentActivity) {\n mostRecentActivity = device.lastActivity;\n }\n }\n presence.lastActivity = mostRecentActivity;\n\n return presence;\n }\n\n async updateActivity(update: ActivityUpdate): Promise<UserPresence> {\n const { userId, deviceId, timestamp, activityType } = update;\n\n const presence = this.userPresences.get(userId);\n if (!presence) {\n throw new Error(`User ${userId} not found in presence system`);\n }\n\n const device = presence.devices.get(deviceId);\n if (!device) {\n throw new Error(`Device ${deviceId} not found for user ${userId}`);\n }\n\n // Update device activity\n device.lastActivity = timestamp;\n\n // Update user activity\n if (timestamp > presence.lastActivity) {\n presence.lastActivity = timestamp;\n }\n\n // Recalculate status\n const previousStatus = presence.status;\n presence.status = this.calculatePresenceStatus(presence.devices, timestamp);\n\n // Call extension hooks\n for (const ext of this.extensions) {\n await ext.onActivity?.(userId, deviceId, activityType || 'heartbeat');\n }\n\n return presence;\n }\n\n async getUserPresence(userId: string): Promise<ExtendedUserPresence<TExtendedData> | null> {\n const basePresence = this.userPresences.get(userId);\n if (!basePresence) {\n return null;\n }\n\n // Merge extended data from all extensions\n if (this.extensions.length > 0) {\n const extendedData: Record<string, unknown> = {};\n for (const ext of this.extensions) {\n const data = await ext.getExtendedData?.(userId);\n if (data) {\n Object.assign(extendedData, data);\n }\n }\n\n return {\n ...basePresence,\n extended: extendedData as TExtendedData\n };\n }\n\n return basePresence;\n }\n\n async getUsersPresence(userIds: string[]): Promise<Map<string, UserPresence>> {\n const result = new Map<string, UserPresence>();\n\n for (const userId of userIds) {\n const presence = this.userPresences.get(userId);\n if (presence) {\n result.set(userId, presence);\n }\n }\n\n return result;\n }\n\n async getOnlineUsers(): Promise<ExtendedUserPresence<TExtendedData>[]> {\n const online: ExtendedUserPresence<TExtendedData>[] = [];\n\n for (const presence of this.userPresences.values()) {\n if (presence.status === 'online') {\n // Check visibility with extensions\n let visible = true;\n for (const ext of this.extensions) {\n const shouldShow = await ext.shouldBeVisible?.(presence.userId);\n if (shouldShow === false) {\n visible = false;\n break;\n }\n }\n\n if (visible) {\n // Get full presence with extended data\n const fullPresence = await this.getUserPresence(presence.userId);\n if (fullPresence) {\n online.push(fullPresence);\n }\n }\n }\n }\n\n return online;\n }\n\n async getUserDevices(userId: string): Promise<DeviceInfo[]> {\n const presence = this.userPresences.get(userId);\n if (!presence) {\n return [];\n }\n\n return Array.from(presence.devices.values());\n }\n\n async setUserStatus(userId: string, status: PresenceStatus): Promise<UserPresence> {\n const presence = this.userPresences.get(userId);\n if (!presence) {\n throw new Error(`User ${userId} not found in presence system`);\n }\n\n presence.status = status;\n return presence;\n }\n\n async processHeartbeats(): Promise<PresenceChangeEvent[]> {\n const now = Date.now();\n const changes: PresenceChangeEvent[] = [];\n\n // Process active presences\n for (const [userId, presence] of this.userPresences.entries()) {\n const devicesToRemove: string[] = [];\n\n // Check each device for timeout\n for (const [deviceId, device] of presence.devices.entries()) {\n if (this.shouldDisconnectDevice(device, now)) {\n devicesToRemove.push(deviceId);\n }\n }\n\n // Remove timed-out devices\n for (const deviceId of devicesToRemove) {\n presence.devices.delete(deviceId);\n this.deviceToUser.delete(deviceId);\n }\n\n // Update status after removing devices\n const previousStatus = presence.status;\n const newStatus = this.calculatePresenceStatus(presence.devices, now);\n\n if (newStatus !== previousStatus) {\n presence.status = newStatus;\n changes.push({\n userId,\n previousStatus,\n status: newStatus,\n timestamp: now,\n reason: 'heartbeat_timeout'\n });\n }\n\n // If no devices left, move to grace period\n if (presence.devices.size === 0) {\n if (this.config.gracePeriod > 0) {\n this.gracePeriodEntries.set(userId, {\n userId,\n disconnectedAt: now,\n previousPresence: presence\n });\n }\n this.userPresences.delete(userId);\n }\n }\n\n // Process grace period expirations\n const expiredGracePeriods: string[] = [];\n\n for (const [userId, entry] of this.gracePeriodEntries.entries()) {\n const gracePeriodElapsed = now - entry.disconnectedAt;\n\n if (gracePeriodElapsed > this.config.gracePeriod) {\n expiredGracePeriods.push(userId);\n\n changes.push({\n userId,\n previousStatus: entry.previousPresence.status,\n status: 'offline',\n timestamp: now,\n reason: 'grace_period_expired'\n });\n }\n }\n\n // Remove expired grace period entries\n for (const userId of expiredGracePeriods) {\n this.gracePeriodEntries.delete(userId);\n }\n\n return changes;\n }\n\n async clear(): Promise<void> {\n // Destroy extensions first\n await this.destroyExtensions();\n\n this.userPresences.clear();\n this.deviceToUser.clear();\n this.gracePeriodEntries.clear();\n }\n\n /**\n * Get count of users in grace period (useful for monitoring)\n */\n getGracePeriodCount(): number {\n return this.gracePeriodEntries.size;\n }\n\n /**\n * Get total connected device count\n */\n getConnectedDeviceCount(): number {\n return this.deviceToUser.size;\n }\n\n /**\n * Get total unique user count\n */\n getUniqueUserCount(): number {\n return this.userPresences.size + this.gracePeriodEntries.size;\n }\n}\n",
|
|
26
26
|
"import type { ITransportAdapter } from '../../abstractions/TransportAdapter.js';\nimport type {\n ConnectionState,\n ConnectionOptions,\n Message,\n MessageHandler,\n ErrorHandler,\n CloseHandler\n} from '../../types/index.js';\n\nexport class MockTransportAdapter implements ITransportAdapter {\n private state: ConnectionState = 'disconnected';\n private messageHandlers: Set<MessageHandler> = new Set();\n private errorHandlers: Set<ErrorHandler> = new Set();\n private closeHandlers: Set<CloseHandler> = new Set();\n private messageQueue: Message[] = [];\n private simulateLatency: number = 0;\n private shouldFailConnection: boolean = false;\n private connectedUrl: string | null = null;\n private connectionAttempts: number = 0;\n\n constructor(options?: {\n simulateLatency?: number;\n shouldFailConnection?: boolean;\n }) {\n this.simulateLatency = options?.simulateLatency ?? 0;\n this.shouldFailConnection = options?.shouldFailConnection ?? false;\n }\n\n async connect(url: string, _options?: ConnectionOptions): Promise<void> {\n this.connectionAttempts++;\n\n if (this.shouldFailConnection) {\n this.state = 'disconnected';\n const error = new Error('Mock connection failed');\n this.errorHandlers.forEach(handler => handler(error));\n throw error;\n }\n\n this.state = 'connecting';\n this.connectedUrl = url;\n\n // Simulate connection delay\n if (this.simulateLatency > 0) {\n await new Promise(resolve => setTimeout(resolve, this.simulateLatency));\n }\n\n this.state = 'connected';\n }\n\n async disconnect(): Promise<void> {\n if (this.state === 'disconnected') return;\n\n this.state = 'disconnecting';\n\n // Simulate disconnect delay\n if (this.simulateLatency > 0) {\n await new Promise(resolve => setTimeout(resolve, this.simulateLatency / 2));\n }\n\n this.state = 'disconnected';\n this.connectedUrl = null;\n this.closeHandlers.forEach(handler => handler(1000, 'Normal closure'));\n this.messageQueue = [];\n }\n\n async send(message: Message): Promise<void> {\n if (this.state !== 'connected') {\n throw new Error('Not connected');\n }\n\n // Simulate send latency\n if (this.simulateLatency > 0) {\n await new Promise(resolve => setTimeout(resolve, this.simulateLatency));\n }\n\n this.messageQueue.push(message);\n }\n\n onMessage(handler: MessageHandler): void {\n this.messageHandlers.add(handler);\n }\n\n onError(handler: ErrorHandler): void {\n this.errorHandlers.add(handler);\n }\n\n onClose(handler: CloseHandler): void {\n this.closeHandlers.add(handler);\n }\n\n getState(): ConnectionState {\n return this.state;\n }\n\n isConnected(): boolean {\n return this.state === 'connected';\n }\n\n // Test helper methods\n simulateMessage(message: Message, bypassConnectionCheck: boolean = false): void {\n if (!bypassConnectionCheck && this.state !== 'connected') {\n throw new Error('Cannot simulate message when not connected');\n }\n this.messageHandlers.forEach(handler => handler(message));\n }\n\n simulateError(error: Error): void {\n this.errorHandlers.forEach(handler => handler(error));\n }\n\n simulateClose(code: number, reason: string): void {\n this.state = 'disconnected';\n this.closeHandlers.forEach(handler => handler(code, reason));\n }\n\n getMessageQueue(): Message[] {\n return [...this.messageQueue];\n }\n\n clearMessageQueue(): void {\n this.messageQueue = [];\n }\n\n getConnectedUrl(): string | null {\n return this.connectedUrl;\n }\n\n getConnectionAttempts(): number {\n return this.connectionAttempts;\n }\n\n resetConnectionAttempts(): void {\n this.connectionAttempts = 0;\n }\n\n // Additional test helper methods for two-tier architecture testing\n /**\n * Simulate a client connection with authentication state\n * Note: This bypasses the connected state check for testing purposes\n */\n async simulateConnection(clientId: string, options: {\n authenticated?: boolean;\n userId?: string;\n metadata?: Record<string, unknown>;\n } = {}): Promise<void> {\n // Set transport to connected state if not already\n if (this.state !== 'connected') {\n this.state = 'connected';\n }\n\n const message = {\n id: `conn-${clientId}`,\n type: 'connection',\n payload: {\n clientId,\n authenticated: options.authenticated ?? false,\n userId: options.userId,\n metadata: options.metadata\n },\n timestamp: Date.now()\n };\n\n // Use simulateMessage with bypass flag\n this.simulateMessage(message, true);\n }\n\n /**\n * Simulate a client disconnection\n */\n async simulateDisconnect(clientId: string, reason: string = 'Normal closure'): Promise<void> {\n // Send a disconnect message to the server for this specific client\n const message = {\n id: `disconnect-${clientId}`,\n type: 'disconnect',\n payload: {\n clientId,\n reason\n },\n timestamp: Date.now()\n };\n\n this.simulateMessage(message, true);\n }\n\n /**\n * Simulate sending a message from a client to the server\n * Properly wraps the message with clientId in payload for server routing\n *\n * @param clientId - The client sending the message\n * @param messageType - The message type (e.g., 'join_room', 'leave_room', 'broadcast_event')\n * @param messagePayload - The message payload\n */\n async simulateClientMessage(\n clientId: string,\n messageType: string,\n messagePayload: Record<string, unknown> = {}\n ): Promise<void> {\n const message: Message = {\n id: `msg-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n type: 'server_message',\n payload: {\n clientId,\n type: messageType,\n ...messagePayload\n },\n timestamp: Date.now()\n };\n\n this.simulateMessage(message, true);\n }\n\n /**\n * Get all messages sent to a specific client\n * This filters the message queue for messages addressed to the given client\n */\n getSentMessages(clientId: string): any[] {\n return this.messageQueue\n .filter(msg => {\n const payload = msg.payload as any;\n return payload?.clientId === clientId;\n })\n .map(msg => {\n const { clientId: _, ...rest } = msg.payload as any;\n return rest;\n });\n }\n\n /**\n * Simulate an incoming message from the server to the client\n * This is used in client tests to mock server responses\n * @param message - The message to send to the client\n */\n simulateIncomingMessage(message: any): void {\n // Ensure message has required Message fields\n const fullMessage: Message = {\n id: message.id || `msg-${Date.now()}`,\n type: message.type,\n payload: message.payload || {},\n timestamp: message.timestamp || Date.now()\n };\n\n this.messageHandlers.forEach(handler => handler(fullMessage));\n }\n}",
|
|
27
27
|
"import type { IStorageAdapter, StorageOperation } from '../../abstractions/StorageAdapter.js';\n\ninterface StorageItem {\n value: unknown;\n expiresAt?: number;\n}\n\nexport class MockStorageAdapter implements IStorageAdapter {\n private storage: Map<string, StorageItem> = new Map();\n private simulateLatency: number = 0;\n private shouldFailOperations: boolean = false;\n\n constructor(options?: {\n simulateLatency?: number;\n shouldFailOperations?: boolean;\n }) {\n this.simulateLatency = options?.simulateLatency ?? 0;\n this.shouldFailOperations = options?.shouldFailOperations ?? false;\n }\n\n async get<T>(key: string): Promise<T | null> {\n await this.simulateDelay();\n\n if (this.shouldFailOperations) {\n throw new Error('Mock storage operation failed');\n }\n\n const item = this.storage.get(key);\n if (!item) return null;\n\n // Check expiration\n if (item.expiresAt && item.expiresAt < Date.now()) {\n this.storage.delete(key);\n return null;\n }\n\n return item.value as T;\n }\n\n async set<T>(key: string, value: T, ttl?: number): Promise<void> {\n await this.simulateDelay();\n\n if (this.shouldFailOperations) {\n throw new Error('Mock storage operation failed');\n }\n\n const item: StorageItem = {\n value,\n expiresAt: ttl ? Date.now() + ttl : undefined\n };\n\n this.storage.set(key, item);\n }\n\n async delete(key: string): Promise<void> {\n await this.simulateDelay();\n\n if (this.shouldFailOperations) {\n throw new Error('Mock storage operation failed');\n }\n\n this.storage.delete(key);\n }\n\n async exists(key: string): Promise<boolean> {\n await this.simulateDelay();\n\n if (this.shouldFailOperations) {\n throw new Error('Mock storage operation failed');\n }\n\n const item = this.storage.get(key);\n if (!item) return false;\n\n // Check expiration\n if (item.expiresAt && item.expiresAt < Date.now()) {\n this.storage.delete(key);\n return false;\n }\n\n return true;\n }\n\n async scan(pattern: string): Promise<string[]> {\n await this.simulateDelay();\n\n if (this.shouldFailOperations) {\n throw new Error('Mock storage operation failed');\n }\n\n // Convert pattern to regex (simple glob to regex conversion)\n const regexPattern = pattern\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.')\n .replace(/\\[!/g, '[^')\n .replace(/\\[/g, '[')\n .replace(/\\]/g, ']');\n\n const regex = new RegExp(`^${regexPattern}$`);\n const keys: string[] = [];\n\n for (const [key, item] of this.storage.entries()) {\n // Skip expired items\n if (item.expiresAt && item.expiresAt < Date.now()) {\n this.storage.delete(key);\n continue;\n }\n\n if (regex.test(key)) {\n keys.push(key);\n }\n }\n\n return keys;\n }\n\n async clear(): Promise<void> {\n await this.simulateDelay();\n\n if (this.shouldFailOperations) {\n throw new Error('Mock storage operation failed');\n }\n\n this.storage.clear();\n }\n\n async transaction<T>(operations: StorageOperation[]): Promise<T> {\n await this.simulateDelay();\n\n if (this.shouldFailOperations) {\n throw new Error('Mock storage operation failed');\n }\n\n const results: unknown[] = [];\n const rollback: (() => void)[] = [];\n\n try {\n for (const op of operations) {\n switch (op.type) {\n case 'get': {\n const value = await this.get(op.key);\n results.push(value);\n break;\n }\n case 'set': {\n const oldValue = await this.get(op.key);\n await this.set(op.key, op.value, op.ttl);\n rollback.push(() => {\n if (oldValue !== null) {\n this.storage.set(op.key, { value: oldValue });\n } else {\n this.storage.delete(op.key);\n }\n });\n results.push(true);\n break;\n }\n case 'delete': {\n const oldValue = await this.get(op.key);\n await this.delete(op.key);\n rollback.push(() => {\n if (oldValue !== null) {\n this.storage.set(op.key, { value: oldValue });\n }\n });\n results.push(true);\n break;\n }\n case 'exists': {\n const exists = await this.exists(op.key);\n results.push(exists);\n break;\n }\n }\n }\n\n return results as T;\n } catch (error) {\n // Rollback on error\n for (const rollbackFn of rollback.reverse()) {\n rollbackFn();\n }\n throw error;\n }\n }\n\n // Test helper methods\n private async simulateDelay(): Promise<void> {\n if (this.simulateLatency > 0) {\n await new Promise(resolve => setTimeout(resolve, this.simulateLatency));\n }\n }\n\n getSize(): number {\n return this.storage.size;\n }\n\n getRawStorage(): Map<string, StorageItem> {\n return new Map(this.storage);\n }\n\n setFailOperations(fail: boolean): void {\n this.shouldFailOperations = fail;\n }\n}",
|
|
28
28
|
"import type { IAuthAdapter } from '../../abstractions/AuthAdapter.js';\nimport type {\n TokenPayload,\n AuthResult,\n Credentials,\n CredentialType\n} from '../../types/index.js';\n\nexport class MockAuthAdapter implements IAuthAdapter {\n private tokens: Map<string, TokenPayload> = new Map();\n private revokedTokens: Set<string> = new Set();\n private users: Map<string, { password: string; payload: TokenPayload }> = new Map();\n private simulateLatency: number = 0;\n private shouldFailAuth: boolean = false;\n private tokenCounter: number = 0;\n\n constructor(options?: {\n simulateLatency?: number;\n shouldFailAuth?: boolean;\n }) {\n this.simulateLatency = options?.simulateLatency ?? 0;\n this.shouldFailAuth = options?.shouldFailAuth ?? false;\n\n // Add some default test users\n this.addUser('testuser', 'password123', {\n userId: 'user-1',\n email: 'test@example.com',\n username: 'testuser',\n permissions: ['read', 'write']\n });\n\n this.addUser('admin', 'admin123', {\n userId: 'user-admin',\n email: 'admin@example.com',\n username: 'admin',\n permissions: ['read', 'write', 'admin']\n });\n }\n\n async validateToken(token: string): Promise<TokenPayload> {\n await this.simulateDelay();\n\n if (this.shouldFailAuth) {\n throw new Error('Mock auth validation failed');\n }\n\n if (this.revokedTokens.has(token)) {\n throw new Error('Token has been revoked');\n }\n\n const payload = this.tokens.get(token);\n if (!payload) {\n throw new Error('Invalid token');\n }\n\n // Check expiration\n if (payload.expiresAt && payload.expiresAt < Date.now()) {\n this.tokens.delete(token);\n throw new Error('Token expired');\n }\n\n return payload;\n }\n\n async generateToken(payload: TokenPayload): Promise<string> {\n await this.simulateDelay();\n\n if (this.shouldFailAuth) {\n throw new Error('Mock token generation failed');\n }\n\n const token = `mock-token-${++this.tokenCounter}`;\n\n // Set default expiration to 1 hour if not specified\n const expiresAt = payload.expiresAt ?? Date.now() + 3600000;\n\n this.tokens.set(token, { ...payload, expiresAt });\n return token;\n }\n\n async refreshToken(token: string): Promise<string> {\n await this.simulateDelay();\n\n if (this.shouldFailAuth) {\n throw new Error('Mock token refresh failed');\n }\n\n const payload = await this.validateToken(token);\n\n // Revoke old token\n await this.revokeToken(token);\n\n // Generate new token with extended expiration\n const newPayload = {\n ...payload,\n expiresAt: Date.now() + 3600000 // 1 hour from now\n };\n\n return this.generateToken(newPayload);\n }\n\n async revokeToken(token: string): Promise<void> {\n await this.simulateDelay();\n\n if (this.shouldFailAuth) {\n throw new Error('Mock token revocation failed');\n }\n\n this.tokens.delete(token);\n this.revokedTokens.add(token);\n }\n\n async authenticate(credentials: Credentials): Promise<AuthResult> {\n await this.simulateDelay();\n\n if (this.shouldFailAuth) {\n return {\n success: false,\n error: 'Mock authentication failed'\n };\n }\n\n switch (credentials.type) {\n case 'password': {\n if (!credentials.username || !credentials.password) {\n return {\n success: false,\n error: 'Username and password required'\n };\n }\n\n const user = this.users.get(credentials.username);\n if (!user || user.password !== credentials.password) {\n return {\n success: false,\n error: 'Invalid credentials'\n };\n }\n\n const token = await this.generateToken(user.payload);\n const refreshToken = `refresh-${token}`;\n this.tokens.set(refreshToken, user.payload);\n\n return {\n success: true,\n token,\n refreshToken,\n user: user.payload,\n userId: user.payload.userId,\n expiresIn: 3600\n };\n }\n\n case 'token':\n case 'jwt':\n case 'bearer': {\n if (!credentials.token) {\n return {\n success: false,\n error: 'Token required'\n };\n }\n\n try {\n const payload = await this.validateToken(credentials.token);\n return {\n success: true,\n token: credentials.token,\n user: payload,\n userId: payload.userId,\n expiresIn: 3600\n };\n } catch (error) {\n return {\n success: false,\n error: (error as Error).message\n };\n }\n }\n\n case 'oauth': {\n // Simulate OAuth flow\n if (!credentials.code) {\n return {\n success: false,\n error: 'OAuth code required'\n };\n }\n\n // Create a mock OAuth user\n const payload: TokenPayload = {\n userId: `oauth-user-${Date.now()}`,\n email: 'oauth@example.com',\n username: 'oauthuser',\n permissions: ['read', 'write']\n };\n\n const token = await this.generateToken(payload);\n return {\n success: true,\n token,\n user: payload,\n userId: payload.userId,\n expiresIn: 3600\n };\n }\n\n default:\n return {\n success: false,\n error: 'Unsupported credential type'\n };\n }\n }\n \n // New methods for enhanced auth interface\n isAuthRequired(): boolean {\n return false; // Mock adapter doesn't require auth by default\n }\n \n getAuthTimeout(): number {\n return 10000; // 10 seconds for testing\n }\n \n getSupportedCredentialTypes(): CredentialType[] {\n return ['password', 'token', 'jwt', 'bearer', 'oauth'];\n }\n\n // Test helper methods\n private async simulateDelay(): Promise<void> {\n if (this.simulateLatency > 0) {\n await new Promise(resolve => setTimeout(resolve, this.simulateLatency));\n }\n }\n\n addUser(username: string, password: string, payload: TokenPayload): void {\n this.users.set(username, { password, payload });\n }\n\n removeUser(username: string): void {\n this.users.delete(username);\n }\n\n getTokenCount(): number {\n return this.tokens.size;\n }\n\n getRevokedTokenCount(): number {\n return this.revokedTokens.size;\n }\n\n clearTokens(): void {\n this.tokens.clear();\n this.revokedTokens.clear();\n }\n\n setFailAuth(fail: boolean): void {\n this.shouldFailAuth = fail;\n }\n}",
|
|
29
29
|
"import createWebSocketStream from './lib/stream.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer };\nexport default WebSocket;\n",
|
|
30
30
|
"import type { ITransportAdapter } from '../../abstractions/TransportAdapter.js';\nimport type { IAuthAdapter } from '../../abstractions/AuthAdapter.js';\nimport type {\n ConnectionState,\n ConnectionOptions,\n Message,\n MessageHandler,\n ErrorHandler,\n CloseHandler,\n AuthResult,\n Credentials\n} from '../../types/index.js';\nimport type { Server as HttpServer } from 'http';\nimport type { Server as HttpsServer } from 'https';\nimport type { IncomingMessage } from 'http';\nimport { WebSocketServer, WebSocket } from 'ws';\n\ninterface ClientConnection {\n id: string;\n ws: WebSocket;\n userId?: string;\n authenticated: boolean;\n metadata?: Record<string, unknown>;\n authTimeout?: NodeJS.Timeout;\n connectedAt: number;\n}\n\nexport interface WebSocketServerTransportConfig {\n authTimeout?: number;\n closeOnAuthFailure?: boolean;\n requireAuth?: boolean;\n}\n\nexport class WebSocketServerTransportAdapter implements ITransportAdapter {\n private state: ConnectionState = 'disconnected';\n private messageHandlers: Set<MessageHandler> = new Set();\n private errorHandlers: Set<ErrorHandler> = new Set();\n private closeHandlers: Set<CloseHandler> = new Set();\n \n // Standalone mode properties\n private wss?: WebSocketServer;\n private serverUrl?: string;\n \n // Integration mode properties\n private attachedServer?: HttpServer | HttpsServer;\n private attachedWss?: WebSocketServer;\n private webSocketPath?: string;\n \n // Client management\n private clients = new Map<string, ClientConnection>();\n private mode: 'standalone' | 'integration' = 'standalone';\n \n // Authentication\n private authAdapter?: IAuthAdapter;\n private config: WebSocketServerTransportConfig;\n\n constructor(config?: WebSocketServerTransportConfig) {\n this.config = {\n authTimeout: config?.authTimeout ?? 5000,\n closeOnAuthFailure: config?.closeOnAuthFailure ?? false,\n requireAuth: config?.requireAuth ?? false,\n ...config\n };\n }\n\n // Set the auth adapter\n setAuthAdapter(auth: IAuthAdapter): void {\n this.authAdapter = auth;\n // Use auth adapter's preference only if requireAuth is not already true\n // This allows explicit requireAuth: true in config to take precedence\n if (auth.isAuthRequired && !this.config.requireAuth) {\n this.config.requireAuth = auth.isAuthRequired();\n }\n // For authTimeout, use adapter's value if not explicitly set (not matching default)\n if (auth.getAuthTimeout && this.config.authTimeout === 5000) {\n this.config.authTimeout = auth.getAuthTimeout();\n }\n }\n\n // Standalone mode implementation\n async connect(url: string, _options?: ConnectionOptions): Promise<void> {\n if (this.state === 'connected' || this.state === 'connecting') {\n throw new Error('Already connected or connecting');\n }\n\n this.state = 'connecting';\n this.serverUrl = url;\n this.mode = 'standalone';\n\n try {\n // Extract port from URL\n const urlObj = new URL(url);\n const port = parseInt(urlObj.port) || (urlObj.protocol === 'wss:' ? 443 : 80);\n\n // Create WebSocket server\n this.wss = new WebSocketServer({ port });\n\n this.wss.on('connection', (ws, req) => {\n this.handleConnection(ws, req);\n });\n\n this.wss.on('error', (error) => {\n this.errorHandlers.forEach(handler => handler(error));\n });\n\n this.wss.on('close', () => {\n this.state = 'disconnected';\n this.closeHandlers.forEach(handler => handler(1000, 'Server closed'));\n });\n\n this.state = 'connected';\n } catch (error) {\n this.state = 'disconnected';\n throw error;\n }\n }\n\n // Integration mode implementation\n async attach(server: HttpServer | HttpsServer, path: string = '/ws'): Promise<void> {\n if (this.state === 'connected' || this.state === 'connecting') {\n throw new Error('Already connected or connecting');\n }\n\n this.state = 'connecting';\n this.attachedServer = server;\n this.webSocketPath = path;\n this.mode = 'integration';\n\n try {\n // Create WebSocket server attached to the existing HTTP server\n this.wss = new WebSocketServer({ \n server, \n path,\n perMessageDeflate: false\n });\n\n this.wss.on('connection', (ws, req) => {\n this.handleConnection(ws, req);\n });\n\n this.wss.on('error', (error) => {\n this.errorHandlers.forEach(handler => handler(error));\n });\n\n this.state = 'connected';\n } catch (error) {\n this.state = 'disconnected';\n throw error;\n }\n }\n\n async attachToWebSocketServer(wss: WebSocketServer): Promise<void> {\n if (this.state === 'connected' || this.state === 'connecting') {\n throw new Error('Already connected or connecting');\n }\n\n this.state = 'connecting';\n this.attachedWss = wss;\n this.mode = 'integration';\n\n try {\n this.wss = wss;\n\n this.wss.on('connection', (ws, req) => {\n this.handleConnection(ws, req);\n });\n\n this.wss.on('error', (error) => {\n this.errorHandlers.forEach(handler => handler(error));\n });\n\n this.state = 'connected';\n } catch (error) {\n this.state = 'disconnected';\n throw error;\n }\n }\n\n private async handleConnection(ws: WebSocket, req: IncomingMessage): Promise<void> {\n const clientId = this.generateId();\n \n // Step 1: Try header authentication if auth adapter is available\n let authenticated = false;\n let authResult: AuthResult | null = null;\n \n if (this.authAdapter && req.headers.authorization) {\n const token = this.extractBearerToken(req.headers.authorization as string);\n if (token) {\n try {\n authResult = await this.authAdapter.authenticate({\n type: 'bearer',\n token: token\n });\n authenticated = authResult.success;\n } catch {\n // Header auth failed but don't reject connection\n }\n }\n }\n \n // Step 2: Create client with auth state\n const client: ClientConnection = {\n id: clientId,\n ws,\n authenticated,\n userId: authResult?.userId || (authResult?.user?.userId),\n metadata: authResult?.metadata || authResult?.user?.metadata,\n connectedAt: Date.now()\n };\n \n this.clients.set(clientId, client);\n \n // Step 3: Set up message handling\n ws.on('message', (data) => {\n this.handleClientMessage(clientId, data);\n });\n\n ws.on('error', (error) => {\n this.errorHandlers.forEach(handler => handler(error));\n });\n\n ws.on('close', (_code, _reason) => {\n // Clear auth timeout if exists\n if (client.authTimeout) {\n clearTimeout(client.authTimeout);\n }\n this.clients.delete(clientId);\n });\n \n // Step 4: Set auth timeout if not authenticated and auth is required\n if (!authenticated && this.config.requireAuth && this.authAdapter) {\n client.authTimeout = setTimeout(() => {\n if (!client.authenticated) {\n ws.close(1008, 'Authentication timeout');\n this.clients.delete(clientId);\n }\n }, this.config.authTimeout);\n }\n \n // Step 5: Notify about connection (with auth status)\n const connectionMessage: Message = {\n id: this.generateId(),\n type: 'connection',\n payload: {\n clientId,\n authenticated,\n userId: client.userId,\n metadata: client.metadata\n },\n timestamp: Date.now()\n };\n \n this.messageHandlers.forEach(handler => handler(connectionMessage));\n }\n \n private async handleClientMessage(clientId: string, data: Buffer | ArrayBuffer | Buffer[]): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) return;\n\n try {\n const message = JSON.parse(data.toString()) as Message;\n\n // Special handling for authentication messages\n if (message.type === 'authenticate' && !client.authenticated && this.authAdapter) {\n await this.handleAuthMessage(client, message);\n return;\n }\n\n // Reject messages from unauthenticated clients if auth is required\n if (this.config.requireAuth && !client.authenticated) {\n this.sendToClient(client, {\n id: this.generateId(),\n type: 'error',\n payload: { error: 'Authentication required' },\n timestamp: Date.now()\n });\n return;\n }\n \n // Add clientId to message payload for routing\n const enrichedMessage = {\n ...message,\n payload: {\n ...(message.payload as object),\n clientId\n }\n };\n \n this.messageHandlers.forEach(handler => handler(enrichedMessage));\n } catch (error) {\n this.errorHandlers.forEach(handler => handler(error as Error));\n }\n }\n \n private async handleAuthMessage(client: ClientConnection, message: Message): Promise<void> {\n if (!this.authAdapter) {\n this.sendToClient(client, {\n id: this.generateId(),\n type: 'auth_error',\n payload: { error: 'No auth adapter configured' },\n timestamp: Date.now()\n });\n return;\n }\n \n try {\n const credentials = message.payload as Credentials;\n const result = await this.authAdapter.authenticate(credentials);\n \n if (result.success) {\n // Clear auth timeout\n if (client.authTimeout) {\n clearTimeout(client.authTimeout);\n client.authTimeout = undefined;\n }\n \n // Update client state\n client.authenticated = true;\n client.userId = result.userId || result.user?.userId;\n client.metadata = result.metadata || result.user?.metadata;\n \n // Send success response\n this.sendToClient(client, {\n id: this.generateId(),\n type: 'auth_success',\n payload: {\n userId: client.userId,\n metadata: client.metadata\n },\n timestamp: Date.now()\n });\n \n // Notify handlers about authentication\n const authMessage: Message = {\n id: this.generateId(),\n type: 'client_authenticated',\n payload: {\n clientId: client.id,\n userId: client.userId,\n metadata: client.metadata\n },\n timestamp: Date.now()\n };\n \n this.messageHandlers.forEach(handler => handler(authMessage));\n } else {\n // Send error response\n this.sendToClient(client, {\n id: this.generateId(),\n type: 'auth_error',\n payload: { error: result.error || 'Authentication failed' },\n timestamp: Date.now()\n });\n \n // Optionally close connection\n if (this.config.closeOnAuthFailure) {\n client.ws.close(1008, 'Authentication failed');\n this.clients.delete(client.id);\n }\n }\n } catch (error) {\n this.sendToClient(client, {\n id: this.generateId(),\n type: 'auth_error',\n payload: { error: (error as Error).message },\n timestamp: Date.now()\n });\n }\n }\n \n private extractBearerToken(authHeader: string): string | null {\n if (authHeader.startsWith('Bearer ')) {\n return authHeader.substring(7);\n }\n return null;\n }\n \n private sendToClient(client: ClientConnection, message: Message): void {\n if (client.ws.readyState === WebSocket.OPEN) {\n client.ws.send(JSON.stringify(message));\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.state === 'disconnected') {\n return;\n }\n\n this.state = 'disconnecting';\n\n // Close all client connections\n for (const [_clientId, client] of this.clients) {\n try {\n if (client.authTimeout) {\n clearTimeout(client.authTimeout);\n }\n client.ws.close(1000, 'Server shutting down');\n } catch {\n // Ignore errors when closing individual connections\n }\n }\n this.clients.clear();\n\n // Close the WebSocket server (only if we created it)\n if (this.wss && this.mode === 'standalone') {\n await new Promise<void>((resolve) => {\n this.wss!.close(() => resolve());\n });\n }\n\n this.state = 'disconnected';\n this.wss = undefined;\n this.attachedServer = undefined;\n this.attachedWss = undefined;\n }\n\n async send(message: Message): Promise<void> {\n if (this.state !== 'connected') {\n throw new Error('Not connected');\n }\n\n // Extract clientId from message payload for routing\n const payload = message.payload as { clientId?: string; [key: string]: unknown };\n const { clientId, ...clientMessage } = payload;\n\n if (!clientId) {\n throw new Error('Message must contain clientId in payload for routing');\n }\n\n const client = this.clients.get(clientId);\n if (!client) {\n throw new Error(`Client ${clientId} not found`);\n }\n\n if (client.ws.readyState !== WebSocket.OPEN) {\n throw new Error(`Client ${clientId} connection is not open`);\n }\n\n const messageToSend = {\n ...message,\n payload: clientMessage\n };\n\n client.ws.send(JSON.stringify(messageToSend));\n }\n\n onMessage(handler: MessageHandler): void {\n this.messageHandlers.add(handler);\n }\n\n onError(handler: ErrorHandler): void {\n this.errorHandlers.add(handler);\n }\n\n onClose(handler: CloseHandler): void {\n this.closeHandlers.add(handler);\n }\n\n getState(): ConnectionState {\n return this.state;\n }\n\n isConnected(): boolean {\n return this.state === 'connected';\n }\n\n // Utility methods\n getConnectedClients(): ClientConnection[] {\n return Array.from(this.clients.values());\n }\n \n getAuthenticatedClients(): ClientConnection[] {\n return Array.from(this.clients.values()).filter(c => c.authenticated);\n }\n\n getClientCount(): number {\n return this.clients.size;\n }\n\n getMode(): 'standalone' | 'integration' {\n return this.mode;\n }\n \n isAuthRequired(): boolean {\n return this.config.requireAuth ?? false;\n }\n\n private generateId(): string {\n return Math.random().toString(36).substring(2) + Date.now().toString(36);\n }\n}",
|
|
31
31
|
"import type { ITransportAdapter } from '../../abstractions/TransportAdapter.js';\nimport type {\n ConnectionState,\n ConnectionOptions,\n Message,\n MessageHandler,\n ErrorHandler,\n CloseHandler\n} from '../../types/index.js';\nimport { WebSocket } from 'ws';\n\nexport interface WebSocketClientConfig {\n /**\n * Additional headers to send with the WebSocket connection request\n */\n headers?: Record<string, string>;\n\n /**\n * Connection timeout in milliseconds\n * @default 30000\n */\n connectionTimeout?: number;\n\n /**\n * Enable automatic ping/pong for connection health checks\n * @default true\n */\n enableHeartbeat?: boolean;\n\n /**\n * Heartbeat interval in milliseconds\n * @default 30000\n */\n heartbeatInterval?: number;\n}\n\n/**\n * WebSocket client transport adapter for connecting to remote WebSocket servers.\n *\n * This adapter creates an outgoing WebSocket connection and is intended for use\n * with BaseClient. For server-side operations (accepting incoming connections),\n * use WebSocketServerTransportAdapter instead.\n *\n * @example\n * ```typescript\n * const transport = new WebSocketClientTransportAdapter();\n * const client = new ClientBuilder()\n * .withTransport(transport)\n * .build();\n *\n * await client.connect('ws://localhost:3000');\n * ```\n */\nexport class WebSocketClientTransportAdapter implements ITransportAdapter {\n private ws?: WebSocket;\n private state: ConnectionState = 'disconnected';\n private messageHandlers: Set<MessageHandler> = new Set();\n private errorHandlers: Set<ErrorHandler> = new Set();\n private closeHandlers: Set<CloseHandler> = new Set();\n private config: Required<WebSocketClientConfig>;\n private heartbeatTimer?: NodeJS.Timeout;\n private connectionTimer?: NodeJS.Timeout;\n\n constructor(config?: WebSocketClientConfig) {\n this.config = {\n headers: config?.headers ?? {},\n connectionTimeout: config?.connectionTimeout ?? 30000,\n enableHeartbeat: config?.enableHeartbeat ?? true,\n heartbeatInterval: config?.heartbeatInterval ?? 30000\n };\n }\n\n async connect(url: string, options?: ConnectionOptions): Promise<void> {\n if (this.state === 'connected' || this.state === 'connecting') {\n throw new Error('Already connected or connecting');\n }\n\n this.state = 'connecting';\n\n return new Promise<void>((resolve, reject) => {\n try {\n // Create WebSocket client connection\n const wsOptions: any = {};\n\n // Add custom headers if provided\n if (Object.keys(this.config.headers).length > 0) {\n wsOptions.headers = this.config.headers;\n }\n\n this.ws = new WebSocket(url, wsOptions);\n\n // Set up connection timeout\n this.connectionTimer = setTimeout(() => {\n if (this.state === 'connecting') {\n this.ws?.terminate();\n this.state = 'disconnected';\n const error = new Error('Connection timeout');\n this.errorHandlers.forEach(handler => handler(error));\n reject(error);\n }\n }, this.config.connectionTimeout);\n\n // Handle connection open\n this.ws.on('open', () => {\n if (this.connectionTimer) {\n clearTimeout(this.connectionTimer);\n this.connectionTimer = undefined;\n }\n\n this.state = 'connected';\n\n // Start heartbeat if enabled\n if (this.config.enableHeartbeat) {\n this.startHeartbeat();\n }\n\n resolve();\n });\n\n // Handle incoming messages\n this.ws.on('message', (data: Buffer | ArrayBuffer | Buffer[]) => {\n try {\n const message = JSON.parse(data.toString()) as Message;\n this.messageHandlers.forEach(handler => handler(message));\n } catch (error) {\n this.errorHandlers.forEach(handler => handler(error as Error));\n }\n });\n\n // Handle errors\n this.ws.on('error', (error: Error) => {\n if (this.connectionTimer) {\n clearTimeout(this.connectionTimer);\n this.connectionTimer = undefined;\n }\n\n this.errorHandlers.forEach(handler => handler(error));\n\n // If error occurs during connection, reject the promise\n if (this.state === 'connecting') {\n this.state = 'disconnected';\n reject(error);\n }\n });\n\n // Handle connection close\n this.ws.on('close', (code: number, reason: Buffer) => {\n if (this.connectionTimer) {\n clearTimeout(this.connectionTimer);\n this.connectionTimer = undefined;\n }\n\n this.stopHeartbeat();\n\n const wasConnected = this.state === 'connected';\n this.state = 'disconnected';\n\n if (wasConnected) {\n this.closeHandlers.forEach(handler => handler(code, reason.toString()));\n }\n });\n\n // Handle pong responses for heartbeat\n if (this.config.enableHeartbeat) {\n this.ws.on('pong', () => {\n // Connection is alive\n });\n }\n } catch (error) {\n if (this.connectionTimer) {\n clearTimeout(this.connectionTimer);\n this.connectionTimer = undefined;\n }\n this.state = 'disconnected';\n reject(error);\n }\n });\n }\n\n async disconnect(): Promise<void> {\n if (this.state === 'disconnected') {\n return;\n }\n\n this.state = 'disconnecting';\n this.stopHeartbeat();\n\n if (this.connectionTimer) {\n clearTimeout(this.connectionTimer);\n this.connectionTimer = undefined;\n }\n\n if (this.ws) {\n // Close with normal closure code\n this.ws.close(1000, 'Client disconnecting');\n\n // Wait for close event or timeout\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n this.ws?.terminate();\n resolve();\n }, 5000);\n\n const onClose = () => {\n clearTimeout(timeout);\n resolve();\n };\n\n this.ws?.once('close', onClose);\n });\n\n this.ws = undefined;\n }\n\n this.state = 'disconnected';\n }\n\n async send(message: Message): Promise<void> {\n if (this.state !== 'connected') {\n throw new Error('Not connected');\n }\n\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n throw new Error('WebSocket connection is not open');\n }\n\n try {\n const data = JSON.stringify(message);\n this.ws.send(data);\n } catch (error) {\n this.errorHandlers.forEach(handler => handler(error as Error));\n throw error;\n }\n }\n\n onMessage(handler: MessageHandler): void {\n this.messageHandlers.add(handler);\n }\n\n onError(handler: ErrorHandler): void {\n this.errorHandlers.add(handler);\n }\n\n onClose(handler: CloseHandler): void {\n this.closeHandlers.add(handler);\n }\n\n getState(): ConnectionState {\n return this.state;\n }\n\n isConnected(): boolean {\n return this.state === 'connected' && this.ws?.readyState === WebSocket.OPEN;\n }\n\n /**\n * Get the underlying WebSocket instance\n * Useful for advanced use cases\n */\n getWebSocket(): WebSocket | undefined {\n return this.ws;\n }\n\n /**\n * Set custom headers for the WebSocket connection\n * Must be called before connect()\n */\n setHeaders(headers: Record<string, string>): void {\n if (this.state !== 'disconnected') {\n throw new Error('Cannot set headers while connected');\n }\n this.config.headers = { ...this.config.headers, ...headers };\n }\n\n /**\n * Add an authorization header for authentication\n * Must be called before connect()\n */\n setAuthToken(token: string): void {\n this.setHeaders({ Authorization: `Bearer ${token}` });\n }\n\n // Private methods\n\n private startHeartbeat(): void {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n }\n\n this.heartbeatTimer = setInterval(() => {\n if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n this.ws.ping();\n }\n }, this.config.heartbeatInterval);\n }\n\n private stopHeartbeat(): void {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = undefined;\n }\n }\n}\n",
|
|
32
|
-
"import type {\n ConnectionState,\n ConnectionOptions,\n Message,\n Event,\n RoomState,\n RoomUser,\n LockRequest,\n Lock,\n Credentials\n} from '../types/index.js';\nimport type { ITransportAdapter } from '../abstractions/TransportAdapter.js';\nimport type { IAuthAdapter } from '../abstractions/AuthAdapter.js';\nimport type { IStorageAdapter } from '../abstractions/StorageAdapter.js';\nimport { TypedEventEmitter } from '../abstractions/EventEmitter.js';\n\nexport interface ClientConfig {\n transport: ITransportAdapter;\n auth?: IAuthAdapter;\n storage?: IStorageAdapter;\n reconnection?: {\n enabled: boolean;\n maxAttempts: number;\n initialDelay: number;\n maxDelay: number;\n backoffFactor: number;\n };\n}\n\nexport interface ClientEvents {\n connected: { url: string };\n disconnected: { code: number; reason: string };\n reconnecting: { attempt: number; delay: number };\n reconnected: { url: string };\n error: { error: Error };\n room_joined: { roomId: string; state: RoomState };\n room_left: { roomId: string };\n event_received: { event: Event };\n lock_acquired: { lock: Lock };\n lock_released: { lockId: string };\n lock_denied: { request: LockRequest; reason: string };\n presence_updated: { users: RoomUser[] };\n [key: string]: unknown;\n}\n\nexport class BaseClient extends TypedEventEmitter<ClientEvents> {\n private transport: ITransportAdapter;\n private auth?: IAuthAdapter;\n private storage?: IStorageAdapter;\n private config: ClientConfig;\n\n private connectionState: ConnectionState = 'disconnected';\n private currentRoomId: string | null = null;\n private currentRoomState: RoomState | null = null;\n private authToken: string | null = null;\n private userId: string | null = null;\n\n // Reconnection state\n private reconnectAttempts = 0;\n private reconnectTimer: NodeJS.Timeout | null = null;\n private lastConnectionUrl: string | null = null;\n private lastCredentials: Credentials | null = null;\n\n constructor(config: ClientConfig) {\n super();\n this.config = config;\n this.transport = config.transport;\n this.auth = config.auth;\n this.storage = config.storage;\n\n // Set up transport event handlers\n this.transport.onMessage(this.handleMessage.bind(this));\n this.transport.onError(this.handleError.bind(this));\n this.transport.onClose(this.handleClose.bind(this));\n }\n\n // Connection Management\n async connect(url: string, credentials?: Credentials): Promise<void> {\n if (this.connectionState !== 'disconnected') {\n throw new Error('Client is already connected or connecting');\n }\n\n this.connectionState = 'connecting';\n this.lastConnectionUrl = url;\n this.lastCredentials = credentials || null;\n\n try {\n // Authenticate if credentials provided and auth adapter available\n if (credentials && this.auth) {\n const authResult = await this.auth.authenticate(credentials);\n if (authResult.success && authResult.token) {\n this.authToken = authResult.token;\n this.userId = authResult.user?.userId || authResult.userId || '';\n\n // Apply token to transport if it supports authentication\n if (typeof (this.transport as any).setAuthToken === 'function') {\n (this.transport as any).setAuthToken(authResult.token);\n }\n }\n }\n\n const options: ConnectionOptions = {\n url,\n reconnect: false, // We handle reconnection ourselves\n ...this.config.reconnection\n };\n\n await this.transport.connect(url, options);\n this.connectionState = 'connected';\n\n await this.emit('connected', { url });\n } catch (error) {\n this.connectionState = 'disconnected';\n await this.emit('error', { error: error as Error });\n throw error;\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.connectionState === 'disconnected') {\n return;\n }\n\n this.connectionState = 'disconnecting';\n\n // Clear reconnection timer\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n // Leave room if joined\n if (this.currentRoomId) {\n await this.leaveRoom();\n }\n\n try {\n await this.transport.disconnect();\n } finally {\n this.connectionState = 'disconnected';\n this.currentRoomId = null;\n this.currentRoomState = null;\n this.authToken = null;\n this.userId = null;\n this.reconnectAttempts = 0;\n\n await this.emit('disconnected', { code: 1000, reason: 'Client disconnected' });\n }\n }\n\n async reconnect(): Promise<void> {\n if (!this.lastConnectionUrl) {\n throw new Error('No previous connection to reconnect to');\n }\n\n if (this.connectionState !== 'disconnected') {\n await this.disconnect();\n }\n\n await this.connect(this.lastConnectionUrl, this.lastCredentials || undefined);\n }\n\n // Room Management\n async joinRoom(roomId: string): Promise<void> {\n if (this.connectionState !== 'connected') {\n throw new Error('Client must be connected to join a room');\n }\n\n if (this.currentRoomId) {\n await this.leaveRoom();\n }\n\n const message: Message = {\n id: this.generateId(),\n type: 'join_room',\n payload: { roomId, token: this.authToken },\n timestamp: Date.now()\n };\n\n await this.transport.send(message);\n // Response will be handled in handleMessage\n }\n\n async leaveRoom(): Promise<void> {\n if (!this.currentRoomId) {\n return;\n }\n\n const message: Message = {\n id: this.generateId(),\n type: 'leave_room',\n payload: { roomId: this.currentRoomId },\n timestamp: Date.now()\n };\n\n await this.transport.send(message);\n // Response will be handled in handleMessage\n\n this.currentRoomId = null;\n this.currentRoomState = null;\n }\n\n // Event Operations\n async broadcast(event: Event): Promise<void> {\n if (this.connectionState !== 'connected' || !this.currentRoomId) {\n throw new Error('Client must be connected and in a room to broadcast events');\n }\n\n const message: Message = {\n id: this.generateId(),\n type: 'broadcast_event',\n payload: { event, roomId: this.currentRoomId },\n timestamp: Date.now()\n };\n\n await this.transport.send(message);\n }\n\n // Lock Operations\n async requestLock(request: LockRequest): Promise<void> {\n if (this.connectionState !== 'connected' || !this.currentRoomId) {\n throw new Error('Client must be connected and in a room to request locks');\n }\n\n const message: Message = {\n id: this.generateId(),\n type: 'request_lock',\n payload: { request, roomId: this.currentRoomId },\n timestamp: Date.now()\n };\n\n await this.transport.send(message);\n }\n\n async releaseLock(lockId: string): Promise<void> {\n if (this.connectionState !== 'connected' || !this.currentRoomId) {\n throw new Error('Client must be connected and in a room to release locks');\n }\n\n const message: Message = {\n id: this.generateId(),\n type: 'release_lock',\n payload: { lockId, roomId: this.currentRoomId },\n timestamp: Date.now()\n };\n\n await this.transport.send(message);\n }\n\n // State Getters\n getConnectionState(): ConnectionState {\n return this.connectionState;\n }\n\n getRoomState(): RoomState | null {\n return this.currentRoomState;\n }\n\n getPresence(): RoomUser[] {\n return this.currentRoomState ? Array.from(this.currentRoomState.users.values()) : [];\n }\n\n getCurrentRoomId(): string | null {\n return this.currentRoomId;\n }\n\n getUserId(): string | null {\n return this.userId;\n }\n\n // Private Methods\n private async handleMessage(message: Message): Promise<void> {\n try {\n switch (message.type) {\n case 'room_joined':\n await this.handleRoomJoined(message.payload as { roomId: string; state: RoomState });\n break;\n case 'room_left':\n await this.handleRoomLeft(message.payload as { roomId: string });\n break;\n case 'event_broadcast':\n await this.handleEventBroadcast(message.payload as { event: Event });\n break;\n case 'lock_acquired':\n await this.handleLockAcquired(message.payload as { lock: Lock });\n break;\n case 'lock_released':\n await this.handleLockReleased(message.payload as { lockId: string });\n break;\n case 'lock_denied':\n await this.handleLockDenied(message.payload as { request: LockRequest; reason: string });\n break;\n case 'presence_updated':\n await this.handlePresenceUpdated(message.payload as { users: RoomUser[] });\n break;\n case 'error':\n await this.handleServerError(message.payload as { error: string });\n break;\n }\n } catch (error) {\n await this.emit('error', { error: error as Error });\n // Error is already emitted, no additional handling needed\n }\n }\n\n private async handleError(error: Error): Promise<void> {\n await this.emit('error', { error });\n }\n\n private async handleClose(code: number, reason: string): Promise<void> {\n const wasConnected = this.connectionState === 'connected';\n this.connectionState = 'disconnected';\n\n if (wasConnected) {\n await this.emit('disconnected', { code, reason });\n\n // Attempt reconnection if enabled\n if (this.config.reconnection?.enabled && this.lastConnectionUrl) {\n this.scheduleReconnect();\n }\n }\n }\n\n private async handleRoomJoined(payload: { roomId: string; state: RoomState }): Promise<void> {\n this.currentRoomId = payload.roomId;\n this.currentRoomState = payload.state;\n await this.emit('room_joined', payload);\n }\n\n private async handleRoomLeft(payload: { roomId: string }): Promise<void> {\n if (this.currentRoomId === payload.roomId) {\n this.currentRoomId = null;\n this.currentRoomState = null;\n }\n await this.emit('room_left', payload);\n }\n\n private async handleEventBroadcast(payload: { event: Event }): Promise<void> {\n await this.emit('event_received', payload);\n }\n\n private async handleLockAcquired(payload: { lock: Lock }): Promise<void> {\n await this.emit('lock_acquired', payload);\n }\n\n private async handleLockReleased(payload: { lockId: string }): Promise<void> {\n await this.emit('lock_released', payload);\n }\n\n private async handleLockDenied(payload: { request: LockRequest; reason: string }): Promise<void> {\n await this.emit('lock_denied', payload);\n }\n\n private async handlePresenceUpdated(payload: { users: RoomUser[] }): Promise<void> {\n if (this.currentRoomState) {\n // Convert array back to Map\n this.currentRoomState.users = new Map(payload.users.map(user => [user.id, user]));\n }\n await this.emit('presence_updated', payload);\n }\n\n private async handleServerError(payload: { error: string }): Promise<void> {\n const error = new Error(payload.error);\n await this.emit('error', { error });\n }\n\n private async scheduleReconnect(): Promise<void> {\n if (!this.config.reconnection || this.reconnectAttempts >= this.config.reconnection.maxAttempts) {\n return;\n }\n\n const delay = Math.min(\n this.config.reconnection.initialDelay * Math.pow(this.config.reconnection.backoffFactor, this.reconnectAttempts),\n this.config.reconnection.maxDelay\n );\n\n this.reconnectAttempts++;\n\n await this.emit('reconnecting', { attempt: this.reconnectAttempts, delay });\n\n this.reconnectTimer = setTimeout(async () => {\n try {\n await this.reconnect();\n this.reconnectAttempts = 0;\n await this.emit('reconnected', { url: this.lastConnectionUrl! });\n } catch {\n // Reconnection failed, schedule next attempt\n this.scheduleReconnect();\n }\n }, delay);\n }\n\n private generateId(): string {\n return Math.random().toString(36).substring(2) + Date.now().toString(36);\n }\n}",
|
|
32
|
+
"import type {\n ConnectionState,\n ConnectionOptions,\n Message,\n Event,\n RoomState,\n RoomUser,\n LockRequest,\n Lock,\n Credentials\n} from '../types/index.js';\nimport type { ITransportAdapter } from '../abstractions/TransportAdapter.js';\nimport type { IAuthAdapter } from '../abstractions/AuthAdapter.js';\nimport type { IStorageAdapter } from '../abstractions/StorageAdapter.js';\nimport { TypedEventEmitter } from '../abstractions/EventEmitter.js';\n\nexport interface ClientConfig {\n transport: ITransportAdapter;\n auth?: IAuthAdapter;\n storage?: IStorageAdapter;\n reconnection?: {\n enabled: boolean;\n maxAttempts: number;\n initialDelay: number;\n maxDelay: number;\n backoffFactor: number;\n };\n}\n\nexport interface ClientEvents {\n connected: { url: string };\n disconnected: { code: number; reason: string };\n reconnecting: { attempt: number; delay: number };\n reconnected: { url: string };\n error: { error: Error };\n room_joined: { roomId: string; state: RoomState };\n room_left: { roomId: string };\n event_received: { event: Event };\n lock_acquired: { lock: Lock };\n lock_released: { lockId: string };\n lock_denied: { request: LockRequest; reason: string };\n presence_updated: { users: RoomUser[] };\n [key: string]: unknown;\n}\n\nexport class BaseClient extends TypedEventEmitter<ClientEvents> {\n private transport: ITransportAdapter;\n private auth?: IAuthAdapter;\n private storage?: IStorageAdapter;\n private config: ClientConfig;\n\n private connectionState: ConnectionState = 'disconnected';\n private currentRoomId: string | null = null;\n private currentRoomState: RoomState | null = null;\n private authToken: string | null = null;\n private userId: string | null = null;\n\n // Reconnection state\n private reconnectAttempts = 0;\n private reconnectTimer: NodeJS.Timeout | null = null;\n private lastConnectionUrl: string | null = null;\n private lastCredentials: Credentials | null = null;\n\n constructor(config: ClientConfig) {\n super();\n this.config = config;\n this.transport = config.transport;\n this.auth = config.auth;\n this.storage = config.storage;\n\n // Set up transport event handlers\n this.transport.onMessage(this.handleMessage.bind(this));\n this.transport.onError(this.handleError.bind(this));\n this.transport.onClose(this.handleClose.bind(this));\n }\n\n // Connection Management\n async connect(url: string, credentials?: Credentials): Promise<void> {\n if (this.connectionState !== 'disconnected') {\n throw new Error('Client is already connected or connecting');\n }\n\n this.connectionState = 'connecting';\n this.lastConnectionUrl = url;\n this.lastCredentials = credentials || null;\n\n try {\n let tokenToApply: string | null = null;\n\n // Authenticate if credentials provided and auth adapter available\n if (credentials && this.auth) {\n const authResult = await this.auth.authenticate(credentials);\n if (authResult.success && authResult.token) {\n this.authToken = authResult.token;\n this.userId = authResult.user?.userId || authResult.userId || '';\n tokenToApply = authResult.token;\n }\n }\n // If no credentials but auth adapter exists, try to get existing token\n else if (this.auth && typeof this.auth.getCurrentToken === 'function') {\n const currentToken = this.auth.getCurrentToken();\n if (currentToken) {\n this.authToken = currentToken;\n tokenToApply = currentToken;\n\n // Try to validate and get user info from token\n try {\n const payload = await this.auth.validateToken(currentToken);\n this.userId = payload.userId;\n } catch {\n // Token validation failed, but still try to use it\n }\n }\n }\n\n // Apply token to transport if we have one and transport supports it\n if (tokenToApply && typeof (this.transport as any).setAuthToken === 'function') {\n (this.transport as any).setAuthToken(tokenToApply);\n }\n\n const options: ConnectionOptions = {\n url,\n reconnect: false, // We handle reconnection ourselves\n ...this.config.reconnection\n };\n\n await this.transport.connect(url, options);\n this.connectionState = 'connected';\n\n await this.emit('connected', { url });\n } catch (error) {\n this.connectionState = 'disconnected';\n await this.emit('error', { error: error as Error });\n throw error;\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.connectionState === 'disconnected') {\n return;\n }\n\n this.connectionState = 'disconnecting';\n\n // Clear reconnection timer\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n // Leave room if joined\n if (this.currentRoomId) {\n await this.leaveRoom();\n }\n\n try {\n await this.transport.disconnect();\n } finally {\n this.connectionState = 'disconnected';\n this.currentRoomId = null;\n this.currentRoomState = null;\n this.authToken = null;\n this.userId = null;\n this.reconnectAttempts = 0;\n\n await this.emit('disconnected', { code: 1000, reason: 'Client disconnected' });\n }\n }\n\n async reconnect(): Promise<void> {\n if (!this.lastConnectionUrl) {\n throw new Error('No previous connection to reconnect to');\n }\n\n if (this.connectionState !== 'disconnected') {\n await this.disconnect();\n }\n\n await this.connect(this.lastConnectionUrl, this.lastCredentials || undefined);\n }\n\n // Room Management\n async joinRoom(roomId: string): Promise<void> {\n if (this.connectionState !== 'connected') {\n throw new Error('Client must be connected to join a room');\n }\n\n if (this.currentRoomId) {\n await this.leaveRoom();\n }\n\n const message: Message = {\n id: this.generateId(),\n type: 'join_room',\n payload: { roomId, token: this.authToken },\n timestamp: Date.now()\n };\n\n await this.transport.send(message);\n // Response will be handled in handleMessage\n }\n\n async leaveRoom(): Promise<void> {\n if (!this.currentRoomId) {\n return;\n }\n\n const message: Message = {\n id: this.generateId(),\n type: 'leave_room',\n payload: { roomId: this.currentRoomId },\n timestamp: Date.now()\n };\n\n await this.transport.send(message);\n // Response will be handled in handleMessage\n\n this.currentRoomId = null;\n this.currentRoomState = null;\n }\n\n // Event Operations\n async broadcast(event: Event): Promise<void> {\n if (this.connectionState !== 'connected' || !this.currentRoomId) {\n throw new Error('Client must be connected and in a room to broadcast events');\n }\n\n const message: Message = {\n id: this.generateId(),\n type: 'broadcast_event',\n payload: { event, roomId: this.currentRoomId },\n timestamp: Date.now()\n };\n\n await this.transport.send(message);\n }\n\n // Lock Operations\n async requestLock(request: LockRequest): Promise<void> {\n if (this.connectionState !== 'connected' || !this.currentRoomId) {\n throw new Error('Client must be connected and in a room to request locks');\n }\n\n const message: Message = {\n id: this.generateId(),\n type: 'request_lock',\n payload: { request, roomId: this.currentRoomId },\n timestamp: Date.now()\n };\n\n await this.transport.send(message);\n }\n\n async releaseLock(lockId: string): Promise<void> {\n if (this.connectionState !== 'connected' || !this.currentRoomId) {\n throw new Error('Client must be connected and in a room to release locks');\n }\n\n const message: Message = {\n id: this.generateId(),\n type: 'release_lock',\n payload: { lockId, roomId: this.currentRoomId },\n timestamp: Date.now()\n };\n\n await this.transport.send(message);\n }\n\n // State Getters\n getConnectionState(): ConnectionState {\n return this.connectionState;\n }\n\n getRoomState(): RoomState | null {\n return this.currentRoomState;\n }\n\n getPresence(): RoomUser[] {\n return this.currentRoomState ? Array.from(this.currentRoomState.users.values()) : [];\n }\n\n getCurrentRoomId(): string | null {\n return this.currentRoomId;\n }\n\n getUserId(): string | null {\n return this.userId;\n }\n\n // Private Methods\n private async handleMessage(message: Message): Promise<void> {\n try {\n switch (message.type) {\n case 'room_joined':\n await this.handleRoomJoined(message.payload as { roomId: string; state: RoomState });\n break;\n case 'room_left':\n await this.handleRoomLeft(message.payload as { roomId: string });\n break;\n case 'event_broadcast':\n await this.handleEventBroadcast(message.payload as { event: Event });\n break;\n case 'lock_acquired':\n await this.handleLockAcquired(message.payload as { lock: Lock });\n break;\n case 'lock_released':\n await this.handleLockReleased(message.payload as { lockId: string });\n break;\n case 'lock_denied':\n await this.handleLockDenied(message.payload as { request: LockRequest; reason: string });\n break;\n case 'presence_updated':\n await this.handlePresenceUpdated(message.payload as { users: RoomUser[] });\n break;\n case 'error':\n await this.handleServerError(message.payload as { error: string });\n break;\n }\n } catch (error) {\n await this.emit('error', { error: error as Error });\n // Error is already emitted, no additional handling needed\n }\n }\n\n private async handleError(error: Error): Promise<void> {\n await this.emit('error', { error });\n }\n\n private async handleClose(code: number, reason: string): Promise<void> {\n const wasConnected = this.connectionState === 'connected';\n this.connectionState = 'disconnected';\n\n if (wasConnected) {\n await this.emit('disconnected', { code, reason });\n\n // Attempt reconnection if enabled\n if (this.config.reconnection?.enabled && this.lastConnectionUrl) {\n this.scheduleReconnect();\n }\n }\n }\n\n private async handleRoomJoined(payload: { roomId: string; state: RoomState }): Promise<void> {\n this.currentRoomId = payload.roomId;\n this.currentRoomState = payload.state;\n await this.emit('room_joined', payload);\n }\n\n private async handleRoomLeft(payload: { roomId: string }): Promise<void> {\n if (this.currentRoomId === payload.roomId) {\n this.currentRoomId = null;\n this.currentRoomState = null;\n }\n await this.emit('room_left', payload);\n }\n\n private async handleEventBroadcast(payload: { event: Event }): Promise<void> {\n await this.emit('event_received', payload);\n }\n\n private async handleLockAcquired(payload: { lock: Lock }): Promise<void> {\n await this.emit('lock_acquired', payload);\n }\n\n private async handleLockReleased(payload: { lockId: string }): Promise<void> {\n await this.emit('lock_released', payload);\n }\n\n private async handleLockDenied(payload: { request: LockRequest; reason: string }): Promise<void> {\n await this.emit('lock_denied', payload);\n }\n\n private async handlePresenceUpdated(payload: { users: RoomUser[] }): Promise<void> {\n if (this.currentRoomState) {\n // Convert array back to Map\n this.currentRoomState.users = new Map(payload.users.map(user => [user.id, user]));\n }\n await this.emit('presence_updated', payload);\n }\n\n private async handleServerError(payload: { error: string }): Promise<void> {\n const error = new Error(payload.error);\n await this.emit('error', { error });\n }\n\n private async scheduleReconnect(): Promise<void> {\n if (!this.config.reconnection || this.reconnectAttempts >= this.config.reconnection.maxAttempts) {\n return;\n }\n\n const delay = Math.min(\n this.config.reconnection.initialDelay * Math.pow(this.config.reconnection.backoffFactor, this.reconnectAttempts),\n this.config.reconnection.maxDelay\n );\n\n this.reconnectAttempts++;\n\n await this.emit('reconnecting', { attempt: this.reconnectAttempts, delay });\n\n this.reconnectTimer = setTimeout(async () => {\n try {\n await this.reconnect();\n this.reconnectAttempts = 0;\n await this.emit('reconnected', { url: this.lastConnectionUrl! });\n } catch {\n // Reconnection failed, schedule next attempt\n this.scheduleReconnect();\n }\n }, delay);\n }\n\n private generateId(): string {\n return Math.random().toString(36).substring(2) + Date.now().toString(36);\n }\n}",
|
|
33
33
|
"import type { ITransportAdapter } from '../abstractions/TransportAdapter.js';\nimport type { IAuthAdapter } from '../abstractions/AuthAdapter.js';\nimport type { IStorageAdapter } from '../abstractions/StorageAdapter.js';\nimport { BaseClient, type ClientConfig } from './BaseClient.js';\n\nexport class ClientBuilder {\n private transport?: ITransportAdapter;\n private auth?: IAuthAdapter;\n private storage?: IStorageAdapter;\n private reconnection?: ClientConfig['reconnection'];\n\n withTransport(transport: ITransportAdapter): this {\n this.transport = transport;\n return this;\n }\n\n withAuth(auth: IAuthAdapter): this {\n this.auth = auth;\n return this;\n }\n\n withStorage(storage: IStorageAdapter): this {\n this.storage = storage;\n return this;\n }\n\n withReconnection(config: NonNullable<ClientConfig['reconnection']>): this {\n this.reconnection = config;\n return this;\n }\n\n build(): BaseClient {\n if (!this.transport) {\n throw new Error('Transport adapter is required');\n }\n\n const config: ClientConfig = {\n transport: this.transport,\n auth: this.auth,\n storage: this.storage,\n reconnection: this.reconnection || {\n enabled: true,\n maxAttempts: 5,\n initialDelay: 1000,\n maxDelay: 30000,\n backoffFactor: 2\n }\n };\n\n return new BaseClient(config);\n }\n}",
|
|
34
|
+
"/**\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 { BaseClient, type ClientConfig } from './BaseClient.js';\nimport { TypedEventEmitter } from '../abstractions/EventEmitter.js';\nimport type { UserPresence } from '../types/presence.js';\n\nexport interface PresenceClientConfig {\n /**\n * Base client configuration\n * Provide the full client config including transport and auth adapters\n */\n clientConfig: ClientConfig;\n\n /**\n * WebSocket URL to connect to\n */\n wsUrl: string;\n\n /**\n * Automatically connect on construction\n * @default false\n */\n autoConnect?: boolean;\n\n /**\n * Automatically reconnect on disconnect\n * @default true\n */\n autoReconnect?: boolean;\n\n /**\n * Global presence room ID\n * @default '__global_presence__'\n */\n globalRoomId?: string;\n}\n\nexport interface PresenceClientEvents {\n /**\n * User came online\n */\n userOnline: { userId: string; devices: unknown[] };\n\n /**\n * User went offline\n */\n userOffline: { userId: string };\n\n /**\n * User's presence status changed\n */\n statusChanged: { userId: string; status: string; statusMessage?: string };\n\n /**\n * Connected to presence system\n */\n connected: {};\n\n /**\n * Disconnected from presence system\n */\n disconnected: {};\n\n /**\n * Error occurred\n */\n error: { error: Error };\n\n [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 private client: BaseClient;\n private wsUrl: string;\n private autoReconnectEnabled: boolean;\n private globalRoomId: string;\n private reconnectTimeout?: NodeJS.Timeout;\n\n constructor(config: PresenceClientConfig) {\n super();\n\n this.wsUrl = config.wsUrl;\n this.autoReconnectEnabled = config.autoReconnect ?? true;\n this.globalRoomId = config.globalRoomId ?? '__global_presence__';\n\n // Create base client\n this.client = new BaseClient(config.clientConfig);\n\n this.setupEventForwarding();\n\n if (config.autoConnect) {\n void this.connect();\n }\n }\n\n /**\n * Connect to the presence system\n */\n async connect(): Promise<void> {\n try {\n // Connect base client\n await this.client.connect(this.wsUrl);\n\n // Join global presence room\n await this.client.joinRoom(this.globalRoomId);\n\n await this.emit('connected', {});\n } catch (error) {\n await this.emit('error', { error: error as Error });\n throw error;\n }\n }\n\n /**\n * Disconnect from the presence system\n */\n async disconnect(): Promise<void> {\n // Disable auto-reconnect\n this.autoReconnectEnabled = false;\n\n // Clear any pending reconnect\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n\n try {\n // Leave global presence room\n await this.client.leaveRoom();\n\n // Disconnect\n await this.client.disconnect();\n\n await this.emit('disconnected', {});\n } catch (error) {\n await this.emit('error', { error: error as Error });\n }\n }\n\n /**\n * Get all online users\n *\n * Note: This requires a corresponding API endpoint on your server.\n */\n async getOnlineUsers(): Promise<UserPresence[]> {\n // This assumes you have a REST API endpoint for fetching online users\n // You can customize this based on your server implementation\n throw new Error(\n 'getOnlineUsers() requires a REST API endpoint. ' +\n 'Implement this method based on your server API.'\n );\n }\n\n /**\n * Set user status\n *\n * Note: This requires a corresponding API endpoint on your server.\n */\n async setStatus(status: 'online' | 'away', message?: string): Promise<void> {\n // This assumes you have a REST API endpoint for setting status\n // You can customize this based on your server implementation\n throw new Error(\n 'setStatus() requires a REST API endpoint. ' +\n 'Implement this method based on your server API.'\n );\n }\n\n /**\n * Set visibility\n *\n * Note: This requires a corresponding API endpoint on your server.\n */\n async setVisibility(visible: boolean): Promise<void> {\n // This assumes you have a REST API endpoint for setting visibility\n // You can customize this based on your server implementation\n throw new Error(\n 'setVisibility() requires a REST API endpoint. ' +\n 'Implement this method based on your server API.'\n );\n }\n\n /**\n * Get the underlying BaseClient\n */\n getClient(): BaseClient {\n return this.client;\n }\n\n /**\n * Check if connected\n */\n isConnected(): boolean {\n // BaseClient doesn't expose getState(), so we check internal state via a workaround\n // In practice, you can track connection state via events\n return (this.client as any).connectionState === 'connected';\n }\n\n /**\n * Set up event forwarding from BaseClient\n * @private\n */\n private setupEventForwarding(): void {\n // Forward presence events with simplified API\n this.client.on('presence:user_online', (data) => {\n if (data && typeof data === 'object') {\n const payload = data as { userId: string; devices?: unknown[] };\n void this.emit('userOnline', {\n userId: payload.userId,\n devices: payload.devices || []\n });\n }\n });\n\n this.client.on('presence:user_offline', (data) => {\n if (data && typeof data === 'object') {\n const payload = data as { userId: string };\n void this.emit('userOffline', { userId: payload.userId });\n }\n });\n\n this.client.on('presence:status_changed', (data) => {\n if (data && typeof data === 'object') {\n const payload = data as { userId: string; status: string; statusMessage?: string };\n void this.emit('statusChanged', {\n userId: payload.userId,\n status: payload.status,\n statusMessage: payload.statusMessage\n });\n }\n });\n\n // Handle disconnection\n this.client.on('disconnected', () => {\n void this.emit('disconnected', {});\n\n // Auto-reconnect if enabled\n if (this.autoReconnectEnabled) {\n this.reconnectTimeout = setTimeout(() => {\n void this.connect().catch((error) => {\n void this.emit('error', { error: error as Error });\n });\n }, 5000);\n }\n });\n\n // Forward errors\n this.client.on('error', (data) => {\n if (data && typeof data === 'object' && 'error' in data) {\n const payload = data as { error: Error };\n void this.emit('error', { error: payload.error });\n }\n });\n }\n}\n",
|
|
34
35
|
"/**\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 { Message } from '../types/index.js';\nimport type {\n ExperimentalFeatureConfig,\n ClientPredicate,\n BroadcastResult,\n BroadcastOptions,\n ExperimentalUsageEvent\n} from '../types/experimental.js';\nimport { ExperimentalFeatureError } from '../types/experimental.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 private readonly config: ExperimentalFeatureConfig;\n private readonly logger?: { warn: (message: string, ...args: unknown[]) => void };\n private readonly emitMetric?: (event: ExperimentalUsageEvent) => void;\n private readonly getClients: () => ConnectedClient[];\n private readonly sendToClient: (clientId: string, message: Record<string, unknown>) => Promise<void>;\n\n constructor(options: {\n config: ExperimentalFeatureConfig;\n logger?: { warn: (message: string, ...args: unknown[]) => void };\n emitMetric?: (event: ExperimentalUsageEvent) => void;\n getClients: () => ConnectedClient[];\n sendToClient: (clientId: string, message: Record<string, unknown>) => Promise<void>;\n }) {\n this.config = options.config;\n this.logger = options.logger;\n this.emitMetric = options.emitMetric;\n this.getClients = options.getClients;\n this.sendToClient = options.sendToClient;\n }\n\n /**\n * Broadcasts a message to all connected clients\n *\n * ⚠️ WARNING: This bypasses room isolation and sends to every connected client.\n *\n * @experimental\n * @param message - Message to broadcast\n * @param options - Broadcast options\n * @returns Broadcast result with success/failure counts\n *\n * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n *\n * @example\n * ```typescript\n * await server.experimental.broadcast({\n * type: 'system:announcement',\n * data: { message: 'Server maintenance in 5 minutes' }\n * });\n * ```\n */\n async broadcast(\n message: Omit<Message, 'id' | 'timestamp'>,\n options?: BroadcastOptions\n ): Promise<BroadcastResult> {\n this.ensureEnabled('broadcast', 'enableBroadcast');\n this.warnIfEnabled('broadcast()');\n\n const clients = this.getClients();\n\n const result = await this.broadcastToClients(clients, message, options);\n\n this.trackUsage('broadcast', message.type, clients.length, message.payload);\n\n return result;\n }\n\n /**\n * Broadcasts a message to all authenticated clients\n *\n * Skips unauthenticated connections. Useful for user-specific notifications.\n *\n * @experimental\n * @param message - Message to broadcast\n * @param options - Broadcast options\n * @returns Broadcast result with success/failure counts\n *\n * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n *\n * @example\n * ```typescript\n * await server.experimental.broadcastAuthenticated({\n * type: 'presence:user_online',\n * data: { userId: 'alice', status: 'online' }\n * });\n * ```\n */\n async broadcastAuthenticated(\n message: Omit<Message, 'id' | 'timestamp'>,\n options?: BroadcastOptions\n ): Promise<BroadcastResult> {\n this.ensureEnabled('broadcastAuthenticated', 'enableBroadcast');\n this.warnIfEnabled('broadcastAuthenticated()');\n\n const clients = this.getClients().filter(client => client.authenticated);\n\n const result = await this.broadcastToClients(clients, message, options);\n\n this.trackUsage('broadcastAuthenticated', message.type, clients.length, message.payload);\n\n return result;\n }\n\n /**\n * Broadcasts a message to clients matching a predicate function\n *\n * Allows custom filtering logic for targeted broadcasts.\n *\n * @experimental\n * @param predicate - Function to filter clients\n * @param message - Message to broadcast\n * @param options - Broadcast options\n * @returns Broadcast result with success/failure counts\n *\n * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n *\n * @example\n * ```typescript\n * // Broadcast only to admin users\n * await server.experimental.broadcastWhere(\n * (client) => getUserRole(client.userId) === 'admin',\n * {\n * type: 'admin:alert',\n * data: { message: 'Critical system event' }\n * }\n * );\n * ```\n */\n async broadcastWhere(\n predicate: ClientPredicate,\n message: Omit<Message, 'id' | 'timestamp'>,\n options?: BroadcastOptions\n ): Promise<BroadcastResult> {\n this.ensureEnabled('broadcastWhere', 'enableBroadcast');\n this.warnIfEnabled('broadcastWhere()');\n\n const clients = this.getClients().filter(predicate);\n\n const result = await this.broadcastToClients(clients, message, options);\n\n this.trackUsage('broadcastWhere', message.type, clients.length, message.payload);\n\n return result;\n }\n\n /**\n * Sends a message to specific users by their user IDs\n *\n * Useful for direct notifications and cross-room messaging.\n *\n * @experimental\n * @param userIds - Array of user IDs to send to\n * @param message - Message to send\n * @param options - Broadcast options\n * @returns Broadcast result with success/failure counts\n *\n * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n *\n * @example\n * ```typescript\n * await server.experimental.sendToUsers(\n * ['user123', 'user456'],\n * {\n * type: 'notification:mention',\n * data: { mentionedBy: 'alice', context: 'issue-42' }\n * }\n * );\n * ```\n */\n async sendToUsers(\n userIds: string[],\n message: Omit<Message, 'id' | 'timestamp'>,\n options?: BroadcastOptions\n ): Promise<BroadcastResult> {\n this.ensureEnabled('sendToUsers', 'enableBroadcast');\n this.warnIfEnabled('sendToUsers()');\n\n const userIdSet = new Set(userIds);\n const clients = this.getClients().filter(client => userIdSet.has(client.userId));\n\n const result = await this.broadcastToClients(clients, message, options);\n\n this.trackUsage('sendToUsers', message.type, clients.length, message.payload);\n\n return result;\n }\n\n // Private helper methods\n\n private ensureEnabled(\n feature: string,\n configKey: keyof ExperimentalFeatureConfig\n ): void {\n if (!this.config[configKey]) {\n throw new ExperimentalFeatureError(feature, configKey);\n }\n }\n\n private warnIfEnabled(method: string): void {\n if (this.config.warnOnExperimentalUse !== false) {\n this.logger?.warn(\n `⚠️ Experimental API: server.experimental.${method} is for development only. ` +\n `See docs/EXPERIMENTAL_BROADCAST.md for details.`\n );\n }\n }\n\n private trackUsage(\n method: 'broadcast' | 'broadcastAuthenticated' | 'broadcastWhere' | 'sendToUsers',\n messageType: string,\n recipientCount: number,\n payload?: unknown\n ): void {\n if (this.config.trackUsageMetrics && this.emitMetric) {\n const payloadSize = payload ? JSON.stringify(payload).length : undefined;\n\n this.emitMetric({\n method,\n messageType,\n recipientCount,\n timestamp: Date.now(),\n payloadSize\n });\n }\n }\n\n private async broadcastToClients(\n clients: ConnectedClient[],\n message: Omit<Message, 'id' | 'timestamp'>,\n options?: BroadcastOptions\n ): Promise<BroadcastResult> {\n const startTime = Date.now();\n const opts = {\n continueOnError: options?.continueOnError ?? true,\n sendTimeout: options?.sendTimeout ?? 5000,\n includeErrors: options?.includeErrors ?? false\n };\n\n const fullMessage: Message = {\n id: this.generateId(),\n timestamp: Date.now(),\n type: message.type,\n payload: message.payload\n };\n\n let sent = 0;\n let failed = 0;\n const errors: Array<{ clientId: string; error: Error }> = [];\n\n const sendPromises = clients.map(async (client) => {\n try {\n // Create timeout promise\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error('Send timeout')), opts.sendTimeout);\n });\n\n // Convert Message to Record<string, unknown> for sendToClient\n const messageRecord: Record<string, unknown> = {\n id: fullMessage.id,\n type: fullMessage.type,\n payload: fullMessage.payload,\n timestamp: fullMessage.timestamp\n };\n\n // Race between send and timeout\n await Promise.race([\n this.sendToClient(client.id, messageRecord),\n timeoutPromise\n ]);\n\n sent++;\n } catch (error) {\n failed++;\n if (opts.includeErrors) {\n errors.push({\n clientId: client.id,\n error: error as Error\n });\n }\n\n if (!opts.continueOnError) {\n throw error;\n }\n }\n });\n\n await Promise.all(sendPromises);\n\n return {\n sent,\n failed,\n errors,\n durationMs: Date.now() - startTime\n };\n }\n\n private generateId(): string {\n return `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n",
|
|
35
|
-
"import type {\n Message,\n Event,\n Room,\n RoomUser,\n RoomConfig,\n Lock,\n LockRequest,\n ExperimentalFeatureConfig,\n ExperimentalUsageEvent\n} from '../types/index.js';\nimport type { ITransportAdapter } from '../abstractions/TransportAdapter.js';\nimport type { IAuthAdapter } from '../abstractions/AuthAdapter.js';\nimport type { IStorageAdapter } from '../abstractions/StorageAdapter.js';\nimport type { RoomManager } from '../abstractions/RoomManager.js';\nimport type { LockManager } from '../abstractions/LockManager.js';\nimport type { PresenceManager } from '../abstractions/PresenceManager.js';\nimport { TypedEventEmitter } from '../abstractions/EventEmitter.js';\nimport { ExperimentalAPI } from './ExperimentalAPI.js';\nimport type { Server as HttpServer } from 'http';\nimport type { Server as HttpsServer } from 'https';\nimport type { WebSocketServer } from 'ws';\n\nexport interface ServerConfig {\n transport: ITransportAdapter;\n auth?: IAuthAdapter;\n storage?: IStorageAdapter;\n roomManager: RoomManager;\n lockManager: LockManager;\n presenceManager?: PresenceManager;\n defaultRoomConfig?: Partial<RoomConfig>;\n httpServer?: HttpServer | HttpsServer;\n webSocketPath?: string;\n webSocketServer?: WebSocketServer;\n experimental?: ExperimentalFeatureConfig;\n}\n\nexport interface ConnectedClient {\n id: string;\n userId: string;\n /**\n * Set of room IDs the client is currently in\n *\n * Multi-room support: A client can be in multiple rooms simultaneously.\n * This enables the two-tier architecture where clients can maintain\n * global presence while participating in multiple repository rooms.\n */\n roomIds: Set<string>;\n /**\n * Legacy single-room accessor for backward compatibility\n *\n * Returns the first room the client is in, or null if not in any rooms.\n *\n * @deprecated Use roomIds for multi-room support\n */\n roomId: string | null;\n authenticated: boolean;\n connectedAt: number;\n}\n\nexport interface ServerEvents {\n started: { port: number };\n stopped: {}; // eslint-disable-line @typescript-eslint/no-empty-object-type\n client_connected: { client: ConnectedClient };\n client_disconnected: { clientId: string; reason: string };\n client_authenticated: { clientId: string; userId: string };\n room_created: { room: Room };\n room_deleted: { roomId: string };\n client_joined_room: { clientId: string; roomId: string };\n client_left_room: { clientId: string; roomId: string };\n event_broadcast: { roomId: string; event: Event; fromClientId: string };\n lock_acquired: { lock: Lock; clientId: string };\n lock_released: { lockId: string; clientId: string };\n error: { error: Error; context?: string };\n experimental_usage: ExperimentalUsageEvent;\n // Presence events\n presence_changed: { userId: string; status: string; timestamp: number };\n presence_device_connected: { userId: string; deviceId: string; timestamp: number };\n presence_device_disconnected: { userId: string; deviceId: string; timestamp: number };\n presence_activity: { userId: string; deviceId: string; timestamp: number };\n [key: string]: unknown;\n}\n\nexport class BaseServer extends TypedEventEmitter<ServerEvents> {\n private transport: ITransportAdapter;\n private auth?: IAuthAdapter;\n private storage?: IStorageAdapter;\n private roomManager: RoomManager;\n private lockManager: LockManager;\n private presenceManager?: PresenceManager;\n private config: ServerConfig;\n\n private clients = new Map<string, ConnectedClient>();\n private clientMessageHandlers = new Map<string, (message: Message) => Promise<void>>();\n private running = false;\n private initialized = false;\n private mode: 'standalone' | 'integration';\n private heartbeatIntervalId?: NodeJS.Timeout;\n\n /**\n * Experimental APIs namespace\n *\n * ⚠️ WARNING: Experimental features are for development only.\n * APIs may change or be removed without major version bumps.\n *\n * @see docs/EXPERIMENTAL_BROADCAST.md\n */\n public readonly experimental: ExperimentalAPI;\n\n constructor(config: ServerConfig) {\n super();\n this.config = config;\n this.transport = config.transport;\n this.auth = config.auth;\n this.storage = config.storage;\n this.roomManager = config.roomManager;\n this.lockManager = config.lockManager;\n this.presenceManager = config.presenceManager;\n\n // Initialize experimental API namespace\n this.experimental = new ExperimentalAPI({\n config: config.experimental || {\n enableBroadcast: false,\n warnOnExperimentalUse: true,\n trackUsageMetrics: false\n },\n logger: console,\n emitMetric: (event: ExperimentalUsageEvent) => {\n void this.emit('experimental_usage', event);\n },\n getClients: () => Array.from(this.clients.values()),\n sendToClient: (clientId: string, message: Record<string, unknown>) => this.sendToClient(clientId, message)\n });\n\n // Determine mode based on configuration\n this.mode = (config.httpServer || config.webSocketServer) ? 'integration' : 'standalone';\n\n // Connect auth adapter to transport if both exist and transport supports it\n if (this.auth && this.transport) {\n const transportWithAuth = this.transport as ITransportAdapter & { setAuthAdapter?: (auth: IAuthAdapter) => void };\n if (typeof transportWithAuth.setAuthAdapter === 'function') {\n transportWithAuth.setAuthAdapter(this.auth);\n }\n }\n\n // Set up transport event handlers\n this.transport.onMessage(this.handleTransportMessage.bind(this));\n this.transport.onError(this.handleTransportError.bind(this));\n this.transport.onClose(this.handleTransportClose.bind(this));\n\n // Start heartbeat processor if presence is enabled\n if (this.presenceManager?.isEnabled()) {\n this.startHeartbeatProcessor();\n }\n }\n\n /**\n * Start periodic heartbeat processing for presence management\n */\n private startHeartbeatProcessor(): void {\n if (!this.presenceManager) {\n return;\n }\n\n const config = this.presenceManager.getConfig();\n const interval = config.heartbeatInterval;\n\n this.heartbeatIntervalId = setInterval(async () => {\n try {\n const changes = await this.presenceManager!.processHeartbeats();\n\n // Emit presence change events\n for (const change of changes) {\n await this.emit('presence_changed', {\n userId: change.userId,\n status: change.status,\n timestamp: change.timestamp\n });\n\n // Broadcast presence updates if enabled\n if (config.broadcastPresenceUpdates) {\n await this.experimental.broadcastAuthenticated({\n type: 'presence:status_changed',\n payload: {\n userId: change.userId,\n status: change.status,\n previousStatus: change.previousStatus,\n reason: change.reason\n }\n });\n }\n }\n } catch (error) {\n await this.emit('error', {\n error: error as Error,\n context: 'heartbeat_processor'\n });\n }\n }, interval);\n }\n\n /**\n * Stop heartbeat processor\n */\n private stopHeartbeatProcessor(): void {\n if (this.heartbeatIntervalId) {\n clearInterval(this.heartbeatIntervalId);\n this.heartbeatIntervalId = undefined;\n }\n }\n\n // Server Lifecycle\n async start(port?: number): Promise<void> {\n if (this.mode === 'integration') {\n throw new Error('Cannot use start() in integration mode. Use initialize() instead.');\n }\n\n if (!port) {\n throw new Error('Port is required for standalone mode');\n }\n\n if (this.running) {\n throw new Error('Server is already running');\n }\n\n try {\n await this.transport.connect(`ws://localhost:${port}`, { url: `ws://localhost:${port}` });\n this.running = true;\n this.initialized = true;\n await this.emit('started', { port });\n } catch (error) {\n await this.emit('error', { error: error as Error, context: 'server_start' });\n throw error;\n }\n }\n\n async initialize(): Promise<void> {\n if (this.mode === 'standalone') {\n throw new Error('Cannot use initialize() in standalone mode. Use start() instead.');\n }\n\n if (this.initialized) {\n throw new Error('Server is already initialized');\n }\n\n try {\n const transport = this.transport as ITransportAdapter & { \n attach?: (server: HttpServer | HttpsServer, path?: string) => Promise<void>; \n attachToWebSocketServer?: (wss: WebSocketServer) => Promise<void> \n };\n \n if (this.config.webSocketServer) {\n // Attach to existing WebSocket server\n if (typeof transport.attachToWebSocketServer === 'function') {\n await transport.attachToWebSocketServer(this.config.webSocketServer);\n } else {\n throw new Error('Transport adapter does not support attachToWebSocketServer');\n }\n } else if (this.config.httpServer) {\n // Attach to existing HTTP server\n if (typeof transport.attach === 'function') {\n await transport.attach(this.config.httpServer, this.config.webSocketPath || '/ws');\n } else {\n throw new Error('Transport adapter does not support attach');\n }\n } else {\n throw new Error('Either httpServer or webSocketServer must be provided in integration mode');\n }\n\n this.running = true;\n this.initialized = true;\n await this.emit('started', { port: 0 }); // Port 0 indicates integration mode\n } catch (error) {\n await this.emit('error', { error: error as Error, context: 'server_initialize' });\n throw error;\n }\n }\n\n async stop(): Promise<void> {\n if (!this.running) {\n return;\n }\n\n this.running = false;\n\n // Stop heartbeat processor\n this.stopHeartbeatProcessor();\n\n // Disconnect all clients\n for (const [clientId] of Array.from(this.clients)) {\n await this.disconnectClient(clientId, 'Server shutting down');\n }\n\n try {\n await this.transport.disconnect();\n } catch (error) {\n await this.emit('error', { error: error as Error, context: 'server_stop' });\n }\n\n this.clients.clear();\n this.clientMessageHandlers.clear();\n\n // Clear presence data\n if (this.presenceManager) {\n await this.presenceManager.clear();\n }\n\n await this.emit('stopped', {});\n }\n\n // Client Management\n private async handleTransportMessage(message: Message): Promise<void> {\n // Handle special transport messages\n if (message.type === 'connection') {\n await this.handleConnectionMessage(message);\n return;\n }\n \n if (message.type === 'client_authenticated') {\n await this.handleClientAuthenticatedMessage(message);\n return;\n }\n\n if (message.type === 'disconnect') {\n const payload = message.payload as { clientId: string; reason?: string };\n await this.disconnectClient(payload.clientId, payload.reason || 'Client disconnected');\n return;\n }\n\n // Transport messages contain clientId in the payload for routing\n const payload = message.payload as { clientId?: string; type?: string; [key: string]: unknown };\n const { clientId, type, ...clientMessage } = payload;\n\n const clientMsg: Message = {\n id: message.id,\n type: type || message.type, // Use inner type if present, otherwise outer type\n payload: clientMessage,\n timestamp: message.timestamp\n };\n\n if (!clientId) {\n await this.emit('error', {\n error: new Error('Message missing clientId'),\n context: 'transport_message'\n });\n return;\n }\n\n const handler = this.clientMessageHandlers.get(clientId);\n if (handler) {\n await handler(clientMsg);\n } else {\n await this.emit('error', {\n error: new Error(`No handler for client ${clientId}`),\n context: 'transport_message'\n });\n }\n }\n \n private async handleConnectionMessage(message: Message): Promise<void> {\n const payload = message.payload as {\n clientId: string;\n authenticated: boolean;\n userId?: string;\n metadata?: Record<string, unknown>;\n };\n\n // Add the client with initial auth state\n const roomIds = new Set<string>();\n const client: ConnectedClient = {\n id: payload.clientId,\n userId: payload.userId || '',\n roomIds,\n get roomId() {\n return roomIds.size > 0 ? (roomIds.values().next().value || null) : null;\n },\n authenticated: payload.authenticated,\n connectedAt: Date.now()\n };\n\n this.clients.set(payload.clientId, client);\n this.clientMessageHandlers.set(payload.clientId, this.createClientMessageHandler(payload.clientId));\n\n await this.emit('client_connected', { client });\n\n // Register with presence manager if authenticated\n if (payload.authenticated && this.presenceManager?.isEnabled() && payload.userId) {\n try {\n await this.presenceManager.connectDevice(payload.userId, payload.clientId, {\n connectedAt: Date.now(),\n lastActivity: Date.now(),\n metadata: payload.metadata\n });\n\n await this.emit('presence_device_connected', {\n userId: payload.userId,\n deviceId: payload.clientId,\n timestamp: Date.now()\n });\n\n // Broadcast presence update\n const presenceConfig = this.presenceManager.getConfig();\n if (presenceConfig.broadcastPresenceUpdates) {\n await this.experimental.broadcastAuthenticated({\n type: 'presence:user_online',\n payload: {\n userId: payload.userId,\n deviceId: payload.clientId,\n status: 'online'\n }\n });\n }\n } catch (error) {\n await this.emit('error', {\n error: error as Error,\n context: 'presence_connect_device'\n });\n }\n }\n\n if (payload.authenticated) {\n await this.emit('client_authenticated', {\n clientId: payload.clientId,\n userId: payload.userId || ''\n });\n }\n }\n \n private async handleClientAuthenticatedMessage(message: Message): Promise<void> {\n const payload = message.payload as {\n clientId: string;\n userId: string;\n metadata?: Record<string, unknown>;\n };\n \n const client = this.clients.get(payload.clientId);\n if (client) {\n client.authenticated = true;\n client.userId = payload.userId;\n \n await this.emit('client_authenticated', {\n clientId: payload.clientId,\n userId: payload.userId\n });\n }\n }\n\n private async handleTransportError(error: Error): Promise<void> {\n await this.emit('error', { error, context: 'transport' });\n }\n\n private async handleTransportClose(_code: number, _reason: string): Promise<void> {\n // Transport close means server is shutting down\n if (this.running) {\n await this.stop();\n }\n }\n\n private async addClient(clientId: string): Promise<void> {\n const roomIds = new Set<string>();\n const client: ConnectedClient = {\n id: clientId,\n userId: '',\n roomIds,\n get roomId() {\n return roomIds.size > 0 ? (roomIds.values().next().value || null) : null;\n },\n authenticated: false,\n connectedAt: Date.now()\n };\n\n this.clients.set(clientId, client);\n\n // Set up message handler for this client\n this.clientMessageHandlers.set(clientId, this.createClientMessageHandler(clientId));\n\n await this.emit('client_connected', { client });\n }\n\n private async disconnectClient(clientId: string, reason: string): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) {\n return;\n }\n\n // Unregister from presence manager\n if (this.presenceManager?.isEnabled() && client.userId) {\n try {\n const presence = await this.presenceManager.disconnectDevice(client.userId, clientId);\n\n await this.emit('presence_device_disconnected', {\n userId: client.userId,\n deviceId: clientId,\n timestamp: Date.now()\n });\n\n // Broadcast presence update if user went offline or into grace period\n const presenceConfig = this.presenceManager.getConfig();\n if (presenceConfig.broadcastPresenceUpdates && (!presence || presence.status === 'offline')) {\n await this.experimental.broadcastAuthenticated({\n type: 'presence:user_offline',\n payload: {\n userId: client.userId,\n deviceId: clientId,\n status: presence?.status || 'offline',\n gracePeriod: presenceConfig.gracePeriod\n }\n });\n }\n } catch (error) {\n await this.emit('error', {\n error: error as Error,\n context: 'presence_disconnect_device'\n });\n }\n }\n\n // Leave all rooms the client is in\n for (const roomId of client.roomIds) {\n await this.roomManager.leaveRoom(roomId, client.userId);\n await this.emit('client_left_room', { clientId, roomId });\n }\n\n // Release all locks held by this client\n await this.lockManager.releaseUserLocks(client.userId);\n\n // Clean up\n this.clients.delete(clientId);\n this.clientMessageHandlers.delete(clientId);\n\n await this.emit('client_disconnected', { clientId, reason });\n }\n\n private createClientMessageHandler(clientId: string): (message: Message) => Promise<void> {\n return async (message: Message) => {\n try {\n const client = this.clients.get(clientId);\n if (!client) {\n return;\n }\n\n switch (message.type) {\n case 'authenticate':\n await this.handleAuthenticate(clientId, message.payload as { token: string });\n break;\n case 'join_room':\n await this.handleJoinRoom(clientId, message.payload as { roomId: string; token?: string });\n break;\n case 'leave_room':\n await this.handleLeaveRoom(clientId, message.payload as { roomId?: string });\n break;\n case 'broadcast_event':\n await this.handleBroadcastEvent(clientId, message.payload as { event: Event; roomId: string });\n break;\n case 'request_lock':\n await this.handleLockRequest(clientId, message.payload as { request: LockRequest; roomId: string });\n break;\n case 'release_lock':\n await this.handleLockRelease(clientId, message.payload as { lockId: string });\n break;\n case 'ping':\n await this.sendToClient(clientId, { type: 'pong', timestamp: Date.now() });\n // Update presence activity on ping\n if (this.presenceManager?.isEnabled() && client.userId) {\n await this.updatePresenceActivity(client.userId, clientId, 'heartbeat');\n }\n break;\n default:\n await this.sendToClient(clientId, {\n type: 'error',\n error: `Unknown message type: ${message.type}`\n });\n }\n } catch (error) {\n await this.sendToClient(clientId, {\n type: 'error',\n error: (error as Error).message\n });\n await this.emit('error', { error: error as Error, context: `client_${clientId}` });\n }\n };\n }\n\n // Message Handlers\n private async handleAuthenticate(clientId: string, payload: { token: string }): Promise<void> {\n if (!this.auth) {\n await this.sendToClient(clientId, { type: 'auth_result', success: false, error: 'Authentication not configured' });\n return;\n }\n\n try {\n const tokenPayload = await this.auth.validateToken(payload.token);\n const client = this.clients.get(clientId);\n if (client) {\n client.userId = tokenPayload.userId;\n client.authenticated = true;\n await this.emit('client_authenticated', { clientId, userId: tokenPayload.userId });\n }\n\n await this.sendToClient(clientId, { type: 'auth_result', success: true });\n } catch (error) {\n await this.sendToClient(clientId, { type: 'auth_result', success: false, error: (error as Error).message });\n }\n }\n\n private async handleJoinRoom(clientId: string, payload: { roomId: string; token?: string }): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) {\n return;\n }\n\n // Authenticate if token provided\n if (payload.token && !client.authenticated) {\n await this.handleAuthenticate(clientId, { token: payload.token });\n }\n\n if (!client.authenticated) {\n await this.sendToClient(clientId, { type: 'error', error: 'Authentication required to join room' });\n return;\n }\n\n try {\n // Check if already in the room\n if (client.roomIds.has(payload.roomId)) {\n await this.sendToClient(clientId, { type: 'error', error: 'Already in this room' });\n return;\n }\n\n // Get or create room\n let roomState = await this.roomManager.getRoomState(payload.roomId);\n if (!roomState) {\n const roomConfig = { ...this.config.defaultRoomConfig, id: payload.roomId };\n const room = await this.roomManager.createRoom(payload.roomId, roomConfig);\n roomState = await this.roomManager.getRoomState(payload.roomId);\n await this.emit('room_created', { room });\n }\n\n if (!roomState) {\n throw new Error('Failed to create or get room state');\n }\n\n // Join room\n const user: RoomUser = {\n id: client.userId,\n username: client.userId, // TODO: Get from auth token\n status: 'online',\n joinedAt: Date.now(),\n lastActivity: Date.now(),\n permissions: roomState.room.permissions || ['read', 'write']\n };\n\n await this.roomManager.joinRoom(payload.roomId, user);\n client.roomIds.add(payload.roomId);\n\n await this.emit('client_joined_room', { clientId, roomId: payload.roomId });\n\n // Send room state to client\n await this.sendToClient(clientId, {\n type: 'room_joined',\n roomId: payload.roomId,\n state: roomState\n });\n\n // Send event history\n const history = await this.roomManager.getEventHistory(payload.roomId, 50);\n if (history.length > 0) {\n await this.sendToClient(clientId, {\n type: 'event_history',\n events: history\n });\n }\n\n } catch (error) {\n await this.sendToClient(clientId, { type: 'error', error: (error as Error).message });\n }\n }\n\n private async handleLeaveRoom(clientId: string, payload?: { roomId?: string }): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) {\n return;\n }\n\n // If roomId is specified, leave that specific room\n // Otherwise, leave all rooms (backward compatibility)\n const roomsToLeave = payload?.roomId\n ? [payload.roomId]\n : Array.from(client.roomIds);\n\n if (roomsToLeave.length === 0) {\n return;\n }\n\n for (const roomId of roomsToLeave) {\n if (!client.roomIds.has(roomId)) {\n continue;\n }\n\n await this.roomManager.leaveRoom(roomId, client.userId);\n client.roomIds.delete(roomId);\n\n await this.emit('client_left_room', { clientId, roomId });\n await this.sendToClient(clientId, { type: 'room_left', roomId });\n }\n }\n\n private async handleBroadcastEvent(clientId: string, payload: { event: Event; roomId: string }): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client || !client.roomIds.has(payload.roomId)) {\n await this.sendToClient(clientId, { type: 'error', error: 'Not in specified room' });\n return;\n }\n\n // Add metadata to event\n const enrichedEvent = {\n ...payload.event,\n metadata: {\n ...payload.event.metadata,\n userId: client.userId,\n timestamp: Date.now(),\n roomId: payload.roomId\n }\n };\n\n // Add to history\n await this.roomManager.addEventToHistory(payload.roomId, enrichedEvent);\n\n // Broadcast to room\n await this.roomManager.broadcastToRoom(payload.roomId, enrichedEvent, client.userId);\n\n await this.emit('event_broadcast', {\n roomId: payload.roomId,\n event: enrichedEvent,\n fromClientId: clientId\n });\n }\n\n private async handleLockRequest(clientId: string, payload: { request: LockRequest; roomId: string }): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client || !client.roomIds.has(payload.roomId)) {\n await this.sendToClient(clientId, { type: 'error', error: 'Not in specified room' });\n return;\n }\n\n try {\n const lock = await this.lockManager.acquireLock(client.userId, client.userId, payload.request);\n await this.emit('lock_acquired', { lock, clientId });\n\n await this.sendToClient(clientId, { type: 'lock_acquired', lock });\n\n // Broadcast lock status to room\n await this.roomManager.broadcastToRoom(payload.roomId, {\n id: this.generateId(),\n type: 'lock_status',\n timestamp: Date.now(),\n userId: client.userId,\n roomId: payload.roomId,\n data: { lock, action: 'acquired' },\n metadata: { userId: client.userId, timestamp: Date.now(), roomId: payload.roomId }\n });\n } catch (error) {\n await this.sendToClient(clientId, { type: 'lock_denied', request: payload.request, reason: (error as Error).message });\n }\n }\n\n private async handleLockRelease(clientId: string, payload: { lockId: string }): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) {\n return;\n }\n\n try {\n await this.lockManager.releaseLock(payload.lockId);\n await this.emit('lock_released', { lockId: payload.lockId, clientId });\n\n await this.sendToClient(clientId, { type: 'lock_released', lockId: payload.lockId });\n\n // Broadcast lock status to all rooms the client is in\n for (const roomId of client.roomIds) {\n await this.roomManager.broadcastToRoom(roomId, {\n id: this.generateId(),\n type: 'lock_status',\n timestamp: Date.now(),\n userId: client.userId,\n roomId,\n data: { lockId: payload.lockId, action: 'released' },\n metadata: { userId: client.userId, timestamp: Date.now(), roomId }\n });\n }\n } catch (error) {\n await this.sendToClient(clientId, { type: 'error', error: (error as Error).message });\n }\n }\n\n // Utility Methods\n private async sendToClient(clientId: string, message: Record<string, unknown>): Promise<void> {\n const transportMessage: Message = {\n id: this.generateId(),\n type: 'server_message',\n payload: { clientId, ...message },\n timestamp: Date.now()\n };\n\n await this.transport.send(transportMessage);\n }\n\n private generateId(): string {\n return Math.random().toString(36).substring(2) + Date.now().toString(36);\n }\n\n // Public API for external management\n async createRoom(roomId: string, config: RoomConfig): Promise<Room> {\n const room = await this.roomManager.createRoom(roomId, config);\n await this.emit('room_created', { room });\n return room;\n }\n\n async deleteRoom(roomId: string): Promise<void> {\n await this.roomManager.deleteRoom(roomId);\n await this.emit('room_deleted', { roomId });\n }\n\n getConnectedClients(): ConnectedClient[] {\n return Array.from(this.clients.values());\n }\n\n getClient(clientId: string): ConnectedClient | null {\n return this.clients.get(clientId) || null;\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n getMode(): 'standalone' | 'integration' {\n return this.mode;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * Update presence activity for a user's device\n *\n * @param userId - User identifier\n * @param deviceId - Device/client identifier\n * @param activityType - Type of activity\n */\n private async updatePresenceActivity(\n userId: string,\n deviceId: string,\n activityType: 'heartbeat' | 'message' | 'user_action'\n ): Promise<void> {\n if (!this.presenceManager?.isEnabled()) {\n return;\n }\n\n try {\n await this.presenceManager.updateActivity({\n userId,\n deviceId,\n timestamp: Date.now(),\n activityType\n });\n\n await this.emit('presence_activity', {\n userId,\n deviceId,\n timestamp: Date.now()\n });\n } catch (error) {\n // Don't throw, just log the error\n await this.emit('error', {\n error: error as Error,\n context: 'presence_update_activity'\n });\n }\n }\n\n /**\n * Get presence manager (if configured)\n */\n getPresenceManager(): PresenceManager | undefined {\n return this.presenceManager;\n }\n}",
|
|
36
|
-
"import type { ITransportAdapter } from '../abstractions/TransportAdapter.js';\nimport type { IAuthAdapter } from '../abstractions/AuthAdapter.js';\nimport type { IStorageAdapter } from '../abstractions/StorageAdapter.js';\nimport type { RoomManager } from '../abstractions/RoomManager.js';\nimport type { LockManager } from '../abstractions/LockManager.js';\nimport type { PresenceManager } from '../abstractions/PresenceManager.js';\nimport type { RoomConfig, ExperimentalFeatureConfig } from '../types/index.js';\nimport { BaseServer, type ServerConfig } from './BaseServer.js';\nimport type { Server as HttpServer } from 'http';\nimport type { Server as HttpsServer } from 'https';\nimport type { WebSocketServer } from 'ws';\n\nexport class ServerBuilder {\n private transport?: ITransportAdapter;\n private auth?: IAuthAdapter;\n private storage?: IStorageAdapter;\n private roomManager?: RoomManager;\n private lockManager?: LockManager;\n private presenceManager?: PresenceManager;\n private defaultRoomConfig?: Partial<RoomConfig>;\n private httpServer?: HttpServer | HttpsServer;\n private webSocketPath?: string;\n private webSocketServer?: WebSocketServer;\n private experimentalFeatures?: ExperimentalFeatureConfig;\n\n withTransport(transport: ITransportAdapter): this {\n this.transport = transport;\n return this;\n }\n\n withAuth(auth: IAuthAdapter): this {\n this.auth = auth;\n return this;\n }\n\n withStorage(storage: IStorageAdapter): this {\n this.storage = storage;\n return this;\n }\n\n withRoomManager(roomManager: RoomManager): this {\n this.roomManager = roomManager;\n return this;\n }\n\n withLockManager(lockManager: LockManager): this {\n this.lockManager = lockManager;\n return this;\n }\n\n /**\n * Configure presence management for global user tracking\n *\n * Enables two-tier connection architecture where users maintain\n * global presence while participating in multiple rooms.\n *\n * @param presenceManager - PresenceManager implementation\n */\n withPresenceManager(presenceManager: PresenceManager): this {\n this.presenceManager = presenceManager;\n return this;\n }\n\n withDefaultRoomConfig(config: Partial<RoomConfig>): this {\n this.defaultRoomConfig = config;\n return this;\n }\n\n withHttpServer(server: HttpServer | HttpsServer): this {\n this.httpServer = server;\n return this;\n }\n\n withWebSocketPath(path: string): this {\n this.webSocketPath = path;\n return this;\n }\n\n withWebSocketServer(wss: WebSocketServer): this {\n this.webSocketServer = wss;\n return this;\n }\n\n /**\n * Enable experimental features\n *\n * ⚠️ WARNING: Experimental features are for development only.\n * APIs may change or be removed without major version bumps.\n *\n * @see docs/EXPERIMENTAL_BROADCAST.md\n */\n withExperimentalFeatures(features: ExperimentalFeatureConfig): this {\n this.experimentalFeatures = features;\n return this;\n }\n\n build(): BaseServer {\n if (!this.transport) {\n throw new Error('Transport adapter is required');\n }\n\n if (!this.roomManager) {\n throw new Error('Room manager is required');\n }\n\n if (!this.lockManager) {\n throw new Error('Lock manager is required');\n }\n\n const config: ServerConfig = {\n transport: this.transport,\n auth: this.auth,\n storage: this.storage,\n roomManager: this.roomManager,\n lockManager: this.lockManager,\n presenceManager: this.presenceManager,\n defaultRoomConfig: this.defaultRoomConfig || {\n maxUsers: 50,\n maxHistory: 100,\n permissions: ['read' as const, 'write' as const]\n },\n httpServer: this.httpServer,\n webSocketPath: this.webSocketPath,\n webSocketServer: this.webSocketServer,\n experimental: this.experimentalFeatures || {\n enableBroadcast: false,\n warnOnExperimentalUse: true,\n trackUsageMetrics: false\n }\n };\n\n
|
|
36
|
+
"import type {\n Message,\n Event,\n Room,\n RoomUser,\n RoomConfig,\n Lock,\n LockRequest,\n ExperimentalFeatureConfig,\n ExperimentalUsageEvent\n} from '../types/index.js';\nimport type { ITransportAdapter } from '../abstractions/TransportAdapter.js';\nimport type { IAuthAdapter } from '../abstractions/AuthAdapter.js';\nimport type { IStorageAdapter } from '../abstractions/StorageAdapter.js';\nimport type { RoomManager } from '../abstractions/RoomManager.js';\nimport type { LockManager } from '../abstractions/LockManager.js';\nimport type { PresenceManager } from '../abstractions/PresenceManager.js';\nimport { TypedEventEmitter } from '../abstractions/EventEmitter.js';\nimport { ExperimentalAPI } from './ExperimentalAPI.js';\nimport type { Server as HttpServer } from 'http';\nimport type { Server as HttpsServer } from 'https';\nimport type { WebSocketServer } from 'ws';\n\nexport interface ServerConfig {\n transport: ITransportAdapter;\n auth?: IAuthAdapter;\n storage?: IStorageAdapter;\n roomManager: RoomManager;\n lockManager: LockManager;\n presenceManager?: PresenceManager;\n defaultRoomConfig?: Partial<RoomConfig>;\n httpServer?: HttpServer | HttpsServer;\n webSocketPath?: string;\n webSocketServer?: WebSocketServer;\n experimental?: ExperimentalFeatureConfig;\n}\n\nexport interface ConnectedClient {\n id: string;\n userId: string;\n /**\n * Set of room IDs the client is currently in\n *\n * Multi-room support: A client can be in multiple rooms simultaneously.\n * This enables the two-tier architecture where clients can maintain\n * global presence while participating in multiple repository rooms.\n */\n roomIds: Set<string>;\n /**\n * Legacy single-room accessor for backward compatibility\n *\n * Returns the first room the client is in, or null if not in any rooms.\n *\n * @deprecated Use roomIds for multi-room support\n */\n roomId: string | null;\n authenticated: boolean;\n connectedAt: number;\n}\n\nexport interface ServerEvents {\n started: { port: number };\n stopped: {}; // eslint-disable-line @typescript-eslint/no-empty-object-type\n client_connected: { client: ConnectedClient };\n client_disconnected: { clientId: string; reason: string };\n client_authenticated: { clientId: string; userId: string };\n room_created: { room: Room };\n room_deleted: { roomId: string };\n client_joined_room: { clientId: string; roomId: string };\n client_left_room: { clientId: string; roomId: string };\n event_broadcast: { roomId: string; event: Event; fromClientId: string };\n lock_acquired: { lock: Lock; clientId: string };\n lock_released: { lockId: string; clientId: string };\n error: { error: Error; context?: string };\n experimental_usage: ExperimentalUsageEvent;\n // Presence events\n presence_changed: { userId: string; status: string; timestamp: number };\n presence_device_connected: { userId: string; deviceId: string; timestamp: number };\n presence_device_disconnected: { userId: string; deviceId: string; timestamp: number };\n presence_activity: { userId: string; deviceId: string; timestamp: number };\n [key: string]: unknown;\n}\n\nexport class BaseServer extends TypedEventEmitter<ServerEvents> {\n private transport: ITransportAdapter;\n private auth?: IAuthAdapter;\n private storage?: IStorageAdapter;\n private roomManager: RoomManager;\n private lockManager: LockManager;\n private presenceManager?: PresenceManager;\n private config: ServerConfig;\n\n private clients = new Map<string, ConnectedClient>();\n private clientMessageHandlers = new Map<string, (message: Message) => Promise<void>>();\n private clientUserMap = new Map<string, string>(); // clientId -> userId\n private userClientMap = new Map<string, Set<string>>(); // userId -> Set<clientId>\n private running = false;\n private initialized = false;\n private mode: 'standalone' | 'integration';\n private heartbeatIntervalId?: NodeJS.Timeout;\n\n /**\n * Experimental APIs namespace\n *\n * ⚠️ WARNING: Experimental features are for development only.\n * APIs may change or be removed without major version bumps.\n *\n * @see docs/EXPERIMENTAL_BROADCAST.md\n */\n public readonly experimental: ExperimentalAPI;\n\n constructor(config: ServerConfig) {\n super();\n this.config = config;\n this.transport = config.transport;\n this.auth = config.auth;\n this.storage = config.storage;\n this.roomManager = config.roomManager;\n this.lockManager = config.lockManager;\n this.presenceManager = config.presenceManager;\n\n // Initialize experimental API namespace\n this.experimental = new ExperimentalAPI({\n config: config.experimental || {\n enableBroadcast: false,\n warnOnExperimentalUse: true,\n trackUsageMetrics: false\n },\n logger: console,\n emitMetric: (event: ExperimentalUsageEvent) => {\n void this.emit('experimental_usage', event);\n },\n getClients: () => Array.from(this.clients.values()),\n sendToClient: (clientId: string, message: Record<string, unknown>) => this.sendToClient(clientId, message)\n });\n\n // Determine mode based on configuration\n this.mode = (config.httpServer || config.webSocketServer) ? 'integration' : 'standalone';\n\n // Connect auth adapter to transport if both exist and transport supports it\n if (this.auth && this.transport) {\n const transportWithAuth = this.transport as ITransportAdapter & { setAuthAdapter?: (auth: IAuthAdapter) => void };\n if (typeof transportWithAuth.setAuthAdapter === 'function') {\n transportWithAuth.setAuthAdapter(this.auth);\n }\n }\n\n // Set up transport event handlers\n this.transport.onMessage(this.handleTransportMessage.bind(this));\n this.transport.onError(this.handleTransportError.bind(this));\n this.transport.onClose(this.handleTransportClose.bind(this));\n\n // Start heartbeat processor if presence is enabled\n if (this.presenceManager?.isEnabled()) {\n this.startHeartbeatProcessor();\n }\n }\n\n /**\n * Start periodic heartbeat processing for presence management\n */\n private startHeartbeatProcessor(): void {\n if (!this.presenceManager) {\n return;\n }\n\n const config = this.presenceManager.getConfig();\n const interval = config.heartbeatInterval;\n\n this.heartbeatIntervalId = setInterval(async () => {\n try {\n const changes = await this.presenceManager!.processHeartbeats();\n\n // Emit presence change events\n for (const change of changes) {\n await this.emit('presence_changed', {\n userId: change.userId,\n status: change.status,\n timestamp: change.timestamp\n });\n\n // Broadcast presence updates if enabled\n if (config.broadcastPresenceUpdates) {\n await this.experimental.broadcastAuthenticated({\n type: 'presence:status_changed',\n payload: {\n userId: change.userId,\n status: change.status,\n previousStatus: change.previousStatus,\n reason: change.reason\n }\n });\n }\n }\n } catch (error) {\n await this.emit('error', {\n error: error as Error,\n context: 'heartbeat_processor'\n });\n }\n }, interval);\n }\n\n /**\n * Stop heartbeat processor\n */\n private stopHeartbeatProcessor(): void {\n if (this.heartbeatIntervalId) {\n clearInterval(this.heartbeatIntervalId);\n this.heartbeatIntervalId = undefined;\n }\n }\n\n // Server Lifecycle\n async start(port?: number): Promise<void> {\n if (this.mode === 'integration') {\n throw new Error('Cannot use start() in integration mode. Use initialize() instead.');\n }\n\n if (!port) {\n throw new Error('Port is required for standalone mode');\n }\n\n if (this.running) {\n throw new Error('Server is already running');\n }\n\n try {\n await this.transport.connect(`ws://localhost:${port}`, { url: `ws://localhost:${port}` });\n this.running = true;\n this.initialized = true;\n await this.emit('started', { port });\n } catch (error) {\n await this.emit('error', { error: error as Error, context: 'server_start' });\n throw error;\n }\n }\n\n async initialize(): Promise<void> {\n if (this.mode === 'standalone') {\n throw new Error('Cannot use initialize() in standalone mode. Use start() instead.');\n }\n\n if (this.initialized) {\n throw new Error('Server is already initialized');\n }\n\n try {\n const transport = this.transport as ITransportAdapter & { \n attach?: (server: HttpServer | HttpsServer, path?: string) => Promise<void>; \n attachToWebSocketServer?: (wss: WebSocketServer) => Promise<void> \n };\n \n if (this.config.webSocketServer) {\n // Attach to existing WebSocket server\n if (typeof transport.attachToWebSocketServer === 'function') {\n await transport.attachToWebSocketServer(this.config.webSocketServer);\n } else {\n throw new Error('Transport adapter does not support attachToWebSocketServer');\n }\n } else if (this.config.httpServer) {\n // Attach to existing HTTP server\n if (typeof transport.attach === 'function') {\n await transport.attach(this.config.httpServer, this.config.webSocketPath || '/ws');\n } else {\n throw new Error('Transport adapter does not support attach');\n }\n } else {\n throw new Error('Either httpServer or webSocketServer must be provided in integration mode');\n }\n\n this.running = true;\n this.initialized = true;\n await this.emit('started', { port: 0 }); // Port 0 indicates integration mode\n } catch (error) {\n await this.emit('error', { error: error as Error, context: 'server_initialize' });\n throw error;\n }\n }\n\n async stop(): Promise<void> {\n if (!this.running) {\n return;\n }\n\n this.running = false;\n\n // Stop heartbeat processor\n this.stopHeartbeatProcessor();\n\n // Disconnect all clients\n for (const [clientId] of Array.from(this.clients)) {\n await this.disconnectClient(clientId, 'Server shutting down');\n }\n\n try {\n await this.transport.disconnect();\n } catch (error) {\n await this.emit('error', { error: error as Error, context: 'server_stop' });\n }\n\n this.clients.clear();\n this.clientMessageHandlers.clear();\n this.clientUserMap.clear();\n this.userClientMap.clear();\n\n // Clear presence data\n if (this.presenceManager) {\n await this.presenceManager.clear();\n }\n\n await this.emit('stopped', {});\n }\n\n // Client Management\n private async handleTransportMessage(message: Message): Promise<void> {\n // Handle special transport messages\n if (message.type === 'connection') {\n await this.handleConnectionMessage(message);\n return;\n }\n \n if (message.type === 'client_authenticated') {\n await this.handleClientAuthenticatedMessage(message);\n return;\n }\n\n if (message.type === 'disconnect') {\n const payload = message.payload as { clientId: string; reason?: string };\n await this.disconnectClient(payload.clientId, payload.reason || 'Client disconnected');\n return;\n }\n\n // Transport messages contain clientId in the payload for routing\n const payload = message.payload as { clientId?: string; type?: string; [key: string]: unknown };\n const { clientId, type, ...clientMessage } = payload;\n\n const clientMsg: Message = {\n id: message.id,\n type: type || message.type, // Use inner type if present, otherwise outer type\n payload: clientMessage,\n timestamp: message.timestamp\n };\n\n if (!clientId) {\n await this.emit('error', {\n error: new Error('Message missing clientId'),\n context: 'transport_message'\n });\n return;\n }\n\n const handler = this.clientMessageHandlers.get(clientId);\n if (handler) {\n await handler(clientMsg);\n } else {\n await this.emit('error', {\n error: new Error(`No handler for client ${clientId}`),\n context: 'transport_message'\n });\n }\n }\n \n private async handleConnectionMessage(message: Message): Promise<void> {\n const payload = message.payload as {\n clientId: string;\n authenticated: boolean;\n userId?: string;\n metadata?: Record<string, unknown>;\n };\n\n // Add the client with initial auth state\n const roomIds = new Set<string>();\n const client: ConnectedClient = {\n id: payload.clientId,\n userId: payload.userId || '',\n roomIds,\n get roomId() {\n return roomIds.size > 0 ? (roomIds.values().next().value || null) : null;\n },\n authenticated: payload.authenticated,\n connectedAt: Date.now()\n };\n\n this.clients.set(payload.clientId, client);\n this.clientMessageHandlers.set(payload.clientId, this.createClientMessageHandler(payload.clientId));\n\n await this.emit('client_connected', { client });\n\n // Register with presence manager if authenticated\n if (payload.authenticated && this.presenceManager?.isEnabled() && payload.userId) {\n try {\n await this.presenceManager.connectDevice(payload.userId, payload.clientId, {\n connectedAt: Date.now(),\n lastActivity: Date.now(),\n metadata: payload.metadata\n });\n\n await this.emit('presence_device_connected', {\n userId: payload.userId,\n deviceId: payload.clientId,\n timestamp: Date.now()\n });\n\n // Broadcast presence update\n const presenceConfig = this.presenceManager.getConfig();\n if (presenceConfig.broadcastPresenceUpdates) {\n await this.experimental.broadcastAuthenticated({\n type: 'presence:user_online',\n payload: {\n userId: payload.userId,\n deviceId: payload.clientId,\n status: 'online'\n }\n });\n }\n } catch (error) {\n await this.emit('error', {\n error: error as Error,\n context: 'presence_connect_device'\n });\n }\n }\n\n if (payload.authenticated) {\n await this.emit('client_authenticated', {\n clientId: payload.clientId,\n userId: payload.userId || ''\n });\n }\n }\n \n private async handleClientAuthenticatedMessage(message: Message): Promise<void> {\n const payload = message.payload as {\n clientId: string;\n userId: string;\n metadata?: Record<string, unknown>;\n };\n\n const client = this.clients.get(payload.clientId);\n if (client) {\n client.authenticated = true;\n client.userId = payload.userId;\n\n // Auto-update client mappings\n this.clientUserMap.set(payload.clientId, payload.userId);\n if (!this.userClientMap.has(payload.userId)) {\n this.userClientMap.set(payload.userId, new Set());\n }\n this.userClientMap.get(payload.userId)!.add(payload.clientId);\n\n await this.emit('client_authenticated', {\n clientId: payload.clientId,\n userId: payload.userId\n });\n }\n }\n\n private async handleTransportError(error: Error): Promise<void> {\n await this.emit('error', { error, context: 'transport' });\n }\n\n private async handleTransportClose(_code: number, _reason: string): Promise<void> {\n // Transport close means server is shutting down\n if (this.running) {\n await this.stop();\n }\n }\n\n private async addClient(clientId: string): Promise<void> {\n const roomIds = new Set<string>();\n const client: ConnectedClient = {\n id: clientId,\n userId: '',\n roomIds,\n get roomId() {\n return roomIds.size > 0 ? (roomIds.values().next().value || null) : null;\n },\n authenticated: false,\n connectedAt: Date.now()\n };\n\n this.clients.set(clientId, client);\n\n // Set up message handler for this client\n this.clientMessageHandlers.set(clientId, this.createClientMessageHandler(clientId));\n\n await this.emit('client_connected', { client });\n }\n\n private async disconnectClient(clientId: string, reason: string): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) {\n return;\n }\n\n // Auto-clean client mappings\n if (client.userId) {\n this.clientUserMap.delete(clientId);\n const clientSet = this.userClientMap.get(client.userId);\n if (clientSet) {\n clientSet.delete(clientId);\n if (clientSet.size === 0) {\n this.userClientMap.delete(client.userId);\n }\n }\n }\n\n // Unregister from presence manager\n if (this.presenceManager?.isEnabled() && client.userId) {\n try {\n const presence = await this.presenceManager.disconnectDevice(client.userId, clientId);\n\n await this.emit('presence_device_disconnected', {\n userId: client.userId,\n deviceId: clientId,\n timestamp: Date.now()\n });\n\n // Broadcast presence update if user went offline or into grace period\n const presenceConfig = this.presenceManager.getConfig();\n if (presenceConfig.broadcastPresenceUpdates && (!presence || presence.status === 'offline')) {\n await this.experimental.broadcastAuthenticated({\n type: 'presence:user_offline',\n payload: {\n userId: client.userId,\n deviceId: clientId,\n status: presence?.status || 'offline',\n gracePeriod: presenceConfig.gracePeriod\n }\n });\n }\n } catch (error) {\n await this.emit('error', {\n error: error as Error,\n context: 'presence_disconnect_device'\n });\n }\n }\n\n // Leave all rooms the client is in\n for (const roomId of client.roomIds) {\n await this.roomManager.leaveRoom(roomId, client.userId);\n await this.emit('client_left_room', { clientId, roomId });\n }\n\n // Release all locks held by this client\n await this.lockManager.releaseUserLocks(client.userId);\n\n // Clean up\n this.clients.delete(clientId);\n this.clientMessageHandlers.delete(clientId);\n\n await this.emit('client_disconnected', { clientId, reason });\n }\n\n private createClientMessageHandler(clientId: string): (message: Message) => Promise<void> {\n return async (message: Message) => {\n try {\n const client = this.clients.get(clientId);\n if (!client) {\n return;\n }\n\n // Auto-update presence activity on ANY message\n if (this.presenceManager?.isEnabled() && client.userId && client.authenticated) {\n await this.updatePresenceActivity(client.userId, clientId, 'message');\n }\n\n switch (message.type) {\n case 'authenticate':\n await this.handleAuthenticate(clientId, message.payload as { token: string });\n break;\n case 'join_room':\n await this.handleJoinRoom(clientId, message.payload as { roomId: string; token?: string });\n break;\n case 'leave_room':\n await this.handleLeaveRoom(clientId, message.payload as { roomId?: string });\n break;\n case 'broadcast_event':\n await this.handleBroadcastEvent(clientId, message.payload as { event: Event; roomId: string });\n break;\n case 'request_lock':\n await this.handleLockRequest(clientId, message.payload as { request: LockRequest; roomId: string });\n break;\n case 'release_lock':\n await this.handleLockRelease(clientId, message.payload as { lockId: string });\n break;\n case 'ping':\n await this.sendToClient(clientId, { type: 'pong', timestamp: Date.now() });\n // Presence activity already updated automatically above\n break;\n default:\n await this.sendToClient(clientId, {\n type: 'error',\n error: `Unknown message type: ${message.type}`\n });\n }\n } catch (error) {\n await this.sendToClient(clientId, {\n type: 'error',\n error: (error as Error).message\n });\n await this.emit('error', { error: error as Error, context: `client_${clientId}` });\n }\n };\n }\n\n // Message Handlers\n private async handleAuthenticate(clientId: string, payload: { token: string }): Promise<void> {\n if (!this.auth) {\n await this.sendToClient(clientId, { type: 'auth_result', success: false, error: 'Authentication not configured' });\n return;\n }\n\n try {\n const tokenPayload = await this.auth.validateToken(payload.token);\n const client = this.clients.get(clientId);\n if (client) {\n client.userId = tokenPayload.userId;\n client.authenticated = true;\n await this.emit('client_authenticated', { clientId, userId: tokenPayload.userId });\n }\n\n await this.sendToClient(clientId, { type: 'auth_result', success: true });\n } catch (error) {\n await this.sendToClient(clientId, { type: 'auth_result', success: false, error: (error as Error).message });\n }\n }\n\n private async handleJoinRoom(clientId: string, payload: { roomId: string; token?: string }): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) {\n return;\n }\n\n // Authenticate if token provided\n if (payload.token && !client.authenticated) {\n await this.handleAuthenticate(clientId, { token: payload.token });\n }\n\n if (!client.authenticated) {\n await this.sendToClient(clientId, { type: 'error', error: 'Authentication required to join room' });\n return;\n }\n\n try {\n // Check if already in the room\n if (client.roomIds.has(payload.roomId)) {\n await this.sendToClient(clientId, { type: 'error', error: 'Already in this room' });\n return;\n }\n\n // Get or create room\n let roomState = await this.roomManager.getRoomState(payload.roomId);\n if (!roomState) {\n const roomConfig = { ...this.config.defaultRoomConfig, id: payload.roomId };\n const room = await this.roomManager.createRoom(payload.roomId, roomConfig);\n roomState = await this.roomManager.getRoomState(payload.roomId);\n await this.emit('room_created', { room });\n }\n\n if (!roomState) {\n throw new Error('Failed to create or get room state');\n }\n\n // Join room\n const user: RoomUser = {\n id: client.userId,\n username: client.userId, // TODO: Get from auth token\n status: 'online',\n joinedAt: Date.now(),\n lastActivity: Date.now(),\n permissions: roomState.room.permissions || ['read', 'write']\n };\n\n await this.roomManager.joinRoom(payload.roomId, user);\n client.roomIds.add(payload.roomId);\n\n await this.emit('client_joined_room', { clientId, roomId: payload.roomId });\n\n // Send room state to client\n await this.sendToClient(clientId, {\n type: 'room_joined',\n roomId: payload.roomId,\n state: roomState\n });\n\n // Send event history\n const history = await this.roomManager.getEventHistory(payload.roomId, 50);\n if (history.length > 0) {\n await this.sendToClient(clientId, {\n type: 'event_history',\n events: history\n });\n }\n\n } catch (error) {\n await this.sendToClient(clientId, { type: 'error', error: (error as Error).message });\n }\n }\n\n private async handleLeaveRoom(clientId: string, payload?: { roomId?: string }): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) {\n return;\n }\n\n // If roomId is specified, leave that specific room\n // Otherwise, leave all rooms (backward compatibility)\n const roomsToLeave = payload?.roomId\n ? [payload.roomId]\n : Array.from(client.roomIds);\n\n if (roomsToLeave.length === 0) {\n return;\n }\n\n for (const roomId of roomsToLeave) {\n if (!client.roomIds.has(roomId)) {\n continue;\n }\n\n await this.roomManager.leaveRoom(roomId, client.userId);\n client.roomIds.delete(roomId);\n\n await this.emit('client_left_room', { clientId, roomId });\n await this.sendToClient(clientId, { type: 'room_left', roomId });\n }\n }\n\n private async handleBroadcastEvent(clientId: string, payload: { event: Event; roomId: string }): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client || !client.roomIds.has(payload.roomId)) {\n await this.sendToClient(clientId, { type: 'error', error: 'Not in specified room' });\n return;\n }\n\n // Add metadata to event\n const enrichedEvent = {\n ...payload.event,\n metadata: {\n ...payload.event.metadata,\n userId: client.userId,\n timestamp: Date.now(),\n roomId: payload.roomId\n }\n };\n\n // Add to history\n await this.roomManager.addEventToHistory(payload.roomId, enrichedEvent);\n\n // Broadcast to room\n await this.roomManager.broadcastToRoom(payload.roomId, enrichedEvent, client.userId);\n\n await this.emit('event_broadcast', {\n roomId: payload.roomId,\n event: enrichedEvent,\n fromClientId: clientId\n });\n }\n\n private async handleLockRequest(clientId: string, payload: { request: LockRequest; roomId: string }): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client || !client.roomIds.has(payload.roomId)) {\n await this.sendToClient(clientId, { type: 'error', error: 'Not in specified room' });\n return;\n }\n\n try {\n const lock = await this.lockManager.acquireLock(client.userId, client.userId, payload.request);\n await this.emit('lock_acquired', { lock, clientId });\n\n await this.sendToClient(clientId, { type: 'lock_acquired', lock });\n\n // Broadcast lock status to room\n await this.roomManager.broadcastToRoom(payload.roomId, {\n id: this.generateId(),\n type: 'lock_status',\n timestamp: Date.now(),\n userId: client.userId,\n roomId: payload.roomId,\n data: { lock, action: 'acquired' },\n metadata: { userId: client.userId, timestamp: Date.now(), roomId: payload.roomId }\n });\n } catch (error) {\n await this.sendToClient(clientId, { type: 'lock_denied', request: payload.request, reason: (error as Error).message });\n }\n }\n\n private async handleLockRelease(clientId: string, payload: { lockId: string }): Promise<void> {\n const client = this.clients.get(clientId);\n if (!client) {\n return;\n }\n\n try {\n await this.lockManager.releaseLock(payload.lockId);\n await this.emit('lock_released', { lockId: payload.lockId, clientId });\n\n await this.sendToClient(clientId, { type: 'lock_released', lockId: payload.lockId });\n\n // Broadcast lock status to all rooms the client is in\n for (const roomId of client.roomIds) {\n await this.roomManager.broadcastToRoom(roomId, {\n id: this.generateId(),\n type: 'lock_status',\n timestamp: Date.now(),\n userId: client.userId,\n roomId,\n data: { lockId: payload.lockId, action: 'released' },\n metadata: { userId: client.userId, timestamp: Date.now(), roomId }\n });\n }\n } catch (error) {\n await this.sendToClient(clientId, { type: 'error', error: (error as Error).message });\n }\n }\n\n // Utility Methods\n private async sendToClient(clientId: string, message: Record<string, unknown>): Promise<void> {\n const transportMessage: Message = {\n id: this.generateId(),\n type: 'server_message',\n payload: { clientId, ...message },\n timestamp: Date.now()\n };\n\n await this.transport.send(transportMessage);\n }\n\n private generateId(): string {\n return Math.random().toString(36).substring(2) + Date.now().toString(36);\n }\n\n // Public API for external management\n async createRoom(roomId: string, config: RoomConfig): Promise<Room> {\n const room = await this.roomManager.createRoom(roomId, config);\n await this.emit('room_created', { room });\n return room;\n }\n\n async deleteRoom(roomId: string): Promise<void> {\n await this.roomManager.deleteRoom(roomId);\n await this.emit('room_deleted', { roomId });\n }\n\n getConnectedClients(): ConnectedClient[] {\n return Array.from(this.clients.values());\n }\n\n getClient(clientId: string): ConnectedClient | null {\n return this.clients.get(clientId) || null;\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n getMode(): 'standalone' | 'integration' {\n return this.mode;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * Update presence activity for a user's device\n *\n * @param userId - User identifier\n * @param deviceId - Device/client identifier\n * @param activityType - Type of activity\n */\n private async updatePresenceActivity(\n userId: string,\n deviceId: string,\n activityType: 'heartbeat' | 'message' | 'user_action'\n ): Promise<void> {\n if (!this.presenceManager?.isEnabled()) {\n return;\n }\n\n try {\n await this.presenceManager.updateActivity({\n userId,\n deviceId,\n timestamp: Date.now(),\n activityType\n });\n\n await this.emit('presence_activity', {\n userId,\n deviceId,\n timestamp: Date.now()\n });\n } catch (error) {\n // Don't throw, just log the error\n await this.emit('error', {\n error: error as Error,\n context: 'presence_update_activity'\n });\n }\n }\n\n /**\n * Get presence manager (if configured)\n */\n getPresenceManager(): PresenceManager | undefined {\n return this.presenceManager;\n }\n\n /**\n * Get user ID from client ID\n *\n * @param clientId - Client identifier\n * @returns User ID, or undefined if not found or not authenticated\n */\n getUserIdFromClientId(clientId: string): string | undefined {\n return this.clientUserMap.get(clientId);\n }\n\n /**\n * Get all client IDs for a user\n *\n * A user may have multiple connected devices/clients.\n *\n * @param userId - User identifier\n * @returns Array of client IDs\n */\n getClientIdsForUser(userId: string): string[] {\n return Array.from(this.userClientMap.get(userId) || []);\n }\n\n /**\n * Get device ID from client ID\n *\n * In Control Tower architecture, clientId === deviceId\n *\n * @param clientId - Client identifier\n * @returns Device ID (same as clientId)\n */\n getDeviceIdFromClientId(clientId: string): string {\n return clientId;\n }\n}",
|
|
37
|
+
"import type { ITransportAdapter } from '../abstractions/TransportAdapter.js';\nimport type { IAuthAdapter } from '../abstractions/AuthAdapter.js';\nimport type { IStorageAdapter } from '../abstractions/StorageAdapter.js';\nimport type { RoomManager } from '../abstractions/RoomManager.js';\nimport type { LockManager } from '../abstractions/LockManager.js';\nimport type { PresenceManager } from '../abstractions/PresenceManager.js';\nimport { DefaultPresenceManager } from '../abstractions/DefaultPresenceManager.js';\nimport type { RoomConfig, ExperimentalFeatureConfig } from '../types/index.js';\nimport { BaseServer, type ServerConfig } from './BaseServer.js';\nimport type { Server as HttpServer } from 'http';\nimport type { Server as HttpsServer } from 'https';\nimport type { WebSocketServer } from 'ws';\n\nexport class ServerBuilder {\n private transport?: ITransportAdapter;\n private auth?: IAuthAdapter;\n private storage?: IStorageAdapter;\n private roomManager?: RoomManager;\n private lockManager?: LockManager;\n private presenceManager?: PresenceManager;\n private defaultRoomConfig?: Partial<RoomConfig>;\n private httpServer?: HttpServer | HttpsServer;\n private webSocketPath?: string;\n private webSocketServer?: WebSocketServer;\n private experimentalFeatures?: ExperimentalFeatureConfig;\n\n withTransport(transport: ITransportAdapter): this {\n this.transport = transport;\n return this;\n }\n\n withAuth(auth: IAuthAdapter): this {\n this.auth = auth;\n return this;\n }\n\n withStorage(storage: IStorageAdapter): this {\n this.storage = storage;\n return this;\n }\n\n withRoomManager(roomManager: RoomManager): this {\n this.roomManager = roomManager;\n return this;\n }\n\n withLockManager(lockManager: LockManager): this {\n this.lockManager = lockManager;\n return this;\n }\n\n /**\n * Configure presence management for global user tracking\n *\n * Enables two-tier connection architecture where users maintain\n * global presence while participating in multiple rooms.\n *\n * @param presenceManager - PresenceManager implementation\n */\n withPresenceManager(presenceManager: PresenceManager): this {\n this.presenceManager = presenceManager;\n return this;\n }\n\n withDefaultRoomConfig(config: Partial<RoomConfig>): this {\n this.defaultRoomConfig = config;\n return this;\n }\n\n withHttpServer(server: HttpServer | HttpsServer): this {\n this.httpServer = server;\n return this;\n }\n\n withWebSocketPath(path: string): this {\n this.webSocketPath = path;\n return this;\n }\n\n withWebSocketServer(wss: WebSocketServer): this {\n this.webSocketServer = wss;\n return this;\n }\n\n /**\n * Enable experimental features\n *\n * ⚠️ WARNING: Experimental features are for development only.\n * APIs may change or be removed without major version bumps.\n *\n * @see docs/EXPERIMENTAL_BROADCAST.md\n */\n withExperimentalFeatures(features: ExperimentalFeatureConfig): this {\n this.experimentalFeatures = features;\n return this;\n }\n\n build(): BaseServer {\n if (!this.transport) {\n throw new Error('Transport adapter is required');\n }\n\n if (!this.roomManager) {\n throw new Error('Room manager is required');\n }\n\n if (!this.lockManager) {\n throw new Error('Lock manager is required');\n }\n\n const config: ServerConfig = {\n transport: this.transport,\n auth: this.auth,\n storage: this.storage,\n roomManager: this.roomManager,\n lockManager: this.lockManager,\n presenceManager: this.presenceManager,\n defaultRoomConfig: this.defaultRoomConfig || {\n maxUsers: 50,\n maxHistory: 100,\n permissions: ['read' as const, 'write' as const]\n },\n httpServer: this.httpServer,\n webSocketPath: this.webSocketPath,\n webSocketServer: this.webSocketServer,\n experimental: this.experimentalFeatures || {\n enableBroadcast: false,\n warnOnExperimentalUse: true,\n trackUsageMetrics: false\n }\n };\n\n const server = new BaseServer(config);\n\n // Auto-link presence manager to server for broadcasting\n if (this.presenceManager instanceof DefaultPresenceManager) {\n this.presenceManager.setServer(server);\n }\n\n // Auto-wire presence extension hooks to server events\n if (this.presenceManager instanceof DefaultPresenceManager) {\n this.wirePresenceExtensionHooks(server, this.presenceManager);\n }\n\n return server;\n }\n\n /**\n * Wire presence extension hooks to server events\n * @private\n */\n private wirePresenceExtensionHooks(\n server: BaseServer,\n presenceManager: DefaultPresenceManager<any>\n ): void {\n // Initialize extensions when server starts\n server.on('started', async () => {\n await presenceManager.initializeExtensions();\n });\n\n // Wire room join/leave events to presence extensions\n server.on('client_joined_room', async ({ clientId, roomId }) => {\n const userId = server.getUserIdFromClientId(clientId);\n if (userId && presenceManager.isEnabled()) {\n // Call onRoomJoined for all extensions\n const extensions = (presenceManager as any).extensions;\n if (extensions) {\n for (const ext of extensions) {\n await ext.onRoomJoined?.(userId, roomId, clientId);\n }\n }\n }\n });\n\n server.on('client_left_room', async ({ clientId, roomId }) => {\n const userId = server.getUserIdFromClientId(clientId);\n if (userId && presenceManager.isEnabled()) {\n // Call onRoomLeft for all extensions\n const extensions = (presenceManager as any).extensions;\n if (extensions) {\n for (const ext of extensions) {\n await ext.onRoomLeft?.(userId, roomId, clientId);\n }\n }\n }\n });\n\n // Destroy extensions when server stops\n server.on('stopped', async () => {\n await presenceManager.destroyExtensions();\n });\n }\n}"
|
|
37
38
|
],
|
|
38
|
-
"mappings": "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",
|
|
39
|
-
"debugId": "
|
|
39
|
+
"mappings": "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",
|
|
40
|
+
"debugId": "205D80A7D7E855D364756E2164756E21",
|
|
40
41
|
"names": []
|
|
41
42
|
}
|