@livekit/rtc-node 0.12.2 → 0.13.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.
- package/dist/audio_frame.cjs +2 -2
- package/dist/audio_frame.cjs.map +1 -1
- package/dist/audio_frame.d.cts +2 -3
- package/dist/audio_frame.d.ts +2 -3
- package/dist/audio_frame.d.ts.map +1 -1
- package/dist/audio_frame.js +3 -3
- package/dist/audio_frame.js.map +1 -1
- package/dist/audio_resampler.cjs +10 -7
- package/dist/audio_resampler.cjs.map +1 -1
- package/dist/audio_resampler.d.cts +2 -3
- package/dist/audio_resampler.d.ts +2 -3
- package/dist/audio_resampler.d.ts.map +1 -1
- package/dist/audio_resampler.js +13 -10
- package/dist/audio_resampler.js.map +1 -1
- package/dist/audio_source.cjs +6 -4
- package/dist/audio_source.cjs.map +1 -1
- package/dist/audio_source.d.cts +3 -3
- package/dist/audio_source.d.ts +3 -3
- package/dist/audio_source.d.ts.map +1 -1
- package/dist/audio_source.js +9 -7
- package/dist/audio_source.js.map +1 -1
- package/dist/audio_stream.cjs +1 -2
- package/dist/audio_stream.cjs.map +1 -1
- package/dist/audio_stream.d.cts +2 -3
- package/dist/audio_stream.d.ts +2 -3
- package/dist/audio_stream.d.ts.map +1 -1
- package/dist/audio_stream.js +2 -3
- package/dist/audio_stream.js.map +1 -1
- package/dist/e2ee.cjs +19 -20
- package/dist/e2ee.cjs.map +1 -1
- package/dist/e2ee.d.cts +0 -1
- package/dist/e2ee.d.ts +0 -1
- package/dist/e2ee.d.ts.map +1 -1
- package/dist/e2ee.js +29 -30
- package/dist/e2ee.js.map +1 -1
- package/dist/ffi_client.cjs +6 -5
- package/dist/ffi_client.cjs.map +1 -1
- package/dist/ffi_client.d.cts +10 -10
- package/dist/ffi_client.d.ts +10 -10
- package/dist/ffi_client.d.ts.map +1 -1
- package/dist/ffi_client.js +6 -10
- package/dist/ffi_client.js.map +1 -1
- package/dist/index.cjs +16 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -35
- package/dist/index.d.ts +6 -35
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -46
- package/dist/index.js.map +1 -1
- package/dist/napi/native.d.cjs.map +1 -1
- package/dist/napi/native.d.ts +5 -5
- package/dist/native.d.ts +5 -5
- package/dist/participant.cjs +57 -34
- package/dist/participant.cjs.map +1 -1
- package/dist/participant.d.cts +10 -10
- package/dist/participant.d.ts +10 -10
- package/dist/participant.d.ts.map +1 -1
- package/dist/participant.js +75 -50
- package/dist/participant.js.map +1 -1
- package/dist/proto/audio_frame_pb.cjs +977 -125
- package/dist/proto/audio_frame_pb.cjs.map +1 -1
- package/dist/proto/audio_frame_pb.d.cts +502 -417
- package/dist/proto/audio_frame_pb.d.ts +502 -417
- package/dist/proto/audio_frame_pb.d.ts.map +1 -1
- package/dist/proto/audio_frame_pb.js +943 -85
- package/dist/proto/audio_frame_pb.js.map +1 -1
- package/dist/proto/e2ee_pb.cjs +700 -85
- package/dist/proto/e2ee_pb.cjs.map +1 -1
- package/dist/proto/e2ee_pb.d.cts +331 -263
- package/dist/proto/e2ee_pb.d.ts +331 -263
- package/dist/proto/e2ee_pb.d.ts.map +1 -1
- package/dist/proto/e2ee_pb.js +675 -57
- package/dist/proto/e2ee_pb.js.map +1 -1
- package/dist/proto/ffi_pb.cjs +369 -36
- package/dist/proto/ffi_pb.cjs.map +1 -1
- package/dist/proto/ffi_pb.d.cts +156 -109
- package/dist/proto/ffi_pb.d.ts +156 -109
- package/dist/proto/ffi_pb.d.ts.map +1 -1
- package/dist/proto/ffi_pb.js +364 -29
- package/dist/proto/ffi_pb.js.map +1 -1
- package/dist/proto/handle_pb.cjs +27 -7
- package/dist/proto/handle_pb.cjs.map +1 -1
- package/dist/proto/handle_pb.d.cts +13 -15
- package/dist/proto/handle_pb.d.ts +13 -15
- package/dist/proto/handle_pb.d.ts.map +1 -1
- package/dist/proto/handle_pb.js +26 -5
- package/dist/proto/handle_pb.js.map +1 -1
- package/dist/proto/participant_pb.cjs +112 -15
- package/dist/proto/participant_pb.cjs.map +1 -1
- package/dist/proto/participant_pb.d.cts +140 -52
- package/dist/proto/participant_pb.d.ts +140 -52
- package/dist/proto/participant_pb.d.ts.map +1 -1
- package/dist/proto/participant_pb.js +109 -11
- package/dist/proto/participant_pb.js.map +1 -1
- package/dist/proto/room_pb.cjs +2693 -302
- package/dist/proto/room_pb.cjs.map +1 -1
- package/dist/proto/room_pb.d.cts +1265 -862
- package/dist/proto/room_pb.d.ts +1265 -862
- package/dist/proto/room_pb.d.ts.map +1 -1
- package/dist/proto/room_pb.js +2603 -210
- package/dist/proto/room_pb.js.map +1 -1
- package/dist/proto/rpc_pb.cjs +302 -37
- package/dist/proto/rpc_pb.cjs.map +1 -1
- package/dist/proto/rpc_pb.d.cts +138 -108
- package/dist/proto/rpc_pb.d.ts +138 -108
- package/dist/proto/rpc_pb.d.ts.map +1 -1
- package/dist/proto/rpc_pb.js +291 -25
- package/dist/proto/rpc_pb.js.map +1 -1
- package/dist/proto/stats_pb.cjs +1253 -139
- package/dist/proto/stats_pb.cjs.map +1 -1
- package/dist/proto/stats_pb.d.cts +803 -692
- package/dist/proto/stats_pb.d.ts +803 -692
- package/dist/proto/stats_pb.d.ts.map +1 -1
- package/dist/proto/stats_pb.js +1216 -93
- package/dist/proto/stats_pb.js.map +1 -1
- package/dist/proto/track_pb.cjs +462 -64
- package/dist/proto/track_pb.cjs.map +1 -1
- package/dist/proto/track_pb.d.cts +250 -218
- package/dist/proto/track_pb.d.ts +250 -218
- package/dist/proto/track_pb.d.ts.map +1 -1
- package/dist/proto/track_pb.js +447 -45
- package/dist/proto/track_pb.js.map +1 -1
- package/dist/proto/track_publication_pb.cjs +130 -0
- package/dist/proto/track_publication_pb.cjs.map +1 -0
- package/dist/proto/track_publication_pb.d.cts +80 -0
- package/dist/proto/track_publication_pb.d.ts +80 -0
- package/dist/proto/track_publication_pb.d.ts.map +1 -0
- package/dist/proto/track_publication_pb.js +103 -0
- package/dist/proto/track_publication_pb.js.map +1 -0
- package/dist/proto/video_frame_pb.cjs +648 -88
- package/dist/proto/video_frame_pb.cjs.map +1 -1
- package/dist/proto/video_frame_pb.d.cts +371 -328
- package/dist/proto/video_frame_pb.d.ts +371 -328
- package/dist/proto/video_frame_pb.d.ts.map +1 -1
- package/dist/proto/video_frame_pb.js +626 -60
- package/dist/proto/video_frame_pb.js.map +1 -1
- package/dist/room.cjs +93 -125
- package/dist/room.cjs.map +1 -1
- package/dist/room.d.cts +6 -17
- package/dist/room.d.ts +6 -17
- package/dist/room.d.ts.map +1 -1
- package/dist/room.js +92 -122
- package/dist/room.js.map +1 -1
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.cts +0 -1
- package/dist/rpc.d.ts +0 -1
- package/dist/rpc.js.map +1 -1
- package/dist/track.cjs +12 -8
- package/dist/track.cjs.map +1 -1
- package/dist/track.d.cts +8 -9
- package/dist/track.d.ts +8 -9
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +13 -9
- package/dist/track.js.map +1 -1
- package/dist/track_publication.cjs +21 -12
- package/dist/track_publication.cjs.map +1 -1
- package/dist/track_publication.d.cts +12 -13
- package/dist/track_publication.d.ts +12 -13
- package/dist/track_publication.d.ts.map +1 -1
- package/dist/track_publication.js +22 -13
- package/dist/track_publication.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.cts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/video_frame.cjs +26 -45
- package/dist/video_frame.cjs.map +1 -1
- package/dist/video_frame.d.cts +2 -3
- package/dist/video_frame.d.ts +2 -3
- package/dist/video_frame.d.ts.map +1 -1
- package/dist/video_frame.js +29 -48
- package/dist/video_frame.js.map +1 -1
- package/dist/video_source.cjs +7 -4
- package/dist/video_source.cjs.map +1 -1
- package/dist/video_source.d.cts +4 -4
- package/dist/video_source.d.ts +4 -4
- package/dist/video_source.d.ts.map +1 -1
- package/dist/video_source.js +9 -6
- package/dist/video_source.js.map +1 -1
- package/dist/video_stream.cjs +16 -5
- package/dist/video_stream.cjs.map +1 -1
- package/dist/video_stream.d.cts +3 -4
- package/dist/video_stream.d.ts +3 -4
- package/dist/video_stream.d.ts.map +1 -1
- package/dist/video_stream.js +17 -6
- package/dist/video_stream.js.map +1 -1
- package/package.json +9 -9
- package/src/audio_frame.ts +10 -10
- package/src/audio_resampler.ts +15 -13
- package/src/audio_source.ts +11 -8
- package/src/audio_stream.ts +3 -4
- package/src/e2ee.ts +36 -37
- package/src/ffi_client.ts +8 -16
- package/src/index.ts +5 -68
- package/src/napi/native.d.ts +5 -5
- package/src/participant.ts +100 -72
- package/src/proto/audio_frame_pb.ts +1220 -496
- package/src/proto/e2ee_pb.ts +858 -337
- package/src/proto/ffi_pb.ts +442 -135
- package/src/proto/handle_pb.ts +33 -19
- package/src/proto/participant_pb.ts +225 -60
- package/src/proto/room_pb.ts +3149 -1013
- package/src/proto/rpc_pb.ts +358 -129
- package/src/proto/stats_pb.ts +1891 -877
- package/src/proto/track_pb.ts +587 -253
- package/src/proto/track_publication_pb.ts +180 -0
- package/src/proto/video_frame_pb.ts +861 -394
- package/src/room.ts +143 -188
- package/src/rpc.ts +1 -1
- package/src/track.ts +16 -17
- package/src/track_publication.ts +25 -26
- package/src/version.ts +1 -1
- package/src/video_frame.ts +48 -72
- package/src/video_source.ts +11 -8
- package/src/video_stream.ts +18 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/audio_stream.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/audio_stream.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { Mutex } from '@livekit/mutex';\nimport { AudioFrame } from './audio_frame.js';\nimport type { FfiEvent } from './ffi_client.js';\nimport { FfiClient, FfiClientEvent, FfiHandle } from './ffi_client.js';\nimport type { AudioStreamInfo, NewAudioStreamResponse } from './proto/audio_frame_pb.js';\nimport { AudioStreamType, NewAudioStreamRequest } from './proto/audio_frame_pb.js';\nimport type { Track } from './track.js';\n\nexport class AudioStream implements AsyncIterableIterator<AudioFrame> {\n /** @internal */\n info: AudioStreamInfo;\n /** @internal */\n ffiHandle: FfiHandle;\n /** @internal */\n eventQueue: (AudioFrame | null)[] = [];\n /** @internal */\n queueResolve: ((value: IteratorResult<AudioFrame>) => void) | null = null;\n /** @internal */\n mutex = new Mutex();\n\n track: Track;\n sampleRate: number;\n numChannels: number;\n\n constructor(track: Track, sampleRate: number = 48000, numChannels: number = 1) {\n this.track = track;\n this.sampleRate = sampleRate;\n this.numChannels = numChannels;\n\n const req = new NewAudioStreamRequest({\n type: AudioStreamType.AUDIO_STREAM_NATIVE,\n trackHandle: track.ffi_handle.handle,\n sampleRate: sampleRate,\n numChannels: numChannels,\n });\n\n const res = FfiClient.instance.request<NewAudioStreamResponse>({\n message: {\n case: 'newAudioStream',\n value: req,\n },\n });\n\n this.info = res.stream!.info!;\n this.ffiHandle = new FfiHandle(res.stream!.handle!.id!);\n\n FfiClient.instance.on(FfiClientEvent.FfiEvent, this.onEvent);\n }\n\n private onEvent = (ev: FfiEvent) => {\n if (\n ev.message.case != 'audioStreamEvent' ||\n ev.message.value.streamHandle != this.ffiHandle.handle\n ) {\n return;\n }\n\n const streamEvent = ev.message.value.message;\n switch (streamEvent.case) {\n case 'frameReceived':\n const frame = AudioFrame.fromOwnedInfo(streamEvent.value.frame!);\n if (this.queueResolve) {\n this.queueResolve({ done: false, value: frame });\n } else {\n this.eventQueue.push(frame);\n }\n break;\n case 'eos':\n FfiClient.instance.off(FfiClientEvent.FfiEvent, this.onEvent);\n break;\n }\n };\n\n async next(): Promise<IteratorResult<AudioFrame>> {\n const unlock = await this.mutex.lock();\n if (this.eventQueue.length > 0) {\n unlock();\n const value = this.eventQueue.shift();\n if (value) {\n return { done: false, value };\n } else {\n return { done: true, value: undefined };\n }\n }\n const promise = new Promise<IteratorResult<AudioFrame>>(\n (resolve) => (this.queueResolve = resolve),\n );\n unlock();\n return promise;\n }\n\n close() {\n this.eventQueue.push(null);\n this.ffiHandle.dispose();\n }\n\n [Symbol.asyncIterator](): AudioStream {\n return this;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,mBAAsB;AACtB,yBAA2B;AAE3B,wBAAqD;AAErD,4BAAuD;AAGhD,MAAM,YAAyD;AAAA,EAgBpE,YAAY,OAAc,aAAqB,MAAO,cAAsB,GAAG;AAV/E;AAAA,sBAAoC,CAAC;AAErC;AAAA,wBAAqE;AAErE;AAAA,iBAAQ,IAAI,mBAAM;AA+BlB,SAAQ,UAAU,CAAC,OAAiB;AAClC,UACE,GAAG,QAAQ,QAAQ,sBACnB,GAAG,QAAQ,MAAM,gBAAgB,KAAK,UAAU,QAChD;AACA;AAAA,MACF;AAEA,YAAM,cAAc,GAAG,QAAQ,MAAM;AACrC,cAAQ,YAAY,MAAM;AAAA,QACxB,KAAK;AACH,gBAAM,QAAQ,8BAAW,cAAc,YAAY,MAAM,KAAM;AAC/D,cAAI,KAAK,cAAc;AACrB,iBAAK,aAAa,EAAE,MAAM,OAAO,OAAO,MAAM,CAAC;AAAA,UACjD,OAAO;AACL,iBAAK,WAAW,KAAK,KAAK;AAAA,UAC5B;AACA;AAAA,QACF,KAAK;AACH,sCAAU,SAAS,IAAI,iCAAe,UAAU,KAAK,OAAO;AAC5D;AAAA,MACJ;AAAA,IACF;AA9CE,SAAK,QAAQ;AACb,SAAK,aAAa;AAClB,SAAK,cAAc;AAEnB,UAAM,MAAM,IAAI,4CAAsB;AAAA,MACpC,MAAM,sCAAgB;AAAA,MACtB,aAAa,MAAM,WAAW;AAAA,MAC9B;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,MAAM,4BAAU,SAAS,QAAgC;AAAA,MAC7D,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,SAAK,OAAO,IAAI,OAAQ;AACxB,SAAK,YAAY,IAAI,4BAAU,IAAI,OAAQ,OAAQ,EAAG;AAEtD,gCAAU,SAAS,GAAG,iCAAe,UAAU,KAAK,OAAO;AAAA,EAC7D;AAAA,EA0BA,MAAM,OAA4C;AAChD,UAAM,SAAS,MAAM,KAAK,MAAM,KAAK;AACrC,QAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,aAAO;AACP,YAAM,QAAQ,KAAK,WAAW,MAAM;AACpC,UAAI,OAAO;AACT,eAAO,EAAE,MAAM,OAAO,MAAM;AAAA,MAC9B,OAAO;AACL,eAAO,EAAE,MAAM,MAAM,OAAO,OAAU;AAAA,MACxC;AAAA,IACF;AACA,UAAM,UAAU,IAAI;AAAA,MAClB,CAAC,YAAa,KAAK,eAAe;AAAA,IACpC;AACA,WAAO;AACP,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AACN,SAAK,WAAW,KAAK,IAAI;AACzB,SAAK,UAAU,QAAQ;AAAA,EACzB;AAAA,EAEA,CAAC,OAAO,aAAa,IAAiB;AACpC,WAAO;AAAA,EACT;AACF;","names":[]}
|
package/dist/audio_stream.d.cts
CHANGED
|
@@ -3,12 +3,11 @@ import { AudioFrame } from './audio_frame.cjs';
|
|
|
3
3
|
import { FfiHandle } from './napi/native.d.cjs';
|
|
4
4
|
import { AudioStreamInfo } from './proto/audio_frame_pb.cjs';
|
|
5
5
|
import { Track } from './track.cjs';
|
|
6
|
-
import '@bufbuild/protobuf/codegenv1';
|
|
7
|
-
import './proto/handle_pb.cjs';
|
|
8
6
|
import '@bufbuild/protobuf';
|
|
9
7
|
import './proto/track_pb.cjs';
|
|
10
|
-
import './proto/e2ee_pb.cjs';
|
|
11
8
|
import './proto/stats_pb.cjs';
|
|
9
|
+
import './proto/e2ee_pb.cjs';
|
|
10
|
+
import './proto/handle_pb.cjs';
|
|
12
11
|
import './audio_source.cjs';
|
|
13
12
|
import './video_source.cjs';
|
|
14
13
|
import './proto/video_frame_pb.cjs';
|
package/dist/audio_stream.d.ts
CHANGED
|
@@ -3,12 +3,11 @@ import { AudioFrame } from './audio_frame.js';
|
|
|
3
3
|
import { FfiHandle } from './napi/native.d.js';
|
|
4
4
|
import { AudioStreamInfo } from './proto/audio_frame_pb.js';
|
|
5
5
|
import { Track } from './track.js';
|
|
6
|
-
import '@bufbuild/protobuf/codegenv1';
|
|
7
|
-
import './proto/handle_pb.js';
|
|
8
6
|
import '@bufbuild/protobuf';
|
|
9
7
|
import './proto/track_pb.js';
|
|
10
|
-
import './proto/e2ee_pb.js';
|
|
11
8
|
import './proto/stats_pb.js';
|
|
9
|
+
import './proto/e2ee_pb.js';
|
|
10
|
+
import './proto/handle_pb.js';
|
|
12
11
|
import './audio_source.js';
|
|
13
12
|
import './video_source.js';
|
|
14
13
|
import './proto/video_frame_pb.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio_stream.d.ts","sourceRoot":"","sources":["../src/audio_stream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audio_stream.d.ts","sourceRoot":"","sources":["../src/audio_stream.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAA0B,MAAM,2BAA2B,CAAC;AAEzF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,WAAY,YAAW,qBAAqB,CAAC,UAAU,CAAC;IACnE,gBAAgB;IAChB,IAAI,EAAE,eAAe,CAAC;IACtB,gBAAgB;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB;IAChB,UAAU,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAM;IACvC,gBAAgB;IAChB,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAC1E,gBAAgB;IAChB,KAAK,QAAe;IAEpB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;gBAER,KAAK,EAAE,KAAK,EAAE,UAAU,GAAE,MAAc,EAAE,WAAW,GAAE,MAAU;IAyB7E,OAAO,CAAC,OAAO,CAsBb;IAEI,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAkBjD,KAAK;IAKL,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW;CAGtC"}
|
package/dist/audio_stream.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { create } from "@bufbuild/protobuf";
|
|
2
1
|
import { Mutex } from "@livekit/mutex";
|
|
3
2
|
import { AudioFrame } from "./audio_frame.js";
|
|
4
3
|
import { FfiClient, FfiClientEvent, FfiHandle } from "./ffi_client.js";
|
|
5
|
-
import { AudioStreamType,
|
|
4
|
+
import { AudioStreamType, NewAudioStreamRequest } from "./proto/audio_frame_pb.js";
|
|
6
5
|
class AudioStream {
|
|
7
6
|
constructor(track, sampleRate = 48e3, numChannels = 1) {
|
|
8
7
|
/** @internal */
|
|
@@ -33,7 +32,7 @@ class AudioStream {
|
|
|
33
32
|
this.track = track;
|
|
34
33
|
this.sampleRate = sampleRate;
|
|
35
34
|
this.numChannels = numChannels;
|
|
36
|
-
const req =
|
|
35
|
+
const req = new NewAudioStreamRequest({
|
|
37
36
|
type: AudioStreamType.AUDIO_STREAM_NATIVE,
|
|
38
37
|
trackHandle: track.ffi_handle.handle,
|
|
39
38
|
sampleRate,
|
package/dist/audio_stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/audio_stream.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/audio_stream.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { Mutex } from '@livekit/mutex';\nimport { AudioFrame } from './audio_frame.js';\nimport type { FfiEvent } from './ffi_client.js';\nimport { FfiClient, FfiClientEvent, FfiHandle } from './ffi_client.js';\nimport type { AudioStreamInfo, NewAudioStreamResponse } from './proto/audio_frame_pb.js';\nimport { AudioStreamType, NewAudioStreamRequest } from './proto/audio_frame_pb.js';\nimport type { Track } from './track.js';\n\nexport class AudioStream implements AsyncIterableIterator<AudioFrame> {\n /** @internal */\n info: AudioStreamInfo;\n /** @internal */\n ffiHandle: FfiHandle;\n /** @internal */\n eventQueue: (AudioFrame | null)[] = [];\n /** @internal */\n queueResolve: ((value: IteratorResult<AudioFrame>) => void) | null = null;\n /** @internal */\n mutex = new Mutex();\n\n track: Track;\n sampleRate: number;\n numChannels: number;\n\n constructor(track: Track, sampleRate: number = 48000, numChannels: number = 1) {\n this.track = track;\n this.sampleRate = sampleRate;\n this.numChannels = numChannels;\n\n const req = new NewAudioStreamRequest({\n type: AudioStreamType.AUDIO_STREAM_NATIVE,\n trackHandle: track.ffi_handle.handle,\n sampleRate: sampleRate,\n numChannels: numChannels,\n });\n\n const res = FfiClient.instance.request<NewAudioStreamResponse>({\n message: {\n case: 'newAudioStream',\n value: req,\n },\n });\n\n this.info = res.stream!.info!;\n this.ffiHandle = new FfiHandle(res.stream!.handle!.id!);\n\n FfiClient.instance.on(FfiClientEvent.FfiEvent, this.onEvent);\n }\n\n private onEvent = (ev: FfiEvent) => {\n if (\n ev.message.case != 'audioStreamEvent' ||\n ev.message.value.streamHandle != this.ffiHandle.handle\n ) {\n return;\n }\n\n const streamEvent = ev.message.value.message;\n switch (streamEvent.case) {\n case 'frameReceived':\n const frame = AudioFrame.fromOwnedInfo(streamEvent.value.frame!);\n if (this.queueResolve) {\n this.queueResolve({ done: false, value: frame });\n } else {\n this.eventQueue.push(frame);\n }\n break;\n case 'eos':\n FfiClient.instance.off(FfiClientEvent.FfiEvent, this.onEvent);\n break;\n }\n };\n\n async next(): Promise<IteratorResult<AudioFrame>> {\n const unlock = await this.mutex.lock();\n if (this.eventQueue.length > 0) {\n unlock();\n const value = this.eventQueue.shift();\n if (value) {\n return { done: false, value };\n } else {\n return { done: true, value: undefined };\n }\n }\n const promise = new Promise<IteratorResult<AudioFrame>>(\n (resolve) => (this.queueResolve = resolve),\n );\n unlock();\n return promise;\n }\n\n close() {\n this.eventQueue.push(null);\n this.ffiHandle.dispose();\n }\n\n [Symbol.asyncIterator](): AudioStream {\n return this;\n }\n}\n"],"mappings":"AAGA,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAE3B,SAAS,WAAW,gBAAgB,iBAAiB;AAErD,SAAS,iBAAiB,6BAA6B;AAGhD,MAAM,YAAyD;AAAA,EAgBpE,YAAY,OAAc,aAAqB,MAAO,cAAsB,GAAG;AAV/E;AAAA,sBAAoC,CAAC;AAErC;AAAA,wBAAqE;AAErE;AAAA,iBAAQ,IAAI,MAAM;AA+BlB,SAAQ,UAAU,CAAC,OAAiB;AAClC,UACE,GAAG,QAAQ,QAAQ,sBACnB,GAAG,QAAQ,MAAM,gBAAgB,KAAK,UAAU,QAChD;AACA;AAAA,MACF;AAEA,YAAM,cAAc,GAAG,QAAQ,MAAM;AACrC,cAAQ,YAAY,MAAM;AAAA,QACxB,KAAK;AACH,gBAAM,QAAQ,WAAW,cAAc,YAAY,MAAM,KAAM;AAC/D,cAAI,KAAK,cAAc;AACrB,iBAAK,aAAa,EAAE,MAAM,OAAO,OAAO,MAAM,CAAC;AAAA,UACjD,OAAO;AACL,iBAAK,WAAW,KAAK,KAAK;AAAA,UAC5B;AACA;AAAA,QACF,KAAK;AACH,oBAAU,SAAS,IAAI,eAAe,UAAU,KAAK,OAAO;AAC5D;AAAA,MACJ;AAAA,IACF;AA9CE,SAAK,QAAQ;AACb,SAAK,aAAa;AAClB,SAAK,cAAc;AAEnB,UAAM,MAAM,IAAI,sBAAsB;AAAA,MACpC,MAAM,gBAAgB;AAAA,MACtB,aAAa,MAAM,WAAW;AAAA,MAC9B;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,MAAM,UAAU,SAAS,QAAgC;AAAA,MAC7D,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,SAAK,OAAO,IAAI,OAAQ;AACxB,SAAK,YAAY,IAAI,UAAU,IAAI,OAAQ,OAAQ,EAAG;AAEtD,cAAU,SAAS,GAAG,eAAe,UAAU,KAAK,OAAO;AAAA,EAC7D;AAAA,EA0BA,MAAM,OAA4C;AAChD,UAAM,SAAS,MAAM,KAAK,MAAM,KAAK;AACrC,QAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,aAAO;AACP,YAAM,QAAQ,KAAK,WAAW,MAAM;AACpC,UAAI,OAAO;AACT,eAAO,EAAE,MAAM,OAAO,MAAM;AAAA,MAC9B,OAAO;AACL,eAAO,EAAE,MAAM,MAAM,OAAO,OAAU;AAAA,MACxC;AAAA,IACF;AACA,UAAM,UAAU,IAAI;AAAA,MAClB,CAAC,YAAa,KAAK,eAAe;AAAA,IACpC;AACA,WAAO;AACP,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AACN,SAAK,WAAW,KAAK,IAAI;AACzB,SAAK,UAAU,QAAQ;AAAA,EACzB;AAAA,EAEA,CAAC,OAAO,aAAa,IAAiB;AACpC,WAAO;AAAA,EACT;AACF;","names":[]}
|
package/dist/e2ee.cjs
CHANGED
|
@@ -25,7 +25,6 @@ __export(e2ee_exports, {
|
|
|
25
25
|
defaultKeyProviderOptions: () => defaultKeyProviderOptions
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(e2ee_exports);
|
|
28
|
-
var import_protobuf = require("@bufbuild/protobuf");
|
|
29
28
|
var import_ffi_client = require("./ffi_client.cjs");
|
|
30
29
|
var import_e2ee_pb = require("./proto/e2ee_pb.cjs");
|
|
31
30
|
const DEFAULT_RATCHET_SALT = new TextEncoder().encode("LKFrameEncryptionKey");
|
|
@@ -47,11 +46,11 @@ class KeyProvider {
|
|
|
47
46
|
this.options = opts;
|
|
48
47
|
}
|
|
49
48
|
setSharedKey(sharedKey, keyIndex) {
|
|
50
|
-
const req =
|
|
49
|
+
const req = new import_e2ee_pb.E2eeRequest({
|
|
51
50
|
roomHandle: this.roomHandle,
|
|
52
51
|
message: {
|
|
53
52
|
case: "setSharedKey",
|
|
54
|
-
value:
|
|
53
|
+
value: new import_e2ee_pb.SetSharedKeyRequest({
|
|
55
54
|
keyIndex,
|
|
56
55
|
sharedKey
|
|
57
56
|
})
|
|
@@ -65,11 +64,11 @@ class KeyProvider {
|
|
|
65
64
|
});
|
|
66
65
|
}
|
|
67
66
|
exportSharedKey(keyIndex) {
|
|
68
|
-
const req =
|
|
67
|
+
const req = new import_e2ee_pb.E2eeRequest({
|
|
69
68
|
roomHandle: this.roomHandle,
|
|
70
69
|
message: {
|
|
71
70
|
case: "getSharedKey",
|
|
72
|
-
value:
|
|
71
|
+
value: new import_e2ee_pb.GetSharedKeyRequest({
|
|
73
72
|
keyIndex
|
|
74
73
|
})
|
|
75
74
|
}
|
|
@@ -83,11 +82,11 @@ class KeyProvider {
|
|
|
83
82
|
return res.message.value.key;
|
|
84
83
|
}
|
|
85
84
|
ratchetSharedKey(keyIndex) {
|
|
86
|
-
const req =
|
|
85
|
+
const req = new import_e2ee_pb.E2eeRequest({
|
|
87
86
|
roomHandle: this.roomHandle,
|
|
88
87
|
message: {
|
|
89
88
|
case: "ratchetSharedKey",
|
|
90
|
-
value:
|
|
89
|
+
value: new import_e2ee_pb.RatchetSharedKeyRequest({
|
|
91
90
|
keyIndex
|
|
92
91
|
})
|
|
93
92
|
}
|
|
@@ -101,11 +100,11 @@ class KeyProvider {
|
|
|
101
100
|
return res.message.value.newKey;
|
|
102
101
|
}
|
|
103
102
|
setKey(participantIdentity, keyIndex) {
|
|
104
|
-
const req =
|
|
103
|
+
const req = new import_e2ee_pb.E2eeRequest({
|
|
105
104
|
roomHandle: this.roomHandle,
|
|
106
105
|
message: {
|
|
107
106
|
case: "setKey",
|
|
108
|
-
value:
|
|
107
|
+
value: new import_e2ee_pb.SetKeyRequest({
|
|
109
108
|
keyIndex,
|
|
110
109
|
participantIdentity
|
|
111
110
|
})
|
|
@@ -119,11 +118,11 @@ class KeyProvider {
|
|
|
119
118
|
});
|
|
120
119
|
}
|
|
121
120
|
exportKey(participantIdentity, keyIndex) {
|
|
122
|
-
const req =
|
|
121
|
+
const req = new import_e2ee_pb.E2eeRequest({
|
|
123
122
|
roomHandle: this.roomHandle,
|
|
124
123
|
message: {
|
|
125
124
|
case: "getKey",
|
|
126
|
-
value:
|
|
125
|
+
value: new import_e2ee_pb.GetKeyRequest({
|
|
127
126
|
keyIndex,
|
|
128
127
|
participantIdentity
|
|
129
128
|
})
|
|
@@ -138,11 +137,11 @@ class KeyProvider {
|
|
|
138
137
|
return res.message.value.key;
|
|
139
138
|
}
|
|
140
139
|
ratchetKey(participantIdentity, keyIndex) {
|
|
141
|
-
const req =
|
|
140
|
+
const req = new import_e2ee_pb.E2eeRequest({
|
|
142
141
|
roomHandle: this.roomHandle,
|
|
143
142
|
message: {
|
|
144
143
|
case: "ratchetKey",
|
|
145
|
-
value:
|
|
144
|
+
value: new import_e2ee_pb.RatchetKeyRequest({
|
|
146
145
|
keyIndex,
|
|
147
146
|
participantIdentity
|
|
148
147
|
})
|
|
@@ -167,11 +166,11 @@ class FrameCryptor {
|
|
|
167
166
|
}
|
|
168
167
|
setEnabled(enabled) {
|
|
169
168
|
this.enabled = enabled;
|
|
170
|
-
const req =
|
|
169
|
+
const req = new import_e2ee_pb.E2eeRequest({
|
|
171
170
|
roomHandle: this.roomHandle,
|
|
172
171
|
message: {
|
|
173
172
|
case: "cryptorSetEnabled",
|
|
174
|
-
value:
|
|
173
|
+
value: new import_e2ee_pb.FrameCryptorSetEnabledRequest({
|
|
175
174
|
participantIdentity: this.participantIdentity,
|
|
176
175
|
enabled: this.enabled
|
|
177
176
|
})
|
|
@@ -186,11 +185,11 @@ class FrameCryptor {
|
|
|
186
185
|
}
|
|
187
186
|
setKeyIndex(keyIndex) {
|
|
188
187
|
this.keyIndex = keyIndex;
|
|
189
|
-
const req =
|
|
188
|
+
const req = new import_e2ee_pb.E2eeRequest({
|
|
190
189
|
roomHandle: this.roomHandle,
|
|
191
190
|
message: {
|
|
192
191
|
case: "cryptorSetKeyIndex",
|
|
193
|
-
value:
|
|
192
|
+
value: new import_e2ee_pb.FrameCryptorSetKeyIndexRequest({
|
|
194
193
|
participantIdentity: this.participantIdentity,
|
|
195
194
|
keyIndex: this.keyIndex
|
|
196
195
|
})
|
|
@@ -216,11 +215,11 @@ class E2EEManager {
|
|
|
216
215
|
}
|
|
217
216
|
setEnabled(enabled) {
|
|
218
217
|
this.enabled = enabled;
|
|
219
|
-
const req =
|
|
218
|
+
const req = new import_e2ee_pb.E2eeRequest({
|
|
220
219
|
roomHandle: this.roomHandle,
|
|
221
220
|
message: {
|
|
222
221
|
case: "managerSetEnabled",
|
|
223
|
-
value:
|
|
222
|
+
value: new import_e2ee_pb.E2eeManagerSetEnabledRequest({
|
|
224
223
|
enabled: this.enabled
|
|
225
224
|
})
|
|
226
225
|
}
|
|
@@ -233,7 +232,7 @@ class E2EEManager {
|
|
|
233
232
|
});
|
|
234
233
|
}
|
|
235
234
|
frameCryptors() {
|
|
236
|
-
const req =
|
|
235
|
+
const req = new import_e2ee_pb.E2eeRequest({
|
|
237
236
|
roomHandle: this.roomHandle,
|
|
238
237
|
message: {
|
|
239
238
|
case: "managerGetFrameCryptors",
|
package/dist/e2ee.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/e2ee.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { create } from '@bufbuild/protobuf';\nimport { FfiClient } from './ffi_client.js';\nimport type {\n E2eeManagerGetFrameCryptorsResponse,\n E2eeResponse,\n GetKeyResponse,\n GetSharedKeyResponse,\n RatchetKeyResponse,\n RatchetSharedKeyResponse,\n} from './proto/e2ee_pb.js';\nimport {\n E2eeManagerSetEnabledRequestSchema,\n E2eeRequestSchema,\n EncryptionType,\n FrameCryptorSetEnabledRequestSchema,\n FrameCryptorSetKeyIndexRequestSchema,\n GetKeyRequestSchema,\n GetSharedKeyRequestSchema,\n RatchetKeyRequestSchema,\n RatchetSharedKeyRequestSchema,\n SetKeyRequestSchema,\n SetSharedKeyRequestSchema,\n} from './proto/e2ee_pb.js';\n\nconst DEFAULT_RATCHET_SALT = new TextEncoder().encode('LKFrameEncryptionKey');\nconst DEFAULT_RATCHET_WINDOW_SIZE = 16;\nconst DEFAULT_FAILURE_TOLERANCE = -1;\n\nexport interface KeyProviderOptions {\n sharedKey?: Uint8Array;\n ratchetSalt: Uint8Array;\n ratchetWindowSize: number;\n failureTolerance: number;\n}\n\nexport const defaultKeyProviderOptions: KeyProviderOptions = {\n ratchetSalt: DEFAULT_RATCHET_SALT,\n ratchetWindowSize: DEFAULT_RATCHET_WINDOW_SIZE,\n failureTolerance: DEFAULT_FAILURE_TOLERANCE,\n};\n\nexport interface E2EEOptions {\n keyProviderOptions: KeyProviderOptions;\n encryptionType: EncryptionType;\n}\n\nexport const defaultE2EEOptions: E2EEOptions = {\n keyProviderOptions: defaultKeyProviderOptions,\n encryptionType: EncryptionType.GCM,\n};\n\nexport class KeyProvider {\n private roomHandle: bigint;\n options: KeyProviderOptions;\n\n /** internal */\n constructor(roomHandle: bigint, opts: KeyProviderOptions) {\n this.roomHandle = roomHandle;\n this.options = opts;\n }\n\n setSharedKey(sharedKey: Uint8Array, keyIndex: number) {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'setSharedKey',\n value: create(SetSharedKeyRequestSchema, {\n keyIndex: keyIndex,\n sharedKey: sharedKey,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n exportSharedKey(keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'getSharedKey',\n value: create(GetSharedKeyRequestSchema, {\n keyIndex: keyIndex,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as GetSharedKeyResponse).key;\n }\n\n ratchetSharedKey(keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'ratchetSharedKey',\n value: create(RatchetSharedKeyRequestSchema, {\n keyIndex: keyIndex,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as RatchetSharedKeyResponse).newKey;\n }\n\n setKey(participantIdentity: string, keyIndex: number) {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'setKey',\n value: create(SetKeyRequestSchema, {\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n exportKey(participantIdentity: string, keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'getKey',\n value: create(GetKeyRequestSchema, {\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as GetKeyResponse).key;\n }\n\n ratchetKey(participantIdentity: string, keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'ratchetKey',\n value: create(RatchetKeyRequestSchema, {\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as RatchetKeyResponse).newKey;\n }\n}\n\nexport class FrameCryptor {\n private roomHandle = BigInt(0);\n participantIdentity: string;\n keyIndex: number;\n enabled: boolean;\n\n constructor(roomHandle: bigint, participantIdentity: string, keyIndex: number, enabled: boolean) {\n this.roomHandle = roomHandle;\n this.participantIdentity = participantIdentity;\n this.keyIndex = keyIndex;\n this.enabled = enabled;\n }\n\n setEnabled(enabled: boolean) {\n this.enabled = enabled;\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'cryptorSetEnabled',\n value: create(FrameCryptorSetEnabledRequestSchema, {\n participantIdentity: this.participantIdentity,\n enabled: this.enabled,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n setKeyIndex(keyIndex: number) {\n this.keyIndex = keyIndex;\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'cryptorSetKeyIndex',\n value: create(FrameCryptorSetKeyIndexRequestSchema, {\n participantIdentity: this.participantIdentity,\n keyIndex: this.keyIndex,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n}\n\nexport class E2EEManager {\n private roomHandle = BigInt(0);\n private options: E2EEOptions;\n private keyProvider?: KeyProvider;\n\n enabled: boolean;\n\n constructor(roomHandle: bigint, opts?: E2EEOptions) {\n this.roomHandle = roomHandle;\n this.enabled = opts !== undefined;\n\n opts ??= defaultE2EEOptions;\n const options = { ...defaultE2EEOptions, ...opts };\n\n this.options = options;\n this.keyProvider = new KeyProvider(roomHandle, options.keyProviderOptions);\n }\n\n setEnabled(enabled: boolean) {\n this.enabled = enabled;\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'managerSetEnabled',\n value: create(E2eeManagerSetEnabledRequestSchema, {\n enabled: this.enabled,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n frameCryptors(): FrameCryptor[] {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'managerGetFrameCryptors',\n value: {},\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n const frameCryptors = (\n res.message.value as E2eeManagerGetFrameCryptorsResponse\n ).frameCryptors.map(\n (cryptor) =>\n new FrameCryptor(\n this.roomHandle,\n cryptor.participantIdentity,\n cryptor.keyIndex,\n cryptor.enabled,\n ),\n );\n\n return frameCryptors;\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/e2ee.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { FfiClient } from './ffi_client.js';\nimport type {\n E2eeManagerGetFrameCryptorsResponse,\n E2eeResponse,\n GetKeyResponse,\n GetSharedKeyResponse,\n RatchetKeyResponse,\n RatchetSharedKeyResponse,\n} from './proto/e2ee_pb.js';\nimport {\n E2eeManagerSetEnabledRequest,\n E2eeRequest,\n EncryptionType,\n FrameCryptorSetEnabledRequest,\n FrameCryptorSetKeyIndexRequest,\n GetKeyRequest,\n GetSharedKeyRequest,\n RatchetKeyRequest,\n RatchetSharedKeyRequest,\n SetKeyRequest,\n SetSharedKeyRequest,\n} from './proto/e2ee_pb.js';\n\nconst DEFAULT_RATCHET_SALT = new TextEncoder().encode('LKFrameEncryptionKey');\nconst DEFAULT_RATCHET_WINDOW_SIZE = 16;\nconst DEFAULT_FAILURE_TOLERANCE = -1;\n\nexport interface KeyProviderOptions {\n sharedKey?: Uint8Array;\n ratchetSalt: Uint8Array;\n ratchetWindowSize: number;\n failureTolerance: number;\n}\n\nexport const defaultKeyProviderOptions: KeyProviderOptions = {\n ratchetSalt: DEFAULT_RATCHET_SALT,\n ratchetWindowSize: DEFAULT_RATCHET_WINDOW_SIZE,\n failureTolerance: DEFAULT_FAILURE_TOLERANCE,\n};\n\nexport interface E2EEOptions {\n keyProviderOptions: KeyProviderOptions;\n encryptionType: EncryptionType;\n}\n\nexport const defaultE2EEOptions: E2EEOptions = {\n keyProviderOptions: defaultKeyProviderOptions,\n encryptionType: EncryptionType.GCM,\n};\n\nexport class KeyProvider {\n private roomHandle: bigint;\n options: KeyProviderOptions;\n\n /** internal */\n constructor(roomHandle: bigint, opts: KeyProviderOptions) {\n this.roomHandle = roomHandle;\n this.options = opts;\n }\n\n setSharedKey(sharedKey: Uint8Array, keyIndex: number) {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'setSharedKey',\n value: new SetSharedKeyRequest({\n keyIndex: keyIndex,\n sharedKey: sharedKey,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n exportSharedKey(keyIndex: number): Uint8Array {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'getSharedKey',\n value: new GetSharedKeyRequest({\n keyIndex: keyIndex,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as GetSharedKeyResponse).key!;\n }\n\n ratchetSharedKey(keyIndex: number): Uint8Array {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'ratchetSharedKey',\n value: new RatchetSharedKeyRequest({\n keyIndex: keyIndex,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as RatchetSharedKeyResponse).newKey!;\n }\n\n setKey(participantIdentity: string, keyIndex: number) {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'setKey',\n value: new SetKeyRequest({\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n exportKey(participantIdentity: string, keyIndex: number): Uint8Array {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'getKey',\n value: new GetKeyRequest({\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as GetKeyResponse).key!;\n }\n\n ratchetKey(participantIdentity: string, keyIndex: number): Uint8Array {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'ratchetKey',\n value: new RatchetKeyRequest({\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as RatchetKeyResponse).newKey!;\n }\n}\n\nexport class FrameCryptor {\n private roomHandle = BigInt(0);\n participantIdentity: string;\n keyIndex: number;\n enabled: boolean;\n\n constructor(roomHandle: bigint, participantIdentity: string, keyIndex: number, enabled: boolean) {\n this.roomHandle = roomHandle;\n this.participantIdentity = participantIdentity;\n this.keyIndex = keyIndex;\n this.enabled = enabled;\n }\n\n setEnabled(enabled: boolean) {\n this.enabled = enabled;\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'cryptorSetEnabled',\n value: new FrameCryptorSetEnabledRequest({\n participantIdentity: this.participantIdentity,\n enabled: this.enabled,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n setKeyIndex(keyIndex: number) {\n this.keyIndex = keyIndex;\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'cryptorSetKeyIndex',\n value: new FrameCryptorSetKeyIndexRequest({\n participantIdentity: this.participantIdentity,\n keyIndex: this.keyIndex,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n}\n\nexport class E2EEManager {\n private roomHandle = BigInt(0);\n private options: E2EEOptions;\n private keyProvider?: KeyProvider;\n\n enabled: boolean;\n\n constructor(roomHandle: bigint, opts?: E2EEOptions) {\n this.roomHandle = roomHandle;\n this.enabled = opts !== undefined;\n\n opts ??= defaultE2EEOptions;\n const options = { ...defaultE2EEOptions, ...opts };\n\n this.options = options;\n this.keyProvider = new KeyProvider(roomHandle, options.keyProviderOptions);\n }\n\n setEnabled(enabled: boolean) {\n this.enabled = enabled;\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'managerSetEnabled',\n value: new E2eeManagerSetEnabledRequest({\n enabled: this.enabled,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n frameCryptors(): FrameCryptor[] {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'managerGetFrameCryptors',\n value: {},\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n const frameCryptors = (\n res.message.value as E2eeManagerGetFrameCryptorsResponse\n ).frameCryptors.map(\n (cryptor) =>\n new FrameCryptor(\n this.roomHandle,\n cryptor.participantIdentity!,\n cryptor.keyIndex!,\n cryptor.enabled!,\n ),\n );\n\n return frameCryptors;\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/e2ee.d.cts
CHANGED
package/dist/e2ee.d.ts
CHANGED
package/dist/e2ee.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e2ee.d.ts","sourceRoot":"","sources":["../src/e2ee.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"e2ee.d.ts","sourceRoot":"","sources":["../src/e2ee.ts"],"names":[],"mappings":"AAYA,OAAO,EAGL,cAAc,EASf,MAAM,oBAAoB,CAAC;AAM5B,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,UAAU,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,yBAAyB,EAAE,kBAIvC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,eAAO,MAAM,kBAAkB,EAAE,WAGhC,CAAC;AAEF,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,EAAE,kBAAkB,CAAC;IAE5B,eAAe;gBACH,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB;IAKxD,YAAY,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM;IAoBpD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAqB7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAqB9C,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAoBpD,SAAS,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAsBpE,UAAU,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;CAqBtE;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;gBAEL,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAO/F,UAAU,CAAC,OAAO,EAAE,OAAO;IAqB3B,WAAW,CAAC,QAAQ,EAAE,MAAM;CAoB7B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAc;IAElC,OAAO,EAAE,OAAO,CAAC;gBAEL,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW;IAWlD,UAAU,CAAC,OAAO,EAAE,OAAO;IAoB3B,aAAa,IAAI,YAAY,EAAE;CA8BhC"}
|
package/dist/e2ee.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import { create } from "@bufbuild/protobuf";
|
|
2
1
|
import { FfiClient } from "./ffi_client.js";
|
|
3
2
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
E2eeManagerSetEnabledRequest,
|
|
4
|
+
E2eeRequest,
|
|
6
5
|
EncryptionType,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
FrameCryptorSetEnabledRequest,
|
|
7
|
+
FrameCryptorSetKeyIndexRequest,
|
|
8
|
+
GetKeyRequest,
|
|
9
|
+
GetSharedKeyRequest,
|
|
10
|
+
RatchetKeyRequest,
|
|
11
|
+
RatchetSharedKeyRequest,
|
|
12
|
+
SetKeyRequest,
|
|
13
|
+
SetSharedKeyRequest
|
|
15
14
|
} from "./proto/e2ee_pb.js";
|
|
16
15
|
const DEFAULT_RATCHET_SALT = new TextEncoder().encode("LKFrameEncryptionKey");
|
|
17
16
|
const DEFAULT_RATCHET_WINDOW_SIZE = 16;
|
|
@@ -32,11 +31,11 @@ class KeyProvider {
|
|
|
32
31
|
this.options = opts;
|
|
33
32
|
}
|
|
34
33
|
setSharedKey(sharedKey, keyIndex) {
|
|
35
|
-
const req =
|
|
34
|
+
const req = new E2eeRequest({
|
|
36
35
|
roomHandle: this.roomHandle,
|
|
37
36
|
message: {
|
|
38
37
|
case: "setSharedKey",
|
|
39
|
-
value:
|
|
38
|
+
value: new SetSharedKeyRequest({
|
|
40
39
|
keyIndex,
|
|
41
40
|
sharedKey
|
|
42
41
|
})
|
|
@@ -50,11 +49,11 @@ class KeyProvider {
|
|
|
50
49
|
});
|
|
51
50
|
}
|
|
52
51
|
exportSharedKey(keyIndex) {
|
|
53
|
-
const req =
|
|
52
|
+
const req = new E2eeRequest({
|
|
54
53
|
roomHandle: this.roomHandle,
|
|
55
54
|
message: {
|
|
56
55
|
case: "getSharedKey",
|
|
57
|
-
value:
|
|
56
|
+
value: new GetSharedKeyRequest({
|
|
58
57
|
keyIndex
|
|
59
58
|
})
|
|
60
59
|
}
|
|
@@ -68,11 +67,11 @@ class KeyProvider {
|
|
|
68
67
|
return res.message.value.key;
|
|
69
68
|
}
|
|
70
69
|
ratchetSharedKey(keyIndex) {
|
|
71
|
-
const req =
|
|
70
|
+
const req = new E2eeRequest({
|
|
72
71
|
roomHandle: this.roomHandle,
|
|
73
72
|
message: {
|
|
74
73
|
case: "ratchetSharedKey",
|
|
75
|
-
value:
|
|
74
|
+
value: new RatchetSharedKeyRequest({
|
|
76
75
|
keyIndex
|
|
77
76
|
})
|
|
78
77
|
}
|
|
@@ -86,11 +85,11 @@ class KeyProvider {
|
|
|
86
85
|
return res.message.value.newKey;
|
|
87
86
|
}
|
|
88
87
|
setKey(participantIdentity, keyIndex) {
|
|
89
|
-
const req =
|
|
88
|
+
const req = new E2eeRequest({
|
|
90
89
|
roomHandle: this.roomHandle,
|
|
91
90
|
message: {
|
|
92
91
|
case: "setKey",
|
|
93
|
-
value:
|
|
92
|
+
value: new SetKeyRequest({
|
|
94
93
|
keyIndex,
|
|
95
94
|
participantIdentity
|
|
96
95
|
})
|
|
@@ -104,11 +103,11 @@ class KeyProvider {
|
|
|
104
103
|
});
|
|
105
104
|
}
|
|
106
105
|
exportKey(participantIdentity, keyIndex) {
|
|
107
|
-
const req =
|
|
106
|
+
const req = new E2eeRequest({
|
|
108
107
|
roomHandle: this.roomHandle,
|
|
109
108
|
message: {
|
|
110
109
|
case: "getKey",
|
|
111
|
-
value:
|
|
110
|
+
value: new GetKeyRequest({
|
|
112
111
|
keyIndex,
|
|
113
112
|
participantIdentity
|
|
114
113
|
})
|
|
@@ -123,11 +122,11 @@ class KeyProvider {
|
|
|
123
122
|
return res.message.value.key;
|
|
124
123
|
}
|
|
125
124
|
ratchetKey(participantIdentity, keyIndex) {
|
|
126
|
-
const req =
|
|
125
|
+
const req = new E2eeRequest({
|
|
127
126
|
roomHandle: this.roomHandle,
|
|
128
127
|
message: {
|
|
129
128
|
case: "ratchetKey",
|
|
130
|
-
value:
|
|
129
|
+
value: new RatchetKeyRequest({
|
|
131
130
|
keyIndex,
|
|
132
131
|
participantIdentity
|
|
133
132
|
})
|
|
@@ -152,11 +151,11 @@ class FrameCryptor {
|
|
|
152
151
|
}
|
|
153
152
|
setEnabled(enabled) {
|
|
154
153
|
this.enabled = enabled;
|
|
155
|
-
const req =
|
|
154
|
+
const req = new E2eeRequest({
|
|
156
155
|
roomHandle: this.roomHandle,
|
|
157
156
|
message: {
|
|
158
157
|
case: "cryptorSetEnabled",
|
|
159
|
-
value:
|
|
158
|
+
value: new FrameCryptorSetEnabledRequest({
|
|
160
159
|
participantIdentity: this.participantIdentity,
|
|
161
160
|
enabled: this.enabled
|
|
162
161
|
})
|
|
@@ -171,11 +170,11 @@ class FrameCryptor {
|
|
|
171
170
|
}
|
|
172
171
|
setKeyIndex(keyIndex) {
|
|
173
172
|
this.keyIndex = keyIndex;
|
|
174
|
-
const req =
|
|
173
|
+
const req = new E2eeRequest({
|
|
175
174
|
roomHandle: this.roomHandle,
|
|
176
175
|
message: {
|
|
177
176
|
case: "cryptorSetKeyIndex",
|
|
178
|
-
value:
|
|
177
|
+
value: new FrameCryptorSetKeyIndexRequest({
|
|
179
178
|
participantIdentity: this.participantIdentity,
|
|
180
179
|
keyIndex: this.keyIndex
|
|
181
180
|
})
|
|
@@ -201,11 +200,11 @@ class E2EEManager {
|
|
|
201
200
|
}
|
|
202
201
|
setEnabled(enabled) {
|
|
203
202
|
this.enabled = enabled;
|
|
204
|
-
const req =
|
|
203
|
+
const req = new E2eeRequest({
|
|
205
204
|
roomHandle: this.roomHandle,
|
|
206
205
|
message: {
|
|
207
206
|
case: "managerSetEnabled",
|
|
208
|
-
value:
|
|
207
|
+
value: new E2eeManagerSetEnabledRequest({
|
|
209
208
|
enabled: this.enabled
|
|
210
209
|
})
|
|
211
210
|
}
|
|
@@ -218,7 +217,7 @@ class E2EEManager {
|
|
|
218
217
|
});
|
|
219
218
|
}
|
|
220
219
|
frameCryptors() {
|
|
221
|
-
const req =
|
|
220
|
+
const req = new E2eeRequest({
|
|
222
221
|
roomHandle: this.roomHandle,
|
|
223
222
|
message: {
|
|
224
223
|
case: "managerGetFrameCryptors",
|
package/dist/e2ee.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/e2ee.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { create } from '@bufbuild/protobuf';\nimport { FfiClient } from './ffi_client.js';\nimport type {\n E2eeManagerGetFrameCryptorsResponse,\n E2eeResponse,\n GetKeyResponse,\n GetSharedKeyResponse,\n RatchetKeyResponse,\n RatchetSharedKeyResponse,\n} from './proto/e2ee_pb.js';\nimport {\n E2eeManagerSetEnabledRequestSchema,\n E2eeRequestSchema,\n EncryptionType,\n FrameCryptorSetEnabledRequestSchema,\n FrameCryptorSetKeyIndexRequestSchema,\n GetKeyRequestSchema,\n GetSharedKeyRequestSchema,\n RatchetKeyRequestSchema,\n RatchetSharedKeyRequestSchema,\n SetKeyRequestSchema,\n SetSharedKeyRequestSchema,\n} from './proto/e2ee_pb.js';\n\nconst DEFAULT_RATCHET_SALT = new TextEncoder().encode('LKFrameEncryptionKey');\nconst DEFAULT_RATCHET_WINDOW_SIZE = 16;\nconst DEFAULT_FAILURE_TOLERANCE = -1;\n\nexport interface KeyProviderOptions {\n sharedKey?: Uint8Array;\n ratchetSalt: Uint8Array;\n ratchetWindowSize: number;\n failureTolerance: number;\n}\n\nexport const defaultKeyProviderOptions: KeyProviderOptions = {\n ratchetSalt: DEFAULT_RATCHET_SALT,\n ratchetWindowSize: DEFAULT_RATCHET_WINDOW_SIZE,\n failureTolerance: DEFAULT_FAILURE_TOLERANCE,\n};\n\nexport interface E2EEOptions {\n keyProviderOptions: KeyProviderOptions;\n encryptionType: EncryptionType;\n}\n\nexport const defaultE2EEOptions: E2EEOptions = {\n keyProviderOptions: defaultKeyProviderOptions,\n encryptionType: EncryptionType.GCM,\n};\n\nexport class KeyProvider {\n private roomHandle: bigint;\n options: KeyProviderOptions;\n\n /** internal */\n constructor(roomHandle: bigint, opts: KeyProviderOptions) {\n this.roomHandle = roomHandle;\n this.options = opts;\n }\n\n setSharedKey(sharedKey: Uint8Array, keyIndex: number) {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'setSharedKey',\n value: create(SetSharedKeyRequestSchema, {\n keyIndex: keyIndex,\n sharedKey: sharedKey,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n exportSharedKey(keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'getSharedKey',\n value: create(GetSharedKeyRequestSchema, {\n keyIndex: keyIndex,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as GetSharedKeyResponse).key;\n }\n\n ratchetSharedKey(keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'ratchetSharedKey',\n value: create(RatchetSharedKeyRequestSchema, {\n keyIndex: keyIndex,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as RatchetSharedKeyResponse).newKey;\n }\n\n setKey(participantIdentity: string, keyIndex: number) {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'setKey',\n value: create(SetKeyRequestSchema, {\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n exportKey(participantIdentity: string, keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'getKey',\n value: create(GetKeyRequestSchema, {\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as GetKeyResponse).key;\n }\n\n ratchetKey(participantIdentity: string, keyIndex: number): Uint8Array {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'ratchetKey',\n value: create(RatchetKeyRequestSchema, {\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as RatchetKeyResponse).newKey;\n }\n}\n\nexport class FrameCryptor {\n private roomHandle = BigInt(0);\n participantIdentity: string;\n keyIndex: number;\n enabled: boolean;\n\n constructor(roomHandle: bigint, participantIdentity: string, keyIndex: number, enabled: boolean) {\n this.roomHandle = roomHandle;\n this.participantIdentity = participantIdentity;\n this.keyIndex = keyIndex;\n this.enabled = enabled;\n }\n\n setEnabled(enabled: boolean) {\n this.enabled = enabled;\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'cryptorSetEnabled',\n value: create(FrameCryptorSetEnabledRequestSchema, {\n participantIdentity: this.participantIdentity,\n enabled: this.enabled,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n setKeyIndex(keyIndex: number) {\n this.keyIndex = keyIndex;\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'cryptorSetKeyIndex',\n value: create(FrameCryptorSetKeyIndexRequestSchema, {\n participantIdentity: this.participantIdentity,\n keyIndex: this.keyIndex,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n}\n\nexport class E2EEManager {\n private roomHandle = BigInt(0);\n private options: E2EEOptions;\n private keyProvider?: KeyProvider;\n\n enabled: boolean;\n\n constructor(roomHandle: bigint, opts?: E2EEOptions) {\n this.roomHandle = roomHandle;\n this.enabled = opts !== undefined;\n\n opts ??= defaultE2EEOptions;\n const options = { ...defaultE2EEOptions, ...opts };\n\n this.options = options;\n this.keyProvider = new KeyProvider(roomHandle, options.keyProviderOptions);\n }\n\n setEnabled(enabled: boolean) {\n this.enabled = enabled;\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'managerSetEnabled',\n value: create(E2eeManagerSetEnabledRequestSchema, {\n enabled: this.enabled,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n frameCryptors(): FrameCryptor[] {\n const req = create(E2eeRequestSchema, {\n roomHandle: this.roomHandle,\n message: {\n case: 'managerGetFrameCryptors',\n value: {},\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n const frameCryptors = (\n res.message.value as E2eeManagerGetFrameCryptorsResponse\n ).frameCryptors.map(\n (cryptor) =>\n new FrameCryptor(\n this.roomHandle,\n cryptor.participantIdentity,\n cryptor.keyIndex,\n cryptor.enabled,\n ),\n );\n\n return frameCryptors;\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/e2ee.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { FfiClient } from './ffi_client.js';\nimport type {\n E2eeManagerGetFrameCryptorsResponse,\n E2eeResponse,\n GetKeyResponse,\n GetSharedKeyResponse,\n RatchetKeyResponse,\n RatchetSharedKeyResponse,\n} from './proto/e2ee_pb.js';\nimport {\n E2eeManagerSetEnabledRequest,\n E2eeRequest,\n EncryptionType,\n FrameCryptorSetEnabledRequest,\n FrameCryptorSetKeyIndexRequest,\n GetKeyRequest,\n GetSharedKeyRequest,\n RatchetKeyRequest,\n RatchetSharedKeyRequest,\n SetKeyRequest,\n SetSharedKeyRequest,\n} from './proto/e2ee_pb.js';\n\nconst DEFAULT_RATCHET_SALT = new TextEncoder().encode('LKFrameEncryptionKey');\nconst DEFAULT_RATCHET_WINDOW_SIZE = 16;\nconst DEFAULT_FAILURE_TOLERANCE = -1;\n\nexport interface KeyProviderOptions {\n sharedKey?: Uint8Array;\n ratchetSalt: Uint8Array;\n ratchetWindowSize: number;\n failureTolerance: number;\n}\n\nexport const defaultKeyProviderOptions: KeyProviderOptions = {\n ratchetSalt: DEFAULT_RATCHET_SALT,\n ratchetWindowSize: DEFAULT_RATCHET_WINDOW_SIZE,\n failureTolerance: DEFAULT_FAILURE_TOLERANCE,\n};\n\nexport interface E2EEOptions {\n keyProviderOptions: KeyProviderOptions;\n encryptionType: EncryptionType;\n}\n\nexport const defaultE2EEOptions: E2EEOptions = {\n keyProviderOptions: defaultKeyProviderOptions,\n encryptionType: EncryptionType.GCM,\n};\n\nexport class KeyProvider {\n private roomHandle: bigint;\n options: KeyProviderOptions;\n\n /** internal */\n constructor(roomHandle: bigint, opts: KeyProviderOptions) {\n this.roomHandle = roomHandle;\n this.options = opts;\n }\n\n setSharedKey(sharedKey: Uint8Array, keyIndex: number) {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'setSharedKey',\n value: new SetSharedKeyRequest({\n keyIndex: keyIndex,\n sharedKey: sharedKey,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n exportSharedKey(keyIndex: number): Uint8Array {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'getSharedKey',\n value: new GetSharedKeyRequest({\n keyIndex: keyIndex,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as GetSharedKeyResponse).key!;\n }\n\n ratchetSharedKey(keyIndex: number): Uint8Array {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'ratchetSharedKey',\n value: new RatchetSharedKeyRequest({\n keyIndex: keyIndex,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as RatchetSharedKeyResponse).newKey!;\n }\n\n setKey(participantIdentity: string, keyIndex: number) {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'setKey',\n value: new SetKeyRequest({\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n exportKey(participantIdentity: string, keyIndex: number): Uint8Array {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'getKey',\n value: new GetKeyRequest({\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as GetKeyResponse).key!;\n }\n\n ratchetKey(participantIdentity: string, keyIndex: number): Uint8Array {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'ratchetKey',\n value: new RatchetKeyRequest({\n keyIndex: keyIndex,\n participantIdentity: participantIdentity,\n }),\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n return (res.message.value as RatchetKeyResponse).newKey!;\n }\n}\n\nexport class FrameCryptor {\n private roomHandle = BigInt(0);\n participantIdentity: string;\n keyIndex: number;\n enabled: boolean;\n\n constructor(roomHandle: bigint, participantIdentity: string, keyIndex: number, enabled: boolean) {\n this.roomHandle = roomHandle;\n this.participantIdentity = participantIdentity;\n this.keyIndex = keyIndex;\n this.enabled = enabled;\n }\n\n setEnabled(enabled: boolean) {\n this.enabled = enabled;\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'cryptorSetEnabled',\n value: new FrameCryptorSetEnabledRequest({\n participantIdentity: this.participantIdentity,\n enabled: this.enabled,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n setKeyIndex(keyIndex: number) {\n this.keyIndex = keyIndex;\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'cryptorSetKeyIndex',\n value: new FrameCryptorSetKeyIndexRequest({\n participantIdentity: this.participantIdentity,\n keyIndex: this.keyIndex,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n}\n\nexport class E2EEManager {\n private roomHandle = BigInt(0);\n private options: E2EEOptions;\n private keyProvider?: KeyProvider;\n\n enabled: boolean;\n\n constructor(roomHandle: bigint, opts?: E2EEOptions) {\n this.roomHandle = roomHandle;\n this.enabled = opts !== undefined;\n\n opts ??= defaultE2EEOptions;\n const options = { ...defaultE2EEOptions, ...opts };\n\n this.options = options;\n this.keyProvider = new KeyProvider(roomHandle, options.keyProviderOptions);\n }\n\n setEnabled(enabled: boolean) {\n this.enabled = enabled;\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'managerSetEnabled',\n value: new E2eeManagerSetEnabledRequest({\n enabled: this.enabled,\n }),\n },\n });\n\n FfiClient.instance.request({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n }\n\n frameCryptors(): FrameCryptor[] {\n const req = new E2eeRequest({\n roomHandle: this.roomHandle,\n message: {\n case: 'managerGetFrameCryptors',\n value: {},\n },\n });\n\n const res = FfiClient.instance.request<E2eeResponse>({\n message: {\n case: 'e2ee',\n value: req,\n },\n });\n\n const frameCryptors = (\n res.message.value as E2eeManagerGetFrameCryptorsResponse\n ).frameCryptors.map(\n (cryptor) =>\n new FrameCryptor(\n this.roomHandle,\n cryptor.participantIdentity!,\n cryptor.keyIndex!,\n cryptor.enabled!,\n ),\n );\n\n return frameCryptors;\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/ffi_client.cjs
CHANGED
|
@@ -31,10 +31,10 @@ __export(ffi_client_exports, {
|
|
|
31
31
|
FfiClient: () => FfiClient,
|
|
32
32
|
FfiClientEvent: () => FfiClientEvent,
|
|
33
33
|
FfiHandle: () => import_native.FfiHandle,
|
|
34
|
+
FfiRequest: () => import_ffi_pb.FfiRequest,
|
|
34
35
|
dispose: () => import_native.livekitDispose
|
|
35
36
|
});
|
|
36
37
|
module.exports = __toCommonJS(ffi_client_exports);
|
|
37
|
-
var import_protobuf = require("@bufbuild/protobuf");
|
|
38
38
|
var import_events = __toESM(require("events"), 1);
|
|
39
39
|
var import_native = require("./napi/native.cjs");
|
|
40
40
|
var import_ffi_pb = require("./proto/ffi_pb.cjs");
|
|
@@ -54,7 +54,7 @@ class FfiClient extends import_events.default {
|
|
|
54
54
|
this.setMaxListeners(0);
|
|
55
55
|
(0, import_native.livekitInitialize)(
|
|
56
56
|
(event_data) => {
|
|
57
|
-
const event =
|
|
57
|
+
const event = import_ffi_pb.FfiEvent.fromBinary(event_data);
|
|
58
58
|
this.emit("ffi_event" /* FfiEvent */, event);
|
|
59
59
|
},
|
|
60
60
|
true,
|
|
@@ -62,10 +62,10 @@ class FfiClient extends import_events.default {
|
|
|
62
62
|
);
|
|
63
63
|
}
|
|
64
64
|
request(req) {
|
|
65
|
-
const request =
|
|
66
|
-
const req_data =
|
|
65
|
+
const request = new import_ffi_pb.FfiRequest(req);
|
|
66
|
+
const req_data = request.toBinary();
|
|
67
67
|
const res_data = (0, import_native.livekitFfiRequest)(req_data);
|
|
68
|
-
return
|
|
68
|
+
return import_ffi_pb.FfiResponse.fromBinary(res_data).message.value;
|
|
69
69
|
}
|
|
70
70
|
copyBuffer(ptr, len) {
|
|
71
71
|
return (0, import_native.livekitCopyBuffer)(ptr, len);
|
|
@@ -90,6 +90,7 @@ class FfiClient extends import_events.default {
|
|
|
90
90
|
FfiClient,
|
|
91
91
|
FfiClientEvent,
|
|
92
92
|
FfiHandle,
|
|
93
|
+
FfiRequest,
|
|
93
94
|
dispose
|
|
94
95
|
});
|
|
95
96
|
//# sourceMappingURL=ffi_client.cjs.map
|
package/dist/ffi_client.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ffi_client.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type {
|
|
1
|
+
{"version":3,"sources":["../src/ffi_client.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { PartialMessage } from '@bufbuild/protobuf';\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport EventEmitter from 'events';\nimport {\n FfiHandle,\n livekitCopyBuffer,\n livekitDispose,\n livekitFfiRequest,\n livekitInitialize,\n livekitRetrievePtr,\n} from './napi/native.js';\nimport { FfiEvent, FfiRequest, FfiResponse } from './proto/ffi_pb.js';\nimport { SDK_VERSION } from './version.js';\n\nexport { FfiHandle, type FfiEvent, type FfiResponse, FfiRequest, livekitDispose as dispose };\n\nexport type FfiClientCallbacks = {\n ffi_event: (event: FfiEvent) => void;\n};\n\nexport enum FfiClientEvent {\n FfiEvent = 'ffi_event',\n}\n\nexport class FfiClient extends (EventEmitter as new () => TypedEmitter<FfiClientCallbacks>) {\n static _client?: FfiClient;\n\n /** @internal */\n static get instance(): FfiClient {\n if (!FfiClient._client) FfiClient._client = new FfiClient();\n\n return FfiClient._client;\n }\n\n constructor() {\n super();\n this.setMaxListeners(0);\n\n livekitInitialize(\n (event_data: Uint8Array) => {\n const event = FfiEvent.fromBinary(event_data);\n this.emit(FfiClientEvent.FfiEvent, event);\n },\n true,\n SDK_VERSION,\n );\n }\n\n request<T>(req: PartialMessage<FfiRequest>): T {\n const request = new FfiRequest(req);\n const req_data = request.toBinary();\n const res_data = livekitFfiRequest(req_data);\n return FfiResponse.fromBinary(res_data).message.value as T;\n }\n\n copyBuffer(ptr: bigint, len: number): Uint8Array {\n return livekitCopyBuffer(ptr, len);\n }\n\n retrievePtr(data: Uint8Array): bigint {\n return livekitRetrievePtr(data);\n }\n\n async waitFor<T>(predicate: (ev: FfiEvent) => boolean): Promise<T> {\n return new Promise<T>((resolve) => {\n const listener = (ev: FfiEvent) => {\n if (predicate(ev)) {\n this.off(FfiClientEvent.FfiEvent, listener);\n resolve(ev.message.value as T);\n }\n };\n this.on(FfiClientEvent.FfiEvent, listener);\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,oBAAyB;AACzB,oBAOO;AACP,oBAAkD;AAClD,qBAA4B;AAQrB,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,cAAW;AADD,SAAAA;AAAA,GAAA;AAIL,MAAM,kBAAmB,cAAAC,QAA4D;AAAA;AAAA,EAI1F,WAAW,WAAsB;AAC/B,QAAI,CAAC,UAAU,QAAS,WAAU,UAAU,IAAI,UAAU;AAE1D,WAAO,UAAU;AAAA,EACnB;AAAA,EAEA,cAAc;AACZ,UAAM;AACN,SAAK,gBAAgB,CAAC;AAEtB;AAAA,MACE,CAAC,eAA2B;AAC1B,cAAM,QAAQ,uBAAS,WAAW,UAAU;AAC5C,aAAK,KAAK,4BAAyB,KAAK;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAW,KAAoC;AAC7C,UAAM,UAAU,IAAI,yBAAW,GAAG;AAClC,UAAM,WAAW,QAAQ,SAAS;AAClC,UAAM,eAAW,iCAAkB,QAAQ;AAC3C,WAAO,0BAAY,WAAW,QAAQ,EAAE,QAAQ;AAAA,EAClD;AAAA,EAEA,WAAW,KAAa,KAAyB;AAC/C,eAAO,iCAAkB,KAAK,GAAG;AAAA,EACnC;AAAA,EAEA,YAAY,MAA0B;AACpC,eAAO,kCAAmB,IAAI;AAAA,EAChC;AAAA,EAEA,MAAM,QAAW,WAAkD;AACjE,WAAO,IAAI,QAAW,CAAC,YAAY;AACjC,YAAM,WAAW,CAAC,OAAiB;AACjC,YAAI,UAAU,EAAE,GAAG;AACjB,eAAK,IAAI,4BAAyB,QAAQ;AAC1C,kBAAQ,GAAG,QAAQ,KAAU;AAAA,QAC/B;AAAA,MACF;AACA,WAAK,GAAG,4BAAyB,QAAQ;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;","names":["FfiClientEvent","EventEmitter"]}
|