@livekit/rtc-node 0.13.24 → 0.13.26
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_filter.cjs +2 -2
- package/dist/audio_filter.cjs.map +1 -1
- package/dist/audio_filter.js +1 -1
- package/dist/audio_filter.js.map +1 -1
- package/dist/audio_frame.cjs +9 -5
- package/dist/audio_frame.cjs.map +1 -1
- package/dist/audio_frame.d.cts +2 -7
- package/dist/audio_frame.d.ts +2 -7
- package/dist/audio_frame.d.ts.map +1 -1
- package/dist/audio_frame.js +8 -4
- package/dist/audio_frame.js.map +1 -1
- package/dist/audio_mixer.cjs +10 -4
- package/dist/audio_mixer.cjs.map +1 -1
- package/dist/audio_mixer.d.cts +4 -7
- package/dist/audio_mixer.d.ts +4 -7
- package/dist/audio_mixer.d.ts.map +1 -1
- package/dist/audio_mixer.js +10 -4
- package/dist/audio_mixer.js.map +1 -1
- package/dist/audio_resampler.cjs +20 -12
- package/dist/audio_resampler.cjs.map +1 -1
- package/dist/audio_resampler.d.cts +6 -6
- package/dist/audio_resampler.d.ts +6 -6
- package/dist/audio_resampler.d.ts.map +1 -1
- package/dist/audio_resampler.js +12 -4
- package/dist/audio_resampler.js.map +1 -1
- package/dist/audio_source.cjs +11 -7
- package/dist/audio_source.cjs.map +1 -1
- package/dist/audio_source.d.cts +1 -7
- package/dist/audio_source.d.ts +1 -7
- package/dist/audio_source.d.ts.map +1 -1
- package/dist/audio_source.js +8 -3
- package/dist/audio_source.js.map +1 -1
- package/dist/audio_stream.cjs +16 -6
- package/dist/audio_stream.cjs.map +1 -1
- package/dist/audio_stream.d.cts +1 -14
- package/dist/audio_stream.d.ts +1 -14
- package/dist/audio_stream.d.ts.map +1 -1
- package/dist/audio_stream.js +15 -5
- package/dist/audio_stream.js.map +1 -1
- package/dist/data_streams/index.d.cts +2 -10
- package/dist/data_streams/index.d.ts +2 -10
- package/dist/data_streams/stream_reader.cjs +8 -0
- package/dist/data_streams/stream_reader.cjs.map +1 -1
- package/dist/data_streams/stream_reader.d.cts +2 -10
- package/dist/data_streams/stream_reader.d.ts +2 -10
- package/dist/data_streams/stream_reader.d.ts.map +1 -1
- package/dist/data_streams/stream_reader.js +8 -0
- package/dist/data_streams/stream_reader.js.map +1 -1
- package/dist/data_streams/stream_writer.d.cts +2 -10
- package/dist/data_streams/stream_writer.d.ts +2 -10
- package/dist/data_streams/types.cjs.map +1 -1
- package/dist/data_streams/types.d.cts +2 -10
- package/dist/data_streams/types.d.ts +2 -10
- package/dist/data_streams/types.d.ts.map +1 -1
- package/dist/e2ee.cjs +21 -21
- package/dist/e2ee.cjs.map +1 -1
- package/dist/e2ee.d.cts +1 -2
- package/dist/e2ee.d.ts +1 -2
- package/dist/e2ee.d.ts.map +1 -1
- package/dist/e2ee.js +2 -2
- package/dist/e2ee.js.map +1 -1
- package/dist/ffi_client.cjs +30 -15
- package/dist/ffi_client.cjs.map +1 -1
- package/dist/ffi_client.d.cts +6 -17
- package/dist/ffi_client.d.ts +6 -17
- package/dist/ffi_client.d.ts.map +1 -1
- package/dist/ffi_client.js +24 -6
- package/dist/ffi_client.js.map +1 -1
- package/dist/frame_processor.cjs +13 -2
- package/dist/frame_processor.cjs.map +1 -1
- package/dist/frame_processor.d.cts +5 -8
- package/dist/frame_processor.d.ts +5 -8
- package/dist/frame_processor.d.ts.map +1 -1
- package/dist/frame_processor.js +10 -1
- package/dist/frame_processor.js.map +1 -1
- package/dist/index.cjs +25 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -16
- package/dist/index.d.ts +3 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -7
- package/dist/index.js.map +1 -1
- package/dist/participant.cjs +146 -101
- package/dist/participant.cjs.map +1 -1
- package/dist/participant.d.cts +4 -16
- package/dist/participant.d.ts +4 -16
- package/dist/participant.d.ts.map +1 -1
- package/dist/participant.js +120 -75
- package/dist/participant.js.map +1 -1
- package/dist/room.cjs +116 -58
- package/dist/room.cjs.map +1 -1
- package/dist/room.d.cts +6 -15
- package/dist/room.d.ts +6 -15
- package/dist/room.d.ts.map +1 -1
- package/dist/room.js +113 -55
- package/dist/room.js.map +1 -1
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.cts +1 -2
- package/dist/rpc.d.ts +1 -2
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js.map +1 -1
- package/dist/{stream_reader-Ch2zvjU3.d.cts → stream_reader-CuG4b8Y-.d.cts} +1 -1
- package/dist/{stream_reader-DRyR29vo.d.ts → stream_reader-CuG4b8Y-.d.ts} +1 -1
- package/dist/track.cjs +3 -3
- package/dist/track.cjs.map +1 -1
- package/dist/track.d.cts +1 -14
- package/dist/track.d.ts +1 -14
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +1 -1
- package/dist/track.js.map +1 -1
- package/dist/track_publication.cjs +4 -4
- package/dist/track_publication.cjs.map +1 -1
- package/dist/track_publication.d.cts +1 -14
- package/dist/track_publication.d.ts +1 -14
- package/dist/track_publication.d.ts.map +1 -1
- package/dist/track_publication.js +2 -2
- 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 +42 -42
- package/dist/video_frame.cjs.map +1 -1
- package/dist/video_frame.d.cts +1 -6
- package/dist/video_frame.d.ts +1 -6
- package/dist/video_frame.d.ts.map +1 -1
- package/dist/video_frame.js +2 -2
- package/dist/video_frame.js.map +1 -1
- package/dist/video_source.cjs +5 -5
- package/dist/video_source.cjs.map +1 -1
- package/dist/video_source.d.cts +1 -14
- package/dist/video_source.d.ts +1 -14
- package/dist/video_source.d.ts.map +1 -1
- package/dist/video_source.js +2 -2
- package/dist/video_source.js.map +1 -1
- package/dist/video_stream.cjs +12 -4
- package/dist/video_stream.cjs.map +1 -1
- package/dist/video_stream.d.cts +1 -14
- package/dist/video_stream.d.ts +1 -14
- package/dist/video_stream.d.ts.map +1 -1
- package/dist/video_stream.js +10 -2
- package/dist/video_stream.js.map +1 -1
- package/package.json +7 -37
- package/src/audio_filter.ts +2 -2
- package/src/audio_frame.ts +17 -5
- package/src/audio_mixer.test.ts +102 -0
- package/src/audio_mixer.ts +10 -4
- package/src/audio_resampler.ts +14 -4
- package/src/audio_source.ts +13 -5
- package/src/audio_stream.ts +21 -6
- package/src/data_streams/stream_reader.ts +19 -1
- package/src/data_streams/types.ts +1 -1
- package/src/e2ee.ts +3 -3
- package/src/ffi_client.ts +33 -8
- package/src/frame_processor.ts +21 -0
- package/src/index.ts +6 -5
- package/src/participant.ts +117 -66
- package/src/room.ts +161 -69
- package/src/rpc.ts +1 -1
- package/src/tests/e2e.test.ts +179 -8
- package/src/track.ts +4 -4
- package/src/track_publication.ts +6 -6
- package/src/version.ts +1 -1
- package/src/video_frame.ts +3 -3
- package/src/video_source.ts +3 -3
- package/src/video_stream.ts +15 -3
- package/Cargo.toml +0 -25
- package/build.rs +0 -9
- package/dist/napi/native.cjs +0 -301
- package/dist/napi/native.d.cjs +0 -17
- package/dist/napi/native.d.cjs.map +0 -1
- package/dist/napi/native.d.d.cts +0 -21
- package/dist/napi/native.d.d.ts +0 -21
- package/dist/napi/native.d.js +0 -1
- package/dist/napi/native.d.js.map +0 -1
- package/dist/napi/native.d.ts +0 -19
- package/dist/napi/native.js +0 -15
- package/dist/native.cjs +0 -301
- package/dist/native.d.ts +0 -19
- package/dist/native.js +0 -15
- package/dist/proto/audio_frame_pb.cjs +0 -1357
- package/dist/proto/audio_frame_pb.cjs.map +0 -1
- package/dist/proto/audio_frame_pb.d.cts +0 -1183
- package/dist/proto/audio_frame_pb.d.ts +0 -1183
- package/dist/proto/audio_frame_pb.d.ts.map +0 -1
- package/dist/proto/audio_frame_pb.js +0 -1283
- package/dist/proto/audio_frame_pb.js.map +0 -1
- package/dist/proto/data_stream_pb.cjs +0 -1638
- package/dist/proto/data_stream_pb.cjs.map +0 -1
- package/dist/proto/data_stream_pb.d.cts +0 -1449
- package/dist/proto/data_stream_pb.d.ts +0 -1449
- package/dist/proto/data_stream_pb.d.ts.map +0 -1
- package/dist/proto/data_stream_pb.js +0 -1559
- package/dist/proto/data_stream_pb.js.map +0 -1
- package/dist/proto/e2ee_pb.cjs +0 -746
- package/dist/proto/e2ee_pb.cjs.map +0 -1
- package/dist/proto/e2ee_pb.d.cts +0 -653
- package/dist/proto/e2ee_pb.d.ts +0 -653
- package/dist/proto/e2ee_pb.d.ts.map +0 -1
- package/dist/proto/e2ee_pb.js +0 -696
- package/dist/proto/e2ee_pb.js.map +0 -1
- package/dist/proto/ffi_pb.cjs +0 -477
- package/dist/proto/ffi_pb.cjs.map +0 -1
- package/dist/proto/ffi_pb.d.cts +0 -1321
- package/dist/proto/ffi_pb.d.ts +0 -1321
- package/dist/proto/ffi_pb.d.ts.map +0 -1
- package/dist/proto/ffi_pb.js +0 -444
- package/dist/proto/ffi_pb.js.map +0 -1
- package/dist/proto/handle_pb.cjs +0 -53
- package/dist/proto/handle_pb.cjs.map +0 -1
- package/dist/proto/handle_pb.d.cts +0 -31
- package/dist/proto/handle_pb.d.ts +0 -31
- package/dist/proto/handle_pb.d.ts.map +0 -1
- package/dist/proto/handle_pb.js +0 -29
- package/dist/proto/handle_pb.js.map +0 -1
- package/dist/proto/participant_pb.cjs +0 -173
- package/dist/proto/participant_pb.cjs.map +0 -1
- package/dist/proto/participant_pb.d.cts +0 -218
- package/dist/proto/participant_pb.d.ts +0 -218
- package/dist/proto/participant_pb.d.ts.map +0 -1
- package/dist/proto/participant_pb.js +0 -145
- package/dist/proto/participant_pb.js.map +0 -1
- package/dist/proto/room_pb.cjs +0 -3374
- package/dist/proto/room_pb.cjs.map +0 -1
- package/dist/proto/room_pb.d.cts +0 -3028
- package/dist/proto/room_pb.d.ts +0 -3028
- package/dist/proto/room_pb.d.ts.map +0 -1
- package/dist/proto/room_pb.js +0 -3232
- package/dist/proto/room_pb.js.map +0 -1
- package/dist/proto/rpc_pb.cjs +0 -328
- package/dist/proto/rpc_pb.cjs.map +0 -1
- package/dist/proto/rpc_pb.d.cts +0 -267
- package/dist/proto/rpc_pb.d.ts +0 -267
- package/dist/proto/rpc_pb.d.ts.map +0 -1
- package/dist/proto/rpc_pb.js +0 -294
- package/dist/proto/rpc_pb.js.map +0 -1
- package/dist/proto/stats_pb.cjs +0 -1370
- package/dist/proto/stats_pb.cjs.map +0 -1
- package/dist/proto/stats_pb.d.cts +0 -1764
- package/dist/proto/stats_pb.d.ts +0 -1764
- package/dist/proto/stats_pb.d.ts.map +0 -1
- package/dist/proto/stats_pb.js +0 -1300
- package/dist/proto/stats_pb.js.map +0 -1
- package/dist/proto/track_pb.cjs +0 -630
- package/dist/proto/track_pb.cjs.map +0 -1
- package/dist/proto/track_pb.d.cts +0 -542
- package/dist/proto/track_pb.d.ts +0 -542
- package/dist/proto/track_pb.d.ts.map +0 -1
- package/dist/proto/track_pb.js +0 -584
- package/dist/proto/track_pb.js.map +0 -1
- package/dist/proto/track_publication_pb.cjs +0 -194
- package/dist/proto/track_publication_pb.cjs.map +0 -1
- package/dist/proto/track_publication_pb.d.cts +0 -135
- package/dist/proto/track_publication_pb.d.ts +0 -135
- package/dist/proto/track_publication_pb.d.ts.map +0 -1
- package/dist/proto/track_publication_pb.js +0 -164
- package/dist/proto/track_publication_pb.js.map +0 -1
- package/dist/proto/video_frame_pb.cjs +0 -723
- package/dist/proto/video_frame_pb.cjs.map +0 -1
- package/dist/proto/video_frame_pb.d.cts +0 -667
- package/dist/proto/video_frame_pb.d.ts +0 -667
- package/dist/proto/video_frame_pb.d.ts.map +0 -1
- package/dist/proto/video_frame_pb.js +0 -673
- package/dist/proto/video_frame_pb.js.map +0 -1
- package/src/lib.rs +0 -9
- package/src/napi/native.cjs +0 -301
- package/src/napi/native.d.ts +0 -19
- package/src/napi/native.js +0 -15
- package/src/nodejs.rs +0 -134
- package/src/proto/audio_frame_pb.ts +0 -2270
- package/src/proto/data_stream_pb.ts +0 -2674
- package/src/proto/e2ee_pb.ts +0 -1231
- package/src/proto/ffi_pb.ts +0 -1700
- package/src/proto/handle_pb.ts +0 -69
- package/src/proto/participant_pb.ts +0 -351
- package/src/proto/room_pb.ts +0 -5661
- package/src/proto/rpc_pb.ts +0 -539
- package/src/proto/stats_pb.ts +0 -3050
- package/src/proto/track_pb.ts +0 -1040
- package/src/proto/track_publication_pb.ts +0 -284
- package/src/proto/video_frame_pb.ts +0 -1236
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":"AAWA,OAAO,EAGL,cAAc,EASf,MAAM,2BAA2B,CAAC;AAOnC,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,yBAAyB,EAAE,kBAIvC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;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;IAEjC,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,4 +1,3 @@
|
|
|
1
|
-
import { FfiClient } from "./ffi_client.js";
|
|
2
1
|
import {
|
|
3
2
|
E2eeManagerSetEnabledRequest,
|
|
4
3
|
E2eeRequest,
|
|
@@ -11,7 +10,8 @@ import {
|
|
|
11
10
|
RatchetSharedKeyRequest,
|
|
12
11
|
SetKeyRequest,
|
|
13
12
|
SetSharedKeyRequest
|
|
14
|
-
} from "
|
|
13
|
+
} from "@livekit/rtc-ffi-bindings";
|
|
14
|
+
import { FfiClient } from "./ffi_client.js";
|
|
15
15
|
const DEFAULT_RATCHET_SALT = new TextEncoder().encode("LKFrameEncryptionKey");
|
|
16
16
|
const DEFAULT_RATCHET_WINDOW_SIZE = 16;
|
|
17
17
|
const DEFAULT_FAILURE_TOLERANCE = -1;
|
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 { 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":[]}
|
|
1
|
+
{"version":3,"sources":["../src/e2ee.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type {\n E2eeManagerGetFrameCryptorsResponse,\n E2eeResponse,\n GetKeyResponse,\n GetSharedKeyResponse,\n RatchetKeyResponse,\n RatchetSharedKeyResponse,\n} from '@livekit/rtc-ffi-bindings';\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 '@livekit/rtc-ffi-bindings';\nimport { FfiClient } from './ffi_client.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":"AAWA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAE1B,MAAM,uBAAuB,IAAI,YAAY,EAAE,OAAO,sBAAsB;AAC5E,MAAM,8BAA8B;AACpC,MAAM,4BAA4B;AAS3B,MAAM,4BAAgD;AAAA,EAC3D,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,kBAAkB;AACpB;AAOO,MAAM,qBAAkC;AAAA,EAC7C,oBAAoB;AAAA,EACpB,gBAAgB,eAAe;AACjC;AAEO,MAAM,YAAY;AAAA;AAAA,EAKvB,YAAY,YAAoB,MAA0B;AACxD,SAAK,aAAa;AAClB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,aAAa,WAAuB,UAAkB;AACpD,UAAM,MAAM,IAAI,YAAY;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO,IAAI,oBAAoB;AAAA,UAC7B;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,cAAU,SAAS,QAAQ;AAAA,MACzB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,gBAAgB,UAA8B;AAC5C,UAAM,MAAM,IAAI,YAAY;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO,IAAI,oBAAoB;AAAA,UAC7B;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,UAAM,MAAM,UAAU,SAAS,QAAsB;AAAA,MACnD,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAQ,IAAI,QAAQ,MAA+B;AAAA,EACrD;AAAA,EAEA,iBAAiB,UAA8B;AAC7C,UAAM,MAAM,IAAI,YAAY;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO,IAAI,wBAAwB;AAAA,UACjC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,UAAM,MAAM,UAAU,SAAS,QAAsB;AAAA,MACnD,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAQ,IAAI,QAAQ,MAAmC;AAAA,EACzD;AAAA,EAEA,OAAO,qBAA6B,UAAkB;AACpD,UAAM,MAAM,IAAI,YAAY;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO,IAAI,cAAc;AAAA,UACvB;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,cAAU,SAAS,QAAQ;AAAA,MACzB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,qBAA6B,UAA8B;AACnE,UAAM,MAAM,IAAI,YAAY;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO,IAAI,cAAc;AAAA,UACvB;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,UAAM,MAAM,UAAU,SAAS,QAAsB;AAAA,MACnD,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAQ,IAAI,QAAQ,MAAyB;AAAA,EAC/C;AAAA,EAEA,WAAW,qBAA6B,UAA8B;AACpE,UAAM,MAAM,IAAI,YAAY;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO,IAAI,kBAAkB;AAAA,UAC3B;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,UAAM,MAAM,UAAU,SAAS,QAAsB;AAAA,MACnD,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,WAAQ,IAAI,QAAQ,MAA6B;AAAA,EACnD;AACF;AAEO,MAAM,aAAa;AAAA,EAMxB,YAAY,YAAoB,qBAA6B,UAAkB,SAAkB;AALjG,SAAQ,aAAa,OAAO,CAAC;AAM3B,SAAK,aAAa;AAClB,SAAK,sBAAsB;AAC3B,SAAK,WAAW;AAChB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,WAAW,SAAkB;AAC3B,SAAK,UAAU;AACf,UAAM,MAAM,IAAI,YAAY;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO,IAAI,8BAA8B;AAAA,UACvC,qBAAqB,KAAK;AAAA,UAC1B,SAAS,KAAK;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,cAAU,SAAS,QAAQ;AAAA,MACzB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,YAAY,UAAkB;AAC5B,SAAK,WAAW;AAChB,UAAM,MAAM,IAAI,YAAY;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO,IAAI,+BAA+B;AAAA,UACxC,qBAAqB,KAAK;AAAA,UAC1B,UAAU,KAAK;AAAA,QACjB,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,cAAU,SAAS,QAAQ;AAAA,MACzB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,MAAM,YAAY;AAAA,EAOvB,YAAY,YAAoB,MAAoB;AANpD,SAAQ,aAAa,OAAO,CAAC;AAO3B,SAAK,aAAa;AAClB,SAAK,UAAU,SAAS;AAExB,aAAS;AACT,UAAM,UAAU,EAAE,GAAG,oBAAoB,GAAG,KAAK;AAEjD,SAAK,UAAU;AACf,SAAK,cAAc,IAAI,YAAY,YAAY,QAAQ,kBAAkB;AAAA,EAC3E;AAAA,EAEA,WAAW,SAAkB;AAC3B,SAAK,UAAU;AACf,UAAM,MAAM,IAAI,YAAY;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO,IAAI,6BAA6B;AAAA,UACtC,SAAS,KAAK;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,cAAU,SAAS,QAAQ;AAAA,MACzB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,gBAAgC;AAC9B,UAAM,MAAM,IAAI,YAAY;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO,CAAC;AAAA,MACV;AAAA,IACF,CAAC;AAED,UAAM,MAAM,UAAU,SAAS,QAAsB;AAAA,MACnD,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,UAAM,gBACJ,IAAI,QAAQ,MACZ,cAAc;AAAA,MACd,CAAC,YACC,IAAI;AAAA,QACF,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACJ;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}
|
package/dist/ffi_client.cjs
CHANGED
|
@@ -30,14 +30,13 @@ var ffi_client_exports = {};
|
|
|
30
30
|
__export(ffi_client_exports, {
|
|
31
31
|
FfiClient: () => FfiClient,
|
|
32
32
|
FfiClientEvent: () => FfiClientEvent,
|
|
33
|
-
FfiHandle: () =>
|
|
34
|
-
FfiRequest: () =>
|
|
35
|
-
dispose: () =>
|
|
33
|
+
FfiHandle: () => import_rtc_ffi_bindings.FfiHandle,
|
|
34
|
+
FfiRequest: () => import_rtc_ffi_bindings.FfiRequest,
|
|
35
|
+
dispose: () => import_rtc_ffi_bindings.livekitDispose
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(ffi_client_exports);
|
|
38
|
+
var import_rtc_ffi_bindings = require("@livekit/rtc-ffi-bindings");
|
|
38
39
|
var import_events = __toESM(require("events"), 1);
|
|
39
|
-
var import_native = require("./napi/native.cjs");
|
|
40
|
-
var import_ffi_pb = require("./proto/ffi_pb.cjs");
|
|
41
40
|
var import_version = require("./version.cjs");
|
|
42
41
|
var FfiClientEvent = /* @__PURE__ */ ((FfiClientEvent2) => {
|
|
43
42
|
FfiClientEvent2["FfiEvent"] = "ffi_event";
|
|
@@ -54,9 +53,9 @@ class FfiClient extends import_events.default {
|
|
|
54
53
|
constructor() {
|
|
55
54
|
super();
|
|
56
55
|
this.setMaxListeners(0);
|
|
57
|
-
(0,
|
|
56
|
+
(0, import_rtc_ffi_bindings.livekitInitialize)(
|
|
58
57
|
(event_data) => {
|
|
59
|
-
const event =
|
|
58
|
+
const event = import_rtc_ffi_bindings.FfiEvent.fromBinary(event_data);
|
|
60
59
|
this.emit("ffi_event" /* FfiEvent */, event);
|
|
61
60
|
},
|
|
62
61
|
true,
|
|
@@ -64,25 +63,41 @@ class FfiClient extends import_events.default {
|
|
|
64
63
|
);
|
|
65
64
|
}
|
|
66
65
|
request(req) {
|
|
67
|
-
const request = new
|
|
66
|
+
const request = new import_rtc_ffi_bindings.FfiRequest(req);
|
|
68
67
|
const req_data = request.toBinary();
|
|
69
|
-
const res_data = (0,
|
|
70
|
-
return
|
|
68
|
+
const res_data = (0, import_rtc_ffi_bindings.livekitFfiRequest)(req_data);
|
|
69
|
+
return import_rtc_ffi_bindings.FfiResponse.fromBinary(res_data).message.value;
|
|
71
70
|
}
|
|
72
71
|
copyBuffer(ptr, len) {
|
|
73
|
-
return (0,
|
|
72
|
+
return (0, import_rtc_ffi_bindings.livekitCopyBuffer)(ptr, len);
|
|
74
73
|
}
|
|
75
74
|
retrievePtr(data) {
|
|
76
|
-
return (0,
|
|
75
|
+
return (0, import_rtc_ffi_bindings.livekitRetrievePtr)(data);
|
|
77
76
|
}
|
|
78
|
-
async waitFor(predicate) {
|
|
79
|
-
return new Promise((resolve) => {
|
|
77
|
+
async waitFor(predicate, options) {
|
|
78
|
+
return new Promise((resolve, reject) => {
|
|
79
|
+
var _a, _b;
|
|
80
80
|
const listener = (ev) => {
|
|
81
81
|
if (predicate(ev)) {
|
|
82
|
-
|
|
82
|
+
cleanup();
|
|
83
83
|
resolve(ev.message.value);
|
|
84
84
|
}
|
|
85
85
|
};
|
|
86
|
+
const cleanup = () => {
|
|
87
|
+
var _a2;
|
|
88
|
+
this.off("ffi_event" /* FfiEvent */, listener);
|
|
89
|
+
(_a2 = options == null ? void 0 : options.signal) == null ? void 0 : _a2.removeEventListener("abort", onAbort);
|
|
90
|
+
};
|
|
91
|
+
const onAbort = () => {
|
|
92
|
+
var _a2;
|
|
93
|
+
cleanup();
|
|
94
|
+
reject(((_a2 = options == null ? void 0 : options.signal) == null ? void 0 : _a2.reason) ?? new Error("waitFor aborted"));
|
|
95
|
+
};
|
|
96
|
+
if ((_a = options == null ? void 0 : options.signal) == null ? void 0 : _a.aborted) {
|
|
97
|
+
reject(options.signal.reason ?? new Error("waitFor aborted"));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
(_b = options == null ? void 0 : options.signal) == null ? void 0 : _b.addEventListener("abort", onAbort);
|
|
86
101
|
this.on("ffi_event" /* FfiEvent */, listener);
|
|
87
102
|
});
|
|
88
103
|
}
|
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
|
|
1
|
+
{"version":3,"sources":["../src/ffi_client.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport {\n FfiEvent,\n FfiHandle,\n FfiRequest,\n FfiResponse,\n type PartialMessage,\n livekitCopyBuffer,\n livekitDispose,\n livekitFfiRequest,\n livekitInitialize,\n livekitRetrievePtr,\n} from '@livekit/rtc-ffi-bindings';\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport EventEmitter from 'events';\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\ndeclare global {\n // eslint-disable-next-line no-var\n var _ffiClientInstance: FfiClient | undefined;\n}\n\nexport class FfiClient extends (EventEmitter as new () => TypedEmitter<FfiClientCallbacks>) {\n /** @internal */\n static get instance(): FfiClient {\n if (!globalThis._ffiClientInstance) {\n globalThis._ffiClientInstance = new FfiClient();\n }\n return globalThis._ffiClientInstance;\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>(\n predicate: (ev: FfiEvent) => boolean,\n options?: { signal?: AbortSignal },\n ): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const listener = (ev: FfiEvent) => {\n if (predicate(ev)) {\n cleanup();\n resolve(ev.message.value as T);\n }\n };\n\n const cleanup = () => {\n this.off(FfiClientEvent.FfiEvent, listener);\n options?.signal?.removeEventListener('abort', onAbort);\n };\n\n // If an AbortSignal is provided, remove the listener when the signal\n // fires so that pending waitFor() calls don't leak listeners after\n // the room disconnects or the operation is cancelled.\n const onAbort = () => {\n cleanup();\n reject(options?.signal?.reason ?? new Error('waitFor aborted'));\n };\n\n if (options?.signal?.aborted) {\n reject(options.signal.reason ?? new Error('waitFor aborted'));\n return;\n }\n\n options?.signal?.addEventListener('abort', onAbort);\n this.on(FfiClientEvent.FfiEvent, listener);\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,8BAWO;AAEP,oBAAyB;AACzB,qBAA4B;AAQrB,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,cAAW;AADD,SAAAA;AAAA,GAAA;AASL,MAAM,kBAAmB,cAAAC,QAA4D;AAAA;AAAA,EAE1F,WAAW,WAAsB;AAC/B,QAAI,CAAC,WAAW,oBAAoB;AAClC,iBAAW,qBAAqB,IAAI,UAAU;AAAA,IAChD;AACA,WAAO,WAAW;AAAA,EACpB;AAAA,EAEA,cAAc;AACZ,UAAM;AACN,SAAK,gBAAgB,CAAC;AAEtB;AAAA,MACE,CAAC,eAA2B;AAC1B,cAAM,QAAQ,iCAAS,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,mCAAW,GAAG;AAClC,UAAM,WAAW,QAAQ,SAAS;AAClC,UAAM,eAAW,2CAAkB,QAAQ;AAC3C,WAAO,oCAAY,WAAW,QAAQ,EAAE,QAAQ;AAAA,EAClD;AAAA,EAEA,WAAW,KAAa,KAAyB;AAC/C,eAAO,2CAAkB,KAAK,GAAG;AAAA,EACnC;AAAA,EAEA,YAAY,MAA0B;AACpC,eAAO,4CAAmB,IAAI;AAAA,EAChC;AAAA,EAEA,MAAM,QACJ,WACA,SACY;AACZ,WAAO,IAAI,QAAW,CAAC,SAAS,WAAW;AA5E/C;AA6EM,YAAM,WAAW,CAAC,OAAiB;AACjC,YAAI,UAAU,EAAE,GAAG;AACjB,kBAAQ;AACR,kBAAQ,GAAG,QAAQ,KAAU;AAAA,QAC/B;AAAA,MACF;AAEA,YAAM,UAAU,MAAM;AApF5B,YAAAC;AAqFQ,aAAK,IAAI,4BAAyB,QAAQ;AAC1C,SAAAA,MAAA,mCAAS,WAAT,gBAAAA,IAAiB,oBAAoB,SAAS;AAAA,MAChD;AAKA,YAAM,UAAU,MAAM;AA5F5B,YAAAA;AA6FQ,gBAAQ;AACR,iBAAOA,MAAA,mCAAS,WAAT,gBAAAA,IAAiB,WAAU,IAAI,MAAM,iBAAiB,CAAC;AAAA,MAChE;AAEA,WAAI,wCAAS,WAAT,mBAAiB,SAAS;AAC5B,eAAO,QAAQ,OAAO,UAAU,IAAI,MAAM,iBAAiB,CAAC;AAC5D;AAAA,MACF;AAEA,+CAAS,WAAT,mBAAiB,iBAAiB,SAAS;AAC3C,WAAK,GAAG,4BAAyB,QAAQ;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;","names":["FfiClientEvent","EventEmitter","_a"]}
|
package/dist/ffi_client.d.cts
CHANGED
|
@@ -1,19 +1,6 @@
|
|
|
1
|
-
import { PartialMessage } from '@
|
|
1
|
+
import { FfiEvent, PartialMessage, FfiRequest } from '@livekit/rtc-ffi-bindings';
|
|
2
|
+
export { FfiEvent, FfiHandle, FfiRequest, FfiResponse, livekitDispose as dispose } from '@livekit/rtc-ffi-bindings';
|
|
2
3
|
import { TypedEventEmitter } from '@livekit/typed-emitter';
|
|
3
|
-
export { FfiHandle, livekitDispose as dispose } from './napi/native.d.cjs';
|
|
4
|
-
import { FfiEvent, FfiRequest } from './proto/ffi_pb.cjs';
|
|
5
|
-
export { FfiResponse } from './proto/ffi_pb.cjs';
|
|
6
|
-
import './proto/room_pb.cjs';
|
|
7
|
-
import './proto/participant_pb.cjs';
|
|
8
|
-
import './proto/handle_pb.cjs';
|
|
9
|
-
import './proto/track_pb.cjs';
|
|
10
|
-
import './proto/stats_pb.cjs';
|
|
11
|
-
import './proto/e2ee_pb.cjs';
|
|
12
|
-
import './proto/video_frame_pb.cjs';
|
|
13
|
-
import './proto/data_stream_pb.cjs';
|
|
14
|
-
import './proto/audio_frame_pb.cjs';
|
|
15
|
-
import './proto/rpc_pb.cjs';
|
|
16
|
-
import './proto/track_publication_pb.cjs';
|
|
17
4
|
|
|
18
5
|
type FfiClientCallbacks = {
|
|
19
6
|
ffi_event: (event: FfiEvent) => void;
|
|
@@ -32,7 +19,9 @@ declare class FfiClient extends FfiClient_base {
|
|
|
32
19
|
request<T>(req: PartialMessage<FfiRequest>): T;
|
|
33
20
|
copyBuffer(ptr: bigint, len: number): Uint8Array;
|
|
34
21
|
retrievePtr(data: Uint8Array): bigint;
|
|
35
|
-
waitFor<T>(predicate: (ev: FfiEvent) => boolean
|
|
22
|
+
waitFor<T>(predicate: (ev: FfiEvent) => boolean, options?: {
|
|
23
|
+
signal?: AbortSignal;
|
|
24
|
+
}): Promise<T>;
|
|
36
25
|
}
|
|
37
26
|
|
|
38
|
-
export { FfiClient, type FfiClientCallbacks, FfiClientEvent
|
|
27
|
+
export { FfiClient, type FfiClientCallbacks, FfiClientEvent };
|
package/dist/ffi_client.d.ts
CHANGED
|
@@ -1,19 +1,6 @@
|
|
|
1
|
-
import { PartialMessage } from '@
|
|
1
|
+
import { FfiEvent, PartialMessage, FfiRequest } from '@livekit/rtc-ffi-bindings';
|
|
2
|
+
export { FfiEvent, FfiHandle, FfiRequest, FfiResponse, livekitDispose as dispose } from '@livekit/rtc-ffi-bindings';
|
|
2
3
|
import { TypedEventEmitter } from '@livekit/typed-emitter';
|
|
3
|
-
export { FfiHandle, livekitDispose as dispose } from './napi/native.d.js';
|
|
4
|
-
import { FfiEvent, FfiRequest } from './proto/ffi_pb.js';
|
|
5
|
-
export { FfiResponse } from './proto/ffi_pb.js';
|
|
6
|
-
import './proto/room_pb.js';
|
|
7
|
-
import './proto/participant_pb.js';
|
|
8
|
-
import './proto/handle_pb.js';
|
|
9
|
-
import './proto/track_pb.js';
|
|
10
|
-
import './proto/stats_pb.js';
|
|
11
|
-
import './proto/e2ee_pb.js';
|
|
12
|
-
import './proto/video_frame_pb.js';
|
|
13
|
-
import './proto/data_stream_pb.js';
|
|
14
|
-
import './proto/audio_frame_pb.js';
|
|
15
|
-
import './proto/rpc_pb.js';
|
|
16
|
-
import './proto/track_publication_pb.js';
|
|
17
4
|
|
|
18
5
|
type FfiClientCallbacks = {
|
|
19
6
|
ffi_event: (event: FfiEvent) => void;
|
|
@@ -32,7 +19,9 @@ declare class FfiClient extends FfiClient_base {
|
|
|
32
19
|
request<T>(req: PartialMessage<FfiRequest>): T;
|
|
33
20
|
copyBuffer(ptr: bigint, len: number): Uint8Array;
|
|
34
21
|
retrievePtr(data: Uint8Array): bigint;
|
|
35
|
-
waitFor<T>(predicate: (ev: FfiEvent) => boolean
|
|
22
|
+
waitFor<T>(predicate: (ev: FfiEvent) => boolean, options?: {
|
|
23
|
+
signal?: AbortSignal;
|
|
24
|
+
}): Promise<T>;
|
|
36
25
|
}
|
|
37
26
|
|
|
38
|
-
export { FfiClient, type FfiClientCallbacks, FfiClientEvent
|
|
27
|
+
export { FfiClient, type FfiClientCallbacks, FfiClientEvent };
|
package/dist/ffi_client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffi_client.d.ts","sourceRoot":"","sources":["../src/ffi_client.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"ffi_client.d.ts","sourceRoot":"","sources":["../src/ffi_client.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,WAAW,EACX,KAAK,cAAc,EAEnB,cAAc,EAIf,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,iBAAiB,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAIhF,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,UAAU,EAAE,cAAc,IAAI,OAAO,EAAE,CAAC;AAE7F,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,oBAAY,cAAc;IACxB,QAAQ,cAAc;CACvB;AAED,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,kBAAkB,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/C;8BAE+C,UAAU,YAAY,CAAC,kBAAkB,CAAC;AAA1F,qBAAa,SAAU,SAAQ,cAA4D;IACzF,gBAAgB;IAChB,MAAM,KAAK,QAAQ,IAAI,SAAS,CAK/B;;IAgBD,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;IAO9C,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU;IAIhD,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAI/B,OAAO,CAAC,CAAC,EACb,SAAS,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,EACpC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,OAAO,CAAC,CAAC,CAAC;CA+Bd"}
|
package/dist/ffi_client.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import EventEmitter from "events";
|
|
2
1
|
import {
|
|
2
|
+
FfiEvent,
|
|
3
3
|
FfiHandle,
|
|
4
|
+
FfiRequest,
|
|
5
|
+
FfiResponse,
|
|
4
6
|
livekitCopyBuffer,
|
|
5
7
|
livekitDispose,
|
|
6
8
|
livekitFfiRequest,
|
|
7
9
|
livekitInitialize,
|
|
8
10
|
livekitRetrievePtr
|
|
9
|
-
} from "
|
|
10
|
-
import
|
|
11
|
+
} from "@livekit/rtc-ffi-bindings";
|
|
12
|
+
import EventEmitter from "events";
|
|
11
13
|
import { SDK_VERSION } from "./version.js";
|
|
12
14
|
var FfiClientEvent = /* @__PURE__ */ ((FfiClientEvent2) => {
|
|
13
15
|
FfiClientEvent2["FfiEvent"] = "ffi_event";
|
|
@@ -45,14 +47,30 @@ class FfiClient extends EventEmitter {
|
|
|
45
47
|
retrievePtr(data) {
|
|
46
48
|
return livekitRetrievePtr(data);
|
|
47
49
|
}
|
|
48
|
-
async waitFor(predicate) {
|
|
49
|
-
return new Promise((resolve) => {
|
|
50
|
+
async waitFor(predicate, options) {
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
var _a, _b;
|
|
50
53
|
const listener = (ev) => {
|
|
51
54
|
if (predicate(ev)) {
|
|
52
|
-
|
|
55
|
+
cleanup();
|
|
53
56
|
resolve(ev.message.value);
|
|
54
57
|
}
|
|
55
58
|
};
|
|
59
|
+
const cleanup = () => {
|
|
60
|
+
var _a2;
|
|
61
|
+
this.off("ffi_event" /* FfiEvent */, listener);
|
|
62
|
+
(_a2 = options == null ? void 0 : options.signal) == null ? void 0 : _a2.removeEventListener("abort", onAbort);
|
|
63
|
+
};
|
|
64
|
+
const onAbort = () => {
|
|
65
|
+
var _a2;
|
|
66
|
+
cleanup();
|
|
67
|
+
reject(((_a2 = options == null ? void 0 : options.signal) == null ? void 0 : _a2.reason) ?? new Error("waitFor aborted"));
|
|
68
|
+
};
|
|
69
|
+
if ((_a = options == null ? void 0 : options.signal) == null ? void 0 : _a.aborted) {
|
|
70
|
+
reject(options.signal.reason ?? new Error("waitFor aborted"));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
(_b = options == null ? void 0 : options.signal) == null ? void 0 : _b.addEventListener("abort", onAbort);
|
|
56
74
|
this.on("ffi_event" /* FfiEvent */, listener);
|
|
57
75
|
});
|
|
58
76
|
}
|
package/dist/ffi_client.js.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
|
|
1
|
+
{"version":3,"sources":["../src/ffi_client.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport {\n FfiEvent,\n FfiHandle,\n FfiRequest,\n FfiResponse,\n type PartialMessage,\n livekitCopyBuffer,\n livekitDispose,\n livekitFfiRequest,\n livekitInitialize,\n livekitRetrievePtr,\n} from '@livekit/rtc-ffi-bindings';\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport EventEmitter from 'events';\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\ndeclare global {\n // eslint-disable-next-line no-var\n var _ffiClientInstance: FfiClient | undefined;\n}\n\nexport class FfiClient extends (EventEmitter as new () => TypedEmitter<FfiClientCallbacks>) {\n /** @internal */\n static get instance(): FfiClient {\n if (!globalThis._ffiClientInstance) {\n globalThis._ffiClientInstance = new FfiClient();\n }\n return globalThis._ffiClientInstance;\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>(\n predicate: (ev: FfiEvent) => boolean,\n options?: { signal?: AbortSignal },\n ): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const listener = (ev: FfiEvent) => {\n if (predicate(ev)) {\n cleanup();\n resolve(ev.message.value as T);\n }\n };\n\n const cleanup = () => {\n this.off(FfiClientEvent.FfiEvent, listener);\n options?.signal?.removeEventListener('abort', onAbort);\n };\n\n // If an AbortSignal is provided, remove the listener when the signal\n // fires so that pending waitFor() calls don't leak listeners after\n // the room disconnects or the operation is cancelled.\n const onAbort = () => {\n cleanup();\n reject(options?.signal?.reason ?? new Error('waitFor aborted'));\n };\n\n if (options?.signal?.aborted) {\n reject(options.signal.reason ?? new Error('waitFor aborted'));\n return;\n }\n\n options?.signal?.addEventListener('abort', onAbort);\n this.on(FfiClientEvent.FfiEvent, listener);\n });\n }\n}\n"],"mappings":"AAGA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,OAAO,kBAAkB;AACzB,SAAS,mBAAmB;AAQrB,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,cAAW;AADD,SAAAA;AAAA,GAAA;AASL,MAAM,kBAAmB,aAA4D;AAAA;AAAA,EAE1F,WAAW,WAAsB;AAC/B,QAAI,CAAC,WAAW,oBAAoB;AAClC,iBAAW,qBAAqB,IAAI,UAAU;AAAA,IAChD;AACA,WAAO,WAAW;AAAA,EACpB;AAAA,EAEA,cAAc;AACZ,UAAM;AACN,SAAK,gBAAgB,CAAC;AAEtB;AAAA,MACE,CAAC,eAA2B;AAC1B,cAAM,QAAQ,SAAS,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,WAAW,GAAG;AAClC,UAAM,WAAW,QAAQ,SAAS;AAClC,UAAM,WAAW,kBAAkB,QAAQ;AAC3C,WAAO,YAAY,WAAW,QAAQ,EAAE,QAAQ;AAAA,EAClD;AAAA,EAEA,WAAW,KAAa,KAAyB;AAC/C,WAAO,kBAAkB,KAAK,GAAG;AAAA,EACnC;AAAA,EAEA,YAAY,MAA0B;AACpC,WAAO,mBAAmB,IAAI;AAAA,EAChC;AAAA,EAEA,MAAM,QACJ,WACA,SACY;AACZ,WAAO,IAAI,QAAW,CAAC,SAAS,WAAW;AA5E/C;AA6EM,YAAM,WAAW,CAAC,OAAiB;AACjC,YAAI,UAAU,EAAE,GAAG;AACjB,kBAAQ;AACR,kBAAQ,GAAG,QAAQ,KAAU;AAAA,QAC/B;AAAA,MACF;AAEA,YAAM,UAAU,MAAM;AApF5B,YAAAC;AAqFQ,aAAK,IAAI,4BAAyB,QAAQ;AAC1C,SAAAA,MAAA,mCAAS,WAAT,gBAAAA,IAAiB,oBAAoB,SAAS;AAAA,MAChD;AAKA,YAAM,UAAU,MAAM;AA5F5B,YAAAA;AA6FQ,gBAAQ;AACR,iBAAOA,MAAA,mCAAS,WAAT,gBAAAA,IAAiB,WAAU,IAAI,MAAM,iBAAiB,CAAC;AAAA,MAChE;AAEA,WAAI,wCAAS,WAAT,mBAAiB,SAAS;AAC5B,eAAO,QAAQ,OAAO,UAAU,IAAI,MAAM,iBAAiB,CAAC;AAC5D;AAAA,MACF;AAEA,+CAAS,WAAT,mBAAiB,iBAAiB,SAAS;AAC3C,WAAK,GAAG,4BAAyB,QAAQ;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;","names":["FfiClientEvent","_a"]}
|
package/dist/frame_processor.cjs
CHANGED
|
@@ -18,12 +18,21 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var frame_processor_exports = {};
|
|
20
20
|
__export(frame_processor_exports, {
|
|
21
|
-
FrameProcessor: () => FrameProcessor
|
|
21
|
+
FrameProcessor: () => FrameProcessor,
|
|
22
|
+
FrameProcessorSymbol: () => FrameProcessorSymbol,
|
|
23
|
+
isFrameProcessor: () => isFrameProcessor
|
|
22
24
|
});
|
|
23
25
|
module.exports = __toCommonJS(frame_processor_exports);
|
|
24
26
|
var import_audio_frame = require("./audio_frame.cjs");
|
|
25
27
|
var import_video_frame = require("./video_frame.cjs");
|
|
28
|
+
const FrameProcessorSymbol = Symbol.for("lk.frame-processor");
|
|
29
|
+
function isFrameProcessor(maybeProcessor) {
|
|
30
|
+
return maybeProcessor !== null && typeof maybeProcessor === "object" && "symbol" in maybeProcessor && maybeProcessor.symbol === FrameProcessorSymbol;
|
|
31
|
+
}
|
|
26
32
|
class FrameProcessor {
|
|
33
|
+
constructor() {
|
|
34
|
+
this.symbol = FrameProcessorSymbol;
|
|
35
|
+
}
|
|
27
36
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
28
37
|
onStreamInfoUpdated(_info) {
|
|
29
38
|
}
|
|
@@ -33,6 +42,8 @@ class FrameProcessor {
|
|
|
33
42
|
}
|
|
34
43
|
// Annotate the CommonJS export names for ESM import in node:
|
|
35
44
|
0 && (module.exports = {
|
|
36
|
-
FrameProcessor
|
|
45
|
+
FrameProcessor,
|
|
46
|
+
FrameProcessorSymbol,
|
|
47
|
+
isFrameProcessor
|
|
37
48
|
});
|
|
38
49
|
//# sourceMappingURL=frame_processor.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/frame_processor.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { type AudioFrame } from './audio_frame.js';\nimport { type VideoFrame } from './video_frame.js';\n\nexport type FrameProcessorStreamInfo = {\n roomName: string;\n participantIdentity: string;\n publicationSid: string;\n};\n\nexport type FrameProcessorCredentials = {\n token: string;\n url: string;\n};\n\nexport abstract class FrameProcessor<Frame extends VideoFrame | AudioFrame> {\n abstract isEnabled(): boolean;\n abstract setEnabled(enabled: boolean): void;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onStreamInfoUpdated(_info: FrameProcessorStreamInfo): void {}\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onCredentialsUpdated(_credentials: FrameProcessorCredentials): void {}\n\n abstract process(frame: Frame): Frame;\n abstract close(): void;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,yBAAgC;AAChC,yBAAgC;AAazB,MAAe,eAAsD;AAAA;AAAA,
|
|
1
|
+
{"version":3,"sources":["../src/frame_processor.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { type AudioFrame } from './audio_frame.js';\nimport { type VideoFrame } from './video_frame.js';\n\nexport type FrameProcessorStreamInfo = {\n roomName: string;\n participantIdentity: string;\n publicationSid: string;\n};\n\nexport type FrameProcessorCredentials = {\n token: string;\n url: string;\n};\n\nexport const FrameProcessorSymbol = Symbol.for('lk.frame-processor');\n\nexport function isFrameProcessor<\n T extends FrameProcessor<AudioFrame> | FrameProcessor<VideoFrame> | unknown,\n>(\n maybeProcessor: unknown,\n): maybeProcessor is T extends FrameProcessor<AudioFrame>\n ? FrameProcessor<AudioFrame>\n : T extends FrameProcessor<VideoFrame>\n ? FrameProcessor<VideoFrame>\n : FrameProcessor<AudioFrame> | FrameProcessor<VideoFrame> {\n return (\n maybeProcessor !== null &&\n typeof maybeProcessor === 'object' &&\n 'symbol' in maybeProcessor &&\n maybeProcessor.symbol === FrameProcessorSymbol\n );\n}\n\nexport abstract class FrameProcessor<Frame extends VideoFrame | AudioFrame> {\n readonly symbol = FrameProcessorSymbol;\n\n abstract isEnabled(): boolean;\n abstract setEnabled(enabled: boolean): void;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onStreamInfoUpdated(_info: FrameProcessorStreamInfo): void {}\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onCredentialsUpdated(_credentials: FrameProcessorCredentials): void {}\n\n abstract process(frame: Frame): Frame;\n abstract close(): void;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,yBAAgC;AAChC,yBAAgC;AAazB,MAAM,uBAAuB,OAAO,IAAI,oBAAoB;AAE5D,SAAS,iBAGd,gBAK4D;AAC5D,SACE,mBAAmB,QACnB,OAAO,mBAAmB,YAC1B,YAAY,kBACZ,eAAe,WAAW;AAE9B;AAEO,MAAe,eAAsD;AAAA,EAArE;AACL,SAAS,SAAS;AAAA;AAAA;AAAA,EAMlB,oBAAoB,OAAuC;AAAA,EAAC;AAAA;AAAA,EAE5D,qBAAqB,cAA+C;AAAA,EAAC;AAIvE;","names":[]}
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import { AudioFrame } from './audio_frame.cjs';
|
|
2
2
|
import { VideoFrame } from './video_frame.cjs';
|
|
3
|
-
import '
|
|
4
|
-
import '@bufbuild/protobuf';
|
|
5
|
-
import './proto/track_pb.cjs';
|
|
6
|
-
import './proto/stats_pb.cjs';
|
|
7
|
-
import './proto/e2ee_pb.cjs';
|
|
8
|
-
import './proto/handle_pb.cjs';
|
|
9
|
-
import './proto/video_frame_pb.cjs';
|
|
3
|
+
import '@livekit/rtc-ffi-bindings';
|
|
10
4
|
|
|
11
5
|
type FrameProcessorStreamInfo = {
|
|
12
6
|
roomName: string;
|
|
@@ -17,7 +11,10 @@ type FrameProcessorCredentials = {
|
|
|
17
11
|
token: string;
|
|
18
12
|
url: string;
|
|
19
13
|
};
|
|
14
|
+
declare const FrameProcessorSymbol: unique symbol;
|
|
15
|
+
declare function isFrameProcessor<T extends FrameProcessor<AudioFrame> | FrameProcessor<VideoFrame> | unknown>(maybeProcessor: unknown): maybeProcessor is T extends FrameProcessor<AudioFrame> ? FrameProcessor<AudioFrame> : T extends FrameProcessor<VideoFrame> ? FrameProcessor<VideoFrame> : FrameProcessor<AudioFrame> | FrameProcessor<VideoFrame>;
|
|
20
16
|
declare abstract class FrameProcessor<Frame extends VideoFrame | AudioFrame> {
|
|
17
|
+
readonly symbol: symbol;
|
|
21
18
|
abstract isEnabled(): boolean;
|
|
22
19
|
abstract setEnabled(enabled: boolean): void;
|
|
23
20
|
onStreamInfoUpdated(_info: FrameProcessorStreamInfo): void;
|
|
@@ -26,4 +23,4 @@ declare abstract class FrameProcessor<Frame extends VideoFrame | AudioFrame> {
|
|
|
26
23
|
abstract close(): void;
|
|
27
24
|
}
|
|
28
25
|
|
|
29
|
-
export { FrameProcessor, type FrameProcessorCredentials, type FrameProcessorStreamInfo };
|
|
26
|
+
export { FrameProcessor, type FrameProcessorCredentials, type FrameProcessorStreamInfo, FrameProcessorSymbol, isFrameProcessor };
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import { AudioFrame } from './audio_frame.js';
|
|
2
2
|
import { VideoFrame } from './video_frame.js';
|
|
3
|
-
import '
|
|
4
|
-
import '@bufbuild/protobuf';
|
|
5
|
-
import './proto/track_pb.js';
|
|
6
|
-
import './proto/stats_pb.js';
|
|
7
|
-
import './proto/e2ee_pb.js';
|
|
8
|
-
import './proto/handle_pb.js';
|
|
9
|
-
import './proto/video_frame_pb.js';
|
|
3
|
+
import '@livekit/rtc-ffi-bindings';
|
|
10
4
|
|
|
11
5
|
type FrameProcessorStreamInfo = {
|
|
12
6
|
roomName: string;
|
|
@@ -17,7 +11,10 @@ type FrameProcessorCredentials = {
|
|
|
17
11
|
token: string;
|
|
18
12
|
url: string;
|
|
19
13
|
};
|
|
14
|
+
declare const FrameProcessorSymbol: unique symbol;
|
|
15
|
+
declare function isFrameProcessor<T extends FrameProcessor<AudioFrame> | FrameProcessor<VideoFrame> | unknown>(maybeProcessor: unknown): maybeProcessor is T extends FrameProcessor<AudioFrame> ? FrameProcessor<AudioFrame> : T extends FrameProcessor<VideoFrame> ? FrameProcessor<VideoFrame> : FrameProcessor<AudioFrame> | FrameProcessor<VideoFrame>;
|
|
20
16
|
declare abstract class FrameProcessor<Frame extends VideoFrame | AudioFrame> {
|
|
17
|
+
readonly symbol: symbol;
|
|
21
18
|
abstract isEnabled(): boolean;
|
|
22
19
|
abstract setEnabled(enabled: boolean): void;
|
|
23
20
|
onStreamInfoUpdated(_info: FrameProcessorStreamInfo): void;
|
|
@@ -26,4 +23,4 @@ declare abstract class FrameProcessor<Frame extends VideoFrame | AudioFrame> {
|
|
|
26
23
|
abstract close(): void;
|
|
27
24
|
}
|
|
28
25
|
|
|
29
|
-
export { FrameProcessor, type FrameProcessorCredentials, type FrameProcessorStreamInfo };
|
|
26
|
+
export { FrameProcessor, type FrameProcessorCredentials, type FrameProcessorStreamInfo, FrameProcessorSymbol, isFrameProcessor };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame_processor.d.ts","sourceRoot":"","sources":["../src/frame_processor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,8BAAsB,cAAc,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU;IACxE,QAAQ,CAAC,SAAS,IAAI,OAAO;IAC7B,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAG3C,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI;IAE1D,oBAAoB,CAAC,YAAY,EAAE,yBAAyB,GAAG,IAAI;IAEnE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;IACrC,QAAQ,CAAC,KAAK,IAAI,IAAI;CACvB"}
|
|
1
|
+
{"version":3,"file":"frame_processor.d.ts","sourceRoot":"","sources":["../src/frame_processor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,eAAO,MAAM,oBAAoB,eAAmC,CAAC;AAErE,wBAAgB,gBAAgB,CAC9B,CAAC,SAAS,cAAc,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,EAE3E,cAAc,EAAE,OAAO,GACtB,cAAc,IAAI,CAAC,SAAS,cAAc,CAAC,UAAU,CAAC,GACrD,cAAc,CAAC,UAAU,CAAC,GAC1B,CAAC,SAAS,cAAc,CAAC,UAAU,CAAC,GAClC,cAAc,CAAC,UAAU,CAAC,GAC1B,cAAc,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,CAO5D;AAED,8BAAsB,cAAc,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU;IACxE,QAAQ,CAAC,MAAM,SAAwB;IAEvC,QAAQ,CAAC,SAAS,IAAI,OAAO;IAC7B,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAG3C,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI;IAE1D,oBAAoB,CAAC,YAAY,EAAE,yBAAyB,GAAG,IAAI;IAEnE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;IACrC,QAAQ,CAAC,KAAK,IAAI,IAAI;CACvB"}
|
package/dist/frame_processor.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import {} from "./audio_frame.js";
|
|
2
2
|
import {} from "./video_frame.js";
|
|
3
|
+
const FrameProcessorSymbol = Symbol.for("lk.frame-processor");
|
|
4
|
+
function isFrameProcessor(maybeProcessor) {
|
|
5
|
+
return maybeProcessor !== null && typeof maybeProcessor === "object" && "symbol" in maybeProcessor && maybeProcessor.symbol === FrameProcessorSymbol;
|
|
6
|
+
}
|
|
3
7
|
class FrameProcessor {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.symbol = FrameProcessorSymbol;
|
|
10
|
+
}
|
|
4
11
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5
12
|
onStreamInfoUpdated(_info) {
|
|
6
13
|
}
|
|
@@ -9,6 +16,8 @@ class FrameProcessor {
|
|
|
9
16
|
}
|
|
10
17
|
}
|
|
11
18
|
export {
|
|
12
|
-
FrameProcessor
|
|
19
|
+
FrameProcessor,
|
|
20
|
+
FrameProcessorSymbol,
|
|
21
|
+
isFrameProcessor
|
|
13
22
|
};
|
|
14
23
|
//# sourceMappingURL=frame_processor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/frame_processor.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { type AudioFrame } from './audio_frame.js';\nimport { type VideoFrame } from './video_frame.js';\n\nexport type FrameProcessorStreamInfo = {\n roomName: string;\n participantIdentity: string;\n publicationSid: string;\n};\n\nexport type FrameProcessorCredentials = {\n token: string;\n url: string;\n};\n\nexport abstract class FrameProcessor<Frame extends VideoFrame | AudioFrame> {\n abstract isEnabled(): boolean;\n abstract setEnabled(enabled: boolean): void;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onStreamInfoUpdated(_info: FrameProcessorStreamInfo): void {}\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onCredentialsUpdated(_credentials: FrameProcessorCredentials): void {}\n\n abstract process(frame: Frame): Frame;\n abstract close(): void;\n}\n"],"mappings":"AAGA,eAAgC;AAChC,eAAgC;AAazB,MAAe,eAAsD;AAAA;AAAA,
|
|
1
|
+
{"version":3,"sources":["../src/frame_processor.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { type AudioFrame } from './audio_frame.js';\nimport { type VideoFrame } from './video_frame.js';\n\nexport type FrameProcessorStreamInfo = {\n roomName: string;\n participantIdentity: string;\n publicationSid: string;\n};\n\nexport type FrameProcessorCredentials = {\n token: string;\n url: string;\n};\n\nexport const FrameProcessorSymbol = Symbol.for('lk.frame-processor');\n\nexport function isFrameProcessor<\n T extends FrameProcessor<AudioFrame> | FrameProcessor<VideoFrame> | unknown,\n>(\n maybeProcessor: unknown,\n): maybeProcessor is T extends FrameProcessor<AudioFrame>\n ? FrameProcessor<AudioFrame>\n : T extends FrameProcessor<VideoFrame>\n ? FrameProcessor<VideoFrame>\n : FrameProcessor<AudioFrame> | FrameProcessor<VideoFrame> {\n return (\n maybeProcessor !== null &&\n typeof maybeProcessor === 'object' &&\n 'symbol' in maybeProcessor &&\n maybeProcessor.symbol === FrameProcessorSymbol\n );\n}\n\nexport abstract class FrameProcessor<Frame extends VideoFrame | AudioFrame> {\n readonly symbol = FrameProcessorSymbol;\n\n abstract isEnabled(): boolean;\n abstract setEnabled(enabled: boolean): void;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onStreamInfoUpdated(_info: FrameProcessorStreamInfo): void {}\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onCredentialsUpdated(_credentials: FrameProcessorCredentials): void {}\n\n abstract process(frame: Frame): Frame;\n abstract close(): void;\n}\n"],"mappings":"AAGA,eAAgC;AAChC,eAAgC;AAazB,MAAM,uBAAuB,OAAO,IAAI,oBAAoB;AAE5D,SAAS,iBAGd,gBAK4D;AAC5D,SACE,mBAAmB,QACnB,OAAO,mBAAmB,YAC1B,YAAY,kBACZ,eAAe,WAAW;AAE9B;AAEO,MAAe,eAAsD;AAAA,EAArE;AACL,SAAS,SAAS;AAAA;AAAA;AAAA,EAMlB,oBAAoB,OAAuC;AAAA,EAAC;AAAA;AAAA,EAE5D,qBAAqB,cAA+C;AAAA,EAAC;AAIvE;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -27,25 +27,25 @@ __export(index_exports, {
|
|
|
27
27
|
AudioSource: () => import_audio_source.AudioSource,
|
|
28
28
|
AudioStream: () => import_audio_stream.AudioStream,
|
|
29
29
|
ConnectError: () => import_room.ConnectError,
|
|
30
|
-
ConnectionQuality: () =>
|
|
31
|
-
ConnectionState: () =>
|
|
32
|
-
ContinualGatheringPolicy: () =>
|
|
33
|
-
DataPacketKind: () =>
|
|
34
|
-
DisconnectReason: () =>
|
|
30
|
+
ConnectionQuality: () => import_rtc_ffi_bindings3.ConnectionQuality,
|
|
31
|
+
ConnectionState: () => import_rtc_ffi_bindings3.ConnectionState,
|
|
32
|
+
ContinualGatheringPolicy: () => import_rtc_ffi_bindings3.ContinualGatheringPolicy,
|
|
33
|
+
DataPacketKind: () => import_rtc_ffi_bindings3.DataPacketKind,
|
|
34
|
+
DisconnectReason: () => import_rtc_ffi_bindings2.DisconnectReason,
|
|
35
35
|
E2EEManager: () => import_e2ee.E2EEManager,
|
|
36
|
-
EncryptionState: () =>
|
|
37
|
-
EncryptionType: () =>
|
|
36
|
+
EncryptionState: () => import_rtc_ffi_bindings.EncryptionState,
|
|
37
|
+
EncryptionType: () => import_rtc_ffi_bindings.EncryptionType,
|
|
38
38
|
FrameCryptor: () => import_e2ee.FrameCryptor,
|
|
39
39
|
FrameProcessor: () => import_frame_processor.FrameProcessor,
|
|
40
|
-
IceServer: () =>
|
|
41
|
-
IceTransportType: () =>
|
|
40
|
+
IceServer: () => import_rtc_ffi_bindings3.IceServer,
|
|
41
|
+
IceTransportType: () => import_rtc_ffi_bindings3.IceTransportType,
|
|
42
42
|
KeyProvider: () => import_e2ee.KeyProvider,
|
|
43
43
|
LocalAudioTrack: () => import_track.LocalAudioTrack,
|
|
44
44
|
LocalParticipant: () => import_participant.LocalParticipant,
|
|
45
45
|
LocalTrackPublication: () => import_track_publication.LocalTrackPublication,
|
|
46
46
|
LocalVideoTrack: () => import_track.LocalVideoTrack,
|
|
47
47
|
Participant: () => import_participant.Participant,
|
|
48
|
-
ParticipantKind: () =>
|
|
48
|
+
ParticipantKind: () => import_rtc_ffi_bindings2.ParticipantKind,
|
|
49
49
|
RemoteAudioTrack: () => import_track.RemoteAudioTrack,
|
|
50
50
|
RemoteParticipant: () => import_participant.RemoteParticipant,
|
|
51
51
|
RemoteTrackPublication: () => import_track_publication.RemoteTrackPublication,
|
|
@@ -53,20 +53,21 @@ __export(index_exports, {
|
|
|
53
53
|
Room: () => import_room.Room,
|
|
54
54
|
RoomEvent: () => import_room.RoomEvent,
|
|
55
55
|
RpcError: () => import_rpc.RpcError,
|
|
56
|
-
StreamState: () =>
|
|
56
|
+
StreamState: () => import_rtc_ffi_bindings4.StreamState,
|
|
57
57
|
Track: () => import_track.Track,
|
|
58
|
-
TrackKind: () =>
|
|
58
|
+
TrackKind: () => import_rtc_ffi_bindings4.TrackKind,
|
|
59
59
|
TrackPublication: () => import_track_publication.TrackPublication,
|
|
60
|
-
TrackPublishOptions: () =>
|
|
61
|
-
TrackSource: () =>
|
|
62
|
-
VideoBufferType: () =>
|
|
63
|
-
VideoCodec: () =>
|
|
60
|
+
TrackPublishOptions: () => import_rtc_ffi_bindings3.TrackPublishOptions,
|
|
61
|
+
TrackSource: () => import_rtc_ffi_bindings4.TrackSource,
|
|
62
|
+
VideoBufferType: () => import_rtc_ffi_bindings5.VideoBufferType,
|
|
63
|
+
VideoCodec: () => import_rtc_ffi_bindings5.VideoCodec,
|
|
64
64
|
VideoFrame: () => import_video_frame.VideoFrame,
|
|
65
|
-
VideoRotation: () =>
|
|
65
|
+
VideoRotation: () => import_rtc_ffi_bindings5.VideoRotation,
|
|
66
66
|
VideoSource: () => import_video_source.VideoSource,
|
|
67
67
|
VideoStream: () => import_video_stream.VideoStream,
|
|
68
68
|
combineAudioFrames: () => import_audio_frame.combineAudioFrames,
|
|
69
|
-
dispose: () => import_ffi_client.dispose
|
|
69
|
+
dispose: () => import_ffi_client.dispose,
|
|
70
|
+
isFrameProcessor: () => import_frame_processor.isFrameProcessor
|
|
70
71
|
});
|
|
71
72
|
module.exports = __toCommonJS(index_exports);
|
|
72
73
|
var import_audio_frame = require("./audio_frame.cjs");
|
|
@@ -79,11 +80,11 @@ __reExport(index_exports, require("./data_streams/index.cjs"), module.exports);
|
|
|
79
80
|
var import_e2ee = require("./e2ee.cjs");
|
|
80
81
|
var import_ffi_client = require("./ffi_client.cjs");
|
|
81
82
|
var import_participant = require("./participant.cjs");
|
|
82
|
-
var
|
|
83
|
-
var
|
|
84
|
-
var
|
|
85
|
-
var
|
|
86
|
-
var
|
|
83
|
+
var import_rtc_ffi_bindings = require("@livekit/rtc-ffi-bindings");
|
|
84
|
+
var import_rtc_ffi_bindings2 = require("@livekit/rtc-ffi-bindings");
|
|
85
|
+
var import_rtc_ffi_bindings3 = require("@livekit/rtc-ffi-bindings");
|
|
86
|
+
var import_rtc_ffi_bindings4 = require("@livekit/rtc-ffi-bindings");
|
|
87
|
+
var import_rtc_ffi_bindings5 = require("@livekit/rtc-ffi-bindings");
|
|
87
88
|
var import_room = require("./room.cjs");
|
|
88
89
|
var import_rpc = require("./rpc.cjs");
|
|
89
90
|
var import_track = require("./track.cjs");
|
|
@@ -142,6 +143,7 @@ var import_frame_processor = require("./frame_processor.cjs");
|
|
|
142
143
|
VideoStream,
|
|
143
144
|
combineAudioFrames,
|
|
144
145
|
dispose,
|
|
146
|
+
isFrameProcessor,
|
|
145
147
|
...require("./data_streams/index.cjs")
|
|
146
148
|
});
|
|
147
149
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\n\nexport { AudioFrame, combineAudioFrames } from './audio_frame.js';\nexport { AudioResampler, AudioResamplerQuality } from './audio_resampler.js';\nexport { AudioSource } from './audio_source.js';\nexport { AudioStream } from './audio_stream.js';\nexport type { NoiseCancellationOptions } from './audio_stream.js';\nexport { AudioFilter } from './audio_filter.js';\nexport { AudioMixer, type AudioMixerOptions } from './audio_mixer.js';\nexport * from './data_streams/index.js';\nexport { E2EEManager, FrameCryptor, KeyProvider } from './e2ee.js';\nexport type { E2EEOptions, KeyProviderOptions } from './e2ee.js';\nexport { dispose } from './ffi_client.js';\nexport { LocalParticipant, Participant, RemoteParticipant } from './participant.js';\nexport { EncryptionState, EncryptionType } from '
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\n\nexport { AudioFrame, combineAudioFrames } from './audio_frame.js';\nexport { AudioResampler, AudioResamplerQuality } from './audio_resampler.js';\nexport { AudioSource } from './audio_source.js';\nexport { AudioStream } from './audio_stream.js';\nexport type { NoiseCancellationOptions } from './audio_stream.js';\nexport { AudioFilter } from './audio_filter.js';\nexport { AudioMixer, type AudioMixerOptions } from './audio_mixer.js';\nexport * from './data_streams/index.js';\nexport { E2EEManager, FrameCryptor, KeyProvider } from './e2ee.js';\nexport type { E2EEOptions, KeyProviderOptions } from './e2ee.js';\nexport { dispose } from './ffi_client.js';\nexport { LocalParticipant, Participant, RemoteParticipant } from './participant.js';\nexport { EncryptionState, EncryptionType } from '@livekit/rtc-ffi-bindings';\nexport { DisconnectReason, ParticipantKind } from '@livekit/rtc-ffi-bindings';\nexport {\n ConnectionQuality,\n ConnectionState,\n ContinualGatheringPolicy,\n DataPacketKind,\n IceServer,\n IceTransportType,\n TrackPublishOptions,\n} from '@livekit/rtc-ffi-bindings';\nexport { StreamState, TrackKind, TrackSource } from '@livekit/rtc-ffi-bindings';\nexport { VideoBufferType, VideoCodec, VideoRotation } from '@livekit/rtc-ffi-bindings';\nexport { ConnectError, Room, RoomEvent, type RoomOptions, type RtcConfiguration } from './room.js';\nexport { RpcError, type PerformRpcParams, type RpcInvocationData } from './rpc.js';\nexport {\n LocalAudioTrack,\n LocalVideoTrack,\n RemoteAudioTrack,\n RemoteVideoTrack,\n Track,\n type AudioTrack,\n type LocalTrack,\n type RemoteTrack,\n type VideoTrack,\n} from './track.js';\nexport {\n LocalTrackPublication,\n RemoteTrackPublication,\n TrackPublication,\n} from './track_publication.js';\nexport type { Transcription, TranscriptionSegment } from './transcription.js';\nexport type { ChatMessage } from './types.js';\nexport { VideoFrame } from './video_frame.js';\nexport { VideoSource } from './video_source.js';\nexport { VideoStream, type VideoFrameEvent } from './video_stream.js';\nexport {\n FrameProcessor,\n type FrameProcessorStreamInfo,\n type FrameProcessorCredentials,\n isFrameProcessor,\n} from './frame_processor.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,yBAA+C;AAC/C,6BAAsD;AACtD,0BAA4B;AAC5B,0BAA4B;AAE5B,0BAA4B;AAC5B,yBAAmD;AACnD,0BAAc,oCAXd;AAYA,kBAAuD;AAEvD,wBAAwB;AACxB,yBAAiE;AACjE,8BAAgD;AAChD,IAAAA,2BAAkD;AAClD,IAAAA,2BAQO;AACP,IAAAA,2BAAoD;AACpD,IAAAA,2BAA2D;AAC3D,kBAAuF;AACvF,iBAAwE;AACxE,mBAUO;AACP,+BAIO;AAGP,yBAA2B;AAC3B,0BAA4B;AAC5B,0BAAkD;AAClD,6BAKO;","names":["import_rtc_ffi_bindings"]}
|