@agentdance/node-webrtc 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/data-channel.d.ts +33 -0
  2. package/dist/data-channel.d.ts.map +1 -0
  3. package/dist/data-channel.js +138 -0
  4. package/dist/data-channel.js.map +1 -0
  5. package/dist/ice-candidate.d.ts +30 -0
  6. package/dist/ice-candidate.d.ts.map +1 -0
  7. package/dist/ice-candidate.js +78 -0
  8. package/dist/ice-candidate.js.map +1 -0
  9. package/dist/index.d.ts +9 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +9 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/internal/peer-internals.d.ts +55 -0
  14. package/dist/internal/peer-internals.d.ts.map +1 -0
  15. package/dist/internal/peer-internals.js +412 -0
  16. package/dist/internal/peer-internals.js.map +1 -0
  17. package/dist/internal/sdp-factory.d.ts +9 -0
  18. package/dist/internal/sdp-factory.d.ts.map +1 -0
  19. package/dist/internal/sdp-factory.js +58 -0
  20. package/dist/internal/sdp-factory.js.map +1 -0
  21. package/dist/internal/sdp-parser.d.ts +15 -0
  22. package/dist/internal/sdp-parser.d.ts.map +1 -0
  23. package/dist/internal/sdp-parser.js +70 -0
  24. package/dist/internal/sdp-parser.js.map +1 -0
  25. package/dist/peer-connection.d.ts +72 -0
  26. package/dist/peer-connection.d.ts.map +1 -0
  27. package/dist/peer-connection.js +198 -0
  28. package/dist/peer-connection.js.map +1 -0
  29. package/dist/rtp-receiver.d.ts +28 -0
  30. package/dist/rtp-receiver.d.ts.map +1 -0
  31. package/dist/rtp-receiver.js +39 -0
  32. package/dist/rtp-receiver.js.map +1 -0
  33. package/dist/rtp-sender.d.ts +29 -0
  34. package/dist/rtp-sender.d.ts.map +1 -0
  35. package/dist/rtp-sender.js +58 -0
  36. package/dist/rtp-sender.js.map +1 -0
  37. package/dist/rtp-transceiver.d.ts +25 -0
  38. package/dist/rtp-transceiver.d.ts.map +1 -0
  39. package/dist/rtp-transceiver.js +28 -0
  40. package/dist/rtp-transceiver.js.map +1 -0
  41. package/dist/session-description.d.ts +8 -0
  42. package/dist/session-description.d.ts.map +1 -0
  43. package/dist/session-description.js +12 -0
  44. package/dist/session-description.js.map +1 -0
  45. package/dist/stats.d.ts +16 -0
  46. package/dist/stats.d.ts.map +1 -0
  47. package/dist/stats.js +22 -0
  48. package/dist/stats.js.map +1 -0
  49. package/dist/types.d.ts +113 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +2 -0
  52. package/dist/types.js.map +1 -0
  53. package/package.json +68 -0
  54. package/src/data-channel.ts +165 -0
  55. package/src/ice-candidate.ts +91 -0
  56. package/src/index.ts +8 -0
  57. package/src/internal/peer-internals.ts +477 -0
  58. package/src/internal/sdp-factory.ts +81 -0
  59. package/src/internal/sdp-parser.ts +69 -0
  60. package/src/peer-connection.ts +253 -0
  61. package/src/rtp-receiver.ts +51 -0
  62. package/src/rtp-sender.ts +77 -0
  63. package/src/rtp-transceiver.ts +40 -0
  64. package/src/session-description.ts +15 -0
  65. package/src/stats.ts +35 -0
  66. package/src/types.ts +156 -0
