@@ -625,6 +625,59 @@ describe("TriggerChatTransport", function () {
625625 expect ( errors [ 0 ] ?. error . message ) . toBe ( "cleanup delete failed" ) ;
626626 } ) ;
627627
628+ it ( "retries inactive cleanup and reports each persistent delete failure" , async function ( ) {
629+ const errors : TriggerChatTransportError [ ] = [ ] ;
630+ const runStore = new AlwaysFailCleanupDeleteRunStore ( ) ;
631+ runStore . set ( {
632+ chatId : "chat-inactive-delete-always-fails" ,
633+ runId : "run_inactive_delete_always_fails" ,
634+ publicAccessToken : "pk_inactive_delete_always_fails" ,
635+ streamKey : "chat-stream" ,
636+ lastEventId : "10-0" ,
637+ isActive : false ,
638+ } ) ;
639+
640+ const transport = new TriggerChatTransport ( {
641+ task : "chat-task" ,
642+ stream : "chat-stream" ,
643+ accessToken : "pk_trigger" ,
644+ runStore,
645+ onError : function onError ( error ) {
646+ errors . push ( error ) ;
647+ } ,
648+ } ) ;
649+
650+ let fetchCalls = 0 ;
651+ ( transport as any ) . fetchRunStream = async function fetchRunStream ( ) {
652+ fetchCalls += 1 ;
653+ throw new Error ( "unexpected reconnect fetch" ) ;
654+ } ;
655+
656+ const firstReconnect = await transport . reconnectToStream ( {
657+ chatId : "chat-inactive-delete-always-fails" ,
658+ } ) ;
659+ const secondReconnect = await transport . reconnectToStream ( {
660+ chatId : "chat-inactive-delete-always-fails" ,
661+ } ) ;
662+
663+ expect ( firstReconnect ) . toBeNull ( ) ;
664+ expect ( secondReconnect ) . toBeNull ( ) ;
665+ expect ( fetchCalls ) . toBe ( 0 ) ;
666+ expect ( errors ) . toHaveLength ( 2 ) ;
667+ expect ( errors [ 0 ] ) . toMatchObject ( {
668+ phase : "reconnect" ,
669+ chatId : "chat-inactive-delete-always-fails" ,
670+ runId : "run_inactive_delete_always_fails" ,
671+ } ) ;
672+ expect ( errors [ 1 ] ) . toMatchObject ( {
673+ phase : "reconnect" ,
674+ chatId : "chat-inactive-delete-always-fails" ,
675+ runId : "run_inactive_delete_always_fails" ,
676+ } ) ;
677+ expect ( errors [ 0 ] ?. error . message ) . toBe ( "cleanup delete always fails" ) ;
678+ expect ( errors [ 1 ] ?. error . message ) . toBe ( "cleanup delete always fails" ) ;
679+ } ) ;
680+
628681 it ( "retries inactive reconnect cleanup on subsequent reconnect attempts" , async function ( ) {
629682 const errors : TriggerChatTransportError [ ] = [ ] ;
630683 const runStore = new FailingCleanupDeleteRunStore ( 1 ) ;
@@ -3802,6 +3855,12 @@ class FailingCleanupDeleteValueRunStore extends InMemoryTriggerChatRunStore {
38023855 }
38033856}
38043857
3858+ class AlwaysFailCleanupDeleteRunStore extends InMemoryTriggerChatRunStore {
3859+ public delete ( _chatId : string ) : void {
3860+ throw new Error ( "cleanup delete always fails" ) ;
3861+ }
3862+ }
3863+
38053864class FailingCleanupSetAndDeleteRunStore extends InMemoryTriggerChatRunStore {
38063865 private setCallCount = 0 ;
38073866 public readonly setCalls : string [ ] = [ ] ;
0 commit comments