Skip to content

Commit 89ec29d

Browse files
Cover reconnect delete string failures on active cleanup path
Co-authored-by: Eric Allam <eric@trigger.dev>
1 parent 80dcd2d commit 89ec29d

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

packages/ai/src/chatTransport.test.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)