livekit-client 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +20 -1
  2. package/dist/livekit-client.esm.mjs +2240 -1067
  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/index.d.ts +3 -1
  7. package/dist/src/index.d.ts.map +1 -1
  8. package/dist/src/options.d.ts +5 -0
  9. package/dist/src/options.d.ts.map +1 -1
  10. package/dist/src/proto/google/protobuf/timestamp.d.ts.map +1 -1
  11. package/dist/src/proto/livekit_models.d.ts +32 -0
  12. package/dist/src/proto/livekit_models.d.ts.map +1 -1
  13. package/dist/src/proto/livekit_rtc.d.ts +315 -75
  14. package/dist/src/proto/livekit_rtc.d.ts.map +1 -1
  15. package/dist/src/room/RTCEngine.d.ts +9 -1
  16. package/dist/src/room/RTCEngine.d.ts.map +1 -1
  17. package/dist/src/room/ReconnectPolicy.d.ts +1 -0
  18. package/dist/src/room/ReconnectPolicy.d.ts.map +1 -1
  19. package/dist/src/room/RegionUrlProvider.d.ts +14 -0
  20. package/dist/src/room/RegionUrlProvider.d.ts.map +1 -0
  21. package/dist/src/room/Room.d.ts +6 -1
  22. package/dist/src/room/Room.d.ts.map +1 -1
  23. package/dist/src/room/defaults.d.ts.map +1 -1
  24. package/dist/src/room/errors.d.ts +2 -1
  25. package/dist/src/room/errors.d.ts.map +1 -1
  26. package/dist/src/room/events.d.ts +15 -2
  27. package/dist/src/room/events.d.ts.map +1 -1
  28. package/dist/src/room/track/LocalAudioTrack.d.ts +1 -1
  29. package/dist/src/room/track/LocalAudioTrack.d.ts.map +1 -1
  30. package/dist/src/room/track/LocalTrack.d.ts +3 -2
  31. package/dist/src/room/track/LocalTrack.d.ts.map +1 -1
  32. package/dist/src/room/track/LocalVideoTrack.d.ts.map +1 -1
  33. package/dist/src/room/track/RemoteTrackPublication.d.ts +1 -1
  34. package/dist/src/room/track/RemoteTrackPublication.d.ts.map +1 -1
  35. package/dist/src/room/track/RemoteVideoTrack.d.ts +2 -1
  36. package/dist/src/room/track/RemoteVideoTrack.d.ts.map +1 -1
  37. package/dist/src/room/track/Track.d.ts +3 -1
  38. package/dist/src/room/track/Track.d.ts.map +1 -1
  39. package/dist/src/room/track/utils.d.ts.map +1 -1
  40. package/dist/src/room/types.d.ts +4 -0
  41. package/dist/src/room/types.d.ts.map +1 -1
  42. package/dist/src/room/utils.d.ts +4 -0
  43. package/dist/src/room/utils.d.ts.map +1 -1
  44. package/dist/ts4.2/src/index.d.ts +3 -1
  45. package/dist/ts4.2/src/options.d.ts +5 -0
  46. package/dist/ts4.2/src/proto/livekit_models.d.ts +32 -0
  47. package/dist/ts4.2/src/proto/livekit_rtc.d.ts +348 -84
  48. package/dist/ts4.2/src/room/RTCEngine.d.ts +9 -1
  49. package/dist/ts4.2/src/room/ReconnectPolicy.d.ts +1 -0
  50. package/dist/ts4.2/src/room/RegionUrlProvider.d.ts +14 -0
  51. package/dist/ts4.2/src/room/Room.d.ts +6 -1
  52. package/dist/ts4.2/src/room/errors.d.ts +2 -1
  53. package/dist/ts4.2/src/room/events.d.ts +15 -2
  54. package/dist/ts4.2/src/room/track/LocalAudioTrack.d.ts +1 -1
  55. package/dist/ts4.2/src/room/track/LocalTrack.d.ts +3 -2
  56. package/dist/ts4.2/src/room/track/RemoteTrackPublication.d.ts +1 -1
  57. package/dist/ts4.2/src/room/track/RemoteVideoTrack.d.ts +2 -1
  58. package/dist/ts4.2/src/room/track/Track.d.ts +3 -1
  59. package/dist/ts4.2/src/room/types.d.ts +4 -0
  60. package/dist/ts4.2/src/room/utils.d.ts +4 -0
  61. package/package.json +19 -19
  62. package/src/api/SignalClient.ts +4 -4
  63. package/src/index.ts +3 -0
  64. package/src/options.ts +6 -0
  65. package/src/proto/google/protobuf/timestamp.ts +15 -6
  66. package/src/proto/livekit_models.ts +903 -222
  67. package/src/proto/livekit_rtc.ts +1053 -279
  68. package/src/room/RTCEngine.ts +168 -56
  69. package/src/room/ReconnectPolicy.ts +2 -0
  70. package/src/room/RegionUrlProvider.ts +73 -0
  71. package/src/room/Room.ts +212 -133
  72. package/src/room/defaults.ts +1 -0
  73. package/src/room/errors.ts +1 -0
  74. package/src/room/events.ts +15 -0
  75. package/src/room/track/LocalAudioTrack.ts +14 -6
  76. package/src/room/track/LocalTrack.ts +22 -8
  77. package/src/room/track/LocalVideoTrack.ts +12 -6
  78. package/src/room/track/RemoteTrackPublication.ts +10 -4
  79. package/src/room/track/RemoteVideoTrack.test.ts +2 -0
  80. package/src/room/track/RemoteVideoTrack.ts +53 -9
  81. package/src/room/track/Track.ts +46 -31
  82. package/src/room/track/utils.ts +3 -2
  83. package/src/room/types.ts +6 -0
  84. package/src/room/utils.ts +53 -0
