livekit-client 1.7.1 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. package/README.md +21 -1
  2. package/dist/livekit-client.esm.mjs +14241 -12994
  3. package/dist/livekit-client.esm.mjs.map +1 -1
  4. package/dist/livekit-client.umd.js +1 -1
  5. package/dist/livekit-client.umd.js.map +1 -1
  6. package/dist/src/api/SignalClient.d.ts +11 -10
  7. package/dist/src/api/SignalClient.d.ts.map +1 -1
  8. package/dist/src/connectionHelper/ConnectionCheck.d.ts +1 -1
  9. package/dist/src/connectionHelper/ConnectionCheck.d.ts.map +1 -1
  10. package/dist/src/connectionHelper/checks/Checker.d.ts +1 -1
  11. package/dist/src/connectionHelper/checks/Checker.d.ts.map +1 -1
  12. package/dist/src/index.d.ts +7 -7
  13. package/dist/src/index.d.ts.map +1 -1
  14. package/dist/src/proto/google/protobuf/timestamp.d.ts.map +1 -1
  15. package/dist/src/proto/livekit_models.d.ts +37 -0
  16. package/dist/src/proto/livekit_models.d.ts.map +1 -1
  17. package/dist/src/proto/livekit_rtc.d.ts +347 -75
  18. package/dist/src/proto/livekit_rtc.d.ts.map +1 -1
  19. package/dist/src/room/RTCEngine.d.ts +12 -3
  20. package/dist/src/room/RTCEngine.d.ts.map +1 -1
  21. package/dist/src/room/ReconnectPolicy.d.ts +1 -0
  22. package/dist/src/room/ReconnectPolicy.d.ts.map +1 -1
  23. package/dist/src/room/RegionUrlProvider.d.ts +14 -0
  24. package/dist/src/room/RegionUrlProvider.d.ts.map +1 -0
  25. package/dist/src/room/Room.d.ts +23 -15
  26. package/dist/src/room/Room.d.ts.map +1 -1
  27. package/dist/src/room/errors.d.ts +2 -1
  28. package/dist/src/room/errors.d.ts.map +1 -1
  29. package/dist/src/room/events.d.ts +23 -2
  30. package/dist/src/room/events.d.ts.map +1 -1
  31. package/dist/src/room/participant/LocalParticipant.d.ts +14 -2
  32. package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
  33. package/dist/src/room/participant/Participant.d.ts +4 -2
  34. package/dist/src/room/participant/Participant.d.ts.map +1 -1
  35. package/dist/src/room/participant/RemoteParticipant.d.ts +2 -2
  36. package/dist/src/room/participant/RemoteParticipant.d.ts.map +1 -1
  37. package/dist/src/room/participant/publishUtils.d.ts.map +1 -1
  38. package/dist/src/room/track/LocalAudioTrack.d.ts.map +1 -1
  39. package/dist/src/room/track/LocalTrack.d.ts +4 -3
  40. package/dist/src/room/track/LocalTrack.d.ts.map +1 -1
  41. package/dist/src/room/track/LocalTrackPublication.d.ts +1 -1
  42. package/dist/src/room/track/LocalTrackPublication.d.ts.map +1 -1
  43. package/dist/src/room/track/LocalVideoTrack.d.ts.map +1 -1
  44. package/dist/src/room/track/RemoteAudioTrack.d.ts +1 -1
  45. package/dist/src/room/track/RemoteAudioTrack.d.ts.map +1 -1
  46. package/dist/src/room/track/RemoteTrackPublication.d.ts +1 -1
  47. package/dist/src/room/track/RemoteTrackPublication.d.ts.map +1 -1
  48. package/dist/src/room/track/RemoteVideoTrack.d.ts +1 -1
  49. package/dist/src/room/track/RemoteVideoTrack.d.ts.map +1 -1
  50. package/dist/src/room/track/Track.d.ts +3 -1
  51. package/dist/src/room/track/Track.d.ts.map +1 -1
  52. package/dist/src/room/track/create.d.ts.map +1 -1
  53. package/dist/src/room/types.d.ts +5 -0
  54. package/dist/src/room/types.d.ts.map +1 -1
  55. package/dist/src/room/utils.d.ts +4 -0
  56. package/dist/src/room/utils.d.ts.map +1 -1
  57. package/dist/ts4.2/src/api/SignalClient.d.ts +14 -10
  58. package/dist/ts4.2/src/connectionHelper/ConnectionCheck.d.ts +1 -1
  59. package/dist/ts4.2/src/connectionHelper/checks/Checker.d.ts +1 -1
  60. package/dist/ts4.2/src/index.d.ts +7 -6
  61. package/dist/ts4.2/src/proto/livekit_models.d.ts +37 -0
  62. package/dist/ts4.2/src/proto/livekit_rtc.d.ts +380 -84
  63. package/dist/ts4.2/src/room/RTCEngine.d.ts +12 -3
  64. package/dist/ts4.2/src/room/ReconnectPolicy.d.ts +1 -0
  65. package/dist/ts4.2/src/room/RegionUrlProvider.d.ts +14 -0
  66. package/dist/ts4.2/src/room/Room.d.ts +23 -15
  67. package/dist/ts4.2/src/room/errors.d.ts +2 -1
  68. package/dist/ts4.2/src/room/events.d.ts +23 -2
  69. package/dist/ts4.2/src/room/participant/LocalParticipant.d.ts +14 -2
  70. package/dist/ts4.2/src/room/participant/Participant.d.ts +4 -2
  71. package/dist/ts4.2/src/room/participant/RemoteParticipant.d.ts +2 -2
  72. package/dist/ts4.2/src/room/track/LocalTrack.d.ts +4 -3
  73. package/dist/ts4.2/src/room/track/LocalTrackPublication.d.ts +1 -1
  74. package/dist/ts4.2/src/room/track/RemoteAudioTrack.d.ts +1 -1
  75. package/dist/ts4.2/src/room/track/RemoteTrackPublication.d.ts +1 -1
  76. package/dist/ts4.2/src/room/track/RemoteVideoTrack.d.ts +1 -1
  77. package/dist/ts4.2/src/room/track/Track.d.ts +3 -1
  78. package/dist/ts4.2/src/room/types.d.ts +5 -0
  79. package/dist/ts4.2/src/room/utils.d.ts +4 -0
  80. package/package.json +21 -20
  81. package/src/api/SignalClient.ts +41 -29
  82. package/src/connectionHelper/ConnectionCheck.ts +1 -2
  83. package/src/connectionHelper/checks/Checker.ts +1 -1
  84. package/src/connectionHelper/checks/reconnect.ts +1 -1
  85. package/src/index.ts +9 -8
  86. package/src/proto/google/protobuf/timestamp.ts +15 -6
  87. package/src/proto/livekit_models.ts +917 -221
  88. package/src/proto/livekit_rtc.ts +1053 -279
  89. package/src/room/RTCEngine.ts +171 -47
  90. package/src/room/ReconnectPolicy.ts +2 -0
  91. package/src/room/RegionUrlProvider.ts +73 -0
  92. package/src/room/Room.ts +278 -177
  93. package/src/room/errors.ts +1 -0
  94. package/src/room/events.ts +24 -0
  95. package/src/room/participant/LocalParticipant.ts +30 -7
  96. package/src/room/participant/Participant.ts +27 -3
  97. package/src/room/participant/RemoteParticipant.ts +6 -3
  98. package/src/room/participant/publishUtils.test.ts +1 -1
  99. package/src/room/participant/publishUtils.ts +1 -1
  100. package/src/room/track/LocalAudioTrack.ts +14 -7
  101. package/src/room/track/LocalTrack.ts +23 -9
  102. package/src/room/track/LocalTrackPublication.ts +1 -1
  103. package/src/room/track/LocalVideoTrack.ts +15 -9
  104. package/src/room/track/RemoteAudioTrack.ts +1 -1
  105. package/src/room/track/RemoteTrackPublication.ts +4 -3
  106. package/src/room/track/RemoteVideoTrack.test.ts +1 -1
  107. package/src/room/track/RemoteVideoTrack.ts +8 -7
  108. package/src/room/track/Track.ts +46 -31
  109. package/src/room/track/create.ts +2 -2
  110. package/src/room/types.ts +17 -0
  111. package/src/room/utils.ts +53 -0
