{"version":3,"sources":["../src/track.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type {\n  CreateAudioTrackResponse,\n  CreateVideoTrackResponse,\n  OwnedTrack,\n  StreamState,\n  TrackInfo,\n  TrackKind,\n} from '@livekit/rtc-ffi-bindings';\nimport { CreateAudioTrackRequest, CreateVideoTrackRequest } from '@livekit/rtc-ffi-bindings';\nimport type { AudioSource } from './audio_source.js';\nimport { FfiClient, FfiHandle } from './ffi_client.js';\nimport type { VideoSource } from './video_source.js';\n\nexport abstract class Track {\n  /** @internal */\n  info?: TrackInfo;\n\n  /** @internal */\n  ffi_handle: FfiHandle;\n\n  constructor(owned: OwnedTrack) {\n    this.info = owned.info;\n    this.ffi_handle = new FfiHandle(owned.handle!.id!);\n  }\n\n  get sid(): string | undefined {\n    return this.info?.sid;\n  }\n\n  get name(): string | undefined {\n    return this.info?.name;\n  }\n\n  get kind(): TrackKind | undefined {\n    return this.info?.kind;\n  }\n\n  get stream_state(): StreamState | undefined {\n    return this.info?.streamState;\n  }\n\n  get muted(): boolean | undefined {\n    return this.info?.muted;\n  }\n\n  async close() {\n    this.ffi_handle.dispose();\n  }\n}\n\nexport class LocalAudioTrack extends Track {\n  private source?: AudioSource;\n\n  constructor(owned: OwnedTrack, source?: AudioSource) {\n    super(owned);\n    this.source = source;\n  }\n\n  static createAudioTrack(name: string, source: AudioSource): LocalAudioTrack {\n    const req = new CreateAudioTrackRequest({\n      name: name,\n      sourceHandle: source.ffiHandle.handle,\n    });\n\n    const res = FfiClient.instance.request<CreateAudioTrackResponse>({\n      message: { case: 'createAudioTrack', value: req },\n    });\n\n    return new LocalAudioTrack(res.track!, source);\n  }\n\n  async close(closeSource = true) {\n    await super.close();\n    if (closeSource) {\n      await this.source?.close();\n    }\n  }\n}\n\nexport class LocalVideoTrack extends Track {\n  private source?: VideoSource;\n\n  constructor(owned: OwnedTrack, source?: VideoSource) {\n    super(owned);\n    this.source = source;\n  }\n\n  static createVideoTrack(name: string, source: VideoSource): LocalVideoTrack {\n    const req = new CreateVideoTrackRequest({\n      name: name,\n      sourceHandle: source.ffiHandle.handle,\n    });\n\n    const res = FfiClient.instance.request<CreateVideoTrackResponse>({\n      message: { case: 'createVideoTrack', value: req },\n    });\n\n    return new LocalVideoTrack(res.track!, source);\n  }\n\n  async close(closeSource = true) {\n    await super.close();\n    if (closeSource) {\n      await this.source?.close();\n    }\n  }\n}\n\nexport class RemoteVideoTrack extends Track {\n  constructor(owned: OwnedTrack) {\n    super(owned);\n  }\n}\n\nexport class RemoteAudioTrack extends Track {\n  constructor(owned: OwnedTrack) {\n    super(owned);\n  }\n}\n\nexport type LocalTrack = LocalVideoTrack | LocalAudioTrack;\nexport type RemoteTrack = RemoteVideoTrack | RemoteAudioTrack;\nexport type AudioTrack = LocalAudioTrack | RemoteAudioTrack;\nexport type VideoTrack = LocalVideoTrack | RemoteVideoTrack;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,8BAAiE;AAEjE,wBAAqC;AAG9B,MAAe,MAAM;AAAA,EAO1B,YAAY,OAAmB;AAC7B,SAAK,OAAO,MAAM;AAClB,SAAK,aAAa,IAAI,4BAAU,MAAM,OAAQ,EAAG;AAAA,EACnD;AAAA,EAEA,IAAI,MAA0B;AA5BhC;AA6BI,YAAO,UAAK,SAAL,mBAAW;AAAA,EACpB;AAAA,EAEA,IAAI,OAA2B;AAhCjC;AAiCI,YAAO,UAAK,SAAL,mBAAW;AAAA,EACpB;AAAA,EAEA,IAAI,OAA8B;AApCpC;AAqCI,YAAO,UAAK,SAAL,mBAAW;AAAA,EACpB;AAAA,EAEA,IAAI,eAAwC;AAxC9C;AAyCI,YAAO,UAAK,SAAL,mBAAW;AAAA,EACpB;AAAA,EAEA,IAAI,QAA6B;AA5CnC;AA6CI,YAAO,UAAK,SAAL,mBAAW;AAAA,EACpB;AAAA,EAEA,MAAM,QAAQ;AACZ,SAAK,WAAW,QAAQ;AAAA,EAC1B;AACF;AAEO,MAAM,wBAAwB,MAAM;AAAA,EAGzC,YAAY,OAAmB,QAAsB;AACnD,UAAM,KAAK;AACX,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,OAAO,iBAAiB,MAAc,QAAsC;AAC1E,UAAM,MAAM,IAAI,gDAAwB;AAAA,MACtC;AAAA,MACA,cAAc,OAAO,UAAU;AAAA,IACjC,CAAC;AAED,UAAM,MAAM,4BAAU,SAAS,QAAkC;AAAA,MAC/D,SAAS,EAAE,MAAM,oBAAoB,OAAO,IAAI;AAAA,IAClD,CAAC;AAED,WAAO,IAAI,gBAAgB,IAAI,OAAQ,MAAM;AAAA,EAC/C;AAAA,EAEA,MAAM,MAAM,cAAc,MAAM;AA1ElC;AA2EI,UAAM,MAAM,MAAM;AAClB,QAAI,aAAa;AACf,cAAM,UAAK,WAAL,mBAAa;AAAA,IACrB;AAAA,EACF;AACF;AAEO,MAAM,wBAAwB,MAAM;AAAA,EAGzC,YAAY,OAAmB,QAAsB;AACnD,UAAM,KAAK;AACX,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,OAAO,iBAAiB,MAAc,QAAsC;AAC1E,UAAM,MAAM,IAAI,gDAAwB;AAAA,MACtC;AAAA,MACA,cAAc,OAAO,UAAU;AAAA,IACjC,CAAC;AAED,UAAM,MAAM,4BAAU,SAAS,QAAkC;AAAA,MAC/D,SAAS,EAAE,MAAM,oBAAoB,OAAO,IAAI;AAAA,IAClD,CAAC;AAED,WAAO,IAAI,gBAAgB,IAAI,OAAQ,MAAM;AAAA,EAC/C;AAAA,EAEA,MAAM,MAAM,cAAc,MAAM;AAvGlC;AAwGI,UAAM,MAAM,MAAM;AAClB,QAAI,aAAa;AACf,cAAM,UAAK,WAAL,mBAAa;AAAA,IACrB;AAAA,EACF;AACF;AAEO,MAAM,yBAAyB,MAAM;AAAA,EAC1C,YAAY,OAAmB;AAC7B,UAAM,KAAK;AAAA,EACb;AACF;AAEO,MAAM,yBAAyB,MAAM;AAAA,EAC1C,YAAY,OAAmB;AAC7B,UAAM,KAAK;AAAA,EACb;AACF;","names":[]}