node-datachannel
Version:
WebRTC For Node.js and Electron. libdatachannel node bindings.
1 lines • 13.3 kB
Source Map (JSON)
{"version":3,"file":"RTCDataChannel.mjs","sources":["../../../src/polyfill/RTCDataChannel.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as exceptions from './Exception';\nimport { DataChannel } from '../lib/index';\n\nexport default class RTCDataChannel extends EventTarget implements globalThis.RTCDataChannel {\n #dataChannel: DataChannel;\n #readyState: RTCDataChannelState;\n #bufferedAmountLowThreshold: number;\n #binaryType: BinaryType;\n #maxPacketLifeTime: number | null;\n #maxRetransmits: number | null;\n #negotiated: boolean;\n #ordered: boolean;\n\n #closeRequested = false;\n\n // events\n onbufferedamountlow: ((this: RTCDataChannel, ev: Event) => any) | null;\n onclose: ((this: RTCDataChannel, ev: Event) => any) | null;\n onclosing: ((this: RTCDataChannel, ev: Event) => any) | null;\n onerror: ((this: RTCDataChannel, ev: Event) => any) | null;\n onmessage: ((this: RTCDataChannel, ev: MessageEvent) => any) | null;\n onopen: ((this: RTCDataChannel, ev: Event) => any) | 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\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 // Simulate closing event\n if (!this.#closeRequested) {\n this.#readyState = 'closing';\n this.dispatchEvent(new Event('closing'));\n }\n\n setImmediate(() => {\n this.#readyState = 'closed';\n this.dispatchEvent(new Event('close'));\n });\n });\n\n this.#dataChannel.onError((msg) => {\n this.dispatchEvent(\n new globalThis.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 if (this.binaryType == 'arraybuffer')\n data = data.buffer;\n else\n data = Buffer.from(data.buffer);\n }\n\n this.dispatchEvent(new MessageEvent('message', { data }));\n });\n\n // forward events to properties\n this.addEventListener('message', (e) => {\n if (this.onmessage) this.onmessage(e as MessageEvent);\n });\n this.addEventListener('bufferedamountlow', (e) => {\n if (this.onbufferedamountlow) this.onbufferedamountlow(e);\n });\n this.addEventListener('error', (e) => {\n if (this.onerror) this.onerror(e);\n });\n this.addEventListener('close', (e) => {\n if (this.onclose) this.onclose(e);\n });\n this.addEventListener('closing', (e) => {\n if (this.onclosing) this.onclosing(e);\n });\n this.addEventListener('open', (e) => {\n if (this.onopen) this.onopen(e);\n });\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 : \" + 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.#dataChannel.getId();\n }\n\n get label(): string {\n return this.#dataChannel.getLabel();\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.#dataChannel.getProtocol();\n }\n\n get readyState(): globalThis.RTCDataChannelState {\n return this.#readyState;\n }\n\n send(data): void {\n if (this.#readyState !== 'open') {\n throw new exceptions.InvalidStateError(\n \"Failed to execute 'send' on 'RTCDataChannel': RTCDataChannel.readyState is not 'open'\",\n );\n }\n\n // Needs network error, type error implemented\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 {\n if (process?.versions?.bun) {\n this.#dataChannel.sendMessageBinary(Buffer.from(data));\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(data));\n }\n }\n }\n\n close(): void {\n this.#closeRequested = true;\n this.#dataChannel.close();\n }\n}\n"],"names":["exceptions.InvalidStateError"],"mappings":"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"}