node-datachannel 0.22.0 → 0.23.0
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/CMakeLists.txt +6 -1
- package/README.md +2 -2
- package/dist/cjs/lib/datachannel-stream.cjs.map +1 -1
- package/dist/cjs/lib/node-datachannel.cjs +3 -0
- package/dist/cjs/lib/node-datachannel.cjs.map +1 -1
- package/dist/cjs/polyfill/RTCDataChannel.cjs +0 -1
- package/dist/cjs/polyfill/RTCDataChannel.cjs.map +1 -1
- package/dist/cjs/polyfill/RTCIceCandidate.cjs +0 -2
- package/dist/cjs/polyfill/RTCIceCandidate.cjs.map +1 -1
- package/dist/cjs/polyfill/RTCPeerConnection.cjs +0 -1
- package/dist/cjs/polyfill/RTCPeerConnection.cjs.map +1 -1
- package/dist/esm/lib/datachannel-stream.mjs.map +1 -1
- package/dist/esm/lib/node-datachannel.mjs +3 -0
- package/dist/esm/lib/node-datachannel.mjs.map +1 -1
- package/dist/esm/polyfill/RTCDataChannel.mjs +0 -1
- package/dist/esm/polyfill/RTCDataChannel.mjs.map +1 -1
- package/dist/esm/polyfill/RTCIceCandidate.mjs +0 -2
- package/dist/esm/polyfill/RTCIceCandidate.mjs.map +1 -1
- package/dist/esm/polyfill/RTCPeerConnection.mjs +0 -1
- package/dist/esm/polyfill/RTCPeerConnection.mjs.map +1 -1
- package/package.json +7 -8
- package/src/cpp/data-channel-wrapper.cpp +7 -3
- package/src/cpp/media-audio-wrapper.cpp +7 -3
- package/src/cpp/media-rtcpreceivingsession-wrapper.cpp +7 -3
- package/src/cpp/media-track-wrapper.cpp +7 -3
- package/src/cpp/media-video-wrapper.cpp +7 -3
- package/src/cpp/peer-connection-wrapper.cpp +7 -3
- package/src/cpp/web-socket-server-wrapper.cpp +7 -3
- package/src/cpp/web-socket-wrapper.cpp +7 -3
- package/src/lib/datachannel-stream.ts +0 -1
- package/src/lib/node-datachannel.ts +5 -0
- package/src/polyfill/RTCDataChannel.ts +0 -1
- package/src/polyfill/RTCIceCandidate.ts +0 -1
- package/src/polyfill/RTCPeerConnection.ts +0 -1
package/CMakeLists.txt
CHANGED
|
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.15)
|
|
|
2
2
|
cmake_policy(SET CMP0091 NEW)
|
|
3
3
|
cmake_policy(SET CMP0042 NEW)
|
|
4
4
|
|
|
5
|
-
project(node_datachannel VERSION 0.
|
|
5
|
+
project(node_datachannel VERSION 0.23.0)
|
|
6
6
|
|
|
7
7
|
# -Dnapi_build_version=8
|
|
8
8
|
add_definitions(-DNAPI_VERSION=8)
|
|
@@ -87,3 +87,8 @@ if(WIN32)
|
|
|
87
87
|
endif()
|
|
88
88
|
|
|
89
89
|
target_link_libraries(${PROJECT_NAME} PRIVATE ${LINK_LIBRARIES})
|
|
90
|
+
|
|
91
|
+
if(MSVC AND CMAKE_JS_NODELIB_DEF AND CMAKE_JS_NODELIB_TARGET)
|
|
92
|
+
# Generate node.lib
|
|
93
|
+
execute_process(COMMAND ${CMAKE_AR} /def:${CMAKE_JS_NODELIB_DEF} /out:${CMAKE_JS_NODELIB_TARGET} ${CMAKE_STATIC_LINKER_FLAGS})
|
|
94
|
+
endif()
|
package/README.md
CHANGED
|
@@ -18,11 +18,11 @@ npm install node-datachannel
|
|
|
18
18
|
|
|
19
19
|
## Supported Platforms
|
|
20
20
|
|
|
21
|
-
`node-datachannel` targets N-API version 8 and supports Node.js
|
|
21
|
+
`node-datachannel` targets N-API version 8 and supports Node.js v18.20 and above. It is tested on Linux, Windows and MacOS. For N-API compatibility please check [here](https://nodejs.org/api/n-api.html#n_api_n_api_version_matrix).
|
|
22
22
|
|
|
23
23
|
| | Linux [x64,armv7,arm64] (1) | Windows [x86,x64] | Mac [M1,x64] |
|
|
24
24
|
| ------------------------- | :-------------------------: | :---------------: | :----------: |
|
|
25
|
-
| N-API v8 (>= Node.js
|
|
25
|
+
| N-API v8 (>= Node.js v18) | + | + | + |
|
|
26
26
|
|
|
27
27
|
**(1)** For Linux musl + libc
|
|
28
28
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datachannel-stream.cjs","sources":["../../../src/lib/datachannel-stream.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as stream from 'stream';\n
|
|
1
|
+
{"version":3,"file":"datachannel-stream.cjs","sources":["../../../src/lib/datachannel-stream.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as stream from 'stream';\n\n/**\n * Turns a node-datachannel DataChannel into a real Node.js stream, complete with buffering,\n * backpressure (up to a point - if the buffer fills up, messages are dropped), and\n * support for piping data elsewhere.\n *\n * Read & written data may be either UTF-8 strings or Buffers - this difference exists at\n * the protocol level, and is preserved here throughout.\n */\nexport default class DataChannelStream extends stream.Duplex {\n private _rawChannel: any;\n private _readActive: boolean;\n\n\n constructor(rawChannel: any, streamOptions?: Omit<stream.DuplexOptions, 'objectMode'>) {\n super({\n allowHalfOpen: false, // Default to autoclose on end().\n ...streamOptions,\n objectMode: true, // Preserve the string/buffer distinction (WebRTC treats them differently)\n });\n\n this._rawChannel = rawChannel;\n this._readActive = true;\n\n rawChannel.onMessage((msg: any) => {\n if (!this._readActive) return; // If the buffer is full, drop messages.\n\n // If the push is rejected, we pause reading until the next call to _read().\n this._readActive = this.push(msg);\n });\n\n // When the DataChannel closes, the readable & writable ends close\n rawChannel.onClosed(() => {\n this.push(null);\n this.destroy();\n });\n\n rawChannel.onError((errMsg: string) => {\n this.destroy(new Error(`DataChannel error: ${errMsg}`));\n });\n\n // Buffer all writes until the DataChannel opens\n if (!rawChannel.isOpen()) {\n this.cork();\n rawChannel.onOpen(() => this.uncork());\n }\n }\n\n _read(): void {\n // Stop dropping messages, if the buffer filling up meant we were doing so before.\n this._readActive = true;\n }\n\n _write(chunk, _encoding, callback): void {\n let sentOk;\n\n try {\n if (Buffer.isBuffer(chunk)) {\n sentOk = this._rawChannel.sendMessageBinary(chunk);\n } else if (typeof chunk === 'string') {\n sentOk = this._rawChannel.sendMessage(chunk);\n } else {\n const typeName = chunk.constructor.name || typeof chunk;\n throw new Error(`Cannot write ${typeName} to DataChannel stream`);\n }\n } catch (err) {\n return callback(err);\n }\n\n if (sentOk) {\n callback(null);\n } else {\n callback(new Error('Failed to write to DataChannel'));\n }\n }\n\n _final(callback): void {\n if (!this.allowHalfOpen) this.destroy();\n callback(null);\n }\n\n _destroy(maybeErr, callback): void {\n // When the stream is destroyed, we close the DataChannel.\n this._rawChannel.close();\n callback(maybeErr);\n }\n\n get label(): string {\n return this._rawChannel.getLabel();\n }\n\n get id(): number {\n return this._rawChannel.getId();\n }\n\n get protocol(): string {\n return this._rawChannel.getProtocol();\n }\n}\n"],"names":["stream"],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ let nodeDataChannel;
|
|
|
6
6
|
try {
|
|
7
7
|
nodeDataChannel = require("../../../build/Release/node_datachannel.node");
|
|
8
8
|
} catch (e) {
|
|
9
|
+
if (e.code !== "MODULE_NOT_FOUND") {
|
|
10
|
+
throw e;
|
|
11
|
+
}
|
|
9
12
|
nodeDataChannel = require("../../build/Release/node_datachannel.node");
|
|
10
13
|
}
|
|
11
14
|
var nodeDataChannel$1 = nodeDataChannel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-datachannel.cjs","sources":["../../../src/lib/node-datachannel.ts"],"sourcesContent":["let nodeDataChannel;\n\ntry {\n // from dist\n nodeDataChannel = require('../../../build/Release/node_datachannel.node');\n}\ncatch (e) {\n // from src\n nodeDataChannel = require('../../build/Release/node_datachannel.node');\n}\n\nexport default nodeDataChannel;\n\n"],"names":[],"mappings":";;;;AAAA,IAAI,eAAA,CAAA;AAEJ,IAAI;AAEA,EAAA,eAAA,GAAkB,QAAQ,8CAA8C,CAAA,CAAA;AAC5E,CAAA,CAAA,OACO,CAAG,EAAA;AAEN,EAAA,eAAA,GAAkB,QAAQ,2CAA2C,CAAA,CAAA;AACzE,CAAA;AAEA,wBAAe,eAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"node-datachannel.cjs","sources":["../../../src/lib/node-datachannel.ts"],"sourcesContent":["let nodeDataChannel;\n\ntry {\n // from dist\n nodeDataChannel = require('../../../build/Release/node_datachannel.node');\n}\ncatch (e) {\n // If this is not a module not found error, rethrow it\n if (e.code !== 'MODULE_NOT_FOUND') {\n throw e;\n }\n\n // from src\n nodeDataChannel = require('../../build/Release/node_datachannel.node');\n}\n\nexport default nodeDataChannel;\n\n"],"names":[],"mappings":";;;;AAAA,IAAI,eAAA,CAAA;AAEJ,IAAI;AAEA,EAAA,eAAA,GAAkB,QAAQ,8CAA8C,CAAA,CAAA;AAC5E,CAAA,CAAA,OACO,CAAG,EAAA;AAEN,EAAI,IAAA,CAAA,CAAE,SAAS,kBAAoB,EAAA;AAC/B,IAAM,MAAA,CAAA,CAAA;AAAA,GACV;AAGA,EAAA,eAAA,GAAkB,QAAQ,2CAA2C,CAAA,CAAA;AACzE,CAAA;AAEA,wBAAe,eAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTCDataChannel.cjs","sources":["../../../src/polyfill/RTCDataChannel.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport 'node-domexception';\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 this.#dataChannel.sendMessageBinary(new Uint8Array(ab));\n });\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(data));\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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"}
|
|
1
|
+
{"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';\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 this.#dataChannel.sendMessageBinary(new Uint8Array(ab));\n });\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(data));\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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTCIceCandidate.cjs","sources":["../../../src/polyfill/RTCIceCandidate.ts"],"sourcesContent":["// https://developer.mozilla.org/docs/Web/API/RTCIceCandidate\n//\n// Example: candidate:123456 1 UDP 123456 192.168.1.1 12345 typ host raddr=10.0.0.1 rport=54321 generation 0\n\
|
|
1
|
+
{"version":3,"file":"RTCIceCandidate.cjs","sources":["../../../src/polyfill/RTCIceCandidate.ts"],"sourcesContent":["// https://developer.mozilla.org/docs/Web/API/RTCIceCandidate\n//\n// Example: candidate:123456 1 UDP 123456 192.168.1.1 12345 typ host raddr=10.0.0.1 rport=54321 generation 0\n\n\nexport default class RTCIceCandidate implements globalThis.RTCIceCandidate {\n #address: string | null;\n #candidate: string;\n #component: globalThis.RTCIceComponent | null;\n #foundation: string | null;\n #port: number | null;\n #priority: number | null;\n #protocol: globalThis.RTCIceProtocol | null;\n #relatedAddress: string | null;\n #relatedPort: number | null;\n #sdpMLineIndex: number | null;\n #sdpMid: string | null;\n #tcpType: globalThis.RTCIceTcpCandidateType | null;\n #type: globalThis.RTCIceCandidateType | null;\n #usernameFragment: string | null;\n\n constructor({ candidate, sdpMLineIndex, sdpMid, usernameFragment }: globalThis.RTCIceCandidateInit) {\n if (sdpMLineIndex == null && sdpMid == null)\n throw new TypeError('At least one of sdpMLineIndex or sdpMid must be specified');\n\n this.#candidate = candidate === null ? 'null' : candidate ?? '';\n this.#sdpMLineIndex = sdpMLineIndex ?? null;\n this.#sdpMid = sdpMid ?? null;\n this.#usernameFragment = usernameFragment ?? null;\n\n if (candidate) {\n const fields = candidate.split(' ');\n this.#foundation = fields[0].replace('candidate:', ''); // remove text candidate:\n this.#component = fields[1] == '1' ? 'rtp' : 'rtcp';\n this.#protocol = fields[2] as globalThis.RTCIceProtocol;\n this.#priority = parseInt(fields[3], 10);\n this.#address = fields[4];\n this.#port = parseInt(fields[5], 10);\n this.#type = fields[7] as globalThis.RTCIceCandidateType;\n this.#tcpType = null;\n this.#relatedAddress = null;\n this.#relatedPort = null;\n\n // Parse the candidate string to extract relatedPort and relatedAddress\n for (let i = 8; i < fields.length; i++) {\n const field = fields[i];\n if (field === 'raddr') {\n this.#relatedAddress = fields[i + 1];\n } else if (field === 'rport') {\n this.#relatedPort = parseInt(fields[i + 1], 10);\n }\n\n if (this.#protocol === 'tcp' && field === 'tcptype') {\n this.#tcpType = fields[i + 1] as globalThis.RTCIceTcpCandidateType;\n }\n }\n }\n }\n\n get address(): string | null {\n return this.#address || null;\n }\n\n get candidate(): string {\n return this.#candidate;\n }\n\n get component(): globalThis.RTCIceComponent | null {\n return this.#component;\n }\n\n get foundation(): string | null {\n return this.#foundation || null;\n }\n\n get port(): number | null {\n return this.#port || null;\n }\n\n get priority(): number | null {\n return this.#priority || null;\n }\n\n get protocol(): globalThis.RTCIceProtocol | null {\n return this.#protocol || null;\n }\n\n get relatedAddress(): string | null {\n return this.#relatedAddress;\n }\n\n get relatedPort(): number | null {\n return this.#relatedPort || null;\n }\n\n get sdpMLineIndex(): number | null {\n return this.#sdpMLineIndex;\n }\n\n get sdpMid(): string | null {\n return this.#sdpMid;\n }\n\n get tcpType(): globalThis.RTCIceTcpCandidateType | null {\n return this.#tcpType;\n }\n\n get type(): globalThis.RTCIceCandidateType | null {\n return this.#type || null;\n }\n\n get usernameFragment(): string | null {\n return this.#usernameFragment;\n }\n\n toJSON(): globalThis.RTCIceCandidateInit {\n return {\n candidate: this.#candidate,\n sdpMLineIndex: this.#sdpMLineIndex,\n sdpMid: this.#sdpMid,\n usernameFragment: this.#usernameFragment,\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTCPeerConnection.cjs","sources":["../../../src/polyfill/RTCPeerConnection.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport 'node-domexception';\nimport { 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}\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: any;\n #localAnswer: any;\n #dataChannels: Set<RTCDataChannel>;\n #dataChannelsClosed = 0;\n #config: RTCConfiguration;\n #canTrickleIceCandidates: boolean | null;\n #sctp: RTCSctpTransport;\n\n #localCandidates: RTCIceCandidate[] = [];\n #remoteCandidates: RTCIceCandidate[] = [];\n\n // events\n onconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ondatachannel: ((this: RTCPeerConnection, ev: RTCDataChannelEvent) => any) | null;\n onicecandidate: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceEvent) => any) | null;\n onicecandidateerror: ((this: RTCPeerConnection, ev: Event) => any) | null;\n oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onicegatheringstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onnegotiationneeded: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onsignalingstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ontrack: ((this: RTCPeerConnection, ev: globalThis.RTCTrackEvent) => any) | null;\n\n private _checkConfiguration(config: 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) throw new TypeError('IceServers cannot be undefined');\n if (Object.keys(config.iceServers[i]).length === 0) 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(\n (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 )\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: RTCConfiguration): void {\n this._checkConfiguration(config);\n this.#config = config;\n }\n\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 = new PeerConnection(peerIdentity,\n {\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 );\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({ sdp, type });\n }\n\n if (type === 'answer') {\n this.#localAnswer.resolve({ 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 if (this.onconnectionstatechange) this.onconnectionstatechange(e);\n });\n this.addEventListener('signalingstatechange', (e) => {\n if (this.onsignalingstatechange) this.onsignalingstatechange(e);\n });\n this.addEventListener('iceconnectionstatechange', (e) => {\n if (this.oniceconnectionstatechange) this.oniceconnectionstatechange(e);\n });\n this.addEventListener('icegatheringstatechange', (e) => {\n if (this.onicegatheringstatechange) this.onicegatheringstatechange(e);\n });\n this.addEventListener('datachannel', (e) => {\n if (this.ondatachannel) this.ondatachannel(e as RTCDataChannelEvent);\n });\n this.addEventListener('icecandidate', (e) => {\n if (this.onicecandidate) this.onicecandidate(e as RTCPeerConnectionIceEvent);\n });\n\n this.#sctp = new RTCSctpTransport({\n pc: this,\n extraFunctions: {\n maxDataChannelId: (): number => {\n return this.#peerConnection.maxDataChannelId();\n },\n maxMessageSize: (): number => {\n return this.#peerConnection.maxMessageSize();\n },\n localCandidates: (): RTCIceCandidate[] => {\n return this.#localCandidates;\n },\n remoteCandidates: (): RTCIceCandidate[] => {\n return this.#remoteCandidates;\n },\n selectedCandidatePair: (): { local: SelectedCandidateInfo; remote: SelectedCandidateInfo } | null => {\n return this.#peerConnection.getSelectedCandidatePair();\n },\n },\n });\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(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get currentRemoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get localDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get pendingLocalDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get pendingRemoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get remoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get sctp(): 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 | RTCIceCandidate): 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({ candidate: candidate.candidate, sdpMid: candidate.sdpMid || '0' }),\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')) 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 // close all channels before shutting down\n this.#dataChannels.forEach((channel) => {\n channel.close();\n this.#dataChannelsClosed++;\n });\n\n this.#peerConnection.close();\n }\n\n createAnswer(): Promise<globalThis.RTCSessionDescriptionInit | any> {\n return this.#localAnswer;\n }\n\n\n createDataChannel(label, opts = {}): RTCDataChannel {\n const channel = this.#peerConnection.createDataChannel(label, opts);\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 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> {\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): string {\n return Math.random()\n .toString(36)\n .substring(2, 2 + length);\n}\n"],"names":["PeerConnection","exceptions.NotFoundError","exceptions.SyntaxError","RTCDataChannel","RTCDataChannelEvent","RTCIceCandidate","RTCPeerConnectionIceEvent","RTCSctpTransport","exceptions.InvalidAccessError","RTCSessionDescription","exceptions.OperationError","exceptions.InvalidStateError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RTCPeerConnection.cjs","sources":["../../../src/polyfill/RTCPeerConnection.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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}\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: any;\n #localAnswer: any;\n #dataChannels: Set<RTCDataChannel>;\n #dataChannelsClosed = 0;\n #config: RTCConfiguration;\n #canTrickleIceCandidates: boolean | null;\n #sctp: RTCSctpTransport;\n\n #localCandidates: RTCIceCandidate[] = [];\n #remoteCandidates: RTCIceCandidate[] = [];\n\n // events\n onconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ondatachannel: ((this: RTCPeerConnection, ev: RTCDataChannelEvent) => any) | null;\n onicecandidate: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceEvent) => any) | null;\n onicecandidateerror: ((this: RTCPeerConnection, ev: Event) => any) | null;\n oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onicegatheringstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onnegotiationneeded: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onsignalingstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ontrack: ((this: RTCPeerConnection, ev: globalThis.RTCTrackEvent) => any) | null;\n\n private _checkConfiguration(config: 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) throw new TypeError('IceServers cannot be undefined');\n if (Object.keys(config.iceServers[i]).length === 0) 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(\n (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 )\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: RTCConfiguration): void {\n this._checkConfiguration(config);\n this.#config = config;\n }\n\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 = new PeerConnection(peerIdentity,\n {\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 );\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({ sdp, type });\n }\n\n if (type === 'answer') {\n this.#localAnswer.resolve({ 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 if (this.onconnectionstatechange) this.onconnectionstatechange(e);\n });\n this.addEventListener('signalingstatechange', (e) => {\n if (this.onsignalingstatechange) this.onsignalingstatechange(e);\n });\n this.addEventListener('iceconnectionstatechange', (e) => {\n if (this.oniceconnectionstatechange) this.oniceconnectionstatechange(e);\n });\n this.addEventListener('icegatheringstatechange', (e) => {\n if (this.onicegatheringstatechange) this.onicegatheringstatechange(e);\n });\n this.addEventListener('datachannel', (e) => {\n if (this.ondatachannel) this.ondatachannel(e as RTCDataChannelEvent);\n });\n this.addEventListener('icecandidate', (e) => {\n if (this.onicecandidate) this.onicecandidate(e as RTCPeerConnectionIceEvent);\n });\n\n this.#sctp = new RTCSctpTransport({\n pc: this,\n extraFunctions: {\n maxDataChannelId: (): number => {\n return this.#peerConnection.maxDataChannelId();\n },\n maxMessageSize: (): number => {\n return this.#peerConnection.maxMessageSize();\n },\n localCandidates: (): RTCIceCandidate[] => {\n return this.#localCandidates;\n },\n remoteCandidates: (): RTCIceCandidate[] => {\n return this.#remoteCandidates;\n },\n selectedCandidatePair: (): { local: SelectedCandidateInfo; remote: SelectedCandidateInfo } | null => {\n return this.#peerConnection.getSelectedCandidatePair();\n },\n },\n });\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(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get currentRemoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get localDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get pendingLocalDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get pendingRemoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get remoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get sctp(): 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 | RTCIceCandidate): 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({ candidate: candidate.candidate, sdpMid: candidate.sdpMid || '0' }),\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')) 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 // close all channels before shutting down\n this.#dataChannels.forEach((channel) => {\n channel.close();\n this.#dataChannelsClosed++;\n });\n\n this.#peerConnection.close();\n }\n\n createAnswer(): Promise<globalThis.RTCSessionDescriptionInit | any> {\n return this.#localAnswer;\n }\n\n\n createDataChannel(label, opts = {}): RTCDataChannel {\n const channel = this.#peerConnection.createDataChannel(label, opts);\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 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> {\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): string {\n return Math.random()\n .toString(36)\n .substring(2, 2 + length);\n}\n"],"names":["PeerConnection","exceptions.NotFoundError","exceptions.SyntaxError","RTCDataChannel","RTCDataChannelEvent","RTCIceCandidate","RTCPeerConnectionIceEvent","RTCSctpTransport","exceptions.InvalidAccessError","RTCSessionDescription","exceptions.OperationError","exceptions.InvalidStateError"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datachannel-stream.mjs","sources":["../../../src/lib/datachannel-stream.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as stream from 'stream';\n
|
|
1
|
+
{"version":3,"file":"datachannel-stream.mjs","sources":["../../../src/lib/datachannel-stream.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as stream from 'stream';\n\n/**\n * Turns a node-datachannel DataChannel into a real Node.js stream, complete with buffering,\n * backpressure (up to a point - if the buffer fills up, messages are dropped), and\n * support for piping data elsewhere.\n *\n * Read & written data may be either UTF-8 strings or Buffers - this difference exists at\n * the protocol level, and is preserved here throughout.\n */\nexport default class DataChannelStream extends stream.Duplex {\n private _rawChannel: any;\n private _readActive: boolean;\n\n\n constructor(rawChannel: any, streamOptions?: Omit<stream.DuplexOptions, 'objectMode'>) {\n super({\n allowHalfOpen: false, // Default to autoclose on end().\n ...streamOptions,\n objectMode: true, // Preserve the string/buffer distinction (WebRTC treats them differently)\n });\n\n this._rawChannel = rawChannel;\n this._readActive = true;\n\n rawChannel.onMessage((msg: any) => {\n if (!this._readActive) return; // If the buffer is full, drop messages.\n\n // If the push is rejected, we pause reading until the next call to _read().\n this._readActive = this.push(msg);\n });\n\n // When the DataChannel closes, the readable & writable ends close\n rawChannel.onClosed(() => {\n this.push(null);\n this.destroy();\n });\n\n rawChannel.onError((errMsg: string) => {\n this.destroy(new Error(`DataChannel error: ${errMsg}`));\n });\n\n // Buffer all writes until the DataChannel opens\n if (!rawChannel.isOpen()) {\n this.cork();\n rawChannel.onOpen(() => this.uncork());\n }\n }\n\n _read(): void {\n // Stop dropping messages, if the buffer filling up meant we were doing so before.\n this._readActive = true;\n }\n\n _write(chunk, _encoding, callback): void {\n let sentOk;\n\n try {\n if (Buffer.isBuffer(chunk)) {\n sentOk = this._rawChannel.sendMessageBinary(chunk);\n } else if (typeof chunk === 'string') {\n sentOk = this._rawChannel.sendMessage(chunk);\n } else {\n const typeName = chunk.constructor.name || typeof chunk;\n throw new Error(`Cannot write ${typeName} to DataChannel stream`);\n }\n } catch (err) {\n return callback(err);\n }\n\n if (sentOk) {\n callback(null);\n } else {\n callback(new Error('Failed to write to DataChannel'));\n }\n }\n\n _final(callback): void {\n if (!this.allowHalfOpen) this.destroy();\n callback(null);\n }\n\n _destroy(maybeErr, callback): void {\n // When the stream is destroyed, we close the DataChannel.\n this._rawChannel.close();\n callback(maybeErr);\n }\n\n get label(): string {\n return this._rawChannel.getLabel();\n }\n\n get id(): number {\n return this._rawChannel.getId();\n }\n\n get protocol(): string {\n return this._rawChannel.getProtocol();\n }\n}\n"],"names":[],"mappings":";;;;;AAWqB,MAAA,iBAAA,SAA0B,OAAO,MAAO,CAAA;AAAA,EAKzD,WAAA,CAAY,YAAiB,aAA0D,EAAA;AACnF,IAAM,KAAA,CAAA;AAAA,MACF,aAAe,EAAA,KAAA;AAAA;AAAA,MACf,GAAG,aAAA;AAAA,MACH,UAAY,EAAA,IAAA;AAAA;AAAA,KACf,CAAA,CAAA;AATL,IAAQ,aAAA,CAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AACR,IAAQ,aAAA,CAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AAUJ,IAAA,IAAA,CAAK,WAAc,GAAA,UAAA,CAAA;AACnB,IAAA,IAAA,CAAK,WAAc,GAAA,IAAA,CAAA;AAEnB,IAAW,UAAA,CAAA,SAAA,CAAU,CAAC,GAAa,KAAA;AAC/B,MAAI,IAAA,CAAC,KAAK,WAAa,EAAA,OAAA;AAGvB,MAAK,IAAA,CAAA,WAAA,GAAc,IAAK,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAAA,KACnC,CAAA,CAAA;AAGD,IAAA,UAAA,CAAW,SAAS,MAAM;AACtB,MAAA,IAAA,CAAK,KAAK,IAAI,CAAA,CAAA;AACd,MAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AAAA,KAChB,CAAA,CAAA;AAED,IAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,MAAmB,KAAA;AACnC,MAAA,IAAA,CAAK,QAAQ,IAAI,KAAA,CAAM,CAAsB,mBAAA,EAAA,MAAM,EAAE,CAAC,CAAA,CAAA;AAAA,KACzD,CAAA,CAAA;AAGD,IAAI,IAAA,CAAC,UAAW,CAAA,MAAA,EAAU,EAAA;AACtB,MAAA,IAAA,CAAK,IAAK,EAAA,CAAA;AACV,MAAA,UAAA,CAAW,MAAO,CAAA,MAAM,IAAK,CAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,KACzC;AAAA,GACJ;AAAA,EAEA,KAAc,GAAA;AAEV,IAAA,IAAA,CAAK,WAAc,GAAA,IAAA,CAAA;AAAA,GACvB;AAAA,EAEA,MAAA,CAAO,KAAO,EAAA,SAAA,EAAW,QAAgB,EAAA;AACrC,IAAI,IAAA,MAAA,CAAA;AAEJ,IAAI,IAAA;AACA,MAAI,IAAA,MAAA,CAAO,QAAS,CAAA,KAAK,CAAG,EAAA;AACxB,QAAS,MAAA,GAAA,IAAA,CAAK,WAAY,CAAA,iBAAA,CAAkB,KAAK,CAAA,CAAA;AAAA,OACrD,MAAA,IAAW,OAAO,KAAA,KAAU,QAAU,EAAA;AAClC,QAAS,MAAA,GAAA,IAAA,CAAK,WAAY,CAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AAAA,OACxC,MAAA;AACH,QAAA,MAAM,QAAW,GAAA,KAAA,CAAM,WAAY,CAAA,IAAA,IAAQ,OAAO,KAAA,CAAA;AAClD,QAAA,MAAM,IAAI,KAAA,CAAM,CAAgB,aAAA,EAAA,QAAQ,CAAwB,sBAAA,CAAA,CAAA,CAAA;AAAA,OACpE;AAAA,aACK,GAAK,EAAA;AACV,MAAA,OAAO,SAAS,GAAG,CAAA,CAAA;AAAA,KACvB;AAEA,IAAA,IAAI,MAAQ,EAAA;AACR,MAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAAA,KACV,MAAA;AACH,MAAS,QAAA,CAAA,IAAI,KAAM,CAAA,gCAAgC,CAAC,CAAA,CAAA;AAAA,KACxD;AAAA,GACJ;AAAA,EAEA,OAAO,QAAgB,EAAA;AACnB,IAAA,IAAI,CAAC,IAAA,CAAK,aAAe,EAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AACtC,IAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAAA,GACjB;AAAA,EAEA,QAAA,CAAS,UAAU,QAAgB,EAAA;AAE/B,IAAA,IAAA,CAAK,YAAY,KAAM,EAAA,CAAA;AACvB,IAAA,QAAA,CAAS,QAAQ,CAAA,CAAA;AAAA,GACrB;AAAA,EAEA,IAAI,KAAgB,GAAA;AAChB,IAAO,OAAA,IAAA,CAAK,YAAY,QAAS,EAAA,CAAA;AAAA,GACrC;AAAA,EAEA,IAAI,EAAa,GAAA;AACb,IAAO,OAAA,IAAA,CAAK,YAAY,KAAM,EAAA,CAAA;AAAA,GAClC;AAAA,EAEA,IAAI,QAAmB,GAAA;AACnB,IAAO,OAAA,IAAA,CAAK,YAAY,WAAY,EAAA,CAAA;AAAA,GACxC;AACJ;;;;"}
|
|
@@ -10,6 +10,9 @@ let nodeDataChannel;
|
|
|
10
10
|
try {
|
|
11
11
|
nodeDataChannel = require("../../../build/Release/node_datachannel.node");
|
|
12
12
|
} catch (e) {
|
|
13
|
+
if (e.code !== "MODULE_NOT_FOUND") {
|
|
14
|
+
throw e;
|
|
15
|
+
}
|
|
13
16
|
nodeDataChannel = require("../../build/Release/node_datachannel.node");
|
|
14
17
|
}
|
|
15
18
|
var nodeDataChannel$1 = nodeDataChannel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-datachannel.mjs","sources":["../../../src/lib/node-datachannel.ts"],"sourcesContent":["let nodeDataChannel;\n\ntry {\n // from dist\n nodeDataChannel = require('../../../build/Release/node_datachannel.node');\n}\ncatch (e) {\n // from src\n nodeDataChannel = require('../../build/Release/node_datachannel.node');\n}\n\nexport default nodeDataChannel;\n\n"],"names":[],"mappings":";;;;;;;;AAAA;AAEA;AAEI;AACJ;AAGI;AACJ;AAEA;;"}
|
|
1
|
+
{"version":3,"file":"node-datachannel.mjs","sources":["../../../src/lib/node-datachannel.ts"],"sourcesContent":["let nodeDataChannel;\n\ntry {\n // from dist\n nodeDataChannel = require('../../../build/Release/node_datachannel.node');\n}\ncatch (e) {\n // If this is not a module not found error, rethrow it\n if (e.code !== 'MODULE_NOT_FOUND') {\n throw e;\n }\n\n // from src\n nodeDataChannel = require('../../build/Release/node_datachannel.node');\n}\n\nexport default nodeDataChannel;\n\n"],"names":[],"mappings":";;;;;;;;AAAA;AAEA;AAEI;AACJ;AAGI;AACI;AAAM;AAIV;AACJ;AAEA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTCDataChannel.mjs","sources":["../../../src/polyfill/RTCDataChannel.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport 'node-domexception';\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 this.#dataChannel.sendMessageBinary(new Uint8Array(ab));\n });\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(data));\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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"}
|
|
1
|
+
{"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 this.#dataChannel.sendMessageBinary(new Uint8Array(ab));\n });\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(data));\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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTCIceCandidate.mjs","sources":["../../../src/polyfill/RTCIceCandidate.ts"],"sourcesContent":["// https://developer.mozilla.org/docs/Web/API/RTCIceCandidate\n//\n// Example: candidate:123456 1 UDP 123456 192.168.1.1 12345 typ host raddr=10.0.0.1 rport=54321 generation 0\n\
|
|
1
|
+
{"version":3,"file":"RTCIceCandidate.mjs","sources":["../../../src/polyfill/RTCIceCandidate.ts"],"sourcesContent":["// https://developer.mozilla.org/docs/Web/API/RTCIceCandidate\n//\n// Example: candidate:123456 1 UDP 123456 192.168.1.1 12345 typ host raddr=10.0.0.1 rport=54321 generation 0\n\n\nexport default class RTCIceCandidate implements globalThis.RTCIceCandidate {\n #address: string | null;\n #candidate: string;\n #component: globalThis.RTCIceComponent | null;\n #foundation: string | null;\n #port: number | null;\n #priority: number | null;\n #protocol: globalThis.RTCIceProtocol | null;\n #relatedAddress: string | null;\n #relatedPort: number | null;\n #sdpMLineIndex: number | null;\n #sdpMid: string | null;\n #tcpType: globalThis.RTCIceTcpCandidateType | null;\n #type: globalThis.RTCIceCandidateType | null;\n #usernameFragment: string | null;\n\n constructor({ candidate, sdpMLineIndex, sdpMid, usernameFragment }: globalThis.RTCIceCandidateInit) {\n if (sdpMLineIndex == null && sdpMid == null)\n throw new TypeError('At least one of sdpMLineIndex or sdpMid must be specified');\n\n this.#candidate = candidate === null ? 'null' : candidate ?? '';\n this.#sdpMLineIndex = sdpMLineIndex ?? null;\n this.#sdpMid = sdpMid ?? null;\n this.#usernameFragment = usernameFragment ?? null;\n\n if (candidate) {\n const fields = candidate.split(' ');\n this.#foundation = fields[0].replace('candidate:', ''); // remove text candidate:\n this.#component = fields[1] == '1' ? 'rtp' : 'rtcp';\n this.#protocol = fields[2] as globalThis.RTCIceProtocol;\n this.#priority = parseInt(fields[3], 10);\n this.#address = fields[4];\n this.#port = parseInt(fields[5], 10);\n this.#type = fields[7] as globalThis.RTCIceCandidateType;\n this.#tcpType = null;\n this.#relatedAddress = null;\n this.#relatedPort = null;\n\n // Parse the candidate string to extract relatedPort and relatedAddress\n for (let i = 8; i < fields.length; i++) {\n const field = fields[i];\n if (field === 'raddr') {\n this.#relatedAddress = fields[i + 1];\n } else if (field === 'rport') {\n this.#relatedPort = parseInt(fields[i + 1], 10);\n }\n\n if (this.#protocol === 'tcp' && field === 'tcptype') {\n this.#tcpType = fields[i + 1] as globalThis.RTCIceTcpCandidateType;\n }\n }\n }\n }\n\n get address(): string | null {\n return this.#address || null;\n }\n\n get candidate(): string {\n return this.#candidate;\n }\n\n get component(): globalThis.RTCIceComponent | null {\n return this.#component;\n }\n\n get foundation(): string | null {\n return this.#foundation || null;\n }\n\n get port(): number | null {\n return this.#port || null;\n }\n\n get priority(): number | null {\n return this.#priority || null;\n }\n\n get protocol(): globalThis.RTCIceProtocol | null {\n return this.#protocol || null;\n }\n\n get relatedAddress(): string | null {\n return this.#relatedAddress;\n }\n\n get relatedPort(): number | null {\n return this.#relatedPort || null;\n }\n\n get sdpMLineIndex(): number | null {\n return this.#sdpMLineIndex;\n }\n\n get sdpMid(): string | null {\n return this.#sdpMid;\n }\n\n get tcpType(): globalThis.RTCIceTcpCandidateType | null {\n return this.#tcpType;\n }\n\n get type(): globalThis.RTCIceCandidateType | null {\n return this.#type || null;\n }\n\n get usernameFragment(): string | null {\n return this.#usernameFragment;\n }\n\n toJSON(): globalThis.RTCIceCandidateInit {\n return {\n candidate: this.#candidate,\n sdpMLineIndex: this.#sdpMLineIndex,\n sdpMid: this.#sdpMid,\n usernameFragment: this.#usernameFragment,\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTCPeerConnection.mjs","sources":["../../../src/polyfill/RTCPeerConnection.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport 'node-domexception';\nimport { 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}\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: any;\n #localAnswer: any;\n #dataChannels: Set<RTCDataChannel>;\n #dataChannelsClosed = 0;\n #config: RTCConfiguration;\n #canTrickleIceCandidates: boolean | null;\n #sctp: RTCSctpTransport;\n\n #localCandidates: RTCIceCandidate[] = [];\n #remoteCandidates: RTCIceCandidate[] = [];\n\n // events\n onconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ondatachannel: ((this: RTCPeerConnection, ev: RTCDataChannelEvent) => any) | null;\n onicecandidate: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceEvent) => any) | null;\n onicecandidateerror: ((this: RTCPeerConnection, ev: Event) => any) | null;\n oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onicegatheringstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onnegotiationneeded: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onsignalingstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ontrack: ((this: RTCPeerConnection, ev: globalThis.RTCTrackEvent) => any) | null;\n\n private _checkConfiguration(config: 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) throw new TypeError('IceServers cannot be undefined');\n if (Object.keys(config.iceServers[i]).length === 0) 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(\n (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 )\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: RTCConfiguration): void {\n this._checkConfiguration(config);\n this.#config = config;\n }\n\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 = new PeerConnection(peerIdentity,\n {\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 );\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({ sdp, type });\n }\n\n if (type === 'answer') {\n this.#localAnswer.resolve({ 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 if (this.onconnectionstatechange) this.onconnectionstatechange(e);\n });\n this.addEventListener('signalingstatechange', (e) => {\n if (this.onsignalingstatechange) this.onsignalingstatechange(e);\n });\n this.addEventListener('iceconnectionstatechange', (e) => {\n if (this.oniceconnectionstatechange) this.oniceconnectionstatechange(e);\n });\n this.addEventListener('icegatheringstatechange', (e) => {\n if (this.onicegatheringstatechange) this.onicegatheringstatechange(e);\n });\n this.addEventListener('datachannel', (e) => {\n if (this.ondatachannel) this.ondatachannel(e as RTCDataChannelEvent);\n });\n this.addEventListener('icecandidate', (e) => {\n if (this.onicecandidate) this.onicecandidate(e as RTCPeerConnectionIceEvent);\n });\n\n this.#sctp = new RTCSctpTransport({\n pc: this,\n extraFunctions: {\n maxDataChannelId: (): number => {\n return this.#peerConnection.maxDataChannelId();\n },\n maxMessageSize: (): number => {\n return this.#peerConnection.maxMessageSize();\n },\n localCandidates: (): RTCIceCandidate[] => {\n return this.#localCandidates;\n },\n remoteCandidates: (): RTCIceCandidate[] => {\n return this.#remoteCandidates;\n },\n selectedCandidatePair: (): { local: SelectedCandidateInfo; remote: SelectedCandidateInfo } | null => {\n return this.#peerConnection.getSelectedCandidatePair();\n },\n },\n });\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(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get currentRemoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get localDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get pendingLocalDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get pendingRemoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get remoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get sctp(): 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 | RTCIceCandidate): 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({ candidate: candidate.candidate, sdpMid: candidate.sdpMid || '0' }),\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')) 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 // close all channels before shutting down\n this.#dataChannels.forEach((channel) => {\n channel.close();\n this.#dataChannelsClosed++;\n });\n\n this.#peerConnection.close();\n }\n\n createAnswer(): Promise<globalThis.RTCSessionDescriptionInit | any> {\n return this.#localAnswer;\n }\n\n\n createDataChannel(label, opts = {}): RTCDataChannel {\n const channel = this.#peerConnection.createDataChannel(label, opts);\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 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> {\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): string {\n return Math.random()\n .toString(36)\n .substring(2, 2 + length);\n}\n"],"names":["exceptions.NotFoundError","exceptions.SyntaxError","exceptions.InvalidAccessError","exceptions.OperationError","exceptions.InvalidStateError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RTCPeerConnection.mjs","sources":["../../../src/polyfill/RTCPeerConnection.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { 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}\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: any;\n #localAnswer: any;\n #dataChannels: Set<RTCDataChannel>;\n #dataChannelsClosed = 0;\n #config: RTCConfiguration;\n #canTrickleIceCandidates: boolean | null;\n #sctp: RTCSctpTransport;\n\n #localCandidates: RTCIceCandidate[] = [];\n #remoteCandidates: RTCIceCandidate[] = [];\n\n // events\n onconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ondatachannel: ((this: RTCPeerConnection, ev: RTCDataChannelEvent) => any) | null;\n onicecandidate: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceEvent) => any) | null;\n onicecandidateerror: ((this: RTCPeerConnection, ev: Event) => any) | null;\n oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onicegatheringstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onnegotiationneeded: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onsignalingstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ontrack: ((this: RTCPeerConnection, ev: globalThis.RTCTrackEvent) => any) | null;\n\n private _checkConfiguration(config: 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) throw new TypeError('IceServers cannot be undefined');\n if (Object.keys(config.iceServers[i]).length === 0) 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(\n (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 )\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: RTCConfiguration): void {\n this._checkConfiguration(config);\n this.#config = config;\n }\n\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 = new PeerConnection(peerIdentity,\n {\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 );\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({ sdp, type });\n }\n\n if (type === 'answer') {\n this.#localAnswer.resolve({ 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 if (this.onconnectionstatechange) this.onconnectionstatechange(e);\n });\n this.addEventListener('signalingstatechange', (e) => {\n if (this.onsignalingstatechange) this.onsignalingstatechange(e);\n });\n this.addEventListener('iceconnectionstatechange', (e) => {\n if (this.oniceconnectionstatechange) this.oniceconnectionstatechange(e);\n });\n this.addEventListener('icegatheringstatechange', (e) => {\n if (this.onicegatheringstatechange) this.onicegatheringstatechange(e);\n });\n this.addEventListener('datachannel', (e) => {\n if (this.ondatachannel) this.ondatachannel(e as RTCDataChannelEvent);\n });\n this.addEventListener('icecandidate', (e) => {\n if (this.onicecandidate) this.onicecandidate(e as RTCPeerConnectionIceEvent);\n });\n\n this.#sctp = new RTCSctpTransport({\n pc: this,\n extraFunctions: {\n maxDataChannelId: (): number => {\n return this.#peerConnection.maxDataChannelId();\n },\n maxMessageSize: (): number => {\n return this.#peerConnection.maxMessageSize();\n },\n localCandidates: (): RTCIceCandidate[] => {\n return this.#localCandidates;\n },\n remoteCandidates: (): RTCIceCandidate[] => {\n return this.#remoteCandidates;\n },\n selectedCandidatePair: (): { local: SelectedCandidateInfo; remote: SelectedCandidateInfo } | null => {\n return this.#peerConnection.getSelectedCandidatePair();\n },\n },\n });\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(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get currentRemoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get localDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get pendingLocalDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.localDescription() as any);\n }\n\n get pendingRemoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get remoteDescription(): RTCSessionDescription {\n return new RTCSessionDescription(this.#peerConnection.remoteDescription() as any);\n }\n\n get sctp(): 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 | RTCIceCandidate): 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({ candidate: candidate.candidate, sdpMid: candidate.sdpMid || '0' }),\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')) 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 // close all channels before shutting down\n this.#dataChannels.forEach((channel) => {\n channel.close();\n this.#dataChannelsClosed++;\n });\n\n this.#peerConnection.close();\n }\n\n createAnswer(): Promise<globalThis.RTCSessionDescriptionInit | any> {\n return this.#localAnswer;\n }\n\n\n createDataChannel(label, opts = {}): RTCDataChannel {\n const channel = this.#peerConnection.createDataChannel(label, opts);\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 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> {\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): string {\n return Math.random()\n .toString(36)\n .substring(2, 2 + length);\n}\n"],"names":["exceptions.NotFoundError","exceptions.SyntaxError","exceptions.InvalidAccessError","exceptions.OperationError","exceptions.InvalidStateError"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-datachannel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.0",
|
|
4
4
|
"description": "WebRTC For Node.js and Electron. libdatachannel node bindings.",
|
|
5
5
|
"main": "./dist/cjs/lib/index.cjs",
|
|
6
6
|
"module": "./dist/esm/lib/index.mjs",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"engines": {
|
|
23
|
-
"node": ">=
|
|
23
|
+
"node": ">=18.20.0"
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
26
|
"install": "prebuild-install -r napi || (npm install --ignore-scripts --production=false && npm run _prebuild)",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"test": "NODE_OPTIONS=--experimental-vm-modules jest",
|
|
37
37
|
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch",
|
|
38
38
|
"test:wpt": "npm run run:wpt:server & (sleep 8 && (npm run run:wpt:test | tee test/wpt-tests/last-test-results.md) )",
|
|
39
|
-
"
|
|
40
|
-
"
|
|
39
|
+
"wpt:server": "cd test/wpt-tests/wpt && ./wpt serve",
|
|
40
|
+
"wpt:test": "ts-node test/wpt-tests/index.ts",
|
|
41
41
|
"_prebuild": "prebuild -r napi --backend cmake-js",
|
|
42
42
|
"prepack": "npm run build:tsc"
|
|
43
43
|
},
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"@types/node": "^20.6.1",
|
|
81
81
|
"@typescript-eslint/eslint-plugin": "^7.17.0",
|
|
82
82
|
"@typescript-eslint/parser": "^7.17.0",
|
|
83
|
-
"cmake-js": "^
|
|
83
|
+
"cmake-js": "^7.3.0",
|
|
84
84
|
"eslint": "^8.57.0",
|
|
85
85
|
"eslint-config-prettier": "^9.1.0",
|
|
86
86
|
"eslint-plugin-jest": "^28.6.0",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"jest": "^29.7.0",
|
|
89
89
|
"jsdom": "^24.1.1",
|
|
90
90
|
"node-addon-api": "^7.0.0",
|
|
91
|
-
"prebuild": "^
|
|
91
|
+
"prebuild": "^13.0.1",
|
|
92
92
|
"prettier": "^3.3.3",
|
|
93
93
|
"puppeteer": "^22.14.0",
|
|
94
94
|
"rimraf": "^5.0.9",
|
|
@@ -101,7 +101,6 @@
|
|
|
101
101
|
"typescript": "5.4"
|
|
102
102
|
},
|
|
103
103
|
"dependencies": {
|
|
104
|
-
"
|
|
105
|
-
"prebuild-install": "^7.0.1"
|
|
104
|
+
"prebuild-install": "^7.1.2"
|
|
106
105
|
}
|
|
107
106
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include "plog/Log.h"
|
|
4
4
|
|
|
5
|
-
Napi::FunctionReference DataChannelWrapper::constructor;
|
|
5
|
+
Napi::FunctionReference DataChannelWrapper::constructor = Napi::FunctionReference();
|
|
6
6
|
std::unordered_set<DataChannelWrapper *> DataChannelWrapper::instances;
|
|
7
7
|
|
|
8
8
|
void DataChannelWrapper::CloseAll()
|
|
@@ -46,8 +46,12 @@ Napi::Object DataChannelWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
|
46
46
|
InstanceMethod("onMessage", &DataChannelWrapper::onMessage),
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
-
constructor
|
|
50
|
-
constructor.
|
|
49
|
+
// If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
|
|
50
|
+
if(constructor.IsEmpty())
|
|
51
|
+
{
|
|
52
|
+
constructor = Napi::Persistent(func);
|
|
53
|
+
constructor.SuppressDestruct();
|
|
54
|
+
}
|
|
51
55
|
|
|
52
56
|
exports.Set("DataChannel", func);
|
|
53
57
|
return exports;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#include "media-audio-wrapper.h"
|
|
2
2
|
#include "media-direction.h"
|
|
3
3
|
|
|
4
|
-
Napi::FunctionReference AudioWrapper::constructor;
|
|
4
|
+
Napi::FunctionReference AudioWrapper::constructor = Napi::FunctionReference();
|
|
5
5
|
std::unordered_set<AudioWrapper *> AudioWrapper::instances;
|
|
6
6
|
|
|
7
7
|
Napi::Object AudioWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
@@ -35,8 +35,12 @@ Napi::Object AudioWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
|
35
35
|
InstanceMethod("parseSdpLine", &AudioWrapper::parseSdpLine),
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
-
constructor
|
|
39
|
-
constructor.
|
|
38
|
+
// If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
|
|
39
|
+
if(constructor.IsEmpty())
|
|
40
|
+
{
|
|
41
|
+
constructor = Napi::Persistent(func);
|
|
42
|
+
constructor.SuppressDestruct();
|
|
43
|
+
}
|
|
40
44
|
|
|
41
45
|
exports.Set("Audio", func);
|
|
42
46
|
return exports;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#include "media-rtcpreceivingsession-wrapper.h"
|
|
2
2
|
|
|
3
|
-
Napi::FunctionReference RtcpReceivingSessionWrapper::constructor;
|
|
3
|
+
Napi::FunctionReference RtcpReceivingSessionWrapper::constructor = Napi::FunctionReference();
|
|
4
4
|
std::unordered_set<RtcpReceivingSessionWrapper *> RtcpReceivingSessionWrapper::instances;
|
|
5
5
|
|
|
6
6
|
Napi::Object RtcpReceivingSessionWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
@@ -14,8 +14,12 @@ Napi::Object RtcpReceivingSessionWrapper::Init(Napi::Env env, Napi::Object expor
|
|
|
14
14
|
// Instance Methods
|
|
15
15
|
});
|
|
16
16
|
|
|
17
|
-
constructor
|
|
18
|
-
constructor.
|
|
17
|
+
// If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
|
|
18
|
+
if(constructor.IsEmpty())
|
|
19
|
+
{
|
|
20
|
+
constructor = Napi::Persistent(func);
|
|
21
|
+
constructor.SuppressDestruct();
|
|
22
|
+
}
|
|
19
23
|
|
|
20
24
|
exports.Set("RtcpReceivingSession", func);
|
|
21
25
|
return exports;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
#include "plog/Log.h"
|
|
6
6
|
|
|
7
|
-
Napi::FunctionReference TrackWrapper::constructor;
|
|
7
|
+
Napi::FunctionReference TrackWrapper::constructor = Napi::FunctionReference();
|
|
8
8
|
std::unordered_set<TrackWrapper *> TrackWrapper::instances;
|
|
9
9
|
|
|
10
10
|
void TrackWrapper::CloseAll()
|
|
@@ -48,8 +48,12 @@ Napi::Object TrackWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
|
48
48
|
InstanceMethod("onMessage", &TrackWrapper::onMessage),
|
|
49
49
|
});
|
|
50
50
|
|
|
51
|
-
constructor
|
|
52
|
-
constructor.
|
|
51
|
+
// If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
|
|
52
|
+
if(constructor.IsEmpty())
|
|
53
|
+
{
|
|
54
|
+
constructor = Napi::Persistent(func);
|
|
55
|
+
constructor.SuppressDestruct();
|
|
56
|
+
}
|
|
53
57
|
|
|
54
58
|
exports.Set("Track", func);
|
|
55
59
|
return exports;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#include "media-video-wrapper.h"
|
|
2
2
|
#include "media-direction.h"
|
|
3
3
|
|
|
4
|
-
Napi::FunctionReference VideoWrapper::constructor;
|
|
4
|
+
Napi::FunctionReference VideoWrapper::constructor = Napi::FunctionReference();
|
|
5
5
|
std::unordered_set<VideoWrapper *> VideoWrapper::instances;
|
|
6
6
|
|
|
7
7
|
Napi::Object VideoWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
@@ -37,8 +37,12 @@ Napi::Object VideoWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
|
37
37
|
InstanceMethod("parseSdpLine", &VideoWrapper::parseSdpLine),
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
-
constructor
|
|
41
|
-
constructor.
|
|
40
|
+
// If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
|
|
41
|
+
if(constructor.IsEmpty())
|
|
42
|
+
{
|
|
43
|
+
constructor = Napi::Persistent(func);
|
|
44
|
+
constructor.SuppressDestruct();
|
|
45
|
+
}
|
|
42
46
|
|
|
43
47
|
exports.Set("Video", func);
|
|
44
48
|
return exports;
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
#include <cctype>
|
|
10
10
|
#include <sstream>
|
|
11
11
|
|
|
12
|
-
Napi::FunctionReference PeerConnectionWrapper::constructor;
|
|
12
|
+
Napi::FunctionReference PeerConnectionWrapper::constructor = Napi::FunctionReference();
|
|
13
13
|
std::unordered_set<PeerConnectionWrapper *> PeerConnectionWrapper::instances;
|
|
14
14
|
|
|
15
15
|
void PeerConnectionWrapper::CloseAll()
|
|
@@ -65,8 +65,12 @@ Napi::Object PeerConnectionWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
|
65
65
|
InstanceMethod("maxMessageSize", &PeerConnectionWrapper::maxMessageSize),
|
|
66
66
|
});
|
|
67
67
|
|
|
68
|
-
constructor
|
|
69
|
-
constructor.
|
|
68
|
+
// If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
|
|
69
|
+
if(constructor.IsEmpty())
|
|
70
|
+
{
|
|
71
|
+
constructor = Napi::Persistent(func);
|
|
72
|
+
constructor.SuppressDestruct();
|
|
73
|
+
}
|
|
70
74
|
|
|
71
75
|
exports.Set("PeerConnection", func);
|
|
72
76
|
return exports;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include "plog/Log.h"
|
|
4
4
|
|
|
5
|
-
Napi::FunctionReference WebSocketServerWrapper::constructor;
|
|
5
|
+
Napi::FunctionReference WebSocketServerWrapper::constructor = Napi::FunctionReference();
|
|
6
6
|
std::unordered_set<WebSocketServerWrapper *> WebSocketServerWrapper::instances;
|
|
7
7
|
|
|
8
8
|
void WebSocketServerWrapper::StopAll()
|
|
@@ -26,8 +26,12 @@ Napi::Object WebSocketServerWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
|
26
26
|
InstanceMethod("onClient", &WebSocketServerWrapper::onClient)
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
-
constructor
|
|
30
|
-
constructor.
|
|
29
|
+
// If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
|
|
30
|
+
if(constructor.IsEmpty())
|
|
31
|
+
{
|
|
32
|
+
constructor = Napi::Persistent(func);
|
|
33
|
+
constructor.SuppressDestruct();
|
|
34
|
+
}
|
|
31
35
|
|
|
32
36
|
exports.Set("WebSocketServer", func);
|
|
33
37
|
return exports;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include "plog/Log.h"
|
|
4
4
|
|
|
5
|
-
Napi::FunctionReference WebSocketWrapper::constructor;
|
|
5
|
+
Napi::FunctionReference WebSocketWrapper::constructor = Napi::FunctionReference();
|
|
6
6
|
std::unordered_set<WebSocketWrapper *> WebSocketWrapper::instances;
|
|
7
7
|
|
|
8
8
|
void WebSocketWrapper::CloseAll()
|
|
@@ -47,8 +47,12 @@ Napi::Object WebSocketWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
|
47
47
|
InstanceMethod("path", &WebSocketWrapper::path),
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
-
constructor
|
|
51
|
-
constructor.
|
|
50
|
+
// If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
|
|
51
|
+
if(constructor.IsEmpty())
|
|
52
|
+
{
|
|
53
|
+
constructor = Napi::Persistent(func);
|
|
54
|
+
constructor.SuppressDestruct();
|
|
55
|
+
}
|
|
52
56
|
|
|
53
57
|
exports.Set("WebSocket", func);
|
|
54
58
|
return exports;
|
|
@@ -5,6 +5,11 @@ try {
|
|
|
5
5
|
nodeDataChannel = require('../../../build/Release/node_datachannel.node');
|
|
6
6
|
}
|
|
7
7
|
catch (e) {
|
|
8
|
+
// If this is not a module not found error, rethrow it
|
|
9
|
+
if (e.code !== 'MODULE_NOT_FOUND') {
|
|
10
|
+
throw e;
|
|
11
|
+
}
|
|
12
|
+
|
|
8
13
|
// from src
|
|
9
14
|
nodeDataChannel = require('../../build/Release/node_datachannel.node');
|
|
10
15
|
}
|