node-datachannel 0.28.0 → 0.29.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/.prettierignore +3 -0
- package/API.md +30 -0
- package/BULDING.md +2 -1
- package/CMakeLists.txt +3 -2
- package/dist/cjs/lib/index.cjs +4 -1
- package/dist/cjs/lib/index.cjs.map +1 -1
- package/dist/cjs/polyfill/Events.cjs.map +1 -1
- package/dist/cjs/polyfill/RTCDataChannel.cjs +18 -5
- package/dist/cjs/polyfill/RTCDataChannel.cjs.map +1 -1
- package/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +1 -1
- package/dist/cjs/polyfill/RTCSctpTransport.cjs.map +1 -1
- package/dist/esm/lib/index.mjs +4 -2
- package/dist/esm/lib/index.mjs.map +1 -1
- package/dist/esm/polyfill/Events.mjs.map +1 -1
- package/dist/esm/polyfill/RTCDataChannel.mjs +18 -5
- package/dist/esm/polyfill/RTCDataChannel.mjs.map +1 -1
- package/dist/esm/polyfill/RTCDtlsTransport.mjs.map +1 -1
- package/dist/esm/polyfill/RTCSctpTransport.mjs.map +1 -1
- package/dist/types/lib/index.d.ts +14 -3
- package/dist/types/lib/types.d.ts +24 -1
- package/package.json +3 -2
- package/src/cpp/ice-udp-mux-listener-wrapper.cpp +150 -0
- package/src/cpp/ice-udp-mux-listener-wrapper.h +43 -0
- package/src/cpp/main.cpp +2 -0
- package/src/cpp/peer-connection-wrapper.cpp +68 -2
- package/src/cpp/peer-connection-wrapper.h +1 -0
- package/src/lib/index.ts +14 -1
- package/src/lib/types.ts +26 -0
- package/src/polyfill/Events.ts +4 -1
- package/src/polyfill/RTCDataChannel.ts +24 -5
- package/src/polyfill/RTCDtlsTransport.ts +1 -1
- package/src/polyfill/RTCSctpTransport.ts +2 -2
package/.prettierignore
CHANGED
package/API.md
CHANGED
|
@@ -16,12 +16,19 @@ export interface RtcConfig {
|
|
|
16
16
|
bindAddress?: string;
|
|
17
17
|
enableIceTcp?: boolean;
|
|
18
18
|
enableIceUdpMux?: boolean;
|
|
19
|
+
disableAutoNegotiation?: boolean;
|
|
20
|
+
disableFingerprintVerification?: boolean;
|
|
21
|
+
disableAutoGathering?: boolean;
|
|
22
|
+
forceMediaTransport?: boolean;
|
|
19
23
|
portRangeBegin?: number;
|
|
20
24
|
portRangeEnd?: number;
|
|
21
25
|
maxMessageSize?: number;
|
|
22
26
|
mtu?: number;
|
|
23
27
|
iceTransportPolicy?: TransportPolicy;
|
|
24
28
|
disableFingerprintVerification?: boolean;
|
|
29
|
+
certificatePemFile?: string;
|
|
30
|
+
keyPemFile?: string;
|
|
31
|
+
keyPemPass?: string;
|
|
25
32
|
}
|
|
26
33
|
|
|
27
34
|
export const enum RelayType {
|
|
@@ -69,6 +76,29 @@ export const enum DescriptionType {
|
|
|
69
76
|
}
|
|
70
77
|
```
|
|
71
78
|
|
|
79
|
+
**setLocalDescription: (sdp: string, init?: LocalDescriptionInit) => void**
|
|
80
|
+
|
|
81
|
+
Set Local Description and optionally the ICE ufrag/pwd to use. These should not
|
|
82
|
+
be set as they will be generated automatically as per the spec.
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
export interface LocalDescriptionInit {
|
|
86
|
+
iceUfrag?: string;
|
|
87
|
+
icePwd?: string;
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**remoteFingerprint: () => CertificateFingerprint**
|
|
92
|
+
|
|
93
|
+
Returns the certificate fingerprint used by the remote peer
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
export interface CertificateFingerprint {
|
|
97
|
+
value: string;
|
|
98
|
+
algorithm: 'sha-1' | 'sha-224' | 'sha-256' | 'sha-384' | 'sha-512' | 'md5' | 'md2';
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
72
102
|
**addRemoteCandidate: (candidate: string, mid: string) => void**
|
|
73
103
|
|
|
74
104
|
Add remote candidate info
|
package/BULDING.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Requirements
|
|
4
4
|
|
|
5
|
-
- cmake >= V3.
|
|
5
|
+
- cmake >= V3.21
|
|
6
6
|
- [libdatachannel dependencies](https://github.com/paullouisageneau/libdatachannel/blob/master/README.md#dependencies)
|
|
7
7
|
|
|
8
8
|
## Building from source
|
|
@@ -25,6 +25,7 @@ Other Options
|
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
Compile without Media and Websocket
|
|
28
|
+
|
|
28
29
|
```sh
|
|
29
30
|
npx cmake-js clean
|
|
30
31
|
npx cmake-js configure --CDNO_MEDIA=ON --CDNO_WEBSOCKET=ON
|
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.29.0)
|
|
6
6
|
|
|
7
7
|
# -Dnapi_build_version=8
|
|
8
8
|
add_definitions(-DNAPI_VERSION=8)
|
|
@@ -32,7 +32,7 @@ include(FetchContent)
|
|
|
32
32
|
FetchContent_Declare(
|
|
33
33
|
libdatachannel
|
|
34
34
|
GIT_REPOSITORY https://github.com/paullouisageneau/libdatachannel.git
|
|
35
|
-
GIT_TAG "
|
|
35
|
+
GIT_TAG "v0.23.0"
|
|
36
36
|
)
|
|
37
37
|
|
|
38
38
|
option(NO_MEDIA "Disable media transport support in libdatachannel" OFF)
|
|
@@ -50,6 +50,7 @@ endif()
|
|
|
50
50
|
set(SRC_FILES
|
|
51
51
|
src/cpp/rtc-wrapper.cpp
|
|
52
52
|
src/cpp/data-channel-wrapper.cpp
|
|
53
|
+
src/cpp/ice-udp-mux-listener-wrapper.cpp
|
|
53
54
|
src/cpp/peer-connection-wrapper.cpp
|
|
54
55
|
src/cpp/thread-safe-callback.cpp
|
|
55
56
|
src/cpp/main.cpp
|
package/dist/cjs/lib/index.cjs
CHANGED
|
@@ -27,6 +27,7 @@ const Video = nodeDatachannel.default.Video;
|
|
|
27
27
|
const Track = nodeDatachannel.default.Track;
|
|
28
28
|
const DataChannel = nodeDatachannel.default.DataChannel;
|
|
29
29
|
const PeerConnection = nodeDatachannel.default.PeerConnection;
|
|
30
|
+
const IceUdpMuxListener = nodeDatachannel.default.IceUdpMuxListener;
|
|
30
31
|
const RtcpReceivingSession = nodeDatachannel.default.RtcpReceivingSession;
|
|
31
32
|
const DataChannelStream = datachannelStream.default;
|
|
32
33
|
var n = {
|
|
@@ -43,7 +44,8 @@ var n = {
|
|
|
43
44
|
PeerConnection,
|
|
44
45
|
WebSocket: websocket.WebSocket,
|
|
45
46
|
WebSocketServer: websocketServer.WebSocketServer,
|
|
46
|
-
DataChannelStream
|
|
47
|
+
DataChannelStream,
|
|
48
|
+
IceUdpMuxListener
|
|
47
49
|
};
|
|
48
50
|
|
|
49
51
|
exports.WebSocketServer = websocketServer.WebSocketServer;
|
|
@@ -51,6 +53,7 @@ exports.WebSocket = websocket.WebSocket;
|
|
|
51
53
|
exports.Audio = Audio;
|
|
52
54
|
exports.DataChannel = DataChannel;
|
|
53
55
|
exports.DataChannelStream = DataChannelStream;
|
|
56
|
+
exports.IceUdpMuxListener = IceUdpMuxListener;
|
|
54
57
|
exports.PeerConnection = PeerConnection;
|
|
55
58
|
exports.RtcpReceivingSession = RtcpReceivingSession;
|
|
56
59
|
exports.Track = Track;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/lib/index.ts"],"sourcesContent":["import nodeDataChannel from './node-datachannel';\nimport _DataChannelStream from './datachannel-stream';\nimport { WebSocketServer } from './websocket-server';\nimport {\n Channel,\n DataChannelInitConfig,\n DescriptionType,\n Direction,\n LogLevel,\n RtcConfig,\n RTCIceConnectionState,\n RTCIceGatheringState,\n RTCPeerConnectionState,\n RTCSignalingState,\n SctpSettings,\n SelectedCandidateInfo,\n} from './types';\nimport { WebSocket } from './websocket';\n\nexport function preload(): void {\n nodeDataChannel.preload();\n}\nexport function initLogger(level: LogLevel): void {\n nodeDataChannel.initLogger(level);\n}\nexport function cleanup(): void {\n nodeDataChannel.cleanup();\n}\nexport function setSctpSettings(settings: SctpSettings): void {\n nodeDataChannel.setSctpSettings(settings);\n}\nexport function getLibraryVersion(): string {\n return nodeDataChannel.getLibraryVersion();\n}\n\nexport interface Audio {\n addAudioCodec(payloadType: number, codec: string, profile?: string): void;\n addOpusCodec(payloadType: number, profile?: string): string;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Audio: {\n new (mid: string, dir: Direction): Audio;\n} = nodeDataChannel.Audio;\n\nexport interface Video {\n addVideoCodec(payloadType: number, codec: string, profile?: string): void;\n addH264Codec(payloadType: number, profile?: string): void;\n addVP8Codec(payloadType: number): void;\n addVP9Codec(payloadType: number): void;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Video: {\n new (mid: string, dir: Direction): Video;\n} = nodeDataChannel.Video;\n\nexport interface Track {\n direction(): Direction;\n mid(): string;\n type(): string;\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer): boolean;\n isOpen(): boolean;\n isClosed(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n requestBitrate(bitRate: number): boolean;\n setBufferedAmountLowThreshold(newSize: number): void;\n requestKeyframe(): boolean;\n setMediaHandler(handler: RtcpReceivingSession): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onMessage(cb: (msg: Buffer) => void): void;\n}\nexport const Track: {\n new (): Track;\n} = nodeDataChannel.Track;\n\nexport interface DataChannel extends Channel {\n getLabel(): string;\n getId(): number;\n getProtocol(): string;\n\n // Channel implementation\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer | Uint8Array): boolean;\n isOpen(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n setBufferedAmountLowThreshold(newSize: number): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onBufferedAmountLow(cb: () => void): void;\n onMessage(cb: (msg: string | Buffer | ArrayBuffer) => void): void;\n}\nexport const DataChannel: {\n // DataChannel implementation\n} = nodeDataChannel.DataChannel;\n\nexport interface PeerConnection {\n close(): void;\n setLocalDescription(type?: DescriptionType): void;\n setRemoteDescription(sdp: string, type: DescriptionType): void;\n localDescription(): { type: DescriptionType; sdp: string } | null;\n remoteDescription(): { type: DescriptionType; sdp: string } | null;\n addRemoteCandidate(candidate: string, mid: string): void;\n createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;\n addTrack(media: Video | Audio): Track;\n hasMedia(): boolean;\n state(): RTCPeerConnectionState;\n iceState(): RTCIceConnectionState;\n signalingState(): RTCSignalingState;\n gatheringState(): RTCIceGatheringState;\n onLocalDescription(cb: (sdp: string, type: DescriptionType) => void): void;\n onLocalCandidate(cb: (candidate: string, mid: string) => void): void;\n onStateChange(cb: (state: string) => void): void;\n onIceStateChange(cb: (state: string) => void): void;\n onSignalingStateChange(cb: (state: string) => void): void;\n onGatheringStateChange(cb: (state: string) => void): void;\n onDataChannel(cb: (dc: DataChannel) => void): void;\n onTrack(cb: (track: Track) => void): void;\n bytesSent(): number;\n bytesReceived(): number;\n rtt(): number;\n getSelectedCandidatePair(): {\n local: SelectedCandidateInfo;\n remote: SelectedCandidateInfo;\n } | null;\n maxDataChannelId(): number;\n maxMessageSize(): number;\n}\nexport const PeerConnection: {\n new (peerName: string, config: RtcConfig): PeerConnection;\n} = nodeDataChannel.PeerConnection;\n\nexport interface RtcpReceivingSession {}\n\nexport const RtcpReceivingSession: {\n new (): RtcpReceivingSession;\n} = nodeDataChannel.RtcpReceivingSession;\n\nexport { WebSocketServer } from './websocket-server';\nexport { WebSocket } from './websocket';\n\nexport const DataChannelStream = _DataChannelStream;\n\nexport default {\n initLogger,\n cleanup,\n preload,\n setSctpSettings,\n getLibraryVersion,\n RtcpReceivingSession,\n Track,\n Video,\n Audio,\n DataChannel,\n PeerConnection,\n WebSocket,\n WebSocketServer,\n DataChannelStream,\n};\n\n// Types\n// https://github.com/murat-dogan/node-datachannel/issues/300\nexport * from './types';\n"],"names":["nodeDataChannel","_DataChannelStream","WebSocket","WebSocketServer"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/lib/index.ts"],"sourcesContent":["import nodeDataChannel from './node-datachannel';\nimport _DataChannelStream from './datachannel-stream';\nimport { WebSocketServer } from './websocket-server';\nimport {\n Channel,\n DataChannelInitConfig,\n DescriptionType,\n Direction,\n LogLevel,\n RtcConfig,\n RTCIceConnectionState,\n RTCIceGatheringState,\n RTCPeerConnectionState,\n RTCSignalingState,\n SctpSettings,\n SelectedCandidateInfo,\n} from './types';\nimport { WebSocket } from './websocket';\nimport type { CertificateFingerprint, IceUdpMuxRequest, LocalDescriptionInit } from './types';\n\nexport function preload(): void {\n nodeDataChannel.preload();\n}\nexport function initLogger(level: LogLevel): void {\n nodeDataChannel.initLogger(level);\n}\nexport function cleanup(): void {\n nodeDataChannel.cleanup();\n}\nexport function setSctpSettings(settings: SctpSettings): void {\n nodeDataChannel.setSctpSettings(settings);\n}\nexport function getLibraryVersion(): string {\n return nodeDataChannel.getLibraryVersion();\n}\n\nexport interface Audio {\n addAudioCodec(payloadType: number, codec: string, profile?: string): void;\n addOpusCodec(payloadType: number, profile?: string): string;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Audio: {\n new (mid: string, dir: Direction): Audio;\n} = nodeDataChannel.Audio;\n\nexport interface Video {\n addVideoCodec(payloadType: number, codec: string, profile?: string): void;\n addH264Codec(payloadType: number, profile?: string): void;\n addVP8Codec(payloadType: number): void;\n addVP9Codec(payloadType: number): void;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Video: {\n new (mid: string, dir: Direction): Video;\n} = nodeDataChannel.Video;\n\nexport interface Track {\n direction(): Direction;\n mid(): string;\n type(): string;\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer): boolean;\n isOpen(): boolean;\n isClosed(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n requestBitrate(bitRate: number): boolean;\n setBufferedAmountLowThreshold(newSize: number): void;\n requestKeyframe(): boolean;\n setMediaHandler(handler: RtcpReceivingSession): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onMessage(cb: (msg: Buffer) => void): void;\n}\nexport const Track: {\n new (): Track;\n} = nodeDataChannel.Track;\n\nexport interface DataChannel extends Channel {\n getLabel(): string;\n getId(): number;\n getProtocol(): string;\n\n // Channel implementation\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer | Uint8Array): boolean;\n isOpen(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n setBufferedAmountLowThreshold(newSize: number): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onBufferedAmountLow(cb: () => void): void;\n onMessage(cb: (msg: string | Buffer | ArrayBuffer) => void): void;\n}\nexport const DataChannel: {\n // DataChannel implementation\n} = nodeDataChannel.DataChannel;\n\nexport interface PeerConnection {\n close(): void;\n setLocalDescription(type?: DescriptionType, init?: LocalDescriptionInit): void;\n setRemoteDescription(sdp: string, type: DescriptionType): void;\n localDescription(): { type: DescriptionType; sdp: string } | null;\n remoteDescription(): { type: DescriptionType; sdp: string } | null;\n remoteFingerprint(): CertificateFingerprint;\n addRemoteCandidate(candidate: string, mid: string): void;\n createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;\n addTrack(media: Video | Audio): Track;\n hasMedia(): boolean;\n state(): RTCPeerConnectionState;\n iceState(): RTCIceConnectionState;\n signalingState(): RTCSignalingState;\n gatheringState(): RTCIceGatheringState;\n onLocalDescription(cb: (sdp: string, type: DescriptionType) => void): void;\n onLocalCandidate(cb: (candidate: string, mid: string) => void): void;\n onStateChange(cb: (state: string) => void): void;\n onIceStateChange(cb: (state: string) => void): void;\n onSignalingStateChange(cb: (state: string) => void): void;\n onGatheringStateChange(cb: (state: string) => void): void;\n onDataChannel(cb: (dc: DataChannel) => void): void;\n onTrack(cb: (track: Track) => void): void;\n bytesSent(): number;\n bytesReceived(): number;\n rtt(): number;\n getSelectedCandidatePair(): {\n local: SelectedCandidateInfo;\n remote: SelectedCandidateInfo;\n } | null;\n maxDataChannelId(): number;\n maxMessageSize(): number;\n}\nexport const PeerConnection: {\n new (peerName: string, config: RtcConfig): PeerConnection;\n} = nodeDataChannel.PeerConnection;\n\nexport interface IceUdpMuxListener {\n address?: string;\n port: number;\n stop(): void;\n onUnhandledStunRequest(cb: (req: IceUdpMuxRequest) => void): void;\n}\nexport const IceUdpMuxListener: {\n new (port: number, address?: string): IceUdpMuxListener;\n} = nodeDataChannel.IceUdpMuxListener;\n\nexport interface RtcpReceivingSession {}\n\nexport const RtcpReceivingSession: {\n new (): RtcpReceivingSession;\n} = nodeDataChannel.RtcpReceivingSession;\n\nexport { WebSocketServer } from './websocket-server';\nexport { WebSocket } from './websocket';\n\nexport const DataChannelStream = _DataChannelStream;\n\nexport default {\n initLogger,\n cleanup,\n preload,\n setSctpSettings,\n getLibraryVersion,\n RtcpReceivingSession,\n Track,\n Video,\n Audio,\n DataChannel,\n PeerConnection,\n WebSocket,\n WebSocketServer,\n DataChannelStream,\n IceUdpMuxListener,\n};\n\n// Types\n// https://github.com/murat-dogan/node-datachannel/issues/300\nexport * from './types';\n"],"names":["nodeDataChannel","_DataChannelStream","WebSocket","WebSocketServer"],"mappings":";;;;;;;;;AAoBO,SAAS,OAAgB,GAAA;AAC9B,EAAAA,uBAAA,CAAgB,OAAQ,EAAA,CAAA;AAC1B,CAAA;AACO,SAAS,WAAW,KAAuB,EAAA;AAChD,EAAAA,uBAAA,CAAgB,WAAW,KAAK,CAAA,CAAA;AAClC,CAAA;AACO,SAAS,OAAgB,GAAA;AAC9B,EAAAA,uBAAA,CAAgB,OAAQ,EAAA,CAAA;AAC1B,CAAA;AACO,SAAS,gBAAgB,QAA8B,EAAA;AAC5D,EAAAA,uBAAA,CAAgB,gBAAgB,QAAQ,CAAA,CAAA;AAC1C,CAAA;AACO,SAAS,iBAA4B,GAAA;AAC1C,EAAA,OAAOA,wBAAgB,iBAAkB,EAAA,CAAA;AAC3C,CAAA;AAwBO,MAAM,QAETA,uBAAgB,CAAA,MAAA;AA0Bb,MAAM,QAETA,uBAAgB,CAAA,MAAA;AAsBb,MAAM,QAETA,uBAAgB,CAAA,MAAA;AAqBb,MAAM,cAETA,uBAAgB,CAAA,YAAA;AAmCb,MAAM,iBAETA,uBAAgB,CAAA,eAAA;AAQb,MAAM,oBAETA,uBAAgB,CAAA,kBAAA;AAIb,MAAM,uBAETA,uBAAgB,CAAA,qBAAA;AAKb,MAAM,iBAAoB,GAAAC,0BAAA;AAEjC,QAAe;AAAA,EACb,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,aACAC,mBAAA;AAAA,mBACAC,+BAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AACF,CAAA;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Events.cjs","sources":["../../../src/polyfill/Events.ts"],"sourcesContent":["import RTCDataChannel from './RTCDataChannel';\nimport RTCError from './RTCError';\n\nexport class RTCPeerConnectionIceEvent
|
|
1
|
+
{"version":3,"file":"Events.cjs","sources":["../../../src/polyfill/Events.ts"],"sourcesContent":["import RTCDataChannel from './RTCDataChannel';\nimport RTCError from './RTCError';\n\nexport class RTCPeerConnectionIceEvent\n extends Event\n implements globalThis.RTCPeerConnectionIceEvent\n{\n #candidate: globalThis.RTCIceCandidate;\n\n constructor(candidate: globalThis.RTCIceCandidate) {\n super('icecandidate');\n\n this.#candidate = candidate;\n }\n\n get candidate(): globalThis.RTCIceCandidate {\n return this.#candidate;\n }\n\n get url(): string {\n return '';\n }\n}\n\nexport class RTCDataChannelEvent extends Event implements globalThis.RTCDataChannelEvent {\n #channel: RTCDataChannel;\n\n constructor(type: string = 'datachannel', eventInitDict: globalThis.RTCDataChannelEventInit) {\n super(type);\n\n if (arguments.length === 0)\n throw new TypeError(\n `Failed to construct 'RTCDataChannelEvent': 2 arguments required, but only ${arguments.length} present.`,\n );\n if (typeof eventInitDict !== 'object')\n throw new TypeError(\n \"Failed to construct 'RTCDataChannelEvent': The provided value is not of type 'RTCDataChannelEventInit'.\",\n );\n if (!eventInitDict.channel)\n throw new TypeError(\n \"Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Required member is undefined.\",\n );\n if (eventInitDict.channel.constructor !== RTCDataChannel)\n throw new TypeError(\n \"Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Failed to convert value to 'RTCDataChannel'.\",\n );\n\n this.#channel = eventInitDict?.channel;\n }\n\n get channel(): RTCDataChannel {\n return this.#channel;\n }\n}\n\nexport class RTCErrorEvent extends Event implements globalThis.RTCErrorEvent {\n #error: RTCError;\n constructor(type: string, init: globalThis.RTCErrorEventInit) {\n if (arguments.length < 2)\n throw new TypeError(\n `Failed to construct 'RTCErrorEvent': 2 arguments required, but only ${arguments.length} present.`,\n );\n if (typeof init !== 'object')\n throw new TypeError(\n \"Failed to construct 'RTCErrorEvent': The provided value is not of type 'RTCErrorEventInit'.\",\n );\n if (!init.error)\n throw new TypeError(\n \"Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Required member is undefined.\",\n );\n if (init.error.constructor !== RTCError)\n throw new TypeError(\n \"Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Failed to convert value to 'RTCError'.\",\n );\n super(type || 'error');\n this.#error = init.error;\n }\n\n get error(): RTCError {\n return this.#error;\n }\n}\n"],"names":["RTCDataChannel","RTCError"],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ class RTCDataChannel extends EventTarget {
|
|
|
39
39
|
__publicField(this, "onmessage", null);
|
|
40
40
|
__publicField(this, "onopen", null);
|
|
41
41
|
__privateSet(this, _dataChannel, dataChannel);
|
|
42
|
-
__privateSet(this, _binaryType, "
|
|
42
|
+
__privateSet(this, _binaryType, "arraybuffer");
|
|
43
43
|
__privateSet(this, _readyState, __privateGet(this, _dataChannel).isOpen() ? "open" : "connecting");
|
|
44
44
|
__privateSet(this, _bufferedAmountLowThreshold, 0);
|
|
45
45
|
__privateSet(this, _maxPacketLifeTime, opts.maxPacketLifeTime ?? null);
|
|
@@ -78,10 +78,23 @@ class RTCDataChannel extends EventTarget {
|
|
|
78
78
|
__privateGet(this, _dataChannel).onBufferedAmountLow(() => {
|
|
79
79
|
this.dispatchEvent(new Event("bufferedamountlow"));
|
|
80
80
|
});
|
|
81
|
-
__privateGet(this, _dataChannel).onMessage((
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
__privateGet(this, _dataChannel).onMessage((message) => {
|
|
82
|
+
if (typeof message === "string") {
|
|
83
|
+
this.dispatchEvent(new MessageEvent("message", { data: message }));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
let data;
|
|
87
|
+
if (message instanceof ArrayBuffer) {
|
|
88
|
+
data = message;
|
|
89
|
+
} else {
|
|
90
|
+
data = message.buffer;
|
|
91
|
+
if (message.byteOffset !== 0 || message.byteLength !== message.buffer.byteLength) {
|
|
92
|
+
data = new ArrayBuffer(message.byteLength);
|
|
93
|
+
new Uint8Array(data, 0, message.byteLength).set(message);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (__privateGet(this, _binaryType) === "blob") {
|
|
97
|
+
data = new Blob([data]);
|
|
85
98
|
}
|
|
86
99
|
this.dispatchEvent(new MessageEvent("message", { data }));
|
|
87
100
|
});
|
|
@@ -1 +1 @@
|
|
|
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';\nimport { RTCErrorEvent } from './Events';\n\nexport default class RTCDataChannel extends EventTarget implements globalThis.RTCDataChannel {\n #dataChannel: DataChannel;\n #readyState: globalThis.RTCDataChannelState;\n #bufferedAmountLowThreshold: number;\n #binaryType: BinaryType;\n #maxPacketLifeTime: number | null;\n #maxRetransmits: number | null;\n #negotiated: boolean;\n #ordered: boolean;\n #id: number;\n #label: string;\n #protocol: string;\n\n #closeRequested = false;\n\n // events\n onbufferedamountlow: globalThis.RTCDataChannel['onbufferedamountlow'] = null;\n onclose: globalThis.RTCDataChannel['onclose'] = null;\n onclosing: globalThis.RTCDataChannel['onclosing'] = null;\n onerror: globalThis.RTCDataChannel['onerror'] = null;\n onmessage: globalThis.RTCDataChannel['onmessage'] = null;\n onopen: globalThis.RTCDataChannel['onopen'] = null;\n\n constructor(dataChannel: DataChannel, opts: globalThis.RTCDataChannelInit = {}) {\n super();\n\n this.#dataChannel = dataChannel;\n this.#binaryType = 'blob';\n this.#readyState = this.#dataChannel.isOpen() ? 'open' : 'connecting';\n this.#bufferedAmountLowThreshold = 0;\n this.#maxPacketLifeTime = opts.maxPacketLifeTime ?? null;\n this.#maxRetransmits = opts.maxRetransmits ?? null;\n this.#negotiated = opts.negotiated ?? false;\n this.#ordered = opts.ordered ?? true;\n this.#id = this.#dataChannel.getId();\n this.#label = this.#dataChannel.getLabel();\n this.#protocol = this.#dataChannel.getProtocol();\n\n // forward dataChannel events\n this.#dataChannel.onOpen(() => {\n this.#readyState = 'open';\n this.dispatchEvent(new Event('open', {}));\n });\n\n this.#dataChannel.onClosed(() => {\n // 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 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') data = data.buffer;\n else 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 as RTCErrorEvent);\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 : \" +\n type,\n 'TypeMismatchError',\n );\n }\n this.#binaryType = type;\n }\n\n get binaryType(): BinaryType {\n return this.#binaryType;\n }\n\n get bufferedAmount(): number {\n return this.#dataChannel.bufferedAmount();\n }\n\n get bufferedAmountLowThreshold(): number {\n return this.#bufferedAmountLowThreshold;\n }\n\n set bufferedAmountLowThreshold(value) {\n const number = Number(value) || 0;\n this.#bufferedAmountLowThreshold = number;\n this.#dataChannel.setBufferedAmountLowThreshold(number);\n }\n\n get id(): number | null {\n return this.#id;\n }\n\n get label(): string {\n return this.#label;\n }\n\n get maxPacketLifeTime(): number | null {\n return this.#maxPacketLifeTime;\n }\n\n get maxRetransmits(): number | null {\n return this.#maxRetransmits;\n }\n\n get negotiated(): boolean {\n return this.#negotiated;\n }\n\n get ordered(): boolean {\n return this.#ordered;\n }\n\n get protocol(): string {\n return this.#protocol;\n }\n\n get readyState(): globalThis.RTCDataChannelState {\n return this.#readyState;\n }\n\n send(data): void {\n if (this.#readyState !== 'open') {\n throw new exceptions.InvalidStateError(\n \"Failed to execute 'send' on 'RTCDataChannel': RTCDataChannel.readyState is not 'open'\",\n );\n }\n\n // Needs network error, type error implemented\n if (typeof data === 'string') {\n this.#dataChannel.sendMessage(data);\n } else if (data instanceof Blob) {\n data.arrayBuffer().then((ab) => {\n if (process?.versions?.bun) {\n this.#dataChannel.sendMessageBinary(Buffer.from(ab));\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(ab));\n }\n });\n } else if (data instanceof Uint8Array) {\n this.#dataChannel.sendMessageBinary(data);\n } else {\n if (process?.versions?.bun) {\n this.#dataChannel.sendMessageBinary(Buffer.from(data));\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(data));\n }\n }\n }\n\n close(): void {\n this.#closeRequested = true;\n setImmediate(() => {\n this.#dataChannel.close();\n });\n }\n}\n"],"names":["RTCErrorEvent","exceptions.InvalidStateError"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAA,YAAA,EAAA,WAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,QAAA,EAAA,GAAA,EAAA,MAAA,EAAA,SAAA,EAAA,eAAA,CAAA;AAKA,MAAqB,uBAAuB,WAAiD,CAAA;AAAA,EAuB3F,WAAY,CAAA,WAAA,EAA0B,IAAsC,GAAA,EAAI,EAAA;AAC9E,IAAM,KAAA,EAAA,CAAA;AAvBR,IAAA,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,2BAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,kBAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,eAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,GAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;AAEA,IAAkB,YAAA,CAAA,IAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA;AAGlB;AAAA,IAAwE,aAAA,CAAA,IAAA,EAAA,qBAAA,EAAA,IAAA,CAAA,CAAA;AACxE,IAAgD,aAAA,CAAA,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AAChD,IAAoD,aAAA,CAAA,IAAA,EAAA,WAAA,EAAA,IAAA,CAAA,CAAA;AACpD,IAAgD,aAAA,CAAA,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AAChD,IAAoD,aAAA,CAAA,IAAA,EAAA,WAAA,EAAA,IAAA,CAAA,CAAA;AACpD,IAA8C,aAAA,CAAA,IAAA,EAAA,QAAA,EAAA,IAAA,CAAA,CAAA;AAK5C,IAAA,YAAA,CAAA,IAAA,EAAK,YAAe,EAAA,WAAA,CAAA,CAAA;AACpB,IAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,MAAA,CAAA,CAAA;AACnB,IAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,YAAA,CAAA,IAAA,EAAK,YAAa,CAAA,CAAA,MAAA,KAAW,MAAS,GAAA,YAAA,CAAA,CAAA;AACzD,IAAA,YAAA,CAAA,IAAA,EAAK,2BAA8B,EAAA,CAAA,CAAA,CAAA;AACnC,IAAK,YAAA,CAAA,IAAA,EAAA,kBAAA,EAAqB,KAAK,iBAAqB,IAAA,IAAA,CAAA,CAAA;AACpD,IAAK,YAAA,CAAA,IAAA,EAAA,eAAA,EAAkB,KAAK,cAAkB,IAAA,IAAA,CAAA,CAAA;AAC9C,IAAK,YAAA,CAAA,IAAA,EAAA,WAAA,EAAc,KAAK,UAAc,IAAA,KAAA,CAAA,CAAA;AACtC,IAAK,YAAA,CAAA,IAAA,EAAA,QAAA,EAAW,KAAK,OAAW,IAAA,IAAA,CAAA,CAAA;AAChC,IAAK,YAAA,CAAA,IAAA,EAAA,GAAA,EAAM,YAAK,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,KAAM,EAAA,CAAA,CAAA;AACnC,IAAK,YAAA,CAAA,IAAA,EAAA,MAAA,EAAS,YAAK,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,QAAS,EAAA,CAAA,CAAA;AACzC,IAAK,YAAA,CAAA,IAAA,EAAA,SAAA,EAAY,YAAK,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,WAAY,EAAA,CAAA,CAAA;AAG/C,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,OAAO,MAAM;AAC7B,MAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,MAAA,CAAA,CAAA;AACnB,MAAA,IAAA,CAAK,cAAc,IAAI,KAAA,CAAM,MAAQ,EAAA,EAAE,CAAC,CAAA,CAAA;AAAA,KACzC,CAAA,CAAA;AAED,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,SAAS,MAAM;AAE/B,MAAI,IAAA,CAAC,mBAAK,eAAiB,CAAA,EAAA;AACzB,QAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,SAAA,CAAA,CAAA;AACnB,QAAA,IAAA,CAAK,aAAc,CAAA,IAAI,KAAM,CAAA,SAAS,CAAC,CAAA,CAAA;AAAA,OACzC;AAEA,MAAA,YAAA,CAAa,MAAM;AACjB,QAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,QAAA,CAAA,CAAA;AACnB,QAAA,IAAA,CAAK,aAAc,CAAA,IAAI,KAAM,CAAA,OAAO,CAAC,CAAA,CAAA;AAAA,OACtC,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAED,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,OAAQ,CAAA,CAAC,GAAQ,KAAA;AACjC,MAAK,IAAA,CAAA,aAAA;AAAA,QACH,IAAIA,qBAAc,OAAS,EAAA;AAAA,UACzB,OAAO,IAAI,QAAA;AAAA,YACT;AAAA,cACE,WAAa,EAAA,sBAAA;AAAA,aACf;AAAA,YACA,GAAA;AAAA,WACF;AAAA,SACD,CAAA;AAAA,OACH,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,oBAAoB,MAAM;AAC1C,MAAA,IAAA,CAAK,aAAc,CAAA,IAAI,KAAM,CAAA,mBAAmB,CAAC,CAAA,CAAA;AAAA,KAClD,CAAA,CAAA;AAED,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,SAAU,CAAA,CAAC,IAAS,KAAA;AACpC,MAAI,IAAA,WAAA,CAAY,MAAO,CAAA,IAAI,CAAG,EAAA;AAC5B,QAAA,IAAI,IAAK,CAAA,UAAA,IAAc,aAAe,EAAA,IAAA,GAAO,IAAK,CAAA,MAAA,CAAA;AAAA,aACtC,IAAA,GAAA,MAAA,CAAO,IAAK,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,OACrC;AAEA,MAAA,IAAA,CAAK,cAAc,IAAI,YAAA,CAAa,WAAW,EAAE,IAAA,EAAM,CAAC,CAAA,CAAA;AAAA,KACzD,CAAA,CAAA;AAGD,IAAK,IAAA,CAAA,gBAAA,CAAiB,SAAW,EAAA,CAAC,CAAM,KAAA;AACtC,MAAA,IAAI,IAAK,CAAA,SAAA,EAAgB,IAAA,CAAA,SAAA,CAAU,CAAiB,CAAA,CAAA;AAAA,KACrD,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,gBAAA,CAAiB,mBAAqB,EAAA,CAAC,CAAM,KAAA;AAChD,MAAA,IAAI,IAAK,CAAA,mBAAA,EAA0B,IAAA,CAAA,mBAAA,CAAoB,CAAC,CAAA,CAAA;AAAA,KACzD,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,gBAAA,CAAiB,OAAS,EAAA,CAAC,CAAM,KAAA;AACpC,MAAA,IAAI,IAAK,CAAA,OAAA,EAAc,IAAA,CAAA,OAAA,CAAQ,CAAkB,CAAA,CAAA;AAAA,KAClD,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,gBAAA,CAAiB,OAAS,EAAA,CAAC,CAAM,KAAA;AACpC,MAAA,IAAI,IAAK,CAAA,OAAA,EAAc,IAAA,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAAA,KACjC,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,gBAAA,CAAiB,SAAW,EAAA,CAAC,CAAM,KAAA;AACtC,MAAA,IAAI,IAAK,CAAA,SAAA,EAAgB,IAAA,CAAA,SAAA,CAAU,CAAC,CAAA,CAAA;AAAA,KACrC,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,gBAAA,CAAiB,MAAQ,EAAA,CAAC,CAAM,KAAA;AACnC,MAAA,IAAI,IAAK,CAAA,MAAA,EAAa,IAAA,CAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AAAA,KAC/B,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAI,WAAW,IAAM,EAAA;AACnB,IAAI,IAAA,IAAA,KAAS,MAAU,IAAA,IAAA,KAAS,aAAe,EAAA;AAC7C,MAAA,MAAM,IAAI,YAAA;AAAA,QACR,qFACE,GAAA,IAAA;AAAA,QACF,mBAAA;AAAA,OACF,CAAA;AAAA,KACF;AACA,IAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,IAAA,CAAA,CAAA;AAAA,GACrB;AAAA,EAEA,IAAI,UAAyB,GAAA;AAC3B,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,cAAyB,GAAA;AAC3B,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,cAAa,cAAe,EAAA,CAAA;AAAA,GAC1C;AAAA,EAEA,IAAI,0BAAqC,GAAA;AACvC,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,2BAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,2BAA2B,KAAO,EAAA;AACpC,IAAM,MAAA,MAAA,GAAS,MAAO,CAAA,KAAK,CAAK,IAAA,CAAA,CAAA;AAChC,IAAA,YAAA,CAAA,IAAA,EAAK,2BAA8B,EAAA,MAAA,CAAA,CAAA;AACnC,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,8BAA8B,MAAM,CAAA,CAAA;AAAA,GACxD;AAAA,EAEA,IAAI,EAAoB,GAAA;AACtB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,GAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,KAAgB,GAAA;AAClB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,iBAAmC,GAAA;AACrC,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,cAAgC,GAAA;AAClC,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,UAAsB,GAAA;AACxB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,OAAmB,GAAA;AACrB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,QAAmB,GAAA;AACrB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,UAA6C,GAAA;AAC/C,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,KAAK,IAAY,EAAA;AACf,IAAI,IAAA,YAAA,CAAA,IAAA,EAAK,iBAAgB,MAAQ,EAAA;AAC/B,MAAA,MAAM,IAAIC,2BAAW;AAAA,QACnB,uFAAA;AAAA,OACF,CAAA;AAAA,KACF;AAGA,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,MAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,YAAY,IAAI,CAAA,CAAA;AAAA,KACpC,MAAA,IAAW,gBAAgB,IAAM,EAAA;AAC/B,MAAA,IAAA,CAAK,WAAY,EAAA,CAAE,IAAK,CAAA,CAAC,EAAO,KAAA;AAC9B,QAAI,IAAA,OAAA,EAAS,UAAU,GAAK,EAAA;AAC1B,UAAA,YAAA,CAAA,IAAA,EAAK,YAAa,CAAA,CAAA,iBAAA,CAAkB,MAAO,CAAA,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AAAA,SAC9C,MAAA;AACL,UAAA,YAAA,CAAA,IAAA,EAAK,YAAa,CAAA,CAAA,iBAAA,CAAkB,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA,CAAA;AAAA,SACxD;AAAA,OACD,CAAA,CAAA;AAAA,KACH,MAAA,IAAW,gBAAgB,UAAY,EAAA;AACrC,MAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,kBAAkB,IAAI,CAAA,CAAA;AAAA,KACnC,MAAA;AACL,MAAI,IAAA,OAAA,EAAS,UAAU,GAAK,EAAA;AAC1B,QAAA,YAAA,CAAA,IAAA,EAAK,YAAa,CAAA,CAAA,iBAAA,CAAkB,MAAO,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,OAChD,MAAA;AACL,QAAA,YAAA,CAAA,IAAA,EAAK,YAAa,CAAA,CAAA,iBAAA,CAAkB,IAAI,UAAA,CAAW,IAAI,CAAC,CAAA,CAAA;AAAA,OAC1D;AAAA,KACF;AAAA,GACF;AAAA,EAEA,KAAc,GAAA;AACZ,IAAA,YAAA,CAAA,IAAA,EAAK,eAAkB,EAAA,IAAA,CAAA,CAAA;AACvB,IAAA,YAAA,CAAa,MAAM;AACjB,MAAA,YAAA,CAAA,IAAA,EAAK,cAAa,KAAM,EAAA,CAAA;AAAA,KACzB,CAAA,CAAA;AAAA,GACH;AACF,CAAA;AAvME,YAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,WAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,2BAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,WAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,kBAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,eAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,WAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,GAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,MAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,SAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAEA,eAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
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';\nimport { RTCErrorEvent } from './Events';\n\nexport default class RTCDataChannel extends EventTarget implements globalThis.RTCDataChannel {\n #dataChannel: DataChannel;\n #readyState: globalThis.RTCDataChannelState;\n #bufferedAmountLowThreshold: number;\n #binaryType: BinaryType;\n #maxPacketLifeTime: number | null;\n #maxRetransmits: number | null;\n #negotiated: boolean;\n #ordered: boolean;\n #id: number;\n #label: string;\n #protocol: string;\n\n #closeRequested = false;\n\n // events\n onbufferedamountlow: globalThis.RTCDataChannel['onbufferedamountlow'] = null;\n onclose: globalThis.RTCDataChannel['onclose'] = null;\n onclosing: globalThis.RTCDataChannel['onclosing'] = null;\n onerror: globalThis.RTCDataChannel['onerror'] = null;\n onmessage: globalThis.RTCDataChannel['onmessage'] = null;\n onopen: globalThis.RTCDataChannel['onopen'] = null;\n\n constructor(dataChannel: DataChannel, opts: globalThis.RTCDataChannelInit = {}) {\n super();\n\n this.#dataChannel = dataChannel;\n this.#binaryType = 'arraybuffer';\n this.#readyState = this.#dataChannel.isOpen() ? 'open' : 'connecting';\n this.#bufferedAmountLowThreshold = 0;\n this.#maxPacketLifeTime = opts.maxPacketLifeTime ?? null;\n this.#maxRetransmits = opts.maxRetransmits ?? null;\n this.#negotiated = opts.negotiated ?? false;\n this.#ordered = opts.ordered ?? true;\n this.#id = this.#dataChannel.getId();\n this.#label = this.#dataChannel.getLabel();\n this.#protocol = this.#dataChannel.getProtocol();\n\n // forward dataChannel events\n this.#dataChannel.onOpen(() => {\n this.#readyState = 'open';\n this.dispatchEvent(new Event('open', {}));\n });\n\n this.#dataChannel.onClosed(() => {\n // 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 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((message) => {\n if (typeof message === 'string') {\n this.dispatchEvent(new MessageEvent('message', { data: message }));\n return;\n }\n\n let data: Blob | ArrayBuffer;\n\n if (message instanceof ArrayBuffer) {\n data = message;\n } else {\n data = message.buffer;\n\n if (message.byteOffset !== 0 || message.byteLength !== message.buffer.byteLength) {\n // message is view on underlying buffer, must create new\n // ArrayBuffer that only contains message data\n data = new ArrayBuffer(message.byteLength);\n new Uint8Array(data, 0, message.byteLength).set(message);\n }\n }\n\n if (this.#binaryType === 'blob') {\n data = new Blob([data]);\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 as RTCErrorEvent);\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 : \" +\n type,\n 'TypeMismatchError',\n );\n }\n this.#binaryType = type;\n }\n\n get binaryType(): BinaryType {\n return this.#binaryType;\n }\n\n get bufferedAmount(): number {\n return this.#dataChannel.bufferedAmount();\n }\n\n get bufferedAmountLowThreshold(): number {\n return this.#bufferedAmountLowThreshold;\n }\n\n set bufferedAmountLowThreshold(value) {\n const number = Number(value) || 0;\n this.#bufferedAmountLowThreshold = number;\n this.#dataChannel.setBufferedAmountLowThreshold(number);\n }\n\n get id(): number | null {\n return this.#id;\n }\n\n get label(): string {\n return this.#label;\n }\n\n get maxPacketLifeTime(): number | null {\n return this.#maxPacketLifeTime;\n }\n\n get maxRetransmits(): number | null {\n return this.#maxRetransmits;\n }\n\n get negotiated(): boolean {\n return this.#negotiated;\n }\n\n get ordered(): boolean {\n return this.#ordered;\n }\n\n get protocol(): string {\n return this.#protocol;\n }\n\n get readyState(): globalThis.RTCDataChannelState {\n return this.#readyState;\n }\n\n send(data): void {\n if (this.#readyState !== 'open') {\n throw new exceptions.InvalidStateError(\n \"Failed to execute 'send' on 'RTCDataChannel': RTCDataChannel.readyState is not 'open'\",\n );\n }\n\n // Needs network error, type error implemented\n if (typeof data === 'string') {\n this.#dataChannel.sendMessage(data);\n } else if (data instanceof Blob) {\n data.arrayBuffer().then((ab) => {\n if (process?.versions?.bun) {\n this.#dataChannel.sendMessageBinary(Buffer.from(ab));\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(ab));\n }\n });\n } else if (data instanceof Uint8Array) {\n this.#dataChannel.sendMessageBinary(data);\n } else {\n if (process?.versions?.bun) {\n this.#dataChannel.sendMessageBinary(Buffer.from(data));\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(data));\n }\n }\n }\n\n close(): void {\n this.#closeRequested = true;\n setImmediate(() => {\n this.#dataChannel.close();\n });\n }\n}\n"],"names":["RTCErrorEvent","exceptions.InvalidStateError"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTCDtlsTransport.cjs","sources":["../../../src/polyfill/RTCDtlsTransport.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RTCIceTransport from './RTCIceTransport';\nimport RTCPeerConnection from './RTCPeerConnection';\n\nexport default class RTCDtlsTransport extends EventTarget implements globalThis.RTCDtlsTransport {\n #pc: RTCPeerConnection = null;\n #iceTransport = null;\n\n onstatechange: globalThis.RTCDtlsTransport['onstatechange'] = null;\n onerror: globalThis.RTCDtlsTransport['onstatechange'] = null;\n\n constructor(init: { pc: RTCPeerConnection }) {\n super();\n this.#pc = init.pc;\n\n this.#iceTransport = new RTCIceTransport({\n pc: init.pc
|
|
1
|
+
{"version":3,"file":"RTCDtlsTransport.cjs","sources":["../../../src/polyfill/RTCDtlsTransport.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RTCIceTransport from './RTCIceTransport';\nimport RTCPeerConnection from './RTCPeerConnection';\n\nexport default class RTCDtlsTransport extends EventTarget implements globalThis.RTCDtlsTransport {\n #pc: RTCPeerConnection = null;\n #iceTransport = null;\n\n onstatechange: globalThis.RTCDtlsTransport['onstatechange'] = null;\n onerror: globalThis.RTCDtlsTransport['onstatechange'] = null;\n\n constructor(init: { pc: RTCPeerConnection }) {\n super();\n this.#pc = init.pc;\n\n this.#iceTransport = new RTCIceTransport({\n pc: init.pc,\n });\n\n // forward peerConnection events\n this.#pc.addEventListener('connectionstatechange', () => {\n const e = new Event('statechange');\n this.dispatchEvent(e);\n this.onstatechange?.(e);\n });\n }\n\n get iceTransport(): globalThis.RTCIceTransport {\n return this.#iceTransport;\n }\n\n get state(): globalThis.RTCDtlsTransportState {\n // reduce state from new, connecting, connected, disconnected, failed, closed, unknown\n // to RTCDtlsTRansport states new, connecting, connected, closed, failed\n let state = this.#pc ? this.#pc.connectionState : 'new';\n if (state === 'disconnected') {\n state = 'closed';\n }\n return state;\n }\n\n getRemoteCertificates(): ArrayBuffer[] {\n // TODO: implement\n return [new ArrayBuffer(0)];\n }\n}\n"],"names":["RTCIceTransport"],"mappings":";;;;;;;;;;;;;;;;AAAA,IAAA,GAAA,EAAA,aAAA,CAAA;AAIA,MAAqB,yBAAyB,WAAmD,CAAA;AAAA,EAO/F,YAAY,IAAiC,EAAA;AAC3C,IAAM,KAAA,EAAA,CAAA;AAPR,IAAyB,YAAA,CAAA,IAAA,EAAA,GAAA,EAAA,IAAA,CAAA,CAAA;AACzB,IAAgB,YAAA,CAAA,IAAA,EAAA,aAAA,EAAA,IAAA,CAAA,CAAA;AAEhB,IAA8D,aAAA,CAAA,IAAA,EAAA,eAAA,EAAA,IAAA,CAAA,CAAA;AAC9D,IAAwD,aAAA,CAAA,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AAItD,IAAA,YAAA,CAAA,IAAA,EAAK,KAAM,IAAK,CAAA,EAAA,CAAA,CAAA;AAEhB,IAAK,YAAA,CAAA,IAAA,EAAA,aAAA,EAAgB,IAAIA,uBAAgB,CAAA;AAAA,MACvC,IAAI,IAAK,CAAA,EAAA;AAAA,KACV,CAAA,CAAA,CAAA;AAGD,IAAK,YAAA,CAAA,IAAA,EAAA,GAAA,CAAA,CAAI,gBAAiB,CAAA,uBAAA,EAAyB,MAAM;AACvD,MAAM,MAAA,CAAA,GAAI,IAAI,KAAA,CAAM,aAAa,CAAA,CAAA;AACjC,MAAA,IAAA,CAAK,cAAc,CAAC,CAAA,CAAA;AACpB,MAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA,CAAA;AAAA,KACvB,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAI,YAA2C,GAAA;AAC7C,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,KAA0C,GAAA;AAG5C,IAAA,IAAI,KAAQ,GAAA,YAAA,CAAA,IAAA,EAAK,GAAM,CAAA,GAAA,YAAA,CAAA,IAAA,EAAK,KAAI,eAAkB,GAAA,KAAA,CAAA;AAClD,IAAA,IAAI,UAAU,cAAgB,EAAA;AAC5B,MAAQ,KAAA,GAAA,QAAA,CAAA;AAAA,KACV;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA,EAEA,qBAAuC,GAAA;AAErC,IAAA,OAAO,CAAC,IAAI,WAAY,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,GAC5B;AACF,CAAA;AAxCE,GAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,aAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTCSctpTransport.cjs","sources":["../../../src/polyfill/RTCSctpTransport.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RTCDtlsTransport from './RTCDtlsTransport';\nimport RTCPeerConnection from './RTCPeerConnection';\n\nexport default class RTCSctpTransport extends EventTarget implements globalThis.RTCSctpTransport {\n #pc: RTCPeerConnection = null;\n #transport: globalThis.RTCDtlsTransport = null;\n\n onstatechange: globalThis.RTCSctpTransport['onstatechange'] = null;\n\n constructor(initial: { pc: RTCPeerConnection }) {\n super();\n this.#pc = initial.pc;\n\n this.#transport = new RTCDtlsTransport({\n pc: initial.pc
|
|
1
|
+
{"version":3,"file":"RTCSctpTransport.cjs","sources":["../../../src/polyfill/RTCSctpTransport.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RTCDtlsTransport from './RTCDtlsTransport';\nimport RTCPeerConnection from './RTCPeerConnection';\n\nexport default class RTCSctpTransport extends EventTarget implements globalThis.RTCSctpTransport {\n #pc: RTCPeerConnection = null;\n #transport: globalThis.RTCDtlsTransport = null;\n\n onstatechange: globalThis.RTCSctpTransport['onstatechange'] = null;\n\n constructor(initial: { pc: RTCPeerConnection }) {\n super();\n this.#pc = initial.pc;\n\n this.#transport = new RTCDtlsTransport({\n pc: initial.pc,\n });\n\n this.#pc.addEventListener('connectionstatechange', () => {\n const e = new Event('statechange');\n this.dispatchEvent(e);\n this.onstatechange?.(e);\n });\n }\n\n get maxChannels(): number | null {\n if (this.state !== 'connected') return null;\n return this.#pc.ext_maxDataChannelId;\n }\n\n get maxMessageSize(): number {\n if (this.state !== 'connected') return null;\n return this.#pc?.ext_maxMessageSize ?? 65536;\n }\n\n get state(): globalThis.RTCSctpTransportState {\n // reduce state from new, connecting, connected, disconnected, failed, closed, unknown\n // to RTCSctpTransport states connecting, connected, closed\n let state = this.#pc.connectionState;\n if (state === 'new' || state === 'connecting') {\n state = 'connecting';\n } else if (state === 'disconnected' || state === 'failed' || state === 'closed') {\n state = 'closed';\n }\n return state;\n }\n\n get transport(): globalThis.RTCDtlsTransport {\n return this.#transport;\n }\n}\n"],"names":["RTCDtlsTransport"],"mappings":";;;;;;;;;;;;;;;;AAAA,IAAA,GAAA,EAAA,UAAA,CAAA;AAIA,MAAqB,yBAAyB,WAAmD,CAAA;AAAA,EAM/F,YAAY,OAAoC,EAAA;AAC9C,IAAM,KAAA,EAAA,CAAA;AANR,IAAyB,YAAA,CAAA,IAAA,EAAA,GAAA,EAAA,IAAA,CAAA,CAAA;AACzB,IAA0C,YAAA,CAAA,IAAA,EAAA,UAAA,EAAA,IAAA,CAAA,CAAA;AAE1C,IAA8D,aAAA,CAAA,IAAA,EAAA,eAAA,EAAA,IAAA,CAAA,CAAA;AAI5D,IAAA,YAAA,CAAA,IAAA,EAAK,KAAM,OAAQ,CAAA,EAAA,CAAA,CAAA;AAEnB,IAAK,YAAA,CAAA,IAAA,EAAA,UAAA,EAAa,IAAIA,wBAAiB,CAAA;AAAA,MACrC,IAAI,OAAQ,CAAA,EAAA;AAAA,KACb,CAAA,CAAA,CAAA;AAED,IAAK,YAAA,CAAA,IAAA,EAAA,GAAA,CAAA,CAAI,gBAAiB,CAAA,uBAAA,EAAyB,MAAM;AACvD,MAAM,MAAA,CAAA,GAAI,IAAI,KAAA,CAAM,aAAa,CAAA,CAAA;AACjC,MAAA,IAAA,CAAK,cAAc,CAAC,CAAA,CAAA;AACpB,MAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA,CAAA;AAAA,KACvB,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAI,WAA6B,GAAA;AAC/B,IAAI,IAAA,IAAA,CAAK,KAAU,KAAA,WAAA,EAAoB,OAAA,IAAA,CAAA;AACvC,IAAA,OAAO,mBAAK,GAAI,CAAA,CAAA,oBAAA,CAAA;AAAA,GAClB;AAAA,EAEA,IAAI,cAAyB,GAAA;AAC3B,IAAI,IAAA,IAAA,CAAK,KAAU,KAAA,WAAA,EAAoB,OAAA,IAAA,CAAA;AACvC,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,MAAK,kBAAsB,IAAA,KAAA,CAAA;AAAA,GACzC;AAAA,EAEA,IAAI,KAA0C,GAAA;AAG5C,IAAI,IAAA,KAAA,GAAQ,mBAAK,GAAI,CAAA,CAAA,eAAA,CAAA;AACrB,IAAI,IAAA,KAAA,KAAU,KAAS,IAAA,KAAA,KAAU,YAAc,EAAA;AAC7C,MAAQ,KAAA,GAAA,YAAA,CAAA;AAAA,eACC,KAAU,KAAA,cAAA,IAAkB,KAAU,KAAA,QAAA,IAAY,UAAU,QAAU,EAAA;AAC/E,MAAQ,KAAA,GAAA,QAAA,CAAA;AAAA,KACV;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA,EAEA,IAAI,SAAyC,GAAA;AAC3C,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AAAA,GACd;AACF,CAAA;AA7CE,GAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,UAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
package/dist/esm/lib/index.mjs
CHANGED
|
@@ -23,6 +23,7 @@ const Video = nodeDataChannel.Video;
|
|
|
23
23
|
const Track = nodeDataChannel.Track;
|
|
24
24
|
const DataChannel = nodeDataChannel.DataChannel;
|
|
25
25
|
const PeerConnection = nodeDataChannel.PeerConnection;
|
|
26
|
+
const IceUdpMuxListener = nodeDataChannel.IceUdpMuxListener;
|
|
26
27
|
const RtcpReceivingSession = nodeDataChannel.RtcpReceivingSession;
|
|
27
28
|
const DataChannelStream = DataChannelStream$1;
|
|
28
29
|
var n = {
|
|
@@ -39,8 +40,9 @@ var n = {
|
|
|
39
40
|
PeerConnection,
|
|
40
41
|
WebSocket,
|
|
41
42
|
WebSocketServer,
|
|
42
|
-
DataChannelStream
|
|
43
|
+
DataChannelStream,
|
|
44
|
+
IceUdpMuxListener
|
|
43
45
|
};
|
|
44
46
|
|
|
45
|
-
export { Audio, DataChannel, DataChannelStream, PeerConnection, RtcpReceivingSession, Track, Video, WebSocket, WebSocketServer, cleanup, n as default, getLibraryVersion, initLogger, preload, setSctpSettings };
|
|
47
|
+
export { Audio, DataChannel, DataChannelStream, IceUdpMuxListener, PeerConnection, RtcpReceivingSession, Track, Video, WebSocket, WebSocketServer, cleanup, n as default, getLibraryVersion, initLogger, preload, setSctpSettings };
|
|
46
48
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../src/lib/index.ts"],"sourcesContent":["import nodeDataChannel from './node-datachannel';\nimport _DataChannelStream from './datachannel-stream';\nimport { WebSocketServer } from './websocket-server';\nimport {\n Channel,\n DataChannelInitConfig,\n DescriptionType,\n Direction,\n LogLevel,\n RtcConfig,\n RTCIceConnectionState,\n RTCIceGatheringState,\n RTCPeerConnectionState,\n RTCSignalingState,\n SctpSettings,\n SelectedCandidateInfo,\n} from './types';\nimport { WebSocket } from './websocket';\n\nexport function preload(): void {\n nodeDataChannel.preload();\n}\nexport function initLogger(level: LogLevel): void {\n nodeDataChannel.initLogger(level);\n}\nexport function cleanup(): void {\n nodeDataChannel.cleanup();\n}\nexport function setSctpSettings(settings: SctpSettings): void {\n nodeDataChannel.setSctpSettings(settings);\n}\nexport function getLibraryVersion(): string {\n return nodeDataChannel.getLibraryVersion();\n}\n\nexport interface Audio {\n addAudioCodec(payloadType: number, codec: string, profile?: string): void;\n addOpusCodec(payloadType: number, profile?: string): string;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Audio: {\n new (mid: string, dir: Direction): Audio;\n} = nodeDataChannel.Audio;\n\nexport interface Video {\n addVideoCodec(payloadType: number, codec: string, profile?: string): void;\n addH264Codec(payloadType: number, profile?: string): void;\n addVP8Codec(payloadType: number): void;\n addVP9Codec(payloadType: number): void;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Video: {\n new (mid: string, dir: Direction): Video;\n} = nodeDataChannel.Video;\n\nexport interface Track {\n direction(): Direction;\n mid(): string;\n type(): string;\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer): boolean;\n isOpen(): boolean;\n isClosed(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n requestBitrate(bitRate: number): boolean;\n setBufferedAmountLowThreshold(newSize: number): void;\n requestKeyframe(): boolean;\n setMediaHandler(handler: RtcpReceivingSession): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onMessage(cb: (msg: Buffer) => void): void;\n}\nexport const Track: {\n new (): Track;\n} = nodeDataChannel.Track;\n\nexport interface DataChannel extends Channel {\n getLabel(): string;\n getId(): number;\n getProtocol(): string;\n\n // Channel implementation\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer | Uint8Array): boolean;\n isOpen(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n setBufferedAmountLowThreshold(newSize: number): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onBufferedAmountLow(cb: () => void): void;\n onMessage(cb: (msg: string | Buffer | ArrayBuffer) => void): void;\n}\nexport const DataChannel: {\n // DataChannel implementation\n} = nodeDataChannel.DataChannel;\n\nexport interface PeerConnection {\n close(): void;\n setLocalDescription(type?: DescriptionType): void;\n setRemoteDescription(sdp: string, type: DescriptionType): void;\n localDescription(): { type: DescriptionType; sdp: string } | null;\n remoteDescription(): { type: DescriptionType; sdp: string } | null;\n addRemoteCandidate(candidate: string, mid: string): void;\n createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;\n addTrack(media: Video | Audio): Track;\n hasMedia(): boolean;\n state(): RTCPeerConnectionState;\n iceState(): RTCIceConnectionState;\n signalingState(): RTCSignalingState;\n gatheringState(): RTCIceGatheringState;\n onLocalDescription(cb: (sdp: string, type: DescriptionType) => void): void;\n onLocalCandidate(cb: (candidate: string, mid: string) => void): void;\n onStateChange(cb: (state: string) => void): void;\n onIceStateChange(cb: (state: string) => void): void;\n onSignalingStateChange(cb: (state: string) => void): void;\n onGatheringStateChange(cb: (state: string) => void): void;\n onDataChannel(cb: (dc: DataChannel) => void): void;\n onTrack(cb: (track: Track) => void): void;\n bytesSent(): number;\n bytesReceived(): number;\n rtt(): number;\n getSelectedCandidatePair(): {\n local: SelectedCandidateInfo;\n remote: SelectedCandidateInfo;\n } | null;\n maxDataChannelId(): number;\n maxMessageSize(): number;\n}\nexport const PeerConnection: {\n new (peerName: string, config: RtcConfig): PeerConnection;\n} = nodeDataChannel.PeerConnection;\n\nexport interface RtcpReceivingSession {}\n\nexport const RtcpReceivingSession: {\n new (): RtcpReceivingSession;\n} = nodeDataChannel.RtcpReceivingSession;\n\nexport { WebSocketServer } from './websocket-server';\nexport { WebSocket } from './websocket';\n\nexport const DataChannelStream = _DataChannelStream;\n\nexport default {\n initLogger,\n cleanup,\n preload,\n setSctpSettings,\n getLibraryVersion,\n RtcpReceivingSession,\n Track,\n Video,\n Audio,\n DataChannel,\n PeerConnection,\n WebSocket,\n WebSocketServer,\n DataChannelStream,\n};\n\n// Types\n// https://github.com/murat-dogan/node-datachannel/issues/300\nexport * from './types';\n"],"names":["_DataChannelStream"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/lib/index.ts"],"sourcesContent":["import nodeDataChannel from './node-datachannel';\nimport _DataChannelStream from './datachannel-stream';\nimport { WebSocketServer } from './websocket-server';\nimport {\n Channel,\n DataChannelInitConfig,\n DescriptionType,\n Direction,\n LogLevel,\n RtcConfig,\n RTCIceConnectionState,\n RTCIceGatheringState,\n RTCPeerConnectionState,\n RTCSignalingState,\n SctpSettings,\n SelectedCandidateInfo,\n} from './types';\nimport { WebSocket } from './websocket';\nimport type { CertificateFingerprint, IceUdpMuxRequest, LocalDescriptionInit } from './types';\n\nexport function preload(): void {\n nodeDataChannel.preload();\n}\nexport function initLogger(level: LogLevel): void {\n nodeDataChannel.initLogger(level);\n}\nexport function cleanup(): void {\n nodeDataChannel.cleanup();\n}\nexport function setSctpSettings(settings: SctpSettings): void {\n nodeDataChannel.setSctpSettings(settings);\n}\nexport function getLibraryVersion(): string {\n return nodeDataChannel.getLibraryVersion();\n}\n\nexport interface Audio {\n addAudioCodec(payloadType: number, codec: string, profile?: string): void;\n addOpusCodec(payloadType: number, profile?: string): string;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Audio: {\n new (mid: string, dir: Direction): Audio;\n} = nodeDataChannel.Audio;\n\nexport interface Video {\n addVideoCodec(payloadType: number, codec: string, profile?: string): void;\n addH264Codec(payloadType: number, profile?: string): void;\n addVP8Codec(payloadType: number): void;\n addVP9Codec(payloadType: number): void;\n direction(): Direction;\n generateSdp(eol: string, addr: string, port: number): string;\n mid(): string;\n setDirection(dir: Direction): void;\n description(): string;\n removeFormat(fmt: string): void;\n addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;\n removeSSRC(ssrc: number): void;\n replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;\n hasSSRC(ssrc: number): boolean;\n getSSRCs(): number[];\n getCNameForSsrc(ssrc: number): string;\n setBitrate(bitRate: number): void;\n getBitrate(): number;\n hasPayloadType(payloadType: number): boolean;\n addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;\n addRTPMap(): void;\n parseSdpLine(line: string): void;\n}\nexport const Video: {\n new (mid: string, dir: Direction): Video;\n} = nodeDataChannel.Video;\n\nexport interface Track {\n direction(): Direction;\n mid(): string;\n type(): string;\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer): boolean;\n isOpen(): boolean;\n isClosed(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n requestBitrate(bitRate: number): boolean;\n setBufferedAmountLowThreshold(newSize: number): void;\n requestKeyframe(): boolean;\n setMediaHandler(handler: RtcpReceivingSession): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onMessage(cb: (msg: Buffer) => void): void;\n}\nexport const Track: {\n new (): Track;\n} = nodeDataChannel.Track;\n\nexport interface DataChannel extends Channel {\n getLabel(): string;\n getId(): number;\n getProtocol(): string;\n\n // Channel implementation\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(buffer: Buffer | Uint8Array): boolean;\n isOpen(): boolean;\n bufferedAmount(): number;\n maxMessageSize(): number;\n setBufferedAmountLowThreshold(newSize: number): void;\n onOpen(cb: () => void): void;\n onClosed(cb: () => void): void;\n onError(cb: (err: string) => void): void;\n onBufferedAmountLow(cb: () => void): void;\n onMessage(cb: (msg: string | Buffer | ArrayBuffer) => void): void;\n}\nexport const DataChannel: {\n // DataChannel implementation\n} = nodeDataChannel.DataChannel;\n\nexport interface PeerConnection {\n close(): void;\n setLocalDescription(type?: DescriptionType, init?: LocalDescriptionInit): void;\n setRemoteDescription(sdp: string, type: DescriptionType): void;\n localDescription(): { type: DescriptionType; sdp: string } | null;\n remoteDescription(): { type: DescriptionType; sdp: string } | null;\n remoteFingerprint(): CertificateFingerprint;\n addRemoteCandidate(candidate: string, mid: string): void;\n createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;\n addTrack(media: Video | Audio): Track;\n hasMedia(): boolean;\n state(): RTCPeerConnectionState;\n iceState(): RTCIceConnectionState;\n signalingState(): RTCSignalingState;\n gatheringState(): RTCIceGatheringState;\n onLocalDescription(cb: (sdp: string, type: DescriptionType) => void): void;\n onLocalCandidate(cb: (candidate: string, mid: string) => void): void;\n onStateChange(cb: (state: string) => void): void;\n onIceStateChange(cb: (state: string) => void): void;\n onSignalingStateChange(cb: (state: string) => void): void;\n onGatheringStateChange(cb: (state: string) => void): void;\n onDataChannel(cb: (dc: DataChannel) => void): void;\n onTrack(cb: (track: Track) => void): void;\n bytesSent(): number;\n bytesReceived(): number;\n rtt(): number;\n getSelectedCandidatePair(): {\n local: SelectedCandidateInfo;\n remote: SelectedCandidateInfo;\n } | null;\n maxDataChannelId(): number;\n maxMessageSize(): number;\n}\nexport const PeerConnection: {\n new (peerName: string, config: RtcConfig): PeerConnection;\n} = nodeDataChannel.PeerConnection;\n\nexport interface IceUdpMuxListener {\n address?: string;\n port: number;\n stop(): void;\n onUnhandledStunRequest(cb: (req: IceUdpMuxRequest) => void): void;\n}\nexport const IceUdpMuxListener: {\n new (port: number, address?: string): IceUdpMuxListener;\n} = nodeDataChannel.IceUdpMuxListener;\n\nexport interface RtcpReceivingSession {}\n\nexport const RtcpReceivingSession: {\n new (): RtcpReceivingSession;\n} = nodeDataChannel.RtcpReceivingSession;\n\nexport { WebSocketServer } from './websocket-server';\nexport { WebSocket } from './websocket';\n\nexport const DataChannelStream = _DataChannelStream;\n\nexport default {\n initLogger,\n cleanup,\n preload,\n setSctpSettings,\n getLibraryVersion,\n RtcpReceivingSession,\n Track,\n Video,\n Audio,\n DataChannel,\n PeerConnection,\n WebSocket,\n WebSocketServer,\n DataChannelStream,\n IceUdpMuxListener,\n};\n\n// Types\n// https://github.com/murat-dogan/node-datachannel/issues/300\nexport * from './types';\n"],"names":["_DataChannelStream"],"mappings":";;;;;AAoBO,SAAS,OAAgB,GAAA;AAC9B,EAAA,eAAA,CAAgB,OAAQ,EAAA,CAAA;AAC1B,CAAA;AACO,SAAS,WAAW,KAAuB,EAAA;AAChD,EAAA,eAAA,CAAgB,WAAW,KAAK,CAAA,CAAA;AAClC,CAAA;AACO,SAAS,OAAgB,GAAA;AAC9B,EAAA,eAAA,CAAgB,OAAQ,EAAA,CAAA;AAC1B,CAAA;AACO,SAAS,gBAAgB,QAA8B,EAAA;AAC5D,EAAA,eAAA,CAAgB,gBAAgB,QAAQ,CAAA,CAAA;AAC1C,CAAA;AACO,SAAS,iBAA4B,GAAA;AAC1C,EAAA,OAAO,gBAAgB,iBAAkB,EAAA,CAAA;AAC3C,CAAA;AAwBO,MAAM,QAET,eAAgB,CAAA,MAAA;AA0Bb,MAAM,QAET,eAAgB,CAAA,MAAA;AAsBb,MAAM,QAET,eAAgB,CAAA,MAAA;AAqBb,MAAM,cAET,eAAgB,CAAA,YAAA;AAmCb,MAAM,iBAET,eAAgB,CAAA,eAAA;AAQb,MAAM,oBAET,eAAgB,CAAA,kBAAA;AAIb,MAAM,uBAET,eAAgB,CAAA,qBAAA;AAKb,MAAM,iBAAoB,GAAAA,oBAAA;AAEjC,QAAe;AAAA,EACb,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Events.mjs","sources":["../../../src/polyfill/Events.ts"],"sourcesContent":["import RTCDataChannel from './RTCDataChannel';\nimport RTCError from './RTCError';\n\nexport class RTCPeerConnectionIceEvent
|
|
1
|
+
{"version":3,"file":"Events.mjs","sources":["../../../src/polyfill/Events.ts"],"sourcesContent":["import RTCDataChannel from './RTCDataChannel';\nimport RTCError from './RTCError';\n\nexport class RTCPeerConnectionIceEvent\n extends Event\n implements globalThis.RTCPeerConnectionIceEvent\n{\n #candidate: globalThis.RTCIceCandidate;\n\n constructor(candidate: globalThis.RTCIceCandidate) {\n super('icecandidate');\n\n this.#candidate = candidate;\n }\n\n get candidate(): globalThis.RTCIceCandidate {\n return this.#candidate;\n }\n\n get url(): string {\n return '';\n }\n}\n\nexport class RTCDataChannelEvent extends Event implements globalThis.RTCDataChannelEvent {\n #channel: RTCDataChannel;\n\n constructor(type: string = 'datachannel', eventInitDict: globalThis.RTCDataChannelEventInit) {\n super(type);\n\n if (arguments.length === 0)\n throw new TypeError(\n `Failed to construct 'RTCDataChannelEvent': 2 arguments required, but only ${arguments.length} present.`,\n );\n if (typeof eventInitDict !== 'object')\n throw new TypeError(\n \"Failed to construct 'RTCDataChannelEvent': The provided value is not of type 'RTCDataChannelEventInit'.\",\n );\n if (!eventInitDict.channel)\n throw new TypeError(\n \"Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Required member is undefined.\",\n );\n if (eventInitDict.channel.constructor !== RTCDataChannel)\n throw new TypeError(\n \"Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Failed to convert value to 'RTCDataChannel'.\",\n );\n\n this.#channel = eventInitDict?.channel;\n }\n\n get channel(): RTCDataChannel {\n return this.#channel;\n }\n}\n\nexport class RTCErrorEvent extends Event implements globalThis.RTCErrorEvent {\n #error: RTCError;\n constructor(type: string, init: globalThis.RTCErrorEventInit) {\n if (arguments.length < 2)\n throw new TypeError(\n `Failed to construct 'RTCErrorEvent': 2 arguments required, but only ${arguments.length} present.`,\n );\n if (typeof init !== 'object')\n throw new TypeError(\n \"Failed to construct 'RTCErrorEvent': The provided value is not of type 'RTCErrorEventInit'.\",\n );\n if (!init.error)\n throw new TypeError(\n \"Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Required member is undefined.\",\n );\n if (init.error.constructor !== RTCError)\n throw new TypeError(\n \"Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Failed to convert value to 'RTCError'.\",\n );\n super(type || 'error');\n this.#error = init.error;\n }\n\n get error(): RTCError {\n return this.#error;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;AAAA,IAAA,UAAA,EAAA,QAAA,EAAA,MAAA,CAAA;AAGO,MAAM,kCACH,KAEV,CAAA;AAAA,EAGE,YAAY,SAAuC,EAAA;AACjD,IAAA,KAAA,CAAM,cAAc,CAAA,CAAA;AAHtB,IAAA,YAAA,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AAKE,IAAA,YAAA,CAAA,IAAA,EAAK,UAAa,EAAA,SAAA,CAAA,CAAA;AAAA,GACpB;AAAA,EAEA,IAAI,SAAwC,GAAA;AAC1C,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,GAAc,GAAA;AAChB,IAAO,OAAA,EAAA,CAAA;AAAA,GACT;AACF,CAAA;AAfE,UAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAiBK,MAAM,4BAA4B,KAAgD,CAAA;AAAA,EAGvF,WAAA,CAAY,IAAe,GAAA,aAAA,EAAe,aAAmD,EAAA;AAC3F,IAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAHZ,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAKE,IAAA,IAAI,UAAU,MAAW,KAAA,CAAA;AACvB,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,CAAA,0EAAA,EAA6E,UAAU,MAAM,CAAA,SAAA,CAAA;AAAA,OAC/F,CAAA;AACF,IAAA,IAAI,OAAO,aAAkB,KAAA,QAAA;AAC3B,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,yGAAA;AAAA,OACF,CAAA;AACF,IAAA,IAAI,CAAC,aAAc,CAAA,OAAA;AACjB,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,gJAAA;AAAA,OACF,CAAA;AACF,IAAI,IAAA,aAAA,CAAc,QAAQ,WAAgB,KAAA,cAAA;AACxC,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,+JAAA;AAAA,OACF,CAAA;AAEF,IAAA,YAAA,CAAA,IAAA,EAAK,UAAW,aAAe,EAAA,OAAA,CAAA,CAAA;AAAA,GACjC;AAAA,EAEA,IAAI,OAA0B,GAAA;AAC5B,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,GACd;AACF,CAAA;AA5BE,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AA8BK,MAAM,sBAAsB,KAA0C,CAAA;AAAA,EAE3E,WAAA,CAAY,MAAc,IAAoC,EAAA;AAC5D,IAAA,IAAI,UAAU,MAAS,GAAA,CAAA;AACrB,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,CAAA,oEAAA,EAAuE,UAAU,MAAM,CAAA,SAAA,CAAA;AAAA,OACzF,CAAA;AACF,IAAA,IAAI,OAAO,IAAS,KAAA,QAAA;AAClB,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,6FAAA;AAAA,OACF,CAAA;AACF,IAAA,IAAI,CAAC,IAAK,CAAA,KAAA;AACR,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,kIAAA;AAAA,OACF,CAAA;AACF,IAAI,IAAA,IAAA,CAAK,MAAM,WAAgB,KAAA,QAAA;AAC7B,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,2IAAA;AAAA,OACF,CAAA;AACF,IAAA,KAAA,CAAM,QAAQ,OAAO,CAAA,CAAA;AAlBvB,IAAA,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAmBE,IAAA,YAAA,CAAA,IAAA,EAAK,QAAS,IAAK,CAAA,KAAA,CAAA,CAAA;AAAA,GACrB;AAAA,EAEA,IAAI,KAAkB,GAAA;AACpB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAAA,GACd;AACF,CAAA;AAzBE,MAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -35,7 +35,7 @@ class RTCDataChannel extends EventTarget {
|
|
|
35
35
|
__publicField(this, "onmessage", null);
|
|
36
36
|
__publicField(this, "onopen", null);
|
|
37
37
|
__privateSet(this, _dataChannel, dataChannel);
|
|
38
|
-
__privateSet(this, _binaryType, "
|
|
38
|
+
__privateSet(this, _binaryType, "arraybuffer");
|
|
39
39
|
__privateSet(this, _readyState, __privateGet(this, _dataChannel).isOpen() ? "open" : "connecting");
|
|
40
40
|
__privateSet(this, _bufferedAmountLowThreshold, 0);
|
|
41
41
|
__privateSet(this, _maxPacketLifeTime, opts.maxPacketLifeTime ?? null);
|
|
@@ -74,10 +74,23 @@ class RTCDataChannel extends EventTarget {
|
|
|
74
74
|
__privateGet(this, _dataChannel).onBufferedAmountLow(() => {
|
|
75
75
|
this.dispatchEvent(new Event("bufferedamountlow"));
|
|
76
76
|
});
|
|
77
|
-
__privateGet(this, _dataChannel).onMessage((
|
|
78
|
-
if (
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
__privateGet(this, _dataChannel).onMessage((message) => {
|
|
78
|
+
if (typeof message === "string") {
|
|
79
|
+
this.dispatchEvent(new MessageEvent("message", { data: message }));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
let data;
|
|
83
|
+
if (message instanceof ArrayBuffer) {
|
|
84
|
+
data = message;
|
|
85
|
+
} else {
|
|
86
|
+
data = message.buffer;
|
|
87
|
+
if (message.byteOffset !== 0 || message.byteLength !== message.buffer.byteLength) {
|
|
88
|
+
data = new ArrayBuffer(message.byteLength);
|
|
89
|
+
new Uint8Array(data, 0, message.byteLength).set(message);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (__privateGet(this, _binaryType) === "blob") {
|
|
93
|
+
data = new Blob([data]);
|
|
81
94
|
}
|
|
82
95
|
this.dispatchEvent(new MessageEvent("message", { data }));
|
|
83
96
|
});
|
|
@@ -1 +1 @@
|
|
|
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';\nimport { RTCErrorEvent } from './Events';\n\nexport default class RTCDataChannel extends EventTarget implements globalThis.RTCDataChannel {\n #dataChannel: DataChannel;\n #readyState: globalThis.RTCDataChannelState;\n #bufferedAmountLowThreshold: number;\n #binaryType: BinaryType;\n #maxPacketLifeTime: number | null;\n #maxRetransmits: number | null;\n #negotiated: boolean;\n #ordered: boolean;\n #id: number;\n #label: string;\n #protocol: string;\n\n #closeRequested = false;\n\n // events\n onbufferedamountlow: globalThis.RTCDataChannel['onbufferedamountlow'] = null;\n onclose: globalThis.RTCDataChannel['onclose'] = null;\n onclosing: globalThis.RTCDataChannel['onclosing'] = null;\n onerror: globalThis.RTCDataChannel['onerror'] = null;\n onmessage: globalThis.RTCDataChannel['onmessage'] = null;\n onopen: globalThis.RTCDataChannel['onopen'] = null;\n\n constructor(dataChannel: DataChannel, opts: globalThis.RTCDataChannelInit = {}) {\n super();\n\n this.#dataChannel = dataChannel;\n this.#binaryType = 'blob';\n this.#readyState = this.#dataChannel.isOpen() ? 'open' : 'connecting';\n this.#bufferedAmountLowThreshold = 0;\n this.#maxPacketLifeTime = opts.maxPacketLifeTime ?? null;\n this.#maxRetransmits = opts.maxRetransmits ?? null;\n this.#negotiated = opts.negotiated ?? false;\n this.#ordered = opts.ordered ?? true;\n this.#id = this.#dataChannel.getId();\n this.#label = this.#dataChannel.getLabel();\n this.#protocol = this.#dataChannel.getProtocol();\n\n // forward dataChannel events\n this.#dataChannel.onOpen(() => {\n this.#readyState = 'open';\n this.dispatchEvent(new Event('open', {}));\n });\n\n this.#dataChannel.onClosed(() => {\n // 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 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') data = data.buffer;\n else 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 as RTCErrorEvent);\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 : \" +\n type,\n 'TypeMismatchError',\n );\n }\n this.#binaryType = type;\n }\n\n get binaryType(): BinaryType {\n return this.#binaryType;\n }\n\n get bufferedAmount(): number {\n return this.#dataChannel.bufferedAmount();\n }\n\n get bufferedAmountLowThreshold(): number {\n return this.#bufferedAmountLowThreshold;\n }\n\n set bufferedAmountLowThreshold(value) {\n const number = Number(value) || 0;\n this.#bufferedAmountLowThreshold = number;\n this.#dataChannel.setBufferedAmountLowThreshold(number);\n }\n\n get id(): number | null {\n return this.#id;\n }\n\n get label(): string {\n return this.#label;\n }\n\n get maxPacketLifeTime(): number | null {\n return this.#maxPacketLifeTime;\n }\n\n get maxRetransmits(): number | null {\n return this.#maxRetransmits;\n }\n\n get negotiated(): boolean {\n return this.#negotiated;\n }\n\n get ordered(): boolean {\n return this.#ordered;\n }\n\n get protocol(): string {\n return this.#protocol;\n }\n\n get readyState(): globalThis.RTCDataChannelState {\n return this.#readyState;\n }\n\n send(data): void {\n if (this.#readyState !== 'open') {\n throw new exceptions.InvalidStateError(\n \"Failed to execute 'send' on 'RTCDataChannel': RTCDataChannel.readyState is not 'open'\",\n );\n }\n\n // Needs network error, type error implemented\n if (typeof data === 'string') {\n this.#dataChannel.sendMessage(data);\n } else if (data instanceof Blob) {\n data.arrayBuffer().then((ab) => {\n if (process?.versions?.bun) {\n this.#dataChannel.sendMessageBinary(Buffer.from(ab));\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(ab));\n }\n });\n } else if (data instanceof Uint8Array) {\n this.#dataChannel.sendMessageBinary(data);\n } else {\n if (process?.versions?.bun) {\n this.#dataChannel.sendMessageBinary(Buffer.from(data));\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(data));\n }\n }\n }\n\n close(): void {\n this.#closeRequested = true;\n setImmediate(() => {\n this.#dataChannel.close();\n });\n }\n}\n"],"names":["exceptions.InvalidStateError"],"mappings":";;;;;;;;;;;;;AAAA,IAAA,YAAA,EAAA,WAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,QAAA,EAAA,GAAA,EAAA,MAAA,EAAA,SAAA,EAAA,eAAA,CAAA;AAKA,MAAqB,uBAAuB,WAAiD,CAAA;AAAA,EAuB3F,WAAY,CAAA,WAAA,EAA0B,IAAsC,GAAA,EAAI,EAAA;AAC9E,IAAM,KAAA,EAAA,CAAA;AAvBR,IAAA,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,2BAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,kBAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,eAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,GAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;AAEA,IAAkB,YAAA,CAAA,IAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA;AAGlB;AAAA,IAAwE,aAAA,CAAA,IAAA,EAAA,qBAAA,EAAA,IAAA,CAAA,CAAA;AACxE,IAAgD,aAAA,CAAA,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AAChD,IAAoD,aAAA,CAAA,IAAA,EAAA,WAAA,EAAA,IAAA,CAAA,CAAA;AACpD,IAAgD,aAAA,CAAA,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AAChD,IAAoD,aAAA,CAAA,IAAA,EAAA,WAAA,EAAA,IAAA,CAAA,CAAA;AACpD,IAA8C,aAAA,CAAA,IAAA,EAAA,QAAA,EAAA,IAAA,CAAA,CAAA;AAK5C,IAAA,YAAA,CAAA,IAAA,EAAK,YAAe,EAAA,WAAA,CAAA,CAAA;AACpB,IAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,MAAA,CAAA,CAAA;AACnB,IAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,YAAA,CAAA,IAAA,EAAK,YAAa,CAAA,CAAA,MAAA,KAAW,MAAS,GAAA,YAAA,CAAA,CAAA;AACzD,IAAA,YAAA,CAAA,IAAA,EAAK,2BAA8B,EAAA,CAAA,CAAA,CAAA;AACnC,IAAK,YAAA,CAAA,IAAA,EAAA,kBAAA,EAAqB,KAAK,iBAAqB,IAAA,IAAA,CAAA,CAAA;AACpD,IAAK,YAAA,CAAA,IAAA,EAAA,eAAA,EAAkB,KAAK,cAAkB,IAAA,IAAA,CAAA,CAAA;AAC9C,IAAK,YAAA,CAAA,IAAA,EAAA,WAAA,EAAc,KAAK,UAAc,IAAA,KAAA,CAAA,CAAA;AACtC,IAAK,YAAA,CAAA,IAAA,EAAA,QAAA,EAAW,KAAK,OAAW,IAAA,IAAA,CAAA,CAAA;AAChC,IAAK,YAAA,CAAA,IAAA,EAAA,GAAA,EAAM,YAAK,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,KAAM,EAAA,CAAA,CAAA;AACnC,IAAK,YAAA,CAAA,IAAA,EAAA,MAAA,EAAS,YAAK,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,QAAS,EAAA,CAAA,CAAA;AACzC,IAAK,YAAA,CAAA,IAAA,EAAA,SAAA,EAAY,YAAK,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,WAAY,EAAA,CAAA,CAAA;AAG/C,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,OAAO,MAAM;AAC7B,MAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,MAAA,CAAA,CAAA;AACnB,MAAA,IAAA,CAAK,cAAc,IAAI,KAAA,CAAM,MAAQ,EAAA,EAAE,CAAC,CAAA,CAAA;AAAA,KACzC,CAAA,CAAA;AAED,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,SAAS,MAAM;AAE/B,MAAI,IAAA,CAAC,mBAAK,eAAiB,CAAA,EAAA;AACzB,QAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,SAAA,CAAA,CAAA;AACnB,QAAA,IAAA,CAAK,aAAc,CAAA,IAAI,KAAM,CAAA,SAAS,CAAC,CAAA,CAAA;AAAA,OACzC;AAEA,MAAA,YAAA,CAAa,MAAM;AACjB,QAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,QAAA,CAAA,CAAA;AACnB,QAAA,IAAA,CAAK,aAAc,CAAA,IAAI,KAAM,CAAA,OAAO,CAAC,CAAA,CAAA;AAAA,OACtC,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAED,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,OAAQ,CAAA,CAAC,GAAQ,KAAA;AACjC,MAAK,IAAA,CAAA,aAAA;AAAA,QACH,IAAI,cAAc,OAAS,EAAA;AAAA,UACzB,OAAO,IAAI,QAAA;AAAA,YACT;AAAA,cACE,WAAa,EAAA,sBAAA;AAAA,aACf;AAAA,YACA,GAAA;AAAA,WACF;AAAA,SACD,CAAA;AAAA,OACH,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,oBAAoB,MAAM;AAC1C,MAAA,IAAA,CAAK,aAAc,CAAA,IAAI,KAAM,CAAA,mBAAmB,CAAC,CAAA,CAAA;AAAA,KAClD,CAAA,CAAA;AAED,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,SAAU,CAAA,CAAC,IAAS,KAAA;AACpC,MAAI,IAAA,WAAA,CAAY,MAAO,CAAA,IAAI,CAAG,EAAA;AAC5B,QAAA,IAAI,IAAK,CAAA,UAAA,IAAc,aAAe,EAAA,IAAA,GAAO,IAAK,CAAA,MAAA,CAAA;AAAA,aACtC,IAAA,GAAA,MAAA,CAAO,IAAK,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,OACrC;AAEA,MAAA,IAAA,CAAK,cAAc,IAAI,YAAA,CAAa,WAAW,EAAE,IAAA,EAAM,CAAC,CAAA,CAAA;AAAA,KACzD,CAAA,CAAA;AAGD,IAAK,IAAA,CAAA,gBAAA,CAAiB,SAAW,EAAA,CAAC,CAAM,KAAA;AACtC,MAAA,IAAI,IAAK,CAAA,SAAA,EAAgB,IAAA,CAAA,SAAA,CAAU,CAAiB,CAAA,CAAA;AAAA,KACrD,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,gBAAA,CAAiB,mBAAqB,EAAA,CAAC,CAAM,KAAA;AAChD,MAAA,IAAI,IAAK,CAAA,mBAAA,EAA0B,IAAA,CAAA,mBAAA,CAAoB,CAAC,CAAA,CAAA;AAAA,KACzD,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,gBAAA,CAAiB,OAAS,EAAA,CAAC,CAAM,KAAA;AACpC,MAAA,IAAI,IAAK,CAAA,OAAA,EAAc,IAAA,CAAA,OAAA,CAAQ,CAAkB,CAAA,CAAA;AAAA,KAClD,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,gBAAA,CAAiB,OAAS,EAAA,CAAC,CAAM,KAAA;AACpC,MAAA,IAAI,IAAK,CAAA,OAAA,EAAc,IAAA,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAAA,KACjC,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,gBAAA,CAAiB,SAAW,EAAA,CAAC,CAAM,KAAA;AACtC,MAAA,IAAI,IAAK,CAAA,SAAA,EAAgB,IAAA,CAAA,SAAA,CAAU,CAAC,CAAA,CAAA;AAAA,KACrC,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,gBAAA,CAAiB,MAAQ,EAAA,CAAC,CAAM,KAAA;AACnC,MAAA,IAAI,IAAK,CAAA,MAAA,EAAa,IAAA,CAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AAAA,KAC/B,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAI,WAAW,IAAM,EAAA;AACnB,IAAI,IAAA,IAAA,KAAS,MAAU,IAAA,IAAA,KAAS,aAAe,EAAA;AAC7C,MAAA,MAAM,IAAI,YAAA;AAAA,QACR,qFACE,GAAA,IAAA;AAAA,QACF,mBAAA;AAAA,OACF,CAAA;AAAA,KACF;AACA,IAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,IAAA,CAAA,CAAA;AAAA,GACrB;AAAA,EAEA,IAAI,UAAyB,GAAA;AAC3B,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,cAAyB,GAAA;AAC3B,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,cAAa,cAAe,EAAA,CAAA;AAAA,GAC1C;AAAA,EAEA,IAAI,0BAAqC,GAAA;AACvC,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,2BAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,2BAA2B,KAAO,EAAA;AACpC,IAAM,MAAA,MAAA,GAAS,MAAO,CAAA,KAAK,CAAK,IAAA,CAAA,CAAA;AAChC,IAAA,YAAA,CAAA,IAAA,EAAK,2BAA8B,EAAA,MAAA,CAAA,CAAA;AACnC,IAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,8BAA8B,MAAM,CAAA,CAAA;AAAA,GACxD;AAAA,EAEA,IAAI,EAAoB,GAAA;AACtB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,GAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,KAAgB,GAAA;AAClB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,iBAAmC,GAAA;AACrC,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,cAAgC,GAAA;AAClC,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,UAAsB,GAAA;AACxB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,OAAmB,GAAA;AACrB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,QAAmB,GAAA;AACrB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,UAA6C,GAAA;AAC/C,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,KAAK,IAAY,EAAA;AACf,IAAI,IAAA,YAAA,CAAA,IAAA,EAAK,iBAAgB,MAAQ,EAAA;AAC/B,MAAA,MAAM,IAAIA,iBAAW;AAAA,QACnB,uFAAA;AAAA,OACF,CAAA;AAAA,KACF;AAGA,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,MAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,YAAY,IAAI,CAAA,CAAA;AAAA,KACpC,MAAA,IAAW,gBAAgB,IAAM,EAAA;AAC/B,MAAA,IAAA,CAAK,WAAY,EAAA,CAAE,IAAK,CAAA,CAAC,EAAO,KAAA;AAC9B,QAAI,IAAA,OAAA,EAAS,UAAU,GAAK,EAAA;AAC1B,UAAA,YAAA,CAAA,IAAA,EAAK,YAAa,CAAA,CAAA,iBAAA,CAAkB,MAAO,CAAA,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AAAA,SAC9C,MAAA;AACL,UAAA,YAAA,CAAA,IAAA,EAAK,YAAa,CAAA,CAAA,iBAAA,CAAkB,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA,CAAA;AAAA,SACxD;AAAA,OACD,CAAA,CAAA;AAAA,KACH,MAAA,IAAW,gBAAgB,UAAY,EAAA;AACrC,MAAK,YAAA,CAAA,IAAA,EAAA,YAAA,CAAA,CAAa,kBAAkB,IAAI,CAAA,CAAA;AAAA,KACnC,MAAA;AACL,MAAI,IAAA,OAAA,EAAS,UAAU,GAAK,EAAA;AAC1B,QAAA,YAAA,CAAA,IAAA,EAAK,YAAa,CAAA,CAAA,iBAAA,CAAkB,MAAO,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,OAChD,MAAA;AACL,QAAA,YAAA,CAAA,IAAA,EAAK,YAAa,CAAA,CAAA,iBAAA,CAAkB,IAAI,UAAA,CAAW,IAAI,CAAC,CAAA,CAAA;AAAA,OAC1D;AAAA,KACF;AAAA,GACF;AAAA,EAEA,KAAc,GAAA;AACZ,IAAA,YAAA,CAAA,IAAA,EAAK,eAAkB,EAAA,IAAA,CAAA,CAAA;AACvB,IAAA,YAAA,CAAa,MAAM;AACjB,MAAA,YAAA,CAAA,IAAA,EAAK,cAAa,KAAM,EAAA,CAAA;AAAA,KACzB,CAAA,CAAA;AAAA,GACH;AACF,CAAA;AAvME,YAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,WAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,2BAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,WAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,kBAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,eAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,WAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,GAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,MAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,SAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAEA,eAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
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';\nimport { RTCErrorEvent } from './Events';\n\nexport default class RTCDataChannel extends EventTarget implements globalThis.RTCDataChannel {\n #dataChannel: DataChannel;\n #readyState: globalThis.RTCDataChannelState;\n #bufferedAmountLowThreshold: number;\n #binaryType: BinaryType;\n #maxPacketLifeTime: number | null;\n #maxRetransmits: number | null;\n #negotiated: boolean;\n #ordered: boolean;\n #id: number;\n #label: string;\n #protocol: string;\n\n #closeRequested = false;\n\n // events\n onbufferedamountlow: globalThis.RTCDataChannel['onbufferedamountlow'] = null;\n onclose: globalThis.RTCDataChannel['onclose'] = null;\n onclosing: globalThis.RTCDataChannel['onclosing'] = null;\n onerror: globalThis.RTCDataChannel['onerror'] = null;\n onmessage: globalThis.RTCDataChannel['onmessage'] = null;\n onopen: globalThis.RTCDataChannel['onopen'] = null;\n\n constructor(dataChannel: DataChannel, opts: globalThis.RTCDataChannelInit = {}) {\n super();\n\n this.#dataChannel = dataChannel;\n this.#binaryType = 'arraybuffer';\n this.#readyState = this.#dataChannel.isOpen() ? 'open' : 'connecting';\n this.#bufferedAmountLowThreshold = 0;\n this.#maxPacketLifeTime = opts.maxPacketLifeTime ?? null;\n this.#maxRetransmits = opts.maxRetransmits ?? null;\n this.#negotiated = opts.negotiated ?? false;\n this.#ordered = opts.ordered ?? true;\n this.#id = this.#dataChannel.getId();\n this.#label = this.#dataChannel.getLabel();\n this.#protocol = this.#dataChannel.getProtocol();\n\n // forward dataChannel events\n this.#dataChannel.onOpen(() => {\n this.#readyState = 'open';\n this.dispatchEvent(new Event('open', {}));\n });\n\n this.#dataChannel.onClosed(() => {\n // 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 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((message) => {\n if (typeof message === 'string') {\n this.dispatchEvent(new MessageEvent('message', { data: message }));\n return;\n }\n\n let data: Blob | ArrayBuffer;\n\n if (message instanceof ArrayBuffer) {\n data = message;\n } else {\n data = message.buffer;\n\n if (message.byteOffset !== 0 || message.byteLength !== message.buffer.byteLength) {\n // message is view on underlying buffer, must create new\n // ArrayBuffer that only contains message data\n data = new ArrayBuffer(message.byteLength);\n new Uint8Array(data, 0, message.byteLength).set(message);\n }\n }\n\n if (this.#binaryType === 'blob') {\n data = new Blob([data]);\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 as RTCErrorEvent);\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 : \" +\n type,\n 'TypeMismatchError',\n );\n }\n this.#binaryType = type;\n }\n\n get binaryType(): BinaryType {\n return this.#binaryType;\n }\n\n get bufferedAmount(): number {\n return this.#dataChannel.bufferedAmount();\n }\n\n get bufferedAmountLowThreshold(): number {\n return this.#bufferedAmountLowThreshold;\n }\n\n set bufferedAmountLowThreshold(value) {\n const number = Number(value) || 0;\n this.#bufferedAmountLowThreshold = number;\n this.#dataChannel.setBufferedAmountLowThreshold(number);\n }\n\n get id(): number | null {\n return this.#id;\n }\n\n get label(): string {\n return this.#label;\n }\n\n get maxPacketLifeTime(): number | null {\n return this.#maxPacketLifeTime;\n }\n\n get maxRetransmits(): number | null {\n return this.#maxRetransmits;\n }\n\n get negotiated(): boolean {\n return this.#negotiated;\n }\n\n get ordered(): boolean {\n return this.#ordered;\n }\n\n get protocol(): string {\n return this.#protocol;\n }\n\n get readyState(): globalThis.RTCDataChannelState {\n return this.#readyState;\n }\n\n send(data): void {\n if (this.#readyState !== 'open') {\n throw new exceptions.InvalidStateError(\n \"Failed to execute 'send' on 'RTCDataChannel': RTCDataChannel.readyState is not 'open'\",\n );\n }\n\n // Needs network error, type error implemented\n if (typeof data === 'string') {\n this.#dataChannel.sendMessage(data);\n } else if (data instanceof Blob) {\n data.arrayBuffer().then((ab) => {\n if (process?.versions?.bun) {\n this.#dataChannel.sendMessageBinary(Buffer.from(ab));\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(ab));\n }\n });\n } else if (data instanceof Uint8Array) {\n this.#dataChannel.sendMessageBinary(data);\n } else {\n if (process?.versions?.bun) {\n this.#dataChannel.sendMessageBinary(Buffer.from(data));\n } else {\n this.#dataChannel.sendMessageBinary(new Uint8Array(data));\n }\n }\n }\n\n close(): void {\n this.#closeRequested = true;\n setImmediate(() => {\n this.#dataChannel.close();\n });\n }\n}\n"],"names":["exceptions.InvalidStateError"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTCDtlsTransport.mjs","sources":["../../../src/polyfill/RTCDtlsTransport.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RTCIceTransport from './RTCIceTransport';\nimport RTCPeerConnection from './RTCPeerConnection';\n\nexport default class RTCDtlsTransport extends EventTarget implements globalThis.RTCDtlsTransport {\n #pc: RTCPeerConnection = null;\n #iceTransport = null;\n\n onstatechange: globalThis.RTCDtlsTransport['onstatechange'] = null;\n onerror: globalThis.RTCDtlsTransport['onstatechange'] = null;\n\n constructor(init: { pc: RTCPeerConnection }) {\n super();\n this.#pc = init.pc;\n\n this.#iceTransport = new RTCIceTransport({\n pc: init.pc
|
|
1
|
+
{"version":3,"file":"RTCDtlsTransport.mjs","sources":["../../../src/polyfill/RTCDtlsTransport.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RTCIceTransport from './RTCIceTransport';\nimport RTCPeerConnection from './RTCPeerConnection';\n\nexport default class RTCDtlsTransport extends EventTarget implements globalThis.RTCDtlsTransport {\n #pc: RTCPeerConnection = null;\n #iceTransport = null;\n\n onstatechange: globalThis.RTCDtlsTransport['onstatechange'] = null;\n onerror: globalThis.RTCDtlsTransport['onstatechange'] = null;\n\n constructor(init: { pc: RTCPeerConnection }) {\n super();\n this.#pc = init.pc;\n\n this.#iceTransport = new RTCIceTransport({\n pc: init.pc,\n });\n\n // forward peerConnection events\n this.#pc.addEventListener('connectionstatechange', () => {\n const e = new Event('statechange');\n this.dispatchEvent(e);\n this.onstatechange?.(e);\n });\n }\n\n get iceTransport(): globalThis.RTCIceTransport {\n return this.#iceTransport;\n }\n\n get state(): globalThis.RTCDtlsTransportState {\n // reduce state from new, connecting, connected, disconnected, failed, closed, unknown\n // to RTCDtlsTRansport states new, connecting, connected, closed, failed\n let state = this.#pc ? this.#pc.connectionState : 'new';\n if (state === 'disconnected') {\n state = 'closed';\n }\n return state;\n }\n\n getRemoteCertificates(): ArrayBuffer[] {\n // TODO: implement\n return [new ArrayBuffer(0)];\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA,IAAA,GAAA,EAAA,aAAA,CAAA;AAIA,MAAqB,yBAAyB,WAAmD,CAAA;AAAA,EAO/F,YAAY,IAAiC,EAAA;AAC3C,IAAM,KAAA,EAAA,CAAA;AAPR,IAAyB,YAAA,CAAA,IAAA,EAAA,GAAA,EAAA,IAAA,CAAA,CAAA;AACzB,IAAgB,YAAA,CAAA,IAAA,EAAA,aAAA,EAAA,IAAA,CAAA,CAAA;AAEhB,IAA8D,aAAA,CAAA,IAAA,EAAA,eAAA,EAAA,IAAA,CAAA,CAAA;AAC9D,IAAwD,aAAA,CAAA,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAA;AAItD,IAAA,YAAA,CAAA,IAAA,EAAK,KAAM,IAAK,CAAA,EAAA,CAAA,CAAA;AAEhB,IAAK,YAAA,CAAA,IAAA,EAAA,aAAA,EAAgB,IAAI,eAAgB,CAAA;AAAA,MACvC,IAAI,IAAK,CAAA,EAAA;AAAA,KACV,CAAA,CAAA,CAAA;AAGD,IAAK,YAAA,CAAA,IAAA,EAAA,GAAA,CAAA,CAAI,gBAAiB,CAAA,uBAAA,EAAyB,MAAM;AACvD,MAAM,MAAA,CAAA,GAAI,IAAI,KAAA,CAAM,aAAa,CAAA,CAAA;AACjC,MAAA,IAAA,CAAK,cAAc,CAAC,CAAA,CAAA;AACpB,MAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA,CAAA;AAAA,KACvB,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAI,YAA2C,GAAA;AAC7C,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,KAA0C,GAAA;AAG5C,IAAA,IAAI,KAAQ,GAAA,YAAA,CAAA,IAAA,EAAK,GAAM,CAAA,GAAA,YAAA,CAAA,IAAA,EAAK,KAAI,eAAkB,GAAA,KAAA,CAAA;AAClD,IAAA,IAAI,UAAU,cAAgB,EAAA;AAC5B,MAAQ,KAAA,GAAA,QAAA,CAAA;AAAA,KACV;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA,EAEA,qBAAuC,GAAA;AAErC,IAAA,OAAO,CAAC,IAAI,WAAY,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,GAC5B;AACF,CAAA;AAxCE,GAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,aAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTCSctpTransport.mjs","sources":["../../../src/polyfill/RTCSctpTransport.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RTCDtlsTransport from './RTCDtlsTransport';\nimport RTCPeerConnection from './RTCPeerConnection';\n\nexport default class RTCSctpTransport extends EventTarget implements globalThis.RTCSctpTransport {\n #pc: RTCPeerConnection = null;\n #transport: globalThis.RTCDtlsTransport = null;\n\n onstatechange: globalThis.RTCSctpTransport['onstatechange'] = null;\n\n constructor(initial: { pc: RTCPeerConnection }) {\n super();\n this.#pc = initial.pc;\n\n this.#transport = new RTCDtlsTransport({\n pc: initial.pc
|
|
1
|
+
{"version":3,"file":"RTCSctpTransport.mjs","sources":["../../../src/polyfill/RTCSctpTransport.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport RTCDtlsTransport from './RTCDtlsTransport';\nimport RTCPeerConnection from './RTCPeerConnection';\n\nexport default class RTCSctpTransport extends EventTarget implements globalThis.RTCSctpTransport {\n #pc: RTCPeerConnection = null;\n #transport: globalThis.RTCDtlsTransport = null;\n\n onstatechange: globalThis.RTCSctpTransport['onstatechange'] = null;\n\n constructor(initial: { pc: RTCPeerConnection }) {\n super();\n this.#pc = initial.pc;\n\n this.#transport = new RTCDtlsTransport({\n pc: initial.pc,\n });\n\n this.#pc.addEventListener('connectionstatechange', () => {\n const e = new Event('statechange');\n this.dispatchEvent(e);\n this.onstatechange?.(e);\n });\n }\n\n get maxChannels(): number | null {\n if (this.state !== 'connected') return null;\n return this.#pc.ext_maxDataChannelId;\n }\n\n get maxMessageSize(): number {\n if (this.state !== 'connected') return null;\n return this.#pc?.ext_maxMessageSize ?? 65536;\n }\n\n get state(): globalThis.RTCSctpTransportState {\n // reduce state from new, connecting, connected, disconnected, failed, closed, unknown\n // to RTCSctpTransport states connecting, connected, closed\n let state = this.#pc.connectionState;\n if (state === 'new' || state === 'connecting') {\n state = 'connecting';\n } else if (state === 'disconnected' || state === 'failed' || state === 'closed') {\n state = 'closed';\n }\n return state;\n }\n\n get transport(): globalThis.RTCDtlsTransport {\n return this.#transport;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA,IAAA,GAAA,EAAA,UAAA,CAAA;AAIA,MAAqB,yBAAyB,WAAmD,CAAA;AAAA,EAM/F,YAAY,OAAoC,EAAA;AAC9C,IAAM,KAAA,EAAA,CAAA;AANR,IAAyB,YAAA,CAAA,IAAA,EAAA,GAAA,EAAA,IAAA,CAAA,CAAA;AACzB,IAA0C,YAAA,CAAA,IAAA,EAAA,UAAA,EAAA,IAAA,CAAA,CAAA;AAE1C,IAA8D,aAAA,CAAA,IAAA,EAAA,eAAA,EAAA,IAAA,CAAA,CAAA;AAI5D,IAAA,YAAA,CAAA,IAAA,EAAK,KAAM,OAAQ,CAAA,EAAA,CAAA,CAAA;AAEnB,IAAK,YAAA,CAAA,IAAA,EAAA,UAAA,EAAa,IAAI,gBAAiB,CAAA;AAAA,MACrC,IAAI,OAAQ,CAAA,EAAA;AAAA,KACb,CAAA,CAAA,CAAA;AAED,IAAK,YAAA,CAAA,IAAA,EAAA,GAAA,CAAA,CAAI,gBAAiB,CAAA,uBAAA,EAAyB,MAAM;AACvD,MAAM,MAAA,CAAA,GAAI,IAAI,KAAA,CAAM,aAAa,CAAA,CAAA;AACjC,MAAA,IAAA,CAAK,cAAc,CAAC,CAAA,CAAA;AACpB,MAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA,CAAA;AAAA,KACvB,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAI,WAA6B,GAAA;AAC/B,IAAI,IAAA,IAAA,CAAK,KAAU,KAAA,WAAA,EAAoB,OAAA,IAAA,CAAA;AACvC,IAAA,OAAO,mBAAK,GAAI,CAAA,CAAA,oBAAA,CAAA;AAAA,GAClB;AAAA,EAEA,IAAI,cAAyB,GAAA;AAC3B,IAAI,IAAA,IAAA,CAAK,KAAU,KAAA,WAAA,EAAoB,OAAA,IAAA,CAAA;AACvC,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,MAAK,kBAAsB,IAAA,KAAA,CAAA;AAAA,GACzC;AAAA,EAEA,IAAI,KAA0C,GAAA;AAG5C,IAAI,IAAA,KAAA,GAAQ,mBAAK,GAAI,CAAA,CAAA,eAAA,CAAA;AACrB,IAAI,IAAA,KAAA,KAAU,KAAS,IAAA,KAAA,KAAU,YAAc,EAAA;AAC7C,MAAQ,KAAA,GAAA,YAAA,CAAA;AAAA,eACC,KAAU,KAAA,cAAA,IAAkB,KAAU,KAAA,QAAA,IAAY,UAAU,QAAU,EAAA;AAC/E,MAAQ,KAAA,GAAA,QAAA,CAAA;AAAA,KACV;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA,EAEA,IAAI,SAAyC,GAAA;AAC3C,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AAAA,GACd;AACF,CAAA;AA7CE,GAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,UAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LogLevel, SctpSettings, Direction, Channel, DescriptionType, DataChannelInitConfig, RTCPeerConnectionState, RTCIceConnectionState, RTCSignalingState, RTCIceGatheringState, SelectedCandidateInfo, RtcConfig, WebSocketServerConfiguration } from './types.js';
|
|
1
|
+
import { LogLevel, SctpSettings, Direction, Channel, DescriptionType, LocalDescriptionInit, CertificateFingerprint, DataChannelInitConfig, RTCPeerConnectionState, RTCIceConnectionState, RTCSignalingState, RTCIceGatheringState, SelectedCandidateInfo, RtcConfig, IceUdpMuxRequest, WebSocketServerConfiguration } from './types.js';
|
|
2
2
|
export { IceServer, ProxyServer, ProxyServerType, RTCIceGathererState, RTCIceTransportState, RTCSdpType, RelayType, TransportPolicy } from './types.js';
|
|
3
3
|
import DataChannelStream$1 from './datachannel-stream.js';
|
|
4
4
|
import { WebSocketServer } from './websocket-server.js';
|
|
@@ -104,7 +104,7 @@ interface DataChannel extends Channel {
|
|
|
104
104
|
declare const DataChannel: {};
|
|
105
105
|
interface PeerConnection {
|
|
106
106
|
close(): void;
|
|
107
|
-
setLocalDescription(type?: DescriptionType): void;
|
|
107
|
+
setLocalDescription(type?: DescriptionType, init?: LocalDescriptionInit): void;
|
|
108
108
|
setRemoteDescription(sdp: string, type: DescriptionType): void;
|
|
109
109
|
localDescription(): {
|
|
110
110
|
type: DescriptionType;
|
|
@@ -114,6 +114,7 @@ interface PeerConnection {
|
|
|
114
114
|
type: DescriptionType;
|
|
115
115
|
sdp: string;
|
|
116
116
|
} | null;
|
|
117
|
+
remoteFingerprint(): CertificateFingerprint;
|
|
117
118
|
addRemoteCandidate(candidate: string, mid: string): void;
|
|
118
119
|
createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;
|
|
119
120
|
addTrack(media: Video | Audio): Track;
|
|
@@ -143,6 +144,15 @@ interface PeerConnection {
|
|
|
143
144
|
declare const PeerConnection: {
|
|
144
145
|
new (peerName: string, config: RtcConfig): PeerConnection;
|
|
145
146
|
};
|
|
147
|
+
interface IceUdpMuxListener {
|
|
148
|
+
address?: string;
|
|
149
|
+
port: number;
|
|
150
|
+
stop(): void;
|
|
151
|
+
onUnhandledStunRequest(cb: (req: IceUdpMuxRequest) => void): void;
|
|
152
|
+
}
|
|
153
|
+
declare const IceUdpMuxListener: {
|
|
154
|
+
new (port: number, address?: string): IceUdpMuxListener;
|
|
155
|
+
};
|
|
146
156
|
interface RtcpReceivingSession {
|
|
147
157
|
}
|
|
148
158
|
declare const RtcpReceivingSession: {
|
|
@@ -165,6 +175,7 @@ declare const _default: {
|
|
|
165
175
|
WebSocket: new (config?: WebSocketServerConfiguration) => WebSocket;
|
|
166
176
|
WebSocketServer: typeof WebSocketServer;
|
|
167
177
|
DataChannelStream: typeof DataChannelStream$1;
|
|
178
|
+
IceUdpMuxListener: new (port: number, address?: string) => IceUdpMuxListener;
|
|
168
179
|
};
|
|
169
180
|
|
|
170
|
-
export { Audio, Channel, DataChannel, DataChannelInitConfig, DataChannelStream, DescriptionType, Direction, LogLevel, PeerConnection, RTCIceConnectionState, RTCIceGatheringState, RTCPeerConnectionState, RTCSignalingState, RtcConfig, RtcpReceivingSession, SctpSettings, SelectedCandidateInfo, Track, Video, WebSocket, WebSocketServer, WebSocketServerConfiguration, cleanup, _default as default, getLibraryVersion, initLogger, preload, setSctpSettings };
|
|
181
|
+
export { Audio, CertificateFingerprint, Channel, DataChannel, DataChannelInitConfig, DataChannelStream, DescriptionType, Direction, IceUdpMuxListener, IceUdpMuxRequest, LocalDescriptionInit, LogLevel, PeerConnection, RTCIceConnectionState, RTCIceGatheringState, RTCPeerConnectionState, RTCSignalingState, RtcConfig, RtcpReceivingSession, SctpSettings, SelectedCandidateInfo, Track, Video, WebSocket, WebSocketServer, WebSocketServerConfiguration, cleanup, _default as default, getLibraryVersion, initLogger, preload, setSctpSettings };
|
|
@@ -62,6 +62,10 @@ interface RtcConfig {
|
|
|
62
62
|
mtu?: number;
|
|
63
63
|
iceTransportPolicy?: TransportPolicy;
|
|
64
64
|
disableFingerprintVerification?: boolean;
|
|
65
|
+
disableAutoGathering?: boolean;
|
|
66
|
+
certificatePemFile?: string;
|
|
67
|
+
keyPemFile?: string;
|
|
68
|
+
keyPemPass?: string;
|
|
65
69
|
}
|
|
66
70
|
type DescriptionType = 'unspec' | 'offer' | 'answer' | 'pranswer' | 'rollback';
|
|
67
71
|
type RTCSdpType = 'answer' | 'offer' | 'pranswer' | 'rollback';
|
|
@@ -71,6 +75,10 @@ type RTCIceConnectionState = 'checking' | 'closed' | 'completed' | 'connected' |
|
|
|
71
75
|
type RTCIceGathererState = 'complete' | 'gathering' | 'new';
|
|
72
76
|
type RTCIceGatheringState = 'complete' | 'gathering' | 'new';
|
|
73
77
|
type RTCSignalingState = 'closed' | 'have-local-offer' | 'have-local-pranswer' | 'have-remote-offer' | 'have-remote-pranswer' | 'stable';
|
|
78
|
+
interface LocalDescriptionInit {
|
|
79
|
+
iceUfrag?: string;
|
|
80
|
+
icePwd?: string;
|
|
81
|
+
}
|
|
74
82
|
interface DataChannelInitConfig {
|
|
75
83
|
protocol?: string;
|
|
76
84
|
negotiated?: boolean;
|
|
@@ -79,6 +87,16 @@ interface DataChannelInitConfig {
|
|
|
79
87
|
maxPacketLifeTime?: number;
|
|
80
88
|
maxRetransmits?: number;
|
|
81
89
|
}
|
|
90
|
+
interface CertificateFingerprint {
|
|
91
|
+
/**
|
|
92
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/RTCCertificate/getFingerprints#value
|
|
93
|
+
*/
|
|
94
|
+
value: string;
|
|
95
|
+
/**
|
|
96
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/RTCCertificate/getFingerprints#algorithm
|
|
97
|
+
*/
|
|
98
|
+
algorithm: 'sha-1' | 'sha-224' | 'sha-256' | 'sha-384' | 'sha-512' | 'md5' | 'md2';
|
|
99
|
+
}
|
|
82
100
|
interface SelectedCandidateInfo {
|
|
83
101
|
address: string;
|
|
84
102
|
port: number;
|
|
@@ -89,5 +107,10 @@ interface SelectedCandidateInfo {
|
|
|
89
107
|
priority: number;
|
|
90
108
|
}
|
|
91
109
|
type Direction = 'SendOnly' | 'RecvOnly' | 'SendRecv' | 'Inactive' | 'Unknown';
|
|
110
|
+
interface IceUdpMuxRequest {
|
|
111
|
+
ufrag: string;
|
|
112
|
+
host: string;
|
|
113
|
+
port: number;
|
|
114
|
+
}
|
|
92
115
|
|
|
93
|
-
export type { Channel, DataChannelInitConfig, DescriptionType, Direction, IceServer, LogLevel, ProxyServer, ProxyServerType, RTCIceConnectionState, RTCIceGathererState, RTCIceGatheringState, RTCIceTransportState, RTCPeerConnectionState, RTCSdpType, RTCSignalingState, RelayType, RtcConfig, SctpSettings, SelectedCandidateInfo, TransportPolicy, WebSocketServerConfiguration };
|
|
116
|
+
export type { CertificateFingerprint, Channel, DataChannelInitConfig, DescriptionType, Direction, IceServer, IceUdpMuxRequest, LocalDescriptionInit, LogLevel, ProxyServer, ProxyServerType, RTCIceConnectionState, RTCIceGathererState, RTCIceGatheringState, RTCIceTransportState, RTCPeerConnectionState, RTCSdpType, RTCSignalingState, RelayType, RtcConfig, SctpSettings, SelectedCandidateInfo, TransportPolicy, WebSocketServerConfiguration };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-datachannel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.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",
|
|
@@ -50,7 +50,8 @@
|
|
|
50
50
|
"wpt:server": "cd test/wpt-tests/wpt && ./wpt serve",
|
|
51
51
|
"wpt:test": "ts-node test/wpt-tests/index.ts",
|
|
52
52
|
"_prebuild": "prebuild -r napi --backend cmake-js",
|
|
53
|
-
"prepack": "npm run build:tsc"
|
|
53
|
+
"prepack": "npm run build:tsc",
|
|
54
|
+
"prettier": "prettier --write ."
|
|
54
55
|
},
|
|
55
56
|
"binary": {
|
|
56
57
|
"napi_versions": [
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
#include "ice-udp-mux-listener-wrapper.h"
|
|
2
|
+
|
|
3
|
+
#include "plog/Log.h"
|
|
4
|
+
|
|
5
|
+
#include <cctype>
|
|
6
|
+
#include <sstream>
|
|
7
|
+
|
|
8
|
+
Napi::FunctionReference IceUdpMuxListenerWrapper::constructor = Napi::FunctionReference();
|
|
9
|
+
std::unordered_set<IceUdpMuxListenerWrapper *> IceUdpMuxListenerWrapper::instances;
|
|
10
|
+
|
|
11
|
+
void IceUdpMuxListenerWrapper::StopAll()
|
|
12
|
+
{
|
|
13
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper StopAll() called";
|
|
14
|
+
auto copy(instances);
|
|
15
|
+
for (auto inst : copy)
|
|
16
|
+
inst->doCleanup();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
Napi::Object IceUdpMuxListenerWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
20
|
+
{
|
|
21
|
+
Napi::HandleScope scope(env);
|
|
22
|
+
|
|
23
|
+
Napi::Function func = DefineClass(
|
|
24
|
+
env,
|
|
25
|
+
"IceUdpMuxListener",
|
|
26
|
+
{
|
|
27
|
+
InstanceMethod("stop", &IceUdpMuxListenerWrapper::stop),
|
|
28
|
+
InstanceMethod("onUnhandledStunRequest", &IceUdpMuxListenerWrapper::onUnhandledStunRequest),
|
|
29
|
+
InstanceMethod("port", &IceUdpMuxListenerWrapper::port),
|
|
30
|
+
InstanceMethod("address", &IceUdpMuxListenerWrapper::address)
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
|
|
34
|
+
if(constructor.IsEmpty())
|
|
35
|
+
{
|
|
36
|
+
constructor = Napi::Persistent(func);
|
|
37
|
+
constructor.SuppressDestruct();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
exports.Set("IceUdpMuxListener", func);
|
|
41
|
+
return exports;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
IceUdpMuxListenerWrapper::IceUdpMuxListenerWrapper(const Napi::CallbackInfo &info) : Napi::ObjectWrap<IceUdpMuxListenerWrapper>(info)
|
|
45
|
+
{
|
|
46
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper Constructor called";
|
|
47
|
+
Napi::Env env = info.Env();
|
|
48
|
+
int length = info.Length();
|
|
49
|
+
|
|
50
|
+
// We expect (Number, String?) as param
|
|
51
|
+
if (length > 0 && info[0].IsNumber()) {
|
|
52
|
+
// Port
|
|
53
|
+
mPort = info[0].As<Napi::Number>().ToNumber().Uint32Value();
|
|
54
|
+
} else {
|
|
55
|
+
Napi::TypeError::New(env, "Port (Number) and optional Address (String) expected").ThrowAsJavaScriptException();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (length > 1 && info[1].IsString()) {
|
|
60
|
+
// Address
|
|
61
|
+
mAddress = info[1].As<Napi::String>().ToString();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
iceUdpMuxListenerPtr = std::make_unique<rtc::IceUdpMuxListener>(mPort, mAddress);
|
|
65
|
+
instances.insert(this);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
IceUdpMuxListenerWrapper::~IceUdpMuxListenerWrapper()
|
|
69
|
+
{
|
|
70
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper Destructor called";
|
|
71
|
+
doCleanup();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
void IceUdpMuxListenerWrapper::doCleanup()
|
|
75
|
+
{
|
|
76
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper::doCleanup() called";
|
|
77
|
+
|
|
78
|
+
if (iceUdpMuxListenerPtr)
|
|
79
|
+
{
|
|
80
|
+
iceUdpMuxListenerPtr->stop();
|
|
81
|
+
iceUdpMuxListenerPtr.reset();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
mOnUnhandledStunRequestCallback.reset();
|
|
85
|
+
instances.erase(this);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
Napi::Value IceUdpMuxListenerWrapper::port(const Napi::CallbackInfo &info)
|
|
89
|
+
{
|
|
90
|
+
Napi::Env env = info.Env();
|
|
91
|
+
|
|
92
|
+
return Napi::Number::New(env, mPort);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
Napi::Value IceUdpMuxListenerWrapper::address(const Napi::CallbackInfo &info)
|
|
96
|
+
{
|
|
97
|
+
Napi::Env env = info.Env();
|
|
98
|
+
|
|
99
|
+
if (!mAddress.has_value()) {
|
|
100
|
+
return env.Undefined();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return Napi::String::New(env, mAddress.value());
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
void IceUdpMuxListenerWrapper::stop(const Napi::CallbackInfo &info)
|
|
107
|
+
{
|
|
108
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper::stop() called";
|
|
109
|
+
doCleanup();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
void IceUdpMuxListenerWrapper::onUnhandledStunRequest(const Napi::CallbackInfo &info)
|
|
113
|
+
{
|
|
114
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper::onUnhandledStunRequest() called";
|
|
115
|
+
Napi::Env env = info.Env();
|
|
116
|
+
int length = info.Length();
|
|
117
|
+
|
|
118
|
+
if (!iceUdpMuxListenerPtr)
|
|
119
|
+
{
|
|
120
|
+
Napi::Error::New(env, "IceUdpMuxListenerWrapper::onUnhandledStunRequest() called on destroyed IceUdpMuxListener").ThrowAsJavaScriptException();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (length < 1 || !info[0].IsFunction())
|
|
125
|
+
{
|
|
126
|
+
Napi::TypeError::New(env, "Function expected").ThrowAsJavaScriptException();
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Callback
|
|
131
|
+
mOnUnhandledStunRequestCallback = std::make_unique<ThreadSafeCallback>(info[0].As<Napi::Function>());
|
|
132
|
+
|
|
133
|
+
iceUdpMuxListenerPtr->OnUnhandledStunRequest([&](rtc::IceUdpMuxRequest request)
|
|
134
|
+
{
|
|
135
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper::onUnhandledStunRequest() IceUdpMuxCallback call(1)";
|
|
136
|
+
|
|
137
|
+
if (mOnUnhandledStunRequestCallback) {
|
|
138
|
+
mOnUnhandledStunRequestCallback->call([request = std::move(request)](Napi::Env env, std::vector<napi_value> &args) {
|
|
139
|
+
Napi::Object reqObj = Napi::Object::New(env);
|
|
140
|
+
reqObj.Set("ufrag", request.remoteUfrag.c_str());
|
|
141
|
+
reqObj.Set("host", request.remoteAddress.c_str());
|
|
142
|
+
reqObj.Set("port", request.remotePort);
|
|
143
|
+
|
|
144
|
+
args = {reqObj};
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper::onUnhandledStunRequest() IceUdpMuxCallback call(2)";
|
|
149
|
+
});
|
|
150
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#ifndef ICE_UDP_MUX_LISTENER_WRAPPER_H
|
|
2
|
+
#define ICE_UDP_MUX_LISTENER_WRAPPER_H
|
|
3
|
+
|
|
4
|
+
#include <napi.h>
|
|
5
|
+
#include <rtc/rtc.hpp>
|
|
6
|
+
#include <unordered_set>
|
|
7
|
+
|
|
8
|
+
#include "thread-safe-callback.h"
|
|
9
|
+
|
|
10
|
+
class IceUdpMuxListenerWrapper : public Napi::ObjectWrap<IceUdpMuxListenerWrapper>
|
|
11
|
+
{
|
|
12
|
+
public:
|
|
13
|
+
static Napi::Object Init(Napi::Env env, Napi::Object exports);
|
|
14
|
+
IceUdpMuxListenerWrapper(const Napi::CallbackInfo &info);
|
|
15
|
+
~IceUdpMuxListenerWrapper();
|
|
16
|
+
|
|
17
|
+
// Functions
|
|
18
|
+
void stop(const Napi::CallbackInfo &info);
|
|
19
|
+
void onUnhandledStunRequest(const Napi::CallbackInfo &info);
|
|
20
|
+
|
|
21
|
+
// Stop listening on all ports
|
|
22
|
+
static void StopAll();
|
|
23
|
+
|
|
24
|
+
// Properties
|
|
25
|
+
Napi::Value port(const Napi::CallbackInfo &info);
|
|
26
|
+
Napi::Value address(const Napi::CallbackInfo &info);
|
|
27
|
+
Napi::Value unhandledStunRequestCallback(const Napi::CallbackInfo &info);
|
|
28
|
+
|
|
29
|
+
// Callback Ptrs
|
|
30
|
+
std::unique_ptr<ThreadSafeCallback> mOnUnhandledStunRequestCallback = nullptr;
|
|
31
|
+
|
|
32
|
+
private:
|
|
33
|
+
static Napi::FunctionReference constructor;
|
|
34
|
+
static std::unordered_set<IceUdpMuxListenerWrapper *> instances;
|
|
35
|
+
|
|
36
|
+
void doCleanup();
|
|
37
|
+
|
|
38
|
+
std::optional<std::string> mAddress;
|
|
39
|
+
uint16_t mPort;
|
|
40
|
+
std::unique_ptr<rtc::IceUdpMuxListener> iceUdpMuxListenerPtr = nullptr;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
#endif // ICE_UDP_MUX_LISTENER_WRAPPER_H
|
package/src/cpp/main.cpp
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
#include "rtc-wrapper.h"
|
|
3
3
|
#include "peer-connection-wrapper.h"
|
|
4
4
|
#include "data-channel-wrapper.h"
|
|
5
|
+
#include "ice-udp-mux-listener-wrapper.h"
|
|
5
6
|
|
|
6
7
|
#if RTC_ENABLE_MEDIA == 1
|
|
7
8
|
#include "media-rtcpreceivingsession-wrapper.h"
|
|
@@ -27,6 +28,7 @@ Napi::Object InitAll(Napi::Env env, Napi::Object exports)
|
|
|
27
28
|
#endif
|
|
28
29
|
|
|
29
30
|
DataChannelWrapper::Init(env, exports);
|
|
31
|
+
IceUdpMuxListenerWrapper::Init(env, exports);
|
|
30
32
|
PeerConnectionWrapper::Init(env, exports);
|
|
31
33
|
|
|
32
34
|
#if RTC_ENABLE_WEBSOCKET == 1
|
|
@@ -44,6 +44,7 @@ Napi::Object PeerConnectionWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
|
44
44
|
InstanceMethod("setRemoteDescription", &PeerConnectionWrapper::setRemoteDescription),
|
|
45
45
|
InstanceMethod("localDescription", &PeerConnectionWrapper::localDescription),
|
|
46
46
|
InstanceMethod("remoteDescription", &PeerConnectionWrapper::remoteDescription),
|
|
47
|
+
InstanceMethod("remoteFingerprint", &PeerConnectionWrapper::remoteFingerprint),
|
|
47
48
|
InstanceMethod("addRemoteCandidate", &PeerConnectionWrapper::addRemoteCandidate),
|
|
48
49
|
InstanceMethod("createDataChannel", &PeerConnectionWrapper::createDataChannel),
|
|
49
50
|
|
|
@@ -220,6 +221,10 @@ PeerConnectionWrapper::PeerConnectionWrapper(const Napi::CallbackInfo &info) : N
|
|
|
220
221
|
if (config.Get("disableAutoNegotiation").IsBoolean())
|
|
221
222
|
rtcConfig.disableAutoNegotiation = config.Get("disableAutoNegotiation").As<Napi::Boolean>();
|
|
222
223
|
|
|
224
|
+
// disableAutoGathering option
|
|
225
|
+
if (config.Get("disableAutoGathering").IsBoolean())
|
|
226
|
+
rtcConfig.disableAutoGathering = config.Get("disableAutoGathering").As<Napi::Boolean>();
|
|
227
|
+
|
|
223
228
|
// forceMediaTransport option
|
|
224
229
|
if (config.Get("forceMediaTransport").IsBoolean())
|
|
225
230
|
rtcConfig.forceMediaTransport = config.Get("forceMediaTransport").As<Napi::Boolean>();
|
|
@@ -257,6 +262,17 @@ PeerConnectionWrapper::PeerConnectionWrapper(const Napi::CallbackInfo &info) : N
|
|
|
257
262
|
rtcConfig.disableFingerprintVerification = config.Get("disableFingerprintVerification").As<Napi::Boolean>();
|
|
258
263
|
}
|
|
259
264
|
|
|
265
|
+
// Specify certificate to use if set
|
|
266
|
+
if (config.Get("certificatePemFile").IsString()) {
|
|
267
|
+
rtcConfig.certificatePemFile = config.Get("certificatePemFile").As<Napi::String>().ToString();
|
|
268
|
+
}
|
|
269
|
+
if (config.Get("keyPemFile").IsString()) {
|
|
270
|
+
rtcConfig.keyPemFile = config.Get("keyPemFile").As<Napi::String>().ToString();
|
|
271
|
+
}
|
|
272
|
+
if (config.Get("keyPemPass").IsString()) {
|
|
273
|
+
rtcConfig.keyPemPass = config.Get("keyPemPass").As<Napi::String>().ToString();
|
|
274
|
+
}
|
|
275
|
+
|
|
260
276
|
// Create peer-connection
|
|
261
277
|
try
|
|
262
278
|
{
|
|
@@ -337,6 +353,7 @@ void PeerConnectionWrapper::setLocalDescription(const Napi::CallbackInfo &info)
|
|
|
337
353
|
}
|
|
338
354
|
|
|
339
355
|
rtc::Description::Type type = rtc::Description::Type::Unspec;
|
|
356
|
+
rtc::LocalDescriptionInit init;
|
|
340
357
|
|
|
341
358
|
// optional
|
|
342
359
|
if (length > 0)
|
|
@@ -362,7 +379,29 @@ void PeerConnectionWrapper::setLocalDescription(const Napi::CallbackInfo &info)
|
|
|
362
379
|
type = rtc::Description::Type::Rollback;
|
|
363
380
|
}
|
|
364
381
|
|
|
365
|
-
|
|
382
|
+
// optional
|
|
383
|
+
if (length > 1)
|
|
384
|
+
{
|
|
385
|
+
PLOG_DEBUG << "setLocalDescription() called with LocalDescriptionInit";
|
|
386
|
+
|
|
387
|
+
if (info[1].IsObject())
|
|
388
|
+
{
|
|
389
|
+
PLOG_DEBUG << "setLocalDescription() called with LocalDescriptionInit as object";
|
|
390
|
+
Napi::Object obj = info[1].As<Napi::Object>();
|
|
391
|
+
|
|
392
|
+
if (obj.Get("iceUfrag").IsString()) {
|
|
393
|
+
PLOG_DEBUG << "setLocalDescription() has ufrag";
|
|
394
|
+
init.iceUfrag = obj.Get("iceUfrag").As<Napi::String>();
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
if (obj.Get("icePwd").IsString()) {
|
|
398
|
+
PLOG_DEBUG << "setLocalDescription() has password";
|
|
399
|
+
init.icePwd = obj.Get("icePwd").As<Napi::String>();
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
mRtcPeerConnPtr->setLocalDescription(type, init);
|
|
366
405
|
}
|
|
367
406
|
|
|
368
407
|
void PeerConnectionWrapper::setRemoteDescription(const Napi::CallbackInfo &info)
|
|
@@ -1008,7 +1047,34 @@ Napi::Value PeerConnectionWrapper::maxMessageSize(const Napi::CallbackInfo &info
|
|
|
1008
1047
|
|
|
1009
1048
|
try
|
|
1010
1049
|
{
|
|
1011
|
-
return Napi::
|
|
1050
|
+
return Napi::Array::New(env, mRtcPeerConnPtr->remoteMaxMessageSize());
|
|
1051
|
+
}
|
|
1052
|
+
catch (std::exception &ex)
|
|
1053
|
+
{
|
|
1054
|
+
Napi::Error::New(env, std::string("libdatachannel error: ") + ex.what()).ThrowAsJavaScriptException();
|
|
1055
|
+
return Napi::Number::New(info.Env(), 0);
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
Napi::Value PeerConnectionWrapper::remoteFingerprint(const Napi::CallbackInfo &info)
|
|
1060
|
+
{
|
|
1061
|
+
PLOG_DEBUG << "remoteFingerprints() called";
|
|
1062
|
+
Napi::Env env = info.Env();
|
|
1063
|
+
|
|
1064
|
+
if (!mRtcPeerConnPtr)
|
|
1065
|
+
{
|
|
1066
|
+
return Napi::Number::New(info.Env(), 0);
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
try
|
|
1070
|
+
{
|
|
1071
|
+
auto fingerprint = mRtcPeerConnPtr->remoteFingerprint();
|
|
1072
|
+
|
|
1073
|
+
Napi::Object fingerprintObject = Napi::Object::New(env);
|
|
1074
|
+
fingerprintObject.Set("value", fingerprint.value);
|
|
1075
|
+
fingerprintObject.Set("algorithm", rtc::CertificateFingerprint::AlgorithmIdentifier(fingerprint.algorithm));
|
|
1076
|
+
|
|
1077
|
+
return fingerprintObject;
|
|
1012
1078
|
}
|
|
1013
1079
|
catch (std::exception &ex)
|
|
1014
1080
|
{
|
|
@@ -38,6 +38,7 @@ public:
|
|
|
38
38
|
Napi::Value iceState(const Napi::CallbackInfo &info);
|
|
39
39
|
Napi::Value signalingState(const Napi::CallbackInfo &info);
|
|
40
40
|
Napi::Value gatheringState(const Napi::CallbackInfo &info);
|
|
41
|
+
Napi::Value remoteFingerprint(const Napi::CallbackInfo &info);
|
|
41
42
|
|
|
42
43
|
// Callbacks
|
|
43
44
|
void onLocalDescription(const Napi::CallbackInfo &info);
|
package/src/lib/index.ts
CHANGED
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
SelectedCandidateInfo,
|
|
17
17
|
} from './types';
|
|
18
18
|
import { WebSocket } from './websocket';
|
|
19
|
+
import type { CertificateFingerprint, IceUdpMuxRequest, LocalDescriptionInit } from './types';
|
|
19
20
|
|
|
20
21
|
export function preload(): void {
|
|
21
22
|
nodeDataChannel.preload();
|
|
@@ -136,10 +137,11 @@ export const DataChannel: {
|
|
|
136
137
|
|
|
137
138
|
export interface PeerConnection {
|
|
138
139
|
close(): void;
|
|
139
|
-
setLocalDescription(type?: DescriptionType): void;
|
|
140
|
+
setLocalDescription(type?: DescriptionType, init?: LocalDescriptionInit): void;
|
|
140
141
|
setRemoteDescription(sdp: string, type: DescriptionType): void;
|
|
141
142
|
localDescription(): { type: DescriptionType; sdp: string } | null;
|
|
142
143
|
remoteDescription(): { type: DescriptionType; sdp: string } | null;
|
|
144
|
+
remoteFingerprint(): CertificateFingerprint;
|
|
143
145
|
addRemoteCandidate(candidate: string, mid: string): void;
|
|
144
146
|
createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;
|
|
145
147
|
addTrack(media: Video | Audio): Track;
|
|
@@ -170,6 +172,16 @@ export const PeerConnection: {
|
|
|
170
172
|
new (peerName: string, config: RtcConfig): PeerConnection;
|
|
171
173
|
} = nodeDataChannel.PeerConnection;
|
|
172
174
|
|
|
175
|
+
export interface IceUdpMuxListener {
|
|
176
|
+
address?: string;
|
|
177
|
+
port: number;
|
|
178
|
+
stop(): void;
|
|
179
|
+
onUnhandledStunRequest(cb: (req: IceUdpMuxRequest) => void): void;
|
|
180
|
+
}
|
|
181
|
+
export const IceUdpMuxListener: {
|
|
182
|
+
new (port: number, address?: string): IceUdpMuxListener;
|
|
183
|
+
} = nodeDataChannel.IceUdpMuxListener;
|
|
184
|
+
|
|
173
185
|
export interface RtcpReceivingSession {}
|
|
174
186
|
|
|
175
187
|
export const RtcpReceivingSession: {
|
|
@@ -196,6 +208,7 @@ export default {
|
|
|
196
208
|
WebSocket,
|
|
197
209
|
WebSocketServer,
|
|
198
210
|
DataChannelStream,
|
|
211
|
+
IceUdpMuxListener,
|
|
199
212
|
};
|
|
200
213
|
|
|
201
214
|
// Types
|
package/src/lib/types.ts
CHANGED
|
@@ -73,6 +73,10 @@ export interface RtcConfig {
|
|
|
73
73
|
mtu?: number;
|
|
74
74
|
iceTransportPolicy?: TransportPolicy;
|
|
75
75
|
disableFingerprintVerification?: boolean;
|
|
76
|
+
disableAutoGathering?: boolean;
|
|
77
|
+
certificatePemFile?: string;
|
|
78
|
+
keyPemFile?: string;
|
|
79
|
+
keyPemPass?: string;
|
|
76
80
|
}
|
|
77
81
|
|
|
78
82
|
// Lowercase to match the description type string from libdatachannel
|
|
@@ -113,6 +117,11 @@ export type RTCSignalingState =
|
|
|
113
117
|
| 'have-remote-pranswer'
|
|
114
118
|
| 'stable';
|
|
115
119
|
|
|
120
|
+
export interface LocalDescriptionInit {
|
|
121
|
+
iceUfrag?: string;
|
|
122
|
+
icePwd?: string;
|
|
123
|
+
}
|
|
124
|
+
|
|
116
125
|
export interface DataChannelInitConfig {
|
|
117
126
|
protocol?: string;
|
|
118
127
|
negotiated?: boolean;
|
|
@@ -122,6 +131,17 @@ export interface DataChannelInitConfig {
|
|
|
122
131
|
maxRetransmits?: number; // Reliability
|
|
123
132
|
}
|
|
124
133
|
|
|
134
|
+
export interface CertificateFingerprint {
|
|
135
|
+
/**
|
|
136
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/RTCCertificate/getFingerprints#value
|
|
137
|
+
*/
|
|
138
|
+
value: string;
|
|
139
|
+
/**
|
|
140
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/RTCCertificate/getFingerprints#algorithm
|
|
141
|
+
*/
|
|
142
|
+
algorithm: 'sha-1' | 'sha-224' | 'sha-256' | 'sha-384' | 'sha-512' | 'md5' | 'md2';
|
|
143
|
+
}
|
|
144
|
+
|
|
125
145
|
export interface SelectedCandidateInfo {
|
|
126
146
|
address: string;
|
|
127
147
|
port: number;
|
|
@@ -134,3 +154,9 @@ export interface SelectedCandidateInfo {
|
|
|
134
154
|
|
|
135
155
|
// Must be same as rtc enum class Direction
|
|
136
156
|
export type Direction = 'SendOnly' | 'RecvOnly' | 'SendRecv' | 'Inactive' | 'Unknown';
|
|
157
|
+
|
|
158
|
+
export interface IceUdpMuxRequest {
|
|
159
|
+
ufrag: string;
|
|
160
|
+
host: string;
|
|
161
|
+
port: number;
|
|
162
|
+
}
|
package/src/polyfill/Events.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import RTCDataChannel from './RTCDataChannel';
|
|
2
2
|
import RTCError from './RTCError';
|
|
3
3
|
|
|
4
|
-
export class RTCPeerConnectionIceEvent
|
|
4
|
+
export class RTCPeerConnectionIceEvent
|
|
5
|
+
extends Event
|
|
6
|
+
implements globalThis.RTCPeerConnectionIceEvent
|
|
7
|
+
{
|
|
5
8
|
#candidate: globalThis.RTCIceCandidate;
|
|
6
9
|
|
|
7
10
|
constructor(candidate: globalThis.RTCIceCandidate) {
|
|
@@ -30,7 +30,7 @@ export default class RTCDataChannel extends EventTarget implements globalThis.RT
|
|
|
30
30
|
super();
|
|
31
31
|
|
|
32
32
|
this.#dataChannel = dataChannel;
|
|
33
|
-
this.#binaryType = '
|
|
33
|
+
this.#binaryType = 'arraybuffer';
|
|
34
34
|
this.#readyState = this.#dataChannel.isOpen() ? 'open' : 'connecting';
|
|
35
35
|
this.#bufferedAmountLowThreshold = 0;
|
|
36
36
|
this.#maxPacketLifeTime = opts.maxPacketLifeTime ?? null;
|
|
@@ -77,10 +77,29 @@ export default class RTCDataChannel extends EventTarget implements globalThis.RT
|
|
|
77
77
|
this.dispatchEvent(new Event('bufferedamountlow'));
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
-
this.#dataChannel.onMessage((
|
|
81
|
-
if (
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
this.#dataChannel.onMessage((message) => {
|
|
81
|
+
if (typeof message === 'string') {
|
|
82
|
+
this.dispatchEvent(new MessageEvent('message', { data: message }));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
let data: Blob | ArrayBuffer;
|
|
87
|
+
|
|
88
|
+
if (message instanceof ArrayBuffer) {
|
|
89
|
+
data = message;
|
|
90
|
+
} else {
|
|
91
|
+
data = message.buffer;
|
|
92
|
+
|
|
93
|
+
if (message.byteOffset !== 0 || message.byteLength !== message.buffer.byteLength) {
|
|
94
|
+
// message is view on underlying buffer, must create new
|
|
95
|
+
// ArrayBuffer that only contains message data
|
|
96
|
+
data = new ArrayBuffer(message.byteLength);
|
|
97
|
+
new Uint8Array(data, 0, message.byteLength).set(message);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (this.#binaryType === 'blob') {
|
|
102
|
+
data = new Blob([data]);
|
|
84
103
|
}
|
|
85
104
|
|
|
86
105
|
this.dispatchEvent(new MessageEvent('message', { data }));
|
|
@@ -13,7 +13,7 @@ export default class RTCSctpTransport extends EventTarget implements globalThis.
|
|
|
13
13
|
this.#pc = initial.pc;
|
|
14
14
|
|
|
15
15
|
this.#transport = new RTCDtlsTransport({
|
|
16
|
-
pc: initial.pc
|
|
16
|
+
pc: initial.pc,
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
this.#pc.addEventListener('connectionstatechange', () => {
|
|
@@ -30,7 +30,7 @@ export default class RTCSctpTransport extends EventTarget implements globalThis.
|
|
|
30
30
|
|
|
31
31
|
get maxMessageSize(): number {
|
|
32
32
|
if (this.state !== 'connected') return null;
|
|
33
|
-
return this.#pc?.ext_maxMessageSize ?? 65536
|
|
33
|
+
return this.#pc?.ext_maxMessageSize ?? 65536;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
get state(): globalThis.RTCSctpTransportState {
|