@livekit/rtc-node 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/Cargo.toml +21 -0
  2. package/build.rs +5 -0
  3. package/dist/audio_frame.d.ts +14 -0
  4. package/dist/audio_frame.d.ts.map +1 -0
  5. package/dist/audio_frame.js +36 -0
  6. package/dist/audio_frame.js.map +1 -0
  7. package/dist/audio_source.d.ts +14 -0
  8. package/dist/audio_source.d.ts.map +1 -0
  9. package/dist/audio_source.js +42 -0
  10. package/dist/audio_source.js.map +1 -0
  11. package/dist/audio_stream.d.ts +24 -0
  12. package/dist/audio_stream.d.ts.map +1 -0
  13. package/dist/audio_stream.js +54 -0
  14. package/dist/audio_stream.js.map +1 -0
  15. package/dist/e2ee.d.ts +44 -0
  16. package/dist/e2ee.d.ts.map +1 -0
  17. package/dist/e2ee.js +232 -0
  18. package/dist/e2ee.js.map +1 -0
  19. package/dist/ffi_client.d.ts +23 -0
  20. package/dist/ffi_client.d.ts.map +1 -0
  21. package/dist/ffi_client.js +57 -0
  22. package/dist/ffi_client.js.map +1 -0
  23. package/dist/index.d.ts +16 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +71 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/native.d.ts +14 -0
  28. package/dist/native.d.ts.map +1 -0
  29. package/dist/native.js +297 -0
  30. package/dist/native.js.map +1 -0
  31. package/dist/participant.d.ts +30 -0
  32. package/dist/participant.d.ts.map +1 -0
  33. package/dist/participant.js +120 -0
  34. package/dist/participant.js.map +1 -0
  35. package/dist/proto/audio_frame_pb.d.ts +556 -0
  36. package/dist/proto/audio_frame_pb.d.ts.map +1 -0
  37. package/dist/proto/audio_frame_pb.js +861 -0
  38. package/dist/proto/audio_frame_pb.js.map +1 -0
  39. package/dist/proto/e2ee_pb.d.ts +652 -0
  40. package/dist/proto/e2ee_pb.d.ts.map +1 -0
  41. package/dist/proto/e2ee_pb.js +906 -0
  42. package/dist/proto/e2ee_pb.js.map +1 -0
  43. package/dist/proto/ffi_pb.d.ts +672 -0
  44. package/dist/proto/ffi_pb.d.ts.map +1 -0
  45. package/dist/proto/ffi_pb.js +459 -0
  46. package/dist/proto/ffi_pb.js.map +1 -0
  47. package/dist/proto/handle_pb.d.ts +30 -0
  48. package/dist/proto/handle_pb.d.ts.map +1 -0
  49. package/dist/proto/handle_pb.js +59 -0
  50. package/dist/proto/handle_pb.js.map +1 -0
  51. package/dist/proto/participant_pb.d.ts +54 -0
  52. package/dist/proto/participant_pb.d.ts.map +1 -0
  53. package/dist/proto/participant_pb.js +93 -0
  54. package/dist/proto/participant_pb.js.map +1 -0
  55. package/dist/proto/room_pb.d.ts +1480 -0
  56. package/dist/proto/room_pb.d.ts.map +1 -0
  57. package/dist/proto/room_pb.js +2172 -0
  58. package/dist/proto/room_pb.js.map +1 -0
  59. package/dist/proto/stats_pb.d.ts +1713 -0
  60. package/dist/proto/stats_pb.d.ts.map +1 -0
  61. package/dist/proto/stats_pb.js +2238 -0
  62. package/dist/proto/stats_pb.js.map +1 -0
  63. package/dist/proto/track_pb.d.ts +353 -0
  64. package/dist/proto/track_pb.d.ts.map +1 -0
  65. package/dist/proto/track_pb.js +550 -0
  66. package/dist/proto/track_pb.js.map +1 -0
  67. package/dist/proto/video_frame_pb.d.ts +855 -0
  68. package/dist/proto/video_frame_pb.d.ts.map +1 -0
  69. package/dist/proto/video_frame_pb.js +1214 -0
  70. package/dist/proto/video_frame_pb.js.map +1 -0
  71. package/dist/room.d.ts +95 -0
  72. package/dist/room.d.ts.map +1 -0
  73. package/dist/room.js +285 -0
  74. package/dist/room.js.map +1 -0
  75. package/dist/track.d.ts +35 -0
  76. package/dist/track.d.ts.map +1 -0
  77. package/dist/track.js +72 -0
  78. package/dist/track.js.map +1 -0
  79. package/dist/track_publication.d.ts +31 -0
  80. package/dist/track_publication.d.ts.map +1 -0
  81. package/dist/track_publication.js +66 -0
  82. package/dist/track_publication.js.map +1 -0
  83. package/dist/video_frame.d.ts +111 -0
  84. package/dist/video_frame.d.ts.map +1 -0
  85. package/dist/video_frame.js +364 -0
  86. package/dist/video_frame.js.map +1 -0
  87. package/dist/video_source.d.ts +14 -0
  88. package/dist/video_source.d.ts.map +1 -0
  89. package/dist/video_source.js +44 -0
  90. package/dist/video_source.js.map +1 -0
  91. package/dist/video_stream.d.ts +24 -0
  92. package/dist/video_stream.d.ts.map +1 -0
  93. package/dist/video_stream.js +56 -0
  94. package/dist/video_stream.js.map +1 -0
  95. package/package.json +19 -14
  96. package/src/audio_frame.ts +45 -0
  97. package/src/audio_source.ts +64 -0
  98. package/src/audio_stream.ts +74 -0
  99. package/src/e2ee.ts +311 -0
  100. package/src/ffi_client.ts +68 -0
  101. package/src/index.ts +52 -0
  102. package/src/lib.rs +5 -0
  103. package/src/native.d.ts +14 -0
  104. package/src/native.js +269 -0
  105. package/src/nodejs.rs +115 -0
  106. package/src/participant.ts +171 -0
  107. package/src/proto/audio_frame_pb.ts +1121 -0
  108. package/src/proto/e2ee_pb.ts +1231 -0
  109. package/src/proto/ffi_pb.ts +969 -0
  110. package/src/proto/handle_pb.ts +69 -0
  111. package/src/proto/participant_pb.ts +121 -0
  112. package/src/proto/room_pb.ts +2843 -0
  113. package/src/proto/stats_pb.ts +2955 -0
  114. package/src/proto/track_pb.ts +683 -0
  115. package/src/proto/video_frame_pb.ts +1568 -0
  116. package/src/room.ts +370 -0
  117. package/src/track.ts +101 -0
  118. package/src/track_publication.ts +90 -0
  119. package/src/video_frame.ts +620 -0
  120. package/src/video_source.ts +61 -0
  121. package/src/video_stream.ts +76 -0
