11import { useState , useEffect , useRef , useCallback } from 'react' ;
22import Vapi from '@vapi-ai/web' ;
33import * as vapiCallStorage from '../utils/vapiCallStorage' ;
4+ import type { StorageType } from '../utils/vapiCallStorage' ;
45
56export interface VapiCallState {
67 isCallActive : boolean ;
@@ -25,6 +26,7 @@ export interface UseVapiCallOptions {
2526 apiUrl ?: string ;
2627 enabled ?: boolean ;
2728 voiceAutoReconnect ?: boolean ;
29+ voiceReconnectStorage ?: StorageType ;
2830 reconnectStorageKey ?: string ;
2931 onCallStart ?: ( ) => void ;
3032 onCallEnd ?: ( ) => void ;
@@ -43,6 +45,7 @@ export const useVapiCall = ({
4345 apiUrl,
4446 enabled = true ,
4547 voiceAutoReconnect = false ,
48+ voiceReconnectStorage = 'session' ,
4649 reconnectStorageKey = 'vapi_widget_web_call' ,
4750 onCallStart,
4851 onCallEnd,
@@ -98,7 +101,10 @@ export const useVapiCall = ({
98101 setIsSpeaking ( false ) ;
99102 setIsMuted ( false ) ;
100103 // Clear stored call data on successful call end
101- vapiCallStorage . clearStoredCall ( reconnectStorageKey ) ;
104+ vapiCallStorage . clearStoredCall (
105+ reconnectStorageKey ,
106+ voiceReconnectStorage
107+ ) ;
102108 callbacksRef . current . onCallEnd ?.( ) ;
103109 } ;
104110
@@ -153,7 +159,7 @@ export const useVapiCall = ({
153159 vapi . removeListener ( 'message' , handleMessage ) ;
154160 vapi . removeListener ( 'error' , handleError ) ;
155161 } ;
156- } , [ vapi , reconnectStorageKey ] ) ;
162+ } , [ vapi , reconnectStorageKey , voiceReconnectStorage ] ) ;
157163
158164 useEffect ( ( ) => {
159165 return ( ) => {
@@ -194,14 +200,26 @@ export const useVapiCall = ({
194200
195201 // Store call data for reconnection if call was successful and auto-reconnect is enabled
196202 if ( call && voiceAutoReconnect ) {
197- vapiCallStorage . storeCallData ( reconnectStorageKey , call , callOptions ) ;
203+ vapiCallStorage . storeCallData (
204+ reconnectStorageKey ,
205+ call ,
206+ callOptions ,
207+ voiceReconnectStorage
208+ ) ;
198209 }
199210 } catch ( error ) {
200211 console . error ( 'Error starting call:' , error ) ;
201212 setConnectionStatus ( 'disconnected' ) ;
202213 callbacksRef . current . onError ?.( error as Error ) ;
203214 }
204- } , [ vapi , callOptions , enabled , voiceAutoReconnect , reconnectStorageKey ] ) ;
215+ } , [
216+ vapi ,
217+ callOptions ,
218+ enabled ,
219+ voiceAutoReconnect ,
220+ voiceReconnectStorage ,
221+ reconnectStorageKey ,
222+ ] ) ;
205223
206224 const endCall = useCallback (
207225 async ( { force = false } : { force ?: boolean } = { } ) => {
@@ -250,7 +268,10 @@ export const useVapiCall = ({
250268 return ;
251269 }
252270
253- const storedData = vapiCallStorage . getStoredCallData ( reconnectStorageKey ) ;
271+ const storedData = vapiCallStorage . getStoredCallData (
272+ reconnectStorageKey ,
273+ voiceReconnectStorage
274+ ) ;
254275
255276 if ( ! storedData ) {
256277 console . warn ( 'No stored call data found for reconnection' ) ;
@@ -264,7 +285,10 @@ export const useVapiCall = ({
264285 console . warn (
265286 'CallOptions have changed since last call, clearing stored data and skipping reconnection'
266287 ) ;
267- vapiCallStorage . clearStoredCall ( reconnectStorageKey ) ;
288+ vapiCallStorage . clearStoredCall (
289+ reconnectStorageKey ,
290+ voiceReconnectStorage
291+ ) ;
268292 return ;
269293 }
270294
@@ -281,14 +305,17 @@ export const useVapiCall = ({
281305 } catch ( error ) {
282306 setConnectionStatus ( 'disconnected' ) ;
283307 console . error ( 'Reconnection failed:' , error ) ;
284- vapiCallStorage . clearStoredCall ( reconnectStorageKey ) ;
308+ vapiCallStorage . clearStoredCall (
309+ reconnectStorageKey ,
310+ voiceReconnectStorage
311+ ) ;
285312 callbacksRef . current . onError ?.( error as Error ) ;
286313 }
287- } , [ vapi , enabled , reconnectStorageKey , callOptions ] ) ;
314+ } , [ vapi , enabled , reconnectStorageKey , voiceReconnectStorage , callOptions ] ) ;
288315
289316 const clearStoredCall = useCallback ( ( ) => {
290- vapiCallStorage . clearStoredCall ( reconnectStorageKey ) ;
291- } , [ reconnectStorageKey ] ) ;
317+ vapiCallStorage . clearStoredCall ( reconnectStorageKey , voiceReconnectStorage ) ;
318+ } , [ reconnectStorageKey , voiceReconnectStorage ] ) ;
292319
293320 useEffect ( ( ) => {
294321 if ( ! vapi || ! enabled || ! voiceAutoReconnect ) {
0 commit comments