From ac99b52bd3fc07d28b299f1f094f4df4ce33167d Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Mon, 10 Jun 2024 15:05:41 -0400 Subject: [PATCH 1/8] partial support for canvases.create api request types. --- packages/web-api/src/methods.ts | 9 +++++++++ packages/web-api/src/types/request/index.ts | 1 + 2 files changed, 10 insertions(+) diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index b6f176142..2f2be0021 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -355,6 +355,7 @@ import type { ChatScheduledMessagesListArguments, ChatUnfurlArguments, ChatUpdateArguments, + CanvasesCreateArguments, CallsAddArguments, CallsEndArguments, CallsInfoArguments, @@ -1337,6 +1338,14 @@ export abstract class Methods extends EventEmitter { }, }; + public readonly canvases = { + /** + * @description Create Canvas for a user. + * @see {@link https://api.slack.com/methods/canvases.create `canvases.create` API reference}. + */ + add: bindApiCall(this, 'calls.add'), + }; + public readonly chat = { /** * @description Deletes a message. diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index 50e06cbf2..d1778ebda 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -19,6 +19,7 @@ export type { DndEndDndArguments, DndEndSnoozeArguments, DndInfoArguments, DndSe export type { DialogOpenArguments } from './dialog'; export type { ConversationsAcceptSharedInviteArguments, ConversationsApproveSharedInviteArguments, ConversationsArchiveArguments, ConversationsCloseArguments, ConversationsCreateArguments, ConversationsDeclineSharedInviteArguments, ConversationsHistoryArguments, ConversationsInfoArguments, ConversationsInviteArguments, ConversationsInviteSharedArguments, ConversationsJoinArguments, ConversationsKickArguments, ConversationsLeaveArguments, ConversationsListArguments, ConversationsListConnectInvitesArguments, ConversationsMarkArguments, ConversationsMembersArguments, ConversationsOpenArguments, ConversationsRenameArguments, ConversationsRepliesArguments, ConversationsSetPurposeArguments, ConversationsSetTopicArguments, ConversationsUnarchiveArguments } from './conversations'; export type { ChatDeleteArguments, ChatDeleteScheduledMessageArguments, ChatGetPermalinkArguments, ChatMeMessageArguments, ChatPostEphemeralArguments, ChatPostMessageArguments, ChatScheduleMessageArguments, ChatScheduledMessagesListArguments, ChatUnfurlArguments, ChatUpdateArguments } from './chat'; +export type { CanvasesCreateArguments } from './canvas'; export type { CallsAddArguments, CallsEndArguments, CallsInfoArguments, CallsUpdateArguments, CallsParticipantsAddArguments, CallsParticipantsRemoveArguments } from './calls'; export type { BotsInfoArguments } from './bots'; export type { BookmarksAddArguments, BookmarksEditArguments, BookmarksListArguments, BookmarksRemoveArguments } from './bookmarks'; From 291de299544d1938edcb114c43ac5f0075cbd0cf Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Mon, 10 Jun 2024 16:09:45 -0400 Subject: [PATCH 2/8] Add canvas public API base response shapes./ --- .../response/CanvasesAccessDeleteResponse.ts | 21 ++++++++++++++++ .../response/CanvasesAccessSetResponse.ts | 22 ++++++++++++++++ .../types/response/CanvasesCreateResponse.ts | 22 ++++++++++++++++ .../types/response/CanvasesDeleteResponse.ts | 21 ++++++++++++++++ .../types/response/CanvasesEditResponse.ts | 21 ++++++++++++++++ .../CanvasesSectionsLookupResponse.ts | 25 +++++++++++++++++++ .../ConversationsCanvasesCreateResponse.ts | 22 ++++++++++++++++ packages/web-api/src/types/response/index.ts | 7 ++++++ 8 files changed, 161 insertions(+) create mode 100644 packages/web-api/src/types/response/CanvasesAccessDeleteResponse.ts create mode 100644 packages/web-api/src/types/response/CanvasesAccessSetResponse.ts create mode 100644 packages/web-api/src/types/response/CanvasesCreateResponse.ts create mode 100644 packages/web-api/src/types/response/CanvasesDeleteResponse.ts create mode 100644 packages/web-api/src/types/response/CanvasesEditResponse.ts create mode 100644 packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts create mode 100644 packages/web-api/src/types/response/ConversationsCanvasesCreateResponse.ts diff --git a/packages/web-api/src/types/response/CanvasesAccessDeleteResponse.ts b/packages/web-api/src/types/response/CanvasesAccessDeleteResponse.ts new file mode 100644 index 000000000..3c80494a5 --- /dev/null +++ b/packages/web-api/src/types/response/CanvasesAccessDeleteResponse.ts @@ -0,0 +1,21 @@ +/* eslint-disable */ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! 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 { WebAPICallResult } from '../../WebClient'; +export type CanvasesAccessDeleteResponse = WebAPICallResult & { + error?: string; + ok?: boolean; + response_metadata?: ResponseMetadata; +}; + +export interface ResponseMetadata { + acceptedScopes?: string[]; + scopes?: string[]; +} diff --git a/packages/web-api/src/types/response/CanvasesAccessSetResponse.ts b/packages/web-api/src/types/response/CanvasesAccessSetResponse.ts new file mode 100644 index 000000000..09fd3c4b6 --- /dev/null +++ b/packages/web-api/src/types/response/CanvasesAccessSetResponse.ts @@ -0,0 +1,22 @@ +/* eslint-disable */ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! 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 { WebAPICallResult } from '../../WebClient'; +export type CanvasesAccessSetResponse = WebAPICallResult & { + error?: string; + failed_to_update_channel_ids?: string[]; + ok?: boolean; + response_metadata?: ResponseMetadata; +}; + +export interface ResponseMetadata { + acceptedScopes?: string[]; + scopes?: string[]; +} diff --git a/packages/web-api/src/types/response/CanvasesCreateResponse.ts b/packages/web-api/src/types/response/CanvasesCreateResponse.ts new file mode 100644 index 000000000..39a47ce90 --- /dev/null +++ b/packages/web-api/src/types/response/CanvasesCreateResponse.ts @@ -0,0 +1,22 @@ +/* eslint-disable */ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! 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 { WebAPICallResult } from '../../WebClient'; +export type CanvasesCreateResponse = WebAPICallResult & { + canvas_id?: string; + error?: string; + ok?: boolean; + response_metadata?: ResponseMetadata; +}; + +export interface ResponseMetadata { + acceptedScopes?: string[]; + messages?: string[]; +} diff --git a/packages/web-api/src/types/response/CanvasesDeleteResponse.ts b/packages/web-api/src/types/response/CanvasesDeleteResponse.ts new file mode 100644 index 000000000..3624cdf8c --- /dev/null +++ b/packages/web-api/src/types/response/CanvasesDeleteResponse.ts @@ -0,0 +1,21 @@ +/* eslint-disable */ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! 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 { WebAPICallResult } from '../../WebClient'; +export type CanvasesDeleteResponse = WebAPICallResult & { + error?: string; + ok?: boolean; + response_metadata?: ResponseMetadata; +}; + +export interface ResponseMetadata { + acceptedScopes?: string[]; + scopes?: string[]; +} diff --git a/packages/web-api/src/types/response/CanvasesEditResponse.ts b/packages/web-api/src/types/response/CanvasesEditResponse.ts new file mode 100644 index 000000000..64a1aa64d --- /dev/null +++ b/packages/web-api/src/types/response/CanvasesEditResponse.ts @@ -0,0 +1,21 @@ +/* eslint-disable */ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! 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 { WebAPICallResult } from '../../WebClient'; +export type CanvasesEditResponse = WebAPICallResult & { + error?: string; + ok?: boolean; + response_metadata?: ResponseMetadata; +}; + +export interface ResponseMetadata { + acceptedScopes?: string[]; + scopes?: string[]; +} diff --git a/packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts b/packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts new file mode 100644 index 000000000..19db13265 --- /dev/null +++ b/packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts @@ -0,0 +1,25 @@ +/* eslint-disable */ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! 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 { WebAPICallResult } from '../../WebClient'; +export type CanvasesSectionsLookupResponse = WebAPICallResult & { + acceptedScopes?: string[]; + ok?: boolean; + response_metadata?: ResponseMetadata; + sections?: Section[]; +}; + +export interface ResponseMetadata { + scopes?: string[]; +} + +export interface Section { + id?: string; +} diff --git a/packages/web-api/src/types/response/ConversationsCanvasesCreateResponse.ts b/packages/web-api/src/types/response/ConversationsCanvasesCreateResponse.ts new file mode 100644 index 000000000..67d1f45e7 --- /dev/null +++ b/packages/web-api/src/types/response/ConversationsCanvasesCreateResponse.ts @@ -0,0 +1,22 @@ +/* eslint-disable */ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! 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 { WebAPICallResult } from '../../WebClient'; +export type ConversationsCanvasesCreateResponse = WebAPICallResult & { + canvas_id?: string; + error?: string; + ok?: boolean; + response_metadata?: ResponseMetadata; +}; + +export interface ResponseMetadata { + acceptedScopes?: string[]; + messages?: string[]; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 5035d08a9..2d3ced087 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -125,6 +125,12 @@ export { CallsInfoResponse } from './CallsInfoResponse'; export { CallsParticipantsAddResponse } from './CallsParticipantsAddResponse'; export { CallsParticipantsRemoveResponse } from './CallsParticipantsRemoveResponse'; export { CallsUpdateResponse } from './CallsUpdateResponse'; +export { CanvasesAccessDeleteResponse } from './CanvasesAccessDeleteResponse'; +export { CanvasesAccessSetResponse } from './CanvasesAccessSetResponse'; +export { CanvasesCreateResponse } from './CanvasesCreateResponse'; +export { CanvasesDeleteResponse } from './CanvasesDeleteResponse'; +export { CanvasesEditResponse } from './CanvasesEditResponse'; +export { CanvasesSectionsLookupResponse } from './CanvasesSectionsLookupResponse'; export { ChannelsArchiveResponse } from './ChannelsArchiveResponse'; export { ChannelsCreateResponse } from './ChannelsCreateResponse'; export { ChannelsHistoryResponse } from './ChannelsHistoryResponse'; @@ -153,6 +159,7 @@ export { ChatUpdateResponse } from './ChatUpdateResponse'; export { ConversationsAcceptSharedInviteResponse } from './ConversationsAcceptSharedInviteResponse'; export { ConversationsApproveSharedInviteResponse } from './ConversationsApproveSharedInviteResponse'; export { ConversationsArchiveResponse } from './ConversationsArchiveResponse'; +export { ConversationsCanvasesCreateResponse } from './ConversationsCanvasesCreateResponse'; export { ConversationsCloseResponse } from './ConversationsCloseResponse'; export { ConversationsCreateResponse } from './ConversationsCreateResponse'; export { ConversationsDeclineSharedInviteResponse } from './ConversationsDeclineSharedInviteResponse'; From 605cd25204f1168d3aacd51fdd90e2e537e9b97b Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Mon, 10 Jun 2024 17:12:30 -0400 Subject: [PATCH 3/8] add request shapes for canvas apis, add method entries for them too --- packages/web-api/src/methods.ts | 51 +++++++++++- packages/web-api/src/types/request/canvas.ts | 88 ++++++++++++++++++++ packages/web-api/src/types/request/index.ts | 2 +- 3 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 packages/web-api/src/types/request/canvas.ts diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 2f2be0021..f63299a41 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -99,6 +99,12 @@ import type { CallsUpdateResponse, CallsParticipantsAddResponse, CallsParticipantsRemoveResponse, + CanvasesAccessDeleteResponse, + CanvasesAccessSetResponse, + CanvasesCreateResponse, + CanvasesDeleteResponse, + CanvasesEditResponse, + CanvasesSectionsLookupResponse, ChatDeleteResponse, ChatDeleteScheduledMessageResponse, ChatGetPermalinkResponse, @@ -111,6 +117,7 @@ import type { ChatUpdateResponse, ConversationsAcceptSharedInviteResponse, ConversationsApproveSharedInviteResponse, + ConversationsCanvasesCreateResponse, ConversationsDeclineSharedInviteResponse, ConversationsInviteSharedResponse, ConversationsListConnectInvitesResponse, @@ -325,6 +332,7 @@ import type { ConversationsAcceptSharedInviteArguments, ConversationsApproveSharedInviteArguments, ConversationsArchiveArguments, + ConversationsCanvasesCreateArguments, ConversationsCloseArguments, ConversationsCreateArguments, ConversationsDeclineSharedInviteArguments, @@ -355,7 +363,12 @@ import type { ChatScheduledMessagesListArguments, ChatUnfurlArguments, ChatUpdateArguments, + CanvasesAccessDeleteArguments, + CanvasesAccessSetArguments, CanvasesCreateArguments, + CanvasesDeleteArguments, + CanvasesEditArguments, + CanvasesSectionsLookupArguments, CallsAddArguments, CallsEndArguments, CallsInfoArguments, @@ -1339,11 +1352,40 @@ export abstract class Methods extends EventEmitter { }; public readonly canvases = { + access: { + /** + * @description Remove access to a canvas for specified entities. + * @see {@link https://api.slack.com/methods/canvases.access.delete `canvases.access.delete` API reference}. + */ + delete: bindApiCall(this, 'canvases.access.delete'), + /** + * @description Sets the access level to a canvas for specified entities. + * @see {@link https://api.slack.com/methods/canvases.access.set `canvases.access.set` API reference}. + */ + set: bindApiCall(this, 'canvases.access.set'), + }, /** * @description Create Canvas for a user. * @see {@link https://api.slack.com/methods/canvases.create `canvases.create` API reference}. */ - add: bindApiCall(this, 'calls.add'), + create: bindApiCall(this, 'canvases.create'), + /** + * @description Deletes a canvas. + * @see {@link https://api.slack.com/methods/canvases.delete `canvases.delete` API reference}. + */ + delete: bindApiCall(this, 'canvases.delete'), + /** + * @description Update an existing canvas. + * @see {@link https://api.slack.com/methods/canvases.edit `canvases.edit` API reference}. + */ + edit: bindApiCall(this, 'canvases.edit'), + sections: { + /** + * @description Find sections matching the provided criteria. + * @see {@link https://api.slack.com/methods/canvases.sections.lookup `canvases.sections.lookup` API reference}. + */ + lookup: bindApiCall(this, 'canvases.sections.lookup'), + }, }; public readonly chat = { @@ -1432,6 +1474,13 @@ export abstract class Methods extends EventEmitter { * @see {@link https://api.slack.com/methods/conversations.archive `conversations.archive` API reference}. */ archive: bindApiCall(this, 'conversations.archive'), + canvases: { + /** + * @description Create a Channel Canvas for a channel. + * @see {@link https://api.slack.com/methods/conversations.canvases.create `conversations.canvases.create` API reference}. + */ + create: bindApiCall(this, 'canvases.sections.lookup'), + }, /** * @description Closes a direct message or multi-person direct message. * @see {@link https://api.slack.com/methods/conversations.close `conversations.close` API reference}. diff --git a/packages/web-api/src/types/request/canvas.ts b/packages/web-api/src/types/request/canvas.ts new file mode 100644 index 000000000..1226e9666 --- /dev/null +++ b/packages/web-api/src/types/request/canvas.ts @@ -0,0 +1,88 @@ +import type { ChannelIDs, TokenOverridable, UserIDs } from './common'; + +interface CanvasID { + /** @description Encoded ID of the canvas. */ + canvas_id: string; +} +interface DocumentContent { + /** @description The type of content used to describe Canvas content. Always is `markdown`. */ + type: 'markdown'; + /** @description The markdown defining the Canvas content. */ + markdown: string; +} +type SectionType = 'any_header' | 'h1' | 'h2' | 'h3'; +interface SectionTypes { + /** @description List of desired section types to filter on. Minimum of 1, maximum of 3. */ + section_types: [SectionType, ...SectionType[]]; +} +interface ContainsText { + /** @description Textual content that must appear in the section. */ + contains_text: string; +} +// At least one of `section_types` or `contains_text` must be defined. +type Criteria = (SectionTypes & Partial) | (Partial & ContainsText); +type Operation = 'insert_after' | 'insert_before' | 'insert_at_start' | 'insert_at_end' | 'replace' | 'delete'; +interface BaseChange { + /** @description The operation to perform on the canvas. */ + operation?: Operation; + /** @description The section of the canvas to target the operation on. */ + section_id?: string; + /** @description Structure describing the type and contents. */ + document_content?: DocumentContent; +} +type ChangeWithSectionAndContent = Required & { + /** @description The operation to perform on the canvas. */ + operation: 'insert_after' | 'insert_before' +}; +type ChangeWithContent = Required> & { + /** @description The operation to perform on the canvas. */ + operation: 'insert_at_start' | 'insert_at_end'; +}; +type ChangeWithContentAndOptionalSection = BaseChange & Required> & { + /** @description The operation to perform on the canvas. */ + operation: 'replace'; +}; +type ChangeWithSection = Required> & { + /** @description The operation to perform on the canvas. */ + operation: 'delete'; +}; +type Change = ChangeWithSection | ChangeWithContent | ChangeWithSectionAndContent | ChangeWithContentAndOptionalSection; + +// https://api.slack.com/methods/canvases.access.delete +export interface CanvasesAccessDeleteArguments extends CanvasID, Partial, TokenOverridable, + Partial {} + +// https://api.slack.com/methods/canvases.access.set +export interface CanvasesAccessSetArguments extends CanvasID, Partial, TokenOverridable, Partial { + /** @description Desired level of access. */ + access_level: 'read' | 'write'; +} + +// https://api.slack.com/methods/canvases.create +export interface CanvasesCreateArguments extends TokenOverridable { + /** @description Title of the newly created canvas. */ + title?: string; + /** @description Structure describing the type and contents of the Canvas being created. */ + document_content?: DocumentContent; +} + +// https://api.slack.com/methods/canvases.sections.lookup +export interface CanvasesSectionsLookupArguments extends CanvasID, TokenOverridable { + /** @description Filtering criteria. */ + criteria: Criteria; +} + +// https://api.slack.com/methods/canvases.delete +export interface CanvasesDeleteArguments extends CanvasID, TokenOverridable {} + +// https://api.slack.com/methods/canvases.edit +export interface CanvasesEditArguments extends CanvasID, TokenOverridable { + /** @description List of changes to apply to the canvas. */ + changes: [Change, ...Change[]]; +} + +// https://api.slack.com/methods/conversations.canvases.create +export interface ConversationsCanvasesCreateArguments extends CanvasID, TokenOverridable { + /** @description Structure describing the type and contents of the Canvas being created. */ + document_content?: DocumentContent; +} diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index d1778ebda..166e61177 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -19,7 +19,7 @@ export type { DndEndDndArguments, DndEndSnoozeArguments, DndInfoArguments, DndSe export type { DialogOpenArguments } from './dialog'; export type { ConversationsAcceptSharedInviteArguments, ConversationsApproveSharedInviteArguments, ConversationsArchiveArguments, ConversationsCloseArguments, ConversationsCreateArguments, ConversationsDeclineSharedInviteArguments, ConversationsHistoryArguments, ConversationsInfoArguments, ConversationsInviteArguments, ConversationsInviteSharedArguments, ConversationsJoinArguments, ConversationsKickArguments, ConversationsLeaveArguments, ConversationsListArguments, ConversationsListConnectInvitesArguments, ConversationsMarkArguments, ConversationsMembersArguments, ConversationsOpenArguments, ConversationsRenameArguments, ConversationsRepliesArguments, ConversationsSetPurposeArguments, ConversationsSetTopicArguments, ConversationsUnarchiveArguments } from './conversations'; export type { ChatDeleteArguments, ChatDeleteScheduledMessageArguments, ChatGetPermalinkArguments, ChatMeMessageArguments, ChatPostEphemeralArguments, ChatPostMessageArguments, ChatScheduleMessageArguments, ChatScheduledMessagesListArguments, ChatUnfurlArguments, ChatUpdateArguments } from './chat'; -export type { CanvasesCreateArguments } from './canvas'; +export type { CanvasesAccessDeleteArguments, CanvasesAccessSetArguments, CanvasesCreateArguments, CanvasesDeleteArguments, CanvasesEditArguments, CanvasesSectionsLookupArguments, ConversationsCanvasesCreateArguments } from './canvas'; export type { CallsAddArguments, CallsEndArguments, CallsInfoArguments, CallsUpdateArguments, CallsParticipantsAddArguments, CallsParticipantsRemoveArguments } from './calls'; export type { BotsInfoArguments } from './bots'; export type { BookmarksAddArguments, BookmarksEditArguments, BookmarksListArguments, BookmarksRemoveArguments } from './bookmarks'; From 8f10c2adf79094ef50bd736a565e7477c75c2e4b Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Tue, 11 Jun 2024 00:01:31 -0400 Subject: [PATCH 4/8] latest response data for canvas apis --- .../types/response/CanvasesAccessDeleteResponse.ts | 10 +++++----- .../types/response/CanvasesAccessSetResponse.ts | 3 +-- .../src/types/response/CanvasesCreateResponse.ts | 4 ++-- .../src/types/response/CanvasesDeleteResponse.ts | 2 -- .../src/types/response/CanvasesEditResponse.ts | 3 +-- .../response/CanvasesSectionsLookupResponse.ts | 14 -------------- .../ConversationsCanvasesCreateResponse.ts | 4 ++-- 7 files changed, 11 insertions(+), 29 deletions(-) diff --git a/packages/web-api/src/types/response/CanvasesAccessDeleteResponse.ts b/packages/web-api/src/types/response/CanvasesAccessDeleteResponse.ts index 3c80494a5..ef460b2bb 100644 --- a/packages/web-api/src/types/response/CanvasesAccessDeleteResponse.ts +++ b/packages/web-api/src/types/response/CanvasesAccessDeleteResponse.ts @@ -10,12 +10,12 @@ import { WebAPICallResult } from '../../WebClient'; export type CanvasesAccessDeleteResponse = WebAPICallResult & { - error?: string; - ok?: boolean; - response_metadata?: ResponseMetadata; + error?: string; + failed_to_update_channel_ids?: string[]; + failed_to_update_user_ids?: string[]; + ok?: boolean; + response_metadata?: ResponseMetadata; }; export interface ResponseMetadata { - acceptedScopes?: string[]; - scopes?: string[]; } diff --git a/packages/web-api/src/types/response/CanvasesAccessSetResponse.ts b/packages/web-api/src/types/response/CanvasesAccessSetResponse.ts index 09fd3c4b6..2078da900 100644 --- a/packages/web-api/src/types/response/CanvasesAccessSetResponse.ts +++ b/packages/web-api/src/types/response/CanvasesAccessSetResponse.ts @@ -12,11 +12,10 @@ import { WebAPICallResult } from '../../WebClient'; export type CanvasesAccessSetResponse = WebAPICallResult & { error?: string; failed_to_update_channel_ids?: string[]; + failed_to_update_user_ids?: string[]; ok?: boolean; response_metadata?: ResponseMetadata; }; export interface ResponseMetadata { - acceptedScopes?: string[]; - scopes?: string[]; } diff --git a/packages/web-api/src/types/response/CanvasesCreateResponse.ts b/packages/web-api/src/types/response/CanvasesCreateResponse.ts index 39a47ce90..3cd420c56 100644 --- a/packages/web-api/src/types/response/CanvasesCreateResponse.ts +++ b/packages/web-api/src/types/response/CanvasesCreateResponse.ts @@ -11,12 +11,12 @@ import { WebAPICallResult } from '../../WebClient'; export type CanvasesCreateResponse = WebAPICallResult & { canvas_id?: string; + detail?: string; error?: string; ok?: boolean; response_metadata?: ResponseMetadata; }; export interface ResponseMetadata { - acceptedScopes?: string[]; - messages?: string[]; + messages?: string[]; } diff --git a/packages/web-api/src/types/response/CanvasesDeleteResponse.ts b/packages/web-api/src/types/response/CanvasesDeleteResponse.ts index 3624cdf8c..3274c978a 100644 --- a/packages/web-api/src/types/response/CanvasesDeleteResponse.ts +++ b/packages/web-api/src/types/response/CanvasesDeleteResponse.ts @@ -16,6 +16,4 @@ export type CanvasesDeleteResponse = WebAPICallResult & { }; export interface ResponseMetadata { - acceptedScopes?: string[]; - scopes?: string[]; } diff --git a/packages/web-api/src/types/response/CanvasesEditResponse.ts b/packages/web-api/src/types/response/CanvasesEditResponse.ts index 64a1aa64d..c046831ee 100644 --- a/packages/web-api/src/types/response/CanvasesEditResponse.ts +++ b/packages/web-api/src/types/response/CanvasesEditResponse.ts @@ -10,12 +10,11 @@ import { WebAPICallResult } from '../../WebClient'; export type CanvasesEditResponse = WebAPICallResult & { + detail?: string; error?: string; ok?: boolean; response_metadata?: ResponseMetadata; }; export interface ResponseMetadata { - acceptedScopes?: string[]; - scopes?: string[]; } diff --git a/packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts b/packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts index 19db13265..989e6578c 100644 --- a/packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts +++ b/packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts @@ -9,17 +9,3 @@ ///////////////////////////////////////////////////////////////////////////////////////// import { WebAPICallResult } from '../../WebClient'; -export type CanvasesSectionsLookupResponse = WebAPICallResult & { - acceptedScopes?: string[]; - ok?: boolean; - response_metadata?: ResponseMetadata; - sections?: Section[]; -}; - -export interface ResponseMetadata { - scopes?: string[]; -} - -export interface Section { - id?: string; -} diff --git a/packages/web-api/src/types/response/ConversationsCanvasesCreateResponse.ts b/packages/web-api/src/types/response/ConversationsCanvasesCreateResponse.ts index 67d1f45e7..64ba1111c 100644 --- a/packages/web-api/src/types/response/ConversationsCanvasesCreateResponse.ts +++ b/packages/web-api/src/types/response/ConversationsCanvasesCreateResponse.ts @@ -11,12 +11,12 @@ import { WebAPICallResult } from '../../WebClient'; export type ConversationsCanvasesCreateResponse = WebAPICallResult & { canvas_id?: string; + detail?: string; error?: string; ok?: boolean; response_metadata?: ResponseMetadata; }; export interface ResponseMetadata { - acceptedScopes?: string[]; - messages?: string[]; + messages?: string[]; } From 6917c986450b53300cec9c668912a654fc3c1dc8 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Tue, 11 Jun 2024 00:12:11 -0400 Subject: [PATCH 5/8] add missing sections.lookup api response --- .../response/CanvasesSectionsLookupResponse.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts b/packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts index 989e6578c..6712e3b27 100644 --- a/packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts +++ b/packages/web-api/src/types/response/CanvasesSectionsLookupResponse.ts @@ -9,3 +9,16 @@ ///////////////////////////////////////////////////////////////////////////////////////// import { WebAPICallResult } from '../../WebClient'; +export type CanvasesSectionsLookupResponse = WebAPICallResult & { + error?: string; + ok?: boolean; + response_metadata?: ResponseMetadata; + sections?: Section[]; +}; + +export interface ResponseMetadata { +} + +export interface Section { + id?: string; +} From be3b67d13ba481eade9a9ff016495a2df52a6615 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Tue, 11 Jun 2024 00:19:02 -0400 Subject: [PATCH 6/8] woops --- packages/web-api/src/methods.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index f63299a41..2f6362574 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -1479,7 +1479,7 @@ export abstract class Methods extends EventEmitter { * @description Create a Channel Canvas for a channel. * @see {@link https://api.slack.com/methods/conversations.canvases.create `conversations.canvases.create` API reference}. */ - create: bindApiCall(this, 'canvases.sections.lookup'), + create: bindApiCall(this, 'conversations.canvases.create'), }, /** * @description Closes a direct message or multi-person direct message. From aa7ff16000db95bc9ec38b4498d76d0f58faa316 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Tue, 11 Jun 2024 07:49:19 -0400 Subject: [PATCH 7/8] make canvas.create optional args, fix up conversations.canvas.create args --- packages/web-api/src/types/request/auth.ts | 2 +- packages/web-api/src/types/request/canvas.ts | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/web-api/src/types/request/auth.ts b/packages/web-api/src/types/request/auth.ts index 04be8b86c..3da910fe3 100644 --- a/packages/web-api/src/types/request/auth.ts +++ b/packages/web-api/src/types/request/auth.ts @@ -1,5 +1,5 @@ import type { CursorPaginationEnabled, TokenOverridable } from './common'; -import { OptionalArgument } from '../helpers'; +import type { OptionalArgument } from '../helpers'; // https://api.slack.com/methods/auth.revoke export type AuthRevokeArguments = OptionalArgument; // https://api.slack.com/methods/canvases.sections.lookup export interface CanvasesSectionsLookupArguments extends CanvasID, TokenOverridable { @@ -82,7 +83,9 @@ export interface CanvasesEditArguments extends CanvasID, TokenOverridable { } // https://api.slack.com/methods/conversations.canvases.create -export interface ConversationsCanvasesCreateArguments extends CanvasID, TokenOverridable { +export interface ConversationsCanvasesCreateArguments extends TokenOverridable { + /** @description Channel ID of the channel to create a canvas in. */ + channel_id: string; /** @description Structure describing the type and contents of the Canvas being created. */ document_content?: DocumentContent; } From e5022fc229e1991d4796d99cf8404d9c2ae15616 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Tue, 11 Jun 2024 07:50:15 -0400 Subject: [PATCH 8/8] add type tests for canvas apis --- .../test/types/methods/canvas.test-d.ts | 172 ++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 packages/web-api/test/types/methods/canvas.test-d.ts diff --git a/packages/web-api/test/types/methods/canvas.test-d.ts b/packages/web-api/test/types/methods/canvas.test-d.ts new file mode 100644 index 000000000..19c6740d5 --- /dev/null +++ b/packages/web-api/test/types/methods/canvas.test-d.ts @@ -0,0 +1,172 @@ +import { expectAssignable, expectError } from 'tsd'; +import { WebClient } from '../../../src/WebClient'; + +const web = new WebClient('TOKEN'); + +// canvases.access.delete +// -- sad path +expectError(web.canvases.access.delete()); // lacking argument +expectError(web.canvases.access.delete({})); // empty argument +// -- happy path +expectAssignable>([{ + canvas_id: 'F1234', +}]); + +// canvases.access.set +// -- sad path +expectError(web.canvases.access.set()); // lacking argument +expectError(web.canvases.access.set({})); // empty argument +expectError(web.canvases.access.set({ + canvas_id: 'F1234', // missing access_level +})); +expectError(web.canvases.access.set({ + access_level: 'read', // missing canvas_id +})); +// -- happy path +expectAssignable>([{ + canvas_id: 'F1234', + access_level: 'write', +}]); + +// canvases.create +// -- sad path +expectError(web.canvases.create({ + document_content: 'heyo', // invalid document_content +})); +expectError(web.canvases.create({ + document_content: { type: 'mrkdwn', markdown: 'hihi' }, // invalid document_content +})); +// -- happy path +expectAssignable>([]); // no arg ok +expectAssignable>([{}]); // all optional args + +// canvases.sections.lookup +// -- sad path +expectError(web.canvases.sections.lookup()); // lacking argument +expectError(web.canvases.sections.lookup({})); // empty argument +expectError(web.canvases.sections.lookup({ + canvas_id: 'F1234', // missing criteria +})); +expectError(web.canvases.sections.lookup({ + criteria: { contains_text: 'hi' }, // missing canvas_id +})); +expectError(web.canvases.sections.lookup({ + canvas_id: 'F1234', + criteria: {}, // empty criteria object +})); +expectError(web.canvases.sections.lookup({ + canvas_id: 'F1234', + criteria: { + section_types: [], // need at least one section type + }, +})); +// -- happy path +expectAssignable>([{ + canvas_id: 'F1234', + criteria: { contains_text: 'hi' }, +}]); +expectAssignable>([{ + canvas_id: 'F1234', + criteria: { section_types: ['any_header'] }, +}]); +expectAssignable>([{ + canvas_id: 'F1234', + criteria: { + section_types: ['any_header'], + contains_text: 'list', + }, +}]); + +// canvases.delete +// -- sad path +expectError(web.canvases.delete()); // lacking argument +expectError(web.canvases.delete({})); // empty argument +// -- happy path +expectAssignable>([{ + canvas_id: 'F1234', +}]); + +// canvases.edit +// -- sad path +expectError(web.canvases.edit()); // lacking argument +expectError(web.canvases.edit({})); // empty argument +expectError(web.canvases.edit({ + canvas_id: 'F1234', // missing changes +})); +expectError(web.canvases.edit({ + changes: [{ + operation: 'delete', + section_id: 'S1234', + }], // missing canvas_id +})); +expectError(web.canvases.edit({ + changes: [], // minimum 1 change + canvas_id: 'F1234', +})); +expectError(web.canvases.edit({ + changes: [{ + document_content: { type: 'markdown', markdown: 'hihi' }, // missing operation + }], + canvas_id: 'F1234', +})); +expectError(web.canvases.edit({ + changes: [{ + operation: 'insert_after', + document_content: { type: 'markdown', markdown: 'hihi' }, // missing section_id for op: insert_after + }], + canvas_id: 'F1234', +})); +expectError(web.canvases.edit({ + changes: [{ + operation: 'insert_before', + section_id: '1234', // missing document_content for op: insert_before + }], + canvas_id: 'F1234', +})); +expectError(web.canvases.edit({ + changes: [{ + operation: 'insert_at_end', // missing document_content for op: insert_at_end + }], + canvas_id: 'F1234', +})); +expectError(web.canvases.edit({ + changes: [{ + operation: 'replace', // missing document_content for op: replace + section_id: '1234', + }], + canvas_id: 'F1234', +})); +expectError(web.canvases.edit({ + changes: [{ + operation: 'delete', // missing section_id for op: delete + }], + canvas_id: 'F1234', +})); +// -- happy path +expectAssignable>([{ + canvas_id: 'F1234', + changes: [{ + operation: 'insert_after', + document_content: { type: 'markdown', markdown: 'hihi' }, + section_id: '1234', + }, { + operation: 'insert_at_start', + document_content: { type: 'markdown', markdown: 'hihi' }, + }, { + operation: 'replace', + document_content: { type: 'markdown', markdown: 'hihi' }, + section_id: '1234', + }, { + operation: 'delete', + section_id: '1234', + }], +}]); + +// conversations.canvases.create +// -- sad path +expectError(web.conversations.canvases.create()); // lacking argument +expectError(web.conversations.canvases.create({})); // empty argument +// -- happy path +expectAssignable>([{ + channel_id: 'C1234', +}]);