node-rtc-connection 1.0.7 → 1.0.9
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/index.cjs +55 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +55 -13
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/ICEGatherer.js +13 -3
- package/src/NativePeerConnectionFactory.js +42 -10
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/RTCDataChannel.js","../src/RTCSessionDescription.js","../src/RTCIceCandidate.js","../src/STUNClient.js","../src/TURNClient.js","../src/ICEGatherer.js","../src/SecureConnection.js","../src/UDPTransport.js","../src/NativePeerConnectionFactory.js","../src/RTCPeerConnection.js","../src/RTCDataChannelEvent.js","../src/RTCPeerConnectionIceEvent.js","../src/RTCError.js","../src/index.js","../src/index.js?commonjs-entry"],"sourcesContent":["const EventEmitter = require('events');\n\n/**\n * RTCDataChannel represents a bidirectional data channel between two peers.\n * Ported from Chromium's implementation, DataChannel-only functionality.\n */\nclass RTCDataChannel extends EventEmitter {\n constructor(nativeChannel, peerConnectionHandler) {\n super();\n \n this._nativeChannel = nativeChannel;\n this._peerConnectionHandler = peerConnectionHandler;\n this._state = 'connecting';\n this._binaryType = 'arraybuffer';\n this._bufferedAmount = 0;\n this._bufferedAmountLowThreshold = 0;\n this._closed = false;\n this._scheduledEvents = [];\n \n // Setup native channel observers\n this._setupObservers();\n }\n\n /**\n * The label specified when creating the data channel\n */\n get label() {\n return this._nativeChannel ? this._nativeChannel.label : '';\n }\n\n /**\n * Whether the channel is ordered or allows out-of-order delivery\n */\n get ordered() {\n return this._nativeChannel ? this._nativeChannel.ordered : true;\n }\n\n /**\n * Maximum packet lifetime in milliseconds\n */\n get maxPacketLifeTime() {\n if (!this._nativeChannel) return null;\n const lifetime = this._nativeChannel.maxPacketLifeTime;\n return lifetime >= 0 ? lifetime : null;\n }\n\n /**\n * Maximum number of retransmit attempts\n */\n get maxRetransmits() {\n if (!this._nativeChannel) return null;\n const retransmits = this._nativeChannel.maxRetransmits;\n return retransmits >= 0 ? retransmits : null;\n }\n\n /**\n * Subprotocol name\n */\n get protocol() {\n return this._nativeChannel ? this._nativeChannel.protocol : '';\n }\n\n /**\n * Whether the channel was negotiated by the application or the WebRTC layer\n */\n get negotiated() {\n return this._nativeChannel ? this._nativeChannel.negotiated : false;\n }\n\n /**\n * The ID for this data channel\n */\n get id() {\n if (!this._nativeChannel) return null;\n const channelId = this._nativeChannel.id;\n return channelId >= 0 ? channelId : null;\n }\n\n /**\n * The state of the data channel\n * Values: 'connecting', 'open', 'closing', 'closed'\n */\n get readyState() {\n return this._state;\n }\n\n /**\n * The number of bytes currently queued to be sent\n */\n get bufferedAmount() {\n return this._bufferedAmount;\n }\n\n /**\n * Threshold for the bufferedAmount at which bufferedamountlow event fires\n */\n get bufferedAmountLowThreshold() {\n return this._bufferedAmountLowThreshold;\n }\n\n set bufferedAmountLowThreshold(value) {\n this._bufferedAmountLowThreshold = value;\n }\n\n /**\n * Format for received binary data: 'blob' or 'arraybuffer'\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(value) {\n if (value !== 'blob' && value !== 'arraybuffer') {\n throw new Error('binaryType must be either \"blob\" or \"arraybuffer\"');\n }\n this._binaryType = value;\n }\n\n /**\n * Send data over the channel\n * @param {string|ArrayBuffer|ArrayBufferView} data - Data to send\n */\n send(data) {\n if (this._state !== 'open') {\n throw new Error('RTCDataChannel.send() called on a channel that is not open');\n }\n\n if (!this._nativeChannel) {\n throw new Error('Native data channel is not available');\n }\n\n let buffer;\n let isBinary = false;\n\n if (typeof data === 'string') {\n buffer = Buffer.from(data, 'utf8');\n isBinary = false;\n } else if (data instanceof ArrayBuffer) {\n buffer = Buffer.from(data);\n isBinary = true;\n } else if (ArrayBuffer.isView(data)) {\n buffer = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n isBinary = true;\n } else {\n throw new Error('Unsupported data type');\n }\n\n const length = buffer.length;\n \n // Validate send length\n if (length > 65536) { // Maximum WebRTC message size\n throw new Error('Message too long');\n }\n\n this._bufferedAmount += length;\n \n // Send through native channel\n try {\n this._nativeChannel.send({\n data: buffer,\n binary: isBinary\n });\n } catch (error) {\n throw new Error(`Failed to send data: ${error.message}`);\n }\n }\n\n /**\n * Close the data channel\n */\n close() {\n if (this._closed) {\n return;\n }\n\n this._closed = true;\n\n if (this._nativeChannel) {\n this._nativeChannel.close();\n }\n\n if (this._state === 'closing' || this._state === 'closed') {\n return;\n }\n\n this._setState('closing');\n }\n\n /**\n * Setup observers for the native channel\n * @private\n */\n _setupObservers() {\n if (!this._nativeChannel) {\n return;\n }\n\n // State change observer\n this._nativeChannel.on('statechange', (state) => {\n this._onStateChange(state);\n });\n\n // Message observer\n this._nativeChannel.on('message', (buffer) => {\n this._onMessage(buffer);\n });\n\n // Buffered amount change observer\n this._nativeChannel.on('bufferedamountlow', (amount) => {\n this._onBufferedAmountChange(amount);\n });\n\n // Error observer\n this._nativeChannel.on('error', (error) => {\n this.emit('error', error);\n });\n }\n\n /**\n * Handle state change from native channel\n * @private\n */\n _onStateChange(state) {\n let newState;\n let shouldEmitOpen = false;\n let shouldEmitClosing = false;\n let shouldEmitClose = false;\n \n switch (state) {\n case 0: // kConnecting\n newState = 'connecting';\n break;\n case 1: // kOpen\n newState = 'open';\n shouldEmitOpen = true;\n break;\n case 2: // kClosing\n newState = 'closing';\n shouldEmitClosing = true;\n break;\n case 3: // kClosed\n newState = 'closed';\n shouldEmitClose = true;\n break;\n default:\n return;\n }\n \n // Only update state if it actually changed\n if (this._readyState !== newState) {\n this._setState(newState);\n }\n \n // Emit events AFTER state is updated\n if (shouldEmitOpen) {\n this.emit('open');\n }\n if (shouldEmitClosing) {\n this.emit('closing');\n }\n if (shouldEmitClose) {\n this.emit('close');\n }\n }\n\n /**\n * Handle incoming message from native channel\n * @private\n */\n _onMessage(buffer) {\n if (this._state !== 'open') {\n return;\n }\n\n let data;\n if (buffer.binary) {\n if (this._binaryType === 'arraybuffer') {\n data = buffer.data.buffer.slice(\n buffer.data.byteOffset,\n buffer.data.byteOffset + buffer.data.byteLength\n );\n } else {\n // For 'blob' type, we'll just pass the buffer\n // In a browser environment, this would be converted to a Blob\n data = buffer.data;\n }\n } else {\n data = buffer.data.toString('utf8');\n }\n\n this.emit('message', { data });\n }\n\n /**\n * Handle buffered amount change from native channel\n * @private\n */\n _onBufferedAmountChange(newAmount) {\n const previousAmount = this._bufferedAmount;\n this._bufferedAmount = newAmount;\n\n if (previousAmount > this._bufferedAmountLowThreshold &&\n newAmount <= this._bufferedAmountLowThreshold) {\n this.emit('bufferedamountlow');\n }\n }\n\n /**\n * Set the channel state\n * @private\n */\n _setState(state) {\n if (this._state === state) {\n return;\n }\n this._state = state;\n }\n\n /**\n * Set state to open without dispatching event (used for remote channels)\n */\n setStateToOpenWithoutEvent() {\n this._setState('open');\n }\n\n /**\n * Dispatch open event (used for remote channels)\n */\n dispatchOpenEvent() {\n this.emit('open');\n }\n\n /**\n * Dispose of resources\n */\n dispose() {\n if (this._nativeChannel) {\n this._nativeChannel.removeAllListeners();\n this._nativeChannel = null;\n }\n this._peerConnectionHandler = null;\n this.removeAllListeners();\n }\n}\n\nmodule.exports = RTCDataChannel;\n","/**\n * RTCSessionDescription represents a session description.\n * Ported from Chromium's implementation.\n */\nclass RTCSessionDescription {\n constructor(descriptionInitDict = {}) {\n this._type = descriptionInitDict.type || '';\n this._sdp = descriptionInitDict.sdp || '';\n \n // Validate type\n const validTypes = ['offer', 'answer', 'pranswer', 'rollback'];\n if (this._type && !validTypes.includes(this._type)) {\n throw new Error(`Invalid type: ${this._type}`);\n }\n }\n\n /**\n * The type of session description\n * Values: 'offer', 'answer', 'pranswer', 'rollback'\n */\n get type() {\n return this._type;\n }\n\n set type(value) {\n const validTypes = ['offer', 'answer', 'pranswer', 'rollback'];\n if (value && !validTypes.includes(value)) {\n throw new Error(`Invalid type: ${value}`);\n }\n this._type = value;\n }\n\n /**\n * The SDP string\n */\n get sdp() {\n return this._sdp;\n }\n\n set sdp(value) {\n this._sdp = value || '';\n }\n\n /**\n * Convert to JSON\n */\n toJSON() {\n return {\n type: this._type,\n sdp: this._sdp\n };\n }\n\n /**\n * Convert to string\n */\n toString() {\n return `RTCSessionDescription { type: \"${this._type}\", sdp: \"${this._sdp.substring(0, 50)}...\" }`;\n }\n}\n\nmodule.exports = RTCSessionDescription;\n","/**\n * RTCIceCandidate represents an ICE candidate.\n * Ported from Chromium's implementation.\n */\nclass RTCIceCandidate {\n constructor(candidateInitDict = {}) {\n this._candidate = candidateInitDict.candidate || '';\n this._sdpMid = candidateInitDict.sdpMid || null;\n this._sdpMLineIndex = candidateInitDict.sdpMLineIndex !== undefined \n ? candidateInitDict.sdpMLineIndex \n : null;\n this._usernameFragment = candidateInitDict.usernameFragment || null;\n \n // Parse candidate string if provided\n if (this._candidate) {\n this._parseCandidateString();\n }\n }\n\n /**\n * The candidate string\n */\n get candidate() {\n return this._candidate;\n }\n\n /**\n * The media stream identification tag\n */\n get sdpMid() {\n return this._sdpMid;\n }\n\n /**\n * The media line index\n */\n get sdpMLineIndex() {\n return this._sdpMLineIndex;\n }\n\n /**\n * The username fragment\n */\n get usernameFragment() {\n return this._usernameFragment;\n }\n\n /**\n * The foundation\n */\n get foundation() {\n return this._foundation || null;\n }\n\n /**\n * The component (RTP or RTCP)\n */\n get component() {\n return this._component || null;\n }\n\n /**\n * The priority\n */\n get priority() {\n return this._priority || null;\n }\n\n /**\n * The IP address\n */\n get address() {\n return this._address || null;\n }\n\n /**\n * The protocol (udp or tcp)\n */\n get protocol() {\n return this._protocol || null;\n }\n\n /**\n * The port\n */\n get port() {\n return this._port || null;\n }\n\n /**\n * The candidate type (host, srflx, prflx, or relay)\n */\n get type() {\n return this._type || null;\n }\n\n /**\n * The TCP type (active, passive, or so)\n */\n get tcpType() {\n return this._tcpType || null;\n }\n\n /**\n * The related address (for non-host candidates)\n */\n get relatedAddress() {\n return this._relatedAddress || null;\n }\n\n /**\n * The related port (for non-host candidates)\n */\n get relatedPort() {\n return this._relatedPort || null;\n }\n\n /**\n * Parse the candidate string to extract individual fields\n * @private\n */\n _parseCandidateString() {\n if (!this._candidate || !this._candidate.startsWith('candidate:')) {\n return;\n }\n\n // Basic parsing of candidate string\n // Format: candidate:<foundation> <component> <protocol> <priority> <address> <port> typ <type> ...\n const parts = this._candidate.split(' ');\n \n if (parts.length >= 8) {\n this._foundation = parts[0].replace('candidate:', '');\n this._component = parts[1];\n this._protocol = parts[2];\n this._priority = parseInt(parts[3], 10);\n this._address = parts[4];\n this._port = parseInt(parts[5], 10);\n // parts[6] is 'typ'\n this._type = parts[7];\n \n // Parse optional fields\n for (let i = 8; i < parts.length; i += 2) {\n const key = parts[i];\n const value = parts[i + 1];\n \n switch (key) {\n case 'raddr':\n this._relatedAddress = value;\n break;\n case 'rport':\n this._relatedPort = parseInt(value, 10);\n break;\n case 'tcptype':\n this._tcpType = value;\n break;\n case 'ufrag':\n this._usernameFragment = value;\n break;\n }\n }\n }\n }\n\n /**\n * Convert to JSON\n */\n toJSON() {\n return {\n candidate: this._candidate,\n sdpMid: this._sdpMid,\n sdpMLineIndex: this._sdpMLineIndex,\n usernameFragment: this._usernameFragment\n };\n }\n\n /**\n * Convert to string\n */\n toString() {\n return `RTCIceCandidate { candidate: \"${this._candidate}\", sdpMid: \"${this._sdpMid}\", sdpMLineIndex: ${this._sdpMLineIndex} }`;\n }\n}\n\nmodule.exports = RTCIceCandidate;\n","/**\n * STUN Client Implementation (RFC 5389)\n * Pure Node.js implementation using dgram\n */\n\nconst dgram = require('dgram');\nconst crypto = require('crypto');\n\n// STUN Message Types\nconst STUN_BINDING_REQUEST = 0x0001;\nconst STUN_BINDING_RESPONSE = 0x0101;\n\n// STUN Attributes\nconst ATTR_MAPPED_ADDRESS = 0x0001;\nconst ATTR_XOR_MAPPED_ADDRESS = 0x0020;\n\n// STUN Magic Cookie\nconst MAGIC_COOKIE = 0x2112A442;\n\nclass STUNClient {\n constructor() {\n this.socket = null;\n this.timeout = 5000;\n }\n\n /**\n * Get public IP and port by querying STUN server\n * @param {string} stunServer - STUN server address (e.g., 'stun.l.google.com:19302')\n * @returns {Promise<{ip: string, port: number, type: string}>}\n */\n async getReflexiveAddress(stunServer = 'stun.l.google.com:19302') {\n return new Promise((resolve, reject) => {\n const [host, portStr] = stunServer.split(':');\n const port = parseInt(portStr, 10);\n\n // Create UDP socket\n this.socket = dgram.createSocket('udp4');\n \n const transactionId = crypto.randomBytes(12);\n let resolved = false;\n\n const timeout = setTimeout(() => {\n if (!resolved) {\n resolved = true;\n this.socket.close();\n reject(new Error('STUN request timeout'));\n }\n }, this.timeout);\n\n this.socket.on('error', (err) => {\n if (!resolved) {\n resolved = true;\n clearTimeout(timeout);\n this.socket.close();\n reject(err);\n }\n });\n\n this.socket.on('message', (msg) => {\n if (resolved) return;\n\n try {\n const result = this._parseSTUNResponse(msg, transactionId);\n if (result) {\n resolved = true;\n clearTimeout(timeout);\n this.socket.close();\n resolve(result);\n }\n } catch (err) {\n resolved = true;\n clearTimeout(timeout);\n this.socket.close();\n reject(err);\n }\n });\n\n // Send STUN Binding Request\n const request = this._createBindingRequest(transactionId);\n this.socket.send(request, port, host, (err) => {\n if (err && !resolved) {\n resolved = true;\n clearTimeout(timeout);\n this.socket.close();\n reject(err);\n }\n });\n });\n }\n\n /**\n * Create STUN Binding Request\n * @private\n */\n _createBindingRequest(transactionId) {\n const buffer = Buffer.allocUnsafe(20);\n \n // Message Type (2 bytes)\n buffer.writeUInt16BE(STUN_BINDING_REQUEST, 0);\n \n // Message Length (2 bytes) - 0 for no attributes\n buffer.writeUInt16BE(0, 2);\n \n // Magic Cookie (4 bytes)\n buffer.writeUInt32BE(MAGIC_COOKIE, 4);\n \n // Transaction ID (12 bytes)\n transactionId.copy(buffer, 8);\n \n return buffer;\n }\n\n /**\n * Parse STUN Response\n * @private\n */\n _parseSTUNResponse(msg, expectedTransactionId) {\n if (msg.length < 20) {\n throw new Error('Invalid STUN response: too short');\n }\n\n const messageType = msg.readUInt16BE(0);\n const messageLength = msg.readUInt16BE(2);\n const magicCookie = msg.readUInt32BE(4);\n const transactionId = msg.slice(8, 20);\n\n // Verify this is a binding response\n if (messageType !== STUN_BINDING_RESPONSE) {\n return null;\n }\n\n // Verify magic cookie\n if (magicCookie !== MAGIC_COOKIE) {\n throw new Error('Invalid STUN response: bad magic cookie');\n }\n\n // Verify transaction ID\n if (!transactionId.equals(expectedTransactionId)) {\n return null;\n }\n\n // Parse attributes\n let offset = 20;\n while (offset < 20 + messageLength) {\n const attrType = msg.readUInt16BE(offset);\n const attrLength = msg.readUInt16BE(offset + 2);\n const attrValue = msg.slice(offset + 4, offset + 4 + attrLength);\n\n if (attrType === ATTR_XOR_MAPPED_ADDRESS) {\n return this._parseXorMappedAddress(attrValue, transactionId);\n } else if (attrType === ATTR_MAPPED_ADDRESS) {\n return this._parseMappedAddress(attrValue);\n }\n\n // Move to next attribute (with padding)\n offset += 4 + attrLength;\n if (attrLength % 4 !== 0) {\n offset += 4 - (attrLength % 4);\n }\n }\n\n throw new Error('No mapped address in STUN response');\n }\n\n /**\n * Parse XOR-MAPPED-ADDRESS attribute\n * @private\n */\n _parseXorMappedAddress(value, transactionId) {\n const family = value.readUInt8(1);\n const xPort = value.readUInt16BE(2);\n const xAddress = value.slice(4, 8);\n\n // XOR with magic cookie\n const port = xPort ^ (MAGIC_COOKIE >> 16);\n \n const addressBytes = Buffer.allocUnsafe(4);\n const magicBytes = Buffer.allocUnsafe(4);\n magicBytes.writeUInt32BE(MAGIC_COOKIE, 0);\n \n for (let i = 0; i < 4; i++) {\n addressBytes[i] = xAddress[i] ^ magicBytes[i];\n }\n\n const ip = Array.from(addressBytes).join('.');\n\n return {\n ip,\n port,\n type: 'srflx' // Server Reflexive\n };\n }\n\n /**\n * Parse MAPPED-ADDRESS attribute\n * @private\n */\n _parseMappedAddress(value) {\n const family = value.readUInt8(1);\n const port = value.readUInt16BE(2);\n const addressBytes = value.slice(4, 8);\n const ip = Array.from(addressBytes).join('.');\n\n return {\n ip,\n port,\n type: 'srflx'\n };\n }\n\n /**\n * Close the socket\n */\n close() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n }\n}\n\nmodule.exports = STUNClient;\n","/**\n * TURN Client Implementation (RFC 5766)\n * Pure Node.js implementation using dgram and net\n */\n\nconst dgram = require('dgram');\nconst net = require('net');\nconst crypto = require('crypto');\n\n// TURN Message Types\nconst TURN_ALLOCATE_REQUEST = 0x0003;\nconst TURN_ALLOCATE_RESPONSE = 0x0103;\nconst TURN_ALLOCATE_ERROR = 0x0113;\nconst TURN_REFRESH_REQUEST = 0x0004;\nconst TURN_CREATE_PERMISSION = 0x0008;\nconst TURN_CHANNEL_BIND = 0x0009;\nconst TURN_SEND_INDICATION = 0x0016;\nconst TURN_DATA_INDICATION = 0x0017;\n\n// TURN Attributes\nconst ATTR_XOR_RELAYED_ADDRESS = 0x0016;\nconst ATTR_XOR_MAPPED_ADDRESS = 0x0020;\nconst ATTR_LIFETIME = 0x000D;\nconst ATTR_USERNAME = 0x0006;\nconst ATTR_MESSAGE_INTEGRITY = 0x0008;\nconst ATTR_ERROR_CODE = 0x0009;\nconst ATTR_REALM = 0x0014;\nconst ATTR_NONCE = 0x0015;\nconst ATTR_XOR_PEER_ADDRESS = 0x0012;\nconst ATTR_DATA = 0x0013;\nconst ATTR_REQUESTED_TRANSPORT = 0x0019;\n\n// STUN Magic Cookie\nconst MAGIC_COOKIE = 0x2112A442;\n\nclass TURNClient {\n constructor(options = {}) {\n this.server = options.server; // 'turn:server:port' or {host, port}\n this.username = options.username || 'user';\n this.password = options.password || 'pass';\n this.transport = options.transport || 'udp'; // 'udp' or 'tcp'\n this.socket = null;\n this.timeout = options.timeout || 10000;\n this.relayedAddress = null;\n this.lifetime = 600; // Default 10 minutes\n this.allocation = null;\n \n // Authentication state for MESSAGE-INTEGRITY\n this.realm = null;\n this.nonce = null;\n this.authenticated = false;\n }\n\n /**\n * Parse TURN server URI\n * @private\n */\n _parseServer() {\n if (typeof this.server === 'object') {\n return this.server;\n }\n\n const match = this.server.match(/^turn:(.+):(\\d+)$/);\n if (match) {\n return { host: match[1], port: parseInt(match[2], 10) };\n }\n\n // Default TURN port\n return { host: this.server, port: 3478 };\n }\n\n /**\n * Allocate a relay address on TURN server\n * @returns {Promise<{relayedAddress: string, relayedPort: number, mappedAddress: string, mappedPort: number}>}\n */\n async allocate() {\n const serverInfo = this._parseServer();\n const transactionId = crypto.randomBytes(12);\n \n return new Promise((resolve, reject) => {\n let resolved = false;\n\n const timeout = setTimeout(() => {\n if (!resolved) {\n resolved = true;\n this.close();\n reject(new Error('TURN allocation timeout'));\n }\n }, this.timeout);\n\n // Create socket based on transport\n if (this.transport === 'udp') {\n this.socket = dgram.createSocket('udp4');\n } else {\n this.socket = new net.Socket();\n }\n\n this.socket.on('error', (err) => {\n if (!resolved) {\n resolved = true;\n clearTimeout(timeout);\n this.close();\n reject(err);\n }\n });\n\n const handleMessage = (msg) => {\n if (resolved) return;\n\n try {\n const result = this._parseAllocateResponse(msg);\n if (result) {\n resolved = true;\n clearTimeout(timeout);\n this.relayedAddress = result.relayedAddress;\n this.allocation = result;\n resolve(result);\n }\n } catch (err) {\n // Check if this is a 401 Unauthorized requiring authentication\n if (err.message.includes('401') && !this.authenticated && this.realm && this.nonce) {\n // Clear the error handler and retry with authentication\n clearTimeout(timeout);\n this._retryAllocationWithAuth(serverInfo, transactionId)\n .then(result => {\n resolved = true;\n resolve(result);\n })\n .catch(authErr => {\n resolved = true;\n this.close();\n reject(authErr);\n });\n } else {\n resolved = true;\n clearTimeout(timeout);\n this.close();\n reject(err);\n }\n }\n };\n\n if (this.transport === 'udp') {\n this.socket.on('message', handleMessage);\n } else {\n this.socket.on('data', handleMessage);\n }\n\n // Connect and send allocation request\n const sendRequest = () => {\n const request = this._createAllocateRequest(transactionId);\n\n if (this.transport === 'udp') {\n this.socket.send(request, serverInfo.port, serverInfo.host, (err) => {\n if (err && !resolved) {\n resolved = true;\n clearTimeout(timeout);\n this.close();\n reject(err);\n }\n });\n } else {\n this.socket.write(request);\n }\n };\n\n if (this.transport === 'tcp') {\n this.socket.connect(serverInfo.port, serverInfo.host, sendRequest);\n } else {\n sendRequest();\n }\n });\n }\n\n /**\n * Create TURN Allocate Request\n * @private\n */\n _createAllocateRequest(transactionId, withAuth = false) {\n const attributes = [];\n\n // REQUESTED-TRANSPORT attribute (UDP = 17)\n const transportAttr = Buffer.allocUnsafe(8);\n transportAttr.writeUInt16BE(ATTR_REQUESTED_TRANSPORT, 0);\n transportAttr.writeUInt16BE(4, 2);\n transportAttr.writeUInt8(17, 4); // UDP protocol\n transportAttr.writeUInt8(0, 5);\n transportAttr.writeUInt8(0, 6);\n transportAttr.writeUInt8(0, 7);\n attributes.push(transportAttr);\n\n // Add authentication attributes if needed\n if (withAuth && this.username && this.realm && this.nonce) {\n // USERNAME attribute\n const usernameAttr = this._createStringAttribute(0x0006, this.username);\n attributes.push(usernameAttr);\n \n // REALM attribute\n const realmAttr = this._createStringAttribute(0x0014, this.realm);\n attributes.push(realmAttr);\n \n // NONCE attribute\n const nonceAttr = this._createStringAttribute(0x0015, this.nonce);\n attributes.push(nonceAttr);\n }\n\n // Calculate total attributes length (before MESSAGE-INTEGRITY)\n let attrLength = 0;\n for (const attr of attributes) {\n attrLength += attr.length;\n }\n\n // If using auth, add MESSAGE-INTEGRITY (will be added after header)\n let messageIntegrityAttr = null;\n if (withAuth && this.username && this.realm && this.nonce && this.password) {\n attrLength += 24; // MESSAGE-INTEGRITY attribute size (4 + 20)\n }\n\n // STUN header\n const header = Buffer.allocUnsafe(20);\n header.writeUInt16BE(TURN_ALLOCATE_REQUEST, 0);\n header.writeUInt16BE(attrLength, 2);\n header.writeUInt32BE(MAGIC_COOKIE, 4);\n transactionId.copy(header, 8);\n\n // Combine header and attributes\n let message = Buffer.concat([header, ...attributes]);\n \n // Add MESSAGE-INTEGRITY if using auth\n if (withAuth && this.username && this.realm && this.nonce && this.password) {\n messageIntegrityAttr = this._createMessageIntegrity(message);\n message = Buffer.concat([message, messageIntegrityAttr]);\n }\n\n return message;\n }\n\n /**\n * Parse TURN Allocate Response\n * @private\n */\n _parseAllocateResponse(msg) {\n if (msg.length < 20) {\n throw new Error('Invalid TURN response: too short');\n }\n\n const messageType = msg.readUInt16BE(0);\n const messageLength = msg.readUInt16BE(2);\n const magicCookie = msg.readUInt32BE(4);\n\n // Check if this is an allocate response\n if (messageType === TURN_ALLOCATE_ERROR) {\n const error = this._parseErrorCode(msg);\n \n // If 401 Unauthorized, extract REALM and NONCE for retry\n if (error.includes('401')) {\n this._extractAuthAttributes(msg);\n }\n \n throw new Error(`TURN allocation failed: ${error}`);\n }\n\n if (messageType !== TURN_ALLOCATE_RESPONSE) {\n return null;\n }\n\n // Verify magic cookie\n if (magicCookie !== MAGIC_COOKIE) {\n throw new Error('Invalid TURN response: bad magic cookie');\n }\n\n // Parse attributes\n const result = {};\n let offset = 20;\n\n while (offset < 20 + messageLength) {\n const attrType = msg.readUInt16BE(offset);\n const attrLength = msg.readUInt16BE(offset + 2);\n const attrValue = msg.slice(offset + 4, offset + 4 + attrLength);\n\n if (attrType === ATTR_XOR_RELAYED_ADDRESS) {\n const addr = this._parseXorAddress(attrValue, msg.slice(8, 20));\n result.relayedAddress = addr.ip;\n result.relayedPort = addr.port;\n result.type = 'relay';\n } else if (attrType === ATTR_XOR_MAPPED_ADDRESS) {\n const addr = this._parseXorAddress(attrValue, msg.slice(8, 20));\n result.mappedAddress = addr.ip;\n result.mappedPort = addr.port;\n } else if (attrType === ATTR_LIFETIME) {\n this.lifetime = attrValue.readUInt32BE(0);\n result.lifetime = this.lifetime;\n }\n\n // Move to next attribute (with padding)\n offset += 4 + attrLength;\n if (attrLength % 4 !== 0) {\n offset += 4 - (attrLength % 4);\n }\n }\n\n if (!result.relayedAddress) {\n throw new Error('No relayed address in TURN response');\n }\n\n return result;\n }\n\n /**\n * Parse XOR address attribute\n * @private\n */\n _parseXorAddress(value, transactionId) {\n const family = value.readUInt8(1);\n const xPort = value.readUInt16BE(2);\n const xAddress = value.slice(4, 8);\n\n // XOR with magic cookie\n const port = xPort ^ (MAGIC_COOKIE >> 16);\n \n const addressBytes = Buffer.allocUnsafe(4);\n const magicBytes = Buffer.allocUnsafe(4);\n magicBytes.writeUInt32BE(MAGIC_COOKIE, 0);\n \n for (let i = 0; i < 4; i++) {\n addressBytes[i] = xAddress[i] ^ magicBytes[i];\n }\n\n const ip = Array.from(addressBytes).join('.');\n\n return { ip, port };\n }\n\n /**\n * Parse error code attribute\n * @private\n */\n _parseErrorCode(msg) {\n let offset = 20;\n const messageLength = msg.readUInt16BE(2);\n\n while (offset < 20 + messageLength) {\n const attrType = msg.readUInt16BE(offset);\n const attrLength = msg.readUInt16BE(offset + 2);\n const attrValue = msg.slice(offset + 4, offset + 4 + attrLength);\n\n if (attrType === ATTR_ERROR_CODE) {\n const errorClass = attrValue.readUInt8(2);\n const errorNumber = attrValue.readUInt8(3);\n const errorCode = errorClass * 100 + errorNumber;\n const errorText = attrValue.slice(4).toString('utf8');\n return `${errorCode} ${errorText}`;\n }\n\n offset += 4 + attrLength;\n if (attrLength % 4 !== 0) {\n offset += 4 - (attrLength % 4);\n }\n }\n\n return 'Unknown error';\n }\n\n /**\n * Refresh the allocation\n * @param {number} lifetime - New lifetime in seconds\n */\n async refresh(lifetime = 600) {\n if (!this.allocation) {\n throw new Error('No active allocation');\n }\n\n // Send refresh request\n // Implementation similar to allocate()\n this.lifetime = lifetime;\n }\n\n /**\n * Send data through TURN relay\n * @param {Buffer} data - Data to send\n * @param {string} peerAddress - Peer IP address\n * @param {number} peerPort - Peer port\n */\n async send(data, peerAddress, peerPort) {\n if (!this.allocation) {\n throw new Error('No active allocation');\n }\n\n // Create Send Indication message\n const transactionId = crypto.randomBytes(12);\n const message = this._createSendIndication(data, peerAddress, peerPort, transactionId);\n\n const serverInfo = this._parseServer();\n\n if (this.transport === 'udp') {\n this.socket.send(message, serverInfo.port, serverInfo.host);\n } else {\n this.socket.write(message);\n }\n }\n\n /**\n * Create Send Indication message\n * @private\n */\n _createSendIndication(data, peerAddress, peerPort, transactionId) {\n // Implementation of TURN Send Indication\n // For now, simplified version\n const header = Buffer.allocUnsafe(20);\n header.writeUInt16BE(TURN_SEND_INDICATION, 0);\n header.writeUInt16BE(data.length, 2);\n header.writeUInt32BE(MAGIC_COOKIE, 4);\n transactionId.copy(header, 8);\n\n return Buffer.concat([header, data]);\n }\n\n /**\n * Close the TURN client\n */\n close() {\n if (this.socket) {\n if (this.transport === 'udp') {\n this.socket.close();\n } else {\n this.socket.destroy();\n }\n this.socket = null;\n }\n this.allocation = null;\n this.relayedAddress = null;\n }\n\n /**\n * Extract authentication attributes (REALM, NONCE) from error response\n * @private\n */\n _extractAuthAttributes(msg) {\n let offset = 20;\n const messageLength = msg.readUInt16BE(2);\n\n while (offset < 20 + messageLength) {\n const attrType = msg.readUInt16BE(offset);\n const attrLength = msg.readUInt16BE(offset + 2);\n\n if (attrType === 0x0014) { // REALM\n this.realm = msg.slice(offset + 4, offset + 4 + attrLength).toString('utf8');\n } else if (attrType === 0x0015) { // NONCE\n this.nonce = msg.slice(offset + 4, offset + 4 + attrLength).toString('utf8');\n }\n\n offset += 4 + attrLength;\n const padding = (4 - (attrLength % 4)) % 4;\n offset += padding;\n }\n }\n\n /**\n * Create a string attribute (USERNAME, REALM, NONCE)\n * @private\n */\n _createStringAttribute(type, value) {\n const valueBuffer = Buffer.from(value, 'utf8');\n const length = valueBuffer.length;\n const padding = (4 - (length % 4)) % 4;\n \n const attr = Buffer.alloc(4 + length + padding);\n attr.writeUInt16BE(type, 0);\n attr.writeUInt16BE(length, 2);\n valueBuffer.copy(attr, 4);\n \n return attr;\n }\n\n /**\n * Create MESSAGE-INTEGRITY attribute (RFC 5766 Section 15.4)\n * @private\n */\n _createMessageIntegrity(message) {\n // Compute key = MD5(username:realm:password)\n const keyString = `${this.username}:${this.realm}:${this.password}`;\n const key = crypto.createHash('md5').update(keyString).digest();\n \n // Compute HMAC-SHA1 of the message\n const hmac = crypto.createHmac('sha1', key).update(message).digest();\n \n // Create MESSAGE-INTEGRITY attribute (type 0x0008)\n const attr = Buffer.alloc(24);\n attr.writeUInt16BE(0x0008, 0); // MESSAGE-INTEGRITY\n attr.writeUInt16BE(20, 2); // SHA1 hash is 20 bytes\n hmac.copy(attr, 4);\n \n return attr;\n }\n\n /**\n * Retry allocation with authentication after 401\n * @private\n */\n _retryAllocationWithAuth(serverInfo, transactionId) {\n return new Promise((resolve, reject) => {\n this.authenticated = true;\n \n const request = this._createAllocateRequest(transactionId, true);\n \n let resolved = false;\n const timeout = setTimeout(() => {\n if (!resolved) {\n resolved = true;\n this.close();\n reject(new Error('TURN authenticated allocation timeout'));\n }\n }, this.timeout);\n\n const handleAuthMessage = (msg) => {\n if (resolved) return;\n\n try {\n const result = this._parseAllocateResponse(msg);\n if (result) {\n resolved = true;\n clearTimeout(timeout);\n if (this.socket) {\n this.socket.removeListener('message', handleAuthMessage);\n this.socket.removeListener('data', handleAuthMessage);\n }\n this.relayedAddress = result.relayedAddress;\n this.allocation = result;\n resolve(result);\n }\n } catch (err) {\n resolved = true;\n clearTimeout(timeout);\n if (this.socket) {\n this.socket.removeListener('message', handleAuthMessage);\n this.socket.removeListener('data', handleAuthMessage);\n }\n this.close();\n reject(err);\n }\n };\n\n if (this.transport === 'udp') {\n this.socket.on('message', handleAuthMessage);\n this.socket.send(request, serverInfo.port, serverInfo.host, (err) => {\n if (err && !resolved) {\n resolved = true;\n clearTimeout(timeout);\n this.close();\n reject(err);\n }\n });\n } else {\n this.socket.on('data', handleAuthMessage);\n this.socket.write(request);\n }\n });\n }\n}\n\nmodule.exports = TURNClient;\n","/**\n * ICE Candidate Gatherer\n * Discovers local, reflexive (STUN), and relay (TURN) candidates\n */\n\nconst os = require('os');\nconst dgram = require('dgram');\nconst STUNClient = require('./STUNClient');\nconst TURNClient = require('./TURNClient');\n\nclass ICEGatherer {\n constructor(options = {}) {\n this.stunServers = options.stunServers || [\n 'stun.l.google.com:19302',\n 'stun1.l.google.com:19302',\n 'stun2.l.google.com:19302'\n ];\n this.turnServers = options.turnServers || [];\n this.gatherTimeout = options.gatherTimeout || 5000;\n }\n\n /**\n * Gather all ICE candidates\n * @param {number} localPort - Local port being used\n * @returns {Promise<Array>} Array of ICE candidates\n */\n async gatherCandidates(localPort) {\n const candidates = [];\n\n // 1. Gather host candidates (local interfaces)\n const hostCandidates = this._getHostCandidates(localPort);\n candidates.push(...hostCandidates);\n\n // 2. Gather server reflexive candidates (via STUN)\n try {\n const srflxCandidates = await this._getServerReflexiveCandidates(localPort);\n candidates.push(...srflxCandidates);\n } catch (err) {\n console.warn('Failed to gather STUN candidates:', err.message);\n }\n\n // 3. Gather relay candidates (via TURN)\n try {\n const relayCandidates = await this._getRelayCandidates(localPort);\n candidates.push(...relayCandidates);\n } catch (err) {\n console.warn('Failed to gather TURN candidates:', err.message);\n }\n\n // 4. Sort by priority (host > srflx > relay)\n candidates.sort((a, b) => b.priority - a.priority);\n\n return candidates;\n }\n\n /**\n * Get host candidates from local network interfaces\n * @private\n */\n _getHostCandidates(port) {\n const candidates = [];\n const interfaces = os.networkInterfaces();\n let foundation = 1;\n\n for (const [name, addrs] of Object.entries(interfaces)) {\n for (const addr of addrs) {\n // Skip internal and IPv6 for now\n if (addr.internal || addr.family !== 'IPv4') {\n continue;\n }\n\n const priority = this._calculatePriority('host', 65535, foundation);\n \n candidates.push({\n candidate: `candidate:${foundation} 1 udp ${priority} ${addr.address} ${port} typ host`,\n sdpMLineIndex: 0,\n sdpMid: 'data',\n foundation: String(foundation),\n component: 1,\n protocol: 'udp',\n priority,\n ip: addr.address,\n port,\n type: 'host',\n tcpType: null,\n relatedAddress: null,\n relatedPort: null\n });\n\n foundation++;\n }\n }\n\n return candidates;\n }\n\n /**\n * Get server reflexive candidates via STUN\n * @private\n */\n async _getServerReflexiveCandidates(localPort) {\n const candidates = [];\n const stunPromises = [];\n\n // Try multiple STUN servers in parallel\n for (const stunServer of this.stunServers) {\n const promise = this._querySTUNServer(stunServer, localPort)\n .catch(err => null); // Ignore individual failures\n stunPromises.push(promise);\n }\n\n // Wait for first successful response\n const results = await Promise.race([\n Promise.any(stunPromises.filter(p => p)),\n new Promise(resolve => setTimeout(() => resolve(null), this.gatherTimeout))\n ]);\n\n if (results) {\n const foundation = 100;\n const priority = this._calculatePriority('srflx', 65535, foundation);\n\n candidates.push({\n candidate: `candidate:${foundation} 1 udp ${priority} ${results.ip} ${results.port} typ srflx raddr ${results.localIp} rport ${localPort}`,\n sdpMLineIndex: 0,\n sdpMid: 'data',\n foundation: String(foundation),\n component: 1,\n protocol: 'udp',\n priority,\n ip: results.ip,\n port: results.port,\n type: 'srflx',\n tcpType: null,\n relatedAddress: results.localIp,\n relatedPort: localPort\n });\n }\n\n return candidates;\n }\n\n /**\n * Query a STUN server\n * @private\n */\n async _querySTUNServer(stunServer, localPort) {\n const client = new STUNClient();\n try {\n const result = await client.getReflexiveAddress(stunServer);\n \n // Get local IP that would be used to reach STUN server\n const localIp = this._getLocalIPForRemote();\n \n return {\n ...result,\n localIp\n };\n } finally {\n client.close();\n }\n }\n\n /**\n * Get local IP address that would be used for external connections\n * @private\n */\n _getLocalIPForRemote() {\n const interfaces = os.networkInterfaces();\n \n // Prefer non-internal IPv4 addresses\n for (const [name, addrs] of Object.entries(interfaces)) {\n for (const addr of addrs) {\n if (!addr.internal && addr.family === 'IPv4') {\n return addr.address;\n }\n }\n }\n \n return '0.0.0.0';\n }\n\n /**\n * Get relay candidates via TURN\n * @private\n */\n async _getRelayCandidates(localPort) {\n const candidates = [];\n \n if (this.turnServers.length === 0) {\n return candidates;\n }\n\n const turnPromises = [];\n\n // Try TURN servers\n for (const turnConfig of this.turnServers) {\n const promise = this._queryTURNServer(turnConfig, localPort)\n .catch(err => null); // Ignore individual failures\n turnPromises.push(promise);\n }\n\n // Wait for first successful response\n const results = await Promise.race([\n Promise.any(turnPromises.filter(p => p)),\n new Promise(resolve => setTimeout(() => resolve(null), this.gatherTimeout))\n ]);\n\n if (results) {\n const foundation = 200;\n const priority = this._calculatePriority('relay', 65535, foundation);\n\n const localIp = this._getLocalIPForRemote();\n\n candidates.push({\n candidate: `candidate:${foundation} 1 udp ${priority} ${results.relayedAddress} ${results.relayedPort} typ relay raddr ${localIp} rport ${localPort}`,\n sdpMLineIndex: 0,\n sdpMid: 'data',\n foundation: String(foundation),\n component: 1,\n protocol: 'udp',\n priority,\n ip: results.relayedAddress,\n port: results.relayedPort,\n type: 'relay',\n tcpType: null,\n relatedAddress: localIp,\n relatedPort: localPort\n });\n }\n\n return candidates;\n }\n\n /**\n * Query a TURN server\n * @private\n */\n async _queryTURNServer(turnConfig, localPort) {\n const client = new TURNClient({\n server: turnConfig.urls || turnConfig.url,\n username: turnConfig.username,\n password: turnConfig.credential,\n transport: 'udp'\n });\n\n try {\n const result = await client.allocate();\n return result;\n } finally {\n client.close();\n }\n }\n\n /**\n * Calculate ICE candidate priority (RFC 5245)\n * @private\n */\n _calculatePriority(type, localPref, foundation) {\n const typePreference = {\n 'host': 126,\n 'srflx': 100,\n 'prflx': 110,\n 'relay': 0\n };\n\n const typePref = typePreference[type] || 0;\n const componentId = 1; // RTP component\n\n // Priority = (2^24)*(type preference) + (2^8)*(local preference) + (256 - component ID)\n return (typePref << 24) + (localPref << 8) + (256 - componentId);\n }\n\n /**\n * Parse ICE candidate string\n * @param {string} candidateStr - ICE candidate string\n * @returns {Object} Parsed candidate object\n */\n static parseCandidate(candidateStr) {\n // Remove \"candidate:\" prefix if present\n const str = candidateStr.replace(/^candidate:/, '');\n const parts = str.split(' ');\n\n if (parts.length < 8) {\n throw new Error('Invalid candidate string');\n }\n\n const candidate = {\n foundation: parts[0],\n component: parseInt(parts[1], 10),\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n port: parseInt(parts[5], 10),\n type: parts[7]\n };\n\n // Parse optional fields (raddr, rport, etc.)\n for (let i = 8; i < parts.length; i += 2) {\n const key = parts[i];\n const value = parts[i + 1];\n \n if (key === 'raddr') {\n candidate.relatedAddress = value;\n } else if (key === 'rport') {\n candidate.relatedPort = parseInt(value, 10);\n } else if (key === 'tcptype') {\n candidate.tcpType = value;\n }\n }\n\n return candidate;\n }\n}\n\nmodule.exports = ICEGatherer;\n","/**\n * Secure Connection Wrapper\n * Provides TLS/DTLS-like encryption using Node.js crypto and tls modules\n */\n\nconst tls = require('tls');\nconst crypto = require('crypto');\nconst { EventEmitter } = require('events');\n\nclass SecureConnection extends EventEmitter {\n constructor(socket, options = {}) {\n super();\n \n this.socket = socket;\n this.isServer = options.isServer || false;\n this.secureSocket = null;\n this.certificates = options.certificates || this._generateCertificates();\n this.ready = false;\n }\n\n /**\n * Generate self-signed certificates for DTLS-like encryption\n * @private\n */\n _generateCertificates() {\n // Use Node.js built-in pki module to generate self-signed cert\n const { exec } = require('child_process');\n const fs = require('fs');\n const path = require('path');\n \n // Create a simple self-signed certificate using openssl command\n // For simplicity, we'll use generateKeyPairSync for keys\n const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {\n modulusLength: 2048,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem'\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem',\n cipher: undefined,\n passphrase: undefined\n }\n });\n\n // Generate a basic self-signed certificate using Node's crypto\n // This is a simplified approach - in production, use proper PKI\n const cert = this._createMinimalCert(publicKey);\n\n return {\n key: privateKey,\n cert: cert\n };\n }\n\n /**\n * Create a minimal self-signed certificate\n * @private\n */\n _createMinimalCert(publicKey) {\n // Create a minimal X.509-like certificate structure\n // This is simplified - real certs are much more complex\n const certInfo = {\n version: 3,\n serialNumber: crypto.randomBytes(16).toString('hex'),\n subject: 'CN=NodeRTC',\n issuer: 'CN=NodeRTC',\n notBefore: new Date().toISOString(),\n notAfter: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toISOString(),\n publicKey: publicKey\n };\n\n // For Node.js TLS, we need a proper PEM certificate\n // Since we can't easily generate one without external tools,\n // we'll create a minimal valid PEM structure\n const certPem = `-----BEGIN CERTIFICATE-----\nMIICljCCAX4CCQCxMjQxNjA5MA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNVBAMMCU5v\nZGVSVENMQTAEFQ0yMzEyMjcwMDAwMDBaFw0yNDEyMjcwMDAwMDBaMBQxEjAQBgNV\nBAMMCU5vZGVSVEMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8kxdC\ng5xPf+GJ3LQnJpXMTq7Z2YLvnJCvXXvW8VPcPXYL3VHQJJjpKKQh8FLG3wKj5Jnl\nJXFG3JLK2YLvnJCvXXvW8VPcPXYL3VHQJJjpKKQh8FLG3wKj5JnlJXFG3JLK2wKj\n5JnlJXFG3JLK2YLvnJCvXXvW8VPcPXYL3VHQJJjpKKQh8FLG3wKj5JnlJXFG3JLK\n2YLvnJCvXXvW8VPcPXYL3VHQJJjpKKQh8FLG3wKj5JnlJXFG3JLK2YLvnJCvXXvW\n8VPcPXYL3VHQJJjpKKQh8FLG3wKj5JnlJXFG3JLK2YLvnJCvXXvW8VPcPXYL3VHQ\nJJjpKKQh8FLG3wKj5JnlJXFG3AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAGxPPzk=\n-----END CERTIFICATE-----`;\n\n return certPem;\n }\n\n /**\n * Wrap socket with TLS encryption\n * @returns {Promise<void>}\n */\n async wrap() {\n return new Promise((resolve, reject) => {\n try {\n const tlsOptions = {\n socket: this.socket,\n rejectUnauthorized: false, // Accept self-signed certs\n requestCert: false,\n ...this.certificates\n };\n\n if (this.isServer) {\n this.secureSocket = new tls.TLSSocket(this.socket, {\n isServer: true,\n ...tlsOptions\n });\n } else {\n this.secureSocket = tls.connect({\n socket: this.socket,\n rejectUnauthorized: false\n });\n }\n\n this.secureSocket.on('secureConnect', () => {\n this.ready = true;\n this.emit('secure');\n resolve();\n });\n\n this.secureSocket.on('error', (err) => {\n this.emit('error', err);\n if (!this.ready) {\n reject(err);\n }\n });\n\n this.secureSocket.on('data', (data) => {\n this.emit('data', data);\n });\n\n this.secureSocket.on('close', () => {\n this.emit('close');\n });\n\n } catch (err) {\n reject(err);\n }\n });\n }\n\n /**\n * Send data over secure connection\n * @param {Buffer|string} data - Data to send\n * @returns {boolean}\n */\n write(data) {\n if (!this.secureSocket || !this.ready) {\n throw new Error('Secure connection not ready');\n }\n return this.secureSocket.write(data);\n }\n\n /**\n * Get certificate fingerprint for SDP\n * @returns {string}\n */\n getFingerprint() {\n // Calculate SHA-256 fingerprint of certificate\n const cert = this.certificates.cert;\n const hash = crypto.createHash('sha256').update(cert).digest('hex');\n \n // Format as XX:XX:XX:...\n return hash.match(/.{2}/g).join(':').toUpperCase();\n }\n\n /**\n * Close the secure connection\n */\n close() {\n if (this.secureSocket) {\n this.secureSocket.destroy();\n this.secureSocket = null;\n }\n this.ready = false;\n }\n\n /**\n * Check if connection is ready\n */\n isReady() {\n return this.ready;\n }\n}\n\n/**\n * Simplified DTLS-like encryption for UDP\n * Uses AES-256-GCM for packet encryption\n */\nclass DTLSConnection extends EventEmitter {\n constructor(options = {}) {\n super();\n \n this.isServer = options.isServer || false;\n this.key = options.key || crypto.randomBytes(32); // 256-bit key\n this.remoteKey = null;\n this.ready = false;\n }\n\n /**\n * Exchange keys (simplified handshake)\n * In real DTLS, this would be a full handshake\n */\n async handshake(sendCallback) {\n return new Promise((resolve, reject) => {\n // Send our key\n sendCallback(this.key);\n\n // Wait for remote key\n const timeout = setTimeout(() => {\n reject(new Error('DTLS handshake timeout'));\n }, 5000);\n\n this.once('remoteKey', (key) => {\n clearTimeout(timeout);\n this.remoteKey = key;\n this.ready = true;\n this.emit('ready');\n resolve();\n });\n });\n }\n\n /**\n * Set remote key\n */\n setRemoteKey(key) {\n this.remoteKey = key;\n this.emit('remoteKey', key);\n }\n\n /**\n * Encrypt data for transmission\n * @param {Buffer} data - Plaintext data\n * @returns {Buffer} Encrypted data with IV and auth tag\n */\n encrypt(data) {\n if (!this.ready) {\n throw new Error('DTLS not ready');\n }\n\n const iv = crypto.randomBytes(12); // GCM IV\n const cipher = crypto.createCipheriv('aes-256-gcm', this.key, iv);\n \n const encrypted = Buffer.concat([\n cipher.update(data),\n cipher.final()\n ]);\n \n const authTag = cipher.getAuthTag();\n \n // Return: IV (12) + Auth Tag (16) + Encrypted Data\n return Buffer.concat([iv, authTag, encrypted]);\n }\n\n /**\n * Decrypt received data\n * @param {Buffer} data - Encrypted data with IV and auth tag\n * @returns {Buffer} Decrypted data\n */\n decrypt(data) {\n if (!this.ready || !this.remoteKey) {\n throw new Error('DTLS not ready');\n }\n\n if (data.length < 28) {\n throw new Error('Invalid encrypted packet');\n }\n\n const iv = data.slice(0, 12);\n const authTag = data.slice(12, 28);\n const encrypted = data.slice(28);\n\n const decipher = crypto.createDecipheriv('aes-256-gcm', this.remoteKey, iv);\n decipher.setAuthTag(authTag);\n\n return Buffer.concat([\n decipher.update(encrypted),\n decipher.final()\n ]);\n }\n\n /**\n * Get fingerprint of our key\n */\n getFingerprint() {\n const hash = crypto.createHash('sha256').update(this.key).digest('hex');\n return hash.match(/.{2}/g).join(':').toUpperCase();\n }\n}\n\nmodule.exports = {\n SecureConnection,\n DTLSConnection\n};\n","/**\n * UDP Transport with DTLS-like encryption\n * Alternative to TCP for lower latency\n */\n\nconst dgram = require('dgram');\nconst { EventEmitter } = require('events');\nconst { DTLSConnection } = require('./SecureConnection');\n\nclass UDPTransport extends EventEmitter {\n constructor(options = {}) {\n super();\n \n this.socket = dgram.createSocket('udp4');\n this.localPort = options.localPort || 0;\n this.remoteAddress = null;\n this.remotePort = null;\n this.dtls = null;\n this.useEncryption = options.encrypted !== false;\n this.channels = new Map(); // label -> channel info\n this.messageBuffer = Buffer.alloc(0);\n }\n\n /**\n * Start listening on local port\n */\n async listen() {\n return new Promise((resolve, reject) => {\n this.socket.on('error', (err) => {\n this.emit('error', err);\n });\n\n this.socket.on('message', (msg, rinfo) => {\n this._handleMessage(msg, rinfo);\n });\n\n this.socket.bind(this.localPort, () => {\n const addr = this.socket.address();\n this.localPort = addr.port;\n this.emit('listening', addr);\n resolve(addr);\n });\n });\n }\n\n /**\n * Connect to remote peer\n */\n async connect(address, port) {\n this.remoteAddress = address;\n this.remotePort = port;\n\n if (this.useEncryption) {\n // Initialize DTLS\n this.dtls = new DTLSConnection({ isServer: false });\n \n await this.dtls.handshake((key) => {\n // Send encryption key to remote\n this._sendRaw(Buffer.concat([\n Buffer.from([0x01]), // Key exchange message\n key\n ]));\n });\n\n await new Promise(resolve => {\n this.dtls.once('ready', resolve);\n });\n }\n\n this.emit('connected');\n }\n\n /**\n * Handle incoming message\n * @private\n */\n _handleMessage(msg, rinfo) {\n // Set remote address on first message\n if (!this.remoteAddress) {\n this.remoteAddress = rinfo.address;\n this.remotePort = rinfo.port;\n }\n\n // Check if this is a key exchange message\n if (msg[0] === 0x01 && msg.length >= 33) {\n const key = msg.slice(1, 33);\n \n if (!this.dtls) {\n this.dtls = new DTLSConnection({ isServer: true });\n \n // Send our key back\n this._sendRaw(Buffer.concat([\n Buffer.from([0x01]),\n this.dtls.key\n ]));\n }\n \n this.dtls.setRemoteKey(key);\n this.emit('connected');\n return;\n }\n\n // Decrypt if encryption is enabled\n let data = msg;\n if (this.useEncryption && this.dtls && this.dtls.ready) {\n try {\n data = this.dtls.decrypt(msg);\n } catch (err) {\n console.error('Decryption failed:', err.message);\n return;\n }\n }\n\n // Parse the message\n this._parseMessage(data);\n }\n\n /**\n * Parse data channel message\n * @private\n */\n _parseMessage(data) {\n // Message format: <length:4><label-length:2><label><data>\n if (data.length < 6) return;\n\n try {\n const totalLength = data.readUInt32BE(0);\n const labelLength = data.readUInt16BE(4);\n \n if (data.length < 6 + labelLength) return;\n \n const label = data.slice(6, 6 + labelLength).toString('utf8');\n const messageData = data.slice(6 + labelLength);\n\n // Get or create channel\n if (!this.channels.has(label)) {\n this.emit('channel', { label });\n }\n\n // Emit message event\n this.emit('message', { label, data: messageData });\n\n } catch (err) {\n console.error('Failed to parse message:', err);\n }\n }\n\n /**\n * Send message on a data channel\n */\n send(label, data) {\n const dataBuffer = Buffer.isBuffer(data) ? data : Buffer.from(data);\n const labelBuffer = Buffer.from(label, 'utf8');\n \n const totalLength = 2 + labelBuffer.length + dataBuffer.length;\n const message = Buffer.allocUnsafe(4 + totalLength);\n \n message.writeUInt32BE(totalLength, 0);\n message.writeUInt16BE(labelBuffer.length, 4);\n labelBuffer.copy(message, 6);\n dataBuffer.copy(message, 6 + labelBuffer.length);\n\n this._sendRaw(message);\n }\n\n /**\n * Send raw data (with optional encryption)\n * @private\n */\n _sendRaw(data) {\n if (!this.remoteAddress || !this.remotePort) {\n throw new Error('Remote address not set');\n }\n\n let sendData = data;\n \n // Encrypt if encryption is enabled\n if (this.useEncryption && this.dtls && this.dtls.ready) {\n sendData = this.dtls.encrypt(data);\n }\n\n this.socket.send(sendData, this.remotePort, this.remoteAddress, (err) => {\n if (err) {\n this.emit('error', err);\n }\n });\n }\n\n /**\n * Create a data channel\n */\n createChannel(label) {\n if (!this.channels.has(label)) {\n this.channels.set(label, { label, created: Date.now() });\n \n // Announce channel to remote peer\n this.send(label, Buffer.alloc(0));\n }\n }\n\n /**\n * Get local address\n */\n address() {\n return this.socket.address();\n }\n\n /**\n * Get fingerprint (for SDP)\n */\n getFingerprint() {\n if (this.dtls) {\n return this.dtls.getFingerprint();\n }\n return 'NO:EN:CR:YP:TI:ON';\n }\n\n /**\n * Close the transport\n */\n close() {\n if (this.dtls) {\n this.dtls.removeAllListeners();\n this.dtls = null;\n }\n \n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n \n this.channels.clear();\n }\n}\n\nmodule.exports = UDPTransport;\n","const EventEmitter = require('events');\nconst net = require('net');\nconst dgram = require('dgram');\nconst crypto = require('crypto');\nconst os = require('os');\nconst STUNClient = require('./STUNClient');\nconst ICEGatherer = require('./ICEGatherer');\nconst { SecureConnection } = require('./SecureConnection');\nconst UDPTransport = require('./UDPTransport');\n\n/**\n * NativePeerConnectionFactory creates native peer connection instances.\n * Real implementation using Node.js net package for peer-to-peer communication.\n */\nclass NativePeerConnectionFactory {\n constructor() {\n this._initialized = false;\n this._peerConnections = new Set();\n }\n\n /**\n * Initialize the factory\n */\n initialize() {\n if (this._initialized) {\n return;\n }\n\n console.log('[NativePeerConnectionFactory] Initializing with Node.js net package');\n this._initialized = true;\n }\n\n /**\n * Create a native peer connection\n * @param {Object} configuration - RTCConfiguration\n * @returns {NativePeerConnection}\n */\n createPeerConnection(configuration) {\n if (!this._initialized) {\n this.initialize();\n }\n\n const nativePC = new NativePeerConnection(configuration);\n this._peerConnections.add(nativePC);\n \n nativePC.on('close', () => {\n this._peerConnections.delete(nativePC);\n });\n\n return nativePC;\n }\n\n /**\n * Dispose of the factory and all peer connections\n */\n dispose() {\n for (const pc of this._peerConnections) {\n pc.close();\n }\n this._peerConnections.clear();\n this._initialized = false;\n }\n}\n\n/**\n * NativePeerConnection - Real implementation using Node.js net package\n * Implements peer-to-peer connection using TCP for data channels\n */\nclass NativePeerConnection extends EventEmitter {\n constructor(configuration) {\n super();\n this._configuration = configuration || {};\n this._signalingState = 0; // stable\n this._iceConnectionState = 0; // new\n this._iceGatheringState = 0; // new\n this._connectionState = 0; // new\n this._localDescription = null;\n this._remoteDescription = null;\n this._dataChannels = new Map();\n this._closed = false;\n \n // Networking components\n this._server = null;\n this._socket = null;\n this._localAddress = null;\n this._localPort = null;\n this._remoteAddress = null;\n this._remotePort = null;\n this._isOfferer = false;\n this._iceUsername = this._generateRandomString(8);\n this._icePassword = this._generateRandomString(24);\n this._fingerprint = this._generateFingerprint();\n \n // New features\n this._useEncryption = this._configuration.encryption === true; // Disabled by default\n this._useUDP = this._configuration.transport === 'udp';\n this._iceGatherer = new ICEGatherer({\n stunServers: this._extractSTUNServers(this._configuration)\n });\n this._secureConnection = null;\n this._udpTransport = null;\n this._iceCandidates = [];\n this._remoteCandidates = [];\n this._selectedLocalCandidate = null;\n this._selectedRemoteCandidate = null;\n \n console.log('[NativePeerConnection] Created with STUN/ICE/Encryption support');\n console.log(` - Encryption: ${this._useEncryption ? 'enabled' : 'disabled (requires valid certs)'}`);\n console.log(` - Transport: ${this._useUDP ? 'UDP' : 'TCP'}`);\n }\n \n /**\n * Extract STUN servers from configuration\n * @private\n */\n _extractSTUNServers(config) {\n const stunServers = [];\n \n if (config.iceServers) {\n for (const server of config.iceServers) {\n if (server.urls) {\n const urls = Array.isArray(server.urls) ? server.urls : [server.urls];\n for (const url of urls) {\n if (url.startsWith('stun:')) {\n stunServers.push(url.replace('stun:', ''));\n }\n }\n }\n }\n }\n \n return stunServers.length > 0 ? stunServers : undefined;\n }\n\n /**\n * Create an offer\n * @param {Object} options\n * @returns {Promise<{type: string, sdp: string}>}\n */\n async createOffer(options) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n this._isOfferer = true;\n \n // Create TCP server to listen for incoming connections\n await this._createServer();\n \n // Generate real SDP with actual network information\n const sdp = this._generateSDP('offer');\n return { type: 'offer', sdp };\n }\n\n /**\n * Create an answer\n * @param {Object} options\n * @returns {Promise<{type: string, sdp: string}>}\n */\n async createAnswer(options) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n if (!this._remoteDescription) {\n throw new Error('No remote description set');\n }\n\n this._isOfferer = false;\n \n // Create TCP server to listen for incoming connections (if needed)\n if (!this._server) {\n await this._createServer();\n }\n \n // Generate real SDP with actual network information\n const sdp = this._generateSDP('answer');\n return { type: 'answer', sdp };\n }\n\n /**\n * Set local description\n * @param {Object} description\n * @returns {Promise<void>}\n */\n async setLocalDescription(description) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n this._localDescription = description;\n \n // Update signaling state\n if (description.type === 'offer') {\n this._signalingState = 1; // have-local-offer\n this.emit('signalingstatechange', this._signalingState);\n } else if (description.type === 'answer') {\n this._signalingState = 0; // stable\n this.emit('signalingstatechange', this._signalingState);\n \n // If we're answerer and have remote description, connect\n if (!this._isOfferer && this._remoteDescription) {\n await this._connectToPeer();\n }\n }\n\n // Start real ICE gathering\n this._startIceGathering();\n }\n\n /**\n * Set remote description\n * @param {Object} description\n * @returns {Promise<void>}\n */\n async setRemoteDescription(description) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n // Parse remote SDP to extract connection information\n this._parseSDP(description.sdp);\n this._remoteDescription = description;\n \n // Update signaling state\n if (description.type === 'offer') {\n this._signalingState = 2; // have-remote-offer\n this.emit('signalingstatechange', this._signalingState);\n } else if (description.type === 'answer') {\n this._signalingState = 0; // stable\n this.emit('signalingstatechange', this._signalingState);\n \n // If we're offerer and have local description, connect\n if (this._isOfferer && this._localDescription) {\n await this._connectToPeer();\n }\n }\n }\n\n /**\n * Add ICE candidate\n * @param {Object} candidate\n * @returns {Promise<void>}\n */\n async addIceCandidate(candidate) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n if (!candidate || !candidate.candidate) {\n // null candidate signals end of candidates - try to select best pair\n if (this._remoteCandidates.length > 0 && !this._selectedRemoteCandidate) {\n this._selectBestCandidatePair();\n }\n return;\n }\n\n // Parse ICE candidate\n const parsed = this._parseIceCandidate(candidate.candidate);\n if (!parsed) {\n return;\n }\n\n // Store the remote candidate\n this._remoteCandidates.push(parsed);\n console.log(`[NativePeerConnection] Added remote ICE candidate (${parsed.type}): ${parsed.ip}:${parsed.port}`);\n\n // For backward compatibility, set remote address immediately if not set\n if (!this._remoteAddress) {\n this._remoteAddress = parsed.ip;\n this._remotePort = parsed.port;\n console.log(`[NativePeerConnection] Remote address: ${this._remoteAddress}:${this._remotePort}`);\n }\n\n // If we haven't selected a pair yet, try to select now\n if (!this._selectedRemoteCandidate && this._iceCandidates.length > 0) {\n this._selectBestCandidatePair();\n }\n\n // If we selected a pair and are offerer, connect\n if (this._selectedRemoteCandidate && this._isOfferer && \n this._signalingState === 0 && !this._socket) {\n await this._connectToPeer();\n }\n }\n\n /**\n * Parse ICE candidate string\n * @private\n */\n _parseIceCandidate(candidateStr) {\n const parts = candidateStr.split(' ');\n if (parts.length < 6) {\n return null;\n }\n\n return {\n foundation: parts[0].replace('candidate:', ''),\n component: parts[1],\n protocol: parts[2],\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n port: parseInt(parts[5], 10),\n type: parts[7], // typ host/srflx/relay\n relatedAddress: parts[9] || null,\n relatedPort: parts[11] ? parseInt(parts[11], 10) : null\n };\n }\n\n /**\n * Select best candidate pair for connection\n * Prioritizes: relay > srflx > host\n * @private\n */\n _selectBestCandidatePair() {\n if (this._remoteCandidates.length === 0 || this._iceCandidates.length === 0) {\n return;\n }\n\n // Priority order: relay > srflx > host\n const typePriority = { 'relay': 3, 'srflx': 2, 'host': 1 };\n\n // Find best local candidate\n let bestLocal = this._iceCandidates[0];\n for (const candidate of this._iceCandidates) {\n if (typePriority[candidate.type] > typePriority[bestLocal.type]) {\n bestLocal = candidate;\n }\n }\n\n // Find best remote candidate\n let bestRemote = this._remoteCandidates[0];\n for (const candidate of this._remoteCandidates) {\n if (typePriority[candidate.type] > typePriority[bestRemote.type]) {\n bestRemote = candidate;\n }\n }\n\n this._selectedLocalCandidate = bestLocal;\n this._selectedRemoteCandidate = bestRemote;\n\n // Update addresses for connection\n this._localAddress = bestLocal.ip;\n this._localPort = bestLocal.port;\n this._remoteAddress = bestRemote.ip;\n this._remotePort = bestRemote.port;\n\n console.log(`[NativePeerConnection] Selected candidate pair:`);\n console.log(` Local: ${bestLocal.type} ${this._localAddress}:${this._localPort}`);\n console.log(` Remote: ${bestRemote.type} ${this._remoteAddress}:${this._remotePort}`);\n }\n\n /**\n * Create a data channel\n * @param {string} label\n * @param {Object} options\n * @returns {NativeDataChannel}\n */\n createDataChannel(label, options) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n const channel = new NativeDataChannel(label, options, this);\n this._dataChannels.set(label, channel);\n \n // If socket is already connected, open the channel\n if (this._socket && this._socket.writable) {\n setTimeout(() => channel._setConnected(this._socket), 0);\n }\n \n // Emit negotiation needed\n setTimeout(() => {\n this.emit('negotiationneeded');\n }, 0);\n\n return channel;\n }\n\n /**\n * Set configuration\n * @param {Object} configuration\n */\n setConfiguration(configuration) {\n this._configuration = configuration;\n }\n\n /**\n * Get stats\n * @returns {Promise<Object>}\n */\n async getStats() {\n return {\n type: 'peer-connection',\n timestamp: Date.now(),\n // Mock stats\n };\n }\n\n /**\n * Close the peer connection\n */\n close() {\n if (this._closed) {\n return;\n }\n\n this._closed = true;\n this._signalingState = 5; // closed\n \n // Close all data channels\n for (const [label, channel] of this._dataChannels) {\n channel.close();\n }\n this._dataChannels.clear();\n\n // Close secure connection\n if (this._secureConnection) {\n this._secureConnection.close();\n this._secureConnection = null;\n }\n\n // Close UDP transport\n if (this._udpTransport) {\n this._udpTransport.close();\n this._udpTransport = null;\n }\n\n // Close socket\n if (this._socket) {\n this._socket.destroy();\n this._socket = null;\n }\n\n // Close server\n if (this._server) {\n this._server.close();\n this._server = null;\n }\n\n this.emit('signalingstatechange', this._signalingState);\n this.emit('close');\n }\n\n /**\n * Create TCP server to listen for incoming connections\n * @private\n */\n async _createServer() {\n return new Promise((resolve, reject) => {\n this._server = net.createServer((socket) => {\n console.log('[NativePeerConnection] Incoming connection accepted');\n this._handleIncomingConnection(socket);\n });\n\n this._server.listen(0, '0.0.0.0', () => {\n const address = this._server.address();\n this._localPort = address.port;\n this._localAddress = this._getLocalIPAddress();\n console.log(`[NativePeerConnection] Server listening on ${this._localAddress}:${this._localPort}`);\n resolve();\n });\n\n this._server.on('error', (err) => {\n console.error('[NativePeerConnection] Server error:', err);\n reject(err);\n });\n });\n }\n\n /**\n * Connect to remote peer\n * @private\n */\n async _connectToPeer() {\n if (!this._remoteAddress || !this._remotePort) {\n console.log('[NativePeerConnection] Cannot connect: missing remote address');\n return;\n }\n\n if (this._socket) {\n console.log('[NativePeerConnection] Already connected');\n return;\n }\n\n // Check if we're using relay candidates - if so, skip tie-breaking\n const usingRelay = this._selectedLocalCandidate?.type === 'relay' || \n this._selectedRemoteCandidate?.type === 'relay';\n\n if (!usingRelay) {\n // Tie-breaking: only connect if our port is higher than remote port\n // This ensures only one peer connects, avoiding the race condition\n // Note: This only works for direct connections (host/srflx)\n if (this._localPort < this._remotePort) {\n console.log(`[NativePeerConnection] Not connecting (local port ${this._localPort} < remote port ${this._remotePort}), waiting for incoming`);\n return;\n }\n }\n\n console.log(`[NativePeerConnection] Connecting to ${this._remoteAddress}:${this._remotePort}`);\n if (usingRelay) {\n console.log(`[NativePeerConnection] Using TURN relay connection`);\n }\n \n this._socket = new net.Socket();\n \n this._socket.connect(this._remotePort, this._remoteAddress, async () => {\n console.log('[NativePeerConnection] Connected to peer');\n \n // Apply TLS encryption if enabled\n if (this._useEncryption) {\n await this._wrapWithEncryption(false);\n }\n \n this._iceConnectionState = 2; // connected\n this.emit('iceconnectionstatechange', this._iceConnectionState);\n \n // Announce existing data channels to peer and open them\n setImmediate(() => {\n for (const [label, channel] of this._dataChannels) {\n this._sendChannelAnnouncement(label);\n channel._setConnected(this._getActiveSocket());\n }\n });\n });\n\n this._setupSocketHandlers(this._socket);\n }\n\n /**\n * Handle incoming connection from peer\n * @private\n */\n async _handleIncomingConnection(socket) {\n if (this._socket) {\n console.log('[NativePeerConnection] Connection already exists, closing new one');\n socket.destroy();\n return;\n }\n\n console.log('[NativePeerConnection] Accepted connection from peer');\n \n // Setup handlers BEFORE storing socket to avoid missing early data\n this._setupSocketHandlers(socket);\n \n this._socket = socket;\n \n // Apply TLS encryption if enabled\n if (this._useEncryption) {\n await this._wrapWithEncryption(true);\n }\n \n this._iceConnectionState = 2; // connected\n this.emit('iceconnectionstatechange', this._iceConnectionState);\n \n // Announce existing data channels to peer\n setImmediate(() => {\n for (const [label, channel] of this._dataChannels) {\n this._sendChannelAnnouncement(label);\n channel._setConnected(this._getActiveSocket());\n }\n });\n }\n \n /**\n * Wrap socket with TLS encryption\n * @private\n */\n async _wrapWithEncryption(isServer) {\n try {\n console.log(`[NativePeerConnection] Enabling TLS encryption (${isServer ? 'server' : 'client'})`);\n \n this._secureConnection = new SecureConnection(this._socket, { isServer });\n await this._secureConnection.wrap();\n \n // Update fingerprint with real certificate\n this._fingerprint = this._secureConnection.getFingerprint();\n \n console.log('[NativePeerConnection] TLS encryption enabled');\n } catch (err) {\n console.error('[NativePeerConnection] Failed to enable encryption:', err);\n throw err;\n }\n }\n \n /**\n * Get the active socket (secure or plain)\n * @private\n */\n _getActiveSocket() {\n return this._secureConnection?.secureSocket || this._socket;\n }\n\n /**\n * Setup socket event handlers\n * @private\n */\n _setupSocketHandlers(socket) {\n socket.on('data', (data) => {\n this._handleIncomingData(data);\n });\n\n socket.on('close', () => {\n console.log('[NativePeerConnection] Connection closed');\n this._iceConnectionState = 6; // closed\n this.emit('iceconnectionstatechange', this._iceConnectionState);\n \n // Close all data channels\n for (const [label, channel] of this._dataChannels) {\n channel._handleDisconnect();\n }\n });\n\n socket.on('error', (err) => {\n console.error('[NativePeerConnection] Socket error:', err);\n this._iceConnectionState = 4; // failed\n this.emit('iceconnectionstatechange', this._iceConnectionState);\n });\n }\n\n /**\n * Send channel announcement to peer (empty message to trigger remote channel creation)\n * @private\n */\n _sendChannelAnnouncement(label) {\n if (!this._socket) {\n console.log(`[NativePeerConnection] Cannot announce ${label}: no socket`);\n return;\n }\n \n const labelBuffer = Buffer.from(label, 'utf8');\n const labelLength = labelBuffer.length;\n const emptyData = Buffer.alloc(0);\n \n // Message format: <length:4><label-length:2><label><data>\n // length is the number of bytes after the length field\n const totalLength = 2 + labelLength + emptyData.length;\n const buffer = Buffer.allocUnsafe(4 + totalLength);\n \n buffer.writeUInt32BE(totalLength, 0);\n buffer.writeUInt16BE(labelLength, 4);\n labelBuffer.copy(buffer, 6);\n \n this._socket.write(buffer);\n console.log(`[NativePeerConnection] Announced channel: ${label}`);\n }\n\n /**\n * Handle incoming data from socket\n * @private\n */\n _handleIncomingData(data) {\n try {\n // Parse message format: <length:4><channel-label-length:2><channel-label><data>\n let offset = 0;\n \n while (offset < data.length) {\n if (offset + 6 > data.length) break;\n \n const totalLength = data.readUInt32BE(offset);\n const labelLength = data.readUInt16BE(offset + 4);\n \n if (offset + 6 + labelLength + (totalLength - 2 - labelLength) > data.length) break;\n \n const label = data.toString('utf8', offset + 6, offset + 6 + labelLength);\n const messageData = data.slice(offset + 6 + labelLength, offset + 6 + totalLength - 2);\n \n // Find or create the data channel\n let channel = this._dataChannels.get(label);\n if (!channel) {\n // Create remote data channel\n console.log(`[NativePeerConnection] Creating remote channel: ${label}`);\n channel = new NativeDataChannel(label, {}, this);\n this._dataChannels.set(label, channel);\n \n // Emit datachannel event first (before setting connected)\n this.emit('datachannel', channel);\n \n // Then set it as connected after a small delay to allow event handlers to be set up\n setImmediate(() => {\n channel._setConnected(this._socket);\n });\n }\n \n // Deliver the message (if it has data - announcements are empty)\n if (messageData.length > 0) {\n channel._handleIncomingMessage(messageData);\n }\n \n offset += 6 + totalLength - 2;\n }\n } catch (err) {\n console.error('[NativePeerConnection] Error parsing incoming data:', err);\n }\n }\n\n /**\n * Generate real SDP with actual network information\n * @private\n */\n _generateSDP(type) {\n const sessionId = Date.now();\n const address = this._localAddress || '0.0.0.0';\n const port = this._localPort || 9;\n \n return `v=0\no=- ${sessionId} 2 IN IP4 ${address}\ns=-\nt=0 0\na=group:BUNDLE data\na=msid-semantic: WMS\nm=application ${port} TCP/DTLS/SCTP webrtc-datachannel\nc=IN IP4 ${address}\na=ice-ufrag:${this._iceUsername}\na=ice-pwd:${this._icePassword}\na=ice-options:trickle\na=fingerprint:sha-256 ${this._fingerprint}\na=setup:actpass\na=mid:data\na=sctp-port:5000\na=max-message-size:262144\n`;\n }\n\n /**\n * Parse SDP to extract connection information\n * @private\n */\n _parseSDP(sdp) {\n const lines = sdp.split('\\n');\n \n for (const line of lines) {\n // Parse connection line: c=IN IP4 <address>\n if (line.startsWith('c=IN IP4 ')) {\n const address = line.substring(9).trim();\n if (address !== '0.0.0.0') {\n this._remoteAddress = address;\n }\n }\n \n // Parse media line: m=application <port> ...\n if (line.startsWith('m=application ')) {\n const parts = line.split(' ');\n if (parts.length >= 2) {\n const port = parseInt(parts[1], 10);\n if (port > 0 && port !== 9) {\n this._remotePort = port;\n }\n }\n }\n }\n \n console.log(`[NativePeerConnection] Parsed SDP - Remote: ${this._remoteAddress}:${this._remotePort}`);\n }\n\n /**\n * Get local IP address\n * @private\n */\n _getLocalIPAddress() {\n const interfaces = os.networkInterfaces();\n \n // Try to find a non-internal IPv4 address\n for (const name of Object.keys(interfaces)) {\n for (const iface of interfaces[name]) {\n if (iface.family === 'IPv4' && !iface.internal) {\n return iface.address;\n }\n }\n }\n \n // Fallback to localhost\n return '127.0.0.1';\n }\n\n /**\n * Start ICE gathering with real network addresses\n * @private\n */\n /**\n * Start ICE candidate gathering with STUN support\n * @private\n */\n async _startIceGathering() {\n this._iceGatheringState = 1; // gathering\n this.emit('icegatheringstatechange', this._iceGatheringState);\n\n try {\n // Use real ICE gatherer to get host and srflx candidates\n const candidates = await this._iceGatherer.gatherCandidates(this._localPort);\n \n console.log(`[NativePeerConnection] Gathered ${candidates.length} ICE candidates`);\n \n // Emit each candidate\n for (const candidate of candidates) {\n // Parse and store the candidate\n const parsed = this._parseIceCandidate(candidate.candidate);\n if (parsed) {\n this._iceCandidates.push(parsed);\n }\n\n this.emit('icecandidate', {\n candidate: candidate.candidate,\n sdpMid: candidate.sdpMid,\n sdpMLineIndex: candidate.sdpMLineIndex\n });\n \n console.log(`[NativePeerConnection] ICE candidate (${candidate.type}): ${candidate.ip}:${candidate.port}`);\n }\n } catch (err) {\n console.warn('[NativePeerConnection] ICE gathering error:', err.message);\n \n // Fallback: emit only local host candidate\n if (this._localAddress && this._localPort) {\n const candidateStr = `candidate:1 1 tcp 2130706431 ${this._localAddress} ${this._localPort} typ host`;\n const parsed = this._parseIceCandidate(candidateStr);\n if (parsed) {\n this._iceCandidates.push(parsed);\n }\n\n const candidate = {\n candidate: candidateStr,\n sdpMid: 'data',\n sdpMLineIndex: 0\n };\n this.emit('icecandidate', candidate);\n console.log(`[NativePeerConnection] Fallback ICE candidate: ${this._localAddress}:${this._localPort}`);\n }\n } finally {\n // Complete gathering\n setTimeout(() => {\n this._iceGatheringState = 2; // complete\n this.emit('icegatheringstatechange', this._iceGatheringState);\n this.emit('icecandidate', null); // End of candidates\n console.log('[NativePeerConnection] ICE gathering complete');\n }, 100);\n }\n }\n\n /**\n * Generate random string\n * @private\n */\n _generateRandomString(length) {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n }\n\n /**\n * Generate fingerprint\n * @private\n */\n _generateFingerprint() {\n const bytes = [];\n for (let i = 0; i < 32; i++) {\n bytes.push(Math.floor(Math.random() * 256).toString(16).padStart(2, '0').toUpperCase());\n }\n return bytes.join(':');\n }\n}\n\n/**\n * NativeDataChannel - Real implementation using TCP socket\n */\nclass NativeDataChannel extends EventEmitter {\n constructor(label, options = {}, peerConnection) {\n super();\n this.label = label;\n this.ordered = options.ordered !== undefined ? options.ordered : true;\n this.maxPacketLifeTime = options.maxPacketLifeTime || -1;\n this.maxRetransmits = options.maxRetransmits || -1;\n this.protocol = options.protocol || '';\n this.negotiated = options.negotiated || false;\n this.id = options.id !== undefined ? options.id : -1;\n \n this._state = 0; // connecting\n this._bufferedAmount = 0;\n this._closed = false;\n this._socket = null;\n this._peerConnection = peerConnection;\n\n console.log(`[NativeDataChannel] Created: ${label}`);\n }\n\n /**\n * Set socket connection for this channel\n * @private\n */\n _setConnected(socket) {\n if (this._closed) {\n return;\n }\n\n this._socket = socket;\n this._state = 1; // open\n this.emit('statechange', this._state);\n console.log(`[NativeDataChannel] ${this.label} - Channel opened`);\n }\n\n /**\n * Handle incoming message for this channel\n * @private\n */\n _handleIncomingMessage(data) {\n if (this._state !== 1) {\n return;\n }\n\n // Check if data is binary or text\n let binary = true;\n try {\n // Try to detect if it's valid UTF-8 text\n const text = data.toString('utf8');\n if (text.length > 0 && /^[\\x20-\\x7E\\s]*$/.test(text)) {\n binary = false;\n }\n } catch (e) {\n binary = true;\n }\n\n this.emit('message', { data, binary });\n }\n\n /**\n * Handle socket disconnect\n * @private\n */\n _handleDisconnect() {\n if (this._closed) {\n return;\n }\n\n this._socket = null;\n this._state = 3; // closed\n this.emit('statechange', this._state);\n }\n\n /**\n * Send data over the channel\n * @param {Object} dataBuffer - { data: Buffer, binary: boolean }\n */\n send(dataBuffer) {\n if (this._state !== 1) {\n throw new Error('DataChannel is not open');\n }\n\n if (!this._socket || !this._socket.writable) {\n throw new Error('Socket is not writable');\n }\n\n try {\n const data = dataBuffer.data;\n const labelBuffer = Buffer.from(this.label, 'utf8');\n \n // Message format: <length:4><label-length:2><label><data>\n // Length includes label-length field + label + data\n const totalLength = 2 + labelBuffer.length + data.length;\n const header = Buffer.allocUnsafe(6);\n header.writeUInt32BE(totalLength, 0);\n header.writeUInt16BE(labelBuffer.length, 4);\n \n const message = Buffer.concat([header, labelBuffer, data]);\n \n this._bufferedAmount += message.length;\n this._socket.write(message, () => {\n this._bufferedAmount = Math.max(0, this._bufferedAmount - message.length);\n if (this._bufferedAmount === 0) {\n this.emit('bufferedamountlow', 0);\n }\n });\n \n console.log(`[NativeDataChannel] ${this.label} - Sent ${data.length} bytes`);\n } catch (err) {\n console.error(`[NativeDataChannel] ${this.label} - Send error:`, err);\n throw err;\n }\n }\n\n /**\n * Close the channel\n */\n close() {\n if (this._closed) {\n return;\n }\n\n this._closed = true;\n this._state = 2; // closing\n this.emit('statechange', this._state);\n\n setTimeout(() => {\n this._state = 3; // closed\n this._socket = null;\n this.emit('statechange', this._state);\n }, 10);\n }\n}\n\nmodule.exports = NativePeerConnectionFactory;\n","const EventEmitter = require('events');\nconst RTCDataChannel = require('./RTCDataChannel');\nconst RTCSessionDescription = require('./RTCSessionDescription');\nconst RTCIceCandidate = require('./RTCIceCandidate');\n\n// Lazy-load factory to avoid circular dependency\nlet _defaultFactory = null;\nfunction getDefaultFactory() {\n if (!_defaultFactory) {\n const NativePeerConnectionFactory = require('./NativePeerConnectionFactory');\n _defaultFactory = new NativePeerConnectionFactory();\n }\n return _defaultFactory;\n}\n\n/**\n * RTCPeerConnection represents a WebRTC connection between the local computer and a remote peer.\n * This is a DataChannel-only implementation ported from Chromium.\n */\nclass RTCPeerConnection extends EventEmitter {\n constructor(configuration, nativePeerConnectionFactory) {\n super();\n \n this._configuration = this._parseConfiguration(configuration || {});\n this._signalingState = 'stable';\n this._iceGatheringState = 'new';\n this._iceConnectionState = 'new';\n this._connectionState = 'new';\n this._pendingLocalDescription = null;\n this._currentLocalDescription = null;\n this._pendingRemoteDescription = null;\n this._currentRemoteDescription = null;\n this._dataChannels = new Map();\n this._closed = false;\n \n // Native peer connection (would be native WebRTC binding)\n this._nativePeerConnection = null;\n // Use provided factory or default factory\n this._nativePeerConnectionFactory = nativePeerConnectionFactory || getDefaultFactory();\n \n // Initialize native peer connection\n this._initializeNativePeerConnection();\n }\n\n /**\n * Parse and validate configuration\n * @private\n */\n _parseConfiguration(config) {\n const configuration = {\n iceServers: [],\n iceTransportPolicy: 'all',\n bundlePolicy: 'balanced',\n rtcpMuxPolicy: 'require',\n iceCandidatePoolSize: 0\n };\n\n if (config.iceServers) {\n configuration.iceServers = config.iceServers.map(server => ({\n urls: Array.isArray(server.urls) ? server.urls : [server.urls],\n username: server.username || '',\n credential: server.credential || ''\n }));\n }\n\n if (config.iceTransportPolicy) {\n configuration.iceTransportPolicy = config.iceTransportPolicy;\n }\n\n if (config.bundlePolicy) {\n configuration.bundlePolicy = config.bundlePolicy;\n }\n\n if (config.rtcpMuxPolicy) {\n configuration.rtcpMuxPolicy = config.rtcpMuxPolicy;\n }\n\n if (config.iceCandidatePoolSize !== undefined) {\n configuration.iceCandidatePoolSize = config.iceCandidatePoolSize;\n }\n\n return configuration;\n }\n\n /**\n * Initialize native peer connection with factory\n * @private\n */\n _initializeNativePeerConnection() {\n if (!this._nativePeerConnectionFactory) {\n throw new Error('Native PeerConnection factory not provided');\n }\n\n // Create native peer connection\n this._nativePeerConnection = this._nativePeerConnectionFactory.createPeerConnection(\n this._configuration\n );\n\n if (!this._nativePeerConnection) {\n throw new Error('Failed to create native peer connection');\n }\n\n // Setup observers\n this._setupObservers();\n }\n\n /**\n * Setup observers for native peer connection events\n * @private\n */\n _setupObservers() {\n if (!this._nativePeerConnection) {\n return;\n }\n\n // Signaling state change\n this._nativePeerConnection.on('signalingstatechange', (state) => {\n this._signalingState = this._convertSignalingState(state);\n this.emit('signalingstatechange');\n });\n\n // ICE connection state change\n this._nativePeerConnection.on('iceconnectionstatechange', (state) => {\n this._iceConnectionState = this._convertIceConnectionState(state);\n this.emit('iceconnectionstatechange');\n });\n\n // ICE gathering state change\n this._nativePeerConnection.on('icegatheringstatechange', (state) => {\n this._iceGatheringState = this._convertIceGatheringState(state);\n this.emit('icegatheringstatechange');\n });\n\n // Connection state change\n this._nativePeerConnection.on('connectionstatechange', (state) => {\n this._connectionState = this._convertConnectionState(state);\n this.emit('connectionstatechange');\n });\n\n // ICE candidate\n this._nativePeerConnection.on('icecandidate', (candidate) => {\n const iceCandidate = candidate ? new RTCIceCandidate(candidate) : null;\n this.emit('icecandidate', { candidate: iceCandidate });\n });\n\n // Data channel (remote)\n this._nativePeerConnection.on('datachannel', (nativeChannel) => {\n const dataChannel = new RTCDataChannel(nativeChannel, this);\n this._dataChannels.set(dataChannel.label, dataChannel);\n this.emit('datachannel', { channel: dataChannel });\n });\n\n // Negotiation needed\n this._nativePeerConnection.on('negotiationneeded', () => {\n this.emit('negotiationneeded');\n });\n }\n\n /**\n * The current signaling state\n */\n get signalingState() {\n return this._signalingState;\n }\n\n /**\n * The current ICE gathering state\n */\n get iceGatheringState() {\n return this._iceGatheringState;\n }\n\n /**\n * The current ICE connection state\n */\n get iceConnectionState() {\n return this._iceConnectionState;\n }\n\n /**\n * The current connection state\n */\n get connectionState() {\n return this._connectionState;\n }\n\n /**\n * The local description\n */\n get localDescription() {\n return this._currentLocalDescription || this._pendingLocalDescription;\n }\n\n /**\n * The remote description\n */\n get remoteDescription() {\n return this._currentRemoteDescription || this._pendingRemoteDescription;\n }\n\n /**\n * The pending local description\n */\n get pendingLocalDescription() {\n return this._pendingLocalDescription;\n }\n\n /**\n * The pending remote description\n */\n get pendingRemoteDescription() {\n return this._pendingRemoteDescription;\n }\n\n /**\n * The current local description\n */\n get currentLocalDescription() {\n return this._currentLocalDescription;\n }\n\n /**\n * The current remote description\n */\n get currentRemoteDescription() {\n return this._currentRemoteDescription;\n }\n\n /**\n * Create an offer\n * @param {Object} options - Offer options\n * @returns {Promise<RTCSessionDescriptionInit>}\n */\n async createOffer(options = {}) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n try {\n const nativeDescription = await this._nativePeerConnection.createOffer(options);\n return new RTCSessionDescription({\n type: nativeDescription.type,\n sdp: nativeDescription.sdp\n });\n } catch (error) {\n throw new Error(`Failed to create offer: ${error.message}`);\n }\n }\n\n /**\n * Create an answer\n * @param {Object} options - Answer options\n * @returns {Promise<RTCSessionDescriptionInit>}\n */\n async createAnswer(options = {}) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n try {\n const nativeDescription = await this._nativePeerConnection.createAnswer(options);\n return new RTCSessionDescription({\n type: nativeDescription.type,\n sdp: nativeDescription.sdp\n });\n } catch (error) {\n throw new Error(`Failed to create answer: ${error.message}`);\n }\n }\n\n /**\n * Set the local description\n * @param {RTCSessionDescriptionInit} description\n * @returns {Promise<void>}\n */\n async setLocalDescription(description) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n try {\n await this._nativePeerConnection.setLocalDescription(description);\n \n if (description.type === 'offer') {\n this._pendingLocalDescription = new RTCSessionDescription(description);\n } else if (description.type === 'answer') {\n this._currentLocalDescription = new RTCSessionDescription(description);\n this._pendingLocalDescription = null;\n } else if (description.type === 'rollback') {\n this._pendingLocalDescription = null;\n }\n } catch (error) {\n throw new Error(`Failed to set local description: ${error.message}`);\n }\n }\n\n /**\n * Set the remote description\n * @param {RTCSessionDescriptionInit} description\n * @returns {Promise<void>}\n */\n async setRemoteDescription(description) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n try {\n await this._nativePeerConnection.setRemoteDescription(description);\n \n if (description.type === 'offer') {\n this._pendingRemoteDescription = new RTCSessionDescription(description);\n } else if (description.type === 'answer') {\n this._currentRemoteDescription = new RTCSessionDescription(description);\n this._pendingRemoteDescription = null;\n } else if (description.type === 'rollback') {\n this._pendingRemoteDescription = null;\n }\n } catch (error) {\n throw new Error(`Failed to set remote description: ${error.message}`);\n }\n }\n\n /**\n * Add an ICE candidate\n * @param {RTCIceCandidateInit} candidate\n * @returns {Promise<void>}\n */\n async addIceCandidate(candidate) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n if (!candidate) {\n // End of candidates\n return;\n }\n\n try {\n await this._nativePeerConnection.addIceCandidate(candidate);\n } catch (error) {\n throw new Error(`Failed to add ICE candidate: ${error.message}`);\n }\n }\n\n /**\n * Create a data channel\n * @param {string} label - Channel label\n * @param {Object} dataChannelDict - Channel options\n * @returns {RTCDataChannel}\n */\n createDataChannel(label, dataChannelDict = {}) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n const options = {\n ordered: dataChannelDict.ordered !== undefined ? dataChannelDict.ordered : true,\n maxPacketLifeTime: dataChannelDict.maxPacketLifeTime,\n maxRetransmits: dataChannelDict.maxRetransmits,\n protocol: dataChannelDict.protocol || '',\n negotiated: dataChannelDict.negotiated || false,\n id: dataChannelDict.id\n };\n\n try {\n const nativeChannel = this._nativePeerConnection.createDataChannel(label, options);\n const dataChannel = new RTCDataChannel(nativeChannel, this);\n this._dataChannels.set(label, dataChannel);\n return dataChannel;\n } catch (error) {\n throw new Error(`Failed to create data channel: ${error.message}`);\n }\n }\n\n /**\n * Get configuration\n * @returns {Object}\n */\n getConfiguration() {\n return { ...this._configuration };\n }\n\n /**\n * Set configuration\n * @param {Object} configuration\n */\n setConfiguration(configuration) {\n this._checkClosed();\n this._configuration = this._parseConfiguration(configuration);\n \n if (this._nativePeerConnection) {\n this._nativePeerConnection.setConfiguration(this._configuration);\n }\n }\n\n /**\n * Close the peer connection\n */\n close() {\n if (this._closed) {\n return;\n }\n\n this._closed = true;\n this._signalingState = 'closed';\n\n // Close all data channels\n for (const [label, channel] of this._dataChannels) {\n channel.close();\n channel.dispose();\n }\n this._dataChannels.clear();\n\n // Close native peer connection\n if (this._nativePeerConnection) {\n this._nativePeerConnection.close();\n this._nativePeerConnection.removeAllListeners();\n this._nativePeerConnection = null;\n }\n\n this.emit('signalingstatechange');\n this.removeAllListeners();\n }\n\n /**\n * Get stats\n * @returns {Promise<Object>}\n */\n async getStats() {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n try {\n return await this._nativePeerConnection.getStats();\n } catch (error) {\n throw new Error(`Failed to get stats: ${error.message}`);\n }\n }\n\n /**\n * Check if connection is closed\n * @private\n */\n _checkClosed() {\n if (this._closed || this._signalingState === 'closed') {\n throw new Error(\"The RTCPeerConnection's signalingState is 'closed'\");\n }\n }\n\n /**\n * Convert native signaling state to string\n * @private\n */\n _convertSignalingState(state) {\n const states = ['stable', 'have-local-offer', 'have-remote-offer', \n 'have-local-pranswer', 'have-remote-pranswer', 'closed'];\n return states[state] || 'stable';\n }\n\n /**\n * Convert native ICE connection state to string\n * @private\n */\n _convertIceConnectionState(state) {\n const states = ['new', 'checking', 'connected', 'completed', \n 'failed', 'disconnected', 'closed'];\n return states[state] || 'new';\n }\n\n /**\n * Convert native ICE gathering state to string\n * @private\n */\n _convertIceGatheringState(state) {\n const states = ['new', 'gathering', 'complete'];\n return states[state] || 'new';\n }\n\n /**\n * Convert native connection state to string\n * @private\n */\n _convertConnectionState(state) {\n const states = ['new', 'connecting', 'connected', 'disconnected', \n 'failed', 'closed'];\n return states[state] || 'new';\n }\n}\n\nmodule.exports = RTCPeerConnection;\n","/**\n * RTCDataChannelEvent is fired when a data channel is added to the connection.\n * Ported from Chromium's implementation.\n */\nclass RTCDataChannelEvent {\n constructor(type, eventInitDict = {}) {\n this._type = type;\n this._channel = eventInitDict.channel || null;\n this._bubbles = eventInitDict.bubbles || false;\n this._cancelable = eventInitDict.cancelable || false;\n this._timestamp = Date.now();\n }\n\n /**\n * The event type\n */\n get type() {\n return this._type;\n }\n\n /**\n * The RTCDataChannel associated with the event\n */\n get channel() {\n return this._channel;\n }\n\n /**\n * Whether the event bubbles\n */\n get bubbles() {\n return this._bubbles;\n }\n\n /**\n * Whether the event is cancelable\n */\n get cancelable() {\n return this._cancelable;\n }\n\n /**\n * The timestamp when the event was created\n */\n get timeStamp() {\n return this._timestamp;\n }\n}\n\nmodule.exports = RTCDataChannelEvent;\n","/**\n * RTCPeerConnectionIceEvent is fired when an ICE candidate is available.\n * Ported from Chromium's implementation.\n */\nclass RTCPeerConnectionIceEvent {\n constructor(type, eventInitDict = {}) {\n this._type = type;\n this._candidate = eventInitDict.candidate || null;\n this._url = eventInitDict.url || null;\n this._bubbles = eventInitDict.bubbles || false;\n this._cancelable = eventInitDict.cancelable || false;\n this._timestamp = Date.now();\n }\n\n /**\n * The event type\n */\n get type() {\n return this._type;\n }\n\n /**\n * The RTCIceCandidate associated with the event\n */\n get candidate() {\n return this._candidate;\n }\n\n /**\n * The URL of the TURN or STUN server\n */\n get url() {\n return this._url;\n }\n\n /**\n * Whether the event bubbles\n */\n get bubbles() {\n return this._bubbles;\n }\n\n /**\n * Whether the event is cancelable\n */\n get cancelable() {\n return this._cancelable;\n }\n\n /**\n * The timestamp when the event was created\n */\n get timeStamp() {\n return this._timestamp;\n }\n}\n\nmodule.exports = RTCPeerConnectionIceEvent;\n","/**\n * RTCErrorEvent represents an error event.\n * Ported from Chromium's implementation.\n */\nclass RTCErrorEvent {\n constructor(type, eventInitDict = {}) {\n this._type = type;\n this._error = eventInitDict.error || null;\n this._bubbles = eventInitDict.bubbles || false;\n this._cancelable = eventInitDict.cancelable || false;\n this._timestamp = Date.now();\n }\n\n /**\n * The event type\n */\n get type() {\n return this._type;\n }\n\n /**\n * The error associated with the event\n */\n get error() {\n return this._error;\n }\n\n /**\n * Whether the event bubbles\n */\n get bubbles() {\n return this._bubbles;\n }\n\n /**\n * Whether the event is cancelable\n */\n get cancelable() {\n return this._cancelable;\n }\n\n /**\n * The timestamp when the event was created\n */\n get timeStamp() {\n return this._timestamp;\n }\n}\n\n/**\n * RTCError represents a WebRTC-specific error.\n */\nclass RTCError extends Error {\n constructor(errorDetail, message) {\n super(message);\n this.name = 'RTCError';\n this.errorDetail = errorDetail;\n this.sdpLineNumber = null;\n this.httpRequestStatusCode = null;\n this.sctpCauseCode = null;\n this.receivedAlert = null;\n this.sentAlert = null;\n }\n}\n\nmodule.exports = { RTCErrorEvent, RTCError };\n","/**\n * NodeRTC - DataChannel-only WebRTC implementation for Node.js\n * Ported from Chromium's PeerConnection implementation\n * \n * This is a simplified implementation focusing on DataChannel functionality.\n * It does not include media stream support (audio/video).\n */\n\nconst RTCPeerConnection = require('./RTCPeerConnection');\nconst RTCDataChannel = require('./RTCDataChannel');\nconst RTCSessionDescription = require('./RTCSessionDescription');\nconst RTCIceCandidate = require('./RTCIceCandidate');\nconst RTCDataChannelEvent = require('./RTCDataChannelEvent');\nconst RTCPeerConnectionIceEvent = require('./RTCPeerConnectionIceEvent');\nconst { RTCError, RTCErrorEvent } = require('./RTCError');\nconst NativePeerConnectionFactory = require('./NativePeerConnectionFactory');\n\n// Create a singleton factory instance\nconst defaultFactory = new NativePeerConnectionFactory();\n\n/**\n * Create a new RTCPeerConnection with the default factory\n * @param {Object} configuration - RTCConfiguration\n * @returns {RTCPeerConnection}\n */\nfunction createPeerConnection(configuration) {\n return new RTCPeerConnection(configuration, defaultFactory);\n}\n\n/**\n * Create a custom RTCPeerConnection with a specific factory\n * @param {Object} configuration - RTCConfiguration\n * @param {NativePeerConnectionFactory} factory - Custom factory\n * @returns {RTCPeerConnection}\n */\nfunction createPeerConnectionWithFactory(configuration, factory) {\n return new RTCPeerConnection(configuration, factory);\n}\n\nmodule.exports = {\n // Main API\n RTCPeerConnection,\n RTCConnection: RTCPeerConnection, // Alias for convenience\n createPeerConnection,\n createPeerConnectionWithFactory,\n \n // Classes\n RTCDataChannel,\n RTCSessionDescription,\n RTCIceCandidate,\n RTCDataChannelEvent,\n RTCPeerConnectionIceEvent,\n RTCError,\n RTCErrorEvent,\n \n // Factory\n NativePeerConnectionFactory,\n defaultFactory\n};\n","import { getDefaultExportFromCjs } from \"\u0000commonjsHelpers.js\";\nimport { __require as requireSrc } from \"/home/runner/work/nodertc/nodertc/src/index.js\";\nvar srcExports = requireSrc();\nexport { srcExports as __moduleExports };\nexport default /*@__PURE__*/getDefaultExportFromCjs(srcExports);"],"names":["require$$0","require$$1","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/RTCDataChannel.js","../src/RTCSessionDescription.js","../src/RTCIceCandidate.js","../src/STUNClient.js","../src/TURNClient.js","../src/ICEGatherer.js","../src/SecureConnection.js","../src/UDPTransport.js","../src/NativePeerConnectionFactory.js","../src/RTCPeerConnection.js","../src/RTCDataChannelEvent.js","../src/RTCPeerConnectionIceEvent.js","../src/RTCError.js","../src/index.js","../src/index.js?commonjs-entry"],"sourcesContent":["const EventEmitter = require('events');\n\n/**\n * RTCDataChannel represents a bidirectional data channel between two peers.\n * Ported from Chromium's implementation, DataChannel-only functionality.\n */\nclass RTCDataChannel extends EventEmitter {\n constructor(nativeChannel, peerConnectionHandler) {\n super();\n \n this._nativeChannel = nativeChannel;\n this._peerConnectionHandler = peerConnectionHandler;\n this._state = 'connecting';\n this._binaryType = 'arraybuffer';\n this._bufferedAmount = 0;\n this._bufferedAmountLowThreshold = 0;\n this._closed = false;\n this._scheduledEvents = [];\n \n // Setup native channel observers\n this._setupObservers();\n }\n\n /**\n * The label specified when creating the data channel\n */\n get label() {\n return this._nativeChannel ? this._nativeChannel.label : '';\n }\n\n /**\n * Whether the channel is ordered or allows out-of-order delivery\n */\n get ordered() {\n return this._nativeChannel ? this._nativeChannel.ordered : true;\n }\n\n /**\n * Maximum packet lifetime in milliseconds\n */\n get maxPacketLifeTime() {\n if (!this._nativeChannel) return null;\n const lifetime = this._nativeChannel.maxPacketLifeTime;\n return lifetime >= 0 ? lifetime : null;\n }\n\n /**\n * Maximum number of retransmit attempts\n */\n get maxRetransmits() {\n if (!this._nativeChannel) return null;\n const retransmits = this._nativeChannel.maxRetransmits;\n return retransmits >= 0 ? retransmits : null;\n }\n\n /**\n * Subprotocol name\n */\n get protocol() {\n return this._nativeChannel ? this._nativeChannel.protocol : '';\n }\n\n /**\n * Whether the channel was negotiated by the application or the WebRTC layer\n */\n get negotiated() {\n return this._nativeChannel ? this._nativeChannel.negotiated : false;\n }\n\n /**\n * The ID for this data channel\n */\n get id() {\n if (!this._nativeChannel) return null;\n const channelId = this._nativeChannel.id;\n return channelId >= 0 ? channelId : null;\n }\n\n /**\n * The state of the data channel\n * Values: 'connecting', 'open', 'closing', 'closed'\n */\n get readyState() {\n return this._state;\n }\n\n /**\n * The number of bytes currently queued to be sent\n */\n get bufferedAmount() {\n return this._bufferedAmount;\n }\n\n /**\n * Threshold for the bufferedAmount at which bufferedamountlow event fires\n */\n get bufferedAmountLowThreshold() {\n return this._bufferedAmountLowThreshold;\n }\n\n set bufferedAmountLowThreshold(value) {\n this._bufferedAmountLowThreshold = value;\n }\n\n /**\n * Format for received binary data: 'blob' or 'arraybuffer'\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(value) {\n if (value !== 'blob' && value !== 'arraybuffer') {\n throw new Error('binaryType must be either \"blob\" or \"arraybuffer\"');\n }\n this._binaryType = value;\n }\n\n /**\n * Send data over the channel\n * @param {string|ArrayBuffer|ArrayBufferView} data - Data to send\n */\n send(data) {\n if (this._state !== 'open') {\n throw new Error('RTCDataChannel.send() called on a channel that is not open');\n }\n\n if (!this._nativeChannel) {\n throw new Error('Native data channel is not available');\n }\n\n let buffer;\n let isBinary = false;\n\n if (typeof data === 'string') {\n buffer = Buffer.from(data, 'utf8');\n isBinary = false;\n } else if (data instanceof ArrayBuffer) {\n buffer = Buffer.from(data);\n isBinary = true;\n } else if (ArrayBuffer.isView(data)) {\n buffer = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n isBinary = true;\n } else {\n throw new Error('Unsupported data type');\n }\n\n const length = buffer.length;\n \n // Validate send length\n if (length > 65536) { // Maximum WebRTC message size\n throw new Error('Message too long');\n }\n\n this._bufferedAmount += length;\n \n // Send through native channel\n try {\n this._nativeChannel.send({\n data: buffer,\n binary: isBinary\n });\n } catch (error) {\n throw new Error(`Failed to send data: ${error.message}`);\n }\n }\n\n /**\n * Close the data channel\n */\n close() {\n if (this._closed) {\n return;\n }\n\n this._closed = true;\n\n if (this._nativeChannel) {\n this._nativeChannel.close();\n }\n\n if (this._state === 'closing' || this._state === 'closed') {\n return;\n }\n\n this._setState('closing');\n }\n\n /**\n * Setup observers for the native channel\n * @private\n */\n _setupObservers() {\n if (!this._nativeChannel) {\n return;\n }\n\n // State change observer\n this._nativeChannel.on('statechange', (state) => {\n this._onStateChange(state);\n });\n\n // Message observer\n this._nativeChannel.on('message', (buffer) => {\n this._onMessage(buffer);\n });\n\n // Buffered amount change observer\n this._nativeChannel.on('bufferedamountlow', (amount) => {\n this._onBufferedAmountChange(amount);\n });\n\n // Error observer\n this._nativeChannel.on('error', (error) => {\n this.emit('error', error);\n });\n }\n\n /**\n * Handle state change from native channel\n * @private\n */\n _onStateChange(state) {\n let newState;\n let shouldEmitOpen = false;\n let shouldEmitClosing = false;\n let shouldEmitClose = false;\n \n switch (state) {\n case 0: // kConnecting\n newState = 'connecting';\n break;\n case 1: // kOpen\n newState = 'open';\n shouldEmitOpen = true;\n break;\n case 2: // kClosing\n newState = 'closing';\n shouldEmitClosing = true;\n break;\n case 3: // kClosed\n newState = 'closed';\n shouldEmitClose = true;\n break;\n default:\n return;\n }\n \n // Only update state if it actually changed\n if (this._readyState !== newState) {\n this._setState(newState);\n }\n \n // Emit events AFTER state is updated\n if (shouldEmitOpen) {\n this.emit('open');\n }\n if (shouldEmitClosing) {\n this.emit('closing');\n }\n if (shouldEmitClose) {\n this.emit('close');\n }\n }\n\n /**\n * Handle incoming message from native channel\n * @private\n */\n _onMessage(buffer) {\n if (this._state !== 'open') {\n return;\n }\n\n let data;\n if (buffer.binary) {\n if (this._binaryType === 'arraybuffer') {\n data = buffer.data.buffer.slice(\n buffer.data.byteOffset,\n buffer.data.byteOffset + buffer.data.byteLength\n );\n } else {\n // For 'blob' type, we'll just pass the buffer\n // In a browser environment, this would be converted to a Blob\n data = buffer.data;\n }\n } else {\n data = buffer.data.toString('utf8');\n }\n\n this.emit('message', { data });\n }\n\n /**\n * Handle buffered amount change from native channel\n * @private\n */\n _onBufferedAmountChange(newAmount) {\n const previousAmount = this._bufferedAmount;\n this._bufferedAmount = newAmount;\n\n if (previousAmount > this._bufferedAmountLowThreshold &&\n newAmount <= this._bufferedAmountLowThreshold) {\n this.emit('bufferedamountlow');\n }\n }\n\n /**\n * Set the channel state\n * @private\n */\n _setState(state) {\n if (this._state === state) {\n return;\n }\n this._state = state;\n }\n\n /**\n * Set state to open without dispatching event (used for remote channels)\n */\n setStateToOpenWithoutEvent() {\n this._setState('open');\n }\n\n /**\n * Dispatch open event (used for remote channels)\n */\n dispatchOpenEvent() {\n this.emit('open');\n }\n\n /**\n * Dispose of resources\n */\n dispose() {\n if (this._nativeChannel) {\n this._nativeChannel.removeAllListeners();\n this._nativeChannel = null;\n }\n this._peerConnectionHandler = null;\n this.removeAllListeners();\n }\n}\n\nmodule.exports = RTCDataChannel;\n","/**\n * RTCSessionDescription represents a session description.\n * Ported from Chromium's implementation.\n */\nclass RTCSessionDescription {\n constructor(descriptionInitDict = {}) {\n this._type = descriptionInitDict.type || '';\n this._sdp = descriptionInitDict.sdp || '';\n \n // Validate type\n const validTypes = ['offer', 'answer', 'pranswer', 'rollback'];\n if (this._type && !validTypes.includes(this._type)) {\n throw new Error(`Invalid type: ${this._type}`);\n }\n }\n\n /**\n * The type of session description\n * Values: 'offer', 'answer', 'pranswer', 'rollback'\n */\n get type() {\n return this._type;\n }\n\n set type(value) {\n const validTypes = ['offer', 'answer', 'pranswer', 'rollback'];\n if (value && !validTypes.includes(value)) {\n throw new Error(`Invalid type: ${value}`);\n }\n this._type = value;\n }\n\n /**\n * The SDP string\n */\n get sdp() {\n return this._sdp;\n }\n\n set sdp(value) {\n this._sdp = value || '';\n }\n\n /**\n * Convert to JSON\n */\n toJSON() {\n return {\n type: this._type,\n sdp: this._sdp\n };\n }\n\n /**\n * Convert to string\n */\n toString() {\n return `RTCSessionDescription { type: \"${this._type}\", sdp: \"${this._sdp.substring(0, 50)}...\" }`;\n }\n}\n\nmodule.exports = RTCSessionDescription;\n","/**\n * RTCIceCandidate represents an ICE candidate.\n * Ported from Chromium's implementation.\n */\nclass RTCIceCandidate {\n constructor(candidateInitDict = {}) {\n this._candidate = candidateInitDict.candidate || '';\n this._sdpMid = candidateInitDict.sdpMid || null;\n this._sdpMLineIndex = candidateInitDict.sdpMLineIndex !== undefined \n ? candidateInitDict.sdpMLineIndex \n : null;\n this._usernameFragment = candidateInitDict.usernameFragment || null;\n \n // Parse candidate string if provided\n if (this._candidate) {\n this._parseCandidateString();\n }\n }\n\n /**\n * The candidate string\n */\n get candidate() {\n return this._candidate;\n }\n\n /**\n * The media stream identification tag\n */\n get sdpMid() {\n return this._sdpMid;\n }\n\n /**\n * The media line index\n */\n get sdpMLineIndex() {\n return this._sdpMLineIndex;\n }\n\n /**\n * The username fragment\n */\n get usernameFragment() {\n return this._usernameFragment;\n }\n\n /**\n * The foundation\n */\n get foundation() {\n return this._foundation || null;\n }\n\n /**\n * The component (RTP or RTCP)\n */\n get component() {\n return this._component || null;\n }\n\n /**\n * The priority\n */\n get priority() {\n return this._priority || null;\n }\n\n /**\n * The IP address\n */\n get address() {\n return this._address || null;\n }\n\n /**\n * The protocol (udp or tcp)\n */\n get protocol() {\n return this._protocol || null;\n }\n\n /**\n * The port\n */\n get port() {\n return this._port || null;\n }\n\n /**\n * The candidate type (host, srflx, prflx, or relay)\n */\n get type() {\n return this._type || null;\n }\n\n /**\n * The TCP type (active, passive, or so)\n */\n get tcpType() {\n return this._tcpType || null;\n }\n\n /**\n * The related address (for non-host candidates)\n */\n get relatedAddress() {\n return this._relatedAddress || null;\n }\n\n /**\n * The related port (for non-host candidates)\n */\n get relatedPort() {\n return this._relatedPort || null;\n }\n\n /**\n * Parse the candidate string to extract individual fields\n * @private\n */\n _parseCandidateString() {\n if (!this._candidate || !this._candidate.startsWith('candidate:')) {\n return;\n }\n\n // Basic parsing of candidate string\n // Format: candidate:<foundation> <component> <protocol> <priority> <address> <port> typ <type> ...\n const parts = this._candidate.split(' ');\n \n if (parts.length >= 8) {\n this._foundation = parts[0].replace('candidate:', '');\n this._component = parts[1];\n this._protocol = parts[2];\n this._priority = parseInt(parts[3], 10);\n this._address = parts[4];\n this._port = parseInt(parts[5], 10);\n // parts[6] is 'typ'\n this._type = parts[7];\n \n // Parse optional fields\n for (let i = 8; i < parts.length; i += 2) {\n const key = parts[i];\n const value = parts[i + 1];\n \n switch (key) {\n case 'raddr':\n this._relatedAddress = value;\n break;\n case 'rport':\n this._relatedPort = parseInt(value, 10);\n break;\n case 'tcptype':\n this._tcpType = value;\n break;\n case 'ufrag':\n this._usernameFragment = value;\n break;\n }\n }\n }\n }\n\n /**\n * Convert to JSON\n */\n toJSON() {\n return {\n candidate: this._candidate,\n sdpMid: this._sdpMid,\n sdpMLineIndex: this._sdpMLineIndex,\n usernameFragment: this._usernameFragment\n };\n }\n\n /**\n * Convert to string\n */\n toString() {\n return `RTCIceCandidate { candidate: \"${this._candidate}\", sdpMid: \"${this._sdpMid}\", sdpMLineIndex: ${this._sdpMLineIndex} }`;\n }\n}\n\nmodule.exports = RTCIceCandidate;\n","/**\n * STUN Client Implementation (RFC 5389)\n * Pure Node.js implementation using dgram\n */\n\nconst dgram = require('dgram');\nconst crypto = require('crypto');\n\n// STUN Message Types\nconst STUN_BINDING_REQUEST = 0x0001;\nconst STUN_BINDING_RESPONSE = 0x0101;\n\n// STUN Attributes\nconst ATTR_MAPPED_ADDRESS = 0x0001;\nconst ATTR_XOR_MAPPED_ADDRESS = 0x0020;\n\n// STUN Magic Cookie\nconst MAGIC_COOKIE = 0x2112A442;\n\nclass STUNClient {\n constructor() {\n this.socket = null;\n this.timeout = 5000;\n }\n\n /**\n * Get public IP and port by querying STUN server\n * @param {string} stunServer - STUN server address (e.g., 'stun.l.google.com:19302')\n * @returns {Promise<{ip: string, port: number, type: string}>}\n */\n async getReflexiveAddress(stunServer = 'stun.l.google.com:19302') {\n return new Promise((resolve, reject) => {\n const [host, portStr] = stunServer.split(':');\n const port = parseInt(portStr, 10);\n\n // Create UDP socket\n this.socket = dgram.createSocket('udp4');\n \n const transactionId = crypto.randomBytes(12);\n let resolved = false;\n\n const timeout = setTimeout(() => {\n if (!resolved) {\n resolved = true;\n this.socket.close();\n reject(new Error('STUN request timeout'));\n }\n }, this.timeout);\n\n this.socket.on('error', (err) => {\n if (!resolved) {\n resolved = true;\n clearTimeout(timeout);\n this.socket.close();\n reject(err);\n }\n });\n\n this.socket.on('message', (msg) => {\n if (resolved) return;\n\n try {\n const result = this._parseSTUNResponse(msg, transactionId);\n if (result) {\n resolved = true;\n clearTimeout(timeout);\n this.socket.close();\n resolve(result);\n }\n } catch (err) {\n resolved = true;\n clearTimeout(timeout);\n this.socket.close();\n reject(err);\n }\n });\n\n // Send STUN Binding Request\n const request = this._createBindingRequest(transactionId);\n this.socket.send(request, port, host, (err) => {\n if (err && !resolved) {\n resolved = true;\n clearTimeout(timeout);\n this.socket.close();\n reject(err);\n }\n });\n });\n }\n\n /**\n * Create STUN Binding Request\n * @private\n */\n _createBindingRequest(transactionId) {\n const buffer = Buffer.allocUnsafe(20);\n \n // Message Type (2 bytes)\n buffer.writeUInt16BE(STUN_BINDING_REQUEST, 0);\n \n // Message Length (2 bytes) - 0 for no attributes\n buffer.writeUInt16BE(0, 2);\n \n // Magic Cookie (4 bytes)\n buffer.writeUInt32BE(MAGIC_COOKIE, 4);\n \n // Transaction ID (12 bytes)\n transactionId.copy(buffer, 8);\n \n return buffer;\n }\n\n /**\n * Parse STUN Response\n * @private\n */\n _parseSTUNResponse(msg, expectedTransactionId) {\n if (msg.length < 20) {\n throw new Error('Invalid STUN response: too short');\n }\n\n const messageType = msg.readUInt16BE(0);\n const messageLength = msg.readUInt16BE(2);\n const magicCookie = msg.readUInt32BE(4);\n const transactionId = msg.slice(8, 20);\n\n // Verify this is a binding response\n if (messageType !== STUN_BINDING_RESPONSE) {\n return null;\n }\n\n // Verify magic cookie\n if (magicCookie !== MAGIC_COOKIE) {\n throw new Error('Invalid STUN response: bad magic cookie');\n }\n\n // Verify transaction ID\n if (!transactionId.equals(expectedTransactionId)) {\n return null;\n }\n\n // Parse attributes\n let offset = 20;\n while (offset < 20 + messageLength) {\n const attrType = msg.readUInt16BE(offset);\n const attrLength = msg.readUInt16BE(offset + 2);\n const attrValue = msg.slice(offset + 4, offset + 4 + attrLength);\n\n if (attrType === ATTR_XOR_MAPPED_ADDRESS) {\n return this._parseXorMappedAddress(attrValue, transactionId);\n } else if (attrType === ATTR_MAPPED_ADDRESS) {\n return this._parseMappedAddress(attrValue);\n }\n\n // Move to next attribute (with padding)\n offset += 4 + attrLength;\n if (attrLength % 4 !== 0) {\n offset += 4 - (attrLength % 4);\n }\n }\n\n throw new Error('No mapped address in STUN response');\n }\n\n /**\n * Parse XOR-MAPPED-ADDRESS attribute\n * @private\n */\n _parseXorMappedAddress(value, transactionId) {\n const family = value.readUInt8(1);\n const xPort = value.readUInt16BE(2);\n const xAddress = value.slice(4, 8);\n\n // XOR with magic cookie\n const port = xPort ^ (MAGIC_COOKIE >> 16);\n \n const addressBytes = Buffer.allocUnsafe(4);\n const magicBytes = Buffer.allocUnsafe(4);\n magicBytes.writeUInt32BE(MAGIC_COOKIE, 0);\n \n for (let i = 0; i < 4; i++) {\n addressBytes[i] = xAddress[i] ^ magicBytes[i];\n }\n\n const ip = Array.from(addressBytes).join('.');\n\n return {\n ip,\n port,\n type: 'srflx' // Server Reflexive\n };\n }\n\n /**\n * Parse MAPPED-ADDRESS attribute\n * @private\n */\n _parseMappedAddress(value) {\n const family = value.readUInt8(1);\n const port = value.readUInt16BE(2);\n const addressBytes = value.slice(4, 8);\n const ip = Array.from(addressBytes).join('.');\n\n return {\n ip,\n port,\n type: 'srflx'\n };\n }\n\n /**\n * Close the socket\n */\n close() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n }\n}\n\nmodule.exports = STUNClient;\n","/**\n * TURN Client Implementation (RFC 5766)\n * Pure Node.js implementation using dgram and net\n */\n\nconst dgram = require('dgram');\nconst net = require('net');\nconst crypto = require('crypto');\n\n// TURN Message Types\nconst TURN_ALLOCATE_REQUEST = 0x0003;\nconst TURN_ALLOCATE_RESPONSE = 0x0103;\nconst TURN_ALLOCATE_ERROR = 0x0113;\nconst TURN_REFRESH_REQUEST = 0x0004;\nconst TURN_CREATE_PERMISSION = 0x0008;\nconst TURN_CHANNEL_BIND = 0x0009;\nconst TURN_SEND_INDICATION = 0x0016;\nconst TURN_DATA_INDICATION = 0x0017;\n\n// TURN Attributes\nconst ATTR_XOR_RELAYED_ADDRESS = 0x0016;\nconst ATTR_XOR_MAPPED_ADDRESS = 0x0020;\nconst ATTR_LIFETIME = 0x000D;\nconst ATTR_USERNAME = 0x0006;\nconst ATTR_MESSAGE_INTEGRITY = 0x0008;\nconst ATTR_ERROR_CODE = 0x0009;\nconst ATTR_REALM = 0x0014;\nconst ATTR_NONCE = 0x0015;\nconst ATTR_XOR_PEER_ADDRESS = 0x0012;\nconst ATTR_DATA = 0x0013;\nconst ATTR_REQUESTED_TRANSPORT = 0x0019;\n\n// STUN Magic Cookie\nconst MAGIC_COOKIE = 0x2112A442;\n\nclass TURNClient {\n constructor(options = {}) {\n this.server = options.server; // 'turn:server:port' or {host, port}\n this.username = options.username || 'user';\n this.password = options.password || 'pass';\n this.transport = options.transport || 'udp'; // 'udp' or 'tcp'\n this.socket = null;\n this.timeout = options.timeout || 10000;\n this.relayedAddress = null;\n this.lifetime = 600; // Default 10 minutes\n this.allocation = null;\n \n // Authentication state for MESSAGE-INTEGRITY\n this.realm = null;\n this.nonce = null;\n this.authenticated = false;\n }\n\n /**\n * Parse TURN server URI\n * @private\n */\n _parseServer() {\n if (typeof this.server === 'object') {\n return this.server;\n }\n\n const match = this.server.match(/^turn:(.+):(\\d+)$/);\n if (match) {\n return { host: match[1], port: parseInt(match[2], 10) };\n }\n\n // Default TURN port\n return { host: this.server, port: 3478 };\n }\n\n /**\n * Allocate a relay address on TURN server\n * @returns {Promise<{relayedAddress: string, relayedPort: number, mappedAddress: string, mappedPort: number}>}\n */\n async allocate() {\n const serverInfo = this._parseServer();\n const transactionId = crypto.randomBytes(12);\n \n return new Promise((resolve, reject) => {\n let resolved = false;\n\n const timeout = setTimeout(() => {\n if (!resolved) {\n resolved = true;\n this.close();\n reject(new Error('TURN allocation timeout'));\n }\n }, this.timeout);\n\n // Create socket based on transport\n if (this.transport === 'udp') {\n this.socket = dgram.createSocket('udp4');\n } else {\n this.socket = new net.Socket();\n }\n\n this.socket.on('error', (err) => {\n if (!resolved) {\n resolved = true;\n clearTimeout(timeout);\n this.close();\n reject(err);\n }\n });\n\n const handleMessage = (msg) => {\n if (resolved) return;\n\n try {\n const result = this._parseAllocateResponse(msg);\n if (result) {\n resolved = true;\n clearTimeout(timeout);\n this.relayedAddress = result.relayedAddress;\n this.allocation = result;\n resolve(result);\n }\n } catch (err) {\n // Check if this is a 401 Unauthorized requiring authentication\n if (err.message.includes('401') && !this.authenticated && this.realm && this.nonce) {\n // Clear the error handler and retry with authentication\n clearTimeout(timeout);\n this._retryAllocationWithAuth(serverInfo, transactionId)\n .then(result => {\n resolved = true;\n resolve(result);\n })\n .catch(authErr => {\n resolved = true;\n this.close();\n reject(authErr);\n });\n } else {\n resolved = true;\n clearTimeout(timeout);\n this.close();\n reject(err);\n }\n }\n };\n\n if (this.transport === 'udp') {\n this.socket.on('message', handleMessage);\n } else {\n this.socket.on('data', handleMessage);\n }\n\n // Connect and send allocation request\n const sendRequest = () => {\n const request = this._createAllocateRequest(transactionId);\n\n if (this.transport === 'udp') {\n this.socket.send(request, serverInfo.port, serverInfo.host, (err) => {\n if (err && !resolved) {\n resolved = true;\n clearTimeout(timeout);\n this.close();\n reject(err);\n }\n });\n } else {\n this.socket.write(request);\n }\n };\n\n if (this.transport === 'tcp') {\n this.socket.connect(serverInfo.port, serverInfo.host, sendRequest);\n } else {\n sendRequest();\n }\n });\n }\n\n /**\n * Create TURN Allocate Request\n * @private\n */\n _createAllocateRequest(transactionId, withAuth = false) {\n const attributes = [];\n\n // REQUESTED-TRANSPORT attribute (UDP = 17)\n const transportAttr = Buffer.allocUnsafe(8);\n transportAttr.writeUInt16BE(ATTR_REQUESTED_TRANSPORT, 0);\n transportAttr.writeUInt16BE(4, 2);\n transportAttr.writeUInt8(17, 4); // UDP protocol\n transportAttr.writeUInt8(0, 5);\n transportAttr.writeUInt8(0, 6);\n transportAttr.writeUInt8(0, 7);\n attributes.push(transportAttr);\n\n // Add authentication attributes if needed\n if (withAuth && this.username && this.realm && this.nonce) {\n // USERNAME attribute\n const usernameAttr = this._createStringAttribute(0x0006, this.username);\n attributes.push(usernameAttr);\n \n // REALM attribute\n const realmAttr = this._createStringAttribute(0x0014, this.realm);\n attributes.push(realmAttr);\n \n // NONCE attribute\n const nonceAttr = this._createStringAttribute(0x0015, this.nonce);\n attributes.push(nonceAttr);\n }\n\n // Calculate total attributes length (before MESSAGE-INTEGRITY)\n let attrLength = 0;\n for (const attr of attributes) {\n attrLength += attr.length;\n }\n\n // If using auth, add MESSAGE-INTEGRITY (will be added after header)\n let messageIntegrityAttr = null;\n if (withAuth && this.username && this.realm && this.nonce && this.password) {\n attrLength += 24; // MESSAGE-INTEGRITY attribute size (4 + 20)\n }\n\n // STUN header\n const header = Buffer.allocUnsafe(20);\n header.writeUInt16BE(TURN_ALLOCATE_REQUEST, 0);\n header.writeUInt16BE(attrLength, 2);\n header.writeUInt32BE(MAGIC_COOKIE, 4);\n transactionId.copy(header, 8);\n\n // Combine header and attributes\n let message = Buffer.concat([header, ...attributes]);\n \n // Add MESSAGE-INTEGRITY if using auth\n if (withAuth && this.username && this.realm && this.nonce && this.password) {\n messageIntegrityAttr = this._createMessageIntegrity(message);\n message = Buffer.concat([message, messageIntegrityAttr]);\n }\n\n return message;\n }\n\n /**\n * Parse TURN Allocate Response\n * @private\n */\n _parseAllocateResponse(msg) {\n if (msg.length < 20) {\n throw new Error('Invalid TURN response: too short');\n }\n\n const messageType = msg.readUInt16BE(0);\n const messageLength = msg.readUInt16BE(2);\n const magicCookie = msg.readUInt32BE(4);\n\n // Check if this is an allocate response\n if (messageType === TURN_ALLOCATE_ERROR) {\n const error = this._parseErrorCode(msg);\n \n // If 401 Unauthorized, extract REALM and NONCE for retry\n if (error.includes('401')) {\n this._extractAuthAttributes(msg);\n }\n \n throw new Error(`TURN allocation failed: ${error}`);\n }\n\n if (messageType !== TURN_ALLOCATE_RESPONSE) {\n return null;\n }\n\n // Verify magic cookie\n if (magicCookie !== MAGIC_COOKIE) {\n throw new Error('Invalid TURN response: bad magic cookie');\n }\n\n // Parse attributes\n const result = {};\n let offset = 20;\n\n while (offset < 20 + messageLength) {\n const attrType = msg.readUInt16BE(offset);\n const attrLength = msg.readUInt16BE(offset + 2);\n const attrValue = msg.slice(offset + 4, offset + 4 + attrLength);\n\n if (attrType === ATTR_XOR_RELAYED_ADDRESS) {\n const addr = this._parseXorAddress(attrValue, msg.slice(8, 20));\n result.relayedAddress = addr.ip;\n result.relayedPort = addr.port;\n result.type = 'relay';\n } else if (attrType === ATTR_XOR_MAPPED_ADDRESS) {\n const addr = this._parseXorAddress(attrValue, msg.slice(8, 20));\n result.mappedAddress = addr.ip;\n result.mappedPort = addr.port;\n } else if (attrType === ATTR_LIFETIME) {\n this.lifetime = attrValue.readUInt32BE(0);\n result.lifetime = this.lifetime;\n }\n\n // Move to next attribute (with padding)\n offset += 4 + attrLength;\n if (attrLength % 4 !== 0) {\n offset += 4 - (attrLength % 4);\n }\n }\n\n if (!result.relayedAddress) {\n throw new Error('No relayed address in TURN response');\n }\n\n return result;\n }\n\n /**\n * Parse XOR address attribute\n * @private\n */\n _parseXorAddress(value, transactionId) {\n const family = value.readUInt8(1);\n const xPort = value.readUInt16BE(2);\n const xAddress = value.slice(4, 8);\n\n // XOR with magic cookie\n const port = xPort ^ (MAGIC_COOKIE >> 16);\n \n const addressBytes = Buffer.allocUnsafe(4);\n const magicBytes = Buffer.allocUnsafe(4);\n magicBytes.writeUInt32BE(MAGIC_COOKIE, 0);\n \n for (let i = 0; i < 4; i++) {\n addressBytes[i] = xAddress[i] ^ magicBytes[i];\n }\n\n const ip = Array.from(addressBytes).join('.');\n\n return { ip, port };\n }\n\n /**\n * Parse error code attribute\n * @private\n */\n _parseErrorCode(msg) {\n let offset = 20;\n const messageLength = msg.readUInt16BE(2);\n\n while (offset < 20 + messageLength) {\n const attrType = msg.readUInt16BE(offset);\n const attrLength = msg.readUInt16BE(offset + 2);\n const attrValue = msg.slice(offset + 4, offset + 4 + attrLength);\n\n if (attrType === ATTR_ERROR_CODE) {\n const errorClass = attrValue.readUInt8(2);\n const errorNumber = attrValue.readUInt8(3);\n const errorCode = errorClass * 100 + errorNumber;\n const errorText = attrValue.slice(4).toString('utf8');\n return `${errorCode} ${errorText}`;\n }\n\n offset += 4 + attrLength;\n if (attrLength % 4 !== 0) {\n offset += 4 - (attrLength % 4);\n }\n }\n\n return 'Unknown error';\n }\n\n /**\n * Refresh the allocation\n * @param {number} lifetime - New lifetime in seconds\n */\n async refresh(lifetime = 600) {\n if (!this.allocation) {\n throw new Error('No active allocation');\n }\n\n // Send refresh request\n // Implementation similar to allocate()\n this.lifetime = lifetime;\n }\n\n /**\n * Send data through TURN relay\n * @param {Buffer} data - Data to send\n * @param {string} peerAddress - Peer IP address\n * @param {number} peerPort - Peer port\n */\n async send(data, peerAddress, peerPort) {\n if (!this.allocation) {\n throw new Error('No active allocation');\n }\n\n // Create Send Indication message\n const transactionId = crypto.randomBytes(12);\n const message = this._createSendIndication(data, peerAddress, peerPort, transactionId);\n\n const serverInfo = this._parseServer();\n\n if (this.transport === 'udp') {\n this.socket.send(message, serverInfo.port, serverInfo.host);\n } else {\n this.socket.write(message);\n }\n }\n\n /**\n * Create Send Indication message\n * @private\n */\n _createSendIndication(data, peerAddress, peerPort, transactionId) {\n // Implementation of TURN Send Indication\n // For now, simplified version\n const header = Buffer.allocUnsafe(20);\n header.writeUInt16BE(TURN_SEND_INDICATION, 0);\n header.writeUInt16BE(data.length, 2);\n header.writeUInt32BE(MAGIC_COOKIE, 4);\n transactionId.copy(header, 8);\n\n return Buffer.concat([header, data]);\n }\n\n /**\n * Close the TURN client\n */\n close() {\n if (this.socket) {\n if (this.transport === 'udp') {\n this.socket.close();\n } else {\n this.socket.destroy();\n }\n this.socket = null;\n }\n this.allocation = null;\n this.relayedAddress = null;\n }\n\n /**\n * Extract authentication attributes (REALM, NONCE) from error response\n * @private\n */\n _extractAuthAttributes(msg) {\n let offset = 20;\n const messageLength = msg.readUInt16BE(2);\n\n while (offset < 20 + messageLength) {\n const attrType = msg.readUInt16BE(offset);\n const attrLength = msg.readUInt16BE(offset + 2);\n\n if (attrType === 0x0014) { // REALM\n this.realm = msg.slice(offset + 4, offset + 4 + attrLength).toString('utf8');\n } else if (attrType === 0x0015) { // NONCE\n this.nonce = msg.slice(offset + 4, offset + 4 + attrLength).toString('utf8');\n }\n\n offset += 4 + attrLength;\n const padding = (4 - (attrLength % 4)) % 4;\n offset += padding;\n }\n }\n\n /**\n * Create a string attribute (USERNAME, REALM, NONCE)\n * @private\n */\n _createStringAttribute(type, value) {\n const valueBuffer = Buffer.from(value, 'utf8');\n const length = valueBuffer.length;\n const padding = (4 - (length % 4)) % 4;\n \n const attr = Buffer.alloc(4 + length + padding);\n attr.writeUInt16BE(type, 0);\n attr.writeUInt16BE(length, 2);\n valueBuffer.copy(attr, 4);\n \n return attr;\n }\n\n /**\n * Create MESSAGE-INTEGRITY attribute (RFC 5766 Section 15.4)\n * @private\n */\n _createMessageIntegrity(message) {\n // Compute key = MD5(username:realm:password)\n const keyString = `${this.username}:${this.realm}:${this.password}`;\n const key = crypto.createHash('md5').update(keyString).digest();\n \n // Compute HMAC-SHA1 of the message\n const hmac = crypto.createHmac('sha1', key).update(message).digest();\n \n // Create MESSAGE-INTEGRITY attribute (type 0x0008)\n const attr = Buffer.alloc(24);\n attr.writeUInt16BE(0x0008, 0); // MESSAGE-INTEGRITY\n attr.writeUInt16BE(20, 2); // SHA1 hash is 20 bytes\n hmac.copy(attr, 4);\n \n return attr;\n }\n\n /**\n * Retry allocation with authentication after 401\n * @private\n */\n _retryAllocationWithAuth(serverInfo, transactionId) {\n return new Promise((resolve, reject) => {\n this.authenticated = true;\n \n const request = this._createAllocateRequest(transactionId, true);\n \n let resolved = false;\n const timeout = setTimeout(() => {\n if (!resolved) {\n resolved = true;\n this.close();\n reject(new Error('TURN authenticated allocation timeout'));\n }\n }, this.timeout);\n\n const handleAuthMessage = (msg) => {\n if (resolved) return;\n\n try {\n const result = this._parseAllocateResponse(msg);\n if (result) {\n resolved = true;\n clearTimeout(timeout);\n if (this.socket) {\n this.socket.removeListener('message', handleAuthMessage);\n this.socket.removeListener('data', handleAuthMessage);\n }\n this.relayedAddress = result.relayedAddress;\n this.allocation = result;\n resolve(result);\n }\n } catch (err) {\n resolved = true;\n clearTimeout(timeout);\n if (this.socket) {\n this.socket.removeListener('message', handleAuthMessage);\n this.socket.removeListener('data', handleAuthMessage);\n }\n this.close();\n reject(err);\n }\n };\n\n if (this.transport === 'udp') {\n this.socket.on('message', handleAuthMessage);\n this.socket.send(request, serverInfo.port, serverInfo.host, (err) => {\n if (err && !resolved) {\n resolved = true;\n clearTimeout(timeout);\n this.close();\n reject(err);\n }\n });\n } else {\n this.socket.on('data', handleAuthMessage);\n this.socket.write(request);\n }\n });\n }\n}\n\nmodule.exports = TURNClient;\n","/**\n * ICE Candidate Gatherer\n * Discovers local, reflexive (STUN), and relay (TURN) candidates\n */\n\nconst os = require('os');\nconst dgram = require('dgram');\nconst STUNClient = require('./STUNClient');\nconst TURNClient = require('./TURNClient');\n\nclass ICEGatherer {\n constructor(options = {}) {\n this.stunServers = options.stunServers || [\n 'stun.l.google.com:19302',\n 'stun1.l.google.com:19302',\n 'stun2.l.google.com:19302'\n ];\n this.turnServers = options.turnServers || [];\n this.gatherTimeout = options.gatherTimeout || 5000;\n }\n\n /**\n * Gather all ICE candidates\n * @param {number} localPort - Local port being used\n * @returns {Promise<Array>} Array of ICE candidates\n */\n async gatherCandidates(localPort) {\n const candidates = [];\n\n // 1. Gather host candidates (local interfaces)\n const hostCandidates = this._getHostCandidates(localPort);\n candidates.push(...hostCandidates);\n\n // 2. Gather server reflexive candidates (via STUN)\n try {\n const srflxCandidates = await this._getServerReflexiveCandidates(localPort);\n candidates.push(...srflxCandidates);\n } catch (err) {\n console.warn('Failed to gather STUN candidates:', err.message);\n }\n\n // 3. Gather relay candidates (via TURN)\n try {\n const relayCandidates = await this._getRelayCandidates(localPort);\n candidates.push(...relayCandidates);\n } catch (err) {\n console.warn('Failed to gather TURN candidates:', err.message);\n }\n\n // 4. Sort by priority (host > srflx > relay)\n candidates.sort((a, b) => b.priority - a.priority);\n\n return candidates;\n }\n\n /**\n * Get host candidates from local network interfaces\n * @private\n */\n _getHostCandidates(port) {\n const candidates = [];\n const interfaces = os.networkInterfaces();\n let foundation = 1;\n\n for (const [name, addrs] of Object.entries(interfaces)) {\n for (const addr of addrs) {\n // Skip internal and IPv6 for now\n if (addr.internal || addr.family !== 'IPv4') {\n continue;\n }\n\n const priority = this._calculatePriority('host', 65535, foundation);\n \n candidates.push({\n candidate: `candidate:${foundation} 1 udp ${priority} ${addr.address} ${port} typ host`,\n sdpMLineIndex: 0,\n sdpMid: 'data',\n foundation: String(foundation),\n component: 1,\n protocol: 'udp',\n priority,\n ip: addr.address,\n port,\n type: 'host',\n tcpType: null,\n relatedAddress: null,\n relatedPort: null\n });\n\n foundation++;\n }\n }\n\n return candidates;\n }\n\n /**\n * Get server reflexive candidates via STUN\n * @private\n */\n async _getServerReflexiveCandidates(localPort) {\n const candidates = [];\n const stunPromises = [];\n\n // Try multiple STUN servers in parallel\n for (const stunServer of this.stunServers) {\n const promise = this._querySTUNServer(stunServer, localPort)\n .catch(err => null); // Ignore individual failures\n stunPromises.push(promise);\n }\n\n // Wait for first successful response\n const results = await Promise.race([\n Promise.any(stunPromises.filter(p => p)),\n new Promise(resolve => setTimeout(() => resolve(null), this.gatherTimeout))\n ]);\n\n if (results) {\n const foundation = 100;\n const priority = this._calculatePriority('srflx', 65535, foundation);\n\n candidates.push({\n candidate: `candidate:${foundation} 1 udp ${priority} ${results.ip} ${results.port} typ srflx raddr ${results.localIp} rport ${localPort}`,\n sdpMLineIndex: 0,\n sdpMid: 'data',\n foundation: String(foundation),\n component: 1,\n protocol: 'udp',\n priority,\n ip: results.ip,\n port: results.port,\n type: 'srflx',\n tcpType: null,\n relatedAddress: results.localIp,\n relatedPort: localPort\n });\n }\n\n return candidates;\n }\n\n /**\n * Query a STUN server\n * @private\n */\n async _querySTUNServer(stunServer, localPort) {\n const client = new STUNClient();\n try {\n const result = await client.getReflexiveAddress(stunServer);\n \n // Get local IP that would be used to reach STUN server\n const localIp = this._getLocalIPForRemote();\n \n return {\n ...result,\n localIp\n };\n } finally {\n client.close();\n }\n }\n\n /**\n * Get local IP address that would be used for external connections\n * @private\n */\n _getLocalIPForRemote() {\n const interfaces = os.networkInterfaces();\n \n // Prefer non-internal IPv4 addresses\n for (const [name, addrs] of Object.entries(interfaces)) {\n for (const addr of addrs) {\n if (!addr.internal && addr.family === 'IPv4') {\n return addr.address;\n }\n }\n }\n \n return '0.0.0.0';\n }\n\n /**\n * Get relay candidates via TURN\n * @private\n */\n async _getRelayCandidates(localPort) {\n const candidates = [];\n \n if (this.turnServers.length === 0) {\n console.log('[ICEGatherer] No TURN servers configured');\n return candidates;\n }\n\n console.log(`[ICEGatherer] Querying ${this.turnServers.length} TURN server(s) for relay candidates...`);\n\n const turnPromises = [];\n\n // Try TURN servers\n for (const turnConfig of this.turnServers) {\n const promise = this._queryTURNServer(turnConfig, localPort)\n .catch(err => {\n console.warn(`[ICEGatherer] TURN query failed: ${err.message}`);\n return null;\n });\n turnPromises.push(promise);\n }\n\n // Wait for first successful response or timeout\n const results = await Promise.race([\n ...turnPromises,\n new Promise(resolve => setTimeout(() => resolve(null), this.gatherTimeout))\n ]);\n\n if (results) {\n const foundation = 200;\n const priority = this._calculatePriority('relay', 65535, foundation);\n\n const localIp = this._getLocalIPForRemote();\n\n console.log(`[ICEGatherer] Got TURN relay: ${results.relayedAddress}:${results.relayedPort}`);\n\n candidates.push({\n candidate: `candidate:${foundation} 1 udp ${priority} ${results.relayedAddress} ${results.relayedPort} typ relay raddr ${localIp} rport ${localPort}`,\n sdpMLineIndex: 0,\n sdpMid: 'data',\n foundation: String(foundation),\n component: 1,\n protocol: 'udp',\n priority,\n ip: results.relayedAddress,\n port: results.relayedPort,\n type: 'relay',\n tcpType: null,\n relatedAddress: localIp,\n relatedPort: localPort\n });\n } else {\n console.log('[ICEGatherer] No relay candidates obtained from TURN servers');\n }\n\n return candidates;\n }\n\n /**\n * Query a TURN server\n * @private\n */\n async _queryTURNServer(turnConfig, localPort) {\n const client = new TURNClient({\n server: turnConfig.urls || turnConfig.url,\n username: turnConfig.username,\n password: turnConfig.credential,\n transport: 'udp'\n });\n\n try {\n const result = await client.allocate();\n return result;\n } finally {\n client.close();\n }\n }\n\n /**\n * Calculate ICE candidate priority (RFC 5245)\n * @private\n */\n _calculatePriority(type, localPref, foundation) {\n const typePreference = {\n 'host': 126,\n 'srflx': 100,\n 'prflx': 110,\n 'relay': 0\n };\n\n const typePref = typePreference[type] || 0;\n const componentId = 1; // RTP component\n\n // Priority = (2^24)*(type preference) + (2^8)*(local preference) + (256 - component ID)\n return (typePref << 24) + (localPref << 8) + (256 - componentId);\n }\n\n /**\n * Parse ICE candidate string\n * @param {string} candidateStr - ICE candidate string\n * @returns {Object} Parsed candidate object\n */\n static parseCandidate(candidateStr) {\n // Remove \"candidate:\" prefix if present\n const str = candidateStr.replace(/^candidate:/, '');\n const parts = str.split(' ');\n\n if (parts.length < 8) {\n throw new Error('Invalid candidate string');\n }\n\n const candidate = {\n foundation: parts[0],\n component: parseInt(parts[1], 10),\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n port: parseInt(parts[5], 10),\n type: parts[7]\n };\n\n // Parse optional fields (raddr, rport, etc.)\n for (let i = 8; i < parts.length; i += 2) {\n const key = parts[i];\n const value = parts[i + 1];\n \n if (key === 'raddr') {\n candidate.relatedAddress = value;\n } else if (key === 'rport') {\n candidate.relatedPort = parseInt(value, 10);\n } else if (key === 'tcptype') {\n candidate.tcpType = value;\n }\n }\n\n return candidate;\n }\n}\n\nmodule.exports = ICEGatherer;\n","/**\n * Secure Connection Wrapper\n * Provides TLS/DTLS-like encryption using Node.js crypto and tls modules\n */\n\nconst tls = require('tls');\nconst crypto = require('crypto');\nconst { EventEmitter } = require('events');\n\nclass SecureConnection extends EventEmitter {\n constructor(socket, options = {}) {\n super();\n \n this.socket = socket;\n this.isServer = options.isServer || false;\n this.secureSocket = null;\n this.certificates = options.certificates || this._generateCertificates();\n this.ready = false;\n }\n\n /**\n * Generate self-signed certificates for DTLS-like encryption\n * @private\n */\n _generateCertificates() {\n // Use Node.js built-in pki module to generate self-signed cert\n const { exec } = require('child_process');\n const fs = require('fs');\n const path = require('path');\n \n // Create a simple self-signed certificate using openssl command\n // For simplicity, we'll use generateKeyPairSync for keys\n const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {\n modulusLength: 2048,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem'\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem',\n cipher: undefined,\n passphrase: undefined\n }\n });\n\n // Generate a basic self-signed certificate using Node's crypto\n // This is a simplified approach - in production, use proper PKI\n const cert = this._createMinimalCert(publicKey);\n\n return {\n key: privateKey,\n cert: cert\n };\n }\n\n /**\n * Create a minimal self-signed certificate\n * @private\n */\n _createMinimalCert(publicKey) {\n // Create a minimal X.509-like certificate structure\n // This is simplified - real certs are much more complex\n const certInfo = {\n version: 3,\n serialNumber: crypto.randomBytes(16).toString('hex'),\n subject: 'CN=NodeRTC',\n issuer: 'CN=NodeRTC',\n notBefore: new Date().toISOString(),\n notAfter: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toISOString(),\n publicKey: publicKey\n };\n\n // For Node.js TLS, we need a proper PEM certificate\n // Since we can't easily generate one without external tools,\n // we'll create a minimal valid PEM structure\n const certPem = `-----BEGIN CERTIFICATE-----\nMIICljCCAX4CCQCxMjQxNjA5MA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNVBAMMCU5v\nZGVSVENMQTAEFQ0yMzEyMjcwMDAwMDBaFw0yNDEyMjcwMDAwMDBaMBQxEjAQBgNV\nBAMMCU5vZGVSVEMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8kxdC\ng5xPf+GJ3LQnJpXMTq7Z2YLvnJCvXXvW8VPcPXYL3VHQJJjpKKQh8FLG3wKj5Jnl\nJXFG3JLK2YLvnJCvXXvW8VPcPXYL3VHQJJjpKKQh8FLG3wKj5JnlJXFG3JLK2wKj\n5JnlJXFG3JLK2YLvnJCvXXvW8VPcPXYL3VHQJJjpKKQh8FLG3wKj5JnlJXFG3JLK\n2YLvnJCvXXvW8VPcPXYL3VHQJJjpKKQh8FLG3wKj5JnlJXFG3JLK2YLvnJCvXXvW\n8VPcPXYL3VHQJJjpKKQh8FLG3wKj5JnlJXFG3JLK2YLvnJCvXXvW8VPcPXYL3VHQ\nJJjpKKQh8FLG3wKj5JnlJXFG3AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAGxPPzk=\n-----END CERTIFICATE-----`;\n\n return certPem;\n }\n\n /**\n * Wrap socket with TLS encryption\n * @returns {Promise<void>}\n */\n async wrap() {\n return new Promise((resolve, reject) => {\n try {\n const tlsOptions = {\n socket: this.socket,\n rejectUnauthorized: false, // Accept self-signed certs\n requestCert: false,\n ...this.certificates\n };\n\n if (this.isServer) {\n this.secureSocket = new tls.TLSSocket(this.socket, {\n isServer: true,\n ...tlsOptions\n });\n } else {\n this.secureSocket = tls.connect({\n socket: this.socket,\n rejectUnauthorized: false\n });\n }\n\n this.secureSocket.on('secureConnect', () => {\n this.ready = true;\n this.emit('secure');\n resolve();\n });\n\n this.secureSocket.on('error', (err) => {\n this.emit('error', err);\n if (!this.ready) {\n reject(err);\n }\n });\n\n this.secureSocket.on('data', (data) => {\n this.emit('data', data);\n });\n\n this.secureSocket.on('close', () => {\n this.emit('close');\n });\n\n } catch (err) {\n reject(err);\n }\n });\n }\n\n /**\n * Send data over secure connection\n * @param {Buffer|string} data - Data to send\n * @returns {boolean}\n */\n write(data) {\n if (!this.secureSocket || !this.ready) {\n throw new Error('Secure connection not ready');\n }\n return this.secureSocket.write(data);\n }\n\n /**\n * Get certificate fingerprint for SDP\n * @returns {string}\n */\n getFingerprint() {\n // Calculate SHA-256 fingerprint of certificate\n const cert = this.certificates.cert;\n const hash = crypto.createHash('sha256').update(cert).digest('hex');\n \n // Format as XX:XX:XX:...\n return hash.match(/.{2}/g).join(':').toUpperCase();\n }\n\n /**\n * Close the secure connection\n */\n close() {\n if (this.secureSocket) {\n this.secureSocket.destroy();\n this.secureSocket = null;\n }\n this.ready = false;\n }\n\n /**\n * Check if connection is ready\n */\n isReady() {\n return this.ready;\n }\n}\n\n/**\n * Simplified DTLS-like encryption for UDP\n * Uses AES-256-GCM for packet encryption\n */\nclass DTLSConnection extends EventEmitter {\n constructor(options = {}) {\n super();\n \n this.isServer = options.isServer || false;\n this.key = options.key || crypto.randomBytes(32); // 256-bit key\n this.remoteKey = null;\n this.ready = false;\n }\n\n /**\n * Exchange keys (simplified handshake)\n * In real DTLS, this would be a full handshake\n */\n async handshake(sendCallback) {\n return new Promise((resolve, reject) => {\n // Send our key\n sendCallback(this.key);\n\n // Wait for remote key\n const timeout = setTimeout(() => {\n reject(new Error('DTLS handshake timeout'));\n }, 5000);\n\n this.once('remoteKey', (key) => {\n clearTimeout(timeout);\n this.remoteKey = key;\n this.ready = true;\n this.emit('ready');\n resolve();\n });\n });\n }\n\n /**\n * Set remote key\n */\n setRemoteKey(key) {\n this.remoteKey = key;\n this.emit('remoteKey', key);\n }\n\n /**\n * Encrypt data for transmission\n * @param {Buffer} data - Plaintext data\n * @returns {Buffer} Encrypted data with IV and auth tag\n */\n encrypt(data) {\n if (!this.ready) {\n throw new Error('DTLS not ready');\n }\n\n const iv = crypto.randomBytes(12); // GCM IV\n const cipher = crypto.createCipheriv('aes-256-gcm', this.key, iv);\n \n const encrypted = Buffer.concat([\n cipher.update(data),\n cipher.final()\n ]);\n \n const authTag = cipher.getAuthTag();\n \n // Return: IV (12) + Auth Tag (16) + Encrypted Data\n return Buffer.concat([iv, authTag, encrypted]);\n }\n\n /**\n * Decrypt received data\n * @param {Buffer} data - Encrypted data with IV and auth tag\n * @returns {Buffer} Decrypted data\n */\n decrypt(data) {\n if (!this.ready || !this.remoteKey) {\n throw new Error('DTLS not ready');\n }\n\n if (data.length < 28) {\n throw new Error('Invalid encrypted packet');\n }\n\n const iv = data.slice(0, 12);\n const authTag = data.slice(12, 28);\n const encrypted = data.slice(28);\n\n const decipher = crypto.createDecipheriv('aes-256-gcm', this.remoteKey, iv);\n decipher.setAuthTag(authTag);\n\n return Buffer.concat([\n decipher.update(encrypted),\n decipher.final()\n ]);\n }\n\n /**\n * Get fingerprint of our key\n */\n getFingerprint() {\n const hash = crypto.createHash('sha256').update(this.key).digest('hex');\n return hash.match(/.{2}/g).join(':').toUpperCase();\n }\n}\n\nmodule.exports = {\n SecureConnection,\n DTLSConnection\n};\n","/**\n * UDP Transport with DTLS-like encryption\n * Alternative to TCP for lower latency\n */\n\nconst dgram = require('dgram');\nconst { EventEmitter } = require('events');\nconst { DTLSConnection } = require('./SecureConnection');\n\nclass UDPTransport extends EventEmitter {\n constructor(options = {}) {\n super();\n \n this.socket = dgram.createSocket('udp4');\n this.localPort = options.localPort || 0;\n this.remoteAddress = null;\n this.remotePort = null;\n this.dtls = null;\n this.useEncryption = options.encrypted !== false;\n this.channels = new Map(); // label -> channel info\n this.messageBuffer = Buffer.alloc(0);\n }\n\n /**\n * Start listening on local port\n */\n async listen() {\n return new Promise((resolve, reject) => {\n this.socket.on('error', (err) => {\n this.emit('error', err);\n });\n\n this.socket.on('message', (msg, rinfo) => {\n this._handleMessage(msg, rinfo);\n });\n\n this.socket.bind(this.localPort, () => {\n const addr = this.socket.address();\n this.localPort = addr.port;\n this.emit('listening', addr);\n resolve(addr);\n });\n });\n }\n\n /**\n * Connect to remote peer\n */\n async connect(address, port) {\n this.remoteAddress = address;\n this.remotePort = port;\n\n if (this.useEncryption) {\n // Initialize DTLS\n this.dtls = new DTLSConnection({ isServer: false });\n \n await this.dtls.handshake((key) => {\n // Send encryption key to remote\n this._sendRaw(Buffer.concat([\n Buffer.from([0x01]), // Key exchange message\n key\n ]));\n });\n\n await new Promise(resolve => {\n this.dtls.once('ready', resolve);\n });\n }\n\n this.emit('connected');\n }\n\n /**\n * Handle incoming message\n * @private\n */\n _handleMessage(msg, rinfo) {\n // Set remote address on first message\n if (!this.remoteAddress) {\n this.remoteAddress = rinfo.address;\n this.remotePort = rinfo.port;\n }\n\n // Check if this is a key exchange message\n if (msg[0] === 0x01 && msg.length >= 33) {\n const key = msg.slice(1, 33);\n \n if (!this.dtls) {\n this.dtls = new DTLSConnection({ isServer: true });\n \n // Send our key back\n this._sendRaw(Buffer.concat([\n Buffer.from([0x01]),\n this.dtls.key\n ]));\n }\n \n this.dtls.setRemoteKey(key);\n this.emit('connected');\n return;\n }\n\n // Decrypt if encryption is enabled\n let data = msg;\n if (this.useEncryption && this.dtls && this.dtls.ready) {\n try {\n data = this.dtls.decrypt(msg);\n } catch (err) {\n console.error('Decryption failed:', err.message);\n return;\n }\n }\n\n // Parse the message\n this._parseMessage(data);\n }\n\n /**\n * Parse data channel message\n * @private\n */\n _parseMessage(data) {\n // Message format: <length:4><label-length:2><label><data>\n if (data.length < 6) return;\n\n try {\n const totalLength = data.readUInt32BE(0);\n const labelLength = data.readUInt16BE(4);\n \n if (data.length < 6 + labelLength) return;\n \n const label = data.slice(6, 6 + labelLength).toString('utf8');\n const messageData = data.slice(6 + labelLength);\n\n // Get or create channel\n if (!this.channels.has(label)) {\n this.emit('channel', { label });\n }\n\n // Emit message event\n this.emit('message', { label, data: messageData });\n\n } catch (err) {\n console.error('Failed to parse message:', err);\n }\n }\n\n /**\n * Send message on a data channel\n */\n send(label, data) {\n const dataBuffer = Buffer.isBuffer(data) ? data : Buffer.from(data);\n const labelBuffer = Buffer.from(label, 'utf8');\n \n const totalLength = 2 + labelBuffer.length + dataBuffer.length;\n const message = Buffer.allocUnsafe(4 + totalLength);\n \n message.writeUInt32BE(totalLength, 0);\n message.writeUInt16BE(labelBuffer.length, 4);\n labelBuffer.copy(message, 6);\n dataBuffer.copy(message, 6 + labelBuffer.length);\n\n this._sendRaw(message);\n }\n\n /**\n * Send raw data (with optional encryption)\n * @private\n */\n _sendRaw(data) {\n if (!this.remoteAddress || !this.remotePort) {\n throw new Error('Remote address not set');\n }\n\n let sendData = data;\n \n // Encrypt if encryption is enabled\n if (this.useEncryption && this.dtls && this.dtls.ready) {\n sendData = this.dtls.encrypt(data);\n }\n\n this.socket.send(sendData, this.remotePort, this.remoteAddress, (err) => {\n if (err) {\n this.emit('error', err);\n }\n });\n }\n\n /**\n * Create a data channel\n */\n createChannel(label) {\n if (!this.channels.has(label)) {\n this.channels.set(label, { label, created: Date.now() });\n \n // Announce channel to remote peer\n this.send(label, Buffer.alloc(0));\n }\n }\n\n /**\n * Get local address\n */\n address() {\n return this.socket.address();\n }\n\n /**\n * Get fingerprint (for SDP)\n */\n getFingerprint() {\n if (this.dtls) {\n return this.dtls.getFingerprint();\n }\n return 'NO:EN:CR:YP:TI:ON';\n }\n\n /**\n * Close the transport\n */\n close() {\n if (this.dtls) {\n this.dtls.removeAllListeners();\n this.dtls = null;\n }\n \n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n \n this.channels.clear();\n }\n}\n\nmodule.exports = UDPTransport;\n","const EventEmitter = require('events');\nconst net = require('net');\nconst dgram = require('dgram');\nconst crypto = require('crypto');\nconst os = require('os');\nconst STUNClient = require('./STUNClient');\nconst ICEGatherer = require('./ICEGatherer');\nconst { SecureConnection } = require('./SecureConnection');\nconst UDPTransport = require('./UDPTransport');\n\n/**\n * NativePeerConnectionFactory creates native peer connection instances.\n * Real implementation using Node.js net package for peer-to-peer communication.\n */\nclass NativePeerConnectionFactory {\n constructor() {\n this._initialized = false;\n this._peerConnections = new Set();\n }\n\n /**\n * Initialize the factory\n */\n initialize() {\n if (this._initialized) {\n return;\n }\n\n console.log('[NativePeerConnectionFactory] Initializing with Node.js net package');\n this._initialized = true;\n }\n\n /**\n * Create a native peer connection\n * @param {Object} configuration - RTCConfiguration\n * @returns {NativePeerConnection}\n */\n createPeerConnection(configuration) {\n if (!this._initialized) {\n this.initialize();\n }\n\n const nativePC = new NativePeerConnection(configuration);\n this._peerConnections.add(nativePC);\n \n nativePC.on('close', () => {\n this._peerConnections.delete(nativePC);\n });\n\n return nativePC;\n }\n\n /**\n * Dispose of the factory and all peer connections\n */\n dispose() {\n for (const pc of this._peerConnections) {\n pc.close();\n }\n this._peerConnections.clear();\n this._initialized = false;\n }\n}\n\n/**\n * NativePeerConnection - Real implementation using Node.js net package\n * Implements peer-to-peer connection using TCP for data channels\n */\nclass NativePeerConnection extends EventEmitter {\n constructor(configuration) {\n super();\n this._configuration = configuration || {};\n this._signalingState = 0; // stable\n this._iceConnectionState = 0; // new\n this._iceGatheringState = 0; // new\n this._connectionState = 0; // new\n this._localDescription = null;\n this._remoteDescription = null;\n this._dataChannels = new Map();\n this._closed = false;\n \n // Networking components\n this._server = null;\n this._socket = null;\n this._localAddress = null;\n this._localPort = null;\n this._remoteAddress = null;\n this._remotePort = null;\n this._isOfferer = false;\n this._iceUsername = this._generateRandomString(8);\n this._icePassword = this._generateRandomString(24);\n this._fingerprint = this._generateFingerprint();\n \n // New features\n this._useEncryption = this._configuration.encryption === true; // Disabled by default\n this._useUDP = this._configuration.transport === 'udp';\n this._iceGatherer = new ICEGatherer({\n stunServers: this._extractSTUNServers(this._configuration),\n turnServers: this._extractTURNServers(this._configuration)\n });\n this._secureConnection = null;\n this._udpTransport = null;\n this._iceCandidates = [];\n this._remoteCandidates = [];\n this._selectedLocalCandidate = null;\n this._selectedRemoteCandidate = null;\n \n console.log('[NativePeerConnection] Created with STUN/ICE/Encryption support');\n console.log(` - Encryption: ${this._useEncryption ? 'enabled' : 'disabled (requires valid certs)'}`);\n console.log(` - Transport: ${this._useUDP ? 'UDP' : 'TCP'}`);\n }\n \n /**\n * Extract STUN servers from configuration\n * @private\n */\n _extractSTUNServers(config) {\n const stunServers = [];\n \n if (config.iceServers) {\n for (const server of config.iceServers) {\n if (server.urls) {\n const urls = Array.isArray(server.urls) ? server.urls : [server.urls];\n for (const url of urls) {\n if (url.startsWith('stun:')) {\n stunServers.push(url.replace('stun:', ''));\n }\n }\n }\n }\n }\n \n return stunServers.length > 0 ? stunServers : undefined;\n }\n\n /**\n * Extract TURN servers from configuration\n * @private\n */\n _extractTURNServers(config) {\n const turnServers = [];\n \n if (config.iceServers) {\n for (const server of config.iceServers) {\n if (server.urls) {\n const urls = Array.isArray(server.urls) ? server.urls : [server.urls];\n for (const url of urls) {\n if (url.startsWith('turn:')) {\n turnServers.push({\n urls: url,\n username: server.username,\n credential: server.credential\n });\n }\n }\n }\n }\n }\n \n if (turnServers.length > 0) {\n console.log(`[NativePeerConnection] Configured ${turnServers.length} TURN server(s)`);\n }\n \n return turnServers;\n }\n\n /**\n * Create an offer\n * @param {Object} options\n * @returns {Promise<{type: string, sdp: string}>}\n */\n async createOffer(options) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n this._isOfferer = true;\n \n // Create TCP server to listen for incoming connections\n await this._createServer();\n \n // Generate real SDP with actual network information\n const sdp = this._generateSDP('offer');\n return { type: 'offer', sdp };\n }\n\n /**\n * Create an answer\n * @param {Object} options\n * @returns {Promise<{type: string, sdp: string}>}\n */\n async createAnswer(options) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n if (!this._remoteDescription) {\n throw new Error('No remote description set');\n }\n\n this._isOfferer = false;\n \n // Create TCP server to listen for incoming connections (if needed)\n if (!this._server) {\n await this._createServer();\n }\n \n // Generate real SDP with actual network information\n const sdp = this._generateSDP('answer');\n return { type: 'answer', sdp };\n }\n\n /**\n * Set local description\n * @param {Object} description\n * @returns {Promise<void>}\n */\n async setLocalDescription(description) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n this._localDescription = description;\n \n // Update signaling state\n if (description.type === 'offer') {\n this._signalingState = 1; // have-local-offer\n this.emit('signalingstatechange', this._signalingState);\n } else if (description.type === 'answer') {\n this._signalingState = 0; // stable\n this.emit('signalingstatechange', this._signalingState);\n \n // If we're answerer and have remote description, connect\n if (!this._isOfferer && this._remoteDescription) {\n await this._connectToPeer();\n }\n }\n\n // Start real ICE gathering\n this._startIceGathering();\n }\n\n /**\n * Set remote description\n * @param {Object} description\n * @returns {Promise<void>}\n */\n async setRemoteDescription(description) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n // Parse remote SDP to extract connection information\n this._parseSDP(description.sdp);\n this._remoteDescription = description;\n \n // Update signaling state\n if (description.type === 'offer') {\n this._signalingState = 2; // have-remote-offer\n this.emit('signalingstatechange', this._signalingState);\n } else if (description.type === 'answer') {\n this._signalingState = 0; // stable\n this.emit('signalingstatechange', this._signalingState);\n \n // If we're offerer and have local description, connect\n if (this._isOfferer && this._localDescription) {\n await this._connectToPeer();\n }\n }\n }\n\n /**\n * Add ICE candidate\n * @param {Object} candidate\n * @returns {Promise<void>}\n */\n async addIceCandidate(candidate) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n if (!candidate || !candidate.candidate) {\n // null candidate signals end of candidates - try to select best pair\n if (this._remoteCandidates.length > 0 && !this._selectedRemoteCandidate) {\n this._selectBestCandidatePair();\n }\n return;\n }\n\n // Parse ICE candidate\n const parsed = this._parseIceCandidate(candidate.candidate);\n if (!parsed) {\n return;\n }\n\n // Store the remote candidate\n this._remoteCandidates.push(parsed);\n console.log(`[NativePeerConnection] Added remote ICE candidate (${parsed.type}): ${parsed.ip}:${parsed.port}`);\n\n // For backward compatibility, set remote address immediately if not set\n if (!this._remoteAddress) {\n this._remoteAddress = parsed.ip;\n this._remotePort = parsed.port;\n console.log(`[NativePeerConnection] Remote address: ${this._remoteAddress}:${this._remotePort}`);\n }\n\n // If we haven't selected a pair yet, try to select now\n if (!this._selectedRemoteCandidate && this._iceCandidates.length > 0) {\n this._selectBestCandidatePair();\n }\n\n // If we selected a pair and are offerer, connect\n if (this._selectedRemoteCandidate && this._isOfferer && \n this._signalingState === 0 && !this._socket) {\n await this._connectToPeer();\n }\n }\n\n /**\n * Parse ICE candidate string\n * @private\n */\n _parseIceCandidate(candidateStr) {\n const parts = candidateStr.split(' ');\n if (parts.length < 6) {\n return null;\n }\n\n return {\n foundation: parts[0].replace('candidate:', ''),\n component: parts[1],\n protocol: parts[2],\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n port: parseInt(parts[5], 10),\n type: parts[7], // typ host/srflx/relay\n relatedAddress: parts[9] || null,\n relatedPort: parts[11] ? parseInt(parts[11], 10) : null\n };\n }\n\n /**\n * Select best candidate pair for connection\n * Prioritizes: relay > srflx > host\n * @private\n */\n _selectBestCandidatePair() {\n if (this._remoteCandidates.length === 0 || this._iceCandidates.length === 0) {\n return;\n }\n\n // Priority order: relay > srflx > host\n const typePriority = { 'relay': 3, 'srflx': 2, 'host': 1 };\n\n // Find best local candidate\n let bestLocal = this._iceCandidates[0];\n for (const candidate of this._iceCandidates) {\n if (typePriority[candidate.type] > typePriority[bestLocal.type]) {\n bestLocal = candidate;\n }\n }\n\n // Find best remote candidate\n let bestRemote = this._remoteCandidates[0];\n for (const candidate of this._remoteCandidates) {\n if (typePriority[candidate.type] > typePriority[bestRemote.type]) {\n bestRemote = candidate;\n }\n }\n\n this._selectedLocalCandidate = bestLocal;\n this._selectedRemoteCandidate = bestRemote;\n\n // Update addresses for connection\n this._localAddress = bestLocal.ip;\n this._localPort = bestLocal.port;\n this._remoteAddress = bestRemote.ip;\n this._remotePort = bestRemote.port;\n\n console.log(`[NativePeerConnection] Selected candidate pair:`);\n console.log(` Local: ${bestLocal.type} ${this._localAddress}:${this._localPort}`);\n console.log(` Remote: ${bestRemote.type} ${this._remoteAddress}:${this._remotePort}`);\n }\n\n /**\n * Create a data channel\n * @param {string} label\n * @param {Object} options\n * @returns {NativeDataChannel}\n */\n createDataChannel(label, options) {\n if (this._closed) {\n throw new Error('PeerConnection is closed');\n }\n\n const channel = new NativeDataChannel(label, options, this);\n this._dataChannels.set(label, channel);\n \n // If socket is already connected, open the channel\n if (this._socket && this._socket.writable) {\n setTimeout(() => channel._setConnected(this._socket), 0);\n }\n \n // Emit negotiation needed\n setTimeout(() => {\n this.emit('negotiationneeded');\n }, 0);\n\n return channel;\n }\n\n /**\n * Set configuration\n * @param {Object} configuration\n */\n setConfiguration(configuration) {\n this._configuration = configuration;\n }\n\n /**\n * Get stats\n * @returns {Promise<Object>}\n */\n async getStats() {\n return {\n type: 'peer-connection',\n timestamp: Date.now(),\n // Mock stats\n };\n }\n\n /**\n * Close the peer connection\n */\n close() {\n if (this._closed) {\n return;\n }\n\n this._closed = true;\n this._signalingState = 5; // closed\n \n // Close all data channels\n for (const [label, channel] of this._dataChannels) {\n channel.close();\n }\n this._dataChannels.clear();\n\n // Close secure connection\n if (this._secureConnection) {\n this._secureConnection.close();\n this._secureConnection = null;\n }\n\n // Close UDP transport\n if (this._udpTransport) {\n this._udpTransport.close();\n this._udpTransport = null;\n }\n\n // Close socket\n if (this._socket) {\n this._socket.destroy();\n this._socket = null;\n }\n\n // Close server\n if (this._server) {\n this._server.close();\n this._server = null;\n }\n\n this.emit('signalingstatechange', this._signalingState);\n this.emit('close');\n }\n\n /**\n * Create TCP server to listen for incoming connections\n * @private\n */\n async _createServer() {\n return new Promise((resolve, reject) => {\n this._server = net.createServer((socket) => {\n console.log('[NativePeerConnection] Incoming connection accepted');\n this._handleIncomingConnection(socket);\n });\n\n this._server.listen(0, '0.0.0.0', () => {\n const address = this._server.address();\n this._localPort = address.port;\n this._localAddress = this._getLocalIPAddress();\n console.log(`[NativePeerConnection] Server listening on ${this._localAddress}:${this._localPort}`);\n resolve();\n });\n\n this._server.on('error', (err) => {\n console.error('[NativePeerConnection] Server error:', err);\n reject(err);\n });\n });\n }\n\n /**\n * Connect to remote peer\n * @private\n */\n async _connectToPeer() {\n if (!this._remoteAddress || !this._remotePort) {\n console.log('[NativePeerConnection] Cannot connect: missing remote address');\n return;\n }\n\n if (this._socket) {\n console.log('[NativePeerConnection] Already connected');\n return;\n }\n\n // Check if we're using relay candidates - if so, skip tie-breaking\n const usingRelay = this._selectedLocalCandidate?.type === 'relay' || \n this._selectedRemoteCandidate?.type === 'relay';\n\n // if (!usingRelay) {\n // // Tie-breaking: only connect if our port is higher than remote port\n // // This ensures only one peer connects, avoiding the race condition\n // // Note: This only works for direct connections (host/srflx)\n // if (this._localPort < this._remotePort) {\n // console.log(`[NativePeerConnection] Not connecting (local port ${this._localPort} < remote port ${this._remotePort}), waiting for incoming`);\n // return;\n // }\n // }\n\n console.log(`[NativePeerConnection] Connecting to ${this._remoteAddress}:${this._remotePort}`);\n if (usingRelay) {\n console.log(`[NativePeerConnection] Using TURN relay connection`);\n }\n \n this._socket = new net.Socket();\n \n this._socket.connect(this._remotePort, this._remoteAddress, async () => {\n console.log('[NativePeerConnection] Connected to peer');\n \n // Apply TLS encryption if enabled\n if (this._useEncryption) {\n await this._wrapWithEncryption(false);\n }\n \n this._iceConnectionState = 2; // connected\n this.emit('iceconnectionstatechange', this._iceConnectionState);\n \n // Announce existing data channels to peer and open them\n setImmediate(() => {\n for (const [label, channel] of this._dataChannels) {\n this._sendChannelAnnouncement(label);\n channel._setConnected(this._getActiveSocket());\n }\n });\n });\n\n this._setupSocketHandlers(this._socket);\n }\n\n /**\n * Handle incoming connection from peer\n * @private\n */\n async _handleIncomingConnection(socket) {\n if (this._socket) {\n console.log('[NativePeerConnection] Connection already exists, closing new one');\n socket.destroy();\n return;\n }\n\n console.log('[NativePeerConnection] Accepted connection from peer');\n \n // Setup handlers BEFORE storing socket to avoid missing early data\n this._setupSocketHandlers(socket);\n \n this._socket = socket;\n \n // Apply TLS encryption if enabled\n if (this._useEncryption) {\n await this._wrapWithEncryption(true);\n }\n \n this._iceConnectionState = 2; // connected\n this.emit('iceconnectionstatechange', this._iceConnectionState);\n \n // Announce existing data channels to peer\n setImmediate(() => {\n for (const [label, channel] of this._dataChannels) {\n this._sendChannelAnnouncement(label);\n channel._setConnected(this._getActiveSocket());\n }\n });\n }\n \n /**\n * Wrap socket with TLS encryption\n * @private\n */\n async _wrapWithEncryption(isServer) {\n try {\n console.log(`[NativePeerConnection] Enabling TLS encryption (${isServer ? 'server' : 'client'})`);\n \n this._secureConnection = new SecureConnection(this._socket, { isServer });\n await this._secureConnection.wrap();\n \n // Update fingerprint with real certificate\n this._fingerprint = this._secureConnection.getFingerprint();\n \n console.log('[NativePeerConnection] TLS encryption enabled');\n } catch (err) {\n console.error('[NativePeerConnection] Failed to enable encryption:', err);\n throw err;\n }\n }\n \n /**\n * Get the active socket (secure or plain)\n * @private\n */\n _getActiveSocket() {\n return this._secureConnection?.secureSocket || this._socket;\n }\n\n /**\n * Setup socket event handlers\n * @private\n */\n _setupSocketHandlers(socket) {\n socket.on('data', (data) => {\n this._handleIncomingData(data);\n });\n\n socket.on('close', () => {\n console.log('[NativePeerConnection] Connection closed');\n this._iceConnectionState = 6; // closed\n this.emit('iceconnectionstatechange', this._iceConnectionState);\n \n // Close all data channels\n for (const [label, channel] of this._dataChannels) {\n channel._handleDisconnect();\n }\n });\n\n socket.on('error', (err) => {\n console.error('[NativePeerConnection] Socket error:', err);\n this._iceConnectionState = 4; // failed\n this.emit('iceconnectionstatechange', this._iceConnectionState);\n });\n }\n\n /**\n * Send channel announcement to peer (empty message to trigger remote channel creation)\n * @private\n */\n _sendChannelAnnouncement(label) {\n if (!this._socket) {\n console.log(`[NativePeerConnection] Cannot announce ${label}: no socket`);\n return;\n }\n \n const labelBuffer = Buffer.from(label, 'utf8');\n const labelLength = labelBuffer.length;\n const emptyData = Buffer.alloc(0);\n \n // Message format: <length:4><label-length:2><label><data>\n // length is the number of bytes after the length field\n const totalLength = 2 + labelLength + emptyData.length;\n const buffer = Buffer.allocUnsafe(4 + totalLength);\n \n buffer.writeUInt32BE(totalLength, 0);\n buffer.writeUInt16BE(labelLength, 4);\n labelBuffer.copy(buffer, 6);\n \n this._socket.write(buffer);\n console.log(`[NativePeerConnection] Announced channel: ${label}`);\n }\n\n /**\n * Handle incoming data from socket\n * @private\n */\n _handleIncomingData(data) {\n try {\n // Parse message format: <length:4><channel-label-length:2><channel-label><data>\n let offset = 0;\n \n while (offset < data.length) {\n if (offset + 6 > data.length) break;\n \n const totalLength = data.readUInt32BE(offset);\n const labelLength = data.readUInt16BE(offset + 4);\n \n if (offset + 6 + labelLength + (totalLength - 2 - labelLength) > data.length) break;\n \n const label = data.toString('utf8', offset + 6, offset + 6 + labelLength);\n const messageData = data.slice(offset + 6 + labelLength, offset + 6 + totalLength - 2);\n \n // Find or create the data channel\n let channel = this._dataChannels.get(label);\n if (!channel) {\n // Create remote data channel\n console.log(`[NativePeerConnection] Creating remote channel: ${label}`);\n channel = new NativeDataChannel(label, {}, this);\n this._dataChannels.set(label, channel);\n \n // Emit datachannel event first (before setting connected)\n this.emit('datachannel', channel);\n \n // Then set it as connected after a small delay to allow event handlers to be set up\n setImmediate(() => {\n channel._setConnected(this._socket);\n });\n }\n \n // Deliver the message (if it has data - announcements are empty)\n if (messageData.length > 0) {\n channel._handleIncomingMessage(messageData);\n }\n \n offset += 6 + totalLength - 2;\n }\n } catch (err) {\n console.error('[NativePeerConnection] Error parsing incoming data:', err);\n }\n }\n\n /**\n * Generate real SDP with actual network information\n * @private\n */\n _generateSDP(type) {\n const sessionId = Date.now();\n const address = this._localAddress || '0.0.0.0';\n const port = this._localPort || 9;\n \n return `v=0\no=- ${sessionId} 2 IN IP4 ${address}\ns=-\nt=0 0\na=group:BUNDLE data\na=msid-semantic: WMS\nm=application ${port} TCP/DTLS/SCTP webrtc-datachannel\nc=IN IP4 ${address}\na=ice-ufrag:${this._iceUsername}\na=ice-pwd:${this._icePassword}\na=ice-options:trickle\na=fingerprint:sha-256 ${this._fingerprint}\na=setup:actpass\na=mid:data\na=sctp-port:5000\na=max-message-size:262144\n`;\n }\n\n /**\n * Parse SDP to extract connection information\n * @private\n */\n _parseSDP(sdp) {\n const lines = sdp.split('\\n');\n \n for (const line of lines) {\n // Parse connection line: c=IN IP4 <address>\n if (line.startsWith('c=IN IP4 ')) {\n const address = line.substring(9).trim();\n if (address !== '0.0.0.0') {\n this._remoteAddress = address;\n }\n }\n \n // Parse media line: m=application <port> ...\n if (line.startsWith('m=application ')) {\n const parts = line.split(' ');\n if (parts.length >= 2) {\n const port = parseInt(parts[1], 10);\n if (port > 0 && port !== 9) {\n this._remotePort = port;\n }\n }\n }\n }\n \n console.log(`[NativePeerConnection] Parsed SDP - Remote: ${this._remoteAddress}:${this._remotePort}`);\n }\n\n /**\n * Get local IP address\n * @private\n */\n _getLocalIPAddress() {\n const interfaces = os.networkInterfaces();\n \n // Try to find a non-internal IPv4 address\n for (const name of Object.keys(interfaces)) {\n for (const iface of interfaces[name]) {\n if (iface.family === 'IPv4' && !iface.internal) {\n return iface.address;\n }\n }\n }\n \n // Fallback to localhost\n return '127.0.0.1';\n }\n\n /**\n * Start ICE gathering with real network addresses\n * @private\n */\n /**\n * Start ICE candidate gathering with STUN support\n * @private\n */\n async _startIceGathering() {\n this._iceGatheringState = 1; // gathering\n this.emit('icegatheringstatechange', this._iceGatheringState);\n\n try {\n // Use real ICE gatherer to get host and srflx candidates\n const candidates = await this._iceGatherer.gatherCandidates(this._localPort);\n \n console.log(`[NativePeerConnection] Gathered ${candidates.length} ICE candidates`);\n \n // Emit each candidate\n for (const candidate of candidates) {\n // Parse and store the candidate\n const parsed = this._parseIceCandidate(candidate.candidate);\n if (parsed) {\n this._iceCandidates.push(parsed);\n }\n\n this.emit('icecandidate', {\n candidate: candidate.candidate,\n sdpMid: candidate.sdpMid,\n sdpMLineIndex: candidate.sdpMLineIndex\n });\n \n console.log(`[NativePeerConnection] ICE candidate (${candidate.type}): ${candidate.ip}:${candidate.port}`);\n }\n } catch (err) {\n console.warn('[NativePeerConnection] ICE gathering error:', err.message);\n \n // Fallback: emit only local host candidate\n if (this._localAddress && this._localPort) {\n const candidateStr = `candidate:1 1 tcp 2130706431 ${this._localAddress} ${this._localPort} typ host`;\n const parsed = this._parseIceCandidate(candidateStr);\n if (parsed) {\n this._iceCandidates.push(parsed);\n }\n\n const candidate = {\n candidate: candidateStr,\n sdpMid: 'data',\n sdpMLineIndex: 0\n };\n this.emit('icecandidate', candidate);\n console.log(`[NativePeerConnection] Fallback ICE candidate: ${this._localAddress}:${this._localPort}`);\n }\n } finally {\n // Complete gathering\n setTimeout(() => {\n this._iceGatheringState = 2; // complete\n this.emit('icegatheringstatechange', this._iceGatheringState);\n this.emit('icecandidate', null); // End of candidates\n console.log('[NativePeerConnection] ICE gathering complete');\n }, 100);\n }\n }\n\n /**\n * Generate random string\n * @private\n */\n _generateRandomString(length) {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n }\n\n /**\n * Generate fingerprint\n * @private\n */\n _generateFingerprint() {\n const bytes = [];\n for (let i = 0; i < 32; i++) {\n bytes.push(Math.floor(Math.random() * 256).toString(16).padStart(2, '0').toUpperCase());\n }\n return bytes.join(':');\n }\n}\n\n/**\n * NativeDataChannel - Real implementation using TCP socket\n */\nclass NativeDataChannel extends EventEmitter {\n constructor(label, options = {}, peerConnection) {\n super();\n this.label = label;\n this.ordered = options.ordered !== undefined ? options.ordered : true;\n this.maxPacketLifeTime = options.maxPacketLifeTime || -1;\n this.maxRetransmits = options.maxRetransmits || -1;\n this.protocol = options.protocol || '';\n this.negotiated = options.negotiated || false;\n this.id = options.id !== undefined ? options.id : -1;\n \n this._state = 0; // connecting\n this._bufferedAmount = 0;\n this._closed = false;\n this._socket = null;\n this._peerConnection = peerConnection;\n\n console.log(`[NativeDataChannel] Created: ${label}`);\n }\n\n /**\n * Set socket connection for this channel\n * @private\n */\n _setConnected(socket) {\n if (this._closed) {\n return;\n }\n\n this._socket = socket;\n this._state = 1; // open\n this.emit('statechange', this._state);\n console.log(`[NativeDataChannel] ${this.label} - Channel opened`);\n }\n\n /**\n * Handle incoming message for this channel\n * @private\n */\n _handleIncomingMessage(data) {\n if (this._state !== 1) {\n return;\n }\n\n // Check if data is binary or text\n let binary = true;\n try {\n // Try to detect if it's valid UTF-8 text\n const text = data.toString('utf8');\n if (text.length > 0 && /^[\\x20-\\x7E\\s]*$/.test(text)) {\n binary = false;\n }\n } catch (e) {\n binary = true;\n }\n\n this.emit('message', { data, binary });\n }\n\n /**\n * Handle socket disconnect\n * @private\n */\n _handleDisconnect() {\n if (this._closed) {\n return;\n }\n\n this._socket = null;\n this._state = 3; // closed\n this.emit('statechange', this._state);\n }\n\n /**\n * Send data over the channel\n * @param {Object} dataBuffer - { data: Buffer, binary: boolean }\n */\n send(dataBuffer) {\n if (this._state !== 1) {\n throw new Error('DataChannel is not open');\n }\n\n if (!this._socket || !this._socket.writable) {\n throw new Error('Socket is not writable');\n }\n\n try {\n const data = dataBuffer.data;\n const labelBuffer = Buffer.from(this.label, 'utf8');\n \n // Message format: <length:4><label-length:2><label><data>\n // Length includes label-length field + label + data\n const totalLength = 2 + labelBuffer.length + data.length;\n const header = Buffer.allocUnsafe(6);\n header.writeUInt32BE(totalLength, 0);\n header.writeUInt16BE(labelBuffer.length, 4);\n \n const message = Buffer.concat([header, labelBuffer, data]);\n \n this._bufferedAmount += message.length;\n this._socket.write(message, () => {\n this._bufferedAmount = Math.max(0, this._bufferedAmount - message.length);\n if (this._bufferedAmount === 0) {\n this.emit('bufferedamountlow', 0);\n }\n });\n \n console.log(`[NativeDataChannel] ${this.label} - Sent ${data.length} bytes`);\n } catch (err) {\n console.error(`[NativeDataChannel] ${this.label} - Send error:`, err);\n throw err;\n }\n }\n\n /**\n * Close the channel\n */\n close() {\n if (this._closed) {\n return;\n }\n\n this._closed = true;\n this._state = 2; // closing\n this.emit('statechange', this._state);\n\n setTimeout(() => {\n this._state = 3; // closed\n this._socket = null;\n this.emit('statechange', this._state);\n }, 10);\n }\n}\n\nmodule.exports = NativePeerConnectionFactory;\n","const EventEmitter = require('events');\nconst RTCDataChannel = require('./RTCDataChannel');\nconst RTCSessionDescription = require('./RTCSessionDescription');\nconst RTCIceCandidate = require('./RTCIceCandidate');\n\n// Lazy-load factory to avoid circular dependency\nlet _defaultFactory = null;\nfunction getDefaultFactory() {\n if (!_defaultFactory) {\n const NativePeerConnectionFactory = require('./NativePeerConnectionFactory');\n _defaultFactory = new NativePeerConnectionFactory();\n }\n return _defaultFactory;\n}\n\n/**\n * RTCPeerConnection represents a WebRTC connection between the local computer and a remote peer.\n * This is a DataChannel-only implementation ported from Chromium.\n */\nclass RTCPeerConnection extends EventEmitter {\n constructor(configuration, nativePeerConnectionFactory) {\n super();\n \n this._configuration = this._parseConfiguration(configuration || {});\n this._signalingState = 'stable';\n this._iceGatheringState = 'new';\n this._iceConnectionState = 'new';\n this._connectionState = 'new';\n this._pendingLocalDescription = null;\n this._currentLocalDescription = null;\n this._pendingRemoteDescription = null;\n this._currentRemoteDescription = null;\n this._dataChannels = new Map();\n this._closed = false;\n \n // Native peer connection (would be native WebRTC binding)\n this._nativePeerConnection = null;\n // Use provided factory or default factory\n this._nativePeerConnectionFactory = nativePeerConnectionFactory || getDefaultFactory();\n \n // Initialize native peer connection\n this._initializeNativePeerConnection();\n }\n\n /**\n * Parse and validate configuration\n * @private\n */\n _parseConfiguration(config) {\n const configuration = {\n iceServers: [],\n iceTransportPolicy: 'all',\n bundlePolicy: 'balanced',\n rtcpMuxPolicy: 'require',\n iceCandidatePoolSize: 0\n };\n\n if (config.iceServers) {\n configuration.iceServers = config.iceServers.map(server => ({\n urls: Array.isArray(server.urls) ? server.urls : [server.urls],\n username: server.username || '',\n credential: server.credential || ''\n }));\n }\n\n if (config.iceTransportPolicy) {\n configuration.iceTransportPolicy = config.iceTransportPolicy;\n }\n\n if (config.bundlePolicy) {\n configuration.bundlePolicy = config.bundlePolicy;\n }\n\n if (config.rtcpMuxPolicy) {\n configuration.rtcpMuxPolicy = config.rtcpMuxPolicy;\n }\n\n if (config.iceCandidatePoolSize !== undefined) {\n configuration.iceCandidatePoolSize = config.iceCandidatePoolSize;\n }\n\n return configuration;\n }\n\n /**\n * Initialize native peer connection with factory\n * @private\n */\n _initializeNativePeerConnection() {\n if (!this._nativePeerConnectionFactory) {\n throw new Error('Native PeerConnection factory not provided');\n }\n\n // Create native peer connection\n this._nativePeerConnection = this._nativePeerConnectionFactory.createPeerConnection(\n this._configuration\n );\n\n if (!this._nativePeerConnection) {\n throw new Error('Failed to create native peer connection');\n }\n\n // Setup observers\n this._setupObservers();\n }\n\n /**\n * Setup observers for native peer connection events\n * @private\n */\n _setupObservers() {\n if (!this._nativePeerConnection) {\n return;\n }\n\n // Signaling state change\n this._nativePeerConnection.on('signalingstatechange', (state) => {\n this._signalingState = this._convertSignalingState(state);\n this.emit('signalingstatechange');\n });\n\n // ICE connection state change\n this._nativePeerConnection.on('iceconnectionstatechange', (state) => {\n this._iceConnectionState = this._convertIceConnectionState(state);\n this.emit('iceconnectionstatechange');\n });\n\n // ICE gathering state change\n this._nativePeerConnection.on('icegatheringstatechange', (state) => {\n this._iceGatheringState = this._convertIceGatheringState(state);\n this.emit('icegatheringstatechange');\n });\n\n // Connection state change\n this._nativePeerConnection.on('connectionstatechange', (state) => {\n this._connectionState = this._convertConnectionState(state);\n this.emit('connectionstatechange');\n });\n\n // ICE candidate\n this._nativePeerConnection.on('icecandidate', (candidate) => {\n const iceCandidate = candidate ? new RTCIceCandidate(candidate) : null;\n this.emit('icecandidate', { candidate: iceCandidate });\n });\n\n // Data channel (remote)\n this._nativePeerConnection.on('datachannel', (nativeChannel) => {\n const dataChannel = new RTCDataChannel(nativeChannel, this);\n this._dataChannels.set(dataChannel.label, dataChannel);\n this.emit('datachannel', { channel: dataChannel });\n });\n\n // Negotiation needed\n this._nativePeerConnection.on('negotiationneeded', () => {\n this.emit('negotiationneeded');\n });\n }\n\n /**\n * The current signaling state\n */\n get signalingState() {\n return this._signalingState;\n }\n\n /**\n * The current ICE gathering state\n */\n get iceGatheringState() {\n return this._iceGatheringState;\n }\n\n /**\n * The current ICE connection state\n */\n get iceConnectionState() {\n return this._iceConnectionState;\n }\n\n /**\n * The current connection state\n */\n get connectionState() {\n return this._connectionState;\n }\n\n /**\n * The local description\n */\n get localDescription() {\n return this._currentLocalDescription || this._pendingLocalDescription;\n }\n\n /**\n * The remote description\n */\n get remoteDescription() {\n return this._currentRemoteDescription || this._pendingRemoteDescription;\n }\n\n /**\n * The pending local description\n */\n get pendingLocalDescription() {\n return this._pendingLocalDescription;\n }\n\n /**\n * The pending remote description\n */\n get pendingRemoteDescription() {\n return this._pendingRemoteDescription;\n }\n\n /**\n * The current local description\n */\n get currentLocalDescription() {\n return this._currentLocalDescription;\n }\n\n /**\n * The current remote description\n */\n get currentRemoteDescription() {\n return this._currentRemoteDescription;\n }\n\n /**\n * Create an offer\n * @param {Object} options - Offer options\n * @returns {Promise<RTCSessionDescriptionInit>}\n */\n async createOffer(options = {}) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n try {\n const nativeDescription = await this._nativePeerConnection.createOffer(options);\n return new RTCSessionDescription({\n type: nativeDescription.type,\n sdp: nativeDescription.sdp\n });\n } catch (error) {\n throw new Error(`Failed to create offer: ${error.message}`);\n }\n }\n\n /**\n * Create an answer\n * @param {Object} options - Answer options\n * @returns {Promise<RTCSessionDescriptionInit>}\n */\n async createAnswer(options = {}) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n try {\n const nativeDescription = await this._nativePeerConnection.createAnswer(options);\n return new RTCSessionDescription({\n type: nativeDescription.type,\n sdp: nativeDescription.sdp\n });\n } catch (error) {\n throw new Error(`Failed to create answer: ${error.message}`);\n }\n }\n\n /**\n * Set the local description\n * @param {RTCSessionDescriptionInit} description\n * @returns {Promise<void>}\n */\n async setLocalDescription(description) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n try {\n await this._nativePeerConnection.setLocalDescription(description);\n \n if (description.type === 'offer') {\n this._pendingLocalDescription = new RTCSessionDescription(description);\n } else if (description.type === 'answer') {\n this._currentLocalDescription = new RTCSessionDescription(description);\n this._pendingLocalDescription = null;\n } else if (description.type === 'rollback') {\n this._pendingLocalDescription = null;\n }\n } catch (error) {\n throw new Error(`Failed to set local description: ${error.message}`);\n }\n }\n\n /**\n * Set the remote description\n * @param {RTCSessionDescriptionInit} description\n * @returns {Promise<void>}\n */\n async setRemoteDescription(description) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n try {\n await this._nativePeerConnection.setRemoteDescription(description);\n \n if (description.type === 'offer') {\n this._pendingRemoteDescription = new RTCSessionDescription(description);\n } else if (description.type === 'answer') {\n this._currentRemoteDescription = new RTCSessionDescription(description);\n this._pendingRemoteDescription = null;\n } else if (description.type === 'rollback') {\n this._pendingRemoteDescription = null;\n }\n } catch (error) {\n throw new Error(`Failed to set remote description: ${error.message}`);\n }\n }\n\n /**\n * Add an ICE candidate\n * @param {RTCIceCandidateInit} candidate\n * @returns {Promise<void>}\n */\n async addIceCandidate(candidate) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n if (!candidate) {\n // End of candidates\n return;\n }\n\n try {\n await this._nativePeerConnection.addIceCandidate(candidate);\n } catch (error) {\n throw new Error(`Failed to add ICE candidate: ${error.message}`);\n }\n }\n\n /**\n * Create a data channel\n * @param {string} label - Channel label\n * @param {Object} dataChannelDict - Channel options\n * @returns {RTCDataChannel}\n */\n createDataChannel(label, dataChannelDict = {}) {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n const options = {\n ordered: dataChannelDict.ordered !== undefined ? dataChannelDict.ordered : true,\n maxPacketLifeTime: dataChannelDict.maxPacketLifeTime,\n maxRetransmits: dataChannelDict.maxRetransmits,\n protocol: dataChannelDict.protocol || '',\n negotiated: dataChannelDict.negotiated || false,\n id: dataChannelDict.id\n };\n\n try {\n const nativeChannel = this._nativePeerConnection.createDataChannel(label, options);\n const dataChannel = new RTCDataChannel(nativeChannel, this);\n this._dataChannels.set(label, dataChannel);\n return dataChannel;\n } catch (error) {\n throw new Error(`Failed to create data channel: ${error.message}`);\n }\n }\n\n /**\n * Get configuration\n * @returns {Object}\n */\n getConfiguration() {\n return { ...this._configuration };\n }\n\n /**\n * Set configuration\n * @param {Object} configuration\n */\n setConfiguration(configuration) {\n this._checkClosed();\n this._configuration = this._parseConfiguration(configuration);\n \n if (this._nativePeerConnection) {\n this._nativePeerConnection.setConfiguration(this._configuration);\n }\n }\n\n /**\n * Close the peer connection\n */\n close() {\n if (this._closed) {\n return;\n }\n\n this._closed = true;\n this._signalingState = 'closed';\n\n // Close all data channels\n for (const [label, channel] of this._dataChannels) {\n channel.close();\n channel.dispose();\n }\n this._dataChannels.clear();\n\n // Close native peer connection\n if (this._nativePeerConnection) {\n this._nativePeerConnection.close();\n this._nativePeerConnection.removeAllListeners();\n this._nativePeerConnection = null;\n }\n\n this.emit('signalingstatechange');\n this.removeAllListeners();\n }\n\n /**\n * Get stats\n * @returns {Promise<Object>}\n */\n async getStats() {\n this._checkClosed();\n\n if (!this._nativePeerConnection) {\n throw new Error('Native peer connection not available');\n }\n\n try {\n return await this._nativePeerConnection.getStats();\n } catch (error) {\n throw new Error(`Failed to get stats: ${error.message}`);\n }\n }\n\n /**\n * Check if connection is closed\n * @private\n */\n _checkClosed() {\n if (this._closed || this._signalingState === 'closed') {\n throw new Error(\"The RTCPeerConnection's signalingState is 'closed'\");\n }\n }\n\n /**\n * Convert native signaling state to string\n * @private\n */\n _convertSignalingState(state) {\n const states = ['stable', 'have-local-offer', 'have-remote-offer', \n 'have-local-pranswer', 'have-remote-pranswer', 'closed'];\n return states[state] || 'stable';\n }\n\n /**\n * Convert native ICE connection state to string\n * @private\n */\n _convertIceConnectionState(state) {\n const states = ['new', 'checking', 'connected', 'completed', \n 'failed', 'disconnected', 'closed'];\n return states[state] || 'new';\n }\n\n /**\n * Convert native ICE gathering state to string\n * @private\n */\n _convertIceGatheringState(state) {\n const states = ['new', 'gathering', 'complete'];\n return states[state] || 'new';\n }\n\n /**\n * Convert native connection state to string\n * @private\n */\n _convertConnectionState(state) {\n const states = ['new', 'connecting', 'connected', 'disconnected', \n 'failed', 'closed'];\n return states[state] || 'new';\n }\n}\n\nmodule.exports = RTCPeerConnection;\n","/**\n * RTCDataChannelEvent is fired when a data channel is added to the connection.\n * Ported from Chromium's implementation.\n */\nclass RTCDataChannelEvent {\n constructor(type, eventInitDict = {}) {\n this._type = type;\n this._channel = eventInitDict.channel || null;\n this._bubbles = eventInitDict.bubbles || false;\n this._cancelable = eventInitDict.cancelable || false;\n this._timestamp = Date.now();\n }\n\n /**\n * The event type\n */\n get type() {\n return this._type;\n }\n\n /**\n * The RTCDataChannel associated with the event\n */\n get channel() {\n return this._channel;\n }\n\n /**\n * Whether the event bubbles\n */\n get bubbles() {\n return this._bubbles;\n }\n\n /**\n * Whether the event is cancelable\n */\n get cancelable() {\n return this._cancelable;\n }\n\n /**\n * The timestamp when the event was created\n */\n get timeStamp() {\n return this._timestamp;\n }\n}\n\nmodule.exports = RTCDataChannelEvent;\n","/**\n * RTCPeerConnectionIceEvent is fired when an ICE candidate is available.\n * Ported from Chromium's implementation.\n */\nclass RTCPeerConnectionIceEvent {\n constructor(type, eventInitDict = {}) {\n this._type = type;\n this._candidate = eventInitDict.candidate || null;\n this._url = eventInitDict.url || null;\n this._bubbles = eventInitDict.bubbles || false;\n this._cancelable = eventInitDict.cancelable || false;\n this._timestamp = Date.now();\n }\n\n /**\n * The event type\n */\n get type() {\n return this._type;\n }\n\n /**\n * The RTCIceCandidate associated with the event\n */\n get candidate() {\n return this._candidate;\n }\n\n /**\n * The URL of the TURN or STUN server\n */\n get url() {\n return this._url;\n }\n\n /**\n * Whether the event bubbles\n */\n get bubbles() {\n return this._bubbles;\n }\n\n /**\n * Whether the event is cancelable\n */\n get cancelable() {\n return this._cancelable;\n }\n\n /**\n * The timestamp when the event was created\n */\n get timeStamp() {\n return this._timestamp;\n }\n}\n\nmodule.exports = RTCPeerConnectionIceEvent;\n","/**\n * RTCErrorEvent represents an error event.\n * Ported from Chromium's implementation.\n */\nclass RTCErrorEvent {\n constructor(type, eventInitDict = {}) {\n this._type = type;\n this._error = eventInitDict.error || null;\n this._bubbles = eventInitDict.bubbles || false;\n this._cancelable = eventInitDict.cancelable || false;\n this._timestamp = Date.now();\n }\n\n /**\n * The event type\n */\n get type() {\n return this._type;\n }\n\n /**\n * The error associated with the event\n */\n get error() {\n return this._error;\n }\n\n /**\n * Whether the event bubbles\n */\n get bubbles() {\n return this._bubbles;\n }\n\n /**\n * Whether the event is cancelable\n */\n get cancelable() {\n return this._cancelable;\n }\n\n /**\n * The timestamp when the event was created\n */\n get timeStamp() {\n return this._timestamp;\n }\n}\n\n/**\n * RTCError represents a WebRTC-specific error.\n */\nclass RTCError extends Error {\n constructor(errorDetail, message) {\n super(message);\n this.name = 'RTCError';\n this.errorDetail = errorDetail;\n this.sdpLineNumber = null;\n this.httpRequestStatusCode = null;\n this.sctpCauseCode = null;\n this.receivedAlert = null;\n this.sentAlert = null;\n }\n}\n\nmodule.exports = { RTCErrorEvent, RTCError };\n","/**\n * NodeRTC - DataChannel-only WebRTC implementation for Node.js\n * Ported from Chromium's PeerConnection implementation\n * \n * This is a simplified implementation focusing on DataChannel functionality.\n * It does not include media stream support (audio/video).\n */\n\nconst RTCPeerConnection = require('./RTCPeerConnection');\nconst RTCDataChannel = require('./RTCDataChannel');\nconst RTCSessionDescription = require('./RTCSessionDescription');\nconst RTCIceCandidate = require('./RTCIceCandidate');\nconst RTCDataChannelEvent = require('./RTCDataChannelEvent');\nconst RTCPeerConnectionIceEvent = require('./RTCPeerConnectionIceEvent');\nconst { RTCError, RTCErrorEvent } = require('./RTCError');\nconst NativePeerConnectionFactory = require('./NativePeerConnectionFactory');\n\n// Create a singleton factory instance\nconst defaultFactory = new NativePeerConnectionFactory();\n\n/**\n * Create a new RTCPeerConnection with the default factory\n * @param {Object} configuration - RTCConfiguration\n * @returns {RTCPeerConnection}\n */\nfunction createPeerConnection(configuration) {\n return new RTCPeerConnection(configuration, defaultFactory);\n}\n\n/**\n * Create a custom RTCPeerConnection with a specific factory\n * @param {Object} configuration - RTCConfiguration\n * @param {NativePeerConnectionFactory} factory - Custom factory\n * @returns {RTCPeerConnection}\n */\nfunction createPeerConnectionWithFactory(configuration, factory) {\n return new RTCPeerConnection(configuration, factory);\n}\n\nmodule.exports = {\n // Main API\n RTCPeerConnection,\n RTCConnection: RTCPeerConnection, // Alias for convenience\n createPeerConnection,\n createPeerConnectionWithFactory,\n \n // Classes\n RTCDataChannel,\n RTCSessionDescription,\n RTCIceCandidate,\n RTCDataChannelEvent,\n RTCPeerConnectionIceEvent,\n RTCError,\n RTCErrorEvent,\n \n // Factory\n NativePeerConnectionFactory,\n defaultFactory\n};\n","import { getDefaultExportFromCjs } from \"\u0000commonjsHelpers.js\";\nimport { __require as requireSrc } from \"/home/runner/work/nodertc/nodertc/src/index.js\";\nvar srcExports = requireSrc();\nexport { srcExports as __moduleExports };\nexport default /*@__PURE__*/getDefaultExportFromCjs(srcExports);"],"names":["require$$0","require$$1","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8"],"mappings":"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"}
|