{"version":3,"file":"RTCPeerConnection.cjs","sources":["../../../src/polyfill/RTCPeerConnection.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DataChannelInitConfig, SelectedCandidateInfo } from '../lib/types';\nimport { PeerConnection } from '../lib/index';\nimport RTCSessionDescription from './RTCSessionDescription';\nimport RTCDataChannel from './RTCDataChannel';\nimport RTCIceCandidate from './RTCIceCandidate';\nimport { RTCDataChannelEvent, RTCPeerConnectionIceEvent } from './Events';\nimport RTCSctpTransport from './RTCSctpTransport';\nimport * as exceptions from './Exception';\nimport RTCCertificate from './RTCCertificate';\n\n// extend RTCConfiguration with peerIdentity\ninterface RTCConfiguration extends globalThis.RTCConfiguration {\n  peerIdentity?: string;\n  peerConnection?: PeerConnection;\n}\n\nexport default class RTCPeerConnection extends EventTarget implements globalThis.RTCPeerConnection {\n  static async generateCertificate(): Promise<RTCCertificate> {\n    throw new DOMException('Not implemented');\n  }\n\n  #peerConnection: PeerConnection;\n  #localOffer: ReturnType<typeof createDeferredPromise>;\n  #localAnswer: ReturnType<typeof createDeferredPromise>;\n  #dataChannels: Set<globalThis.RTCDataChannel>;\n  #dataChannelsClosed = 0;\n  #config: globalThis.RTCConfiguration;\n  #canTrickleIceCandidates: boolean | null = null;\n  #sctp: globalThis.RTCSctpTransport;\n  #announceNegotiation = false;\n\n  #localCandidates: globalThis.RTCIceCandidate[] = [];\n  #remoteCandidates: globalThis.RTCIceCandidate[] = [];\n\n  // events\n  onconnectionstatechange: globalThis.RTCPeerConnection['onconnectionstatechange'] = null;\n  // For ondatachannel we need to define type manually\n  ondatachannel: ((this: globalThis.RTCPeerConnection, ev: RTCDataChannelEvent) => any) | null;\n  onicecandidate: globalThis.RTCPeerConnection['onicecandidate'] = null;\n  onicecandidateerror: globalThis.RTCPeerConnection['onicecandidateerror'] = null;\n  oniceconnectionstatechange: globalThis.RTCPeerConnection['oniceconnectionstatechange'] = null;\n  onicegatheringstatechange: globalThis.RTCPeerConnection['onicegatheringstatechange'] = null;\n  onnegotiationneeded: globalThis.RTCPeerConnection['onnegotiationneeded'] = null;\n  onsignalingstatechange: globalThis.RTCPeerConnection['onsignalingstatechange'] = null;\n  ontrack: globalThis.RTCPeerConnection['ontrack'] = null;\n\n  private _checkConfiguration(config: globalThis.RTCConfiguration): void {\n    if (config && config.iceServers === undefined) config.iceServers = [];\n    if (config && config.iceTransportPolicy === undefined) config.iceTransportPolicy = 'all';\n\n    if (config?.iceServers === null) throw new TypeError('IceServers cannot be null');\n\n    // Check for all the properties of iceServers\n    if (Array.isArray(config?.iceServers)) {\n      for (let i = 0; i < config.iceServers.length; i++) {\n        if (config.iceServers[i] === null) throw new TypeError('IceServers cannot be null');\n        if (config.iceServers[i] === undefined)\n          throw new TypeError('IceServers cannot be undefined');\n        if (Object.keys(config.iceServers[i]).length === 0)\n          throw new TypeError('IceServers cannot be empty');\n\n        // If iceServers is string convert to array\n        if (typeof config.iceServers[i].urls === 'string')\n          config.iceServers[i].urls = [config.iceServers[i].urls as string];\n\n        // urls can not be empty\n        if ((config.iceServers[i].urls as string[])?.some((url) => url == ''))\n          throw new exceptions.SyntaxError('IceServers urls cannot be empty');\n\n        // urls should be valid URLs and match the protocols \"stun:|turn:|turns:\"\n        if (\n          (config.iceServers[i].urls as string[])?.some((url) => {\n            try {\n              const parsedURL = new URL(url);\n\n              return !/^(stun:|turn:|turns:)$/.test(parsedURL.protocol);\n            } catch (error) {\n              return true;\n            }\n          })\n        )\n          throw new exceptions.SyntaxError('IceServers urls wrong format');\n\n        // If this is a turn server check for username and credential\n        if ((config.iceServers[i].urls as string[])?.some((url) => url.startsWith('turn'))) {\n          if (!config.iceServers[i].username)\n            throw new exceptions.InvalidAccessError('IceServers username cannot be null');\n          if (!config.iceServers[i].credential)\n            throw new exceptions.InvalidAccessError('IceServers username cannot be undefined');\n        }\n\n        // length of urls can not be 0\n        if (config.iceServers[i].urls?.length === 0)\n          throw new exceptions.SyntaxError('IceServers urls cannot be empty');\n      }\n    }\n\n    if (\n      config &&\n      config.iceTransportPolicy &&\n      config.iceTransportPolicy !== 'all' &&\n      config.iceTransportPolicy !== 'relay'\n    )\n      throw new TypeError('IceTransportPolicy must be either \"all\" or \"relay\"');\n  }\n\n  setConfiguration(config: globalThis.RTCConfiguration): void {\n    this._checkConfiguration(config);\n    this.#config = config;\n  }\n\n  constructor(config: RTCConfiguration = { iceServers: [], iceTransportPolicy: 'all' }) {\n    super();\n\n    this._checkConfiguration(config);\n    this.#config = config;\n    this.#localOffer = createDeferredPromise();\n    this.#localAnswer = createDeferredPromise();\n    this.#dataChannels = new Set();\n    this.#canTrickleIceCandidates = null;\n\n    try {\n      const peerIdentity = (config as any)?.peerIdentity ?? `peer-${getRandomString(7)}`;\n      this.#peerConnection =\n        config?.peerConnection ??\n        new PeerConnection(peerIdentity, {\n          ...config,\n          iceServers:\n            config?.iceServers\n              ?.map((server) => {\n                const urls = Array.isArray(server.urls) ? server.urls : [server.urls];\n\n                return urls.map((url) => {\n                  if (server.username && server.credential) {\n                    const [protocol, rest] = url.split(/:(.*)/);\n                    return `${protocol}:${server.username}:${server.credential}@${rest}`;\n                  }\n                  return url;\n                });\n              })\n              .flat() ?? [],\n        });\n    } catch (error) {\n      if (!error || !error.message) throw new exceptions.NotFoundError('Unknown error');\n      throw new exceptions.SyntaxError(error.message);\n    }\n\n    // forward peerConnection events\n    this.#peerConnection.onStateChange(() => {\n      this.dispatchEvent(new Event('connectionstatechange'));\n    });\n\n    this.#peerConnection.onIceStateChange(() => {\n      this.dispatchEvent(new Event('iceconnectionstatechange'));\n    });\n\n    this.#peerConnection.onSignalingStateChange(() => {\n      this.dispatchEvent(new Event('signalingstatechange'));\n    });\n\n    this.#peerConnection.onGatheringStateChange(() => {\n      this.dispatchEvent(new Event('icegatheringstatechange'));\n    });\n\n    this.#peerConnection.onDataChannel((channel) => {\n      const dc = new RTCDataChannel(channel);\n      this.#dataChannels.add(dc);\n      this.dispatchEvent(new RTCDataChannelEvent('datachannel', { channel: dc }));\n    });\n\n    this.#peerConnection.onLocalDescription((sdp, type) => {\n      if (type === 'offer') {\n        this.#localOffer.resolve(new RTCSessionDescription({ sdp, type }));\n      }\n\n      if (type === 'answer') {\n        this.#localAnswer.resolve(new RTCSessionDescription({ sdp, type }));\n      }\n    });\n\n    this.#peerConnection.onLocalCandidate((candidate, sdpMid) => {\n      if (sdpMid === 'unspec') {\n        this.#localAnswer.reject(new Error(`Invalid description type ${sdpMid}`));\n        return;\n      }\n\n      this.#localCandidates.push(new RTCIceCandidate({ candidate, sdpMid }));\n      this.dispatchEvent(new RTCPeerConnectionIceEvent(new RTCIceCandidate({ candidate, sdpMid })));\n    });\n\n    // forward events to properties\n    this.addEventListener('connectionstatechange', (e) => {\n      this.onconnectionstatechange?.(e);\n    });\n    this.addEventListener('signalingstatechange', (e) => {\n      this.onsignalingstatechange?.(e);\n    });\n    this.addEventListener('iceconnectionstatechange', (e) => {\n      this.oniceconnectionstatechange?.(e);\n    });\n    this.addEventListener('icegatheringstatechange', (e) => {\n      this.onicegatheringstatechange?.(e);\n    });\n    this.addEventListener('datachannel', (e) => {\n      this.ondatachannel?.(e as RTCDataChannelEvent);\n    });\n    this.addEventListener('icecandidate', (e) => {\n      this.onicecandidate?.(e as globalThis.RTCPeerConnectionIceEvent);\n    });\n    this.addEventListener('track', (e) => {\n      this.ontrack?.(e as RTCTrackEvent);\n    });\n    this.addEventListener('negotiationneeded', (e) => {\n      this.#announceNegotiation = true;\n      this.onnegotiationneeded?.(e);\n    });\n\n    this.#sctp = new RTCSctpTransport({\n      pc: this,\n    });\n  }\n\n  // Extra FUnctions\n  get ext_maxDataChannelId(): number {\n    return this.#peerConnection.maxDataChannelId();\n  }\n\n  get ext_maxMessageSize(): number {\n    return this.#peerConnection.maxMessageSize();\n  }\n\n  get ext_localCandidates(): globalThis.RTCIceCandidate[] {\n    return this.#localCandidates;\n  }\n\n  get ext_remoteCandidates(): globalThis.RTCIceCandidate[] {\n    return this.#remoteCandidates;\n  }\n\n  selectedCandidatePair(): {\n    local: SelectedCandidateInfo;\n    remote: SelectedCandidateInfo;\n  } | null {\n    return this.#peerConnection.getSelectedCandidatePair();\n  }\n\n  get canTrickleIceCandidates(): boolean | null {\n    return this.#canTrickleIceCandidates;\n  }\n\n  get connectionState(): globalThis.RTCPeerConnectionState {\n    return this.#peerConnection.state();\n  }\n\n  get iceConnectionState(): globalThis.RTCIceConnectionState {\n    let state = this.#peerConnection.iceState();\n    // libdatachannel uses 'completed' instead of 'connected'\n    // see /webrtc/getstats.html\n    if (state == 'completed') state = 'connected';\n    return state;\n  }\n\n  get iceGatheringState(): globalThis.RTCIceGatheringState {\n    return this.#peerConnection.gatheringState();\n  }\n\n  get currentLocalDescription(): globalThis.RTCSessionDescription {\n    return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n  }\n\n  get currentRemoteDescription(): globalThis.RTCSessionDescription {\n    return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n  }\n\n  get localDescription(): globalThis.RTCSessionDescription {\n    return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n  }\n\n  get pendingLocalDescription(): globalThis.RTCSessionDescription {\n    return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n  }\n\n  get pendingRemoteDescription(): globalThis.RTCSessionDescription {\n    return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n  }\n\n  get remoteDescription(): globalThis.RTCSessionDescription {\n    return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n  }\n\n  get sctp(): globalThis.RTCSctpTransport {\n    return this.#sctp;\n  }\n\n  get signalingState(): globalThis.RTCSignalingState {\n    return this.#peerConnection.signalingState();\n  }\n\n  async addIceCandidate(candidate?: globalThis.RTCIceCandidateInit | null): Promise<void> {\n    if (!candidate || !candidate.candidate) {\n      return;\n    }\n\n    if (candidate.sdpMid === null && candidate.sdpMLineIndex === null) {\n      throw new TypeError('sdpMid must be set');\n    }\n\n    if (candidate.sdpMid === undefined && candidate.sdpMLineIndex == undefined) {\n      throw new TypeError('sdpMid must be set');\n    }\n\n    // Reject if sdpMid format is not valid\n    // ??\n    if (candidate.sdpMid && candidate.sdpMid.length > 3) {\n      // console.log(candidate.sdpMid);\n      throw new exceptions.OperationError('Invalid sdpMid format');\n    }\n\n    // We don't care about sdpMLineIndex, just for test\n    if (!candidate.sdpMid && candidate.sdpMLineIndex > 1) {\n      throw new exceptions.OperationError('This is only for test case.');\n    }\n\n    try {\n      this.#peerConnection.addRemoteCandidate(candidate.candidate, candidate.sdpMid ?? '0');\n      this.#remoteCandidates.push(\n        new RTCIceCandidate({\n          candidate: candidate.candidate,\n          sdpMid: candidate.sdpMid ?? '0',\n        }),\n      );\n    } catch (error) {\n      if (!error || !error.message) throw new exceptions.NotFoundError('Unknown error');\n\n      // Check error Message if contains specific message\n      if (error.message.includes('remote candidate without remote description'))\n        throw new exceptions.InvalidStateError(error.message);\n      if (error.message.includes('Invalid candidate format'))\n        throw new exceptions.OperationError(error.message);\n\n      throw new exceptions.NotFoundError(error.message);\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  addTrack(_track, ..._streams): globalThis.RTCRtpSender {\n    throw new DOMException('Not implemented');\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  addTransceiver(_trackOrKind, _init): globalThis.RTCRtpTransceiver {\n    throw new DOMException('Not implemented');\n  }\n\n  close(): void {\n    this.#peerConnection.close();\n  }\n\n  createAnswer(): Promise<globalThis.RTCSessionDescriptionInit | any> {\n    return this.#localAnswer;\n  }\n\n  createDataChannel(label: string, opts: globalThis.RTCDataChannelInit = {}): RTCDataChannel {\n    const nativeOpts: DataChannelInitConfig = {\n      ...opts,\n      // libdatachannel uses \"unordered\", opposite of RTCDataChannelInit.ordered\n      unordered: opts.ordered === false ? true : false,\n    };\n\n    const channel = this.#peerConnection.createDataChannel(label, nativeOpts);\n    const dataChannel = new RTCDataChannel(channel, opts);\n\n    // ensure we can close all channels when shutting down\n    this.#dataChannels.add(dataChannel);\n    dataChannel.addEventListener('close', () => {\n      this.#dataChannels.delete(dataChannel);\n      this.#dataChannelsClosed++;\n    });\n\n    if (this.#announceNegotiation == null) {\n      this.#announceNegotiation = false;\n      this.dispatchEvent(new Event('negotiationneeded'));\n    }\n\n    return dataChannel;\n  }\n\n  createOffer(): Promise<globalThis.RTCSessionDescriptionInit | any> {\n    return this.#localOffer;\n  }\n\n  getConfiguration(): globalThis.RTCConfiguration {\n    return this.#config;\n  }\n\n  getReceivers(): globalThis.RTCRtpReceiver[] {\n    throw new DOMException('Not implemented');\n  }\n\n  getSenders(): globalThis.RTCRtpSender[] {\n    throw new DOMException('Not implemented');\n  }\n\n  getStats(): Promise<globalThis.RTCStatsReport> | any {\n    return new Promise((resolve) => {\n      const report = new Map();\n      const cp = this.#peerConnection?.getSelectedCandidatePair();\n      const bytesSent = this.#peerConnection?.bytesSent();\n      const bytesReceived = this.#peerConnection?.bytesReceived();\n      const rtt = this.#peerConnection?.rtt();\n\n      if (!cp) {\n        return resolve(report);\n      }\n\n      const localIdRs = getRandomString(8);\n      const localId = 'RTCIceCandidate_' + localIdRs;\n      report.set(localId, {\n        id: localId,\n        type: 'local-candidate',\n        timestamp: Date.now(),\n        candidateType: cp.local.type,\n        ip: cp.local.address,\n        port: cp.local.port,\n      });\n\n      const remoteIdRs = getRandomString(8);\n      const remoteId = 'RTCIceCandidate_' + remoteIdRs;\n      report.set(remoteId, {\n        id: remoteId,\n        type: 'remote-candidate',\n        timestamp: Date.now(),\n        candidateType: cp.remote.type,\n        ip: cp.remote.address,\n        port: cp.remote.port,\n      });\n\n      const candidateId = 'RTCIceCandidatePair_' + localIdRs + '_' + remoteIdRs;\n      report.set(candidateId, {\n        id: candidateId,\n        type: 'candidate-pair',\n        timestamp: Date.now(),\n        localCandidateId: localId,\n        remoteCandidateId: remoteId,\n        state: 'succeeded',\n        nominated: true,\n        writable: true,\n        bytesSent: bytesSent,\n        bytesReceived: bytesReceived,\n        totalRoundTripTime: rtt,\n        currentRoundTripTime: rtt,\n      });\n\n      const transportId = 'RTCTransport_0_1';\n      report.set(transportId, {\n        id: transportId,\n        timestamp: Date.now(),\n        type: 'transport',\n        bytesSent: bytesSent,\n        bytesReceived: bytesReceived,\n        dtlsState: 'connected',\n        selectedCandidatePairId: candidateId,\n        selectedCandidatePairChanges: 1,\n      });\n\n      // peer-connection'\n      report.set('P', {\n        id: 'P',\n        type: 'peer-connection',\n        timestamp: Date.now(),\n        dataChannelsOpened: this.#dataChannels.size,\n        dataChannelsClosed: this.#dataChannelsClosed,\n      });\n\n      return resolve(report);\n    });\n  }\n\n  getTransceivers(): globalThis.RTCRtpTransceiver[] {\n    return []; // throw new DOMException('Not implemented');\n  }\n\n  removeTrack(): void {\n    throw new DOMException('Not implemented');\n  }\n\n  restartIce(): Promise<void> {\n    throw new DOMException('Not implemented');\n  }\n\n  async setLocalDescription(description: globalThis.RTCSessionDescriptionInit): Promise<void> {\n    if (description?.type !== 'offer') {\n      // any other type causes libdatachannel to throw\n      return;\n    }\n\n    this.#peerConnection.setLocalDescription(description?.type as any);\n  }\n\n  async setRemoteDescription(description: globalThis.RTCSessionDescriptionInit): Promise<void> {\n    if (description.sdp == null) {\n      throw new DOMException('Remote SDP must be set');\n    }\n\n    this.#peerConnection.setRemoteDescription(description.sdp, description.type as any);\n  }\n}\n\nfunction createDeferredPromise(): any {\n  let resolve: any, reject: any;\n\n  const promise = new Promise(function (_resolve, _reject) {\n    resolve = _resolve;\n    reject = _reject;\n  });\n\n  (promise as any).resolve = resolve;\n  (promise as any).reject = reject;\n  return promise;\n}\n\nfunction getRandomString(length: number): string {\n  return Math.random()\n    .toString(36)\n    .substring(2, 2 + length);\n}\n"],"names":["PeerConnection","exceptions.NotFoundError","exceptions.SyntaxError","RTCDataChannel","RTCDataChannelEvent","RTCSessionDescription","RTCIceCandidate","RTCPeerConnectionIceEvent","RTCSctpTransport","exceptions.InvalidAccessError","exceptions.OperationError","exceptions.InvalidStateError"],"mappings":"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"}