voicebot-react-native-expo
Version:
This is a voicebot-react-native package of Kipps AI voice bot for React Native Expo
3 lines (2 loc) • 8.85 kB
JavaScript
;const B=require("react"),i=require("./shared-D_Ks7MZc.js"),c=require("./shared-C9EfKMR-.js"),d=require("livekit-client");function L(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const a=L(B);function _(e){const t=i.useEnsureRoom(e),n=a.useCallback(async()=>{await t.startAudio()},[t]),o=a.useMemo(()=>i.roomAudioPlaybackAllowedObservable(t),[t]),{canPlayAudio:s}=c.useObservableState(o,{canPlayAudio:t.canPlaybackAudio});return{canPlayAudio:s,startAudio:n}}function j(e){const{state:t,dispatch:n}=c.useLayoutContext().pin;return{buttonProps:a.useMemo(()=>{const{className:s}=i.setupClearPinButton();return c.mergeProps(e,{className:s,disabled:!(t!=null&&t.length),onClick:()=>{n&&n({msg:"clear_pin"})}})},[e,n,t])}}function F(e,t){const n=typeof e=="function"?e:t,o=typeof e=="string"?e:void 0,s=i.useRoomContext(),{send:r,messageObservable:u,isSendingObservable:l}=a.useMemo(()=>i.setupDataMessageHandler(s,o,n),[s,o,n]),p=c.useObservableState(u,void 0),f=c.useObservableState(l,!1);return{message:p,send:r,isSending:f}}const J={connect:!0,audio:!1,video:!1};function q(e){const{token:t,serverUrl:n,options:o,room:s,connectOptions:r,connect:u,audio:l,video:p,screen:f,onConnected:S,onDisconnected:T,onError:m,onMediaDeviceFailure:P,onEncryptionError:k,simulateParticipants:E,...C}={...J,...e};o&&s&&i.log.warn("when using a manually created room, the options object will be ignored. set the desired options directly when creating the room instead.");const[b,I]=a.useState();a.useEffect(()=>{I(s??new d.Room(o))},[s]);const x=a.useMemo(()=>{const{className:v}=i.setupLiveKitRoom();return c.mergeProps(C,{className:v})},[C]);return a.useEffect(()=>{if(!b)return;const v=()=>{const g=b.localParticipant;i.log.debug("trying to publish local tracks"),Promise.all([g.setMicrophoneEnabled(!!l,typeof l!="boolean"?l:void 0),g.setCameraEnabled(!!p,typeof p!="boolean"?p:void 0),g.setScreenShareEnabled(!!f,typeof f!="boolean"?f:void 0)]).catch(y=>{i.log.warn(y),m==null||m(y)})},O=g=>{const y=d.MediaDeviceFailure.getFailure(g);P==null||P(y)},h=g=>{k==null||k(g)};return b.on(d.RoomEvent.SignalConnected,v).on(d.RoomEvent.MediaDevicesError,O).on(d.RoomEvent.EncryptionError,h),()=>{b.off(d.RoomEvent.SignalConnected,v).off(d.RoomEvent.MediaDevicesError,O).off(d.RoomEvent.EncryptionError,h)}},[b,l,p,f,m,k,P]),a.useEffect(()=>{if(b){if(E){b.simulateParticipants({participants:{count:E},publish:{audio:!0,useRealTracks:!0}});return}if(!t){i.log.debug("no token yet");return}if(!n){i.log.warn("no livekit url provided"),m==null||m(Error("no livekit url provided"));return}u?(i.log.debug("connecting"),b.connect(n,t,r).catch(v=>{i.log.warn(v),m==null||m(v)})):(i.log.debug("disconnecting because connect is false"),b.disconnect())}},[u,t,JSON.stringify(r),b,m,n,E]),a.useEffect(()=>{if(!b)return;const v=O=>{switch(O){case d.ConnectionState.Disconnected:T&&T();break;case d.ConnectionState.Connected:S&&S();break}};return b.on(d.RoomEvent.ConnectionStateChanged,v),()=>{b.off(d.RoomEvent.ConnectionStateChanged,v)}},[t,S,T,b]),a.useEffect(()=>{if(b)return()=>{i.log.info("disconnecting on onmount"),b.disconnect()}},[b]),{room:b,htmlProps:x}}function U(e={}){let t=c.useMaybeParticipantContext();e.participant&&(t=e.participant);const n=a.useMemo(()=>i.participantInfoObserver(t),[t]),{identity:o,name:s,metadata:r}=c.useObservableState(n,{name:t==null?void 0:t.name,identity:t==null?void 0:t.identity,metadata:t==null?void 0:t.metadata});return{identity:o,name:s,metadata:r}}function $(e={}){const t=c.useEnsureParticipant(e.participant),n=a.useMemo(()=>i.participantPermissionObserver(t),[t]);return c.useObservableState(n,t.permissions)}function R(e={}){const t=i.useEnsureRoom(e.room),[n,o]=a.useState([]);return a.useEffect(()=>{const s=i.connectedParticipantsObserver(t,{additionalRoomEvents:e.updateOnlyOn}).subscribe(o);return()=>s.unsubscribe()},[t,JSON.stringify(e.updateOnlyOn)]),n}function z(e={}){const t=R(e),{localParticipant:n}=i.useLocalParticipant(e);return a.useMemo(()=>[n,...t],[n,t])}function V(e,t={}){const n=i.useRoomContext(),[o]=a.useState(t.updateOnlyOn),s=a.useMemo(()=>typeof e=="string"?i.connectedParticipantObserver(n,e,{additionalEvents:o}):i.participantByIdentifierObserver(n,e,{additionalEvents:o}),[n,JSON.stringify(e),o]),[r,u]=a.useState({p:void 0});return a.useEffect(()=>{const l=s.subscribe(p=>u({p}));return()=>l.unsubscribe()},[s]),r.p}function K(e={}){const t=i.useEnsureRoom(e.room),n=a.useMemo(()=>i.roomInfoObserver(t),[t]),{name:o,metadata:s}=c.useObservableState(n,{name:t.name,metadata:t.metadata});return{name:o,metadata:s}}function A(){const e=i.useRoomContext(),t=a.useMemo(()=>i.activeSpeakerObserver(e),[e]);return c.useObservableState(t,e.activeSpeakers)}function W(e){const[t,n]=a.useState(i.sortParticipants(e)),o=A();return a.useEffect(()=>{n(i.sortParticipants(e))},[o,e]),t}function G(e,t,n={}){const[o,s]=a.useState(void 0);return a.useEffect(()=>{var u;if(e===void 0)throw Error("token endpoint needs to be defined");if(((u=n.userInfo)==null?void 0:u.identity)===void 0)return;(async()=>{i.log.debug("fetching token");const l=new URLSearchParams({...n.userInfo,roomName:t}),p=await fetch(`${e}?${l.toString()}`);if(!p.ok){i.log.error(`Could not fetch token. Server responded with status ${p.status}: ${p.statusText}`);return}const{accessToken:f}=await p.json();s(f)})()},[e,t,JSON.stringify(n)]),o}function H(e){const[t,n]=a.useState(i.getTrackByIdentifier(e)),{trackObserver:o}=a.useMemo(()=>i.setupMediaTrack(e),[e.participant.sid??e.participant.identity,e.source]);return a.useEffect(()=>{const s=o.subscribe(r=>{n(r)});return()=>s==null?void 0:s.unsubscribe()},[o]),{participant:e.participant,source:e.source??d.Track.Source.Unknown,publication:t}}function Q(e,t){const n=c.useEnsureParticipant(t);return H({name:e,participant:n})}function w(e,t){const n=i.useRoomContext(),o=c.useMaybeParticipantContext(),s=t?n.getParticipantByIdentity(t):o,r=a.useMemo(()=>s?i.participantTracksObservable(s,{sources:e}):void 0,[s==null?void 0:s.sid,s==null?void 0:s.identity,JSON.stringify(e)]);return c.useObservableState(r,[])}function X(e){var n,o,s;const t=a.useMemo(()=>{var r;return(r=e==null?void 0:e.publication)!=null&&r.track?i.trackSyncTimeObserver(e==null?void 0:e.publication.track):void 0},[(n=e==null?void 0:e.publication)==null?void 0:n.track]);return c.useObservableState(t,{timestamp:Date.now(),rtpTimestamp:(s=(o=e==null?void 0:e.publication)==null?void 0:o.track)==null?void 0:s.rtpTimestamp})}const Y={bufferSize:100};function D(e,t){const n={...Y,...t},[o,s]=a.useState([]),r=X(e),u=l=>{var p;(p=n.onTranscription)==null||p.call(n,l),s(f=>i.dedupeSegments(f,l.map(S=>i.addMediaTimestampToTranscription(S,r)),n.bufferSize))};return a.useEffect(()=>{if(!(e!=null&&e.publication))return;const l=i.trackTranscriptionObserver(e.publication).subscribe(p=>{u(...p)});return()=>{l.unsubscribe()}},[e&&i.getTrackReferenceId(e),u]),{segments:o}}function N(e={}){const t=c.useMaybeParticipantContext(),n=e.participant??t,o=a.useMemo(()=>i.participantAttributesObserver(n),[n]);return c.useObservableState(o,{attributes:n==null?void 0:n.attributes})}function Z(e,t={}){const n=c.useEnsureParticipant(t.participant),[o,s]=a.useState(n.attributes[e]);return a.useEffect(()=>{if(!n)return;const r=i.participantAttributesObserver(n).subscribe(u=>{u.changed[e]!==void 0&&s(u.attributes[e])});return()=>{r.unsubscribe()}},[n,e]),o}const M="lk.agent.state";function ee(){const e=R().find(u=>u.kind===d.ParticipantKind.AGENT),t=w([d.Track.Source.Microphone],e==null?void 0:e.identity)[0],{segments:n}=D(t),o=c.useConnectionState(),{attributes:s}=N({participant:e}),r=a.useMemo(()=>o===d.ConnectionState.Disconnected?"disconnected":o===d.ConnectionState.Connecting||!e||!(s!=null&&s[M])?"connecting":s[M],[s,e,o]);return{agent:e,state:r,audioTrack:t,agentTranscriptions:n,agentAttributes:s}}function te(e){const t=i.useEnsureRoom(e),n=c.useConnectionState(t),o=a.useMemo(()=>i.recordingStatusObservable(t),[t,n]);return c.useObservableState(o,t.isRecording)}exports.useAudioPlayback=_;exports.useClearPinButton=j;exports.useDataChannel=F;exports.useIsRecording=te;exports.useLiveKitRoom=q;exports.useParticipantAttribute=Z;exports.useParticipantAttributes=N;exports.useParticipantInfo=U;exports.useParticipantPermissions=$;exports.useParticipantTracks=w;exports.useParticipants=z;exports.useRemoteParticipant=V;exports.useRemoteParticipants=R;exports.useRoomInfo=K;exports.useSortedParticipants=W;exports.useSpeakingParticipants=A;exports.useToken=G;exports.useTrackByName=Q;exports.useTrackTranscription=D;exports.useVoiceAssistant=ee;
//# sourceMappingURL=shared-BPsc5SeK.js.map