livekit-client 1.9.6 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/livekit-client.esm.mjs +1318 -885
- package/dist/livekit-client.esm.mjs.map +1 -1
- package/dist/livekit-client.umd.js +1 -1
- package/dist/livekit-client.umd.js.map +1 -1
- package/dist/src/api/SignalClient.d.ts +2 -1
- package/dist/src/api/SignalClient.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/proto/livekit_models.d.ts +108 -10
- package/dist/src/proto/livekit_models.d.ts.map +1 -1
- package/dist/src/proto/livekit_rtc.d.ts +513 -194
- package/dist/src/proto/livekit_rtc.d.ts.map +1 -1
- package/dist/src/room/Room.d.ts +3 -2
- package/dist/src/room/Room.d.ts.map +1 -1
- package/dist/src/room/events.d.ts +5 -1
- package/dist/src/room/events.d.ts.map +1 -1
- package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
- package/dist/src/room/participant/Participant.d.ts +2 -2
- package/dist/src/room/participant/Participant.d.ts.map +1 -1
- package/dist/src/room/participant/RemoteParticipant.d.ts.map +1 -1
- package/dist/src/room/participant/publishUtils.d.ts +8 -0
- package/dist/src/room/participant/publishUtils.d.ts.map +1 -1
- package/dist/src/room/track/LocalTrack.d.ts +32 -0
- package/dist/src/room/track/LocalTrack.d.ts.map +1 -1
- package/dist/src/room/track/LocalVideoTrack.d.ts.map +1 -1
- package/dist/src/room/track/RemoteTrackPublication.d.ts +4 -1
- package/dist/src/room/track/RemoteTrackPublication.d.ts.map +1 -1
- package/dist/src/room/track/TrackPublication.d.ts +2 -1
- package/dist/src/room/track/TrackPublication.d.ts.map +1 -1
- package/dist/src/room/track/options.d.ts +1 -1
- package/dist/src/room/track/options.d.ts.map +1 -1
- package/dist/src/room/track/processor/types.d.ts +19 -0
- package/dist/src/room/track/processor/types.d.ts.map +1 -0
- package/dist/src/utils/browserParser.d.ts.map +1 -1
- package/dist/ts4.2/src/api/SignalClient.d.ts +2 -1
- package/dist/ts4.2/src/index.d.ts +1 -0
- package/dist/ts4.2/src/proto/livekit_models.d.ts +126 -12
- package/dist/ts4.2/src/proto/livekit_rtc.d.ts +617 -254
- package/dist/ts4.2/src/room/Room.d.ts +3 -2
- package/dist/ts4.2/src/room/events.d.ts +5 -1
- package/dist/ts4.2/src/room/participant/Participant.d.ts +2 -2
- package/dist/ts4.2/src/room/participant/publishUtils.d.ts +8 -0
- package/dist/ts4.2/src/room/track/LocalTrack.d.ts +32 -0
- package/dist/ts4.2/src/room/track/RemoteTrackPublication.d.ts +4 -1
- package/dist/ts4.2/src/room/track/TrackPublication.d.ts +2 -1
- package/dist/ts4.2/src/room/track/options.d.ts +1 -1
- package/dist/ts4.2/src/room/track/processor/types.d.ts +19 -0
- package/package.json +14 -13
- package/src/api/SignalClient.ts +8 -1
- package/src/index.ts +1 -0
- package/src/proto/google/protobuf/timestamp.ts +3 -3
- package/src/proto/livekit_models.ts +254 -161
- package/src/proto/livekit_rtc.ts +334 -180
- package/src/room/Room.ts +26 -1
- package/src/room/events.ts +4 -0
- package/src/room/participant/LocalParticipant.ts +23 -3
- package/src/room/participant/Participant.ts +2 -1
- package/src/room/participant/RemoteParticipant.ts +4 -1
- package/src/room/participant/publishUtils.ts +68 -12
- package/src/room/track/LocalTrack.ts +120 -16
- package/src/room/track/LocalVideoTrack.ts +96 -33
- package/src/room/track/RemoteTrackPublication.ts +8 -1
- package/src/room/track/Track.ts +3 -3
- package/src/room/track/TrackPublication.ts +2 -1
- package/src/room/track/options.ts +1 -1
- package/src/room/track/processor/types.ts +20 -0
- package/src/utils/browserParser.ts +1 -4
@@ -1,7 +1,7 @@
|
|
1
1
|
import type TypedEmitter from 'typed-emitter';
|
2
2
|
import 'webrtc-adapter';
|
3
3
|
import type { InternalRoomOptions, RoomConnectOptions, RoomOptions } from '../options';
|
4
|
-
import { DataPacket_Kind, DisconnectReason, ParticipantPermission } from '../proto/livekit_models';
|
4
|
+
import { DataPacket_Kind, DisconnectReason, ParticipantPermission, SubscriptionError } from '../proto/livekit_models';
|
5
5
|
import RTCEngine from './RTCEngine';
|
6
6
|
import LocalParticipant from './participant/LocalParticipant';
|
7
7
|
import type Participant from './participant/Participant';
|
@@ -157,6 +157,7 @@ declare class Room extends Room_base {
|
|
157
157
|
private handleSpeakersChanged;
|
158
158
|
private handleStreamStateUpdate;
|
159
159
|
private handleSubscriptionPermissionUpdate;
|
160
|
+
private handleSubscriptionError;
|
160
161
|
private handleDataPacket;
|
161
162
|
private handleAudioPlaybackStarted;
|
162
163
|
private handleAudioPlaybackFailed;
|
@@ -207,7 +208,7 @@ export type RoomEventCallbacks = {
|
|
207
208
|
participantDisconnected: (participant: RemoteParticipant) => void;
|
208
209
|
trackPublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void;
|
209
210
|
trackSubscribed: (track: RemoteTrack, publication: RemoteTrackPublication, participant: RemoteParticipant) => void;
|
210
|
-
trackSubscriptionFailed: (trackSid: string, participant: RemoteParticipant) => void;
|
211
|
+
trackSubscriptionFailed: (trackSid: string, participant: RemoteParticipant, reason?: SubscriptionError) => void;
|
211
212
|
trackUnpublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void;
|
212
213
|
trackUnsubscribed: (track: RemoteTrack, publication: RemoteTrackPublication, participant: RemoteParticipant) => void;
|
213
214
|
trackMuted: (publication: TrackPublication, participant: Participant) => void;
|
@@ -451,6 +451,10 @@ export declare enum TrackEvent {
|
|
451
451
|
/**
|
452
452
|
* Fires on RemoteTrackPublication
|
453
453
|
*/
|
454
|
-
SubscriptionStatusChanged = "subscriptionStatusChanged"
|
454
|
+
SubscriptionStatusChanged = "subscriptionStatusChanged",
|
455
|
+
/**
|
456
|
+
* Fires on RemoteTrackPublication
|
457
|
+
*/
|
458
|
+
SubscriptionFailed = "subscriptionFailed"
|
455
459
|
}
|
456
460
|
//# sourceMappingURL=events.d.ts.map
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import type TypedEmitter from 'typed-emitter';
|
2
|
-
import { DataPacket_Kind, ParticipantInfo, ParticipantPermission, ConnectionQuality as ProtoQuality } from '../../proto/livekit_models';
|
2
|
+
import { DataPacket_Kind, ParticipantInfo, ParticipantPermission, ConnectionQuality as ProtoQuality, SubscriptionError } from '../../proto/livekit_models';
|
3
3
|
import type LocalTrackPublication from '../track/LocalTrackPublication';
|
4
4
|
import type RemoteTrack from '../track/RemoteTrack';
|
5
5
|
import type RemoteTrackPublication from '../track/RemoteTrackPublication';
|
@@ -72,7 +72,7 @@ export default class Participant extends Participant_base {
|
|
72
72
|
export type ParticipantEventCallbacks = {
|
73
73
|
trackPublished: (publication: RemoteTrackPublication) => void;
|
74
74
|
trackSubscribed: (track: RemoteTrack, publication: RemoteTrackPublication) => void;
|
75
|
-
trackSubscriptionFailed: (trackSid: string) => void;
|
75
|
+
trackSubscriptionFailed: (trackSid: string, reason?: SubscriptionError) => void;
|
76
76
|
trackUnpublished: (publication: RemoteTrackPublication) => void;
|
77
77
|
trackUnsubscribed: (track: RemoteTrack, publication: RemoteTrackPublication) => void;
|
78
78
|
trackMuted: (publication: TrackPublication) => void;
|
@@ -17,4 +17,12 @@ export declare function presetsForResolution(isScreenShare: boolean, width: numb
|
|
17
17
|
export declare function defaultSimulcastLayers(isScreenShare: boolean, original: VideoPreset): VideoPreset[];
|
18
18
|
/** @internal */
|
19
19
|
export declare function sortPresets(presets: Array<VideoPreset> | undefined): VideoPreset[] | undefined;
|
20
|
+
/** @internal */
|
21
|
+
export declare class ScalabilityMode {
|
22
|
+
spatial: number;
|
23
|
+
temporal: number;
|
24
|
+
suffix: undefined | 'h' | '_KEY' | '_KEY_SHIFT';
|
25
|
+
constructor(scalabilityMode: string);
|
26
|
+
toString(): string;
|
27
|
+
}
|
20
28
|
//# sourceMappingURL=publishUtils.d.ts.map
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { Mutex } from '../utils';
|
2
2
|
import { Track } from './Track';
|
3
3
|
import type { VideoCodec } from './options';
|
4
|
+
import type { TrackProcessor } from './processor/types';
|
4
5
|
export default abstract class LocalTrack extends Track {
|
5
6
|
/** @internal */
|
6
7
|
sender?: RTCRtpSender;
|
@@ -11,6 +12,9 @@ export default abstract class LocalTrack extends Track {
|
|
11
12
|
protected providedByUser: boolean;
|
12
13
|
protected muteLock: Mutex;
|
13
14
|
protected pauseUpstreamLock: Mutex;
|
15
|
+
protected processorElement?: HTMLMediaElement;
|
16
|
+
protected processor?: TrackProcessor<typeof this.kind>;
|
17
|
+
protected isSettingUpProcessor: boolean;
|
14
18
|
/**
|
15
19
|
*
|
16
20
|
* @param mediaTrack
|
@@ -24,6 +28,7 @@ export default abstract class LocalTrack extends Track {
|
|
24
28
|
private _isUpstreamPaused;
|
25
29
|
get isUpstreamPaused(): boolean;
|
26
30
|
get isUserProvided(): boolean;
|
31
|
+
get mediaStreamTrack(): MediaStreamTrack;
|
27
32
|
waitForDimensions(timeout?: number): Promise<Track.Dimensions>;
|
28
33
|
/**
|
29
34
|
* @returns DeviceID of the device that is currently being used for this track
|
@@ -37,8 +42,35 @@ export default abstract class LocalTrack extends Track {
|
|
37
42
|
protected get needsReAcquisition(): boolean;
|
38
43
|
protected handleAppVisibilityChanged(): Promise<void>;
|
39
44
|
private handleEnded;
|
45
|
+
stop(): void;
|
46
|
+
/**
|
47
|
+
* pauses publishing to the server without disabling the local MediaStreamTrack
|
48
|
+
* this is used to display a user's own video locally while pausing publishing to
|
49
|
+
* the server.
|
50
|
+
* this API is unsupported on Safari < 12 due to a bug
|
51
|
+
**/
|
40
52
|
pauseUpstream(): Promise<void>;
|
41
53
|
resumeUpstream(): Promise<void>;
|
54
|
+
/**
|
55
|
+
* Sets a processor on this track.
|
56
|
+
* See https://github.com/livekit/track-processors-js for example usage
|
57
|
+
*
|
58
|
+
* @experimental
|
59
|
+
*
|
60
|
+
* @param processor
|
61
|
+
* @param showProcessedStreamLocally
|
62
|
+
* @returns
|
63
|
+
*/
|
64
|
+
setProcessor(processor: TrackProcessor<typeof this.kind>, showProcessedStreamLocally?: boolean): Promise<void>;
|
65
|
+
getProcessor(): TrackProcessor<Track.Kind> | undefined;
|
66
|
+
/**
|
67
|
+
* Stops the track processor
|
68
|
+
* See https://github.com/livekit/track-processors-js for example usage
|
69
|
+
*
|
70
|
+
* @experimental
|
71
|
+
* @returns
|
72
|
+
*/
|
73
|
+
stopProcessor(): Promise<void>;
|
42
74
|
protected abstract monitorSender(): void;
|
43
75
|
}
|
44
76
|
//# sourceMappingURL=LocalTrack.d.ts.map
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { TrackInfo, VideoQuality } from '../../proto/livekit_models';
|
1
|
+
import { SubscriptionError, TrackInfo, VideoQuality } from '../../proto/livekit_models';
|
2
2
|
import type RemoteTrack from './RemoteTrack';
|
3
3
|
import { Track } from './Track';
|
4
4
|
import { TrackPublication } from './TrackPublication';
|
@@ -11,6 +11,7 @@ export default class RemoteTrackPublication extends TrackPublication {
|
|
11
11
|
protected currentVideoQuality?: VideoQuality;
|
12
12
|
protected videoDimensions?: Track.Dimensions;
|
13
13
|
protected fps?: number;
|
14
|
+
protected subscriptionError?: SubscriptionError;
|
14
15
|
constructor(kind: Track.Kind, ti: TrackInfo, autoSubscribe: boolean | undefined);
|
15
16
|
/**
|
16
17
|
* Subscribe or unsubscribe to this remote track
|
@@ -48,6 +49,8 @@ export default class RemoteTrackPublication extends TrackPublication {
|
|
48
49
|
/** @internal */
|
49
50
|
setAllowed(allowed: boolean): void;
|
50
51
|
/** @internal */
|
52
|
+
setSubscriptionError(error: SubscriptionError): void;
|
53
|
+
/** @internal */
|
51
54
|
updateInfo(info: TrackInfo): void;
|
52
55
|
private emitSubscriptionUpdateIfChanged;
|
53
56
|
private emitPermissionUpdateIfChanged;
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import type TypedEventEmitter from 'typed-emitter';
|
2
|
-
import type { TrackInfo } from '../../proto/livekit_models';
|
2
|
+
import type { SubscriptionError, TrackInfo } from '../../proto/livekit_models';
|
3
3
|
import type { UpdateSubscription, UpdateTrackSettings } from '../../proto/livekit_rtc';
|
4
4
|
import LocalAudioTrack from './LocalAudioTrack';
|
5
5
|
import LocalVideoTrack from './LocalVideoTrack';
|
@@ -63,6 +63,7 @@ export type PublicationEventCallbacks = {
|
|
63
63
|
subscribed: (track: RemoteTrack) => void;
|
64
64
|
unsubscribed: (track: RemoteTrack) => void;
|
65
65
|
subscriptionStatusChanged: (status: TrackPublication.SubscriptionStatus, prevStatus: TrackPublication.SubscriptionStatus) => void;
|
66
|
+
subscriptionFailed: (error: SubscriptionError) => void;
|
66
67
|
};
|
67
68
|
export {};
|
68
69
|
//# sourceMappingURL=TrackPublication.d.ts.map
|
@@ -216,7 +216,7 @@ export declare function isCodecEqual(c1: string | undefined, c2: string | undefi
|
|
216
216
|
/**
|
217
217
|
* scalability modes for svc, only supprot l3t3 now.
|
218
218
|
*/
|
219
|
-
export type ScalabilityMode = 'L3T3';
|
219
|
+
export type ScalabilityMode = 'L3T3' | 'L3T3_KEY';
|
220
220
|
export declare namespace AudioPresets {
|
221
221
|
const telephone: AudioPreset;
|
222
222
|
const speech: AudioPreset;
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import type { Track } from '../Track';
|
2
|
+
/**
|
3
|
+
* @experimental
|
4
|
+
*/
|
5
|
+
export type ProcessorOptions<T extends Track.Kind> = {
|
6
|
+
kind: T;
|
7
|
+
track: MediaStreamTrack;
|
8
|
+
element?: HTMLMediaElement;
|
9
|
+
};
|
10
|
+
/**
|
11
|
+
* @experimental
|
12
|
+
*/
|
13
|
+
export interface TrackProcessor<T extends Track.Kind> {
|
14
|
+
name: string;
|
15
|
+
init: (opts: ProcessorOptions<T>) => void;
|
16
|
+
destroy: () => Promise<void>;
|
17
|
+
processedTrack?: MediaStreamTrack;
|
18
|
+
}
|
19
|
+
//# sourceMappingURL=types.d.ts.map
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "livekit-client",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.10.0",
|
4
4
|
"description": "JavaScript/TypeScript client SDK for LiveKit",
|
5
5
|
"main": "./dist/livekit-client.umd.js",
|
6
6
|
"unpkg": "./dist/livekit-client.umd.js",
|
@@ -51,43 +51,44 @@
|
|
51
51
|
"webrtc-adapter": "^8.1.1"
|
52
52
|
},
|
53
53
|
"devDependencies": {
|
54
|
-
"@babel/core": "7.
|
55
|
-
"@babel/preset-env": "7.
|
54
|
+
"@babel/core": "7.22.1",
|
55
|
+
"@babel/preset-env": "7.22.4",
|
56
56
|
"@changesets/cli": "2.26.1",
|
57
57
|
"@livekit/changesets-changelog-github": "^0.0.4",
|
58
58
|
"@rollup/plugin-babel": "6.0.3",
|
59
59
|
"@rollup/plugin-commonjs": "24.1.0",
|
60
60
|
"@rollup/plugin-json": "6.0.0",
|
61
|
-
"@rollup/plugin-node-resolve": "15.0
|
61
|
+
"@rollup/plugin-node-resolve": "15.1.0",
|
62
62
|
"@rollup/plugin-terser": "^0.4.0",
|
63
63
|
"@size-limit/file": "^8.2.4",
|
64
64
|
"@size-limit/webpack": "^8.2.4",
|
65
65
|
"@trivago/prettier-plugin-sort-imports": "^4.1.1",
|
66
66
|
"@types/events": "^3.0.0",
|
67
|
-
"@types/jest": "29.5.
|
67
|
+
"@types/jest": "29.5.2",
|
68
68
|
"@types/sdp-transform": "2.4.6",
|
69
69
|
"@types/ua-parser-js": "0.7.36",
|
70
|
-
"@typescript-eslint/eslint-plugin": "5.59.
|
71
|
-
"@typescript-eslint/parser": "5.59.
|
70
|
+
"@typescript-eslint/eslint-plugin": "5.59.8",
|
71
|
+
"@typescript-eslint/parser": "5.59.8",
|
72
72
|
"downlevel-dts": "^0.11.0",
|
73
|
-
"eslint": "8.
|
73
|
+
"eslint": "8.42.0",
|
74
74
|
"eslint-config-airbnb-typescript": "17.0.0",
|
75
75
|
"eslint-config-prettier": "8.8.0",
|
76
76
|
"eslint-plugin-ecmascript-compat": "^3.0.0",
|
77
77
|
"eslint-plugin-import": "2.27.5",
|
78
78
|
"gh-pages": "5.0.0",
|
79
79
|
"jest": "29.5.0",
|
80
|
+
"jest-environment-jsdom": "^29.5.0",
|
80
81
|
"prettier": "^2.8.8",
|
81
|
-
"rollup": "3.
|
82
|
+
"rollup": "3.23.1",
|
82
83
|
"rollup-plugin-delete": "^2.0.0",
|
83
84
|
"rollup-plugin-re": "1.0.7",
|
84
85
|
"rollup-plugin-typescript2": "0.34.1",
|
85
86
|
"size-limit": "^8.2.4",
|
86
87
|
"ts-jest": "29.1.0",
|
87
|
-
"ts-proto": "1.
|
88
|
-
"typedoc": "0.24.
|
88
|
+
"ts-proto": "1.148.2",
|
89
|
+
"typedoc": "0.24.8",
|
89
90
|
"typedoc-plugin-no-inherit": "1.4.0",
|
90
|
-
"typescript": "5.
|
91
|
-
"vite": "4.3.
|
91
|
+
"typescript": "5.1.3",
|
92
|
+
"vite": "4.3.9"
|
92
93
|
}
|
93
94
|
}
|
package/src/api/SignalClient.ts
CHANGED
@@ -22,6 +22,7 @@ import {
|
|
22
22
|
StreamStateUpdate,
|
23
23
|
SubscribedQualityUpdate,
|
24
24
|
SubscriptionPermissionUpdate,
|
25
|
+
SubscriptionResponse,
|
25
26
|
SyncState,
|
26
27
|
TrackPermission,
|
27
28
|
TrackPublishedResponse,
|
@@ -127,6 +128,8 @@ export class SignalClient {
|
|
127
128
|
|
128
129
|
onSubscriptionPermissionUpdate?: (update: SubscriptionPermissionUpdate) => void;
|
129
130
|
|
131
|
+
onSubscriptionError?: (update: SubscriptionResponse) => void;
|
132
|
+
|
130
133
|
onLocalTrackUnpublished?: (res: TrackUnpublishedResponse) => void;
|
131
134
|
|
132
135
|
onTokenRefresh?: (token: string) => void;
|
@@ -214,7 +217,7 @@ export class SignalClient {
|
|
214
217
|
|
215
218
|
return new Promise<JoinResponse | ReconnectResponse | void>(async (resolve, reject) => {
|
216
219
|
const abortHandler = async () => {
|
217
|
-
|
220
|
+
this.close();
|
218
221
|
reject(new ConnectionError('room connection has been cancelled (signal)'));
|
219
222
|
};
|
220
223
|
|
@@ -593,6 +596,10 @@ export class SignalClient {
|
|
593
596
|
if (this.onLocalTrackUnpublished) {
|
594
597
|
this.onLocalTrackUnpublished(msg.trackUnpublished);
|
595
598
|
}
|
599
|
+
} else if (msg.$case === 'subscriptionResponse') {
|
600
|
+
if (this.onSubscriptionError) {
|
601
|
+
this.onSubscriptionError(msg.subscriptionResponse);
|
602
|
+
}
|
596
603
|
} else if (msg.$case === 'pong') {
|
597
604
|
this.resetPingTimeout();
|
598
605
|
} else if (msg.$case === 'pongResp') {
|
package/src/index.ts
CHANGED
@@ -40,6 +40,7 @@ export * from './room/track/options';
|
|
40
40
|
export * from './room/track/types';
|
41
41
|
export type { DataPublishOptions, SimulationScenario } from './room/types';
|
42
42
|
export * from './version';
|
43
|
+
export * from './room/track/processor/types';
|
43
44
|
export {
|
44
45
|
setLogLevel,
|
45
46
|
setLogExtension,
|
@@ -134,21 +134,21 @@ export const Timestamp = {
|
|
134
134
|
const tag = reader.uint32();
|
135
135
|
switch (tag >>> 3) {
|
136
136
|
case 1:
|
137
|
-
if (tag
|
137
|
+
if (tag !== 8) {
|
138
138
|
break;
|
139
139
|
}
|
140
140
|
|
141
141
|
message.seconds = longToNumber(reader.int64() as Long);
|
142
142
|
continue;
|
143
143
|
case 2:
|
144
|
-
if (tag
|
144
|
+
if (tag !== 16) {
|
145
145
|
break;
|
146
146
|
}
|
147
147
|
|
148
148
|
message.nanos = reader.int32();
|
149
149
|
continue;
|
150
150
|
}
|
151
|
-
if ((tag & 7)
|
151
|
+
if ((tag & 7) === 4 || tag === 0) {
|
152
152
|
break;
|
153
153
|
}
|
154
154
|
reader.skipType(tag & 7);
|