livekit-client 2.11.2 → 2.11.3

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 (35) hide show
  1. package/dist/livekit-client.e2ee.worker.js +1 -1
  2. package/dist/livekit-client.e2ee.worker.js.map +1 -1
  3. package/dist/livekit-client.e2ee.worker.mjs +10 -6
  4. package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
  5. package/dist/livekit-client.esm.mjs +38 -23
  6. package/dist/livekit-client.esm.mjs.map +1 -1
  7. package/dist/livekit-client.umd.js +1 -1
  8. package/dist/livekit-client.umd.js.map +1 -1
  9. package/dist/src/e2ee/E2eeManager.d.ts.map +1 -1
  10. package/dist/src/e2ee/constants.d.ts.map +1 -1
  11. package/dist/src/e2ee/types.d.ts +2 -0
  12. package/dist/src/e2ee/types.d.ts.map +1 -1
  13. package/dist/src/e2ee/utils.d.ts +1 -1
  14. package/dist/src/e2ee/utils.d.ts.map +1 -1
  15. package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts +3 -2
  16. package/dist/src/e2ee/worker/ParticipantKeyHandler.d.ts.map +1 -1
  17. package/dist/src/room/track/create.d.ts.map +1 -1
  18. package/dist/src/utils/cloneDeep.d.ts +1 -1
  19. package/dist/src/utils/cloneDeep.d.ts.map +1 -1
  20. package/dist/ts4.2/src/e2ee/types.d.ts +2 -0
  21. package/dist/ts4.2/src/e2ee/utils.d.ts +1 -1
  22. package/dist/ts4.2/src/e2ee/worker/ParticipantKeyHandler.d.ts +3 -2
  23. package/dist/ts4.2/src/utils/cloneDeep.d.ts +1 -1
  24. package/package.json +1 -1
  25. package/src/api/utils.test.ts +7 -0
  26. package/src/api/utils.ts +2 -2
  27. package/src/e2ee/E2eeManager.ts +11 -2
  28. package/src/e2ee/constants.ts +1 -0
  29. package/src/e2ee/types.ts +2 -0
  30. package/src/e2ee/utils.ts +2 -1
  31. package/src/e2ee/worker/ParticipantKeyHandler.ts +4 -2
  32. package/src/e2ee/worker/e2ee.worker.ts +2 -2
  33. package/src/room/track/create.ts +19 -6
  34. package/src/room/track/utils.ts +2 -2
  35. package/src/utils/cloneDeep.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"E2eeManager.d.ts","sourceRoot":"","sources":["../../../src/e2ee/E2eeManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,iBAAiB,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AAWrC,OAAO,EAAE,KAAK,oBAAoB,EAAqC,MAAM,UAAU,CAAC;AACxF,OAAO,KAAK,EACV,kBAAkB,EAYnB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACrC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClF,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IACzC,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC7F;gCAM0B,UAAU,iBAAiB,CAAC,oBAAoB,CAAC;AAJ5E;;GAEG;AACH,qBAAa,WACX,SAAQ,gBACR,YAAW,eAAe;IAE1B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IAEzB,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAEtB,OAAO,CAAC,iBAAiB,CAAU;IAEnC,OAAO,CAAC,WAAW,CAAkB;gBAEzB,OAAO,EAAE,kBAAkB;IAOvC;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,IAAI;IA2BhB;;OAEG;IACH,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM;IAK1E;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,UAAU;IAQjC,OAAO,CAAC,eAAe,CA+CrB;IAEF,OAAO,CAAC,aAAa,CAGnB;IAEK,WAAW,CAAC,MAAM,EAAE,SAAS;IAMpC,OAAO,CAAC,mBAAmB;IAwD3B,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,eAAe;IAQvB;;;;OAIG;YACW,cAAc;IAiE5B;;;;OAIG;IACH,OAAO,CAAC,YAAY;CAuCrB"}