@@ -0,0 +1,72 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { RTCConfiguration, RTCSessionDescriptionInit, RTCSessionDescription, RTCIceCandidateInit, RTCOfferOptions, RTCAnswerOptions, RTCSignalingState, RTCPeerConnectionState, RTCIceConnectionState, RTCIceGatheringState, RTCDataChannelInit, RTCRtpTransceiverDirection } from './types.js';
3
+ import { RTCDataChannel as _RTCDataChannel } from './data-channel.js';
4
+ import { RTCRtpTransceiver as _RTCRtpTransceiver } from './rtp-transceiver.js';
5
+ export { RTCSessionDescription } from './session-description.js';
6
+ export { RTCIceCandidate } from './ice-candidate.js';
7
+ export { RTCDataChannel } from './data-channel.js';
8
+ export { RTCRtpSender } from './rtp-sender.js';
9
+ export { RTCRtpReceiver } from './rtp-receiver.js';
10
+ export { RTCRtpTransceiver } from './rtp-transceiver.js';
11
+ export * from './types.js';
12
+ export declare interface RTCPeerConnection {
13
+ on(event: 'icecandidate', listener: (init: RTCIceCandidateInit | null) => void): this;
14
+ on(event: 'icecandidateerror', listener: (ev: {
15
+ errorCode: number;
16
+ errorText: string;
17
+ }) => void): this;
18
+ on(event: 'iceconnectionstatechange', listener: () => void): this;
19
+ on(event: 'icegatheringstatechange', listener: () => void): this;
20
+ on(event: 'connectionstatechange', listener: () => void): this;
21
+ on(event: 'signalingstatechange', listener: () => void): this;
22
+ on(event: 'negotiationneeded', listener: () => void): this;
23
+ on(event: 'datachannel', listener: (channel: import('./data-channel.js').RTCDataChannel) => void): this;
24
+ on(event: 'track', listener: (ev: RTCTrackEvent) => void): this;
25
+ }
26
+ export interface RTCTrackEvent {
27
+ receiver: import('./rtp-receiver.js').RTCRtpReceiver;
28
+ track: {
29
+ kind: string;
30
+ };
31
+ }
32
+ export declare class RTCPeerConnection extends EventEmitter {
33
+ readonly localDescription: RTCSessionDescription | null;
34
+ readonly remoteDescription: RTCSessionDescription | null;
35
+ readonly currentLocalDescription: RTCSessionDescription | null;
36
+ readonly currentRemoteDescription: RTCSessionDescription | null;
37
+ readonly pendingLocalDescription: RTCSessionDescription | null;
38
+ readonly pendingRemoteDescription: RTCSessionDescription | null;
39
+ signalingState: RTCSignalingState;
40
+ connectionState: RTCPeerConnectionState;
41
+ iceConnectionState: RTCIceConnectionState;
42
+ iceGatheringState: RTCIceGatheringState;
43
+ private _config;
44
+ private _isClosed;
45
+ private _transceivers;
46
+ private _dataChannels;
47
+ private _pendingChannels;
48
+ private _internals;
49
+ constructor(config?: RTCConfiguration);
50
+ createOffer(options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit>;
51
+ createAnswer(options?: RTCAnswerOptions): Promise<RTCSessionDescriptionInit>;
52
+ setLocalDescription(description: RTCSessionDescriptionInit): Promise<void>;
53
+ setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void>;
54
+ addIceCandidate(candidate: RTCIceCandidateInit | null): Promise<void>;
55
+ createDataChannel(label: string, init?: RTCDataChannelInit): _RTCDataChannel;
56
+ addTransceiver(kind: 'audio' | 'video', init?: {
57
+ direction?: RTCRtpTransceiverDirection;
58
+ }): _RTCRtpTransceiver;
59
+ getTransceivers(): _RTCRtpTransceiver[];
60
+ getSenders(): import('./rtp-sender.js').RTCRtpSender[];
61
+ getReceivers(): import('./rtp-receiver.js').RTCRtpReceiver[];
62
+ getStats(): Promise<import('./stats.js').RTCStatsReport>;
63
+ close(): void;
64
+ restartIce(): void;
65
+ private _getOrCreateInternals;
66
+ private _assertNotClosed;
67
+ private _updateSignalingState;
68
+ _updateConnectionState(state: RTCPeerConnectionState): void;
69
+ _updateIceConnectionState(state: RTCIceConnectionState): void;
70
+ _updateIceGatheringState(state: RTCIceGatheringState): void;
71
+ }
72
+ //# sourceMappingURL=peer-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-connection.d.ts","sourceRoot":"","sources":["../src/peer-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EACV,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,cAAc,YAAY,CAAC;AAE3B,MAAM,CAAC,OAAO,WAAW,iBAAiB;IACxC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACtF,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACvG,EAAE,CAAC,KAAK,EAAE,0BAA0B,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAClE,EAAE,CAAC,KAAK,EAAE,yBAAyB,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACjE,EAAE,CAAC,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC/D,EAAE,CAAC,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC9D,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC3D,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,mBAAmB,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAAC;IACxG,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,mBAAmB,EAAE,cAAc,CAAC;IACrD,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzB;AAED,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,QAAQ,CAAC,gBAAgB,EAAE,qBAAqB,GAAG,IAAI,CAAQ;IAC/D,QAAQ,CAAC,iBAAiB,EAAE,qBAAqB,GAAG,IAAI,CAAQ;IAChE,QAAQ,CAAC,uBAAuB,EAAE,qBAAqB,GAAG,IAAI,CAAQ;IACtE,QAAQ,CAAC,wBAAwB,EAAE,qBAAqB,GAAG,IAAI,CAAQ;IACvE,QAAQ,CAAC,uBAAuB,EAAE,qBAAqB,GAAG,IAAI,CAAQ;IACtE,QAAQ,CAAC,wBAAwB,EAAE,qBAAqB,GAAG,IAAI,CAAQ;IAEvE,cAAc,EAAE,iBAAiB,CAAY;IAC7C,eAAe,EAAE,sBAAsB,CAAS;IAChD,kBAAkB,EAAE,qBAAqB,CAAS;IAClD,iBAAiB,EAAE,oBAAoB,CAAS;IAEhD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,aAAa,CAA2C;IAChE,OAAO,CAAC,gBAAgB,CAAyB;IAGjD,OAAO,CAAC,UAAU,CAAmE;gBAEzE,MAAM,GAAE,gBAAqB;IAYnC,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAM1E,YAAY,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAM5E,mBAAmB,CAAC,WAAW,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1E,oBAAoB,CAAC,WAAW,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3E,eAAe,CAAC,SAAS,EAAE,mBAAmB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3E,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,eAAe;IA0B5E,cAAc,CACZ,IAAI,EAAE,OAAO,GAAG,OAAO,EACvB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,0BAA0B,CAAA;KAAE,GAChD,kBAAkB;IAQrB,eAAe,IAAI,kBAAkB,EAAE;IAIvC,UAAU,IAAI,OAAO,iBAAiB,EAAE,YAAY,EAAE;IAMtD,YAAY,IAAI,OAAO,mBAAmB,EAAE,cAAc,EAAE;IAMtD,QAAQ,IAAI,OAAO,CAAC,OAAO,YAAY,EAAE,cAAc,CAAC;IAO9D,KAAK,IAAI,IAAI;IAQb,UAAU,IAAI,IAAI;YAIJ,qBAAqB;IAanC,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,qBAAqB;IAoB7B,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAO3D,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAO7D,wBAAwB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;CAM5D"}
@@ -0,0 +1,198 @@
1
+ import { EventEmitter } from 'events';
2
+ import { RTCDataChannel as _RTCDataChannel } from './data-channel.js';
3
+ import { RTCRtpTransceiver as _RTCRtpTransceiver } from './rtp-transceiver.js';
4
+ export { RTCSessionDescription } from './session-description.js';
5
+ export { RTCIceCandidate } from './ice-candidate.js';
6
+ export { RTCDataChannel } from './data-channel.js';
7
+ export { RTCRtpSender } from './rtp-sender.js';
8
+ export { RTCRtpReceiver } from './rtp-receiver.js';
9
+ export { RTCRtpTransceiver } from './rtp-transceiver.js';
10
+ export * from './types.js';
11
+ export class RTCPeerConnection extends EventEmitter {
12
+ localDescription = null;
13
+ remoteDescription = null;
14
+ currentLocalDescription = null;
15
+ currentRemoteDescription = null;
16
+ pendingLocalDescription = null;
17
+ pendingRemoteDescription = null;
18
+ signalingState = 'stable';
19
+ connectionState = 'new';
20
+ iceConnectionState = 'new';
21
+ iceGatheringState = 'new';
22
+ _config;
23
+ _isClosed = false;
24
+ _transceivers = [];
25
+ _dataChannels = new Map();
26
+ _pendingChannels = [];
27
+ // Protocol stack (initialized lazily)
28
+ _internals;
29
+ constructor(config = {}) {
30
+ super();
31
+ this._config = {
32
+ iceServers: config.iceServers ?? [{ urls: 'stun:stun.l.google.com:19302' }],
33
+ iceTransportPolicy: config.iceTransportPolicy ?? 'all',
34
+ bundlePolicy: config.bundlePolicy ?? 'max-bundle',
35
+ rtcpMuxPolicy: config.rtcpMuxPolicy ?? 'require',
36
+ iceCandidatePoolSize: config.iceCandidatePoolSize ?? 0,
37
+ certificates: config.certificates ?? [],
38
+ };
39
+ }
40
+ async createOffer(options) {
41
+ this._assertNotClosed();
42
+ const internals = await this._getOrCreateInternals();
43
+ return internals.createOffer(options ?? {});
44
+ }
45
+ async createAnswer(options) {
46
+ this._assertNotClosed();
47
+ const internals = await this._getOrCreateInternals();
48
+ return internals.createAnswer(options ?? {});
49
+ }
50
+ async setLocalDescription(description) {
51
+ this._assertNotClosed();
52
+ const internals = await this._getOrCreateInternals();
53
+ await internals.setLocalDescription(description);
54
+ this.localDescription = {
55
+ type: description.type,
56
+ sdp: description.sdp,
57
+ };
58
+ this._updateSignalingState(description.type, 'local');
59
+ }
60
+ async setRemoteDescription(description) {
61
+ this._assertNotClosed();
62
+ const internals = await this._getOrCreateInternals();
63
+ await internals.setRemoteDescription(description);
64
+ this.remoteDescription = {
65
+ type: description.type,
66
+ sdp: description.sdp,
67
+ };
68
+ this._updateSignalingState(description.type, 'remote');
69
+ }
70
+ async addIceCandidate(candidate) {
71
+ const internals = this._internals;
72
+ if (!internals)
73
+ return;
74
+ // null or empty candidate string = end-of-candidates signal (RFC 8840 §4.4)
75
+ if (!candidate || !candidate.candidate) {
76
+ internals.iceAgent?.remoteGatheringComplete();
77
+ return;
78
+ }
79
+ await internals.addIceCandidate(candidate);
80
+ }
81
+ createDataChannel(label, init) {
82
+ this._assertNotClosed();
83
+ const channel = new _RTCDataChannel(label, init ?? {}, null);
84
+ // Use a unique key: label + id (if specified) + random suffix to avoid collisions
85
+ const key = label + ':' + (init?.id ?? '') + ':' + Math.random().toString(36).slice(2);
86
+ this._dataChannels.set(key, channel);
87
+ if (this._internals?.sctpAssociation?.state === 'connected') {
88
+ // SCTP is ready now — open immediately
89
+ this._internals.openDataChannel(channel);
90
+ }
91
+ else if (this._internals) {
92
+ // Internals exist but SCTP not ready — hand off to internals pending queue
93
+ this._internals.openDataChannel(channel);
94
+ }
95
+ else {
96
+ // Internals not yet created — store locally until SCTP is ready
97
+ this._pendingChannels.push(channel);
98
+ }
99
+ // Clean up the map when the channel closes
100
+ channel.on('close', () => {
101
+ this._dataChannels.delete(key);
102
+ });
103
+ return channel;
104
+ }
105
+ addTransceiver(kind, init) {
106
+ this._assertNotClosed();
107
+ const transceiver = new _RTCRtpTransceiver(kind, init?.direction ?? 'sendrecv');
108
+ this._transceivers.push(transceiver);
109
+ this.emit('negotiationneeded');
110
+ return transceiver;
111
+ }
112
+ getTransceivers() {
113
+ return [...this._transceivers];
114
+ }
115
+ getSenders() {
116
+ return this._transceivers
117
+ .map((t) => t.sender)
118
+ .filter(Boolean);
119
+ }
120
+ getReceivers() {
121
+ return this._transceivers
122
+ .map((t) => t.receiver)
123
+ .filter(Boolean);
124
+ }
125
+ async getStats() {
126
+ const { RTCStatsReportImpl } = await import('./stats.js');
127
+ const internals = this._internals;
128
+ if (!internals)
129
+ return new RTCStatsReportImpl(new Map());
130
+ return internals.getStats();
131
+ }
132
+ close() {
133
+ if (this._isClosed)
134
+ return;
135
+ this._isClosed = true;
136
+ this._internals?.close();
137
+ this._updateConnectionState('closed');
138
+ this.signalingState = 'closed';
139
+ }
140
+ restartIce() {
141
+ this._internals?.restartIce();
142
+ }
143
+ async _getOrCreateInternals() {
144
+ if (!this._internals) {
145
+ const { PeerInternals } = await import('./internal/peer-internals.js');
146
+ this._internals = new PeerInternals(this._config, this);
147
+ // Transfer any channels created before internals existed
148
+ for (const channel of this._pendingChannels) {
149
+ this._internals.openDataChannel(channel);
150
+ }
151
+ this._pendingChannels = [];
152
+ }
153
+ return this._internals;
154
+ }
155
+ _assertNotClosed() {
156
+ if (this._isClosed)
157
+ throw new Error('RTCPeerConnection is closed');
158
+ }
159
+ _updateSignalingState(type, side) {
160
+ const prev = this.signalingState;
161
+ let next = prev;
162
+ if (type === 'rollback') {
163
+ next = 'stable';
164
+ }
165
+ else if (type === 'offer') {
166
+ next = side === 'local' ? 'have-local-offer' : 'have-remote-offer';
167
+ }
168
+ else if (type === 'answer') {
169
+ next = 'stable';
170
+ }
171
+ else if (type === 'pranswer') {
172
+ next = side === 'local' ? 'have-local-pranswer' : 'have-remote-pranswer';
173
+ }
174
+ if (next !== prev) {
175
+ this.signalingState = next;
176
+ this.emit('signalingstatechange');
177
+ }
178
+ }
179
+ _updateConnectionState(state) {
180
+ if (this.connectionState !== state) {
181
+ this.connectionState = state;
182
+ this.emit('connectionstatechange');
183
+ }
184
+ }
185
+ _updateIceConnectionState(state) {
186
+ if (this.iceConnectionState !== state) {
187
+ this.iceConnectionState = state;
188
+ this.emit('iceconnectionstatechange');
189
+ }
190
+ }
191
+ _updateIceGatheringState(state) {
192
+ if (this.iceGatheringState !== state) {
193
+ this.iceGatheringState = state;
194
+ this.emit('icegatheringstatechange');
195
+ }
196
+ }
197
+ }
198
+ //# sourceMappingURL=peer-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-connection.js","sourceRoot":"","sources":["../src/peer-connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { RTCRtpReceiveParameters } from './types.js';
3
+ import type { MediaStreamTrack } from './rtp-sender.js';
4
+ export declare class RTCRtpReceiver extends EventEmitter {
5
+ readonly track: MediaStreamTrack | null;
6
+ readonly transport: RTCDtlsTransport | null;
7
+ getParameters(): RTCRtpReceiveParameters;
8
+ getStats(): Promise<RTCStatsReport>;
9
+ getContributingSources(): RTCRtpContributingSource[];
10
+ getSynchronizationSources(): RTCRtpSynchronizationSource[];
11
+ static getCapabilities(kind: string): {
12
+ codecs: unknown[];
13
+ headerExtensions: unknown[];
14
+ } | null;
15
+ }
16
+ interface RTCDtlsTransport {
17
+ }
18
+ interface RTCStatsReport {
19
+ }
20
+ interface RTCRtpContributingSource {
21
+ source: number;
22
+ timestamp: number;
23
+ audioLevel?: number;
24
+ }
25
+ interface RTCRtpSynchronizationSource extends RTCRtpContributingSource {
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=rtp-receiver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-receiver.d.ts","sourceRoot":"","sources":["../src/rtp-receiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAC/C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAEnD,aAAa,IAAI,uBAAuB;IAIlC,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAIzC,sBAAsB,IAAI,wBAAwB,EAAE;IAIpD,yBAAyB,IAAI,2BAA2B,EAAE;IAI1D,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAAC,gBAAgB,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,IAAI;CAoBhG;AAGD,UAAU,gBAAgB;CAAG;AAC7B,UAAU,cAAc;CAAG;AAC3B,UAAU,wBAAwB;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AAC9F,UAAU,2BAA4B,SAAQ,wBAAwB;CAAG"}
@@ -0,0 +1,39 @@
1
+ import { EventEmitter } from 'events';
2
+ export class RTCRtpReceiver extends EventEmitter {
3
+ track = null;
4
+ transport = null;
5
+ getParameters() {
6
+ return { codecs: [], headerExtensions: [] };
7
+ }
8
+ async getStats() {
9
+ return new Map();
10
+ }
11
+ getContributingSources() {
12
+ return [];
13
+ }
14
+ getSynchronizationSources() {
15
+ return [];
16
+ }
17
+ static getCapabilities(kind) {
18
+ if (kind === 'audio') {
19
+ return {
20
+ codecs: [
21
+ { mimeType: 'audio/opus', clockRate: 48000, channels: 2 },
22
+ { mimeType: 'audio/PCMU', clockRate: 8000 },
23
+ ],
24
+ headerExtensions: [],
25
+ };
26
+ }
27
+ else if (kind === 'video') {
28
+ return {
29
+ codecs: [
30
+ { mimeType: 'video/VP8', clockRate: 90000 },
31
+ { mimeType: 'video/VP9', clockRate: 90000 },
32
+ ],
33
+ headerExtensions: [],
34
+ };
35
+ }
36
+ return null;
37
+ }
38
+ }
39
+ //# sourceMappingURL=rtp-receiver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-receiver.js","sourceRoot":"","sources":["../src/rtp-receiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,MAAM,OAAO,cAAe,SAAQ,YAAY;IACrC,KAAK,GAA4B,IAAI,CAAC;IACtC,SAAS,GAA4B,IAAI,CAAC;IAEnD,aAAa;QACX,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,GAAG,EAA+B,CAAC;IAChD,CAAC;IAED,sBAAsB;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,yBAAyB;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,IAAY;QACjC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO;gBACL,MAAM,EAAE;oBACN,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;oBACzD,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE;iBAC5C;gBACD,gBAAgB,EAAE,EAAE;aACrB,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO;gBACL,MAAM,EAAE;oBACN,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE;oBAC3C,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE;iBAC5C;gBACD,gBAAgB,EAAE,EAAE;aACrB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { RTCRtpSendParameters } from './types.js';
3
+ export interface MediaStreamTrack {
4
+ kind: string;
5
+ id: string;
6
+ enabled: boolean;
7
+ muted: boolean;
8
+ readyState: 'live' | 'ended';
9
+ }
10
+ export declare class RTCRtpSender extends EventEmitter {
11
+ readonly track: MediaStreamTrack | null;
12
+ readonly transport: RTCDtlsTransport | null;
13
+ private _parameters;
14
+ constructor(track: MediaStreamTrack | null);
15
+ getStats(): Promise<RTCStatsReport>;
16
+ getParameters(): RTCRtpSendParameters;
17
+ setParameters(params: RTCRtpSendParameters): Promise<void>;
18
+ replaceTrack(withTrack: MediaStreamTrack | null): Promise<void>;
19
+ static getCapabilities(kind: string): {
20
+ codecs: unknown[];
21
+ headerExtensions: unknown[];
22
+ } | null;
23
+ }
24
+ interface RTCDtlsTransport {
25
+ }
26
+ interface RTCStatsReport {
27
+ }
28
+ export {};
29
+ //# sourceMappingURL=rtp-sender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-sender.d.ts","sourceRoot":"","sources":["../src/rtp-sender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAA4B,MAAM,YAAY,CAAC;AAGjF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9B;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IACnD,OAAO,CAAC,WAAW,CAAuB;gBAE9B,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAWpC,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAIzC,aAAa,IAAI,oBAAoB;IAI/B,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,YAAY,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAAC,gBAAgB,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,IAAI;CA2BhG;AAGD,UAAU,gBAAgB;CAAG;AAC7B,UAAU,cAAc;CAAG"}
@@ -0,0 +1,58 @@
1
+ import { EventEmitter } from 'events';
2
+ export class RTCRtpSender extends EventEmitter {
3
+ track;
4
+ transport = null;
5
+ _parameters;
6
+ constructor(track) {
7
+ super();
8
+ this.track = track;
9
+ this._parameters = {
10
+ codecs: [],
11
+ headerExtensions: [],
12
+ encodings: [],
13
+ transactionId: '',
14
+ };
15
+ }
16
+ async getStats() {
17
+ return new Map();
18
+ }
19
+ getParameters() {
20
+ return { ...this._parameters };
21
+ }
22
+ async setParameters(params) {
23
+ this._parameters = params;
24
+ }
25
+ replaceTrack(withTrack) {
26
+ this.track = withTrack;
27
+ return Promise.resolve();
28
+ }
29
+ static getCapabilities(kind) {
30
+ // Return default codec capabilities
31
+ if (kind === 'audio') {
32
+ return {
33
+ codecs: [
34
+ { mimeType: 'audio/opus', clockRate: 48000, channels: 2 },
35
+ { mimeType: 'audio/PCMU', clockRate: 8000 },
36
+ { mimeType: 'audio/PCMA', clockRate: 8000 },
37
+ ],
38
+ headerExtensions: [
39
+ { uri: 'urn:ietf:params:rtp-hdrext:ssrc-audio-level', id: 1 },
40
+ ],
41
+ };
42
+ }
43
+ else if (kind === 'video') {
44
+ return {
45
+ codecs: [
46
+ { mimeType: 'video/VP8', clockRate: 90000 },
47
+ { mimeType: 'video/VP9', clockRate: 90000 },
48
+ { mimeType: 'video/H264', clockRate: 90000 },
49
+ ],
50
+ headerExtensions: [
51
+ { uri: 'http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time', id: 2 },
52
+ ],
53
+ };
54
+ }
55
+ return null;
56
+ }
57
+ }
58
+ //# sourceMappingURL=rtp-sender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-sender.js","sourceRoot":"","sources":["../src/rtp-sender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAYtC,MAAM,OAAO,YAAa,SAAQ,YAAY;IACnC,KAAK,CAA0B;IAC/B,SAAS,GAA4B,IAAI,CAAC;IAC3C,WAAW,CAAuB;IAE1C,YAAY,KAA8B;QACxC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG;YACjB,MAAM,EAAE,EAAE;YACV,gBAAgB,EAAE,EAAE;YACpB,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,EAAE;SAClB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,GAAG,EAA+B,CAAC;IAChD,CAAC;IAED,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAA4B;QAC9C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;IAC5B,CAAC;IAED,YAAY,CAAC,SAAkC;QAC5C,IAAsD,CAAC,KAAK,GAAG,SAAS,CAAC;QAC1E,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,IAAY;QACjC,oCAAoC;QACpC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO;gBACL,MAAM,EAAE;oBACN,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;oBACzD,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE;oBAC3C,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE;iBAC5C;gBACD,gBAAgB,EAAE;oBAChB,EAAE,GAAG,EAAE,6CAA6C,EAAE,EAAE,EAAE,CAAC,EAAE;iBAC9D;aACF,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO;gBACL,MAAM,EAAE;oBACN,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE;oBAC3C,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE;oBAC3C,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE;iBAC7C;gBACD,gBAAgB,EAAE;oBAChB,EAAE,GAAG,EAAE,4DAA4D,EAAE,EAAE,EAAE,CAAC,EAAE;iBAC7E;aACF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { RTCRtpTransceiverDirection } from './types.js';
3
+ import { RTCRtpSender } from './rtp-sender.js';
4
+ import { RTCRtpReceiver } from './rtp-receiver.js';
5
+ export declare class RTCRtpTransceiver extends EventEmitter {
6
+ readonly kind: 'audio' | 'video';
7
+ readonly sender: RTCRtpSender;
8
+ readonly receiver: RTCRtpReceiver;
9
+ readonly mid: string | null;
10
+ direction: RTCRtpTransceiverDirection;
11
+ currentDirection: RTCRtpTransceiverDirection | null;
12
+ stopped: boolean;
13
+ constructor(kind: 'audio' | 'video', direction: RTCRtpTransceiverDirection);
14
+ stop(): void;
15
+ setCodecPreferences(codecs: RTCRtpCodecParameters[]): void;
16
+ }
17
+ interface RTCRtpCodecParameters {
18
+ mimeType: string;
19
+ clockRate: number;
20
+ channels?: number;
21
+ sdpFmtpLine?: string;
22
+ payloadType: number;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=rtp-transceiver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-transceiver.d.ts","sourceRoot":"","sources":["../src/rtp-transceiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,SAAS,EAAE,0BAA0B,CAAC;IACtC,gBAAgB,EAAE,0BAA0B,GAAG,IAAI,CAAQ;IAC3D,OAAO,UAAS;gBAEJ,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,SAAS,EAAE,0BAA0B;IAQ1E,IAAI,IAAI,IAAI;IAMZ,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,IAAI;CAG3D;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,28 @@
1
+ import { EventEmitter } from 'events';
2
+ import { RTCRtpSender } from './rtp-sender.js';
3
+ import { RTCRtpReceiver } from './rtp-receiver.js';
4
+ export class RTCRtpTransceiver extends EventEmitter {
5
+ kind;
6
+ sender;
7
+ receiver;
8
+ mid = null;
9
+ direction;
10
+ currentDirection = null;
11
+ stopped = false;
12
+ constructor(kind, direction) {
13
+ super();
14
+ this.kind = kind;
15
+ this.sender = new RTCRtpSender(null);
16
+ this.receiver = new RTCRtpReceiver();
17
+ this.direction = direction;
18
+ }
19
+ stop() {
20
+ this.stopped = true;
21
+ this.direction = 'stopped';
22
+ this.currentDirection = 'stopped';
23
+ }
24
+ setCodecPreferences(codecs) {
25
+ // Store codec preferences for SDP generation
26
+ }
27
+ }
28
+ //# sourceMappingURL=rtp-transceiver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-transceiver.js","sourceRoot":"","sources":["../src/rtp-transceiver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IACxC,IAAI,CAAoB;IACxB,MAAM,CAAe;IACrB,QAAQ,CAAiB;IACzB,GAAG,GAAkB,IAAI,CAAC;IACnC,SAAS,CAA6B;IACtC,gBAAgB,GAAsC,IAAI,CAAC;IAC3D,OAAO,GAAG,KAAK,CAAC;IAEhB,YAAY,IAAuB,EAAE,SAAqC;QACxE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACpC,CAAC;IAED,mBAAmB,CAAC,MAA+B;QACjD,6CAA6C;IAC/C,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { RTCSessionDescriptionInit, RTCSdpType } from './types.js';
2
+ export declare class RTCSessionDescription implements RTCSessionDescriptionInit {
3
+ readonly type: RTCSdpType;
4
+ readonly sdp: string;
5
+ constructor(init: RTCSessionDescriptionInit);
6
+ toJSON(): RTCSessionDescriptionInit;
7
+ }
8
+ //# sourceMappingURL=session-description.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-description.d.ts","sourceRoot":"","sources":["../src/session-description.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExE,qBAAa,qBAAsB,YAAW,yBAAyB;IACrE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBAET,IAAI,EAAE,yBAAyB;IAK3C,MAAM,IAAI,yBAAyB;CAGpC"}
@@ -0,0 +1,12 @@
1
+ export class RTCSessionDescription {
2
+ type;
3
+ sdp;
4
+ constructor(init) {
5
+ this.type = init.type;
6
+ this.sdp = init.sdp;
7
+ }
8
+ toJSON() {
9
+ return { type: this.type, sdp: this.sdp };
10
+ }
11
+ }
12
+ //# sourceMappingURL=session-description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-description.js","sourceRoot":"","sources":["../src/session-description.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,qBAAqB;IACvB,IAAI,CAAa;IACjB,GAAG,CAAS;IAErB,YAAY,IAA+B;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAC5C,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ export interface RTCStats {
2
+ id: string;
3
+ type: string;
4
+ timestamp: number;
5
+ }
6
+ export type RTCStatsReport = RTCStatsReportImpl;
7
+ export declare class RTCStatsReportImpl {
8
+ private readonly _map;
9
+ constructor(map: Map<string, RTCStats>);
10
+ entries(): IterableIterator<[string, RTCStats]>;
11
+ get(id: string): RTCStats | undefined;
12
+ has(id: string): boolean;
13
+ forEach(callbackfn: (value: RTCStats, key: string) => void): void;
14
+ [Symbol.iterator](): IterableIterator<[string, RTCStats]>;
15
+ }
16
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEhD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;gBAEjC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAItC,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAI/C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIrC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIjE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAG1D"}
package/dist/stats.js ADDED
@@ -0,0 +1,22 @@
1
+ export class RTCStatsReportImpl {
2
+ _map;
3
+ constructor(map) {
4
+ this._map = map;
5
+ }
6
+ entries() {
7
+ return this._map.entries();
8
+ }
9
+ get(id) {
10
+ return this._map.get(id);
11
+ }
12
+ has(id) {
13
+ return this._map.has(id);
14
+ }
15
+ forEach(callbackfn) {
16
+ this._map.forEach(callbackfn);
17
+ }
18
+ [Symbol.iterator]() {
19
+ return this._map.entries();
20
+ }
21
+ }
22
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,kBAAkB;IACZ,IAAI,CAAwB;IAE7C,YAAY,GAA0B;QACpC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,UAAkD;QACxD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF"}