@@ -21,6 +21,7 @@ export default class RTCEngine extends RTCEngine_base {
21
21
  private lossyDC?;
22
22
  private lossyDCSub?;
23
23
  private reliableDC?;
24
+ private dcBufferStatus;
24
25
  private reliableDCSub?;
25
26
  private subscriberPrimary;
26
27
  private primaryPC?;
@@ -44,7 +45,9 @@ export default class RTCEngine extends RTCEngine_base {
44
45
  /** specifies how often an initial join connection is allowed to retry */
45
46
  private maxJoinAttempts;
46
47
  private closingLock;
48
+ private dataProcessLock;
47
49
  private shouldFailNext;
50
+ private regionUrlProvider?;
48
51
  constructor(options: InternalRoomOptions);
49
52
  join(url: string, token: string, opts: SignalOptions, abortSignal?: AbortSignal): Promise<JoinResponse>;
50
53
  close(): Promise<void>;
@@ -65,6 +68,7 @@ export default class RTCEngine extends RTCEngine_base {
65
68
  private handleDataChannel;
66
69
  private handleDataMessage;
67
70
  private handleDataError;
71
+ private handleBufferedAmountLow;
68
72
  private setPreferredCodec;
69
73
  createSender(track: LocalTrack, opts: TrackPublishOptions, encodings?: RTCRtpEncodingParameters[]): Promise<RTCRtpSender>;
70
74
  createSimulcastSender(track: LocalVideoTrack, simulcastTrack: SimulcastTrackInfo, opts: TrackPublishOptions, encodings?: RTCRtpEncodingParameters[]): Promise<RTCRtpSender | undefined>;
@@ -76,8 +80,11 @@ export default class RTCEngine extends RTCEngine_base {
76
80
  private getNextRetryDelay;
77
81
  private restartConnection;
78
82
  private resumeConnection;
79
- waitForPCConnected(): Promise<void>;
83
+ waitForPCInitialConnection(timeout?: number, abortController?: AbortController): Promise<void>;
84
+ waitForPCReconnected(): Promise<void>;
80
85
  sendDataPacket(packet: DataPacket, kind: DataPacket_Kind): Promise<void>;
86
+ private updateAndEmitDCBufferStatus;
87
+ private isBufferStatusLow;
81
88
  /**
82
89
  * @internal
83
90
  */
@@ -106,6 +113,7 @@ export type EngineEventCallbacks = {
106
113
  activeSpeakersUpdate: (speakers: Array<SpeakerInfo>) => void;
107
114
  dataPacketReceived: (userPacket: UserPacket, kind: DataPacket_Kind) => void;
108
115
  transportsCreated: (publisher: PCTransport, subscriber: PCTransport) => void;
116
+ dcBufferStatusChanged: (isLow: boolean, kind: DataPacket_Kind) => void;
109
117
  };
110
118
  export {};
111
119
  //# sourceMappingURL=RTCEngine.d.ts.map
@@ -19,5 +19,6 @@ export interface ReconnectContext {
19
19
  * Reason for retrying
20
20
  */
21
21
  readonly retryReason?: Error;
22
+ readonly serverUrl?: string;
22
23
  }
23
24
  //# sourceMappingURL=ReconnectPolicy.d.ts.map
@@ -0,0 +1,14 @@
1
+ export declare class RegionUrlProvider {
2
+ private serverUrl;
3
+ private token;
4
+ private regionSettings;
5
+ private lastUpdateAt;
6
+ private settingsCacheTime;
7
+ private attemptedRegions;
8
+ constructor(url: string, token: string);
9
+ isCloud(): boolean;
10
+ getNextBestRegionUrl(abortSignal?: AbortSignal): Promise<string | null>;
11
+ resetAttempts(): void;
12
+ private fetchRegionSettings;
13
+ }
14
+ //# sourceMappingURL=RegionUrlProvider.d.ts.map
@@ -86,6 +86,9 @@ declare class Room extends Room_base {
86
86
  */
87
87
  prepareConnection(url: string): Promise<void>;
88
88
  connect: (url: string, token: string, opts?: RoomConnectOptions) => Promise<void>;
89
+ private connectSignal;
90
+ private applyJoinResponse;
91
+ private attemptConnection;
89
92
  /**
90
93
  * disconnects the room, emits [[RoomEvent.Disconnected]]
91
94
  */
@@ -105,7 +108,7 @@ declare class Room extends Room_base {
105
108
  * @internal for testing
106
109
  */
107
110
  simulateScenario(scenario: string): Promise<void>;
108
- private onBeforeUnload;
111
+ private onPageLeave;
109
112
  /**
110
113
  * Browsers have different policies regarding audio playback. Most requiring
111
114
  * some form of user interaction (click/tap/etc).
@@ -203,6 +206,7 @@ export type RoomEventCallbacks = {
203
206
  trackUnmuted: (publication: TrackPublication, participant: Participant) => void;
204
207
  localTrackPublished: (publication: LocalTrackPublication, participant: LocalParticipant) => void;
205
208
  localTrackUnpublished: (publication: LocalTrackPublication, participant: LocalParticipant) => void;
209
+ localAudioSilenceDetected: (publication: LocalTrackPublication) => void;
206
210
  participantMetadataChanged: (metadata: string | undefined, participant: RemoteParticipant | LocalParticipant) => void;
207
211
  participantPermissionsChanged: (prevPermissions: ParticipantPermission | undefined, participant: RemoteParticipant | LocalParticipant) => void;
208
212
  activeSpeakersChanged: (speakers: Array<Participant>) => void;
@@ -216,5 +220,6 @@ export type RoomEventCallbacks = {
216
220
  audioPlaybackChanged: (playing: boolean) => void;
217
221
  signalConnected: () => void;
218
222
  recordingStatusChanged: (recording: boolean) => void;
223
+ dcBufferStatusChanged: (isLow: boolean, kind: DataPacket_Kind) => void;
219
224
  };
220
225
  //# sourceMappingURL=Room.d.ts.map
@@ -5,7 +5,8 @@ export declare class LivekitError extends Error {
5
5
  export declare const enum ConnectionErrorReason {
6
6
  NotAllowed = 0,
7
7
  ServerUnreachable = 1,
8
- InternalError = 2
8
+ InternalError = 2,
9
+ Cancelled = 3
9
10
  }
10
11
  export declare class ConnectionError extends LivekitError {
11
12
  status?: number;
@@ -120,6 +120,13 @@ export declare enum RoomEvent {
120
120
  * args: ([[LocalTrackPublication]], [[LocalParticipant]])
121
121
  */
122
122
  LocalTrackUnpublished = "localTrackUnpublished",
123
+ /**
124
+ * When a local audio track is published the SDK checks whether there is complete silence
125
+ * on that track and emits the LocalAudioSilenceDetected event in that case.
126
+ * This allows for applications to show UI informing users that they might have to
127
+ * reset their audio hardware or check for proper device connectivity.
128
+ */
129
+ LocalAudioSilenceDetected = "localAudioSilenceDetected",
123
130
  /**
124
131
  * Active speakers changed. List of speakers are ordered by their audio level.
125
132
  * loudest speakers first. This will include the LocalParticipant too.
@@ -224,7 +231,12 @@ export declare enum RoomEvent {
224
231
  * Recording of a room has started/stopped. Room.isRecording will be updated too.
225
232
  * args: (isRecording: boolean)
226
233
  */
227
- RecordingStatusChanged = "recordingStatusChanged"
234
+ RecordingStatusChanged = "recordingStatusChanged",
235
+ /**
236
+ * Emits whenever the current buffer status of a data channel changes
237
+ * args: (isLow: boolean, kind: [[DataPacket_Kind]])
238
+ */
239
+ DCBufferStatusChanged = "dcBufferStatusChanged"
228
240
  }
229
241
  export declare enum ParticipantEvent {
230
242
  /**
@@ -371,7 +383,8 @@ export declare enum EngineEvent {
371
383
  Closing = "closing",
372
384
  MediaTrackAdded = "mediaTrackAdded",
373
385
  ActiveSpeakersUpdate = "activeSpeakersUpdate",
374
- DataPacketReceived = "dataPacketReceived"
386
+ DataPacketReceived = "dataPacketReceived",
387
+ DCBufferStatusChanged = "dcBufferStatusChanged"
375
388
  }
376
389
  export declare enum TrackEvent {
377
390
  Message = "message",
@@ -20,6 +20,6 @@ export default class LocalAudioTrack extends LocalTrack {
20
20
  startMonitor(): void;
21
21
  protected monitorSender: () => Promise<void>;
22
22
  getSenderStats(): Promise<AudioSenderStats | undefined>;
23
- checkForSilence(): Promise<void>;
23
+ checkForSilence(): Promise<boolean>;
24
24
  }
25
25
  //# sourceMappingURL=LocalAudioTrack.d.ts.map
@@ -1,4 +1,4 @@
1
- import Queue from 'async-await-queue';
1
+ import { Mutex } from '../utils';
2
2
  import type { VideoCodec } from './options';
3
3
  import { Track } from './Track';
4
4
  export default abstract class LocalTrack extends Track {
@@ -9,7 +9,8 @@ export default abstract class LocalTrack extends Track {
9
9
  protected constraints: MediaTrackConstraints;
10
10
  protected reacquireTrack: boolean;
11
11
  protected providedByUser: boolean;
12
- protected muteQueue: Queue;
12
+ protected muteLock: Mutex;
13
+ protected pauseUpstreamLock: Mutex;
13
14
  /**
14
15
  *
15
16
  * @param mediaTrack
@@ -1,6 +1,6 @@
1
1
  import { TrackInfo, VideoQuality } from '../../proto/livekit_models';
2
2
  import type RemoteTrack from './RemoteTrack';
3
- import type { Track } from './Track';
3
+ import { Track } from './Track';
4
4
  import { TrackPublication } from './TrackPublication';
5
5
  export default class RemoteTrackPublication extends TrackPublication {
6
6
  track?: RemoteTrack;
@@ -6,7 +6,7 @@ export default class RemoteVideoTrack extends RemoteTrack {
6
6
  private adaptiveStreamSettings?;
7
7
  private lastVisible?;
8
8
  private lastDimensions?;
9
- private hasUsedAttach;
9
+ private isObserved;
10
10
  constructor(mediaTrack: MediaStreamTrack, sid: string, receiver?: RTCRtpReceiver, adaptiveStreamSettings?: AdaptiveStreamSettings);
11
11
  get isAdaptiveStream(): boolean;
12
12
  get mediaStreamTrack(): MediaStreamTrack;
@@ -43,6 +43,7 @@ export interface ElementInfo {
43
43
  width(): number;
44
44
  height(): number;
45
45
  visible: boolean;
46
+ pictureInPicture: boolean;
46
47
  visibilityChangedAt: number | undefined;
47
48
  handleResize?: () => void;
48
49
  handleVisibilityChanged?: () => void;
@@ -58,10 +58,12 @@ export declare abstract class Track extends Track_base {
58
58
  protected enable(): void;
59
59
  protected disable(): void;
60
60
  abstract startMonitor(signalClient?: SignalClient): void;
61
- protected stopMonitor(): void;
61
+ stopMonitor(): void;
62
62
  private recycleElement;
63
63
  protected appVisibilityChangedListener: () => void;
64
64
  protected handleAppVisibilityChanged(): Promise<void>;
65
+ protected addAppVisibilityListener(): void;
66
+ protected removeAppVisibilityListener(): void;
65
67
  }
66
68
  /** @internal */
67
69
  export declare function attachToElement(track: MediaStreamTrack, element: HTMLMediaElement): void;
@@ -18,4 +18,8 @@ export type DataPublishOptions = {
18
18
  /** the topic under which the message gets published */
19
19
  topic?: string;
20
20
  };
21
+ export type LiveKitReactNativeInfo = {
22
+ platform: 'ios' | 'android' | 'windows' | 'macos' | 'web' | 'native';
23
+ devicePixelRatio: number;
24
+ };
21
25
  //# sourceMappingURL=types.d.ts.map
@@ -17,6 +17,10 @@ export declare function isFireFox(): boolean;
17
17
  export declare function isSafari(): boolean;
18
18
  export declare function isMobile(): boolean;
19
19
  export declare function isWeb(): boolean;
20
+ export declare function isReactNative(): boolean;
21
+ export declare function isCloud(serverUrl: URL): boolean;
22
+ export declare function getReactNativeOs(): string | undefined;
23
+ export declare function getDevicePixelRatio(): number;
20
24
  export declare function compareVersions(v1: string, v2: string): number;
21
25
  export declare const getResizeObserver: () => ResizeObserver;
22
26
  export declare const getIntersectionObserver: () => IntersectionObserver;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livekit-client",
3
- "version": "1.7.0",
3
+ "version": "1.8.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,40 +51,40 @@
51
51
  "webrtc-adapter": "^8.1.1"
52
52
  },
53
53
  "devDependencies": {
54
- "@babel/core": "7.21.0",
55
- "@babel/preset-env": "7.20.2",
54
+ "@babel/core": "7.21.4",
55
+ "@babel/preset-env": "7.21.4",
56
56
  "@changesets/changelog-github": "0.4.8",
57
- "@changesets/cli": "2.26.0",
57
+ "@changesets/cli": "2.26.1",
58
58
  "@rollup/plugin-babel": "6.0.3",
59
- "@rollup/plugin-commonjs": "24.0.1",
59
+ "@rollup/plugin-commonjs": "24.1.0",
60
60
  "@rollup/plugin-json": "6.0.0",
61
- "@rollup/plugin-node-resolve": "15.0.1",
61
+ "@rollup/plugin-node-resolve": "15.0.2",
62
62
  "@rollup/plugin-terser": "^0.4.0",
63
- "@types/jest": "29.4.0",
64
- "@types/sdp-transform": "2.4.5",
63
+ "@types/jest": "29.5.0",
64
+ "@types/sdp-transform": "2.4.6",
65
65
  "@types/ua-parser-js": "0.7.36",
66
66
  "@types/ws": "8.5.4",
67
- "@typescript-eslint/eslint-plugin": "5.54.0",
68
- "@typescript-eslint/parser": "5.54.0",
67
+ "@typescript-eslint/eslint-plugin": "5.58.0",
68
+ "@typescript-eslint/parser": "5.58.0",
69
69
  "downlevel-dts": "^0.11.0",
70
- "eslint": "8.35.0",
70
+ "eslint": "8.38.0",
71
71
  "eslint-config-airbnb-typescript": "17.0.0",
72
- "eslint-config-prettier": "8.6.0",
72
+ "eslint-config-prettier": "8.8.0",
73
73
  "eslint-plugin-import": "2.27.5",
74
74
  "gh-pages": "5.0.0",
75
- "jest": "29.4.3",
76
- "prettier": "2.8.4",
77
- "rollup": "3.18.0",
75
+ "jest": "29.5.0",
76
+ "prettier": "2.8.7",
77
+ "rollup": "3.20.2",
78
78
  "rollup-plugin-delete": "^2.0.0",
79
79
  "rollup-plugin-filesize": "10.0.0",
80
80
  "rollup-plugin-re": "1.0.7",
81
81
  "rollup-plugin-typescript2": "0.34.1",
82
- "ts-jest": "29.0.5",
83
- "ts-proto": "1.140.0",
84
- "typedoc": "0.23.26",
82
+ "ts-jest": "29.1.0",
83
+ "ts-proto": "1.146.0",
84
+ "typedoc": "0.24.1",
85
85
  "typedoc-plugin-no-inherit": "1.4.0",
86
86
  "typescript": "4.9.5",
87
- "vite": "4.1.4"
87
+ "vite": "4.2.1"
88
88
  },
89
89
  "browserslist": [
90
90
  "safari >= 11",
@@ -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 { getClientInfo, isReactNative, Mutex, 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 {
@@ -706,7 +706,7 @@ function createConnectionParams(token: string, info: ClientInfo, opts: ConnectOp
706
706
  params.set('auto_subscribe', opts.autoSubscribe ? '1' : '0');
707
707
 
708
708
  // ClientInfo
709
- params.set('sdk', 'js');
709
+ params.set('sdk', isReactNative() ? 'reactnative' : 'js');
710
710
  params.set('version', info.version!);
711
711
  params.set('protocol', info.protocol!.toString());
712
712
  if (info.deviceModel) {
package/src/index.ts CHANGED
@@ -28,10 +28,12 @@ import {
28
28
  } from './room/utils';
29
29
 
30
30
  import type { AudioAnalyserOptions } from './room/utils';
31
+ import type { LiveKitReactNativeInfo } from './room/types';
31
32
 
32
33
  export * from './options';
33
34
  export * from './room/errors';
34
35
  export * from './room/events';
36
+ export type { DataPublishOptions } from './room/types';
35
37
  export * from './room/track/create';
36
38
  export * from './room/track/options';
37
39
  export * from './room/track/Track';
@@ -73,4 +75,5 @@ export {
73
75
  ElementInfo,
74
76
  DefaultReconnectPolicy,
75
77
  CriticalTimers,
78
+ LiveKitReactNativeInfo,
76
79
  };
package/src/options.ts CHANGED
@@ -64,6 +64,12 @@ export interface InternalRoomOptions {
64
64
  */
65
65
  reconnectPolicy: ReconnectPolicy;
66
66
 
67
+ /**
68
+ * specifies whether the sdk should automatically disconnect the room
69
+ * on 'pagehide' and 'beforeunload' events
70
+ */
71
+ disconnectOnPageLeave: boolean;
72
+
67
73
  /**
68
74
  * @internal
69
75
  * experimental flag, introduce a delay before sending signaling messages
@@ -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
  },