@@ -2936,6 +2936,50 @@ describe("TriggerChatTransport", function () {
29362936 expect(runStore.get("chat-reconnect-cleanup-delete-failure")).toBeUndefined();
29372937 });
29382938
2939+ it("returns null when active reconnect cleanup delete fails without onError callback", async function () {
2940+ const runStore = new FailingCleanupDeleteRunStore(1);
2941+ let fetchCalls = 0;
2942+ runStore.set({
2943+ chatId: "chat-reconnect-cleanup-delete-no-onerror",
2944+ runId: "run_reconnect_cleanup_delete_no_onerror",
2945+ publicAccessToken: "pk_reconnect_cleanup_delete_no_onerror",
2946+ streamKey: "chat-stream",
2947+ lastEventId: "100-0",
2948+ isActive: true,
2949+ });
2950+
2951+ const transport = new TriggerChatTransport({
2952+ task: "chat-task",
2953+ stream: "chat-stream",
2954+ accessToken: "pk_trigger",
2955+ runStore,
2956+ });
2957+
2958+ (transport as any).fetchRunStream = async function fetchRunStream() {
2959+ fetchCalls += 1;
2960+ throw new Error("reconnect root cause");
2961+ };
2962+
2963+ const firstReconnect = await transport.reconnectToStream({
2964+ chatId: "chat-reconnect-cleanup-delete-no-onerror",
2965+ });
2966+
2967+ expect(firstReconnect).toBeNull();
2968+ expect(fetchCalls).toBe(1);
2969+ expect(runStore.get("chat-reconnect-cleanup-delete-no-onerror")).toMatchObject({
2970+ isActive: false,
2971+ lastEventId: "100-0",
2972+ });
2973+
2974+ const secondReconnect = await transport.reconnectToStream({
2975+ chatId: "chat-reconnect-cleanup-delete-no-onerror",
2976+ });
2977+
2978+ expect(secondReconnect).toBeNull();
2979+ expect(fetchCalls).toBe(1);
2980+ expect(runStore.get("chat-reconnect-cleanup-delete-no-onerror")).toBeUndefined();
2981+ });
2982+
29392983 it("preserves reconnect root failure when cleanup delete throws a non-Error value", async function () {
29402984 const errors: TriggerChatTransportError[] = [];
29412985 const runStore = new FailingCleanupDeleteValueRunStore("cleanup delete string failure");
0 commit comments