{"version":3,"file":"RTCDataChannel.cjs","sources":["../../../src/polyfill/RTCDataChannel.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as exceptions from './Exception';\nimport { DataChannel } from '../lib/index';\nimport { RTCErrorEvent } from './Events';\n\nexport default class RTCDataChannel extends EventTarget implements globalThis.RTCDataChannel {\n  #dataChannel: DataChannel;\n  #readyState: globalThis.RTCDataChannelState;\n  #bufferedAmountLowThreshold: number;\n  #binaryType: BinaryType;\n  #maxPacketLifeTime: number | null;\n  #maxRetransmits: number | null;\n  #negotiated: boolean;\n  #ordered: boolean;\n  #id: number;\n  #label: string;\n  #protocol: string;\n\n  #closeRequested = false;\n\n  // events\n  onbufferedamountlow: globalThis.RTCDataChannel['onbufferedamountlow'] = null;\n  onclose: globalThis.RTCDataChannel['onclose'] = null;\n  onclosing: globalThis.RTCDataChannel['onclosing'] = null;\n  onerror: globalThis.RTCDataChannel['onerror'] = null;\n  onmessage: globalThis.RTCDataChannel['onmessage'] = null;\n  onopen: globalThis.RTCDataChannel['onopen'] = null;\n\n  constructor(dataChannel: DataChannel, opts: globalThis.RTCDataChannelInit = {}) {\n    super();\n\n    this.#dataChannel = dataChannel;\n    this.#binaryType = 'blob';\n    this.#readyState = this.#dataChannel.isOpen() ? 'open' : 'connecting';\n    this.#bufferedAmountLowThreshold = 0;\n    this.#maxPacketLifeTime = opts.maxPacketLifeTime ?? null;\n    this.#maxRetransmits = opts.maxRetransmits ?? null;\n    this.#negotiated = opts.negotiated ?? false;\n    this.#ordered = opts.ordered ?? true;\n    this.#id = this.#dataChannel.getId();\n    this.#label = this.#dataChannel.getLabel();\n    this.#protocol = this.#dataChannel.getProtocol();\n\n    // forward dataChannel events\n    this.#dataChannel.onOpen(() => {\n      this.#readyState = 'open';\n      this.dispatchEvent(new Event('open', {}));\n    });\n\n    this.#dataChannel.onClosed(() => {\n      if (this.#readyState === 'closed') return;\n\n      if (!this.#closeRequested) {\n        // if close was not requested, we emit 'closing' before 'close' to match the spec behavior\n        this.#readyState = 'closing';\n        this.dispatchEvent(new Event('closing'));\n      }\n\n      setImmediate(() => {\n        if (this.#readyState !== 'closed') {\n          this.#readyState = 'closed';\n          this.dispatchEvent(new Event('close'));\n        }\n      });\n    });\n\n    this.#dataChannel.onError((msg) => {\n      this.dispatchEvent(\n        new RTCErrorEvent('error', {\n          error: new RTCError(\n            {\n              errorDetail: 'data-channel-failure',\n            },\n            msg,\n          ),\n        }),\n      );\n    });\n\n    this.#dataChannel.onBufferedAmountLow(() => {\n      this.dispatchEvent(new Event('bufferedamountlow'));\n    });\n\n    this.#dataChannel.onMessage((data) => {\n      if (ArrayBuffer.isView(data)) {\n        data =\n          this.binaryType === 'arraybuffer'\n            ? (data.buffer as ArrayBuffer)\n            : Buffer.from(data.buffer);\n      }\n\n      this.dispatchEvent(new MessageEvent('message', { data }));\n    });\n\n    // forward events to properties\n    this.addEventListener('open', (e) => this.onopen?.(e));\n    this.addEventListener('message', (e) => this.onmessage?.(e as MessageEvent));\n    this.addEventListener('error', (e) => this.onerror?.(e as RTCErrorEvent));\n    this.addEventListener('close', (e) => this.onclose?.(e));\n    this.addEventListener('closing', (e) => this.onclosing?.(e));\n    this.addEventListener('bufferedamountlow', (e) => this.onbufferedamountlow?.(e));\n  }\n\n  set binaryType(type) {\n    if (type !== 'blob' && type !== 'arraybuffer') {\n      throw new DOMException(\n        \"Failed to set the 'binaryType' property on 'RTCDataChannel': Unknown binary type : \" +\n          type,\n        'TypeMismatchError',\n      );\n    }\n    this.#binaryType = type;\n  }\n\n  get binaryType(): BinaryType {\n    return this.#binaryType;\n  }\n\n  get bufferedAmount(): number {\n    return this.#dataChannel.bufferedAmount();\n  }\n\n  get bufferedAmountLowThreshold(): number {\n    return this.#bufferedAmountLowThreshold;\n  }\n\n  set bufferedAmountLowThreshold(value) {\n    const number = Number(value) || 0;\n    this.#bufferedAmountLowThreshold = number;\n    this.#dataChannel.setBufferedAmountLowThreshold(number);\n  }\n\n  get id(): number | null {\n    return this.#id;\n  }\n\n  get label(): string {\n    return this.#label;\n  }\n\n  get maxPacketLifeTime(): number | null {\n    return this.#maxPacketLifeTime;\n  }\n\n  get maxRetransmits(): number | null {\n    return this.#maxRetransmits;\n  }\n\n  get negotiated(): boolean {\n    return this.#negotiated;\n  }\n\n  get ordered(): boolean {\n    return this.#ordered;\n  }\n\n  get protocol(): string {\n    return this.#protocol;\n  }\n\n  get readyState(): globalThis.RTCDataChannelState {\n    return this.#readyState;\n  }\n\n  send(data: string | Blob | ArrayBuffer | ArrayBufferView): void {\n    if (this.#readyState !== 'open') {\n      if (process.env.DATACHANNEL_SEND_DEBUG === 'true') {\n        console.error(\n          new exceptions.InvalidStateError(\n            \"Failed to execute 'send' on 'RTCDataChannel': RTCDataChannel.readyState is not 'open'\",\n          ),\n        );\n      }\n      return;\n    }\n\n    // Needs network error, type error implemented\n    try {\n      if (typeof data === 'string') {\n        this.#dataChannel.sendMessage(data);\n      } else if (data instanceof Blob) {\n        data.arrayBuffer().then((ab) => {\n          if (process?.versions?.bun) {\n            this.#dataChannel.sendMessageBinary(Buffer.from(ab));\n          } else {\n            this.#dataChannel.sendMessageBinary(new Uint8Array(ab));\n          }\n        });\n      } else if (data instanceof Uint8Array) {\n        this.#dataChannel.sendMessageBinary(data);\n      } else {\n        if (process?.versions?.bun) {\n          this.#dataChannel.sendMessageBinary(Buffer.from(data as ArrayBuffer));\n        } else {\n          this.#dataChannel.sendMessageBinary(new Uint8Array(data as ArrayBuffer));\n        }\n      }\n    } catch (error) {\n      //If error contains \"DataChannel is closed\" throw InvalidStateError\n      if (error instanceof Error && error?.message?.includes('DataChannel is closed')) {\n        // @ts-expect-error i-hate-ts\n        if (this.#readyState !== 'closed') {\n          this.#readyState = 'closed';\n          this.dispatchEvent(new Event('close'));\n        }\n        if (process.env.DATACHANNEL_SEND_DEBUG === 'true') {\n          console.error(\n            new exceptions.InvalidStateError(\n              \"Failed to execute 'send' on 'RTCDataChannel': RTCDataChannel is not 'open'\",\n            ),\n          );\n        }\n      } else {\n        // Otherwise re-throw the error\n        if (process.env.DATACHANNEL_SEND_DEBUG === 'true') {\n          console.error(error);\n        }\n      }\n    }\n  }\n\n  close(): void {\n    if (this.#readyState === 'closing' || this.#readyState === 'closed') return;\n\n    this.#closeRequested = true;\n    this.#readyState = 'closing';\n\n    setImmediate(() => {\n      this.#dataChannel.close();\n    });\n  }\n\n  _forceCloseAbruptly(): void {\n    if (this.#readyState === 'closing' || this.#readyState === 'closed') return;\n    this.#readyState = 'closed';\n  }\n}\n"],"names":["RTCErrorEvent","exceptions.InvalidStateError"],"mappings":"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"}