livekit-client 1.12.0 → 1.12.1

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 (31) hide show
  1. package/README.md +14 -0
  2. package/dist/livekit-client.e2ee.worker.js +1 -1
  3. package/dist/livekit-client.e2ee.worker.js.map +1 -1
  4. package/dist/livekit-client.e2ee.worker.mjs +59 -39
  5. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  6. package/dist/livekit-client.esm.mjs +44 -17
  7. package/dist/livekit-client.esm.mjs.map +1 -1
  8. package/dist/livekit-client.umd.js +1 -1
  9. package/dist/livekit-client.umd.js.map +1 -1
  10. package/dist/src/e2ee/worker/FrameCryptor.d.ts +0 -1
  11. package/dist/src/e2ee/worker/FrameCryptor.d.ts.map +1 -1
  12. package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts +8 -0
  13. package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts.map +1 -1
  14. package/dist/src/room/Room.d.ts.map +1 -1
  15. package/dist/src/room/participant/RemoteParticipant.d.ts +6 -4
  16. package/dist/src/room/participant/RemoteParticipant.d.ts.map +1 -1
  17. package/dist/src/room/track/create.d.ts.map +1 -1
  18. package/dist/src/utils/browserParser.d.ts +2 -0
  19. package/dist/src/utils/browserParser.d.ts.map +1 -1
  20. package/dist/ts4.2/src/e2ee/worker/FrameCryptor.d.ts +0 -1
  21. package/dist/ts4.2/src/e2ee/worker/ParticipantKeyHandler.d.ts +8 -0
  22. package/dist/ts4.2/src/room/participant/RemoteParticipant.d.ts +6 -4
  23. package/dist/ts4.2/src/utils/browserParser.d.ts +2 -0
  24. package/package.json +1 -1
  25. package/src/e2ee/worker/FrameCryptor.ts +12 -14
  26. package/src/e2ee/worker/ParticipantKeyHandler.ts +15 -0
  27. package/src/e2ee/worker/e2ee.worker.ts +12 -6
  28. package/src/room/Room.ts +17 -7
  29. package/src/room/participant/RemoteParticipant.ts +19 -15
  30. package/src/room/track/create.ts +9 -0
  31. package/src/utils/browserParser.ts +5 -0
