mirror of
https://github.com/moltbot/moltbot.git
synced 2026-05-13 23:56:07 +00:00
fix: clean up slack socket waiters on start hooks
This commit is contained in:
@@ -19,6 +19,10 @@ class FakeEmitter {
|
||||
listener(...args);
|
||||
}
|
||||
}
|
||||
|
||||
listenerCount(event: string) {
|
||||
return this.listeners.get(event)?.size ?? 0;
|
||||
}
|
||||
}
|
||||
|
||||
describe("slack socket reconnect helpers", () => {
|
||||
@@ -117,6 +121,28 @@ describe("slack socket reconnect helpers", () => {
|
||||
expect(onStarted).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("cancels the disconnect waiter when onStarted throws", async () => {
|
||||
const client = new FakeEmitter();
|
||||
const app = {
|
||||
receiver: { client },
|
||||
start: vi.fn().mockResolvedValue(undefined),
|
||||
};
|
||||
const err = new Error("status sink failed");
|
||||
|
||||
await expect(
|
||||
__testing.startSlackSocketAndWaitForDisconnect({
|
||||
app: app as never,
|
||||
onStarted: () => {
|
||||
throw err;
|
||||
},
|
||||
}),
|
||||
).rejects.toThrow("status sink failed");
|
||||
|
||||
expect(client.listenerCount("disconnected")).toBe(0);
|
||||
expect(client.listenerCount("unable_to_socket_mode_start")).toBe(0);
|
||||
expect(client.listenerCount("error")).toBe(0);
|
||||
});
|
||||
|
||||
it("preserves error payload from unable_to_socket_mode_start event", async () => {
|
||||
const client = new FakeEmitter();
|
||||
const app = { receiver: { client } };
|
||||
|
||||
@@ -245,18 +245,18 @@ async function startSlackSocketAndWaitForDisconnect(params: {
|
||||
const disconnectWaiter = createSlackSocketDisconnectWaiter(params.app, params.abortSignal);
|
||||
try {
|
||||
await Promise.resolve(params.app.start());
|
||||
if (params.abortSignal?.aborted) {
|
||||
disconnectWaiter.cancel();
|
||||
return null;
|
||||
}
|
||||
params.onStarted?.();
|
||||
const disconnect = await disconnectWaiter.promise;
|
||||
disconnectWaiter.complete();
|
||||
return disconnect;
|
||||
} catch (err) {
|
||||
disconnectWaiter.cancel();
|
||||
throw err;
|
||||
}
|
||||
if (params.abortSignal?.aborted) {
|
||||
disconnectWaiter.cancel();
|
||||
return null;
|
||||
}
|
||||
params.onStarted?.();
|
||||
const disconnect = await disconnectWaiter.promise;
|
||||
disconnectWaiter.complete();
|
||||
return disconnect;
|
||||
}
|
||||
|
||||
function resolveSlackSocketShutdownClient(app: unknown): SlackSocketShutdownClient | undefined {
|
||||
|
||||
Reference in New Issue
Block a user