@@ -33,7 +33,7 @@ import {
33
33
  } from '../proto/livekit_rtc';
34
34
  import { ConnectionError, ConnectionErrorReason } from '../room/errors';
35
35
  import CriticalTimers from '../room/timers';
36
- import { getClientInfo, Mutex, sleep } from '../room/utils';
36
+ import { Mutex, getClientInfo, isReactNative, sleep } from '../room/utils';
37
37
 
38
38
  // internal options
39
39
  interface ConnectOpts {
@@ -216,7 +216,7 @@ export class SignalClient {
216
216
  return new Promise<JoinResponse | ReconnectResponse | void>(async (resolve, reject) => {
217
217
  const abortHandler = async () => {
218
218
  await this.close();
219
- reject(new ConnectionError('room connection has been cancelled'));
219
+ reject(new ConnectionError('room connection has been cancelled (signal)'));
220
220
  };
221
221
 
222
222
  if (abortSignal?.aborted) {
@@ -234,7 +234,7 @@ export class SignalClient {
234
234
  if (!this.isConnected) {
235
235
  try {
236
236
  const resp = await fetch(`http${url.substring(2)}/validate${params}`);
237
- if (!resp.ok) {
237
+ if (resp.status.toFixed(0).startsWith('4')) {
238
238
  const msg = await resp.text();
239
239
  reject(new ConnectionError(msg, ConnectionErrorReason.NotAllowed, resp.status));
240
240
  } else {
@@ -374,7 +374,7 @@ export class SignalClient {
374
374
  // answer a server-initiated offer
375
375
  sendAnswer(answer: RTCSessionDescriptionInit) {
376
376
  log.debug('sending answer');
377
- this.sendRequest({
377
+ return this.sendRequest({
378
378
  $case: 'answer',
379
379
  answer: toProtoSessionDescription(answer),
380
380
  });
@@ -382,7 +382,7 @@ export class SignalClient {
382
382
 
383
383
  sendIceCandidate(candidate: RTCIceCandidateInit, target: SignalTarget) {
384
384
  log.trace('sending ice candidate', candidate);
385
- this.sendRequest({
385
+ return this.sendRequest({
386
386
  $case: 'trickle',
387
387
  trickle: {
388
388
  candidateInit: JSON.stringify(candidate),
@@ -392,7 +392,7 @@ export class SignalClient {
392
392
  }
393
393
 
394
394
  sendMuteTrack(trackSid: string, muted: boolean) {
395
- this.sendRequest({
395
+ return this.sendRequest({
396
396
  $case: 'mute',
397
397
  mute: {
398
398
  sid: trackSid,
@@ -401,13 +401,23 @@ export class SignalClient {
401
401
  });
402
402
  }
403
403
 
404
- sendAddTrack(req: AddTrackRequest): void {
405
- this.sendRequest({
404
+ sendAddTrack(req: AddTrackRequest) {
405
+ return this.sendRequest({
406
406
  $case: 'addTrack',
407
407
  addTrack: AddTrackRequest.fromPartial(req),
408
408
  });
409
409
  }
410
410
 
411
+ sendUpdateLocalMetadata(metadata: string, name: string) {
412
+ return this.sendRequest({
413
+ $case: 'updateMetadata',
414
+ updateMetadata: {
415
+ metadata,
416
+ name,
417
+ },
418
+ });
419
+ }
420
+
411
421
  sendUpdateTrackSettings(settings: UpdateTrackSettings) {
412
422
  this.sendRequest({
413
423
  $case: 'trackSetting',
@@ -416,21 +426,21 @@ export class SignalClient {
416
426
  }
417
427
 
418
428
  sendUpdateSubscription(sub: UpdateSubscription) {
419
- this.sendRequest({
429
+ return this.sendRequest({
420
430
  $case: 'subscription',
421
431
  subscription: sub,
422
432
  });
423
433
  }
424
434
 
425
435
  sendSyncState(sync: SyncState) {
426
- this.sendRequest({
436
+ return this.sendRequest({
427
437
  $case: 'syncState',
428
438
  syncState: sync,
429
439
  });
430
440
  }
431
441
 
432
442
  sendUpdateVideoLayers(trackSid: string, layers: VideoLayer[]) {
433
- this.sendRequest({
443
+ return this.sendRequest({
434
444
  $case: 'updateLayers',
435
445
  updateLayers: {
436
446
  trackSid,
@@ -440,7 +450,7 @@ export class SignalClient {
440
450
  }
441
451
 
442
452
  sendUpdateSubscriptionPermissions(allParticipants: boolean, trackPermissions: TrackPermission[]) {
443
- this.sendRequest({
453
+ return this.sendRequest({
444
454
  $case: 'subscriptionPermission',
445
455
  subscriptionPermission: {
446
456
  allParticipants,
@@ -450,7 +460,7 @@ export class SignalClient {
450
460
  }
451
461
 
452
462
  sendSimulateScenario(scenario: SimulateScenario) {
453
- this.sendRequest({
463
+ return this.sendRequest({
454
464
  $case: 'simulate',
455
465
  simulate: scenario,
456
466
  });
@@ -458,21 +468,23 @@ export class SignalClient {
458
468
 
459
469
  sendPing() {
460
470
  /** send both of ping and pingReq for compatibility to old and new server */
461
- this.sendRequest({
462
- $case: 'ping',
463
- ping: Date.now(),
464
- });
465
- this.sendRequest({
466
- $case: 'pingReq',
467
- pingReq: {
468
- timestamp: Date.now(),
469
- rtt: this.rtt,
470
- },
471
- });
472
- }
473
-
474
- async sendLeave() {
475
- await this.sendRequest({
471
+ return Promise.all([
472
+ this.sendRequest({
473
+ $case: 'ping',
474
+ ping: Date.now(),
475
+ }),
476
+ this.sendRequest({
477
+ $case: 'pingReq',
478
+ pingReq: {
479
+ timestamp: Date.now(),
480
+ rtt: this.rtt,
481
+ },
482
+ }),
483
+ ]);
484
+ }
485
+
486
+ sendLeave() {
487
+ return this.sendRequest({
476
488
  $case: 'leave',
477
489
  leave: {
478
490
  canReconnect: false,
@@ -706,7 +718,7 @@ function createConnectionParams(token: string, info: ClientInfo, opts: ConnectOp
706
718
  params.set('auto_subscribe', opts.autoSubscribe ? '1' : '0');
707
719
 
708
720
  // ClientInfo
709
- params.set('sdk', 'js');
721
+ params.set('sdk', isReactNative() ? 'reactnative' : 'js');
710
722
  params.set('version', info.version!);
711
723
  params.set('protocol', info.protocol!.toString());
712
724
  if (info.deviceModel) {
@@ -1,7 +1,6 @@
1
1
  import EventEmitter from 'events';
2
2
  import type TypedEmitter from 'typed-emitter';
3
-
4
- import { Checker, CheckInfo, CheckStatus, InstantiableCheck } from './checks/Checker';
3
+ import { CheckInfo, CheckStatus, Checker, InstantiableCheck } from './checks/Checker';
5
4
  import { PublishAudioCheck } from './checks/publishAudio';
6
5
  import { PublishVideoCheck } from './checks/publishVideo';
7
6
  import { ReconnectCheck } from './checks/reconnect';
@@ -1,8 +1,8 @@
1
1
  import { EventEmitter } from 'events';
2
2
  import type TypedEmitter from 'typed-emitter';
3
3
  import type { RoomConnectOptions, RoomOptions } from '../../options';
4
- import Room, { ConnectionState } from '../../room/Room';
5
4
  import type RTCEngine from '../../room/RTCEngine';
5
+ import Room, { ConnectionState } from '../../room/Room';
6
6
 
7
7
  type LogMessage = {
8
8
  level: 'info' | 'warning' | 'error';
@@ -1,5 +1,5 @@
1
- import { RoomEvent } from '../../room/events';
2
1
  import { ConnectionState } from '../../room/Room';
2
+ import { RoomEvent } from '../../room/events';
3
3
  import { Checker } from './Checker';
4
4
 
5
5
  export class ReconnectCheck extends Checker {
package/src/index.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import { LogLevel, setLogExtension, setLogLevel } from './logger';
2
2
  import { DataPacket_Kind, DisconnectReason, VideoQuality } from './proto/livekit_models';
3
3
  import DefaultReconnectPolicy from './room/DefaultReconnectPolicy';
4
+ import Room, { ConnectionState, RoomState } from './room/Room';
4
5
  import LocalParticipant from './room/participant/LocalParticipant';
5
6
  import Participant, { ConnectionQuality } from './room/participant/Participant';
6
7
  import type { ParticipantTrackPermission } from './room/participant/ParticipantTrackPermission';
7
8
  import RemoteParticipant from './room/participant/RemoteParticipant';
8
- import Room, { ConnectionState, RoomState } from './room/Room';
9
+ import CriticalTimers from './room/timers';
9
10
  import LocalAudioTrack from './room/track/LocalAudioTrack';
10
11
  import LocalTrack from './room/track/LocalTrack';
11
12
  import LocalTrackPublication from './room/track/LocalTrackPublication';
@@ -13,25 +14,24 @@ import LocalVideoTrack from './room/track/LocalVideoTrack';
13
14
  import RemoteAudioTrack from './room/track/RemoteAudioTrack';
14
15
  import RemoteTrack from './room/track/RemoteTrack';
15
16
  import RemoteTrackPublication from './room/track/RemoteTrackPublication';
16
- import RemoteVideoTrack from './room/track/RemoteVideoTrack';
17
- import type { ElementInfo } from './room/track/RemoteVideoTrack';
17
+ import RemoteVideoTrack, { type ElementInfo } from './room/track/RemoteVideoTrack';
18
18
  import { TrackPublication } from './room/track/TrackPublication';
19
- import CriticalTimers from './room/timers';
19
+ import type { LiveKitReactNativeInfo } from './room/types';
20
20
  import {
21
+ type AudioAnalyserOptions,
22
+ createAudioAnalyser,
21
23
  getEmptyAudioStreamTrack,
22
24
  getEmptyVideoStreamTrack,
23
25
  isBrowserSupported,
24
- supportsAdaptiveStream,
25
26
  supportsAV1,
27
+ supportsAdaptiveStream,
26
28
  supportsDynacast,
27
- createAudioAnalyser,
28
29
  } from './room/utils';
29
30
 
30
- import type { AudioAnalyserOptions } from './room/utils';
31
-
32
31
  export * from './options';
33
32
  export * from './room/errors';
34
33
  export * from './room/events';
34
+ export type { DataPublishOptions, SimulationScenario } from './room/types';
35
35
  export * from './room/track/create';
36
36
  export * from './room/track/options';
37
37
  export * from './room/track/Track';
@@ -73,4 +73,5 @@ export {
73
73
  ElementInfo,
74
74
  DefaultReconnectPolicy,
75
75
  CriticalTimers,
76
+ LiveKitReactNativeInfo,
76
77
  };
@@ -127,22 +127,31 @@ export const Timestamp = {
127
127
  },
128
128
 
129
129
  decode(input: _m0.Reader | Uint8Array, length?: number): Timestamp {
130
- const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
130
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
131
131
  let end = length === undefined ? reader.len : reader.pos + length;
132
132
  const message = createBaseTimestamp();
133
133
  while (reader.pos < end) {
134
134
  const tag = reader.uint32();
135
135
  switch (tag >>> 3) {
136
136
  case 1:
137
+ if (tag != 8) {
138
+ break;
139
+ }
140
+
137
141
  message.seconds = longToNumber(reader.int64() as Long);
138
- break;
142
+ continue;
139
143
  case 2:
144
+ if (tag != 16) {
145
+ break;
146
+ }
147
+
140
148
  message.nanos = reader.int32();
141
- break;
142
- default:
143
- reader.skipType(tag & 7);
144
- break;
149
+ continue;
150
+ }
151
+ if ((tag & 7) == 4 || tag == 0) {
152
+ break;
145
153
  }
154
+ reader.skipType(tag & 7);
146
155
  }
147
156
  return message;
148
157
  },