@@ -21,7 +21,6 @@ export declare class BaseFrameCryptor extends EventEmitter<CryptorCallbacks> {
21
21
  */
22
22
  export declare class FrameCryptor extends BaseFrameCryptor {
23
23
  private sendCounts;
24
- private isKeyInvalid;
25
24
  private participantId;
26
25
  private trackId;
27
26
  private keys;
@@ -1 +1 @@
1
- {"version":3,"file":"FrameCryptor.d.ts","sourceRoot":"","sources":["../../../../src/e2ee/worker/FrameCryptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FrameCryptor.d.ts","sourceRoot":"","sources":["../../../../src/e2ee/worker/FrameCryptor.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ export declare class ParticipantKeyHandler extends EventEmitter<ParticipantKeyHa
15
15
  private keyProviderOptions;
16
16
  private ratchetPromiseMap;
17
17
  private participantId;
18
+ hasValidKey: boolean;
18
19
  constructor(participantId: string | undefined, isEnabled: boolean, keyProviderOptions: KeyProviderOptions);
19
20
  setEnabled(enabled: boolean): void;
20
21
  /**
@@ -25,6 +26,13 @@ export declare class ParticipantKeyHandler extends EventEmitter<ParticipantKeyHa
25
26
  * @param setKey
26
27
  */
27
28
  ratchetKey(keyIndex?: number, setKey?: boolean): Promise<CryptoKey>;
29
+ /**
30
+ * takes in a key material with `deriveBits` and `deriveKey` set as key usages
31
+ * and derives encryption keys from the material and sets it on the key ring buffer
32
+ * together with the material
33
+ * also resets the valid key property and updates the currentKeyIndex
34
+ */
35
+ setKey(material: CryptoKey, keyIndex?: number): Promise<void>;
28
36
  /**
29
37
  * takes in a key material with `deriveBits` and `deriveKey` set as key usages
30
38
  * and derives encryption keys from the material and sets it on the key ring buffer
@@ -1 +1 @@
1
- {"version":3,"file":"ParticipantKeyHandler.d.ts","sourceRoot":"","sources":["../../../../src/e2ee/worker/ParticipantKeyHandler.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAGzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,8BAA8B,EAAE,MAAM,UAAU,CAAC;AAM3F;;;;;;;GAOG;AACH,qBAAa,qBAAsB,SAAQ,YAAY,CAAC,8BAA8B,CAAC;IACrF,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,kBAAkB,CAAqB;IAE/C,OAAO,CAAC,iBAAiB,CAAkC;IAE3D,OAAO,CAAC,aAAa,CAAqB;gBAGxC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,SAAS,EAAE,OAAO,EAClB,kBAAkB,EAAE,kBAAkB;IAWxC,UAAU,CAAC,OAAO,EAAE,OAAO;IAI3B;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,OAAO,CAAC,SAAS,CAAC;IA+BhE;;;;;OAKG;IACG,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,SAAI,EAAE,gBAAgB,UAAQ;IAS9E,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,UAAQ;IAOpE,kBAAkB,CAAC,KAAK,EAAE,MAAM;IAItC,SAAS;IAIT,kBAAkB;IAIlB;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM;CAG5B"}
1
+ {"version":3,"file":"ParticipantKeyHandler.d.ts","sourceRoot":"","sources":["../../../../src/e2ee/worker/ParticipantKeyHandler.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAGzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,8BAA8B,EAAE,MAAM,UAAU,CAAC;AAM3F;;;;;;;GAOG;AACH,qBAAa,qBAAsB,SAAQ,YAAY,CAAC,8BAA8B,CAAC;IACrF,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,kBAAkB,CAAqB;IAE/C,OAAO,CAAC,iBAAiB,CAAkC;IAE3D,OAAO,CAAC,aAAa,CAAqB;IAE1C,WAAW,EAAE,OAAO,CAAC;gBAGnB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,SAAS,EAAE,OAAO,EAClB,kBAAkB,EAAE,kBAAkB;IAYxC,UAAU,CAAC,OAAO,EAAE,OAAO;IAI3B;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,OAAO,CAAC,SAAS,CAAC;IA+BhE;;;;;OAKG;IACG,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,SAAI;IAK9C;;;;;OAKG;IACG,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,SAAI,EAAE,gBAAgB,UAAQ;IAS9E,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,UAAQ;IAOpE,kBAAkB,CAAC,KAAK,EAAE,MAAM;IAKtC,SAAS;IAIT,kBAAkB;IAIlB;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM;CAG5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"Room.d.ts","sourceRoot":"","sources":["../../../src/room/Room.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Room.d.ts","sourceRoot":"","sources":["../../../src/room/Room.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ export default class RemoteParticipant extends Participant {
12
12
  videoTracks: Map<string, RemoteTrackPublication>;
13
13
  tracks: Map<string, RemoteTrackPublication>;
14
14
  signalClient: SignalClient;
15
- private volume?;
15
+ private volumeMap;
16
16
  private audioContext?;
17
17
  private audioOutput?;
18
18
  /** @internal */
@@ -23,14 +23,16 @@ export default class RemoteParticipant extends Participant {
23
23
  getTrack(source: Track.Source): RemoteTrackPublication | undefined;
24
24
  getTrackByName(name: string): RemoteTrackPublication | undefined;
25
25
  /**
26
- * sets the volume on the participant's microphone track
26
+ * sets the volume on the participant's audio track
27
+ * by default, this affects the microphone publication
28
+ * a different source can be passed in as a second argument
27
29
  * if no track exists the volume will be applied when the microphone track is added
28
30
  */
29
- setVolume(volume: number): void;
31
+ setVolume(volume: number, source?: Track.Source.Microphone | Track.Source.ScreenShareAudio): void;
30
32
  /**
31
33
  * gets the volume on the participant's microphone track
32
34
  */
33
- getVolume(): number | undefined;
35
+ getVolume(source?: Track.Source.Microphone | Track.Source.ScreenShareAudio): number | undefined;
34
36
  /** @internal */
35
37
  addSubscribedMediaTrack(mediaTrack: MediaStreamTrack, sid: Track.SID, mediaStream: MediaStream, receiver?: RTCRtpReceiver, adaptiveStreamSettings?: AdaptiveStreamSettings, triesLeft?: number): RemoteTrackPublication | undefined;
36
38
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteParticipant.d.ts","sourceRoot":"","sources":["../../../../src/room/participant/RemoteParticipant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,4BAA4B,CAAC;AAKrF,OAAO,sBAAsB,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW;IACxD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAEjD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAEjD,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAE5C,YAAY,EAAE,YAAY,CAAC;IAE3B,OAAO,CAAC,MAAM,CAAC,CAAS;IAExB,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC,OAAO,CAAC,WAAW,CAAC,CAAqB;IAEzC,gBAAgB;IAChB,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,GAAG,iBAAiB;IAI9F,gBAAgB;gBAEd,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM;IASnB,SAAS,CAAC,mBAAmB,CAAC,WAAW,EAAE,sBAAsB;IAqCjE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAOlE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAOhE;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM;IAQxB;;OAEG;IACH,SAAS;IAQT,gBAAgB;IAChB,uBAAuB,CACrB,UAAU,EAAE,gBAAgB,EAC5B,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE,cAAc,EACzB,sBAAsB,CAAC,EAAE,sBAAsB,EAC/C,SAAS,CAAC,EAAE,MAAM;IA+EpB,gBAAgB;IAChB,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,sBAAsB,GAAG,SAAS;IAIvE,gBAAgB;IAChB,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO;IAmE1C,gBAAgB;IAChB,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,OAAO;IAiCtD;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS;IAO7C;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,kBAAkB;IAW/C,gBAAgB;IAChB,IAAI,CAAC,CAAC,SAAS,YAAY,CAAC,UAAU,CAAC,yBAAyB,CAAC,EAC/D,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,CAAC,GAC5D,OAAO;CAIX"}
1
+ {"version":3,"file":"RemoteParticipant.d.ts","sourceRoot":"","sources":["../../../../src/room/participant/RemoteParticipant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,4BAA4B,CAAC;AAKrF,OAAO,sBAAsB,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW;IACxD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAEjD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAEjD,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAE5C,YAAY,EAAE,YAAY,CAAC;IAE3B,OAAO,CAAC,SAAS,CAA4B;IAE7C,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC,OAAO,CAAC,WAAW,CAAC,CAAqB;IAEzC,gBAAgB;IAChB,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,GAAG,iBAAiB;IAI9F,gBAAgB;gBAEd,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM;IAUnB,SAAS,CAAC,mBAAmB,CAAC,WAAW,EAAE,sBAAsB;IAqCjE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAOlE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAOhE;;;;;OAKG;IACH,SAAS,CACP,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,gBAA0C;IAS3F;;OAEG;IACH,SAAS,CACP,MAAM,GAAE,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,gBAA0C;IAS3F,gBAAgB;IAChB,uBAAuB,CACrB,UAAU,EAAE,gBAAgB,EAC5B,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE,cAAc,EACzB,sBAAsB,CAAC,EAAE,sBAAsB,EAC/C,SAAS,CAAC,EAAE,MAAM;IA2EpB,gBAAgB;IAChB,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,sBAAsB,GAAG,SAAS;IAIvE,gBAAgB;IAChB,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO;IAmE1C,gBAAgB;IAChB,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,OAAO;IAiCtD;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,SAAS;IAO7C;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,kBAAkB;IAW/C,gBAAgB;IAChB,IAAI,CAAC,CAAC,SAAS,YAAY,CAAC,UAAU,CAAC,yBAAyB,CAAC,EAC/D,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,CAAC,GAC5D,OAAO;CAIX"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/room/track/create.ts"],"names":[],"mappings":"AAIA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,WAAW,CAAC;AAGnB;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CA2C5B;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAM1B;AAED,wBAAsB,qBAAqB,CACzC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAM1B;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAwC5B"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/room/track/create.ts"],"names":[],"mappings":"AAIA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,WAAW,CAAC;AAGnB;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAoD5B;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAM1B;AAED,wBAAsB,qBAAqB,CACzC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAM1B;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAwC5B"}
@@ -1,7 +1,9 @@
1
1
  export type DetectableBrowser = 'Chrome' | 'Firefox' | 'Safari';
2
+ export type DetectableOS = 'iOS' | 'macOS';
2
3
  export type BrowserDetails = {
3
4
  name: DetectableBrowser;
4
5
  version: string;
6
+ os?: DetectableOS;
5
7
  };
6
8
  /**
7
9
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"browserParser.d.ts","sourceRoot":"","sources":["../../../src/utils/browserParser.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,UAAO,8BAU1D"}
1
+ {"version":3,"file":"browserParser.d.ts","sourceRoot":"","sources":["../../../src/utils/browserParser.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,YAAY,CAAC;CACnB,CAAC;AAIF;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,UAAO,8BAU1D"}
@@ -21,7 +21,6 @@ export declare class BaseFrameCryptor extends EventEmitter<CryptorCallbacks> {
21
21
  */
22
22
  export declare class FrameCryptor extends BaseFrameCryptor {
23
23
  private sendCounts;
24
- private isKeyInvalid;
25
24
  private participantId;
26
25
  private trackId;
27
26
  private keys;
@@ -15,6 +15,7 @@ export declare class ParticipantKeyHandler extends EventEmitter<ParticipantKeyHa
15
15
  private keyProviderOptions;
16
16
  private ratchetPromiseMap;
17
17
  private participantId;
18
+ hasValidKey: boolean;
18
19
  constructor(participantId: string | undefined, isEnabled: boolean, keyProviderOptions: KeyProviderOptions);
19
20
  setEnabled(enabled: boolean): void;
20
21
  /**
@@ -25,6 +26,13 @@ export declare class ParticipantKeyHandler extends EventEmitter<ParticipantKeyHa
25
26
  * @param setKey
26
27
  */
27
28
  ratchetKey(keyIndex?: number, setKey?: boolean): Promise<CryptoKey>;
29
+ /**
30
+ * takes in a key material with `deriveBits` and `deriveKey` set as key usages
31
+ * and derives encryption keys from the material and sets it on the key ring buffer
32
+ * together with the material
33
+ * also resets the valid key property and updates the currentKeyIndex
34
+ */
35
+ setKey(material: CryptoKey, keyIndex?: number): Promise<void>;
28
36
  /**
29
37
  * takes in a key material with `deriveBits` and `deriveKey` set as key usages
30
38
  * and derives encryption keys from the material and sets it on the key ring buffer
@@ -12,7 +12,7 @@ export default class RemoteParticipant extends Participant {
12
12
  videoTracks: Map<string, RemoteTrackPublication>;
13
13
  tracks: Map<string, RemoteTrackPublication>;
14
14
  signalClient: SignalClient;
15
- private volume?;
15
+ private volumeMap;
16
16
  private audioContext?;
17
17
  private audioOutput?;
18
18
  /** @internal */
@@ -23,14 +23,16 @@ export default class RemoteParticipant extends Participant {
23
23
  getTrack(source: Track.Source): RemoteTrackPublication | undefined;
24
24
  getTrackByName(name: string): RemoteTrackPublication | undefined;
25
25
  /**
26
- * sets the volume on the participant's microphone track
26
+ * sets the volume on the participant's audio track
27
+ * by default, this affects the microphone publication
28
+ * a different source can be passed in as a second argument
27
29
  * if no track exists the volume will be applied when the microphone track is added
28
30
  */
29
- setVolume(volume: number): void;
31
+ setVolume(volume: number, source?: Track.Source.Microphone | Track.Source.ScreenShareAudio): void;
30
32
  /**
31
33
  * gets the volume on the participant's microphone track
32
34
  */
33
- getVolume(): number | undefined;
35
+ getVolume(source?: Track.Source.Microphone | Track.Source.ScreenShareAudio): number | undefined;
34
36
  /** @internal */
35
37
  addSubscribedMediaTrack(mediaTrack: MediaStreamTrack, sid: Track.SID, mediaStream: MediaStream, receiver?: RTCRtpReceiver, adaptiveStreamSettings?: AdaptiveStreamSettings, triesLeft?: number): RemoteTrackPublication | undefined;
36
38
  /** @internal */
@@ -1,7 +1,9 @@
1
1
  export type DetectableBrowser = 'Chrome' | 'Firefox' | 'Safari';
2
+ export type DetectableOS = 'iOS' | 'macOS';
2
3
  export type BrowserDetails = {
3
4
  name: DetectableBrowser;
4
5
  version: string;
6
+ os?: DetectableOS;
5
7
  };
6
8
  /**
7
9
  * @internal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livekit-client",
3
- "version": "1.12.0",
3
+ "version": "1.12.1",
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",
@@ -49,8 +49,6 @@ export class BaseFrameCryptor extends EventEmitter<CryptorCallbacks> {
49
49
  export class FrameCryptor extends BaseFrameCryptor {
50
50
  private sendCounts: Map<number, number>;
51
51
 
52
- private isKeyInvalid = false;
53
-
54
52
  private participantId: string | undefined;
55
53
 
56
54
  private trackId: string | undefined;
@@ -270,16 +268,15 @@ export class FrameCryptor extends BaseFrameCryptor {
270
268
  const data = new Uint8Array(encodedFrame.data);
271
269
  const keyIndex = data[encodedFrame.data.byteLength - 1];
272
270
 
273
- if (this.keys.getKeySet(keyIndex)) {
271
+ if (this.keys.getKeySet(keyIndex) && this.keys.hasValidKey) {
274
272
  try {
275
273
  const decodedFrame = await this.decryptFrame(encodedFrame, keyIndex);
276
274
  if (decodedFrame) {
277
275
  return controller.enqueue(decodedFrame);
278
276
  }
279
- this.isKeyInvalid = false;
280
277
  } catch (error) {
281
278
  if (error instanceof CryptorError && error.reason === CryptorErrorReason.InvalidKey) {
282
- if (!this.isKeyInvalid) {
279
+ if (this.keys.hasValidKey) {
283
280
  workerLogger.warn('invalid key');
284
281
  this.emit(
285
282
  CryptorEvent.Error,
@@ -288,20 +285,12 @@ export class FrameCryptor extends BaseFrameCryptor {
288
285
  CryptorErrorReason.InvalidKey,
289
286
  ),
290
287
  );
291
- this.isKeyInvalid = true;
288
+ this.keys.hasValidKey = false;
292
289
  }
293
290
  } else {
294
291
  workerLogger.warn('decoding frame failed', { error });
295
292
  }
296
293
  }
297
- } else {
298
- this.emit(
299
- CryptorEvent.Error,
300
- new CryptorError(
301
- `key missing for participant ${this.participantId}`,
302
- CryptorErrorReason.MissingKey,
303
- ),
304
- );
305
294
  }
306
295
 
307
296
  return controller.enqueue(encodedFrame);
@@ -406,7 +395,16 @@ export class FrameCryptor extends BaseFrameCryptor {
406
395
  this.keys.setKeyFromMaterial(initialMaterial.material, keyIndex);
407
396
  }
408
397
 
398
+ this.keys.hasValidKey = false;
399
+
409
400
  workerLogger.warn('maximum ratchet attempts exceeded, resetting key');
401
+ this.emit(
402
+ CryptorEvent.Error,
403
+ new CryptorError(
404
+ `valid key missing for participant ${this.participantId}`,
405
+ CryptorErrorReason.MissingKey,
406
+ ),
407
+ );
410
408
  }
411
409
  } else {
412
410
  throw new CryptorError(
@@ -28,6 +28,8 @@ export class ParticipantKeyHandler extends EventEmitter<ParticipantKeyHandlerCal
28
28
 
29
29
  private participantId: string | undefined;
30
30
 
31
+ hasValidKey: boolean;
32
+
31
33
  constructor(
32
34
  participantId: string | undefined,
33
35
  isEnabled: boolean,
@@ -40,6 +42,7 @@ export class ParticipantKeyHandler extends EventEmitter<ParticipantKeyHandlerCal
40
42
  this.keyProviderOptions = keyProviderOptions;
41
43
  this.ratchetPromiseMap = new Map();
42
44
  this.participantId = participantId;
45
+ this.hasValidKey = false;
43
46
  }
44
47
 
45
48
  setEnabled(enabled: boolean) {
@@ -84,6 +87,17 @@ export class ParticipantKeyHandler extends EventEmitter<ParticipantKeyHandlerCal
84
87
  return ratchetPromise;
85
88
  }
86
89
 
90
+ /**
91
+ * takes in a key material with `deriveBits` and `deriveKey` set as key usages
92
+ * and derives encryption keys from the material and sets it on the key ring buffer
93
+ * together with the material
94
+ * also resets the valid key property and updates the currentKeyIndex
95
+ */
96
+ async setKey(material: CryptoKey, keyIndex = 0) {
97
+ await this.setKeyFromMaterial(material, keyIndex);
98
+ this.hasValidKey = true;
99
+ }
100
+
87
101
  /**
88
102
  * takes in a key material with `deriveBits` and `deriveKey` set as key usages
89
103
  * and derives encryption keys from the material and sets it on the key ring buffer
@@ -108,6 +122,7 @@ export class ParticipantKeyHandler extends EventEmitter<ParticipantKeyHandlerCal
108
122
 
109
123
  async setCurrentKeyIndex(index: number) {
110
124
  this.currentKeyIndex = index % this.cryptoKeyRing.length;
125
+ this.hasValidKey = true;
111
126
  }
112
127
 
113
128
  isEnabled() {
@@ -7,6 +7,7 @@ import type {
7
7
  ErrorMessage,
8
8
  KeyProviderOptions,
9
9
  RatchetMessage,
10
+ RatchetRequestMessage,
10
11
  } from '../types';
11
12
  import { FrameCryptor } from './FrameCryptor';
12
13
  import { ParticipantKeyHandler } from './ParticipantKeyHandler';
@@ -75,7 +76,7 @@ onmessage = (ev) => {
75
76
  workerLogger.debug('set shared key');
76
77
  setSharedKey(data.key, data.keyIndex);
77
78
  } else if (data.participantId) {
78
- getParticipantKeyHandler(data.participantId).setKeyFromMaterial(data.key, data.keyIndex);
79
+ getParticipantKeyHandler(data.participantId).setKey(data.key, data.keyIndex);
79
80
  } else {
80
81
  workerLogger.error('no participant Id was provided and shared key usage is disabled');
81
82
  }
@@ -92,13 +93,18 @@ onmessage = (ev) => {
92
93
  });
93
94
  break;
94
95
  case 'ratchetRequest':
95
- getParticipantKeyHandler(data.participantId).ratchetKey(data.keyIndex);
96
-
96
+ handleRatchetRequest(data);
97
97
  default:
98
98
  break;
99
99
  }
100
100
  };
101
101
 
102
+ async function handleRatchetRequest(data: RatchetRequestMessage['data']) {
103
+ const keyHandler = getParticipantKeyHandler(data.participantId);
104
+ await keyHandler.ratchetKey(data.keyIndex);
105
+ keyHandler.hasValidKey = true;
106
+ }
107
+
102
108
  function getTrackCryptor(participantId: string, trackId: string) {
103
109
  let cryptor = participantCryptors.find((c) => c.getTrackId() === trackId);
104
110
  if (!cryptor) {
@@ -131,7 +137,7 @@ function getParticipantKeyHandler(participantId?: string) {
131
137
  if (!keys) {
132
138
  keys = new ParticipantKeyHandler(participantId, true, keyProviderOptions);
133
139
  if (sharedKey) {
134
- keys.setKeyFromMaterial(sharedKey);
140
+ keys.setKey(sharedKey);
135
141
  }
136
142
  participantKeys.set(participantId, keys);
137
143
  }
@@ -171,9 +177,9 @@ function setEncryptionEnabled(enable: boolean, participantId?: string) {
171
177
  function setSharedKey(key: CryptoKey, index?: number) {
172
178
  workerLogger.debug('setting shared key');
173
179
  sharedKey = key;
174
- publisherKeys?.setKeyFromMaterial(key, index);
180
+ publisherKeys?.setKey(key, index);
175
181
  for (const [, keyHandler] of participantKeys) {
176
- keyHandler.setKeyFromMaterial(key, index);
182
+ keyHandler.setKey(key, index);
177
183
  }
178
184
  }
179
185
 
package/src/room/Room.ts CHANGED
@@ -33,6 +33,7 @@ import {
33
33
  SubscriptionPermissionUpdate,
34
34
  SubscriptionResponse,
35
35
  } from '../proto/livekit_rtc';
36
+ import { getBrowser } from '../utils/browserParser';
36
37
  import DeviceManager from './DeviceManager';
37
38
  import RTCEngine from './RTCEngine';
38
39
  import { RegionUrlProvider } from './RegionUrlProvider';
@@ -66,7 +67,6 @@ import {
66
67
  createDummyVideoStreamTrack,
67
68
  getEmptyAudioStreamTrack,
68
69
  isCloud,
69
- isSafari,
70
70
  isWeb,
71
71
  supportsSetSinkId,
72
72
  unpackStreamId,
@@ -718,10 +718,10 @@ class Room extends EventEmitter<RoomEventCallbacks> {
718
718
  async startAudio() {
719
719
  await this.acquireAudioContext();
720
720
  const elements: Array<HTMLMediaElement> = [];
721
-
722
- if (isSafari()) {
721
+ const browser = getBrowser();
722
+ if (browser && browser.os === 'iOS') {
723
723
  /**
724
- * iOS Safari blocks audio element playback if
724
+ * iOS blocks audio element playback if
725
725
  * - user is not publishing audio themselves and
726
726
  * - no other audio source is playing
727
727
  *
@@ -732,6 +732,7 @@ class Room extends EventEmitter<RoomEventCallbacks> {
732
732
  let dummyAudioEl = document.getElementById(audioId) as HTMLAudioElement | null;
733
733
  if (!dummyAudioEl) {
734
734
  dummyAudioEl = document.createElement('audio');
735
+ dummyAudioEl.id = audioId;
735
736
  dummyAudioEl.autoplay = true;
736
737
  dummyAudioEl.hidden = true;
737
738
  const track = getEmptyAudioStreamTrack();
@@ -833,7 +834,7 @@ class Room extends EventEmitter<RoomEventCallbacks> {
833
834
  } else if (kind === 'audiooutput') {
834
835
  if (
835
836
  (!supportsSetSinkId() && !this.options.expWebAudioMix) ||
836
- (this.audioContext && !('setSinkId' in this.audioContext))
837
+ (this.options.expWebAudioMix && this.audioContext && !('setSinkId' in this.audioContext))
837
838
  ) {
838
839
  throw new Error('cannot switch audio output, setSinkId not supported');
839
840
  }
@@ -1303,13 +1304,22 @@ class Room extends EventEmitter<RoomEventCallbacks> {
1303
1304
  ) {
1304
1305
  // override audio context with custom audio context if supplied by user
1305
1306
  this.audioContext = this.options.expWebAudioMix.audioContext;
1306
- await this.audioContext.resume();
1307
- } else {
1307
+ } else if (!this.audioContext || this.audioContext.state === 'closed') {
1308
1308
  // by using an AudioContext, it reduces lag on audio elements
1309
1309
  // https://stackoverflow.com/questions/9811429/html5-audio-tag-on-safari-has-a-delay/54119854#54119854
1310
1310
  this.audioContext = getNewAudioContext() ?? undefined;
1311
1311
  }
1312
1312
 
1313
+ if (this.audioContext && this.audioContext.state === 'suspended') {
1314
+ // for iOS a newly created AudioContext is always in `suspended` state.
1315
+ // we try our best to resume the context here, if that doesn't work, we just continue with regular processing
1316
+ try {
1317
+ await this.audioContext.resume();
1318
+ } catch (e: any) {
1319
+ log.warn(e);
1320
+ }
1321
+ }
1322
+
1313
1323
  if (this.options.expWebAudioMix) {
1314
1324
  this.participants.forEach((participant) => participant.setAudioContext(this.audioContext));
1315
1325
  }
@@ -24,7 +24,7 @@ export default class RemoteParticipant extends Participant {
24
24
 
25
25
  signalClient: SignalClient;
26
26
 
27
- private volume?: number;
27
+ private volumeMap: Map<Track.Source, number>;
28
28
 
29
29
  private audioContext?: AudioContext;
30
30
 
@@ -48,6 +48,7 @@ export default class RemoteParticipant extends Participant {
48
48
  this.tracks = new Map();
49
49
  this.audioTracks = new Map();
50
50
  this.videoTracks = new Map();
51
+ this.volumeMap = new Map();
51
52
  }
52
53
 
53
54
  protected addTrackPublication(publication: RemoteTrackPublication) {
@@ -102,12 +103,17 @@ export default class RemoteParticipant extends Participant {
102
103
  }
103
104
 
104
105
  /**
105
- * sets the volume on the participant's microphone track
106
+ * sets the volume on the participant's audio track
107
+ * by default, this affects the microphone publication
108
+ * a different source can be passed in as a second argument
106
109
  * if no track exists the volume will be applied when the microphone track is added
107
110
  */
108
- setVolume(volume: number) {
109
- this.volume = volume;
110
- const audioPublication = this.getTrack(Track.Source.Microphone);
111
+ setVolume(
112
+ volume: number,
113
+ source: Track.Source.Microphone | Track.Source.ScreenShareAudio = Track.Source.Microphone,
114
+ ) {
115
+ this.volumeMap.set(source, volume);
116
+ const audioPublication = this.getTrack(source);
111
117
  if (audioPublication && audioPublication.track) {
112
118
  (audioPublication.track as RemoteAudioTrack).setVolume(volume);
113
119
  }
@@ -116,12 +122,14 @@ export default class RemoteParticipant extends Participant {
116
122
  /**
117
123
  * gets the volume on the participant's microphone track
118
124
  */
119
- getVolume() {
120
- const audioPublication = this.getTrack(Track.Source.Microphone);
125
+ getVolume(
126
+ source: Track.Source.Microphone | Track.Source.ScreenShareAudio = Track.Source.Microphone,
127
+ ) {
128
+ const audioPublication = this.getTrack(source);
121
129
  if (audioPublication && audioPublication.track) {
122
130
  return (audioPublication.track as RemoteAudioTrack).getVolume();
123
131
  }
124
- return this.volume;
132
+ return this.volumeMap.get(source);
125
133
  }
126
134
 
127
135
  /** @internal */
@@ -198,13 +206,9 @@ export default class RemoteParticipant extends Participant {
198
206
  track.start();
199
207
 
200
208
  publication.setTrack(track);
201
- // set participant volume on new microphone tracks
202
- if (
203
- this.volume !== undefined &&
204
- track instanceof RemoteAudioTrack &&
205
- track.source === Track.Source.Microphone
206
- ) {
207
- track.setVolume(this.volume);
209
+ // set participant volumes on new audio tracks
210
+ if (this.volumeMap.has(publication.source) && track instanceof RemoteAudioTrack) {
211
+ track.setVolume(this.volumeMap.get(publication.source)!);
208
212
  }
209
213
 
210
214
  return publication;
@@ -57,6 +57,15 @@ export async function createLocalTracks(
57
57
  if (typeof conOrBool !== 'boolean') {
58
58
  trackConstraints = conOrBool;
59
59
  }
60
+
61
+ // update the constraints with the device id the user gave permissions to in the permission prompt
62
+ // otherwise each track restart (e.g. mute - unmute) will try to initialize the device again -> causing additional permission prompts
63
+ if (trackConstraints) {
64
+ trackConstraints.deviceId = mediaStreamTrack.getSettings().deviceId;
65
+ } else {
66
+ trackConstraints = { deviceId: mediaStreamTrack.getSettings().deviceId };
67
+ }
68
+
60
69
  const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints);
61
70
  if (track.kind === Track.Kind.Video) {
62
71
  track.source = Track.Source.Camera;
@@ -4,10 +4,12 @@
4
4
  const commonVersionIdentifier = /version\/(\d+(\.?_?\d+)+)/i;
5
5
 
6
6
  export type DetectableBrowser = 'Chrome' | 'Firefox' | 'Safari';
7
+ export type DetectableOS = 'iOS' | 'macOS';
7
8
 
8
9
  export type BrowserDetails = {
9
10
  name: DetectableBrowser;
10
11
  version: string;
12
+ os?: DetectableOS;
11
13
  };
12
14
 
13
15
  let browserDetails: BrowserDetails | undefined;
@@ -34,6 +36,7 @@ const browsersList = [
34
36
  const browser: BrowserDetails = {
35
37
  name: 'Firefox',
36
38
  version: getMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, ua),
39
+ os: ua.toLowerCase().includes('fxios') ? 'iOS' : undefined,
37
40
  };
38
41
  return browser;
39
42
  },
@@ -44,6 +47,7 @@ const browsersList = [
44
47
  const browser: BrowserDetails = {
45
48
  name: 'Chrome',
46
49
  version: getMatch(/(?:chrome|chromium|crios|crmo)\/(\d+(\.?_?\d+)+)/i, ua),
50
+ os: ua.toLowerCase().includes('crios') ? 'iOS' : undefined,
47
51
  };
48
52
 
49
53
  return browser;
@@ -56,6 +60,7 @@ const browsersList = [
56
60
  const browser: BrowserDetails = {
57
61
  name: 'Safari',
58
62
  version: getMatch(commonVersionIdentifier, ua),
63
+ os: ua.includes('Mobile/') ? 'iOS' : 'macOS',
59
64
  };
60
65
 
61
66
  return browser;