@dxos/network-manager 0.3.8-next.f4e0086 → 0.3.8

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.
@@ -0,0 +1,462 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var chunk_XE5JOIGD_exports = {};
30
+ __export(chunk_XE5JOIGD_exports, {
31
+ IceCandidate: () => IceCandidate,
32
+ PeerConnection: () => PeerConnection,
33
+ SessionDescription: () => SessionDescription,
34
+ __require: () => __require,
35
+ cleanup: () => cleanup
36
+ });
37
+ module.exports = __toCommonJS(chunk_XE5JOIGD_exports);
38
+ var import_node_datachannel = __toESM(require("node-datachannel"));
39
+ var import_node_datachannel2 = __toESM(require("node-datachannel"));
40
+ var import_p_defer = __toESM(require("p-defer"));
41
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
42
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
43
+ }) : x)(function(x) {
44
+ if (typeof require !== "undefined")
45
+ return require.apply(this, arguments);
46
+ throw Error('Dynamic require of "' + x + '" is not supported');
47
+ });
48
+ var IceCandidate = class {
49
+ constructor(init) {
50
+ if (init.candidate == null) {
51
+ throw new DOMException("candidate must be specified");
52
+ }
53
+ this.candidate = init.candidate;
54
+ this.sdpMLineIndex = init.sdpMLineIndex ?? null;
55
+ this.sdpMid = init.sdpMid ?? null;
56
+ this.usernameFragment = init.usernameFragment ?? null;
57
+ this.address = null;
58
+ this.component = null;
59
+ this.foundation = null;
60
+ this.port = null;
61
+ this.priority = null;
62
+ this.protocol = null;
63
+ this.relatedAddress = null;
64
+ this.relatedPort = null;
65
+ this.tcpType = null;
66
+ this.type = null;
67
+ }
68
+ toJSON() {
69
+ return {
70
+ candidate: this.candidate,
71
+ sdpMLineIndex: this.sdpMLineIndex,
72
+ sdpMid: this.sdpMid,
73
+ usernameFragment: this.usernameFragment
74
+ };
75
+ }
76
+ };
77
+ var DataChannel = class extends EventTarget {
78
+ constructor(dataChannel, dataChannelDict = {}) {
79
+ super();
80
+ this.#dataChannel = dataChannel;
81
+ this.#readyState = "connecting";
82
+ this.#bufferedAmountLowThreshold = 0;
83
+ this.binaryType = "arraybuffer";
84
+ this.#dataChannel.onOpen(() => {
85
+ this.#readyState = "open";
86
+ this.dispatchEvent(new Event("open"));
87
+ });
88
+ this.#dataChannel.onClosed(() => {
89
+ this.#readyState = "closed";
90
+ this.dispatchEvent(new Event("close"));
91
+ });
92
+ this.#dataChannel.onError((msg) => {
93
+ this.#readyState = "closed";
94
+ this.dispatchEvent(new RTCErrorEvent("error", {
95
+ error: new RTCError({
96
+ errorDetail: "data-channel-failure"
97
+ }, msg)
98
+ }));
99
+ });
100
+ this.#dataChannel.onBufferedAmountLow(() => {
101
+ this.dispatchEvent(new Event("bufferedamountlow"));
102
+ });
103
+ this.#dataChannel.onMessage((data) => {
104
+ if (typeof data === "string") {
105
+ data = Buffer.from(data);
106
+ }
107
+ this.dispatchEvent(new MessageEvent("message", {
108
+ data
109
+ }));
110
+ });
111
+ this.addEventListener("message", (event) => {
112
+ this.onmessage?.(event);
113
+ });
114
+ this.addEventListener("bufferedamountlow", (event) => {
115
+ this.onbufferedamountlow?.(event);
116
+ });
117
+ this.addEventListener("error", (event) => {
118
+ this.onerror?.(event);
119
+ });
120
+ this.addEventListener("close", (event) => {
121
+ this.onclose?.(event);
122
+ });
123
+ this.addEventListener("closing", (event) => {
124
+ this.onclosing?.(event);
125
+ });
126
+ this.addEventListener("open", (event) => {
127
+ this.onopen?.(event);
128
+ });
129
+ this.onbufferedamountlow = null;
130
+ this.onclose = null;
131
+ this.onclosing = null;
132
+ this.onerror = null;
133
+ this.onmessage = null;
134
+ this.onopen = null;
135
+ this.maxPacketLifeTime = dataChannelDict.maxPacketLifeTime ?? null;
136
+ this.maxRetransmits = dataChannelDict.maxRetransmits ?? null;
137
+ this.negotiated = dataChannelDict.negotiated ?? false;
138
+ this.ordered = dataChannelDict.ordered ?? true;
139
+ }
140
+ #dataChannel;
141
+ #bufferedAmountLowThreshold;
142
+ #readyState;
143
+ get id() {
144
+ return this.#dataChannel.getId();
145
+ }
146
+ get label() {
147
+ return this.#dataChannel.getLabel();
148
+ }
149
+ get protocol() {
150
+ return this.#dataChannel.getProtocol();
151
+ }
152
+ get bufferedAmount() {
153
+ return this.#dataChannel.bufferedAmount();
154
+ }
155
+ set bufferedAmountLowThreshold(threshold) {
156
+ this.#bufferedAmountLowThreshold = threshold;
157
+ this.#dataChannel.setBufferedAmountLowThreshold(threshold);
158
+ }
159
+ get bufferedAmountLowThreshold() {
160
+ return this.#bufferedAmountLowThreshold;
161
+ }
162
+ get readyState() {
163
+ return this.#readyState;
164
+ }
165
+ close() {
166
+ this.#readyState = "closing";
167
+ this.dispatchEvent(new Event("closing"));
168
+ this.#dataChannel.close();
169
+ }
170
+ send(data) {
171
+ if (typeof data === "string") {
172
+ this.#dataChannel.sendMessage(data);
173
+ } else {
174
+ this.#dataChannel.sendMessageBinary(data);
175
+ }
176
+ }
177
+ };
178
+ var PeerConnectionIceEvent = class extends Event {
179
+ constructor(candidate) {
180
+ super("icecandidate");
181
+ this.candidate = candidate;
182
+ }
183
+ };
184
+ var DataChannelEvent = class extends Event {
185
+ constructor(channel) {
186
+ super("datachannel");
187
+ this.channel = channel;
188
+ }
189
+ };
190
+ var SessionDescription = class {
191
+ constructor(init) {
192
+ this.sdp = init.sdp ?? "";
193
+ this.type = init.type;
194
+ }
195
+ toJSON() {
196
+ return {
197
+ sdp: this.sdp,
198
+ type: this.type
199
+ };
200
+ }
201
+ };
202
+ var PeerConnection = class extends EventTarget {
203
+ constructor(init = {}) {
204
+ super();
205
+ this.#config = init;
206
+ this.#localOffer = (0, import_p_defer.default)();
207
+ this.#localAnswer = (0, import_p_defer.default)();
208
+ this.#dataChannels = /* @__PURE__ */ new Set();
209
+ const iceServers = init.iceServers ?? [];
210
+ this.#peerConnection = new import_node_datachannel2.default.PeerConnection(`peer-${Math.random()}`, {
211
+ iceServers: iceServers.map((server) => {
212
+ const urls = (Array.isArray(server.urls) ? server.urls : [
213
+ server.urls
214
+ ]).map((str) => new URL(str));
215
+ return urls.map((url) => {
216
+ const iceServer = {
217
+ hostname: url.hostname,
218
+ port: parseInt(url.port, 10),
219
+ username: server.username,
220
+ password: server.credential
221
+ };
222
+ return iceServer;
223
+ });
224
+ }).flat(),
225
+ iceTransportPolicy: init?.iceTransportPolicy
226
+ });
227
+ this.#peerConnection.onStateChange(() => {
228
+ this.dispatchEvent(new Event("connectionstatechange"));
229
+ });
230
+ this.#peerConnection.onGatheringStateChange(() => {
231
+ this.dispatchEvent(new Event("icegatheringstatechange"));
232
+ });
233
+ this.#peerConnection.onDataChannel((channel) => {
234
+ this.dispatchEvent(new DataChannelEvent(new DataChannel(channel)));
235
+ });
236
+ this.addEventListener("connectionstatechange", (event) => {
237
+ this.onconnectionstatechange?.(event);
238
+ });
239
+ this.addEventListener("signalingstatechange", (event) => {
240
+ this.onsignalingstatechange?.(event);
241
+ });
242
+ this.addEventListener("icegatheringstatechange", (event) => {
243
+ this.onicegatheringstatechange?.(event);
244
+ });
245
+ this.addEventListener("datachannel", (event) => {
246
+ this.ondatachannel?.(event);
247
+ });
248
+ this.#peerConnection.onLocalDescription((sdp, type) => {
249
+ if (type === "offer") {
250
+ this.#localOffer.resolve({
251
+ sdp,
252
+ type
253
+ });
254
+ }
255
+ if (type === "answer") {
256
+ this.#localAnswer.resolve({
257
+ sdp,
258
+ type
259
+ });
260
+ }
261
+ });
262
+ this.#peerConnection.onLocalCandidate((candidate, mid) => {
263
+ if (mid === "unspec") {
264
+ this.#localAnswer.reject(new Error(`Invalid description type ${mid}`));
265
+ return;
266
+ }
267
+ const event = new PeerConnectionIceEvent(new IceCandidate({
268
+ candidate
269
+ }));
270
+ this.onicecandidate?.(event);
271
+ });
272
+ this.canTrickleIceCandidates = null;
273
+ this.sctp = null;
274
+ this.onconnectionstatechange = null;
275
+ this.ondatachannel = null;
276
+ this.onicecandidate = null;
277
+ this.onicecandidateerror = null;
278
+ this.oniceconnectionstatechange = null;
279
+ this.onicegatheringstatechange = null;
280
+ this.onnegotiationneeded = null;
281
+ this.onsignalingstatechange = null;
282
+ this.ontrack = null;
283
+ }
284
+ static async generateCertificate(keygenAlgorithm) {
285
+ throw new Error("Not implemented");
286
+ }
287
+ #peerConnection;
288
+ #config;
289
+ #localOffer;
290
+ #localAnswer;
291
+ #dataChannels;
292
+ get connectionState() {
293
+ return assertState(this.#peerConnection.state(), RTCPeerConnectionStates);
294
+ }
295
+ get iceConnectionState() {
296
+ return assertState(this.#peerConnection.state(), RTCIceConnectionStates);
297
+ }
298
+ get iceGatheringState() {
299
+ return assertState(this.#peerConnection.gatheringState(), RTCIceGatheringStates);
300
+ }
301
+ get signalingState() {
302
+ return assertState(this.#peerConnection.signalingState(), RTCSignalingStates);
303
+ }
304
+ get currentLocalDescription() {
305
+ return toSessionDescription(this.#peerConnection.localDescription());
306
+ }
307
+ get localDescription() {
308
+ return toSessionDescription(this.#peerConnection.localDescription());
309
+ }
310
+ get pendingLocalDescription() {
311
+ return toSessionDescription(this.#peerConnection.localDescription());
312
+ }
313
+ get currentRemoteDescription() {
314
+ console.log("node-datachannel doesn't expose currentRemoteDescription");
315
+ return toSessionDescription(null);
316
+ }
317
+ get pendingRemoteDescription() {
318
+ console.log("node-datachannel doesn't expose pendingRemoteDescription");
319
+ return toSessionDescription(null);
320
+ }
321
+ get remoteDescription() {
322
+ console.log("node-datachannel doesn't expose remoteDescription");
323
+ return toSessionDescription(null);
324
+ }
325
+ async addIceCandidate(candidate) {
326
+ if (candidate == null || candidate.candidate == null) {
327
+ throw new Error("Candidate invalid");
328
+ }
329
+ this.#peerConnection.addRemoteCandidate(candidate.candidate, candidate.sdpMid ?? "0");
330
+ }
331
+ addTrack(track, ...streams) {
332
+ throw new Error("addTrack Not implemented");
333
+ }
334
+ addTransceiver(trackOrKind, init) {
335
+ throw new Error("addTransciever Not implemented");
336
+ }
337
+ close() {
338
+ this.#dataChannels.forEach((channel) => {
339
+ channel.close();
340
+ });
341
+ this.#peerConnection.close();
342
+ this.#peerConnection.destroy();
343
+ }
344
+ createDataChannel(label, dataChannelDict = {}) {
345
+ const channel = this.#peerConnection.createDataChannel(label, dataChannelDict);
346
+ const dataChannel = new DataChannel(channel, dataChannelDict);
347
+ this.#dataChannels.add(dataChannel);
348
+ dataChannel.addEventListener("close", () => {
349
+ this.#dataChannels.delete(dataChannel);
350
+ });
351
+ return dataChannel;
352
+ }
353
+ async createOffer(...args) {
354
+ return this.#localOffer.promise;
355
+ }
356
+ async createAnswer(...args) {
357
+ return this.#localAnswer.promise;
358
+ }
359
+ getConfiguration() {
360
+ return this.#config;
361
+ }
362
+ getReceivers() {
363
+ throw new Error("getReceivers Not implemented");
364
+ }
365
+ getSenders() {
366
+ throw new Error("getSenders Not implemented");
367
+ }
368
+ async getStats(selector) {
369
+ throw new Error("getStats Not implemented");
370
+ }
371
+ getTransceivers() {
372
+ throw new Error("getTranscievers Not implemented");
373
+ }
374
+ removeTrack(sender) {
375
+ throw new Error("removeTrack Not implemented");
376
+ }
377
+ restartIce() {
378
+ throw new Error("restartIce Not implemented");
379
+ }
380
+ setConfiguration(configuration = {}) {
381
+ this.#config = configuration;
382
+ }
383
+ async setLocalDescription(description) {
384
+ if (description == null || description.type == null) {
385
+ throw new Error("Local description type must be set");
386
+ }
387
+ if (description.type !== "offer") {
388
+ console.log(`node-datachannel: setLocalDescription: only offer is supported, not ${description.type}`);
389
+ return;
390
+ }
391
+ this.#peerConnection.setLocalDescription(description.type);
392
+ }
393
+ async setRemoteDescription(description) {
394
+ if (description.sdp == null) {
395
+ throw new Error("Remote SDP must be set");
396
+ }
397
+ this.#peerConnection.setRemoteDescription(description.sdp, description.type);
398
+ }
399
+ };
400
+ var assertState = (state, states) => {
401
+ if (state != null && !states.includes(state)) {
402
+ throw new Error(`Invalid value encountered - "${state}" must be one of ${states}`);
403
+ }
404
+ return state;
405
+ };
406
+ var toSessionDescription = (description) => {
407
+ if (description == null) {
408
+ return null;
409
+ }
410
+ return new SessionDescription({
411
+ sdp: description.sdp,
412
+ type: assertState(description.type, RTCSdpTypes)
413
+ });
414
+ };
415
+ var RTCPeerConnectionStates = [
416
+ "closed",
417
+ "connected",
418
+ "connecting",
419
+ "disconnected",
420
+ "failed",
421
+ "new"
422
+ ];
423
+ var RTCSdpTypes = [
424
+ "answer",
425
+ "offer",
426
+ "pranswer",
427
+ "rollback"
428
+ ];
429
+ var RTCIceConnectionStates = [
430
+ "checking",
431
+ "closed",
432
+ "completed",
433
+ "connected",
434
+ "disconnected",
435
+ "failed",
436
+ "new"
437
+ ];
438
+ var RTCIceGatheringStates = [
439
+ "complete",
440
+ "gathering",
441
+ "new"
442
+ ];
443
+ var RTCSignalingStates = [
444
+ "closed",
445
+ "have-local-offer",
446
+ "have-local-pranswer",
447
+ "have-remote-offer",
448
+ "have-remote-pranswer",
449
+ "stable"
450
+ ];
451
+ var cleanup = () => {
452
+ import_node_datachannel.default.cleanup();
453
+ };
454
+ // Annotate the CommonJS export names for ESM import in node:
455
+ 0 && (module.exports = {
456
+ IceCandidate,
457
+ PeerConnection,
458
+ SessionDescription,
459
+ __require,
460
+ cleanup
461
+ });
462
+ //# sourceMappingURL=chunk-XE5JOIGD.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/transport/datachannel/index.ts", "../../../src/transport/datachannel/rtc-ice-candidate.ts", "../../../src/transport/datachannel/rtc-peer-connection.ts", "../../../src/transport/datachannel/rtc-data-channel.ts", "../../../src/transport/datachannel/rtc-events.ts", "../../../src/transport/datachannel/rtc-session-description.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport node from 'node-datachannel';\n\nimport { IceCandidate } from './rtc-ice-candidate';\nimport { PeerConnection } from './rtc-peer-connection';\nimport { SessionDescription } from './rtc-session-description';\n\nexport { SessionDescription as RTCSessionDescription };\nexport { IceCandidate as RTCIceCandidate };\nexport { PeerConnection as RTCPeerConnection };\n\nexport const cleanup = (): void => {\n node.cleanup();\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * @see https://developer.mozilla.org/docs/Web/API/RTCIceCandidate\n */\nexport class IceCandidate implements RTCIceCandidate {\n readonly address: string | null;\n readonly candidate: string;\n readonly component: RTCIceComponent | null;\n readonly foundation: string | null;\n readonly port: number | null;\n readonly priority: number | null;\n readonly protocol: RTCIceProtocol | null;\n readonly relatedAddress: string | null;\n readonly relatedPort: number | null;\n readonly sdpMLineIndex: number | null;\n readonly sdpMid: string | null;\n readonly tcpType: RTCIceTcpCandidateType | null;\n readonly type: RTCIceCandidateType | null;\n readonly usernameFragment: string | null;\n\n constructor(init: RTCIceCandidateInit) {\n if (init.candidate == null) {\n throw new DOMException('candidate must be specified');\n }\n\n this.candidate = init.candidate;\n this.sdpMLineIndex = init.sdpMLineIndex ?? null;\n this.sdpMid = init.sdpMid ?? null;\n this.usernameFragment = init.usernameFragment ?? null;\n\n this.address = null;\n this.component = null;\n this.foundation = null;\n this.port = null;\n this.priority = null;\n this.protocol = null;\n this.relatedAddress = null;\n this.relatedPort = null;\n this.tcpType = null;\n this.type = null;\n }\n\n toJSON(): RTCIceCandidateInit {\n return {\n candidate: this.candidate,\n sdpMLineIndex: this.sdpMLineIndex,\n sdpMid: this.sdpMid,\n usernameFragment: this.usernameFragment,\n };\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport node from 'node-datachannel';\nimport defer, { type DeferredPromise } from 'p-defer';\n\nimport { DataChannel } from './rtc-data-channel';\nimport { DataChannelEvent, PeerConnectionIceEvent } from './rtc-events';\nimport { IceCandidate } from './rtc-ice-candidate';\nimport { SessionDescription } from './rtc-session-description';\n\nexport class PeerConnection extends EventTarget implements RTCPeerConnection {\n static async generateCertificate(keygenAlgorithm: AlgorithmIdentifier): Promise<RTCCertificate> {\n throw new Error('Not implemented');\n }\n\n canTrickleIceCandidates: boolean | null;\n sctp: RTCSctpTransport | null;\n\n onconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ondatachannel: ((this: RTCPeerConnection, ev: RTCDataChannelEvent) => any) | null;\n onicecandidate: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceEvent) => any) | null;\n onicecandidateerror: ((this: RTCPeerConnection, ev: Event) => any) | null;\n oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onicegatheringstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onnegotiationneeded: ((this: RTCPeerConnection, ev: Event) => any) | null;\n onsignalingstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n ontrack: ((this: RTCPeerConnection, ev: RTCTrackEvent) => any) | null;\n\n #peerConnection: node.PeerConnection;\n #config: RTCConfiguration;\n #localOffer: DeferredPromise<RTCSessionDescriptionInit>;\n #localAnswer: DeferredPromise<RTCSessionDescriptionInit>;\n #dataChannels: Set<DataChannel>;\n\n constructor(init: RTCConfiguration = {}) {\n super();\n\n this.#config = init;\n this.#localOffer = defer();\n this.#localAnswer = defer();\n this.#dataChannels = new Set();\n\n const iceServers = init.iceServers ?? [];\n\n this.#peerConnection = new node.PeerConnection(`peer-${Math.random()}`, {\n iceServers: iceServers\n .map((server) => {\n const urls = (Array.isArray(server.urls) ? server.urls : [server.urls]).map((str) => new URL(str));\n\n return urls.map((url) => {\n /** @type {import('../lib/index.js').IceServer} */\n const iceServer = {\n hostname: url.hostname,\n port: parseInt(url.port, 10),\n username: server.username,\n password: server.credential,\n // relayType - how to specify?\n };\n\n return iceServer;\n });\n })\n .flat(),\n iceTransportPolicy: init?.iceTransportPolicy,\n });\n\n this.#peerConnection.onStateChange(() => {\n this.dispatchEvent(new Event('connectionstatechange'));\n });\n // https://github.com/murat-dogan/node-datachannel/pull/171\n // this.#peerConnection.onSignalingStateChange(() => {\n // this.dispatchEvent(new Event('signalingstatechange'))\n // })\n this.#peerConnection.onGatheringStateChange(() => {\n this.dispatchEvent(new Event('icegatheringstatechange'));\n });\n this.#peerConnection.onDataChannel((channel) => {\n this.dispatchEvent(new DataChannelEvent(new DataChannel(channel)));\n });\n\n // forward events to properties\n this.addEventListener('connectionstatechange', (event) => {\n this.onconnectionstatechange?.(event);\n });\n this.addEventListener('signalingstatechange', (event) => {\n this.onsignalingstatechange?.(event);\n });\n this.addEventListener('icegatheringstatechange', (event) => {\n this.onicegatheringstatechange?.(event);\n });\n this.addEventListener('datachannel', (event) => {\n this.ondatachannel?.(event as RTCDataChannelEvent);\n });\n\n this.#peerConnection.onLocalDescription((sdp, type) => {\n if (type === 'offer') {\n this.#localOffer.resolve({\n sdp,\n type,\n });\n }\n\n if (type === 'answer') {\n this.#localAnswer.resolve({\n sdp,\n type,\n });\n }\n });\n\n this.#peerConnection.onLocalCandidate((candidate, mid) => {\n if (mid === 'unspec') {\n this.#localAnswer.reject(new Error(`Invalid description type ${mid}`));\n return;\n }\n\n const event = new PeerConnectionIceEvent(new IceCandidate({ candidate }));\n\n this.onicecandidate?.(event);\n });\n\n this.canTrickleIceCandidates = null;\n this.sctp = null;\n this.onconnectionstatechange = null;\n this.ondatachannel = null;\n this.onicecandidate = null;\n this.onicecandidateerror = null;\n this.oniceconnectionstatechange = null;\n this.onicegatheringstatechange = null;\n this.onnegotiationneeded = null;\n this.onsignalingstatechange = null;\n this.ontrack = null;\n }\n\n get connectionState(): RTCPeerConnectionState {\n return assertState(this.#peerConnection.state(), RTCPeerConnectionStates);\n }\n\n get iceConnectionState(): RTCIceConnectionState {\n return assertState(this.#peerConnection.state(), RTCIceConnectionStates);\n }\n\n get iceGatheringState(): RTCIceGatheringState {\n return assertState(this.#peerConnection.gatheringState(), RTCIceGatheringStates);\n }\n\n get signalingState(): RTCSignalingState {\n return assertState(this.#peerConnection.signalingState(), RTCSignalingStates);\n }\n\n get currentLocalDescription(): RTCSessionDescription | null {\n return toSessionDescription(this.#peerConnection.localDescription());\n }\n\n get localDescription(): RTCSessionDescription | null {\n return toSessionDescription(this.#peerConnection.localDescription());\n }\n\n get pendingLocalDescription(): RTCSessionDescription | null {\n return toSessionDescription(this.#peerConnection.localDescription());\n }\n\n get currentRemoteDescription(): RTCSessionDescription | null {\n // not exposed by node-datachannel\n console.log(\"node-datachannel doesn't expose currentRemoteDescription\");\n return toSessionDescription(null);\n }\n\n get pendingRemoteDescription(): RTCSessionDescription | null {\n // not exposed by node-datachannel\n console.log(\"node-datachannel doesn't expose pendingRemoteDescription\");\n return toSessionDescription(null);\n }\n\n get remoteDescription(): RTCSessionDescription | null {\n // not exposed by node-datachannel\n console.log(\"node-datachannel doesn't expose remoteDescription\");\n return toSessionDescription(null);\n }\n\n async addIceCandidate(candidate?: RTCIceCandidateInit): Promise<void> {\n if (candidate == null || candidate.candidate == null) {\n throw new Error('Candidate invalid');\n }\n\n this.#peerConnection.addRemoteCandidate(candidate.candidate, candidate.sdpMid ?? '0');\n }\n\n addTrack(track: MediaStreamTrack, ...streams: MediaStream[]): RTCRtpSender {\n throw new Error('addTrack Not implemented');\n }\n\n addTransceiver(trackOrKind: MediaStreamTrack | string, init?: RTCRtpTransceiverInit): RTCRtpTransceiver {\n throw new Error('addTransciever Not implemented');\n }\n\n close(): void {\n // close all channels before shutting down\n this.#dataChannels.forEach((channel) => {\n channel.close();\n });\n\n this.#peerConnection.close();\n this.#peerConnection.destroy();\n }\n\n createDataChannel(label: string, dataChannelDict: RTCDataChannelInit = {}): RTCDataChannel {\n const channel = this.#peerConnection.createDataChannel(label, dataChannelDict);\n const dataChannel = new DataChannel(channel, dataChannelDict);\n\n // ensure we can close all channels when shutting down\n this.#dataChannels.add(dataChannel);\n dataChannel.addEventListener('close', () => {\n this.#dataChannels.delete(dataChannel);\n });\n\n return dataChannel;\n }\n\n async createOffer(options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit>;\n async createOffer(\n successCallback: RTCSessionDescriptionCallback,\n failureCallback: RTCPeerConnectionErrorCallback,\n options?: RTCOfferOptions,\n ): Promise<void>;\n\n async createOffer(...args: any[]): Promise<any> {\n return this.#localOffer.promise;\n }\n\n async createAnswer(options?: RTCAnswerOptions): Promise<RTCSessionDescriptionInit>;\n async createAnswer(\n successCallback: RTCSessionDescriptionCallback,\n failureCallback: RTCPeerConnectionErrorCallback,\n ): Promise<void>;\n\n async createAnswer(...args: any[]): Promise<any> {\n return this.#localAnswer.promise;\n }\n\n getConfiguration(): RTCConfiguration {\n return this.#config;\n }\n\n getReceivers(): RTCRtpReceiver[] {\n throw new Error('getReceivers Not implemented');\n }\n\n getSenders(): RTCRtpSender[] {\n throw new Error('getSenders Not implemented');\n }\n\n async getStats(selector?: MediaStreamTrack | null): Promise<RTCStatsReport> {\n throw new Error('getStats Not implemented');\n }\n\n getTransceivers(): RTCRtpTransceiver[] {\n throw new Error('getTranscievers Not implemented');\n }\n\n removeTrack(sender: RTCRtpSender): void {\n throw new Error('removeTrack Not implemented');\n }\n\n restartIce(): void {\n throw new Error('restartIce Not implemented');\n }\n\n setConfiguration(configuration: RTCConfiguration = {}): void {\n this.#config = configuration;\n }\n\n async setLocalDescription(description?: RTCLocalSessionDescriptionInit): Promise<void> {\n if (description == null || description.type == null) {\n throw new Error('Local description type must be set');\n }\n\n if (description.type !== 'offer') {\n console.log(`node-datachannel: setLocalDescription: only offer is supported, not ${description.type}`);\n // any other type causes libdatachannel to throw\n return;\n }\n\n // @ts-expect-error types are wrong\n this.#peerConnection.setLocalDescription(description.type);\n }\n\n async setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void> {\n if (description.sdp == null) {\n throw new Error('Remote SDP must be set');\n }\n\n // @ts-expect-error types are wrong\n this.#peerConnection.setRemoteDescription(description.sdp, description.type);\n }\n}\n\nexport { PeerConnection as RTCPeerConnection };\n\nconst assertState = <T>(state: any, states: T[]): T => {\n if (state != null && !states.includes(state)) {\n throw new Error(`Invalid value encountered - \"${state}\" must be one of ${states}`);\n }\n\n return state as T;\n};\n\nconst toSessionDescription = (description: { sdp?: string; type: string } | null): RTCSessionDescription | null => {\n if (description == null) {\n return null;\n }\n\n return new SessionDescription({\n sdp: description.sdp,\n type: assertState(description.type, RTCSdpTypes),\n });\n};\n\nconst RTCPeerConnectionStates: RTCPeerConnectionState[] = [\n 'closed',\n 'connected',\n 'connecting',\n 'disconnected',\n 'failed',\n 'new',\n];\nconst RTCSdpTypes: RTCSdpType[] = ['answer', 'offer', 'pranswer', 'rollback'];\nconst RTCIceConnectionStates: RTCIceConnectionState[] = [\n 'checking',\n 'closed',\n 'completed',\n 'connected',\n 'disconnected',\n 'failed',\n 'new',\n];\nconst RTCIceGatheringStates: RTCIceGatheringState[] = ['complete', 'gathering', 'new'];\nconst RTCSignalingStates: RTCSignalingState[] = [\n 'closed',\n 'have-local-offer',\n 'have-local-pranswer',\n 'have-remote-offer',\n 'have-remote-pranswer',\n 'stable',\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type node from 'node-datachannel';\n\nexport class DataChannel extends EventTarget implements RTCDataChannel {\n binaryType: BinaryType;\n\n readonly maxPacketLifeTime: number | null;\n readonly maxRetransmits: number | null;\n readonly negotiated: boolean;\n readonly ordered: boolean;\n\n onbufferedamountlow: ((this: RTCDataChannel, ev: Event) => any) | null;\n onclose: ((this: RTCDataChannel, ev: Event) => any) | null;\n onclosing: ((this: RTCDataChannel, ev: Event) => any) | null;\n onerror: ((this: RTCDataChannel, ev: Event) => any) | null;\n onmessage: ((this: RTCDataChannel, ev: MessageEvent) => any) | null;\n onopen: ((this: RTCDataChannel, ev: Event) => any) | null;\n\n #dataChannel: node.DataChannel;\n #bufferedAmountLowThreshold: number;\n #readyState: RTCDataChannelState;\n\n constructor(dataChannel: node.DataChannel, dataChannelDict: RTCDataChannelInit = {}) {\n super();\n\n this.#dataChannel = dataChannel;\n this.#readyState = 'connecting';\n this.#bufferedAmountLowThreshold = 0;\n\n this.binaryType = 'arraybuffer';\n\n this.#dataChannel.onOpen(() => {\n this.#readyState = 'open';\n this.dispatchEvent(new Event('open'));\n });\n this.#dataChannel.onClosed(() => {\n this.#readyState = 'closed';\n this.dispatchEvent(new Event('close'));\n });\n this.#dataChannel.onError((msg) => {\n this.#readyState = 'closed';\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 this.#dataChannel.onBufferedAmountLow(() => {\n this.dispatchEvent(new Event('bufferedamountlow'));\n });\n this.#dataChannel.onMessage((data: string | Uint8Array) => {\n if (typeof data === 'string') {\n data = Buffer.from(data);\n }\n\n this.dispatchEvent(new MessageEvent('message', { data }));\n });\n\n // forward events to properties\n this.addEventListener('message', (event) => {\n this.onmessage?.(event as MessageEvent<ArrayBuffer>);\n });\n this.addEventListener('bufferedamountlow', (event) => {\n this.onbufferedamountlow?.(event);\n });\n this.addEventListener('error', (event) => {\n this.onerror?.(event);\n });\n this.addEventListener('close', (event) => {\n this.onclose?.(event);\n });\n this.addEventListener('closing', (event) => {\n this.onclosing?.(event);\n });\n this.addEventListener('open', (event) => {\n this.onopen?.(event);\n });\n\n this.onbufferedamountlow = null;\n this.onclose = null;\n this.onclosing = null;\n this.onerror = null;\n this.onmessage = null;\n this.onopen = null;\n\n this.maxPacketLifeTime = dataChannelDict.maxPacketLifeTime ?? null;\n this.maxRetransmits = dataChannelDict.maxRetransmits ?? null;\n this.negotiated = dataChannelDict.negotiated ?? false;\n this.ordered = dataChannelDict.ordered ?? true;\n }\n\n get id(): number {\n return this.#dataChannel.getId();\n }\n\n get label(): string {\n return this.#dataChannel.getLabel();\n }\n\n get protocol(): string {\n return this.#dataChannel.getProtocol();\n }\n\n get bufferedAmount(): number {\n return this.#dataChannel.bufferedAmount();\n }\n\n set bufferedAmountLowThreshold(threshold: number) {\n this.#bufferedAmountLowThreshold = threshold;\n this.#dataChannel.setBufferedAmountLowThreshold(threshold);\n }\n\n get bufferedAmountLowThreshold(): number {\n return this.#bufferedAmountLowThreshold;\n }\n\n get readyState(): RTCDataChannelState {\n return this.#readyState;\n }\n\n close(): void {\n this.#readyState = 'closing';\n this.dispatchEvent(new Event('closing'));\n\n this.#dataChannel.close();\n }\n\n send(data: string): void;\n send(data: Blob): void;\n send(data: ArrayBuffer): void;\n send(data: ArrayBufferView): void;\n send(data: any): void {\n // TODO: sending Blobs\n if (typeof data === 'string') {\n this.#dataChannel.sendMessage(data);\n } else {\n this.#dataChannel.sendMessageBinary(data);\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport class PeerConnectionIceEvent extends Event implements RTCPeerConnectionIceEvent {\n readonly candidate: RTCIceCandidate | null;\n\n constructor(candidate: RTCIceCandidate) {\n super('icecandidate');\n\n this.candidate = candidate;\n }\n}\n\nexport class DataChannelEvent extends Event implements RTCDataChannelEvent {\n readonly channel: RTCDataChannel;\n\n constructor(channel: RTCDataChannel) {\n super('datachannel');\n\n this.channel = channel;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\n/**\n * @see https://developer.mozilla.org/docs/Web/API/RTCSessionDescription\n */\nexport class SessionDescription implements RTCSessionDescription {\n readonly sdp: string;\n readonly type: RTCSdpType;\n\n constructor(init: RTCSessionDescriptionInit) {\n this.sdp = init.sdp ?? '';\n this.type = init.type;\n }\n\n toJSON(): RTCSessionDescriptionInit {\n return {\n sdp: this.sdp,\n type: this.type,\n };\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,8BAAiB;AEAjB,IAAAA,2BAAiB;AACjB,qBAA4C;;;;;;;;ADErC,IAAMC,eAAN,MAAMA;EAgBXC,YAAYC,MAA2B;AACrC,QAAIA,KAAKC,aAAa,MAAM;AAC1B,YAAM,IAAIC,aAAa,6BAAA;IACzB;AAEA,SAAKD,YAAYD,KAAKC;AACtB,SAAKE,gBAAgBH,KAAKG,iBAAiB;AAC3C,SAAKC,SAASJ,KAAKI,UAAU;AAC7B,SAAKC,mBAAmBL,KAAKK,oBAAoB;AAEjD,SAAKC,UAAU;AACf,SAAKC,YAAY;AACjB,SAAKC,aAAa;AAClB,SAAKC,OAAO;AACZ,SAAKC,WAAW;AAChB,SAAKC,WAAW;AAChB,SAAKC,iBAAiB;AACtB,SAAKC,cAAc;AACnB,SAAKC,UAAU;AACf,SAAKC,OAAO;EACd;EAEAC,SAA8B;AAC5B,WAAO;MACLf,WAAW,KAAKA;MAChBE,eAAe,KAAKA;MACpBC,QAAQ,KAAKA;MACbC,kBAAkB,KAAKA;IACzB;EACF;AACF;AE/CO,IAAMY,cAAN,cAA0BC,YAAAA;EAmB/BnB,YAAYoB,aAA+BC,kBAAsC,CAAC,GAAG;AACnF,UAAK;AAEL,SAAK,eAAeD;AACpB,SAAK,cAAc;AACnB,SAAK,8BAA8B;AAEnC,SAAKE,aAAa;AAElB,SAAK,aAAaC,OAAO,MAAA;AACvB,WAAK,cAAc;AACnB,WAAKC,cAAc,IAAIC,MAAM,MAAA,CAAA;IAC/B,CAAA;AACA,SAAK,aAAaC,SAAS,MAAA;AACzB,WAAK,cAAc;AACnB,WAAKF,cAAc,IAAIC,MAAM,OAAA,CAAA;IAC/B,CAAA;AACA,SAAK,aAAaE,QAAQ,CAACC,QAAAA;AACzB,WAAK,cAAc;AACnB,WAAKJ,cACH,IAAIK,cAAc,SAAS;QACzBC,OAAO,IAAIC,SACT;UACEC,aAAa;QACf,GACAJ,GAAAA;MAEJ,CAAA,CAAA;IAEJ,CAAA;AACA,SAAK,aAAaK,oBAAoB,MAAA;AACpC,WAAKT,cAAc,IAAIC,MAAM,mBAAA,CAAA;IAC/B,CAAA;AACA,SAAK,aAAaS,UAAU,CAACC,SAAAA;AAC3B,UAAI,OAAOA,SAAS,UAAU;AAC5BA,eAAOC,OAAOC,KAAKF,IAAAA;MACrB;AAEA,WAAKX,cAAc,IAAIc,aAAa,WAAW;QAAEH;MAAK,CAAA,CAAA;IACxD,CAAA;AAGA,SAAKI,iBAAiB,WAAW,CAACC,UAAAA;AAChC,WAAKC,YAAYD,KAAAA;IACnB,CAAA;AACA,SAAKD,iBAAiB,qBAAqB,CAACC,UAAAA;AAC1C,WAAKE,sBAAsBF,KAAAA;IAC7B,CAAA;AACA,SAAKD,iBAAiB,SAAS,CAACC,UAAAA;AAC9B,WAAKG,UAAUH,KAAAA;IACjB,CAAA;AACA,SAAKD,iBAAiB,SAAS,CAACC,UAAAA;AAC9B,WAAKI,UAAUJ,KAAAA;IACjB,CAAA;AACA,SAAKD,iBAAiB,WAAW,CAACC,UAAAA;AAChC,WAAKK,YAAYL,KAAAA;IACnB,CAAA;AACA,SAAKD,iBAAiB,QAAQ,CAACC,UAAAA;AAC7B,WAAKM,SAASN,KAAAA;IAChB,CAAA;AAEA,SAAKE,sBAAsB;AAC3B,SAAKE,UAAU;AACf,SAAKC,YAAY;AACjB,SAAKF,UAAU;AACf,SAAKF,YAAY;AACjB,SAAKK,SAAS;AAEd,SAAKC,oBAAoB1B,gBAAgB0B,qBAAqB;AAC9D,SAAKC,iBAAiB3B,gBAAgB2B,kBAAkB;AACxD,SAAKC,aAAa5B,gBAAgB4B,cAAc;AAChD,SAAKC,UAAU7B,gBAAgB6B,WAAW;EAC5C;EA5EA;EACA;EACA;EA4EA,IAAIC,KAAa;AACf,WAAO,KAAK,aAAaC,MAAK;EAChC;EAEA,IAAIC,QAAgB;AAClB,WAAO,KAAK,aAAaC,SAAQ;EACnC;EAEA,IAAI1C,WAAmB;AACrB,WAAO,KAAK,aAAa2C,YAAW;EACtC;EAEA,IAAIC,iBAAyB;AAC3B,WAAO,KAAK,aAAaA,eAAc;EACzC;EAEA,IAAIC,2BAA2BC,WAAmB;AAChD,SAAK,8BAA8BA;AACnC,SAAK,aAAaC,8BAA8BD,SAAAA;EAClD;EAEA,IAAID,6BAAqC;AACvC,WAAO,KAAK;EACd;EAEA,IAAIG,aAAkC;AACpC,WAAO,KAAK;EACd;EAEAC,QAAc;AACZ,SAAK,cAAc;AACnB,SAAKrC,cAAc,IAAIC,MAAM,SAAA,CAAA;AAE7B,SAAK,aAAaoC,MAAK;EACzB;EAMAC,KAAK3B,MAAiB;AAEpB,QAAI,OAAOA,SAAS,UAAU;AAC5B,WAAK,aAAa4B,YAAY5B,IAAAA;IAChC,OAAO;AACL,WAAK,aAAa6B,kBAAkB7B,IAAAA;IACtC;EACF;AACF;AC/IO,IAAM8B,yBAAN,cAAqCxC,MAAAA;EAG1CzB,YAAYE,WAA4B;AACtC,UAAM,cAAA;AAEN,SAAKA,YAAYA;EACnB;AACF;AAEO,IAAMgE,mBAAN,cAA+BzC,MAAAA;EAGpCzB,YAAYmE,SAAyB;AACnC,UAAM,aAAA;AAEN,SAAKA,UAAUA;EACjB;AACF;ACfO,IAAMC,qBAAN,MAAMA;EAIXpE,YAAYC,MAAiC;AAC3C,SAAKoE,MAAMpE,KAAKoE,OAAO;AACvB,SAAKrD,OAAOf,KAAKe;EACnB;EAEAC,SAAoC;AAClC,WAAO;MACLoD,KAAK,KAAKA;MACVrD,MAAM,KAAKA;IACb;EACF;AACF;AHVO,IAAMsD,iBAAN,cAA6BnD,YAAAA;EAwBlCnB,YAAYC,OAAyB,CAAC,GAAG;AACvC,UAAK;AAEL,SAAK,UAAUA;AACf,SAAK,kBAAcsE,eAAAA,SAAAA;AACnB,SAAK,mBAAeA,eAAAA,SAAAA;AACpB,SAAK,gBAAgB,oBAAIC,IAAAA;AAEzB,UAAMC,aAAaxE,KAAKwE,cAAc,CAAA;AAEtC,SAAK,kBAAkB,IAAIC,yBAAAA,QAAKJ,eAAe,QAAQK,KAAKC,OAAM,CAAA,IAAM;MACtEH,YAAYA,WACTI,IAAI,CAACC,WAAAA;AACJ,cAAMC,QAAQC,MAAMC,QAAQH,OAAOC,IAAI,IAAID,OAAOC,OAAO;UAACD,OAAOC;WAAOF,IAAI,CAACK,QAAQ,IAAIC,IAAID,GAAAA,CAAAA;AAE7F,eAAOH,KAAKF,IAAI,CAACO,QAAAA;AAEf,gBAAMC,YAAY;YAChBC,UAAUF,IAAIE;YACd5E,MAAM6E,SAASH,IAAI1E,MAAM,EAAA;YACzB8E,UAAUV,OAAOU;YACjBC,UAAUX,OAAOY;UAEnB;AAEA,iBAAOL;QACT,CAAA;MACF,CAAA,EACCM,KAAI;MACPC,oBAAoB3F,MAAM2F;IAC5B,CAAA;AAEA,SAAK,gBAAgBC,cAAc,MAAA;AACjC,WAAKrE,cAAc,IAAIC,MAAM,uBAAA,CAAA;IAC/B,CAAA;AAKA,SAAK,gBAAgBqE,uBAAuB,MAAA;AAC1C,WAAKtE,cAAc,IAAIC,MAAM,yBAAA,CAAA;IAC/B,CAAA;AACA,SAAK,gBAAgBsE,cAAc,CAAC5B,YAAAA;AAClC,WAAK3C,cAAc,IAAI0C,iBAAiB,IAAIhD,YAAYiD,OAAAA,CAAAA,CAAAA;IAC1D,CAAA;AAGA,SAAK5B,iBAAiB,yBAAyB,CAACC,UAAAA;AAC9C,WAAKwD,0BAA0BxD,KAAAA;IACjC,CAAA;AACA,SAAKD,iBAAiB,wBAAwB,CAACC,UAAAA;AAC7C,WAAKyD,yBAAyBzD,KAAAA;IAChC,CAAA;AACA,SAAKD,iBAAiB,2BAA2B,CAACC,UAAAA;AAChD,WAAK0D,4BAA4B1D,KAAAA;IACnC,CAAA;AACA,SAAKD,iBAAiB,eAAe,CAACC,UAAAA;AACpC,WAAK2D,gBAAgB3D,KAAAA;IACvB,CAAA;AAEA,SAAK,gBAAgB4D,mBAAmB,CAAC/B,KAAKrD,SAAAA;AAC5C,UAAIA,SAAS,SAAS;AACpB,aAAK,YAAYqF,QAAQ;UACvBhC;UACArD;QACF,CAAA;MACF;AAEA,UAAIA,SAAS,UAAU;AACrB,aAAK,aAAaqF,QAAQ;UACxBhC;UACArD;QACF,CAAA;MACF;IACF,CAAA;AAEA,SAAK,gBAAgBsF,iBAAiB,CAACpG,WAAWqG,QAAAA;AAChD,UAAIA,QAAQ,UAAU;AACpB,aAAK,aAAaC,OAAO,IAAIC,MAAM,4BAA4BF,GAAAA,EAAK,CAAA;AACpE;MACF;AAEA,YAAM/D,QAAQ,IAAIyB,uBAAuB,IAAIlE,aAAa;QAAEG;MAAU,CAAA,CAAA;AAEtE,WAAKwG,iBAAiBlE,KAAAA;IACxB,CAAA;AAEA,SAAKmE,0BAA0B;AAC/B,SAAKC,OAAO;AACZ,SAAKZ,0BAA0B;AAC/B,SAAKG,gBAAgB;AACrB,SAAKO,iBAAiB;AACtB,SAAKG,sBAAsB;AAC3B,SAAKC,6BAA6B;AAClC,SAAKZ,4BAA4B;AACjC,SAAKa,sBAAsB;AAC3B,SAAKd,yBAAyB;AAC9B,SAAKe,UAAU;EACjB;EAzHA,aAAaC,oBAAoBC,iBAA+D;AAC9F,UAAM,IAAIT,MAAM,iBAAA;EAClB;EAeA;EACA;EACA;EACA;EACA;EAsGA,IAAIU,kBAA0C;AAC5C,WAAOC,YAAY,KAAK,gBAAgBC,MAAK,GAAIC,uBAAAA;EACnD;EAEA,IAAIC,qBAA4C;AAC9C,WAAOH,YAAY,KAAK,gBAAgBC,MAAK,GAAIG,sBAAAA;EACnD;EAEA,IAAIC,oBAA0C;AAC5C,WAAOL,YAAY,KAAK,gBAAgBM,eAAc,GAAIC,qBAAAA;EAC5D;EAEA,IAAIC,iBAAoC;AACtC,WAAOR,YAAY,KAAK,gBAAgBQ,eAAc,GAAIC,kBAAAA;EAC5D;EAEA,IAAIC,0BAAwD;AAC1D,WAAOC,qBAAqB,KAAK,gBAAgBC,iBAAgB,CAAA;EACnE;EAEA,IAAIA,mBAAiD;AACnD,WAAOD,qBAAqB,KAAK,gBAAgBC,iBAAgB,CAAA;EACnE;EAEA,IAAIC,0BAAwD;AAC1D,WAAOF,qBAAqB,KAAK,gBAAgBC,iBAAgB,CAAA;EACnE;EAEA,IAAIE,2BAAyD;AAE3DC,YAAQC,IAAI,0DAAA;AACZ,WAAOL,qBAAqB,IAAA;EAC9B;EAEA,IAAIM,2BAAyD;AAE3DF,YAAQC,IAAI,0DAAA;AACZ,WAAOL,qBAAqB,IAAA;EAC9B;EAEA,IAAIO,oBAAkD;AAEpDH,YAAQC,IAAI,mDAAA;AACZ,WAAOL,qBAAqB,IAAA;EAC9B;EAEA,MAAMQ,gBAAgBrI,WAAgD;AACpE,QAAIA,aAAa,QAAQA,UAAUA,aAAa,MAAM;AACpD,YAAM,IAAIuG,MAAM,mBAAA;IAClB;AAEA,SAAK,gBAAgB+B,mBAAmBtI,UAAUA,WAAWA,UAAUG,UAAU,GAAA;EACnF;EAEAoI,SAASC,UAA4BC,SAAsC;AACzE,UAAM,IAAIlC,MAAM,0BAAA;EAClB;EAEAmC,eAAeC,aAAwC5I,MAAiD;AACtG,UAAM,IAAIwG,MAAM,gCAAA;EAClB;EAEA5C,QAAc;AAEZ,SAAK,cAAciF,QAAQ,CAAC3E,YAAAA;AAC1BA,cAAQN,MAAK;IACf,CAAA;AAEA,SAAK,gBAAgBA,MAAK;AAC1B,SAAK,gBAAgBkF,QAAO;EAC9B;EAEAC,kBAAkB3F,OAAehC,kBAAsC,CAAC,GAAmB;AACzF,UAAM8C,UAAU,KAAK,gBAAgB6E,kBAAkB3F,OAAOhC,eAAAA;AAC9D,UAAMD,cAAc,IAAIF,YAAYiD,SAAS9C,eAAAA;AAG7C,SAAK,cAAc4H,IAAI7H,WAAAA;AACvBA,gBAAYmB,iBAAiB,SAAS,MAAA;AACpC,WAAK,cAAc2G,OAAO9H,WAAAA;IAC5B,CAAA;AAEA,WAAOA;EACT;EASA,MAAM+H,eAAeC,MAA2B;AAC9C,WAAO,KAAK,YAAYC;EAC1B;EAQA,MAAMC,gBAAgBF,MAA2B;AAC/C,WAAO,KAAK,aAAaC;EAC3B;EAEAE,mBAAqC;AACnC,WAAO,KAAK;EACd;EAEAC,eAAiC;AAC/B,UAAM,IAAI/C,MAAM,8BAAA;EAClB;EAEAgD,aAA6B;AAC3B,UAAM,IAAIhD,MAAM,4BAAA;EAClB;EAEA,MAAMiD,SAASC,UAA6D;AAC1E,UAAM,IAAIlD,MAAM,0BAAA;EAClB;EAEAmD,kBAAuC;AACrC,UAAM,IAAInD,MAAM,iCAAA;EAClB;EAEAoD,YAAYC,QAA4B;AACtC,UAAM,IAAIrD,MAAM,6BAAA;EAClB;EAEAsD,aAAmB;AACjB,UAAM,IAAItD,MAAM,4BAAA;EAClB;EAEAuD,iBAAiBC,gBAAkC,CAAC,GAAS;AAC3D,SAAK,UAAUA;EACjB;EAEA,MAAMC,oBAAoBC,aAA6D;AACrF,QAAIA,eAAe,QAAQA,YAAYnJ,QAAQ,MAAM;AACnD,YAAM,IAAIyF,MAAM,oCAAA;IAClB;AAEA,QAAI0D,YAAYnJ,SAAS,SAAS;AAChCmH,cAAQC,IAAI,uEAAuE+B,YAAYnJ,IAAI,EAAE;AAErG;IACF;AAGA,SAAK,gBAAgBkJ,oBAAoBC,YAAYnJ,IAAI;EAC3D;EAEA,MAAMoJ,qBAAqBD,aAAuD;AAChF,QAAIA,YAAY9F,OAAO,MAAM;AAC3B,YAAM,IAAIoC,MAAM,wBAAA;IAClB;AAGA,SAAK,gBAAgB2D,qBAAqBD,YAAY9F,KAAK8F,YAAYnJ,IAAI;EAC7E;AACF;AAIA,IAAMoG,cAAc,CAAIC,OAAYgD,WAAAA;AAClC,MAAIhD,SAAS,QAAQ,CAACgD,OAAOC,SAASjD,KAAAA,GAAQ;AAC5C,UAAM,IAAIZ,MAAM,gCAAgCY,KAAAA,oBAAyBgD,MAAAA,EAAQ;EACnF;AAEA,SAAOhD;AACT;AAEA,IAAMU,uBAAuB,CAACoC,gBAAAA;AAC5B,MAAIA,eAAe,MAAM;AACvB,WAAO;EACT;AAEA,SAAO,IAAI/F,mBAAmB;IAC5BC,KAAK8F,YAAY9F;IACjBrD,MAAMoG,YAAY+C,YAAYnJ,MAAMuJ,WAAAA;EACtC,CAAA;AACF;AAEA,IAAMjD,0BAAoD;EACxD;EACA;EACA;EACA;EACA;EACA;;AAEF,IAAMiD,cAA4B;EAAC;EAAU;EAAS;EAAY;;AAClE,IAAM/C,yBAAkD;EACtD;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF,IAAMG,wBAAgD;EAAC;EAAY;EAAa;;AAChF,IAAME,qBAA0C;EAC9C;EACA;EACA;EACA;EACA;EACA;;AF3UK,IAAM2C,UAAU,MAAA;AACrB9F,0BAAAA,QAAK8F,QAAO;AACd;",
6
+ "names": ["import_node_datachannel", "IceCandidate", "constructor", "init", "candidate", "DOMException", "sdpMLineIndex", "sdpMid", "usernameFragment", "address", "component", "foundation", "port", "priority", "protocol", "relatedAddress", "relatedPort", "tcpType", "type", "toJSON", "DataChannel", "EventTarget", "dataChannel", "dataChannelDict", "binaryType", "onOpen", "dispatchEvent", "Event", "onClosed", "onError", "msg", "RTCErrorEvent", "error", "RTCError", "errorDetail", "onBufferedAmountLow", "onMessage", "data", "Buffer", "from", "MessageEvent", "addEventListener", "event", "onmessage", "onbufferedamountlow", "onerror", "onclose", "onclosing", "onopen", "maxPacketLifeTime", "maxRetransmits", "negotiated", "ordered", "id", "getId", "label", "getLabel", "getProtocol", "bufferedAmount", "bufferedAmountLowThreshold", "threshold", "setBufferedAmountLowThreshold", "readyState", "close", "send", "sendMessage", "sendMessageBinary", "PeerConnectionIceEvent", "DataChannelEvent", "channel", "SessionDescription", "sdp", "PeerConnection", "defer", "Set", "iceServers", "node", "Math", "random", "map", "server", "urls", "Array", "isArray", "str", "URL", "url", "iceServer", "hostname", "parseInt", "username", "password", "credential", "flat", "iceTransportPolicy", "onStateChange", "onGatheringStateChange", "onDataChannel", "onconnectionstatechange", "onsignalingstatechange", "onicegatheringstatechange", "ondatachannel", "onLocalDescription", "resolve", "onLocalCandidate", "mid", "reject", "Error", "onicecandidate", "canTrickleIceCandidates", "sctp", "onicecandidateerror", "oniceconnectionstatechange", "onnegotiationneeded", "ontrack", "generateCertificate", "keygenAlgorithm", "connectionState", "assertState", "state", "RTCPeerConnectionStates", "iceConnectionState", "RTCIceConnectionStates", "iceGatheringState", "gatheringState", "RTCIceGatheringStates", "signalingState", "RTCSignalingStates", "currentLocalDescription", "toSessionDescription", "localDescription", "pendingLocalDescription", "currentRemoteDescription", "console", "log", "pendingRemoteDescription", "remoteDescription", "addIceCandidate", "addRemoteCandidate", "addTrack", "track", "streams", "addTransceiver", "trackOrKind", "forEach", "destroy", "createDataChannel", "add", "delete", "createOffer", "args", "promise", "createAnswer", "getConfiguration", "getReceivers", "getSenders", "getStats", "selector", "getTransceivers", "removeTrack", "sender", "restartIce", "setConfiguration", "configuration", "setLocalDescription", "description", "setRemoteDescription", "states", "includes", "RTCSdpTypes", "cleanup"]
7
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var datachannel_53JZPGFA_exports = {};
20
+ __export(datachannel_53JZPGFA_exports, {
21
+ RTCIceCandidate: () => import_chunk_XE5JOIGD.IceCandidate,
22
+ RTCPeerConnection: () => import_chunk_XE5JOIGD.PeerConnection,
23
+ RTCSessionDescription: () => import_chunk_XE5JOIGD.SessionDescription,
24
+ cleanup: () => import_chunk_XE5JOIGD.cleanup
25
+ });
26
+ module.exports = __toCommonJS(datachannel_53JZPGFA_exports);
27
+ var import_chunk_XE5JOIGD = require("./chunk-XE5JOIGD.cjs");
28
+ // Annotate the CommonJS export names for ESM import in node:
29
+ 0 && (module.exports = {
30
+ RTCIceCandidate,
31
+ RTCPeerConnection,
32
+ RTCSessionDescription,
33
+ cleanup
34
+ });
35
+ //# sourceMappingURL=datachannel-53JZPGFA.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["datachannel-53JZPGFA.cjs"],
4
+ "sourcesContent": ["import {\n IceCandidate,\n PeerConnection,\n SessionDescription,\n cleanup\n} from \"./chunk-XE5JOIGD.cjs\";\nexport {\n IceCandidate as RTCIceCandidate,\n PeerConnection as RTCPeerConnection,\n SessionDescription as RTCSessionDescription,\n cleanup\n};\n//# sourceMappingURL=datachannel-53JZPGFA.cjs.map\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAKO;",
6
+ "names": []
7
+ }