@principal-ai/control-tower-core 0.2.0 → 0.2.2
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/ConnectedRoomManager.d.ts +22 -0
- package/dist/abstractions/ConnectedRoomManager.d.ts.map +1 -0
- package/dist/abstractions/ConnectedRoomManager.js +56 -0
- package/dist/abstractions/index.d.ts +1 -0
- package/dist/abstractions/index.d.ts.map +1 -1
- package/dist/abstractions/index.js +3 -1
- package/dist/generated/client-connection-auth.types.d.ts +312 -0
- package/dist/generated/client-connection-auth.types.d.ts.map +1 -0
- package/dist/generated/client-connection-auth.types.js +11 -0
- package/dist/generated/control-tower-execution.types.d.ts +445 -0
- package/dist/generated/control-tower-execution.types.d.ts.map +1 -0
- package/dist/generated/control-tower-execution.types.js +11 -0
- package/dist/index.d.ts +1 -1
- 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 +180 -99
- package/dist/index.mjs.map +8 -7
- package/dist/server/BaseServer.d.ts +30 -2
- package/dist/server/BaseServer.d.ts.map +1 -1
- package/dist/server/BaseServer.js +77 -8
- package/dist/server/ServerBuilder.d.ts.map +1 -1
- package/dist/server/ServerBuilder.js +11 -0
- package/dist/telemetry/EventValidationIntegration.d.ts +135 -0
- package/dist/telemetry/EventValidationIntegration.d.ts.map +1 -0
- package/dist/telemetry/EventValidationIntegration.js +253 -0
- package/dist/telemetry/EventValidationIntegration.test.d.ts +7 -0
- package/dist/telemetry/EventValidationIntegration.test.d.ts.map +1 -0
- package/dist/telemetry/EventValidationIntegration.test.js +322 -0
- package/dist/telemetry/TelemetryCapture.d.ts +268 -0
- package/dist/telemetry/TelemetryCapture.d.ts.map +1 -0
- package/dist/telemetry/TelemetryCapture.js +263 -0
- package/dist/telemetry/TelemetryCapture.test.d.ts +7 -0
- package/dist/telemetry/TelemetryCapture.test.d.ts.map +1 -0
- package/dist/telemetry/TelemetryCapture.test.js +396 -0
- package/dist/telemetry-example.d.ts +33 -0
- package/dist/telemetry-example.d.ts.map +1 -0
- package/dist/telemetry-example.js +124 -0
- package/package.json +1 -1
- package/dist/adapters/websocket/WebSocketTransportAdapter.d.ts +0 -60
- package/dist/adapters/websocket/WebSocketTransportAdapter.d.ts.map +0 -1
- package/dist/adapters/websocket/WebSocketTransportAdapter.js +0 -386
package/dist/index.js.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/abstractions/
|
|
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/abstractions/RoomManager.ts", "../src/abstractions/DefaultRoomManager.ts", "../src/abstractions/ConnectedRoomManager.ts", "../src/abstractions/LockManager.ts", "../src/abstractions/DefaultLockManager.ts", "../src/abstractions/PresenceManager.ts", "../src/abstractions/DefaultPresenceManager.ts", "../src/abstractions/EventEmitter.ts", "../src/adapters/mock/MockAuthAdapter.ts", "../src/adapters/mock/MockRTCDataChannel.ts", "../src/adapters/mock/MockRTCPeerConnection.ts", "../src/adapters/mock/MockStorageAdapter.ts", "../src/adapters/mock/MockTransportAdapter.ts", "../src/adapters/webrtc/WebRTCSignalingAdapter.ts", "../node_modules/ws/wrapper.mjs", "../src/adapters/websocket/WebSocketClientTransportAdapter.ts", "../src/adapters/websocket/WebSocketServerTransportAdapter.ts", "../src/adapters/websocket/BrowserWebSocketTransportAdapter.ts", "../src/types/room.ts", "../src/client/BaseClient.ts", "../src/client/ClientBuilder.ts", "../src/client/PresenceClient.ts", "../src/types/experimental.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",
|
|
@@ -15,12 +15,13 @@
|
|
|
15
15
|
"/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^WebSocket$\" }] */\n'use strict';\n\nconst WebSocket = require('./websocket');\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n if (!this.destroyed && this._writableState.finished) {\n this.destroy();\n }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n this.removeListener('error', duplexOnError);\n this.destroy();\n if (this.listenerCount('error') === 0) {\n // Do not suppress the throwing behavior.\n this.emit('error', err);\n }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n let terminateOnDestroy = true;\n\n const duplex = new Duplex({\n ...options,\n autoDestroy: false,\n emitClose: false,\n objectMode: false,\n writableObjectMode: false\n });\n\n ws.on('message', function message(msg, isBinary) {\n const data =\n !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n if (!duplex.push(data)) ws.pause();\n });\n\n ws.once('error', function error(err) {\n if (duplex.destroyed) return;\n\n // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n //\n // - If the `'error'` event is emitted before the `'open'` event, then\n // `ws.terminate()` is a noop as no socket is assigned.\n // - Otherwise, the error is re-emitted by the listener of the `'error'`\n // event of the `Receiver` object. The listener already closes the\n // connection by calling `ws.close()`. This allows a close frame to be\n // sent to the other peer. If `ws.terminate()` is called right after this,\n // then the close frame might not be sent.\n terminateOnDestroy = false;\n duplex.destroy(err);\n });\n\n ws.once('close', function close() {\n if (duplex.destroyed) return;\n\n duplex.push(null);\n });\n\n duplex._destroy = function (err, callback) {\n if (ws.readyState === ws.CLOSED) {\n callback(err);\n process.nextTick(emitClose, duplex);\n return;\n }\n\n let called = false;\n\n ws.once('error', function error(err) {\n called = true;\n callback(err);\n });\n\n ws.once('close', function close() {\n if (!called) callback(err);\n process.nextTick(emitClose, duplex);\n });\n\n if (terminateOnDestroy) ws.terminate();\n };\n\n duplex._final = function (callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._final(callback);\n });\n return;\n }\n\n // If the value of the `_socket` property is `null` it means that `ws` is a\n // client websocket and the handshake failed. In fact, when this happens, a\n // socket is never assigned to the websocket. Wait for the `'error'` event\n // that will be emitted by the websocket.\n if (ws._socket === null) return;\n\n if (ws._socket._writableState.finished) {\n callback();\n if (duplex._readableState.endEmitted) duplex.destroy();\n } else {\n ws._socket.once('finish', function finish() {\n // `duplex` is not destroyed here because the `'end'` event will be\n // emitted on `duplex` after this `'finish'` event. The EOF signaling\n // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n callback();\n });\n ws.close();\n }\n };\n\n duplex._read = function () {\n if (ws.isPaused) ws.resume();\n };\n\n duplex._write = function (chunk, encoding, callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._write(chunk, encoding, callback);\n });\n return;\n }\n\n ws.send(chunk, callback);\n };\n\n duplex.on('end', duplexOnEnd);\n duplex.on('error', duplexOnError);\n return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n",
|
|
16
16
|
"'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n const protocols = new Set();\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (i; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n\n const protocol = header.slice(start, end);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n\n if (start === -1 || end !== -1) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n const protocol = header.slice(start, i);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n return protocols;\n}\n\nmodule.exports = { parse };\n",
|
|
17
17
|
"/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * server to use\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @param {Function} [options.verifyClient] A hook to reject connections\n * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n * class to use. It must be the `WebSocket` class or class that extends it\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n allowSynchronousEvents: true,\n autoPong: true,\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n WebSocket,\n ...options\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError(\n 'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n 'must be specified'\n );\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n });\n res.end(body);\n });\n this._server.listen(\n options.port,\n options.host,\n options.backlog,\n callback\n );\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, 'connection');\n\n this._removeListeners = addListeners(this._server, {\n listening: this.emit.bind(this, 'listening'),\n error: this.emit.bind(this, 'error'),\n upgrade: (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n }\n });\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) {\n this.clients = new Set();\n this._shouldEmitClose = false;\n }\n\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Stop the server from accepting new connections and emit the `'close'` event\n * when all existing connections are closed.\n *\n * @param {Function} [cb] A one-time listener for the `'close'` event\n * @public\n */\n close(cb) {\n if (this._state === CLOSED) {\n if (cb) {\n this.once('close', () => {\n cb(new Error('The server is not running'));\n });\n }\n\n process.nextTick(emitClose, this);\n return;\n }\n\n if (cb) this.once('close', cb);\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n if (this.options.noServer || this.options.server) {\n if (this._server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n }\n\n if (this.clients) {\n if (!this.clients.size) {\n process.nextTick(emitClose, this);\n } else {\n this._shouldEmitClose = true;\n }\n } else {\n process.nextTick(emitClose, this);\n }\n } else {\n const server = this._server;\n\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // The HTTP/S server was created internally. Close it, and rely on its\n // `'close'` event.\n //\n server.close(() => {\n emitClose(this);\n });\n }\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf('?');\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n socket.on('error', socketOnError);\n\n const key = req.headers['sec-websocket-key'];\n const upgrade = req.headers.upgrade;\n const version = +req.headers['sec-websocket-version'];\n\n if (req.method !== 'GET') {\n const message = 'Invalid HTTP method';\n abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n return;\n }\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n const message = 'Invalid Upgrade header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (key === undefined || !keyRegex.test(key)) {\n const message = 'Missing or invalid Sec-WebSocket-Key header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (version !== 13 && version !== 8) {\n const message = 'Missing or invalid Sec-WebSocket-Version header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, {\n 'Sec-WebSocket-Version': '13, 8'\n });\n return;\n }\n\n if (!this.shouldHandle(req)) {\n abortHandshake(socket, 400);\n return;\n }\n\n const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n let protocols = new Set();\n\n if (secWebSocketProtocol !== undefined) {\n try {\n protocols = subprotocol.parse(secWebSocketProtocol);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Protocol header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n const extensions = {};\n\n if (\n this.options.perMessageDeflate &&\n secWebSocketExtensions !== undefined\n ) {\n const perMessageDeflate = new PerMessageDeflate(\n this.options.perMessageDeflate,\n true,\n this.options.maxPayload\n );\n\n try {\n const offers = extension.parse(secWebSocketExtensions);\n\n if (offers[PerMessageDeflate.extensionName]) {\n perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n }\n } catch (err) {\n const message =\n 'Invalid or unacceptable Sec-WebSocket-Extensions header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin:\n req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(socket, code || 401, message, headers);\n }\n\n this.completeUpgrade(\n extensions,\n key,\n protocols,\n req,\n socket,\n head,\n cb\n );\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n }\n\n this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {Object} extensions The accepted extensions\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Set} protocols The subprotocols\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n //\n // Destroy the socket if the client has already sent a FIN packet.\n //\n if (!socket.readable || !socket.writable) return socket.destroy();\n\n if (socket[kWebSocket]) {\n throw new Error(\n 'server.handleUpgrade() was called more than once with the same ' +\n 'socket, possibly due to a misconfiguration'\n );\n }\n\n if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${digest}`\n ];\n\n const ws = new this.options.WebSocket(null, undefined, this.options);\n\n if (protocols.size) {\n //\n // Optionally call external protocol selection handler.\n //\n const protocol = this.options.handleProtocols\n ? this.options.handleProtocols(protocols, req)\n : protocols.values().next().value;\n\n if (protocol) {\n headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n ws._protocol = protocol;\n }\n }\n\n if (extensions[PerMessageDeflate.extensionName]) {\n const params = extensions[PerMessageDeflate.extensionName].params;\n const value = extension.format({\n [PerMessageDeflate.extensionName]: [params]\n });\n headers.push(`Sec-WebSocket-Extensions: ${value}`);\n ws._extensions = extensions;\n }\n\n //\n // Allow external modification/inspection of handshake headers.\n //\n this.emit('headers', headers, req);\n\n socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n socket.removeListener('error', socketOnError);\n\n ws.setSocket(socket, head, {\n allowSynchronousEvents: this.options.allowSynchronousEvents,\n maxPayload: this.options.maxPayload,\n skipUTF8Validation: this.options.skipUTF8Validation\n });\n\n if (this.clients) {\n this.clients.add(ws);\n ws.on('close', () => {\n this.clients.delete(ws);\n\n if (this._shouldEmitClose && !this.clients.size) {\n process.nextTick(emitClose, this);\n }\n });\n }\n\n cb(ws, req);\n }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n * called\n * @private\n */\nfunction addListeners(server, map) {\n for (const event of Object.keys(map)) server.on(event, map[event]);\n\n return function removeListeners() {\n for (const event of Object.keys(map)) {\n server.removeListener(event, map[event]);\n }\n };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n server._state = CLOSED;\n server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n //\n // The socket is writable unless the user destroyed or ended it before calling\n // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n // error. Handling this does not make much sense as the worst that can happen\n // is that some of the data written by the user might be discarded due to the\n // call to `socket.end()` below, which triggers an `'error'` event that in\n // turn causes the socket to be destroyed.\n //\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: 'close',\n 'Content-Type': 'text/html',\n 'Content-Length': Buffer.byteLength(message),\n ...headers\n };\n\n socket.once('finish', socket.destroy);\n\n socket.end(\n `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n Object.keys(headers)\n .map((h) => `${h}: ${headers[h]}`)\n .join('\\r\\n') +\n '\\r\\n\\r\\n' +\n message\n );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @param {Object} [headers] The HTTP response headers\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(\n server,\n req,\n socket,\n code,\n message,\n headers\n) {\n if (server.listenerCount('wsClientError')) {\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n server.emit('wsClientError', err, socket, req);\n } else {\n abortHandshake(socket, code, message, headers);\n }\n}\n",
|
|
18
|
+
"import type {\n\tEvent,\n\tRoom,\n\tRoomConfig,\n\tRoomState,\n\tRoomUser,\n} from \"../types/index.js\";\n\nexport abstract class RoomManager {\n\tprotected rooms = new Map<string, RoomState>();\n\n\tabstract createRoom(id: string, config: RoomConfig): Promise<Room>;\n\tabstract deleteRoom(id: string): Promise<void>;\n\tabstract joinRoom(roomId: string, user: RoomUser): Promise<void>;\n\tabstract leaveRoom(roomId: string, userId: string): Promise<void>;\n\tabstract broadcastToRoom(\n\t\troomId: string,\n\t\tevent: Event,\n\t\texcludeUserId?: string,\n\t): Promise<void>;\n\tabstract getRoomState(roomId: string): Promise<RoomState | null>;\n\tabstract getUsersInRoom(roomId: string): Promise<RoomUser[]>;\n\tabstract addEventToHistory(roomId: string, event: Event): Promise<void>;\n\tabstract getEventHistory(roomId: string, limit?: number): Promise<Event[]>;\n\tabstract updateUserStatus(\n\t\troomId: string,\n\t\tuserId: string,\n\t\tstatus: RoomUser[\"status\"],\n\t): Promise<void>;\n}\n",
|
|
19
|
+
"import type {\n\tEvent,\n\tRoom,\n\tRoomConfig,\n\tRoomState,\n\tRoomUser,\n} from \"../types/index.js\";\nimport { RoomManager } from \"./RoomManager.js\";\n\nexport class DefaultRoomManager extends RoomManager {\n\tasync createRoom(id: string, config: RoomConfig): Promise<Room> {\n\t\tconst room: Room = {\n\t\t\tid,\n\t\t\tname: config.name || id,\n\t\t\tcreatedAt: Date.now(),\n\t\t\tmaxUsers: config.maxUsers,\n\t\t\tmaxHistory: config.maxHistory,\n\t\t\tpermissions: config.permissions,\n\t\t\tmetadata: config.metadata || {},\n\t\t};\n\n\t\tconst roomState: RoomState = {\n\t\t\troom,\n\t\t\tusers: new Map(),\n\t\t\teventHistory: [],\n\t\t\tlocks: new Map(),\n\t\t};\n\n\t\tthis.rooms.set(id, roomState);\n\t\treturn room;\n\t}\n\n\tasync deleteRoom(id: string): Promise<void> {\n\t\tthis.rooms.delete(id);\n\t}\n\n\tasync joinRoom(roomId: string, user: RoomUser): Promise<void> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\tthrow new Error(`Room ${roomId} not found`);\n\t\t}\n\n\t\tif (\n\t\t\troomState.room.maxUsers &&\n\t\t\troomState.users.size >= roomState.room.maxUsers\n\t\t) {\n\t\t\tthrow new Error(`Room ${roomId} is full`);\n\t\t}\n\n\t\troomState.users.set(user.id, user);\n\t}\n\n\tasync leaveRoom(roomId: string, userId: string): Promise<void> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\treturn; // Room doesn't exist, nothing to do\n\t\t}\n\n\t\troomState.users.delete(userId);\n\t}\n\n\tasync broadcastToRoom(\n\t\troomId: string,\n\t\tevent: Event,\n\t\t_excludeUserId?: string,\n\t): Promise<void> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\tthrow new Error(`Room ${roomId} not found`);\n\t\t}\n\n\t\t// In a real implementation, this would broadcast to connected clients\n\t\t// For now, we'll just store the event in history\n\t\tawait this.addEventToHistory(roomId, event);\n\t}\n\n\tasync getRoomState(roomId: string): Promise<RoomState | null> {\n\t\treturn this.rooms.get(roomId) || null;\n\t}\n\n\tasync getUsersInRoom(roomId: string): Promise<RoomUser[]> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn Array.from(roomState.users.values());\n\t}\n\n\tasync addEventToHistory(roomId: string, event: Event): Promise<void> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\tthrow new Error(`Room ${roomId} not found`);\n\t\t}\n\n\t\troomState.eventHistory.push(event);\n\n\t\t// Trim history if needed\n\t\tif (\n\t\t\troomState.room.maxHistory &&\n\t\t\troomState.eventHistory.length > roomState.room.maxHistory\n\t\t) {\n\t\t\troomState.eventHistory = roomState.eventHistory.slice(\n\t\t\t\t-roomState.room.maxHistory,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync getEventHistory(roomId: string, limit?: number): Promise<Event[]> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst history = roomState.eventHistory;\n\t\treturn limit ? history.slice(-limit) : history;\n\t}\n\n\tasync updateUserStatus(\n\t\troomId: string,\n\t\tuserId: string,\n\t\tstatus: RoomUser[\"status\"],\n\t): Promise<void> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\tthrow new Error(`Room ${roomId} not found`);\n\t\t}\n\n\t\tconst user = roomState.users.get(userId);\n\t\tif (user) {\n\t\t\tuser.status = status;\n\t\t\tuser.lastActivity = Date.now();\n\t\t}\n\t}\n}\n",
|
|
20
|
+
"import type {\n\tEvent,\n} from \"../types/index.js\";\nimport { DefaultRoomManager } from \"./DefaultRoomManager.js\";\n\n/**\n * Room manager that broadcasts events to connected clients\n *\n * This extends DefaultRoomManager to add actual broadcasting functionality.\n * It requires a sendToClient callback that is provided by the server.\n */\nexport class ConnectedRoomManager extends DefaultRoomManager {\n\tprivate sendToClient: (clientId: string, message: Record<string, unknown>) => Promise<void>;\n\tprivate getClientIdsInRoom: (roomId: string, userId: string) => string[];\n\n\t/**\n\t * @param sendToClient - Callback to send a message to a specific client\n\t * @param getClientIdsInRoom - Callback to get all client IDs for a user in a room\n\t */\n\tconstructor(\n\t\tsendToClient: (clientId: string, message: Record<string, unknown>) => Promise<void>,\n\t\tgetClientIdsInRoom: (roomId: string, userId: string) => string[]\n\t) {\n\t\tsuper();\n\t\tthis.sendToClient = sendToClient;\n\t\tthis.getClientIdsInRoom = getClientIdsInRoom;\n\t}\n\n\t/**\n\t * Broadcast an event to all users in a room (optionally excluding one user)\n\t */\n\tasync broadcastToRoom(\n\t\troomId: string,\n\t\tevent: Event,\n\t\texcludeUserId?: string,\n\t): Promise<void> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\tthrow new Error(`Room ${roomId} not found`);\n\t\t}\n\n\t\t// Store in history first\n\t\tawait this.addEventToHistory(roomId, event);\n\n\t\t// Get all users in the room\n\t\tconst users = Array.from(roomState.users.values());\n\n\t\t// Send to each user's clients\n\t\tconst sendPromises: Promise<void>[] = [];\n\n\t\tfor (const user of users) {\n\t\t\t// Skip excluded user\n\t\t\tif (excludeUserId && user.id === excludeUserId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Get all client IDs for this user in this room\n\t\t\tconst clientIds = this.getClientIdsInRoom(roomId, user.id);\n\n\t\t\t// Send event to each client\n\t\t\tfor (const clientId of clientIds) {\n\t\t\t\tsendPromises.push(\n\t\t\t\t\tthis.sendToClient(clientId, {\n\t\t\t\t\t\ttype: 'event_received',\n\t\t\t\t\t\tevent,\n\t\t\t\t\t}).catch(error => {\n\t\t\t\t\t\tconsole.error(`[ConnectedRoomManager] Failed to send event to client ${clientId}:`, error);\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Wait for all sends to complete\n\t\tawait Promise.all(sendPromises);\n\t}\n}\n",
|
|
18
21
|
"import type { Lock, LockRequest, LockState } from \"../types/index.js\";\n\nexport abstract class LockManager {\n\tprotected lockState: LockState = {\n\t\tlocks: new Map(),\n\t\tqueue: new Map(),\n\t\tuserLocks: new Map(),\n\t};\n\n\tabstract acquireLock(\n\t\tuserId: string,\n\t\tusername: string,\n\t\trequest: LockRequest,\n\t): Promise<Lock>;\n\tabstract releaseLock(lockId: string): Promise<void>;\n\tabstract releaseUserLocks(userId: string): Promise<void>;\n\tabstract getLock(path: string): Promise<Lock | null>;\n\tabstract getUserLocks(userId: string): Promise<Lock[]>;\n\tabstract getAllLocks(): Promise<Lock[]>;\n\tabstract isLocked(path: string): Promise<boolean>;\n\tabstract getQueueLength(path: string): Promise<number>;\n\tabstract extendLock(lockId: string, ttl: number): Promise<Lock>;\n\tabstract addToQueue(\n\t\tuserId: string,\n\t\tusername: string,\n\t\trequest: LockRequest,\n\t): Promise<void>;\n\tabstract removeFromQueue(path: string, userId: string): Promise<void>;\n}\n",
|
|
19
22
|
"import type { Lock, LockQueueItem, LockRequest } from \"../types/index.js\";\nimport { LockManager } from \"./LockManager.js\";\n\nexport class DefaultLockManager extends LockManager {\n\tasync acquireLock(\n\t\tuserId: string,\n\t\tusername: string,\n\t\trequest: LockRequest,\n\t): Promise<Lock> {\n\t\tconst {\n\t\t\tpath,\n\t\t\ttype = \"file\",\n\t\t\tpriority = \"normal\",\n\t\t\tttl,\n\t\t\tbranch,\n\t\t\tmetadata,\n\t\t} = request;\n\n\t\t// Check if user already has a lock on this path\n\t\tconst userLocks = this.lockState.userLocks.get(userId) || new Set();\n\t\tif (userLocks.has(path)) {\n\t\t\tthrow new Error(`User ${username} already has a lock on ${path}`);\n\t\t}\n\n\t\t// Check if path is already locked\n\t\tconst existingLock = await this.getLock(path);\n\t\tif (existingLock) {\n\t\t\t// Add to queue\n\t\t\tawait this.addToQueue(userId, username, request);\n\t\t\tthrow new Error(\n\t\t\t\t`Path ${path} is already locked by ${existingLock.username}, added to queue`,\n\t\t\t);\n\t\t}\n\n\t\t// Generate lock ID\n\t\tconst lockId = this.generateId();\n\n\t\t// Create lock\n\t\tconst lock: Lock = {\n\t\t\tid: lockId,\n\t\t\ttype,\n\t\t\tpath,\n\t\t\tuserId,\n\t\t\tusername,\n\t\t\tacquiredAt: Date.now(),\n\t\t\texpiresAt: ttl ? Date.now() + ttl : undefined,\n\t\t\tpriority,\n\t\t\tbranch,\n\t\t\tmetadata,\n\t\t};\n\n\t\t// Store lock\n\t\tthis.lockState.locks.set(lockId, lock);\n\t\tthis.lockState.userLocks.set(userId, userLocks.add(path));\n\n\t\treturn lock;\n\t}\n\n\tasync releaseLock(lockId: string): Promise<void> {\n\t\tconst lock = this.lockState.locks.get(lockId);\n\t\tif (!lock) {\n\t\t\tthrow new Error(`Lock ${lockId} not found`);\n\t\t}\n\n\t\t// Remove from user locks\n\t\tconst userLocks = this.lockState.userLocks.get(lock.userId);\n\t\tif (userLocks) {\n\t\t\tuserLocks.delete(lock.path);\n\t\t\tif (userLocks.size === 0) {\n\t\t\t\tthis.lockState.userLocks.delete(lock.userId);\n\t\t\t}\n\t\t}\n\n\t\t// Remove lock\n\t\tthis.lockState.locks.delete(lockId);\n\n\t\t// Process queue for this path\n\t\tawait this.processQueue(lock.path);\n\t}\n\n\tasync releaseUserLocks(userId: string): Promise<void> {\n\t\tconst userLocks = this.lockState.userLocks.get(userId);\n\t\tif (!userLocks) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lockIds = Array.from(this.lockState.locks.entries())\n\t\t\t.filter(([, lock]) => lock.userId === userId)\n\t\t\t.map(([lockId]) => lockId);\n\n\t\tfor (const lockId of lockIds) {\n\t\t\tawait this.releaseLock(lockId);\n\t\t}\n\t}\n\n\tasync getLock(path: string): Promise<Lock | null> {\n\t\tfor (const lock of this.lockState.locks.values()) {\n\t\t\tif (lock.path === path) {\n\t\t\t\treturn lock;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tasync getUserLocks(userId: string): Promise<Lock[]> {\n\t\treturn Array.from(this.lockState.locks.values()).filter(\n\t\t\t(lock) => lock.userId === userId,\n\t\t);\n\t}\n\n\tasync getAllLocks(): Promise<Lock[]> {\n\t\treturn Array.from(this.lockState.locks.values());\n\t}\n\n\tasync isLocked(path: string): Promise<boolean> {\n\t\treturn (await this.getLock(path)) !== null;\n\t}\n\n\tasync getQueueLength(path: string): Promise<number> {\n\t\tconst queue = this.lockState.queue.get(path);\n\t\treturn queue ? queue.length : 0;\n\t}\n\n\tasync extendLock(lockId: string, ttl: number): Promise<Lock> {\n\t\tconst lock = this.lockState.locks.get(lockId);\n\t\tif (!lock) {\n\t\t\tthrow new Error(`Lock ${lockId} not found`);\n\t\t}\n\n\t\tlock.expiresAt = Date.now() + ttl;\n\t\treturn lock;\n\t}\n\n\tasync addToQueue(\n\t\tuserId: string,\n\t\tusername: string,\n\t\trequest: LockRequest,\n\t): Promise<void> {\n\t\tconst { path } = request;\n\t\tconst queue = this.lockState.queue.get(path) || [];\n\n\t\tconst queueItem: LockQueueItem = {\n\t\t\t...request,\n\t\t\tuserId,\n\t\t\tusername,\n\t\t\trequestedAt: Date.now(),\n\t\t\tresolve: () => {},\n\t\t\treject: () => {},\n\t\t};\n\n\t\tqueue.push(queueItem);\n\t\tthis.lockState.queue.set(path, queue);\n\t}\n\n\tasync removeFromQueue(path: string, userId: string): Promise<void> {\n\t\tconst queue = this.lockState.queue.get(path);\n\t\tif (!queue) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = queue.findIndex((item) => item.userId === userId);\n\t\tif (index !== -1) {\n\t\t\tqueue.splice(index, 1);\n\t\t\tif (queue.length === 0) {\n\t\t\t\tthis.lockState.queue.delete(path);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate generateId(): string {\n\t\treturn Math.random().toString(36).substring(2) + Date.now().toString(36);\n\t}\n\n\tprivate async processQueue(path: string): Promise<void> {\n\t\tconst queue = this.lockState.queue.get(path);\n\t\tif (!queue || queue.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Process first item in queue\n\t\tconst item = queue.shift()!;\n\t\tif (queue.length === 0) {\n\t\t\tthis.lockState.queue.delete(path);\n\t\t}\n\n\t\ttry {\n\t\t\tconst lock = await this.acquireLock(item.userId, item.username, {\n\t\t\t\tpath: item.path,\n\t\t\t\ttype: item.type,\n\t\t\t\tpriority: item.priority,\n\t\t\t\tttl: item.ttl,\n\t\t\t\tbranch: item.branch,\n\t\t\t\tmetadata: item.metadata,\n\t\t\t});\n\n\t\t\titem.resolve(lock);\n\t\t} catch (error) {\n\t\t\titem.reject(error as Error);\n\t\t}\n\t}\n}\n",
|
|
20
23
|
"/**\n * Presence Manager Abstract Class\n *\n * Manages global user presence tracking independent of room membership.\n * Supports multi-device connections, activity monitoring, and grace periods.\n */\n\nimport type {\n\tActivityUpdate,\n\tDeviceInfo,\n\tPresenceChangeEvent,\n\tPresenceConfig,\n\tPresenceStatus,\n\tUserPresence,\n} from \"../types/presence.js\";\n\n/**\n * Abstract class for managing user presence\n *\n * Implementations should handle:\n * - Multi-device tracking per user\n * - Activity/heartbeat monitoring\n * - Grace period for disconnects\n * - Presence state persistence (if needed)\n */\nexport abstract class PresenceManager {\n\tprotected config: Required<PresenceConfig>;\n\n\tconstructor(config?: PresenceConfig) {\n\t\t// Set defaults\n\t\tthis.config = {\n\t\t\tenabled: config?.enabled ?? false,\n\t\t\theartbeatInterval: config?.heartbeatInterval ?? 30000,\n\t\t\tawayThreshold: config?.awayThreshold ?? 2,\n\t\t\tdisconnectThreshold: config?.disconnectThreshold ?? 3,\n\t\t\tgracePeriod: config?.gracePeriod ?? 30000,\n\t\t\ttrackDeviceActivity: config?.trackDeviceActivity ?? true,\n\t\t\tbroadcastPresenceUpdates: config?.broadcastPresenceUpdates ?? true,\n\t\t};\n\t}\n\n\t/**\n\t * Register a new device connection for a user\n\t *\n\t * @param userId - User identifier\n\t * @param deviceId - Device/client identifier\n\t * @param deviceInfo - Optional device metadata\n\t * @returns The updated user presence\n\t */\n\tabstract connectDevice(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t\tdeviceInfo?: Partial<DeviceInfo>,\n\t): Promise<UserPresence>;\n\n\t/**\n\t * Unregister a device connection\n\t *\n\t * May trigger grace period if this is the user's last device.\n\t *\n\t * @param userId - User identifier\n\t * @param deviceId - Device/client identifier\n\t * @returns The updated user presence, or null if user is completely offline\n\t */\n\tabstract disconnectDevice(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t): Promise<UserPresence | null>;\n\n\t/**\n\t * Update activity timestamp for a device\n\t *\n\t * Used for heartbeats and activity tracking.\n\t *\n\t * @param update - Activity update information\n\t * @returns The updated user presence\n\t */\n\tabstract updateActivity(update: ActivityUpdate): Promise<UserPresence>;\n\n\t/**\n\t * Get presence state for a user\n\t *\n\t * @param userId - User identifier\n\t * @returns User presence, or null if not found\n\t */\n\tabstract getUserPresence(userId: string): Promise<UserPresence | null>;\n\n\t/**\n\t * Get presence state for multiple users\n\t *\n\t * @param userIds - Array of user identifiers\n\t * @returns Map of userId to UserPresence\n\t */\n\tabstract getUsersPresence(\n\t\tuserIds: string[],\n\t): Promise<Map<string, UserPresence>>;\n\n\t/**\n\t * Get all online users\n\t *\n\t * @returns Array of user presences with status 'online'\n\t */\n\tabstract getOnlineUsers(): Promise<UserPresence[]>;\n\n\t/**\n\t * Get all devices for a user\n\t *\n\t * @param userId - User identifier\n\t * @returns Array of device info\n\t */\n\tabstract getUserDevices(userId: string): Promise<DeviceInfo[]>;\n\n\t/**\n\t * Manually set user status\n\t *\n\t * @param userId - User identifier\n\t * @param status - New presence status\n\t * @returns The updated user presence\n\t */\n\tabstract setUserStatus(\n\t\tuserId: string,\n\t\tstatus: PresenceStatus,\n\t): Promise<UserPresence>;\n\n\t/**\n\t * Check for stale connections and update presence accordingly\n\t *\n\t * This should be called periodically to:\n\t * - Mark idle devices as 'away'\n\t * - Disconnect devices that haven't sent heartbeats\n\t * - Expire grace periods\n\t *\n\t * @returns Array of presence change events\n\t */\n\tabstract processHeartbeats(): Promise<PresenceChangeEvent[]>;\n\n\t/**\n\t * Clear all presence data\n\t *\n\t * Useful for testing and cleanup.\n\t */\n\tabstract clear(): Promise<void>;\n\n\t/**\n\t * Get configuration\n\t */\n\tgetConfig(): Readonly<Required<PresenceConfig>> {\n\t\treturn { ...this.config };\n\t}\n\n\t/**\n\t * Check if presence tracking is enabled\n\t */\n\tisEnabled(): boolean {\n\t\treturn this.config.enabled;\n\t}\n\n\t/**\n\t * Calculate presence status based on device states\n\t *\n\t * Helper method for implementations to determine overall user status.\n\t *\n\t * @param devices - Map of devices for a user\n\t * @param now - Current timestamp\n\t * @returns Calculated presence status\n\t */\n\tprotected calculatePresenceStatus(\n\t\tdevices: Map<string, DeviceInfo>,\n\t\tnow: number = Date.now(),\n\t): PresenceStatus {\n\t\tif (devices.size === 0) {\n\t\t\treturn \"offline\";\n\t\t}\n\n\t\tconst heartbeatTimeout =\n\t\t\tthis.config.heartbeatInterval * this.config.awayThreshold;\n\n\t\t// Check if ANY device is active (within heartbeat threshold)\n\t\tfor (const device of devices.values()) {\n\t\t\tconst timeSinceActivity = now - device.lastActivity;\n\t\t\tif (timeSinceActivity < heartbeatTimeout) {\n\t\t\t\treturn \"online\";\n\t\t\t}\n\t\t}\n\n\t\t// All devices are idle\n\t\treturn \"away\";\n\t}\n\n\t/**\n\t * Check if a device should be disconnected due to missed heartbeats\n\t *\n\t * @param device - Device info\n\t * @param now - Current timestamp\n\t * @returns true if device should be disconnected\n\t */\n\tprotected shouldDisconnectDevice(\n\t\tdevice: DeviceInfo,\n\t\tnow: number = Date.now(),\n\t): boolean {\n\t\tconst timeout =\n\t\t\tthis.config.heartbeatInterval * this.config.disconnectThreshold;\n\t\treturn now - device.lastActivity > timeout;\n\t}\n}\n",
|
|
21
24
|
"/**\n * Default In-Memory Presence Manager\n *\n * Reference implementation of PresenceManager using in-memory storage.\n * Suitable for single-server deployments and development.\n *\n * For multi-server deployments, implement a custom PresenceManager\n * backed by Redis or another shared data store.\n */\n\nimport type { BaseServer } from \"../server/BaseServer.js\";\nimport type {\n\tActivityUpdate,\n\tDeviceInfo,\n\tPresenceChangeEvent,\n\tPresenceConfig,\n\tPresenceStatus,\n\tUserPresence,\n} from \"../types/presence.js\";\nimport type {\n\tExtendedUserPresence,\n\tPresenceExtension,\n} from \"./PresenceExtension.js\";\nimport { PresenceManager } from \"./PresenceManager.js\";\n\n/**\n * Grace period entry for tracking disconnected users\n */\ninterface GracePeriodEntry {\n\tuserId: string;\n\tdisconnectedAt: number;\n\tpreviousPresence: UserPresence;\n}\n\nexport class DefaultPresenceManager<\n\tTExtendedData = Record<string, unknown>,\n> extends PresenceManager {\n\tprivate userPresences = new Map<string, UserPresence>();\n\tprivate deviceToUser = new Map<string, string>();\n\tprivate gracePeriodEntries = new Map<string, GracePeriodEntry>();\n\tprivate extensions: PresenceExtension<TExtendedData>[] = [];\n\tprivate server?: BaseServer;\n\n\tconstructor(\n\t\tconfig?: PresenceConfig & {\n\t\t\textensions?: PresenceExtension<TExtendedData>[];\n\t\t},\n\t) {\n\t\tsuper(config);\n\t\tthis.extensions = config?.extensions || [];\n\t}\n\n\t/**\n\t * Set server reference for auto-broadcasting\n\t *\n\t * This is called automatically by ServerBuilder.\n\t * @internal\n\t */\n\tsetServer(server: BaseServer): void {\n\t\tthis.server = server;\n\t}\n\n\t/**\n\t * Initialize all extensions\n\t * @internal\n\t */\n\tasync initializeExtensions(): Promise<void> {\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.initialize?.();\n\t\t}\n\t}\n\n\t/**\n\t * Destroy all extensions\n\t * @internal\n\t */\n\tasync destroyExtensions(): Promise<void> {\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.destroy?.();\n\t\t}\n\t}\n\n\tasync connectDevice(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t\tdeviceInfo?: Partial<DeviceInfo>,\n\t): Promise<UserPresence> {\n\t\tconst now = Date.now();\n\t\tconst isFirstDevice =\n\t\t\t!this.userPresences.has(userId) && !this.gracePeriodEntries.has(userId);\n\n\t\t// Check if user is in grace period (reconnecting)\n\t\tconst gracePeriodEntry = this.gracePeriodEntries.get(userId);\n\t\tif (gracePeriodEntry) {\n\t\t\t// Restore from grace period\n\t\t\tthis.gracePeriodEntries.delete(userId);\n\t\t\tconst presence = gracePeriodEntry.previousPresence;\n\n\t\t\t// Add the new device\n\t\t\tconst device: DeviceInfo = {\n\t\t\t\tdeviceId,\n\t\t\t\ttype: deviceInfo?.type,\n\t\t\t\tconnectedAt: now,\n\t\t\t\tlastActivity: now,\n\t\t\t\tmetadata: deviceInfo?.metadata,\n\t\t\t};\n\n\t\t\tpresence.devices.set(deviceId, device);\n\t\t\tpresence.status = \"online\";\n\t\t\tpresence.lastActivity = now;\n\n\t\t\tthis.userPresences.set(userId, presence);\n\t\t\tthis.deviceToUser.set(deviceId, userId);\n\n\t\t\t// Call extension hooks\n\t\t\tif (isFirstDevice) {\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tawait ext.onUserOnline?.(\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tdeviceInfo?.metadata || {},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tawait ext.onDeviceConnected?.(\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tdeviceInfo?.metadata || {},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Auto-broadcast\n\t\t\tif (this.config.broadcastPresenceUpdates && this.server) {\n\t\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\t\ttype: \"presence:user_online\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\t\ttimestamp: now,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn presence;\n\t\t}\n\n\t\t// Get or create user presence\n\t\tlet presence = this.userPresences.get(userId);\n\t\tconst wasOnline = presence !== undefined;\n\n\t\tif (!presence) {\n\t\t\t// New user\n\t\t\tpresence = {\n\t\t\t\tuserId,\n\t\t\t\tstatus: \"online\",\n\t\t\t\tdevices: new Map(),\n\t\t\t\tfirstConnectedAt: now,\n\t\t\t\tlastActivity: now,\n\t\t\t\tmetadata: {},\n\t\t\t};\n\t\t\tthis.userPresences.set(userId, presence);\n\t\t}\n\n\t\t// Add device\n\t\tconst device: DeviceInfo = {\n\t\t\tdeviceId,\n\t\t\ttype: deviceInfo?.type,\n\t\t\tconnectedAt: now,\n\t\t\tlastActivity: now,\n\t\t\tmetadata: deviceInfo?.metadata,\n\t\t};\n\n\t\tpresence.devices.set(deviceId, device);\n\t\tpresence.status = this.calculatePresenceStatus(presence.devices, now);\n\t\tpresence.lastActivity = now;\n\n\t\tthis.deviceToUser.set(deviceId, userId);\n\n\t\t// Call extension hooks\n\t\tif (!wasOnline) {\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tawait ext.onUserOnline?.(userId, deviceId, deviceInfo?.metadata || {});\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tawait ext.onDeviceConnected?.(\n\t\t\t\t\tuserId,\n\t\t\t\t\tdeviceId,\n\t\t\t\t\tdeviceInfo?.metadata || {},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Auto-broadcast if user came online\n\t\tif (!wasOnline && this.config.broadcastPresenceUpdates && this.server) {\n\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\ttype: \"presence:user_online\",\n\t\t\t\tpayload: {\n\t\t\t\t\tuserId,\n\t\t\t\t\tdeviceId,\n\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\ttimestamp: now,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\treturn presence;\n\t}\n\n\tasync disconnectDevice(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t): Promise<UserPresence | null> {\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Remove device\n\t\tpresence.devices.delete(deviceId);\n\t\tthis.deviceToUser.delete(deviceId);\n\n\t\tconst now = Date.now();\n\t\tconst isLastDevice = presence.devices.size === 0;\n\n\t\t// If no devices left, start grace period\n\t\tif (isLastDevice) {\n\t\t\t// Call extension hooks for user going offline\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tawait ext.onUserOffline?.(userId, deviceId);\n\t\t\t}\n\n\t\t\t// Auto-broadcast user offline\n\t\t\tif (this.config.broadcastPresenceUpdates && this.server) {\n\t\t\t\tconst experimental = (this.server as any).experimental;\n\t\t\t\tawait experimental?.broadcastAuthenticated({\n\t\t\t\t\ttype: \"presence:user_offline\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdeviceId,\n\t\t\t\t\t\tstatus: \"offline\",\n\t\t\t\t\t\ttimestamp: now,\n\t\t\t\t\t\tgracePeriod: this.config.gracePeriod,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.config.gracePeriod > 0) {\n\t\t\t\t// Move to grace period\n\t\t\t\tthis.gracePeriodEntries.set(userId, {\n\t\t\t\t\tuserId,\n\t\t\t\t\tdisconnectedAt: now,\n\t\t\t\t\tpreviousPresence: presence,\n\t\t\t\t});\n\t\t\t\tthis.userPresences.delete(userId);\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\t// No grace period, remove completely\n\t\t\t\tthis.userPresences.delete(userId);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Still has devices - call device disconnected hook\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.onDeviceDisconnected?.(userId, deviceId);\n\t\t}\n\n\t\t// Still has devices, update status\n\t\tpresence.status = this.calculatePresenceStatus(presence.devices, now);\n\n\t\t// Update lastActivity to most recent device activity\n\t\tlet mostRecentActivity = 0;\n\t\tfor (const device of presence.devices.values()) {\n\t\t\tif (device.lastActivity > mostRecentActivity) {\n\t\t\t\tmostRecentActivity = device.lastActivity;\n\t\t\t}\n\t\t}\n\t\tpresence.lastActivity = mostRecentActivity;\n\n\t\treturn presence;\n\t}\n\n\tasync updateActivity(update: ActivityUpdate): Promise<UserPresence> {\n\t\tconst { userId, deviceId, timestamp, activityType } = update;\n\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\tthrow new Error(`User ${userId} not found in presence system`);\n\t\t}\n\n\t\tconst device = presence.devices.get(deviceId);\n\t\tif (!device) {\n\t\t\tthrow new Error(`Device ${deviceId} not found for user ${userId}`);\n\t\t}\n\n\t\t// Update device activity\n\t\tdevice.lastActivity = timestamp;\n\n\t\t// Update user activity\n\t\tif (timestamp > presence.lastActivity) {\n\t\t\tpresence.lastActivity = timestamp;\n\t\t}\n\n\t\t// Recalculate status\n\t\tconst previousStatus = presence.status;\n\t\tpresence.status = this.calculatePresenceStatus(presence.devices, timestamp);\n\n\t\t// Call extension hooks\n\t\tfor (const ext of this.extensions) {\n\t\t\tawait ext.onActivity?.(userId, deviceId, activityType || \"heartbeat\");\n\t\t}\n\n\t\treturn presence;\n\t}\n\n\tasync getUserPresence(\n\t\tuserId: string,\n\t): Promise<ExtendedUserPresence<TExtendedData> | null> {\n\t\tconst basePresence = this.userPresences.get(userId);\n\t\tif (!basePresence) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Merge extended data from all extensions\n\t\tif (this.extensions.length > 0) {\n\t\t\tconst extendedData: Record<string, unknown> = {};\n\t\t\tfor (const ext of this.extensions) {\n\t\t\t\tconst data = await ext.getExtendedData?.(userId);\n\t\t\t\tif (data) {\n\t\t\t\t\tObject.assign(extendedData, data);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...basePresence,\n\t\t\t\textended: extendedData as TExtendedData,\n\t\t\t};\n\t\t}\n\n\t\treturn basePresence;\n\t}\n\n\tasync getUsersPresence(\n\t\tuserIds: string[],\n\t): Promise<Map<string, UserPresence>> {\n\t\tconst result = new Map<string, UserPresence>();\n\n\t\tfor (const userId of userIds) {\n\t\t\tconst presence = this.userPresences.get(userId);\n\t\t\tif (presence) {\n\t\t\t\tresult.set(userId, presence);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tasync getOnlineUsers(): Promise<ExtendedUserPresence<TExtendedData>[]> {\n\t\tconst online: ExtendedUserPresence<TExtendedData>[] = [];\n\n\t\tfor (const presence of this.userPresences.values()) {\n\t\t\tif (presence.status === \"online\") {\n\t\t\t\t// Check visibility with extensions\n\t\t\t\tlet visible = true;\n\t\t\t\tfor (const ext of this.extensions) {\n\t\t\t\t\tconst shouldShow = await ext.shouldBeVisible?.(presence.userId);\n\t\t\t\t\tif (shouldShow === false) {\n\t\t\t\t\t\tvisible = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (visible) {\n\t\t\t\t\t// Get full presence with extended data\n\t\t\t\t\tconst fullPresence = await this.getUserPresence(presence.userId);\n\t\t\t\t\tif (fullPresence) {\n\t\t\t\t\t\tonline.push(fullPresence);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn online;\n\t}\n\n\tasync getUserDevices(userId: string): Promise<DeviceInfo[]> {\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn Array.from(presence.devices.values());\n\t}\n\n\tasync setUserStatus(\n\t\tuserId: string,\n\t\tstatus: PresenceStatus,\n\t): Promise<UserPresence> {\n\t\tconst presence = this.userPresences.get(userId);\n\t\tif (!presence) {\n\t\t\tthrow new Error(`User ${userId} not found in presence system`);\n\t\t}\n\n\t\tpresence.status = status;\n\t\treturn presence;\n\t}\n\n\tasync processHeartbeats(): Promise<PresenceChangeEvent[]> {\n\t\tconst now = Date.now();\n\t\tconst changes: PresenceChangeEvent[] = [];\n\n\t\t// Process active presences\n\t\tfor (const [userId, presence] of this.userPresences.entries()) {\n\t\t\tconst devicesToRemove: string[] = [];\n\n\t\t\t// Check each device for timeout\n\t\t\tfor (const [deviceId, device] of presence.devices.entries()) {\n\t\t\t\tif (this.shouldDisconnectDevice(device, now)) {\n\t\t\t\t\tdevicesToRemove.push(deviceId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove timed-out devices\n\t\t\tfor (const deviceId of devicesToRemove) {\n\t\t\t\tpresence.devices.delete(deviceId);\n\t\t\t\tthis.deviceToUser.delete(deviceId);\n\t\t\t}\n\n\t\t\t// Update status after removing devices\n\t\t\tconst previousStatus = presence.status;\n\t\t\tconst newStatus = this.calculatePresenceStatus(presence.devices, now);\n\n\t\t\tif (newStatus !== previousStatus) {\n\t\t\t\tpresence.status = newStatus;\n\t\t\t\tchanges.push({\n\t\t\t\t\tuserId,\n\t\t\t\t\tpreviousStatus,\n\t\t\t\t\tstatus: newStatus,\n\t\t\t\t\ttimestamp: now,\n\t\t\t\t\treason: \"heartbeat_timeout\",\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If no devices left, move to grace period\n\t\t\tif (presence.devices.size === 0) {\n\t\t\t\tif (this.config.gracePeriod > 0) {\n\t\t\t\t\tthis.gracePeriodEntries.set(userId, {\n\t\t\t\t\t\tuserId,\n\t\t\t\t\t\tdisconnectedAt: now,\n\t\t\t\t\t\tpreviousPresence: presence,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.userPresences.delete(userId);\n\t\t\t}\n\t\t}\n\n\t\t// Process grace period expirations\n\t\tconst expiredGracePeriods: string[] = [];\n\n\t\tfor (const [userId, entry] of this.gracePeriodEntries.entries()) {\n\t\t\tconst gracePeriodElapsed = now - entry.disconnectedAt;\n\n\t\t\tif (gracePeriodElapsed > this.config.gracePeriod) {\n\t\t\t\texpiredGracePeriods.push(userId);\n\n\t\t\t\tchanges.push({\n\t\t\t\t\tuserId,\n\t\t\t\t\tpreviousStatus: entry.previousPresence.status,\n\t\t\t\t\tstatus: \"offline\",\n\t\t\t\t\ttimestamp: now,\n\t\t\t\t\treason: \"grace_period_expired\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Remove expired grace period entries\n\t\tfor (const userId of expiredGracePeriods) {\n\t\t\tthis.gracePeriodEntries.delete(userId);\n\t\t}\n\n\t\treturn changes;\n\t}\n\n\tasync clear(): Promise<void> {\n\t\t// Destroy extensions first\n\t\tawait this.destroyExtensions();\n\n\t\tthis.userPresences.clear();\n\t\tthis.deviceToUser.clear();\n\t\tthis.gracePeriodEntries.clear();\n\t}\n\n\t/**\n\t * Get count of users in grace period (useful for monitoring)\n\t */\n\tgetGracePeriodCount(): number {\n\t\treturn this.gracePeriodEntries.size;\n\t}\n\n\t/**\n\t * Get total connected device count\n\t */\n\tgetConnectedDeviceCount(): number {\n\t\treturn this.deviceToUser.size;\n\t}\n\n\t/**\n\t * Get total unique user count\n\t */\n\tgetUniqueUserCount(): number {\n\t\treturn this.userPresences.size + this.gracePeriodEntries.size;\n\t}\n}\n",
|
|
22
|
-
"import type {\n\tEvent,\n\tRoom,\n\tRoomConfig,\n\tRoomState,\n\tRoomUser,\n} from \"../types/index.js\";\n\nexport abstract class RoomManager {\n\tprotected rooms = new Map<string, RoomState>();\n\n\tabstract createRoom(id: string, config: RoomConfig): Promise<Room>;\n\tabstract deleteRoom(id: string): Promise<void>;\n\tabstract joinRoom(roomId: string, user: RoomUser): Promise<void>;\n\tabstract leaveRoom(roomId: string, userId: string): Promise<void>;\n\tabstract broadcastToRoom(\n\t\troomId: string,\n\t\tevent: Event,\n\t\texcludeUserId?: string,\n\t): Promise<void>;\n\tabstract getRoomState(roomId: string): Promise<RoomState | null>;\n\tabstract getUsersInRoom(roomId: string): Promise<RoomUser[]>;\n\tabstract addEventToHistory(roomId: string, event: Event): Promise<void>;\n\tabstract getEventHistory(roomId: string, limit?: number): Promise<Event[]>;\n\tabstract updateUserStatus(\n\t\troomId: string,\n\t\tuserId: string,\n\t\tstatus: RoomUser[\"status\"],\n\t): Promise<void>;\n}\n",
|
|
23
|
-
"import type {\n\tEvent,\n\tRoom,\n\tRoomConfig,\n\tRoomState,\n\tRoomUser,\n} from \"../types/index.js\";\nimport { RoomManager } from \"./RoomManager.js\";\n\nexport class DefaultRoomManager extends RoomManager {\n\tasync createRoom(id: string, config: RoomConfig): Promise<Room> {\n\t\tconst room: Room = {\n\t\t\tid,\n\t\t\tname: config.name || id,\n\t\t\tcreatedAt: Date.now(),\n\t\t\tmaxUsers: config.maxUsers,\n\t\t\tmaxHistory: config.maxHistory,\n\t\t\tpermissions: config.permissions,\n\t\t\tmetadata: config.metadata || {},\n\t\t};\n\n\t\tconst roomState: RoomState = {\n\t\t\troom,\n\t\t\tusers: new Map(),\n\t\t\teventHistory: [],\n\t\t\tlocks: new Map(),\n\t\t};\n\n\t\tthis.rooms.set(id, roomState);\n\t\treturn room;\n\t}\n\n\tasync deleteRoom(id: string): Promise<void> {\n\t\tthis.rooms.delete(id);\n\t}\n\n\tasync joinRoom(roomId: string, user: RoomUser): Promise<void> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\tthrow new Error(`Room ${roomId} not found`);\n\t\t}\n\n\t\tif (\n\t\t\troomState.room.maxUsers &&\n\t\t\troomState.users.size >= roomState.room.maxUsers\n\t\t) {\n\t\t\tthrow new Error(`Room ${roomId} is full`);\n\t\t}\n\n\t\troomState.users.set(user.id, user);\n\t}\n\n\tasync leaveRoom(roomId: string, userId: string): Promise<void> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\treturn; // Room doesn't exist, nothing to do\n\t\t}\n\n\t\troomState.users.delete(userId);\n\t}\n\n\tasync broadcastToRoom(\n\t\troomId: string,\n\t\tevent: Event,\n\t\t_excludeUserId?: string,\n\t): Promise<void> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\tthrow new Error(`Room ${roomId} not found`);\n\t\t}\n\n\t\t// In a real implementation, this would broadcast to connected clients\n\t\t// For now, we'll just store the event in history\n\t\tawait this.addEventToHistory(roomId, event);\n\t}\n\n\tasync getRoomState(roomId: string): Promise<RoomState | null> {\n\t\treturn this.rooms.get(roomId) || null;\n\t}\n\n\tasync getUsersInRoom(roomId: string): Promise<RoomUser[]> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn Array.from(roomState.users.values());\n\t}\n\n\tasync addEventToHistory(roomId: string, event: Event): Promise<void> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\tthrow new Error(`Room ${roomId} not found`);\n\t\t}\n\n\t\troomState.eventHistory.push(event);\n\n\t\t// Trim history if needed\n\t\tif (\n\t\t\troomState.room.maxHistory &&\n\t\t\troomState.eventHistory.length > roomState.room.maxHistory\n\t\t) {\n\t\t\troomState.eventHistory = roomState.eventHistory.slice(\n\t\t\t\t-roomState.room.maxHistory,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync getEventHistory(roomId: string, limit?: number): Promise<Event[]> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst history = roomState.eventHistory;\n\t\treturn limit ? history.slice(-limit) : history;\n\t}\n\n\tasync updateUserStatus(\n\t\troomId: string,\n\t\tuserId: string,\n\t\tstatus: RoomUser[\"status\"],\n\t): Promise<void> {\n\t\tconst roomState = this.rooms.get(roomId);\n\t\tif (!roomState) {\n\t\t\tthrow new Error(`Room ${roomId} not found`);\n\t\t}\n\n\t\tconst user = roomState.users.get(userId);\n\t\tif (user) {\n\t\t\tuser.status = status;\n\t\t\tuser.lastActivity = Date.now();\n\t\t}\n\t}\n}\n",
|
|
24
25
|
"// EventData represents any type of data that can be emitted as an event\nexport type EventData = unknown;\n\nexport type EventListener<T = EventData> = (data: T) => void | Promise<void>;\nexport type UnsubscribeFn = () => void;\n\nexport class TypedEventEmitter<TEvents extends Record<string, EventData>> {\n\t// Use unknown type for storage, will be cast appropriately when called\n\tprivate listeners = new Map<keyof TEvents, Set<EventListener<EventData>>>();\n\tprivate onceListeners = new Map<\n\t\tkeyof TEvents,\n\t\tSet<EventListener<EventData>>\n\t>();\n\n\ton<K extends keyof TEvents>(\n\t\tevent: K,\n\t\tlistener: EventListener<TEvents[K]>,\n\t): UnsubscribeFn {\n\t\tif (!this.listeners.has(event)) {\n\t\t\tthis.listeners.set(event, new Set());\n\t\t}\n\t\tthis.listeners.get(event)!.add(listener as EventListener<EventData>);\n\n\t\treturn () => this.off(event, listener);\n\t}\n\n\tonce<K extends keyof TEvents>(\n\t\tevent: K,\n\t\tlistener: EventListener<TEvents[K]>,\n\t): UnsubscribeFn {\n\t\tif (!this.onceListeners.has(event)) {\n\t\t\tthis.onceListeners.set(event, new Set());\n\t\t}\n\t\tthis.onceListeners.get(event)!.add(listener as EventListener<EventData>);\n\n\t\treturn () => this.off(event, listener);\n\t}\n\n\toff<K extends keyof TEvents>(\n\t\tevent: K,\n\t\tlistener: EventListener<TEvents[K]>,\n\t): void {\n\t\tthis.listeners.get(event)?.delete(listener as EventListener<EventData>);\n\t\tthis.onceListeners.get(event)?.delete(listener as EventListener<EventData>);\n\t}\n\n\tasync emit<K extends keyof TEvents>(\n\t\tevent: K,\n\t\tdata: TEvents[K],\n\t): Promise<void> {\n\t\tconst listeners = this.listeners.get(event);\n\t\tconst onceListeners = this.onceListeners.get(event);\n\n\t\tif (onceListeners) {\n\t\t\tconst listenersToCall = Array.from(onceListeners);\n\t\t\tthis.onceListeners.delete(event);\n\t\t\tfor (const listener of listenersToCall) {\n\t\t\t\tawait listener(data);\n\t\t\t}\n\t\t}\n\n\t\tif (listeners) {\n\t\t\tfor (const listener of Array.from(listeners)) {\n\t\t\t\tawait listener(data);\n\t\t\t}\n\t\t}\n\t}\n\n\tremoveAllListeners(event?: keyof TEvents): void {\n\t\tif (event) {\n\t\t\tthis.listeners.delete(event);\n\t\t\tthis.onceListeners.delete(event);\n\t\t} else {\n\t\t\tthis.listeners.clear();\n\t\t\tthis.onceListeners.clear();\n\t\t}\n\t}\n\n\tlistenerCount(event: keyof TEvents): number {\n\t\tconst regular = this.listeners.get(event)?.size ?? 0;\n\t\tconst once = this.onceListeners.get(event)?.size ?? 0;\n\t\treturn regular + once;\n\t}\n}\n",
|
|
25
26
|
"import type { IAuthAdapter } from \"../../abstractions/AuthAdapter.js\";\nimport type { TokenPayload } from \"../../types/index.js\";\n\nexport class MockAuthAdapter implements IAuthAdapter {\n\tprivate tokens: Map<string, TokenPayload> = new Map();\n\tprivate revokedTokens: Set<string> = new Set();\n\tprivate simulateLatency: number = 0;\n\tprivate shouldFailAuth: boolean = false;\n\tprivate tokenCounter: number = 0;\n\tprivate currentToken: string | null = null;\n\n\tconstructor(options?: {\n\t\tsimulateLatency?: number;\n\t\tshouldFailAuth?: boolean;\n\t}) {\n\t\tthis.simulateLatency = options?.simulateLatency ?? 0;\n\t\tthis.shouldFailAuth = options?.shouldFailAuth ?? false;\n\t}\n\n\tasync validateToken(token: string): Promise<TokenPayload> {\n\t\tawait this.simulateDelay();\n\n\t\tif (this.shouldFailAuth) {\n\t\t\tthrow new Error(\"Mock auth validation failed\");\n\t\t}\n\n\t\tif (this.revokedTokens.has(token)) {\n\t\t\tthrow new Error(\"Token has been revoked\");\n\t\t}\n\n\t\tconst payload = this.tokens.get(token);\n\t\tif (!payload) {\n\t\t\tthrow new Error(\"Invalid token\");\n\t\t}\n\n\t\t// Check expiration\n\t\tif (payload.expiresAt && payload.expiresAt < Date.now()) {\n\t\t\tthis.tokens.delete(token);\n\t\t\tthrow new Error(\"Token expired\");\n\t\t}\n\n\t\treturn payload;\n\t}\n\n\tasync generateToken(payload: TokenPayload): Promise<string> {\n\t\tawait this.simulateDelay();\n\n\t\tif (this.shouldFailAuth) {\n\t\t\tthrow new Error(\"Mock token generation failed\");\n\t\t}\n\n\t\tconst token = `mock-token-${++this.tokenCounter}`;\n\n\t\t// Set default expiration to 1 hour if not specified\n\t\tconst expiresAt = payload.expiresAt ?? Date.now() + 3600000;\n\n\t\tthis.tokens.set(token, { ...payload, expiresAt });\n\t\treturn token;\n\t}\n\n\tasync refreshToken(token: string): Promise<string> {\n\t\tawait this.simulateDelay();\n\n\t\tif (this.shouldFailAuth) {\n\t\t\tthrow new Error(\"Mock token refresh failed\");\n\t\t}\n\n\t\tconst payload = await this.validateToken(token);\n\n\t\t// Revoke old token\n\t\tawait this.revokeToken(token);\n\n\t\t// Generate new token with extended expiration\n\t\tconst newPayload = {\n\t\t\t...payload,\n\t\t\texpiresAt: Date.now() + 3600000, // 1 hour from now\n\t\t};\n\n\t\treturn this.generateToken(newPayload);\n\t}\n\n\tasync revokeToken(token: string): Promise<void> {\n\t\tawait this.simulateDelay();\n\n\t\tif (this.shouldFailAuth) {\n\t\t\tthrow new Error(\"Mock token revocation failed\");\n\t\t}\n\n\t\tthis.tokens.delete(token);\n\t\tthis.revokedTokens.add(token);\n\t}\n\n\tgetCurrentToken(): string | null {\n\t\treturn this.currentToken;\n\t}\n\n\tisAuthRequired(): boolean {\n\t\treturn false; // Mock adapter doesn't require auth by default\n\t}\n\n\tgetAuthTimeout(): number {\n\t\treturn 10000; // 10 seconds for testing\n\t}\n\n\t// Test helper methods\n\tprivate async simulateDelay(): Promise<void> {\n\t\tif (this.simulateLatency > 0) {\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, this.simulateLatency));\n\t\t}\n\t}\n\n\t/**\n\t * Create and store a test token for a user\n\t */\n\tasync createTestToken(\n\t\tuserId: string,\n\t\toptions?: {\n\t\t\tpermissions?: string[];\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t\texpiresIn?: number;\n\t\t},\n\t): Promise<string> {\n\t\tconst payload: TokenPayload = {\n\t\t\tuserId,\n\t\t\tpermissions: options?.permissions ?? [\"read\", \"write\"],\n\t\t\tmetadata: options?.metadata,\n\t\t\texpiresAt: options?.expiresIn\n\t\t\t\t? Date.now() + options.expiresIn\n\t\t\t\t: undefined,\n\t\t};\n\t\tconst token = await this.generateToken(payload);\n\t\tthis.currentToken = token;\n\t\treturn token;\n\t}\n\n\tgetTokenCount(): number {\n\t\treturn this.tokens.size;\n\t}\n\n\tgetRevokedTokenCount(): number {\n\t\treturn this.revokedTokens.size;\n\t}\n\n\tclearTokens(): void {\n\t\tthis.tokens.clear();\n\t\tthis.revokedTokens.clear();\n\t\tthis.currentToken = null;\n\t}\n\n\tsetFailAuth(fail: boolean): void {\n\t\tthis.shouldFailAuth = fail;\n\t}\n\n\tsetCurrentToken(token: string | null): void {\n\t\tthis.currentToken = token;\n\t}\n}\n",
|
|
26
27
|
"/**\n * Mock RTCDataChannel for simulation testing\n *\n * Simulates WebRTC data channel behavior without actual network I/O.\n * Supports linking two channels for bidirectional message passing.\n */\n\nexport type RTCDataChannelState = \"connecting\" | \"open\" | \"closing\" | \"closed\";\n\nexport interface MockRTCDataChannelConfig {\n\t/**\n\t * Simulated message delivery latency (ms)\n\t * @default 1\n\t */\n\tsimulateLatency?: number;\n\n\t/**\n\t * Maximum message size in bytes\n\t * @default 262144 (256 KB)\n\t */\n\tmaxMessageSize?: number;\n}\n\nexport class MockRTCDataChannel {\n\tpublic readonly label: string;\n\tpublic readonly ordered: boolean;\n\tpublic readonly id: number;\n\n\tprivate _readyState: RTCDataChannelState = \"connecting\";\n\tprivate _bufferedAmount = 0;\n\tprivate _linkedChannel: MockRTCDataChannel | null = null;\n\tprivate messageQueue: Array<string | ArrayBuffer> = [];\n\tprivate config: Required<MockRTCDataChannelConfig>;\n\tprivate static channelIdCounter = 0;\n\n\t// Event handlers\n\tpublic onopen: (() => void) | null = null;\n\tpublic onclose: (() => void) | null = null;\n\tpublic onerror: ((event: { error: Error }) => void) | null = null;\n\tpublic onmessage: ((event: { data: string | ArrayBuffer }) => void) | null =\n\t\tnull;\n\tpublic onbufferedamountlow: (() => void) | null = null;\n\n\tpublic bufferedAmountLowThreshold = 0;\n\n\tconstructor(\n\t\tlabel: string,\n\t\toptions?: { ordered?: boolean; id?: number },\n\t\tconfig?: MockRTCDataChannelConfig,\n\t) {\n\t\tthis.label = label;\n\t\tthis.ordered = options?.ordered ?? true;\n\t\tthis.id = options?.id ?? MockRTCDataChannel.channelIdCounter++;\n\t\tthis.config = {\n\t\t\tsimulateLatency: config?.simulateLatency ?? 1,\n\t\t\tmaxMessageSize: config?.maxMessageSize ?? 262144,\n\t\t};\n\t}\n\n\tget readyState(): RTCDataChannelState {\n\t\treturn this._readyState;\n\t}\n\n\tget bufferedAmount(): number {\n\t\treturn this._bufferedAmount;\n\t}\n\n\t/**\n\t * Send data to the linked peer channel\n\t */\n\tsend(data: string | ArrayBuffer): void {\n\t\tif (this._readyState !== \"open\") {\n\t\t\tthrow new Error(`Cannot send on channel in state: ${this._readyState}`);\n\t\t}\n\n\t\tconst size = typeof data === \"string\" ? data.length : data.byteLength;\n\n\t\tif (size > this.config.maxMessageSize) {\n\t\t\tthrow new Error(\n\t\t\t\t`Message size ${size} exceeds maximum ${this.config.maxMessageSize}`,\n\t\t\t);\n\t\t}\n\n\t\tthis._bufferedAmount += size;\n\n\t\t// Deliver to linked channel\n\t\tif (this._linkedChannel && this._linkedChannel._readyState === \"open\") {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._bufferedAmount -= size;\n\n\t\t\t\t// Check buffered amount low threshold\n\t\t\t\tif (this._bufferedAmount <= this.bufferedAmountLowThreshold) {\n\t\t\t\t\tthis.onbufferedamountlow?.();\n\t\t\t\t}\n\n\t\t\t\tthis._linkedChannel?.onmessage?.({ data });\n\t\t\t}, this.config.simulateLatency);\n\t\t} else {\n\t\t\t// Queue for later delivery when channel opens\n\t\t\tthis.messageQueue.push(data);\n\t\t}\n\t}\n\n\t/**\n\t * Close the data channel\n\t */\n\tclose(): void {\n\t\tif (this._readyState === \"closed\" || this._readyState === \"closing\") {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._readyState = \"closing\";\n\n\t\tsetTimeout(() => {\n\t\t\tthis._readyState = \"closed\";\n\t\t\tthis.onclose?.();\n\n\t\t\t// Notify linked channel\n\t\t\tif (this._linkedChannel && this._linkedChannel._readyState !== \"closed\") {\n\t\t\t\tthis._linkedChannel._handleRemoteClose();\n\t\t\t}\n\t\t}, this.config.simulateLatency);\n\t}\n\n\t// Internal methods (called by MockRTCPeerConnection)\n\n\t/**\n\t * Link this channel to a remote channel for message passing\n\t * @internal\n\t */\n\t_linkChannel(channel: MockRTCDataChannel): void {\n\t\tthis._linkedChannel = channel;\n\n\t\t// Deliver any queued messages once linked and both are open\n\t\tif (this._readyState === \"open\" && channel._readyState === \"open\") {\n\t\t\tthis._flushQueue();\n\t\t}\n\t}\n\n\t/**\n\t * Open the channel (called when peer connection is established)\n\t * @internal\n\t */\n\t_open(): void {\n\t\tif (this._readyState === \"connecting\") {\n\t\t\tthis._readyState = \"open\";\n\t\t\tthis.onopen?.();\n\n\t\t\t// Flush queued messages\n\t\t\tif (this._linkedChannel?._readyState === \"open\") {\n\t\t\t\tthis._flushQueue();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Handle remote channel closing\n\t * @internal\n\t */\n\t_handleRemoteClose(): void {\n\t\tif (this._readyState !== \"closed\" && this._readyState !== \"closing\") {\n\t\t\tthis._readyState = \"closed\";\n\t\t\tthis.onclose?.();\n\t\t}\n\t}\n\n\t/**\n\t * Get the linked channel (for testing)\n\t * @internal\n\t */\n\t_getLinkedChannel(): MockRTCDataChannel | null {\n\t\treturn this._linkedChannel;\n\t}\n\n\t/**\n\t * Flush queued messages to linked channel\n\t */\n\tprivate _flushQueue(): void {\n\t\tfor (const data of this.messageQueue) {\n\t\t\tconst size = typeof data === \"string\" ? data.length : data.byteLength;\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._bufferedAmount -= size;\n\t\t\t\tthis._linkedChannel?.onmessage?.({ data });\n\t\t\t}, this.config.simulateLatency);\n\t\t}\n\t\tthis.messageQueue = [];\n\t}\n\n\t/**\n\t * Reset the channel ID counter (for testing)\n\t */\n\tstatic resetIdCounter(): void {\n\t\tMockRTCDataChannel.channelIdCounter = 0;\n\t}\n}\n",
|
|
@@ -38,10 +39,10 @@
|
|
|
38
39
|
"/**\n * Presence Client Helper\n *\n * Simplifies client-side presence integration for web/Electron applications.\n * Automatically handles connection, authentication, and presence event forwarding.\n */\n\nimport { TypedEventEmitter } from \"../abstractions/EventEmitter.js\";\nimport type { UserPresence } from \"../types/presence.js\";\nimport { BaseClient, type ClientConfig } from \"./BaseClient.js\";\n\nexport interface PresenceClientConfig {\n\t/**\n\t * Base client configuration\n\t * Provide the full client config including transport and auth adapters\n\t */\n\tclientConfig: ClientConfig;\n\n\t/**\n\t * WebSocket URL to connect to\n\t */\n\twsUrl: string;\n\n\t/**\n\t * Automatically connect on construction\n\t * @default false\n\t */\n\tautoConnect?: boolean;\n\n\t/**\n\t * Automatically reconnect on disconnect\n\t * @default true\n\t */\n\tautoReconnect?: boolean;\n\n\t/**\n\t * Global presence room ID\n\t * @default '__global_presence__'\n\t */\n\tglobalRoomId?: string;\n}\n\nexport interface PresenceClientEvents {\n\t/**\n\t * User came online\n\t */\n\tuserOnline: { userId: string; devices: unknown[] };\n\n\t/**\n\t * User went offline\n\t */\n\tuserOffline: { userId: string };\n\n\t/**\n\t * User's presence status changed\n\t */\n\tstatusChanged: { userId: string; status: string; statusMessage?: string };\n\n\t/**\n\t * Connected to presence system\n\t */\n\tconnected: {};\n\n\t/**\n\t * Disconnected from presence system\n\t */\n\tdisconnected: {};\n\n\t/**\n\t * Error occurred\n\t */\n\terror: { error: Error };\n\n\t[key: string]: unknown;\n}\n\n/**\n * High-level presence client for easy integration\n *\n * Example:\n * ```typescript\n * import { PresenceClient } from '@principal-ai/control-tower-core';\n * import { WebSocketClientTransportAdapter } from '@principal-ai/control-tower-core';\n * import { ClientBuilder } from '@principal-ai/control-tower-core';\n *\n * const transport = new WebSocketClientTransportAdapter();\n *\n * const client = new ClientBuilder()\n * .withTransport(transport)\n * .build();\n *\n * const presence = new PresenceClient({\n * clientConfig: client,\n * wsUrl: 'ws://localhost:3000/ws',\n * autoConnect: true,\n * autoReconnect: true\n * });\n *\n * presence.on('userOnline', (data) => {\n * console.log(`${data.userId} came online`);\n * });\n *\n * presence.on('userOffline', (data) => {\n * console.log(`${data.userId} went offline`);\n * });\n * ```\n */\nexport class PresenceClient extends TypedEventEmitter<PresenceClientEvents> {\n\tprivate client: BaseClient;\n\tprivate wsUrl: string;\n\tprivate autoReconnectEnabled: boolean;\n\tprivate globalRoomId: string;\n\tprivate reconnectTimeout?: NodeJS.Timeout;\n\n\tconstructor(config: PresenceClientConfig) {\n\t\tsuper();\n\n\t\tthis.wsUrl = config.wsUrl;\n\t\tthis.autoReconnectEnabled = config.autoReconnect ?? true;\n\t\tthis.globalRoomId = config.globalRoomId ?? \"__global_presence__\";\n\n\t\t// Create base client\n\t\tthis.client = new BaseClient(config.clientConfig);\n\n\t\tthis.setupEventForwarding();\n\n\t\tif (config.autoConnect) {\n\t\t\tvoid this.connect();\n\t\t}\n\t}\n\n\t/**\n\t * Connect to the presence system\n\t */\n\tasync connect(): Promise<void> {\n\t\ttry {\n\t\t\t// Connect base client\n\t\t\tawait this.client.connect(this.wsUrl);\n\n\t\t\t// Join global presence room\n\t\t\tawait this.client.joinRoom(this.globalRoomId);\n\n\t\t\tawait this.emit(\"connected\", {});\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", { error: error as Error });\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Disconnect from the presence system\n\t */\n\tasync disconnect(): Promise<void> {\n\t\t// Disable auto-reconnect\n\t\tthis.autoReconnectEnabled = false;\n\n\t\t// Clear any pending reconnect\n\t\tif (this.reconnectTimeout) {\n\t\t\tclearTimeout(this.reconnectTimeout);\n\t\t\tthis.reconnectTimeout = undefined;\n\t\t}\n\n\t\ttry {\n\t\t\t// Leave global presence room\n\t\t\tawait this.client.leaveRoom();\n\n\t\t\t// Disconnect\n\t\t\tawait this.client.disconnect();\n\n\t\t\tawait this.emit(\"disconnected\", {});\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", { error: error as Error });\n\t\t}\n\t}\n\n\t/**\n\t * Get all online users\n\t *\n\t * Note: This requires a corresponding API endpoint on your server.\n\t */\n\tasync getOnlineUsers(): Promise<UserPresence[]> {\n\t\t// This assumes you have a REST API endpoint for fetching online users\n\t\t// You can customize this based on your server implementation\n\t\tthrow new Error(\n\t\t\t\"getOnlineUsers() requires a REST API endpoint. \" +\n\t\t\t\t\"Implement this method based on your server API.\",\n\t\t);\n\t}\n\n\t/**\n\t * Set user status\n\t *\n\t * Note: This requires a corresponding API endpoint on your server.\n\t */\n\tasync setStatus(status: \"online\" | \"away\", message?: string): Promise<void> {\n\t\t// This assumes you have a REST API endpoint for setting status\n\t\t// You can customize this based on your server implementation\n\t\tthrow new Error(\n\t\t\t\"setStatus() requires a REST API endpoint. \" +\n\t\t\t\t\"Implement this method based on your server API.\",\n\t\t);\n\t}\n\n\t/**\n\t * Set visibility\n\t *\n\t * Note: This requires a corresponding API endpoint on your server.\n\t */\n\tasync setVisibility(visible: boolean): Promise<void> {\n\t\t// This assumes you have a REST API endpoint for setting visibility\n\t\t// You can customize this based on your server implementation\n\t\tthrow new Error(\n\t\t\t\"setVisibility() requires a REST API endpoint. \" +\n\t\t\t\t\"Implement this method based on your server API.\",\n\t\t);\n\t}\n\n\t/**\n\t * Get the underlying BaseClient\n\t */\n\tgetClient(): BaseClient {\n\t\treturn this.client;\n\t}\n\n\t/**\n\t * Check if connected\n\t */\n\tisConnected(): boolean {\n\t\t// BaseClient doesn't expose getState(), so we check internal state via a workaround\n\t\t// In practice, you can track connection state via events\n\t\treturn (this.client as any).connectionState === \"connected\";\n\t}\n\n\t/**\n\t * Set up event forwarding from BaseClient\n\t * @private\n\t */\n\tprivate setupEventForwarding(): void {\n\t\t// Forward presence events with simplified API\n\t\tthis.client.on(\"presence:user_online\", (data) => {\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tconst payload = data as { userId: string; devices?: unknown[] };\n\t\t\t\tvoid this.emit(\"userOnline\", {\n\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\tdevices: payload.devices || [],\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.client.on(\"presence:user_offline\", (data) => {\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tconst payload = data as { userId: string };\n\t\t\t\tvoid this.emit(\"userOffline\", { userId: payload.userId });\n\t\t\t}\n\t\t});\n\n\t\tthis.client.on(\"presence:status_changed\", (data) => {\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tconst payload = data as {\n\t\t\t\t\tuserId: string;\n\t\t\t\t\tstatus: string;\n\t\t\t\t\tstatusMessage?: string;\n\t\t\t\t};\n\t\t\t\tvoid this.emit(\"statusChanged\", {\n\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\tstatus: payload.status,\n\t\t\t\t\tstatusMessage: payload.statusMessage,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Handle disconnection\n\t\tthis.client.on(\"disconnected\", () => {\n\t\t\tvoid this.emit(\"disconnected\", {});\n\n\t\t\t// Auto-reconnect if enabled\n\t\t\tif (this.autoReconnectEnabled) {\n\t\t\t\tthis.reconnectTimeout = setTimeout(() => {\n\t\t\t\t\tvoid this.connect().catch((error) => {\n\t\t\t\t\t\tvoid this.emit(\"error\", { error: error as Error });\n\t\t\t\t\t});\n\t\t\t\t}, 5000);\n\t\t\t}\n\t\t});\n\n\t\t// Forward errors\n\t\tthis.client.on(\"error\", (data) => {\n\t\t\tif (data && typeof data === \"object\" && \"error\" in data) {\n\t\t\t\tconst payload = data as { error: Error };\n\t\t\t\tvoid this.emit(\"error\", { error: payload.error });\n\t\t\t}\n\t\t});\n\t}\n}\n",
|
|
39
40
|
"/**\n * Experimental API Types\n *\n * ⚠️ WARNING: Types in this file are experimental and may change or be removed\n * without major version bumps. Use only for prototyping and internal tooling.\n *\n * For production use, submit a feature request to graduate these APIs:\n * @see docs/FEATURE_REQUEST_TEMPLATE.md\n */\n\nimport type { ConnectedClient } from \"../server/BaseServer.js\";\n\n/**\n * Configuration for experimental features\n */\nexport interface ExperimentalFeatureConfig {\n\t/**\n\t * Enable experimental broadcast APIs\n\t *\n\t * ⚠️ DEVELOPMENT USE ONLY\n\t * Allows use of server.experimental.broadcast() and related methods\n\t *\n\t * @default false\n\t */\n\tenableBroadcast?: boolean;\n\n\t/**\n\t * Enable runtime warnings for experimental API usage\n\t *\n\t * When true, logs warnings each time an experimental API is called\n\t * Useful for tracking experimental API usage in development\n\t *\n\t * @default true\n\t */\n\twarnOnExperimentalUse?: boolean;\n\n\t/**\n\t * Track experimental API usage metrics\n\t *\n\t * When true, emits events for experimental API calls that can be\n\t * monitored to understand usage patterns\n\t *\n\t * @default false\n\t */\n\ttrackUsageMetrics?: boolean;\n}\n\n/**\n * Client predicate function for filtering broadcasts\n *\n * @param client - The connected client to evaluate\n * @returns true if the client should receive the broadcast\n *\n * @example\n * // Broadcast only to admin users\n * const isAdmin: ClientPredicate = (client) => {\n * return getUserRole(client.userId) === 'admin';\n * };\n */\nexport type ClientPredicate = (client: ConnectedClient) => boolean;\n\n/**\n * Result of a broadcast operation\n */\nexport interface BroadcastResult {\n\t/**\n\t * Number of clients that successfully received the message\n\t */\n\tsent: number;\n\n\t/**\n\t * Number of clients that failed to receive the message\n\t */\n\tfailed: number;\n\n\t/**\n\t * Errors that occurred during broadcast\n\t */\n\terrors: Array<{\n\t\tclientId: string;\n\t\terror: Error;\n\t}>;\n\n\t/**\n\t * Total time taken to complete the broadcast (milliseconds)\n\t */\n\tdurationMs: number;\n}\n\n/**\n * Options for broadcast operations\n */\nexport interface BroadcastOptions {\n\t/**\n\t * Whether to continue broadcasting even if some sends fail\n\t *\n\t * @default true\n\t */\n\tcontinueOnError?: boolean;\n\n\t/**\n\t * Timeout for each individual send operation (milliseconds)\n\t *\n\t * @default 5000\n\t */\n\tsendTimeout?: number;\n\n\t/**\n\t * Whether to include detailed error information in the result\n\t *\n\t * @default false\n\t */\n\tincludeErrors?: boolean;\n}\n\n/**\n * Experimental API usage metrics event\n */\nexport interface ExperimentalUsageEvent {\n\t/**\n\t * The experimental method that was called\n\t */\n\tmethod:\n\t\t| \"broadcast\"\n\t\t| \"broadcastAuthenticated\"\n\t\t| \"broadcastWhere\"\n\t\t| \"sendToUsers\";\n\n\t/**\n\t * Message type being broadcast\n\t */\n\tmessageType: string;\n\n\t/**\n\t * Number of recipients\n\t */\n\trecipientCount: number;\n\n\t/**\n\t * Timestamp of the call\n\t */\n\ttimestamp: number;\n\n\t/**\n\t * Size of the message payload (bytes)\n\t */\n\tpayloadSize?: number;\n}\n\n/**\n * Error thrown when experimental features are not enabled\n */\nexport class ExperimentalFeatureError extends Error {\n\tconstructor(\n\t\tpublic readonly feature: string,\n\t\tpublic readonly configKey: keyof ExperimentalFeatureConfig,\n\t) {\n\t\tsuper(\n\t\t\t`Experimental feature '${feature}' is not enabled.\\n\\n` +\n\t\t\t\t`To enable, set '${String(configKey)}: true' in your server configuration:\\n\\n` +\n\t\t\t\t` const server = new ServerBuilder()\\n` +\n\t\t\t\t` .withExperimentalFeatures({ ${String(configKey)}: true })\\n` +\n\t\t\t\t` .build();\\n\\n` +\n\t\t\t\t`⚠️ WARNING: Experimental APIs are for development only.\\n` +\n\t\t\t\t`For production use, submit a feature request:\\n` +\n\t\t\t\t`https://github.com/your-org/control-tower-core/issues/new\\n\\n` +\n\t\t\t\t`See docs/EXPERIMENTAL_BROADCAST.md for details.`,\n\t\t);\n\t\tthis.name = \"ExperimentalFeatureError\";\n\t}\n}\n",
|
|
40
41
|
"/**\n * Experimental Broadcast APIs\n *\n * ⚠️ DEVELOPMENT USE ONLY\n *\n * This namespace provides experimental broadcast methods for rapid prototyping\n * and internal tooling. These APIs may change or be removed without major version bumps.\n *\n * For production use, submit a feature request to graduate these APIs to first-class APIs.\n *\n * @see docs/EXPERIMENTAL_BROADCAST.md\n * @see docs/FEATURE_REQUEST_TEMPLATE.md\n */\n\nimport type {\n\tBroadcastOptions,\n\tBroadcastResult,\n\tClientPredicate,\n\tExperimentalFeatureConfig,\n\tExperimentalUsageEvent,\n} from \"../types/experimental.js\";\nimport { ExperimentalFeatureError } from \"../types/experimental.js\";\nimport type { Message } from \"../types/index.js\";\nimport type { ConnectedClient } from \"./BaseServer.js\";\n\n/**\n * Experimental API namespace\n *\n * Provides broadcast methods that bypass normal room isolation.\n * Requires explicit opt-in via configuration.\n */\nexport class ExperimentalAPI {\n\tprivate readonly config: ExperimentalFeatureConfig;\n\tprivate readonly logger?: {\n\t\twarn: (message: string, ...args: unknown[]) => void;\n\t};\n\tprivate readonly emitMetric?: (event: ExperimentalUsageEvent) => void;\n\tprivate readonly getClients: () => ConnectedClient[];\n\tprivate readonly sendToClient: (\n\t\tclientId: string,\n\t\tmessage: Record<string, unknown>,\n\t) => Promise<void>;\n\n\tconstructor(options: {\n\t\tconfig: ExperimentalFeatureConfig;\n\t\tlogger?: { warn: (message: string, ...args: unknown[]) => void };\n\t\temitMetric?: (event: ExperimentalUsageEvent) => void;\n\t\tgetClients: () => ConnectedClient[];\n\t\tsendToClient: (\n\t\t\tclientId: string,\n\t\t\tmessage: Record<string, unknown>,\n\t\t) => Promise<void>;\n\t}) {\n\t\tthis.config = options.config;\n\t\tthis.logger = options.logger;\n\t\tthis.emitMetric = options.emitMetric;\n\t\tthis.getClients = options.getClients;\n\t\tthis.sendToClient = options.sendToClient;\n\t}\n\n\t/**\n\t * Broadcasts a message to all connected clients\n\t *\n\t * ⚠️ WARNING: This bypasses room isolation and sends to every connected client.\n\t *\n\t * @experimental\n\t * @param message - Message to broadcast\n\t * @param options - Broadcast options\n\t * @returns Broadcast result with success/failure counts\n\t *\n\t * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n\t *\n\t * @example\n\t * ```typescript\n\t * await server.experimental.broadcast({\n\t * type: 'system:announcement',\n\t * data: { message: 'Server maintenance in 5 minutes' }\n\t * });\n\t * ```\n\t */\n\tasync broadcast(\n\t\tmessage: Omit<Message, \"id\" | \"timestamp\">,\n\t\toptions?: BroadcastOptions,\n\t): Promise<BroadcastResult> {\n\t\tthis.ensureEnabled(\"broadcast\", \"enableBroadcast\");\n\t\tthis.warnIfEnabled(\"broadcast()\");\n\n\t\tconst clients = this.getClients();\n\n\t\tconst result = await this.broadcastToClients(clients, message, options);\n\n\t\tthis.trackUsage(\"broadcast\", message.type, clients.length, message.payload);\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Broadcasts a message to all authenticated clients\n\t *\n\t * Skips unauthenticated connections. Useful for user-specific notifications.\n\t *\n\t * @experimental\n\t * @param message - Message to broadcast\n\t * @param options - Broadcast options\n\t * @returns Broadcast result with success/failure counts\n\t *\n\t * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n\t *\n\t * @example\n\t * ```typescript\n\t * await server.experimental.broadcastAuthenticated({\n\t * type: 'presence:user_online',\n\t * data: { userId: 'alice', status: 'online' }\n\t * });\n\t * ```\n\t */\n\tasync broadcastAuthenticated(\n\t\tmessage: Omit<Message, \"id\" | \"timestamp\">,\n\t\toptions?: BroadcastOptions,\n\t): Promise<BroadcastResult> {\n\t\tthis.ensureEnabled(\"broadcastAuthenticated\", \"enableBroadcast\");\n\t\tthis.warnIfEnabled(\"broadcastAuthenticated()\");\n\n\t\tconst clients = this.getClients().filter((client) => client.authenticated);\n\n\t\tconst result = await this.broadcastToClients(clients, message, options);\n\n\t\tthis.trackUsage(\n\t\t\t\"broadcastAuthenticated\",\n\t\t\tmessage.type,\n\t\t\tclients.length,\n\t\t\tmessage.payload,\n\t\t);\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Broadcasts a message to clients matching a predicate function\n\t *\n\t * Allows custom filtering logic for targeted broadcasts.\n\t *\n\t * @experimental\n\t * @param predicate - Function to filter clients\n\t * @param message - Message to broadcast\n\t * @param options - Broadcast options\n\t * @returns Broadcast result with success/failure counts\n\t *\n\t * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n\t *\n\t * @example\n\t * ```typescript\n\t * // Broadcast only to admin users\n\t * await server.experimental.broadcastWhere(\n\t * (client) => getUserRole(client.userId) === 'admin',\n\t * {\n\t * type: 'admin:alert',\n\t * data: { message: 'Critical system event' }\n\t * }\n\t * );\n\t * ```\n\t */\n\tasync broadcastWhere(\n\t\tpredicate: ClientPredicate,\n\t\tmessage: Omit<Message, \"id\" | \"timestamp\">,\n\t\toptions?: BroadcastOptions,\n\t): Promise<BroadcastResult> {\n\t\tthis.ensureEnabled(\"broadcastWhere\", \"enableBroadcast\");\n\t\tthis.warnIfEnabled(\"broadcastWhere()\");\n\n\t\tconst clients = this.getClients().filter(predicate);\n\n\t\tconst result = await this.broadcastToClients(clients, message, options);\n\n\t\tthis.trackUsage(\n\t\t\t\"broadcastWhere\",\n\t\t\tmessage.type,\n\t\t\tclients.length,\n\t\t\tmessage.payload,\n\t\t);\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Sends a message to specific users by their user IDs\n\t *\n\t * Useful for direct notifications and cross-room messaging.\n\t *\n\t * @experimental\n\t * @param userIds - Array of user IDs to send to\n\t * @param message - Message to send\n\t * @param options - Broadcast options\n\t * @returns Broadcast result with success/failure counts\n\t *\n\t * @throws {ExperimentalFeatureError} If experimental.enableBroadcast is not enabled\n\t *\n\t * @example\n\t * ```typescript\n\t * await server.experimental.sendToUsers(\n\t * ['user123', 'user456'],\n\t * {\n\t * type: 'notification:mention',\n\t * data: { mentionedBy: 'alice', context: 'issue-42' }\n\t * }\n\t * );\n\t * ```\n\t */\n\tasync sendToUsers(\n\t\tuserIds: string[],\n\t\tmessage: Omit<Message, \"id\" | \"timestamp\">,\n\t\toptions?: BroadcastOptions,\n\t): Promise<BroadcastResult> {\n\t\tthis.ensureEnabled(\"sendToUsers\", \"enableBroadcast\");\n\t\tthis.warnIfEnabled(\"sendToUsers()\");\n\n\t\tconst userIdSet = new Set(userIds);\n\t\tconst clients = this.getClients().filter((client) =>\n\t\t\tuserIdSet.has(client.userId),\n\t\t);\n\n\t\tconst result = await this.broadcastToClients(clients, message, options);\n\n\t\tthis.trackUsage(\n\t\t\t\"sendToUsers\",\n\t\t\tmessage.type,\n\t\t\tclients.length,\n\t\t\tmessage.payload,\n\t\t);\n\n\t\treturn result;\n\t}\n\n\t// Private helper methods\n\n\tprivate ensureEnabled(\n\t\tfeature: string,\n\t\tconfigKey: keyof ExperimentalFeatureConfig,\n\t): void {\n\t\tif (!this.config[configKey]) {\n\t\t\tthrow new ExperimentalFeatureError(feature, configKey);\n\t\t}\n\t}\n\n\tprivate warnIfEnabled(method: string): void {\n\t\tif (this.config.warnOnExperimentalUse !== false) {\n\t\t\tthis.logger?.warn(\n\t\t\t\t`⚠️ Experimental API: server.experimental.${method} is for development only. ` +\n\t\t\t\t\t`See docs/EXPERIMENTAL_BROADCAST.md for details.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate trackUsage(\n\t\tmethod:\n\t\t\t| \"broadcast\"\n\t\t\t| \"broadcastAuthenticated\"\n\t\t\t| \"broadcastWhere\"\n\t\t\t| \"sendToUsers\",\n\t\tmessageType: string,\n\t\trecipientCount: number,\n\t\tpayload?: unknown,\n\t): void {\n\t\tif (this.config.trackUsageMetrics && this.emitMetric) {\n\t\t\tconst payloadSize = payload ? JSON.stringify(payload).length : undefined;\n\n\t\t\tthis.emitMetric({\n\t\t\t\tmethod,\n\t\t\t\tmessageType,\n\t\t\t\trecipientCount,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tpayloadSize,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async broadcastToClients(\n\t\tclients: ConnectedClient[],\n\t\tmessage: Omit<Message, \"id\" | \"timestamp\">,\n\t\toptions?: BroadcastOptions,\n\t): Promise<BroadcastResult> {\n\t\tconst startTime = Date.now();\n\t\tconst opts = {\n\t\t\tcontinueOnError: options?.continueOnError ?? true,\n\t\t\tsendTimeout: options?.sendTimeout ?? 5000,\n\t\t\tincludeErrors: options?.includeErrors ?? false,\n\t\t};\n\n\t\tconst fullMessage: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttimestamp: Date.now(),\n\t\t\ttype: message.type,\n\t\t\tpayload: message.payload,\n\t\t};\n\n\t\tlet sent = 0;\n\t\tlet failed = 0;\n\t\tconst errors: Array<{ clientId: string; error: Error }> = [];\n\n\t\tconst sendPromises = clients.map(async (client) => {\n\t\t\ttry {\n\t\t\t\t// Create timeout promise\n\t\t\t\tconst timeoutPromise = new Promise<never>((_, reject) => {\n\t\t\t\t\tsetTimeout(() => reject(new Error(\"Send timeout\")), opts.sendTimeout);\n\t\t\t\t});\n\n\t\t\t\t// Convert Message to Record<string, unknown> for sendToClient\n\t\t\t\tconst messageRecord: Record<string, unknown> = {\n\t\t\t\t\tid: fullMessage.id,\n\t\t\t\t\ttype: fullMessage.type,\n\t\t\t\t\tpayload: fullMessage.payload,\n\t\t\t\t\ttimestamp: fullMessage.timestamp,\n\t\t\t\t};\n\n\t\t\t\t// Race between send and timeout\n\t\t\t\tawait Promise.race([\n\t\t\t\t\tthis.sendToClient(client.id, messageRecord),\n\t\t\t\t\ttimeoutPromise,\n\t\t\t\t]);\n\n\t\t\t\tsent++;\n\t\t\t} catch (error) {\n\t\t\t\tfailed++;\n\t\t\t\tif (opts.includeErrors) {\n\t\t\t\t\terrors.push({\n\t\t\t\t\t\tclientId: client.id,\n\t\t\t\t\t\terror: error as Error,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (!opts.continueOnError) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tawait Promise.all(sendPromises);\n\n\t\treturn {\n\t\t\tsent,\n\t\t\tfailed,\n\t\t\terrors,\n\t\t\tdurationMs: Date.now() - startTime,\n\t\t};\n\t}\n\n\tprivate generateId(): string {\n\t\treturn `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\t}\n}\n",
|
|
41
|
-
"import type { Server as HttpServer } from \"http\";\nimport type { Server as HttpsServer } from \"https\";\nimport type { WebSocketServer } from \"ws\";\nimport type { IAuthAdapter } from \"../abstractions/AuthAdapter.js\";\nimport { TypedEventEmitter } from \"../abstractions/EventEmitter.js\";\nimport type { LockManager } from \"../abstractions/LockManager.js\";\nimport type { PresenceManager } from \"../abstractions/PresenceManager.js\";\nimport type { RoomManager } from \"../abstractions/RoomManager.js\";\nimport type { IStorageAdapter } from \"../abstractions/StorageAdapter.js\";\nimport type { ITransportAdapter } from \"../abstractions/TransportAdapter.js\";\nimport type {\n\tEvent,\n\tExperimentalFeatureConfig,\n\tExperimentalUsageEvent,\n\tLock,\n\tLockRequest,\n\tMessage,\n\tRoom,\n\tRoomConfig,\n\tRoomUser,\n} from \"../types/index.js\";\nimport { serializeRoomState } from \"../types/room.js\";\nimport { ExperimentalAPI } from \"./ExperimentalAPI.js\";\n\nexport interface ServerConfig {\n\ttransport: ITransportAdapter;\n\tauth?: IAuthAdapter;\n\tstorage?: IStorageAdapter;\n\troomManager: RoomManager;\n\tlockManager: LockManager;\n\tpresenceManager?: PresenceManager;\n\tdefaultRoomConfig?: Partial<RoomConfig>;\n\thttpServer?: HttpServer | HttpsServer;\n\twebSocketPath?: string;\n\twebSocketServer?: WebSocketServer;\n\texperimental?: ExperimentalFeatureConfig;\n}\n\nexport interface ConnectedClient {\n\tid: string;\n\tuserId: string;\n\t/**\n\t * Set of room IDs the client is currently in\n\t *\n\t * Multi-room support: A client can be in multiple rooms simultaneously.\n\t * This enables the two-tier architecture where clients can maintain\n\t * global presence while participating in multiple repository rooms.\n\t */\n\troomIds: Set<string>;\n\t/**\n\t * Legacy single-room accessor for backward compatibility\n\t *\n\t * Returns the first room the client is in, or null if not in any rooms.\n\t *\n\t * @deprecated Use roomIds for multi-room support\n\t */\n\troomId: string | null;\n\tauthenticated: boolean;\n\tconnectedAt: number;\n}\n\nexport interface ServerEvents {\n\tstarted: { port: number };\n\tstopped: {}; // eslint-disable-line @typescript-eslint/no-empty-object-type\n\tclient_connected: { client: ConnectedClient };\n\tclient_disconnected: { clientId: string; reason: string };\n\tclient_authenticated: {\n\t\tclientId: string;\n\t\tuserId: string;\n\t\tmetadata?: Record<string, unknown>;\n\t};\n\troom_created: { room: Room };\n\troom_deleted: { roomId: string };\n\tclient_joined_room: { clientId: string; roomId: string };\n\tclient_left_room: { clientId: string; roomId: string };\n\tevent_broadcast: { roomId: string; event: Event; fromClientId: string };\n\tlock_acquired: { lock: Lock; clientId: string };\n\tlock_released: { lockId: string; clientId: string };\n\terror: { error: Error; context?: string };\n\texperimental_usage: ExperimentalUsageEvent;\n\t// Presence events\n\tpresence_changed: { userId: string; status: string; timestamp: number };\n\tpresence_device_connected: {\n\t\tuserId: string;\n\t\tdeviceId: string;\n\t\ttimestamp: number;\n\t};\n\tpresence_device_disconnected: {\n\t\tuserId: string;\n\t\tdeviceId: string;\n\t\ttimestamp: number;\n\t};\n\tpresence_activity: { userId: string; deviceId: string; timestamp: number };\n\t[key: string]: unknown;\n}\n\nexport class BaseServer extends TypedEventEmitter<ServerEvents> {\n\tprivate transport: ITransportAdapter;\n\tprivate auth?: IAuthAdapter;\n\tprivate storage?: IStorageAdapter;\n\tprivate roomManager: RoomManager;\n\tprivate lockManager: LockManager;\n\tprivate presenceManager?: PresenceManager;\n\tprivate config: ServerConfig;\n\n\tprivate clients = new Map<string, ConnectedClient>();\n\tprivate clientMessageHandlers = new Map<\n\t\tstring,\n\t\t(message: Message) => Promise<void>\n\t>();\n\tprivate clientUserMap = new Map<string, string>(); // clientId -> userId\n\tprivate userClientMap = new Map<string, Set<string>>(); // userId -> Set<clientId>\n\tprivate running = false;\n\tprivate initialized = false;\n\tprivate mode: \"standalone\" | \"integration\";\n\tprivate heartbeatIntervalId?: NodeJS.Timeout;\n\n\t/**\n\t * Experimental APIs namespace\n\t *\n\t * ⚠️ WARNING: Experimental features are for development only.\n\t * APIs may change or be removed without major version bumps.\n\t *\n\t * @see docs/EXPERIMENTAL_BROADCAST.md\n\t */\n\tpublic readonly experimental: ExperimentalAPI;\n\n\tconstructor(config: ServerConfig) {\n\t\tsuper();\n\t\tthis.config = config;\n\t\tthis.transport = config.transport;\n\t\tthis.auth = config.auth;\n\t\tthis.storage = config.storage;\n\t\tthis.roomManager = config.roomManager;\n\t\tthis.lockManager = config.lockManager;\n\t\tthis.presenceManager = config.presenceManager;\n\n\t\t// Initialize experimental API namespace\n\t\tthis.experimental = new ExperimentalAPI({\n\t\t\tconfig: config.experimental || {\n\t\t\t\tenableBroadcast: false,\n\t\t\t\twarnOnExperimentalUse: true,\n\t\t\t\ttrackUsageMetrics: false,\n\t\t\t},\n\t\t\tlogger: console,\n\t\t\temitMetric: (event: ExperimentalUsageEvent) => {\n\t\t\t\tvoid this.emit(\"experimental_usage\", event);\n\t\t\t},\n\t\t\tgetClients: () => Array.from(this.clients.values()),\n\t\t\tsendToClient: (clientId: string, message: Record<string, unknown>) =>\n\t\t\t\tthis.sendToClient(clientId, message),\n\t\t});\n\n\t\t// Determine mode based on configuration\n\t\tthis.mode =\n\t\t\tconfig.httpServer || config.webSocketServer\n\t\t\t\t? \"integration\"\n\t\t\t\t: \"standalone\";\n\n\t\t// Connect auth adapter to transport if both exist and transport supports it\n\t\tif (this.auth && this.transport) {\n\t\t\tconst transportWithAuth = this.transport as ITransportAdapter & {\n\t\t\t\tsetAuthAdapter?: (auth: IAuthAdapter) => void;\n\t\t\t};\n\t\t\tif (typeof transportWithAuth.setAuthAdapter === \"function\") {\n\t\t\t\ttransportWithAuth.setAuthAdapter(this.auth);\n\t\t\t}\n\t\t}\n\n\t\t// Set up transport event handlers\n\t\tthis.transport.onMessage(this.handleTransportMessage.bind(this));\n\t\tthis.transport.onError(this.handleTransportError.bind(this));\n\t\tthis.transport.onClose(this.handleTransportClose.bind(this));\n\n\t\t// Start heartbeat processor if presence is enabled\n\t\tif (this.presenceManager?.isEnabled()) {\n\t\t\tthis.startHeartbeatProcessor();\n\t\t}\n\t}\n\n\t/**\n\t * Start periodic heartbeat processing for presence management\n\t */\n\tprivate startHeartbeatProcessor(): void {\n\t\tif (!this.presenceManager) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = this.presenceManager.getConfig();\n\t\tconst interval = config.heartbeatInterval;\n\n\t\tthis.heartbeatIntervalId = setInterval(async () => {\n\t\t\ttry {\n\t\t\t\tconst changes = await this.presenceManager!.processHeartbeats();\n\n\t\t\t\t// Emit presence change events\n\t\t\t\tfor (const change of changes) {\n\t\t\t\t\tawait this.emit(\"presence_changed\", {\n\t\t\t\t\t\tuserId: change.userId,\n\t\t\t\t\t\tstatus: change.status,\n\t\t\t\t\t\ttimestamp: change.timestamp,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Broadcast presence updates if enabled\n\t\t\t\t\tif (config.broadcastPresenceUpdates) {\n\t\t\t\t\t\tawait this.experimental.broadcastAuthenticated({\n\t\t\t\t\t\t\ttype: \"presence:status_changed\",\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tuserId: change.userId,\n\t\t\t\t\t\t\t\tstatus: change.status,\n\t\t\t\t\t\t\t\tpreviousStatus: change.previousStatus,\n\t\t\t\t\t\t\t\treason: change.reason,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: \"heartbeat_processor\",\n\t\t\t\t});\n\t\t\t}\n\t\t}, interval);\n\t}\n\n\t/**\n\t * Stop heartbeat processor\n\t */\n\tprivate stopHeartbeatProcessor(): void {\n\t\tif (this.heartbeatIntervalId) {\n\t\t\tclearInterval(this.heartbeatIntervalId);\n\t\t\tthis.heartbeatIntervalId = undefined;\n\t\t}\n\t}\n\n\t// Server Lifecycle\n\tasync start(port?: number): Promise<void> {\n\t\tif (this.mode === \"integration\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"Cannot use start() in integration mode. Use initialize() instead.\",\n\t\t\t);\n\t\t}\n\n\t\tif (!port) {\n\t\t\tthrow new Error(\"Port is required for standalone mode\");\n\t\t}\n\n\t\tif (this.running) {\n\t\t\tthrow new Error(\"Server is already running\");\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.transport.connect(`ws://localhost:${port}`, {\n\t\t\t\turl: `ws://localhost:${port}`,\n\t\t\t});\n\t\t\tthis.running = true;\n\t\t\tthis.initialized = true;\n\t\t\tawait this.emit(\"started\", { port });\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"server_start\",\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync initialize(): Promise<void> {\n\t\tif (this.mode === \"standalone\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"Cannot use initialize() in standalone mode. Use start() instead.\",\n\t\t\t);\n\t\t}\n\n\t\tif (this.initialized) {\n\t\t\tthrow new Error(\"Server is already initialized\");\n\t\t}\n\n\t\ttry {\n\t\t\tconst transport = this.transport as ITransportAdapter & {\n\t\t\t\tattach?: (\n\t\t\t\t\tserver: HttpServer | HttpsServer,\n\t\t\t\t\tpath?: string,\n\t\t\t\t) => Promise<void>;\n\t\t\t\tattachToWebSocketServer?: (wss: WebSocketServer) => Promise<void>;\n\t\t\t};\n\n\t\t\tif (this.config.webSocketServer) {\n\t\t\t\t// Attach to existing WebSocket server\n\t\t\t\tif (typeof transport.attachToWebSocketServer === \"function\") {\n\t\t\t\t\tawait transport.attachToWebSocketServer(this.config.webSocketServer);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"Transport adapter does not support attachToWebSocketServer\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (this.config.httpServer) {\n\t\t\t\t// Attach to existing HTTP server\n\t\t\t\tif (typeof transport.attach === \"function\") {\n\t\t\t\t\tawait transport.attach(\n\t\t\t\t\t\tthis.config.httpServer,\n\t\t\t\t\t\tthis.config.webSocketPath || \"/ws\",\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Transport adapter does not support attach\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Either httpServer or webSocketServer must be provided in integration mode\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.running = true;\n\t\t\tthis.initialized = true;\n\t\t\tawait this.emit(\"started\", { port: 0 }); // Port 0 indicates integration mode\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"server_initialize\",\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync stop(): Promise<void> {\n\t\tif (!this.running) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.running = false;\n\n\t\t// Stop heartbeat processor\n\t\tthis.stopHeartbeatProcessor();\n\n\t\t// Disconnect all clients\n\t\tfor (const [clientId] of Array.from(this.clients)) {\n\t\t\tawait this.disconnectClient(clientId, \"Server shutting down\");\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.transport.disconnect();\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"server_stop\",\n\t\t\t});\n\t\t}\n\n\t\tthis.clients.clear();\n\t\tthis.clientMessageHandlers.clear();\n\t\tthis.clientUserMap.clear();\n\t\tthis.userClientMap.clear();\n\n\t\t// Clear presence data\n\t\tif (this.presenceManager) {\n\t\t\tawait this.presenceManager.clear();\n\t\t}\n\n\t\tawait this.emit(\"stopped\", {});\n\t}\n\n\t// Client Management\n\tprivate async handleTransportMessage(message: Message): Promise<void> {\n\t\t// Handle special transport messages\n\t\tif (message.type === \"connection\") {\n\t\t\tawait this.handleConnectionMessage(message);\n\t\t\treturn;\n\t\t}\n\n\t\tif (message.type === \"client_authenticated\") {\n\t\t\tawait this.handleClientAuthenticatedMessage(message);\n\t\t\treturn;\n\t\t}\n\n\t\tif (message.type === \"disconnect\") {\n\t\t\tconst payload = message.payload as { clientId: string; reason?: string };\n\t\t\tawait this.disconnectClient(\n\t\t\t\tpayload.clientId,\n\t\t\t\tpayload.reason || \"Client disconnected\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Transport messages contain clientId in the payload for routing\n\t\tconst payload = message.payload as {\n\t\t\tclientId?: string;\n\t\t\ttype?: string;\n\t\t\t[key: string]: unknown;\n\t\t};\n\t\tconst { clientId, type, ...clientMessage } = payload;\n\n\t\tconst clientMsg: Message = {\n\t\t\tid: message.id,\n\t\t\ttype: type || message.type, // Use inner type if present, otherwise outer type\n\t\t\tpayload: clientMessage,\n\t\t\ttimestamp: message.timestamp,\n\t\t};\n\n\t\tif (!clientId) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: new Error(\"Message missing clientId\"),\n\t\t\t\tcontext: \"transport_message\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst handler = this.clientMessageHandlers.get(clientId);\n\t\tif (handler) {\n\t\t\tawait handler(clientMsg);\n\t\t} else {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: new Error(`No handler for client ${clientId}`),\n\t\t\t\tcontext: \"transport_message\",\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleConnectionMessage(message: Message): Promise<void> {\n\t\tconst payload = message.payload as {\n\t\t\tclientId: string;\n\t\t\tauthenticated: boolean;\n\t\t\tuserId?: string;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t};\n\n\t\t// Add the client with initial auth state\n\t\tconst roomIds = new Set<string>();\n\t\tconst client: ConnectedClient = {\n\t\t\tid: payload.clientId,\n\t\t\tuserId: payload.userId || \"\",\n\t\t\troomIds,\n\t\t\tget roomId() {\n\t\t\t\treturn roomIds.size > 0 ? roomIds.values().next().value || null : null;\n\t\t\t},\n\t\t\tauthenticated: payload.authenticated,\n\t\t\tconnectedAt: Date.now(),\n\t\t};\n\n\t\tthis.clients.set(payload.clientId, client);\n\t\tthis.clientMessageHandlers.set(\n\t\t\tpayload.clientId,\n\t\t\tthis.createClientMessageHandler(payload.clientId),\n\t\t);\n\n\t\tawait this.emit(\"client_connected\", { client });\n\n\t\t// Register with presence manager if authenticated\n\t\tif (\n\t\t\tpayload.authenticated &&\n\t\t\tthis.presenceManager?.isEnabled() &&\n\t\t\tpayload.userId\n\t\t) {\n\t\t\ttry {\n\t\t\t\tawait this.presenceManager.connectDevice(\n\t\t\t\t\tpayload.userId,\n\t\t\t\t\tpayload.clientId,\n\t\t\t\t\t{\n\t\t\t\t\t\tconnectedAt: Date.now(),\n\t\t\t\t\t\tlastActivity: Date.now(),\n\t\t\t\t\t\tmetadata: payload.metadata,\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tawait this.emit(\"presence_device_connected\", {\n\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\tdeviceId: payload.clientId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t});\n\n\t\t\t\t// Broadcast presence update\n\t\t\t\tconst presenceConfig = this.presenceManager.getConfig();\n\t\t\t\tif (presenceConfig.broadcastPresenceUpdates) {\n\t\t\t\t\tawait this.experimental.broadcastAuthenticated({\n\t\t\t\t\t\ttype: \"presence:user_online\",\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\t\t\tdeviceId: payload.clientId,\n\t\t\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: \"presence_connect_device\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (payload.authenticated) {\n\t\t\tawait this.emit(\"client_authenticated\", {\n\t\t\t\tclientId: payload.clientId,\n\t\t\t\tuserId: payload.userId || \"\",\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleClientAuthenticatedMessage(\n\t\tmessage: Message,\n\t): Promise<void> {\n\t\tconst payload = message.payload as {\n\t\t\tclientId: string;\n\t\t\tuserId: string;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t};\n\n\t\tconst client = this.clients.get(payload.clientId);\n\t\tif (client) {\n\t\t\tclient.authenticated = true;\n\t\t\tclient.userId = payload.userId;\n\n\t\t\t// Auto-update client mappings\n\t\t\tthis.clientUserMap.set(payload.clientId, payload.userId);\n\t\t\tif (!this.userClientMap.has(payload.userId)) {\n\t\t\t\tthis.userClientMap.set(payload.userId, new Set());\n\t\t\t}\n\t\t\tthis.userClientMap.get(payload.userId)!.add(payload.clientId);\n\n\t\t\tawait this.emit(\"client_authenticated\", {\n\t\t\t\tclientId: payload.clientId,\n\t\t\t\tuserId: payload.userId,\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleTransportError(error: Error): Promise<void> {\n\t\tawait this.emit(\"error\", { error, context: \"transport\" });\n\t}\n\n\tprivate async handleTransportClose(\n\t\t_code: number,\n\t\t_reason: string,\n\t): Promise<void> {\n\t\t// Transport close means server is shutting down\n\t\tif (this.running) {\n\t\t\tawait this.stop();\n\t\t}\n\t}\n\n\tprivate async addClient(clientId: string): Promise<void> {\n\t\tconst roomIds = new Set<string>();\n\t\tconst client: ConnectedClient = {\n\t\t\tid: clientId,\n\t\t\tuserId: \"\",\n\t\t\troomIds,\n\t\t\tget roomId() {\n\t\t\t\treturn roomIds.size > 0 ? roomIds.values().next().value || null : null;\n\t\t\t},\n\t\t\tauthenticated: false,\n\t\t\tconnectedAt: Date.now(),\n\t\t};\n\n\t\tthis.clients.set(clientId, client);\n\n\t\t// Set up message handler for this client\n\t\tthis.clientMessageHandlers.set(\n\t\t\tclientId,\n\t\t\tthis.createClientMessageHandler(clientId),\n\t\t);\n\n\t\tawait this.emit(\"client_connected\", { client });\n\t}\n\n\tprivate async disconnectClient(\n\t\tclientId: string,\n\t\treason: string,\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Auto-clean client mappings\n\t\tif (client.userId) {\n\t\t\tthis.clientUserMap.delete(clientId);\n\t\t\tconst clientSet = this.userClientMap.get(client.userId);\n\t\t\tif (clientSet) {\n\t\t\t\tclientSet.delete(clientId);\n\t\t\t\tif (clientSet.size === 0) {\n\t\t\t\t\tthis.userClientMap.delete(client.userId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Unregister from presence manager\n\t\tif (this.presenceManager?.isEnabled() && client.userId) {\n\t\t\ttry {\n\t\t\t\tconst presence = await this.presenceManager.disconnectDevice(\n\t\t\t\t\tclient.userId,\n\t\t\t\t\tclientId,\n\t\t\t\t);\n\n\t\t\t\tawait this.emit(\"presence_device_disconnected\", {\n\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\tdeviceId: clientId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t});\n\n\t\t\t\t// Broadcast presence update if user went offline or into grace period\n\t\t\t\tconst presenceConfig = this.presenceManager.getConfig();\n\t\t\t\tif (\n\t\t\t\t\tpresenceConfig.broadcastPresenceUpdates &&\n\t\t\t\t\t(!presence || presence.status === \"offline\")\n\t\t\t\t) {\n\t\t\t\t\tawait this.experimental.broadcastAuthenticated({\n\t\t\t\t\t\ttype: \"presence:user_offline\",\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\t\t\tdeviceId: clientId,\n\t\t\t\t\t\t\tstatus: presence?.status || \"offline\",\n\t\t\t\t\t\t\tgracePeriod: presenceConfig.gracePeriod,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: \"presence_disconnect_device\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Leave all rooms the client is in\n\t\tfor (const roomId of client.roomIds) {\n\t\t\tawait this.roomManager.leaveRoom(roomId, client.userId);\n\t\t\tawait this.emit(\"client_left_room\", { clientId, roomId });\n\t\t}\n\n\t\t// Release all locks held by this client\n\t\tawait this.lockManager.releaseUserLocks(client.userId);\n\n\t\t// Clean up\n\t\tthis.clients.delete(clientId);\n\t\tthis.clientMessageHandlers.delete(clientId);\n\n\t\tawait this.emit(\"client_disconnected\", { clientId, reason });\n\t}\n\n\tprivate createClientMessageHandler(\n\t\tclientId: string,\n\t): (message: Message) => Promise<void> {\n\t\treturn async (message: Message) => {\n\t\t\ttry {\n\t\t\t\tconst client = this.clients.get(clientId);\n\t\t\t\tif (!client) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Auto-update presence activity on ANY message\n\t\t\t\tif (\n\t\t\t\t\tthis.presenceManager?.isEnabled() &&\n\t\t\t\t\tclient.userId &&\n\t\t\t\t\tclient.authenticated\n\t\t\t\t) {\n\t\t\t\t\tawait this.updatePresenceActivity(client.userId, clientId, \"message\");\n\t\t\t\t}\n\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase \"authenticate\":\n\t\t\t\t\t\tawait this.handleAuthenticate(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { token: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"join_room\":\n\t\t\t\t\t\tawait this.handleJoinRoom(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { roomId: string; token?: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"leave_room\":\n\t\t\t\t\t\tawait this.handleLeaveRoom(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { roomId?: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"broadcast_event\":\n\t\t\t\t\t\tawait this.handleBroadcastEvent(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { event: Event; roomId: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"request_lock\":\n\t\t\t\t\t\tawait this.handleLockRequest(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { request: LockRequest; roomId: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"release_lock\":\n\t\t\t\t\t\tawait this.handleLockRelease(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { lockId: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ping\":\n\t\t\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\t\t\ttype: \"pong\",\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// Presence activity already updated automatically above\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"heartbeat\":\n\t\t\t\t\t\t// Heartbeat messages are used to keep presence activity updated\n\t\t\t\t\t\t// The activity is already tracked above (line ~570), so we just acknowledge\n\t\t\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\t\t\ttype: \"heartbeat_ack\",\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\terror: `Unknown message type: ${message.type}`,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\terror: (error as Error).message,\n\t\t\t\t});\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: `client_${clientId}`,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n\n\t// Message Handlers\n\tprivate async handleAuthenticate(\n\t\tclientId: string,\n\t\tpayload: { token: string },\n\t): Promise<void> {\n\t\tif (!this.auth) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Authentication not configured\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst tokenPayload = await this.auth.validateToken(payload.token);\n\t\t\tconst client = this.clients.get(clientId);\n\t\t\tif (client) {\n\t\t\t\tclient.userId = tokenPayload.userId;\n\t\t\t\tclient.authenticated = true;\n\n\t\t\t\t// Update client-user mappings so getUserIdFromClientId works\n\t\t\t\tthis.clientUserMap.set(clientId, tokenPayload.userId);\n\t\t\t\tif (!this.userClientMap.has(tokenPayload.userId)) {\n\t\t\t\t\tthis.userClientMap.set(tokenPayload.userId, new Set());\n\t\t\t\t}\n\t\t\t\tthis.userClientMap.get(tokenPayload.userId)!.add(clientId);\n\n\t\t\t\tawait this.emit(\"client_authenticated\", {\n\t\t\t\t\tclientId,\n\t\t\t\t\tuserId: tokenPayload.userId,\n\t\t\t\t\tmetadata: tokenPayload.metadata,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tsuccess: true,\n\t\t\t\tuserId: tokenPayload.userId,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tsuccess: false,\n\t\t\t\terror: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleJoinRoom(\n\t\tclientId: string,\n\t\tpayload: { roomId: string; token?: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Authenticate if token provided\n\t\tif (payload.token && !client.authenticated) {\n\t\t\tawait this.handleAuthenticate(clientId, { token: payload.token });\n\t\t}\n\n\t\tif (!client.authenticated) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: \"Authentication required to join room\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\t// Check if already in the room\n\t\t\tif (client.roomIds.has(payload.roomId)) {\n\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\terror: \"Already in this room\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Get or create room\n\t\t\tlet roomState = await this.roomManager.getRoomState(payload.roomId);\n\t\t\tif (!roomState) {\n\t\t\t\tconst roomConfig = {\n\t\t\t\t\t...this.config.defaultRoomConfig,\n\t\t\t\t\tid: payload.roomId,\n\t\t\t\t};\n\t\t\t\tconst room = await this.roomManager.createRoom(\n\t\t\t\t\tpayload.roomId,\n\t\t\t\t\troomConfig,\n\t\t\t\t);\n\t\t\t\troomState = await this.roomManager.getRoomState(payload.roomId);\n\t\t\t\tawait this.emit(\"room_created\", { room });\n\t\t\t}\n\n\t\t\tif (!roomState) {\n\t\t\t\tthrow new Error(\"Failed to create or get room state\");\n\t\t\t}\n\n\t\t\t// Join room\n\t\t\tconst user: RoomUser = {\n\t\t\t\tid: client.userId,\n\t\t\t\tusername: client.userId, // TODO: Get from auth token\n\t\t\t\tstatus: \"online\",\n\t\t\t\tjoinedAt: Date.now(),\n\t\t\t\tlastActivity: Date.now(),\n\t\t\t\tpermissions: roomState.room.permissions || [\"read\", \"write\"],\n\t\t\t};\n\n\t\t\tawait this.roomManager.joinRoom(payload.roomId, user);\n\t\t\tclient.roomIds.add(payload.roomId);\n\n\t\t\tawait this.emit(\"client_joined_room\", {\n\t\t\t\tclientId,\n\t\t\t\troomId: payload.roomId,\n\t\t\t});\n\n\t\t\t// Get updated room state after joining (so it includes the current user)\n\t\t\tconst updatedRoomState = await this.roomManager.getRoomState(\n\t\t\t\tpayload.roomId,\n\t\t\t);\n\t\t\tif (!updatedRoomState) {\n\t\t\t\tthrow new Error(\"Failed to get updated room state after joining\");\n\t\t\t}\n\n\t\t\t// Convert Maps to plain objects for JSON serialization\n\t\t\tconst serializableState = serializeRoomState(updatedRoomState);\n\n\t\t\t// Send room state to client\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"room_joined\",\n\t\t\t\troomId: payload.roomId,\n\t\t\t\tstate: serializableState,\n\t\t\t});\n\n\t\t\t// Send event history\n\t\t\tconst history = await this.roomManager.getEventHistory(\n\t\t\t\tpayload.roomId,\n\t\t\t\t50,\n\t\t\t);\n\t\t\tif (history.length > 0) {\n\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\ttype: \"event_history\",\n\t\t\t\t\tevents: history,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleLeaveRoom(\n\t\tclientId: string,\n\t\tpayload?: { roomId?: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If roomId is specified, leave that specific room\n\t\t// Otherwise, leave all rooms (backward compatibility)\n\t\tconst roomsToLeave = payload?.roomId\n\t\t\t? [payload.roomId]\n\t\t\t: Array.from(client.roomIds);\n\n\t\tif (roomsToLeave.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const roomId of roomsToLeave) {\n\t\t\tif (!client.roomIds.has(roomId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tawait this.roomManager.leaveRoom(roomId, client.userId);\n\t\t\tclient.roomIds.delete(roomId);\n\n\t\t\tawait this.emit(\"client_left_room\", { clientId, roomId });\n\t\t\tawait this.sendToClient(clientId, { type: \"room_left\", roomId });\n\t\t}\n\t}\n\n\tprivate async handleBroadcastEvent(\n\t\tclientId: string,\n\t\tpayload: { event: Event; roomId: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client || !client.roomIds.has(payload.roomId)) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: \"Not in specified room\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Add metadata to event\n\t\tconst enrichedEvent = {\n\t\t\t...payload.event,\n\t\t\tmetadata: {\n\t\t\t\t...payload.event.metadata,\n\t\t\t\tuserId: client.userId,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\troomId: payload.roomId,\n\t\t\t},\n\t\t};\n\n\t\t// Add to history\n\t\tawait this.roomManager.addEventToHistory(payload.roomId, enrichedEvent);\n\n\t\t// Broadcast to room\n\t\tawait this.roomManager.broadcastToRoom(\n\t\t\tpayload.roomId,\n\t\t\tenrichedEvent,\n\t\t\tclient.userId,\n\t\t);\n\n\t\tawait this.emit(\"event_broadcast\", {\n\t\t\troomId: payload.roomId,\n\t\t\tevent: enrichedEvent,\n\t\t\tfromClientId: clientId,\n\t\t});\n\t}\n\n\tprivate async handleLockRequest(\n\t\tclientId: string,\n\t\tpayload: { request: LockRequest; roomId: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client || !client.roomIds.has(payload.roomId)) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: \"Not in specified room\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst lock = await this.lockManager.acquireLock(\n\t\t\t\tclient.userId,\n\t\t\t\tclient.userId,\n\t\t\t\tpayload.request,\n\t\t\t);\n\t\t\tawait this.emit(\"lock_acquired\", { lock, clientId });\n\n\t\t\tawait this.sendToClient(clientId, { type: \"lock_acquired\", lock });\n\n\t\t\t// Broadcast lock status to room\n\t\t\tawait this.roomManager.broadcastToRoom(payload.roomId, {\n\t\t\t\tid: this.generateId(),\n\t\t\t\ttype: \"lock_status\",\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tuserId: client.userId,\n\t\t\t\troomId: payload.roomId,\n\t\t\t\tdata: { lock, action: \"acquired\" },\n\t\t\t\tmetadata: {\n\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\troomId: payload.roomId,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"lock_denied\",\n\t\t\t\trequest: payload.request,\n\t\t\t\treason: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleLockRelease(\n\t\tclientId: string,\n\t\tpayload: { lockId: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.lockManager.releaseLock(payload.lockId);\n\t\t\tawait this.emit(\"lock_released\", { lockId: payload.lockId, clientId });\n\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"lock_released\",\n\t\t\t\tlockId: payload.lockId,\n\t\t\t});\n\n\t\t\t// Broadcast lock status to all rooms the client is in\n\t\t\tfor (const roomId of client.roomIds) {\n\t\t\t\tawait this.roomManager.broadcastToRoom(roomId, {\n\t\t\t\t\tid: this.generateId(),\n\t\t\t\t\ttype: \"lock_status\",\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\troomId,\n\t\t\t\t\tdata: { lockId: payload.lockId, action: \"released\" },\n\t\t\t\t\tmetadata: { userId: client.userId, timestamp: Date.now(), roomId },\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Utility Methods\n\tprivate async sendToClient(\n\t\tclientId: string,\n\t\tmessage: Record<string, unknown>,\n\t): Promise<void> {\n\t\tconst transportMessage: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"server_message\",\n\t\t\tpayload: { clientId, ...message },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(transportMessage);\n\t}\n\n\tprivate generateId(): string {\n\t\treturn Math.random().toString(36).substring(2) + Date.now().toString(36);\n\t}\n\n\t// Public API for external management\n\tasync createRoom(roomId: string, config: RoomConfig): Promise<Room> {\n\t\tconst room = await this.roomManager.createRoom(roomId, config);\n\t\tawait this.emit(\"room_created\", { room });\n\t\treturn room;\n\t}\n\n\tasync deleteRoom(roomId: string): Promise<void> {\n\t\tawait this.roomManager.deleteRoom(roomId);\n\t\tawait this.emit(\"room_deleted\", { roomId });\n\t}\n\n\tgetConnectedClients(): ConnectedClient[] {\n\t\treturn Array.from(this.clients.values());\n\t}\n\n\tgetClient(clientId: string): ConnectedClient | null {\n\t\treturn this.clients.get(clientId) || null;\n\t}\n\n\tisRunning(): boolean {\n\t\treturn this.running;\n\t}\n\n\tgetMode(): \"standalone\" | \"integration\" {\n\t\treturn this.mode;\n\t}\n\n\tisInitialized(): boolean {\n\t\treturn this.initialized;\n\t}\n\n\t/**\n\t * Update presence activity for a user's device\n\t *\n\t * @param userId - User identifier\n\t * @param deviceId - Device/client identifier\n\t * @param activityType - Type of activity\n\t */\n\tprivate async updatePresenceActivity(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t\tactivityType: \"heartbeat\" | \"message\" | \"user_action\",\n\t): Promise<void> {\n\t\tif (!this.presenceManager?.isEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.presenceManager.updateActivity({\n\t\t\t\tuserId,\n\t\t\t\tdeviceId,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tactivityType,\n\t\t\t});\n\n\t\t\tawait this.emit(\"presence_activity\", {\n\t\t\t\tuserId,\n\t\t\t\tdeviceId,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\t// Don't throw, just log the error\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"presence_update_activity\",\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Get presence manager (if configured)\n\t */\n\tgetPresenceManager(): PresenceManager | undefined {\n\t\treturn this.presenceManager;\n\t}\n\n\t/**\n\t * Get user ID from client ID\n\t *\n\t * @param clientId - Client identifier\n\t * @returns User ID, or undefined if not found or not authenticated\n\t */\n\tgetUserIdFromClientId(clientId: string): string | undefined {\n\t\treturn this.clientUserMap.get(clientId);\n\t}\n\n\t/**\n\t * Get all client IDs for a user\n\t *\n\t * A user may have multiple connected devices/clients.\n\t *\n\t * @param userId - User identifier\n\t * @returns Array of client IDs\n\t */\n\tgetClientIdsForUser(userId: string): string[] {\n\t\treturn Array.from(this.userClientMap.get(userId) || []);\n\t}\n\n\t/**\n\t * Get device ID from client ID\n\t *\n\t * In Control Tower architecture, clientId === deviceId\n\t *\n\t * @param clientId - Client identifier\n\t * @returns Device ID (same as clientId)\n\t */\n\tgetDeviceIdFromClientId(clientId: string): string {\n\t\treturn clientId;\n\t}\n}\n",
|
|
42
|
-
"import type { Server as HttpServer } from \"http\";\nimport type { Server as HttpsServer } from \"https\";\nimport type { WebSocketServer } from \"ws\";\nimport type { IAuthAdapter } from \"../abstractions/AuthAdapter.js\";\nimport { DefaultPresenceManager } from \"../abstractions/DefaultPresenceManager.js\";\nimport type { LockManager } from \"../abstractions/LockManager.js\";\nimport type { PresenceManager } from \"../abstractions/PresenceManager.js\";\nimport type { RoomManager } from \"../abstractions/RoomManager.js\";\nimport type { IStorageAdapter } from \"../abstractions/StorageAdapter.js\";\nimport type { ITransportAdapter } from \"../abstractions/TransportAdapter.js\";\nimport type { ExperimentalFeatureConfig, RoomConfig } from \"../types/index.js\";\nimport { BaseServer, type ServerConfig } from \"./BaseServer.js\";\n\nexport class ServerBuilder {\n\tprivate transport?: ITransportAdapter;\n\tprivate auth?: IAuthAdapter;\n\tprivate storage?: IStorageAdapter;\n\tprivate roomManager?: RoomManager;\n\tprivate lockManager?: LockManager;\n\tprivate presenceManager?: PresenceManager;\n\tprivate defaultRoomConfig?: Partial<RoomConfig>;\n\tprivate httpServer?: HttpServer | HttpsServer;\n\tprivate webSocketPath?: string;\n\tprivate webSocketServer?: WebSocketServer;\n\tprivate experimentalFeatures?: ExperimentalFeatureConfig;\n\n\twithTransport(transport: ITransportAdapter): this {\n\t\tthis.transport = transport;\n\t\treturn this;\n\t}\n\n\twithAuth(auth: IAuthAdapter): this {\n\t\tthis.auth = auth;\n\t\treturn this;\n\t}\n\n\twithStorage(storage: IStorageAdapter): this {\n\t\tthis.storage = storage;\n\t\treturn this;\n\t}\n\n\twithRoomManager(roomManager: RoomManager): this {\n\t\tthis.roomManager = roomManager;\n\t\treturn this;\n\t}\n\n\twithLockManager(lockManager: LockManager): this {\n\t\tthis.lockManager = lockManager;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Configure presence management for global user tracking\n\t *\n\t * Enables two-tier connection architecture where users maintain\n\t * global presence while participating in multiple rooms.\n\t *\n\t * @param presenceManager - PresenceManager implementation\n\t */\n\twithPresenceManager(presenceManager: PresenceManager): this {\n\t\tthis.presenceManager = presenceManager;\n\t\treturn this;\n\t}\n\n\twithDefaultRoomConfig(config: Partial<RoomConfig>): this {\n\t\tthis.defaultRoomConfig = config;\n\t\treturn this;\n\t}\n\n\twithHttpServer(server: HttpServer | HttpsServer): this {\n\t\tthis.httpServer = server;\n\t\treturn this;\n\t}\n\n\twithWebSocketPath(path: string): this {\n\t\tthis.webSocketPath = path;\n\t\treturn this;\n\t}\n\n\twithWebSocketServer(wss: WebSocketServer): this {\n\t\tthis.webSocketServer = wss;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Enable experimental features\n\t *\n\t * ⚠️ WARNING: Experimental features are for development only.\n\t * APIs may change or be removed without major version bumps.\n\t *\n\t * @see docs/EXPERIMENTAL_BROADCAST.md\n\t */\n\twithExperimentalFeatures(features: ExperimentalFeatureConfig): this {\n\t\tthis.experimentalFeatures = features;\n\t\treturn this;\n\t}\n\n\tbuild(): BaseServer {\n\t\tif (!this.transport) {\n\t\t\tthrow new Error(\"Transport adapter is required\");\n\t\t}\n\n\t\tif (!this.roomManager) {\n\t\t\tthrow new Error(\"Room manager is required\");\n\t\t}\n\n\t\tif (!this.lockManager) {\n\t\t\tthrow new Error(\"Lock manager is required\");\n\t\t}\n\n\t\tconst config: ServerConfig = {\n\t\t\ttransport: this.transport,\n\t\t\tauth: this.auth,\n\t\t\tstorage: this.storage,\n\t\t\troomManager: this.roomManager,\n\t\t\tlockManager: this.lockManager,\n\t\t\tpresenceManager: this.presenceManager,\n\t\t\tdefaultRoomConfig: this.defaultRoomConfig || {\n\t\t\t\tmaxUsers: 50,\n\t\t\t\tmaxHistory: 100,\n\t\t\t\tpermissions: [\"read\" as const, \"write\" as const],\n\t\t\t},\n\t\t\thttpServer: this.httpServer,\n\t\t\twebSocketPath: this.webSocketPath,\n\t\t\twebSocketServer: this.webSocketServer,\n\t\t\texperimental: this.experimentalFeatures || {\n\t\t\t\tenableBroadcast: false,\n\t\t\t\twarnOnExperimentalUse: true,\n\t\t\t\ttrackUsageMetrics: false,\n\t\t\t},\n\t\t};\n\n\t\tconst server = new BaseServer(config);\n\n\t\t// Auto-link presence manager to server for broadcasting\n\t\tif (this.presenceManager instanceof DefaultPresenceManager) {\n\t\t\tthis.presenceManager.setServer(server);\n\t\t}\n\n\t\t// Auto-wire presence extension hooks to server events\n\t\tif (this.presenceManager instanceof DefaultPresenceManager) {\n\t\t\tthis.wirePresenceExtensionHooks(server, this.presenceManager);\n\t\t}\n\n\t\treturn server;\n\t}\n\n\t/**\n\t * Wire presence extension hooks to server events\n\t * @private\n\t */\n\tprivate wirePresenceExtensionHooks(\n\t\tserver: BaseServer,\n\t\tpresenceManager: DefaultPresenceManager<any>,\n\t): void {\n\t\t// Initialize extensions when server starts\n\t\tserver.on(\"started\", async () => {\n\t\t\tawait presenceManager.initializeExtensions();\n\t\t});\n\n\t\t// Wire room join/leave events to presence extensions\n\t\tserver.on(\"client_joined_room\", async ({ clientId, roomId }) => {\n\t\t\tconst userId = server.getUserIdFromClientId(clientId);\n\t\t\tif (userId && presenceManager.isEnabled()) {\n\t\t\t\t// Call onRoomJoined for all extensions\n\t\t\t\tconst extensions = (presenceManager as any).extensions;\n\t\t\t\tif (extensions) {\n\t\t\t\t\tfor (const ext of extensions) {\n\t\t\t\t\t\tawait ext.onRoomJoined?.(userId, roomId, clientId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tserver.on(\"client_left_room\", async ({ clientId, roomId }) => {\n\t\t\tconst userId = server.getUserIdFromClientId(clientId);\n\t\t\tif (userId && presenceManager.isEnabled()) {\n\t\t\t\t// Call onRoomLeft for all extensions\n\t\t\t\tconst extensions = (presenceManager as any).extensions;\n\t\t\t\tif (extensions) {\n\t\t\t\t\tfor (const ext of extensions) {\n\t\t\t\t\t\tawait ext.onRoomLeft?.(userId, roomId, clientId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Destroy extensions when server stops\n\t\tserver.on(\"stopped\", async () => {\n\t\t\tawait presenceManager.destroyExtensions();\n\t\t});\n\t}\n}\n"
|
|
42
|
+
"import type { Server as HttpServer } from \"http\";\nimport type { Server as HttpsServer } from \"https\";\nimport type { WebSocketServer } from \"ws\";\nimport type { IAuthAdapter } from \"../abstractions/AuthAdapter.js\";\nimport { TypedEventEmitter } from \"../abstractions/EventEmitter.js\";\nimport type { LockManager } from \"../abstractions/LockManager.js\";\nimport type { PresenceManager } from \"../abstractions/PresenceManager.js\";\nimport type { RoomManager } from \"../abstractions/RoomManager.js\";\nimport type { IStorageAdapter } from \"../abstractions/StorageAdapter.js\";\nimport type { ITransportAdapter } from \"../abstractions/TransportAdapter.js\";\nimport type {\n\tEvent,\n\tExperimentalFeatureConfig,\n\tExperimentalUsageEvent,\n\tLock,\n\tLockRequest,\n\tMessage,\n\tRoom,\n\tRoomConfig,\n\tRoomUser,\n} from \"../types/index.js\";\nimport { serializeRoomState } from \"../types/room.js\";\nimport { ExperimentalAPI } from \"./ExperimentalAPI.js\";\n\nexport interface ServerConfig {\n\ttransport: ITransportAdapter;\n\tauth?: IAuthAdapter;\n\tstorage?: IStorageAdapter;\n\troomManager: RoomManager;\n\tlockManager: LockManager;\n\tpresenceManager?: PresenceManager;\n\tdefaultRoomConfig?: Partial<RoomConfig>;\n\thttpServer?: HttpServer | HttpsServer;\n\twebSocketPath?: string;\n\twebSocketServer?: WebSocketServer;\n\texperimental?: ExperimentalFeatureConfig;\n}\n\nexport interface ConnectedClient {\n\tid: string;\n\tuserId: string;\n\t/**\n\t * Device ID for presence tracking.\n\t * By default equals clientId, but can be overridden via setClientDeviceId()\n\t * to support multi-window scenarios where multiple clients share a device.\n\t */\n\tdeviceId: string;\n\t/**\n\t * Set of room IDs the client is currently in\n\t *\n\t * Multi-room support: A client can be in multiple rooms simultaneously.\n\t * This enables the two-tier architecture where clients can maintain\n\t * global presence while participating in multiple repository rooms.\n\t */\n\troomIds: Set<string>;\n\t/**\n\t * Legacy single-room accessor for backward compatibility\n\t *\n\t * Returns the first room the client is in, or null if not in any rooms.\n\t *\n\t * @deprecated Use roomIds for multi-room support\n\t */\n\troomId: string | null;\n\tauthenticated: boolean;\n\tconnectedAt: number;\n}\n\nexport interface ServerEvents {\n\tstarted: { port: number };\n\tstopped: {}; // eslint-disable-line @typescript-eslint/no-empty-object-type\n\tclient_connected: { client: ConnectedClient };\n\tclient_disconnected: { clientId: string; reason: string };\n\tclient_authenticated: {\n\t\tclientId: string;\n\t\tuserId: string;\n\t\tmetadata?: Record<string, unknown>;\n\t};\n\troom_created: { room: Room };\n\troom_deleted: { roomId: string };\n\tclient_joined_room: { clientId: string; roomId: string };\n\tclient_left_room: { clientId: string; roomId: string };\n\tevent_broadcast: { roomId: string; event: Event; fromClientId: string };\n\tlock_acquired: { lock: Lock; clientId: string };\n\tlock_released: { lockId: string; clientId: string };\n\terror: { error: Error; context?: string };\n\texperimental_usage: ExperimentalUsageEvent;\n\t// Presence events\n\tpresence_changed: { userId: string; status: string; timestamp: number };\n\tpresence_device_connected: {\n\t\tuserId: string;\n\t\tdeviceId: string;\n\t\ttimestamp: number;\n\t};\n\tpresence_device_disconnected: {\n\t\tuserId: string;\n\t\tdeviceId: string;\n\t\ttimestamp: number;\n\t};\n\tpresence_activity: { userId: string; deviceId: string; timestamp: number };\n\t[key: string]: unknown;\n}\n\nexport class BaseServer extends TypedEventEmitter<ServerEvents> {\n\tprivate transport: ITransportAdapter;\n\tprivate auth?: IAuthAdapter;\n\tprivate storage?: IStorageAdapter;\n\tprivate roomManager: RoomManager;\n\tprivate lockManager: LockManager;\n\tprivate presenceManager?: PresenceManager;\n\tprivate config: ServerConfig;\n\n\tprivate clients = new Map<string, ConnectedClient>();\n\tprivate clientMessageHandlers = new Map<\n\t\tstring,\n\t\t(message: Message) => Promise<void>\n\t>();\n\tprivate clientUserMap = new Map<string, string>(); // clientId -> userId\n\tprivate userClientMap = new Map<string, Set<string>>(); // userId -> Set<clientId>\n\tprivate running = false;\n\tprivate initialized = false;\n\tprivate mode: \"standalone\" | \"integration\";\n\tprivate heartbeatIntervalId?: NodeJS.Timeout;\n\n\t/**\n\t * Experimental APIs namespace\n\t *\n\t * ⚠️ WARNING: Experimental features are for development only.\n\t * APIs may change or be removed without major version bumps.\n\t *\n\t * @see docs/EXPERIMENTAL_BROADCAST.md\n\t */\n\tpublic readonly experimental: ExperimentalAPI;\n\n\tconstructor(config: ServerConfig) {\n\t\tsuper();\n\t\tthis.config = config;\n\t\tthis.transport = config.transport;\n\t\tthis.auth = config.auth;\n\t\tthis.storage = config.storage;\n\t\tthis.roomManager = config.roomManager;\n\t\tthis.lockManager = config.lockManager;\n\t\tthis.presenceManager = config.presenceManager;\n\n\t\t// Initialize experimental API namespace\n\t\tthis.experimental = new ExperimentalAPI({\n\t\t\tconfig: config.experimental || {\n\t\t\t\tenableBroadcast: false,\n\t\t\t\twarnOnExperimentalUse: true,\n\t\t\t\ttrackUsageMetrics: false,\n\t\t\t},\n\t\t\tlogger: console,\n\t\t\temitMetric: (event: ExperimentalUsageEvent) => {\n\t\t\t\tvoid this.emit(\"experimental_usage\", event);\n\t\t\t},\n\t\t\tgetClients: () => Array.from(this.clients.values()),\n\t\t\tsendToClient: (clientId: string, message: Record<string, unknown>) =>\n\t\t\t\tthis.sendToClient(clientId, message),\n\t\t});\n\n\t\t// Determine mode based on configuration\n\t\tthis.mode =\n\t\t\tconfig.httpServer || config.webSocketServer\n\t\t\t\t? \"integration\"\n\t\t\t\t: \"standalone\";\n\n\t\t// Connect auth adapter to transport if both exist and transport supports it\n\t\tif (this.auth && this.transport) {\n\t\t\tconst transportWithAuth = this.transport as ITransportAdapter & {\n\t\t\t\tsetAuthAdapter?: (auth: IAuthAdapter) => void;\n\t\t\t};\n\t\t\tif (typeof transportWithAuth.setAuthAdapter === \"function\") {\n\t\t\t\ttransportWithAuth.setAuthAdapter(this.auth);\n\t\t\t}\n\t\t}\n\n\t\t// Set up transport event handlers\n\t\tthis.transport.onMessage(this.handleTransportMessage.bind(this));\n\t\tthis.transport.onError(this.handleTransportError.bind(this));\n\t\tthis.transport.onClose(this.handleTransportClose.bind(this));\n\n\t\t// Start heartbeat processor if presence is enabled\n\t\tif (this.presenceManager?.isEnabled()) {\n\t\t\tthis.startHeartbeatProcessor();\n\t\t}\n\t}\n\n\t/**\n\t * Start periodic heartbeat processing for presence management\n\t */\n\tprivate startHeartbeatProcessor(): void {\n\t\tif (!this.presenceManager) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = this.presenceManager.getConfig();\n\t\tconst interval = config.heartbeatInterval;\n\n\t\tthis.heartbeatIntervalId = setInterval(async () => {\n\t\t\ttry {\n\t\t\t\tconst changes = await this.presenceManager!.processHeartbeats();\n\n\t\t\t\t// Emit presence change events\n\t\t\t\tfor (const change of changes) {\n\t\t\t\t\tawait this.emit(\"presence_changed\", {\n\t\t\t\t\t\tuserId: change.userId,\n\t\t\t\t\t\tstatus: change.status,\n\t\t\t\t\t\ttimestamp: change.timestamp,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Broadcast presence updates if enabled\n\t\t\t\t\tif (config.broadcastPresenceUpdates) {\n\t\t\t\t\t\tawait this.experimental.broadcastAuthenticated({\n\t\t\t\t\t\t\ttype: \"presence:status_changed\",\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\tuserId: change.userId,\n\t\t\t\t\t\t\t\tstatus: change.status,\n\t\t\t\t\t\t\t\tpreviousStatus: change.previousStatus,\n\t\t\t\t\t\t\t\treason: change.reason,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: \"heartbeat_processor\",\n\t\t\t\t});\n\t\t\t}\n\t\t}, interval);\n\t}\n\n\t/**\n\t * Stop heartbeat processor\n\t */\n\tprivate stopHeartbeatProcessor(): void {\n\t\tif (this.heartbeatIntervalId) {\n\t\t\tclearInterval(this.heartbeatIntervalId);\n\t\t\tthis.heartbeatIntervalId = undefined;\n\t\t}\n\t}\n\n\t// Server Lifecycle\n\tasync start(port?: number): Promise<void> {\n\t\tif (this.mode === \"integration\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"Cannot use start() in integration mode. Use initialize() instead.\",\n\t\t\t);\n\t\t}\n\n\t\tif (!port) {\n\t\t\tthrow new Error(\"Port is required for standalone mode\");\n\t\t}\n\n\t\tif (this.running) {\n\t\t\tthrow new Error(\"Server is already running\");\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.transport.connect(`ws://localhost:${port}`, {\n\t\t\t\turl: `ws://localhost:${port}`,\n\t\t\t});\n\t\t\tthis.running = true;\n\t\t\tthis.initialized = true;\n\t\t\tawait this.emit(\"started\", { port });\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"server_start\",\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync initialize(): Promise<void> {\n\t\tif (this.mode === \"standalone\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"Cannot use initialize() in standalone mode. Use start() instead.\",\n\t\t\t);\n\t\t}\n\n\t\tif (this.initialized) {\n\t\t\tthrow new Error(\"Server is already initialized\");\n\t\t}\n\n\t\ttry {\n\t\t\tconst transport = this.transport as ITransportAdapter & {\n\t\t\t\tattach?: (\n\t\t\t\t\tserver: HttpServer | HttpsServer,\n\t\t\t\t\tpath?: string,\n\t\t\t\t) => Promise<void>;\n\t\t\t\tattachToWebSocketServer?: (wss: WebSocketServer) => Promise<void>;\n\t\t\t};\n\n\t\t\tif (this.config.webSocketServer) {\n\t\t\t\t// Attach to existing WebSocket server\n\t\t\t\tif (typeof transport.attachToWebSocketServer === \"function\") {\n\t\t\t\t\tawait transport.attachToWebSocketServer(this.config.webSocketServer);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"Transport adapter does not support attachToWebSocketServer\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (this.config.httpServer) {\n\t\t\t\t// Attach to existing HTTP server\n\t\t\t\tif (typeof transport.attach === \"function\") {\n\t\t\t\t\tawait transport.attach(\n\t\t\t\t\t\tthis.config.httpServer,\n\t\t\t\t\t\tthis.config.webSocketPath || \"/ws\",\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Transport adapter does not support attach\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Either httpServer or webSocketServer must be provided in integration mode\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.running = true;\n\t\t\tthis.initialized = true;\n\t\t\tawait this.emit(\"started\", { port: 0 }); // Port 0 indicates integration mode\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"server_initialize\",\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync stop(): Promise<void> {\n\t\tif (!this.running) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.running = false;\n\n\t\t// Stop heartbeat processor\n\t\tthis.stopHeartbeatProcessor();\n\n\t\t// Disconnect all clients\n\t\tfor (const [clientId] of Array.from(this.clients)) {\n\t\t\tawait this.disconnectClient(clientId, \"Server shutting down\");\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.transport.disconnect();\n\t\t} catch (error) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"server_stop\",\n\t\t\t});\n\t\t}\n\n\t\tthis.clients.clear();\n\t\tthis.clientMessageHandlers.clear();\n\t\tthis.clientUserMap.clear();\n\t\tthis.userClientMap.clear();\n\n\t\t// Clear presence data\n\t\tif (this.presenceManager) {\n\t\t\tawait this.presenceManager.clear();\n\t\t}\n\n\t\tawait this.emit(\"stopped\", {});\n\t}\n\n\t// Client Management\n\tprivate async handleTransportMessage(message: Message): Promise<void> {\n\t\t// Handle special transport messages\n\t\tif (message.type === \"connection\") {\n\t\t\tawait this.handleConnectionMessage(message);\n\t\t\treturn;\n\t\t}\n\n\t\tif (message.type === \"client_authenticated\") {\n\t\t\tawait this.handleClientAuthenticatedMessage(message);\n\t\t\treturn;\n\t\t}\n\n\t\tif (message.type === \"disconnect\") {\n\t\t\tconst payload = message.payload as { clientId: string; reason?: string };\n\t\t\tawait this.disconnectClient(\n\t\t\t\tpayload.clientId,\n\t\t\t\tpayload.reason || \"Client disconnected\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Transport messages contain clientId in the payload for routing\n\t\tconst payload = message.payload as {\n\t\t\tclientId?: string;\n\t\t\ttype?: string;\n\t\t\t[key: string]: unknown;\n\t\t};\n\t\tconst { clientId, type, ...clientMessage } = payload;\n\n\t\tconst clientMsg: Message = {\n\t\t\tid: message.id,\n\t\t\ttype: type || message.type, // Use inner type if present, otherwise outer type\n\t\t\tpayload: clientMessage,\n\t\t\ttimestamp: message.timestamp,\n\t\t};\n\n\t\tif (!clientId) {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: new Error(\"Message missing clientId\"),\n\t\t\t\tcontext: \"transport_message\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst handler = this.clientMessageHandlers.get(clientId);\n\t\tif (handler) {\n\t\t\tawait handler(clientMsg);\n\t\t} else {\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: new Error(`No handler for client ${clientId}`),\n\t\t\t\tcontext: \"transport_message\",\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleConnectionMessage(message: Message): Promise<void> {\n\t\tconst payload = message.payload as {\n\t\t\tclientId: string;\n\t\t\tauthenticated: boolean;\n\t\t\tuserId?: string;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t};\n\n\t\t// Add the client with initial auth state\n\t\tconst roomIds = new Set<string>();\n\t\tconst client: ConnectedClient = {\n\t\t\tid: payload.clientId,\n\t\t\tuserId: payload.userId || \"\",\n\t\t\tdeviceId: payload.clientId, // Default to clientId, can be overridden via setClientDeviceId()\n\t\t\troomIds,\n\t\t\tget roomId() {\n\t\t\t\treturn roomIds.size > 0 ? roomIds.values().next().value || null : null;\n\t\t\t},\n\t\t\tauthenticated: payload.authenticated,\n\t\t\tconnectedAt: Date.now(),\n\t\t};\n\n\t\tthis.clients.set(payload.clientId, client);\n\t\tthis.clientMessageHandlers.set(\n\t\t\tpayload.clientId,\n\t\t\tthis.createClientMessageHandler(payload.clientId),\n\t\t);\n\n\t\tawait this.emit(\"client_connected\", { client });\n\n\t\t// Register with presence manager if authenticated\n\t\tif (\n\t\t\tpayload.authenticated &&\n\t\t\tthis.presenceManager?.isEnabled() &&\n\t\t\tpayload.userId\n\t\t) {\n\t\t\ttry {\n\t\t\t\tawait this.presenceManager.connectDevice(\n\t\t\t\t\tpayload.userId,\n\t\t\t\t\tpayload.clientId,\n\t\t\t\t\t{\n\t\t\t\t\t\tconnectedAt: Date.now(),\n\t\t\t\t\t\tlastActivity: Date.now(),\n\t\t\t\t\t\tmetadata: payload.metadata,\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tawait this.emit(\"presence_device_connected\", {\n\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\tdeviceId: payload.clientId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t});\n\n\t\t\t\t// Broadcast presence update\n\t\t\t\tconst presenceConfig = this.presenceManager.getConfig();\n\t\t\t\tif (presenceConfig.broadcastPresenceUpdates) {\n\t\t\t\t\tawait this.experimental.broadcastAuthenticated({\n\t\t\t\t\t\ttype: \"presence:user_online\",\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\t\t\tdeviceId: payload.clientId,\n\t\t\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: \"presence_connect_device\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (payload.authenticated) {\n\t\t\tawait this.emit(\"client_authenticated\", {\n\t\t\t\tclientId: payload.clientId,\n\t\t\t\tuserId: payload.userId || \"\",\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleClientAuthenticatedMessage(\n\t\tmessage: Message,\n\t): Promise<void> {\n\t\tconst payload = message.payload as {\n\t\t\tclientId: string;\n\t\t\tuserId: string;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t};\n\n\t\tconst client = this.clients.get(payload.clientId);\n\t\tif (client) {\n\t\t\tclient.authenticated = true;\n\t\t\tclient.userId = payload.userId;\n\n\t\t\t// Auto-update client mappings\n\t\t\tthis.clientUserMap.set(payload.clientId, payload.userId);\n\t\t\tif (!this.userClientMap.has(payload.userId)) {\n\t\t\t\tthis.userClientMap.set(payload.userId, new Set());\n\t\t\t}\n\t\t\tthis.userClientMap.get(payload.userId)!.add(payload.clientId);\n\n\t\t\tawait this.emit(\"client_authenticated\", {\n\t\t\t\tclientId: payload.clientId,\n\t\t\t\tuserId: payload.userId,\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleTransportError(error: Error): Promise<void> {\n\t\tawait this.emit(\"error\", { error, context: \"transport\" });\n\t}\n\n\tprivate async handleTransportClose(\n\t\t_code: number,\n\t\t_reason: string,\n\t): Promise<void> {\n\t\t// Transport close means server is shutting down\n\t\tif (this.running) {\n\t\t\tawait this.stop();\n\t\t}\n\t}\n\n\tprivate async addClient(clientId: string): Promise<void> {\n\t\tconst roomIds = new Set<string>();\n\t\tconst client: ConnectedClient = {\n\t\t\tid: clientId,\n\t\t\tuserId: \"\",\n\t\t\tdeviceId: clientId, // Default to clientId, can be overridden via setClientDeviceId()\n\t\t\troomIds,\n\t\t\tget roomId() {\n\t\t\t\treturn roomIds.size > 0 ? roomIds.values().next().value || null : null;\n\t\t\t},\n\t\t\tauthenticated: false,\n\t\t\tconnectedAt: Date.now(),\n\t\t};\n\n\t\tthis.clients.set(clientId, client);\n\n\t\t// Set up message handler for this client\n\t\tthis.clientMessageHandlers.set(\n\t\t\tclientId,\n\t\t\tthis.createClientMessageHandler(clientId),\n\t\t);\n\n\t\tawait this.emit(\"client_connected\", { client });\n\t}\n\n\tprivate async disconnectClient(\n\t\tclientId: string,\n\t\treason: string,\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Auto-clean client mappings\n\t\tif (client.userId) {\n\t\t\tthis.clientUserMap.delete(clientId);\n\t\t\tconst clientSet = this.userClientMap.get(client.userId);\n\t\t\tif (clientSet) {\n\t\t\t\tclientSet.delete(clientId);\n\t\t\t\tif (clientSet.size === 0) {\n\t\t\t\t\tthis.userClientMap.delete(client.userId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Unregister from presence manager\n\t\tif (this.presenceManager?.isEnabled() && client.userId) {\n\t\t\ttry {\n\t\t\t\tconst presence = await this.presenceManager.disconnectDevice(\n\t\t\t\t\tclient.userId,\n\t\t\t\t\tclient.deviceId,\n\t\t\t\t);\n\n\t\t\t\tawait this.emit(\"presence_device_disconnected\", {\n\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\tdeviceId: client.deviceId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t});\n\n\t\t\t\t// Broadcast presence update if user went offline or into grace period\n\t\t\t\tconst presenceConfig = this.presenceManager.getConfig();\n\t\t\t\tif (\n\t\t\t\t\tpresenceConfig.broadcastPresenceUpdates &&\n\t\t\t\t\t(!presence || presence.status === \"offline\")\n\t\t\t\t) {\n\t\t\t\t\tawait this.experimental.broadcastAuthenticated({\n\t\t\t\t\t\ttype: \"presence:user_offline\",\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\t\t\tdeviceId: client.deviceId,\n\t\t\t\t\t\t\tstatus: presence?.status || \"offline\",\n\t\t\t\t\t\t\tgracePeriod: presenceConfig.gracePeriod,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: \"presence_disconnect_device\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Leave all rooms the client is in and broadcast to other room members\n\t\tfor (const roomId of client.roomIds) {\n\t\t\t// Broadcast member_left to other room members\n\t\t\ttry {\n\t\t\t\tawait this.experimental.broadcastWhere(\n\t\t\t\t\t(c) => c.roomIds.has(roomId) && c.id !== clientId,\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"member_left\",\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\troomId,\n\t\t\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t// Experimental broadcast not enabled, skip silently\n\t\t\t}\n\n\t\t\tawait this.roomManager.leaveRoom(roomId, client.userId);\n\t\t\tawait this.emit(\"client_left_room\", { clientId, roomId });\n\t\t}\n\n\t\t// Release all locks held by this client\n\t\tawait this.lockManager.releaseUserLocks(client.userId);\n\n\t\t// Clean up\n\t\tthis.clients.delete(clientId);\n\t\tthis.clientMessageHandlers.delete(clientId);\n\n\t\tawait this.emit(\"client_disconnected\", { clientId, reason });\n\t}\n\n\tprivate createClientMessageHandler(\n\t\tclientId: string,\n\t): (message: Message) => Promise<void> {\n\t\treturn async (message: Message) => {\n\t\t\ttry {\n\t\t\t\tconst client = this.clients.get(clientId);\n\t\t\t\tif (!client) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Auto-update presence activity on ANY message\n\t\t\t\tif (\n\t\t\t\t\tthis.presenceManager?.isEnabled() &&\n\t\t\t\t\tclient.userId &&\n\t\t\t\t\tclient.authenticated\n\t\t\t\t) {\n\t\t\t\t\tawait this.updatePresenceActivity(client.userId, client.deviceId, \"message\");\n\t\t\t\t}\n\n\t\t\t\tswitch (message.type) {\n\t\t\t\t\tcase \"authenticate\":\n\t\t\t\t\t\tawait this.handleAuthenticate(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { token: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"join_room\":\n\t\t\t\t\t\tawait this.handleJoinRoom(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { roomId: string; token?: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"leave_room\":\n\t\t\t\t\t\tawait this.handleLeaveRoom(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { roomId?: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"broadcast_event\":\n\t\t\t\t\t\tawait this.handleBroadcastEvent(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { event: Event; roomId: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"request_lock\":\n\t\t\t\t\t\tawait this.handleLockRequest(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { request: LockRequest; roomId: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"release_lock\":\n\t\t\t\t\t\tawait this.handleLockRelease(\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tmessage.payload as { lockId: string },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ping\":\n\t\t\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\t\t\ttype: \"pong\",\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// Presence activity already updated automatically above\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"heartbeat\":\n\t\t\t\t\t\t// Heartbeat messages are used to keep presence activity updated\n\t\t\t\t\t\t// The activity is already tracked above (line ~570), so we just acknowledge\n\t\t\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\t\t\ttype: \"heartbeat_ack\",\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\terror: `Unknown message type: ${message.type}`,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\terror: (error as Error).message,\n\t\t\t\t});\n\t\t\t\tawait this.emit(\"error\", {\n\t\t\t\t\terror: error as Error,\n\t\t\t\t\tcontext: `client_${clientId}`,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n\n\t// Message Handlers\n\tprivate async handleAuthenticate(\n\t\tclientId: string,\n\t\tpayload: { token: string },\n\t): Promise<void> {\n\t\tif (!this.auth) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"Authentication not configured\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst tokenPayload = await this.auth.validateToken(payload.token);\n\t\t\tconst client = this.clients.get(clientId);\n\t\t\tif (client) {\n\t\t\t\tclient.userId = tokenPayload.userId;\n\t\t\t\tclient.authenticated = true;\n\n\t\t\t\t// Update client-user mappings so getUserIdFromClientId works\n\t\t\t\tthis.clientUserMap.set(clientId, tokenPayload.userId);\n\t\t\t\tif (!this.userClientMap.has(tokenPayload.userId)) {\n\t\t\t\t\tthis.userClientMap.set(tokenPayload.userId, new Set());\n\t\t\t\t}\n\t\t\t\tthis.userClientMap.get(tokenPayload.userId)!.add(clientId);\n\n\t\t\t\tawait this.emit(\"client_authenticated\", {\n\t\t\t\t\tclientId,\n\t\t\t\t\tuserId: tokenPayload.userId,\n\t\t\t\t\tmetadata: tokenPayload.metadata,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tsuccess: true,\n\t\t\t\tuserId: tokenPayload.userId,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"auth_result\",\n\t\t\t\tsuccess: false,\n\t\t\t\terror: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleJoinRoom(\n\t\tclientId: string,\n\t\tpayload: { roomId: string; token?: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Authenticate if token provided\n\t\tif (payload.token && !client.authenticated) {\n\t\t\tawait this.handleAuthenticate(clientId, { token: payload.token });\n\t\t}\n\n\t\tif (!client.authenticated) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: \"Authentication required to join room\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\t// Check if already in the room\n\t\t\tif (client.roomIds.has(payload.roomId)) {\n\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\terror: \"Already in this room\",\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Get or create room\n\t\t\tlet roomState = await this.roomManager.getRoomState(payload.roomId);\n\t\t\tif (!roomState) {\n\t\t\t\tconst roomConfig = {\n\t\t\t\t\t...this.config.defaultRoomConfig,\n\t\t\t\t\tid: payload.roomId,\n\t\t\t\t};\n\t\t\t\tconst room = await this.roomManager.createRoom(\n\t\t\t\t\tpayload.roomId,\n\t\t\t\t\troomConfig,\n\t\t\t\t);\n\t\t\t\troomState = await this.roomManager.getRoomState(payload.roomId);\n\t\t\t\tawait this.emit(\"room_created\", { room });\n\t\t\t}\n\n\t\t\tif (!roomState) {\n\t\t\t\tthrow new Error(\"Failed to create or get room state\");\n\t\t\t}\n\n\t\t\t// Join room\n\t\t\tconst user: RoomUser = {\n\t\t\t\tid: client.userId,\n\t\t\t\tusername: client.userId, // TODO: Get from auth token\n\t\t\t\tstatus: \"online\",\n\t\t\t\tjoinedAt: Date.now(),\n\t\t\t\tlastActivity: Date.now(),\n\t\t\t\tpermissions: roomState.room.permissions || [\"read\", \"write\"],\n\t\t\t};\n\n\t\t\tawait this.roomManager.joinRoom(payload.roomId, user);\n\t\t\tclient.roomIds.add(payload.roomId);\n\n\t\t\tawait this.emit(\"client_joined_room\", {\n\t\t\t\tclientId,\n\t\t\t\troomId: payload.roomId,\n\t\t\t});\n\n\t\t\t// Get updated room state after joining (so it includes the current user)\n\t\t\tconst updatedRoomState = await this.roomManager.getRoomState(\n\t\t\t\tpayload.roomId,\n\t\t\t);\n\t\t\tif (!updatedRoomState) {\n\t\t\t\tthrow new Error(\"Failed to get updated room state after joining\");\n\t\t\t}\n\n\t\t\t// Convert Maps to plain objects for JSON serialization\n\t\t\tconst serializableState = serializeRoomState(updatedRoomState);\n\n\t\t\t// Send room state to client\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"room_joined\",\n\t\t\t\troomId: payload.roomId,\n\t\t\t\tstate: serializableState,\n\t\t\t});\n\n\t\t\t// Send event history\n\t\t\tconst history = await this.roomManager.getEventHistory(\n\t\t\t\tpayload.roomId,\n\t\t\t\t50,\n\t\t\t);\n\t\t\tif (history.length > 0) {\n\t\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\t\ttype: \"event_history\",\n\t\t\t\t\tevents: history,\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleLeaveRoom(\n\t\tclientId: string,\n\t\tpayload?: { roomId?: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If roomId is specified, leave that specific room\n\t\t// Otherwise, leave all rooms (backward compatibility)\n\t\tconst roomsToLeave = payload?.roomId\n\t\t\t? [payload.roomId]\n\t\t\t: Array.from(client.roomIds);\n\n\t\tif (roomsToLeave.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const roomId of roomsToLeave) {\n\t\t\tif (!client.roomIds.has(roomId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Broadcast to other room members BEFORE removing this client\n\t\t\t// Use experimental broadcast if enabled, otherwise silently skip\n\t\t\ttry {\n\t\t\t\tawait this.experimental.broadcastWhere(\n\t\t\t\t\t(c) => c.roomIds.has(roomId) && c.id !== clientId,\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"member_left\",\n\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\troomId,\n\t\t\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t// Experimental broadcast not enabled, skip silently\n\t\t\t}\n\n\t\t\tawait this.roomManager.leaveRoom(roomId, client.userId);\n\t\t\tclient.roomIds.delete(roomId);\n\n\t\t\tawait this.emit(\"client_left_room\", { clientId, roomId });\n\t\t\tawait this.sendToClient(clientId, { type: \"room_left\", roomId });\n\t\t}\n\t}\n\n\tprivate async handleBroadcastEvent(\n\t\tclientId: string,\n\t\tpayload: { event: Event; roomId: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client || !client.roomIds.has(payload.roomId)) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: \"Not in specified room\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Add metadata to event\n\t\tconst enrichedEvent = {\n\t\t\t...payload.event,\n\t\t\tmetadata: {\n\t\t\t\t...payload.event.metadata,\n\t\t\t\tuserId: client.userId,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\troomId: payload.roomId,\n\t\t\t},\n\t\t};\n\n\t\t// Add to history\n\t\tawait this.roomManager.addEventToHistory(payload.roomId, enrichedEvent);\n\n\t\t// Broadcast to room\n\t\tawait this.roomManager.broadcastToRoom(\n\t\t\tpayload.roomId,\n\t\t\tenrichedEvent,\n\t\t\tclient.userId,\n\t\t);\n\n\t\tawait this.emit(\"event_broadcast\", {\n\t\t\troomId: payload.roomId,\n\t\t\tevent: enrichedEvent,\n\t\t\tfromClientId: clientId,\n\t\t});\n\t}\n\n\tprivate async handleLockRequest(\n\t\tclientId: string,\n\t\tpayload: { request: LockRequest; roomId: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client || !client.roomIds.has(payload.roomId)) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: \"Not in specified room\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst lock = await this.lockManager.acquireLock(\n\t\t\t\tclient.userId,\n\t\t\t\tclient.userId,\n\t\t\t\tpayload.request,\n\t\t\t);\n\t\t\tawait this.emit(\"lock_acquired\", { lock, clientId });\n\n\t\t\tawait this.sendToClient(clientId, { type: \"lock_acquired\", lock });\n\n\t\t\t// Broadcast lock status to room\n\t\t\tawait this.roomManager.broadcastToRoom(payload.roomId, {\n\t\t\t\tid: this.generateId(),\n\t\t\t\ttype: \"lock_status\",\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tuserId: client.userId,\n\t\t\t\troomId: payload.roomId,\n\t\t\t\tdata: { lock, action: \"acquired\" },\n\t\t\t\tmetadata: {\n\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\troomId: payload.roomId,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"lock_denied\",\n\t\t\t\trequest: payload.request,\n\t\t\t\treason: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async handleLockRelease(\n\t\tclientId: string,\n\t\tpayload: { lockId: string },\n\t): Promise<void> {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.lockManager.releaseLock(payload.lockId);\n\t\t\tawait this.emit(\"lock_released\", { lockId: payload.lockId, clientId });\n\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"lock_released\",\n\t\t\t\tlockId: payload.lockId,\n\t\t\t});\n\n\t\t\t// Broadcast lock status to all rooms the client is in\n\t\t\tfor (const roomId of client.roomIds) {\n\t\t\t\tawait this.roomManager.broadcastToRoom(roomId, {\n\t\t\t\t\tid: this.generateId(),\n\t\t\t\t\ttype: \"lock_status\",\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tuserId: client.userId,\n\t\t\t\t\troomId,\n\t\t\t\t\tdata: { lockId: payload.lockId, action: \"released\" },\n\t\t\t\t\tmetadata: { userId: client.userId, timestamp: Date.now(), roomId },\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tawait this.sendToClient(clientId, {\n\t\t\t\ttype: \"error\",\n\t\t\t\terror: (error as Error).message,\n\t\t\t});\n\t\t}\n\t}\n\n\t// Utility Methods\n\tprivate async sendToClient(\n\t\tclientId: string,\n\t\tmessage: Record<string, unknown>,\n\t): Promise<void> {\n\t\tconst transportMessage: Message = {\n\t\t\tid: this.generateId(),\n\t\t\ttype: \"server_message\",\n\t\t\tpayload: { clientId, ...message },\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tawait this.transport.send(transportMessage);\n\t}\n\n\tprivate generateId(): string {\n\t\treturn Math.random().toString(36).substring(2) + Date.now().toString(36);\n\t}\n\n\t// Public API for external management\n\tasync createRoom(roomId: string, config: RoomConfig): Promise<Room> {\n\t\tconst room = await this.roomManager.createRoom(roomId, config);\n\t\tawait this.emit(\"room_created\", { room });\n\t\treturn room;\n\t}\n\n\tasync deleteRoom(roomId: string): Promise<void> {\n\t\tawait this.roomManager.deleteRoom(roomId);\n\t\tawait this.emit(\"room_deleted\", { roomId });\n\t}\n\n\tgetConnectedClients(): ConnectedClient[] {\n\t\treturn Array.from(this.clients.values());\n\t}\n\n\tgetClient(clientId: string): ConnectedClient | null {\n\t\treturn this.clients.get(clientId) || null;\n\t}\n\n\tisRunning(): boolean {\n\t\treturn this.running;\n\t}\n\n\tgetMode(): \"standalone\" | \"integration\" {\n\t\treturn this.mode;\n\t}\n\n\tisInitialized(): boolean {\n\t\treturn this.initialized;\n\t}\n\n\t/**\n\t * Update presence activity for a user's device\n\t *\n\t * @param userId - User identifier\n\t * @param deviceId - Device/client identifier\n\t * @param activityType - Type of activity\n\t */\n\tprivate async updatePresenceActivity(\n\t\tuserId: string,\n\t\tdeviceId: string,\n\t\tactivityType: \"heartbeat\" | \"message\" | \"user_action\",\n\t): Promise<void> {\n\t\tif (!this.presenceManager?.isEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.presenceManager.updateActivity({\n\t\t\t\tuserId,\n\t\t\t\tdeviceId,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tactivityType,\n\t\t\t});\n\n\t\t\tawait this.emit(\"presence_activity\", {\n\t\t\t\tuserId,\n\t\t\t\tdeviceId,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\t// Don't throw, just log the error\n\t\t\tawait this.emit(\"error\", {\n\t\t\t\terror: error as Error,\n\t\t\t\tcontext: \"presence_update_activity\",\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Get presence manager (if configured)\n\t */\n\tgetPresenceManager(): PresenceManager | undefined {\n\t\treturn this.presenceManager;\n\t}\n\n\t/**\n\t * Get user ID from client ID\n\t *\n\t * @param clientId - Client identifier\n\t * @returns User ID, or undefined if not found or not authenticated\n\t */\n\tgetUserIdFromClientId(clientId: string): string | undefined {\n\t\treturn this.clientUserMap.get(clientId);\n\t}\n\n\t/**\n\t * Get all client IDs for a user\n\t *\n\t * A user may have multiple connected devices/clients.\n\t *\n\t * @param userId - User identifier\n\t * @returns Array of client IDs\n\t */\n\tgetClientIdsForUser(userId: string): string[] {\n\t\treturn Array.from(this.userClientMap.get(userId) || []);\n\t}\n\n\t/**\n\t * Get all client IDs for a user in a specific room\n\t *\n\t * @param roomId - Room identifier\n\t * @param userId - User identifier\n\t * @returns Array of client IDs\n\t */\n\tgetClientIdsInRoom(roomId: string, userId: string): string[] {\n\t\tconst allClientIds = this.getClientIdsForUser(userId);\n\t\treturn allClientIds.filter(clientId => {\n\t\t\tconst client = this.clients.get(clientId);\n\t\t\treturn client && client.roomIds.has(roomId);\n\t\t});\n\t}\n\n\t/**\n\t * Get device ID from client ID\n\t *\n\t * By default, deviceId === clientId. Use setClientDeviceId() to override\n\t * for multi-window scenarios where multiple clients share a device.\n\t *\n\t * @param clientId - Client identifier\n\t * @returns Device ID for this client\n\t */\n\tgetDeviceIdFromClientId(clientId: string): string {\n\t\tconst client = this.clients.get(clientId);\n\t\treturn client?.deviceId ?? clientId;\n\t}\n\n\t/**\n\t * Set the device ID for a client\n\t *\n\t * Use this to associate a custom deviceId with a client, e.g., when\n\t * the deviceId comes from a JWT token and differs from the WebSocket clientId.\n\t * This is useful for multi-window scenarios where multiple WebSocket clients\n\t * share the same device/user session.\n\t *\n\t * @param clientId - Client identifier\n\t * @param deviceId - Device identifier to associate with this client\n\t * @returns true if the client was found and updated, false otherwise\n\t */\n\tsetClientDeviceId(clientId: string, deviceId: string): boolean {\n\t\tconst client = this.clients.get(clientId);\n\t\tif (client) {\n\t\t\tclient.deviceId = deviceId;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n}\n",
|
|
43
|
+
"import type { Server as HttpServer } from \"http\";\nimport type { Server as HttpsServer } from \"https\";\nimport type { WebSocketServer } from \"ws\";\nimport type { IAuthAdapter } from \"../abstractions/AuthAdapter.js\";\nimport { ConnectedRoomManager } from \"../abstractions/ConnectedRoomManager.js\";\nimport { DefaultPresenceManager } from \"../abstractions/DefaultPresenceManager.js\";\nimport type { LockManager } from \"../abstractions/LockManager.js\";\nimport type { PresenceManager } from \"../abstractions/PresenceManager.js\";\nimport type { RoomManager } from \"../abstractions/RoomManager.js\";\nimport type { IStorageAdapter } from \"../abstractions/StorageAdapter.js\";\nimport type { ITransportAdapter } from \"../abstractions/TransportAdapter.js\";\nimport type { ExperimentalFeatureConfig, RoomConfig } from \"../types/index.js\";\nimport { BaseServer, type ServerConfig } from \"./BaseServer.js\";\n\nexport class ServerBuilder {\n\tprivate transport?: ITransportAdapter;\n\tprivate auth?: IAuthAdapter;\n\tprivate storage?: IStorageAdapter;\n\tprivate roomManager?: RoomManager;\n\tprivate lockManager?: LockManager;\n\tprivate presenceManager?: PresenceManager;\n\tprivate defaultRoomConfig?: Partial<RoomConfig>;\n\tprivate httpServer?: HttpServer | HttpsServer;\n\tprivate webSocketPath?: string;\n\tprivate webSocketServer?: WebSocketServer;\n\tprivate experimentalFeatures?: ExperimentalFeatureConfig;\n\n\twithTransport(transport: ITransportAdapter): this {\n\t\tthis.transport = transport;\n\t\treturn this;\n\t}\n\n\twithAuth(auth: IAuthAdapter): this {\n\t\tthis.auth = auth;\n\t\treturn this;\n\t}\n\n\twithStorage(storage: IStorageAdapter): this {\n\t\tthis.storage = storage;\n\t\treturn this;\n\t}\n\n\twithRoomManager(roomManager: RoomManager): this {\n\t\tthis.roomManager = roomManager;\n\t\treturn this;\n\t}\n\n\twithLockManager(lockManager: LockManager): this {\n\t\tthis.lockManager = lockManager;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Configure presence management for global user tracking\n\t *\n\t * Enables two-tier connection architecture where users maintain\n\t * global presence while participating in multiple rooms.\n\t *\n\t * @param presenceManager - PresenceManager implementation\n\t */\n\twithPresenceManager(presenceManager: PresenceManager): this {\n\t\tthis.presenceManager = presenceManager;\n\t\treturn this;\n\t}\n\n\twithDefaultRoomConfig(config: Partial<RoomConfig>): this {\n\t\tthis.defaultRoomConfig = config;\n\t\treturn this;\n\t}\n\n\twithHttpServer(server: HttpServer | HttpsServer): this {\n\t\tthis.httpServer = server;\n\t\treturn this;\n\t}\n\n\twithWebSocketPath(path: string): this {\n\t\tthis.webSocketPath = path;\n\t\treturn this;\n\t}\n\n\twithWebSocketServer(wss: WebSocketServer): this {\n\t\tthis.webSocketServer = wss;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Enable experimental features\n\t *\n\t * ⚠️ WARNING: Experimental features are for development only.\n\t * APIs may change or be removed without major version bumps.\n\t *\n\t * @see docs/EXPERIMENTAL_BROADCAST.md\n\t */\n\twithExperimentalFeatures(features: ExperimentalFeatureConfig): this {\n\t\tthis.experimentalFeatures = features;\n\t\treturn this;\n\t}\n\n\tbuild(): BaseServer {\n\t\tif (!this.transport) {\n\t\t\tthrow new Error(\"Transport adapter is required\");\n\t\t}\n\n\t\tif (!this.roomManager) {\n\t\t\tthrow new Error(\"Room manager is required\");\n\t\t}\n\n\t\tif (!this.lockManager) {\n\t\t\tthrow new Error(\"Lock manager is required\");\n\t\t}\n\n\t\tconst config: ServerConfig = {\n\t\t\ttransport: this.transport,\n\t\t\tauth: this.auth,\n\t\t\tstorage: this.storage,\n\t\t\troomManager: this.roomManager,\n\t\t\tlockManager: this.lockManager,\n\t\t\tpresenceManager: this.presenceManager,\n\t\t\tdefaultRoomConfig: this.defaultRoomConfig || {\n\t\t\t\tmaxUsers: 50,\n\t\t\t\tmaxHistory: 100,\n\t\t\t\tpermissions: [\"read\" as const, \"write\" as const],\n\t\t\t},\n\t\t\thttpServer: this.httpServer,\n\t\t\twebSocketPath: this.webSocketPath,\n\t\t\twebSocketServer: this.webSocketServer,\n\t\t\texperimental: this.experimentalFeatures || {\n\t\t\t\tenableBroadcast: false,\n\t\t\t\twarnOnExperimentalUse: true,\n\t\t\t\ttrackUsageMetrics: false,\n\t\t\t},\n\t\t};\n\n\t\tconst server = new BaseServer(config);\n\n\t\t// Auto-enhance DefaultRoomManager with broadcasting capabilities\n\t\t// This happens after server construction so we have access to server methods\n\t\tif (this.roomManager.constructor.name === 'DefaultRoomManager') {\n\t\t\t// Create enhanced room manager with server callbacks\n\t\t\tconst connectedManager = new ConnectedRoomManager(\n\t\t\t\t(clientId: string, message: Record<string, unknown>) =>\n\t\t\t\t\t(server as any).sendToClient(clientId, message),\n\t\t\t\t(roomId: string, userId: string) =>\n\t\t\t\t\tserver.getClientIdsInRoom(roomId, userId)\n\t\t\t);\n\n\t\t\t// Copy existing room state\n\t\t\t(connectedManager as any).rooms = (this.roomManager as any).rooms;\n\n\t\t\t// Replace the room manager in the server\n\t\t\t(server as any).roomManager = connectedManager;\n\t\t}\n\n\t\t// Auto-link presence manager to server for broadcasting\n\t\tif (this.presenceManager instanceof DefaultPresenceManager) {\n\t\t\tthis.presenceManager.setServer(server);\n\t\t}\n\n\t\t// Auto-wire presence extension hooks to server events\n\t\tif (this.presenceManager instanceof DefaultPresenceManager) {\n\t\t\tthis.wirePresenceExtensionHooks(server, this.presenceManager);\n\t\t}\n\n\t\treturn server;\n\t}\n\n\t/**\n\t * Wire presence extension hooks to server events\n\t * @private\n\t */\n\tprivate wirePresenceExtensionHooks(\n\t\tserver: BaseServer,\n\t\tpresenceManager: DefaultPresenceManager<any>,\n\t): void {\n\t\t// Initialize extensions when server starts\n\t\tserver.on(\"started\", async () => {\n\t\t\tawait presenceManager.initializeExtensions();\n\t\t});\n\n\t\t// Wire room join/leave events to presence extensions\n\t\tserver.on(\"client_joined_room\", async ({ clientId, roomId }) => {\n\t\t\tconst userId = server.getUserIdFromClientId(clientId);\n\t\t\tif (userId && presenceManager.isEnabled()) {\n\t\t\t\t// Call onRoomJoined for all extensions\n\t\t\t\tconst extensions = (presenceManager as any).extensions;\n\t\t\t\tif (extensions) {\n\t\t\t\t\tfor (const ext of extensions) {\n\t\t\t\t\t\tawait ext.onRoomJoined?.(userId, roomId, clientId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tserver.on(\"client_left_room\", async ({ clientId, roomId }) => {\n\t\t\tconst userId = server.getUserIdFromClientId(clientId);\n\t\t\tif (userId && presenceManager.isEnabled()) {\n\t\t\t\t// Call onRoomLeft for all extensions\n\t\t\t\tconst extensions = (presenceManager as any).extensions;\n\t\t\t\tif (extensions) {\n\t\t\t\t\tfor (const ext of extensions) {\n\t\t\t\t\t\tawait ext.onRoomLeft?.(userId, roomId, clientId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Destroy extensions when server stops\n\t\tserver.on(\"stopped\", async () => {\n\t\t\tawait presenceManager.destroyExtensions();\n\t\t});\n\t}\n}\n"
|
|
43
44
|
],
|
|
44
|
-
"mappings": "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",
|
|
45
|
-
"debugId": "
|
|
45
|
+
"mappings": "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",
|
|
46
|
+
"debugId": "78D42E959A23C2D964756E2164756E21",
|
|
46
47
|
"names": []
|
|
47
48
|
}
|