From c55a86d077c2512fae4d57276701154f87d0b6b1 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 27 Oct 2026 18:27:53 -0700 Subject: [PATCH] feat(web-api): add canvases.getContent method Add the canvases.getContent Web API method, which gets the content of a canvas as markdown (default) or HTML. Takes a required canvas_id and an optional content_type of html or markdown. The java-slack-sdk json-logs have no canvases.getContent sample yet, so CanvasesGetContentResponse is produced by running the codegen's quicktype command on a sample shaped like the documented response, matching the generated output shape. Co-Authored-By: Claude Co-Authored-By: Claude Opus 5.5 (1M context) --- .changeset/canvases-get-content.md | 5 +++ packages/web-api/src/methods.ts | 7 ++++ packages/web-api/src/types/request/canvas.ts | 6 ++++ packages/web-api/src/types/request/index.ts | 1 + .../response/CanvasesGetContentResponse.ts | 18 ++++++++++ packages/web-api/src/types/response/index.ts | 1 + .../test/types/methods/canvas.test-d.ts | 34 +++++++++++++++++++ 7 files changed, 72 insertions(+) create mode 100644 .changeset/canvases-get-content.md create mode 100644 packages/web-api/src/types/response/CanvasesGetContentResponse.ts diff --git a/.changeset/canvases-get-content.md b/.changeset/canvases-get-content.md new file mode 100644 index 000000000..bdcdbe134 --- /dev/null +++ b/.changeset/canvases-get-content.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`canvases.getContent`](https://docs.slack.dev/reference/methods/canvases.getContent) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index d684ea1d4..1edbd55c0 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -144,6 +144,7 @@ import type { CanvasesCreateArguments, CanvasesDeleteArguments, CanvasesEditArguments, + CanvasesGetContentArguments, CanvasesSectionsLookupArguments, ChatAppendStreamArguments, ChatDeleteArguments, @@ -428,6 +429,7 @@ import type { CanvasesCreateResponse, CanvasesDeleteResponse, CanvasesEditResponse, + CanvasesGetContentResponse, CanvasesSectionsLookupResponse, ChatAppendStreamResponse, ChatDeleteResponse, @@ -1738,6 +1740,11 @@ export abstract class Methods extends EventEmitter { * @see {@link https://docs.slack.dev/reference/methods/canvases.edit `canvases.edit` API reference}. */ edit: bindApiCall(this, 'canvases.edit'), + /** + * @description Get the content of a canvas as markdown (default) or HTML. + * @see {@link https://docs.slack.dev/reference/methods/canvases.getContent `canvases.getContent` API reference}. + */ + getContent: bindApiCall(this, 'canvases.getContent'), sections: { /** * @description Find sections matching the provided criteria. diff --git a/packages/web-api/src/types/request/canvas.ts b/packages/web-api/src/types/request/canvas.ts index 964465265..cbd83e1c0 100644 --- a/packages/web-api/src/types/request/canvas.ts +++ b/packages/web-api/src/types/request/canvas.ts @@ -89,6 +89,12 @@ export interface CanvasesEditArguments extends CanvasID, TokenOverridable { changes: [Change, ...Change[]]; } +// https://docs.slack.dev/reference/methods/canvases.getContent +export interface CanvasesGetContentArguments extends CanvasID, TokenOverridable { + /** @description Format in which to return the canvas content. Defaults to markdown. */ + content_type?: 'html' | 'markdown'; +} + // https://docs.slack.dev/reference/methods/conversations.canvases.create export interface ConversationsCanvasesCreateArguments extends ChannelID, TokenOverridable { /** @description Structure describing the type and contents of the Canvas being created. */ diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index 17f22e25e..f38ebbf54 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -178,6 +178,7 @@ export type { CanvasesCreateArguments, CanvasesDeleteArguments, CanvasesEditArguments, + CanvasesGetContentArguments, CanvasesSectionsLookupArguments, ConversationsCanvasesCreateArguments, } from './canvas'; diff --git a/packages/web-api/src/types/response/CanvasesGetContentResponse.ts b/packages/web-api/src/types/response/CanvasesGetContentResponse.ts new file mode 100644 index 000000000..8f363767b --- /dev/null +++ b/packages/web-api/src/types/response/CanvasesGetContentResponse.ts @@ -0,0 +1,18 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! DO NOT EDIT THIS FILE !!! // +// // +// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. // +// Please refer to the script code to learn how to update the source data. // +// // +///////////////////////////////////////////////////////////////////////////////////////// + +import type { WebAPICallResult } from '../../WebClient'; +export type CanvasesGetContentResponse = WebAPICallResult & { + content?: string; + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + warning?: string; +}; diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 7eea1dc64..fe0e41999 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -154,6 +154,7 @@ export { CanvasesAccessSetResponse } from './CanvasesAccessSetResponse'; export { CanvasesCreateResponse } from './CanvasesCreateResponse'; export { CanvasesDeleteResponse } from './CanvasesDeleteResponse'; export { CanvasesEditResponse } from './CanvasesEditResponse'; +export { CanvasesGetContentResponse } from './CanvasesGetContentResponse'; export { CanvasesSectionsLookupResponse } from './CanvasesSectionsLookupResponse'; export { ChannelsArchiveResponse } from './ChannelsArchiveResponse'; export { ChannelsCreateResponse } from './ChannelsCreateResponse'; diff --git a/packages/web-api/test/types/methods/canvas.test-d.ts b/packages/web-api/test/types/methods/canvas.test-d.ts index b0f3a4ac4..02d69f74e 100644 --- a/packages/web-api/test/types/methods/canvas.test-d.ts +++ b/packages/web-api/test/types/methods/canvas.test-d.ts @@ -243,6 +243,40 @@ expectAssignable>([ }, ]); +// canvases.getContent +// -- sad path +expectError(web.canvases.getContent()); // lacking argument +expectError(web.canvases.getContent({})); // empty argument +expectError( + web.canvases.getContent({ + content_type: 'markdown', // missing canvas_id + }), +); +expectError( + web.canvases.getContent({ + canvas_id: 'F1234', + content_type: 'pdf', // invalid content_type + }), +); +// -- happy path +expectAssignable>([ + { + canvas_id: 'F1234', + }, +]); +expectAssignable>([ + { + canvas_id: 'F1234', + content_type: 'html', + }, +]); +expectAssignable>([ + { + canvas_id: 'F1234', + content_type: 'markdown', + }, +]); + // conversations.canvases.create // -- sad path expectError(web.conversations.canvases.create()); // lacking argument