diff --git a/json-logs/samples/api/slackLists.access.delete.json b/json-logs/samples/api/slackLists.access.delete.json new file mode 100644 index 000000000..72cc2c92b --- /dev/null +++ b/json-logs/samples/api/slackLists.access.delete.json @@ -0,0 +1,12 @@ +{ + "ok": false, + "response_metadata": { + "messages": [ + "" + ] + }, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.access.set.json b/json-logs/samples/api/slackLists.access.set.json new file mode 100644 index 000000000..72cc2c92b --- /dev/null +++ b/json-logs/samples/api/slackLists.access.set.json @@ -0,0 +1,12 @@ +{ + "ok": false, + "response_metadata": { + "messages": [ + "" + ] + }, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.create.json b/json-logs/samples/api/slackLists.create.json new file mode 100644 index 000000000..01b3f7e29 --- /dev/null +++ b/json-logs/samples/api/slackLists.create.json @@ -0,0 +1,43 @@ +{ + "ok": false, + "list_id": "F00000000", + "list_metadata": { + "schema": [ + { + "key": "", + "name": "", + "is_primary_column": false, + "type": "", + "id": "", + "options": { + "format": "", + "show_member_name": false, + "choices": [ + { + "value": "", + "label": "", + "color": "" + } + ] + } + } + ], + "subtask_schema": [ + { + "key": "", + "name": "", + "is_primary_column": false, + "type": "", + "id": "", + "options": { + "format": "", + "show_member_name": false + } + } + ] + }, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.download.get.json b/json-logs/samples/api/slackLists.download.get.json new file mode 100644 index 000000000..4877eb764 --- /dev/null +++ b/json-logs/samples/api/slackLists.download.get.json @@ -0,0 +1,14 @@ +{ + "ok": false, + "status": "", + "download_url": "", + "response_metadata": { + "messages": [ + "" + ] + }, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.download.start.json b/json-logs/samples/api/slackLists.download.start.json new file mode 100644 index 000000000..b37f453f8 --- /dev/null +++ b/json-logs/samples/api/slackLists.download.start.json @@ -0,0 +1,13 @@ +{ + "ok": false, + "job_id": "", + "response_metadata": { + "messages": [ + "" + ] + }, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.items.create.json b/json-logs/samples/api/slackLists.items.create.json new file mode 100644 index 000000000..0a315ed3b --- /dev/null +++ b/json-logs/samples/api/slackLists.items.create.json @@ -0,0 +1,44 @@ +{ + "ok": false, + "item": { + "id": "", + "list_id": "", + "date_created": 12345, + "created_by": "", + "updated_by": "", + "fields": [ + { + "key": "", + "column_id": "", + "value": "", + "rich_text": [ + { + "type": "", + "elements": [ + { + "type": "", + "elements": [ + { + "type": "", + "text": "" + } + ] + } + ] + } + ], + "checkbox": false + } + ], + "updated_timestamp": "" + }, + "response_metadata": { + "messages": [ + "" + ] + }, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.items.delete.json b/json-logs/samples/api/slackLists.items.delete.json new file mode 100644 index 000000000..6b6ba1fe1 --- /dev/null +++ b/json-logs/samples/api/slackLists.items.delete.json @@ -0,0 +1,7 @@ +{ + "ok": false, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.items.deleteMultiple.json b/json-logs/samples/api/slackLists.items.deleteMultiple.json new file mode 100644 index 000000000..72cc2c92b --- /dev/null +++ b/json-logs/samples/api/slackLists.items.deleteMultiple.json @@ -0,0 +1,12 @@ +{ + "ok": false, + "response_metadata": { + "messages": [ + "" + ] + }, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.items.info.json b/json-logs/samples/api/slackLists.items.info.json new file mode 100644 index 000000000..e2b99c577 --- /dev/null +++ b/json-logs/samples/api/slackLists.items.info.json @@ -0,0 +1,187 @@ +{ + "ok": false, + "list": { + "id": "", + "created": 12345, + "timestamp": 12345, + "name": "", + "title": "", + "mimetype": "", + "filetype": "", + "pretty_type": "", + "user": "", + "user_team": "", + "editable": false, + "size": 12345, + "mode": "", + "is_external": false, + "external_type": "", + "is_public": false, + "public_url_shared": false, + "display_as_bot": false, + "username": "", + "list_metadata": { + "schema": [ + { + "id": "", + "name": "", + "key": "", + "type": "", + "is_primary_column": false, + "options": { + "format": "", + "show_member_name": false, + "choices": [ + { + "value": "", + "label": "", + "color": "" + } + ] + } + } + ], + "views": [ + { + "id": "", + "name": "", + "type": "", + "is_locked": false, + "position": "1234567890", + "columns": [ + { + "visible": false, + "key": "", + "id": "", + "position": "1234567890" + } + ], + "date_created": 12345, + "created_by": "U00000000", + "stick_column_left": false, + "is_all_items_view": false, + "default_view_key": "", + "show_completed_items": false + } + ], + "integrations": [ + "" + ], + "icon": "", + "description": "", + "description_blocks": [ + { + "type": "", + "block_id": "", + "elements": [ + { + "type": "", + "elements": [ + { + "type": "", + "text": "" + } + ] + } + ] + } + ], + "is_trial": false, + "subtask_schema": [ + { + "id": "", + "name": "", + "key": "", + "type": "", + "is_primary_column": false, + "options": { + "format": "", + "show_member_name": false + } + } + ], + "creation_source": { + "type": "", + "reference_id": "" + }, + "todo_mode": false, + "default_view": "" + }, + "list_limits": { + "over_row_maximum": false, + "row_count_limit": 12345, + "row_count": 12345, + "archived_row_count": 12345, + "over_column_maximum": false, + "column_count": 12345, + "column_count_limit": 12345, + "over_view_maximum": false, + "view_count": 12345, + "view_count_limit": 12345, + "max_attachments_per_cell": 12345 + }, + "url_private": "", + "url_private_download": "", + "permalink": "", + "permalink_public": "", + "last_editor": "", + "list_csv_download_url": "", + "updated": 12345, + "is_starred": false, + "skipped_shares": false, + "teams_shared_with": [ + "" + ], + "is_restricted_sharing_enabled": false, + "has_rich_preview": false, + "file_access": "", + "access": "", + "org_or_workspace_access": "", + "is_ai_suggested": false + }, + "record": { + "id": "", + "list_id": "", + "date_created": 12345, + "created_by": "", + "updated_by": "", + "fields": [ + { + "key": "", + "value": false, + "checkbox": false, + "column_id": "" + } + ], + "updated_timestamp": "", + "is_subscribed": false + }, + "subtasks": [ + { + "id": "", + "list_id": "", + "date_created": 12345, + "created_by": "", + "updated_by": "", + "fields": [ + { + "key": "", + "value": false, + "checkbox": false, + "column_id": "" + } + ], + "updated_timestamp": "", + "is_subscribed": false + } + ], + "response_metadata": { + "messages": [ + "" + ] + }, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.items.list.json b/json-logs/samples/api/slackLists.items.list.json new file mode 100644 index 000000000..f2353c81c --- /dev/null +++ b/json-logs/samples/api/slackLists.items.list.json @@ -0,0 +1,73 @@ +{ + "ok": false, + "items": [ + { + "id": "", + "list_id": "", + "date_created": 12345, + "created_by": "", + "updated_by": "", + "fields": [ + { + "key": "", + "column_id": "", + "value": "", + "rich_text": [ + { + "type": "", + "block_id": "", + "elements": [ + { + "type": "", + "elements": [ + { + "text": "", + "type": "" + } + ] + } + ] + } + ], + "checkbox": false, + "text": "" + }, + { + "key": "", + "value": false, + "checkbox": false, + "column_id": "", + "text": "", + "rich_text": [ + { + "type": "", + "block_id": "", + "elements": [ + { + "type": "", + "elements": [ + { + "text": "", + "type": "" + } + ] + } + ] + } + ] + } + ], + "updated_timestamp": "" + } + ], + "response_metadata": { + "next_cursor": "", + "messages": [ + "" + ] + }, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.items.update.json b/json-logs/samples/api/slackLists.items.update.json new file mode 100644 index 000000000..72cc2c92b --- /dev/null +++ b/json-logs/samples/api/slackLists.items.update.json @@ -0,0 +1,12 @@ +{ + "ok": false, + "response_metadata": { + "messages": [ + "" + ] + }, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.update.json b/json-logs/samples/api/slackLists.update.json new file mode 100644 index 000000000..72cc2c92b --- /dev/null +++ b/json-logs/samples/api/slackLists.update.json @@ -0,0 +1,12 @@ +{ + "ok": false, + "response_metadata": { + "messages": [ + "" + ] + }, + "error": "", + "needed": "", + "provided": "", + "warning": "" +} \ No newline at end of file diff --git a/json-logs/samples/api/usergroups.list.json b/json-logs/samples/api/usergroups.list.json index 382c2aa20..87172745d 100644 --- a/json-logs/samples/api/usergroups.list.json +++ b/json-logs/samples/api/usergroups.list.json @@ -27,8 +27,7 @@ }, "channel_count": 12345, "users": [ - "", - "U00000000" + "" ], "user_count": 12345, "is_section": false, diff --git a/metadata/web-api/rate_limit_tiers.json b/metadata/web-api/rate_limit_tiers.json index cdeeba994..42592d469 100644 --- a/metadata/web-api/rate_limit_tiers.json +++ b/metadata/web-api/rate_limit_tiers.json @@ -267,6 +267,18 @@ "search.all": "Tier2", "search.files": "Tier2", "search.messages": "Tier2", + "slackLists.access.delete": "Tier3", + "slackLists.access.set": "Tier3", + "slackLists.create": "Tier2", + "slackLists.download.get": "Tier4", + "slackLists.download.start": "Tier2", + "slackLists.items.create": "Tier3", + "slackLists.items.delete": "Tier2", + "slackLists.items.deleteMultiple": "Tier2", + "slackLists.items.info": "Tier2", + "slackLists.items.list": "Tier2", + "slackLists.items.update": "Tier3", + "slackLists.update": "Tier2", "stars.add": "Tier2", "stars.list": "Tier3", "stars.remove": "Tier2", diff --git a/slack-api-client/src/main/java/com/slack/api/methods/AsyncMethodsClient.java b/slack-api-client/src/main/java/com/slack/api/methods/AsyncMethodsClient.java index 02b8038a0..28e54149b 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/AsyncMethodsClient.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/AsyncMethodsClient.java @@ -101,6 +101,18 @@ import com.slack.api.methods.request.search.SearchAllRequest; import com.slack.api.methods.request.search.SearchFilesRequest; import com.slack.api.methods.request.search.SearchMessagesRequest; +import com.slack.api.methods.request.slack_lists.SlackListsAccessDeleteRequest; +import com.slack.api.methods.request.slack_lists.SlackListsAccessSetRequest; +import com.slack.api.methods.request.slack_lists.SlackListsCreateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsDownloadGetRequest; +import com.slack.api.methods.request.slack_lists.SlackListsDownloadStartRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsCreateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsDeleteRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsDeleteMultipleRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsInfoRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsListRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsUpdateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsUpdateRequest; import com.slack.api.methods.request.stars.StarsAddRequest; import com.slack.api.methods.request.stars.StarsListRequest; import com.slack.api.methods.request.stars.StarsRemoveRequest; @@ -223,6 +235,18 @@ import com.slack.api.methods.response.search.SearchAllResponse; import com.slack.api.methods.response.search.SearchFilesResponse; import com.slack.api.methods.response.search.SearchMessagesResponse; +import com.slack.api.methods.response.slack_lists.SlackListsAccessDeleteResponse; +import com.slack.api.methods.response.slack_lists.SlackListsAccessSetResponse; +import com.slack.api.methods.response.slack_lists.SlackListsCreateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsDownloadGetResponse; +import com.slack.api.methods.response.slack_lists.SlackListsDownloadStartResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsCreateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsDeleteResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsDeleteMultipleResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsInfoResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsListResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsUpdateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsUpdateResponse; import com.slack.api.methods.response.stars.StarsAddResponse; import com.slack.api.methods.response.stars.StarsListResponse; import com.slack.api.methods.response.stars.StarsRemoveResponse; @@ -1383,6 +1407,58 @@ CompletableFuture CompletableFuture searchFiles(RequestConfigurator req); + // ------------------------------ + // slackLists + // ------------------------------ + + CompletableFuture slackListsAccessDelete(SlackListsAccessDeleteRequest req); + + CompletableFuture slackListsAccessDelete(RequestConfigurator req); + + CompletableFuture slackListsAccessSet(SlackListsAccessSetRequest req); + + CompletableFuture slackListsAccessSet(RequestConfigurator req); + + CompletableFuture slackListsCreate(SlackListsCreateRequest req); + + CompletableFuture slackListsCreate(RequestConfigurator req); + + CompletableFuture slackListsDownloadGet(SlackListsDownloadGetRequest req); + + CompletableFuture slackListsDownloadGet(RequestConfigurator req); + + CompletableFuture slackListsDownloadStart(SlackListsDownloadStartRequest req); + + CompletableFuture slackListsDownloadStart(RequestConfigurator req); + + CompletableFuture slackListsItemsCreate(SlackListsItemsCreateRequest req); + + CompletableFuture slackListsItemsCreate(RequestConfigurator req); + + CompletableFuture slackListsItemsDelete(SlackListsItemsDeleteRequest req); + + CompletableFuture slackListsItemsDelete(RequestConfigurator req); + + CompletableFuture slackListsItemsDeleteMultiple(SlackListsItemsDeleteMultipleRequest req); + + CompletableFuture slackListsItemsDeleteMultiple(RequestConfigurator req); + + CompletableFuture slackListsItemsInfo(SlackListsItemsInfoRequest req); + + CompletableFuture slackListsItemsInfo(RequestConfigurator req); + + CompletableFuture slackListsItemsList(SlackListsItemsListRequest req); + + CompletableFuture slackListsItemsList(RequestConfigurator req); + + CompletableFuture slackListsItemsUpdate(SlackListsItemsUpdateRequest req); + + CompletableFuture slackListsItemsUpdate(RequestConfigurator req); + + CompletableFuture slackListsUpdate(SlackListsUpdateRequest req); + + CompletableFuture slackListsUpdate(RequestConfigurator req); + // ------------------------------ // stars // ------------------------------ diff --git a/slack-api-client/src/main/java/com/slack/api/methods/Methods.java b/slack-api-client/src/main/java/com/slack/api/methods/Methods.java index 8415cca90..62d8b4dfc 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/Methods.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/Methods.java @@ -647,6 +647,23 @@ private Methods() { public static final String SEARCH_FILES = "search.files"; public static final String SEARCH_MESSAGES = "search.messages"; + // ------------------------------ + // slackLists + // ------------------------------ + + public static final String SLACKLISTS_ACCESS_DELETE = "slackLists.access.delete"; + public static final String SLACKLISTS_ACCESS_SET = "slackLists.access.set"; + public static final String SLACKLISTS_CREATE = "slackLists.create"; + public static final String SLACKLISTS_DOWNLOAD_GET = "slackLists.download.get"; + public static final String SLACKLISTS_DOWNLOAD_START = "slackLists.download.start"; + public static final String SLACKLISTS_ITEMS_CREATE = "slackLists.items.create"; + public static final String SLACKLISTS_ITEMS_DELETE = "slackLists.items.delete"; + public static final String SLACKLISTS_ITEMS_DELETE_MULTIPLE = "slackLists.items.deleteMultiple"; + public static final String SLACKLISTS_ITEMS_INFO = "slackLists.items.info"; + public static final String SLACKLISTS_ITEMS_LIST = "slackLists.items.list"; + public static final String SLACKLISTS_ITEMS_UPDATE = "slackLists.items.update"; + public static final String SLACKLISTS_UPDATE = "slackLists.update"; + // ------------------------------ // stars // ------------------------------ @@ -654,7 +671,6 @@ private Methods() { public static final String STARS_ADD = "stars.add"; public static final String STARS_LIST = "stars.list"; public static final String STARS_REMOVE = "stars.remove"; - // ------------------------------ // team // ------------------------------ diff --git a/slack-api-client/src/main/java/com/slack/api/methods/MethodsClient.java b/slack-api-client/src/main/java/com/slack/api/methods/MethodsClient.java index cd24186d3..586679cc8 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/MethodsClient.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/MethodsClient.java @@ -117,6 +117,18 @@ import com.slack.api.methods.request.stars.StarsAddRequest; import com.slack.api.methods.request.stars.StarsListRequest; import com.slack.api.methods.request.stars.StarsRemoveRequest; +import com.slack.api.methods.request.slack_lists.SlackListsAccessDeleteRequest; +import com.slack.api.methods.request.slack_lists.SlackListsAccessSetRequest; +import com.slack.api.methods.request.slack_lists.SlackListsCreateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsDownloadGetRequest; +import com.slack.api.methods.request.slack_lists.SlackListsDownloadStartRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsCreateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsDeleteRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsDeleteMultipleRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsInfoRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsListRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsUpdateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsUpdateRequest; import com.slack.api.methods.request.team.*; import com.slack.api.methods.request.team.external_teams.TeamExternalTeamsDisconnectRequest; import com.slack.api.methods.request.team.external_teams.TeamExternalTeamsListRequest; @@ -248,6 +260,18 @@ import com.slack.api.methods.response.search.SearchAllResponse; import com.slack.api.methods.response.search.SearchFilesResponse; import com.slack.api.methods.response.search.SearchMessagesResponse; +import com.slack.api.methods.response.slack_lists.SlackListsAccessDeleteResponse; +import com.slack.api.methods.response.slack_lists.SlackListsAccessSetResponse; +import com.slack.api.methods.response.slack_lists.SlackListsCreateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsDownloadGetResponse; +import com.slack.api.methods.response.slack_lists.SlackListsDownloadStartResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsCreateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsDeleteResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsDeleteMultipleResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsInfoResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsListResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsUpdateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsUpdateResponse; import com.slack.api.methods.response.stars.StarsAddResponse; import com.slack.api.methods.response.stars.StarsListResponse; import com.slack.api.methods.response.stars.StarsRemoveResponse; @@ -2469,6 +2493,70 @@ SearchMessagesResponse searchMessages(RequestConfigurator req) throws IOException, SlackApiException; + // ------------------------------ + // slackLists + // ------------------------------ + + SlackListsAccessDeleteResponse slackListsAccessDelete(SlackListsAccessDeleteRequest req) throws IOException, SlackApiException; + + SlackListsAccessDeleteResponse slackListsAccessDelete(RequestConfigurator req) + throws IOException, SlackApiException; + + SlackListsAccessSetResponse slackListsAccessSet(SlackListsAccessSetRequest req) throws IOException, SlackApiException; + + SlackListsAccessSetResponse slackListsAccessSet(RequestConfigurator req) + throws IOException, SlackApiException; + + SlackListsCreateResponse slackListsCreate(SlackListsCreateRequest req) throws IOException, SlackApiException; + + SlackListsCreateResponse slackListsCreate(RequestConfigurator req) + throws IOException, SlackApiException; + + SlackListsDownloadGetResponse slackListsDownloadGet(SlackListsDownloadGetRequest req) throws IOException, SlackApiException; + + SlackListsDownloadGetResponse slackListsDownloadGet(RequestConfigurator req) + throws IOException, SlackApiException; + + SlackListsDownloadStartResponse slackListsDownloadStart(SlackListsDownloadStartRequest req) throws IOException, SlackApiException; + + SlackListsDownloadStartResponse slackListsDownloadStart(RequestConfigurator req) + throws IOException, SlackApiException; + + SlackListsItemsCreateResponse slackListsItemsCreate(SlackListsItemsCreateRequest req) throws IOException, SlackApiException; + + SlackListsItemsCreateResponse slackListsItemsCreate(RequestConfigurator req) + throws IOException, SlackApiException; + + SlackListsItemsDeleteResponse slackListsItemsDelete(SlackListsItemsDeleteRequest req) throws IOException, SlackApiException; + + SlackListsItemsDeleteResponse slackListsItemsDelete(RequestConfigurator req) + throws IOException, SlackApiException; + + SlackListsItemsDeleteMultipleResponse slackListsItemsDeleteMultiple(SlackListsItemsDeleteMultipleRequest req) throws IOException, SlackApiException; + + SlackListsItemsDeleteMultipleResponse slackListsItemsDeleteMultiple(RequestConfigurator req) + throws IOException, SlackApiException; + + SlackListsItemsInfoResponse slackListsItemsInfo(SlackListsItemsInfoRequest req) throws IOException, SlackApiException; + + SlackListsItemsInfoResponse slackListsItemsInfo(RequestConfigurator req) + throws IOException, SlackApiException; + + SlackListsItemsListResponse slackListsItemsList(SlackListsItemsListRequest req) throws IOException, SlackApiException; + + SlackListsItemsListResponse slackListsItemsList(RequestConfigurator req) + throws IOException, SlackApiException; + + SlackListsItemsUpdateResponse slackListsItemsUpdate(SlackListsItemsUpdateRequest req) throws IOException, SlackApiException; + + SlackListsItemsUpdateResponse slackListsItemsUpdate(RequestConfigurator req) + throws IOException, SlackApiException; + + SlackListsUpdateResponse slackListsUpdate(SlackListsUpdateRequest req) throws IOException, SlackApiException; + + SlackListsUpdateResponse slackListsUpdate(RequestConfigurator req) + throws IOException, SlackApiException; + // ------------------------------ // stars // ------------------------------ diff --git a/slack-api-client/src/main/java/com/slack/api/methods/MethodsRateLimits.java b/slack-api-client/src/main/java/com/slack/api/methods/MethodsRateLimits.java index 5f44af813..f97155d55 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/MethodsRateLimits.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/MethodsRateLimits.java @@ -424,10 +424,24 @@ public static void setRateLimitTier(String methodName, MethodsRateLimitTier tier setRateLimitTier(SEARCH_FILES, Tier2); setRateLimitTier(SEARCH_MESSAGES, Tier2); + setRateLimitTier(SLACKLISTS_ACCESS_DELETE, Tier3); + setRateLimitTier(SLACKLISTS_ACCESS_SET, Tier3); + setRateLimitTier(SLACKLISTS_CREATE, Tier2); + setRateLimitTier(SLACKLISTS_DOWNLOAD_GET, Tier4); + setRateLimitTier(SLACKLISTS_DOWNLOAD_START, Tier2); + setRateLimitTier(SLACKLISTS_ITEMS_CREATE, Tier3); + setRateLimitTier(SLACKLISTS_ITEMS_DELETE, Tier2); + setRateLimitTier(SLACKLISTS_ITEMS_DELETE_MULTIPLE, Tier2); + setRateLimitTier(SLACKLISTS_ITEMS_INFO, Tier2); + setRateLimitTier(SLACKLISTS_ITEMS_LIST, Tier2); + setRateLimitTier(SLACKLISTS_ITEMS_UPDATE, Tier3); + setRateLimitTier(SLACKLISTS_UPDATE, Tier2); + setRateLimitTier(STARS_ADD, Tier2); setRateLimitTier(STARS_LIST, Tier3); setRateLimitTier(STARS_REMOVE, Tier2); + setRateLimitTier(TEAM_ACCESS_LOGS, Tier2); setRateLimitTier(TEAM_BILLABLE_INFO, Tier2); setRateLimitTier(TEAM_INFO, Tier3); diff --git a/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java b/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java index 109d63f15..0e85c0e7c 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java @@ -114,6 +114,18 @@ import com.slack.api.methods.request.search.SearchAllRequest; import com.slack.api.methods.request.search.SearchFilesRequest; import com.slack.api.methods.request.search.SearchMessagesRequest; +import com.slack.api.methods.request.slack_lists.SlackListsAccessDeleteRequest; +import com.slack.api.methods.request.slack_lists.SlackListsAccessSetRequest; +import com.slack.api.methods.request.slack_lists.SlackListsCreateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsDownloadGetRequest; +import com.slack.api.methods.request.slack_lists.SlackListsDownloadStartRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsCreateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsDeleteRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsDeleteMultipleRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsInfoRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsListRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsUpdateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsUpdateRequest; import com.slack.api.methods.request.stars.StarsAddRequest; import com.slack.api.methods.request.stars.StarsListRequest; import com.slack.api.methods.request.stars.StarsRemoveRequest; @@ -2776,6 +2788,134 @@ public static FormBody.Builder toForm(StarsRemoveRequest req) { return form; } + public static FormBody.Builder toForm(SlackListsAccessDeleteRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("list_id", req.getListId(), form); + if (req.getUserIds() != null) { + String json = getJsonWithGsonAnonymInnerClassHandling(req.getUserIds()); + form.add("user_ids", json); + } + if (req.getChannelIds() != null) { + String json = getJsonWithGsonAnonymInnerClassHandling(req.getChannelIds()); + form.add("channel_ids", json); + } + return form; + } + + public static FormBody.Builder toForm(SlackListsAccessSetRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("list_id", req.getListId(), form); + setIfNotNull("access_level", req.getAccessLevel(), form); + if (req.getUserIds() != null) { + String json = getJsonWithGsonAnonymInnerClassHandling(req.getUserIds()); + form.add("user_ids", json); + } + if (req.getChannelIds() != null) { + String json = getJsonWithGsonAnonymInnerClassHandling(req.getChannelIds()); + form.add("channel_ids", json); + } + return form; + } + + public static FormBody.Builder toForm(SlackListsCreateRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("name", req.getName(), form); + if (req.getDescriptionBlocks() != null) { + String json = getJsonWithGsonAnonymInnerClassHandling(req.getDescriptionBlocks()); + form.add("description_blocks", json); + } + if (req.getSchema() != null) { + String json = getJsonWithGsonAnonymInnerClassHandling(req.getSchema()); + form.add("schema", json); + } + setIfNotNull("copy_from_list_id", req.getCopyFromListId(), form); + setIfNotNull("include_copied_list_records", req.getIncludeCopiedListRecords(), form); + setIfNotNull("todo_mode", req.getTodoMode(), form); + return form; + } + + public static FormBody.Builder toForm(SlackListsDownloadGetRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("list_id", req.getListId(), form); + setIfNotNull("job_id", req.getJobId(), form); + return form; + } + + public static FormBody.Builder toForm(SlackListsDownloadStartRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("list_id", req.getListId(), form); + setIfNotNull("include_archived", req.getIncludeArchived(), form); + return form; + } + + public static FormBody.Builder toForm(SlackListsItemsCreateRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("list_id", req.getListId(), form); + setIfNotNull("duplicated_item_id", req.getDuplicatedItemId(), form); + setIfNotNull("parent_item_id", req.getParentItemId(), form); + if (req.getInitialFields() != null) { + String json = getJsonWithGsonAnonymInnerClassHandling(req.getInitialFields()); + form.add("intial_fields", json); + } + return form; + } + + public static FormBody.Builder toForm(SlackListsItemsDeleteRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("list_id", req.getListId(), form); + setIfNotNull("id", req.getId(), form); + return form; + } + + public static FormBody.Builder toForm(SlackListsItemsDeleteMultipleRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("list_id", req.getListId(), form); + if (req.getIds() != null) { + String json = getJsonWithGsonAnonymInnerClassHandling(req.getIds()); + form.add("ids", json); + } + return form; + } + + public static FormBody.Builder toForm(SlackListsItemsInfoRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("list_id", req.getListId(), form); + setIfNotNull("id", req.getId(), form); + setIfNotNull("include_is_subscribed", req.getIncludeIsSubscribed(), form); + return form; + } + + public static FormBody.Builder toForm(SlackListsItemsListRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("list_id", req.getListId(), form); + setIfNotNull("limit", req.getLimit(), form); + setIfNotNull("cursor", req.getCursor(), form); + setIfNotNull("archived", req.getArchived(), form); + return form; + } + + public static FormBody.Builder toForm(SlackListsItemsUpdateRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("list_id", req.getListId(), form); + if (req.getCells() != null) { + String json = getJsonWithGsonAnonymInnerClassHandling(req.getCells()); + form.add("cells", json); + } + return form; + } + + public static FormBody.Builder toForm(SlackListsUpdateRequest req) { + FormBody.Builder form = new FormBody.Builder(); + setIfNotNull("id", req.getId(), form); + setIfNotNull("name", req.getName(), form); + if (req.getDescriptionBlocks() != null) { + String json = getJsonWithGsonAnonymInnerClassHandling(req.getDescriptionBlocks()); + form.add("description_blocks", json); + } + setIfNotNull("todo_mode", req.getTodoMode(), form); + return form; + } + public static FormBody.Builder toForm(TeamAccessLogsRequest req) { FormBody.Builder form = new FormBody.Builder(); setIfNotNull("before", req.getBefore(), form); diff --git a/slack-api-client/src/main/java/com/slack/api/methods/impl/AsyncMethodsClientImpl.java b/slack-api-client/src/main/java/com/slack/api/methods/impl/AsyncMethodsClientImpl.java index 079f0c2ac..b80068da9 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/impl/AsyncMethodsClientImpl.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/impl/AsyncMethodsClientImpl.java @@ -105,6 +105,18 @@ import com.slack.api.methods.request.search.SearchAllRequest; import com.slack.api.methods.request.search.SearchFilesRequest; import com.slack.api.methods.request.search.SearchMessagesRequest; +import com.slack.api.methods.request.slack_lists.SlackListsAccessDeleteRequest; +import com.slack.api.methods.request.slack_lists.SlackListsAccessSetRequest; +import com.slack.api.methods.request.slack_lists.SlackListsCreateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsDownloadGetRequest; +import com.slack.api.methods.request.slack_lists.SlackListsDownloadStartRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsCreateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsDeleteRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsDeleteMultipleRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsInfoRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsListRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsUpdateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsUpdateRequest; import com.slack.api.methods.request.stars.StarsAddRequest; import com.slack.api.methods.request.stars.StarsListRequest; import com.slack.api.methods.request.stars.StarsRemoveRequest; @@ -227,6 +239,18 @@ import com.slack.api.methods.response.search.SearchAllResponse; import com.slack.api.methods.response.search.SearchFilesResponse; import com.slack.api.methods.response.search.SearchMessagesResponse; +import com.slack.api.methods.response.slack_lists.SlackListsAccessDeleteResponse; +import com.slack.api.methods.response.slack_lists.SlackListsAccessSetResponse; +import com.slack.api.methods.response.slack_lists.SlackListsCreateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsDownloadGetResponse; +import com.slack.api.methods.response.slack_lists.SlackListsDownloadStartResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsCreateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsDeleteResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsDeleteMultipleResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsInfoResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsListResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsUpdateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsUpdateResponse; import com.slack.api.methods.response.stars.StarsAddResponse; import com.slack.api.methods.response.stars.StarsListResponse; import com.slack.api.methods.response.stars.StarsRemoveResponse; @@ -2509,6 +2533,126 @@ public CompletableFuture searchFiles(RequestConfigurator slackListsAccessDelete(SlackListsAccessDeleteRequest req) { + return executor.execute(SLACKLISTS_ACCESS_DELETE, toMap(req), () -> methods.slackListsAccessDelete(req)); + } + + @Override + public CompletableFuture slackListsAccessDelete(RequestConfigurator req) { + return slackListsAccessDelete(req.configure(SlackListsAccessDeleteRequest.builder()).build()); + } + + @Override + public CompletableFuture slackListsAccessSet(SlackListsAccessSetRequest req) { + return executor.execute(SLACKLISTS_ACCESS_SET, toMap(req), () -> methods.slackListsAccessSet(req)); + } + + @Override + public CompletableFuture slackListsAccessSet(RequestConfigurator req) { + return slackListsAccessSet(req.configure(SlackListsAccessSetRequest.builder()).build()); + } + + @Override + public CompletableFuture slackListsCreate(SlackListsCreateRequest req) { + return executor.execute(SLACKLISTS_CREATE, toMap(req), () -> methods.slackListsCreate(req)); + } + + @Override + public CompletableFuture slackListsCreate(RequestConfigurator req) { + return slackListsCreate(req.configure(SlackListsCreateRequest.builder()).build()); + } + + @Override + public CompletableFuture slackListsDownloadGet(SlackListsDownloadGetRequest req) { + return executor.execute(SLACKLISTS_DOWNLOAD_GET, toMap(req), () -> methods.slackListsDownloadGet(req)); + } + + @Override + public CompletableFuture slackListsDownloadGet(RequestConfigurator req) { + return slackListsDownloadGet(req.configure(SlackListsDownloadGetRequest.builder()).build()); + } + + @Override + public CompletableFuture slackListsDownloadStart(SlackListsDownloadStartRequest req) { + return executor.execute(SLACKLISTS_DOWNLOAD_START, toMap(req), () -> methods.slackListsDownloadStart(req)); + } + + @Override + public CompletableFuture slackListsDownloadStart(RequestConfigurator req) { + return slackListsDownloadStart(req.configure(SlackListsDownloadStartRequest.builder()).build()); + } + + @Override + public CompletableFuture slackListsItemsCreate(SlackListsItemsCreateRequest req) { + return executor.execute(SLACKLISTS_ITEMS_CREATE, toMap(req), () -> methods.slackListsItemsCreate(req)); + } + + @Override + public CompletableFuture slackListsItemsCreate(RequestConfigurator req) { + return slackListsItemsCreate(req.configure(SlackListsItemsCreateRequest.builder()).build()); + } + + @Override + public CompletableFuture slackListsItemsDelete(SlackListsItemsDeleteRequest req) { + return executor.execute(SLACKLISTS_ITEMS_DELETE, toMap(req), () -> methods.slackListsItemsDelete(req)); + } + + @Override + public CompletableFuture slackListsItemsDelete(RequestConfigurator req) { + return slackListsItemsDelete(req.configure(SlackListsItemsDeleteRequest.builder()).build()); + } + + @Override + public CompletableFuture slackListsItemsDeleteMultiple(SlackListsItemsDeleteMultipleRequest req) { + return executor.execute(SLACKLISTS_ITEMS_DELETE_MULTIPLE, toMap(req), () -> methods.slackListsItemsDeleteMultiple(req)); + } + + @Override + public CompletableFuture slackListsItemsDeleteMultiple(RequestConfigurator req) { + return slackListsItemsDeleteMultiple(req.configure(SlackListsItemsDeleteMultipleRequest.builder()).build()); + } + + @Override + public CompletableFuture slackListsItemsInfo(SlackListsItemsInfoRequest req) { + return executor.execute(SLACKLISTS_ITEMS_INFO, toMap(req), () -> methods.slackListsItemsInfo(req)); + } + + @Override + public CompletableFuture slackListsItemsInfo(RequestConfigurator req) { + return slackListsItemsInfo(req.configure(SlackListsItemsInfoRequest.builder()).build()); + } + + @Override + public CompletableFuture slackListsItemsList(SlackListsItemsListRequest req) { + return executor.execute(SLACKLISTS_ITEMS_LIST, toMap(req), () -> methods.slackListsItemsList(req)); + } + + @Override + public CompletableFuture slackListsItemsList(RequestConfigurator req) { + return slackListsItemsList(req.configure(SlackListsItemsListRequest.builder()).build()); + } + + @Override + public CompletableFuture slackListsItemsUpdate(SlackListsItemsUpdateRequest req) { + return executor.execute(SLACKLISTS_ITEMS_UPDATE, toMap(req), () -> methods.slackListsItemsUpdate(req)); + } + + @Override + public CompletableFuture slackListsItemsUpdate(RequestConfigurator req) { + return slackListsItemsUpdate(req.configure(SlackListsItemsUpdateRequest.builder()).build()); + } + + @Override + public CompletableFuture slackListsUpdate(SlackListsUpdateRequest req) { + return executor.execute(SLACKLISTS_UPDATE, toMap(req), () -> methods.slackListsUpdate(req)); + } + + @Override + public CompletableFuture slackListsUpdate(RequestConfigurator req) { + return slackListsUpdate(req.configure(SlackListsUpdateRequest.builder()).build()); + } + @Override @Deprecated // https://api.slack.com/changelog/2023-07-its-later-already-for-stars-and-reminders public CompletableFuture starsAdd(StarsAddRequest req) { @@ -2545,6 +2689,7 @@ public CompletableFuture starsRemove(RequestConfigurator teamAccessLogs(TeamAccessLogsRequest req) { return executor.execute(TEAM_ACCESS_LOGS, toMap(req), () -> methods.teamAccessLogs(req)); diff --git a/slack-api-client/src/main/java/com/slack/api/methods/impl/MethodsClientImpl.java b/slack-api-client/src/main/java/com/slack/api/methods/impl/MethodsClientImpl.java index 83956f7d0..cfc650840 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/impl/MethodsClientImpl.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/impl/MethodsClientImpl.java @@ -116,6 +116,18 @@ import com.slack.api.methods.request.search.SearchAllRequest; import com.slack.api.methods.request.search.SearchFilesRequest; import com.slack.api.methods.request.search.SearchMessagesRequest; +import com.slack.api.methods.request.slack_lists.SlackListsAccessDeleteRequest; +import com.slack.api.methods.request.slack_lists.SlackListsAccessSetRequest; +import com.slack.api.methods.request.slack_lists.SlackListsCreateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsDownloadGetRequest; +import com.slack.api.methods.request.slack_lists.SlackListsDownloadStartRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsCreateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsDeleteRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsDeleteMultipleRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsInfoRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsListRequest; +import com.slack.api.methods.request.slack_lists.SlackListsItemsUpdateRequest; +import com.slack.api.methods.request.slack_lists.SlackListsUpdateRequest; import com.slack.api.methods.request.stars.StarsAddRequest; import com.slack.api.methods.request.stars.StarsListRequest; import com.slack.api.methods.request.stars.StarsRemoveRequest; @@ -251,6 +263,18 @@ import com.slack.api.methods.response.search.SearchAllResponse; import com.slack.api.methods.response.search.SearchFilesResponse; import com.slack.api.methods.response.search.SearchMessagesResponse; +import com.slack.api.methods.response.slack_lists.SlackListsAccessDeleteResponse; +import com.slack.api.methods.response.slack_lists.SlackListsAccessSetResponse; +import com.slack.api.methods.response.slack_lists.SlackListsCreateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsDownloadGetResponse; +import com.slack.api.methods.response.slack_lists.SlackListsDownloadStartResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsCreateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsDeleteResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsDeleteMultipleResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsInfoResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsListResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsUpdateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsUpdateResponse; import com.slack.api.methods.response.stars.StarsAddResponse; import com.slack.api.methods.response.stars.StarsListResponse; import com.slack.api.methods.response.stars.StarsRemoveResponse; @@ -3185,6 +3209,126 @@ public SearchFilesResponse searchFiles(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsAccessDelete(req.configure(SlackListsAccessDeleteRequest.builder()).build()); + } + + @Override + public SlackListsAccessSetResponse slackListsAccessSet(SlackListsAccessSetRequest req) throws IOException, SlackApiException { + return postFormWithTokenAndParseResponse(toForm(req), Methods.SLACKLISTS_ACCESS_SET, getToken(req), SlackListsAccessSetResponse.class); + } + + @Override + public SlackListsAccessSetResponse slackListsAccessSet(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsAccessSet(req.configure(SlackListsAccessSetRequest.builder()).build()); + } + + @Override + public SlackListsCreateResponse slackListsCreate(SlackListsCreateRequest req) throws IOException, SlackApiException { + return postFormWithTokenAndParseResponse(toForm(req), Methods.SLACKLISTS_CREATE, getToken(req), SlackListsCreateResponse.class); + } + + @Override + public SlackListsCreateResponse slackListsCreate(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsCreate(req.configure(SlackListsCreateRequest.builder()).build()); + } + + @Override + public SlackListsDownloadGetResponse slackListsDownloadGet(SlackListsDownloadGetRequest req) throws IOException, SlackApiException { + return postFormWithTokenAndParseResponse(toForm(req), Methods.SLACKLISTS_DOWNLOAD_GET, getToken(req), SlackListsDownloadGetResponse.class); + } + + @Override + public SlackListsDownloadGetResponse slackListsDownloadGet(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsDownloadGet(req.configure(SlackListsDownloadGetRequest.builder()).build()); + } + + @Override + public SlackListsDownloadStartResponse slackListsDownloadStart(SlackListsDownloadStartRequest req) throws IOException, SlackApiException { + return postFormWithTokenAndParseResponse(toForm(req), Methods.SLACKLISTS_DOWNLOAD_START, getToken(req), SlackListsDownloadStartResponse.class); + } + + @Override + public SlackListsDownloadStartResponse slackListsDownloadStart(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsDownloadStart(req.configure(SlackListsDownloadStartRequest.builder()).build()); + } + + @Override + public SlackListsItemsCreateResponse slackListsItemsCreate(SlackListsItemsCreateRequest req) throws IOException, SlackApiException { + return postFormWithTokenAndParseResponse(toForm(req), Methods.SLACKLISTS_ITEMS_CREATE, getToken(req), SlackListsItemsCreateResponse.class); + } + + @Override + public SlackListsItemsCreateResponse slackListsItemsCreate(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsItemsCreate(req.configure(SlackListsItemsCreateRequest.builder()).build()); + } + + @Override + public SlackListsItemsDeleteResponse slackListsItemsDelete(SlackListsItemsDeleteRequest req) throws IOException, SlackApiException { + return postFormWithTokenAndParseResponse(toForm(req), Methods.SLACKLISTS_ITEMS_DELETE, getToken(req), SlackListsItemsDeleteResponse.class); + } + + @Override + public SlackListsItemsDeleteResponse slackListsItemsDelete(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsItemsDelete(req.configure(SlackListsItemsDeleteRequest.builder()).build()); + } + + @Override + public SlackListsItemsDeleteMultipleResponse slackListsItemsDeleteMultiple(SlackListsItemsDeleteMultipleRequest req) throws IOException, SlackApiException { + return postFormWithTokenAndParseResponse(toForm(req), Methods.SLACKLISTS_ITEMS_DELETE_MULTIPLE, getToken(req), SlackListsItemsDeleteMultipleResponse.class); + } + + @Override + public SlackListsItemsDeleteMultipleResponse slackListsItemsDeleteMultiple(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsItemsDeleteMultiple(req.configure(SlackListsItemsDeleteMultipleRequest.builder()).build()); + } + + @Override + public SlackListsItemsInfoResponse slackListsItemsInfo(SlackListsItemsInfoRequest req) throws IOException, SlackApiException { + return postFormWithTokenAndParseResponse(toForm(req), Methods.SLACKLISTS_ITEMS_INFO, getToken(req), SlackListsItemsInfoResponse.class); + } + + @Override + public SlackListsItemsInfoResponse slackListsItemsInfo(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsItemsInfo(req.configure(SlackListsItemsInfoRequest.builder()).build()); + } + + @Override + public SlackListsItemsListResponse slackListsItemsList(SlackListsItemsListRequest req) throws IOException, SlackApiException { + return postFormWithTokenAndParseResponse(toForm(req), Methods.SLACKLISTS_ITEMS_LIST, getToken(req), SlackListsItemsListResponse.class); + } + + @Override + public SlackListsItemsListResponse slackListsItemsList(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsItemsList(req.configure(SlackListsItemsListRequest.builder()).build()); + } + + @Override + public SlackListsItemsUpdateResponse slackListsItemsUpdate(SlackListsItemsUpdateRequest req) throws IOException, SlackApiException { + return postFormWithTokenAndParseResponse(toForm(req), Methods.SLACKLISTS_ITEMS_UPDATE, getToken(req), SlackListsItemsUpdateResponse.class); + } + + @Override + public SlackListsItemsUpdateResponse slackListsItemsUpdate(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsItemsUpdate(req.configure(SlackListsItemsUpdateRequest.builder()).build()); + } + + @Override + public SlackListsUpdateResponse slackListsUpdate(SlackListsUpdateRequest req) throws IOException, SlackApiException { + return postFormWithTokenAndParseResponse(toForm(req), Methods.SLACKLISTS_UPDATE, getToken(req), SlackListsUpdateResponse.class); + } + + @Override + public SlackListsUpdateResponse slackListsUpdate(RequestConfigurator req) throws IOException, SlackApiException { + return slackListsUpdate(req.configure(SlackListsUpdateRequest.builder()).build()); + } + @Override @Deprecated // https://docs.slack.dev/changelog/2023-07-its-later-already-for-stars-and-reminders public StarsAddResponse starsAdd(StarsAddRequest req) throws IOException, SlackApiException { diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsAccessDeleteRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsAccessDeleteRequest.java new file mode 100644 index 000000000..7a24367fb --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsAccessDeleteRequest.java @@ -0,0 +1,35 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import java.util.List; +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.access.delete + */ +@Data +@Builder +public class SlackListsAccessDeleteRequest implements SlackApiRequest { + + /** + * Authentication token. Requires scope: `lists:write` + */ + private String token; + + /** + * Encoded ID of the List. + */ + private String listId; + + /** + * List of channels you wish to update access for. Can only be used if user_ids is not provided. (Optional) + */ + private List channelIds; + + /** + * List of users you wish to update access for. Can only be used if channel_ids is not provided. (Optional) + */ + private List userIds; +} + diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsAccessSetRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsAccessSetRequest.java new file mode 100644 index 000000000..dd6ebc09e --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsAccessSetRequest.java @@ -0,0 +1,40 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import java.util.List; +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.access.set + */ +@Data +@Builder +public class SlackListsAccessSetRequest implements SlackApiRequest { + + /** + * Authentication token bearing required scopes. + */ + private String token; + + /** + * Encoded ID of the List. + */ + private String listId; + + /** + * Desired level of access. + */ + private String accessLevel; + + /** + * List of channels you wish to update access for. Can only be used if user_ids is not provided. (Optional) + */ + private List channelIds; + + /** + * List of users you wish to update access for. Can only be used if channel_ids is not provided. (Optional) + */ + private List userIds; +} + diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsCreateRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsCreateRequest.java new file mode 100644 index 000000000..23db94151 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsCreateRequest.java @@ -0,0 +1,54 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import com.slack.api.model.block.RichTextBlock; +import com.slack.api.model.list.ListColumn; + +import java.util.List; +import java.util.Map; + +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.create + */ +@Data +@Builder +public class SlackListsCreateRequest implements SlackApiRequest { + + /** + * Authentication token bearing required scopes. Tokens should be passed as an HTTP Authorization header or alternatively, as a POST parameter.` + */ + private String token; + + /** + * Name of the List. + */ + private String name; + + /** + * A rich text description of the List. (Optional) + */ + private List descriptionBlocks; + + /** + * Column definition for the List. (Optional) + */ + private List schema; + + /** + * ID of the List to copy. (Optional) + */ + private String copyFromListId; + + /** + * Boolean indicating whether to include records when a List is copied. (Optional) + */ + private Boolean includeCopiedListRecords; + + /** + * Boolean indicating whether the List should be used to track todo tasks. (Optional) + */ + private Boolean todoMode; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsDownloadGetRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsDownloadGetRequest.java new file mode 100644 index 000000000..b2ab4bf7a --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsDownloadGetRequest.java @@ -0,0 +1,28 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.download.get + */ +@Data +@Builder +public class SlackListsDownloadGetRequest implements SlackApiRequest { + + /** + * Authentication token bearing required scopes. Tokens should be passed as an HTTP Authorization header or alternatively, as a POST parameter.` + */ + private String token; + + /** + * ID of the List to export. + */ + private String listId; + + /** + * The ID of the recently started job to export the List. + */ + private String jobId; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsDownloadStartRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsDownloadStartRequest.java new file mode 100644 index 000000000..9f262d9b5 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsDownloadStartRequest.java @@ -0,0 +1,28 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.download.start + */ +@Data +@Builder +public class SlackListsDownloadStartRequest implements SlackApiRequest { + + /** + * Authentication token bearing required scopes. Tokens should be passed as an HTTP Authorization header or alternatively, as a POST parameter.` + */ + private String token; + + /** + * ID of the List to export. + */ + private String listId; + + /** + * Include archived rows. (Optional) + */ + private Boolean includeArchived; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsCreateRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsCreateRequest.java new file mode 100644 index 000000000..48f71433e --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsCreateRequest.java @@ -0,0 +1,42 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import com.slack.api.model.list.ListRecord; + +import java.util.List; + +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.items.create + */ +@Data +@Builder +public class SlackListsItemsCreateRequest implements SlackApiRequest { + + /** + * Authentication token bearing required scopes. Tokens should be passed as an HTTP Authorization header or alternatively, as a POST parameter.` + */ + private String token; + + /** + * ID of the List containing the items. + */ + private String listId; + + /** + * ID of the record to make a copy of. (Optional) + */ + private String duplicatedItemId; + + /** + * ID of the parent record for this subtask. (Optional) + */ + private String parentItemId; + + /** + * Initial item data. (Optional) + */ + private List initialFields; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsDeleteMultipleRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsDeleteMultipleRequest.java new file mode 100644 index 000000000..004267640 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsDeleteMultipleRequest.java @@ -0,0 +1,29 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import java.util.List; +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple + */ +@Data +@Builder +public class SlackListsItemsDeleteMultipleRequest implements SlackApiRequest { + + /** + * Authentication token bearing required scopes. Tokens should be passed as an HTTP Authorization header or alternatively, as a POST parameter.` + */ + private String token; + + /** + * ID of the List containing the items. + */ + private String listId; + + /** + * IDs of items to delete. + */ + private List ids; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsDeleteRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsDeleteRequest.java new file mode 100644 index 000000000..cfb979180 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsDeleteRequest.java @@ -0,0 +1,28 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.items.delete + */ +@Data +@Builder +public class SlackListsItemsDeleteRequest implements SlackApiRequest { + + /** + * Authentication token bearing required scopes. Tokens should be passed as an HTTP Authorization header or alternatively, as a POST parameter.` + */ + private String token; + + /** + * ID of the List containing the items. + */ + private String listId; + + /** + * ID of item to delete. + */ + private String id; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsInfoRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsInfoRequest.java new file mode 100644 index 000000000..8ed8533a1 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsInfoRequest.java @@ -0,0 +1,34 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.items.info + */ +@Data +@Builder +public class SlackListsItemsInfoRequest implements SlackApiRequest { + + /** + * Authentication token bearing required scopes. Tokens should be passed as an HTTP Authorization header or alternatively, as a POST parameter.` + */ + private String token; + + /** + * ID of the List containing the items. + */ + private String listId; + + /** + * ID of the row to get. + */ + private String id; + + /** + * Set to true to include is_subscribed data for the returned List row. (Optional) + */ + @Builder.Default + private Boolean includeIsSubscribed = false; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsListRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsListRequest.java new file mode 100644 index 000000000..d3fedcf19 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsListRequest.java @@ -0,0 +1,39 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.items.list + */ +@Data +@Builder +public class SlackListsItemsListRequest implements SlackApiRequest { + + /** + * Authentication token bearing required scopes. Tokens should be passed as an HTTP Authorization header or alternatively, as a POST parameter.` + */ + private String token; + + /** + * ID of the List. + */ + private String listId; + + + /** + * The maximum number of records to return. (Optional) + */ + private Integer limit; + + /** + * Next cursor for pagination. (Optional) + */ + private String cursor; + + /** + * Boolean indicating whether archived items or normal items should be returned. (Optional) + */ + private Boolean archived; +} diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsUpdateRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsUpdateRequest.java new file mode 100644 index 000000000..b1157e9e1 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsItemsUpdateRequest.java @@ -0,0 +1,34 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import com.slack.api.model.list.ListRecord; + +import java.util.List; + +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.items.update + */ +@Data +@Builder +public class SlackListsItemsUpdateRequest implements SlackApiRequest { + + /** + * Authentication token bearing required scopes. Tokens should be passed as an HTTP Authorization header or alternatively, as a POST parameter.` + */ + private String token; + + /** + * ID of the List containing the items. + */ + private String listId; + + /** + * Cells to update. + * Each cell should have a rowId, columnId, and one of the type-specific value properties. + */ + private List cells; + +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsUpdateRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsUpdateRequest.java new file mode 100644 index 000000000..56d754186 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/slack_lists/SlackListsUpdateRequest.java @@ -0,0 +1,40 @@ +package com.slack.api.methods.request.slack_lists; + +import com.slack.api.methods.SlackApiRequest; +import com.slack.api.model.block.RichTextBlock; +import java.util.List; +import lombok.Builder; +import lombok.Data; + +/** + * https://docs.slack.dev/reference/methods/slackLists.update + */ +@Data +@Builder +public class SlackListsUpdateRequest implements SlackApiRequest { + + /** + * Authentication token bearing required scopes. Tokens should be passed as an HTTP Authorization header or alternatively, as a POST parameter.` + */ + private String token; + + /** + * The ID of the List to update. + */ + private String id; + + /** + * Name of the List. (Optional) + */ + private String name; + + /** + * A rich text description of the List. (Optional) + */ + private List descriptionBlocks; + + /** + * Boolean indicating whether the List should be used to track todo tasks. (Optional) + */ + private Boolean todoMode; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsAccessDeleteResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsAccessDeleteResponse.java new file mode 100644 index 000000000..946a0228d --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsAccessDeleteResponse.java @@ -0,0 +1,23 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.slack.api.model.ResponseMetadata; +import com.slack.api.methods.SlackApiTextResponse; + +import lombok.Data; + +@Data + +public class SlackListsAccessDeleteResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsAccessSetResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsAccessSetResponse.java new file mode 100644 index 000000000..bd20f8d3c --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsAccessSetResponse.java @@ -0,0 +1,23 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.slack.api.model.ResponseMetadata; +import com.slack.api.methods.SlackApiTextResponse; + +import lombok.Data; + +@Data + +public class SlackListsAccessSetResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsCreateResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsCreateResponse.java new file mode 100644 index 000000000..7f0ee8c12 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsCreateResponse.java @@ -0,0 +1,31 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.google.gson.annotations.SerializedName; +import com.slack.api.model.list.ListMetadata; +import com.slack.api.model.ResponseMetadata; +import com.slack.api.methods.SlackApiTextResponse; + +import lombok.Data; + +@Data + +public class SlackListsCreateResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + @SerializedName("list_id") + private String listId; + + @SerializedName("list_metadata") + private ListMetadata listMetadata; + + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsDownloadGetResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsDownloadGetResponse.java new file mode 100644 index 000000000..d05f44e7a --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsDownloadGetResponse.java @@ -0,0 +1,29 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.google.gson.annotations.SerializedName; +import com.slack.api.model.ResponseMetadata; +import com.slack.api.methods.SlackApiTextResponse; + +import lombok.Data; + +@Data + +public class SlackListsDownloadGetResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + private String status; + + @SerializedName("download_url") + private String downloadUrl; + + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsDownloadStartResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsDownloadStartResponse.java new file mode 100644 index 000000000..8a3fee978 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsDownloadStartResponse.java @@ -0,0 +1,27 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.google.gson.annotations.SerializedName; +import com.slack.api.model.ResponseMetadata; +import com.slack.api.methods.SlackApiTextResponse; + +import lombok.Data; + +@Data + +public class SlackListsDownloadStartResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + @SerializedName("job_id") + private String jobId; + + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsCreateResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsCreateResponse.java new file mode 100644 index 000000000..fd3332550 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsCreateResponse.java @@ -0,0 +1,25 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.slack.api.model.list.ListRecord; +import com.slack.api.model.ResponseMetadata; +import com.slack.api.methods.SlackApiTextResponse; + +import lombok.Data; + +@Data +public class SlackListsItemsCreateResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + private ListRecord item; + + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsDeleteMultipleResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsDeleteMultipleResponse.java new file mode 100644 index 000000000..9a96ca487 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsDeleteMultipleResponse.java @@ -0,0 +1,23 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.slack.api.model.ResponseMetadata; +import com.slack.api.methods.SlackApiTextResponse; + +import lombok.Data; + +@Data + +public class SlackListsItemsDeleteMultipleResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsDeleteResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsDeleteResponse.java new file mode 100644 index 000000000..a0a8f926f --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsDeleteResponse.java @@ -0,0 +1,23 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.slack.api.model.ResponseMetadata; +import com.slack.api.methods.SlackApiTextResponse; + +import lombok.Data; + +@Data + +public class SlackListsItemsDeleteResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsInfoResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsInfoResponse.java new file mode 100644 index 000000000..fe3de95e5 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsInfoResponse.java @@ -0,0 +1,29 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.slack.api.model.ResponseMetadata; +import com.slack.api.methods.SlackApiTextResponse; +import com.slack.api.model.File; +import com.slack.api.model.list.ListRecord; + +import lombok.Data; + +@Data + +public class SlackListsItemsInfoResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + private File list; + private ListRecord record; + private List subtasks; + + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsListResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsListResponse.java new file mode 100644 index 000000000..5271bc20a --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsListResponse.java @@ -0,0 +1,24 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.slack.api.model.ResponseMetadata; +import com.slack.api.model.list.ListRecord; +import com.slack.api.methods.SlackApiTextResponse; + +import lombok.Data; + +@Data +public class SlackListsItemsListResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + private List items; + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsUpdateResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsUpdateResponse.java new file mode 100644 index 000000000..b2a8cb0ea --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsItemsUpdateResponse.java @@ -0,0 +1,23 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.slack.api.model.ResponseMetadata; +import com.slack.api.methods.SlackApiTextResponse; + +import lombok.Data; + +@Data + +public class SlackListsItemsUpdateResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsUpdateResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsUpdateResponse.java new file mode 100644 index 000000000..07f97ce56 --- /dev/null +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/slack_lists/SlackListsUpdateResponse.java @@ -0,0 +1,23 @@ +package com.slack.api.methods.response.slack_lists; + +import java.util.List; +import java.util.Map; + +import com.slack.api.model.ResponseMetadata; +import com.slack.api.methods.SlackApiTextResponse; + +import lombok.Data; + +@Data + +public class SlackListsUpdateResponse implements SlackApiTextResponse { + + private boolean ok; + private String warning; + private String error; + private String needed; + private String provided; + private transient Map> httpResponseHeaders; + + private ResponseMetadata responseMetadata; +} \ No newline at end of file diff --git a/slack-api-client/src/test/java/test_locally/api/MethodsTest.java b/slack-api-client/src/test/java/test_locally/api/MethodsTest.java index 6b0838fb0..b67729384 100644 --- a/slack-api-client/src/test/java/test_locally/api/MethodsTest.java +++ b/slack-api-client/src/test/java/test_locally/api/MethodsTest.java @@ -19,8 +19,8 @@ public class MethodsTest { public void verifyTheCoverage() { // https://docs.slack.dev/reference/methods // var methodNames = [].slice.call(document.getElementsByClassName('apiReferenceFilterableList__listItemLink')).map(e => e.href.replace("https://docs.slack.dev/reference/methods/", ""));console.log(methodNames.toString());console.log(methodNames.length); - // 291 endpoints as of October 14, 2025 - String methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.createForObjects,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.linkObjects,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.unlinkObjects,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,apps.uninstall,assistant.search.context,assistant.threads.setStatus,assistant.threads.setSuggestedPrompts,assistant.threads.setTitle,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,channels.mark,chat.appendStream,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.startStream,chat.stopStream,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,conversations.requestSharedInvite.list,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.comments.delete,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,groups.mark,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,im.list,im.mark,mpim.list,mpim.mark"; + // 303 endpoints as of November 21, 2025 + String methods = "admin.analytics.getFile,admin.apps.activities.list,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.config.lookup,admin.apps.config.set,admin.apps.requests.cancel,admin.apps.requests.list,admin.apps.restricted.list,admin.audit.anomaly.allow.getItem,admin.audit.anomaly.allow.updateItem,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.bulkArchive,admin.conversations.bulkDelete,admin.conversations.bulkMove,admin.conversations.convertToPrivate,admin.conversations.convertToPublic,admin.conversations.create,admin.conversations.createForObjects,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.linkObjects,admin.conversations.lookup,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.unlinkObjects,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.functions.list,admin.functions.permissions.lookup,admin.functions.permissions.set,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.roles.addAssignments,admin.roles.listAssignments,admin.roles.removeAssignments,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.resetBulk,admin.users.session.setSettings,admin.users.unsupportedVersions.export,admin.workflows.collaborators.add,admin.workflows.collaborators.remove,admin.workflows.permissions.lookup,admin.workflows.search,admin.workflows.unpublish,admin.workflows.triggers.types.permissions.lookup,admin.workflows.triggers.types.permissions.set,api.test,apps.activities.list,apps.auth.external.delete,apps.auth.external.get,apps.connections.open,apps.datastore.bulkDelete,apps.datastore.bulkGet,apps.datastore.bulkPut,apps.datastore.count,apps.datastore.delete,apps.datastore.get,apps.datastore.put,apps.datastore.query,apps.datastore.update,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,apps.uninstall,assistant.search.context,assistant.threads.setStatus,assistant.threads.setSuggestedPrompts,assistant.threads.setTitle,auth.revoke,auth.test,auth.teams.list,bookmarks.add,bookmarks.edit,bookmarks.list,bookmarks.remove,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,canvases.access.delete,canvases.access.set,canvases.create,canvases.delete,canvases.edit,canvases.sections.lookup,channels.mark,chat.appendStream,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.startStream,chat.stopStream,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,conversations.canvases.create,conversations.externalInvitePermissions.set,conversations.requestSharedInvite.approve,conversations.requestSharedInvite.deny,conversations.requestSharedInvite.list,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.comments.delete,files.completeUploadExternal,files.delete,files.getUploadURLExternal,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,functions.completeError,functions.completeSuccess,functions.distributions.permissions.add,functions.distributions.permissions.list,functions.distributions.permissions.remove,functions.distributions.permissions.set,functions.workflows.steps.list,functions.workflows.steps.responses.export,groups.mark,migration.exchange,oauth.access,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,slackLists.access.delete,slackLists.access.set,slackLists.create,slackLists.download.get,slackLists.download.start,slackLists.items.create,slackLists.items.delete,slackLists.items.deleteMultiple,slackLists.items.info,slackLists.items.list,slackLists.items.update,slackLists.update,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.billing.info,team.externalTeams.disconnect,team.externalTeams.list,team.preferences.list,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.discoverableContacts.lookup,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,workflows.triggers.permissions.add,workflows.triggers.permissions.list,workflows.triggers.permissions.remove,workflows.triggers.permissions.set,im.list,im.mark,mpim.list,mpim.mark"; final List existingMethods = new ArrayList<>(); for (Field f : Methods.class.getDeclaredFields()) { int modifiers = f.getModifiers(); diff --git a/slack-api-client/src/test/java/test_locally/api/methods/SlackListsTest.java b/slack-api-client/src/test/java/test_locally/api/methods/SlackListsTest.java new file mode 100644 index 000000000..363ec97cc --- /dev/null +++ b/slack-api-client/src/test/java/test_locally/api/methods/SlackListsTest.java @@ -0,0 +1,353 @@ +package test_locally.api.methods; + +import com.slack.api.Slack; +import com.slack.api.SlackConfig; +import com.slack.api.model.block.RichTextBlock; +import com.slack.api.model.block.element.RichTextSectionElement; +import com.slack.api.model.list.ListColumn; +import com.slack.api.model.list.ListColumnOptions; +import com.slack.api.model.list.ListRecord; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import util.MockSlackApiServer; + +import java.util.Arrays; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static util.MockSlackApi.ValidToken; + +public class SlackListsTest { + + MockSlackApiServer server = new MockSlackApiServer(); + SlackConfig config = new SlackConfig(); + Slack slack = Slack.getInstance(config); + + @Before + public void setup() throws Exception { + server.start(); + config.setMethodsEndpointUrlPrefix(server.getMethodsEndpointPrefix()); + } + + @After + public void tearDown() throws Exception { + server.stop(); + } + + // Create a new list + @Test + public void slackListsCreate() throws Exception { + ListColumn taskNameCol = ListColumn.builder() + .key("task_name") + .name("Task Name") + .type("text") + .primaryColumn(true) + .build(); + + ListColumn dueDateCol = ListColumn.builder() + .key("due_date") + .name("Due Date") + .type("date") + .build(); + + ListColumnOptions.Choice choice1 = ListColumnOptions.Choice.builder() + .value("not_started") + .label("Not Started") + .color("red") + .build(); + + ListColumnOptions.Choice choice2 = ListColumnOptions.Choice.builder() + .value("in_progress") + .label("In Progress") + .color("yellow") + .build(); + + ListColumnOptions.Choice choice3 = ListColumnOptions.Choice.builder() + .value("completed") + .label("Completed") + .color("green") + .build(); + + ListColumnOptions statusOptions = ListColumnOptions.builder() + .choices(Arrays.asList(choice1, choice2, choice3)) + .build(); + + ListColumn statusCol = ListColumn.builder() + .key("status") + .name("Status") + .type("select") + .options(statusOptions) + .build(); + + ListColumn assigneeCol = ListColumn.builder() + .key("assignee") + .name("Assignee") + .type("user") + .build(); + + assertThat(slack.methods(ValidToken).slackListsCreate(r -> r + .name("Test List - SlackLists API") + .descriptionBlocks(Arrays.asList(RichTextBlock.builder() + .elements(Arrays.asList(RichTextSectionElement.builder() + .elements(Arrays.asList(RichTextSectionElement.Text.builder() + .text("List to keep track of tasks!") + .build())) + .build())) + .build())) + .schema(Arrays.asList(taskNameCol, dueDateCol, statusCol, assigneeCol))) + .isOk(), is(true)); + } + + @Test + public void slackListsCreate_async() throws Exception { + assertThat(slack.methodsAsync(ValidToken).slackListsCreate(r -> r.name("Test List Async - SlackLists API")) + .get().isOk(), is(true)); + } + + // Set list access permissions + @Test + public void slackListsAccessSet() throws Exception { + assertThat(slack.methods(ValidToken).slackListsAccessSet(r -> r + .listId("F1234567") + .accessLevel("write") + .channelIds(Arrays.asList("C1234567"))) + .isOk(), is(true)); + } + + @Test + public void slackListsAccessSet_async() throws Exception { + assertThat(slack.methodsAsync(ValidToken).slackListsAccessSet(r -> r + .listId("F1234567") + .accessLevel("write") + .channelIds(Arrays.asList("C1234567"))) + .get().isOk(), is(true)); + } + + // Create several list items + @Test + public void slackListsItemsCreate() throws Exception { + RichTextBlock richTextBlock = RichTextBlock.builder() + .elements(Arrays.asList(RichTextSectionElement.builder() + .elements(Arrays.asList(RichTextSectionElement.Text.builder() + .text("Test task item") + .build())) + .build())) + .build(); + + ListRecord.Field field = ListRecord.Field.builder() + .columnId("C1234567") + .richText(Arrays.asList(richTextBlock)) + .build(); + + assertThat(slack.methods(ValidToken).slackListsItemsCreate(r -> r + .listId("F1234567") + .initialFields(Arrays.asList(field))) + .isOk(), is(true)); + } + + @Test + public void slackListsItemsCreate_async() throws Exception { + assertThat(slack.methodsAsync(ValidToken).slackListsItemsCreate(r -> r + .listId("F1234567")) + .get().isOk(), is(true)); + } + + // delete specific list items + @Test + public void slackListsItemsDelete() throws Exception { + assertThat(slack.methods(ValidToken).slackListsItemsDelete(r -> r + .listId("F1234567") + .id("Rec018ALE9718")) + .isOk(), is(true)); + } + + @Test + public void slackListsItemsDelete_async() throws Exception { + assertThat(slack.methodsAsync(ValidToken).slackListsItemsDelete(r -> r + .listId("F1234567") + .id("Rec018ALE9718")) + .get().isOk(), is(true)); + } + + @Test + public void slackListsItemsDeleteMultiple() throws Exception { + assertThat(slack.methods(ValidToken).slackListsItemsDeleteMultiple(r -> r + .listId("F1234567") + .ids(Arrays.asList("Rec018ALE9720", "Rec018ALE9721"))) + .isOk(), is(true)); + } + + @Test + public void slackListsItemsDeleteMultiple_async() throws Exception { + assertThat(slack.methodsAsync(ValidToken).slackListsItemsDeleteMultiple(r -> r + .listId("F1234567") + .ids(Arrays.asList("Rec1234567890", "Rec1234567891"))) + .get().isOk(), is(true)); + } + + // Retrieve info for a single list item + @Test + public void slackListsItemsInfo() throws Exception { + assertThat(slack.methods(ValidToken).slackListsItemsInfo(r -> r + .listId("F1234567") + .id("Rec1234567890") + .includeIsSubscribed(true)) + .isOk(), is(true)); + } + + @Test + public void slackListsItemsInfo_async() throws Exception { + assertThat(slack.methodsAsync(ValidToken).slackListsItemsInfo(r -> r + .listId("F1234567") + .id("Rec1234567890") + .includeIsSubscribed(true)) + .get().isOk(), is(true)); + } + + // Retrieve all list items + @Test + public void slackListsItemsList() throws Exception { + assertThat(slack.methods(ValidToken).slackListsItemsList(r -> r + .listId("F1234567") + .limit(50) + .archived(false)) + .isOk(), is(true)); + } + + @Test + public void slackListsItemsList_async() throws Exception { + assertThat(slack.methodsAsync(ValidToken).slackListsItemsList(r -> r + .listId("F1234567") + .limit(50) + .archived(false)) + .get().isOk(), is(true)); + } + + // Download list data + @Test + public void slackListsDownloadStart() throws Exception { + assertThat(slack.methods(ValidToken).slackListsDownloadStart(r -> r + .listId("F1234567") + .includeArchived(false)) + .isOk(), is(true)); + } + + @Test + public void slackListsDownloadStart_async() throws Exception { + assertThat(slack.methodsAsync(ValidToken).slackListsDownloadStart(r -> r + .listId("F1234567") + .includeArchived(false)) + .get().isOk(), is(true)); + } + + @Test + public void slackListsDownloadGet() throws Exception { + assertThat(slack.methods(ValidToken).slackListsDownloadGet(r -> r + .listId("F1234567") + .jobId("job123")) + .isOk(), is(true)); + } + + @Test + public void slackListsDownloadGet_async() throws Exception { + assertThat(slack.methodsAsync(ValidToken).slackListsDownloadGet(r -> r + .listId("F1234567") + .jobId("job123")) + .get().isOk(), is(true)); + } + + // Update an existing list item + @Test + public void slackListsItemsUpdate() throws Exception { + RichTextBlock richTextBlock = RichTextBlock.builder() + .elements(Arrays.asList(RichTextSectionElement.builder() + .elements(Arrays.asList(RichTextSectionElement.Text.builder() + .text("new task name") + .build())) + .build())) + .build(); + + ListRecord.CellUpdate cell = ListRecord.CellUpdate.builder() + .rowId("Rec1234567890") + .columnId("C1234567") + .richText(Arrays.asList(richTextBlock)) + .build(); + + assertThat(slack.methods(ValidToken).slackListsItemsUpdate(r -> r + .listId("F1234567") + .cells(Arrays.asList(cell))) + .isOk(), is(true)); + } + + @Test + public void slackListsItemsUpdate_async() throws Exception { + RichTextBlock richTextBlock = RichTextBlock.builder() + .elements(Arrays.asList(RichTextSectionElement.builder() + .elements(Arrays.asList(RichTextSectionElement.Text.builder() + .text("new task name") + .build())) + .build())) + .build(); + + ListRecord.CellUpdate cell = ListRecord.CellUpdate.builder() + .rowId("Rec1234567890") + .columnId("C1234567") + .richText(Arrays.asList(richTextBlock)) + .build(); + + assertThat(slack.methodsAsync(ValidToken).slackListsItemsUpdate(r -> r + .listId("F1234567") + .cells(Arrays.asList(cell))) + .get().isOk(), is(true)); + } + + // Update list metadata + @Test + public void slackListsUpdate() throws Exception { + assertThat(slack.methods(ValidToken).slackListsUpdate(r -> r + .id("F1234567") + .name("Test List - UPDATED")) + .isOk(), is(true)); + } + + @Test + public void slackListsUpdate_async() throws Exception { + assertThat(slack.methodsAsync(ValidToken).slackListsUpdate(r -> r + .id("F1234567") + .name("Test List - UPDATED")) + .get().isOk(), is(true)); + } + + // Remove access for the test user + @Test + public void slackListsAccessDelete() throws Exception { + assertThat(slack.methods(ValidToken).slackListsAccessDelete(r -> r + .listId("F1234567") + .userIds(Arrays.asList("U1234567"))) + .isOk(), is(true)); + } + + @Test + public void slackListsAccessDelete_async() throws Exception { + assertThat(slack.methodsAsync(ValidToken).slackListsAccessDelete(r -> r + .listId("F1234567") + .userIds(Arrays.asList("U1234567"))) + .get().isOk(), is(true)); + } + + // Helper methods + private RichTextBlock createRichTextBlock(String text) { + return RichTextBlock.builder() + .elements(Arrays.asList( + RichTextSectionElement.builder() + .elements(Arrays.asList( + RichTextSectionElement.Text.builder() + .text(text) + .build() + )) + .build() + )) + .build(); + } +} diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/slacklists_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/slacklists_Test.java new file mode 100644 index 000000000..070703b02 --- /dev/null +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/slacklists_Test.java @@ -0,0 +1,338 @@ +package test_with_remote_apis.methods; + +import com.slack.api.Slack; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.response.slack_lists.SlackListsAccessDeleteResponse; +import com.slack.api.methods.response.slack_lists.SlackListsAccessSetResponse; +import com.slack.api.methods.response.slack_lists.SlackListsCreateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsDownloadGetResponse; +import com.slack.api.methods.response.slack_lists.SlackListsDownloadStartResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsCreateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsDeleteResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsDeleteMultipleResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsInfoResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsListResponse; +import com.slack.api.methods.response.slack_lists.SlackListsItemsUpdateResponse; +import com.slack.api.methods.response.slack_lists.SlackListsUpdateResponse; +import com.slack.api.model.block.RichTextBlock; +import com.slack.api.model.block.element.RichTextSectionElement; +import config.Constants; +import config.SlackTestConfig; +import lombok.extern.slf4j.Slf4j; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import com.slack.api.model.list.ListColumn; +import com.slack.api.model.list.ListColumnOptions; +import com.slack.api.model.list.ListRecord; + +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; + +@Slf4j +public class slacklists_Test { + + static SlackTestConfig testConfig = SlackTestConfig.getInstance(); + static Slack slack = Slack.getInstance(testConfig.getConfig()); + + @BeforeClass + public static void setUp() throws Exception { + SlackTestConfig.initializeRawJSONDataFiles("slackLists.*"); + } + + @AfterClass + public static void tearDown() throws InterruptedException { + SlackTestConfig.awaitCompletion(testConfig); + } + + String botToken = System.getenv(Constants.SLACK_SDK_TEST_BOT_TOKEN); + String channelId = System.getenv(Constants.SLACK_SDK_TEST_SHARED_CHANNEL_ID); + + @Test + public void fullSlackListsWorkflow() throws IOException, SlackApiException { + // Build schema columns + ListColumn taskNameCol = ListColumn.builder() + .key("task_name") + .name("Task Name") + .type("text") + .primaryColumn(true) + .build(); + + ListColumn dueDateCol = ListColumn.builder() + .key("due_date") + .name("Due Date") + .type("date") + .build(); + + ListColumnOptions.Choice choice1 = ListColumnOptions.Choice.builder() + .value("not_started") + .label("Not Started") + .color("red") + .build(); + + ListColumnOptions.Choice choice2 = ListColumnOptions.Choice.builder() + .value("in_progress") + .label("In Progress") + .color("yellow") + .build(); + + ListColumnOptions.Choice choice3 = ListColumnOptions.Choice.builder() + .value("completed") + .label("Completed") + .color("green") + .build(); + + ListColumnOptions statusOptions = ListColumnOptions.builder() + .choices(Arrays.asList(choice1, choice2, choice3)) + .build(); + + ListColumn statusCol = ListColumn.builder() + .key("status") + .name("Status") + .type("select") + .options(statusOptions) + .build(); + + ListColumn assigneeCol = ListColumn.builder() + .key("assignee") + .name("Assignee") + .type("user") + .build(); + + // create list + SlackListsCreateResponse createResponse = slack.methods().slackListsCreate(r -> r + .token(botToken) + .name("Test List - SlackLists API") + .descriptionBlocks(Arrays.asList(RichTextBlock.builder() + .elements(Arrays.asList(RichTextSectionElement.builder() + .elements(Arrays.asList(RichTextSectionElement.Text.builder() + .text("List to keep track of tasks!") + .build())) + .build())) + .build())) + .schema(Arrays.asList(taskNameCol, dueDateCol, statusCol, assigneeCol))); + + assertThat(createResponse.getError(), is(nullValue())); + assertThat(createResponse.isOk(), is(true)); + + String listId = createResponse.getListId(); + assertThat(listId, is(notNullValue())); + + Map keyToId = new HashMap<>(); + if (createResponse.getListMetadata() != null + && createResponse.getListMetadata().getSchema() != null) { + createResponse.getListMetadata().getSchema().forEach(col -> { + keyToId.put(col.getKey(), col.getId()); + }); + } + String taskNameColId = keyToId.get("task_name"); + + // set access + SlackListsAccessSetResponse accessSetResponse = slack.methods().slackListsAccessSet(r -> r + .token(botToken) + .listId(listId) + .accessLevel("write") + .channelIds(Arrays.asList(channelId))); + assertThat(accessSetResponse.getError(), is(nullValue())); + assertThat(accessSetResponse.isOk(), is(true)); + + // Build initial fields for item creation + ListRecord.Field field = ListRecord.Field.builder() + .columnId(taskNameColId) + .richText(Arrays.asList(RichTextBlock.builder() + .elements(Arrays.asList(RichTextSectionElement.builder() + .elements(Arrays.asList(RichTextSectionElement.Text.builder() + .text("Test task item") + .build())) + .build())) + .build())) + .build(); + + // create an item + SlackListsItemsCreateResponse createItemResponse = slack.methods().slackListsItemsCreate(r -> r + .token(botToken) + .listId(listId) + .initialFields(Arrays.asList(field))); + assertThat(createItemResponse.getError(), is(nullValue())); + assertThat(createItemResponse.isOk(), is(true)); + assertThat(createItemResponse.getItem(), is(notNullValue())); + + String itemId = createItemResponse.getItem().getId(); + assertThat(itemId, is(notNullValue())); + + // get item info + SlackListsItemsInfoResponse itemInfoResponse = slack.methods().slackListsItemsInfo(r -> r + .token(botToken) + .listId(listId) + .id(itemId) + .includeIsSubscribed(true)); + assertThat(itemInfoResponse.getError(), is(nullValue())); + assertThat(itemInfoResponse.isOk(), is(true)); + + // Build update cell + ListRecord.CellUpdate cell = ListRecord.CellUpdate.builder() + .rowId(itemId) + .columnId(taskNameColId) + .richText(Arrays.asList(RichTextBlock.builder() + .elements(Arrays.asList(RichTextSectionElement.builder() + .elements(Arrays.asList(RichTextSectionElement.Text.builder() + .text("new task name") + .build())) + .build())) + .build())) + .build(); + + // update item + SlackListsItemsUpdateResponse updateItemResponse = slack.methods().slackListsItemsUpdate(r -> r + .token(botToken) + .listId(listId) + .cells(Arrays.asList(cell))); + assertThat(updateItemResponse.getError(), is(nullValue())); + assertThat(updateItemResponse.isOk(), is(true)); + + // list items + SlackListsItemsListResponse listItemsResponse = slack.methods().slackListsItemsList(r -> r + .token(botToken) + .listId(listId) + .limit(50)); + assertThat(listItemsResponse.getError(), is(nullValue())); + assertThat(listItemsResponse.isOk(), is(true)); + assertThat(listItemsResponse.getItems(), is(notNullValue())); + + // start download + SlackListsDownloadStartResponse downloadStartResponse = slack.methods().slackListsDownloadStart(r -> r + .token(botToken) + .listId(listId) + .includeArchived(false)); + assertThat(downloadStartResponse.getError(), is(nullValue())); + assertThat(downloadStartResponse.isOk(), is(true)); + + String jobId = downloadStartResponse.getJobId(); + if (jobId != null) { + // get download status + SlackListsDownloadGetResponse downloadGetResponse = slack.methods().slackListsDownloadGet(r -> r + .token(botToken) + .listId(listId) + .jobId(jobId)); + assertThat(downloadGetResponse.getError(), is(nullValue())); + assertThat(downloadGetResponse.isOk(), is(true)); + } + + // delete the item + SlackListsItemsDeleteResponse deleteItemResponse = slack.methods().slackListsItemsDelete(r -> r + .token(botToken) + .listId(listId) + .id(itemId)); + assertThat(deleteItemResponse.getError(), is(nullValue())); + assertThat(deleteItemResponse.isOk(), is(true)); + + // update list + SlackListsUpdateResponse updateResponse = slack.methods().slackListsUpdate(r -> r + .token(botToken) + .id(listId) + .name("Updated Test List") + .todoMode(true)); + assertThat(updateResponse.getError(), is(nullValue())); + assertThat(updateResponse.isOk(), is(true)); + + // delete access + SlackListsAccessDeleteResponse accessDeleteResponse = slack.methods().slackListsAccessDelete(r -> r + .token(botToken) + .listId(listId) + .channelIds(Arrays.asList(channelId))); + assertThat(accessDeleteResponse.getError(), is(nullValue())); + assertThat(accessDeleteResponse.isOk(), is(true)); + + log.info("Slack Lists API workflow completed for list: {}", listId); + } + + @Test + public void fullSlackListsWorkflow_async() throws Exception { + // 1. Create a list + SlackListsCreateResponse createResponse = slack.methodsAsync().slackListsCreate(r -> r + .token(botToken) + .name("Test List Async - SlackLists API") + .todoMode(true)).get(); + + assertThat(createResponse.getError(), is(nullValue())); + assertThat(createResponse.isOk(), is(true)); + + String listId = createResponse.getListId(); + assertThat(listId, is(notNullValue())); + + // create an item + SlackListsItemsCreateResponse createItemResponse = slack.methodsAsync().slackListsItemsCreate(r -> r + .token(botToken) + .listId(listId)).get(); + assertThat(createItemResponse.getError(), is(nullValue())); + assertThat(createItemResponse.isOk(), is(true)); + + if (createItemResponse.getItem() != null) { + String itemId = createItemResponse.getItem().getId(); + + // get item info + SlackListsItemsInfoResponse itemInfoResponse = slack.methodsAsync().slackListsItemsInfo(r -> r + .token(botToken) + .listId(listId) + .id(itemId)).get(); + assertThat(itemInfoResponse.getError(), is(nullValue())); + assertThat(itemInfoResponse.isOk(), is(true)); + + // list items + SlackListsItemsListResponse listItemsResponse = slack.methodsAsync().slackListsItemsList(r -> r + .token(botToken) + .listId(listId) + .limit(50)).get(); + assertThat(listItemsResponse.getError(), is(nullValue())); + assertThat(listItemsResponse.isOk(), is(true)); + + // delete the item + SlackListsItemsDeleteResponse deleteItemResponse = slack.methodsAsync().slackListsItemsDelete(r -> r + .token(botToken) + .listId(listId) + .id(itemId)).get(); + assertThat(deleteItemResponse.getError(), is(nullValue())); + assertThat(deleteItemResponse.isOk(), is(true)); + } + log.info("Async Slack Lists API workflow completed for list: {}", listId); + } + + @Test + public void itemsDeleteMultiple() throws IOException, SlackApiException { + // create a list and the items to delete + SlackListsCreateResponse createResponse = slack.methods().slackListsCreate(r -> r + .token(botToken) + .name("Test Delete Multiple")); + assertThat(createResponse.isOk(), is(true)); + + String listId = createResponse.getListId(); + + // make multiple items + SlackListsItemsCreateResponse item1 = slack.methods().slackListsItemsCreate(r -> r + .token(botToken) + .listId(listId)); + SlackListsItemsCreateResponse item2 = slack.methods().slackListsItemsCreate(r -> r + .token(botToken) + .listId(listId)); + + assertThat(item1.isOk(), is(true)); + assertThat(item2.isOk(), is(true)); + + String itemId1 = item1.getItem().getId(); + String itemId2 = item2.getItem().getId(); + + // delete multiple items + SlackListsItemsDeleteMultipleResponse deleteMultipleResponse = slack.methods().slackListsItemsDeleteMultiple(r -> r + .token(botToken) + .listId(listId) + .ids(Arrays.asList(itemId1, itemId2))); + assertThat(deleteMultipleResponse.getError(), is(nullValue())); + assertThat(deleteMultipleResponse.isOk(), is(true)); + } + +} diff --git a/slack-api-client/src/test/java/util/sample_json_generation/JsonDataRecorder.java b/slack-api-client/src/test/java/util/sample_json_generation/JsonDataRecorder.java index 83d174abc..e6b3bf824 100644 --- a/slack-api-client/src/test/java/util/sample_json_generation/JsonDataRecorder.java +++ b/slack-api-client/src/test/java/util/sample_json_generation/JsonDataRecorder.java @@ -275,6 +275,7 @@ private static void clearAllElements(JsonArray objects) { private static final List COMMON_TOP_LEVEL_PROPERTY_NAMES = Arrays.asList( "ok", + "warning", "error", "needed", "provided" diff --git a/slack-api-model/src/main/java/com/slack/api/model/list/ListColumnOptions.java b/slack-api-model/src/main/java/com/slack/api/model/list/ListColumnOptions.java index 60c0d8f83..f6b02c129 100644 --- a/slack-api-model/src/main/java/com/slack/api/model/list/ListColumnOptions.java +++ b/slack-api-model/src/main/java/com/slack/api/model/list/ListColumnOptions.java @@ -40,6 +40,8 @@ public class ListColumnOptions { @AllArgsConstructor public static class DefaultValue { private List select; + private List user; + private List channel; } @Data diff --git a/slack-api-model/src/main/java/com/slack/api/model/list/ListLimits.java b/slack-api-model/src/main/java/com/slack/api/model/list/ListLimits.java index 66102380d..5b75d4b40 100644 --- a/slack-api-model/src/main/java/com/slack/api/model/list/ListLimits.java +++ b/slack-api-model/src/main/java/com/slack/api/model/list/ListLimits.java @@ -13,6 +13,7 @@ public class ListLimits { private Boolean overRowMaximum; private Integer rowCountLimit; private Integer rowCount; + private Integer archivedRowCount; private Boolean overColumnMaximum; private Integer columnCount; private Integer columnCountLimit; diff --git a/slack-api-model/src/main/java/com/slack/api/model/list/ListRecord.java b/slack-api-model/src/main/java/com/slack/api/model/list/ListRecord.java index 80123e7d1..ca4f708a2 100644 --- a/slack-api-model/src/main/java/com/slack/api/model/list/ListRecord.java +++ b/slack-api-model/src/main/java/com/slack/api/model/list/ListRecord.java @@ -1,12 +1,15 @@ package com.slack.api.model.list; +import com.google.gson.annotations.SerializedName; import com.slack.api.model.File; import com.slack.api.model.Message; import com.slack.api.model.block.RichTextBlock; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; import java.util.List; import java.util.Map; @@ -32,14 +35,16 @@ public class ListRecord { private Map savedFields; @Data - @Builder + @SuperBuilder @NoArgsConstructor @AllArgsConstructor public static class Field { private String key; + @SerializedName("column_id") private String columnId; private String value; private String text; + @SerializedName("rich_text") private List richText; private Message message; private List number; @@ -53,6 +58,49 @@ public static class Field { private List channel; private List rating; private List timestamp; + private List link; + private List reference; + } + + /** + * Link field structure for Slack Lists items. + * https://docs.slack.dev/reference/methods/slackLists.items.create#field-types + */ + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class LinkField { + @SerializedName("original_url") + private String originalUrl; + @SerializedName("display_as_url") + private Boolean displayAsUrl; + @SerializedName("display_name") + private String displayName; + } + + /** + * Reference field structure for Slack Lists items. + * https://docs.slack.dev/reference/methods/slackLists.items.create#field-types + */ + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ReferenceField { + private FileRef file; + } + + /** + * File reference within a ReferenceField. + */ + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class FileRef { + @SerializedName("file_id") + private String fileId; } @Data @@ -64,4 +112,22 @@ public static class PlatformRefs { private String botUpdatedBy; private String botDeletedBy; } + + /** + * Cell update structure for slackLists.items.update. + * Includes row_id in addition to column_id and field value. + * https://docs.slack.dev/reference/methods/slackLists.items.update + */ + @Data + @SuperBuilder + @NoArgsConstructor + @AllArgsConstructor + @EqualsAndHashCode(callSuper = true) + public static class CellUpdate extends Field { + /** + * The ID of the row to update. + */ + @SerializedName("row_id") + private String rowId; + } }