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