1
+ {"version":3,"file":"E2eeManager.d.ts","sourceRoot":"","sources":["../../../src/e2ee/E2eeManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,iBAAiB,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AAWrC,OAAO,EAAE,KAAK,oBAAoB,EAAqC,MAAM,UAAU,CAAC;AACxF,OAAO,KAAK,EACV,kBAAkB,EAYnB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACrC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClF,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IACzC,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC7F;gCAM0B,UAAU,iBAAiB,CAAC,oBAAoB,CAAC;AAJ5E;;GAEG;AACH,qBAAa,WACX,SAAQ,gBACR,YAAW,eAAe;IAE1B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IAEzB,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAEtB,OAAO,CAAC,iBAAiB,CAAU;IAEnC,OAAO,CAAC,WAAW,CAAkB;gBAEzB,OAAO,EAAE,kBAAkB;IAOvC;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,IAAI;IA2BhB;;OAEG;IACH,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM;IAK1E;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,UAAU;IAQjC,OAAO,CAAC,eAAe,CA+CrB;IAEF,OAAO,CAAC,aAAa,CAGnB;IAEK,WAAW,CAAC,MAAM,EAAE,SAAS;IAMpC,OAAO,CAAC,mBAAmB;IA4D3B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,eAAe;IAQvB;;;;OAIG;YACW,cAAc;IAiE5B;;;;OAIG;IACH,OAAO,CAAC,YAAY;CAuCrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/e2ee/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAG9C,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAY/C,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC;AAIX,eAAO,MAAM,SAAS,KAAK,CAAC;AAG5B,eAAO,MAAM,SAAS,YAAY,CAAC;AAEnC,eAAO,MAAM,IAAI,yBAAyB,CAAC;AAE3C,eAAO,MAAM,qBAAqB,EAAE,kBAM1B,CAAC;AAEX,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,gBAAgB,OAAO,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/e2ee/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAG9C,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAY/C,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC;AAIX,eAAO,MAAM,SAAS,KAAK,CAAC;AAG5B,eAAO,MAAM,SAAS,YAAY,CAAC;AAEnC,eAAO,MAAM,IAAI,yBAAyB,CAAC;AAE3C,eAAO,MAAM,qBAAqB,EAAE,kBAO1B,CAAC;AAEX,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,gBAAgB,OAAO,CAAC"}
@@ -65,6 +65,7 @@ export interface RatchetRequestMessage extends BaseMessage {
65
65
  data: {
66
66
  participantIdentity?: string;
67
67
  keyIndex?: number;
68
+ extractable?: boolean;
68
69
  };
69
70
  }
70
71
  export interface RatchetMessage extends BaseMessage {
@@ -105,6 +106,7 @@ export type KeyProviderOptions = {
105
106
  ratchetWindowSize: number;
106
107
  failureTolerance: number;
107
108
  keyringSize: number;
109
+ allowKeyExtraction: boolean;
108
110
  };
109
111
  export type KeyInfo = {
110
112
  key: CryptoKey;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/e2ee/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/e2ee/types.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ export declare function isInsertableStreamSupported(): boolean;
4
4
  export declare function isVideoFrame(frame: RTCEncodedAudioFrame | RTCEncodedVideoFrame): frame is RTCEncodedVideoFrame;
5
5
  export declare function importKey(keyBytes: Uint8Array | ArrayBuffer, algorithm?: string | {
6
6
  name: string;
7
- }, usage?: 'derive' | 'encrypt'): Promise<CryptoKey>;
7
+ }, usage?: 'derive' | 'encrypt', extractable?: boolean): Promise<CryptoKey>;
8
8
  export declare function createKeyMaterialFromString(password: string): Promise<CryptoKey>;
9
9
  export declare function createKeyMaterialFromBuffer(cryptoBuffer: ArrayBuffer): Promise<CryptoKey>;
10
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/e2ee/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,YAE9B;AAED,wBAAgB,0BAA0B,YAGzC;AAED,wBAAgB,2BAA2B,YAM1C;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,oBAAoB,GAAG,oBAAoB,GACjD,KAAK,IAAI,oBAAoB,CAE/B;AAED,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,UAAU,GAAG,WAAW,EAClC,SAAS,GAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAmC,EACrE,KAAK,GAAE,QAAQ,GAAG,SAAqB,sBAUxC;AAED,wBAAsB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,sBAcjE;AAED,wBAAsB,2BAA2B,CAAC,YAAY,EAAE,WAAW,sBAO1E;AA0BD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;;;GAiBjE;AAED,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAKrF;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,UAAU,WAKxD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAoBxD;AAKD,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAkBzD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/e2ee/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,YAE9B;AAED,wBAAgB,0BAA0B,YAGzC;AAED,wBAAgB,2BAA2B,YAM1C;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,oBAAoB,GAAG,oBAAoB,GACjD,KAAK,IAAI,oBAAoB,CAE/B;AAED,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,UAAU,GAAG,WAAW,EAClC,SAAS,GAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAmC,EACrE,KAAK,GAAE,QAAQ,GAAG,SAAqB,EACvC,WAAW,GAAE,OAAe,sBAU7B;AAED,wBAAsB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,sBAcjE;AAED,wBAAsB,2BAA2B,CAAC,YAAY,EAAE,WAAW,sBAO1E;AA0BD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;;;GAiBjE;AAED,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAKrF;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,UAAU,WAKxD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAoBxD;AAKD,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAkBzD"}
@@ -52,9 +52,10 @@ export declare class ParticipantKeyHandler extends ParticipantKeyHandler_base {
52
52
  * returns the ratcheted material
53
53
  * if `setKey` is true (default), it will also set the ratcheted key directly on the crypto key ring
54
54
  * @param keyIndex
55
- * @param setKey
55
+ * @param setKey set the new key. Will emit KeyHandlerEvent.KeyRatcheted after key generation (default: true)
56
+ * @param extractable allow key extraction (get the key in plaintext) on the ratcheted new key (default: false)
56
57
  */
57
- ratchetKey(keyIndex?: number, setKey?: boolean): Promise<CryptoKey>;
58
+ ratchetKey(keyIndex?: number, setKey?: boolean, extractable?: boolean): Promise<CryptoKey>;
58
59
  /**
59
60
  * takes in a key material with `deriveBits` and `deriveKey` set as key usages
60
61
  * 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":"AACA,OAAO,KAAK,iBAAiB,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAmB,KAAK,8BAA8B,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;0CAcC,UAAU,iBAAiB,CAAC,8BAA8B,CAAC;AARvH;;;;;;;GAOG;AACH,qBAAa,qBAAsB,SAAQ,0BAA6E;IACtH,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,aAAa,CAA4B;IAEjD,OAAO,CAAC,uBAAuB,CAAgB;IAE/C,OAAO,CAAC,kBAAkB,CAAqB;IAE/C,OAAO,CAAC,iBAAiB,CAAkC;IAE3D,OAAO,CAAC,mBAAmB,CAAS;IAEpC;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;gBAEW,mBAAmB,EAAE,MAAM,EAAE,kBAAkB,EAAE,kBAAkB;IAa/E;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAO/C;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,GAAE,MAA6B,GAAG,IAAI;IAchE;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,GAAE,MAA6B,GAAG,IAAI;IAIhE;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAQvC;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,OAAO,CAAC,SAAS,CAAC;IA0ChE;;;;;OAKG;IACG,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,SAAI;IAK9C;;;;;OAKG;IACG,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,UAAQ;IAYxF,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,UAAQ;IAQ9D,kBAAkB,CAAC,KAAK,EAAE,MAAM;IAKtC,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":"AACA,OAAO,KAAK,iBAAiB,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAmB,KAAK,8BAA8B,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;0CAcC,UAAU,iBAAiB,CAAC,8BAA8B,CAAC;AARvH;;;;;;;GAOG;AACH,qBAAa,qBAAsB,SAAQ,0BAA6E;IACtH,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,aAAa,CAA4B;IAEjD,OAAO,CAAC,uBAAuB,CAAgB;IAE/C,OAAO,CAAC,kBAAkB,CAAqB;IAE/C,OAAO,CAAC,iBAAiB,CAAkC;IAE3D,OAAO,CAAC,mBAAmB,CAAS;IAEpC;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;gBAEW,mBAAmB,EAAE,MAAM,EAAE,kBAAkB,EAAE,kBAAkB;IAa/E;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAO/C;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,GAAE,MAA6B,GAAG,IAAI;IAchE;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,GAAE,MAA6B,GAAG,IAAI;IAIhE;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAQvC;;;;;;;OAOG;IACH,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,UAAO,EAAE,WAAW,UAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IA2CrF;;;;;OAKG;IACG,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,SAAI;IAK9C;;;;;OAKG;IACG,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,UAAQ;IAYxF,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,UAAQ;IAQ9D,kBAAkB,CAAC,KAAK,EAAE,MAAM;IAKtC,kBAAkB;IAIlB;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM;CAG5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/room/track/create.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,WAAW,CAAC;AASnB;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,CAAC,EAAE,wBAAwB,EAClC,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAuH5B;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,CA4B5B"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/room/track/create.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,WAAW,CAAC;AASnB;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,CAAC,EAAE,wBAAwB,EAClC,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAoI5B;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,CA4B5B"}
@@ -1,2 +1,2 @@
1
- export declare function cloneDeep<T>(value: T): T | undefined;
1
+ export declare function cloneDeep<T>(value: T): T;
2
2
  //# sourceMappingURL=cloneDeep.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloneDeep.d.ts","sourceRoot":"","sources":["../../../src/utils/cloneDeep.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,iBAUpC"}
1
+ {"version":3,"file":"cloneDeep.d.ts","sourceRoot":"","sources":["../../../src/utils/cloneDeep.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAUxC"}
@@ -65,6 +65,7 @@ export interface RatchetRequestMessage extends BaseMessage {
65
65
  data: {
66
66
  participantIdentity?: string;
67
67
  keyIndex?: number;
68
+ extractable?: boolean;
68
69
  };
69
70
  }
70
71
  export interface RatchetMessage extends BaseMessage {
@@ -105,6 +106,7 @@ export type KeyProviderOptions = {
105
106
  ratchetWindowSize: number;
106
107
  failureTolerance: number;
107
108
  keyringSize: number;
109
+ allowKeyExtraction: boolean;
108
110
  };
109
111
  export type KeyInfo = {
110
112
  key: CryptoKey;
@@ -4,7 +4,7 @@ export declare function isInsertableStreamSupported(): boolean;
4
4
  export declare function isVideoFrame(frame: RTCEncodedAudioFrame | RTCEncodedVideoFrame): frame is RTCEncodedVideoFrame;
5
5
  export declare function importKey(keyBytes: Uint8Array | ArrayBuffer, algorithm?: string | {
6
6
  name: string;
7
- }, usage?: 'derive' | 'encrypt'): Promise<CryptoKey>;
7
+ }, usage?: 'derive' | 'encrypt', extractable?: boolean): Promise<CryptoKey>;
8
8
  export declare function createKeyMaterialFromString(password: string): Promise<CryptoKey>;
9
9
  export declare function createKeyMaterialFromBuffer(cryptoBuffer: ArrayBuffer): Promise<CryptoKey>;
10
10
  /**
@@ -52,9 +52,10 @@ export declare class ParticipantKeyHandler extends ParticipantKeyHandler_base {
52
52
  * returns the ratcheted material
53
53
  * if `setKey` is true (default), it will also set the ratcheted key directly on the crypto key ring
54
54
  * @param keyIndex
55
- * @param setKey
55
+ * @param setKey set the new key. Will emit KeyHandlerEvent.KeyRatcheted after key generation (default: true)
56
+ * @param extractable allow key extraction (get the key in plaintext) on the ratcheted new key (default: false)
56
57
  */
57
- ratchetKey(keyIndex?: number, setKey?: boolean): Promise<CryptoKey>;
58
+ ratchetKey(keyIndex?: number, setKey?: boolean, extractable?: boolean): Promise<CryptoKey>;
58
59
  /**
59
60
  * takes in a key material with `deriveBits` and `deriveKey` set as key usages
60
61
  * and derives encryption keys from the material and sets it on the key ring buffer
@@ -1,2 +1,2 @@
1
- export declare function cloneDeep<T>(value: T): T | undefined;
1
+ export declare function cloneDeep<T>(value: T): T;
2
2
  //# sourceMappingURL=cloneDeep.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livekit-client",
3
- "version": "2.11.2",
3
+ "version": "2.11.3",
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",
@@ -9,6 +9,13 @@ describe('createRtcUrl', () => {
9
9
  expect(result.toString()).toBe('wss://example.com/rtc');
10
10
  });
11
11
 
12
+ it('should create a basic RTC URL with http protocol', () => {
13
+ const url = 'http://example.com';
14
+ const searchParams = new URLSearchParams();
15
+ const result = createRtcUrl(url, searchParams);
16
+ expect(result.toString()).toBe('ws://example.com/rtc');
17
+ });
18
+
12
19
  it('should handle search parameters', () => {
13
20
  const url = 'wss://example.com';
14
21
  const searchParams = new URLSearchParams({
package/src/api/utils.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { toHttpUrl } from '../room/utils';
1
+ import { toHttpUrl, toWebsocketUrl } from '../room/utils';
2
2
 
3
3
  export function createRtcUrl(url: string, searchParams: URLSearchParams) {
4
- const urlObj = new URL(url);
4
+ const urlObj = new URL(toWebsocketUrl(url));
5
5
  searchParams.forEach((value, key) => {
6
6
  urlObj.searchParams.set(key, value);
7
7
  });
@@ -222,11 +222,19 @@ export class E2EEManager
222
222
  keyProvider
223
223
  .on(KeyProviderEvent.SetKey, (keyInfo) => this.postKey(keyInfo))
224
224
  .on(KeyProviderEvent.RatchetRequest, (participantId, keyIndex) =>
225
- this.postRatchetRequest(participantId, keyIndex),
225
+ this.postRatchetRequest(
226
+ participantId,
227
+ keyIndex,
228
+ keyProvider.getOptions().allowKeyExtraction,
229
+ ),
226
230
  );
227
231
  }
228
232
 
229
- private postRatchetRequest(participantIdentity?: string, keyIndex?: number) {
233
+ private postRatchetRequest(
234
+ participantIdentity?: string,
235
+ keyIndex?: number,
236
+ extractable?: boolean,
237
+ ) {
230
238
  if (!this.worker) {
231
239
  throw Error('could not ratchet key, worker is missing');
232
240
  }
@@ -235,6 +243,7 @@ export class E2EEManager
235
243
  data: {
236
244
  participantIdentity: participantIdentity,
237
245
  keyIndex,
246
+ extractable,
238
247
  },
239
248
  };
240
249
  this.worker.postMessage(msg);
@@ -37,6 +37,7 @@ export const KEY_PROVIDER_DEFAULTS: KeyProviderOptions = {
37
37
  ratchetWindowSize: 8,
38
38
  failureTolerance: DECRYPTION_FAILURE_TOLERANCE,
39
39
  keyringSize: 16,
40
+ allowKeyExtraction: false,
40
41
  } as const;
41
42
 
42
43
  export const MAX_SIF_COUNT = 100;
package/src/e2ee/types.ts CHANGED
@@ -74,6 +74,7 @@ export interface RatchetRequestMessage extends BaseMessage {
74
74
  data: {
75
75
  participantIdentity?: string;
76
76
  keyIndex?: number;
77
+ extractable?: boolean;
77
78
  };
78
79
  }
79
80
 
@@ -130,6 +131,7 @@ export type KeyProviderOptions = {
130
131
  ratchetWindowSize: number;
131
132
  failureTolerance: number;
132
133
  keyringSize: number;
134
+ allowKeyExtraction: boolean;
133
135
  };
134
136
 
135
137
  export type KeyInfo = {
package/src/e2ee/utils.ts CHANGED
@@ -27,13 +27,14 @@ export async function importKey(
27
27
  keyBytes: Uint8Array | ArrayBuffer,
28
28
  algorithm: string | { name: string } = { name: ENCRYPTION_ALGORITHM },
29
29
  usage: 'derive' | 'encrypt' = 'encrypt',
30
+ extractable: boolean = false,
30
31
  ) {
31
32
  // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/importKey
32
33
  return crypto.subtle.importKey(
33
34
  'raw',
34
35
  keyBytes,
35
36
  algorithm,
36
- false,
37
+ extractable,
37
38
  usage === 'derive' ? ['deriveBits', 'deriveKey'] : ['encrypt', 'decrypt'],
38
39
  );
39
40
  }
@@ -108,9 +108,10 @@ export class ParticipantKeyHandler extends (EventEmitter as new () => TypedEvent
108
108
  * returns the ratcheted material
109
109
  * if `setKey` is true (default), it will also set the ratcheted key directly on the crypto key ring
110
110
  * @param keyIndex
111
- * @param setKey
111
+ * @param setKey set the new key. Will emit KeyHandlerEvent.KeyRatcheted after key generation (default: true)
112
+ * @param extractable allow key extraction (get the key in plaintext) on the ratcheted new key (default: false)
112
113
  */
113
- ratchetKey(keyIndex?: number, setKey = true): Promise<CryptoKey> {
114
+ ratchetKey(keyIndex?: number, setKey = true, extractable = false): Promise<CryptoKey> {
114
115
  const currentKeyIndex = keyIndex ?? this.getCurrentKeyIndex();
115
116
 
116
117
  const existingPromise = this.ratchetPromiseMap.get(currentKeyIndex);
@@ -130,6 +131,7 @@ export class ParticipantKeyHandler extends (EventEmitter as new () => TypedEvent
130
131
  await ratchet(currentMaterial, this.keyProviderOptions.ratchetSalt),
131
132
  currentMaterial.algorithm.name,
132
133
  'derive',
134
+ extractable,
133
135
  );
134
136
 
135
137
  if (setKey) {
@@ -119,11 +119,11 @@ onmessage = (ev) => {
119
119
  async function handleRatchetRequest(data: RatchetRequestMessage['data']) {
120
120
  if (useSharedKey) {
121
121
  const keyHandler = getSharedKeyHandler();
122
- await keyHandler.ratchetKey(data.keyIndex);
122
+ await keyHandler.ratchetKey(data.keyIndex, true, data.extractable);
123
123
  keyHandler.resetKeyStatus();
124
124
  } else if (data.participantIdentity) {
125
125
  const keyHandler = getParticipantKeyHandler(data.participantIdentity);
126
- await keyHandler.ratchetKey(data.keyIndex);
126
+ await keyHandler.ratchetKey(data.keyIndex, true, data.extractable);
127
127
  keyHandler.resetKeyStatus();
128
128
  } else {
129
129
  workerLogger.error(
@@ -32,14 +32,28 @@ export async function createLocalTracks(
32
32
  options?: CreateLocalTracksOptions,
33
33
  loggerOptions?: LoggerOptions,
34
34
  ): Promise<Array<LocalTrack>> {
35
- // set default options to true
36
- const internalOptions = { ...(options ?? {}) };
35
+ options ??= {};
37
36
  let attemptExactMatch = false;
38
- let retryAudioOptions: AudioCaptureOptions | undefined | boolean = options?.audio;
39
- let retryVideoOptions: VideoCaptureOptions | undefined | boolean = options?.video;
37
+
38
+ const {
39
+ audioProcessor,
40
+ videoProcessor,
41
+ optionsWithoutProcessor: internalOptions,
42
+ } = extractProcessorsFromOptions(options);
43
+
44
+ let retryAudioOptions: AudioCaptureOptions | undefined | boolean = internalOptions.audio;
45
+ let retryVideoOptions: VideoCaptureOptions | undefined | boolean = internalOptions.video;
46
+
47
+ if (audioProcessor && typeof internalOptions.audio === 'object') {
48
+ internalOptions.audio.processor = audioProcessor;
49
+ }
50
+ if (videoProcessor && typeof internalOptions.video === 'object') {
51
+ internalOptions.video.processor = videoProcessor;
52
+ }
53
+
40
54
  // if the user passes a device id as a string, we default to exact match
41
55
  if (
42
- internalOptions.audio &&
56
+ options.audio &&
43
57
  typeof internalOptions.audio === 'object' &&
44
58
  typeof internalOptions.audio.deviceId === 'string'
45
59
  ) {
@@ -77,7 +91,6 @@ export async function createLocalTracks(
77
91
  ) {
78
92
  internalOptions.video = { deviceId: 'default' };
79
93
  }
80
- const { audioProcessor, videoProcessor } = extractProcessorsFromOptions(internalOptions);
81
94
  const opts = mergeDefaultOptions(internalOptions, audioDefaults, videoDefaults);
82
95
  const constraints = constraintsForOptions(opts);
83
96
 
@@ -23,7 +23,7 @@ export function mergeDefaultOptions(
23
23
  );
24
24
  const defaultAudioProcessor = audioDefaults?.processor;
25
25
  const defaultVideoProcessor = videoDefaults?.processor;
26
- const clonedOptions: CreateLocalTracksOptions = cloneDeep(optionsWithoutProcessor) ?? {};
26
+ const clonedOptions: CreateLocalTracksOptions = optionsWithoutProcessor ?? {};
27
27
  if (clonedOptions.audio === true) clonedOptions.audio = {};
28
28
  if (clonedOptions.video === true) clonedOptions.video = {};
29
29
 
@@ -312,7 +312,7 @@ export function extractProcessorsFromOptions(options: CreateLocalTracksOptions)
312
312
  newOptions.video = { ...newOptions.video, processor: undefined };
313
313
  }
314
314
 
315
- return { audioProcessor, videoProcessor, optionsWithoutProcessor: newOptions };
315
+ return { audioProcessor, videoProcessor, optionsWithoutProcessor: cloneDeep(newOptions) };
316
316
  }
317
317
 
318
318
  export function getTrackSourceFromProto(source: TrackSource): Track.Source {
@@ -1,6 +1,6 @@
1
- export function cloneDeep<T>(value: T) {
1
+ export function cloneDeep<T>(value: T): T {
2
2
  if (typeof value === 'undefined') {
3
- return;
3
+ return value as T;
4
4
  }
5
5
 
6
6
  if (typeof structuredClone === 'function') {