livekit-client 2.15.7 → 2.15.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/livekit-client.e2ee.worker.js +1 -1
- package/dist/livekit-client.e2ee.worker.js.map +1 -1
- package/dist/livekit-client.e2ee.worker.mjs +253 -118
- package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
- package/dist/livekit-client.esm.mjs +2442 -323
- 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 +31 -2
- package/dist/src/api/SignalClient.d.ts.map +1 -1
- package/dist/src/api/WebSocketStream.d.ts +29 -0
- package/dist/src/api/WebSocketStream.d.ts.map +1 -0
- package/dist/src/api/utils.d.ts +2 -0
- package/dist/src/api/utils.d.ts.map +1 -1
- package/dist/src/connectionHelper/checks/publishVideo.d.ts.map +1 -1
- package/dist/src/connectionHelper/checks/turn.d.ts.map +1 -1
- package/dist/src/connectionHelper/checks/websocket.d.ts.map +1 -1
- package/dist/src/e2ee/E2eeManager.d.ts +16 -2
- package/dist/src/e2ee/E2eeManager.d.ts.map +1 -1
- package/dist/src/e2ee/types.d.ts +35 -1
- package/dist/src/e2ee/types.d.ts.map +1 -1
- package/dist/src/e2ee/utils.d.ts +2 -0
- package/dist/src/e2ee/utils.d.ts.map +1 -1
- package/dist/src/e2ee/worker/DataCryptor.d.ts +15 -0
- package/dist/src/e2ee/worker/DataCryptor.d.ts.map +1 -0
- package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts +3 -2
- package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts.map +1 -1
- package/dist/src/e2ee/worker/sifPayload.d.ts +6 -6
- package/dist/src/e2ee/worker/sifPayload.d.ts.map +1 -1
- package/dist/src/index.d.ts +5 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/logger.d.ts +1 -0
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/options.d.ts +10 -2
- package/dist/src/options.d.ts.map +1 -1
- package/dist/src/room/PCTransport.d.ts +1 -0
- package/dist/src/room/PCTransport.d.ts.map +1 -1
- package/dist/src/room/PCTransportManager.d.ts +6 -4
- package/dist/src/room/PCTransportManager.d.ts.map +1 -1
- package/dist/src/room/RTCEngine.d.ts +6 -3
- package/dist/src/room/RTCEngine.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/data-stream/incoming/IncomingDataStreamManager.d.ts +2 -2
- package/dist/src/room/data-stream/incoming/IncomingDataStreamManager.d.ts.map +1 -1
- package/dist/src/room/data-stream/outgoing/OutgoingDataStreamManager.d.ts.map +1 -1
- package/dist/src/room/defaults.d.ts.map +1 -1
- package/dist/src/room/errors.d.ts +2 -1
- package/dist/src/room/errors.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/token-source/TokenSource.d.ts +70 -0
- package/dist/src/room/token-source/TokenSource.d.ts.map +1 -0
- package/dist/src/room/token-source/types.d.ts +68 -0
- package/dist/src/room/token-source/types.d.ts.map +1 -0
- package/dist/src/room/token-source/utils.d.ts +5 -0
- package/dist/src/room/token-source/utils.d.ts.map +1 -0
- package/dist/src/room/track/LocalTrack.d.ts +1 -1
- package/dist/src/room/track/LocalTrack.d.ts.map +1 -1
- package/dist/src/room/track/options.d.ts +7 -3
- package/dist/src/room/track/options.d.ts.map +1 -1
- package/dist/src/room/track/utils.d.ts.map +1 -1
- package/dist/src/room/types.d.ts +1 -0
- package/dist/src/room/types.d.ts.map +1 -1
- package/dist/src/room/utils.d.ts +8 -1
- package/dist/src/room/utils.d.ts.map +1 -1
- package/dist/src/utils/camelToSnakeCase.d.ts +8 -0
- package/dist/src/utils/camelToSnakeCase.d.ts.map +1 -0
- package/dist/ts4.2/{src/api → api}/SignalClient.d.ts +31 -2
- package/dist/ts4.2/api/WebSocketStream.d.ts +29 -0
- package/dist/ts4.2/{src/api → api}/utils.d.ts +2 -0
- package/dist/ts4.2/{src/e2ee → e2ee}/E2eeManager.d.ts +16 -2
- package/dist/ts4.2/{src/e2ee → e2ee}/types.d.ts +35 -1
- package/dist/ts4.2/{src/e2ee → e2ee}/utils.d.ts +3 -0
- package/dist/ts4.2/e2ee/worker/DataCryptor.d.ts +15 -0
- package/dist/ts4.2/{src/e2ee → e2ee}/worker/ParticipantKeyHandler.d.ts +3 -2
- package/dist/ts4.2/{src/e2ee → e2ee}/worker/sifPayload.d.ts +6 -6
- package/dist/ts4.2/{src/index.d.ts → index.d.ts} +5 -3
- package/dist/ts4.2/{src/logger.d.ts → logger.d.ts} +1 -0
- package/dist/ts4.2/{src/options.d.ts → options.d.ts} +10 -2
- package/dist/ts4.2/{src/room → room}/PCTransport.d.ts +1 -0
- package/dist/ts4.2/{src/room → room}/PCTransportManager.d.ts +6 -4
- package/dist/ts4.2/{src/room → room}/RTCEngine.d.ts +6 -3
- package/dist/ts4.2/{src/room → room}/Room.d.ts +3 -2
- package/dist/ts4.2/{src/room → room}/data-stream/incoming/IncomingDataStreamManager.d.ts +2 -1
- package/dist/ts4.2/{src/room → room}/errors.d.ts +2 -1
- package/dist/ts4.2/{src/room → room}/participant/Participant.d.ts +2 -2
- package/dist/ts4.2/room/token-source/TokenSource.d.ts +71 -0
- package/dist/ts4.2/room/token-source/types.d.ts +68 -0
- package/dist/ts4.2/room/token-source/utils.d.ts +5 -0
- package/dist/ts4.2/{src/room → room}/track/LocalTrack.d.ts +1 -1
- package/dist/ts4.2/{src/room → room}/track/options.d.ts +10 -3
- package/dist/ts4.2/{src/room → room}/types.d.ts +1 -0
- package/dist/ts4.2/{src/room → room}/utils.d.ts +8 -1
- package/dist/ts4.2/utils/camelToSnakeCase.d.ts +8 -0
- package/package.json +11 -10
- package/src/api/SignalClient.test.ts +688 -0
- package/src/api/SignalClient.ts +308 -161
- package/src/api/WebSocketStream.test.ts +625 -0
- package/src/api/WebSocketStream.ts +118 -0
- package/src/api/utils.ts +10 -0
- package/src/connectionHelper/checks/publishVideo.ts +5 -0
- package/src/connectionHelper/checks/turn.ts +1 -0
- package/src/connectionHelper/checks/webrtc.ts +1 -1
- package/src/connectionHelper/checks/websocket.ts +1 -0
- package/src/e2ee/E2eeManager.ts +94 -2
- package/src/e2ee/types.ts +44 -1
- package/src/e2ee/utils.ts +16 -0
- package/src/e2ee/worker/DataCryptor.test.ts +271 -0
- package/src/e2ee/worker/DataCryptor.ts +147 -0
- package/src/e2ee/worker/ParticipantKeyHandler.ts +4 -3
- package/src/e2ee/worker/e2ee.worker.ts +47 -0
- package/src/e2ee/worker/sifPayload.ts +10 -6
- package/src/index.ts +16 -1
- package/src/logger.ts +1 -0
- package/src/options.ts +15 -2
- package/src/room/PCTransport.ts +7 -3
- package/src/room/PCTransportManager.ts +39 -35
- package/src/room/RTCEngine.ts +109 -22
- package/src/room/Room.ts +43 -18
- package/src/room/data-stream/incoming/IncomingDataStreamManager.ts +64 -17
- package/src/room/data-stream/outgoing/OutgoingDataStreamManager.ts +7 -0
- package/src/room/defaults.ts +1 -0
- package/src/room/errors.ts +3 -0
- package/src/room/participant/LocalParticipant.ts +8 -6
- package/src/room/participant/Participant.ts +6 -1
- package/src/room/token-source/TokenSource.ts +285 -0
- package/src/room/token-source/types.ts +84 -0
- package/src/room/token-source/utils.test.ts +63 -0
- package/src/room/token-source/utils.ts +40 -0
- package/src/room/track/LocalAudioTrack.ts +1 -1
- package/src/room/track/LocalTrack.ts +1 -1
- package/src/room/track/options.ts +12 -4
- package/src/room/track/utils.ts +10 -2
- package/src/room/types.ts +1 -0
- package/src/room/utils.ts +37 -4
- package/src/utils/camelToSnakeCase.ts +16 -0
- /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/ConnectionCheck.d.ts +0 -0
- /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/Checker.d.ts +0 -0
- /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/cloudRegion.d.ts +0 -0
- /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/connectionProtocol.d.ts +0 -0
- /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/publishAudio.d.ts +0 -0
- /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/publishVideo.d.ts +0 -0
- /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/reconnect.d.ts +0 -0
- /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/turn.d.ts +0 -0
- /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/webrtc.d.ts +0 -0
- /package/dist/ts4.2/{src/connectionHelper → connectionHelper}/checks/websocket.d.ts +0 -0
- /package/dist/ts4.2/{src/e2ee → e2ee}/KeyProvider.d.ts +0 -0
- /package/dist/ts4.2/{src/e2ee → e2ee}/constants.d.ts +0 -0
- /package/dist/ts4.2/{src/e2ee → e2ee}/errors.d.ts +0 -0
- /package/dist/ts4.2/{src/e2ee → e2ee}/events.d.ts +0 -0
- /package/dist/ts4.2/{src/e2ee → e2ee}/index.d.ts +0 -0
- /package/dist/ts4.2/{src/e2ee → e2ee}/worker/FrameCryptor.d.ts +0 -0
- /package/dist/ts4.2/{src/e2ee → e2ee}/worker/e2ee.worker.d.ts +0 -0
- /package/dist/ts4.2/{src/e2ee → e2ee}/worker/naluUtils.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/DefaultReconnectPolicy.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/DeviceManager.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/ReconnectPolicy.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/RegionUrlProvider.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/attribute-typings.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/data-stream/incoming/StreamReader.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/data-stream/outgoing/OutgoingDataStreamManager.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/data-stream/outgoing/StreamWriter.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/defaults.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/events.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/participant/LocalParticipant.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/participant/ParticipantTrackPermission.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/participant/RemoteParticipant.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/participant/publishUtils.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/rpc.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/stats.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/timers.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/LocalAudioTrack.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/LocalTrackPublication.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/LocalVideoTrack.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/RemoteAudioTrack.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/RemoteTrack.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/RemoteTrackPublication.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/RemoteVideoTrack.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/Track.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/TrackPublication.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/create.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/facingMode.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/processor/types.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/record.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/types.d.ts +0 -0
- /package/dist/ts4.2/{src/room → room}/track/utils.d.ts +0 -0
- /package/dist/ts4.2/{src/test → test}/MockMediaStreamTrack.d.ts +0 -0
- /package/dist/ts4.2/{src/test → test}/mocks.d.ts +0 -0
- /package/dist/ts4.2/{src/utils → utils}/AsyncQueue.d.ts +0 -0
- /package/dist/ts4.2/{src/utils → utils}/browserParser.d.ts +0 -0
- /package/dist/ts4.2/{src/utils → utils}/cloneDeep.d.ts +0 -0
- /package/dist/ts4.2/{src/utils → utils}/dataPacketBuffer.d.ts +0 -0
- /package/dist/ts4.2/{src/utils → utils}/ttlmap.d.ts +0 -0
- /package/dist/ts4.2/{src/version.d.ts → version.d.ts} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { AddTrackRequest, AudioTrackFeature, ConnectionQualityUpdate, JoinResponse, LeaveRequest, ParticipantInfo, ReconnectReason, ReconnectResponse, RequestResponse, Room, RoomMovedResponse, SessionDescription, SignalRequest, SignalTarget, SimulateScenario, SpeakerInfo, StreamStateUpdate, SubscribedQualityUpdate, SubscriptionPermissionUpdate, SubscriptionResponse, SyncState, TrackPermission, TrackPublishedResponse, TrackUnpublishedResponse, UpdateSubscription, UpdateTrackSettings, VideoLayer } from '@livekit/protocol';
|
|
1
|
+
import { AddTrackRequest, AudioTrackFeature, ConnectionQualityUpdate, JoinResponse, LeaveRequest, MediaSectionsRequirement, ParticipantInfo, ReconnectReason, ReconnectResponse, RequestResponse, Room, RoomMovedResponse, SessionDescription, SignalRequest, SignalResponse, SignalTarget, SimulateScenario, SpeakerInfo, StreamStateUpdate, SubscribedQualityUpdate, SubscriptionPermissionUpdate, SubscriptionResponse, SyncState, TrackPermission, TrackPublishedResponse, TrackUnpublishedResponse, UpdateSubscription, UpdateTrackSettings, VideoLayer } from '@livekit/protocol';
|
|
2
2
|
import type { LoggerOptions } from '../room/types';
|
|
3
3
|
import { AsyncQueue } from '../utils/AsyncQueue';
|
|
4
|
+
import { WebSocketStream } from './WebSocketStream';
|
|
4
5
|
interface ConnectOpts extends SignalOptions {
|
|
5
6
|
/** internal */
|
|
6
7
|
reconnect?: boolean;
|
|
@@ -15,6 +16,7 @@ export interface SignalOptions {
|
|
|
15
16
|
maxRetries: number;
|
|
16
17
|
e2eeEnabled: boolean;
|
|
17
18
|
websocketTimeout: number;
|
|
19
|
+
singlePeerConnection: boolean;
|
|
18
20
|
}
|
|
19
21
|
type SignalMessage = SignalRequest['message'];
|
|
20
22
|
export declare enum SignalConnectionState {
|
|
@@ -54,8 +56,9 @@ export declare class SignalClient {
|
|
|
54
56
|
onRequestResponse?: (response: RequestResponse) => void;
|
|
55
57
|
onLocalTrackSubscribed?: (trackSid: string) => void;
|
|
56
58
|
onRoomMoved?: (res: RoomMovedResponse) => void;
|
|
59
|
+
onMediaSectionsRequirement?: (requirement: MediaSectionsRequirement) => void;
|
|
57
60
|
connectOptions?: ConnectOpts;
|
|
58
|
-
ws?:
|
|
61
|
+
ws?: WebSocketStream;
|
|
59
62
|
get currentState(): SignalConnectionState;
|
|
60
63
|
get isDisconnected(): boolean;
|
|
61
64
|
private get isEstablishingConnection();
|
|
@@ -71,11 +74,13 @@ export declare class SignalClient {
|
|
|
71
74
|
private log;
|
|
72
75
|
private loggerContextCb?;
|
|
73
76
|
private _requestId;
|
|
77
|
+
private streamWriter;
|
|
74
78
|
constructor(useJSON?: boolean, loggerOptions?: LoggerOptions);
|
|
75
79
|
private get logContext();
|
|
76
80
|
join(url: string, token: string, opts: SignalOptions, abortSignal?: AbortSignal): Promise<JoinResponse>;
|
|
77
81
|
reconnect(url: string, token: string, sid?: string, reason?: ReconnectReason): Promise<ReconnectResponse | undefined>;
|
|
78
82
|
private connect;
|
|
83
|
+
startReadingLoop(signalReader: ReadableStreamDefaultReader<string | ArrayBuffer>, firstMessage?: SignalResponse): Promise<void>;
|
|
79
84
|
/** @internal */
|
|
80
85
|
resetCallbacks: () => void;
|
|
81
86
|
close(updateState?: boolean): Promise<void>;
|
|
@@ -113,6 +118,30 @@ export declare class SignalClient {
|
|
|
113
118
|
private clearPingTimeout;
|
|
114
119
|
private startPingInterval;
|
|
115
120
|
private clearPingInterval;
|
|
121
|
+
/**
|
|
122
|
+
* Handles the successful connection to the signal server
|
|
123
|
+
* @param connection The WebSocket connection
|
|
124
|
+
* @param timeoutHandle The timeout handle to clear
|
|
125
|
+
* @param firstMessage Optional first message to process
|
|
126
|
+
* @internal
|
|
127
|
+
*/
|
|
128
|
+
private handleSignalConnected;
|
|
129
|
+
/**
|
|
130
|
+
* Validates the first message received from the signal server
|
|
131
|
+
* @param firstSignalResponse The first signal response received
|
|
132
|
+
* @param isReconnect Whether this is a reconnection attempt
|
|
133
|
+
* @returns Validation result with response or error
|
|
134
|
+
* @internal
|
|
135
|
+
*/
|
|
136
|
+
private validateFirstMessage;
|
|
137
|
+
/**
|
|
138
|
+
* Handles WebSocket connection errors by validating with the server
|
|
139
|
+
* @param reason The error that occurred
|
|
140
|
+
* @param validateUrl The URL to validate the connection with
|
|
141
|
+
* @returns A ConnectionError with appropriate reason and status
|
|
142
|
+
* @internal
|
|
143
|
+
*/
|
|
144
|
+
private handleConnectionError;
|
|
116
145
|
}
|
|
117
146
|
export declare function toProtoSessionDescription(rsd: RTCSessionDescription | RTCSessionDescriptionInit, id?: number): SessionDescription;
|
|
118
147
|
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface WebSocketConnection<T extends ArrayBuffer | string = ArrayBuffer | string> {
|
|
2
|
+
readable: ReadableStream<T>;
|
|
3
|
+
writable: WritableStream<T>;
|
|
4
|
+
protocol: string;
|
|
5
|
+
extensions: string;
|
|
6
|
+
}
|
|
7
|
+
export interface WebSocketCloseInfo {
|
|
8
|
+
closeCode?: number;
|
|
9
|
+
reason?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface WebSocketStreamOptions {
|
|
12
|
+
protocols?: string[];
|
|
13
|
+
signal?: AbortSignal;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) with [Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)
|
|
17
|
+
*
|
|
18
|
+
* @see https://web.dev/websocketstream/
|
|
19
|
+
*/
|
|
20
|
+
export declare class WebSocketStream<T extends ArrayBuffer | string = ArrayBuffer | string> {
|
|
21
|
+
readonly url: string;
|
|
22
|
+
readonly opened: Promise<WebSocketConnection<T>>;
|
|
23
|
+
readonly closed: Promise<WebSocketCloseInfo>;
|
|
24
|
+
readonly close: (closeInfo?: WebSocketCloseInfo) => void;
|
|
25
|
+
get readyState(): number;
|
|
26
|
+
private ws;
|
|
27
|
+
constructor(url: string, options?: WebSocketStreamOptions);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=WebSocketStream.d.ts.map
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { SignalResponse } from '@livekit/protocol';
|
|
1
2
|
export declare function createRtcUrl(url: string, searchParams: URLSearchParams): string;
|
|
2
3
|
export declare function createValidateUrl(rtcWsUrl: string): string;
|
|
4
|
+
export declare function parseSignalResponse(value: ArrayBuffer | string): SignalResponse;
|
|
3
5
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -2,12 +2,16 @@ import type TypedEventEmitter from 'typed-emitter';
|
|
|
2
2
|
import type RTCEngine from '../room/RTCEngine';
|
|
3
3
|
import type Room from '../room/Room';
|
|
4
4
|
import type { E2EEManagerCallbacks } from './events';
|
|
5
|
-
import type { E2EEManagerOptions } from './types';
|
|
5
|
+
import type { DecryptDataResponseMessage, E2EEManagerOptions, EncryptDataResponseMessage } from './types';
|
|
6
6
|
export interface BaseE2EEManager {
|
|
7
7
|
setup(room: Room): void;
|
|
8
8
|
setupEngine(engine: RTCEngine): void;
|
|
9
|
+
isEnabled: boolean;
|
|
10
|
+
isDataChannelEncryptionEnabled: boolean;
|
|
9
11
|
setParticipantCryptorEnabled(enabled: boolean, participantIdentity: string): void;
|
|
10
12
|
setSifTrailer(trailer: Uint8Array): void;
|
|
13
|
+
encryptData(data: Uint8Array): Promise<EncryptDataResponseMessage['data']>;
|
|
14
|
+
handleEncryptedData(payload: Uint8Array, iv: Uint8Array, participantIdentity: string, keyIndex: number): Promise<DecryptDataResponseMessage['data']>;
|
|
11
15
|
on<E extends keyof E2EEManagerCallbacks>(event: E, listener: E2EEManagerCallbacks[E]): this;
|
|
12
16
|
}
|
|
13
17
|
declare const E2EEManager_base: new () => TypedEventEmitter<E2EEManagerCallbacks>;
|
|
@@ -19,7 +23,12 @@ export declare class E2EEManager extends E2EEManager_base implements BaseE2EEMan
|
|
|
19
23
|
protected room?: Room;
|
|
20
24
|
private encryptionEnabled;
|
|
21
25
|
private keyProvider;
|
|
22
|
-
|
|
26
|
+
private decryptDataRequests;
|
|
27
|
+
private encryptDataRequests;
|
|
28
|
+
private dataChannelEncryptionEnabled;
|
|
29
|
+
constructor(options: E2EEManagerOptions, dcEncryptionEnabled: boolean);
|
|
30
|
+
get isEnabled(): boolean;
|
|
31
|
+
get isDataChannelEncryptionEnabled(): boolean;
|
|
23
32
|
/**
|
|
24
33
|
* @internal
|
|
25
34
|
*/
|
|
@@ -36,6 +45,11 @@ export declare class E2EEManager extends E2EEManager_base implements BaseE2EEMan
|
|
|
36
45
|
private onWorkerError;
|
|
37
46
|
setupEngine(engine: RTCEngine): void;
|
|
38
47
|
private setupEventListeners;
|
|
48
|
+
encryptData(data: Uint8Array): Promise<EncryptDataResponseMessage['data']>;
|
|
49
|
+
handleEncryptedData(payload: Uint8Array, iv: Uint8Array, participantIdentity: string, keyIndex: number): Promise<{
|
|
50
|
+
uuid: string;
|
|
51
|
+
payload: Uint8Array;
|
|
52
|
+
}>;
|
|
39
53
|
private postRatchetRequest;
|
|
40
54
|
private postKey;
|
|
41
55
|
private postEnable;
|
|
@@ -95,7 +95,41 @@ export interface InitAck extends BaseMessage {
|
|
|
95
95
|
enabled: boolean;
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
|
-
export
|
|
98
|
+
export interface DecryptDataRequestMessage extends BaseMessage {
|
|
99
|
+
kind: 'decryptDataRequest';
|
|
100
|
+
data: {
|
|
101
|
+
uuid: string;
|
|
102
|
+
payload: Uint8Array;
|
|
103
|
+
iv: Uint8Array;
|
|
104
|
+
participantIdentity: string;
|
|
105
|
+
keyIndex: number;
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export interface DecryptDataResponseMessage extends BaseMessage {
|
|
109
|
+
kind: 'decryptDataResponse';
|
|
110
|
+
data: {
|
|
111
|
+
uuid: string;
|
|
112
|
+
payload: Uint8Array;
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export interface EncryptDataRequestMessage extends BaseMessage {
|
|
116
|
+
kind: 'encryptDataRequest';
|
|
117
|
+
data: {
|
|
118
|
+
uuid: string;
|
|
119
|
+
payload: Uint8Array;
|
|
120
|
+
participantIdentity: string;
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
export interface EncryptDataResponseMessage extends BaseMessage {
|
|
124
|
+
kind: 'encryptDataResponse';
|
|
125
|
+
data: {
|
|
126
|
+
uuid: string;
|
|
127
|
+
payload: Uint8Array;
|
|
128
|
+
iv: Uint8Array;
|
|
129
|
+
keyIndex: number;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
export type E2EEWorkerMessage = InitMessage | SetKeyMessage | EncodeMessage | ErrorMessage | EnableMessage | RemoveTransformMessage | RTPVideoMapMessage | UpdateCodecMessage | RatchetRequestMessage | RatchetMessage | SifTrailerMessage | InitAck | DecryptDataRequestMessage | DecryptDataResponseMessage | EncryptDataRequestMessage | EncryptDataResponseMessage;
|
|
99
133
|
export type KeySet = {
|
|
100
134
|
material: CryptoKey;
|
|
101
135
|
encryptionKey: CryptoKey;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { DataPacket } from '@livekit/protocol';
|
|
2
|
+
import { EncryptedPacketPayload } from '@livekit/protocol';
|
|
1
3
|
export declare function isE2EESupported(): boolean;
|
|
2
4
|
export declare function isScriptTransformSupported(): boolean;
|
|
3
5
|
export declare function isInsertableStreamSupported(): boolean;
|
|
@@ -24,4 +26,5 @@ export declare function ratchet(material: CryptoKey, salt: string): Promise<Arra
|
|
|
24
26
|
export declare function needsRbspUnescaping(frameData: Uint8Array): boolean;
|
|
25
27
|
export declare function parseRbsp(stream: Uint8Array): Uint8Array;
|
|
26
28
|
export declare function writeRbsp(data_in: Uint8Array): Uint8Array;
|
|
29
|
+
export declare function asEncryptablePacket(packet: DataPacket): EncryptedPacketPayload | undefined;
|
|
27
30
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DecodeRatchetOptions, KeySet } from '../types';
|
|
2
|
+
import type { ParticipantKeyHandler } from './ParticipantKeyHandler';
|
|
3
|
+
export declare class DataCryptor {
|
|
4
|
+
private static sendCount;
|
|
5
|
+
private static makeIV;
|
|
6
|
+
static encrypt(data: Uint8Array, keys: ParticipantKeyHandler): Promise<{
|
|
7
|
+
payload: Uint8Array;
|
|
8
|
+
iv: Uint8Array;
|
|
9
|
+
keyIndex: number;
|
|
10
|
+
}>;
|
|
11
|
+
static decrypt(data: Uint8Array, iv: Uint8Array, keys: ParticipantKeyHandler, keyIndex?: number, initialMaterial?: KeySet, ratchetOpts?: DecodeRatchetOptions): Promise<{
|
|
12
|
+
payload: Uint8Array;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=DataCryptor.d.ts.map
|
|
@@ -14,9 +14,10 @@ export declare class ParticipantKeyHandler extends ParticipantKeyHandler_base {
|
|
|
14
14
|
private currentKeyIndex;
|
|
15
15
|
private cryptoKeyRing;
|
|
16
16
|
private decryptionFailureCounts;
|
|
17
|
-
private keyProviderOptions;
|
|
18
17
|
private ratchetPromiseMap;
|
|
19
|
-
|
|
18
|
+
readonly participantIdentity: string;
|
|
19
|
+
/** @internal */
|
|
20
|
+
readonly keyProviderOptions: KeyProviderOptions;
|
|
20
21
|
/**
|
|
21
22
|
* true if the current key has not been marked as invalid
|
|
22
23
|
*/
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { VideoCodec } from '../..';
|
|
2
|
-
export declare const VP8KeyFrame8x8: Uint8Array
|
|
3
|
-
export declare const H264KeyFrame2x2SPS: Uint8Array
|
|
4
|
-
export declare const H264KeyFrame2x2PPS: Uint8Array
|
|
5
|
-
export declare const H264KeyFrame2x2IDR: Uint8Array
|
|
6
|
-
export declare const H264KeyFrame2x2: Uint8Array
|
|
7
|
-
export declare const OpusSilenceFrame: Uint8Array
|
|
2
|
+
export declare const VP8KeyFrame8x8: Uint8Array;
|
|
3
|
+
export declare const H264KeyFrame2x2SPS: Uint8Array;
|
|
4
|
+
export declare const H264KeyFrame2x2PPS: Uint8Array;
|
|
5
|
+
export declare const H264KeyFrame2x2IDR: Uint8Array;
|
|
6
|
+
export declare const H264KeyFrame2x2: Uint8Array[];
|
|
7
|
+
export declare const OpusSilenceFrame: Uint8Array;
|
|
8
8
|
/**
|
|
9
9
|
* Pre-computed SHA-256 hashes for secure comparison operations
|
|
10
10
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Mutex } from '@livekit/mutex';
|
|
2
|
-
import { DataPacket_Kind, DisconnectReason, SubscriptionError, TrackType } from '@livekit/protocol';
|
|
2
|
+
import { DataPacket_Kind, DisconnectReason, Encryption_Type, SubscriptionError, TrackType } from '@livekit/protocol';
|
|
3
3
|
import { LogLevel, LoggerNames, getLogger, setLogExtension, setLogLevel } from './logger';
|
|
4
4
|
import DefaultReconnectPolicy from './room/DefaultReconnectPolicy';
|
|
5
5
|
import type { ReconnectContext, ReconnectPolicy } from './room/ReconnectPolicy';
|
|
@@ -23,7 +23,7 @@ import RemoteVideoTrack from './room/track/RemoteVideoTrack';
|
|
|
23
23
|
import { TrackPublication } from './room/track/TrackPublication';
|
|
24
24
|
import type { LiveKitReactNativeInfo } from './room/types';
|
|
25
25
|
import type { AudioAnalyserOptions } from './room/utils';
|
|
26
|
-
import { compareVersions, createAudioAnalyser, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, isAudioTrack, isBrowserSupported, isLocalParticipant, isLocalTrack, isRemoteParticipant, isRemoteTrack, isVideoTrack, supportsAV1, supportsAdaptiveStream, supportsDynacast, supportsVP9 } from './room/utils';
|
|
26
|
+
import { compareVersions, createAudioAnalyser, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, isAudioCodec, isAudioTrack, isBrowserSupported, isLocalParticipant, isLocalTrack, isRemoteParticipant, isRemoteTrack, isVideoCodec, isVideoTrack, supportsAV1, supportsAdaptiveStream, supportsAudioOutputSelection, supportsDynacast, supportsVP9 } from './room/utils';
|
|
27
27
|
import { getBrowser } from './utils/browserParser';
|
|
28
28
|
export type { RpcInvocationData, PerformRpcParams } from './room/rpc';
|
|
29
29
|
export { RpcError } from './room/rpc';
|
|
@@ -36,6 +36,8 @@ export * from './room/errors';
|
|
|
36
36
|
export * from './room/events';
|
|
37
37
|
export * from './room/track/Track';
|
|
38
38
|
export * from './room/track/create';
|
|
39
|
+
export * from './room/token-source/TokenSource';
|
|
40
|
+
export * from './room/token-source/types';
|
|
39
41
|
export { facingModeFromDeviceLabel, facingModeFromLocalTrack } from './room/track/facingMode';
|
|
40
42
|
export * from './room/track/options';
|
|
41
43
|
export * from './room/track/processor/types';
|
|
@@ -46,7 +48,7 @@ export type { DataPublishOptions, SimulationScenario, TranscriptionSegment, Chat
|
|
|
46
48
|
export * from './version';
|
|
47
49
|
export {
|
|
48
50
|
/** @internal */
|
|
49
|
-
attributes, ConnectionQuality, ConnectionState, CriticalTimers, DataPacket_Kind, DefaultReconnectPolicy, DisconnectReason, LocalAudioTrack, LocalParticipant, LocalTrack, LocalTrackPublication, LocalVideoTrack, LogLevel, LoggerNames, Participant, RemoteAudioTrack, RemoteParticipant, ParticipantKind, RemoteTrack, RemoteTrackPublication, RemoteVideoTrack, Room, SubscriptionError, TrackPublication, TrackType, compareVersions, createAudioAnalyser, getBrowser, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, getLogger, isBrowserSupported, setLogExtension, setLogLevel, supportsAV1, supportsAdaptiveStream, supportsDynacast, supportsVP9, Mutex, isAudioTrack, isLocalTrack, isRemoteTrack, isVideoTrack, isLocalParticipant, isRemoteParticipant, };
|
|
51
|
+
attributes, ConnectionQuality, ConnectionState, CriticalTimers, DataPacket_Kind, Encryption_Type, DefaultReconnectPolicy, DisconnectReason, LocalAudioTrack, LocalParticipant, LocalTrack, LocalTrackPublication, LocalVideoTrack, LogLevel, LoggerNames, Participant, RemoteAudioTrack, RemoteParticipant, ParticipantKind, RemoteTrack, RemoteTrackPublication, RemoteVideoTrack, Room, SubscriptionError, TrackPublication, TrackType, compareVersions, createAudioAnalyser, getBrowser, getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, getLogger, isBrowserSupported, setLogExtension, setLogLevel, supportsAV1, supportsAdaptiveStream, supportsAudioOutputSelection, supportsDynacast, supportsVP9, Mutex, isAudioCodec, isAudioTrack, isLocalTrack, isRemoteTrack, isVideoCodec, isVideoTrack, isLocalParticipant, isRemoteParticipant, };
|
|
50
52
|
export type { AudioAnalyserOptions, ElementInfo, LiveKitReactNativeInfo, ParticipantTrackPermission, AudioReceiverStats, AudioSenderStats, VideoReceiverStats, VideoSenderStats, ReconnectContext, ReconnectPolicy, };
|
|
51
53
|
export { LocalTrackRecorder } from './room/track/record';
|
|
52
54
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -10,6 +10,7 @@ export declare enum LogLevel {
|
|
|
10
10
|
export declare enum LoggerNames {
|
|
11
11
|
Default = "livekit",
|
|
12
12
|
Room = "livekit-room",
|
|
13
|
+
TokenSource = "livekit-token-source",
|
|
13
14
|
Participant = "livekit-participant",
|
|
14
15
|
Track = "livekit-track",
|
|
15
16
|
Publication = "livekit-track-publication",
|
|
@@ -68,16 +68,24 @@ export interface InternalRoomOptions {
|
|
|
68
68
|
* allows for passing in your own AudioContext instance, too
|
|
69
69
|
*/
|
|
70
70
|
webAudioMix: boolean | WebAudioSettings;
|
|
71
|
+
e2ee?: E2EEOptions;
|
|
71
72
|
/**
|
|
72
73
|
* @experimental
|
|
74
|
+
* Options for enabling end-to-end encryption.
|
|
73
75
|
*/
|
|
74
|
-
|
|
76
|
+
encryption?: E2EEOptions;
|
|
75
77
|
loggerName?: string;
|
|
78
|
+
/**
|
|
79
|
+
* @experimental
|
|
80
|
+
* only supported on LiveKit Cloud
|
|
81
|
+
* and LiveKit OSS >= 1.9.2
|
|
82
|
+
*/
|
|
83
|
+
singlePeerConnection: boolean;
|
|
76
84
|
}
|
|
77
85
|
/**
|
|
78
86
|
* Options for when creating a new room
|
|
79
87
|
*/
|
|
80
|
-
export interface RoomOptions extends Partial<InternalRoomOptions
|
|
88
|
+
export interface RoomOptions extends Partial<Omit<InternalRoomOptions, 'encryption'>> {
|
|
81
89
|
}
|
|
82
90
|
/**
|
|
83
91
|
* @internal
|
|
@@ -52,6 +52,7 @@ export default class PCTransport extends EventEmitter {
|
|
|
52
52
|
createAndSetAnswer(): Promise<RTCSessionDescriptionInit>;
|
|
53
53
|
createDataChannel(label: string, dataChannelDict: RTCDataChannelInit): RTCDataChannel;
|
|
54
54
|
addTransceiver(mediaStreamTrack: MediaStreamTrack, transceiverInit: RTCRtpTransceiverInit): RTCRtpTransceiver;
|
|
55
|
+
addTransceiverOfKind(kind: 'audio' | 'video', transceiverInit: RTCRtpTransceiverInit): RTCRtpTransceiver;
|
|
55
56
|
addTrack(track: MediaStreamTrack): RTCRtpSender;
|
|
56
57
|
setTrackCodecBitrate(info: TrackBitrateInfo): void;
|
|
57
58
|
setConfiguration(rtcConfig: RTCConfiguration): void;
|
|
@@ -9,14 +9,15 @@ export declare enum PCTransportState {
|
|
|
9
9
|
CLOSING = 4,
|
|
10
10
|
CLOSED = 5
|
|
11
11
|
}
|
|
12
|
+
type PCMode = 'subscriber-primary' | 'publisher-primary' | 'publisher-only';
|
|
12
13
|
export declare class PCTransportManager {
|
|
13
14
|
publisher: PCTransport;
|
|
14
|
-
subscriber
|
|
15
|
+
subscriber?: PCTransport;
|
|
15
16
|
peerConnectionTimeout: number;
|
|
16
17
|
get needsPublisher(): boolean;
|
|
17
18
|
get needsSubscriber(): boolean;
|
|
18
19
|
get currentState(): PCTransportState;
|
|
19
|
-
onStateChange?: (state: PCTransportState, pubState: RTCPeerConnectionState, subState
|
|
20
|
+
onStateChange?: (state: PCTransportState, pubState: RTCPeerConnectionState, subState?: RTCPeerConnectionState) => void;
|
|
20
21
|
onIceCandidate?: (ev: RTCIceCandidate, target: SignalTarget) => void;
|
|
21
22
|
onDataChannel?: (ev: RTCDataChannelEvent) => void;
|
|
22
23
|
onTrack?: (ev: RTCTrackEvent) => void;
|
|
@@ -28,10 +29,9 @@ export declare class PCTransportManager {
|
|
|
28
29
|
private remoteOfferLock;
|
|
29
30
|
private log;
|
|
30
31
|
private loggerOptions;
|
|
31
|
-
constructor(rtcConfig: RTCConfiguration,
|
|
32
|
+
constructor(rtcConfig: RTCConfiguration, mode: PCMode, loggerOptions: LoggerOptions);
|
|
32
33
|
private get logContext();
|
|
33
34
|
requirePublisher(require?: boolean): void;
|
|
34
|
-
requireSubscriber(require?: boolean): void;
|
|
35
35
|
createAndSendPublisherOffer(options?: RTCOfferOptions): Promise<void>;
|
|
36
36
|
setPublisherAnswer(sd: RTCSessionDescriptionInit, offerId: number): Promise<boolean>;
|
|
37
37
|
removeTrack(sender: RTCRtpSender): void | undefined;
|
|
@@ -43,6 +43,7 @@ export declare class PCTransportManager {
|
|
|
43
43
|
ensurePCTransportConnection(abortController?: AbortController, timeout?: number): Promise<void>;
|
|
44
44
|
negotiate(abortController: AbortController): Promise<void>;
|
|
45
45
|
addPublisherTransceiver(track: MediaStreamTrack, transceiverInit: RTCRtpTransceiverInit): RTCRtpTransceiver;
|
|
46
|
+
addPublisherTransceiverOfKind(kind: 'audio' | 'video', transceiverInit: RTCRtpTransceiverInit): RTCRtpTransceiver;
|
|
46
47
|
addPublisherTrack(track: MediaStreamTrack): RTCRtpSender;
|
|
47
48
|
createPublisherDataChannel(label: string, dataChannelDict: RTCDataChannelInit): RTCDataChannel;
|
|
48
49
|
/**
|
|
@@ -53,4 +54,5 @@ export declare class PCTransportManager {
|
|
|
53
54
|
private updateState;
|
|
54
55
|
private ensureTransportConnected;
|
|
55
56
|
}
|
|
57
|
+
export {};
|
|
56
58
|
//# sourceMappingURL=PCTransportManager.d.ts.map
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { AddTrackRequest, ConnectionQualityUpdate, JoinResponse, StreamStateUpdate, SubscriptionPermissionUpdate, SubscriptionResponse } from '@livekit/protocol';
|
|
2
|
-
import { DataPacket, DataPacket_Kind, DisconnectReason, ParticipantInfo, RequestResponse, Room as RoomModel, RoomMovedResponse, SpeakerInfo, SubscribedQualityUpdate, TrackInfo, TrackUnpublishedResponse, Transcription } from '@livekit/protocol';
|
|
2
|
+
import { DataPacket, DataPacket_Kind, DisconnectReason, Encryption_Type, ParticipantInfo, RequestResponse, Room as RoomModel, RoomMovedResponse, SpeakerInfo, SubscribedQualityUpdate, TrackInfo, TrackUnpublishedResponse, Transcription } from '@livekit/protocol';
|
|
3
3
|
import type TypedEventEmitter from 'typed-emitter';
|
|
4
4
|
import type { SignalOptions } from '../api/SignalClient';
|
|
5
5
|
import { SignalClient } from '../api/SignalClient';
|
|
6
|
+
import type { BaseE2EEManager } from '../e2ee/E2eeManager';
|
|
6
7
|
import type { InternalRoomOptions } from '../options';
|
|
7
8
|
import PCTransport from './PCTransport';
|
|
8
9
|
import { PCTransportManager } from './PCTransportManager';
|
|
@@ -32,6 +33,8 @@ export default class RTCEngine extends RTCEngine_base {
|
|
|
32
33
|
* @internal
|
|
33
34
|
*/
|
|
34
35
|
latestRemoteOfferId: number;
|
|
36
|
+
/** @internal */
|
|
37
|
+
e2eeManager: BaseE2EEManager | undefined;
|
|
35
38
|
get isClosed(): boolean;
|
|
36
39
|
get pendingReconnect(): boolean;
|
|
37
40
|
private lossyDC?;
|
|
@@ -152,9 +155,9 @@ export type EngineEventCallbacks = {
|
|
|
152
155
|
closing: () => void;
|
|
153
156
|
mediaTrackAdded: (track: MediaStreamTrack, streams: MediaStream, receiver: RTCRtpReceiver) => void;
|
|
154
157
|
activeSpeakersUpdate: (speakers: Array<SpeakerInfo>) => void;
|
|
155
|
-
dataPacketReceived: (packet: DataPacket) => void;
|
|
158
|
+
dataPacketReceived: (packet: DataPacket, encryptionType: Encryption_Type) => void;
|
|
156
159
|
transcriptionReceived: (transcription: Transcription) => void;
|
|
157
|
-
transportsCreated: (publisher: PCTransport, subscriber
|
|
160
|
+
transportsCreated: (publisher: PCTransport, subscriber?: PCTransport) => void;
|
|
158
161
|
/** @internal */
|
|
159
162
|
trackSenderAdded: (track: Track, sender: RTCRtpSender) => void;
|
|
160
163
|
rtpVideoMapUpdate: (rtpMap: Map<number, VideoCodec>) => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DataPacket_Kind, DisconnectReason, MetricsBatch, ParticipantPermission, ServerInfo, SipDTMF, SubscriptionError, TranscriptionSegment as TranscriptionSegmentModel } from '@livekit/protocol';
|
|
1
|
+
import { DataPacket_Kind, DisconnectReason, Encryption_Type, MetricsBatch, ParticipantPermission, ServerInfo, SipDTMF, SubscriptionError, TranscriptionSegment as TranscriptionSegmentModel } from '@livekit/protocol';
|
|
2
2
|
import type TypedEmitter from 'typed-emitter';
|
|
3
3
|
import 'webrtc-adapter';
|
|
4
4
|
import type { InternalRoomOptions, RoomConnectOptions, RoomOptions } from '../options';
|
|
@@ -77,6 +77,7 @@ declare class Room extends Room_base {
|
|
|
77
77
|
private incomingDataStreamManager;
|
|
78
78
|
private outgoingDataStreamManager;
|
|
79
79
|
private rpcHandlers;
|
|
80
|
+
get hasE2EESetup(): boolean;
|
|
80
81
|
/**
|
|
81
82
|
* Creates a new Room, the primary construct for a LiveKit session.
|
|
82
83
|
* @param options
|
|
@@ -306,7 +307,7 @@ export type RoomEventCallbacks = {
|
|
|
306
307
|
participantAttributesChanged: (changedAttributes: Record<string, string>, participant: RemoteParticipant | LocalParticipant) => void;
|
|
307
308
|
activeSpeakersChanged: (speakers: Array<Participant>) => void;
|
|
308
309
|
roomMetadataChanged: (metadata: string) => void;
|
|
309
|
-
dataReceived: (payload: Uint8Array, participant?: RemoteParticipant, kind?: DataPacket_Kind, topic?: string) => void;
|
|
310
|
+
dataReceived: (payload: Uint8Array, participant?: RemoteParticipant, kind?: DataPacket_Kind, topic?: string, encryptionType?: Encryption_Type) => void;
|
|
310
311
|
sipDTMFReceived: (dtmf: SipDTMF, participant?: RemoteParticipant) => void;
|
|
311
312
|
transcriptionReceived: (transcription: TranscriptionSegment[], participant?: Participant, publication?: TrackPublication) => void;
|
|
312
313
|
connectionQualityChanged: (quality: ConnectionQuality, participant: Participant) => void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DataPacket } from '@livekit/protocol';
|
|
2
|
+
import { Encryption_Type } from '@livekit/protocol';
|
|
2
3
|
import type { ByteStreamHandler, TextStreamHandler } from './StreamReader';
|
|
3
4
|
export default class IncomingDataStreamManager {
|
|
4
5
|
private log;
|
|
@@ -12,7 +13,7 @@ export default class IncomingDataStreamManager {
|
|
|
12
13
|
unregisterByteStreamHandler(topic: string): void;
|
|
13
14
|
clearHandlersAndControllers(): void;
|
|
14
15
|
validateParticipantHasNoActiveDataStreams(participantIdentity: string): void;
|
|
15
|
-
handleDataStreamPacket(packet: DataPacket): Promise<void>;
|
|
16
|
+
handleDataStreamPacket(packet: DataPacket, encryptionType: Encryption_Type): Promise<void>;
|
|
16
17
|
private handleStreamHeader;
|
|
17
18
|
private handleStreamChunk;
|
|
18
19
|
private handleStreamTrailer;
|
|
@@ -52,7 +52,8 @@ export declare enum DataStreamErrorReason {
|
|
|
52
52
|
DecodeFailed = 2,
|
|
53
53
|
LengthExceeded = 3,
|
|
54
54
|
Incomplete = 4,
|
|
55
|
-
HandlerAlreadyRegistered = 7
|
|
55
|
+
HandlerAlreadyRegistered = 7,
|
|
56
|
+
EncryptionTypeMismatch = 8
|
|
56
57
|
}
|
|
57
58
|
export declare class DataStreamError extends LivekitError {
|
|
58
59
|
reason: DataStreamErrorReason;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SipDTMF } from '@livekit/protocol';
|
|
2
|
-
import { DataPacket_Kind, ParticipantInfo, ParticipantInfo_Kind as ParticipantKind, ParticipantPermission, ConnectionQuality as ProtoQuality, SubscriptionError } from '@livekit/protocol';
|
|
2
|
+
import { DataPacket_Kind, Encryption_Type, ParticipantInfo, ParticipantInfo_Kind as ParticipantKind, ParticipantPermission, ConnectionQuality as ProtoQuality, SubscriptionError } from '@livekit/protocol';
|
|
3
3
|
import type TypedEmitter from 'typed-emitter';
|
|
4
4
|
import type { StructuredLogger } from '../../logger';
|
|
5
5
|
import type LocalTrackPublication from '../track/LocalTrackPublication';
|
|
@@ -124,7 +124,7 @@ export type ParticipantEventCallbacks = {
|
|
|
124
124
|
localSenderCreated: (sender: RTCRtpSender, track: Track) => void;
|
|
125
125
|
participantMetadataChanged: (prevMetadata: string | undefined, participant?: any) => void;
|
|
126
126
|
participantNameChanged: (name: string) => void;
|
|
127
|
-
dataReceived: (payload: Uint8Array, kind: DataPacket_Kind) => void;
|
|
127
|
+
dataReceived: (payload: Uint8Array, kind: DataPacket_Kind, encryptionType?: Encryption_Type) => void;
|
|
128
128
|
sipDTMFReceived: (dtmf: SipDTMF) => void;
|
|
129
129
|
transcriptionReceived: (transcription: TranscriptionSegment[], publication?: TrackPublication) => void;
|
|
130
130
|
isSpeakingChanged: (speaking: boolean) => void;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { TokenSourceResponse } from '@livekit/protocol';
|
|
2
|
+
import type { TokenSourceFetchOptions, TokenSourceResponseObject } from './types';
|
|
3
|
+
import { TokenSourceConfigurable, TokenSourceFixed } from './types';
|
|
4
|
+
/** A TokenSourceCached is a TokenSource which caches the last {@link TokenSourceResponseObject} value and returns it
|
|
5
|
+
* until a) it expires or b) the {@link TokenSourceFetchOptions} provided to .fetch(...) change. */
|
|
6
|
+
declare abstract class TokenSourceCached extends TokenSourceConfigurable {
|
|
7
|
+
private cachedFetchOptions;
|
|
8
|
+
private cachedResponse;
|
|
9
|
+
private fetchMutex;
|
|
10
|
+
private isSameAsCachedFetchOptions;
|
|
11
|
+
private shouldReturnCachedValueFromFetch;
|
|
12
|
+
getCachedResponseJwtPayload(): import("./types").TokenPayload | null;
|
|
13
|
+
fetch(options: TokenSourceFetchOptions): Promise<TokenSourceResponseObject>;
|
|
14
|
+
protected abstract update(options: TokenSourceFetchOptions): Promise<TokenSourceResponse>;
|
|
15
|
+
}
|
|
16
|
+
type LiteralOrFn = TokenSourceResponseObject | (() => TokenSourceResponseObject | Promise<TokenSourceResponseObject>);
|
|
17
|
+
export declare class TokenSourceLiteral extends TokenSourceFixed {
|
|
18
|
+
private literalOrFn;
|
|
19
|
+
constructor(literalOrFn: LiteralOrFn);
|
|
20
|
+
fetch(): Promise<TokenSourceResponseObject>;
|
|
21
|
+
}
|
|
22
|
+
type CustomFn = (options: TokenSourceFetchOptions) => TokenSourceResponseObject | Promise<TokenSourceResponseObject>;
|
|
23
|
+
export declare class TokenSourceCustom extends TokenSourceCached {
|
|
24
|
+
private customFn;
|
|
25
|
+
constructor(customFn: CustomFn);
|
|
26
|
+
protected update(options: TokenSourceFetchOptions): Promise<TokenSourceResponse>;
|
|
27
|
+
}
|
|
28
|
+
export type EndpointOptions = Omit<RequestInit, 'body'>;
|
|
29
|
+
export declare class TokenSourceEndpoint extends TokenSourceCached {
|
|
30
|
+
private url;
|
|
31
|
+
private endpointOptions;
|
|
32
|
+
constructor(url: string, options?: EndpointOptions);
|
|
33
|
+
private createRequestFromOptions;
|
|
34
|
+
protected update(options: TokenSourceFetchOptions): Promise<TokenSourceResponse>;
|
|
35
|
+
}
|
|
36
|
+
export type SandboxTokenServerOptions = {
|
|
37
|
+
baseUrl?: string;
|
|
38
|
+
};
|
|
39
|
+
export declare class TokenSourceSandboxTokenServer extends TokenSourceEndpoint {
|
|
40
|
+
constructor(sandboxId: string, options: SandboxTokenServerOptions);
|
|
41
|
+
}
|
|
42
|
+
export declare const TokenSource: {
|
|
43
|
+
/** TokenSource.literal contains a single, literal set of {@link TokenSourceResponseObject}
|
|
44
|
+
* credentials, either provided directly or returned from a provided function. */
|
|
45
|
+
literal(literalOrFn: LiteralOrFn): TokenSourceLiteral;
|
|
46
|
+
/**
|
|
47
|
+
* TokenSource.custom allows a user to define a manual function which generates new
|
|
48
|
+
* {@link TokenSourceResponseObject} values on demand.
|
|
49
|
+
*
|
|
50
|
+
* Use this to get credentials from custom backends / etc.
|
|
51
|
+
*/
|
|
52
|
+
custom(customFn: CustomFn): TokenSourceCustom;
|
|
53
|
+
/**
|
|
54
|
+
* TokenSource.endpoint creates a token source that fetches credentials from a given URL using
|
|
55
|
+
* the standard endpoint format:
|
|
56
|
+
* FIXME: add docs link here in the future!
|
|
57
|
+
*/
|
|
58
|
+
endpoint(url: string, options?: EndpointOptions): TokenSourceEndpoint;
|
|
59
|
+
/**
|
|
60
|
+
* TokenSource.sandboxTokenServer queries a sandbox token server for credentials,
|
|
61
|
+
* which supports quick prototyping / getting started types of use cases.
|
|
62
|
+
*
|
|
63
|
+
* This token provider is INSECURE and should NOT be used in production.
|
|
64
|
+
*
|
|
65
|
+
* For more info:
|
|
66
|
+
* @see https://cloud.livekit.io/projects/p_/sandbox/templates/token-server
|
|
67
|
+
*/
|
|
68
|
+
sandboxTokenServer(sandboxId: string, options?: SandboxTokenServerOptions): TokenSourceSandboxTokenServer;
|
|
69
|
+
};
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=TokenSource.d.ts.map
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { RoomConfiguration, TokenSourceRequest, TokenSourceResponse } from '@livekit/protocol';
|
|
2
|
+
import type { JWTPayload } from 'jose';
|
|
3
|
+
import type { ValueToSnakeCase } from '../../utils/camelToSnakeCase';
|
|
4
|
+
export type TokenSourceRequestObject = Required<NonNullable<ConstructorParameters<typeof TokenSourceRequest>[0]>>;
|
|
5
|
+
export type TokenSourceResponseObject = Required<NonNullable<ConstructorParameters<typeof TokenSourceResponse>[0]>>;
|
|
6
|
+
/** The `TokenSource` request object sent to the server as part of fetching a configurable
|
|
7
|
+
* `TokenSource` like {@link TokenSourceEndpoint}.
|
|
8
|
+
*
|
|
9
|
+
* Use this as a type for your request body if implementing a server endpoint in node.js.
|
|
10
|
+
*/
|
|
11
|
+
export type TokenSourceRequestPayload = ValueToSnakeCase<TokenSourceRequestObject>;
|
|
12
|
+
/** The `TokenSource` response object sent from the server as part of fetching a configurable
|
|
13
|
+
* `TokenSource` like {@link TokenSourceEndpoint}.
|
|
14
|
+
*
|
|
15
|
+
* Use this as a type for your response body if implementing a server endpoint in node.js.
|
|
16
|
+
*/
|
|
17
|
+
export type TokenSourceResponsePayload = ValueToSnakeCase<TokenSourceResponseObject>;
|
|
18
|
+
/** The payload of a LiveKit JWT token. */
|
|
19
|
+
export type TokenPayload = JWTPayload & {
|
|
20
|
+
name?: string;
|
|
21
|
+
metadata?: string;
|
|
22
|
+
attributes?: Record<string, string>;
|
|
23
|
+
video?: {
|
|
24
|
+
room?: string;
|
|
25
|
+
roomJoin?: boolean;
|
|
26
|
+
canPublish?: boolean;
|
|
27
|
+
canPublishData?: boolean;
|
|
28
|
+
canSubscribe?: boolean;
|
|
29
|
+
};
|
|
30
|
+
roomConfig?: RoomConfigurationObject;
|
|
31
|
+
};
|
|
32
|
+
export type RoomConfigurationObject = NonNullable<ConstructorParameters<typeof RoomConfiguration>[0]>;
|
|
33
|
+
/** A Fixed TokenSource is a token source that takes no parameters and returns a completely
|
|
34
|
+
* independently derived value on each fetch() call.
|
|
35
|
+
*
|
|
36
|
+
* The most common downstream implementer is {@link TokenSourceLiteral}.
|
|
37
|
+
*/
|
|
38
|
+
export declare abstract class TokenSourceFixed {
|
|
39
|
+
abstract fetch(): Promise<TokenSourceResponseObject>;
|
|
40
|
+
}
|
|
41
|
+
export type TokenSourceFetchOptions = {
|
|
42
|
+
roomName?: string;
|
|
43
|
+
participantName?: string;
|
|
44
|
+
participantIdentity?: string;
|
|
45
|
+
participantMetadata?: string;
|
|
46
|
+
participantAttributes?: {
|
|
47
|
+
[key: string]: string;
|
|
48
|
+
};
|
|
49
|
+
agentName?: string;
|
|
50
|
+
agentMetadata?: string;
|
|
51
|
+
};
|
|
52
|
+
/** A Configurable TokenSource is a token source that takes a
|
|
53
|
+
* {@link TokenSourceFetchOptions} object as input and returns a deterministic
|
|
54
|
+
* {@link TokenSourceResponseObject} output based on the options specified.
|
|
55
|
+
*
|
|
56
|
+
* For example, if options.participantName is set, it should be expected that
|
|
57
|
+
* all tokens that are generated will have participant name field set to the
|
|
58
|
+
* provided value.
|
|
59
|
+
*
|
|
60
|
+
* A few common downstream implementers are {@link TokenSourceEndpoint}
|
|
61
|
+
* and {@link TokenSourceCustom}.
|
|
62
|
+
*/
|
|
63
|
+
export declare abstract class TokenSourceConfigurable {
|
|
64
|
+
abstract fetch(options: TokenSourceFetchOptions): Promise<TokenSourceResponseObject>;
|
|
65
|
+
}
|
|
66
|
+
/** A TokenSource is a mechanism for fetching credentials required to connect to a LiveKit Room. */
|
|
67
|
+
export type TokenSourceBase = TokenSourceFixed | TokenSourceConfigurable;
|
|
68
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { TokenSourceResponse } from '@livekit/protocol';
|
|
2
|
+
import type { TokenPayload } from './types';
|
|
3
|
+
export declare function isResponseTokenValid(response: TokenSourceResponse): boolean;
|
|
4
|
+
export declare function decodeTokenPayload(token: string): TokenPayload;
|
|
5
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -114,7 +114,7 @@ export default abstract class LocalTrack<TrackKind extends Track.Kind = Track.Ki
|
|
|
114
114
|
/** @internal */
|
|
115
115
|
stopPreConnectBuffer(): void;
|
|
116
116
|
/** @internal */
|
|
117
|
-
getPreConnectBuffer(): ReadableStream<Uint8Array
|
|
117
|
+
getPreConnectBuffer(): ReadableStream<Uint8Array> | undefined;
|
|
118
118
|
getPreConnectBufferMimeType(): string | undefined;
|
|
119
119
|
protected abstract monitorSender(): void;
|
|
120
120
|
}
|