@fishjam-cloud/ts-client 0.5.1

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 (52) hide show
  1. package/README.md +134 -0
  2. package/dist/src/FishjamClient.d.ts +523 -0
  3. package/dist/src/FishjamClient.js +666 -0
  4. package/dist/src/auth.d.ts +3 -0
  5. package/dist/src/auth.js +8 -0
  6. package/dist/src/index.d.ts +7 -0
  7. package/dist/src/index.js +3 -0
  8. package/dist/src/protos/fishjam/peer_notifications.d.ts +78 -0
  9. package/dist/src/protos/fishjam/peer_notifications.js +302 -0
  10. package/dist/src/protos/index.d.ts +1 -0
  11. package/dist/src/protos/index.js +1 -0
  12. package/dist/src/reconnection.d.ts +27 -0
  13. package/dist/src/reconnection.js +121 -0
  14. package/dist/src/webrtc/CommandsQueue.d.ts +23 -0
  15. package/dist/src/webrtc/CommandsQueue.js +102 -0
  16. package/dist/src/webrtc/ConnectionManager.d.ts +29 -0
  17. package/dist/src/webrtc/ConnectionManager.js +82 -0
  18. package/dist/src/webrtc/bitrate.d.ts +12 -0
  19. package/dist/src/webrtc/bitrate.js +12 -0
  20. package/dist/src/webrtc/deferred.d.ts +8 -0
  21. package/dist/src/webrtc/deferred.js +17 -0
  22. package/dist/src/webrtc/index.d.ts +3 -0
  23. package/dist/src/webrtc/index.js +1 -0
  24. package/dist/src/webrtc/internal.d.ts +26 -0
  25. package/dist/src/webrtc/internal.js +34 -0
  26. package/dist/src/webrtc/mediaEvent.d.ts +10 -0
  27. package/dist/src/webrtc/mediaEvent.js +16 -0
  28. package/dist/src/webrtc/tracks/Local.d.ts +51 -0
  29. package/dist/src/webrtc/tracks/Local.js +289 -0
  30. package/dist/src/webrtc/tracks/LocalTrack.d.ts +62 -0
  31. package/dist/src/webrtc/tracks/LocalTrack.js +235 -0
  32. package/dist/src/webrtc/tracks/LocalTrackManager.d.ts +38 -0
  33. package/dist/src/webrtc/tracks/LocalTrackManager.js +83 -0
  34. package/dist/src/webrtc/tracks/Remote.d.ts +38 -0
  35. package/dist/src/webrtc/tracks/Remote.js +200 -0
  36. package/dist/src/webrtc/tracks/RemoteTrack.d.ts +39 -0
  37. package/dist/src/webrtc/tracks/RemoteTrack.js +64 -0
  38. package/dist/src/webrtc/tracks/TrackCommon.d.ts +8 -0
  39. package/dist/src/webrtc/tracks/TrackCommon.js +1 -0
  40. package/dist/src/webrtc/tracks/bandwidth.d.ts +1 -0
  41. package/dist/src/webrtc/tracks/bandwidth.js +27 -0
  42. package/dist/src/webrtc/tracks/encodings.d.ts +1 -0
  43. package/dist/src/webrtc/tracks/encodings.js +7 -0
  44. package/dist/src/webrtc/tracks/transceivers.d.ts +2 -0
  45. package/dist/src/webrtc/tracks/transceivers.js +78 -0
  46. package/dist/src/webrtc/types.d.ts +306 -0
  47. package/dist/src/webrtc/types.js +2 -0
  48. package/dist/src/webrtc/voiceActivityDetection.d.ts +2 -0
  49. package/dist/src/webrtc/voiceActivityDetection.js +2 -0
  50. package/dist/src/webrtc/webRTCEndpoint.d.ts +299 -0
  51. package/dist/src/webrtc/webRTCEndpoint.js +730 -0
  52. package/package.json +82 -0
