livekit-client 1.12.0 → 1.12.1

Sign up to get free protection for your applications and to get access to all the features.
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;