@pipecat-ai/daily-transport 0.3.2 → 0.3.4-rc.1

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/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+ BSD 2-Clause License
2
+
3
+ Copyright (c) 2024, Daily
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package/dist/index.d.ts CHANGED
@@ -25,6 +25,9 @@ export class DailyTransport extends Transport {
25
25
  get isMicEnabled(): boolean;
26
26
  enableCam(enable: boolean): void;
27
27
  get isCamEnabled(): boolean;
28
+ startScreenShare(): void;
29
+ stopScreenShare(): void;
30
+ get isSharingScreen(): boolean;
28
31
  tracks(): Tracks;
29
32
  initDevices(): Promise<void>;
30
33
  connect(authBundle: DailyTransportAuthBundle, abortController: AbortController): Promise<void>;
@@ -1 +1 @@
1
- {"mappings":";;AAyBA;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;IACE,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,2BAA4B,SAAQ,SAAS;gBAQ/B,EACV,mBAAwB,GACzB,GAAE,gCAAqC;IAKjC,UAAU,CACf,OAAO,EAAE,iBAAiB,EAC1B,cAAc,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,GACxC,IAAI;IAyBP,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED,OAAO,KAAK,KAAK,QAKhB;IAEK,UAAU;IAKhB,SAAS,CAAC,KAAK,EAAE,MAAM;IAUvB,IAAI,WAAW,4CAEd;IAEK,UAAU;IAKhB,SAAS,CAAC,KAAK,EAAE,MAAM;IAUvB,IAAI,WAAW,4CAEd;IAEK,cAAc;IAKpB,aAAa,CAAC,SAAS,EAAE,MAAM;IAQ/B,IAAI,eAAe,4CAElB;IAED,SAAS,CAAC,MAAM,EAAE,OAAO;IAIzB,IAAI,YAAY,YAEf;IAED,SAAS,CAAC,MAAM,EAAE,OAAO;IAIzB,IAAI,YAAY,YAEf;IAED,MAAM;IAqBA,WAAW;IA+BX,OAAO,CACX,UAAU,EAAE,wBAAwB,EACpC,eAAe,EAAE,eAAe;IAgC5B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCjC,UAAU;IAQT,WAAW,CAAC,OAAO,EAAE,WAAW;CA4GxC","sources":["transports/daily/src/src/transport.ts","transports/daily/src/src/index.ts","transports/daily/src/index.ts"],"sourcesContent":[null,null,"export * from \"./transport\";\n"],"names":[],"version":3,"file":"index.d.ts.map"}
1
+ {"mappings":";;AA0BA;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;IACE,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,2BAA4B,SAAQ,SAAS;gBAQ/B,EACV,mBAAwB,GACzB,GAAE,gCAAqC;IAKjC,UAAU,CACf,OAAO,EAAE,iBAAiB,EAC1B,cAAc,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,GACxC,IAAI;IAyBP,IAAI,KAAK,IAAI,cAAc,CAE1B;IAED,OAAO,KAAK,KAAK,QAKhB;IAEK,UAAU;IAKhB,SAAS,CAAC,KAAK,EAAE,MAAM;IAUvB,IAAI,WAAW,4CAEd;IAEK,UAAU;IAKhB,SAAS,CAAC,KAAK,EAAE,MAAM;IAUvB,IAAI,WAAW,4CAEd;IAEK,cAAc;IAKpB,aAAa,CAAC,SAAS,EAAE,MAAM;IAQ/B,IAAI,eAAe,4CAElB;IAED,SAAS,CAAC,MAAM,EAAE,OAAO;IAIzB,IAAI,YAAY,YAEf;IAED,SAAS,CAAC,MAAM,EAAE,OAAO;IAIzB,IAAI,YAAY,YAEf;IAEM,gBAAgB;IAIhB,eAAe;IAItB,IAAW,eAAe,IAAI,OAAO,CAEpC;IAED,MAAM;IAuBA,WAAW;IA+BX,OAAO,CACX,UAAU,EAAE,wBAAwB,EACpC,eAAe,EAAE,eAAe;IAgC5B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCjC,UAAU;IAQT,WAAW,CAAC,OAAO,EAAE,WAAW;CA0IxC","sources":["transports/daily/src/src/transport.ts","transports/daily/src/src/index.ts","transports/daily/src/index.ts"],"sourcesContent":[null,null,"export * from \"./transport\";\n"],"names":[],"version":3,"file":"index.d.ts.map"}
package/dist/index.js CHANGED
@@ -119,12 +119,23 @@ class $28bdeb35415d61e8$export$b1ca982aa1e488c1 extends (0, $jrPAn$pipecataiclie
119
119
  get isCamEnabled() {
120
120
  return this._daily.localVideo();
121
121
  }
122
+ startScreenShare() {
123
+ this._daily.startScreenShare();
124
+ }
125
+ stopScreenShare() {
126
+ this._daily.stopScreenShare();
127
+ }
128
+ get isSharingScreen() {
129
+ return this._daily.localScreenAudio() || this._daily.localScreenVideo();
130
+ }
122
131
  tracks() {
123
132
  const participants = this._daily?.participants() ?? {};
124
133
  const bot = participants?.[this._botId];
125
134
  const tracks = {
126
135
  local: {
127
136
  audio: participants?.local?.tracks?.audio?.persistentTrack,
137
+ screenAudio: participants?.local?.tracks?.screenAudio?.persistentTrack,
138
+ screenVideo: participants?.local?.tracks?.screenVideo?.persistentTrack,
128
139
  video: participants?.local?.tracks?.video?.persistentTrack
129
140
  }
130
141
  };
@@ -199,6 +210,7 @@ class $28bdeb35415d61e8$export$b1ca982aa1e488c1 extends (0, $jrPAn$pipecataiclie
199
210
  this._daily.on("remote-participants-audio-level", this.handleRemoteAudioLevel.bind(this));
200
211
  this._daily.on("app-message", this.handleAppMessage.bind(this));
201
212
  this._daily.on("left-meeting", this.handleLeftMeeting.bind(this));
213
+ this._daily.on("nonfatal-error", this.handleNonFatalError.bind(this));
202
214
  }
203
215
  async disconnect() {
204
216
  this._daily.stopLocalAudioLevelObserver();
@@ -237,10 +249,12 @@ class $28bdeb35415d61e8$export$b1ca982aa1e488c1 extends (0, $jrPAn$pipecataiclie
237
249
  }
238
250
  }
239
251
  handleTrackStarted(ev) {
240
- this._callbacks.onTrackStarted?.(ev.track, ev.participant ? $28bdeb35415d61e8$var$dailyParticipantToParticipant(ev.participant) : undefined);
252
+ if (ev.type === "screenAudio" || ev.type === "screenVideo") this._callbacks.onScreenTrackStarted?.(ev.track, ev.participant ? $28bdeb35415d61e8$var$dailyParticipantToParticipant(ev.participant) : undefined);
253
+ else this._callbacks.onTrackStarted?.(ev.track, ev.participant ? $28bdeb35415d61e8$var$dailyParticipantToParticipant(ev.participant) : undefined);
241
254
  }
242
255
  handleTrackStopped(ev) {
243
- this._callbacks.onTrackStopped?.(ev.track, ev.participant ? $28bdeb35415d61e8$var$dailyParticipantToParticipant(ev.participant) : undefined);
256
+ if (ev.type === "screenAudio" || ev.type === "screenVideo") this._callbacks.onScreenTrackStopped?.(ev.track, ev.participant ? $28bdeb35415d61e8$var$dailyParticipantToParticipant(ev.participant) : undefined);
257
+ else this._callbacks.onTrackStopped?.(ev.track, ev.participant ? $28bdeb35415d61e8$var$dailyParticipantToParticipant(ev.participant) : undefined);
244
258
  }
245
259
  handleParticipantJoined(ev) {
246
260
  const p = $28bdeb35415d61e8$var$dailyParticipantToParticipant(ev.participant);
@@ -273,6 +287,13 @@ class $28bdeb35415d61e8$export$b1ca982aa1e488c1 extends (0, $jrPAn$pipecataiclie
273
287
  this._botId = "";
274
288
  this._callbacks.onDisconnected?.();
275
289
  }
290
+ handleNonFatalError(ev) {
291
+ switch(ev.type){
292
+ case "screen-share-error":
293
+ this._callbacks.onScreenShareError?.(ev.errorMsg);
294
+ break;
295
+ }
296
+ }
276
297
  }
277
298
  const $28bdeb35415d61e8$var$dailyParticipantToParticipant = (p)=>({
278
299
  id: p.user_id,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["transports/daily/src/index.ts","transports/daily/src/transport.ts"],"sourcesContent":["export * from \"./transport\";\n","import Daily, {\n DailyCall,\n DailyEventObjectAppMessage,\n DailyEventObjectAvailableDevicesUpdated,\n DailyEventObjectLocalAudioLevel,\n DailyEventObjectParticipant,\n DailyEventObjectParticipantLeft,\n DailyEventObjectRemoteParticipantsAudioLevel,\n DailyEventObjectSelectedDevicesUpdated,\n DailyEventObjectTrack,\n DailyFactoryOptions,\n DailyParticipant,\n} from \"@daily-co/daily-js\";\nimport {\n Participant,\n RTVIClientOptions,\n RTVIError,\n RTVIMessage,\n Tracks,\n Transport,\n TransportStartError,\n TransportState,\n logger,\n} from \"@pipecat-ai/client-js\";\n\nexport interface DailyTransportAuthBundle {\n room_url: string;\n token: string;\n}\n\nexport interface DailyTransportConstructorOptions {\n dailyFactoryOptions?: DailyFactoryOptions;\n}\n\nexport class DailyTransport extends Transport {\n private declare _daily: DailyCall;\n private _dailyFactoryOptions: DailyFactoryOptions;\n private _botId: string = \"\";\n private _selectedCam: MediaDeviceInfo | Record<string, never> = {};\n private _selectedMic: MediaDeviceInfo | Record<string, never> = {};\n private _selectedSpeaker: MediaDeviceInfo | Record<string, never> = {};\n\n constructor({\n dailyFactoryOptions = {},\n }: DailyTransportConstructorOptions = {}) {\n super();\n this._dailyFactoryOptions = dailyFactoryOptions;\n }\n\n public initialize(\n options: RTVIClientOptions,\n messageHandler: (ev: RTVIMessage) => void\n ): void {\n this._callbacks = options.callbacks ?? {};\n this._onMessage = messageHandler;\n\n const existingInstance = Daily.getCallInstance();\n if (existingInstance) {\n void existingInstance.destroy();\n }\n\n this._daily = Daily.createCallObject({\n ...this._dailyFactoryOptions,\n // Default is cam off\n startVideoOff: options.enableCam != true,\n // Default is mic on\n startAudioOff: options.enableMic == false,\n allowMultipleCallInstances: true,\n });\n\n this.attachEventListeners();\n\n this.state = \"disconnected\";\n\n logger.debug(\"[RTVI Transport] Initialized\");\n }\n\n get state(): TransportState {\n return this._state;\n }\n\n private set state(state: TransportState) {\n if (this._state === state) return;\n\n this._state = state;\n this._callbacks.onTransportStateChanged?.(state);\n }\n\n async getAllCams() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"videoinput\");\n }\n\n updateCam(camId: string) {\n this._daily\n .setInputDevicesAsync({\n videoDeviceId: camId,\n })\n .then((infos) => {\n this._selectedCam = infos.camera;\n });\n }\n\n get selectedCam() {\n return this._selectedCam;\n }\n\n async getAllMics() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"audioinput\");\n }\n\n updateMic(micId: string) {\n this._daily\n .setInputDevicesAsync({\n audioDeviceId: micId,\n })\n .then((infos) => {\n this._selectedMic = infos.mic;\n });\n }\n\n get selectedMic() {\n return this._selectedMic;\n }\n\n async getAllSpeakers() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"audiooutput\");\n }\n\n updateSpeaker(speakerId: string) {\n this._daily\n .setOutputDeviceAsync({ outputDeviceId: speakerId })\n .then((infos) => {\n this._selectedSpeaker = infos.speaker;\n });\n }\n\n get selectedSpeaker() {\n return this._selectedSpeaker;\n }\n\n enableMic(enable: boolean) {\n this._daily.setLocalAudio(enable);\n }\n\n get isMicEnabled() {\n return this._daily.localAudio();\n }\n\n enableCam(enable: boolean) {\n this._daily.setLocalVideo(enable);\n }\n\n get isCamEnabled() {\n return this._daily.localVideo();\n }\n\n tracks() {\n const participants = this._daily?.participants() ?? {};\n const bot = participants?.[this._botId];\n\n const tracks: Tracks = {\n local: {\n audio: participants?.local?.tracks?.audio?.persistentTrack,\n video: participants?.local?.tracks?.video?.persistentTrack,\n },\n };\n\n if (bot) {\n tracks.bot = {\n audio: bot?.tracks?.audio?.persistentTrack,\n video: bot?.tracks?.video?.persistentTrack,\n };\n }\n\n return tracks;\n }\n\n async initDevices() {\n if (!this._daily) {\n throw new RTVIError(\"Transport instance not initialized\");\n }\n\n this.state = \"initializing\";\n\n const infos = await this._daily.startCamera();\n const { devices } = await this._daily.enumerateDevices();\n const cams = devices.filter((d) => d.kind === \"videoinput\");\n const mics = devices.filter((d) => d.kind === \"audioinput\");\n const speakers = devices.filter((d) => d.kind === \"audiooutput\");\n this._callbacks.onAvailableCamsUpdated?.(cams);\n this._callbacks.onAvailableMicsUpdated?.(mics);\n this._callbacks.onAvailableSpeakersUpdated?.(speakers);\n this._selectedCam = infos.camera;\n this._callbacks.onCamUpdated?.(infos.camera as MediaDeviceInfo);\n this._selectedMic = infos.mic;\n this._callbacks.onMicUpdated?.(infos.mic as MediaDeviceInfo);\n this._selectedSpeaker = infos.speaker;\n this._callbacks.onSpeakerUpdated?.(infos.speaker as MediaDeviceInfo);\n\n // Instantiate audio observers\n if (!this._daily.isLocalAudioLevelObserverRunning())\n await this._daily.startLocalAudioLevelObserver(100);\n if (!this._daily.isRemoteParticipantsAudioLevelObserverRunning())\n await this._daily.startRemoteParticipantsAudioLevelObserver(100);\n\n this.state = \"initialized\";\n }\n\n async connect(\n authBundle: DailyTransportAuthBundle,\n abortController: AbortController\n ) {\n if (!this._daily) {\n throw new RTVIError(\"Transport instance not initialized\");\n }\n\n if (abortController.signal.aborted) return;\n\n this.state = \"connecting\";\n\n try {\n await this._daily.join({\n url: authBundle.room_url,\n token: authBundle.token,\n });\n\n const room = await this._daily.room();\n if (room && \"id\" in room) {\n this._expiry = room.config?.exp;\n }\n } catch (e) {\n this.state = \"error\";\n throw new TransportStartError();\n }\n\n if (abortController.signal.aborted) return;\n\n this.state = \"connected\";\n\n this._callbacks.onConnected?.();\n }\n\n async sendReadyMessage(): Promise<void> {\n return new Promise<void>((resolve) => {\n (async () => {\n this._daily.on(\"track-started\", (ev) => {\n if (!ev.participant?.local) {\n this.state = \"ready\";\n this.sendMessage(RTVIMessage.clientReady());\n resolve();\n }\n });\n })();\n });\n }\n\n private attachEventListeners() {\n this._daily.on(\n \"available-devices-updated\",\n this.handleAvailableDevicesUpdated.bind(this)\n );\n this._daily.on(\n \"selected-devices-updated\",\n this.handleSelectedDevicesUpdated.bind(this)\n );\n\n this._daily.on(\"track-started\", this.handleTrackStarted.bind(this));\n this._daily.on(\"track-stopped\", this.handleTrackStopped.bind(this));\n this._daily.on(\n \"participant-joined\",\n this.handleParticipantJoined.bind(this)\n );\n this._daily.on(\"participant-left\", this.handleParticipantLeft.bind(this));\n this._daily.on(\"local-audio-level\", this.handleLocalAudioLevel.bind(this));\n this._daily.on(\n \"remote-participants-audio-level\",\n this.handleRemoteAudioLevel.bind(this)\n );\n this._daily.on(\"app-message\", this.handleAppMessage.bind(this));\n this._daily.on(\"left-meeting\", this.handleLeftMeeting.bind(this));\n }\n\n async disconnect() {\n this._daily.stopLocalAudioLevelObserver();\n this._daily.stopRemoteParticipantsAudioLevelObserver();\n\n await this._daily.leave();\n await this._daily.destroy();\n }\n\n public sendMessage(message: RTVIMessage) {\n this._daily.sendAppMessage(message, \"*\");\n }\n\n private handleAppMessage(ev: DailyEventObjectAppMessage) {\n // Bubble any messages with rtvi-ai label\n if (ev.data.label === \"rtvi-ai\") {\n this._onMessage({\n id: ev.data.id,\n type: ev.data.type,\n data: ev.data.data,\n } as RTVIMessage);\n }\n }\n\n private handleAvailableDevicesUpdated(\n ev: DailyEventObjectAvailableDevicesUpdated\n ) {\n this._callbacks.onAvailableCamsUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"videoinput\")\n );\n this._callbacks.onAvailableMicsUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"audioinput\")\n );\n this._callbacks.onAvailableSpeakersUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"audiooutput\")\n );\n }\n\n private handleSelectedDevicesUpdated(\n ev: DailyEventObjectSelectedDevicesUpdated\n ) {\n if (this._selectedCam?.deviceId !== ev.devices.camera) {\n this._selectedCam = ev.devices.camera;\n this._callbacks.onCamUpdated?.(ev.devices.camera as MediaDeviceInfo);\n }\n if (this._selectedMic?.deviceId !== ev.devices.mic) {\n this._selectedMic = ev.devices.mic;\n this._callbacks.onMicUpdated?.(ev.devices.mic as MediaDeviceInfo);\n }\n if (this._selectedSpeaker?.deviceId !== ev.devices.speaker) {\n this._selectedSpeaker = ev.devices.speaker;\n this._callbacks.onSpeakerUpdated?.(ev.devices.speaker as MediaDeviceInfo);\n }\n }\n\n private handleTrackStarted(ev: DailyEventObjectTrack) {\n this._callbacks.onTrackStarted?.(\n ev.track,\n ev.participant ? dailyParticipantToParticipant(ev.participant) : undefined\n );\n }\n\n private handleTrackStopped(ev: DailyEventObjectTrack) {\n this._callbacks.onTrackStopped?.(\n ev.track,\n ev.participant ? dailyParticipantToParticipant(ev.participant) : undefined\n );\n }\n\n private handleParticipantJoined(ev: DailyEventObjectParticipant) {\n const p = dailyParticipantToParticipant(ev.participant);\n\n this._callbacks.onParticipantJoined?.(p);\n\n if (p.local) return;\n\n this._botId = ev.participant.session_id;\n\n this._callbacks.onBotConnected?.(p);\n }\n\n private handleParticipantLeft(ev: DailyEventObjectParticipantLeft) {\n const p = dailyParticipantToParticipant(ev.participant);\n\n this._callbacks.onParticipantLeft?.(p);\n\n if (p.local) return;\n\n this._botId = \"\";\n\n this._callbacks.onBotDisconnected?.(p);\n }\n\n private handleLocalAudioLevel(ev: DailyEventObjectLocalAudioLevel) {\n this._callbacks.onLocalAudioLevel?.(ev.audioLevel);\n }\n\n private handleRemoteAudioLevel(\n ev: DailyEventObjectRemoteParticipantsAudioLevel\n ) {\n const participants = this._daily.participants();\n const ids = Object.keys(ev.participantsAudioLevel);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const level = ev.participantsAudioLevel[id];\n this._callbacks.onRemoteAudioLevel?.(\n level,\n dailyParticipantToParticipant(participants[id])\n );\n }\n }\n\n private handleLeftMeeting() {\n this.state = \"disconnecting\";\n this._botId = \"\";\n this._callbacks.onDisconnected?.();\n }\n}\n\nconst dailyParticipantToParticipant = (p: DailyParticipant): Participant => ({\n id: p.user_id,\n local: p.local,\n name: p.user_name,\n});\n"],"names":[],"version":3,"file":"index.js.map"}
1
+ {"mappings":"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","sources":["transports/daily/src/index.ts","transports/daily/src/transport.ts"],"sourcesContent":["export * from \"./transport\";\n","import Daily, {\n DailyCall,\n DailyEventObjectAppMessage,\n DailyEventObjectAvailableDevicesUpdated,\n DailyEventObjectLocalAudioLevel,\n DailyEventObjectNonFatalError,\n DailyEventObjectParticipant,\n DailyEventObjectParticipantLeft,\n DailyEventObjectRemoteParticipantsAudioLevel,\n DailyEventObjectSelectedDevicesUpdated,\n DailyEventObjectTrack,\n DailyFactoryOptions,\n DailyParticipant,\n} from \"@daily-co/daily-js\";\nimport {\n Participant,\n RTVIClientOptions,\n RTVIError,\n RTVIMessage,\n Tracks,\n Transport,\n TransportStartError,\n TransportState,\n logger,\n} from \"@pipecat-ai/client-js\";\n\nexport interface DailyTransportAuthBundle {\n room_url: string;\n token: string;\n}\n\nexport interface DailyTransportConstructorOptions {\n dailyFactoryOptions?: DailyFactoryOptions;\n}\n\nexport class DailyTransport extends Transport {\n private declare _daily: DailyCall;\n private _dailyFactoryOptions: DailyFactoryOptions;\n private _botId: string = \"\";\n private _selectedCam: MediaDeviceInfo | Record<string, never> = {};\n private _selectedMic: MediaDeviceInfo | Record<string, never> = {};\n private _selectedSpeaker: MediaDeviceInfo | Record<string, never> = {};\n\n constructor({\n dailyFactoryOptions = {},\n }: DailyTransportConstructorOptions = {}) {\n super();\n this._dailyFactoryOptions = dailyFactoryOptions;\n }\n\n public initialize(\n options: RTVIClientOptions,\n messageHandler: (ev: RTVIMessage) => void\n ): void {\n this._callbacks = options.callbacks ?? {};\n this._onMessage = messageHandler;\n\n const existingInstance = Daily.getCallInstance();\n if (existingInstance) {\n void existingInstance.destroy();\n }\n\n this._daily = Daily.createCallObject({\n ...this._dailyFactoryOptions,\n // Default is cam off\n startVideoOff: options.enableCam != true,\n // Default is mic on\n startAudioOff: options.enableMic == false,\n allowMultipleCallInstances: true,\n });\n\n this.attachEventListeners();\n\n this.state = \"disconnected\";\n\n logger.debug(\"[RTVI Transport] Initialized\");\n }\n\n get state(): TransportState {\n return this._state;\n }\n\n private set state(state: TransportState) {\n if (this._state === state) return;\n\n this._state = state;\n this._callbacks.onTransportStateChanged?.(state);\n }\n\n async getAllCams() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"videoinput\");\n }\n\n updateCam(camId: string) {\n this._daily\n .setInputDevicesAsync({\n videoDeviceId: camId,\n })\n .then((infos) => {\n this._selectedCam = infos.camera;\n });\n }\n\n get selectedCam() {\n return this._selectedCam;\n }\n\n async getAllMics() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"audioinput\");\n }\n\n updateMic(micId: string) {\n this._daily\n .setInputDevicesAsync({\n audioDeviceId: micId,\n })\n .then((infos) => {\n this._selectedMic = infos.mic;\n });\n }\n\n get selectedMic() {\n return this._selectedMic;\n }\n\n async getAllSpeakers() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"audiooutput\");\n }\n\n updateSpeaker(speakerId: string) {\n this._daily\n .setOutputDeviceAsync({ outputDeviceId: speakerId })\n .then((infos) => {\n this._selectedSpeaker = infos.speaker;\n });\n }\n\n get selectedSpeaker() {\n return this._selectedSpeaker;\n }\n\n enableMic(enable: boolean) {\n this._daily.setLocalAudio(enable);\n }\n\n get isMicEnabled() {\n return this._daily.localAudio();\n }\n\n enableCam(enable: boolean) {\n this._daily.setLocalVideo(enable);\n }\n\n get isCamEnabled() {\n return this._daily.localVideo();\n }\n\n public startScreenShare() {\n this._daily.startScreenShare();\n }\n\n public stopScreenShare() {\n this._daily.stopScreenShare();\n }\n\n public get isSharingScreen(): boolean {\n return this._daily.localScreenAudio() || this._daily.localScreenVideo();\n }\n\n tracks() {\n const participants = this._daily?.participants() ?? {};\n const bot = participants?.[this._botId];\n\n const tracks: Tracks = {\n local: {\n audio: participants?.local?.tracks?.audio?.persistentTrack,\n screenAudio: participants?.local?.tracks?.screenAudio?.persistentTrack,\n screenVideo: participants?.local?.tracks?.screenVideo?.persistentTrack,\n video: participants?.local?.tracks?.video?.persistentTrack,\n },\n };\n\n if (bot) {\n tracks.bot = {\n audio: bot?.tracks?.audio?.persistentTrack,\n video: bot?.tracks?.video?.persistentTrack,\n };\n }\n\n return tracks;\n }\n\n async initDevices() {\n if (!this._daily) {\n throw new RTVIError(\"Transport instance not initialized\");\n }\n\n this.state = \"initializing\";\n\n const infos = await this._daily.startCamera();\n const { devices } = await this._daily.enumerateDevices();\n const cams = devices.filter((d) => d.kind === \"videoinput\");\n const mics = devices.filter((d) => d.kind === \"audioinput\");\n const speakers = devices.filter((d) => d.kind === \"audiooutput\");\n this._callbacks.onAvailableCamsUpdated?.(cams);\n this._callbacks.onAvailableMicsUpdated?.(mics);\n this._callbacks.onAvailableSpeakersUpdated?.(speakers);\n this._selectedCam = infos.camera;\n this._callbacks.onCamUpdated?.(infos.camera as MediaDeviceInfo);\n this._selectedMic = infos.mic;\n this._callbacks.onMicUpdated?.(infos.mic as MediaDeviceInfo);\n this._selectedSpeaker = infos.speaker;\n this._callbacks.onSpeakerUpdated?.(infos.speaker as MediaDeviceInfo);\n\n // Instantiate audio observers\n if (!this._daily.isLocalAudioLevelObserverRunning())\n await this._daily.startLocalAudioLevelObserver(100);\n if (!this._daily.isRemoteParticipantsAudioLevelObserverRunning())\n await this._daily.startRemoteParticipantsAudioLevelObserver(100);\n\n this.state = \"initialized\";\n }\n\n async connect(\n authBundle: DailyTransportAuthBundle,\n abortController: AbortController\n ) {\n if (!this._daily) {\n throw new RTVIError(\"Transport instance not initialized\");\n }\n\n if (abortController.signal.aborted) return;\n\n this.state = \"connecting\";\n\n try {\n await this._daily.join({\n url: authBundle.room_url,\n token: authBundle.token,\n });\n\n const room = await this._daily.room();\n if (room && \"id\" in room) {\n this._expiry = room.config?.exp;\n }\n } catch (e) {\n this.state = \"error\";\n throw new TransportStartError();\n }\n\n if (abortController.signal.aborted) return;\n\n this.state = \"connected\";\n\n this._callbacks.onConnected?.();\n }\n\n async sendReadyMessage(): Promise<void> {\n return new Promise<void>((resolve) => {\n (async () => {\n this._daily.on(\"track-started\", (ev) => {\n if (!ev.participant?.local) {\n this.state = \"ready\";\n this.sendMessage(RTVIMessage.clientReady());\n resolve();\n }\n });\n })();\n });\n }\n\n private attachEventListeners() {\n this._daily.on(\n \"available-devices-updated\",\n this.handleAvailableDevicesUpdated.bind(this)\n );\n this._daily.on(\n \"selected-devices-updated\",\n this.handleSelectedDevicesUpdated.bind(this)\n );\n\n this._daily.on(\"track-started\", this.handleTrackStarted.bind(this));\n this._daily.on(\"track-stopped\", this.handleTrackStopped.bind(this));\n this._daily.on(\n \"participant-joined\",\n this.handleParticipantJoined.bind(this)\n );\n this._daily.on(\"participant-left\", this.handleParticipantLeft.bind(this));\n this._daily.on(\"local-audio-level\", this.handleLocalAudioLevel.bind(this));\n this._daily.on(\n \"remote-participants-audio-level\",\n this.handleRemoteAudioLevel.bind(this)\n );\n this._daily.on(\"app-message\", this.handleAppMessage.bind(this));\n this._daily.on(\"left-meeting\", this.handleLeftMeeting.bind(this));\n this._daily.on(\"nonfatal-error\", this.handleNonFatalError.bind(this));\n }\n\n async disconnect() {\n this._daily.stopLocalAudioLevelObserver();\n this._daily.stopRemoteParticipantsAudioLevelObserver();\n\n await this._daily.leave();\n await this._daily.destroy();\n }\n\n public sendMessage(message: RTVIMessage) {\n this._daily.sendAppMessage(message, \"*\");\n }\n\n private handleAppMessage(ev: DailyEventObjectAppMessage) {\n // Bubble any messages with rtvi-ai label\n if (ev.data.label === \"rtvi-ai\") {\n this._onMessage({\n id: ev.data.id,\n type: ev.data.type,\n data: ev.data.data,\n } as RTVIMessage);\n }\n }\n\n private handleAvailableDevicesUpdated(\n ev: DailyEventObjectAvailableDevicesUpdated\n ) {\n this._callbacks.onAvailableCamsUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"videoinput\")\n );\n this._callbacks.onAvailableMicsUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"audioinput\")\n );\n this._callbacks.onAvailableSpeakersUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"audiooutput\")\n );\n }\n\n private handleSelectedDevicesUpdated(\n ev: DailyEventObjectSelectedDevicesUpdated\n ) {\n if (this._selectedCam?.deviceId !== ev.devices.camera) {\n this._selectedCam = ev.devices.camera;\n this._callbacks.onCamUpdated?.(ev.devices.camera as MediaDeviceInfo);\n }\n if (this._selectedMic?.deviceId !== ev.devices.mic) {\n this._selectedMic = ev.devices.mic;\n this._callbacks.onMicUpdated?.(ev.devices.mic as MediaDeviceInfo);\n }\n if (this._selectedSpeaker?.deviceId !== ev.devices.speaker) {\n this._selectedSpeaker = ev.devices.speaker;\n this._callbacks.onSpeakerUpdated?.(ev.devices.speaker as MediaDeviceInfo);\n }\n }\n\n private handleTrackStarted(ev: DailyEventObjectTrack) {\n if (ev.type === \"screenAudio\" || ev.type === \"screenVideo\") {\n this._callbacks.onScreenTrackStarted?.(\n ev.track,\n ev.participant\n ? dailyParticipantToParticipant(ev.participant)\n : undefined\n );\n } else {\n this._callbacks.onTrackStarted?.(\n ev.track,\n ev.participant\n ? dailyParticipantToParticipant(ev.participant)\n : undefined\n );\n }\n }\n\n private handleTrackStopped(ev: DailyEventObjectTrack) {\n if (ev.type === \"screenAudio\" || ev.type === \"screenVideo\") {\n this._callbacks.onScreenTrackStopped?.(\n ev.track,\n ev.participant\n ? dailyParticipantToParticipant(ev.participant)\n : undefined\n );\n } else {\n this._callbacks.onTrackStopped?.(\n ev.track,\n ev.participant\n ? dailyParticipantToParticipant(ev.participant)\n : undefined\n );\n }\n }\n\n private handleParticipantJoined(ev: DailyEventObjectParticipant) {\n const p = dailyParticipantToParticipant(ev.participant);\n\n this._callbacks.onParticipantJoined?.(p);\n\n if (p.local) return;\n\n this._botId = ev.participant.session_id;\n\n this._callbacks.onBotConnected?.(p);\n }\n\n private handleParticipantLeft(ev: DailyEventObjectParticipantLeft) {\n const p = dailyParticipantToParticipant(ev.participant);\n\n this._callbacks.onParticipantLeft?.(p);\n\n if (p.local) return;\n\n this._botId = \"\";\n\n this._callbacks.onBotDisconnected?.(p);\n }\n\n private handleLocalAudioLevel(ev: DailyEventObjectLocalAudioLevel) {\n this._callbacks.onLocalAudioLevel?.(ev.audioLevel);\n }\n\n private handleRemoteAudioLevel(\n ev: DailyEventObjectRemoteParticipantsAudioLevel\n ) {\n const participants = this._daily.participants();\n const ids = Object.keys(ev.participantsAudioLevel);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const level = ev.participantsAudioLevel[id];\n this._callbacks.onRemoteAudioLevel?.(\n level,\n dailyParticipantToParticipant(participants[id])\n );\n }\n }\n\n private handleLeftMeeting() {\n this.state = \"disconnecting\";\n this._botId = \"\";\n this._callbacks.onDisconnected?.();\n }\n\n private handleNonFatalError(ev: DailyEventObjectNonFatalError) {\n switch (ev.type) {\n case \"screen-share-error\":\n this._callbacks.onScreenShareError?.(ev.errorMsg);\n break;\n }\n }\n}\n\nconst dailyParticipantToParticipant = (p: DailyParticipant): Participant => ({\n id: p.user_id,\n local: p.local,\n name: p.user_name,\n});\n"],"names":[],"version":3,"file":"index.js.map"}
@@ -98,12 +98,23 @@ class $683f111f61e07358$export$b1ca982aa1e488c1 extends (0, $7zbD8$Transport) {
98
98
  get isCamEnabled() {
99
99
  return this._daily.localVideo();
100
100
  }
101
+ startScreenShare() {
102
+ this._daily.startScreenShare();
103
+ }
104
+ stopScreenShare() {
105
+ this._daily.stopScreenShare();
106
+ }
107
+ get isSharingScreen() {
108
+ return this._daily.localScreenAudio() || this._daily.localScreenVideo();
109
+ }
101
110
  tracks() {
102
111
  const participants = this._daily?.participants() ?? {};
103
112
  const bot = participants?.[this._botId];
104
113
  const tracks = {
105
114
  local: {
106
115
  audio: participants?.local?.tracks?.audio?.persistentTrack,
116
+ screenAudio: participants?.local?.tracks?.screenAudio?.persistentTrack,
117
+ screenVideo: participants?.local?.tracks?.screenVideo?.persistentTrack,
107
118
  video: participants?.local?.tracks?.video?.persistentTrack
108
119
  }
109
120
  };
@@ -178,6 +189,7 @@ class $683f111f61e07358$export$b1ca982aa1e488c1 extends (0, $7zbD8$Transport) {
178
189
  this._daily.on("remote-participants-audio-level", this.handleRemoteAudioLevel.bind(this));
179
190
  this._daily.on("app-message", this.handleAppMessage.bind(this));
180
191
  this._daily.on("left-meeting", this.handleLeftMeeting.bind(this));
192
+ this._daily.on("nonfatal-error", this.handleNonFatalError.bind(this));
181
193
  }
182
194
  async disconnect() {
183
195
  this._daily.stopLocalAudioLevelObserver();
@@ -216,10 +228,12 @@ class $683f111f61e07358$export$b1ca982aa1e488c1 extends (0, $7zbD8$Transport) {
216
228
  }
217
229
  }
218
230
  handleTrackStarted(ev) {
219
- this._callbacks.onTrackStarted?.(ev.track, ev.participant ? $683f111f61e07358$var$dailyParticipantToParticipant(ev.participant) : undefined);
231
+ if (ev.type === "screenAudio" || ev.type === "screenVideo") this._callbacks.onScreenTrackStarted?.(ev.track, ev.participant ? $683f111f61e07358$var$dailyParticipantToParticipant(ev.participant) : undefined);
232
+ else this._callbacks.onTrackStarted?.(ev.track, ev.participant ? $683f111f61e07358$var$dailyParticipantToParticipant(ev.participant) : undefined);
220
233
  }
221
234
  handleTrackStopped(ev) {
222
- this._callbacks.onTrackStopped?.(ev.track, ev.participant ? $683f111f61e07358$var$dailyParticipantToParticipant(ev.participant) : undefined);
235
+ if (ev.type === "screenAudio" || ev.type === "screenVideo") this._callbacks.onScreenTrackStopped?.(ev.track, ev.participant ? $683f111f61e07358$var$dailyParticipantToParticipant(ev.participant) : undefined);
236
+ else this._callbacks.onTrackStopped?.(ev.track, ev.participant ? $683f111f61e07358$var$dailyParticipantToParticipant(ev.participant) : undefined);
223
237
  }
224
238
  handleParticipantJoined(ev) {
225
239
  const p = $683f111f61e07358$var$dailyParticipantToParticipant(ev.participant);
@@ -252,6 +266,13 @@ class $683f111f61e07358$export$b1ca982aa1e488c1 extends (0, $7zbD8$Transport) {
252
266
  this._botId = "";
253
267
  this._callbacks.onDisconnected?.();
254
268
  }
269
+ handleNonFatalError(ev) {
270
+ switch(ev.type){
271
+ case "screen-share-error":
272
+ this._callbacks.onScreenShareError?.(ev.errorMsg);
273
+ break;
274
+ }
275
+ }
255
276
  }
256
277
  const $683f111f61e07358$var$dailyParticipantToParticipant = (p)=>({
257
278
  id: p.user_id,
@@ -1 +1 @@
1
- {"mappings":"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","sources":["transports/daily/src/index.ts","transports/daily/src/transport.ts"],"sourcesContent":["export * from \"./transport\";\n","import Daily, {\n DailyCall,\n DailyEventObjectAppMessage,\n DailyEventObjectAvailableDevicesUpdated,\n DailyEventObjectLocalAudioLevel,\n DailyEventObjectParticipant,\n DailyEventObjectParticipantLeft,\n DailyEventObjectRemoteParticipantsAudioLevel,\n DailyEventObjectSelectedDevicesUpdated,\n DailyEventObjectTrack,\n DailyFactoryOptions,\n DailyParticipant,\n} from \"@daily-co/daily-js\";\nimport {\n Participant,\n RTVIClientOptions,\n RTVIError,\n RTVIMessage,\n Tracks,\n Transport,\n TransportStartError,\n TransportState,\n logger,\n} from \"@pipecat-ai/client-js\";\n\nexport interface DailyTransportAuthBundle {\n room_url: string;\n token: string;\n}\n\nexport interface DailyTransportConstructorOptions {\n dailyFactoryOptions?: DailyFactoryOptions;\n}\n\nexport class DailyTransport extends Transport {\n private declare _daily: DailyCall;\n private _dailyFactoryOptions: DailyFactoryOptions;\n private _botId: string = \"\";\n private _selectedCam: MediaDeviceInfo | Record<string, never> = {};\n private _selectedMic: MediaDeviceInfo | Record<string, never> = {};\n private _selectedSpeaker: MediaDeviceInfo | Record<string, never> = {};\n\n constructor({\n dailyFactoryOptions = {},\n }: DailyTransportConstructorOptions = {}) {\n super();\n this._dailyFactoryOptions = dailyFactoryOptions;\n }\n\n public initialize(\n options: RTVIClientOptions,\n messageHandler: (ev: RTVIMessage) => void\n ): void {\n this._callbacks = options.callbacks ?? {};\n this._onMessage = messageHandler;\n\n const existingInstance = Daily.getCallInstance();\n if (existingInstance) {\n void existingInstance.destroy();\n }\n\n this._daily = Daily.createCallObject({\n ...this._dailyFactoryOptions,\n // Default is cam off\n startVideoOff: options.enableCam != true,\n // Default is mic on\n startAudioOff: options.enableMic == false,\n allowMultipleCallInstances: true,\n });\n\n this.attachEventListeners();\n\n this.state = \"disconnected\";\n\n logger.debug(\"[RTVI Transport] Initialized\");\n }\n\n get state(): TransportState {\n return this._state;\n }\n\n private set state(state: TransportState) {\n if (this._state === state) return;\n\n this._state = state;\n this._callbacks.onTransportStateChanged?.(state);\n }\n\n async getAllCams() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"videoinput\");\n }\n\n updateCam(camId: string) {\n this._daily\n .setInputDevicesAsync({\n videoDeviceId: camId,\n })\n .then((infos) => {\n this._selectedCam = infos.camera;\n });\n }\n\n get selectedCam() {\n return this._selectedCam;\n }\n\n async getAllMics() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"audioinput\");\n }\n\n updateMic(micId: string) {\n this._daily\n .setInputDevicesAsync({\n audioDeviceId: micId,\n })\n .then((infos) => {\n this._selectedMic = infos.mic;\n });\n }\n\n get selectedMic() {\n return this._selectedMic;\n }\n\n async getAllSpeakers() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"audiooutput\");\n }\n\n updateSpeaker(speakerId: string) {\n this._daily\n .setOutputDeviceAsync({ outputDeviceId: speakerId })\n .then((infos) => {\n this._selectedSpeaker = infos.speaker;\n });\n }\n\n get selectedSpeaker() {\n return this._selectedSpeaker;\n }\n\n enableMic(enable: boolean) {\n this._daily.setLocalAudio(enable);\n }\n\n get isMicEnabled() {\n return this._daily.localAudio();\n }\n\n enableCam(enable: boolean) {\n this._daily.setLocalVideo(enable);\n }\n\n get isCamEnabled() {\n return this._daily.localVideo();\n }\n\n tracks() {\n const participants = this._daily?.participants() ?? {};\n const bot = participants?.[this._botId];\n\n const tracks: Tracks = {\n local: {\n audio: participants?.local?.tracks?.audio?.persistentTrack,\n video: participants?.local?.tracks?.video?.persistentTrack,\n },\n };\n\n if (bot) {\n tracks.bot = {\n audio: bot?.tracks?.audio?.persistentTrack,\n video: bot?.tracks?.video?.persistentTrack,\n };\n }\n\n return tracks;\n }\n\n async initDevices() {\n if (!this._daily) {\n throw new RTVIError(\"Transport instance not initialized\");\n }\n\n this.state = \"initializing\";\n\n const infos = await this._daily.startCamera();\n const { devices } = await this._daily.enumerateDevices();\n const cams = devices.filter((d) => d.kind === \"videoinput\");\n const mics = devices.filter((d) => d.kind === \"audioinput\");\n const speakers = devices.filter((d) => d.kind === \"audiooutput\");\n this._callbacks.onAvailableCamsUpdated?.(cams);\n this._callbacks.onAvailableMicsUpdated?.(mics);\n this._callbacks.onAvailableSpeakersUpdated?.(speakers);\n this._selectedCam = infos.camera;\n this._callbacks.onCamUpdated?.(infos.camera as MediaDeviceInfo);\n this._selectedMic = infos.mic;\n this._callbacks.onMicUpdated?.(infos.mic as MediaDeviceInfo);\n this._selectedSpeaker = infos.speaker;\n this._callbacks.onSpeakerUpdated?.(infos.speaker as MediaDeviceInfo);\n\n // Instantiate audio observers\n if (!this._daily.isLocalAudioLevelObserverRunning())\n await this._daily.startLocalAudioLevelObserver(100);\n if (!this._daily.isRemoteParticipantsAudioLevelObserverRunning())\n await this._daily.startRemoteParticipantsAudioLevelObserver(100);\n\n this.state = \"initialized\";\n }\n\n async connect(\n authBundle: DailyTransportAuthBundle,\n abortController: AbortController\n ) {\n if (!this._daily) {\n throw new RTVIError(\"Transport instance not initialized\");\n }\n\n if (abortController.signal.aborted) return;\n\n this.state = \"connecting\";\n\n try {\n await this._daily.join({\n url: authBundle.room_url,\n token: authBundle.token,\n });\n\n const room = await this._daily.room();\n if (room && \"id\" in room) {\n this._expiry = room.config?.exp;\n }\n } catch (e) {\n this.state = \"error\";\n throw new TransportStartError();\n }\n\n if (abortController.signal.aborted) return;\n\n this.state = \"connected\";\n\n this._callbacks.onConnected?.();\n }\n\n async sendReadyMessage(): Promise<void> {\n return new Promise<void>((resolve) => {\n (async () => {\n this._daily.on(\"track-started\", (ev) => {\n if (!ev.participant?.local) {\n this.state = \"ready\";\n this.sendMessage(RTVIMessage.clientReady());\n resolve();\n }\n });\n })();\n });\n }\n\n private attachEventListeners() {\n this._daily.on(\n \"available-devices-updated\",\n this.handleAvailableDevicesUpdated.bind(this)\n );\n this._daily.on(\n \"selected-devices-updated\",\n this.handleSelectedDevicesUpdated.bind(this)\n );\n\n this._daily.on(\"track-started\", this.handleTrackStarted.bind(this));\n this._daily.on(\"track-stopped\", this.handleTrackStopped.bind(this));\n this._daily.on(\n \"participant-joined\",\n this.handleParticipantJoined.bind(this)\n );\n this._daily.on(\"participant-left\", this.handleParticipantLeft.bind(this));\n this._daily.on(\"local-audio-level\", this.handleLocalAudioLevel.bind(this));\n this._daily.on(\n \"remote-participants-audio-level\",\n this.handleRemoteAudioLevel.bind(this)\n );\n this._daily.on(\"app-message\", this.handleAppMessage.bind(this));\n this._daily.on(\"left-meeting\", this.handleLeftMeeting.bind(this));\n }\n\n async disconnect() {\n this._daily.stopLocalAudioLevelObserver();\n this._daily.stopRemoteParticipantsAudioLevelObserver();\n\n await this._daily.leave();\n await this._daily.destroy();\n }\n\n public sendMessage(message: RTVIMessage) {\n this._daily.sendAppMessage(message, \"*\");\n }\n\n private handleAppMessage(ev: DailyEventObjectAppMessage) {\n // Bubble any messages with rtvi-ai label\n if (ev.data.label === \"rtvi-ai\") {\n this._onMessage({\n id: ev.data.id,\n type: ev.data.type,\n data: ev.data.data,\n } as RTVIMessage);\n }\n }\n\n private handleAvailableDevicesUpdated(\n ev: DailyEventObjectAvailableDevicesUpdated\n ) {\n this._callbacks.onAvailableCamsUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"videoinput\")\n );\n this._callbacks.onAvailableMicsUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"audioinput\")\n );\n this._callbacks.onAvailableSpeakersUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"audiooutput\")\n );\n }\n\n private handleSelectedDevicesUpdated(\n ev: DailyEventObjectSelectedDevicesUpdated\n ) {\n if (this._selectedCam?.deviceId !== ev.devices.camera) {\n this._selectedCam = ev.devices.camera;\n this._callbacks.onCamUpdated?.(ev.devices.camera as MediaDeviceInfo);\n }\n if (this._selectedMic?.deviceId !== ev.devices.mic) {\n this._selectedMic = ev.devices.mic;\n this._callbacks.onMicUpdated?.(ev.devices.mic as MediaDeviceInfo);\n }\n if (this._selectedSpeaker?.deviceId !== ev.devices.speaker) {\n this._selectedSpeaker = ev.devices.speaker;\n this._callbacks.onSpeakerUpdated?.(ev.devices.speaker as MediaDeviceInfo);\n }\n }\n\n private handleTrackStarted(ev: DailyEventObjectTrack) {\n this._callbacks.onTrackStarted?.(\n ev.track,\n ev.participant ? dailyParticipantToParticipant(ev.participant) : undefined\n );\n }\n\n private handleTrackStopped(ev: DailyEventObjectTrack) {\n this._callbacks.onTrackStopped?.(\n ev.track,\n ev.participant ? dailyParticipantToParticipant(ev.participant) : undefined\n );\n }\n\n private handleParticipantJoined(ev: DailyEventObjectParticipant) {\n const p = dailyParticipantToParticipant(ev.participant);\n\n this._callbacks.onParticipantJoined?.(p);\n\n if (p.local) return;\n\n this._botId = ev.participant.session_id;\n\n this._callbacks.onBotConnected?.(p);\n }\n\n private handleParticipantLeft(ev: DailyEventObjectParticipantLeft) {\n const p = dailyParticipantToParticipant(ev.participant);\n\n this._callbacks.onParticipantLeft?.(p);\n\n if (p.local) return;\n\n this._botId = \"\";\n\n this._callbacks.onBotDisconnected?.(p);\n }\n\n private handleLocalAudioLevel(ev: DailyEventObjectLocalAudioLevel) {\n this._callbacks.onLocalAudioLevel?.(ev.audioLevel);\n }\n\n private handleRemoteAudioLevel(\n ev: DailyEventObjectRemoteParticipantsAudioLevel\n ) {\n const participants = this._daily.participants();\n const ids = Object.keys(ev.participantsAudioLevel);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const level = ev.participantsAudioLevel[id];\n this._callbacks.onRemoteAudioLevel?.(\n level,\n dailyParticipantToParticipant(participants[id])\n );\n }\n }\n\n private handleLeftMeeting() {\n this.state = \"disconnecting\";\n this._botId = \"\";\n this._callbacks.onDisconnected?.();\n }\n}\n\nconst dailyParticipantToParticipant = (p: DailyParticipant): Participant => ({\n id: p.user_id,\n local: p.local,\n name: p.user_name,\n});\n"],"names":[],"version":3,"file":"index.module.js.map"}
1
+ {"mappings":"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","sources":["transports/daily/src/index.ts","transports/daily/src/transport.ts"],"sourcesContent":["export * from \"./transport\";\n","import Daily, {\n DailyCall,\n DailyEventObjectAppMessage,\n DailyEventObjectAvailableDevicesUpdated,\n DailyEventObjectLocalAudioLevel,\n DailyEventObjectNonFatalError,\n DailyEventObjectParticipant,\n DailyEventObjectParticipantLeft,\n DailyEventObjectRemoteParticipantsAudioLevel,\n DailyEventObjectSelectedDevicesUpdated,\n DailyEventObjectTrack,\n DailyFactoryOptions,\n DailyParticipant,\n} from \"@daily-co/daily-js\";\nimport {\n Participant,\n RTVIClientOptions,\n RTVIError,\n RTVIMessage,\n Tracks,\n Transport,\n TransportStartError,\n TransportState,\n logger,\n} from \"@pipecat-ai/client-js\";\n\nexport interface DailyTransportAuthBundle {\n room_url: string;\n token: string;\n}\n\nexport interface DailyTransportConstructorOptions {\n dailyFactoryOptions?: DailyFactoryOptions;\n}\n\nexport class DailyTransport extends Transport {\n private declare _daily: DailyCall;\n private _dailyFactoryOptions: DailyFactoryOptions;\n private _botId: string = \"\";\n private _selectedCam: MediaDeviceInfo | Record<string, never> = {};\n private _selectedMic: MediaDeviceInfo | Record<string, never> = {};\n private _selectedSpeaker: MediaDeviceInfo | Record<string, never> = {};\n\n constructor({\n dailyFactoryOptions = {},\n }: DailyTransportConstructorOptions = {}) {\n super();\n this._dailyFactoryOptions = dailyFactoryOptions;\n }\n\n public initialize(\n options: RTVIClientOptions,\n messageHandler: (ev: RTVIMessage) => void\n ): void {\n this._callbacks = options.callbacks ?? {};\n this._onMessage = messageHandler;\n\n const existingInstance = Daily.getCallInstance();\n if (existingInstance) {\n void existingInstance.destroy();\n }\n\n this._daily = Daily.createCallObject({\n ...this._dailyFactoryOptions,\n // Default is cam off\n startVideoOff: options.enableCam != true,\n // Default is mic on\n startAudioOff: options.enableMic == false,\n allowMultipleCallInstances: true,\n });\n\n this.attachEventListeners();\n\n this.state = \"disconnected\";\n\n logger.debug(\"[RTVI Transport] Initialized\");\n }\n\n get state(): TransportState {\n return this._state;\n }\n\n private set state(state: TransportState) {\n if (this._state === state) return;\n\n this._state = state;\n this._callbacks.onTransportStateChanged?.(state);\n }\n\n async getAllCams() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"videoinput\");\n }\n\n updateCam(camId: string) {\n this._daily\n .setInputDevicesAsync({\n videoDeviceId: camId,\n })\n .then((infos) => {\n this._selectedCam = infos.camera;\n });\n }\n\n get selectedCam() {\n return this._selectedCam;\n }\n\n async getAllMics() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"audioinput\");\n }\n\n updateMic(micId: string) {\n this._daily\n .setInputDevicesAsync({\n audioDeviceId: micId,\n })\n .then((infos) => {\n this._selectedMic = infos.mic;\n });\n }\n\n get selectedMic() {\n return this._selectedMic;\n }\n\n async getAllSpeakers() {\n const { devices } = await this._daily.enumerateDevices();\n return devices.filter((d) => d.kind === \"audiooutput\");\n }\n\n updateSpeaker(speakerId: string) {\n this._daily\n .setOutputDeviceAsync({ outputDeviceId: speakerId })\n .then((infos) => {\n this._selectedSpeaker = infos.speaker;\n });\n }\n\n get selectedSpeaker() {\n return this._selectedSpeaker;\n }\n\n enableMic(enable: boolean) {\n this._daily.setLocalAudio(enable);\n }\n\n get isMicEnabled() {\n return this._daily.localAudio();\n }\n\n enableCam(enable: boolean) {\n this._daily.setLocalVideo(enable);\n }\n\n get isCamEnabled() {\n return this._daily.localVideo();\n }\n\n public startScreenShare() {\n this._daily.startScreenShare();\n }\n\n public stopScreenShare() {\n this._daily.stopScreenShare();\n }\n\n public get isSharingScreen(): boolean {\n return this._daily.localScreenAudio() || this._daily.localScreenVideo();\n }\n\n tracks() {\n const participants = this._daily?.participants() ?? {};\n const bot = participants?.[this._botId];\n\n const tracks: Tracks = {\n local: {\n audio: participants?.local?.tracks?.audio?.persistentTrack,\n screenAudio: participants?.local?.tracks?.screenAudio?.persistentTrack,\n screenVideo: participants?.local?.tracks?.screenVideo?.persistentTrack,\n video: participants?.local?.tracks?.video?.persistentTrack,\n },\n };\n\n if (bot) {\n tracks.bot = {\n audio: bot?.tracks?.audio?.persistentTrack,\n video: bot?.tracks?.video?.persistentTrack,\n };\n }\n\n return tracks;\n }\n\n async initDevices() {\n if (!this._daily) {\n throw new RTVIError(\"Transport instance not initialized\");\n }\n\n this.state = \"initializing\";\n\n const infos = await this._daily.startCamera();\n const { devices } = await this._daily.enumerateDevices();\n const cams = devices.filter((d) => d.kind === \"videoinput\");\n const mics = devices.filter((d) => d.kind === \"audioinput\");\n const speakers = devices.filter((d) => d.kind === \"audiooutput\");\n this._callbacks.onAvailableCamsUpdated?.(cams);\n this._callbacks.onAvailableMicsUpdated?.(mics);\n this._callbacks.onAvailableSpeakersUpdated?.(speakers);\n this._selectedCam = infos.camera;\n this._callbacks.onCamUpdated?.(infos.camera as MediaDeviceInfo);\n this._selectedMic = infos.mic;\n this._callbacks.onMicUpdated?.(infos.mic as MediaDeviceInfo);\n this._selectedSpeaker = infos.speaker;\n this._callbacks.onSpeakerUpdated?.(infos.speaker as MediaDeviceInfo);\n\n // Instantiate audio observers\n if (!this._daily.isLocalAudioLevelObserverRunning())\n await this._daily.startLocalAudioLevelObserver(100);\n if (!this._daily.isRemoteParticipantsAudioLevelObserverRunning())\n await this._daily.startRemoteParticipantsAudioLevelObserver(100);\n\n this.state = \"initialized\";\n }\n\n async connect(\n authBundle: DailyTransportAuthBundle,\n abortController: AbortController\n ) {\n if (!this._daily) {\n throw new RTVIError(\"Transport instance not initialized\");\n }\n\n if (abortController.signal.aborted) return;\n\n this.state = \"connecting\";\n\n try {\n await this._daily.join({\n url: authBundle.room_url,\n token: authBundle.token,\n });\n\n const room = await this._daily.room();\n if (room && \"id\" in room) {\n this._expiry = room.config?.exp;\n }\n } catch (e) {\n this.state = \"error\";\n throw new TransportStartError();\n }\n\n if (abortController.signal.aborted) return;\n\n this.state = \"connected\";\n\n this._callbacks.onConnected?.();\n }\n\n async sendReadyMessage(): Promise<void> {\n return new Promise<void>((resolve) => {\n (async () => {\n this._daily.on(\"track-started\", (ev) => {\n if (!ev.participant?.local) {\n this.state = \"ready\";\n this.sendMessage(RTVIMessage.clientReady());\n resolve();\n }\n });\n })();\n });\n }\n\n private attachEventListeners() {\n this._daily.on(\n \"available-devices-updated\",\n this.handleAvailableDevicesUpdated.bind(this)\n );\n this._daily.on(\n \"selected-devices-updated\",\n this.handleSelectedDevicesUpdated.bind(this)\n );\n\n this._daily.on(\"track-started\", this.handleTrackStarted.bind(this));\n this._daily.on(\"track-stopped\", this.handleTrackStopped.bind(this));\n this._daily.on(\n \"participant-joined\",\n this.handleParticipantJoined.bind(this)\n );\n this._daily.on(\"participant-left\", this.handleParticipantLeft.bind(this));\n this._daily.on(\"local-audio-level\", this.handleLocalAudioLevel.bind(this));\n this._daily.on(\n \"remote-participants-audio-level\",\n this.handleRemoteAudioLevel.bind(this)\n );\n this._daily.on(\"app-message\", this.handleAppMessage.bind(this));\n this._daily.on(\"left-meeting\", this.handleLeftMeeting.bind(this));\n this._daily.on(\"nonfatal-error\", this.handleNonFatalError.bind(this));\n }\n\n async disconnect() {\n this._daily.stopLocalAudioLevelObserver();\n this._daily.stopRemoteParticipantsAudioLevelObserver();\n\n await this._daily.leave();\n await this._daily.destroy();\n }\n\n public sendMessage(message: RTVIMessage) {\n this._daily.sendAppMessage(message, \"*\");\n }\n\n private handleAppMessage(ev: DailyEventObjectAppMessage) {\n // Bubble any messages with rtvi-ai label\n if (ev.data.label === \"rtvi-ai\") {\n this._onMessage({\n id: ev.data.id,\n type: ev.data.type,\n data: ev.data.data,\n } as RTVIMessage);\n }\n }\n\n private handleAvailableDevicesUpdated(\n ev: DailyEventObjectAvailableDevicesUpdated\n ) {\n this._callbacks.onAvailableCamsUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"videoinput\")\n );\n this._callbacks.onAvailableMicsUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"audioinput\")\n );\n this._callbacks.onAvailableSpeakersUpdated?.(\n ev.availableDevices.filter((d) => d.kind === \"audiooutput\")\n );\n }\n\n private handleSelectedDevicesUpdated(\n ev: DailyEventObjectSelectedDevicesUpdated\n ) {\n if (this._selectedCam?.deviceId !== ev.devices.camera) {\n this._selectedCam = ev.devices.camera;\n this._callbacks.onCamUpdated?.(ev.devices.camera as MediaDeviceInfo);\n }\n if (this._selectedMic?.deviceId !== ev.devices.mic) {\n this._selectedMic = ev.devices.mic;\n this._callbacks.onMicUpdated?.(ev.devices.mic as MediaDeviceInfo);\n }\n if (this._selectedSpeaker?.deviceId !== ev.devices.speaker) {\n this._selectedSpeaker = ev.devices.speaker;\n this._callbacks.onSpeakerUpdated?.(ev.devices.speaker as MediaDeviceInfo);\n }\n }\n\n private handleTrackStarted(ev: DailyEventObjectTrack) {\n if (ev.type === \"screenAudio\" || ev.type === \"screenVideo\") {\n this._callbacks.onScreenTrackStarted?.(\n ev.track,\n ev.participant\n ? dailyParticipantToParticipant(ev.participant)\n : undefined\n );\n } else {\n this._callbacks.onTrackStarted?.(\n ev.track,\n ev.participant\n ? dailyParticipantToParticipant(ev.participant)\n : undefined\n );\n }\n }\n\n private handleTrackStopped(ev: DailyEventObjectTrack) {\n if (ev.type === \"screenAudio\" || ev.type === \"screenVideo\") {\n this._callbacks.onScreenTrackStopped?.(\n ev.track,\n ev.participant\n ? dailyParticipantToParticipant(ev.participant)\n : undefined\n );\n } else {\n this._callbacks.onTrackStopped?.(\n ev.track,\n ev.participant\n ? dailyParticipantToParticipant(ev.participant)\n : undefined\n );\n }\n }\n\n private handleParticipantJoined(ev: DailyEventObjectParticipant) {\n const p = dailyParticipantToParticipant(ev.participant);\n\n this._callbacks.onParticipantJoined?.(p);\n\n if (p.local) return;\n\n this._botId = ev.participant.session_id;\n\n this._callbacks.onBotConnected?.(p);\n }\n\n private handleParticipantLeft(ev: DailyEventObjectParticipantLeft) {\n const p = dailyParticipantToParticipant(ev.participant);\n\n this._callbacks.onParticipantLeft?.(p);\n\n if (p.local) return;\n\n this._botId = \"\";\n\n this._callbacks.onBotDisconnected?.(p);\n }\n\n private handleLocalAudioLevel(ev: DailyEventObjectLocalAudioLevel) {\n this._callbacks.onLocalAudioLevel?.(ev.audioLevel);\n }\n\n private handleRemoteAudioLevel(\n ev: DailyEventObjectRemoteParticipantsAudioLevel\n ) {\n const participants = this._daily.participants();\n const ids = Object.keys(ev.participantsAudioLevel);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const level = ev.participantsAudioLevel[id];\n this._callbacks.onRemoteAudioLevel?.(\n level,\n dailyParticipantToParticipant(participants[id])\n );\n }\n }\n\n private handleLeftMeeting() {\n this.state = \"disconnecting\";\n this._botId = \"\";\n this._callbacks.onDisconnected?.();\n }\n\n private handleNonFatalError(ev: DailyEventObjectNonFatalError) {\n switch (ev.type) {\n case \"screen-share-error\":\n this._callbacks.onScreenShareError?.(ev.errorMsg);\n break;\n }\n }\n}\n\nconst dailyParticipantToParticipant = (p: DailyParticipant): Participant => ({\n id: p.user_id,\n local: p.local,\n name: p.user_name,\n});\n"],"names":[],"version":3,"file":"index.module.js.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pipecat-ai/daily-transport",
3
- "version": "0.3.2",
3
+ "version": "0.3.4-rc.1",
4
4
  "license": "BSD-2-Clause",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.module.js",
@@ -21,15 +21,13 @@
21
21
  "lint": "eslint . --ext ts --report-unused-disable-directives --max-warnings 0"
22
22
  },
23
23
  "devDependencies": {
24
- "@pipecat-ai/client-js": "~0.3.0",
25
- "@typescript-eslint/eslint-plugin": "^7.16.0",
26
- "@typescript-eslint/parser": "^7.16.0",
24
+ "@pipecat-ai/client-js": "~0.3.2",
27
25
  "eslint": "9.11.1",
28
26
  "eslint-config-prettier": "^9.1.0",
29
27
  "eslint-plugin-simple-import-sort": "^12.1.1"
30
28
  },
31
29
  "peerDependencies": {
32
- "@pipecat-ai/client-js": "~0.3.0"
30
+ "@pipecat-ai/client-js": "~0.3.2"
33
31
  },
34
32
  "dependencies": {
35
33
  "@daily-co/daily-js": "^0.73.0"
@@ -40,4 +38,4 @@
40
38
  "url": "https://github.com/pipecat-ai/pipecat-client-web-transports/issues"
41
39
  },
42
40
  "homepage": "https://github.com/pipecat-ai/pipecat-client-web-transports/blob/main/transports/daily-webrtc/README.md"
43
- }
41
+ }