@@ -0,0 +1,64 @@
1
+ import { isTrackKind } from '../internal';
2
+ /**
3
+ * This is a wrapper over `TrackContext` that adds additional properties such as:
4
+ * - `MLineId`: required to generate sdpOffer
5
+ *
6
+ * # Lifecycle, state transitions
7
+ *
8
+ * I identified the following states
9
+ * - on `trackAdded`
10
+ * - trackContext.stream === null
11
+ * - trackContext.track === null
12
+ * - trackContext.trackKind === null
13
+ * - mLineId === null
14
+ * - on `onSdpAnswer`
15
+ * - trackContext.stream === null
16
+ * - trackContext.track === null
17
+ * - trackContext.trackKind === null
18
+ * - mLineId !== null
19
+ * - on `trackReady`
20
+ * - trackContext.stream !== null
21
+ * - trackContext.track !== null
22
+ * - trackContext.trackKind !== null
23
+ * - mLineId !== null
24
+ */
25
+ export class RemoteTrack {
26
+ id;
27
+ mLineId = null;
28
+ trackContext;
29
+ encodings = { h: false, m: false, l: false };
30
+ // todo this field is not exposed
31
+ targetEncoding = null;
32
+ constructor(id, trackContext) {
33
+ this.id = id;
34
+ this.trackContext = trackContext;
35
+ }
36
+ setMLineId = (mLineId) => {
37
+ this.mLineId = mLineId;
38
+ };
39
+ setReady = (stream, track) => {
40
+ if (!isTrackKind(track.kind))
41
+ throw new Error('Track has no kind');
42
+ this.trackContext.stream = stream;
43
+ this.trackContext.track = track;
44
+ this.trackContext.trackKind = track.kind;
45
+ };
46
+ disableTrackEncoding = (encoding) => {
47
+ this.encodings[encoding] = false;
48
+ };
49
+ enableTrackEncoding = (encoding) => {
50
+ this.encodings[encoding] = true;
51
+ };
52
+ setTargetTrackEncoding = (variant) => {
53
+ // todo implement validation
54
+ this.targetEncoding = variant;
55
+ const trackContext = this.trackContext;
56
+ if (!trackContext.simulcastConfig?.enabled) {
57
+ throw new Error('The track does not support changing its target variant');
58
+ }
59
+ const isValidTargetEncoding = !trackContext.simulcastConfig.activeEncodings.includes(variant);
60
+ if (isValidTargetEncoding) {
61
+ throw new Error(`The track does not support variant ${variant}`);
62
+ }
63
+ };
64
+ }
@@ -0,0 +1,8 @@
1
+ import type { MLineId, Encoding } from '../types';
2
+ export type TrackId = string;
3
+ export type EndpointId = string;
4
+ export type TrackEncodings = Record<Encoding, boolean>;
5
+ export interface TrackCommon {
6
+ mLineId: MLineId | null;
7
+ encodings: TrackEncodings;
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export declare const splitBandwidth: (rtcRtpEncodingParameters: RTCRtpEncodingParameters[], maxBandwidth: number) => RTCRtpEncodingParameters[];
@@ -0,0 +1,27 @@
1
+ export const splitBandwidth = (rtcRtpEncodingParameters, maxBandwidth) => {
2
+ const bandwidth = maxBandwidth * 1024;
3
+ if (bandwidth === 0) {
4
+ return rtcRtpEncodingParameters.map((encoding) => ({
5
+ ...encoding,
6
+ maxBitrate: undefined,
7
+ }));
8
+ }
9
+ if (rtcRtpEncodingParameters.length === 0) {
10
+ // This most likely is a race condition. Log an error and prevent catastrophic failure
11
+ console.error("Attempted to limit bandwidth of the track that doesn't have any encodings");
12
+ return rtcRtpEncodingParameters.map((encoding) => ({ ...encoding }));
13
+ }
14
+ if (!rtcRtpEncodingParameters[0])
15
+ throw new Error('RTCRtpEncodingParameters is in invalid state');
16
+ // We are solving the following equation:
17
+ // x + (k0/k1)^2 * x + (k0/k2)^2 * x + ... + (k0/kn)^2 * x = bandwidth
18
+ // where x is the bitrate for the first encoding, kn are scaleResolutionDownBy factors
19
+ // square is dictated by the fact that k0/kn is a scale factor, but we are interested in the total number of pixels in the image
20
+ const firstScaleDownBy = rtcRtpEncodingParameters[0].scaleResolutionDownBy || 1;
21
+ const bitrate_parts = rtcRtpEncodingParameters.reduce((acc, value) => acc + (firstScaleDownBy / (value.scaleResolutionDownBy || 1)) ** 2, 0);
22
+ const x = bandwidth / bitrate_parts;
23
+ return rtcRtpEncodingParameters.map((encoding) => ({
24
+ ...encoding,
25
+ maxBitrate: x * (firstScaleDownBy / (encoding.scaleResolutionDownBy || 1)) ** 2,
26
+ }));
27
+ };
@@ -0,0 +1 @@
1
+ export declare const getEncodingParameters: (parameters: RTCRtpSendParameters, bandwidth: number) => RTCRtpEncodingParameters[];
@@ -0,0 +1,7 @@
1
+ import { splitBandwidth } from './bandwidth';
2
+ export const getEncodingParameters = (parameters, bandwidth) => {
3
+ const unlimitedEncodings = [{}];
4
+ return parameters.encodings.length === 0
5
+ ? unlimitedEncodings
6
+ : splitBandwidth(parameters.encodings, bandwidth);
7
+ };
@@ -0,0 +1,2 @@
1
+ import type { TrackContextImpl } from '../internal';
2
+ export declare const createTransceiverConfig: (trackContext: TrackContextImpl<unknown, unknown>) => RTCRtpTransceiverInit;
@@ -0,0 +1,78 @@
1
+ import { splitBandwidth } from './bandwidth';
2
+ export const createTransceiverConfig = (trackContext) => {
3
+ if (!trackContext.track)
4
+ throw new Error(`Cannot create transceiver config for `);
5
+ if (trackContext.track.kind === 'audio') {
6
+ return createAudioTransceiverConfig(trackContext.stream);
7
+ }
8
+ return createVideoTransceiverConfig(trackContext, trackContext.maxBandwidth);
9
+ };
10
+ const createAudioTransceiverConfig = (stream) => {
11
+ return {
12
+ direction: 'sendonly',
13
+ streams: stream ? [stream] : [],
14
+ };
15
+ };
16
+ const createVideoTransceiverConfig = (trackContext, maxBandwidth) => {
17
+ if (!trackContext.simulcastConfig)
18
+ throw new Error(`Simulcast config for track ${trackContext.trackId} not found.`);
19
+ if (typeof maxBandwidth !== 'number' &&
20
+ trackContext.simulcastConfig.enabled) {
21
+ return createSimulcastTransceiverConfig(trackContext, maxBandwidth);
22
+ }
23
+ if (typeof maxBandwidth === 'number') {
24
+ return createNonSimulcastTransceiverConfig(trackContext, maxBandwidth);
25
+ }
26
+ throw new Error('LocalTrack is in invalid state!');
27
+ };
28
+ const createNonSimulcastTransceiverConfig = (trackContext, maxBandwidth) => {
29
+ return {
30
+ direction: 'sendonly',
31
+ sendEncodings: splitBandwidth([{ active: true }], maxBandwidth),
32
+ streams: trackContext.stream ? [trackContext.stream] : [],
33
+ };
34
+ };
35
+ const createSimulcastTransceiverConfig = (trackContext, maxBandwidth) => {
36
+ if (!trackContext.simulcastConfig)
37
+ throw new Error(`Simulcast config for track ${trackContext.trackId} not found.`);
38
+ const activeEncodings = trackContext.simulcastConfig.activeEncodings;
39
+ const encodings = [
40
+ {
41
+ rid: 'l',
42
+ active: activeEncodings.includes('l'),
43
+ // maxBitrate: 4_000_000,
44
+ scaleResolutionDownBy: 4.0,
45
+ // scalabilityMode: "L1T" + TEMPORAL_LAYERS_COUNT,
46
+ },
47
+ {
48
+ rid: 'm',
49
+ active: activeEncodings.includes('m'),
50
+ scaleResolutionDownBy: 2.0,
51
+ },
52
+ {
53
+ rid: 'h',
54
+ active: activeEncodings.includes('h'),
55
+ // maxBitrate: 4_000_000,
56
+ // scalabilityMode: "L1T" + TEMPORAL_LAYERS_COUNT,
57
+ },
58
+ ];
59
+ return {
60
+ direction: 'sendonly',
61
+ // keep this array from low resolution to high resolution
62
+ // in other case lower resolution encoding can get
63
+ // higher max_bitrate
64
+ sendEncodings: calculateSimulcastEncodings(encodings, maxBandwidth),
65
+ };
66
+ };
67
+ const calculateSimulcastEncodings = (encodings, maxBandwidth) => {
68
+ return encodings
69
+ .filter((encoding) => encoding.rid)
70
+ .map((encoding) => {
71
+ const rid = encoding.rid;
72
+ const limit = maxBandwidth.get(rid) || 0;
73
+ return {
74
+ ...encoding,
75
+ maxBitrate: limit > 0 ? limit * 1024 : undefined,
76
+ };
77
+ });
78
+ };
@@ -0,0 +1,306 @@
1
+ import type TypedEmitter from 'typed-emitter';
2
+ import type { SerializedMediaEvent } from './mediaEvent';
3
+ export type MetadataParser<ParsedMetadata> = (rawMetadata: unknown) => ParsedMetadata;
4
+ export type LocalTrackId = string;
5
+ export type MLineId = string;
6
+ export type MediaStreamTrackId = string;
7
+ export type RemoteTrackId = string;
8
+ export type TrackKind = 'audio' | 'video';
9
+ /**
10
+ * Type describing Voice Activity Detection statuses.
11
+ *
12
+ * - `speech` - voice activity has been detected
13
+ * - `silence` - lack of voice activity has been detected
14
+ */
15
+ export type VadStatus = 'speech' | 'silence';
16
+ /**
17
+ * Type describing maximal bandwidth that can be used, in kbps. 0 is interpreted as unlimited bandwidth.
18
+ */
19
+ export type BandwidthLimit = number;
20
+ /**
21
+ * Type describing bandwidth limit for simulcast track.
22
+ * It is a mapping (encoding => BandwidthLimit).
23
+ * If encoding isn't present in this mapping, it will be assumed that this particular encoding shouldn't have any bandwidth limit
24
+ */
25
+ export type SimulcastBandwidthLimit = Map<Encoding, BandwidthLimit>;
26
+ /**
27
+ * Type describing bandwidth limitation of a Track, including simulcast and non-simulcast tracks.
28
+ * A sum type of `BandwidthLimit` and `SimulcastBandwidthLimit`
29
+ */
30
+ export type TrackBandwidthLimit = BandwidthLimit | SimulcastBandwidthLimit;
31
+ /**
32
+ * Type describing possible reasons for currently selected encoding.
33
+ * - `other` - the exact reason couldn't be determined
34
+ * - `encodingInactive` - previously selected encoding became inactive
35
+ * - `lowBandwidth` - there is no longer enough bandwidth to maintain previously selected encoding
36
+ */
37
+ export type EncodingReason = 'other' | 'encodingInactive' | 'lowBandwidth';
38
+ /**
39
+ * Simulcast configuration passed to {@link WebRTCEndpoint.addTrack}.
40
+ *
41
+ * At the moment, simulcast track is initialized in three versions - low, medium and high.
42
+ * High resolution is the original track resolution, while medium and low resolutions
43
+ * are the original track resolution scaled down by 2 and 4 respectively.
44
+ */
45
+ export interface SimulcastConfig {
46
+ /**
47
+ * Whether to simulcast track or not.
48
+ */
49
+ enabled: boolean;
50
+ /**
51
+ * List of initially active encodings.
52
+ *
53
+ * Encoding that is not present in this list might still be
54
+ * enabled using {@link WebRTCEndpoint.enableTrackEncoding}.
55
+ */
56
+ activeEncodings: Encoding[];
57
+ /**
58
+ * List of disabled encodings.
59
+ *
60
+ * Encoding that is present in this list was
61
+ * disabled using {@link WebRTCEndpoint.disableTrackEncoding}.
62
+ */
63
+ disabledEncodings: Encoding[];
64
+ }
65
+ /**
66
+ * Track's context i.e. all data that can be useful when operating on track.
67
+ */
68
+ interface TrackContextFields<EndpointMetadata, TrackMetadata> {
69
+ readonly track: MediaStreamTrack | null;
70
+ /**
71
+ * Stream this track belongs to.
72
+ */
73
+ readonly stream: MediaStream | null;
74
+ /**
75
+ * Endpoint this track comes from.
76
+ */
77
+ readonly endpoint: Endpoint<EndpointMetadata, TrackMetadata>;
78
+ /**
79
+ * Track id. It is generated by RTC engine and takes form `endpoint_id:<random_uuidv4>`.
80
+ * It is WebRTC agnostic i.e. it does not contain `mid` or `stream id`.
81
+ */
82
+ readonly trackId: string;
83
+ /**
84
+ * Simulcast configuration.
85
+ * Only present for local tracks.
86
+ */
87
+ readonly simulcastConfig?: SimulcastConfig;
88
+ /**
89
+ * Any info that was passed in {@link WebRTCEndpoint.addTrack}.
90
+ */
91
+ readonly metadata?: TrackMetadata;
92
+ readonly rawMetadata: any;
93
+ readonly metadataParsingError?: any;
94
+ readonly maxBandwidth?: TrackBandwidthLimit;
95
+ readonly vadStatus: VadStatus;
96
+ /**
97
+ * Encoding that is currently received.
98
+ * Only present for remote tracks.
99
+ */
100
+ readonly encoding?: Encoding;
101
+ /**
102
+ * The reason of currently selected encoding.
103
+ * Only present for remote tracks.
104
+ */
105
+ readonly encodingReason?: EncodingReason;
106
+ }
107
+ export interface TrackContextEvents<EndpointMetadata, TrackMetadata> {
108
+ /**
109
+ * Emitted each time track encoding has changed.
110
+ *
111
+ * Track encoding can change in the following cases:
112
+ * - when user requested a change
113
+ * - when sender stopped sending some encoding (because of bandwidth change)
114
+ * - when receiver doesn't have enough bandwidth
115
+ *
116
+ * Some of those reasons are indicated in {@link TrackContext.encodingReason}.
117
+ */
118
+ encodingChanged: (context: TrackContext<EndpointMetadata, TrackMetadata>) => void;
119
+ /**
120
+ * Emitted every time an update about voice activity is received from the server.
121
+ */
122
+ voiceActivityChanged: (context: TrackContext<EndpointMetadata, TrackMetadata>) => void;
123
+ }
124
+ export interface TrackContext<EndpointMetadata, TrackMetadata> extends TrackContextFields<EndpointMetadata, TrackMetadata>, TypedEmitter<Required<TrackContextEvents<EndpointMetadata, TrackMetadata>>> {
125
+ }
126
+ export type TrackNegotiationStatus = 'awaiting' | 'offered' | 'done';
127
+ /**
128
+ * Type describing possible track encodings.
129
+ * - `"h"` - original encoding
130
+ * - `"m"` - original encoding scaled down by 2
131
+ * - `"l"` - original encoding scaled down by 4
132
+ *
133
+ * Notice that to make all encodings work, the initial
134
+ * resolution has to be at least 1280x720.
135
+ * In other case, browser might not be able to scale
136
+ * some encodings down.
137
+ */
138
+ export type Encoding = 'l' | 'm' | 'h';
139
+ export declare const isEncoding: (encoding: string) => encoding is Encoding;
140
+ /**
141
+ * Events emitted by the {@link WebRTCEndpoint} instance.
142
+ */
143
+ export interface WebRTCEndpointEvents<EndpointMetadata, TrackMetadata> {
144
+ /**
145
+ * Emitted each time WebRTCEndpoint need to send some data to the server.
146
+ */
147
+ sendMediaEvent: (mediaEvent: SerializedMediaEvent) => void;
148
+ /**
149
+ * Emitted when endpoint of this {@link WebRTCEndpoint} instance is ready. Triggered by {@link WebRTCEndpoint.connect}
150
+ */
151
+ connected: (endpointId: string, otherEndpoints: Endpoint<EndpointMetadata, TrackMetadata>[]) => void;
152
+ /**
153
+ * Emitted when endpoint of this {@link WebRTCEndpoint} instance was removed.
154
+ */
155
+ disconnected: () => void;
156
+ /**
157
+ * Emitted when data in a new track arrives.
158
+ *
159
+ * This event is always emitted after {@link trackAdded}.
160
+ * It informs the user that data related to the given track arrives and can be played or displayed.
161
+ */
162
+ trackReady: (ctx: TrackContext<EndpointMetadata, TrackMetadata>) => void;
163
+ /**
164
+ * Emitted each time the endpoint which was already in the room, adds new track. Fields track and stream will be set to null.
165
+ * These fields will be set to non-null value in {@link trackReady}
166
+ */
167
+ trackAdded: (ctx: TrackContext<EndpointMetadata, TrackMetadata>) => void;
168
+ /**
169
+ * Emitted when some track will no longer be sent.
170
+ *
171
+ * It will also be emitted before {@link endpointRemoved} for each track of this endpoint.
172
+ */
173
+ trackRemoved: (ctx: TrackContext<EndpointMetadata, TrackMetadata>) => void;
174
+ /**
175
+ * Emitted each time endpoint has its track metadata updated.
176
+ */
177
+ trackUpdated: (ctx: TrackContext<EndpointMetadata, TrackMetadata>) => void;
178
+ /**
179
+ * Emitted each time new endpoint is added to the room.
180
+ */
181
+ endpointAdded: (endpoint: Endpoint<EndpointMetadata, TrackMetadata>) => void;
182
+ /**
183
+ * Emitted each time endpoint is removed, emitted only for other endpoints.
184
+ */
185
+ endpointRemoved: (endpoint: Endpoint<EndpointMetadata, TrackMetadata>) => void;
186
+ /**
187
+ * Emitted each time endpoint has its metadata updated.
188
+ */
189
+ endpointUpdated: (endpoint: Endpoint<EndpointMetadata, TrackMetadata>) => void;
190
+ /**
191
+ * Emitted in case of errors related to multimedia session e.g. ICE connection.
192
+ */
193
+ connectionError: (error: {
194
+ message: string;
195
+ event: Event;
196
+ }) => void;
197
+ /**
198
+ * Emitted in case of errors related to multimedia session e.g. ICE connection.
199
+ */
200
+ signalingError: (error: {
201
+ message: string;
202
+ }) => void;
203
+ /**
204
+ * Currently, this event is only emitted when DisplayManager in RTC Engine is
205
+ * enabled and simulcast is disabled.
206
+ *
207
+ * Emitted when priority of video tracks have changed.
208
+ * @param enabledTracks - list of tracks which will be sent to client from SFU
209
+ * @param disabledTracks - list of tracks which will not be sent to client from SFU
210
+ */
211
+ tracksPriorityChanged: (enabledTracks: TrackContext<EndpointMetadata, TrackMetadata>[], disabledTracks: TrackContext<EndpointMetadata, TrackMetadata>[]) => void;
212
+ /**
213
+ * Emitted every time the server estimates client's bandwidth.
214
+ *
215
+ * @param {bigint} estimation - client's available incoming bitrate estimated
216
+ * by the server. It's measured in bits per second.
217
+ */
218
+ bandwidthEstimationChanged: (estimation: bigint) => void;
219
+ /**
220
+ * Emitted each time track encoding has been disabled.
221
+ */
222
+ trackEncodingDisabled: (context: TrackContext<EndpointMetadata, TrackMetadata>, encoding: string) => void;
223
+ /**
224
+ * Emitted each time track encoding has been enabled.
225
+ */
226
+ trackEncodingEnabled: (context: TrackContext<EndpointMetadata, TrackMetadata>, encoding: string) => void;
227
+ targetTrackEncodingRequested: (event: {
228
+ trackId: string;
229
+ variant: Encoding;
230
+ }) => void;
231
+ disconnectRequested: (event: any) => void;
232
+ localTrackAdded: (event: {
233
+ trackId: string;
234
+ track: MediaStreamTrack;
235
+ stream: MediaStream;
236
+ trackMetadata?: TrackMetadata;
237
+ simulcastConfig: SimulcastConfig;
238
+ maxBandwidth: TrackBandwidthLimit;
239
+ }) => void;
240
+ localTrackRemoved: (event: {
241
+ trackId: string;
242
+ }) => void;
243
+ localTrackReplaced: (event: {
244
+ trackId: string;
245
+ track: MediaStreamTrack | null;
246
+ metadata?: TrackMetadata;
247
+ }) => void;
248
+ localTrackMuted: (event: {
249
+ trackId: string;
250
+ }) => void;
251
+ localTrackUnmuted: (event: {
252
+ trackId: string;
253
+ }) => void;
254
+ localTrackBandwidthSet: (event: {
255
+ trackId: string;
256
+ bandwidth: BandwidthLimit;
257
+ }) => void;
258
+ localTrackEncodingBandwidthSet: (event: {
259
+ trackId: string;
260
+ rid: string;
261
+ bandwidth: BandwidthLimit;
262
+ }) => void;
263
+ localTrackEncodingEnabled: (event: {
264
+ trackId: string;
265
+ encoding: Encoding;
266
+ }) => void;
267
+ localTrackEncodingDisabled: (event: {
268
+ trackId: string;
269
+ encoding: Encoding;
270
+ }) => void;
271
+ localEndpointMetadataChanged: (event: {
272
+ metadata: EndpointMetadata;
273
+ }) => void;
274
+ localTrackMetadataChanged: (event: {
275
+ trackId: string;
276
+ metadata: TrackMetadata;
277
+ }) => void;
278
+ }
279
+ export type Config<EndpointMetadata, TrackMetadata> = {
280
+ endpointMetadataParser?: MetadataParser<EndpointMetadata>;
281
+ trackMetadataParser?: MetadataParser<TrackMetadata>;
282
+ };
283
+ /**
284
+ * Interface describing Endpoint.
285
+ */
286
+ export interface Endpoint<EndpointMetadata, TrackMetadata> {
287
+ /**
288
+ * Endpoint's id. It is assigned by user in custom logic that use backend API.
289
+ */
290
+ id: string;
291
+ /**
292
+ * Type of the endpoint, e.g. "webrtc", "hls" or "rtsp".
293
+ */
294
+ type: string;
295
+ /**
296
+ * Any information that was provided in {@link WebRTCEndpoint.connect}.
297
+ */
298
+ metadata?: EndpointMetadata;
299
+ rawMetadata: any;
300
+ metadataParsingError?: any;
301
+ /**
302
+ * List of tracks that are sent by the endpoint.
303
+ */
304
+ tracks: Map<string, TrackContext<EndpointMetadata, TrackMetadata>>;
305
+ }
306
+ export {};
@@ -0,0 +1,2 @@
1
+ const trackEncodings = ['l', 'm', 'h'];
2
+ export const isEncoding = (encoding) => trackEncodings.includes(encoding);
@@ -0,0 +1,2 @@
1
+ import type { VadStatus } from './types';
2
+ export declare const isVadStatus: (status: string) => status is VadStatus;
@@ -0,0 +1,2 @@
1
+ const vadStatuses = ['speech', 'silence'];
2
+ export const isVadStatus = (status) => vadStatuses.includes(status);