@pipecat-ai/react-native-daily-media-manager 0.0.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/README.md ADDED
@@ -0,0 +1,74 @@
1
+ <h1><div align="center">
2
+ <img alt="pipecat client react native" width="500px" height="auto" src="https://raw.githubusercontent.com/pipecat-ai/pipecat-client-react-native-daily-transport/main/pipecat-react-native.png">
3
+ </div></h1>
4
+
5
+ [![Docs](https://img.shields.io/badge/documentation-blue)](https://docs.pipecat.ai/client/introduction)
6
+ ![NPM Version](https://img.shields.io/npm/v/@pipecat-ai/react-native-daily-transport)
7
+
8
+ A comprehensive media management layer built on Daily’s React Native SDK.
9
+
10
+ While [SmallWebRTCTransport](/transports/smallwebrtc/README.md) enables lightweight peer-to-peer communication without relying on Daily’s infrastructure,
11
+ the Daily Media Manager leverages Daily’s mature SDK to deliver enterprise-grade device management and media handling.
12
+
13
+ ### Key Features
14
+
15
+ - **Complete Device Management**: Full control over cameras, microphones, and speakers with automatic device enumeration and selection
16
+ - **Device Error Handling**: Comprehensive error handling for device permissions, constraints, and availability issues
17
+ - **Media Control**: Enable/disable microphone, camera, and screen sharing with simple API calls
18
+ - **Track Management**: Access to WebRTC media tracks for advanced media processing
19
+ - **Real-time Updates**: Automatic callbacks for device changes and track events
20
+
21
+ ## Installation
22
+
23
+ Install `@pipecat-ai/react-native-daily-media-manager` along with its peer dependencies:
24
+
25
+ ```bash
26
+ npm i @pipecat-ai/react-native-daily-media-manager
27
+ npm i @daily-co/react-native-daily-js@^0.82.0
28
+ npm i @daily-co/react-native-webrtc@^124.0.6-daily.1
29
+ npm i @react-native-async-storage/async-storage@^1.24.0
30
+ npm i react-native-background-timer@^2.4.1
31
+ npm i react-native-get-random-values@^1.11.0
32
+ ```
33
+
34
+ If you are using Expo, you will also need to add the following dependencies:
35
+
36
+ ```bash
37
+ npm i @daily-co/config-plugin-rn-daily-js@0.0.11
38
+ ```
39
+
40
+ All the details about Expo can be found [here](https://github.com/daily-co/rn-daily-js-expo-config-plugin).
41
+
42
+ A full demo can be found [here](https://github.com/pipecat-ai/pipecat-examples/tree/main/p2p-webrtc/video-transform/client/react-native)
43
+
44
+ ## Quick Start
45
+
46
+ Instantiate the `DailyMediaManager` instance, to use it together with the `SmallWebRTCTransport`:
47
+
48
+ ```typescript
49
+ const options: SmallWebRTCTransportConstructorOptions = {
50
+ mediaManager: new DailyMediaManager(),
51
+ };
52
+ const transport = new RNSmallWebRTCTransport(options);
53
+ ```
54
+
55
+ ## Contributing
56
+
57
+ We welcome contributions from the community! Whether you're fixing bugs, improving documentation, or adding new features, here's how you can help:
58
+
59
+ - **Found a bug?** Open an [issue](https://github.com/pipecat-ai/pipecat-client-react-native-transports/issues)
60
+ - **Have a feature idea?** Start a [discussion](https://discord.gg/pipecat)
61
+ - **Want to contribute code?** Check our [CONTRIBUTING.md](CONTRIBUTING.md) guide
62
+ - **Documentation improvements?** [Docs](https://github.com/pipecat-ai/docs) PRs are always welcome
63
+
64
+ Before submitting a pull request, please check existing issues and PRs to avoid duplicates.
65
+
66
+ We aim to review all contributions promptly and provide constructive feedback to help get your changes merged.
67
+
68
+ ## Getting help
69
+
70
+ ➡️ [Join our Discord](https://discord.gg/pipecat)
71
+
72
+ ➡️ [Read the docs](https://docs.pipecat.ai)
73
+
74
+ ➡️ [Reach us on X](https://x.com/pipecat_ai)
@@ -0,0 +1,283 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DailyMediaManager = void 0;
7
+ var _reactNativeSmallWebrtcTransport = require("@pipecat-ai/react-native-small-webrtc-transport");
8
+ var _reactNativeDailyJs = _interopRequireDefault(require("@daily-co/react-native-daily-js"));
9
+ var _clientJs = require("@pipecat-ai/client-js");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ class DailyMediaManager extends _reactNativeSmallWebrtcTransport.MediaManager {
12
+ _selectedCam = {};
13
+ _selectedMic = {};
14
+ _selectedSpeaker = {};
15
+ constructor(onTrackStartedCallback, onTrackStoppedCallback) {
16
+ super();
17
+ this._initialized = false;
18
+ this._connected = false;
19
+ this._connectResolve = null;
20
+ this._onTrackStartedCallback = onTrackStartedCallback;
21
+ this._onTrackStoppedCallback = onTrackStoppedCallback;
22
+ this._supportsScreenShare = true;
23
+ this._daily = _reactNativeDailyJs.default.getCallInstance() ?? _reactNativeDailyJs.default.createCallObject();
24
+ this._daily.on('track-started', this.handleTrackStarted.bind(this));
25
+ this._daily.on('track-stopped', this.handleTrackStopped.bind(this));
26
+ this._daily.on('available-devices-updated', this._handleAvailableDevicesUpdated.bind(this));
27
+ this._daily.on(
28
+ // TODO, we need to add DailyEventObjectSelectedDevicesUpdated to types overrides inside react-ntive-daily-js
29
+ // @ts-ignore
30
+ 'selected-devices-updated', this._handleSelectedDevicesUpdated.bind(this));
31
+ this._daily.on('camera-error', this.handleDeviceError.bind(this));
32
+ this._daily.on('local-audio-level', this._handleLocalAudioLevel.bind(this));
33
+ this._daily.on('remote-participants-audio-level', this._handleRemoteAudioLevel.bind(this));
34
+ }
35
+ async initialize() {
36
+ if (this._initialized) {
37
+ console.warn('DailyMediaManager already initialized');
38
+ return;
39
+ }
40
+ await this._daily.startCamera({
41
+ startVideoOff: !this._camEnabled,
42
+ startAudioOff: !this._micEnabled
43
+ });
44
+ const {
45
+ devices
46
+ } = await this._daily.enumerateDevices();
47
+ const cams = devices.filter(d => d.kind === 'videoinput');
48
+ const mics = devices.filter(d => d.kind === 'audio');
49
+ const speakers = devices.filter(d => d.kind === 'audio');
50
+ this._callbacks.onAvailableCamsUpdated?.(cams);
51
+ this._callbacks.onAvailableMicsUpdated?.(mics);
52
+ this._callbacks.onAvailableSpeakersUpdated?.(speakers);
53
+ let inputDevices = await this._daily.getInputDevices();
54
+ this._selectedCam = inputDevices.camera;
55
+ this._callbacks.onCamUpdated?.(this._selectedCam);
56
+ this._selectedMic = inputDevices.mic;
57
+ this._callbacks.onMicUpdated?.(this._selectedMic);
58
+
59
+ // TODO: keeping it disabled for now
60
+ // It is not possible to use the audio observers provided by Daily
61
+ // Instantiate audio observers
62
+ /*if (!this._daily.isLocalAudioLevelObserverRunning())
63
+ await this._daily.startLocalAudioLevelObserver(100);
64
+ if (!this._daily.isRemoteParticipantsAudioLevelObserverRunning())
65
+ await this._daily.startRemoteParticipantsAudioLevelObserver(100);*/
66
+
67
+ this._initialized = true;
68
+ }
69
+ async connect() {
70
+ if (this._connected) {
71
+ console.warn('DailyMediaManager already connected');
72
+ return;
73
+ }
74
+ this._connected = true;
75
+ if (!this._initialized) {
76
+ return new Promise(resolve => {
77
+ (async () => {
78
+ this._connectResolve = resolve;
79
+ await this.initialize();
80
+ })();
81
+ });
82
+ }
83
+ }
84
+ async disconnect() {
85
+ this._daily.stopLocalAudioLevelObserver();
86
+ this._daily.stopRemoteParticipantsAudioLevelObserver();
87
+ await this._daily.leave();
88
+ this._initialized = false;
89
+ this._connected = false;
90
+ }
91
+ async getAllMics() {
92
+ let devices = (await this._daily.enumerateDevices()).devices;
93
+ return devices.filter(device => device.kind === 'audio');
94
+ }
95
+ async getAllCams() {
96
+ let devices = (await this._daily.enumerateDevices()).devices;
97
+ return devices.filter(device => device.kind === 'videoinput');
98
+ }
99
+ async getAllSpeakers() {
100
+ let devices = (await this._daily.enumerateDevices()).devices;
101
+ return devices.filter(device => device.kind === 'audio');
102
+ }
103
+ updateMic(micId) {
104
+ this._daily.setAudioDevice(micId).then(async () => {
105
+ let inputDevices = await this._daily.getInputDevices();
106
+ this._selectedMic = inputDevices.mic;
107
+ });
108
+ }
109
+ updateCam(camId) {
110
+ this._daily.setCamera(camId).then(async () => {
111
+ let inputDevices = await this._daily.getInputDevices();
112
+ this._selectedCam = inputDevices.camera;
113
+ });
114
+ }
115
+ updateSpeaker(speakerId) {
116
+ this._daily?.setAudioDevice(speakerId).then(async () => {
117
+ const devicesInUse = await this._daily.getInputDevices();
118
+ this._selectedSpeaker = devicesInUse?.speaker;
119
+ });
120
+ }
121
+ get selectedMic() {
122
+ return this._selectedMic;
123
+ }
124
+ get selectedCam() {
125
+ return this._selectedCam;
126
+ }
127
+ get selectedSpeaker() {
128
+ return this._selectedSpeaker;
129
+ }
130
+ async enableMic(enable) {
131
+ this._micEnabled = enable;
132
+ if (!this._daily.participants()?.local) return;
133
+ this._daily.setLocalAudio(enable);
134
+ }
135
+ enableCam(enable) {
136
+ this._camEnabled = enable;
137
+ this._daily.setLocalVideo(enable);
138
+ }
139
+ enableScreenShare(enable) {
140
+ if (enable) {
141
+ this._daily.startScreenShare();
142
+ } else {
143
+ this._daily.stopScreenShare();
144
+ }
145
+ }
146
+ get isCamEnabled() {
147
+ return this._daily.localVideo();
148
+ }
149
+ get isMicEnabled() {
150
+ return this._daily.localAudio();
151
+ }
152
+ get isSharingScreen() {
153
+ return this._daily.localScreenAudio() || this._daily.localScreenVideo();
154
+ }
155
+ tracks() {
156
+ const participants = this._daily.participants();
157
+ return {
158
+ local: {
159
+ audio: participants?.local?.tracks?.audio?.persistentTrack,
160
+ screenAudio: participants?.local?.tracks?.screenAudio?.persistentTrack,
161
+ screenVideo: participants?.local?.tracks?.screenVideo?.persistentTrack,
162
+ video: participants?.local?.tracks?.video?.persistentTrack
163
+ }
164
+ };
165
+ }
166
+ _handleAvailableDevicesUpdated(event) {
167
+ this._callbacks.onAvailableCamsUpdated?.(event.availableDevices.filter(d => d.kind === 'videoinput'));
168
+ this._callbacks.onAvailableMicsUpdated?.(event.availableDevices.filter(d => d.kind === 'audio'));
169
+ this._callbacks.onAvailableSpeakersUpdated?.(event.availableDevices.filter(d => d.kind === 'audio'));
170
+ if (this._selectedSpeaker.deviceId === 'default') {
171
+ this.updateSpeaker('default');
172
+ }
173
+ }
174
+
175
+ // TODO, we need to add DailyEventObjectSelectedDevicesUpdated to types overrides inside react-ntive-daily-js
176
+ _handleSelectedDevicesUpdated(
177
+ // @ts-ignore
178
+ event) {
179
+ if (this._selectedCam?.deviceId !== event.devices.camera) {
180
+ this._selectedCam = event.devices.camera;
181
+ this._callbacks.onCamUpdated?.(event.devices.camera);
182
+ }
183
+ if (this._selectedMic?.deviceId !== event.devices.mic) {
184
+ this._selectedMic = event.devices.mic;
185
+ this._callbacks.onMicUpdated?.(event.devices.mic);
186
+ }
187
+ }
188
+ handleDeviceError(ev) {
189
+ const generateDeviceError = error => {
190
+ const devices = [];
191
+ switch (error.type) {
192
+ case 'permissions':
193
+ {
194
+ error.blockedMedia.forEach(d => {
195
+ devices.push(d === 'video' ? 'cam' : 'mic');
196
+ });
197
+ return new _clientJs.DeviceError(devices, error.type, error.msg, {
198
+ blockedBy: error.blockedBy
199
+ });
200
+ }
201
+ case 'not-found':
202
+ {
203
+ error.missingMedia.forEach(d => {
204
+ devices.push(d === 'video' ? 'cam' : 'mic');
205
+ });
206
+ return new _clientJs.DeviceError(devices, error.type, error.msg);
207
+ }
208
+ case 'constraints':
209
+ {
210
+ error.failedMedia.forEach(d => {
211
+ devices.push(d === 'video' ? 'cam' : 'mic');
212
+ });
213
+ return new _clientJs.DeviceError(devices, error.type, error.msg, {
214
+ reason: error.reason
215
+ });
216
+ }
217
+ case 'cam-in-use':
218
+ {
219
+ devices.push('cam');
220
+ return new _clientJs.DeviceError(devices, 'in-use', error.msg);
221
+ }
222
+ case 'mic-in-use':
223
+ {
224
+ devices.push('mic');
225
+ return new _clientJs.DeviceError(devices, 'in-use', error.msg);
226
+ }
227
+ case 'cam-mic-in-use':
228
+ {
229
+ devices.push('cam');
230
+ devices.push('mic');
231
+ return new _clientJs.DeviceError(devices, 'in-use', error.msg);
232
+ }
233
+ case 'undefined-mediadevices':
234
+ case 'unknown':
235
+ default:
236
+ {
237
+ devices.push('cam');
238
+ devices.push('mic');
239
+ return new _clientJs.DeviceError(devices, error.type, error.msg);
240
+ }
241
+ }
242
+ };
243
+ this._callbacks.onDeviceError?.(generateDeviceError(ev.error));
244
+ }
245
+ _handleLocalAudioLevel(ev) {
246
+ this._callbacks.onLocalAudioLevel?.(ev.audioLevel);
247
+ }
248
+ _handleRemoteAudioLevel(ev) {
249
+ const participants = this._daily.participants();
250
+ for (const participantId in ev.participantsAudioLevel) {
251
+ if (ev.participantsAudioLevel.hasOwnProperty(participantId)) {
252
+ const audioLevel = ev.participantsAudioLevel[participantId];
253
+ let participant = participants[participantId];
254
+ if (audioLevel && participant) {
255
+ this._callbacks.onRemoteAudioLevel?.(audioLevel, dailyParticipantToParticipant(participant));
256
+ }
257
+ }
258
+ }
259
+ }
260
+ async handleTrackStarted(event) {
261
+ if (!event.participant?.local) return;
262
+ if (event.track.kind === 'audio') {
263
+ if (this._connectResolve) {
264
+ this._connectResolve();
265
+ this._connectResolve = null;
266
+ }
267
+ }
268
+ this._callbacks.onTrackStarted?.(event.track, event.participant ? dailyParticipantToParticipant(event.participant) : undefined);
269
+ this._onTrackStartedCallback?.(event);
270
+ }
271
+ handleTrackStopped(event) {
272
+ if (!event.participant?.local) return;
273
+ this._callbacks.onTrackStopped?.(event.track, event.participant ? dailyParticipantToParticipant(event.participant) : undefined);
274
+ this._onTrackStoppedCallback?.(event);
275
+ }
276
+ }
277
+ exports.DailyMediaManager = DailyMediaManager;
278
+ const dailyParticipantToParticipant = p => ({
279
+ id: p.user_id,
280
+ local: p.local,
281
+ name: p.user_name
282
+ });
283
+ //# sourceMappingURL=dailyMediaManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNativeSmallWebrtcTransport","require","_reactNativeDailyJs","_interopRequireDefault","_clientJs","e","__esModule","default","DailyMediaManager","MediaManager","_selectedCam","_selectedMic","_selectedSpeaker","constructor","onTrackStartedCallback","onTrackStoppedCallback","_initialized","_connected","_connectResolve","_onTrackStartedCallback","_onTrackStoppedCallback","_supportsScreenShare","_daily","Daily","getCallInstance","createCallObject","on","handleTrackStarted","bind","handleTrackStopped","_handleAvailableDevicesUpdated","_handleSelectedDevicesUpdated","handleDeviceError","_handleLocalAudioLevel","_handleRemoteAudioLevel","initialize","console","warn","startCamera","startVideoOff","_camEnabled","startAudioOff","_micEnabled","devices","enumerateDevices","cams","filter","d","kind","mics","speakers","_callbacks","onAvailableCamsUpdated","onAvailableMicsUpdated","onAvailableSpeakersUpdated","inputDevices","getInputDevices","camera","onCamUpdated","mic","onMicUpdated","connect","Promise","resolve","disconnect","stopLocalAudioLevelObserver","stopRemoteParticipantsAudioLevelObserver","leave","getAllMics","device","getAllCams","getAllSpeakers","updateMic","micId","setAudioDevice","then","updateCam","camId","setCamera","updateSpeaker","speakerId","devicesInUse","speaker","selectedMic","selectedCam","selectedSpeaker","enableMic","enable","participants","local","setLocalAudio","enableCam","setLocalVideo","enableScreenShare","startScreenShare","stopScreenShare","isCamEnabled","localVideo","isMicEnabled","localAudio","isSharingScreen","localScreenAudio","localScreenVideo","tracks","audio","persistentTrack","screenAudio","screenVideo","video","event","availableDevices","deviceId","ev","generateDeviceError","error","type","blockedMedia","forEach","push","DeviceError","msg","blockedBy","missingMedia","failedMedia","reason","onDeviceError","onLocalAudioLevel","audioLevel","participantId","participantsAudioLevel","hasOwnProperty","participant","onRemoteAudioLevel","dailyParticipantToParticipant","track","onTrackStarted","undefined","onTrackStopped","exports","p","id","user_id","name","user_name"],"sourceRoot":"../../src","sources":["dailyMediaManager.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "DailyMediaManager", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _dailyMediaManager.DailyMediaManager;
10
+ }
11
+ });
12
+ var _dailyMediaManager = require("./dailyMediaManager.js");
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_dailyMediaManager","require"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+
3
+ import { MediaManager } from '@pipecat-ai/react-native-small-webrtc-transport';
4
+ import Daily from '@daily-co/react-native-daily-js';
5
+ import { DeviceError } from '@pipecat-ai/client-js';
6
+ export class DailyMediaManager extends MediaManager {
7
+ _selectedCam = {};
8
+ _selectedMic = {};
9
+ _selectedSpeaker = {};
10
+ constructor(onTrackStartedCallback, onTrackStoppedCallback) {
11
+ super();
12
+ this._initialized = false;
13
+ this._connected = false;
14
+ this._connectResolve = null;
15
+ this._onTrackStartedCallback = onTrackStartedCallback;
16
+ this._onTrackStoppedCallback = onTrackStoppedCallback;
17
+ this._supportsScreenShare = true;
18
+ this._daily = Daily.getCallInstance() ?? Daily.createCallObject();
19
+ this._daily.on('track-started', this.handleTrackStarted.bind(this));
20
+ this._daily.on('track-stopped', this.handleTrackStopped.bind(this));
21
+ this._daily.on('available-devices-updated', this._handleAvailableDevicesUpdated.bind(this));
22
+ this._daily.on(
23
+ // TODO, we need to add DailyEventObjectSelectedDevicesUpdated to types overrides inside react-ntive-daily-js
24
+ // @ts-ignore
25
+ 'selected-devices-updated', this._handleSelectedDevicesUpdated.bind(this));
26
+ this._daily.on('camera-error', this.handleDeviceError.bind(this));
27
+ this._daily.on('local-audio-level', this._handleLocalAudioLevel.bind(this));
28
+ this._daily.on('remote-participants-audio-level', this._handleRemoteAudioLevel.bind(this));
29
+ }
30
+ async initialize() {
31
+ if (this._initialized) {
32
+ console.warn('DailyMediaManager already initialized');
33
+ return;
34
+ }
35
+ await this._daily.startCamera({
36
+ startVideoOff: !this._camEnabled,
37
+ startAudioOff: !this._micEnabled
38
+ });
39
+ const {
40
+ devices
41
+ } = await this._daily.enumerateDevices();
42
+ const cams = devices.filter(d => d.kind === 'videoinput');
43
+ const mics = devices.filter(d => d.kind === 'audio');
44
+ const speakers = devices.filter(d => d.kind === 'audio');
45
+ this._callbacks.onAvailableCamsUpdated?.(cams);
46
+ this._callbacks.onAvailableMicsUpdated?.(mics);
47
+ this._callbacks.onAvailableSpeakersUpdated?.(speakers);
48
+ let inputDevices = await this._daily.getInputDevices();
49
+ this._selectedCam = inputDevices.camera;
50
+ this._callbacks.onCamUpdated?.(this._selectedCam);
51
+ this._selectedMic = inputDevices.mic;
52
+ this._callbacks.onMicUpdated?.(this._selectedMic);
53
+
54
+ // TODO: keeping it disabled for now
55
+ // It is not possible to use the audio observers provided by Daily
56
+ // Instantiate audio observers
57
+ /*if (!this._daily.isLocalAudioLevelObserverRunning())
58
+ await this._daily.startLocalAudioLevelObserver(100);
59
+ if (!this._daily.isRemoteParticipantsAudioLevelObserverRunning())
60
+ await this._daily.startRemoteParticipantsAudioLevelObserver(100);*/
61
+
62
+ this._initialized = true;
63
+ }
64
+ async connect() {
65
+ if (this._connected) {
66
+ console.warn('DailyMediaManager already connected');
67
+ return;
68
+ }
69
+ this._connected = true;
70
+ if (!this._initialized) {
71
+ return new Promise(resolve => {
72
+ (async () => {
73
+ this._connectResolve = resolve;
74
+ await this.initialize();
75
+ })();
76
+ });
77
+ }
78
+ }
79
+ async disconnect() {
80
+ this._daily.stopLocalAudioLevelObserver();
81
+ this._daily.stopRemoteParticipantsAudioLevelObserver();
82
+ await this._daily.leave();
83
+ this._initialized = false;
84
+ this._connected = false;
85
+ }
86
+ async getAllMics() {
87
+ let devices = (await this._daily.enumerateDevices()).devices;
88
+ return devices.filter(device => device.kind === 'audio');
89
+ }
90
+ async getAllCams() {
91
+ let devices = (await this._daily.enumerateDevices()).devices;
92
+ return devices.filter(device => device.kind === 'videoinput');
93
+ }
94
+ async getAllSpeakers() {
95
+ let devices = (await this._daily.enumerateDevices()).devices;
96
+ return devices.filter(device => device.kind === 'audio');
97
+ }
98
+ updateMic(micId) {
99
+ this._daily.setAudioDevice(micId).then(async () => {
100
+ let inputDevices = await this._daily.getInputDevices();
101
+ this._selectedMic = inputDevices.mic;
102
+ });
103
+ }
104
+ updateCam(camId) {
105
+ this._daily.setCamera(camId).then(async () => {
106
+ let inputDevices = await this._daily.getInputDevices();
107
+ this._selectedCam = inputDevices.camera;
108
+ });
109
+ }
110
+ updateSpeaker(speakerId) {
111
+ this._daily?.setAudioDevice(speakerId).then(async () => {
112
+ const devicesInUse = await this._daily.getInputDevices();
113
+ this._selectedSpeaker = devicesInUse?.speaker;
114
+ });
115
+ }
116
+ get selectedMic() {
117
+ return this._selectedMic;
118
+ }
119
+ get selectedCam() {
120
+ return this._selectedCam;
121
+ }
122
+ get selectedSpeaker() {
123
+ return this._selectedSpeaker;
124
+ }
125
+ async enableMic(enable) {
126
+ this._micEnabled = enable;
127
+ if (!this._daily.participants()?.local) return;
128
+ this._daily.setLocalAudio(enable);
129
+ }
130
+ enableCam(enable) {
131
+ this._camEnabled = enable;
132
+ this._daily.setLocalVideo(enable);
133
+ }
134
+ enableScreenShare(enable) {
135
+ if (enable) {
136
+ this._daily.startScreenShare();
137
+ } else {
138
+ this._daily.stopScreenShare();
139
+ }
140
+ }
141
+ get isCamEnabled() {
142
+ return this._daily.localVideo();
143
+ }
144
+ get isMicEnabled() {
145
+ return this._daily.localAudio();
146
+ }
147
+ get isSharingScreen() {
148
+ return this._daily.localScreenAudio() || this._daily.localScreenVideo();
149
+ }
150
+ tracks() {
151
+ const participants = this._daily.participants();
152
+ return {
153
+ local: {
154
+ audio: participants?.local?.tracks?.audio?.persistentTrack,
155
+ screenAudio: participants?.local?.tracks?.screenAudio?.persistentTrack,
156
+ screenVideo: participants?.local?.tracks?.screenVideo?.persistentTrack,
157
+ video: participants?.local?.tracks?.video?.persistentTrack
158
+ }
159
+ };
160
+ }
161
+ _handleAvailableDevicesUpdated(event) {
162
+ this._callbacks.onAvailableCamsUpdated?.(event.availableDevices.filter(d => d.kind === 'videoinput'));
163
+ this._callbacks.onAvailableMicsUpdated?.(event.availableDevices.filter(d => d.kind === 'audio'));
164
+ this._callbacks.onAvailableSpeakersUpdated?.(event.availableDevices.filter(d => d.kind === 'audio'));
165
+ if (this._selectedSpeaker.deviceId === 'default') {
166
+ this.updateSpeaker('default');
167
+ }
168
+ }
169
+
170
+ // TODO, we need to add DailyEventObjectSelectedDevicesUpdated to types overrides inside react-ntive-daily-js
171
+ _handleSelectedDevicesUpdated(
172
+ // @ts-ignore
173
+ event) {
174
+ if (this._selectedCam?.deviceId !== event.devices.camera) {
175
+ this._selectedCam = event.devices.camera;
176
+ this._callbacks.onCamUpdated?.(event.devices.camera);
177
+ }
178
+ if (this._selectedMic?.deviceId !== event.devices.mic) {
179
+ this._selectedMic = event.devices.mic;
180
+ this._callbacks.onMicUpdated?.(event.devices.mic);
181
+ }
182
+ }
183
+ handleDeviceError(ev) {
184
+ const generateDeviceError = error => {
185
+ const devices = [];
186
+ switch (error.type) {
187
+ case 'permissions':
188
+ {
189
+ error.blockedMedia.forEach(d => {
190
+ devices.push(d === 'video' ? 'cam' : 'mic');
191
+ });
192
+ return new DeviceError(devices, error.type, error.msg, {
193
+ blockedBy: error.blockedBy
194
+ });
195
+ }
196
+ case 'not-found':
197
+ {
198
+ error.missingMedia.forEach(d => {
199
+ devices.push(d === 'video' ? 'cam' : 'mic');
200
+ });
201
+ return new DeviceError(devices, error.type, error.msg);
202
+ }
203
+ case 'constraints':
204
+ {
205
+ error.failedMedia.forEach(d => {
206
+ devices.push(d === 'video' ? 'cam' : 'mic');
207
+ });
208
+ return new DeviceError(devices, error.type, error.msg, {
209
+ reason: error.reason
210
+ });
211
+ }
212
+ case 'cam-in-use':
213
+ {
214
+ devices.push('cam');
215
+ return new DeviceError(devices, 'in-use', error.msg);
216
+ }
217
+ case 'mic-in-use':
218
+ {
219
+ devices.push('mic');
220
+ return new DeviceError(devices, 'in-use', error.msg);
221
+ }
222
+ case 'cam-mic-in-use':
223
+ {
224
+ devices.push('cam');
225
+ devices.push('mic');
226
+ return new DeviceError(devices, 'in-use', error.msg);
227
+ }
228
+ case 'undefined-mediadevices':
229
+ case 'unknown':
230
+ default:
231
+ {
232
+ devices.push('cam');
233
+ devices.push('mic');
234
+ return new DeviceError(devices, error.type, error.msg);
235
+ }
236
+ }
237
+ };
238
+ this._callbacks.onDeviceError?.(generateDeviceError(ev.error));
239
+ }
240
+ _handleLocalAudioLevel(ev) {
241
+ this._callbacks.onLocalAudioLevel?.(ev.audioLevel);
242
+ }
243
+ _handleRemoteAudioLevel(ev) {
244
+ const participants = this._daily.participants();
245
+ for (const participantId in ev.participantsAudioLevel) {
246
+ if (ev.participantsAudioLevel.hasOwnProperty(participantId)) {
247
+ const audioLevel = ev.participantsAudioLevel[participantId];
248
+ let participant = participants[participantId];
249
+ if (audioLevel && participant) {
250
+ this._callbacks.onRemoteAudioLevel?.(audioLevel, dailyParticipantToParticipant(participant));
251
+ }
252
+ }
253
+ }
254
+ }
255
+ async handleTrackStarted(event) {
256
+ if (!event.participant?.local) return;
257
+ if (event.track.kind === 'audio') {
258
+ if (this._connectResolve) {
259
+ this._connectResolve();
260
+ this._connectResolve = null;
261
+ }
262
+ }
263
+ this._callbacks.onTrackStarted?.(event.track, event.participant ? dailyParticipantToParticipant(event.participant) : undefined);
264
+ this._onTrackStartedCallback?.(event);
265
+ }
266
+ handleTrackStopped(event) {
267
+ if (!event.participant?.local) return;
268
+ this._callbacks.onTrackStopped?.(event.track, event.participant ? dailyParticipantToParticipant(event.participant) : undefined);
269
+ this._onTrackStoppedCallback?.(event);
270
+ }
271
+ }
272
+ const dailyParticipantToParticipant = p => ({
273
+ id: p.user_id,
274
+ local: p.local,
275
+ name: p.user_name
276
+ });
277
+ //# sourceMappingURL=dailyMediaManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MediaManager","Daily","DeviceError","DailyMediaManager","_selectedCam","_selectedMic","_selectedSpeaker","constructor","onTrackStartedCallback","onTrackStoppedCallback","_initialized","_connected","_connectResolve","_onTrackStartedCallback","_onTrackStoppedCallback","_supportsScreenShare","_daily","getCallInstance","createCallObject","on","handleTrackStarted","bind","handleTrackStopped","_handleAvailableDevicesUpdated","_handleSelectedDevicesUpdated","handleDeviceError","_handleLocalAudioLevel","_handleRemoteAudioLevel","initialize","console","warn","startCamera","startVideoOff","_camEnabled","startAudioOff","_micEnabled","devices","enumerateDevices","cams","filter","d","kind","mics","speakers","_callbacks","onAvailableCamsUpdated","onAvailableMicsUpdated","onAvailableSpeakersUpdated","inputDevices","getInputDevices","camera","onCamUpdated","mic","onMicUpdated","connect","Promise","resolve","disconnect","stopLocalAudioLevelObserver","stopRemoteParticipantsAudioLevelObserver","leave","getAllMics","device","getAllCams","getAllSpeakers","updateMic","micId","setAudioDevice","then","updateCam","camId","setCamera","updateSpeaker","speakerId","devicesInUse","speaker","selectedMic","selectedCam","selectedSpeaker","enableMic","enable","participants","local","setLocalAudio","enableCam","setLocalVideo","enableScreenShare","startScreenShare","stopScreenShare","isCamEnabled","localVideo","isMicEnabled","localAudio","isSharingScreen","localScreenAudio","localScreenVideo","tracks","audio","persistentTrack","screenAudio","screenVideo","video","event","availableDevices","deviceId","ev","generateDeviceError","error","type","blockedMedia","forEach","push","msg","blockedBy","missingMedia","failedMedia","reason","onDeviceError","onLocalAudioLevel","audioLevel","participantId","participantsAudioLevel","hasOwnProperty","participant","onRemoteAudioLevel","dailyParticipantToParticipant","track","onTrackStarted","undefined","onTrackStopped","p","id","user_id","name","user_name"],"sourceRoot":"../../src","sources":["dailyMediaManager.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ import { DailyMediaManager } from "./dailyMediaManager.js";
4
+ export { DailyMediaManager };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DailyMediaManager"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,wBAAqB;AACvD,SAASA,iBAAiB","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,41 @@
1
+ import { MediaManager, TrackEvent } from '@pipecat-ai/react-native-small-webrtc-transport';
2
+ import { DailyEventObjectTrack } from '@daily-co/react-native-daily-js';
3
+ import { Tracks } from '@pipecat-ai/client-js';
4
+ import { MediaDeviceInfo } from '@daily-co/react-native-webrtc';
5
+ export declare class DailyMediaManager extends MediaManager {
6
+ private _daily;
7
+ private _initialized;
8
+ private _connected;
9
+ private _connectResolve;
10
+ private _selectedCam;
11
+ private _selectedMic;
12
+ private _selectedSpeaker;
13
+ constructor(onTrackStartedCallback?: (event: TrackEvent) => void, onTrackStoppedCallback?: (event: TrackEvent) => void);
14
+ initialize(): Promise<void>;
15
+ connect(): Promise<void>;
16
+ disconnect(): Promise<void>;
17
+ getAllMics(): Promise<MediaDeviceInfo[]>;
18
+ getAllCams(): Promise<MediaDeviceInfo[]>;
19
+ getAllSpeakers(): Promise<MediaDeviceInfo[]>;
20
+ updateMic(micId: string): void;
21
+ updateCam(camId: string): void;
22
+ updateSpeaker(speakerId: string): void;
23
+ get selectedMic(): MediaDeviceInfo | Record<string, never>;
24
+ get selectedCam(): MediaDeviceInfo | Record<string, never>;
25
+ get selectedSpeaker(): MediaDeviceInfo | Record<string, never>;
26
+ enableMic(enable: boolean): Promise<void>;
27
+ enableCam(enable: boolean): void;
28
+ enableScreenShare(enable: boolean): void;
29
+ get isCamEnabled(): boolean;
30
+ get isMicEnabled(): boolean;
31
+ get isSharingScreen(): boolean;
32
+ tracks(): Tracks;
33
+ private _handleAvailableDevicesUpdated;
34
+ private _handleSelectedDevicesUpdated;
35
+ private handleDeviceError;
36
+ private _handleLocalAudioLevel;
37
+ private _handleRemoteAudioLevel;
38
+ protected handleTrackStarted(event: DailyEventObjectTrack): Promise<void>;
39
+ protected handleTrackStopped(event: DailyEventObjectTrack): void;
40
+ }
41
+ //# sourceMappingURL=dailyMediaManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dailyMediaManager.d.ts","sourceRoot":"","sources":["../../../src/dailyMediaManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,UAAU,EACX,MAAM,iDAAiD,CAAC;AAEzD,OAAc,EAQZ,qBAAqB,EAGtB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAIL,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,MAAM,CAAY;IAE1B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,eAAe,CAAqD;IAE5E,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,gBAAgB,CAA+C;gBAGrE,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EACpD,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI;IAiChD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIxC,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIxC,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAKlD,SAAS,CAAC,KAAK,EAAE,MAAM;IAMvB,SAAS,CAAC,KAAK,EAAE,MAAM;IAMvB,aAAa,CAAC,SAAS,EAAE,MAAM;IAO/B,IAAI,WAAW,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAEzD;IACD,IAAI,WAAW,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAEzD;IACD,IAAI,eAAe,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAE7D;IAEK,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIhC,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAQxC,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,MAAM,IAAI,MAAM;IAYhB,OAAO,CAAC,8BAA8B;IAkBtC,OAAO,CAAC,6BAA6B;IAcrC,OAAO,CAAC,iBAAiB;IAqDzB,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,uBAAuB;cAmBf,kBAAkB,CAAC,KAAK,EAAE,qBAAqB;IAiB/D,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,qBAAqB;CAU1D"}
@@ -0,0 +1,3 @@
1
+ import { DailyMediaManager } from './dailyMediaManager';
2
+ export { DailyMediaManager };
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,41 @@
1
+ import { MediaManager, TrackEvent } from '@pipecat-ai/react-native-small-webrtc-transport';
2
+ import { DailyEventObjectTrack } from '@daily-co/react-native-daily-js';
3
+ import { Tracks } from '@pipecat-ai/client-js';
4
+ import { MediaDeviceInfo } from '@daily-co/react-native-webrtc';
5
+ export declare class DailyMediaManager extends MediaManager {
6
+ private _daily;
7
+ private _initialized;
8
+ private _connected;
9
+ private _connectResolve;
10
+ private _selectedCam;
11
+ private _selectedMic;
12
+ private _selectedSpeaker;
13
+ constructor(onTrackStartedCallback?: (event: TrackEvent) => void, onTrackStoppedCallback?: (event: TrackEvent) => void);
14
+ initialize(): Promise<void>;
15
+ connect(): Promise<void>;
16
+ disconnect(): Promise<void>;
17
+ getAllMics(): Promise<MediaDeviceInfo[]>;
18
+ getAllCams(): Promise<MediaDeviceInfo[]>;
19
+ getAllSpeakers(): Promise<MediaDeviceInfo[]>;
20
+ updateMic(micId: string): void;
21
+ updateCam(camId: string): void;
22
+ updateSpeaker(speakerId: string): void;
23
+ get selectedMic(): MediaDeviceInfo | Record<string, never>;
24
+ get selectedCam(): MediaDeviceInfo | Record<string, never>;
25
+ get selectedSpeaker(): MediaDeviceInfo | Record<string, never>;
26
+ enableMic(enable: boolean): Promise<void>;
27
+ enableCam(enable: boolean): void;
28
+ enableScreenShare(enable: boolean): void;
29
+ get isCamEnabled(): boolean;
30
+ get isMicEnabled(): boolean;
31
+ get isSharingScreen(): boolean;
32
+ tracks(): Tracks;
33
+ private _handleAvailableDevicesUpdated;
34
+ private _handleSelectedDevicesUpdated;
35
+ private handleDeviceError;
36
+ private _handleLocalAudioLevel;
37
+ private _handleRemoteAudioLevel;
38
+ protected handleTrackStarted(event: DailyEventObjectTrack): Promise<void>;
39
+ protected handleTrackStopped(event: DailyEventObjectTrack): void;
40
+ }
41
+ //# sourceMappingURL=dailyMediaManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dailyMediaManager.d.ts","sourceRoot":"","sources":["../../../src/dailyMediaManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,UAAU,EACX,MAAM,iDAAiD,CAAC;AAEzD,OAAc,EAQZ,qBAAqB,EAGtB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAIL,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,MAAM,CAAY;IAE1B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,eAAe,CAAqD;IAE5E,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,gBAAgB,CAA+C;gBAGrE,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EACpD,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI;IAiChD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIxC,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIxC,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAKlD,SAAS,CAAC,KAAK,EAAE,MAAM;IAMvB,SAAS,CAAC,KAAK,EAAE,MAAM;IAMvB,aAAa,CAAC,SAAS,EAAE,MAAM;IAO/B,IAAI,WAAW,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAEzD;IACD,IAAI,WAAW,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAEzD;IACD,IAAI,eAAe,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAE7D;IAEK,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIhC,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAQxC,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,MAAM,IAAI,MAAM;IAYhB,OAAO,CAAC,8BAA8B;IAkBtC,OAAO,CAAC,6BAA6B;IAcrC,OAAO,CAAC,iBAAiB;IAqDzB,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,uBAAuB;cAmBf,kBAAkB,CAAC,KAAK,EAAE,qBAAqB;IAiB/D,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,qBAAqB;CAU1D"}
@@ -0,0 +1,3 @@
1
+ import { DailyMediaManager } from './dailyMediaManager';
2
+ export { DailyMediaManager };
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ {"type":"module"}
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@pipecat-ai/react-native-daily-media-manager",
3
+ "version": "0.0.1",
4
+ "license": "BSD-2-Clause",
5
+ "description": "React Native Daily Media manager",
6
+ "main": "./lib/commonjs/index.js",
7
+ "module": "./lib/module/index.js",
8
+ "types": "./lib/typescript/module/index.d.ts",
9
+ "files": [
10
+ "lib",
11
+ "package.json",
12
+ "README.md"
13
+ ],
14
+ "scripts": {
15
+ "typecheck": "tsc",
16
+ "lint": "eslint \"**/*.{js,ts,tsx}\"",
17
+ "clean": "del-cli lib",
18
+ "prepare": "bob build",
19
+ "build": "bob build",
20
+ "tag": "../../scripts/tag",
21
+ "prepublishOnly": "npm run tag"
22
+ },
23
+ "keywords": [
24
+ "react-native",
25
+ "ios",
26
+ "android"
27
+ ],
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/pipecat-ai/pipecat-client-react-native-transports.git"
31
+ },
32
+ "bugs": {
33
+ "url": "https://github.com/pipecat-ai/pipecat-client-react-native-transports/issues"
34
+ },
35
+ "homepage": "https://github.com/pipecat-ai/pipecat-client-react-native-transports#readme",
36
+ "publishConfig": {
37
+ "registry": "https://registry.npmjs.org/"
38
+ },
39
+ "prettier": {
40
+ "quoteProps": "consistent",
41
+ "singleQuote": true,
42
+ "tabWidth": 2,
43
+ "trailingComma": "es5",
44
+ "useTabs": false
45
+ },
46
+ "react-native-builder-bob": {
47
+ "source": "src",
48
+ "output": "lib",
49
+ "targets": [
50
+ [
51
+ "commonjs",
52
+ {
53
+ "esm": true
54
+ }
55
+ ],
56
+ [
57
+ "module",
58
+ {
59
+ "esm": true
60
+ }
61
+ ],
62
+ [
63
+ "typescript",
64
+ {
65
+ "project": "tsconfig.build.json"
66
+ }
67
+ ]
68
+ ]
69
+ },
70
+ "peerDependencies": {
71
+ "@daily-co/react-native-daily-js": "^0.82.0",
72
+ "@daily-co/react-native-webrtc": "^124.0.6-daily.1",
73
+ "@pipecat-ai/react-native-small-webrtc-transport": "*",
74
+ "@react-native-async-storage/async-storage": "^1.24.0",
75
+ "react-native": "*",
76
+ "react-native-background-timer": "^2.4.1",
77
+ "react-native-get-random-values": "^1.11.0"
78
+ },
79
+ "devDependencies": {
80
+ "@daily-co/react-native-daily-js": "^0.82.0",
81
+ "@daily-co/react-native-webrtc": "^124.0.6-daily.1",
82
+ "@pipecat-ai/react-native-small-webrtc-transport": "*",
83
+ "@react-native-async-storage/async-storage": "^1.24.0",
84
+ "del-cli": "^6.0.0",
85
+ "react-native-background-timer": "^2.4.1",
86
+ "react-native-builder-bob": "^0.40.13",
87
+ "react-native-get-random-values": "^1.11.0",
88
+ "typescript": "*"
89
+ }
90
+ }