diff --git a/packages/web-api/src/methods.ts b/packages/web-api/src/methods.ts index 3ebf5dbff..005d68d7d 100644 --- a/packages/web-api/src/methods.ts +++ b/packages/web-api/src/methods.ts @@ -28,6 +28,7 @@ import type { AdminConversationsConvertToPrivateArguments, AdminConversationsConvertToPublicArguments, AdminConversationsCreateArguments, + AdminConversationsCreateForObjectsArguments, AdminConversationsDeleteArguments, AdminConversationsDisconnectSharedArguments, AdminConversationsEKMListOriginalConnectedChannelInfoArguments, @@ -35,6 +36,7 @@ import type { AdminConversationsGetCustomRetentionArguments, AdminConversationsGetTeamsArguments, AdminConversationsInviteArguments, + AdminConversationsLinkObjectsArguments, AdminConversationsLookupArguments, AdminConversationsRemoveCustomRetentionArguments, AdminConversationsRenameArguments, @@ -46,6 +48,7 @@ import type { AdminConversationsSetCustomRetentionArguments, AdminConversationsSetTeamsArguments, AdminConversationsUnarchiveArguments, + AdminConversationsUnlinkObjectsArguments, AdminEmojiAddAliasArguments, AdminEmojiAddArguments, AdminEmojiListArguments, @@ -280,6 +283,7 @@ import type { AdminConversationsBulkMoveResponse, AdminConversationsConvertToPrivateResponse, AdminConversationsConvertToPublicResponse, + AdminConversationsCreateForObjectsResponse, AdminConversationsCreateResponse, AdminConversationsDeleteResponse, AdminConversationsDisconnectSharedResponse, @@ -288,6 +292,7 @@ import type { AdminConversationsGetCustomRetentionResponse, AdminConversationsGetTeamsResponse, AdminConversationsInviteResponse, + AdminConversationsLinkObjectsResponse, AdminConversationsLookupResponse, AdminConversationsRemoveCustomRetentionResponse, AdminConversationsRenameResponse, @@ -299,6 +304,7 @@ import type { AdminConversationsSetCustomRetentionResponse, AdminConversationsSetTeamsResponse, AdminConversationsUnarchiveResponse, + AdminConversationsUnlinkObjectsResponse, AdminEmojiAddAliasResponse, AdminEmojiAddResponse, AdminEmojiListResponse, @@ -776,6 +782,14 @@ export abstract class Methods extends EventEmitter { this, 'admin.conversations.create', ), + /** + * @description Create a Salesforce channel for the corresponding object provided. + * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.createForObjects `admin.conversations.createForObjects` API reference}. + */ + createForObjects: bindApiCall< + AdminConversationsCreateForObjectsArguments, + AdminConversationsCreateForObjectsResponse + >(this, 'admin.conversations.createForObjects'), /** * @description Delete a public or private channel. * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.delete `admin.conversations.delete` API reference}. @@ -844,6 +858,14 @@ export abstract class Methods extends EventEmitter { this, 'admin.conversations.lookup', ), + /** + * @description Link a Salesforce record to a channel. + * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.linkObjects `admin.conversations.linkObjects` API reference}. + */ + linkObjects: bindApiCall( + this, + 'admin.conversations.linkObjects', + ), /** * @description Remove a conversation's retention policy. * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention `admin.conversations.removeCustomRetention` API reference}. @@ -926,6 +948,14 @@ export abstract class Methods extends EventEmitter { this, 'admin.conversations.unarchive', ), + /** + * @description Unlink a Salesforce record from a channel. + * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects `admin.conversations.unlinkObjects` API reference}. + */ + unlinkObjects: bindApiCall( + this, + 'admin.conversations.unlinkObjects', + ), }, emoji: { /** diff --git a/packages/web-api/src/types/request/admin/conversations.ts b/packages/web-api/src/types/request/admin/conversations.ts index f5da469d6..af265927a 100644 --- a/packages/web-api/src/types/request/admin/conversations.ts +++ b/packages/web-api/src/types/request/admin/conversations.ts @@ -92,6 +92,28 @@ export type AdminConversationsCreateArguments = TokenOverridable & description?: string; }; +// https://docs.slack.dev/reference/methods/admin.conversations.createForObjects +export interface AdminConversationsCreateForObjectsArguments extends TokenOverridable { + /** + * @description Object / Record ID (15 or 18 digit accepted). + * @see See {@link https://help.salesforce.com/s/articleView?id=000385008&type=1 here} for how to look up an ID. + * @example 0019000000DmehKAAR + **/ + object_id: string; + /** + * @description Salesforce org ID (15 or 18 digit accepted). + * @see See {@link https://help.salesforce.com/s/articleView?id=000385215&type=1 here} for how to look up Salesforce org ID. + * @example 00DGC00000024hsuWY + **/ + salesforce_org_id: string; + /** + * @description Optional flag to add all team members related to the object to the newly created Salesforce channel. When true, adds a maximum of 100 team members to the channel. + * @default false + * @example true + **/ + invite_object_team?: boolean; +} + // https://docs.slack.dev/reference/methods/admin.conversations.delete export interface AdminConversationsDeleteArguments extends ChannelID, TokenOverridable {} @@ -118,6 +140,26 @@ export interface AdminConversationsGetTeamsArguments extends ChannelID, TokenOve // https://docs.slack.dev/reference/methods/admin.conversations.invite export interface AdminConversationsInviteArguments extends ChannelID, UserIDs, TokenOverridable {} +// https://docs.slack.dev/reference/methods/admin.conversations.linkObjects +export interface AdminConversationsLinkObjectsArguments extends TokenOverridable { + /** + * @description Channel ID for Slack channel that will be linked to a Salesforce record. + **/ + channel: string; + /** + * @description Salesforce record ID (15 or 18 digit accepted). + * @see See {@link https://help.salesforce.com/s/articleView?id=000385008&type=1 here} for how to look up record ID. + * @example 0019000000DmehKAAR + */ + record_id: string; + /** + * @description Salesforce org ID (15 or 18 digit accepted). + * @see See {@link https://help.salesforce.com/s/articleView?id=000385215&type=1 here} for how to look up Salesforce org ID. + * @example: 00DGC00000024hsuWY + **/ + salesforce_org_id: string; +} + // https://docs.slack.dev/reference/methods/admin.conversations.lookup export interface AdminConversationsLookupArguments extends TeamIDs, TokenOverridable, CursorPaginationEnabled { /** @@ -222,3 +264,15 @@ export interface AdminConversationsSetTeamsArguments extends ChannelID, TokenOve // https://docs.slack.dev/reference/methods/admin.conversations.unarchive export interface AdminConversationsUnarchiveArguments extends ChannelID, TokenOverridable {} + +// https://docs.slack.dev/reference/methods/admin.conversations.unlinkObjects +export interface AdminConversationsUnlinkObjectsArguments extends TokenOverridable { + /** + * @description Channel ID for Slack channel that will be unlinked from the Salesforce record. + **/ + channel: string; + /** + * @description Channel name you would like to give to the channel that is being unlinked from the Salesforce record. + **/ + new_name: string; +} diff --git a/packages/web-api/src/types/request/index.ts b/packages/web-api/src/types/request/index.ts index 305055de8..33e5c0253 100644 --- a/packages/web-api/src/types/request/index.ts +++ b/packages/web-api/src/types/request/index.ts @@ -31,6 +31,7 @@ export type { AdminConversationsConvertToPrivateArguments, AdminConversationsConvertToPublicArguments, AdminConversationsCreateArguments, + AdminConversationsCreateForObjectsArguments, AdminConversationsDeleteArguments, AdminConversationsDisconnectSharedArguments, AdminConversationsEKMListOriginalConnectedChannelInfoArguments, @@ -38,6 +39,7 @@ export type { AdminConversationsGetCustomRetentionArguments, AdminConversationsGetTeamsArguments, AdminConversationsInviteArguments, + AdminConversationsLinkObjectsArguments, AdminConversationsLookupArguments, AdminConversationsRemoveCustomRetentionArguments, AdminConversationsRenameArguments, @@ -49,6 +51,7 @@ export type { AdminConversationsSetCustomRetentionArguments, AdminConversationsSetTeamsArguments, AdminConversationsUnarchiveArguments, + AdminConversationsUnlinkObjectsArguments, } from './admin/conversations'; export type { AdminEmojiAddAliasArguments, diff --git a/packages/web-api/src/types/response/AdminConversationsCreateForObjectsResponse.ts b/packages/web-api/src/types/response/AdminConversationsCreateForObjectsResponse.ts new file mode 100644 index 000000000..77048d05a --- /dev/null +++ b/packages/web-api/src/types/response/AdminConversationsCreateForObjectsResponse.ts @@ -0,0 +1,14 @@ +import type { WebAPICallResult } from '../../WebClient'; + +export type AdminConversationsCreateForObjectsResponse = WebAPICallResult & { + channel_id?: string; + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + response_metadata?: ResponseMetadata; +}; + +export interface ResponseMetadata { + messages?: string[]; +} diff --git a/packages/web-api/src/types/response/AdminConversationsLinkObjectsResponse.ts b/packages/web-api/src/types/response/AdminConversationsLinkObjectsResponse.ts new file mode 100644 index 000000000..c3a07a1b0 --- /dev/null +++ b/packages/web-api/src/types/response/AdminConversationsLinkObjectsResponse.ts @@ -0,0 +1,13 @@ +import type { WebAPICallResult } from '../../WebClient'; + +export type AdminConversationsLinkObjectsResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + response_metadata?: ResponseMetadata; +}; + +export interface ResponseMetadata { + messages?: string[]; +} diff --git a/packages/web-api/src/types/response/AdminConversationsUnlinkObjectsResponse.ts b/packages/web-api/src/types/response/AdminConversationsUnlinkObjectsResponse.ts new file mode 100644 index 000000000..66444dded --- /dev/null +++ b/packages/web-api/src/types/response/AdminConversationsUnlinkObjectsResponse.ts @@ -0,0 +1,13 @@ +import type { WebAPICallResult } from '../../WebClient'; + +export type AdminConversationsUnlinkObjectsResponse = WebAPICallResult & { + error?: string; + needed?: string; + ok?: boolean; + provided?: string; + response_metadata?: ResponseMetadata; +}; + +export interface ResponseMetadata { + messages?: string[]; +} diff --git a/packages/web-api/src/types/response/index.ts b/packages/web-api/src/types/response/index.ts index 1f78f13fe..dde4bee7b 100644 --- a/packages/web-api/src/types/response/index.ts +++ b/packages/web-api/src/types/response/index.ts @@ -28,6 +28,7 @@ export { AdminConversationsBulkDeleteResponse } from './AdminConversationsBulkDe export { AdminConversationsBulkMoveResponse } from './AdminConversationsBulkMoveResponse'; export { AdminConversationsConvertToPrivateResponse } from './AdminConversationsConvertToPrivateResponse'; export { AdminConversationsConvertToPublicResponse } from './AdminConversationsConvertToPublicResponse'; +export { AdminConversationsCreateForObjectsResponse } from './AdminConversationsCreateForObjectsResponse'; export { AdminConversationsCreateResponse } from './AdminConversationsCreateResponse'; export { AdminConversationsDeleteResponse } from './AdminConversationsDeleteResponse'; export { AdminConversationsDisconnectSharedResponse } from './AdminConversationsDisconnectSharedResponse'; @@ -36,6 +37,7 @@ export { AdminConversationsGetConversationPrefsResponse } from './AdminConversat export { AdminConversationsGetCustomRetentionResponse } from './AdminConversationsGetCustomRetentionResponse'; export { AdminConversationsGetTeamsResponse } from './AdminConversationsGetTeamsResponse'; export { AdminConversationsInviteResponse } from './AdminConversationsInviteResponse'; +export { AdminConversationsLinkObjectsResponse } from './AdminConversationsLinkObjectsResponse'; export { AdminConversationsLookupResponse } from './AdminConversationsLookupResponse'; export { AdminConversationsRemoveCustomRetentionResponse } from './AdminConversationsRemoveCustomRetentionResponse'; export { AdminConversationsRenameResponse } from './AdminConversationsRenameResponse'; @@ -47,6 +49,7 @@ export { AdminConversationsSetConversationPrefsResponse } from './AdminConversat export { AdminConversationsSetCustomRetentionResponse } from './AdminConversationsSetCustomRetentionResponse'; export { AdminConversationsSetTeamsResponse } from './AdminConversationsSetTeamsResponse'; export { AdminConversationsUnarchiveResponse } from './AdminConversationsUnarchiveResponse'; +export { AdminConversationsUnlinkObjectsResponse } from './AdminConversationsUnlinkObjectsResponse'; export { AdminConversationsWhitelistAddResponse } from './AdminConversationsWhitelistAddResponse'; export { AdminConversationsWhitelistListGroupsLinkedToChannelResponse } from './AdminConversationsWhitelistListGroupsLinkedToChannelResponse'; export { AdminConversationsWhitelistRemoveResponse } from './AdminConversationsWhitelistRemoveResponse'; diff --git a/packages/web-api/test/types/methods/admin.conversations.test-d.ts b/packages/web-api/test/types/methods/admin.conversations.test-d.ts index 0b4682ac3..1600cf7f7 100644 --- a/packages/web-api/test/types/methods/admin.conversations.test-d.ts +++ b/packages/web-api/test/types/methods/admin.conversations.test-d.ts @@ -182,6 +182,35 @@ expectAssignable>([ }, ]); +// admin.conversations.createForObjects +// -- sad path +expectError(web.admin.conversations.createForObjects()); // lacking argument +expectError(web.admin.conversations.createForObjects({})); // empty argument +expectError( + web.admin.conversations.createForObjects({ + object_id: '0019000000DmehKAAR', // missing salesforce_org_id + }), +); +expectError( + web.admin.conversations.createForObjects({ + salesforce_org_id: '00DGC00000024hsuWY', // missing object_id + }), +); +// -- happy path +expectAssignable>([ + { + object_id: '0019000000DmehKAAR', + salesforce_org_id: '00DGC00000024hsuWY', + }, +]); +expectAssignable>([ + { + object_id: '0019000000DmehKAAR', + salesforce_org_id: '00DGC00000024hsuWY', + invite_object_team: true, + }, +]); + // admin.conversations.delete // -- sad path expectError(web.admin.conversations.delete()); // lacking argument @@ -288,6 +317,40 @@ expectAssignable>([ }, ]); +// admin.conversations.linkObjects +// -- sad path +expectError(web.admin.conversations.linkObjects()); // lacking argument +expectError(web.admin.conversations.linkObjects({})); // empty argument +expectError( + web.admin.conversations.linkObjects({ + channel: 'C1234', // missing record_id and salesforce_org_id + }), +); +expectError( + web.admin.conversations.linkObjects({ + record_id: '0019000000DmehKAAR', // missing channel and salesforce_org_id + }), +); +expectError( + web.admin.conversations.linkObjects({ + salesforce_org_id: '00DGC00000024hsuWY', // missing channel and record_id + }), +); +expectError( + web.admin.conversations.linkObjects({ + channel: 'C1234', + record_id: '0019000000DmehKAAR', // missing salesforce_org_id + }), +); +// -- happy path +expectAssignable>([ + { + channel: 'C1234', + record_id: '0019000000DmehKAAR', + salesforce_org_id: '00DGC00000024hsuWY', + }, +]); + // admin.conversations.removeCustomRetention // -- sad path expectError(web.admin.conversations.removeCustomRetention()); // lacking argument @@ -447,3 +510,25 @@ expectAssignable>([ channel_id: 'C1234', }, ]); + +// admin.conversations.unlinkObjects +// -- sad path +expectError(web.admin.conversations.unlinkObjects()); // lacking argument +expectError(web.admin.conversations.unlinkObjects({})); // empty argument +expectError( + web.admin.conversations.unlinkObjects({ + channel: 'C1234', // missing new_name + }), +); +expectError( + web.admin.conversations.unlinkObjects({ + new_name: 'new-channel-name', // missing channel + }), +); +// -- happy path +expectAssignable>([ + { + channel: 'C1234', + new_name: 'new-channel-name', + }, +]);