From 3bfd093cdba945e7ebcfe79d800a4565d5303ba0 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sun, 15 Mar 2026 20:39:43 -0700 Subject: [PATCH] Slack: fail oversized merged block payloads --- .../outbound/slack.sendpayload.test.ts | 23 +++++++++++++++++++ src/channels/plugins/outbound/slack.ts | 4 +++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/channels/plugins/outbound/slack.sendpayload.test.ts b/src/channels/plugins/outbound/slack.sendpayload.test.ts index ffa86d8ed95..0bb551d0395 100644 --- a/src/channels/plugins/outbound/slack.sendpayload.test.ts +++ b/src/channels/plugins/outbound/slack.sendpayload.test.ts @@ -144,4 +144,27 @@ describe("slackOutbound sendPayload", () => { ); expect(result).toMatchObject({ channel: "slack", messageId: "sl-controls" }); }); + + it("fails when merged Slack blocks exceed the platform limit", async () => { + const { run, sendMock } = createHarness({ + payload: { + channelData: { + slack: { + blocks: Array.from({ length: 50 }, () => ({ type: "divider" })), + }, + }, + interactive: { + blocks: [ + { + type: "buttons", + buttons: [{ label: "Allow", value: "pluginbind:approval-123:o" }], + }, + ], + }, + }, + }); + + await expect(run()).rejects.toThrow(/Slack blocks cannot exceed 50 items/i); + expect(sendMock).not.toHaveBeenCalled(); + }); }); diff --git a/src/channels/plugins/outbound/slack.ts b/src/channels/plugins/outbound/slack.ts index 9785abf503a..13729acb2ee 100644 --- a/src/channels/plugins/outbound/slack.ts +++ b/src/channels/plugins/outbound/slack.ts @@ -139,7 +139,9 @@ function resolveSlackBlocks(payload: { return undefined; } if (mergedBlocks.length > SLACK_MAX_BLOCKS) { - return existingBlocks?.length ? existingBlocks : undefined; + throw new Error( + `Slack blocks cannot exceed ${SLACK_MAX_BLOCKS} items after interactive render`, + ); } return mergedBlocks; }