diff --git a/.changeset/admin-slackbot-skills-list.md b/.changeset/admin-slackbot-skills-list.md new file mode 100644 index 000000000..78fa73b4f --- /dev/null +++ b/.changeset/admin-slackbot-skills-list.md @@ -0,0 +1,5 @@ +--- +"@slack/web-api": minor +--- + +feat(web-api): add [`admin.slackbot.skills.list`](https://docs.slack.dev/reference/methods/admin.slackbot.skills.list) method diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index bd8c9919e..cdbef2bc1 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -62,6 +62,7 @@ import type { AdminRolesAddAssignmentsArguments, AdminRolesListAssignmentsArguments, AdminRolesRemoveAssignmentsArguments, + AdminSlackbotSkillsListArguments, AdminTeamsAdminsListArguments, AdminTeamsCreateArguments, AdminTeamsListArguments, @@ -353,6 +354,7 @@ import type { AdminRolesAddAssignmentsResponse, AdminRolesListAssignmentsResponse, AdminRolesRemoveAssignmentsResponse, + AdminSlackbotSkillsListResponse, AdminTeamsAdminsListResponse, AdminTeamsCreateResponse, AdminTeamsListResponse, @@ -1130,6 +1132,18 @@ export abstract class Methods extends EventEmitter { 'admin.roles.removeAssignments', ), }, + slackbot: { + skills: { + /** + * @description Lists metadata for Slackbot skills owned by an organization. + * @see {@link https://docs.slack.dev/reference/methods/admin.slackbot.skills.list `admin.slackbot.skills.list` API reference}. + */ + list: bindApiCallWithOptionalArgument( + this, + 'admin.slackbot.skills.list', + ), + }, + }, teams: { admins: { /** diff --git a/packages/web-api/src/types/request/admin/slackbot.ts b/packages/web-api/src/types/request/admin/slackbot.ts new file mode 100644 index 000000000..f9a494173 --- /dev/null +++ b/packages/web-api/src/types/request/admin/slackbot.ts @@ -0,0 +1,44 @@ +import type { OptionalArgument } from '../../helpers'; + +import type { TokenOverridable } from '../common'; + +// https://docs.slack.dev/reference/methods/admin.slackbot.skills.list +export type AdminSlackbotSkillsListArguments = OptionalArgument< + TokenOverridable & { + /** @description Only return skills in this category. */ + category?: + | 'communication' + | 'customer_support' + | 'data_and_analytics' + | 'engineering' + | 'other' + | 'product_management' + | 'productivity' + | 'professional_development' + | 'project_management' + | 'sales' + | 'system' + | 'team_management'; + /** + * @description Continuation from the previous page. Keep all filters and sorting unchanged. Pages can be empty + * while a continuation remains; continue until next_cursor is empty. Changes during traversal may move results; + * pagination is not a snapshot. + */ + cursor?: string; + /** @description The maximum number of skills to return. Fewer may be returned even when more remain. */ + limit?: number; + /** @description Only return skills created by these users. Accepts U or W user IDs. */ + creator_ids?: string[]; + /** @description Filter by publication to the org catalog. */ + publish_status?: 'all' | 'published' | 'unpublished'; + /** @description Filter by org deployment, independently of publication. */ + auto_enabled_status?: 'all' | 'disabled' | 'enabled'; + /** + * @description Sort across the inventory. Name uses case-insensitive ordering. Unedited skills use their creation + * date for date_updated sorting. + */ + sort?: 'date_updated' | 'name' | 'usage_count'; + /** @description Sort direction; file ID breaks ties. */ + sort_dir?: 'asc' | 'desc'; + } +>; diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index 9a56d7330..e09e02c47 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -74,6 +74,7 @@ export type { AdminRolesListAssignmentsArguments, AdminRolesRemoveAssignmentsArguments, } from './admin/roles'; +export type { AdminSlackbotSkillsListArguments } from './admin/slackbot'; export type { AdminTeamsAdminsListArguments, AdminTeamsCreateArguments, diff --git a/packages/web-api/src/types/response/AdminSlackbotSkillsListResponse.ts b/packages/web-api/src/types/response/AdminSlackbotSkillsListResponse.ts new file mode 100644 index 000000000..15f3ba0ab --- /dev/null +++ b/packages/web-api/src/types/response/AdminSlackbotSkillsListResponse.ts @@ -0,0 +1,44 @@ +///////////////////////////////////////////////////////////////////////////////////////// +// // +// !!! 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 AdminSlackbotSkillsListResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + response_metadata?: ResponseMetadata; + skills?: Skill[]; + warning?: string; +}; + +export interface ResponseMetadata { + messages?: string[]; + next_cursor?: string; +} + +export interface Skill { + auto_enabled?: AutoEnabled; + category?: string; + creator_id?: string; + date_created?: number; + date_updated?: number; + description?: string; + display_name?: string; + id?: string; + is_official?: boolean; + library_count?: number; + usage_count?: number; + visibility?: string; +} + +export interface AutoEnabled { + permission_type?: string; + usergroup_ids?: string[]; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 135e01682..898b206b2 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -66,6 +66,7 @@ export { AdminInviteRequestsListResponse } from './AdminInviteRequestsListRespon export { AdminRolesAddAssignmentsResponse } from './AdminRolesAddAssignmentsResponse'; export { AdminRolesListAssignmentsResponse } from './AdminRolesListAssignmentsResponse'; export { AdminRolesRemoveAssignmentsResponse } from './AdminRolesRemoveAssignmentsResponse'; +export { AdminSlackbotSkillsListResponse } from './AdminSlackbotSkillsListResponse'; export { AdminTeamsAdminsListResponse } from './AdminTeamsAdminsListResponse'; export { AdminTeamsCreateResponse } from './AdminTeamsCreateResponse'; export { AdminTeamsListResponse } from './AdminTeamsListResponse'; diff --git a/packages/web-api/test/types/methods/admin.slackbot.test-d.ts b/packages/web-api/test/types/methods/admin.slackbot.test-d.ts new file mode 100644 index 000000000..33c62162e --- /dev/null +++ b/packages/web-api/test/types/methods/admin.slackbot.test-d.ts @@ -0,0 +1,47 @@ +import { expectAssignable, expectError } from 'tsd'; +import { WebClient } from '../../../src/WebClient'; + +const web = new WebClient('TOKEN'); + +// admin.slackbot.skills.list +// -- sad path +expectError( + web.admin.slackbot.skills.list({ + category: 'cooking', // invalid category + }), +); +expectError( + web.admin.slackbot.skills.list({ + publish_status: 'draft', // invalid publish_status + }), +); +expectError( + web.admin.slackbot.skills.list({ + auto_enabled_status: 'on', // invalid auto_enabled_status + }), +); +expectError( + web.admin.slackbot.skills.list({ + sort: 'date_created', // invalid sort + }), +); +expectError( + web.admin.slackbot.skills.list({ + sort_dir: 'up', // invalid sort_dir + }), +); +// -- happy path +expectAssignable>([]); // no arg is fine +expectAssignable>([{}]); // empty arg is fine +expectAssignable>([ + { + category: 'productivity', + cursor: 'dXNlcjpVMDYxTkZUVDI=', + limit: 100, + creator_ids: ['U1234', 'W1234'], + publish_status: 'published', + auto_enabled_status: 'enabled', + sort: 'usage_count', + sort_dir: 'desc', + }, +]);