From 1d570ba2d5a5dbd2ec7374b1b148cd77b166d0ff Mon Sep 17 00:00:00 2001 From: kimoto Date: Fri, 23 Oct 2026 06:20:11 +0900 Subject: [PATCH] fix(web-api): uploadV2 alt text was never saved by Slack files.uploadV2 sent image alt text to files.getUploadURLExternal as alt_text, which Slack ignores. Send it as alt_txt. The request type gains alt_txt and keeps alt_text as deprecated so existing code compiles. Co-Authored-By: Claude Opus 5.5 --- .changeset/fix-upload-image-alt-text.md | 5 +++++ packages/web-api/src/WebClient.test.ts | 3 ++- packages/web-api/src/WebClient.ts | 2 +- packages/web-api/src/types/request/files.ts | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 .changeset/fix-upload-image-alt-text.md diff --git a/.changeset/fix-upload-image-alt-text.md b/.changeset/fix-upload-image-alt-text.md new file mode 100644 index 000000000..3042370f7 --- /dev/null +++ b/.changeset/fix-upload-image-alt-text.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": patch +--- + +fix: image alt text passed to `files.uploadV2` is now saved. Before, it was sent as `alt_text`, which Slack ignores. Deprecate `alt_text` in `files.getUploadURLExternal` arguments in favor of `alt_txt` ([#2788](https://github.com/slackapi/node-slack-sdk/issues/2788)) diff --git a/packages/web-api/src/WebClient.test.ts b/packages/web-api/src/WebClient.test.ts index 6d4984f05..05c815069 100644 --- a/packages/web-api/src/WebClient.test.ts +++ b/packages/web-api/src/WebClient.test.ts @@ -1662,7 +1662,7 @@ describe('WebClient', () => { it('uploads multiple files', async () => { const scope = nock('https://slack.com') - .post('/api/files.getUploadURLExternal', { filename: 'test-png.png', length: 55292 }) + .post('/api/files.getUploadURLExternal', { filename: 'test-png.png', length: 55292, alt_txt: 'A test image' }) .reply(200, { ok: true, file_id: 'F0000000001', @@ -1717,6 +1717,7 @@ describe('WebClient', () => { { file: fs.createReadStream('./test/fixtures/test-png.png'), filename: 'test-png.png', + alt_text: 'A test image', }, ], }); diff --git a/packages/web-api/src/WebClient.ts b/packages/web-api/src/WebClient.ts index e212cf5dd..5f72a2dc3 100644 --- a/packages/web-api/src/WebClient.ts +++ b/packages/web-api/src/WebClient.ts @@ -502,7 +502,7 @@ export class WebClient extends Methods { const options = { filename: upload.filename, length: upload.length, - alt_text: upload.alt_text, + alt_txt: upload.alt_text, snippet_type: upload.snippet_type, } as FilesGetUploadURLExternalArguments; if ('token' in upload) { diff --git a/packages/web-api/src/types/request/files.ts b/packages/web-api/src/types/request/files.ts index af0794c94..77a039007 100644 --- a/packages/web-api/src/types/request/files.ts +++ b/packages/web-api/src/types/request/files.ts @@ -95,6 +95,8 @@ export interface FilesGetUploadURLExternalArguments extends TokenOverridable { /** @description Size in bytes of the file being uploaded. */ length: number; /** @description Description of image for screen-reader. */ + alt_txt?: string; + /** @deprecated Slack does not use this. Use `alt_txt`. */ alt_text?: string; /** @description Syntax type of the snippet being uploaded. E.g. `python`. */ snippet_type?: string;