From 53f536b36899aef20c8c10fc2c41f86325537bb8 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 27 Apr 2026 07:55:56 +0100 Subject: [PATCH] fix: avoid slack startup auth rejection leak --- extensions/slack/src/monitor/provider-support.ts | 4 ++++ extensions/slack/src/monitor/provider.interop.test.ts | 2 ++ 2 files changed, 6 insertions(+) diff --git a/extensions/slack/src/monitor/provider-support.ts b/extensions/slack/src/monitor/provider-support.ts index 5882d176a13..3f3eed65bdb 100644 --- a/extensions/slack/src/monitor/provider-support.ts +++ b/extensions/slack/src/monitor/provider-support.ts @@ -186,6 +186,10 @@ export function createSlackBoltApp(params: { receiver, clientOptions: params.clientOptions, ignoreSelf: false, + // Bolt eagerly starts an auth.test promise in the constructor when token + // verification is enabled. Invalid tokens can reject before any listener + // consumes that promise, tripping OpenClaw's fatal unhandled-rejection path. + tokenVerificationEnabled: false, }); app.use(async (args) => { if (shouldSkipOpenClawSlackSelfEvent(args)) { diff --git a/extensions/slack/src/monitor/provider.interop.test.ts b/extensions/slack/src/monitor/provider.interop.test.ts index 0015c6fe5f9..f35a56af05c 100644 --- a/extensions/slack/src/monitor/provider.interop.test.ts +++ b/extensions/slack/src/monitor/provider.interop.test.ts @@ -168,6 +168,7 @@ describe("createSlackBoltApp", () => { receiver, clientOptions, ignoreSelf: false, + tokenVerificationEnabled: false, }); expect((app as unknown as FakeApp).middleware).toHaveLength(1); }); @@ -198,6 +199,7 @@ describe("createSlackBoltApp", () => { receiver, clientOptions, ignoreSelf: false, + tokenVerificationEnabled: false, }); expect((app as unknown as FakeApp).middleware).toHaveLength(1); });