@livekit/rtc-node 0.13.13 → 0.13.14

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/README.md CHANGED
@@ -16,6 +16,9 @@ Use this SDK to add realtime video, audio and data features to your Node app. By
16
16
  >
17
17
  > We welcome and appreciate any feedback or contributions. You can create issues here or chat live with us in the #dev channel within the [LiveKit Community Slack](https://livekit.io/join-slack).
18
18
 
19
+ ### Warning
20
+
21
+ Avoid running this with hot reloads (ex. [bun's hot reload](https://bun.sh/guides/http/hot)). This is known to cause issues with WebRTC connectivity.
19
22
 
20
23
  ## Using realtime SDK
21
24
 
@@ -9,8 +9,15 @@ import './proto/e2ee_pb.cjs';
9
9
  import './proto/handle_pb.cjs';
10
10
  import './audio_source.cjs';
11
11
  import './napi/native.d.cjs';
12
- import './video_source.cjs';
12
+ import './ffi_client.cjs';
13
+ import '@livekit/typed-emitter';
14
+ import './proto/ffi_pb.cjs';
15
+ import './proto/room_pb.cjs';
16
+ import './proto/participant_pb.cjs';
13
17
  import './proto/video_frame_pb.cjs';
18
+ import './proto/rpc_pb.cjs';
19
+ import './proto/track_publication_pb.cjs';
20
+ import './video_source.cjs';
14
21
  import './video_frame.cjs';
15
22
 
16
23
  interface AudioStreamOptions {
@@ -9,8 +9,15 @@ import './proto/e2ee_pb.js';
9
9
  import './proto/handle_pb.js';
10
10
  import './audio_source.js';
11
11
  import './napi/native.d.js';
12
- import './video_source.js';
12
+ import './ffi_client.js';
13
+ import '@livekit/typed-emitter';
14
+ import './proto/ffi_pb.js';
15
+ import './proto/room_pb.js';
16
+ import './proto/participant_pb.js';
13
17
  import './proto/video_frame_pb.js';
18
+ import './proto/rpc_pb.js';
19
+ import './proto/track_publication_pb.js';
20
+ import './video_source.js';
14
21
  import './video_frame.js';
15
22
 
16
23
  interface AudioStreamOptions {
@@ -46,8 +46,10 @@ var FfiClientEvent = /* @__PURE__ */ ((FfiClientEvent2) => {
46
46
  class FfiClient extends import_events.default {
47
47
  /** @internal */
48
48
  static get instance() {
49
- if (!FfiClient._client) FfiClient._client = new FfiClient();
50
- return FfiClient._client;
49
+ if (!globalThis._ffiClientInstance) {
50
+ globalThis._ffiClientInstance = new FfiClient();
51
+ }
52
+ return globalThis._ffiClientInstance;
51
53
  }
52
54
  constructor() {
53
55
  super();
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ffi_client.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { PartialMessage } from '@bufbuild/protobuf';\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport EventEmitter from 'events';\nimport {\n FfiHandle,\n livekitCopyBuffer,\n livekitDispose,\n livekitFfiRequest,\n livekitInitialize,\n livekitRetrievePtr,\n} from './napi/native.js';\nimport { FfiEvent, FfiRequest, FfiResponse } from './proto/ffi_pb.js';\nimport { SDK_VERSION } from './version.js';\n\nexport { FfiHandle, type FfiEvent, type FfiResponse, FfiRequest, livekitDispose as dispose };\n\nexport type FfiClientCallbacks = {\n ffi_event: (event: FfiEvent) => void;\n};\n\nexport enum FfiClientEvent {\n FfiEvent = 'ffi_event',\n}\n\nexport class FfiClient extends (EventEmitter as new () => TypedEmitter<FfiClientCallbacks>) {\n static _client?: FfiClient;\n\n /** @internal */\n static get instance(): FfiClient {\n if (!FfiClient._client) FfiClient._client = new FfiClient();\n\n return FfiClient._client;\n }\n\n constructor() {\n super();\n this.setMaxListeners(0);\n\n livekitInitialize(\n (event_data: Uint8Array) => {\n const event = FfiEvent.fromBinary(event_data);\n this.emit(FfiClientEvent.FfiEvent, event);\n },\n true,\n SDK_VERSION,\n );\n }\n\n request<T>(req: PartialMessage<FfiRequest>): T {\n const request = new FfiRequest(req);\n const req_data = request.toBinary();\n const res_data = livekitFfiRequest(req_data);\n return FfiResponse.fromBinary(res_data).message.value as T;\n }\n\n copyBuffer(ptr: bigint, len: number): Uint8Array {\n return livekitCopyBuffer(ptr, len);\n }\n\n retrievePtr(data: Uint8Array): bigint {\n return livekitRetrievePtr(data);\n }\n\n async waitFor<T>(predicate: (ev: FfiEvent) => boolean): Promise<T> {\n return new Promise<T>((resolve) => {\n const listener = (ev: FfiEvent) => {\n if (predicate(ev)) {\n this.off(FfiClientEvent.FfiEvent, listener);\n resolve(ev.message.value as T);\n }\n };\n this.on(FfiClientEvent.FfiEvent, listener);\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,oBAAyB;AACzB,oBAOO;AACP,oBAAkD;AAClD,qBAA4B;AAQrB,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,cAAW;AADD,SAAAA;AAAA,GAAA;AAIL,MAAM,kBAAmB,cAAAC,QAA4D;AAAA;AAAA,EAI1F,WAAW,WAAsB;AAC/B,QAAI,CAAC,UAAU,QAAS,WAAU,UAAU,IAAI,UAAU;AAE1D,WAAO,UAAU;AAAA,EACnB;AAAA,EAEA,cAAc;AACZ,UAAM;AACN,SAAK,gBAAgB,CAAC;AAEtB;AAAA,MACE,CAAC,eAA2B;AAC1B,cAAM,QAAQ,uBAAS,WAAW,UAAU;AAC5C,aAAK,KAAK,4BAAyB,KAAK;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAW,KAAoC;AAC7C,UAAM,UAAU,IAAI,yBAAW,GAAG;AAClC,UAAM,WAAW,QAAQ,SAAS;AAClC,UAAM,eAAW,iCAAkB,QAAQ;AAC3C,WAAO,0BAAY,WAAW,QAAQ,EAAE,QAAQ;AAAA,EAClD;AAAA,EAEA,WAAW,KAAa,KAAyB;AAC/C,eAAO,iCAAkB,KAAK,GAAG;AAAA,EACnC;AAAA,EAEA,YAAY,MAA0B;AACpC,eAAO,kCAAmB,IAAI;AAAA,EAChC;AAAA,EAEA,MAAM,QAAW,WAAkD;AACjE,WAAO,IAAI,QAAW,CAAC,YAAY;AACjC,YAAM,WAAW,CAAC,OAAiB;AACjC,YAAI,UAAU,EAAE,GAAG;AACjB,eAAK,IAAI,4BAAyB,QAAQ;AAC1C,kBAAQ,GAAG,QAAQ,KAAU;AAAA,QAC/B;AAAA,MACF;AACA,WAAK,GAAG,4BAAyB,QAAQ;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;","names":["FfiClientEvent","EventEmitter"]}
1
+ {"version":3,"sources":["../src/ffi_client.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { PartialMessage } from '@bufbuild/protobuf';\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport EventEmitter from 'events';\nimport {\n FfiHandle,\n livekitCopyBuffer,\n livekitDispose,\n livekitFfiRequest,\n livekitInitialize,\n livekitRetrievePtr,\n} from './napi/native.js';\nimport { FfiEvent, FfiRequest, FfiResponse } from './proto/ffi_pb.js';\nimport { SDK_VERSION } from './version.js';\n\nexport { FfiHandle, type FfiEvent, type FfiResponse, FfiRequest, livekitDispose as dispose };\n\nexport type FfiClientCallbacks = {\n ffi_event: (event: FfiEvent) => void;\n};\n\nexport enum FfiClientEvent {\n FfiEvent = 'ffi_event',\n}\n\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>(predicate: (ev: FfiEvent) => boolean): Promise<T> {\n return new Promise<T>((resolve) => {\n const listener = (ev: FfiEvent) => {\n if (predicate(ev)) {\n this.off(FfiClientEvent.FfiEvent, listener);\n resolve(ev.message.value as T);\n }\n };\n this.on(FfiClientEvent.FfiEvent, listener);\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,oBAAyB;AACzB,oBAOO;AACP,oBAAkD;AAClD,qBAA4B;AAQrB,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,cAAW;AADD,SAAAA;AAAA,GAAA;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,uBAAS,WAAW,UAAU;AAC5C,aAAK,KAAK,4BAAyB,KAAK;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAW,KAAoC;AAC7C,UAAM,UAAU,IAAI,yBAAW,GAAG;AAClC,UAAM,WAAW,QAAQ,SAAS;AAClC,UAAM,eAAW,iCAAkB,QAAQ;AAC3C,WAAO,0BAAY,WAAW,QAAQ,EAAE,QAAQ;AAAA,EAClD;AAAA,EAEA,WAAW,KAAa,KAAyB;AAC/C,eAAO,iCAAkB,KAAK,GAAG;AAAA,EACnC;AAAA,EAEA,YAAY,MAA0B;AACpC,eAAO,kCAAmB,IAAI;AAAA,EAChC;AAAA,EAEA,MAAM,QAAW,WAAkD;AACjE,WAAO,IAAI,QAAW,CAAC,YAAY;AACjC,YAAM,WAAW,CAAC,OAAiB;AACjC,YAAI,UAAU,EAAE,GAAG;AACjB,eAAK,IAAI,4BAAyB,QAAQ;AAC1C,kBAAQ,GAAG,QAAQ,KAAU;AAAA,QAC/B;AAAA,MACF;AACA,WAAK,GAAG,4BAAyB,QAAQ;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;","names":["FfiClientEvent","EventEmitter"]}
@@ -20,9 +20,11 @@ type FfiClientCallbacks = {
20
20
  declare enum FfiClientEvent {
21
21
  FfiEvent = "ffi_event"
22
22
  }
23
+ declare global {
24
+ var _ffiClientInstance: FfiClient | undefined;
25
+ }
23
26
  declare const FfiClient_base: new () => TypedEventEmitter<FfiClientCallbacks>;
24
27
  declare class FfiClient extends FfiClient_base {
25
- static _client?: FfiClient;
26
28
  /** @internal */
27
29
  static get instance(): FfiClient;
28
30
  constructor();
@@ -20,9 +20,11 @@ type FfiClientCallbacks = {
20
20
  declare enum FfiClientEvent {
21
21
  FfiEvent = "ffi_event"
22
22
  }
23
+ declare global {
24
+ var _ffiClientInstance: FfiClient | undefined;
25
+ }
23
26
  declare const FfiClient_base: new () => TypedEventEmitter<FfiClientCallbacks>;
24
27
  declare class FfiClient extends FfiClient_base {
25
- static _client?: FfiClient;
26
28
  /** @internal */
27
29
  static get instance(): FfiClient;
28
30
  constructor();
@@ -1 +1 @@
1
- {"version":3,"file":"ffi_client.d.ts","sourceRoot":"","sources":["../src/ffi_client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,EACL,SAAS,EAET,cAAc,EAIf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGtE,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;8BAE+C,UAAU,YAAY,CAAC,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;;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,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAWnE"}
1
+ {"version":3,"file":"ffi_client.d.ts","sourceRoot":"","sources":["../src/ffi_client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,EACL,SAAS,EAET,cAAc,EAIf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGtE,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,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAWnE"}
@@ -16,8 +16,10 @@ var FfiClientEvent = /* @__PURE__ */ ((FfiClientEvent2) => {
16
16
  class FfiClient extends EventEmitter {
17
17
  /** @internal */
18
18
  static get instance() {
19
- if (!FfiClient._client) FfiClient._client = new FfiClient();
20
- return FfiClient._client;
19
+ if (!globalThis._ffiClientInstance) {
20
+ globalThis._ffiClientInstance = new FfiClient();
21
+ }
22
+ return globalThis._ffiClientInstance;
21
23
  }
22
24
  constructor() {
23
25
  super();
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ffi_client.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { PartialMessage } from '@bufbuild/protobuf';\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport EventEmitter from 'events';\nimport {\n FfiHandle,\n livekitCopyBuffer,\n livekitDispose,\n livekitFfiRequest,\n livekitInitialize,\n livekitRetrievePtr,\n} from './napi/native.js';\nimport { FfiEvent, FfiRequest, FfiResponse } from './proto/ffi_pb.js';\nimport { SDK_VERSION } from './version.js';\n\nexport { FfiHandle, type FfiEvent, type FfiResponse, FfiRequest, livekitDispose as dispose };\n\nexport type FfiClientCallbacks = {\n ffi_event: (event: FfiEvent) => void;\n};\n\nexport enum FfiClientEvent {\n FfiEvent = 'ffi_event',\n}\n\nexport class FfiClient extends (EventEmitter as new () => TypedEmitter<FfiClientCallbacks>) {\n static _client?: FfiClient;\n\n /** @internal */\n static get instance(): FfiClient {\n if (!FfiClient._client) FfiClient._client = new FfiClient();\n\n return FfiClient._client;\n }\n\n constructor() {\n super();\n this.setMaxListeners(0);\n\n livekitInitialize(\n (event_data: Uint8Array) => {\n const event = FfiEvent.fromBinary(event_data);\n this.emit(FfiClientEvent.FfiEvent, event);\n },\n true,\n SDK_VERSION,\n );\n }\n\n request<T>(req: PartialMessage<FfiRequest>): T {\n const request = new FfiRequest(req);\n const req_data = request.toBinary();\n const res_data = livekitFfiRequest(req_data);\n return FfiResponse.fromBinary(res_data).message.value as T;\n }\n\n copyBuffer(ptr: bigint, len: number): Uint8Array {\n return livekitCopyBuffer(ptr, len);\n }\n\n retrievePtr(data: Uint8Array): bigint {\n return livekitRetrievePtr(data);\n }\n\n async waitFor<T>(predicate: (ev: FfiEvent) => boolean): Promise<T> {\n return new Promise<T>((resolve) => {\n const listener = (ev: FfiEvent) => {\n if (predicate(ev)) {\n this.off(FfiClientEvent.FfiEvent, listener);\n resolve(ev.message.value as T);\n }\n };\n this.on(FfiClientEvent.FfiEvent, listener);\n });\n }\n}\n"],"mappings":"AAKA,OAAO,kBAAkB;AACzB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,UAAU,YAAY,mBAAmB;AAClD,SAAS,mBAAmB;AAQrB,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,cAAW;AADD,SAAAA;AAAA,GAAA;AAIL,MAAM,kBAAmB,aAA4D;AAAA;AAAA,EAI1F,WAAW,WAAsB;AAC/B,QAAI,CAAC,UAAU,QAAS,WAAU,UAAU,IAAI,UAAU;AAE1D,WAAO,UAAU;AAAA,EACnB;AAAA,EAEA,cAAc;AACZ,UAAM;AACN,SAAK,gBAAgB,CAAC;AAEtB;AAAA,MACE,CAAC,eAA2B;AAC1B,cAAM,QAAQ,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,QAAW,WAAkD;AACjE,WAAO,IAAI,QAAW,CAAC,YAAY;AACjC,YAAM,WAAW,CAAC,OAAiB;AACjC,YAAI,UAAU,EAAE,GAAG;AACjB,eAAK,IAAI,4BAAyB,QAAQ;AAC1C,kBAAQ,GAAG,QAAQ,KAAU;AAAA,QAC/B;AAAA,MACF;AACA,WAAK,GAAG,4BAAyB,QAAQ;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;","names":["FfiClientEvent"]}
1
+ {"version":3,"sources":["../src/ffi_client.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type { PartialMessage } from '@bufbuild/protobuf';\nimport type { TypedEventEmitter as TypedEmitter } from '@livekit/typed-emitter';\nimport EventEmitter from 'events';\nimport {\n FfiHandle,\n livekitCopyBuffer,\n livekitDispose,\n livekitFfiRequest,\n livekitInitialize,\n livekitRetrievePtr,\n} from './napi/native.js';\nimport { FfiEvent, FfiRequest, FfiResponse } from './proto/ffi_pb.js';\nimport { SDK_VERSION } from './version.js';\n\nexport { FfiHandle, type FfiEvent, type FfiResponse, FfiRequest, livekitDispose as dispose };\n\nexport type FfiClientCallbacks = {\n ffi_event: (event: FfiEvent) => void;\n};\n\nexport enum FfiClientEvent {\n FfiEvent = 'ffi_event',\n}\n\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>(predicate: (ev: FfiEvent) => boolean): Promise<T> {\n return new Promise<T>((resolve) => {\n const listener = (ev: FfiEvent) => {\n if (predicate(ev)) {\n this.off(FfiClientEvent.FfiEvent, listener);\n resolve(ev.message.value as T);\n }\n };\n this.on(FfiClientEvent.FfiEvent, listener);\n });\n }\n}\n"],"mappings":"AAKA,OAAO,kBAAkB;AACzB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,UAAU,YAAY,mBAAmB;AAClD,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,QAAW,WAAkD;AACjE,WAAO,IAAI,QAAW,CAAC,YAAY;AACjC,YAAM,WAAW,CAAC,OAAiB;AACjC,YAAI,UAAU,EAAE,GAAG;AACjB,eAAK,IAAI,4BAAyB,QAAQ;AAC1C,kBAAQ,GAAG,QAAQ,KAAU;AAAA,QAC/B;AAAA,MACF;AACA,WAAK,GAAG,4BAAyB,QAAQ;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;","names":["FfiClientEvent"]}
package/dist/index.d.cts CHANGED
@@ -6,13 +6,13 @@ export { AudioFilter } from './audio_filter.cjs';
6
6
  export { a as BaseStreamInfo, f as ByteStreamHandler, b as ByteStreamInfo, e as ByteStreamOptions, B as ByteStreamReader, D as DataStreamOptions, S as StreamController, g as TextStreamHandler, c as TextStreamInfo, d as TextStreamOptions, T as TextStreamReader } from './stream_reader-a8_oiaOi.cjs';
7
7
  export { ByteStreamWriter, TextStreamWriter } from './data_streams/stream_writer.cjs';
8
8
  export { E2EEManager, E2EEOptions, FrameCryptor, KeyProvider, KeyProviderOptions } from './e2ee.cjs';
9
- export { livekitDispose as dispose } from './napi/native.d.cjs';
9
+ import './ffi_client.cjs';
10
+ export { LocalParticipant, Participant, RemoteParticipant } from './participant.cjs';
11
+ export { EncryptionState, EncryptionType } from './proto/e2ee_pb.cjs';
12
+ export { DisconnectReason, ParticipantKind } from './proto/participant_pb.cjs';
10
13
  export { ConnectionQuality, ConnectionState, ContinualGatheringPolicy, DataPacketKind, IceServer, IceTransportType, TrackPublishOptions } from './proto/room_pb.cjs';
11
14
  export { StreamState, TrackKind, TrackSource } from './proto/track_pb.cjs';
12
15
  export { VideoBufferType, VideoCodec, VideoRotation } from './proto/video_frame_pb.cjs';
13
- export { EncryptionState, EncryptionType } from './proto/e2ee_pb.cjs';
14
- export { LocalParticipant, Participant, RemoteParticipant } from './participant.cjs';
15
- export { DisconnectReason, ParticipantKind } from './proto/participant_pb.cjs';
16
16
  export { ConnectError, Room, RoomEvent, RoomOptions, RtcConfiguration } from './room.cjs';
17
17
  export { PerformRpcParams, RpcError, RpcInvocationData } from './rpc.cjs';
18
18
  export { AudioTrack, LocalAudioTrack, LocalTrack, LocalVideoTrack, RemoteAudioTrack, RemoteTrack, RemoteVideoTrack, Track, VideoTrack } from './track.cjs';
@@ -22,11 +22,14 @@ export { ChatMessage } from './types.cjs';
22
22
  export { VideoFrame } from './video_frame.cjs';
23
23
  export { VideoSource } from './video_source.cjs';
24
24
  export { VideoFrameEvent, VideoStream } from './video_stream.cjs';
25
+ export { livekitDispose as dispose } from './napi/native.d.cjs';
25
26
  import './proto/audio_frame_pb.cjs';
26
27
  import '@bufbuild/protobuf';
27
28
  import './proto/handle_pb.cjs';
28
29
  import 'node:stream/web';
29
- import './proto/stats_pb.cjs';
30
- import 'node:fs';
31
30
  import '@livekit/typed-emitter';
31
+ import './proto/ffi_pb.cjs';
32
32
  import './proto/rpc_pb.cjs';
33
+ import './proto/track_publication_pb.cjs';
34
+ import 'node:fs';
35
+ import './proto/stats_pb.cjs';
package/dist/index.d.ts CHANGED
@@ -6,13 +6,13 @@ export { AudioFilter } from './audio_filter.js';
6
6
  export { a as BaseStreamInfo, f as ByteStreamHandler, b as ByteStreamInfo, e as ByteStreamOptions, B as ByteStreamReader, D as DataStreamOptions, S as StreamController, g as TextStreamHandler, c as TextStreamInfo, d as TextStreamOptions, T as TextStreamReader } from './stream_reader-DWUV4eJB.js';
7
7
  export { ByteStreamWriter, TextStreamWriter } from './data_streams/stream_writer.js';
8
8
  export { E2EEManager, E2EEOptions, FrameCryptor, KeyProvider, KeyProviderOptions } from './e2ee.js';
9
- export { livekitDispose as dispose } from './napi/native.d.js';
9
+ import './ffi_client.js';
10
+ export { LocalParticipant, Participant, RemoteParticipant } from './participant.js';
11
+ export { EncryptionState, EncryptionType } from './proto/e2ee_pb.js';
12
+ export { DisconnectReason, ParticipantKind } from './proto/participant_pb.js';
10
13
  export { ConnectionQuality, ConnectionState, ContinualGatheringPolicy, DataPacketKind, IceServer, IceTransportType, TrackPublishOptions } from './proto/room_pb.js';
11
14
  export { StreamState, TrackKind, TrackSource } from './proto/track_pb.js';
12
15
  export { VideoBufferType, VideoCodec, VideoRotation } from './proto/video_frame_pb.js';
13
- export { EncryptionState, EncryptionType } from './proto/e2ee_pb.js';
14
- export { LocalParticipant, Participant, RemoteParticipant } from './participant.js';
15
- export { DisconnectReason, ParticipantKind } from './proto/participant_pb.js';
16
16
  export { ConnectError, Room, RoomEvent, RoomOptions, RtcConfiguration } from './room.js';
17
17
  export { PerformRpcParams, RpcError, RpcInvocationData } from './rpc.js';
18
18
  export { AudioTrack, LocalAudioTrack, LocalTrack, LocalVideoTrack, RemoteAudioTrack, RemoteTrack, RemoteVideoTrack, Track, VideoTrack } from './track.js';
@@ -22,11 +22,14 @@ export { ChatMessage } from './types.js';
22
22
  export { VideoFrame } from './video_frame.js';
23
23
  export { VideoSource } from './video_source.js';
24
24
  export { VideoFrameEvent, VideoStream } from './video_stream.js';
25
+ export { livekitDispose as dispose } from './napi/native.d.js';
25
26
  import './proto/audio_frame_pb.js';
26
27
  import '@bufbuild/protobuf';
27
28
  import './proto/handle_pb.js';
28
29
  import 'node:stream/web';
29
- import './proto/stats_pb.js';
30
- import 'node:fs';
31
30
  import '@livekit/typed-emitter';
31
+ import './proto/ffi_pb.js';
32
32
  import './proto/rpc_pb.js';
33
+ import './proto/track_publication_pb.js';
34
+ import 'node:fs';
35
+ import './proto/stats_pb.js';
@@ -2,13 +2,14 @@ import { a as BaseStreamInfo, e as ByteStreamOptions } from './stream_reader-a8_
2
2
  import { PathLike } from 'node:fs';
3
3
  import { TrackPublishOptions } from './proto/room_pb.cjs';
4
4
  import { TextStreamWriter, ByteStreamWriter } from './data_streams/stream_writer.cjs';
5
- import { FfiHandle } from './napi/native.d.cjs';
5
+ import './ffi_client.cjs';
6
6
  import { ParticipantInfo, OwnedParticipant, ParticipantKind, DisconnectReason } from './proto/participant_pb.cjs';
7
7
  import { PerformRpcParams, RpcInvocationData } from './rpc.cjs';
8
8
  import { LocalTrack } from './track.cjs';
9
9
  import { TrackPublication, LocalTrackPublication, RemoteTrackPublication } from './track_publication.cjs';
10
10
  import { Transcription } from './transcription.cjs';
11
11
  import { ChatMessage } from './types.cjs';
12
+ import { FfiHandle } from './napi/native.d.cjs';
12
13
  import 'node:stream/web';
13
14
  import '@bufbuild/protobuf';
14
15
  import './proto/track_pb.cjs';
@@ -16,10 +17,13 @@ import './proto/stats_pb.cjs';
16
17
  import './proto/e2ee_pb.cjs';
17
18
  import './proto/handle_pb.cjs';
18
19
  import './proto/video_frame_pb.cjs';
20
+ import '@livekit/typed-emitter';
21
+ import './proto/ffi_pb.cjs';
22
+ import './proto/audio_frame_pb.cjs';
19
23
  import './proto/rpc_pb.cjs';
24
+ import './proto/track_publication_pb.cjs';
20
25
  import './audio_source.cjs';
21
26
  import './audio_frame.cjs';
22
- import './proto/audio_frame_pb.cjs';
23
27
  import './video_source.cjs';
24
28
  import './video_frame.cjs';
25
29
 
@@ -2,13 +2,14 @@ import { a as BaseStreamInfo, e as ByteStreamOptions } from './stream_reader-DWU
2
2
  import { PathLike } from 'node:fs';
3
3
  import { TrackPublishOptions } from './proto/room_pb.js';
4
4
  import { TextStreamWriter, ByteStreamWriter } from './data_streams/stream_writer.js';
5
- import { FfiHandle } from './napi/native.d.js';
5
+ import './ffi_client.js';
6
6
  import { ParticipantInfo, OwnedParticipant, ParticipantKind, DisconnectReason } from './proto/participant_pb.js';
7
7
  import { PerformRpcParams, RpcInvocationData } from './rpc.js';
8
8
  import { LocalTrack } from './track.js';
9
9
  import { TrackPublication, LocalTrackPublication, RemoteTrackPublication } from './track_publication.js';
10
10
  import { Transcription } from './transcription.js';
11
11
  import { ChatMessage } from './types.js';
12
+ import { FfiHandle } from './napi/native.d.js';
12
13
  import 'node:stream/web';
13
14
  import '@bufbuild/protobuf';
14
15
  import './proto/track_pb.js';
@@ -16,10 +17,13 @@ import './proto/stats_pb.js';
16
17
  import './proto/e2ee_pb.js';
17
18
  import './proto/handle_pb.js';
18
19
  import './proto/video_frame_pb.js';
20
+ import '@livekit/typed-emitter';
21
+ import './proto/ffi_pb.js';
22
+ import './proto/audio_frame_pb.js';
19
23
  import './proto/rpc_pb.js';
24
+ import './proto/track_publication_pb.js';
20
25
  import './audio_source.js';
21
26
  import './audio_frame.js';
22
- import './proto/audio_frame_pb.js';
23
27
  import './video_source.js';
24
28
  import './video_frame.js';
25
29
 
@@ -1,11 +1,11 @@
1
1
  import { Message, PartialMessage, proto2, FieldList, BinaryReadOptions, JsonValue, JsonReadOptions, PlainMessage } from '@bufbuild/protobuf';
2
- import { RoomEvent, ConnectCallback, DisconnectCallback, PublishTrackCallback, UnpublishTrackCallback, PublishDataCallback, PublishTranscriptionCallback, SetLocalMetadataCallback, SetLocalNameCallback, SetLocalAttributesCallback, GetSessionStatsCallback, PublishSipDtmfCallback, SendChatMessageCallback, SendStreamHeaderCallback, SendStreamChunkCallback, SendStreamTrailerCallback, ConnectResponse, DisconnectResponse, PublishTrackResponse, UnpublishTrackResponse, PublishDataResponse, SetSubscribedResponse, SetLocalMetadataResponse, SetLocalNameResponse, SetLocalAttributesResponse, GetSessionStatsResponse, PublishTranscriptionResponse, PublishSipDtmfResponse, SendChatMessageResponse, SendStreamHeaderResponse, SendStreamChunkResponse, SendStreamTrailerResponse, SetDataChannelBufferedAmountLowThresholdResponse, ConnectRequest, DisconnectRequest, PublishTrackRequest, UnpublishTrackRequest, PublishDataRequest, SetSubscribedRequest, SetLocalMetadataRequest, SetLocalNameRequest, SetLocalAttributesRequest, GetSessionStatsRequest, PublishTranscriptionRequest, PublishSipDtmfRequest, SendChatMessageRequest, EditChatMessageRequest, SendStreamHeaderRequest, SendStreamChunkRequest, SendStreamTrailerRequest, SetDataChannelBufferedAmountLowThresholdRequest } from './room_pb.cjs';
3
- import { TrackEvent, GetStatsCallback, CreateVideoTrackResponse, CreateAudioTrackResponse, LocalTrackMuteResponse, EnableRemoteTrackResponse, GetStatsResponse, SetTrackSubscriptionPermissionsResponse, CreateVideoTrackRequest, CreateAudioTrackRequest, LocalTrackMuteRequest, EnableRemoteTrackRequest, GetStatsRequest, SetTrackSubscriptionPermissionsRequest } from './track_pb.cjs';
4
- import { VideoStreamEvent, NewVideoStreamResponse, NewVideoSourceResponse, CaptureVideoFrameResponse, VideoConvertResponse, VideoStreamFromParticipantResponse, NewVideoStreamRequest, NewVideoSourceRequest, CaptureVideoFrameRequest, VideoConvertRequest, VideoStreamFromParticipantRequest } from './video_frame_pb.cjs';
5
- import { AudioStreamEvent, CaptureAudioFrameCallback, NewAudioStreamResponse, NewAudioSourceResponse, CaptureAudioFrameResponse, ClearAudioBufferResponse, NewAudioResamplerResponse, RemixAndResampleResponse, AudioStreamFromParticipantResponse, NewSoxResamplerResponse, PushSoxResamplerResponse, FlushSoxResamplerResponse, LoadAudioFilterPluginResponse, NewApmResponse, ApmProcessStreamResponse, ApmProcessReverseStreamResponse, ApmSetStreamDelayResponse, NewAudioStreamRequest, NewAudioSourceRequest, CaptureAudioFrameRequest, ClearAudioBufferRequest, NewAudioResamplerRequest, RemixAndResampleRequest, AudioStreamFromParticipantRequest, NewSoxResamplerRequest, PushSoxResamplerRequest, FlushSoxResamplerRequest, LoadAudioFilterPluginRequest, NewApmRequest, ApmProcessStreamRequest, ApmProcessReverseStreamRequest, ApmSetStreamDelayRequest } from './audio_frame_pb.cjs';
6
- import { E2eeResponse, E2eeRequest } from './e2ee_pb.cjs';
7
- import { PerformRpcCallback, RpcMethodInvocationEvent, PerformRpcResponse, RegisterRpcMethodResponse, UnregisterRpcMethodResponse, RpcMethodInvocationResponseResponse, PerformRpcRequest, RegisterRpcMethodRequest, UnregisterRpcMethodRequest, RpcMethodInvocationResponseRequest } from './rpc_pb.cjs';
8
- import { EnableRemoteTrackPublicationResponse, UpdateRemoteTrackPublicationDimensionResponse, EnableRemoteTrackPublicationRequest, UpdateRemoteTrackPublicationDimensionRequest } from './track_publication_pb.cjs';
2
+ import { RoomEvent, ConnectCallback, DisconnectCallback, PublishTrackCallback, UnpublishTrackCallback, PublishDataCallback, PublishTranscriptionCallback, SetLocalMetadataCallback, SetLocalNameCallback, SetLocalAttributesCallback, GetSessionStatsCallback, PublishSipDtmfCallback, SendChatMessageCallback, SendStreamHeaderCallback, SendStreamChunkCallback, SendStreamTrailerCallback, ConnectRequest, DisconnectRequest, PublishTrackRequest, UnpublishTrackRequest, PublishDataRequest, SetSubscribedRequest, SetLocalMetadataRequest, SetLocalNameRequest, SetLocalAttributesRequest, GetSessionStatsRequest, PublishTranscriptionRequest, PublishSipDtmfRequest, SendChatMessageRequest, EditChatMessageRequest, SendStreamHeaderRequest, SendStreamChunkRequest, SendStreamTrailerRequest, SetDataChannelBufferedAmountLowThresholdRequest, ConnectResponse, DisconnectResponse, PublishTrackResponse, UnpublishTrackResponse, PublishDataResponse, SetSubscribedResponse, SetLocalMetadataResponse, SetLocalNameResponse, SetLocalAttributesResponse, GetSessionStatsResponse, PublishTranscriptionResponse, PublishSipDtmfResponse, SendChatMessageResponse, SendStreamHeaderResponse, SendStreamChunkResponse, SendStreamTrailerResponse, SetDataChannelBufferedAmountLowThresholdResponse } from './room_pb.cjs';
3
+ import { TrackEvent, GetStatsCallback, CreateVideoTrackRequest, CreateAudioTrackRequest, LocalTrackMuteRequest, EnableRemoteTrackRequest, GetStatsRequest, SetTrackSubscriptionPermissionsRequest, CreateVideoTrackResponse, CreateAudioTrackResponse, LocalTrackMuteResponse, EnableRemoteTrackResponse, GetStatsResponse, SetTrackSubscriptionPermissionsResponse } from './track_pb.cjs';
4
+ import { VideoStreamEvent, NewVideoStreamRequest, NewVideoSourceRequest, CaptureVideoFrameRequest, VideoConvertRequest, VideoStreamFromParticipantRequest, NewVideoStreamResponse, NewVideoSourceResponse, CaptureVideoFrameResponse, VideoConvertResponse, VideoStreamFromParticipantResponse } from './video_frame_pb.cjs';
5
+ import { AudioStreamEvent, CaptureAudioFrameCallback, NewAudioStreamRequest, NewAudioSourceRequest, CaptureAudioFrameRequest, ClearAudioBufferRequest, NewAudioResamplerRequest, RemixAndResampleRequest, AudioStreamFromParticipantRequest, NewSoxResamplerRequest, PushSoxResamplerRequest, FlushSoxResamplerRequest, LoadAudioFilterPluginRequest, NewApmRequest, ApmProcessStreamRequest, ApmProcessReverseStreamRequest, ApmSetStreamDelayRequest, NewAudioStreamResponse, NewAudioSourceResponse, CaptureAudioFrameResponse, ClearAudioBufferResponse, NewAudioResamplerResponse, RemixAndResampleResponse, AudioStreamFromParticipantResponse, NewSoxResamplerResponse, PushSoxResamplerResponse, FlushSoxResamplerResponse, LoadAudioFilterPluginResponse, NewApmResponse, ApmProcessStreamResponse, ApmProcessReverseStreamResponse, ApmSetStreamDelayResponse } from './audio_frame_pb.cjs';
6
+ import { E2eeRequest, E2eeResponse } from './e2ee_pb.cjs';
7
+ import { PerformRpcCallback, RpcMethodInvocationEvent, PerformRpcRequest, RegisterRpcMethodRequest, UnregisterRpcMethodRequest, RpcMethodInvocationResponseRequest, PerformRpcResponse, RegisterRpcMethodResponse, UnregisterRpcMethodResponse, RpcMethodInvocationResponseResponse } from './rpc_pb.cjs';
8
+ import { EnableRemoteTrackPublicationRequest, UpdateRemoteTrackPublicationDimensionRequest, EnableRemoteTrackPublicationResponse, UpdateRemoteTrackPublicationDimensionResponse } from './track_publication_pb.cjs';
9
9
  import './participant_pb.cjs';
10
10
  import './handle_pb.cjs';
11
11
  import './stats_pb.cjs';
@@ -1,11 +1,11 @@
1
1
  import { Message, PartialMessage, proto2, FieldList, BinaryReadOptions, JsonValue, JsonReadOptions, PlainMessage } from '@bufbuild/protobuf';
2
- import { RoomEvent, ConnectCallback, DisconnectCallback, PublishTrackCallback, UnpublishTrackCallback, PublishDataCallback, PublishTranscriptionCallback, SetLocalMetadataCallback, SetLocalNameCallback, SetLocalAttributesCallback, GetSessionStatsCallback, PublishSipDtmfCallback, SendChatMessageCallback, SendStreamHeaderCallback, SendStreamChunkCallback, SendStreamTrailerCallback, ConnectResponse, DisconnectResponse, PublishTrackResponse, UnpublishTrackResponse, PublishDataResponse, SetSubscribedResponse, SetLocalMetadataResponse, SetLocalNameResponse, SetLocalAttributesResponse, GetSessionStatsResponse, PublishTranscriptionResponse, PublishSipDtmfResponse, SendChatMessageResponse, SendStreamHeaderResponse, SendStreamChunkResponse, SendStreamTrailerResponse, SetDataChannelBufferedAmountLowThresholdResponse, ConnectRequest, DisconnectRequest, PublishTrackRequest, UnpublishTrackRequest, PublishDataRequest, SetSubscribedRequest, SetLocalMetadataRequest, SetLocalNameRequest, SetLocalAttributesRequest, GetSessionStatsRequest, PublishTranscriptionRequest, PublishSipDtmfRequest, SendChatMessageRequest, EditChatMessageRequest, SendStreamHeaderRequest, SendStreamChunkRequest, SendStreamTrailerRequest, SetDataChannelBufferedAmountLowThresholdRequest } from './room_pb.js';
3
- import { TrackEvent, GetStatsCallback, CreateVideoTrackResponse, CreateAudioTrackResponse, LocalTrackMuteResponse, EnableRemoteTrackResponse, GetStatsResponse, SetTrackSubscriptionPermissionsResponse, CreateVideoTrackRequest, CreateAudioTrackRequest, LocalTrackMuteRequest, EnableRemoteTrackRequest, GetStatsRequest, SetTrackSubscriptionPermissionsRequest } from './track_pb.js';
4
- import { VideoStreamEvent, NewVideoStreamResponse, NewVideoSourceResponse, CaptureVideoFrameResponse, VideoConvertResponse, VideoStreamFromParticipantResponse, NewVideoStreamRequest, NewVideoSourceRequest, CaptureVideoFrameRequest, VideoConvertRequest, VideoStreamFromParticipantRequest } from './video_frame_pb.js';
5
- import { AudioStreamEvent, CaptureAudioFrameCallback, NewAudioStreamResponse, NewAudioSourceResponse, CaptureAudioFrameResponse, ClearAudioBufferResponse, NewAudioResamplerResponse, RemixAndResampleResponse, AudioStreamFromParticipantResponse, NewSoxResamplerResponse, PushSoxResamplerResponse, FlushSoxResamplerResponse, LoadAudioFilterPluginResponse, NewApmResponse, ApmProcessStreamResponse, ApmProcessReverseStreamResponse, ApmSetStreamDelayResponse, NewAudioStreamRequest, NewAudioSourceRequest, CaptureAudioFrameRequest, ClearAudioBufferRequest, NewAudioResamplerRequest, RemixAndResampleRequest, AudioStreamFromParticipantRequest, NewSoxResamplerRequest, PushSoxResamplerRequest, FlushSoxResamplerRequest, LoadAudioFilterPluginRequest, NewApmRequest, ApmProcessStreamRequest, ApmProcessReverseStreamRequest, ApmSetStreamDelayRequest } from './audio_frame_pb.js';
6
- import { E2eeResponse, E2eeRequest } from './e2ee_pb.js';
7
- import { PerformRpcCallback, RpcMethodInvocationEvent, PerformRpcResponse, RegisterRpcMethodResponse, UnregisterRpcMethodResponse, RpcMethodInvocationResponseResponse, PerformRpcRequest, RegisterRpcMethodRequest, UnregisterRpcMethodRequest, RpcMethodInvocationResponseRequest } from './rpc_pb.js';
8
- import { EnableRemoteTrackPublicationResponse, UpdateRemoteTrackPublicationDimensionResponse, EnableRemoteTrackPublicationRequest, UpdateRemoteTrackPublicationDimensionRequest } from './track_publication_pb.js';
2
+ import { RoomEvent, ConnectCallback, DisconnectCallback, PublishTrackCallback, UnpublishTrackCallback, PublishDataCallback, PublishTranscriptionCallback, SetLocalMetadataCallback, SetLocalNameCallback, SetLocalAttributesCallback, GetSessionStatsCallback, PublishSipDtmfCallback, SendChatMessageCallback, SendStreamHeaderCallback, SendStreamChunkCallback, SendStreamTrailerCallback, ConnectRequest, DisconnectRequest, PublishTrackRequest, UnpublishTrackRequest, PublishDataRequest, SetSubscribedRequest, SetLocalMetadataRequest, SetLocalNameRequest, SetLocalAttributesRequest, GetSessionStatsRequest, PublishTranscriptionRequest, PublishSipDtmfRequest, SendChatMessageRequest, EditChatMessageRequest, SendStreamHeaderRequest, SendStreamChunkRequest, SendStreamTrailerRequest, SetDataChannelBufferedAmountLowThresholdRequest, ConnectResponse, DisconnectResponse, PublishTrackResponse, UnpublishTrackResponse, PublishDataResponse, SetSubscribedResponse, SetLocalMetadataResponse, SetLocalNameResponse, SetLocalAttributesResponse, GetSessionStatsResponse, PublishTranscriptionResponse, PublishSipDtmfResponse, SendChatMessageResponse, SendStreamHeaderResponse, SendStreamChunkResponse, SendStreamTrailerResponse, SetDataChannelBufferedAmountLowThresholdResponse } from './room_pb.js';
3
+ import { TrackEvent, GetStatsCallback, CreateVideoTrackRequest, CreateAudioTrackRequest, LocalTrackMuteRequest, EnableRemoteTrackRequest, GetStatsRequest, SetTrackSubscriptionPermissionsRequest, CreateVideoTrackResponse, CreateAudioTrackResponse, LocalTrackMuteResponse, EnableRemoteTrackResponse, GetStatsResponse, SetTrackSubscriptionPermissionsResponse } from './track_pb.js';
4
+ import { VideoStreamEvent, NewVideoStreamRequest, NewVideoSourceRequest, CaptureVideoFrameRequest, VideoConvertRequest, VideoStreamFromParticipantRequest, NewVideoStreamResponse, NewVideoSourceResponse, CaptureVideoFrameResponse, VideoConvertResponse, VideoStreamFromParticipantResponse } from './video_frame_pb.js';
5
+ import { AudioStreamEvent, CaptureAudioFrameCallback, NewAudioStreamRequest, NewAudioSourceRequest, CaptureAudioFrameRequest, ClearAudioBufferRequest, NewAudioResamplerRequest, RemixAndResampleRequest, AudioStreamFromParticipantRequest, NewSoxResamplerRequest, PushSoxResamplerRequest, FlushSoxResamplerRequest, LoadAudioFilterPluginRequest, NewApmRequest, ApmProcessStreamRequest, ApmProcessReverseStreamRequest, ApmSetStreamDelayRequest, NewAudioStreamResponse, NewAudioSourceResponse, CaptureAudioFrameResponse, ClearAudioBufferResponse, NewAudioResamplerResponse, RemixAndResampleResponse, AudioStreamFromParticipantResponse, NewSoxResamplerResponse, PushSoxResamplerResponse, FlushSoxResamplerResponse, LoadAudioFilterPluginResponse, NewApmResponse, ApmProcessStreamResponse, ApmProcessReverseStreamResponse, ApmSetStreamDelayResponse } from './audio_frame_pb.js';
6
+ import { E2eeRequest, E2eeResponse } from './e2ee_pb.js';
7
+ import { PerformRpcCallback, RpcMethodInvocationEvent, PerformRpcRequest, RegisterRpcMethodRequest, UnregisterRpcMethodRequest, RpcMethodInvocationResponseRequest, PerformRpcResponse, RegisterRpcMethodResponse, UnregisterRpcMethodResponse, RpcMethodInvocationResponseResponse } from './rpc_pb.js';
8
+ import { EnableRemoteTrackPublicationRequest, UpdateRemoteTrackPublicationDimensionRequest, EnableRemoteTrackPublicationResponse, UpdateRemoteTrackPublicationDimensionResponse } from './track_publication_pb.js';
9
9
  import './participant_pb.js';
10
10
  import './handle_pb.js';
11
11
  import './stats_pb.js';
package/dist/room.d.cts CHANGED
@@ -12,17 +12,20 @@ import './proto/e2ee_pb.cjs';
12
12
  import '@bufbuild/protobuf';
13
13
  import 'node:fs';
14
14
  import './data_streams/stream_writer.cjs';
15
+ import './ffi_client.cjs';
15
16
  import './napi/native.d.cjs';
16
- import './rpc.cjs';
17
- import './proto/rpc_pb.cjs';
18
- import './transcription.cjs';
19
- import './proto/handle_pb.cjs';
17
+ import './proto/ffi_pb.cjs';
20
18
  import './proto/track_pb.cjs';
21
19
  import './proto/stats_pb.cjs';
20
+ import './proto/handle_pb.cjs';
22
21
  import './proto/video_frame_pb.cjs';
22
+ import './proto/audio_frame_pb.cjs';
23
+ import './proto/rpc_pb.cjs';
24
+ import './proto/track_publication_pb.cjs';
25
+ import './rpc.cjs';
26
+ import './transcription.cjs';
23
27
  import './audio_source.cjs';
24
28
  import './audio_frame.cjs';
25
- import './proto/audio_frame_pb.cjs';
26
29
  import './video_source.cjs';
27
30
  import './video_frame.cjs';
28
31
 
package/dist/room.d.ts CHANGED
@@ -12,17 +12,20 @@ import './proto/e2ee_pb.js';
12
12
  import '@bufbuild/protobuf';
13
13
  import 'node:fs';
14
14
  import './data_streams/stream_writer.js';
15
+ import './ffi_client.js';
15
16
  import './napi/native.d.js';
16
- import './rpc.js';
17
- import './proto/rpc_pb.js';
18
- import './transcription.js';
19
- import './proto/handle_pb.js';
17
+ import './proto/ffi_pb.js';
20
18
  import './proto/track_pb.js';
21
19
  import './proto/stats_pb.js';
20
+ import './proto/handle_pb.js';
22
21
  import './proto/video_frame_pb.js';
22
+ import './proto/audio_frame_pb.js';
23
+ import './proto/rpc_pb.js';
24
+ import './proto/track_publication_pb.js';
25
+ import './rpc.js';
26
+ import './transcription.js';
23
27
  import './audio_source.js';
24
28
  import './audio_frame.js';
25
- import './proto/audio_frame_pb.js';
26
29
  import './video_source.js';
27
30
  import './video_frame.js';
28
31
 
package/dist/track.d.cts CHANGED
@@ -1,14 +1,21 @@
1
1
  import { AudioSource } from './audio_source.cjs';
2
- import { FfiHandle } from './napi/native.d.cjs';
2
+ import './ffi_client.cjs';
3
3
  import { TrackInfo, OwnedTrack, TrackKind, StreamState } from './proto/track_pb.cjs';
4
4
  import { VideoSource } from './video_source.cjs';
5
+ import { FfiHandle } from './napi/native.d.cjs';
5
6
  import './audio_frame.cjs';
6
7
  import './proto/audio_frame_pb.cjs';
7
8
  import '@bufbuild/protobuf';
8
9
  import './proto/handle_pb.cjs';
10
+ import '@livekit/typed-emitter';
11
+ import './proto/ffi_pb.cjs';
12
+ import './proto/room_pb.cjs';
13
+ import './proto/participant_pb.cjs';
9
14
  import './proto/stats_pb.cjs';
10
- import './proto/e2ee_pb.cjs';
11
15
  import './proto/video_frame_pb.cjs';
16
+ import './proto/e2ee_pb.cjs';
17
+ import './proto/rpc_pb.cjs';
18
+ import './proto/track_publication_pb.cjs';
12
19
  import './video_frame.cjs';
13
20
 
14
21
  declare abstract class Track {
package/dist/track.d.ts CHANGED
@@ -1,14 +1,21 @@
1
1
  import { AudioSource } from './audio_source.js';
2
- import { FfiHandle } from './napi/native.d.js';
2
+ import './ffi_client.js';
3
3
  import { TrackInfo, OwnedTrack, TrackKind, StreamState } from './proto/track_pb.js';
4
4
  import { VideoSource } from './video_source.js';
5
+ import { FfiHandle } from './napi/native.d.js';
5
6
  import './audio_frame.js';
6
7
  import './proto/audio_frame_pb.js';
7
8
  import '@bufbuild/protobuf';
8
9
  import './proto/handle_pb.js';
10
+ import '@livekit/typed-emitter';
11
+ import './proto/ffi_pb.js';
12
+ import './proto/room_pb.js';
13
+ import './proto/participant_pb.js';
9
14
  import './proto/stats_pb.js';
10
- import './proto/e2ee_pb.js';
11
15
  import './proto/video_frame_pb.js';
16
+ import './proto/e2ee_pb.js';
17
+ import './proto/rpc_pb.js';
18
+ import './proto/track_publication_pb.js';
12
19
  import './video_frame.js';
13
20
 
14
21
  declare abstract class Track {
@@ -8,8 +8,15 @@ import './proto/handle_pb.cjs';
8
8
  import './audio_source.cjs';
9
9
  import './audio_frame.cjs';
10
10
  import './proto/audio_frame_pb.cjs';
11
- import './video_source.cjs';
11
+ import './ffi_client.cjs';
12
+ import '@livekit/typed-emitter';
13
+ import './proto/ffi_pb.cjs';
14
+ import './proto/room_pb.cjs';
15
+ import './proto/participant_pb.cjs';
12
16
  import './proto/video_frame_pb.cjs';
17
+ import './proto/rpc_pb.cjs';
18
+ import './proto/track_publication_pb.cjs';
19
+ import './video_source.cjs';
13
20
  import './video_frame.cjs';
14
21
 
15
22
  declare abstract class TrackPublication {
@@ -8,8 +8,15 @@ import './proto/handle_pb.js';
8
8
  import './audio_source.js';
9
9
  import './audio_frame.js';
10
10
  import './proto/audio_frame_pb.js';
11
- import './video_source.js';
11
+ import './ffi_client.js';
12
+ import '@livekit/typed-emitter';
13
+ import './proto/ffi_pb.js';
14
+ import './proto/room_pb.js';
15
+ import './proto/participant_pb.js';
12
16
  import './proto/video_frame_pb.js';
17
+ import './proto/rpc_pb.js';
18
+ import './proto/track_publication_pb.js';
19
+ import './video_source.js';
13
20
  import './video_frame.js';
14
21
 
15
22
  declare abstract class TrackPublication {
package/dist/version.cjs CHANGED
@@ -21,7 +21,7 @@ __export(version_exports, {
21
21
  SDK_VERSION: () => SDK_VERSION
22
22
  });
23
23
  module.exports = __toCommonJS(version_exports);
24
- const SDK_VERSION = "0.13.13";
24
+ const SDK_VERSION = "0.13.14";
25
25
  // Annotate the CommonJS export names for ESM import in node:
26
26
  0 && (module.exports = {
27
27
  SDK_VERSION
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts"],"sourcesContent":["export const SDK_VERSION = \"0.13.13\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,cAAc;","names":[]}
1
+ {"version":3,"sources":["../src/version.ts"],"sourcesContent":["export const SDK_VERSION = \"0.13.14\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,cAAc;","names":[]}
@@ -1,3 +1,3 @@
1
- declare const SDK_VERSION = "0.13.13";
1
+ declare const SDK_VERSION = "0.13.14";
2
2
 
3
3
  export { SDK_VERSION };
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- declare const SDK_VERSION = "0.13.13";
1
+ declare const SDK_VERSION = "0.13.14";
2
2
 
3
3
  export { SDK_VERSION };
package/dist/version.js CHANGED
@@ -1,4 +1,4 @@
1
- const SDK_VERSION = "0.13.13";
1
+ const SDK_VERSION = "0.13.14";
2
2
  export {
3
3
  SDK_VERSION
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts"],"sourcesContent":["export const SDK_VERSION = \"0.13.13\";\n"],"mappings":"AAAO,MAAM,cAAc;","names":[]}
1
+ {"version":3,"sources":["../src/version.ts"],"sourcesContent":["export const SDK_VERSION = \"0.13.14\";\n"],"mappings":"AAAO,MAAM,cAAc;","names":[]}
@@ -1,11 +1,19 @@
1
- import { FfiHandle } from './napi/native.d.cjs';
1
+ import './ffi_client.cjs';
2
2
  import { VideoSourceInfo, VideoRotation } from './proto/video_frame_pb.cjs';
3
3
  import { VideoFrame } from './video_frame.cjs';
4
+ import { FfiHandle } from './napi/native.d.cjs';
4
5
  import '@bufbuild/protobuf';
6
+ import '@livekit/typed-emitter';
7
+ import './proto/ffi_pb.cjs';
8
+ import './proto/room_pb.cjs';
9
+ import './proto/participant_pb.cjs';
10
+ import './proto/handle_pb.cjs';
5
11
  import './proto/track_pb.cjs';
6
12
  import './proto/stats_pb.cjs';
7
13
  import './proto/e2ee_pb.cjs';
8
- import './proto/handle_pb.cjs';
14
+ import './proto/audio_frame_pb.cjs';
15
+ import './proto/rpc_pb.cjs';
16
+ import './proto/track_publication_pb.cjs';
9
17
 
10
18
  declare class VideoSource {
11
19
  /** @internal */
@@ -1,11 +1,19 @@
1
- import { FfiHandle } from './napi/native.d.js';
1
+ import './ffi_client.js';
2
2
  import { VideoSourceInfo, VideoRotation } from './proto/video_frame_pb.js';
3
3
  import { VideoFrame } from './video_frame.js';
4
+ import { FfiHandle } from './napi/native.d.js';
4
5
  import '@bufbuild/protobuf';
6
+ import '@livekit/typed-emitter';
7
+ import './proto/ffi_pb.js';
8
+ import './proto/room_pb.js';
9
+ import './proto/participant_pb.js';
10
+ import './proto/handle_pb.js';
5
11
  import './proto/track_pb.js';
6
12
  import './proto/stats_pb.js';
7
13
  import './proto/e2ee_pb.js';
8
- import './proto/handle_pb.js';
14
+ import './proto/audio_frame_pb.js';
15
+ import './proto/rpc_pb.js';
16
+ import './proto/track_publication_pb.js';
9
17
 
10
18
  declare class VideoSource {
11
19
  /** @internal */
@@ -11,6 +11,13 @@ import './audio_source.cjs';
11
11
  import './audio_frame.cjs';
12
12
  import './proto/audio_frame_pb.cjs';
13
13
  import './napi/native.d.cjs';
14
+ import './ffi_client.cjs';
15
+ import '@livekit/typed-emitter';
16
+ import './proto/ffi_pb.cjs';
17
+ import './proto/room_pb.cjs';
18
+ import './proto/participant_pb.cjs';
19
+ import './proto/rpc_pb.cjs';
20
+ import './proto/track_publication_pb.cjs';
14
21
  import './video_source.cjs';
15
22
 
16
23
  type VideoFrameEvent = {
@@ -11,6 +11,13 @@ import './audio_source.js';
11
11
  import './audio_frame.js';
12
12
  import './proto/audio_frame_pb.js';
13
13
  import './napi/native.d.js';
14
+ import './ffi_client.js';
15
+ import '@livekit/typed-emitter';
16
+ import './proto/ffi_pb.js';
17
+ import './proto/room_pb.js';
18
+ import './proto/participant_pb.js';
19
+ import './proto/rpc_pb.js';
20
+ import './proto/track_publication_pb.js';
14
21
  import './video_source.js';
15
22
 
16
23
  type VideoFrameEvent = {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "LiveKit RTC Node",
4
4
  "license": "Apache-2.0",
5
5
  "author": "LiveKit",
6
- "version": "0.13.13",
6
+ "version": "0.13.14",
7
7
  "main": "dist/index.js",
8
8
  "require": "dist/index.cjs",
9
9
  "types": "dist/index.d.ts",
@@ -61,11 +61,11 @@
61
61
  "@bufbuild/protoc-gen-es": "^1.10.0"
62
62
  },
63
63
  "optionalDependencies": {
64
- "@livekit/rtc-node-darwin-arm64": "0.13.13",
65
- "@livekit/rtc-node-darwin-x64": "0.13.13",
66
- "@livekit/rtc-node-linux-arm64-gnu": "0.13.13",
67
- "@livekit/rtc-node-linux-x64-gnu": "0.13.13",
68
- "@livekit/rtc-node-win32-x64-msvc": "0.13.13"
64
+ "@livekit/rtc-node-darwin-arm64": "0.13.14",
65
+ "@livekit/rtc-node-darwin-x64": "0.13.14",
66
+ "@livekit/rtc-node-linux-x64-gnu": "0.13.14",
67
+ "@livekit/rtc-node-linux-arm64-gnu": "0.13.14",
68
+ "@livekit/rtc-node-win32-x64-msvc": "0.13.14"
69
69
  },
70
70
  "engines": {
71
71
  "node": ">= 18"
package/src/ffi_client.ts CHANGED
@@ -25,14 +25,18 @@ export enum FfiClientEvent {
25
25
  FfiEvent = 'ffi_event',
26
26
  }
27
27
 
28
- export class FfiClient extends (EventEmitter as new () => TypedEmitter<FfiClientCallbacks>) {
29
- static _client?: FfiClient;
28
+ declare global {
29
+ // eslint-disable-next-line no-var
30
+ var _ffiClientInstance: FfiClient | undefined;
31
+ }
30
32
 
33
+ export class FfiClient extends (EventEmitter as new () => TypedEmitter<FfiClientCallbacks>) {
31
34
  /** @internal */
32
35
  static get instance(): FfiClient {
33
- if (!FfiClient._client) FfiClient._client = new FfiClient();
34
-
35
- return FfiClient._client;
36
+ if (!globalThis._ffiClientInstance) {
37
+ globalThis._ffiClientInstance = new FfiClient();
38
+ }
39
+ return globalThis._ffiClientInstance;
36
40
  }
37
41
 
38
42
  constructor() {
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const SDK_VERSION = "0.13.13";
1
+ export const SDK_VERSION = "0.13.14";