@lng2004/node-datachannel 0.31.0-20251228
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/.clang-format +17 -0
- package/.editorconfig +12 -0
- package/.eslintignore +8 -0
- package/.eslintrc.json +27 -0
- package/.gitmodules +3 -0
- package/.prettierignore +7 -0
- package/.prettierrc +13 -0
- package/API.md +247 -0
- package/BULDING.md +33 -0
- package/CMakeLists.txt +134 -0
- package/LICENSE +373 -0
- package/README.md +130 -0
- package/dist/cjs/index.cjs +11 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/lib/datachannel-stream.cjs +101 -0
- package/dist/cjs/lib/datachannel-stream.cjs.map +1 -0
- package/dist/cjs/lib/index.cjs +88 -0
- package/dist/cjs/lib/index.cjs.map +1 -0
- package/dist/cjs/lib/node-datachannel.cjs +8 -0
- package/dist/cjs/lib/node-datachannel.cjs.map +1 -0
- package/dist/cjs/lib/websocket-server.cjs +45 -0
- package/dist/cjs/lib/websocket-server.cjs.map +1 -0
- package/dist/cjs/lib/websocket.cjs +8 -0
- package/dist/cjs/lib/websocket.cjs.map +1 -0
- package/dist/cjs/polyfill/Events.cjs +86 -0
- package/dist/cjs/polyfill/Events.cjs.map +1 -0
- package/dist/cjs/polyfill/Exception.cjs +34 -0
- package/dist/cjs/polyfill/Exception.cjs.map +1 -0
- package/dist/cjs/polyfill/RTCCertificate.cjs +34 -0
- package/dist/cjs/polyfill/RTCCertificate.cjs.map +1 -0
- package/dist/cjs/polyfill/RTCDataChannel.cjs +214 -0
- package/dist/cjs/polyfill/RTCDataChannel.cjs.map +1 -0
- package/dist/cjs/polyfill/RTCDtlsTransport.cjs +53 -0
- package/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +1 -0
- package/dist/cjs/polyfill/RTCError.cjs +83 -0
- package/dist/cjs/polyfill/RTCError.cjs.map +1 -0
- package/dist/cjs/polyfill/RTCIceCandidate.cjs +132 -0
- package/dist/cjs/polyfill/RTCIceCandidate.cjs.map +1 -0
- package/dist/cjs/polyfill/RTCIceTransport.cjs +94 -0
- package/dist/cjs/polyfill/RTCIceTransport.cjs.map +1 -0
- package/dist/cjs/polyfill/RTCPeerConnection.cjs +434 -0
- package/dist/cjs/polyfill/RTCPeerConnection.cjs.map +1 -0
- package/dist/cjs/polyfill/RTCSctpTransport.cjs +59 -0
- package/dist/cjs/polyfill/RTCSctpTransport.cjs.map +1 -0
- package/dist/cjs/polyfill/RTCSessionDescription.cjs +45 -0
- package/dist/cjs/polyfill/RTCSessionDescription.cjs.map +1 -0
- package/dist/cjs/polyfill/index.cjs +42 -0
- package/dist/cjs/polyfill/index.cjs.map +1 -0
- package/dist/esm/index.mjs +8 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/lib/datachannel-stream.mjs +78 -0
- package/dist/esm/lib/datachannel-stream.mjs.map +1 -0
- package/dist/esm/lib/index.mjs +62 -0
- package/dist/esm/lib/index.mjs.map +1 -0
- package/dist/esm/lib/node-datachannel.mjs +12 -0
- package/dist/esm/lib/node-datachannel.mjs.map +1 -0
- package/dist/esm/lib/websocket-server.mjs +43 -0
- package/dist/esm/lib/websocket-server.mjs.map +1 -0
- package/dist/esm/lib/websocket.mjs +6 -0
- package/dist/esm/lib/websocket.mjs.map +1 -0
- package/dist/esm/polyfill/Events.mjs +82 -0
- package/dist/esm/polyfill/Events.mjs.map +1 -0
- package/dist/esm/polyfill/Exception.mjs +28 -0
- package/dist/esm/polyfill/Exception.mjs.map +1 -0
- package/dist/esm/polyfill/RTCCertificate.mjs +30 -0
- package/dist/esm/polyfill/RTCCertificate.mjs.map +1 -0
- package/dist/esm/polyfill/RTCDataChannel.mjs +210 -0
- package/dist/esm/polyfill/RTCDataChannel.mjs.map +1 -0
- package/dist/esm/polyfill/RTCDtlsTransport.mjs +49 -0
- package/dist/esm/polyfill/RTCDtlsTransport.mjs.map +1 -0
- package/dist/esm/polyfill/RTCError.mjs +79 -0
- package/dist/esm/polyfill/RTCError.mjs.map +1 -0
- package/dist/esm/polyfill/RTCIceCandidate.mjs +128 -0
- package/dist/esm/polyfill/RTCIceCandidate.mjs.map +1 -0
- package/dist/esm/polyfill/RTCIceTransport.mjs +89 -0
- package/dist/esm/polyfill/RTCIceTransport.mjs.map +1 -0
- package/dist/esm/polyfill/RTCPeerConnection.mjs +430 -0
- package/dist/esm/polyfill/RTCPeerConnection.mjs.map +1 -0
- package/dist/esm/polyfill/RTCSctpTransport.mjs +55 -0
- package/dist/esm/polyfill/RTCSctpTransport.mjs.map +1 -0
- package/dist/esm/polyfill/RTCSessionDescription.mjs +41 -0
- package/dist/esm/polyfill/RTCSessionDescription.mjs.map +1 -0
- package/dist/esm/polyfill/index.mjs +27 -0
- package/dist/esm/polyfill/index.mjs.map +1 -0
- package/dist/types/lib/datachannel-stream.d.ts +24 -0
- package/dist/types/lib/index.d.ts +235 -0
- package/dist/types/lib/types.d.ts +118 -0
- package/dist/types/lib/websocket-server.d.ts +13 -0
- package/dist/types/lib/websocket.d.ts +25 -0
- package/dist/types/polyfill/Events.d.ts +15 -0
- package/dist/types/polyfill/RTCCertificate.d.ts +9 -0
- package/dist/types/polyfill/RTCDataChannel.d.ts +29 -0
- package/dist/types/polyfill/RTCDtlsTransport.d.ts +15 -0
- package/dist/types/polyfill/RTCError.d.ts +17 -0
- package/dist/types/polyfill/RTCIceCandidate.d.ts +21 -0
- package/dist/types/polyfill/RTCIceTransport.d.ts +30 -0
- package/dist/types/polyfill/RTCPeerConnection.d.ts +64 -0
- package/dist/types/polyfill/RTCSctpTransport.d.ts +15 -0
- package/dist/types/polyfill/RTCSessionDescription.d.ts +10 -0
- package/dist/types/polyfill/index.d.ts +26 -0
- package/jest.config.ts +14 -0
- package/package.json +121 -0
- package/rollup.config.mjs +72 -0
- package/src/cpp/data-channel-wrapper.cpp +530 -0
- package/src/cpp/data-channel-wrapper.h +63 -0
- package/src/cpp/ice-udp-mux-listener-wrapper.cpp +157 -0
- package/src/cpp/ice-udp-mux-listener-wrapper.h +43 -0
- package/src/cpp/main.cpp +58 -0
- package/src/cpp/media-audio-wrapper.cpp +457 -0
- package/src/cpp/media-audio-wrapper.h +52 -0
- package/src/cpp/media-av1packetization.cpp +24 -0
- package/src/cpp/media-av1packetization.h +11 -0
- package/src/cpp/media-av1rtppacketizer-wrapper.cpp +126 -0
- package/src/cpp/media-av1rtppacketizer-wrapper.h +29 -0
- package/src/cpp/media-direction.cpp +43 -0
- package/src/cpp/media-direction.h +10 -0
- package/src/cpp/media-h264rtppacketizer-wrapper.cpp +126 -0
- package/src/cpp/media-h264rtppacketizer-wrapper.h +30 -0
- package/src/cpp/media-h265rtppacketizer-wrapper.cpp +126 -0
- package/src/cpp/media-h265rtppacketizer-wrapper.h +30 -0
- package/src/cpp/media-h26xseparator.cpp +32 -0
- package/src/cpp/media-h26xseparator.h +11 -0
- package/src/cpp/media-mediahandler-helper.cpp +31 -0
- package/src/cpp/media-mediahandler-helper.h +11 -0
- package/src/cpp/media-pacinghandler-wrapper.cpp +79 -0
- package/src/cpp/media-pacinghandler-wrapper.h +28 -0
- package/src/cpp/media-rtcpnackresponder-wrapper.cpp +68 -0
- package/src/cpp/media-rtcpnackresponder-wrapper.h +28 -0
- package/src/cpp/media-rtcpreceivingsession-wrapper.cpp +57 -0
- package/src/cpp/media-rtcpreceivingsession-wrapper.h +28 -0
- package/src/cpp/media-rtcpsrreporter-wrapper.cpp +93 -0
- package/src/cpp/media-rtcpsrreporter-wrapper.h +30 -0
- package/src/cpp/media-rtppacketizationconfig-wrapper.cpp +167 -0
- package/src/cpp/media-rtppacketizationconfig-wrapper.h +35 -0
- package/src/cpp/media-rtppacketizer-wrapper.cpp +95 -0
- package/src/cpp/media-rtppacketizer-wrapper.h +30 -0
- package/src/cpp/media-track-wrapper.cpp +458 -0
- package/src/cpp/media-track-wrapper.h +61 -0
- package/src/cpp/media-video-wrapper.cpp +526 -0
- package/src/cpp/media-video-wrapper.h +56 -0
- package/src/cpp/peer-connection-wrapper.cpp +1298 -0
- package/src/cpp/peer-connection-wrapper.h +89 -0
- package/src/cpp/rtc-wrapper.cpp +205 -0
- package/src/cpp/rtc-wrapper.h +24 -0
- package/src/cpp/thread-safe-callback.cpp +57 -0
- package/src/cpp/thread-safe-callback.h +47 -0
- package/src/cpp/web-socket-server-wrapper.cpp +275 -0
- package/src/cpp/web-socket-server-wrapper.h +41 -0
- package/src/cpp/web-socket-wrapper.cpp +796 -0
- package/src/cpp/web-socket-wrapper.h +63 -0
- package/src/index.ts +9 -0
- package/src/lib/datachannel-stream.ts +100 -0
- package/src/lib/index.ts +283 -0
- package/src/lib/node-datachannel.ts +3 -0
- package/src/lib/types.ts +168 -0
- package/src/lib/websocket-server.ts +37 -0
- package/src/lib/websocket.ts +26 -0
- package/src/polyfill/Events.ts +82 -0
- package/src/polyfill/Exception.ts +37 -0
- package/src/polyfill/README.md +41 -0
- package/src/polyfill/RTCCertificate.ts +21 -0
- package/src/polyfill/RTCDataChannel.ts +225 -0
- package/src/polyfill/RTCDtlsTransport.ts +46 -0
- package/src/polyfill/RTCError.ts +78 -0
- package/src/polyfill/RTCIceCandidate.ts +128 -0
- package/src/polyfill/RTCIceTransport.ts +90 -0
- package/src/polyfill/RTCPeerConnection.ts +527 -0
- package/src/polyfill/RTCSctpTransport.ts +51 -0
- package/src/polyfill/RTCSessionDescription.ts +41 -0
- package/src/polyfill/index.ts +38 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var nodeDatachannel = require('./node-datachannel.cjs');
|
|
6
|
+
var datachannelStream = require('./datachannel-stream.cjs');
|
|
7
|
+
var websocketServer = require('./websocket-server.cjs');
|
|
8
|
+
var websocket = require('./websocket.cjs');
|
|
9
|
+
|
|
10
|
+
function preload() {
|
|
11
|
+
nodeDatachannel.default.preload();
|
|
12
|
+
}
|
|
13
|
+
function initLogger(level) {
|
|
14
|
+
nodeDatachannel.default.initLogger(level);
|
|
15
|
+
}
|
|
16
|
+
function cleanup() {
|
|
17
|
+
nodeDatachannel.default.cleanup();
|
|
18
|
+
}
|
|
19
|
+
function setSctpSettings(settings) {
|
|
20
|
+
nodeDatachannel.default.setSctpSettings(settings);
|
|
21
|
+
}
|
|
22
|
+
function getLibraryVersion() {
|
|
23
|
+
return nodeDatachannel.default.getLibraryVersion();
|
|
24
|
+
}
|
|
25
|
+
const Audio = nodeDatachannel.default.Audio;
|
|
26
|
+
const Video = nodeDatachannel.default.Video;
|
|
27
|
+
const Track = nodeDatachannel.default.Track;
|
|
28
|
+
const DataChannel = nodeDatachannel.default.DataChannel;
|
|
29
|
+
const PeerConnection = nodeDatachannel.default.PeerConnection;
|
|
30
|
+
const IceUdpMuxListener = nodeDatachannel.default.IceUdpMuxListener;
|
|
31
|
+
const RtpPacketizationConfig = nodeDatachannel.default.RtpPacketizationConfig;
|
|
32
|
+
const RtcpReceivingSession = nodeDatachannel.default.RtcpReceivingSession;
|
|
33
|
+
const RtcpNackResponder = nodeDatachannel.default.RtcpNackResponder;
|
|
34
|
+
const RtcpSrReporter = nodeDatachannel.default.RtcpSrReporter;
|
|
35
|
+
const RtpPacketizer = nodeDatachannel.default.RtpPacketizer;
|
|
36
|
+
const H264RtpPacketizer = nodeDatachannel.default.H264RtpPacketizer;
|
|
37
|
+
const H265RtpPacketizer = nodeDatachannel.default.H265RtpPacketizer;
|
|
38
|
+
const AV1RtpPacketizer = nodeDatachannel.default.AV1RtpPacketizer;
|
|
39
|
+
const DataChannelStream = datachannelStream.default;
|
|
40
|
+
var n = {
|
|
41
|
+
initLogger,
|
|
42
|
+
cleanup,
|
|
43
|
+
preload,
|
|
44
|
+
setSctpSettings,
|
|
45
|
+
getLibraryVersion,
|
|
46
|
+
RtcpReceivingSession,
|
|
47
|
+
RtcpNackResponder,
|
|
48
|
+
RtcpSrReporter,
|
|
49
|
+
RtpPacketizationConfig,
|
|
50
|
+
RtpPacketizer,
|
|
51
|
+
H264RtpPacketizer,
|
|
52
|
+
H265RtpPacketizer,
|
|
53
|
+
AV1RtpPacketizer,
|
|
54
|
+
Track,
|
|
55
|
+
Video,
|
|
56
|
+
Audio,
|
|
57
|
+
DataChannel,
|
|
58
|
+
PeerConnection,
|
|
59
|
+
WebSocket: websocket.WebSocket,
|
|
60
|
+
WebSocketServer: websocketServer.WebSocketServer,
|
|
61
|
+
DataChannelStream,
|
|
62
|
+
IceUdpMuxListener
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
exports.WebSocketServer = websocketServer.WebSocketServer;
|
|
66
|
+
exports.WebSocket = websocket.WebSocket;
|
|
67
|
+
exports.AV1RtpPacketizer = AV1RtpPacketizer;
|
|
68
|
+
exports.Audio = Audio;
|
|
69
|
+
exports.DataChannel = DataChannel;
|
|
70
|
+
exports.DataChannelStream = DataChannelStream;
|
|
71
|
+
exports.H264RtpPacketizer = H264RtpPacketizer;
|
|
72
|
+
exports.H265RtpPacketizer = H265RtpPacketizer;
|
|
73
|
+
exports.IceUdpMuxListener = IceUdpMuxListener;
|
|
74
|
+
exports.PeerConnection = PeerConnection;
|
|
75
|
+
exports.RtcpNackResponder = RtcpNackResponder;
|
|
76
|
+
exports.RtcpReceivingSession = RtcpReceivingSession;
|
|
77
|
+
exports.RtcpSrReporter = RtcpSrReporter;
|
|
78
|
+
exports.RtpPacketizationConfig = RtpPacketizationConfig;
|
|
79
|
+
exports.RtpPacketizer = RtpPacketizer;
|
|
80
|
+
exports.Track = Track;
|
|
81
|
+
exports.Video = Video;
|
|
82
|
+
exports.cleanup = cleanup;
|
|
83
|
+
exports.default = n;
|
|
84
|
+
exports.getLibraryVersion = getLibraryVersion;
|
|
85
|
+
exports.initLogger = initLogger;
|
|
86
|
+
exports.preload = preload;
|
|
87
|
+
exports.setSctpSettings = setSctpSettings;
|
|
88
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +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 NalUnitSeparator,\n ObuPacketization,\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 addH265Codec(payloadType: number): void;\n addVP8Codec(payloadType: number): void;\n addVP9Codec(payloadType: number): void;\n addAV1Codec(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: MediaHandler): 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 RtpPacketizationConfig {\n playoutDelayId: number,\n playoutDelayMin: number,\n playoutDelayMax: number,\n timestamp: number,\n get clockRate(): number\n}\n\nexport const RtpPacketizationConfig: {\n new(ssrc: number, cname: string, payloadType: number, clockRate: number, videoOrientationId?: number): RtpPacketizationConfig\n} = nodeDataChannel.RtpPacketizationConfig\n\nexport interface MediaHandler {\n addToChain(handler: MediaHandler): void\n}\n\nexport interface RtcpReceivingSession extends MediaHandler {}\n\nexport const RtcpReceivingSession: {\n new (): RtcpReceivingSession;\n} = nodeDataChannel.RtcpReceivingSession;\n\nexport interface RtcpNackResponder extends MediaHandler {}\n\nexport const RtcpNackResponder: {\n new (maxSize?: number): RtcpNackResponder\n} = nodeDataChannel.RtcpNackResponder;\n\nexport interface RtcpSrReporter extends MediaHandler {\n get rtpConfig(): RtpPacketizationConfig\n}\n\nexport const RtcpSrReporter: {\n new (rtpConfig: RtpPacketizationConfig): RtcpSrReporter\n} = nodeDataChannel.RtcpSrReporter;\n\nexport interface RtpPacketizer extends MediaHandler {\n get rtpConfig(): RtpPacketizationConfig\n}\n\nexport const RtpPacketizer: {\n new (rtpConfig: RtpPacketizationConfig): RtpPacketizer\n} = nodeDataChannel.RtpPacketizer;\n\nexport interface H264RtpPacketizer extends RtpPacketizer {}\n\nexport const H264RtpPacketizer: {\n new (separator: NalUnitSeparator, rtpConfig: RtpPacketizationConfig, maxFragmentSize?: number): H264RtpPacketizer\n} = nodeDataChannel.H264RtpPacketizer\n\nexport interface H265RtpPacketizer extends RtpPacketizer {}\n\nexport const H265RtpPacketizer: {\n new (separator: NalUnitSeparator, rtpConfig: RtpPacketizationConfig, maxFragmentSize?: number): H265RtpPacketizer\n} = nodeDataChannel.H265RtpPacketizer\n\nexport interface AV1RtpPacketizer extends RtpPacketizer {}\n\nexport const AV1RtpPacketizer: {\n new (packetization: ObuPacketization, rtpConfig: RtpPacketizationConfig, maxFragmentSize?: number): AV1RtpPacketizer\n} = nodeDataChannel.AV1RtpPacketizer\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 RtcpNackResponder,\n RtcpSrReporter,\n RtpPacketizationConfig,\n RtpPacketizer,\n H264RtpPacketizer,\n H265RtpPacketizer,\n AV1RtpPacketizer,\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":";;;;;;;;;AAsBO,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;AA4Bb,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;AAUb,MAAM,yBAETA,uBAAgB,CAAA,uBAAA;AAQb,MAAM,uBAETA,uBAAgB,CAAA,qBAAA;AAIb,MAAM,oBAETA,uBAAgB,CAAA,kBAAA;AAMb,MAAM,iBAETA,uBAAgB,CAAA,eAAA;AAMb,MAAM,gBAETA,uBAAgB,CAAA,cAAA;AAIb,MAAM,oBAETA,uBAAgB,CAAA,kBAAA;AAIb,MAAM,oBAETA,uBAAgB,CAAA,kBAAA;AAIb,MAAM,mBAETA,uBAAgB,CAAA,iBAAA;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,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,sBAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;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;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-datachannel.cjs","sources":["../../../src/lib/node-datachannel.ts"],"sourcesContent":["// @ts-expect-error no types\nimport nodeDataChannel = require('../../build/Release/node_datachannel.node');\nexport default nodeDataChannel;\n"],"names":[],"mappings":";;;;AACA,MAAO,kBAAkB,OAAoB,CAAA,8CAAA;;;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var events = require('events');
|
|
4
|
+
var nodeDatachannel = require('./node-datachannel.cjs');
|
|
5
|
+
|
|
6
|
+
var __typeError = (msg) => {
|
|
7
|
+
throw TypeError(msg);
|
|
8
|
+
};
|
|
9
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
10
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
11
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
12
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
13
|
+
var _server, _clients;
|
|
14
|
+
class WebSocketServer extends events.EventEmitter {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
super();
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
18
|
+
__privateAdd(this, _server);
|
|
19
|
+
__privateAdd(this, _clients, []);
|
|
20
|
+
__privateSet(this, _server, new nodeDatachannel.default.WebSocketServer(options));
|
|
21
|
+
__privateGet(this, _server).onClient((client) => {
|
|
22
|
+
this.emit("client", client);
|
|
23
|
+
__privateGet(this, _clients).push(client);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
port() {
|
|
27
|
+
return __privateGet(this, _server)?.port() || 0;
|
|
28
|
+
}
|
|
29
|
+
stop() {
|
|
30
|
+
__privateGet(this, _clients).forEach((client) => {
|
|
31
|
+
client?.close();
|
|
32
|
+
});
|
|
33
|
+
__privateGet(this, _server)?.stop();
|
|
34
|
+
__privateSet(this, _server, null);
|
|
35
|
+
this.removeAllListeners();
|
|
36
|
+
}
|
|
37
|
+
onClient(cb) {
|
|
38
|
+
if (__privateGet(this, _server)) this.on("client", cb);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
_server = new WeakMap();
|
|
42
|
+
_clients = new WeakMap();
|
|
43
|
+
|
|
44
|
+
exports.WebSocketServer = WebSocketServer;
|
|
45
|
+
//# sourceMappingURL=websocket-server.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-server.cjs","sources":["../../../src/lib/websocket-server.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport nodeDataChannel from './node-datachannel';\nimport { WebSocketServerConfiguration } from './types';\nimport { WebSocket } from './websocket';\n\nexport class WebSocketServer extends EventEmitter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #server: any;\n #clients: WebSocket[] = [];\n\n constructor(options: WebSocketServerConfiguration) {\n super();\n this.#server = new nodeDataChannel.WebSocketServer(options);\n\n this.#server.onClient((client) => {\n this.emit('client', client);\n this.#clients.push(client);\n });\n }\n\n port(): number {\n return this.#server?.port() || 0;\n }\n\n stop(): void {\n this.#clients.forEach((client) => {\n client?.close();\n });\n this.#server?.stop();\n this.#server = null;\n this.removeAllListeners();\n }\n\n onClient(cb: (clientSocket: WebSocket) => void): void {\n if (this.#server) this.on('client', cb);\n }\n}\n"],"names":["EventEmitter","nodeDataChannel"],"mappings":";;;;;;;;;;;;AAAA,IAAA,OAAA,EAAA,QAAA,CAAA;AAKO,MAAM,wBAAwBA,mBAAa,CAAA;AAAA,EAKhD,YAAY,OAAuC,EAAA;AACjD,IAAM,KAAA,EAAA,CAAA;AAJR;AAAA,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,EAAwB,EAAC,CAAA,CAAA;AAIvB,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,IAAIC,uBAAgB,CAAA,eAAA,CAAgB,OAAO,CAAA,CAAA,CAAA;AAE1D,IAAK,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAQ,QAAS,CAAA,CAAC,MAAW,KAAA;AAChC,MAAK,IAAA,CAAA,IAAA,CAAK,UAAU,MAAM,CAAA,CAAA;AAC1B,MAAK,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,KAAK,MAAM,CAAA,CAAA;AAAA,KAC1B,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAe,GAAA;AACb,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,OAAS,CAAA,EAAA,IAAA,EAAU,IAAA,CAAA,CAAA;AAAA,GACjC;AAAA,EAEA,IAAa,GAAA;AACX,IAAK,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,OAAQ,CAAA,CAAC,MAAW,KAAA;AAChC,MAAA,MAAA,EAAQ,KAAM,EAAA,CAAA;AAAA,KACf,CAAA,CAAA;AACD,IAAA,YAAA,CAAA,IAAA,EAAK,UAAS,IAAK,EAAA,CAAA;AACnB,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,IAAA,CAAA,CAAA;AACf,IAAA,IAAA,CAAK,kBAAmB,EAAA,CAAA;AAAA,GAC1B;AAAA,EAEA,SAAS,EAA6C,EAAA;AACpD,IAAA,IAAI,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,EAAc,IAAA,CAAA,EAAA,CAAG,UAAU,EAAE,CAAA,CAAA;AAAA,GACxC;AACF,CAAA;AA7BE,OAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.cjs","sources":["../../../src/lib/websocket.ts"],"sourcesContent":["import nodeDataChannel from './node-datachannel';\nimport { Channel, WebSocketServerConfiguration } from './types';\n\nexport interface WebSocket extends Channel {\n open(url: string): void;\n forceClose(): void;\n remoteAddress(): string | undefined;\n path(): string | undefined;\n\n // Channel implementation\n close(): void;\n sendMessage(msg: string): boolean;\n sendMessageBinary(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) => void): void;\n}\nexport const WebSocket: {\n new (config?: WebSocketServerConfiguration): WebSocket;\n} = nodeDataChannel.WebSocket;\n"],"names":["nodeDataChannel"],"mappings":";;;;AAuBO,MAAM,YAETA,uBAAgB,CAAA;;;;"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var RTCDataChannel = require('./RTCDataChannel.cjs');
|
|
4
|
+
var RTCError = require('./RTCError.cjs');
|
|
5
|
+
|
|
6
|
+
var __typeError = (msg) => {
|
|
7
|
+
throw TypeError(msg);
|
|
8
|
+
};
|
|
9
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
10
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
11
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
12
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
13
|
+
var _candidate, _channel, _error;
|
|
14
|
+
class RTCPeerConnectionIceEvent extends Event {
|
|
15
|
+
constructor(candidate) {
|
|
16
|
+
super("icecandidate");
|
|
17
|
+
__privateAdd(this, _candidate);
|
|
18
|
+
__privateSet(this, _candidate, candidate);
|
|
19
|
+
}
|
|
20
|
+
get candidate() {
|
|
21
|
+
return __privateGet(this, _candidate);
|
|
22
|
+
}
|
|
23
|
+
get url() {
|
|
24
|
+
return "";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
_candidate = new WeakMap();
|
|
28
|
+
class RTCDataChannelEvent extends Event {
|
|
29
|
+
constructor(type = "datachannel", eventInitDict) {
|
|
30
|
+
super(type);
|
|
31
|
+
__privateAdd(this, _channel);
|
|
32
|
+
if (arguments.length === 0)
|
|
33
|
+
throw new TypeError(
|
|
34
|
+
`Failed to construct 'RTCDataChannelEvent': 2 arguments required, but only ${arguments.length} present.`
|
|
35
|
+
);
|
|
36
|
+
if (typeof eventInitDict !== "object")
|
|
37
|
+
throw new TypeError(
|
|
38
|
+
"Failed to construct 'RTCDataChannelEvent': The provided value is not of type 'RTCDataChannelEventInit'."
|
|
39
|
+
);
|
|
40
|
+
if (!eventInitDict.channel)
|
|
41
|
+
throw new TypeError(
|
|
42
|
+
"Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Required member is undefined."
|
|
43
|
+
);
|
|
44
|
+
if (eventInitDict.channel.constructor !== RTCDataChannel.default)
|
|
45
|
+
throw new TypeError(
|
|
46
|
+
"Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Failed to convert value to 'RTCDataChannel'."
|
|
47
|
+
);
|
|
48
|
+
__privateSet(this, _channel, eventInitDict?.channel);
|
|
49
|
+
}
|
|
50
|
+
get channel() {
|
|
51
|
+
return __privateGet(this, _channel);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
_channel = new WeakMap();
|
|
55
|
+
class RTCErrorEvent extends Event {
|
|
56
|
+
constructor(type, init) {
|
|
57
|
+
if (arguments.length < 2)
|
|
58
|
+
throw new TypeError(
|
|
59
|
+
`Failed to construct 'RTCErrorEvent': 2 arguments required, but only ${arguments.length} present.`
|
|
60
|
+
);
|
|
61
|
+
if (typeof init !== "object")
|
|
62
|
+
throw new TypeError(
|
|
63
|
+
"Failed to construct 'RTCErrorEvent': The provided value is not of type 'RTCErrorEventInit'."
|
|
64
|
+
);
|
|
65
|
+
if (!init.error)
|
|
66
|
+
throw new TypeError(
|
|
67
|
+
"Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Required member is undefined."
|
|
68
|
+
);
|
|
69
|
+
if (init.error.constructor !== RTCError.default)
|
|
70
|
+
throw new TypeError(
|
|
71
|
+
"Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Failed to convert value to 'RTCError'."
|
|
72
|
+
);
|
|
73
|
+
super(type || "error");
|
|
74
|
+
__privateAdd(this, _error);
|
|
75
|
+
__privateSet(this, _error, init.error);
|
|
76
|
+
}
|
|
77
|
+
get error() {
|
|
78
|
+
return __privateGet(this, _error);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
_error = new WeakMap();
|
|
82
|
+
|
|
83
|
+
exports.RTCDataChannelEvent = RTCDataChannelEvent;
|
|
84
|
+
exports.RTCErrorEvent = RTCErrorEvent;
|
|
85
|
+
exports.RTCPeerConnectionIceEvent = RTCPeerConnectionIceEvent;
|
|
86
|
+
//# sourceMappingURL=Events.cjs.map
|
|
@@ -0,0 +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\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":";;;;;;;;;;;;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,KAAAA,sBAAA;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,KAAAC,gBAAA;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;;;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
class InvalidStateError extends DOMException {
|
|
4
|
+
constructor(msg) {
|
|
5
|
+
super(msg, "InvalidStateError");
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
class OperationError extends DOMException {
|
|
9
|
+
constructor(msg) {
|
|
10
|
+
super(msg, "OperationError");
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
class NotFoundError extends DOMException {
|
|
14
|
+
constructor(msg) {
|
|
15
|
+
super(msg, "NotFoundError");
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
class InvalidAccessError extends DOMException {
|
|
19
|
+
constructor(msg) {
|
|
20
|
+
super(msg, "InvalidAccessError");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
class SyntaxError extends DOMException {
|
|
24
|
+
constructor(msg) {
|
|
25
|
+
super(msg, "SyntaxError");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
exports.InvalidAccessError = InvalidAccessError;
|
|
30
|
+
exports.InvalidStateError = InvalidStateError;
|
|
31
|
+
exports.NotFoundError = NotFoundError;
|
|
32
|
+
exports.OperationError = OperationError;
|
|
33
|
+
exports.SyntaxError = SyntaxError;
|
|
34
|
+
//# sourceMappingURL=Exception.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Exception.cjs","sources":["../../../src/polyfill/Exception.ts"],"sourcesContent":["/// <reference lib=\"dom\" />\n\nexport class InvalidStateError extends DOMException {\n constructor(msg: string) {\n super(msg, 'InvalidStateError');\n }\n}\n\nexport class TypeError extends DOMException {\n constructor(msg: string) {\n super(msg, 'TypeError');\n }\n}\n\nexport class OperationError extends DOMException {\n constructor(msg: string) {\n super(msg, 'OperationError');\n }\n}\n\nexport class NotFoundError extends DOMException {\n constructor(msg: string) {\n super(msg, 'NotFoundError');\n }\n}\n\nexport class InvalidAccessError extends DOMException {\n constructor(msg: string) {\n super(msg, 'InvalidAccessError');\n }\n}\n\nexport class SyntaxError extends DOMException {\n constructor(msg: string) {\n super(msg, 'SyntaxError');\n }\n}\n"],"names":[],"mappings":";;AAEO,MAAM,0BAA0B,YAAa,CAAA;AAAA,EAClD,YAAY,GAAa,EAAA;AACvB,IAAA,KAAA,CAAM,KAAK,mBAAmB,CAAA,CAAA;AAAA,GAChC;AACF,CAAA;AAQO,MAAM,uBAAuB,YAAa,CAAA;AAAA,EAC/C,YAAY,GAAa,EAAA;AACvB,IAAA,KAAA,CAAM,KAAK,gBAAgB,CAAA,CAAA;AAAA,GAC7B;AACF,CAAA;AAEO,MAAM,sBAAsB,YAAa,CAAA;AAAA,EAC9C,YAAY,GAAa,EAAA;AACvB,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA,CAAA;AAAA,GAC5B;AACF,CAAA;AAEO,MAAM,2BAA2B,YAAa,CAAA;AAAA,EACnD,YAAY,GAAa,EAAA;AACvB,IAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA,CAAA;AAAA,GACjC;AACF,CAAA;AAEO,MAAM,oBAAoB,YAAa,CAAA;AAAA,EAC5C,YAAY,GAAa,EAAA;AACvB,IAAA,KAAA,CAAM,KAAK,aAAa,CAAA,CAAA;AAAA,GAC1B;AACF;;;;;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var __typeError = (msg) => {
|
|
6
|
+
throw TypeError(msg);
|
|
7
|
+
};
|
|
8
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
9
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
10
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
11
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
12
|
+
var _expires, _fingerprints;
|
|
13
|
+
class RTCCertificate {
|
|
14
|
+
constructor() {
|
|
15
|
+
__privateAdd(this, _expires, 0);
|
|
16
|
+
__privateAdd(this, _fingerprints, []);
|
|
17
|
+
__privateSet(this, _expires, null);
|
|
18
|
+
__privateSet(this, _fingerprints, []);
|
|
19
|
+
}
|
|
20
|
+
get expires() {
|
|
21
|
+
return __privateGet(this, _expires);
|
|
22
|
+
}
|
|
23
|
+
getFingerprints() {
|
|
24
|
+
return __privateGet(this, _fingerprints);
|
|
25
|
+
}
|
|
26
|
+
getAlgorithm() {
|
|
27
|
+
return "";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
_expires = new WeakMap();
|
|
31
|
+
_fingerprints = new WeakMap();
|
|
32
|
+
|
|
33
|
+
exports.default = RTCCertificate;
|
|
34
|
+
//# sourceMappingURL=RTCCertificate.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RTCCertificate.cjs","sources":["../../../src/polyfill/RTCCertificate.ts"],"sourcesContent":["export default class RTCCertificate implements globalThis.RTCCertificate {\n #expires: number = 0;\n #fingerprints: globalThis.RTCDtlsFingerprint[] = [];\n\n constructor() {\n this.#expires = null;\n this.#fingerprints = [];\n }\n\n get expires(): number {\n return this.#expires;\n }\n\n getFingerprints(): globalThis.RTCDtlsFingerprint[] {\n return this.#fingerprints;\n }\n\n getAlgorithm(): string {\n return '';\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAAA,IAAA,QAAA,EAAA,aAAA,CAAA;AAAA,MAAqB,cAAoD,CAAA;AAAA,EAIvE,WAAc,GAAA;AAHd,IAAmB,YAAA,CAAA,IAAA,EAAA,QAAA,EAAA,CAAA,CAAA,CAAA;AACnB,IAAA,YAAA,CAAA,IAAA,EAAA,aAAA,EAAiD,EAAC,CAAA,CAAA;AAGhD,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,IAAA,CAAA,CAAA;AAChB,IAAA,YAAA,CAAA,IAAA,EAAK,eAAgB,EAAC,CAAA,CAAA;AAAA,GACxB;AAAA,EAEA,IAAI,OAAkB,GAAA;AACpB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,eAAmD,GAAA;AACjD,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,YAAuB,GAAA;AACrB,IAAO,OAAA,EAAA,CAAA;AAAA,GACT;AACF,CAAA;AAnBE,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,aAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var Exception = require('./Exception.cjs');
|
|
6
|
+
var Events = require('./Events.cjs');
|
|
7
|
+
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __typeError = (msg) => {
|
|
10
|
+
throw TypeError(msg);
|
|
11
|
+
};
|
|
12
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
14
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
15
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
16
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
17
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
18
|
+
var _dataChannel, _readyState, _bufferedAmountLowThreshold, _binaryType, _maxPacketLifeTime, _maxRetransmits, _negotiated, _ordered, _id, _label, _protocol, _closeRequested;
|
|
19
|
+
class RTCDataChannel extends EventTarget {
|
|
20
|
+
constructor(dataChannel, opts = {}) {
|
|
21
|
+
super();
|
|
22
|
+
__privateAdd(this, _dataChannel);
|
|
23
|
+
__privateAdd(this, _readyState);
|
|
24
|
+
__privateAdd(this, _bufferedAmountLowThreshold);
|
|
25
|
+
__privateAdd(this, _binaryType);
|
|
26
|
+
__privateAdd(this, _maxPacketLifeTime);
|
|
27
|
+
__privateAdd(this, _maxRetransmits);
|
|
28
|
+
__privateAdd(this, _negotiated);
|
|
29
|
+
__privateAdd(this, _ordered);
|
|
30
|
+
__privateAdd(this, _id);
|
|
31
|
+
__privateAdd(this, _label);
|
|
32
|
+
__privateAdd(this, _protocol);
|
|
33
|
+
__privateAdd(this, _closeRequested, false);
|
|
34
|
+
// events
|
|
35
|
+
__publicField(this, "onbufferedamountlow", null);
|
|
36
|
+
__publicField(this, "onclose", null);
|
|
37
|
+
__publicField(this, "onclosing", null);
|
|
38
|
+
__publicField(this, "onerror", null);
|
|
39
|
+
__publicField(this, "onmessage", null);
|
|
40
|
+
__publicField(this, "onopen", null);
|
|
41
|
+
__privateSet(this, _dataChannel, dataChannel);
|
|
42
|
+
__privateSet(this, _binaryType, "arraybuffer");
|
|
43
|
+
__privateSet(this, _readyState, __privateGet(this, _dataChannel).isOpen() ? "open" : "connecting");
|
|
44
|
+
__privateSet(this, _bufferedAmountLowThreshold, 0);
|
|
45
|
+
__privateSet(this, _maxPacketLifeTime, opts.maxPacketLifeTime ?? null);
|
|
46
|
+
__privateSet(this, _maxRetransmits, opts.maxRetransmits ?? null);
|
|
47
|
+
__privateSet(this, _negotiated, opts.negotiated ?? false);
|
|
48
|
+
__privateSet(this, _ordered, opts.ordered ?? true);
|
|
49
|
+
__privateSet(this, _id, __privateGet(this, _dataChannel).getId());
|
|
50
|
+
__privateSet(this, _label, __privateGet(this, _dataChannel).getLabel());
|
|
51
|
+
__privateSet(this, _protocol, __privateGet(this, _dataChannel).getProtocol());
|
|
52
|
+
__privateGet(this, _dataChannel).onOpen(() => {
|
|
53
|
+
__privateSet(this, _readyState, "open");
|
|
54
|
+
this.dispatchEvent(new Event("open", {}));
|
|
55
|
+
});
|
|
56
|
+
__privateGet(this, _dataChannel).onClosed(() => {
|
|
57
|
+
if (!__privateGet(this, _closeRequested)) {
|
|
58
|
+
__privateSet(this, _readyState, "closing");
|
|
59
|
+
this.dispatchEvent(new Event("closing"));
|
|
60
|
+
}
|
|
61
|
+
setImmediate(() => {
|
|
62
|
+
__privateSet(this, _readyState, "closed");
|
|
63
|
+
this.dispatchEvent(new Event("close"));
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
__privateGet(this, _dataChannel).onError((msg) => {
|
|
67
|
+
this.dispatchEvent(
|
|
68
|
+
new Events.RTCErrorEvent("error", {
|
|
69
|
+
error: new RTCError(
|
|
70
|
+
{
|
|
71
|
+
errorDetail: "data-channel-failure"
|
|
72
|
+
},
|
|
73
|
+
msg
|
|
74
|
+
)
|
|
75
|
+
})
|
|
76
|
+
);
|
|
77
|
+
});
|
|
78
|
+
__privateGet(this, _dataChannel).onBufferedAmountLow(() => {
|
|
79
|
+
this.dispatchEvent(new Event("bufferedamountlow"));
|
|
80
|
+
});
|
|
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]);
|
|
98
|
+
}
|
|
99
|
+
this.dispatchEvent(new MessageEvent("message", { data }));
|
|
100
|
+
});
|
|
101
|
+
this.addEventListener("message", (e) => {
|
|
102
|
+
if (this.onmessage) this.onmessage(e);
|
|
103
|
+
});
|
|
104
|
+
this.addEventListener("bufferedamountlow", (e) => {
|
|
105
|
+
if (this.onbufferedamountlow) this.onbufferedamountlow(e);
|
|
106
|
+
});
|
|
107
|
+
this.addEventListener("error", (e) => {
|
|
108
|
+
if (this.onerror) this.onerror(e);
|
|
109
|
+
});
|
|
110
|
+
this.addEventListener("close", (e) => {
|
|
111
|
+
if (this.onclose) this.onclose(e);
|
|
112
|
+
});
|
|
113
|
+
this.addEventListener("closing", (e) => {
|
|
114
|
+
if (this.onclosing) this.onclosing(e);
|
|
115
|
+
});
|
|
116
|
+
this.addEventListener("open", (e) => {
|
|
117
|
+
if (this.onopen) this.onopen(e);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
set binaryType(type) {
|
|
121
|
+
if (type !== "blob" && type !== "arraybuffer") {
|
|
122
|
+
throw new DOMException(
|
|
123
|
+
"Failed to set the 'binaryType' property on 'RTCDataChannel': Unknown binary type : " + type,
|
|
124
|
+
"TypeMismatchError"
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
__privateSet(this, _binaryType, type);
|
|
128
|
+
}
|
|
129
|
+
get binaryType() {
|
|
130
|
+
return __privateGet(this, _binaryType);
|
|
131
|
+
}
|
|
132
|
+
get bufferedAmount() {
|
|
133
|
+
return __privateGet(this, _dataChannel).bufferedAmount();
|
|
134
|
+
}
|
|
135
|
+
get bufferedAmountLowThreshold() {
|
|
136
|
+
return __privateGet(this, _bufferedAmountLowThreshold);
|
|
137
|
+
}
|
|
138
|
+
set bufferedAmountLowThreshold(value) {
|
|
139
|
+
const number = Number(value) || 0;
|
|
140
|
+
__privateSet(this, _bufferedAmountLowThreshold, number);
|
|
141
|
+
__privateGet(this, _dataChannel).setBufferedAmountLowThreshold(number);
|
|
142
|
+
}
|
|
143
|
+
get id() {
|
|
144
|
+
return __privateGet(this, _id);
|
|
145
|
+
}
|
|
146
|
+
get label() {
|
|
147
|
+
return __privateGet(this, _label);
|
|
148
|
+
}
|
|
149
|
+
get maxPacketLifeTime() {
|
|
150
|
+
return __privateGet(this, _maxPacketLifeTime);
|
|
151
|
+
}
|
|
152
|
+
get maxRetransmits() {
|
|
153
|
+
return __privateGet(this, _maxRetransmits);
|
|
154
|
+
}
|
|
155
|
+
get negotiated() {
|
|
156
|
+
return __privateGet(this, _negotiated);
|
|
157
|
+
}
|
|
158
|
+
get ordered() {
|
|
159
|
+
return __privateGet(this, _ordered);
|
|
160
|
+
}
|
|
161
|
+
get protocol() {
|
|
162
|
+
return __privateGet(this, _protocol);
|
|
163
|
+
}
|
|
164
|
+
get readyState() {
|
|
165
|
+
return __privateGet(this, _readyState);
|
|
166
|
+
}
|
|
167
|
+
send(data) {
|
|
168
|
+
if (__privateGet(this, _readyState) !== "open") {
|
|
169
|
+
throw new Exception.InvalidStateError(
|
|
170
|
+
"Failed to execute 'send' on 'RTCDataChannel': RTCDataChannel.readyState is not 'open'"
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
if (typeof data === "string") {
|
|
174
|
+
__privateGet(this, _dataChannel).sendMessage(data);
|
|
175
|
+
} else if (data instanceof Blob) {
|
|
176
|
+
data.arrayBuffer().then((ab) => {
|
|
177
|
+
if (process?.versions?.bun) {
|
|
178
|
+
__privateGet(this, _dataChannel).sendMessageBinary(Buffer.from(ab));
|
|
179
|
+
} else {
|
|
180
|
+
__privateGet(this, _dataChannel).sendMessageBinary(new Uint8Array(ab));
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
} else if (data instanceof Uint8Array) {
|
|
184
|
+
__privateGet(this, _dataChannel).sendMessageBinary(data);
|
|
185
|
+
} else {
|
|
186
|
+
if (process?.versions?.bun) {
|
|
187
|
+
__privateGet(this, _dataChannel).sendMessageBinary(Buffer.from(data));
|
|
188
|
+
} else {
|
|
189
|
+
__privateGet(this, _dataChannel).sendMessageBinary(new Uint8Array(data));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
close() {
|
|
194
|
+
__privateSet(this, _closeRequested, true);
|
|
195
|
+
setImmediate(() => {
|
|
196
|
+
__privateGet(this, _dataChannel).close();
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
_dataChannel = new WeakMap();
|
|
201
|
+
_readyState = new WeakMap();
|
|
202
|
+
_bufferedAmountLowThreshold = new WeakMap();
|
|
203
|
+
_binaryType = new WeakMap();
|
|
204
|
+
_maxPacketLifeTime = new WeakMap();
|
|
205
|
+
_maxRetransmits = new WeakMap();
|
|
206
|
+
_negotiated = new WeakMap();
|
|
207
|
+
_ordered = new WeakMap();
|
|
208
|
+
_id = new WeakMap();
|
|
209
|
+
_label = new WeakMap();
|
|
210
|
+
_protocol = new WeakMap();
|
|
211
|
+
_closeRequested = new WeakMap();
|
|
212
|
+
|
|
213
|
+
exports.default = RTCDataChannel;
|
|
214
|
+
//# sourceMappingURL=RTCDataChannel.cjs.map
|
|
@@ -0,0 +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 = '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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"}
|