@@ -49,6 +49,16 @@ const provider: VoiceCallProvider = {
4949 getCallStatus : async ( ) => ( { status : "in-progress" , isTerminal : false } ) ,
5050} ;
5151
52+ type TwilioProviderTestDouble = VoiceCallProvider &
53+ Pick <
54+ TwilioProvider ,
55+ | "isValidStreamToken"
56+ | "registerCallStream"
57+ | "unregisterCallStream"
58+ | "hasRegisteredStream"
59+ | "clearTtsQueue"
60+ > ;
61+
5262const createConfig = ( overrides : Partial < VoiceCallConfig > = { } ) : VoiceCallConfig => {
5363 const base = VoiceCallConfigSchema . parse ( { } ) ;
5464 base . serve . port = 0 ;
@@ -115,20 +125,8 @@ function expectWebhookUrl(url: string, expectedPath: string) {
115125 expect ( parsed . port ) . not . toBe ( "0" ) ;
116126}
117127
118- type TwilioTestProvider = VoiceCallProvider &
119- Partial <
120- Pick <
121- TwilioProvider ,
122- | "clearTtsQueue"
123- | "hasRegisteredStream"
124- | "isValidStreamToken"
125- | "registerCallStream"
126- | "unregisterCallStream"
127- >
128- > ;
129-
130128function createTwilioVerificationProvider (
131- overrides : Partial < TwilioTestProvider > = { } ,
129+ overrides : Partial < TwilioProviderTestDouble > = { } ,
132130) : VoiceCallProvider {
133131 return {
134132 ...provider ,
@@ -139,8 +137,8 @@ function createTwilioVerificationProvider(
139137}
140138
141139function createTwilioStreamingProvider (
142- overrides : Partial < TwilioTestProvider > = { } ,
143- ) : TwilioTestProvider {
140+ overrides : Partial < TwilioProviderTestDouble > = { } ,
141+ ) : TwilioProviderTestDouble {
144142 return {
145143 ...createTwilioVerificationProvider ( {
146144 parseWebhookEvent : ( ) => ( { events : [ ] } ) ,
@@ -773,11 +771,7 @@ describe("VoiceCallWebhookServer stream disconnect grace", () => {
773771 } ,
774772 } ,
775773 } ) ;
776- const server = new VoiceCallWebhookServer (
777- config ,
778- manager ,
779- twilioProvider as unknown as VoiceCallProvider ,
780- ) ;
774+ const server = new VoiceCallWebhookServer ( config , manager , twilioProvider ) ;
781775 await server . start ( ) ;
782776
783777 const mediaHandler = server . getMediaStreamHandler ( ) as unknown as {
@@ -805,9 +799,11 @@ describe("VoiceCallWebhookServer stream disconnect grace", () => {
805799} ) ;
806800
807801describe ( "VoiceCallWebhookServer barge-in suppression during initial message" , ( ) => {
808- const createTwilioProvider = ( clearTtsQueue : ReturnType < typeof vi . fn > ) =>
802+ const createTwilioProvider = (
803+ clearTtsQueue : ReturnType < typeof vi . fn < TwilioProviderTestDouble [ "clearTtsQueue" ] > > ,
804+ ) =>
809805 createTwilioStreamingProvider ( {
810- clearTtsQueue : clearTtsQueue as TwilioTestProvider [ "clearTtsQueue" ] ,
806+ clearTtsQueue,
811807 } ) ;
812808
813809 const getMediaCallbacks = ( server : VoiceCallWebhookServer ) =>
@@ -829,7 +825,7 @@ describe("VoiceCallWebhookServer barge-in suppression during initial message", (
829825 initialMessage : "Hi, this is OpenClaw." ,
830826 } ;
831827
832- const clearTtsQueue = vi . fn ( ) ;
828+ const clearTtsQueue = vi . fn < TwilioProviderTestDouble [ "clearTtsQueue" ] > ( ) ;
833829 const processEvent = vi . fn ( ( event : NormalizedEvent ) => {
834830 if ( event . type === "call.speech" ) {
835831 // Mirrors manager behavior: call.speech transitions to listening.
@@ -858,11 +854,7 @@ describe("VoiceCallWebhookServer barge-in suppression during initial message", (
858854 } ,
859855 } ,
860856 } ) ;
861- const server = new VoiceCallWebhookServer (
862- config ,
863- manager ,
864- createTwilioProvider ( clearTtsQueue ) as unknown as VoiceCallProvider ,
865- ) ;
857+ const server = new VoiceCallWebhookServer ( config , manager , createTwilioProvider ( clearTtsQueue ) ) ;
866858 await server . start ( ) ;
867859 const handleInboundResponse = vi . fn ( async ( ) => { } ) ;
868860 (
@@ -913,7 +905,7 @@ describe("VoiceCallWebhookServer barge-in suppression during initial message", (
913905 initialMessage : "Hello from inbound greeting." ,
914906 } ;
915907
916- const clearTtsQueue = vi . fn ( ) ;
908+ const clearTtsQueue = vi . fn < TwilioProviderTestDouble [ "clearTtsQueue" ] > ( ) ;
917909 const manager = {
918910 getActiveCalls : ( ) => [ call ] ,
919911 getCallByProviderCallId : ( providerCallId : string ) =>
@@ -936,11 +928,7 @@ describe("VoiceCallWebhookServer barge-in suppression during initial message", (
936928 } ,
937929 } ,
938930 } ) ;
939- const server = new VoiceCallWebhookServer (
940- config ,
941- manager ,
942- createTwilioProvider ( clearTtsQueue ) as unknown as VoiceCallProvider ,
943- ) ;
931+ const server = new VoiceCallWebhookServer ( config , manager , createTwilioProvider ( clearTtsQueue ) ) ;
944932 await server . start ( ) ;
945933
946934 try {
0 commit comments