livekit-client 1.6.3 → 1.6.5
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/livekit-client.esm.mjs +418 -70
- 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 +13 -2
- package/dist/src/api/SignalClient.d.ts.map +1 -1
- package/dist/src/connectionHelper/ConnectionCheck.d.ts +2 -2
- package/dist/src/connectionHelper/ConnectionCheck.d.ts.map +1 -1
- package/dist/src/proto/livekit_models.d.ts +20 -3
- package/dist/src/proto/livekit_models.d.ts.map +1 -1
- package/dist/src/proto/livekit_rtc.d.ts +2565 -464
- package/dist/src/proto/livekit_rtc.d.ts.map +1 -1
- package/dist/src/room/RTCEngine.d.ts.map +1 -1
- package/dist/src/room/Room.d.ts +1 -1
- package/dist/src/room/Room.d.ts.map +1 -1
- package/dist/src/room/errors.d.ts +3 -0
- package/dist/src/room/errors.d.ts.map +1 -1
- package/dist/src/room/participant/LocalParticipant.d.ts +1 -3
- package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
- package/dist/src/room/participant/Participant.d.ts +1 -1
- package/dist/src/room/participant/Participant.d.ts.map +1 -1
- package/dist/src/room/track/LocalAudioTrack.d.ts.map +1 -1
- package/dist/src/room/track/create.d.ts.map +1 -1
- package/dist/src/room/track/options.d.ts +2 -2
- package/dist/src/room/track/options.d.ts.map +1 -1
- package/dist/src/test/mocks.d.ts +1 -1
- package/dist/ts4.2/src/api/SignalClient.d.ts +13 -2
- package/dist/ts4.2/src/connectionHelper/ConnectionCheck.d.ts +2 -2
- package/dist/ts4.2/src/proto/livekit_models.d.ts +24 -3
- package/dist/ts4.2/src/proto/livekit_rtc.d.ts +2775 -540
- package/dist/ts4.2/src/room/Room.d.ts +1 -1
- package/dist/ts4.2/src/room/errors.d.ts +3 -0
- package/dist/ts4.2/src/room/participant/LocalParticipant.d.ts +1 -3
- package/dist/ts4.2/src/room/participant/Participant.d.ts +1 -1
- package/dist/ts4.2/src/room/track/options.d.ts +2 -2
- package/dist/ts4.2/src/test/mocks.d.ts +1 -1
- package/package.json +17 -17
- package/src/api/SignalClient.ts +46 -3
- package/src/connectionHelper/ConnectionCheck.ts +1 -1
- package/src/proto/google/protobuf/timestamp.ts +2 -2
- package/src/proto/livekit_models.ts +93 -9
- package/src/proto/livekit_rtc.ts +308 -6
- package/src/room/RTCEngine.ts +37 -16
- package/src/room/Room.ts +12 -11
- package/src/room/errors.ts +6 -0
- package/src/room/participant/LocalParticipant.ts +19 -20
- package/src/room/participant/Participant.ts +10 -2
- package/src/room/track/LocalAudioTrack.ts +5 -1
- package/src/room/track/create.ts +6 -1
- package/src/room/track/options.ts +2 -2
@@ -204,7 +204,7 @@ export type RoomEventCallbacks = {
|
|
204
204
|
localTrackPublished: (publication: LocalTrackPublication, participant: LocalParticipant) => void;
|
205
205
|
localTrackUnpublished: (publication: LocalTrackPublication, participant: LocalParticipant) => void;
|
206
206
|
participantMetadataChanged: (metadata: string | undefined, participant: RemoteParticipant | LocalParticipant) => void;
|
207
|
-
participantPermissionsChanged: (prevPermissions: ParticipantPermission, participant: RemoteParticipant | LocalParticipant) => void;
|
207
|
+
participantPermissionsChanged: (prevPermissions: ParticipantPermission | undefined, participant: RemoteParticipant | LocalParticipant) => void;
|
208
208
|
activeSpeakersChanged: (speakers: Array<Participant>) => void;
|
209
209
|
roomMetadataChanged: (metadata: string) => void;
|
210
210
|
dataReceived: (payload: Uint8Array, participant?: RemoteParticipant, kind?: DataPacket_Kind) => void;
|
@@ -12,6 +12,9 @@ export declare class ConnectionError extends LivekitError {
|
|
12
12
|
reason?: ConnectionErrorReason;
|
13
13
|
constructor(message?: string, reason?: ConnectionErrorReason, status?: number);
|
14
14
|
}
|
15
|
+
export declare class DeviceUnsupportedError extends LivekitError {
|
16
|
+
constructor(message?: string);
|
17
|
+
}
|
15
18
|
export declare class TrackInvalidError extends LivekitError {
|
16
19
|
constructor(message?: string);
|
17
20
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import 'webrtc-adapter';
|
2
2
|
import type { InternalRoomOptions } from '../../options';
|
3
|
-
import { DataPacket_Kind, ParticipantInfo
|
3
|
+
import { DataPacket_Kind, ParticipantInfo } from '../../proto/livekit_models';
|
4
4
|
import { DataChannelInfo, TrackPublishedResponse } from '../../proto/livekit_rtc';
|
5
5
|
import type RTCEngine from '../RTCEngine';
|
6
6
|
import LocalTrack from '../track/LocalTrack';
|
@@ -52,8 +52,6 @@ export default class LocalParticipant extends Participant {
|
|
52
52
|
* Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise
|
53
53
|
*/
|
54
54
|
setScreenShareEnabled(enabled: boolean, options?: ScreenShareCaptureOptions, publishOptions?: TrackPublishOptions): Promise<LocalTrackPublication | undefined>;
|
55
|
-
/** @internal */
|
56
|
-
setPermissions(permissions: ParticipantPermission): boolean;
|
57
55
|
/**
|
58
56
|
* Enable or disable publishing for a track by source. This serves as a simple
|
59
57
|
* way to manage the common tracks (camera, mic, or screen share).
|
@@ -85,7 +85,7 @@ export type ParticipantEventCallbacks = {
|
|
85
85
|
trackStreamStateChanged: (publication: RemoteTrackPublication, streamState: Track.StreamState) => void;
|
86
86
|
trackSubscriptionPermissionChanged: (publication: RemoteTrackPublication, status: TrackPublication.PermissionStatus) => void;
|
87
87
|
mediaDevicesError: (error: Error) => void;
|
88
|
-
participantPermissionsChanged: (prevPermissions
|
88
|
+
participantPermissionsChanged: (prevPermissions?: ParticipantPermission) => void;
|
89
89
|
trackSubscriptionStatusChanged: (publication: RemoteTrackPublication, status: TrackPublication.SubscriptionStatus) => void;
|
90
90
|
};
|
91
91
|
export {};
|
@@ -187,8 +187,8 @@ declare const backupCodecs: readonly [
|
|
187
187
|
"vp8",
|
188
188
|
"h264"
|
189
189
|
];
|
190
|
-
export type VideoCodec = typeof codecs[number];
|
191
|
-
export type BackupVideoCodec = typeof backupCodecs[number];
|
190
|
+
export type VideoCodec = (typeof codecs)[number];
|
191
|
+
export type BackupVideoCodec = (typeof backupCodecs)[number];
|
192
192
|
export declare function isBackupCodec(codec: string): codec is BackupVideoCodec;
|
193
193
|
/**
|
194
194
|
* scalability modes for svc, only supprot l3t3 now.
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "livekit-client",
|
3
|
-
"version": "1.6.
|
3
|
+
"version": "1.6.5",
|
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,40 +51,40 @@
|
|
51
51
|
"webrtc-adapter": "^8.1.1"
|
52
52
|
},
|
53
53
|
"devDependencies": {
|
54
|
-
"@babel/core": "7.20.
|
54
|
+
"@babel/core": "7.20.12",
|
55
55
|
"@babel/preset-env": "7.20.2",
|
56
56
|
"@changesets/changelog-github": "0.4.8",
|
57
57
|
"@changesets/cli": "2.26.0",
|
58
58
|
"@rollup/plugin-babel": "6.0.3",
|
59
|
-
"@rollup/plugin-commonjs": "24.0.
|
59
|
+
"@rollup/plugin-commonjs": "24.0.1",
|
60
60
|
"@rollup/plugin-json": "6.0.0",
|
61
61
|
"@rollup/plugin-node-resolve": "15.0.1",
|
62
|
-
"@types/jest": "29.
|
62
|
+
"@types/jest": "29.4.0",
|
63
63
|
"@types/sdp-transform": "2.4.5",
|
64
64
|
"@types/ua-parser-js": "0.7.36",
|
65
65
|
"@types/ws": "8.5.4",
|
66
|
-
"@typescript-eslint/eslint-plugin": "5.
|
67
|
-
"@typescript-eslint/parser": "5.
|
66
|
+
"@typescript-eslint/eslint-plugin": "5.50.0",
|
67
|
+
"@typescript-eslint/parser": "5.50.0",
|
68
68
|
"downlevel-dts": "^0.11.0",
|
69
|
-
"eslint": "8.
|
69
|
+
"eslint": "8.33.0",
|
70
70
|
"eslint-config-airbnb-typescript": "17.0.0",
|
71
|
-
"eslint-config-prettier": "8.
|
72
|
-
"eslint-plugin-import": "2.
|
71
|
+
"eslint-config-prettier": "8.6.0",
|
72
|
+
"eslint-plugin-import": "2.27.5",
|
73
73
|
"gh-pages": "4.0.0",
|
74
|
-
"jest": "29.
|
75
|
-
"prettier": "2.8.
|
76
|
-
"rollup": "3.
|
74
|
+
"jest": "29.4.1",
|
75
|
+
"prettier": "2.8.3",
|
76
|
+
"rollup": "3.12.1",
|
77
77
|
"rollup-plugin-delete": "^2.0.0",
|
78
78
|
"rollup-plugin-filesize": "9.1.2",
|
79
79
|
"rollup-plugin-re": "1.0.7",
|
80
80
|
"rollup-plugin-terser": "7.0.2",
|
81
81
|
"rollup-plugin-typescript2": "0.34.1",
|
82
|
-
"ts-jest": "29.0.
|
83
|
-
"ts-proto": "1.
|
84
|
-
"typedoc": "0.23.
|
82
|
+
"ts-jest": "29.0.5",
|
83
|
+
"ts-proto": "1.139.0",
|
84
|
+
"typedoc": "0.23.24",
|
85
85
|
"typedoc-plugin-no-inherit": "1.4.0",
|
86
|
-
"typescript": "4.9.
|
87
|
-
"vite": "4.0.
|
86
|
+
"typescript": "4.9.5",
|
87
|
+
"vite": "4.0.4"
|
88
88
|
},
|
89
89
|
"browserslist": [
|
90
90
|
"safari >= 11",
|
package/src/api/SignalClient.ts
CHANGED
@@ -5,6 +5,7 @@ import {
|
|
5
5
|
ClientInfo,
|
6
6
|
DisconnectReason,
|
7
7
|
ParticipantInfo,
|
8
|
+
ReconnectReason,
|
8
9
|
Room,
|
9
10
|
SpeakerInfo,
|
10
11
|
VideoLayer,
|
@@ -40,6 +41,9 @@ interface ConnectOpts {
|
|
40
41
|
/** internal */
|
41
42
|
reconnect?: boolean;
|
42
43
|
|
44
|
+
/** internal */
|
45
|
+
reconnectReason?: number;
|
46
|
+
|
43
47
|
/** internal */
|
44
48
|
sid?: string;
|
45
49
|
|
@@ -89,6 +93,9 @@ export class SignalClient {
|
|
89
93
|
|
90
94
|
useJSON: boolean;
|
91
95
|
|
96
|
+
/** signal rtt in milliseconds */
|
97
|
+
rtt: number = 0;
|
98
|
+
|
92
99
|
/** simulate signaling latency by delaying messages */
|
93
100
|
signalLatency?: number;
|
94
101
|
|
@@ -166,7 +173,12 @@ export class SignalClient {
|
|
166
173
|
return res as JoinResponse;
|
167
174
|
}
|
168
175
|
|
169
|
-
async reconnect(
|
176
|
+
async reconnect(
|
177
|
+
url: string,
|
178
|
+
token: string,
|
179
|
+
sid?: string,
|
180
|
+
reason?: ReconnectReason,
|
181
|
+
): Promise<ReconnectResponse | void> {
|
170
182
|
if (!this.options) {
|
171
183
|
log.warn('attempted to reconnect without signal options being set, ignoring');
|
172
184
|
return;
|
@@ -175,7 +187,12 @@ export class SignalClient {
|
|
175
187
|
// clear ping interval and restart it once reconnected
|
176
188
|
this.clearPingInterval();
|
177
189
|
|
178
|
-
const res = await this.connect(url, token, {
|
190
|
+
const res = await this.connect(url, token, {
|
191
|
+
...this.options,
|
192
|
+
reconnect: true,
|
193
|
+
sid,
|
194
|
+
reconnectReason: reason,
|
195
|
+
});
|
179
196
|
return res;
|
180
197
|
}
|
181
198
|
|
@@ -440,10 +457,18 @@ export class SignalClient {
|
|
440
457
|
}
|
441
458
|
|
442
459
|
sendPing() {
|
460
|
+
/** send both of ping and pingReq for compatibility to old and new server */
|
443
461
|
this.sendRequest({
|
444
462
|
$case: 'ping',
|
445
463
|
ping: Date.now(),
|
446
464
|
});
|
465
|
+
this.sendRequest({
|
466
|
+
$case: 'pingReq',
|
467
|
+
pingReq: {
|
468
|
+
timestamp: Date.now(),
|
469
|
+
rtt: this.rtt,
|
470
|
+
},
|
471
|
+
});
|
447
472
|
}
|
448
473
|
|
449
474
|
async sendLeave() {
|
@@ -493,7 +518,11 @@ export class SignalClient {
|
|
493
518
|
}
|
494
519
|
|
495
520
|
private handleSignalResponse(res: SignalResponse) {
|
496
|
-
const msg = res.message
|
521
|
+
const msg = res.message;
|
522
|
+
if (msg == undefined) {
|
523
|
+
log.debug('received unsupported message');
|
524
|
+
return;
|
525
|
+
}
|
497
526
|
if (msg.$case === 'answer') {
|
498
527
|
const sd = fromProtoSessionDescription(msg.answer);
|
499
528
|
if (this.onAnswer) {
|
@@ -559,6 +588,9 @@ export class SignalClient {
|
|
559
588
|
}
|
560
589
|
} else if (msg.$case === 'pong') {
|
561
590
|
this.resetPingTimeout();
|
591
|
+
} else if (msg.$case === 'pongResp') {
|
592
|
+
this.rtt = Date.now() - msg.pongResp.lastPingTimestamp;
|
593
|
+
this.resetPingTimeout();
|
562
594
|
} else {
|
563
595
|
log.debug('unsupported message', msg);
|
564
596
|
}
|
@@ -578,6 +610,10 @@ export class SignalClient {
|
|
578
610
|
log.error('websocket error', ev);
|
579
611
|
}
|
580
612
|
|
613
|
+
/**
|
614
|
+
* Resets the ping timeout and starts a new timeout.
|
615
|
+
* Call this after receiving a pong message
|
616
|
+
*/
|
581
617
|
private resetPingTimeout() {
|
582
618
|
this.clearPingTimeout();
|
583
619
|
if (!this.pingTimeoutDuration) {
|
@@ -596,6 +632,9 @@ export class SignalClient {
|
|
596
632
|
}, this.pingTimeoutDuration * 1000);
|
597
633
|
}
|
598
634
|
|
635
|
+
/**
|
636
|
+
* Clears ping timeout (does not start a new timeout)
|
637
|
+
*/
|
599
638
|
private clearPingTimeout() {
|
600
639
|
if (this.pingTimeout) {
|
601
640
|
CriticalTimers.clearTimeout(this.pingTimeout);
|
@@ -694,6 +733,10 @@ function createConnectionParams(token: string, info: ClientInfo, opts: ConnectOp
|
|
694
733
|
params.set('adaptive_stream', '1');
|
695
734
|
}
|
696
735
|
|
736
|
+
if (opts.reconnectReason) {
|
737
|
+
params.set('reconnect_reason', opts.reconnectReason.toString());
|
738
|
+
}
|
739
|
+
|
697
740
|
// @ts-ignore
|
698
741
|
if (navigator.connection?.type) {
|
699
742
|
// @ts-ignore
|
@@ -9,7 +9,7 @@ import { TURNCheck } from './checks/turn';
|
|
9
9
|
import { WebRTCCheck } from './checks/webrtc';
|
10
10
|
import { WebSocketCheck } from './checks/websocket';
|
11
11
|
|
12
|
-
export type { CheckInfo };
|
12
|
+
export type { CheckInfo, CheckStatus };
|
13
13
|
|
14
14
|
export class ConnectionCheck extends (EventEmitter as new () => TypedEmitter<ConnectionCheckCallbacks>) {
|
15
15
|
token: string;
|
@@ -172,7 +172,7 @@ export const Timestamp = {
|
|
172
172
|
declare var self: any | undefined;
|
173
173
|
declare var window: any | undefined;
|
174
174
|
declare var global: any | undefined;
|
175
|
-
var
|
175
|
+
var tsProtoGlobalThis: any = (() => {
|
176
176
|
if (typeof globalThis !== "undefined") {
|
177
177
|
return globalThis;
|
178
178
|
}
|
@@ -202,7 +202,7 @@ export type Exact<P, I extends P> = P extends Builtin ? P
|
|
202
202
|
|
203
203
|
function longToNumber(long: Long): number {
|
204
204
|
if (long.gt(Number.MAX_SAFE_INTEGER)) {
|
205
|
-
throw new
|
205
|
+
throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
206
206
|
}
|
207
207
|
return long.toNumber();
|
208
208
|
}
|
@@ -287,6 +287,57 @@ export function disconnectReasonToJSON(object: DisconnectReason): string {
|
|
287
287
|
}
|
288
288
|
}
|
289
289
|
|
290
|
+
export enum ReconnectReason {
|
291
|
+
REASON_UNKOWN = 0,
|
292
|
+
REASON_SIGNAL_DISCONNECTED = 1,
|
293
|
+
REASON_PUBLISHER_FAILED = 2,
|
294
|
+
REASON_SUBSCRIBER_FAILED = 3,
|
295
|
+
REASON_SWITCH_CANDIDATE = 4,
|
296
|
+
UNRECOGNIZED = -1,
|
297
|
+
}
|
298
|
+
|
299
|
+
export function reconnectReasonFromJSON(object: any): ReconnectReason {
|
300
|
+
switch (object) {
|
301
|
+
case 0:
|
302
|
+
case "REASON_UNKOWN":
|
303
|
+
return ReconnectReason.REASON_UNKOWN;
|
304
|
+
case 1:
|
305
|
+
case "REASON_SIGNAL_DISCONNECTED":
|
306
|
+
return ReconnectReason.REASON_SIGNAL_DISCONNECTED;
|
307
|
+
case 2:
|
308
|
+
case "REASON_PUBLISHER_FAILED":
|
309
|
+
return ReconnectReason.REASON_PUBLISHER_FAILED;
|
310
|
+
case 3:
|
311
|
+
case "REASON_SUBSCRIBER_FAILED":
|
312
|
+
return ReconnectReason.REASON_SUBSCRIBER_FAILED;
|
313
|
+
case 4:
|
314
|
+
case "REASON_SWITCH_CANDIDATE":
|
315
|
+
return ReconnectReason.REASON_SWITCH_CANDIDATE;
|
316
|
+
case -1:
|
317
|
+
case "UNRECOGNIZED":
|
318
|
+
default:
|
319
|
+
return ReconnectReason.UNRECOGNIZED;
|
320
|
+
}
|
321
|
+
}
|
322
|
+
|
323
|
+
export function reconnectReasonToJSON(object: ReconnectReason): string {
|
324
|
+
switch (object) {
|
325
|
+
case ReconnectReason.REASON_UNKOWN:
|
326
|
+
return "REASON_UNKOWN";
|
327
|
+
case ReconnectReason.REASON_SIGNAL_DISCONNECTED:
|
328
|
+
return "REASON_SIGNAL_DISCONNECTED";
|
329
|
+
case ReconnectReason.REASON_PUBLISHER_FAILED:
|
330
|
+
return "REASON_PUBLISHER_FAILED";
|
331
|
+
case ReconnectReason.REASON_SUBSCRIBER_FAILED:
|
332
|
+
return "REASON_SUBSCRIBER_FAILED";
|
333
|
+
case ReconnectReason.REASON_SWITCH_CANDIDATE:
|
334
|
+
return "REASON_SWITCH_CANDIDATE";
|
335
|
+
case ReconnectReason.UNRECOGNIZED:
|
336
|
+
default:
|
337
|
+
return "UNRECOGNIZED";
|
338
|
+
}
|
339
|
+
}
|
340
|
+
|
290
341
|
export interface Room {
|
291
342
|
sid: string;
|
292
343
|
name: string;
|
@@ -312,6 +363,8 @@ export interface ParticipantPermission {
|
|
312
363
|
canPublish: boolean;
|
313
364
|
/** allow participant to publish data */
|
314
365
|
canPublishData: boolean;
|
366
|
+
/** sources that are allowed to be published */
|
367
|
+
canPublishSources: TrackSource[];
|
315
368
|
/** indicates that it's hidden to others */
|
316
369
|
hidden: boolean;
|
317
370
|
/** indicates it's a recorder instance */
|
@@ -940,7 +993,14 @@ export const Codec = {
|
|
940
993
|
};
|
941
994
|
|
942
995
|
function createBaseParticipantPermission(): ParticipantPermission {
|
943
|
-
return {
|
996
|
+
return {
|
997
|
+
canSubscribe: false,
|
998
|
+
canPublish: false,
|
999
|
+
canPublishData: false,
|
1000
|
+
canPublishSources: [],
|
1001
|
+
hidden: false,
|
1002
|
+
recorder: false,
|
1003
|
+
};
|
944
1004
|
}
|
945
1005
|
|
946
1006
|
export const ParticipantPermission = {
|
@@ -954,6 +1014,11 @@ export const ParticipantPermission = {
|
|
954
1014
|
if (message.canPublishData === true) {
|
955
1015
|
writer.uint32(24).bool(message.canPublishData);
|
956
1016
|
}
|
1017
|
+
writer.uint32(74).fork();
|
1018
|
+
for (const v of message.canPublishSources) {
|
1019
|
+
writer.int32(v);
|
1020
|
+
}
|
1021
|
+
writer.ldelim();
|
957
1022
|
if (message.hidden === true) {
|
958
1023
|
writer.uint32(56).bool(message.hidden);
|
959
1024
|
}
|
@@ -979,6 +1044,16 @@ export const ParticipantPermission = {
|
|
979
1044
|
case 3:
|
980
1045
|
message.canPublishData = reader.bool();
|
981
1046
|
break;
|
1047
|
+
case 9:
|
1048
|
+
if ((tag & 7) === 2) {
|
1049
|
+
const end2 = reader.uint32() + reader.pos;
|
1050
|
+
while (reader.pos < end2) {
|
1051
|
+
message.canPublishSources.push(reader.int32() as any);
|
1052
|
+
}
|
1053
|
+
} else {
|
1054
|
+
message.canPublishSources.push(reader.int32() as any);
|
1055
|
+
}
|
1056
|
+
break;
|
982
1057
|
case 7:
|
983
1058
|
message.hidden = reader.bool();
|
984
1059
|
break;
|
@@ -998,6 +1073,9 @@ export const ParticipantPermission = {
|
|
998
1073
|
canSubscribe: isSet(object.canSubscribe) ? Boolean(object.canSubscribe) : false,
|
999
1074
|
canPublish: isSet(object.canPublish) ? Boolean(object.canPublish) : false,
|
1000
1075
|
canPublishData: isSet(object.canPublishData) ? Boolean(object.canPublishData) : false,
|
1076
|
+
canPublishSources: Array.isArray(object?.canPublishSources)
|
1077
|
+
? object.canPublishSources.map((e: any) => trackSourceFromJSON(e))
|
1078
|
+
: [],
|
1001
1079
|
hidden: isSet(object.hidden) ? Boolean(object.hidden) : false,
|
1002
1080
|
recorder: isSet(object.recorder) ? Boolean(object.recorder) : false,
|
1003
1081
|
};
|
@@ -1008,6 +1086,11 @@ export const ParticipantPermission = {
|
|
1008
1086
|
message.canSubscribe !== undefined && (obj.canSubscribe = message.canSubscribe);
|
1009
1087
|
message.canPublish !== undefined && (obj.canPublish = message.canPublish);
|
1010
1088
|
message.canPublishData !== undefined && (obj.canPublishData = message.canPublishData);
|
1089
|
+
if (message.canPublishSources) {
|
1090
|
+
obj.canPublishSources = message.canPublishSources.map((e) => trackSourceToJSON(e));
|
1091
|
+
} else {
|
1092
|
+
obj.canPublishSources = [];
|
1093
|
+
}
|
1011
1094
|
message.hidden !== undefined && (obj.hidden = message.hidden);
|
1012
1095
|
message.recorder !== undefined && (obj.recorder = message.recorder);
|
1013
1096
|
return obj;
|
@@ -1018,6 +1101,7 @@ export const ParticipantPermission = {
|
|
1018
1101
|
message.canSubscribe = object.canSubscribe ?? false;
|
1019
1102
|
message.canPublish = object.canPublish ?? false;
|
1020
1103
|
message.canPublishData = object.canPublishData ?? false;
|
1104
|
+
message.canPublishSources = object.canPublishSources?.map((e) => e) || [];
|
1021
1105
|
message.hidden = object.hidden ?? false;
|
1022
1106
|
message.recorder = object.recorder ?? false;
|
1023
1107
|
return message;
|
@@ -2940,7 +3024,7 @@ export const TimedVersion = {
|
|
2940
3024
|
declare var self: any | undefined;
|
2941
3025
|
declare var window: any | undefined;
|
2942
3026
|
declare var global: any | undefined;
|
2943
|
-
var
|
3027
|
+
var tsProtoGlobalThis: any = (() => {
|
2944
3028
|
if (typeof globalThis !== "undefined") {
|
2945
3029
|
return globalThis;
|
2946
3030
|
}
|
@@ -2957,10 +3041,10 @@ var globalThis: any = (() => {
|
|
2957
3041
|
})();
|
2958
3042
|
|
2959
3043
|
function bytesFromBase64(b64: string): Uint8Array {
|
2960
|
-
if (
|
2961
|
-
return Uint8Array.from(
|
3044
|
+
if (tsProtoGlobalThis.Buffer) {
|
3045
|
+
return Uint8Array.from(tsProtoGlobalThis.Buffer.from(b64, "base64"));
|
2962
3046
|
} else {
|
2963
|
-
const bin =
|
3047
|
+
const bin = tsProtoGlobalThis.atob(b64);
|
2964
3048
|
const arr = new Uint8Array(bin.length);
|
2965
3049
|
for (let i = 0; i < bin.length; ++i) {
|
2966
3050
|
arr[i] = bin.charCodeAt(i);
|
@@ -2970,14 +3054,14 @@ function bytesFromBase64(b64: string): Uint8Array {
|
|
2970
3054
|
}
|
2971
3055
|
|
2972
3056
|
function base64FromBytes(arr: Uint8Array): string {
|
2973
|
-
if (
|
2974
|
-
return
|
3057
|
+
if (tsProtoGlobalThis.Buffer) {
|
3058
|
+
return tsProtoGlobalThis.Buffer.from(arr).toString("base64");
|
2975
3059
|
} else {
|
2976
3060
|
const bin: string[] = [];
|
2977
3061
|
arr.forEach((byte) => {
|
2978
3062
|
bin.push(String.fromCharCode(byte));
|
2979
3063
|
});
|
2980
|
-
return
|
3064
|
+
return tsProtoGlobalThis.btoa(bin.join(""));
|
2981
3065
|
}
|
2982
3066
|
}
|
2983
3067
|
|
@@ -3017,7 +3101,7 @@ function fromJsonTimestamp(o: any): Date {
|
|
3017
3101
|
|
3018
3102
|
function longToNumber(long: Long): number {
|
3019
3103
|
if (long.gt(Number.MAX_SAFE_INTEGER)) {
|
3020
|
-
throw new
|
3104
|
+
throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
3021
3105
|
}
|
3022
3106
|
return long.toNumber();
|
3023
3107
|
}
|