@@ -2893,6 +2893,62 @@ describe("TriggerChatTransport", function () {
28932893 expect ( runStore . get ( "chat-reconnect-cleanup-delete-failure" ) ) . toBeUndefined ( ) ;
28942894 } ) ;
28952895
2896+ it ( "preserves reconnect root failure when cleanup delete throws a non-Error value" , async function ( ) {
2897+ const errors : TriggerChatTransportError [ ] = [ ] ;
2898+ const runStore = new FailingCleanupDeleteValueRunStore ( "cleanup delete string failure" ) ;
2899+ let fetchCalls = 0 ;
2900+ runStore . set ( {
2901+ chatId : "chat-reconnect-cleanup-delete-string-failure" ,
2902+ runId : "run_reconnect_cleanup_delete_string_failure" ,
2903+ publicAccessToken : "pk_reconnect_cleanup_delete_string_failure" ,
2904+ streamKey : "chat-stream" ,
2905+ lastEventId : "100-0" ,
2906+ isActive : true ,
2907+ } ) ;
2908+
2909+ const transport = new TriggerChatTransport ( {
2910+ task : "chat-task" ,
2911+ stream : "chat-stream" ,
2912+ accessToken : "pk_trigger" ,
2913+ runStore,
2914+ onError : function onError ( error ) {
2915+ errors . push ( error ) ;
2916+ } ,
2917+ } ) ;
2918+
2919+ ( transport as any ) . fetchRunStream = async function fetchRunStream ( ) {
2920+ fetchCalls += 1 ;
2921+ throw new Error ( "reconnect root cause" ) ;
2922+ } ;
2923+
2924+ const firstReconnect = await transport . reconnectToStream ( {
2925+ chatId : "chat-reconnect-cleanup-delete-string-failure" ,
2926+ } ) ;
2927+
2928+ expect ( firstReconnect ) . toBeNull ( ) ;
2929+ expect ( fetchCalls ) . toBe ( 1 ) ;
2930+ expect ( errors ) . toHaveLength ( 1 ) ;
2931+ expect ( errors [ 0 ] ) . toMatchObject ( {
2932+ phase : "reconnect" ,
2933+ chatId : "chat-reconnect-cleanup-delete-string-failure" ,
2934+ runId : "run_reconnect_cleanup_delete_string_failure" ,
2935+ } ) ;
2936+ expect ( errors [ 0 ] ?. error . message ) . toBe ( "reconnect root cause" ) ;
2937+ expect ( runStore . get ( "chat-reconnect-cleanup-delete-string-failure" ) ) . toMatchObject ( {
2938+ isActive : false ,
2939+ lastEventId : "100-0" ,
2940+ } ) ;
2941+
2942+ const secondReconnect = await transport . reconnectToStream ( {
2943+ chatId : "chat-reconnect-cleanup-delete-string-failure" ,
2944+ } ) ;
2945+
2946+ expect ( secondReconnect ) . toBeNull ( ) ;
2947+ expect ( fetchCalls ) . toBe ( 1 ) ;
2948+ expect ( errors ) . toHaveLength ( 1 ) ;
2949+ expect ( runStore . get ( "chat-reconnect-cleanup-delete-string-failure" ) ) . toBeUndefined ( ) ;
2950+ } ) ;
2951+
28962952 it ( "attempts both reconnect cleanup steps when set and delete both throw" , async function ( ) {
28972953 const errors : TriggerChatTransportError [ ] = [ ] ;
28982954 const runStore = new FailingCleanupSetAndDeleteRunStore ( ) ;
0 commit comments