Skip to content

Commit

Permalink
feat: allow using WebClient APIs without argument (#1809)
Browse files Browse the repository at this point in the history
  • Loading branch information
davidlj95 authored Jun 10, 2024
1 parent a771044 commit 9f2935f
Show file tree
Hide file tree
Showing 45 changed files with 146 additions and 110 deletions.
2 changes: 2 additions & 0 deletions packages/web-api/src/types/helpers.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
/** Omit all keys K from possible union types T */
export type ExcludeFromUnion<T, K extends string> = T extends T ? Omit<T, K> : never;
/** Allows to explicitly declare a function parameter as optional */
export type OptionalArgument<T> = T | void;
7 changes: 4 additions & 3 deletions packages/web-api/src/types/request/admin/apps.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { AppID, CursorPaginationEnabled, TokenOverridable } from '../common';
import { OptionalArgument } from '../../helpers';

interface RequestID {
/** @description The id of the request. */
Expand All @@ -24,8 +25,8 @@ interface Certified {
}

// https://api.slack.com/methods/admin.apps.activities.list
export interface AdminAppsActivitiesListArguments extends Partial<AppID>, Partial<TeamID>, TokenOverridable,
CursorPaginationEnabled {
export type AdminAppsActivitiesListArguments = OptionalArgument<Partial<AppID> & Partial<TeamID> & TokenOverridable &
CursorPaginationEnabled & {
/**
* @description The component ID of log events to be returned. Will be `FnXXXXXX` for functions,
* and `WfXXXXXX` for worflows.
Expand All @@ -47,7 +48,7 @@ export interface AdminAppsActivitiesListArguments extends Partial<AppID>, Partia
source?: 'slack' | 'developer';
/** @description The trace ID of log events to be returned. */
trace_id?: string;
}
}>;

// https://api.slack.com/methods/admin.apps.approve
export type AdminAppsApproveArguments = AppOrRequestID & TeamOrEnterpriseID & TokenOverridable;
Expand Down
3 changes: 2 additions & 1 deletion packages/web-api/src/types/request/admin/barriers.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { CursorPaginationEnabled, TokenOverridable } from '../common';
import { OptionalArgument } from '../../helpers';

interface BarrierID {
/** @description The ID of the barrier. */
Expand All @@ -22,7 +23,7 @@ export interface AdminBarriersCreateArguments extends TokenOverridable {
export interface AdminBarriersDeleteArguments extends BarrierID, TokenOverridable {}

// https://api.slack.com/methods/admin.barriers.list
export interface AdminBarriersListArguments extends TokenOverridable, CursorPaginationEnabled { }
export type AdminBarriersListArguments = OptionalArgument<TokenOverridable & CursorPaginationEnabled>;

// https://api.slack.com/methods/admin.barriers.update
export interface AdminBarriersUpdateArguments extends AdminBarriersCreateArguments, BarrierID {}
13 changes: 7 additions & 6 deletions packages/web-api/src/types/request/admin/conversations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import type {
TokenOverridable,
UserIDs,
} from '../common';
import { OptionalArgument } from '../../helpers';

interface ChannelID { // an identical interface exists in src/types/request/conversations.ts, but it is only for invites
/** @description Encoded channel ID. */
Expand Down Expand Up @@ -95,11 +96,11 @@ export interface AdminConversationsDisconnectSharedArguments extends ChannelID,
}

// https://api.slack.com/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo
export interface AdminConversationsEKMListOriginalConnectedChannelInfoArguments
extends Partial<TeamIDs>, TokenOverridable, CursorPaginationEnabled {
export type AdminConversationsEKMListOriginalConnectedChannelInfoArguments = OptionalArgument<Partial<TeamIDs> &
TokenOverridable & CursorPaginationEnabled & {
/** @description A comma-separated list of channels to filter to. */
channel_ids?: string[];
}
}>;

// https://api.slack.com/methods/admin.conversations.getConversationPrefs
export interface AdminConversationsGetConversationPrefsArguments extends ChannelID, TokenOverridable {}
Expand Down Expand Up @@ -148,8 +149,8 @@ export interface AdminConversationsRestrictAccessRemoveGroupArguments extends Ch
RestrictAccessTeamID, TokenOverridable {}

// https://api.slack.com/methods/admin.conversations.search
export interface AdminConversationsSearchArguments
extends SortDir, Partial<TeamIDs>, TokenOverridable, CursorPaginationEnabled {
export type AdminConversationsSearchArguments = OptionalArgument<SortDir & Partial<TeamIDs> & TokenOverridable &
CursorPaginationEnabled & {
/** @description Array of encoded team IDs, signifying the external orgs to search through. */
connected_team_ids?: string[];
/** @description Name of the channel to query by. */
Expand All @@ -175,7 +176,7 @@ export interface AdminConversationsSearchArguments
* Omits channel data and allows access for admins without channel manager permissions. Defaults to `false`.
*/
total_count_only?: boolean;
}
}>;

// https://api.slack.com/methods/admin.conversations.setConversationPrefs
export interface AdminConversationsSetConversationPrefsArguments extends ChannelID, TokenOverridable {
Expand Down
3 changes: 2 additions & 1 deletion packages/web-api/src/types/request/admin/emoji.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { CursorPaginationEnabled, TokenOverridable } from '../common';
import { OptionalArgument } from '../../helpers';

interface Name {
/**
Expand Down Expand Up @@ -27,7 +28,7 @@ export interface AdminEmojiAddAliasArguments extends Name, TokenOverridable {
}

// https://api.slack.com/methods/admin.emoji.list
export interface AdminEmojiListArguments extends TokenOverridable, CursorPaginationEnabled {}
export type AdminEmojiListArguments = OptionalArgument<TokenOverridable & CursorPaginationEnabled>;

// https://api.slack.com/methods/admin.emoji.remove
export interface AdminEmojiRemoveArguments extends Name, TokenOverridable {}
Expand Down
7 changes: 4 additions & 3 deletions packages/web-api/src/types/request/admin/roles.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { CursorPaginationEnabled, SortDir, TokenOverridable, UserIDs } from '../common';
import { OptionalArgument } from '../../helpers';

interface EntityIDs {
/**
Expand All @@ -20,14 +21,14 @@ interface RoleID {
export interface AdminRolesAddAssignmentsArguments extends EntityIDs, RoleID, UserIDs, TokenOverridable {}

// https://api.slack.com/methods/admin.roles.listAssignments
export interface AdminRolesListAssignmentsArguments extends Partial<EntityIDs>, TokenOverridable,
CursorPaginationEnabled, SortDir {
export type AdminRolesListAssignmentsArguments = OptionalArgument<Partial<EntityIDs> & TokenOverridable &
CursorPaginationEnabled & SortDir & {
/**
* @description Collection of role ids to scope results by.
* @see {@link https://api.slack.com/methods/admin.roles.addAssignments#markdown Admin Roles under Usage info}.
*/
role_ids?: string[];
}
}>;

// https://api.slack.com/methods/admin.roles.removeAssignments
export interface AdminRolesRemoveAssignmentsArguments extends EntityIDs, RoleID, UserIDs, TokenOverridable {}
3 changes: 2 additions & 1 deletion packages/web-api/src/types/request/admin/teams.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { ChannelIDs, CursorPaginationEnabled, TeamID, TokenOverridable } from '../common';
import { OptionalArgument } from '../../helpers';

type TeamDiscoverability = 'open' | 'closed' | 'invite_only' | 'unlisted';

Expand All @@ -18,7 +19,7 @@ export interface AdminTeamsCreateArguments extends TokenOverridable {
}

// https://api.slack.com/methods/admin.teams.list
export interface AdminTeamsListArguments extends TokenOverridable, CursorPaginationEnabled {}
export type AdminTeamsListArguments = OptionalArgument<TokenOverridable & CursorPaginationEnabled>;

// https://api.slack.com/methods/admin.teams.owners.list
export interface AdminTeamsOwnersListArguments extends TeamID, TokenOverridable, CursorPaginationEnabled {}
Expand Down
9 changes: 6 additions & 3 deletions packages/web-api/src/types/request/admin/users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import type {
TokenOverridable,
UserIDs,
} from '../common';
import { OptionalArgument } from '../../helpers';

interface UserID {
/** @description The ID of the user. */
Expand Down Expand Up @@ -83,13 +84,14 @@ export interface AdminUsersInviteArguments extends ChannelIDs, TeamID, IsRestric
}

// https://api.slack.com/methods/admin.users.list
export type AdminUsersListArguments = TeamIDOrDeactivatedWorkspaces & TokenOverridable & CursorPaginationEnabled & {
export type AdminUsersListArguments = OptionalArgument<TeamIDOrDeactivatedWorkspaces & TokenOverridable &
CursorPaginationEnabled & {
/**
* @description If `true`, only active users will be returned. If `false`, only deactivated users will be returned.
* Default is `true`.
*/
is_active?: boolean;
};
}>;

// https://api.slack.com/methods/admin.users.remove
export interface AdminUsersRemoveArguments extends TeamID, UserID, TokenOverridable {}
Expand All @@ -107,7 +109,8 @@ export interface AdminUsersSessionInvalidateArguments extends TeamID, TokenOverr
}

// https://api.slack.com/methods/admin.users.session.list
export type AdminUsersSessionListArguments = EitherTeamAndUserIDOrNeither & TokenOverridable & CursorPaginationEnabled;
export type AdminUsersSessionListArguments = OptionalArgument<EitherTeamAndUserIDOrNeither & TokenOverridable &
CursorPaginationEnabled>;

// https://api.slack.com/methods/admin.users.session.reset
export interface AdminUsersSessionResetArguments extends UserID, SessionExpirationTarget, TokenOverridable {}
Expand Down
7 changes: 4 additions & 3 deletions packages/web-api/src/types/request/admin/workflows.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { AppID, CursorPaginationEnabled, SortDir, TokenOverridable } from '../common';
import { OptionalArgument } from '../../helpers';

interface CollaboratorIDs {
/** @description Array of collaborators (encoded user IDs) - maximum of 50 items. */
Expand Down Expand Up @@ -26,8 +27,8 @@ export interface AdminWorkflowsPermissionsLookupArguments extends WorkflowIDs, T
}

// https://api.slack.com/methods/admin.workflows.search
export interface AdminWorkflowsSearchArguments extends Partial<AppID>, Partial<CollaboratorIDs>, SortDir,
TokenOverridable, CursorPaginationEnabled {
export type AdminWorkflowsSearchArguments = OptionalArgument<Partial<AppID> & Partial<CollaboratorIDs> & SortDir &
TokenOverridable & CursorPaginationEnabled & {
/** @description Only include workflows with no collaborators in the result; default is `false`. */
no_collaborators?: boolean;
/** @description Number of trigger IDs to fetch for each workflow; default is `0`. */
Expand All @@ -38,7 +39,7 @@ export interface AdminWorkflowsSearchArguments extends Partial<AppID>, Partial<C
sort?: 'premium_runs';
/** @description Source of workflow creation, either from `code` or `workflow_builder`. */
source?: 'code' | 'workflow_builder';
}
}>;

// https://api.slack.com/methods/admin.workflows.unpublish
export interface AdminWorkflowsUnpublishArguments extends WorkflowIDs, TokenOverridable {}
6 changes: 4 additions & 2 deletions packages/web-api/src/types/request/api.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
// https://api.slack.com/methods/api.test
export interface APITestArguments {
import { OptionalArgument } from '../helpers';

export type APITestArguments = OptionalArgument<{
/** @description Error response to return. */
error?: string;
}
}>;
3 changes: 2 additions & 1 deletion packages/web-api/src/types/request/apps.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import type { AppID, CursorPaginationEnabled, TokenOverridable, OAuthCredentials } from './common';
import type { Manifest } from './manifest';
import { OptionalArgument } from '../helpers';

// https://api.slack.com/methods/apps.connections.open
export interface AppsConnectionsOpenArguments { }
export type AppsConnectionsOpenArguments = OptionalArgument<object>;

// https://api.slack.com/methods/apps.event.authorizations.list
export interface AppsEventAuthorizationsListArguments
Expand Down
11 changes: 6 additions & 5 deletions packages/web-api/src/types/request/auth.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
import type { CursorPaginationEnabled, TokenOverridable } from './common';
import { OptionalArgument } from '../helpers';

// https://api.slack.com/methods/auth.revoke
export interface AuthRevokeArguments extends TokenOverridable {
export type AuthRevokeArguments = OptionalArgument<TokenOverridable & {
/**
* @description Setting this parameter to `true` triggers a testing mode where the specified token
* will not actually be revoked.
*/
test?: boolean;
}
}>;

// https://api.slack.com/methods/auth.teams.list
export interface AuthTeamsListArguments extends TokenOverridable, CursorPaginationEnabled {
export type AuthTeamsListArguments = OptionalArgument<TokenOverridable & CursorPaginationEnabled & {
/**
* @description Whether to return icon paths for each workspace.
* An icon path represents a URI pointing to the image signifying the workspace.
* Defaults to `false`.
*/
include_icon?: boolean;
}
}>;

// https://api.slack.com/methods/auth.test
export interface AuthTestArguments extends TokenOverridable { }
export type AuthTestArguments = OptionalArgument<TokenOverridable>;
5 changes: 3 additions & 2 deletions packages/web-api/src/types/request/bots.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import type { OptionalTeamAssignable, TokenOverridable } from './common';
import { OptionalArgument } from '../helpers';

// https://api.slack.com/methods/bots.info
export interface BotsInfoArguments extends TokenOverridable, OptionalTeamAssignable {
export type BotsInfoArguments = OptionalArgument<TokenOverridable & OptionalTeamAssignable & {
/** @description Bot ID, which starts with 'B', to retrieve information about. */
bot?: string;
}
}>;
5 changes: 3 additions & 2 deletions packages/web-api/src/types/request/chat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import type {
TimelinePaginationEnabled,
TokenOverridable,
} from './common';
import { OptionalArgument } from '../helpers';

interface Channel {
/** @description Channel ID for the message. */
Expand Down Expand Up @@ -178,8 +179,8 @@ export type ChatScheduleMessageArguments = TokenOverridable & MessageContents &
} & ReplyInThread & Parse & LinkNames & AsUser & Metadata & Unfurls;

// https://api.slack.com/methods/chat.scheduledMessages.list
export interface ChatScheduledMessagesListArguments extends TokenOverridable, CursorPaginationEnabled,
OptionalTeamAssignable, Pick<TimelinePaginationEnabled, 'latest' | 'oldest'>, Partial<Channel> {}
export type ChatScheduledMessagesListArguments = OptionalArgument<TokenOverridable & CursorPaginationEnabled &
OptionalTeamAssignable & Pick<TimelinePaginationEnabled, 'latest' | 'oldest'> & Partial<Channel>>;

interface SourceAndUnfurlID {
/**
Expand Down
10 changes: 6 additions & 4 deletions packages/web-api/src/types/request/conversations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import type {
TimelinePaginationEnabled,
TokenOverridable,
} from './common';
import { OptionalArgument } from '../helpers';

interface Channel {
/** @description ID of conversation. */
Expand Down Expand Up @@ -115,23 +116,24 @@ export interface ConversationsKickArguments extends Channel, TokenOverridable {
export interface ConversationsLeaveArguments extends Channel, TokenOverridable {}

// https://api.slack.com/methods/conversations.list
export interface ConversationsListArguments extends TokenOverridable, CursorPaginationEnabled, OptionalTeamAssignable {
export type ConversationsListArguments = OptionalArgument<TokenOverridable & CursorPaginationEnabled &
OptionalTeamAssignable & {
/** @description Set to `true` to exclude archived channels from the list. Defaults to `false`. */
exclude_archived?: boolean;
/**
* @description Mix and match channel types by providing a comma-separated list of any combination of:
* `public_channel`, `private_channel`, `mpim` or `im`. Defaults to `public_channel`.
*/
types?: string;
}
}>;

// https://api.slack.com/methods/conversations.listConnectInvites
export interface ConversationsListConnectInvitesArguments extends TokenOverridable, OptionalTeamAssignable {
export type ConversationsListConnectInvitesArguments = OptionalArgument<TokenOverridable & OptionalTeamAssignable & {
/** @description Maximum number of invites to return. Defaults to `100`. */
count?: number;
/** @description Set to `next_cursor` returned by previous call to list items in subsequent page. */
cursor?: string;
}
}>;

// https://api.slack.com/methods/conversations.mark
export interface ConversationsMarkArguments extends Message, TokenOverridable { }
Expand Down
9 changes: 5 additions & 4 deletions packages/web-api/src/types/request/dnd.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import { OptionalTeamAssignable, TokenOverridable } from './common';
import { OptionalArgument } from '../helpers';

// https://api.slack.com/methods/dnd.endDnd
export interface DndEndDndArguments extends TokenOverridable { }
export type DndEndDndArguments = OptionalArgument<TokenOverridable>;
// https://api.slack.com/methods/dnd.endSnooze
export interface DndEndSnoozeArguments extends TokenOverridable { }
export type DndEndSnoozeArguments = OptionalArgument<TokenOverridable>;
// https://api.slack.com/methods/dnd.info
export interface DndInfoArguments extends TokenOverridable, OptionalTeamAssignable {
export type DndInfoArguments = OptionalArgument<TokenOverridable & OptionalTeamAssignable & {
/** @description User to fetch status for (defaults to authed user). */
user?: string;
}
}>;
// https://api.slack.com/methods/dnd.setSnooze
export interface DndSetSnoozeArguments extends TokenOverridable {
/** @description Number of minutes, from now, to snooze until. */
Expand Down
5 changes: 3 additions & 2 deletions packages/web-api/src/types/request/emoji.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { TokenOverridable } from './common';
import { OptionalArgument } from '../helpers';
// https://api.slack.com/methods/emoji.list
export interface EmojiListArguments extends TokenOverridable {
export type EmojiListArguments = OptionalArgument<TokenOverridable & {
/** @description Include a list of categories for Unicode emoji and the emoji in each category. */
include_categories?: boolean;
}
}>;
4 changes: 2 additions & 2 deletions packages/web-api/src/types/request/openid.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { OAuthCredentials, OAuthGrantRefresh } from './common';
import { OptionalArgument } from '../helpers';

// https://api.slack.com/methods/openid.connect.token
export interface OpenIDConnectTokenArguments extends OAuthCredentials, OAuthGrantRefresh {}
// https://api.slack.com/methods/openid.connect.userInfo
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface OpenIDConnectUserInfoArguments {}
export type OpenIDConnectUserInfoArguments = OptionalArgument<object>;
7 changes: 4 additions & 3 deletions packages/web-api/src/types/request/reactions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
TokenOverridable,
TraditionalPagingEnabled,
} from './common';
import { OptionalArgument } from '../helpers';

interface ReactionsFull {
/** @description If `true`, return the complete reaction list. */
Expand All @@ -23,11 +24,11 @@ export type ReactionsGetArguments = ReactionsFull & TokenOverridable &
(MessageArgument | FileArgument | FileCommentArgument);

// https://api.slack.com/methods/reactions.list
export interface ReactionsListArguments extends ReactionsFull, TokenOverridable, TraditionalPagingEnabled,
CursorPaginationEnabled, OptionalTeamAssignable {
export type ReactionsListArguments = OptionalArgument<ReactionsFull & TokenOverridable & TraditionalPagingEnabled &
CursorPaginationEnabled & OptionalTeamAssignable & {
/** @description Show reactions made by this user. Defaults to the authed user. */
user?: string;
}
}>;
// https://api.slack.com/methods/reactions.remove
export type ReactionsRemoveArguments = TokenOverridable & ReactionName &
(MessageArgument | FileArgument | FileCommentArgument);
3 changes: 2 additions & 1 deletion packages/web-api/src/types/request/reminders.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { OptionalTeamAssignable, TokenOverridable } from './common';
import { OptionalArgument } from '../helpers';

interface ReminderRecurrenceDailyMonthlyYearly {
/** @description Specifies the repeating behavior of a reminder. */
Expand Down Expand Up @@ -51,4 +52,4 @@ export interface RemindersInfoArguments extends TokenOverridable, OptionalTeamAs
reminder: string;
}
// https://api.slack.com/methods/reminders.list
export interface RemindersListArguments extends TokenOverridable, OptionalTeamAssignable { }
export type RemindersListArguments = OptionalArgument<TokenOverridable & OptionalTeamAssignable>;
Loading

0 comments on commit 9f2935f

Please sign in to comment.