Skip to content

Commit a3a06ec

Browse files
author
Fil Maj
authoredSep 5, 2024··
web-api(feat): add support for conversations.requestShared approve , deny and list APIs (#1843)
1 parent e930db3 commit a3a06ec

15 files changed

+136
-38
lines changed
 

‎packages/web-api/src/methods.ts

+22
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ import type {
160160
ConversationsOpenArguments,
161161
ConversationsRenameArguments,
162162
ConversationsRepliesArguments,
163+
ConversationsRequestSharedInviteApproveArguments,
164+
ConversationsRequestSharedInviteDenyArguments,
163165
ConversationsSetPurposeArguments,
164166
ConversationsSetTopicArguments,
165167
ConversationsUnarchiveArguments,
@@ -407,6 +409,8 @@ import type {
407409
ConversationsOpenResponse,
408410
ConversationsRenameResponse,
409411
ConversationsRepliesResponse,
412+
ConversationsRequestSharedInviteApproveResponse,
413+
ConversationsRequestSharedInviteDenyResponse,
410414
ConversationsSetPurposeResponse,
411415
ConversationsSetTopicResponse,
412416
ConversationsUnarchiveResponse,
@@ -1716,6 +1720,24 @@ export abstract class Methods extends EventEmitter<WebClientEvent> {
17161720
* @see {@link https://api.slack.com/methods/conversations.replies `conversations.replies` API reference}.
17171721
*/
17181722
replies: bindApiCall<ConversationsRepliesArguments, ConversationsRepliesResponse>(this, 'conversations.replies'),
1723+
requestSharedInvite: {
1724+
/**
1725+
* @description Approves a request to add an external user to a channel and sends them a Slack Connect invite.
1726+
* @see {@link https://api.slack.com/methods/conversations.requestSharedInvite.approve `conversations.requestSharedInvite.approve` API reference}.
1727+
*/
1728+
approve: bindApiCall<
1729+
ConversationsRequestSharedInviteApproveArguments,
1730+
ConversationsRequestSharedInviteApproveResponse
1731+
>(this, 'conversations.requestSharedInvite.approve'),
1732+
/**
1733+
* @description Denies a request to invite an external user to a channel.
1734+
* @see {@link https://api.slack.com/methods/conversations.requestSharedInvite.deny `conversations.requestSharedInvite.deny` API reference}.
1735+
*/
1736+
deny: bindApiCall<ConversationsRequestSharedInviteDenyArguments, ConversationsRequestSharedInviteDenyResponse>(
1737+
this,
1738+
'conversations.requestSharedInvite.deny',
1739+
),
1740+
},
17191741
/**
17201742
* @description Sets the purpose for a conversation.
17211743
* @see {@link https://api.slack.com/methods/conversations.setPurpose `conversations.setPurpose` API reference}.

‎packages/web-api/src/retry-policies.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { OperationOptions } from 'retry';
33
/**
44
* Options to create retry policies. Extends from https://github.com/tim-kos/node-retry.
55
*/
6-
export interface RetryOptions extends OperationOptions { }
6+
export interface RetryOptions extends OperationOptions {}
77

88
/**
99
* The default retry policy. Retry up to 10 times, over the span of about 30 minutes. It's not exact because

‎packages/web-api/src/types/request/admin/conversations.ts

+1-6
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,7 @@ export interface AdminConversationsDisconnectSharedArguments extends ChannelID,
103103

104104
// https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo
105105
export type AdminConversationsEKMListOriginalConnectedChannelInfoArguments = OptionalArgument<
106-
Partial<TeamIDs> &
107-
TokenOverridable &
108-
CursorPaginationEnabled & {
109-
/** @description A comma-separated list of channels to filter to. */
110-
channel_ids?: string[];
111-
}
106+
Partial<TeamIDs> & TokenOverridable & CursorPaginationEnabled & Partial<ChannelIDs>
112107
>;
113108

114109
// https://api.slack.com/methods/admin.conversations.getConversationPrefs

‎packages/web-api/src/types/request/admin/functions.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { CursorPaginationEnabled, TokenOverridable } from '../common';
1+
import type { CursorPaginationEnabled, TokenOverridable, UserIDs } from '../common';
22

33
// https://api.slack.com/methods/admin.functions.list
44
export interface AdminFunctionsListArguments extends TokenOverridable, CursorPaginationEnabled {
@@ -15,11 +15,9 @@ export interface AdminFunctionsPermissionsLookupArguments extends TokenOverridab
1515
}
1616

1717
// https://api.slack.com/methods/admin.functions.permissions.set
18-
export interface AdminFunctionsPermissionsSetArguments extends TokenOverridable {
18+
export interface AdminFunctionsPermissionsSetArguments extends TokenOverridable, Partial<UserIDs> {
1919
/** @description The function ID to set permissions for. */
2020
function_id: string;
2121
/** @description The function visibility. */
2222
visibility: 'everyone' | 'app_collaborators' | 'named_entities' | 'no_one';
23-
/** @description List of user IDs to allow for `named_entities` visibility. */
24-
user_ids?: string[];
2523
}

‎packages/web-api/src/types/request/admin/users.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,10 @@ import type {
66
OptionalTeamAssignable,
77
TeamID,
88
TokenOverridable,
9+
UserID,
910
UserIDs,
1011
} from '../common';
1112

12-
interface UserID {
13-
/** @description The ID of the user. */
14-
user_id: string;
15-
}
16-
1713
interface IsRestricted {
1814
/** @description Set to `true` if user should be added to the workspace as a guest. */
1915
is_restricted?: boolean;
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import type { TokenOverridable } from './common';
1+
import type { ChannelID, TokenOverridable } from './common';
22

3-
interface Channel {
4-
/** @description Channel containing bookmark. */
5-
channel_id: string;
6-
}
73
interface ID {
84
bookmark_id: string;
95
}
@@ -17,7 +13,7 @@ interface BookmarkFields {
1713
}
1814

1915
// https://api.slack.com/methods/bookmarks.add
20-
export interface BookmarksAddArguments extends Channel, BookmarkFields, TokenOverridable {
16+
export interface BookmarksAddArguments extends ChannelID, BookmarkFields, TokenOverridable {
2117
/** @description Type of the bookmark. Only `link` is supported at the moment. */
2218
type: 'link';
2319
/** @description ID of the entity being bookmarked. Only applies to message and file types. */
@@ -26,10 +22,10 @@ export interface BookmarksAddArguments extends Channel, BookmarkFields, TokenOve
2622
parent_id?: string;
2723
}
2824
// https://api.slack.com/methods/bookmarks.edit
29-
export interface BookmarksEditArguments extends Channel, ID, Partial<BookmarkFields>, TokenOverridable {}
25+
export interface BookmarksEditArguments extends ChannelID, ID, Partial<BookmarkFields>, TokenOverridable {}
3026

3127
// https://api.slack.com/methods/bookmarks.list
32-
export interface BookmarksListArguments extends Channel, TokenOverridable {}
28+
export interface BookmarksListArguments extends ChannelID, TokenOverridable {}
3329

3430
// https://api.slack.com/methods/bookmarks.remove
35-
export interface BookmarksRemoveArguments extends Channel, ID, TokenOverridable {}
31+
export interface BookmarksRemoveArguments extends ChannelID, ID, TokenOverridable {}

‎packages/web-api/src/types/request/canvas.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { OptionalArgument } from '../helpers';
2-
import type { ChannelIDs, TokenOverridable, UserIDs } from './common';
2+
import type { ChannelID, ChannelIDs, TokenOverridable, UserIDs } from './common';
33

44
interface CanvasID {
55
/** @description Encoded ID of the canvas. */
@@ -89,9 +89,7 @@ export interface CanvasesEditArguments extends CanvasID, TokenOverridable {
8989
}
9090

9191
// https://api.slack.com/methods/conversations.canvases.create
92-
export interface ConversationsCanvasesCreateArguments extends TokenOverridable {
93-
/** @description Channel ID of the channel to create a canvas in. */
94-
channel_id: string;
92+
export interface ConversationsCanvasesCreateArguments extends ChannelID, TokenOverridable {
9593
/** @description Structure describing the type and contents of the Canvas being created. */
9694
document_content?: DocumentContent;
9795
}

‎packages/web-api/src/types/request/common.ts

+4
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ export interface UserIDs {
9191
/** @description List of encoded user IDs. */
9292
user_ids: [string, ...string[]];
9393
}
94+
export interface UserID {
95+
/** @description Encoded user ID. */
96+
user_id: string;
97+
}
9498

9599
export interface AppID {
96100
/** @description The ID of the app. */

‎packages/web-api/src/types/request/conversations.ts

+29-3
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,14 @@ export interface IsPrivate {
3131
/** @description Whether the channel should be private. */
3232
is_private?: boolean;
3333
}
34-
interface Message extends Channel {
34+
interface MessageSpecifier extends Channel {
3535
/** @description Unique identifier of message. */
3636
ts: string;
3737
}
38+
interface Message {
39+
/** @description A message to send to the user who requested the invite. */
40+
message?: string;
41+
}
3842
export interface UserIDs {
3943
/** List of user IDs to receive this invite. Either `emails` or `user_ids` must be provided. */
4044
user_ids: string[];
@@ -156,7 +160,7 @@ export type ConversationsListConnectInvitesArguments = OptionalArgument<
156160
>;
157161

158162
// https://api.slack.com/methods/conversations.mark
159-
export interface ConversationsMarkArguments extends Message, TokenOverridable {}
163+
export interface ConversationsMarkArguments extends MessageSpecifier, TokenOverridable {}
160164

161165
// https://api.slack.com/methods/conversations.members
162166
export interface ConversationsMembersArguments extends Channel, TokenOverridable, CursorPaginationEnabled {}
@@ -181,12 +185,34 @@ export interface ConversationsRenameArguments extends Channel, TokenOverridable
181185

182186
// https://api.slack.com/methods/conversations.replies
183187
export interface ConversationsRepliesArguments
184-
extends Message,
188+
extends MessageSpecifier,
185189
IncludeAllMetadata,
186190
TokenOverridable,
187191
CursorPaginationEnabled,
188192
TimelinePaginationEnabled {}
189193

194+
// https://api.slack.com/methods/conversations.requestSharedInvite.approve
195+
export interface ConversationsRequestSharedInviteApproveArguments extends InviteID, Partial<ChannelID> {
196+
/**
197+
* @description Whether the invited team will have post-only permissions in the channel.
198+
* Will override the value on the requested invite.
199+
*/
200+
is_external_limited?: boolean;
201+
/** @description Optional additional messaging to attach to the invite approval message. */
202+
message?: {
203+
/**
204+
* @description When `true`, will override the user specified message. Otherwise, `text` will be appended to the
205+
* user specified message on the invite request.
206+
*/
207+
is_override: boolean;
208+
/** @description Text to include along with the email invite. */
209+
text: string;
210+
};
211+
}
212+
213+
// https://api.slack.com/methods/conversations.requestSharedInvite.deny
214+
export interface ConversationsRequestSharedInviteDenyArguments extends InviteID, Message {}
215+
190216
// https://api.slack.com/methods/conversations.setPurpose
191217
export interface ConversationsSetPurposeArguments extends Channel, TokenOverridable {
192218
/** @description A new, specialer purpose. */

‎packages/web-api/src/types/request/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ export type {
108108
ConversationsOpenArguments,
109109
ConversationsRenameArguments,
110110
ConversationsRepliesArguments,
111+
ConversationsRequestSharedInviteApproveArguments,
112+
ConversationsRequestSharedInviteDenyArguments,
111113
ConversationsSetPurposeArguments,
112114
ConversationsSetTopicArguments,
113115
ConversationsUnarchiveArguments,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/* eslint-disable */
2+
/////////////////////////////////////////////////////////////////////////////////////////
3+
// //
4+
// !!! DO NOT EDIT THIS FILE !!! //
5+
// //
6+
// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. //
7+
// Please refer to the script code to learn how to update the source data. //
8+
// //
9+
/////////////////////////////////////////////////////////////////////////////////////////
10+
11+
import type { WebAPICallResult } from '../../WebClient';
12+
export type ConversationsRequestSharedInviteApproveResponse = WebAPICallResult & {
13+
invite_id?: string;
14+
ok?: boolean;
15+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/* eslint-disable */
2+
/////////////////////////////////////////////////////////////////////////////////////////
3+
// //
4+
// !!! DO NOT EDIT THIS FILE !!! //
5+
// //
6+
// This file is auto-generated by scripts/generate-web-api-types.sh in the repository. //
7+
// Please refer to the script code to learn how to update the source data. //
8+
// //
9+
/////////////////////////////////////////////////////////////////////////////////////////
10+
11+
import type { WebAPICallResult } from '../../WebClient';
12+
export type ConversationsRequestSharedInviteDenyResponse = WebAPICallResult & {
13+
ok?: boolean;
14+
};

‎packages/web-api/src/types/response/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,8 @@ export { ConversationsMembersResponse } from './ConversationsMembersResponse';
183183
export { ConversationsOpenResponse } from './ConversationsOpenResponse';
184184
export { ConversationsRenameResponse } from './ConversationsRenameResponse';
185185
export { ConversationsRepliesResponse } from './ConversationsRepliesResponse';
186+
export { ConversationsRequestSharedInviteApproveResponse } from './ConversationsRequestSharedInviteApproveResponse';
187+
export { ConversationsRequestSharedInviteDenyResponse } from './ConversationsRequestSharedInviteDenyResponse';
186188
export { ConversationsSetPurposeResponse } from './ConversationsSetPurposeResponse';
187189
export { ConversationsSetTopicResponse } from './ConversationsSetTopicResponse';
188190
export { ConversationsUnarchiveResponse } from './ConversationsUnarchiveResponse';

‎packages/web-api/test/types/methods/conversations.test-d.ts

+34
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,40 @@ expectAssignable<Parameters<typeof web.conversations.replies>>([
344344
},
345345
]);
346346

347+
// conversations.requestSharedInvite.approve
348+
// -- sad path
349+
expectError(web.conversations.requestSharedInvite.approve()); // lacking argument
350+
expectError(web.conversations.requestSharedInvite.approve({})); // empty argument
351+
// if specified, message requires `text` and `is_override`
352+
expectError(web.conversations.requestSharedInvite.approve({ message: { is_override: true } })); // missing message.text
353+
expectError(web.conversations.requestSharedInvite.approve({ message: { text: 'i will allow it' } })); // missing message.text
354+
// -- happy path
355+
expectAssignable<Parameters<typeof web.conversations.requestSharedInvite.approve>>([
356+
{
357+
invite_id: 'I1234',
358+
},
359+
]);
360+
expectAssignable<Parameters<typeof web.conversations.requestSharedInvite.approve>>([
361+
{
362+
invite_id: 'I1234',
363+
message: {
364+
is_override: false,
365+
text: 'You have the administrator blessing',
366+
},
367+
},
368+
]);
369+
370+
// conversations.requestSharedInvite.deny
371+
// -- sad path
372+
expectError(web.conversations.requestSharedInvite.deny()); // lacking argument
373+
expectError(web.conversations.requestSharedInvite.deny({})); // empty argument
374+
// -- happy path
375+
expectAssignable<Parameters<typeof web.conversations.requestSharedInvite.deny>>([
376+
{
377+
invite_id: 'I1234',
378+
},
379+
]);
380+
347381
// conversations.setPurpose
348382
// -- sad path
349383
expectError(web.conversations.setPurpose()); // lacking argument

‎packages/web-api/tsconfig.json

+2-6
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,8 @@
1212
"sourceMap": true
1313
},
1414
"extends": "@tsconfig/recommended/tsconfig.json",
15-
"include": [
16-
"src/**/*"
17-
],
18-
"exclude": [
19-
"src/**/*.spec.*"
20-
],
15+
"include": ["src/**/*"],
16+
"exclude": ["src/**/*.spec.*"],
2117
"jsdoc": {
2218
"out": "support/jsdoc",
2319
"access": "public"

0 commit comments

Comments
 (0)
Please sign in to comment.