@livekit/rtc-node 0.13.31 → 0.13.33
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/async_queue.d.ts +2 -3
- package/dist/audio_filter.d.ts +2 -3
- package/dist/audio_frame.d.ts +5 -6
- package/dist/audio_mixer.d.ts +3 -6
- package/dist/audio_resampler.d.ts +3 -6
- package/dist/audio_source.d.ts +5 -6
- package/dist/{audio_stream-B4hGVcKz.d.cts → audio_stream-CnODFAmo.d.cts} +26 -0
- package/dist/audio_stream.cjs +31 -18
- package/dist/audio_stream.cjs.map +1 -1
- package/dist/audio_stream.d.cts +1 -1
- package/dist/audio_stream.d.ts +61 -18
- package/dist/audio_stream.d.ts.map +1 -1
- package/dist/data_streams/index.d.ts +4 -3
- package/dist/data_streams/stream_reader.d.ts +48 -2
- package/dist/data_streams/stream_writer.d.ts +5 -7
- package/dist/data_streams/types.d.ts +41 -2
- package/dist/e2ee.d.ts +8 -10
- package/dist/ffi_client.d.ts +8 -10
- package/dist/frame_processor.d.ts +8 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +22 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -107
- package/dist/log.d.ts +5 -7
- package/dist/participant.cjs +7 -2
- package/dist/participant.cjs.map +1 -1
- package/dist/participant.d.cts +1 -1
- package/dist/participant.d.ts +152 -18
- package/dist/participant.d.ts.map +1 -1
- package/dist/room.cjs +7 -0
- package/dist/room.cjs.map +1 -1
- package/dist/room.d.cts +2 -2
- package/dist/room.d.ts +220 -18
- package/dist/room.d.ts.map +1 -1
- package/dist/rpc.d.ts +7 -9
- package/dist/track.cjs +16 -0
- package/dist/track.cjs.map +1 -1
- package/dist/track.d.cts +1 -1
- package/dist/track.d.ts +67 -18
- package/dist/track.d.ts.map +1 -1
- package/dist/track_publication.d.cts +1 -1
- package/dist/track_publication.d.ts +45 -18
- package/dist/transcription.d.ts +3 -4
- package/dist/types.d.ts +2 -3
- package/dist/utils.d.ts +4 -5
- 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 +2 -3
- package/dist/video_frame.d.ts +4 -5
- package/dist/video_source.d.ts +6 -8
- package/dist/video_stream.d.cts +1 -1
- package/dist/video_stream.d.ts +5 -22
- package/package.json +5 -6
- package/src/audio_stream.ts +37 -24
- package/src/audio_stream_room_lifecycle.test.ts +50 -3
- package/src/index.ts +8 -1
- package/src/participant.ts +7 -1
- package/src/room.ts +14 -0
- package/src/tests/e2e.test.ts +137 -16
- package/src/track.ts +17 -0
- package/src/version.ts +1 -1
- package/dist/async_queue.js +0 -56
- package/dist/async_queue.js.map +0 -1
- package/dist/audio_filter.js +0 -24
- package/dist/audio_filter.js.map +0 -1
- package/dist/audio_frame.js +0 -78
- package/dist/audio_frame.js.map +0 -1
- package/dist/audio_mixer.js +0 -269
- package/dist/audio_mixer.js.map +0 -1
- package/dist/audio_resampler.js +0 -154
- package/dist/audio_resampler.js.map +0 -1
- package/dist/audio_source.js +0 -134
- package/dist/audio_source.js.map +0 -1
- package/dist/audio_stream-DEG1JKge.d.ts +0 -498
- package/dist/audio_stream.js +0 -109
- package/dist/audio_stream.js.map +0 -1
- package/dist/data_streams/index.js +0 -3
- package/dist/data_streams/index.js.map +0 -1
- package/dist/data_streams/stream_reader.js +0 -124
- package/dist/data_streams/stream_reader.js.map +0 -1
- package/dist/data_streams/stream_writer.js +0 -26
- package/dist/data_streams/stream_writer.js.map +0 -1
- package/dist/data_streams/types.js +0 -1
- package/dist/data_streams/types.js.map +0 -1
- package/dist/e2ee.js +0 -251
- package/dist/e2ee.js.map +0 -1
- package/dist/ffi_client.js +0 -89
- package/dist/ffi_client.js.map +0 -1
- package/dist/frame_processor.js +0 -29
- package/dist/frame_processor.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/log.js +0 -9
- package/dist/log.js.map +0 -1
- package/dist/participant.js +0 -715
- package/dist/participant.js.map +0 -1
- package/dist/room.js +0 -899
- package/dist/room.js.map +0 -1
- package/dist/rpc.js +0 -65
- package/dist/rpc.js.map +0 -1
- package/dist/track.js +0 -218
- package/dist/track.js.map +0 -1
- package/dist/track_publication.js +0 -100
- package/dist/track_publication.js.map +0 -1
- package/dist/transcription.js +0 -1
- package/dist/transcription.js.map +0 -1
- package/dist/types-_PdPVish.d.ts +0 -87
- package/dist/types.js +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils.js +0 -35
- package/dist/utils.js.map +0 -1
- package/dist/version.js +0 -5
- package/dist/version.js.map +0 -1
- package/dist/video_frame.js +0 -207
- package/dist/video_frame.js.map +0 -1
- package/dist/video_source.js +0 -53
- package/dist/video_source.js.map +0 -1
- package/dist/video_stream.js +0 -70
- package/dist/video_stream.js.map +0 -1
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { log } from "../log.js";
|
|
2
|
-
import { bigIntToNumber } from "../utils.js";
|
|
3
|
-
class BaseStreamReader {
|
|
4
|
-
get info() {
|
|
5
|
-
return this._info;
|
|
6
|
-
}
|
|
7
|
-
constructor(info, stream, totalByteSize) {
|
|
8
|
-
this.reader = stream;
|
|
9
|
-
this.totalByteSize = totalByteSize;
|
|
10
|
-
this._info = info;
|
|
11
|
-
this.bytesReceived = 0;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
class ByteStreamReader extends BaseStreamReader {
|
|
15
|
-
handleChunkReceived(chunk) {
|
|
16
|
-
var _a;
|
|
17
|
-
this.bytesReceived += chunk.content.byteLength;
|
|
18
|
-
const currentProgress = this.totalByteSize ? this.bytesReceived / this.totalByteSize : void 0;
|
|
19
|
-
(_a = this.onProgress) == null ? void 0 : _a.call(this, currentProgress);
|
|
20
|
-
}
|
|
21
|
-
[Symbol.asyncIterator]() {
|
|
22
|
-
const reader = this.reader.getReader();
|
|
23
|
-
return {
|
|
24
|
-
next: async () => {
|
|
25
|
-
try {
|
|
26
|
-
const { done, value } = await reader.read();
|
|
27
|
-
if (done) {
|
|
28
|
-
reader.releaseLock();
|
|
29
|
-
return { done: true, value: void 0 };
|
|
30
|
-
} else {
|
|
31
|
-
this.handleChunkReceived(value);
|
|
32
|
-
return { done: false, value: value.content };
|
|
33
|
-
}
|
|
34
|
-
} catch (error) {
|
|
35
|
-
reader.releaseLock();
|
|
36
|
-
log.error("error processing stream update: %s", error);
|
|
37
|
-
return { done: true, value: void 0 };
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
return() {
|
|
41
|
-
reader.releaseLock();
|
|
42
|
-
return { done: true, value: void 0 };
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
async readAll() {
|
|
47
|
-
const chunks = /* @__PURE__ */ new Set();
|
|
48
|
-
for await (const chunk of this) {
|
|
49
|
-
chunks.add(chunk);
|
|
50
|
-
}
|
|
51
|
-
return Array.from(chunks);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
class TextStreamReader extends BaseStreamReader {
|
|
55
|
-
/**
|
|
56
|
-
* A TextStreamReader instance can be used as an AsyncIterator that returns the entire string
|
|
57
|
-
* that has been received up to the current point in time.
|
|
58
|
-
*/
|
|
59
|
-
constructor(info, stream, totalChunkCount) {
|
|
60
|
-
super(info, stream, totalChunkCount);
|
|
61
|
-
this.receivedChunks = /* @__PURE__ */ new Map();
|
|
62
|
-
}
|
|
63
|
-
handleChunkReceived(chunk) {
|
|
64
|
-
var _a;
|
|
65
|
-
const index = bigIntToNumber(chunk.chunkIndex);
|
|
66
|
-
const previousChunkAtIndex = this.receivedChunks.get(index);
|
|
67
|
-
if (previousChunkAtIndex && previousChunkAtIndex.version > chunk.version) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
this.receivedChunks.set(index, chunk);
|
|
71
|
-
const currentProgress = this.totalByteSize ? this.receivedChunks.size / this.totalByteSize : void 0;
|
|
72
|
-
(_a = this.onProgress) == null ? void 0 : _a.call(this, currentProgress);
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Async iterator implementation to allow usage of `for await...of` syntax.
|
|
76
|
-
* Yields structured chunks from the stream.
|
|
77
|
-
*
|
|
78
|
-
*/
|
|
79
|
-
[Symbol.asyncIterator]() {
|
|
80
|
-
const reader = this.reader.getReader();
|
|
81
|
-
const decoder = new TextDecoder();
|
|
82
|
-
const receivedChunks = this.receivedChunks;
|
|
83
|
-
return {
|
|
84
|
-
next: async () => {
|
|
85
|
-
try {
|
|
86
|
-
const { done, value } = await reader.read();
|
|
87
|
-
if (done) {
|
|
88
|
-
reader.releaseLock();
|
|
89
|
-
receivedChunks.clear();
|
|
90
|
-
return { done: true, value: void 0 };
|
|
91
|
-
} else {
|
|
92
|
-
this.handleChunkReceived(value);
|
|
93
|
-
return {
|
|
94
|
-
done: false,
|
|
95
|
-
value: decoder.decode(value.content)
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
} catch (error) {
|
|
99
|
-
reader.releaseLock();
|
|
100
|
-
receivedChunks.clear();
|
|
101
|
-
log.error("error processing stream update: %s", error);
|
|
102
|
-
return { done: true, value: void 0 };
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
return() {
|
|
106
|
-
reader.releaseLock();
|
|
107
|
-
receivedChunks.clear();
|
|
108
|
-
return { done: true, value: void 0 };
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
async readAll() {
|
|
113
|
-
let finalString = "";
|
|
114
|
-
for await (const chunk of this) {
|
|
115
|
-
finalString += chunk;
|
|
116
|
-
}
|
|
117
|
-
return finalString;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
export {
|
|
121
|
-
ByteStreamReader,
|
|
122
|
-
TextStreamReader
|
|
123
|
-
};
|
|
124
|
-
//# sourceMappingURL=stream_reader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/data_streams/stream_reader.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { DataStream_Chunk } from '@livekit/rtc-ffi-bindings';\nimport { log } from '../log.js';\nimport { bigIntToNumber } from '../utils.js';\nimport type { BaseStreamInfo, ByteStreamInfo, TextStreamInfo } from './types.js';\n\nabstract class BaseStreamReader<T extends BaseStreamInfo> {\n protected reader: ReadableStream<DataStream_Chunk>;\n\n protected totalByteSize?: number;\n\n protected _info: T;\n\n protected bytesReceived: number;\n\n get info() {\n return this._info;\n }\n\n constructor(info: T, stream: ReadableStream<DataStream_Chunk>, totalByteSize?: number) {\n this.reader = stream;\n this.totalByteSize = totalByteSize;\n this._info = info;\n this.bytesReceived = 0;\n }\n\n protected abstract handleChunkReceived(chunk: DataStream_Chunk): void;\n\n onProgress?: (progress: number | undefined) => void;\n\n abstract readAll(): Promise<string | Array<Uint8Array>>;\n}\n\n/**\n * A class to read chunks from a ReadableStream and provide them in a structured format.\n */\nexport class ByteStreamReader extends BaseStreamReader<ByteStreamInfo> {\n protected handleChunkReceived(chunk: DataStream_Chunk) {\n this.bytesReceived += chunk.content!.byteLength;\n const currentProgress = this.totalByteSize\n ? this.bytesReceived / this.totalByteSize\n : undefined;\n this.onProgress?.(currentProgress);\n }\n\n [Symbol.asyncIterator]() {\n const reader = this.reader.getReader();\n\n return {\n next: async (): Promise<IteratorResult<Uint8Array>> => {\n try {\n const { done, value } = await reader.read();\n if (done) {\n // Release the lock when the stream is exhausted so the\n // underlying ReadableStream can be garbage-collected.\n reader.releaseLock();\n return { done: true, value: undefined as unknown };\n } else {\n this.handleChunkReceived(value);\n return { done: false, value: value.content! };\n }\n } catch (error: unknown) {\n // Release the lock on error so it doesn't stay held when the\n // consumer never calls return() (e.g. breaking out of for-await).\n reader.releaseLock();\n log.error('error processing stream update: %s', error);\n return { done: true, value: undefined as unknown };\n }\n },\n\n return(): IteratorResult<Uint8Array> {\n reader.releaseLock();\n return { done: true, value: undefined };\n },\n };\n }\n\n async readAll(): Promise<Array<Uint8Array>> {\n const chunks: Set<Uint8Array> = new Set();\n for await (const chunk of this) {\n chunks.add(chunk);\n }\n return Array.from(chunks);\n }\n}\n\n/**\n * A class to read chunks from a ReadableStream and provide them in a structured format.\n */\nexport class TextStreamReader extends BaseStreamReader<TextStreamInfo> {\n private receivedChunks: Map<number, DataStream_Chunk>;\n\n /**\n * A TextStreamReader instance can be used as an AsyncIterator that returns the entire string\n * that has been received up to the current point in time.\n */\n constructor(\n info: TextStreamInfo,\n stream: ReadableStream<DataStream_Chunk>,\n totalChunkCount?: number,\n ) {\n super(info, stream, totalChunkCount);\n this.receivedChunks = new Map();\n }\n\n protected handleChunkReceived(chunk: DataStream_Chunk) {\n const index = bigIntToNumber(chunk.chunkIndex!);\n const previousChunkAtIndex = this.receivedChunks.get(index!);\n if (previousChunkAtIndex && previousChunkAtIndex.version! > chunk.version!) {\n // we have a newer version already, dropping the old one\n return;\n }\n this.receivedChunks.set(index, chunk);\n const currentProgress = this.totalByteSize\n ? this.receivedChunks.size / this.totalByteSize\n : undefined;\n this.onProgress?.(currentProgress);\n }\n\n /**\n * Async iterator implementation to allow usage of `for await...of` syntax.\n * Yields structured chunks from the stream.\n *\n */\n [Symbol.asyncIterator]() {\n const reader = this.reader.getReader();\n const decoder = new TextDecoder();\n const receivedChunks = this.receivedChunks;\n\n return {\n next: async (): Promise<IteratorResult<string>> => {\n try {\n const { done, value } = await reader.read();\n if (done) {\n // Release the lock when the stream is exhausted so the\n // underlying ReadableStream can be garbage-collected.\n reader.releaseLock();\n // Clear received chunks so the buffered data can be GC'd.\n receivedChunks.clear();\n return { done: true, value: undefined };\n } else {\n this.handleChunkReceived(value);\n return {\n done: false,\n value: decoder.decode(value.content!),\n };\n }\n } catch (error: unknown) {\n // Release the lock on error so it doesn't stay held when the\n // consumer never calls return() (e.g. breaking out of for-await).\n reader.releaseLock();\n receivedChunks.clear();\n log.error('error processing stream update: %s', error);\n return { done: true, value: undefined };\n }\n },\n\n return(): IteratorResult<string> {\n reader.releaseLock();\n // Clear received chunks so the buffered data can be GC'd.\n receivedChunks.clear();\n return { done: true, value: undefined };\n },\n };\n }\n\n async readAll(): Promise<string> {\n let finalString: string = '';\n for await (const chunk of this) {\n finalString += chunk;\n }\n return finalString;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
class BaseStreamWriter {
|
|
2
|
-
constructor(writableStream, info, onClose) {
|
|
3
|
-
this.writableStream = writableStream;
|
|
4
|
-
this.defaultWriter = writableStream.getWriter();
|
|
5
|
-
this.onClose = onClose;
|
|
6
|
-
this.info = info;
|
|
7
|
-
}
|
|
8
|
-
write(chunk) {
|
|
9
|
-
return this.defaultWriter.write(chunk);
|
|
10
|
-
}
|
|
11
|
-
async close() {
|
|
12
|
-
var _a;
|
|
13
|
-
await this.defaultWriter.close();
|
|
14
|
-
this.defaultWriter.releaseLock();
|
|
15
|
-
(_a = this.onClose) == null ? void 0 : _a.call(this);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
class TextStreamWriter extends BaseStreamWriter {
|
|
19
|
-
}
|
|
20
|
-
class ByteStreamWriter extends BaseStreamWriter {
|
|
21
|
-
}
|
|
22
|
-
export {
|
|
23
|
-
ByteStreamWriter,
|
|
24
|
-
TextStreamWriter
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=stream_writer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/data_streams/stream_writer.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { BaseStreamInfo, ByteStreamInfo, TextStreamInfo } from './types.js';\n\nclass BaseStreamWriter<T, InfoType extends BaseStreamInfo> {\n protected writableStream: WritableStream<T>;\n\n protected defaultWriter: WritableStreamDefaultWriter<T>;\n\n protected onClose?: () => void;\n\n readonly info: InfoType;\n\n constructor(writableStream: WritableStream<T>, info: InfoType, onClose?: () => void) {\n this.writableStream = writableStream;\n this.defaultWriter = writableStream.getWriter();\n this.onClose = onClose;\n this.info = info;\n }\n\n write(chunk: T): Promise<void> {\n return this.defaultWriter.write(chunk);\n }\n\n async close() {\n await this.defaultWriter.close();\n this.defaultWriter.releaseLock();\n this.onClose?.();\n }\n}\n\nexport class TextStreamWriter extends BaseStreamWriter<string, TextStreamInfo> {}\n\nexport class ByteStreamWriter extends BaseStreamWriter<Uint8Array, ByteStreamInfo> {}\n"],"mappings":"AAKA,MAAM,iBAAqD;AAAA,EASzD,YAAY,gBAAmC,MAAgB,SAAsB;AACnF,SAAK,iBAAiB;AACtB,SAAK,gBAAgB,eAAe,UAAU;AAC9C,SAAK,UAAU;AACf,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,OAAyB;AAC7B,WAAO,KAAK,cAAc,MAAM,KAAK;AAAA,EACvC;AAAA,EAEA,MAAM,QAAQ;AAzBhB;AA0BI,UAAM,KAAK,cAAc,MAAM;AAC/B,SAAK,cAAc,YAAY;AAC/B,eAAK,YAAL;AAAA,EACF;AACF;AAEO,MAAM,yBAAyB,iBAAyC;AAAC;AAEzE,MAAM,yBAAyB,iBAA6C;AAAC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/e2ee.js
DELETED
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
E2eeManagerSetEnabledRequest,
|
|
3
|
-
E2eeRequest,
|
|
4
|
-
EncryptionType,
|
|
5
|
-
FrameCryptorSetEnabledRequest,
|
|
6
|
-
FrameCryptorSetKeyIndexRequest,
|
|
7
|
-
GetKeyRequest,
|
|
8
|
-
GetSharedKeyRequest,
|
|
9
|
-
RatchetKeyRequest,
|
|
10
|
-
RatchetSharedKeyRequest,
|
|
11
|
-
SetKeyRequest,
|
|
12
|
-
SetSharedKeyRequest
|
|
13
|
-
} from "@livekit/rtc-ffi-bindings";
|
|
14
|
-
import { FfiClient } from "./ffi_client.js";
|
|
15
|
-
const DEFAULT_RATCHET_SALT = new TextEncoder().encode("LKFrameEncryptionKey");
|
|
16
|
-
const DEFAULT_RATCHET_WINDOW_SIZE = 16;
|
|
17
|
-
const DEFAULT_FAILURE_TOLERANCE = -1;
|
|
18
|
-
const defaultKeyProviderOptions = {
|
|
19
|
-
ratchetSalt: DEFAULT_RATCHET_SALT,
|
|
20
|
-
ratchetWindowSize: DEFAULT_RATCHET_WINDOW_SIZE,
|
|
21
|
-
failureTolerance: DEFAULT_FAILURE_TOLERANCE
|
|
22
|
-
};
|
|
23
|
-
const defaultE2EEOptions = {
|
|
24
|
-
keyProviderOptions: defaultKeyProviderOptions,
|
|
25
|
-
encryptionType: EncryptionType.GCM
|
|
26
|
-
};
|
|
27
|
-
class KeyProvider {
|
|
28
|
-
/** internal */
|
|
29
|
-
constructor(roomHandle, opts) {
|
|
30
|
-
this.roomHandle = roomHandle;
|
|
31
|
-
this.options = opts;
|
|
32
|
-
}
|
|
33
|
-
setSharedKey(sharedKey, keyIndex) {
|
|
34
|
-
const req = new E2eeRequest({
|
|
35
|
-
roomHandle: this.roomHandle,
|
|
36
|
-
message: {
|
|
37
|
-
case: "setSharedKey",
|
|
38
|
-
value: new SetSharedKeyRequest({
|
|
39
|
-
keyIndex,
|
|
40
|
-
sharedKey
|
|
41
|
-
})
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
FfiClient.instance.request({
|
|
45
|
-
message: {
|
|
46
|
-
case: "e2ee",
|
|
47
|
-
value: req
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
exportSharedKey(keyIndex) {
|
|
52
|
-
const req = new E2eeRequest({
|
|
53
|
-
roomHandle: this.roomHandle,
|
|
54
|
-
message: {
|
|
55
|
-
case: "getSharedKey",
|
|
56
|
-
value: new GetSharedKeyRequest({
|
|
57
|
-
keyIndex
|
|
58
|
-
})
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
const res = FfiClient.instance.request({
|
|
62
|
-
message: {
|
|
63
|
-
case: "e2ee",
|
|
64
|
-
value: req
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
return res.message.value.key;
|
|
68
|
-
}
|
|
69
|
-
ratchetSharedKey(keyIndex) {
|
|
70
|
-
const req = new E2eeRequest({
|
|
71
|
-
roomHandle: this.roomHandle,
|
|
72
|
-
message: {
|
|
73
|
-
case: "ratchetSharedKey",
|
|
74
|
-
value: new RatchetSharedKeyRequest({
|
|
75
|
-
keyIndex
|
|
76
|
-
})
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
const res = FfiClient.instance.request({
|
|
80
|
-
message: {
|
|
81
|
-
case: "e2ee",
|
|
82
|
-
value: req
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
return res.message.value.newKey;
|
|
86
|
-
}
|
|
87
|
-
setKey(participantIdentity, keyIndex) {
|
|
88
|
-
const req = new E2eeRequest({
|
|
89
|
-
roomHandle: this.roomHandle,
|
|
90
|
-
message: {
|
|
91
|
-
case: "setKey",
|
|
92
|
-
value: new SetKeyRequest({
|
|
93
|
-
keyIndex,
|
|
94
|
-
participantIdentity
|
|
95
|
-
})
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
FfiClient.instance.request({
|
|
99
|
-
message: {
|
|
100
|
-
case: "e2ee",
|
|
101
|
-
value: req
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
exportKey(participantIdentity, keyIndex) {
|
|
106
|
-
const req = new E2eeRequest({
|
|
107
|
-
roomHandle: this.roomHandle,
|
|
108
|
-
message: {
|
|
109
|
-
case: "getKey",
|
|
110
|
-
value: new GetKeyRequest({
|
|
111
|
-
keyIndex,
|
|
112
|
-
participantIdentity
|
|
113
|
-
})
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
const res = FfiClient.instance.request({
|
|
117
|
-
message: {
|
|
118
|
-
case: "e2ee",
|
|
119
|
-
value: req
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
return res.message.value.key;
|
|
123
|
-
}
|
|
124
|
-
ratchetKey(participantIdentity, keyIndex) {
|
|
125
|
-
const req = new E2eeRequest({
|
|
126
|
-
roomHandle: this.roomHandle,
|
|
127
|
-
message: {
|
|
128
|
-
case: "ratchetKey",
|
|
129
|
-
value: new RatchetKeyRequest({
|
|
130
|
-
keyIndex,
|
|
131
|
-
participantIdentity
|
|
132
|
-
})
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
const res = FfiClient.instance.request({
|
|
136
|
-
message: {
|
|
137
|
-
case: "e2ee",
|
|
138
|
-
value: req
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
return res.message.value.newKey;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
class FrameCryptor {
|
|
145
|
-
constructor(roomHandle, participantIdentity, keyIndex, enabled) {
|
|
146
|
-
this.roomHandle = BigInt(0);
|
|
147
|
-
this.roomHandle = roomHandle;
|
|
148
|
-
this.participantIdentity = participantIdentity;
|
|
149
|
-
this.keyIndex = keyIndex;
|
|
150
|
-
this.enabled = enabled;
|
|
151
|
-
}
|
|
152
|
-
setEnabled(enabled) {
|
|
153
|
-
this.enabled = enabled;
|
|
154
|
-
const req = new E2eeRequest({
|
|
155
|
-
roomHandle: this.roomHandle,
|
|
156
|
-
message: {
|
|
157
|
-
case: "cryptorSetEnabled",
|
|
158
|
-
value: new FrameCryptorSetEnabledRequest({
|
|
159
|
-
participantIdentity: this.participantIdentity,
|
|
160
|
-
enabled: this.enabled
|
|
161
|
-
})
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
FfiClient.instance.request({
|
|
165
|
-
message: {
|
|
166
|
-
case: "e2ee",
|
|
167
|
-
value: req
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
setKeyIndex(keyIndex) {
|
|
172
|
-
this.keyIndex = keyIndex;
|
|
173
|
-
const req = new E2eeRequest({
|
|
174
|
-
roomHandle: this.roomHandle,
|
|
175
|
-
message: {
|
|
176
|
-
case: "cryptorSetKeyIndex",
|
|
177
|
-
value: new FrameCryptorSetKeyIndexRequest({
|
|
178
|
-
participantIdentity: this.participantIdentity,
|
|
179
|
-
keyIndex: this.keyIndex
|
|
180
|
-
})
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
FfiClient.instance.request({
|
|
184
|
-
message: {
|
|
185
|
-
case: "e2ee",
|
|
186
|
-
value: req
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
class E2EEManager {
|
|
192
|
-
constructor(roomHandle, opts) {
|
|
193
|
-
this.roomHandle = BigInt(0);
|
|
194
|
-
this.roomHandle = roomHandle;
|
|
195
|
-
this.enabled = opts !== void 0;
|
|
196
|
-
opts ??= defaultE2EEOptions;
|
|
197
|
-
const options = { ...defaultE2EEOptions, ...opts };
|
|
198
|
-
this.options = options;
|
|
199
|
-
this.keyProvider = new KeyProvider(roomHandle, options.keyProviderOptions);
|
|
200
|
-
}
|
|
201
|
-
setEnabled(enabled) {
|
|
202
|
-
this.enabled = enabled;
|
|
203
|
-
const req = new E2eeRequest({
|
|
204
|
-
roomHandle: this.roomHandle,
|
|
205
|
-
message: {
|
|
206
|
-
case: "managerSetEnabled",
|
|
207
|
-
value: new E2eeManagerSetEnabledRequest({
|
|
208
|
-
enabled: this.enabled
|
|
209
|
-
})
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
FfiClient.instance.request({
|
|
213
|
-
message: {
|
|
214
|
-
case: "e2ee",
|
|
215
|
-
value: req
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
frameCryptors() {
|
|
220
|
-
const req = new E2eeRequest({
|
|
221
|
-
roomHandle: this.roomHandle,
|
|
222
|
-
message: {
|
|
223
|
-
case: "managerGetFrameCryptors",
|
|
224
|
-
value: {}
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
const res = FfiClient.instance.request({
|
|
228
|
-
message: {
|
|
229
|
-
case: "e2ee",
|
|
230
|
-
value: req
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
const frameCryptors = res.message.value.frameCryptors.map(
|
|
234
|
-
(cryptor) => new FrameCryptor(
|
|
235
|
-
this.roomHandle,
|
|
236
|
-
cryptor.participantIdentity,
|
|
237
|
-
cryptor.keyIndex,
|
|
238
|
-
cryptor.enabled
|
|
239
|
-
)
|
|
240
|
-
);
|
|
241
|
-
return frameCryptors;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
export {
|
|
245
|
-
E2EEManager,
|
|
246
|
-
FrameCryptor,
|
|
247
|
-
KeyProvider,
|
|
248
|
-
defaultE2EEOptions,
|
|
249
|
-
defaultKeyProviderOptions
|
|
250
|
-
};
|
|
251
|
-
//# sourceMappingURL=e2ee.js.map
|
package/dist/e2ee.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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":"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","names":[]}
|
package/dist/ffi_client.js
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
FfiEvent,
|
|
3
|
-
FfiHandle,
|
|
4
|
-
FfiRequest,
|
|
5
|
-
FfiResponse,
|
|
6
|
-
livekitCopyBuffer,
|
|
7
|
-
livekitDispose,
|
|
8
|
-
livekitFfiRequest,
|
|
9
|
-
livekitInitialize,
|
|
10
|
-
livekitRetrievePtr
|
|
11
|
-
} from "@livekit/rtc-ffi-bindings";
|
|
12
|
-
import EventEmitter from "events";
|
|
13
|
-
import { SDK_VERSION } from "./version.js";
|
|
14
|
-
var FfiClientEvent = /* @__PURE__ */ ((FfiClientEvent2) => {
|
|
15
|
-
FfiClientEvent2["FfiEvent"] = "ffi_event";
|
|
16
|
-
return FfiClientEvent2;
|
|
17
|
-
})(FfiClientEvent || {});
|
|
18
|
-
class FfiClient extends EventEmitter {
|
|
19
|
-
constructor() {
|
|
20
|
-
super();
|
|
21
|
-
this._nextRequestAsyncId = BigInt(0);
|
|
22
|
-
this.setMaxListeners(0);
|
|
23
|
-
livekitInitialize(
|
|
24
|
-
(event_data) => {
|
|
25
|
-
const event = FfiEvent.fromBinary(event_data);
|
|
26
|
-
this.emit("ffi_event" /* FfiEvent */, event);
|
|
27
|
-
},
|
|
28
|
-
true,
|
|
29
|
-
SDK_VERSION
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
/** @internal */
|
|
33
|
-
static get instance() {
|
|
34
|
-
if (!globalThis._ffiClientInstance) {
|
|
35
|
-
globalThis._ffiClientInstance = new FfiClient();
|
|
36
|
-
}
|
|
37
|
-
return globalThis._ffiClientInstance;
|
|
38
|
-
}
|
|
39
|
-
request(req) {
|
|
40
|
-
const request = new FfiRequest(req);
|
|
41
|
-
const req_data = request.toBinary();
|
|
42
|
-
const res_data = livekitFfiRequest(req_data);
|
|
43
|
-
return FfiResponse.fromBinary(res_data).message.value;
|
|
44
|
-
}
|
|
45
|
-
copyBuffer(ptr, len) {
|
|
46
|
-
return livekitCopyBuffer(ptr, len);
|
|
47
|
-
}
|
|
48
|
-
retrievePtr(data) {
|
|
49
|
-
return livekitRetrievePtr(data);
|
|
50
|
-
}
|
|
51
|
-
getNextRequestAsyncId() {
|
|
52
|
-
return ++this._nextRequestAsyncId;
|
|
53
|
-
}
|
|
54
|
-
async waitFor(predicate, options) {
|
|
55
|
-
return new Promise((resolve, reject) => {
|
|
56
|
-
var _a, _b;
|
|
57
|
-
const listener = (ev) => {
|
|
58
|
-
if (predicate(ev)) {
|
|
59
|
-
cleanup();
|
|
60
|
-
resolve(ev.message.value);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
const cleanup = () => {
|
|
64
|
-
var _a2;
|
|
65
|
-
this.off("ffi_event" /* FfiEvent */, listener);
|
|
66
|
-
(_a2 = options == null ? void 0 : options.signal) == null ? void 0 : _a2.removeEventListener("abort", onAbort);
|
|
67
|
-
};
|
|
68
|
-
const onAbort = () => {
|
|
69
|
-
var _a2;
|
|
70
|
-
cleanup();
|
|
71
|
-
reject(((_a2 = options == null ? void 0 : options.signal) == null ? void 0 : _a2.reason) ?? new Error("waitFor aborted"));
|
|
72
|
-
};
|
|
73
|
-
if ((_a = options == null ? void 0 : options.signal) == null ? void 0 : _a.aborted) {
|
|
74
|
-
reject(options.signal.reason ?? new Error("waitFor aborted"));
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
(_b = options == null ? void 0 : options.signal) == null ? void 0 : _b.addEventListener("abort", onAbort);
|
|
78
|
-
this.on("ffi_event" /* FfiEvent */, listener);
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
export {
|
|
83
|
-
FfiClient,
|
|
84
|
-
FfiClientEvent,
|
|
85
|
-
FfiHandle,
|
|
86
|
-
FfiRequest,
|
|
87
|
-
livekitDispose as dispose
|
|
88
|
-
};
|
|
89
|
-
//# sourceMappingURL=ffi_client.js.map
|
package/dist/ffi_client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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 private _nextRequestAsyncId = BigInt(0);\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 getNextRequestAsyncId() {\n return ++this._nextRequestAsyncId;\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,EAW1F,cAAc;AACZ,UAAM;AAHR,SAAQ,sBAAsB,OAAO,CAAC;AAIpC,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;AAAA,EArBA,WAAW,WAAsB;AAC/B,QAAI,CAAC,WAAW,oBAAoB;AAClC,iBAAW,qBAAqB,IAAI,UAAU;AAAA,IAChD;AACA,WAAO,WAAW;AAAA,EACpB;AAAA,EAkBA,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,wBAAwB;AACtB,WAAO,EAAE,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,QACJ,WACA,SACY;AACZ,WAAO,IAAI,QAAW,CAAC,SAAS,WAAW;AAlF/C;AAmFM,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;AA1F5B,YAAAC;AA2FQ,aAAK,IAAI,4BAAyB,QAAQ;AAC1C,SAAAA,MAAA,mCAAS,WAAT,gBAAAA,IAAiB,oBAAoB,SAAS;AAAA,MAChD;AAKA,YAAM,UAAU,MAAM;AAlG5B,YAAAA;AAmGQ,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.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import {} from "./audio_frame.js";
|
|
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
|
-
}
|
|
7
|
-
class FrameProcessor {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.symbol = FrameProcessorSymbol;
|
|
10
|
-
}
|
|
11
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
12
|
-
onStreamInfoUpdated(_info) {
|
|
13
|
-
}
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
15
|
-
onStreamInfoCleared() {
|
|
16
|
-
}
|
|
17
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
18
|
-
onCredentialsUpdated(_credentials) {
|
|
19
|
-
}
|
|
20
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
21
|
-
onCredentialsCleared() {
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
export {
|
|
25
|
-
FrameProcessor,
|
|
26
|
-
FrameProcessorSymbol,
|
|
27
|
-
isFrameProcessor
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=frame_processor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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 onStreamInfoCleared(): void {}\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onCredentialsUpdated(_credentials: FrameProcessorCredentials): void {}\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onCredentialsCleared(): 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,sBAA4B;AAAA,EAAC;AAAA;AAAA,EAE7B,qBAAqB,cAA+C;AAAA,EAAC;AAAA;AAAA,EAErE,uBAA6B;AAAA,EAAC;AAIhC;","names":[]}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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 {\n DisconnectReason,\n ParticipantKind,\n ParticipantKindDetail,\n} 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 {\n SimulateScenarioKind,\n StreamState,\n TrackKind,\n TrackSource,\n} 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":"AAIA,SAAS,YAAY,0BAA0B;AAC/C,SAAS,gBAAgB,6BAA6B;AACtD,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAE5B,SAAS,mBAAmB;AAC5B,SAAS,kBAA0C;AACnD,cAAc;AACd,SAAS,aAAa,cAAc,mBAAmB;AAEvD,SAAS,eAAe;AACxB,SAAS,kBAAkB,aAAa,yBAAyB;AACjE,SAAS,iBAAiB,sBAAsB;AAChD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB,YAAY,qBAAqB;AAC3D,SAAS,cAAc,MAAM,iBAA0D;AACvF,SAAS,gBAA+D;AACxE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,kBAAkB;AAC3B,SAAS,mBAAmB;AAC5B,SAAS,mBAAyC;AAClD;AAAA,EACE;AAAA,EAGA;AAAA,OACK;","names":[]}
|
package/dist/log.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { pino } from "pino";
|
|
2
|
-
const isProduction = process.env.NODE_ENV === "production";
|
|
3
|
-
const defaultOptions = { name: "lk-rtc" };
|
|
4
|
-
const log = pino(defaultOptions);
|
|
5
|
-
log.level = isProduction ? "info" : "debug";
|
|
6
|
-
export {
|
|
7
|
-
log
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=log.js.map
|
package/dist/log.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/log.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { LevelWithSilent, LoggerOptions } from 'pino';\nimport { pino } from 'pino';\n\nconst isProduction = process.env.NODE_ENV === 'production';\n\nconst defaultOptions: LoggerOptions = { name: 'lk-rtc' };\n\n/**\n * temporarily disabling the transport option as there might be a memory leak in some corner cases related to it\n * see https://github.com/pinojs/pino/issues/2370\n */\n// const devOptions: LoggerOptions = {\n// ...defaultOptions,\n// transport: {\n// target: 'pino-pretty',\n// options: {\n// colorize: true,\n// },\n// },\n// };\n\nconst log = pino(defaultOptions);\nlog.level = isProduction ? 'info' : 'debug';\n\nexport type LogLevel = LevelWithSilent;\nexport { log };\n"],"mappings":"AAIA,SAAS,YAAY;AAErB,MAAM,eAAe,QAAQ,IAAI,aAAa;AAE9C,MAAM,iBAAgC,EAAE,MAAM,SAAS;AAgBvD,MAAM,MAAM,KAAK,cAAc;AAC/B,IAAI,QAAQ,eAAe,SAAS;","names":[]}
|