package/Cargo.toml ADDED
@@ -0,0 +1,21 @@
1
+ [package]
2
+ edition = "2021"
3
+ name = "rtc-node"
4
+ version = "0.0.1"
5
+
6
+ [lib]
7
+ crate-type = ["cdylib"]
8
+
9
+ [dependencies]
10
+ napi = { version = "2.12.2", default-features = false, features = ["napi6"] }
11
+ napi-derive = "2.12.2"
12
+ livekit-ffi = { path = "./rust-sdks/livekit-ffi" }
13
+ prost = "0.12"
14
+ prost-types = "0.12"
15
+ log = "0.4.20"
16
+
17
+ [build-dependencies]
18
+ napi-build = "2.0.1"
19
+
20
+ [profile.release]
21
+ lto = true
package/build.rs ADDED
@@ -0,0 +1,5 @@
1
+ extern crate napi_build;
2
+
3
+ fn main() {
4
+ napi_build::setup();
5
+ }
@@ -0,0 +1,14 @@
1
+ import { AudioFrameBufferInfo, OwnedAudioFrameBuffer } from './proto/audio_frame_pb';
2
+ export declare class AudioFrame {
3
+ data: Uint16Array;
4
+ sampleRate: number;
5
+ channels: number;
6
+ samplesPerChannel: number;
7
+ constructor(data: Uint16Array, sampleRate: number, channels: number, samplesPerChannel: number);
8
+ static create(sampleRate: number, channels: number, samplesPerChannel: number): AudioFrame;
9
+ /** @internal */
10
+ static fromOwnedInfo(owned: OwnedAudioFrameBuffer): AudioFrame;
11
+ /** @internal */
12
+ protoInfo(): AudioFrameBufferInfo;
13
+ }
14
+ //# sourceMappingURL=audio_frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio_frame.d.ts","sourceRoot":"","sources":["../src/audio_frame.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAErF,qBAAa,UAAU;IACrB,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;gBAEd,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM;IAO9F,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,UAAU;IAK1F,gBAAgB;IAChB,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,qBAAqB,GAAG,UAAU;IAa9D,gBAAgB;IAChB,SAAS,IAAI,oBAAoB;CAQlC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AudioFrame = void 0;
4
+ const ffi_client_1 = require("./ffi_client");
5
+ const audio_frame_pb_1 = require("./proto/audio_frame_pb");
6
+ class AudioFrame {
7
+ constructor(data, sampleRate, channels, samplesPerChannel) {
8
+ this.data = data;
9
+ this.sampleRate = sampleRate;
10
+ this.channels = channels;
11
+ this.samplesPerChannel = samplesPerChannel;
12
+ }
13
+ static create(sampleRate, channels, samplesPerChannel) {
14
+ const data = new Uint16Array(channels * samplesPerChannel);
15
+ return new AudioFrame(data, sampleRate, channels, samplesPerChannel);
16
+ }
17
+ /** @internal */
18
+ static fromOwnedInfo(owned) {
19
+ let info = owned.info;
20
+ let len = info.numChannels * info.samplesPerChannel * 2; // c_int16
21
+ let data = ffi_client_1.FfiClient.instance.copyBuffer(info.dataPtr, len);
22
+ new ffi_client_1.FfiHandle(owned.handle.id).dispose();
23
+ return new AudioFrame(new Uint16Array(data.buffer), info.sampleRate, info.numChannels, info.samplesPerChannel);
24
+ }
25
+ /** @internal */
26
+ protoInfo() {
27
+ return new audio_frame_pb_1.AudioFrameBufferInfo({
28
+ dataPtr: ffi_client_1.FfiClient.instance.retrievePtr(new Uint8Array(this.data.buffer)),
29
+ sampleRate: this.sampleRate,
30
+ numChannels: this.channels,
31
+ samplesPerChannel: this.samplesPerChannel,
32
+ });
33
+ }
34
+ }
35
+ exports.AudioFrame = AudioFrame;
36
+ //# sourceMappingURL=audio_frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio_frame.js","sourceRoot":"","sources":["../src/audio_frame.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AACpD,2DAAqF;AAErF,MAAa,UAAU;IAMrB,YAAY,IAAiB,EAAE,UAAkB,EAAE,QAAgB,EAAE,iBAAyB;QAC5F,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,UAAkB,EAAE,QAAgB,EAAE,iBAAyB;QAC3E,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,QAAQ,GAAG,iBAAiB,CAAC,CAAC;QAC3D,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACvE,CAAC;IAED,gBAAgB;IAChB,MAAM,CAAC,aAAa,CAAC,KAA4B;QAC/C,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,UAAU;QACnE,IAAI,IAAI,GAAG,sBAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,sBAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACzC,OAAO,IAAI,UAAU,CACnB,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAC5B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,iBAAiB,CACvB,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,SAAS;QACP,OAAO,IAAI,qCAAoB,CAAC;YAC9B,OAAO,EAAE,sBAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzE,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,QAAQ;YAC1B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C,CAAC,CAAC;IACL,CAAC;CACF;AAzCD,gCAyCC"}
@@ -0,0 +1,14 @@
1
+ import { FfiHandle } from './native';
2
+ import { AudioFrame } from './audio_frame';
3
+ import { AudioSourceInfo } from './proto/audio_frame_pb';
4
+ export declare class AudioSource {
5
+ /** @internal */
6
+ info: AudioSourceInfo;
7
+ /** @internal */
8
+ ffiHandle: FfiHandle;
9
+ sampleRate: number;
10
+ numChannels: number;
11
+ constructor(sampleRate: number, numChannels: number);
12
+ captureFrame(frame: AudioFrame): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=audio_source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio_source.d.ts","sourceRoot":"","sources":["../src/audio_source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,eAAe,EAOhB,MAAM,wBAAwB,CAAC;AAGhC,qBAAa,WAAW;IACtB,gBAAgB;IAChB,IAAI,EAAE,eAAe,CAAC;IACtB,gBAAgB;IAChB,SAAS,EAAE,SAAS,CAAC;IAErB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;gBAER,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAqB7C,YAAY,CAAC,KAAK,EAAE,UAAU;CAkBrC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AudioSource = void 0;
4
+ const native_1 = require("./native");
5
+ const audio_frame_pb_1 = require("./proto/audio_frame_pb");
6
+ const ffi_client_1 = require("./ffi_client");
7
+ class AudioSource {
8
+ constructor(sampleRate, numChannels) {
9
+ this.sampleRate = sampleRate;
10
+ this.numChannels = numChannels;
11
+ let req = new audio_frame_pb_1.NewAudioSourceRequest({
12
+ type: audio_frame_pb_1.AudioSourceType.AUDIO_SOURCE_NATIVE,
13
+ sampleRate: sampleRate,
14
+ numChannels: numChannels,
15
+ });
16
+ let res = ffi_client_1.FfiClient.instance.request({
17
+ message: {
18
+ case: 'newAudioSource',
19
+ value: req,
20
+ },
21
+ });
22
+ this.info = res.source.info;
23
+ this.ffiHandle = new native_1.FfiHandle(res.source.handle.id);
24
+ }
25
+ async captureFrame(frame) {
26
+ let req = new audio_frame_pb_1.CaptureAudioFrameRequest({
27
+ sourceHandle: this.ffiHandle.handle,
28
+ buffer: frame.protoInfo(),
29
+ });
30
+ let res = ffi_client_1.FfiClient.instance.request({
31
+ message: { case: 'captureAudioFrame', value: req },
32
+ });
33
+ let cb = await ffi_client_1.FfiClient.instance.waitFor((ev) => {
34
+ return ev.message.case == 'captureAudioFrame' && ev.message.value.asyncId == res.asyncId;
35
+ });
36
+ if (cb.error) {
37
+ throw new Error(cb.error);
38
+ }
39
+ }
40
+ }
41
+ exports.AudioSource = AudioSource;
42
+ //# sourceMappingURL=audio_source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio_source.js","sourceRoot":"","sources":["../src/audio_source.ts"],"names":[],"mappings":";;;AAEA,qCAAqC;AAErC,2DAQgC;AAChC,6CAAqD;AAErD,MAAa,WAAW;IAStB,YAAY,UAAkB,EAAE,WAAmB;QACjD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,IAAI,GAAG,GAAG,IAAI,sCAAqB,CAAC;YAClC,IAAI,EAAE,gCAAe,CAAC,mBAAmB;YACzC,UAAU,EAAE,UAAU;YACtB,WAAW,EAAE,WAAW;SACzB,CAAC,CAAC;QAEH,IAAI,GAAG,GAAG,sBAAS,CAAC,QAAQ,CAAC,OAAO,CAAyB;YAC3D,OAAO,EAAE;gBACP,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,GAAG;aACX;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAiB;QAClC,IAAI,GAAG,GAAG,IAAI,yCAAwB,CAAC;YACrC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;YACnC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE;SAC1B,CAAC,CAAC;QAEH,IAAI,GAAG,GAAG,sBAAS,CAAC,QAAQ,CAAC,OAAO,CAA4B;YAC9D,OAAO,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,GAAG,EAAE;SACnD,CAAC,CAAC;QAEH,IAAI,EAAE,GAAG,MAAM,sBAAS,CAAC,QAAQ,CAAC,OAAO,CAA4B,CAAC,EAAE,EAAE,EAAE;YAC1E,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,mBAAmB,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF;AAhDD,kCAgDC"}
@@ -0,0 +1,24 @@
1
+ import { AudioFrame } from './audio_frame';
2
+ import { FfiHandle } from './ffi_client';
3
+ import { AudioStreamInfo } from './proto/audio_frame_pb';
4
+ import { Track } from './track';
5
+ import TypedEmitter from 'typed-emitter';
6
+ export type AudioStreamCallbacks = {
7
+ frameReceived: (frame: AudioFrame) => void;
8
+ };
9
+ export declare enum AudioStreamEvent {
10
+ FrameReceived = "frameReceived"
11
+ }
12
+ declare const AudioStream_base: new () => TypedEmitter<AudioStreamCallbacks>;
13
+ export declare class AudioStream extends AudioStream_base {
14
+ /** @internal */
15
+ info: AudioStreamInfo;
16
+ /** @internal */
17
+ ffiHandle: FfiHandle;
18
+ track: Track;
19
+ constructor(track: Track);
20
+ private onEvent;
21
+ close(): void;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=audio_stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio_stream.d.ts","sourceRoot":"","sources":["../src/audio_stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAuC,SAAS,EAAc,MAAM,cAAc,CAAC;AAC1F,OAAO,EACL,eAAe,EAIhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,oBAAY,gBAAgB;IAC1B,aAAa,kBAAkB;CAChC;0CAE2D,aAAa,oBAAoB,CAAC;AAA9F,qBAAa,WAAY,SAAQ,gBAA8D;IAC7F,gBAAgB;IAChB,IAAI,EAAE,eAAe,CAAC;IACtB,gBAAgB;IAChB,SAAS,EAAE,SAAS,CAAC;IAErB,KAAK,EAAE,KAAK,CAAC;gBAED,KAAK,EAAE,KAAK;IAsBxB,OAAO,CAAC,OAAO;IAoBf,KAAK;CAGN"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AudioStream = exports.AudioStreamEvent = void 0;
7
+ const audio_frame_1 = require("./audio_frame");
8
+ const ffi_client_1 = require("./ffi_client");
9
+ const audio_frame_pb_1 = require("./proto/audio_frame_pb");
10
+ const events_1 = __importDefault(require("events"));
11
+ var AudioStreamEvent;
12
+ (function (AudioStreamEvent) {
13
+ AudioStreamEvent["FrameReceived"] = "frameReceived";
14
+ })(AudioStreamEvent || (exports.AudioStreamEvent = AudioStreamEvent = {}));
15
+ class AudioStream extends events_1.default {
16
+ constructor(track) {
17
+ super();
18
+ this.track = track;
19
+ let req = new audio_frame_pb_1.NewAudioStreamRequest({
20
+ type: audio_frame_pb_1.AudioStreamType.AUDIO_STREAM_NATIVE,
21
+ trackHandle: track.ffi_handle.handle,
22
+ });
23
+ let res = ffi_client_1.FfiClient.instance.request({
24
+ message: {
25
+ case: 'newAudioStream',
26
+ value: req,
27
+ },
28
+ });
29
+ this.info = res.stream.info;
30
+ this.ffiHandle = new ffi_client_1.FfiHandle(res.stream.handle.id);
31
+ ffi_client_1.FfiClient.instance.on(ffi_client_1.FfiClientEvent.FfiEvent, this.onEvent);
32
+ }
33
+ onEvent(ev) {
34
+ if (ev.message.case != 'audioStreamEvent' ||
35
+ ev.message.value.streamHandle != this.ffiHandle.handle) {
36
+ return;
37
+ }
38
+ let streamEvent = ev.message.value.message;
39
+ switch (streamEvent.case) {
40
+ case 'frameReceived':
41
+ let frame = audio_frame_1.AudioFrame.fromOwnedInfo(streamEvent.value.frame);
42
+ this.emit(AudioStreamEvent.FrameReceived, frame);
43
+ break;
44
+ case 'eos':
45
+ ffi_client_1.FfiClient.instance.off(ffi_client_1.FfiClientEvent.FfiEvent, this.onEvent);
46
+ break;
47
+ }
48
+ }
49
+ close() {
50
+ this.ffiHandle.dispose();
51
+ }
52
+ }
53
+ exports.AudioStream = AudioStream;
54
+ //# sourceMappingURL=audio_stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio_stream.js","sourceRoot":"","sources":["../src/audio_stream.ts"],"names":[],"mappings":";;;;;;AAAA,+CAA2C;AAC3C,6CAA0F;AAC1F,2DAKgC;AAEhC,oDAAkC;AAOlC,IAAY,gBAEX;AAFD,WAAY,gBAAgB;IAC1B,mDAA+B,CAAA;AACjC,CAAC,EAFW,gBAAgB,gCAAhB,gBAAgB,QAE3B;AAED,MAAa,WAAY,SAAS,gBAA6D;IAQ7F,YAAY,KAAY;QACtB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,GAAG,GAAG,IAAI,sCAAqB,CAAC;YAClC,IAAI,EAAE,gCAAe,CAAC,mBAAmB;YACzC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM;SACrC,CAAC,CAAC;QAEH,IAAI,GAAG,GAAG,sBAAS,CAAC,QAAQ,CAAC,OAAO,CAAyB;YAC3D,OAAO,EAAE;gBACP,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,GAAG;aACX;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,sBAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAErD,sBAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,2BAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;IAEO,OAAO,CAAC,EAAY;QAC1B,IACE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,kBAAkB;YACrC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EACtD,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3C,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;YACzB,KAAK,eAAe;gBAClB,IAAI,KAAK,GAAG,wBAAU,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9D,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,KAAK;gBACR,sBAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,2BAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9D,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AArDD,kCAqDC"}
package/dist/e2ee.d.ts ADDED
@@ -0,0 +1,44 @@
1
+ import { EncryptionType } from './proto/e2ee_pb';
2
+ export interface KeyProviderOptions {
3
+ sharedKey?: Uint8Array;
4
+ ratchetSalt: Uint8Array;
5
+ ratchetWindowSize: number;
6
+ failureTolerance: number;
7
+ }
8
+ export declare const defaultKeyProviderOptions: KeyProviderOptions;
9
+ export interface E2EEOptions {
10
+ keyProviderOptions: KeyProviderOptions;
11
+ encryptionType: EncryptionType;
12
+ }
13
+ export declare const defaultE2EEOptions: E2EEOptions;
14
+ export declare class KeyProvider {
15
+ private roomHandle;
16
+ options: KeyProviderOptions;
17
+ /** internal */
18
+ constructor(roomHandle: bigint, opts: KeyProviderOptions);
19
+ setSharedKey(sharedKey: Uint8Array, keyIndex: number): void;
20
+ exportSharedKey(keyIndex: number): Uint8Array;
21
+ ratchetSharedKey(keyIndex: number): Uint8Array;
22
+ setKey(participantIdentity: string, keyIndex: number): void;
23
+ exportKey(participantIdentity: string, keyIndex: number): Uint8Array;
24
+ ratchetKey(participantIdentity: string, keyIndex: number): Uint8Array;
25
+ }
26
+ export declare class FrameCryptor {
27
+ private roomHandle;
28
+ participantIdentity: string;
29
+ keyIndex: number;
30
+ enabled: boolean;
31
+ constructor(roomHandle: bigint, participantIdentity: string, keyIndex: number, enabled: boolean);
32
+ setEnabled(enabled: boolean): void;
33
+ setKeyIndex(keyIndex: number): void;
34
+ }
35
+ export declare class E2EEManager {
36
+ private roomHandle;
37
+ private options;
38
+ private keyProvider?;
39
+ enabled: boolean;
40
+ constructor(roomHandle: bigint, opts?: E2EEOptions);
41
+ setEnabled(enabled: boolean): void;
42
+ frameCryptors(): FrameCryptor[];
43
+ }
44
+ //# sourceMappingURL=e2ee.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2ee.d.ts","sourceRoot":"","sources":["../src/e2ee.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,cAAc,EAaf,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,UAAU,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,yBAAyB,EAAE,kBAIvC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,eAAO,MAAM,kBAAkB,EAAE,WAGhC,CAAC;AAEF,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,EAAE,kBAAkB,CAAC;IAE5B,eAAe;gBACH,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB;IAKxD,YAAY,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM;IAoBpD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAqB7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAqB9C,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAoBpD,SAAS,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAsBpE,UAAU,CAAC,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;CAqBtE;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAM;IACxB,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,CAAM;IACxB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAc;IAElC,OAAO,EAAE,OAAO,CAAC;gBAEL,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW;IAYlD,UAAU,CAAC,OAAO,EAAE,OAAO;IAoB3B,aAAa,IAAI,YAAY,EAAE;CA8BhC"}
package/dist/e2ee.js ADDED
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.E2EEManager = exports.FrameCryptor = exports.KeyProvider = exports.defaultE2EEOptions = exports.defaultKeyProviderOptions = void 0;
4
+ const ffi_client_1 = require("./ffi_client");
5
+ const e2ee_pb_1 = require("./proto/e2ee_pb");
6
+ const DEFAULT_RATCHET_SALT = new TextEncoder().encode('LKFrameEncryptionKey');
7
+ const DEFAULT_RATCHET_WINDOW_SIZE = 16;
8
+ const DEFAULT_FAILURE_TOLERANCE = -1;
9
+ exports.defaultKeyProviderOptions = {
10
+ ratchetSalt: DEFAULT_RATCHET_SALT,
11
+ ratchetWindowSize: DEFAULT_RATCHET_WINDOW_SIZE,
12
+ failureTolerance: DEFAULT_FAILURE_TOLERANCE,
13
+ };
14
+ exports.defaultE2EEOptions = {
15
+ keyProviderOptions: exports.defaultKeyProviderOptions,
16
+ encryptionType: e2ee_pb_1.EncryptionType.GCM,
17
+ };
18
+ class KeyProvider {
19
+ /** internal */
20
+ constructor(roomHandle, opts) {
21
+ this.roomHandle = roomHandle;
22
+ this.options = opts;
23
+ }
24
+ setSharedKey(sharedKey, keyIndex) {
25
+ let req = new e2ee_pb_1.E2eeRequest({
26
+ roomHandle: this.roomHandle,
27
+ message: {
28
+ case: 'setSharedKey',
29
+ value: new e2ee_pb_1.SetSharedKeyRequest({
30
+ keyIndex: keyIndex,
31
+ sharedKey: sharedKey,
32
+ }),
33
+ },
34
+ });
35
+ ffi_client_1.FfiClient.instance.request({
36
+ message: {
37
+ case: 'e2ee',
38
+ value: req,
39
+ },
40
+ });
41
+ }
42
+ exportSharedKey(keyIndex) {
43
+ let req = new e2ee_pb_1.E2eeRequest({
44
+ roomHandle: this.roomHandle,
45
+ message: {
46
+ case: 'getSharedKey',
47
+ value: new e2ee_pb_1.GetSharedKeyRequest({
48
+ keyIndex: keyIndex,
49
+ }),
50
+ },
51
+ });
52
+ let res = ffi_client_1.FfiClient.instance.request({
53
+ message: {
54
+ case: 'e2ee',
55
+ value: req,
56
+ },
57
+ });
58
+ return res.message.value.key;
59
+ }
60
+ ratchetSharedKey(keyIndex) {
61
+ let req = new e2ee_pb_1.E2eeRequest({
62
+ roomHandle: this.roomHandle,
63
+ message: {
64
+ case: 'ratchetSharedKey',
65
+ value: new e2ee_pb_1.RatchetSharedKeyRequest({
66
+ keyIndex: keyIndex,
67
+ }),
68
+ },
69
+ });
70
+ let res = ffi_client_1.FfiClient.instance.request({
71
+ message: {
72
+ case: 'e2ee',
73
+ value: req,
74
+ },
75
+ });
76
+ return res.message.value.newKey;
77
+ }
78
+ setKey(participantIdentity, keyIndex) {
79
+ let req = new e2ee_pb_1.E2eeRequest({
80
+ roomHandle: this.roomHandle,
81
+ message: {
82
+ case: 'setKey',
83
+ value: new e2ee_pb_1.SetKeyRequest({
84
+ keyIndex: keyIndex,
85
+ participantIdentity: participantIdentity,
86
+ }),
87
+ },
88
+ });
89
+ ffi_client_1.FfiClient.instance.request({
90
+ message: {
91
+ case: 'e2ee',
92
+ value: req,
93
+ },
94
+ });
95
+ }
96
+ exportKey(participantIdentity, keyIndex) {
97
+ let req = new e2ee_pb_1.E2eeRequest({
98
+ roomHandle: this.roomHandle,
99
+ message: {
100
+ case: 'getKey',
101
+ value: new e2ee_pb_1.GetKeyRequest({
102
+ keyIndex: keyIndex,
103
+ participantIdentity: participantIdentity,
104
+ }),
105
+ },
106
+ });
107
+ let res = ffi_client_1.FfiClient.instance.request({
108
+ message: {
109
+ case: 'e2ee',
110
+ value: req,
111
+ },
112
+ });
113
+ return res.message.value.key;
114
+ }
115
+ ratchetKey(participantIdentity, keyIndex) {
116
+ let req = new e2ee_pb_1.E2eeRequest({
117
+ roomHandle: this.roomHandle,
118
+ message: {
119
+ case: 'ratchetKey',
120
+ value: new e2ee_pb_1.RatchetKeyRequest({
121
+ keyIndex: keyIndex,
122
+ participantIdentity: participantIdentity,
123
+ }),
124
+ },
125
+ });
126
+ let res = ffi_client_1.FfiClient.instance.request({
127
+ message: {
128
+ case: 'e2ee',
129
+ value: req,
130
+ },
131
+ });
132
+ return res.message.value.newKey;
133
+ }
134
+ }
135
+ exports.KeyProvider = KeyProvider;
136
+ class FrameCryptor {
137
+ constructor(roomHandle, participantIdentity, keyIndex, enabled) {
138
+ this.roomHandle = 0n;
139
+ this.roomHandle = roomHandle;
140
+ this.participantIdentity = participantIdentity;
141
+ this.keyIndex = keyIndex;
142
+ this.enabled = enabled;
143
+ }
144
+ setEnabled(enabled) {
145
+ this.enabled = enabled;
146
+ let req = new e2ee_pb_1.E2eeRequest({
147
+ roomHandle: this.roomHandle,
148
+ message: {
149
+ case: 'cryptorSetEnabled',
150
+ value: new e2ee_pb_1.FrameCryptorSetEnabledRequest({
151
+ participantIdentity: this.participantIdentity,
152
+ enabled: this.enabled,
153
+ }),
154
+ },
155
+ });
156
+ ffi_client_1.FfiClient.instance.request({
157
+ message: {
158
+ case: 'e2ee',
159
+ value: req,
160
+ },
161
+ });
162
+ }
163
+ setKeyIndex(keyIndex) {
164
+ this.keyIndex = keyIndex;
165
+ let req = new e2ee_pb_1.E2eeRequest({
166
+ roomHandle: this.roomHandle,
167
+ message: {
168
+ case: 'cryptorSetKeyIndex',
169
+ value: new e2ee_pb_1.FrameCryptorSetKeyIndexRequest({
170
+ participantIdentity: this.participantIdentity,
171
+ keyIndex: this.keyIndex,
172
+ }),
173
+ },
174
+ });
175
+ ffi_client_1.FfiClient.instance.request({
176
+ message: {
177
+ case: 'e2ee',
178
+ value: req,
179
+ },
180
+ });
181
+ }
182
+ }
183
+ exports.FrameCryptor = FrameCryptor;
184
+ class E2EEManager {
185
+ constructor(roomHandle, opts) {
186
+ this.roomHandle = 0n;
187
+ this.roomHandle = roomHandle;
188
+ this.enabled = opts !== undefined;
189
+ if (opts !== undefined) {
190
+ const options = { ...exports.defaultE2EEOptions, ...opts };
191
+ this.options = options;
192
+ this.keyProvider = new KeyProvider(roomHandle, options.keyProviderOptions);
193
+ }
194
+ }
195
+ setEnabled(enabled) {
196
+ this.enabled = enabled;
197
+ let req = new e2ee_pb_1.E2eeRequest({
198
+ roomHandle: this.roomHandle,
199
+ message: {
200
+ case: 'managerSetEnabled',
201
+ value: new e2ee_pb_1.E2eeManagerSetEnabledRequest({
202
+ enabled: this.enabled,
203
+ }),
204
+ },
205
+ });
206
+ ffi_client_1.FfiClient.instance.request({
207
+ message: {
208
+ case: 'e2ee',
209
+ value: req,
210
+ },
211
+ });
212
+ }
213
+ frameCryptors() {
214
+ let req = new e2ee_pb_1.E2eeRequest({
215
+ roomHandle: this.roomHandle,
216
+ message: {
217
+ case: 'managerGetFrameCryptors',
218
+ value: {},
219
+ },
220
+ });
221
+ let res = ffi_client_1.FfiClient.instance.request({
222
+ message: {
223
+ case: 'e2ee',
224
+ value: req,
225
+ },
226
+ });
227
+ let frameCryptors = res.message.value.frameCryptors.map((cryptor) => new FrameCryptor(this.roomHandle, cryptor.participantIdentity, cryptor.keyIndex, cryptor.enabled));
228
+ return frameCryptors;
229
+ }
230
+ }
231
+ exports.E2EEManager = E2EEManager;
232
+ //# sourceMappingURL=e2ee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2ee.js","sourceRoot":"","sources":["../src/e2ee.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { FfiRequest, FfiResponse, FfiEvent } from './proto/ffi_pb';
2
+ import TypedEmitter from 'typed-emitter';
3
+ import { FfiHandle } from './native';
4
+ import { PartialMessage } from '@bufbuild/protobuf';
5
+ export { FfiHandle, FfiEvent, FfiResponse, FfiRequest };
6
+ export type FfiClientCallbacks = {
7
+ ffi_event: (event: FfiEvent) => void;
8
+ };
9
+ export declare enum FfiClientEvent {
10
+ FfiEvent = "ffi_event"
11
+ }
12
+ declare const FfiClient_base: new () => TypedEmitter<FfiClientCallbacks>;
13
+ export declare class FfiClient extends FfiClient_base {
14
+ static _client?: FfiClient;
15
+ /** @internal */
16
+ static get instance(): FfiClient;
17
+ constructor();
18
+ request<T>(req: PartialMessage<FfiRequest>): T;
19
+ copyBuffer(ptr: bigint, len: number): Uint8Array;
20
+ retrievePtr(data: Uint8Array): bigint;
21
+ waitFor<T>(predicate: (ev: FfiEvent) => boolean): Promise<T>;
22
+ }
23
+ //# sourceMappingURL=ffi_client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffi_client.d.ts","sourceRoot":"","sources":["../src/ffi_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,SAAS,EAKV,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,oBAAY,cAAc;IACxB,QAAQ,cAAc;CACvB;wCAEyD,aAAa,kBAAkB,CAAC;AAA1F,qBAAa,SAAU,SAAQ,cAA4D;IACzF,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAE3B,gBAAgB;IAChB,MAAM,KAAK,QAAQ,IAAI,SAAS,CAI/B;;IAWD,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,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAWnE"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FfiClient = exports.FfiClientEvent = exports.FfiRequest = exports.FfiResponse = exports.FfiEvent = exports.FfiHandle = void 0;
7
+ const ffi_pb_1 = require("./proto/ffi_pb");
8
+ Object.defineProperty(exports, "FfiRequest", { enumerable: true, get: function () { return ffi_pb_1.FfiRequest; } });
9
+ Object.defineProperty(exports, "FfiResponse", { enumerable: true, get: function () { return ffi_pb_1.FfiResponse; } });
10
+ Object.defineProperty(exports, "FfiEvent", { enumerable: true, get: function () { return ffi_pb_1.FfiEvent; } });
11
+ const events_1 = __importDefault(require("events"));
12
+ const native_1 = require("./native");
13
+ Object.defineProperty(exports, "FfiHandle", { enumerable: true, get: function () { return native_1.FfiHandle; } });
14
+ var FfiClientEvent;
15
+ (function (FfiClientEvent) {
16
+ FfiClientEvent["FfiEvent"] = "ffi_event";
17
+ })(FfiClientEvent || (exports.FfiClientEvent = FfiClientEvent = {}));
18
+ class FfiClient extends events_1.default {
19
+ /** @internal */
20
+ static get instance() {
21
+ if (!FfiClient._client)
22
+ FfiClient._client = new FfiClient();
23
+ return FfiClient._client;
24
+ }
25
+ constructor() {
26
+ super();
27
+ (0, native_1.livekitInitialize)((event_data) => {
28
+ let event = ffi_pb_1.FfiEvent.fromBinary(event_data);
29
+ this.emit(FfiClientEvent.FfiEvent, event);
30
+ }, true);
31
+ }
32
+ request(req) {
33
+ let request = new ffi_pb_1.FfiRequest(req);
34
+ let req_data = request.toBinary();
35
+ let res_data = (0, native_1.livekitFfiRequest)(req_data);
36
+ return ffi_pb_1.FfiResponse.fromBinary(res_data).message.value;
37
+ }
38
+ copyBuffer(ptr, len) {
39
+ return (0, native_1.livekitCopyBuffer)(ptr, len);
40
+ }
41
+ retrievePtr(data) {
42
+ return (0, native_1.livekitRetrievePtr)(data);
43
+ }
44
+ async waitFor(predicate) {
45
+ return new Promise((resolve, _) => {
46
+ let listener = (ev) => {
47
+ if (predicate(ev)) {
48
+ this.off(FfiClientEvent.FfiEvent, listener);
49
+ resolve(ev.message.value);
50
+ }
51
+ };
52
+ this.on(FfiClientEvent.FfiEvent, listener);
53
+ });
54
+ }
55
+ }
56
+ exports.FfiClient = FfiClient;
57
+ //# sourceMappingURL=ffi_client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffi_client.js","sourceRoot":"","sources":["../src/ffi_client.ts"],"names":[],"mappings":";;;;;;AAAA,2CAAmE;AAYxB,2FAZlC,mBAAU,OAYkC;AAAvB,4FAZT,oBAAW,OAYS;AAArB,yFAZc,iBAAQ,OAYd;AAX5B,oDAAkC;AAElC,qCAMkB;AAGT,0FARP,kBAAS,OAQO;AAMlB,IAAY,cAEX;AAFD,WAAY,cAAc;IACxB,wCAAsB,CAAA;AACxB,CAAC,EAFW,cAAc,8BAAd,cAAc,QAEzB;AAED,MAAa,SAAU,SAAS,gBAA2D;IAGzF,gBAAgB;IAChB,MAAM,KAAK,QAAQ;QACjB,IAAI,CAAC,SAAS,CAAC,OAAO;YAAE,SAAS,CAAC,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;QAE5D,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QAER,IAAA,0BAAiB,EAAC,CAAC,UAAsB,EAAE,EAAE;YAC3C,IAAI,KAAK,GAAG,iBAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAI,GAA+B;QACxC,IAAI,OAAO,GAAG,IAAI,mBAAU,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,QAAQ,GAAG,IAAA,0BAAiB,EAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,oBAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAU,CAAC;IAC7D,CAAC;IAED,UAAU,CAAC,GAAW,EAAE,GAAW;QACjC,OAAO,IAAA,0BAAiB,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,WAAW,CAAC,IAAgB;QAC1B,OAAO,IAAA,2BAAkB,EAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,SAAoC;QACnD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,QAAQ,GAAG,CAAC,EAAY,EAAE,EAAE;gBAC9B,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAC5C,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAU,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA7CD,8BA6CC"}
@@ -0,0 +1,16 @@
1
+ export { Room, RoomEvent, ConnectError, RoomOptions, RtcConfiguration } from './room';
2
+ export { Participant, RemoteParticipant, LocalParticipant } from './participant';
3
+ export { Track, LocalTrack, RemoteTrack, VideoTrack, LocalAudioTrack, LocalVideoTrack, RemoteAudioTrack, RemoteVideoTrack, AudioTrack, } from './track';
4
+ export { VideoFrame, VideoFrameBuffer, I420Buffer, I422Buffer, I444Buffer, I420ABuffer, NV12Buffer, NativeBuffer, I010Buffer, PlanarYuvBuffer, PlanarYuv8Buffer, PlanarYuv16Buffer, ArgbFrame, BiplanarYuv8Buffer, } from './video_frame';
5
+ export { AudioFrame } from './audio_frame';
6
+ export { AudioStream } from './audio_stream';
7
+ export { VideoStream } from './video_stream';
8
+ export { AudioSource } from './audio_source';
9
+ export { VideoSource } from './video_source';
10
+ export { TrackPublication, RemoteTrackPublication, LocalTrackPublication, } from './track_publication';
11
+ export { E2EEManager, E2EEOptions, KeyProviderOptions, KeyProvider, FrameCryptor } from './e2ee';
12
+ export { ConnectionQuality, IceServer, IceTransportType, DataPacketKind, ContinualGatheringPolicy, TrackPublishOptions, ConnectionState, } from './proto/room_pb';
13
+ export { EncryptionType, EncryptionState } from './proto/e2ee_pb';
14
+ export { StreamState, TrackKind, TrackSource } from './proto/track_pb';
15
+ export { VideoFormatType, VideoFrameBufferType, VideoRotation } from './proto/video_frame_pb';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EACL,KAAK,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACjG,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}