diff --git a/bolt-spring-boot-examples/spring-boot-3/.gitignore b/bolt-spring-boot-examples/spring-boot-3/.gitignore new file mode 100644 index 000000000..e660fd93d --- /dev/null +++ b/bolt-spring-boot-examples/spring-boot-3/.gitignore @@ -0,0 +1 @@ +bin/ diff --git a/json-logs/raw/audit/v1/actions.json b/json-logs/raw/audit/v1/actions.json index bbad38fd2..e4ff40a33 100644 --- a/json-logs/raw/audit/v1/actions.json +++ b/json-logs/raw/audit/v1/actions.json @@ -318,7 +318,10 @@ "slack_connect_guidelines_changed", "slack_connect_pref_set", "slack_connect_pref_removed", - "slack_connect_pref_migrated" + "slack_connect_pref_migrated", + "slack_ai_mcp_resource_read", + "slack_ai_mcp_message_sent", + "pref.allow_native_giphy_gif_picker" ], "user": [ "custom_tos_accepted", @@ -518,7 +521,15 @@ "agentforce_agent_metadata_updated", "agentforce_agent_slack_deleted", "child_app_auto_installed", - "child_app_auto_install_denied" + "child_app_auto_install_denied", + "child_app_auto_install_rule_created", + "child_app_manifest_created", + "child_app_manifest_updated", + "child_app_manifest_deleted", + "child_app_manifest_exported", + "app_mcp_server_added", + "app_mcp_server_updated", + "app_mcp_server_removed" ], "workflow_builder": [ "workflow_created", diff --git a/json-logs/samples/api/admin.auth.policy.assignEntities.json b/json-logs/samples/api/admin.auth.policy.assignEntities.json index a8ccb3108..b0b6114bd 100644 --- a/json-logs/samples/api/admin.auth.policy.assignEntities.json +++ b/json-logs/samples/api/admin.auth.policy.assignEntities.json @@ -3,5 +3,6 @@ "entity_total_count": 12345, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.auth.policy.getEntities.json b/json-logs/samples/api/admin.auth.policy.getEntities.json index 302f0e717..634e4f405 100644 --- a/json-logs/samples/api/admin.auth.policy.getEntities.json +++ b/json-logs/samples/api/admin.auth.policy.getEntities.json @@ -10,5 +10,6 @@ ], "entity_total_count": 12345, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.auth.policy.removeEntities.json b/json-logs/samples/api/admin.auth.policy.removeEntities.json index a8ccb3108..b0b6114bd 100644 --- a/json-logs/samples/api/admin.auth.policy.removeEntities.json +++ b/json-logs/samples/api/admin.auth.policy.removeEntities.json @@ -3,5 +3,6 @@ "entity_total_count": 12345, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.conversations.delete.json b/json-logs/samples/api/admin.conversations.delete.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.conversations.delete.json +++ b/json-logs/samples/api/admin.conversations.delete.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.conversations.getCustomRetention.json b/json-logs/samples/api/admin.conversations.getCustomRetention.json index 98d573c67..23269b78e 100644 --- a/json-logs/samples/api/admin.conversations.getCustomRetention.json +++ b/json-logs/samples/api/admin.conversations.getCustomRetention.json @@ -4,5 +4,6 @@ "needed": "", "provided": "", "is_policy_enabled": false, - "duration_days": 12345 + "duration_days": 12345, + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.conversations.search.json b/json-logs/samples/api/admin.conversations.search.json index b3f7e2a29..6aa9bad34 100644 --- a/json-logs/samples/api/admin.conversations.search.json +++ b/json-logs/samples/api/admin.conversations.search.json @@ -115,14 +115,18 @@ "type": "", "data": { "file_id": "F00000000", - "shared_ts": "0000000000.000000" + "shared_ts": "0000000000.000000", + "folder_bookmark_id": "" }, "is_disabled": false }, { "type": "", "label": "", - "id": "" + "id": "", + "data": { + "folder_bookmark_id": "" + } } ], "tabz": [ @@ -132,12 +136,18 @@ "type": "", "data": { "file_id": "F00000000", - "shared_ts": "0000000000.000000" + "shared_ts": "0000000000.000000", + "folder_bookmark_id": "" }, "is_disabled": false }, { - "type": "" + "type": "", + "id": "", + "label": "", + "data": { + "folder_bookmark_id": "" + } } ], "meeting_notes": { diff --git a/json-logs/samples/api/admin.emoji.add.json b/json-logs/samples/api/admin.emoji.add.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.emoji.add.json +++ b/json-logs/samples/api/admin.emoji.add.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.emoji.addAlias.json b/json-logs/samples/api/admin.emoji.addAlias.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.emoji.addAlias.json +++ b/json-logs/samples/api/admin.emoji.addAlias.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.emoji.remove.json b/json-logs/samples/api/admin.emoji.remove.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.emoji.remove.json +++ b/json-logs/samples/api/admin.emoji.remove.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.emoji.rename.json b/json-logs/samples/api/admin.emoji.rename.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.emoji.rename.json +++ b/json-logs/samples/api/admin.emoji.rename.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.functions.permissions.set.json b/json-logs/samples/api/admin.functions.permissions.set.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.functions.permissions.set.json +++ b/json-logs/samples/api/admin.functions.permissions.set.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.roles.addAssignments.json b/json-logs/samples/api/admin.roles.addAssignments.json index c85fa68d7..6c20053af 100644 --- a/json-logs/samples/api/admin.roles.addAssignments.json +++ b/json-logs/samples/api/admin.roles.addAssignments.json @@ -8,5 +8,6 @@ } ], "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.roles.removeAssignments.json b/json-logs/samples/api/admin.roles.removeAssignments.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.roles.removeAssignments.json +++ b/json-logs/samples/api/admin.roles.removeAssignments.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json b/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json +++ b/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDescription.json b/json-logs/samples/api/admin.teams.settings.setDescription.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.teams.settings.setDescription.json +++ b/json-logs/samples/api/admin.teams.settings.setDescription.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDiscoverability.json b/json-logs/samples/api/admin.teams.settings.setDiscoverability.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.teams.settings.setDiscoverability.json +++ b/json-logs/samples/api/admin.teams.settings.setDiscoverability.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setIcon.json b/json-logs/samples/api/admin.teams.settings.setIcon.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.teams.settings.setIcon.json +++ b/json-logs/samples/api/admin.teams.settings.setIcon.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setName.json b/json-logs/samples/api/admin.teams.settings.setName.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.teams.settings.setName.json +++ b/json-logs/samples/api/admin.teams.settings.setName.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.clearSettings.json b/json-logs/samples/api/admin.users.session.clearSettings.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.users.session.clearSettings.json +++ b/json-logs/samples/api/admin.users.session.clearSettings.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.getSettings.json b/json-logs/samples/api/admin.users.session.getSettings.json index 3f552a7da..35ce8f65c 100644 --- a/json-logs/samples/api/admin.users.session.getSettings.json +++ b/json-logs/samples/api/admin.users.session.getSettings.json @@ -12,5 +12,6 @@ ], "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.invalidate.json b/json-logs/samples/api/admin.users.session.invalidate.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.users.session.invalidate.json +++ b/json-logs/samples/api/admin.users.session.invalidate.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.reset.json b/json-logs/samples/api/admin.users.session.reset.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.users.session.reset.json +++ b/json-logs/samples/api/admin.users.session.reset.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.resetBulk.json b/json-logs/samples/api/admin.users.session.resetBulk.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.users.session.resetBulk.json +++ b/json-logs/samples/api/admin.users.session.resetBulk.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.setSettings.json b/json-logs/samples/api/admin.users.session.setSettings.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.users.session.setSettings.json +++ b/json-logs/samples/api/admin.users.session.setSettings.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/conversations.leave.json b/json-logs/samples/api/conversations.leave.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/conversations.leave.json +++ b/json-logs/samples/api/conversations.leave.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/conversations.rename.json b/json-logs/samples/api/conversations.rename.json index 2d4151d66..7df54a8d6 100644 --- a/json-logs/samples/api/conversations.rename.json +++ b/json-logs/samples/api/conversations.rename.json @@ -52,5 +52,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index 0230f312c..924b7c5b0 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -86,15 +86,17 @@ "type": "", "data": { "file_id": "F00000000", - "shared_ts": "0000000000.000000" + "shared_ts": "0000000000.000000", + "folder_bookmark_id": "" }, "is_disabled": false }, { - "type": "", - "label": "", "id": "", + "label": "", + "type": "", "data": { + "folder_bookmark_id": "", "file_id": "F00000000", "shared_ts": "0000000000.000000" } @@ -107,25 +109,28 @@ "type": "", "data": { "file_id": "F00000000", - "shared_ts": "0000000000.000000" + "shared_ts": "0000000000.000000", + "folder_bookmark_id": "" }, "is_disabled": false }, { - "type": "", "id": "", + "label": "", + "type": "", "data": { + "folder_bookmark_id": "", "file_id": "F00000000", "shared_ts": "0000000000.000000" - }, - "label": "" + } } ], "meeting_notes": { "file_id": "F00000000" }, "is_dormant": false, - "use_case": "" + "use_case": "", + "has_slack_connect_invite_created": false } } ], diff --git a/json-logs/samples/api/users.discoverableContacts.lookup.json b/json-logs/samples/api/users.discoverableContacts.lookup.json index 40d7dd188..c3c31ef6e 100644 --- a/json-logs/samples/api/users.discoverableContacts.lookup.json +++ b/json-logs/samples/api/users.discoverableContacts.lookup.json @@ -8,5 +8,6 @@ "" ] }, - "is_discoverable": false + "is_discoverable": false, + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/users.lookupByEmail.json b/json-logs/samples/api/users.lookupByEmail.json index 4e2b45404..6f345d67c 100644 --- a/json-logs/samples/api/users.lookupByEmail.json +++ b/json-logs/samples/api/users.lookupByEmail.json @@ -48,7 +48,8 @@ "display_url": "", "unicode": "" } - ] + ], + "start_date": "" }, "is_admin": false, "is_owner": false, @@ -61,7 +62,8 @@ "has_2fa": false, "is_email_confirmed": false, "who_can_share_contact_card": "", - "is_invited_user": false + "is_invited_user": false, + "two_factor_type": "" }, "error": "", "needed": "", diff --git a/json-logs/samples/audit/v1/logs.json b/json-logs/samples/audit/v1/logs.json index 82c7b9788..0995f5df2 100644 --- a/json-logs/samples/audit/v1/logs.json +++ b/json-logs/samples/audit/v1/logs.json @@ -121,7 +121,9 @@ }, "list": { "id": "" - } + }, + "external_auth_oauth2_token": {}, + "function": {} }, "context": { "session_id": "", @@ -396,7 +398,39 @@ "cell_date_updated": 123, "view_id": "", "user": "", - "file_id": "" + "file_id": "", + "trigger_id": "", + "trigger_config": {}, + "permission_type": "", + "channel_ids": [], + "user_ids": [], + "is_slack_provided_template": false, + "template_title": "", + "thread_ts": "", + "status": "", + "entity_team": "", + "is_external_user": false, + "salesforce_org_id": "", + "salesforce_edition": "", + "salesforce_org_config": {}, + "salesforce_tenant_guid": "", + "affected_users": {}, + "provider_key": "", + "policy_name": "", + "authentication_mode": "", + "entity_ids": {}, + "pref_name": "", + "email": "", + "md": {}, + "md5_hash": "", + "is_ext_shared": false, + "teams_shared_with": [], + "folder_bookmark_id": "", + "is_allowed": false, + "variable_names": [], + "functions_added": [], + "workflows_added": [], + "datastores_added": [] } } ] diff --git a/json-logs/samples/scim/v2/Users.json b/json-logs/samples/scim/v2/Users.json index 57d1122e7..0efa034d5 100644 --- a/json-logs/samples/scim/v2/Users.json +++ b/json-logs/samples/scim/v2/Users.json @@ -36,10 +36,6 @@ } ], "photos": [ - { - "value": "https://www.example.com/", - "type": "" - }, { "value": "", "type": "" diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index 94b371537..3ed14b1f3 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -277,6 +277,61 @@ private WorkspaceOrOrg() { public static final String search_query_audit_logs_export_deleted = "search_query_audit_logs_export_deleted"; public static final String audit_logs_ai_summary_generated = "audit_logs_ai_summary_generated"; public static final String search_query_audit_logs_max_rows_failure = "search_query_audit_logs_max_rows_failure"; + public static final String migration_bulk_email_process_completed = "migration_bulk_email_process_completed"; + public static final String migration_bulk_user_resolutions_uploaded = "migration_bulk_user_resolutions_uploaded"; + public static final String migration_bulk_user_resolutions_undone = "migration_bulk_user_resolutions_undone"; + public static final String migration_bulk_user_resolutions_upload_failed = "migration_bulk_user_resolutions_upload_failed"; + public static final String data_deletion_date_changed = "data_deletion_date_changed"; + public static final String slack_ai_message_explanation_generated = "slack_ai_message_explanation_generated"; + public static final String quip_migration_org_mapping_deleted = "quip_migration_org_mapping_deleted"; + public static final String quip_migration_org_mapping_updated = "quip_migration_org_mapping_updated"; + public static final String salesforce_channels_retention_settings_synced = "salesforce_channels_retention_settings_synced"; + public static final String mcp_slack_read_canvas_tool_called = "mcp_slack_read_canvas_tool_called"; + public static final String mcp_slack_create_canvas_tool_called = "mcp_slack_create_canvas_tool_called"; + public static final String mcp_slack_update_canvas_tool_called = "mcp_slack_update_canvas_tool_called"; + public static final String mcp_slack_read_channel_tool_called = "mcp_slack_read_channel_tool_called"; + public static final String mcp_slack_read_thread_tool_called = "mcp_slack_read_thread_tool_called"; + public static final String mcp_slack_search_public_tool_called = "mcp_slack_search_public_tool_called"; + public static final String mcp_slack_search_channels_tool_called = "mcp_slack_search_channels_tool_called"; + public static final String mcp_slack_search_public_and_private_tool_called = "mcp_slack_search_public_and_private_tool_called"; + public static final String mcp_slack_search_users_tool_called = "mcp_slack_search_users_tool_called"; + public static final String mcp_slack_send_message_tool_called = "mcp_slack_send_message_tool_called"; + public static final String mcp_slack_read_user_profile_tool_called = "mcp_slack_read_user_profile_tool_called"; + public static final String mcp_slack_create_draft_tool_called = "mcp_slack_create_draft_tool_called"; + public static final String mcp_slack_create_draft_message_tool_called = "mcp_slack_create_draft_message_tool_called"; + public static final String mcp_slack_send_message_draft_tool_called = "mcp_slack_send_message_draft_tool_called"; + public static final String mcp_slack_schedule_message_tool_called = "mcp_slack_schedule_message_tool_called"; + public static final String mcp_slack_list_channel_members_tool_called = "mcp_slack_list_channel_members_tool_called"; + public static final String mcp_slack_mark_read_tool_called = "mcp_slack_mark_read_tool_called"; + public static final String mcp_slack_search_emojis_tool_called = "mcp_slack_search_emojis_tool_called"; + public static final String mcp_slack_add_reaction_tool_called = "mcp_slack_add_reaction_tool_called"; + public static final String mcp_slack_get_reactions_tool_called = "mcp_slack_get_reactions_tool_called"; + public static final String mcp_slack_create_conversation_tool_called = "mcp_slack_create_conversation_tool_called"; + public static final String mcp_slack_read_file_tool_called = "mcp_slack_read_file_tool_called"; + public static final String mcp_slack_get_workflow_details_tool_called = "mcp_slack_get_workflow_details_tool_called"; + public static final String mcp_slack_get_workflow_execution_status_tool_called = "mcp_slack_get_workflow_execution_status_tool_called"; + public static final String mcp_slack_canvas_find_replace_tool_called = "mcp_slack_canvas_find_replace_tool_called"; + public static final String mcp_slack_list_workflows_tool_called = "mcp_slack_list_workflows_tool_called"; + public static final String mcp_slack_run_workflow_tool_called = "mcp_slack_run_workflow_tool_called"; + public static final String slack_ai_mcp_tool_called = "slack_ai_mcp_tool_called"; + public static final String slack_ai_mcp_tool_permission_changed = "slack_ai_mcp_tool_permission_changed"; + public static final String slack_ai_mcp_connector_changed = "slack_ai_mcp_connector_changed"; + public static final String slack_ai_mcp_resource_read = "slack_ai_mcp_resource_read"; + public static final String slack_ai_mcp_message_sent = "slack_ai_mcp_message_sent"; + public static final String custom_tos_link_clicked = "custom_tos_link_clicked"; + public static final String prefs_setting_changed = "prefs_setting_changed"; + public static final String auth_policy_created = "auth_policy_created"; + public static final String auth_policy_entity_assigned = "auth_policy_entity_assigned"; + public static final String auth_policy_entity_removed = "auth_policy_entity_removed"; + public static final String slack_connect_guidelines_changed = "slack_connect_guidelines_changed"; + public static final String slack_connect_pref_set = "slack_connect_pref_set"; + public static final String slack_connect_pref_removed = "slack_connect_pref_removed"; + public static final String slack_connect_pref_migrated = "slack_connect_pref_migrated"; + public static final String pref_allow_cea_for_hippa_team_changed = "pref.allow_cea_for_hippa_team_changed"; + public static final String pref_slackbot_ai_canvas_write_enabled_changed = "pref.slackbot_ai_canvas_write_enabled_changed"; + public static final String pref_show_join_leave_changed = "pref.show_join_leave_changed"; + public static final String pref_show_join_leave_welcome_party_changed = "pref.show_join_leave_welcome_party_changed"; + public static final String pref_allow_native_giphy_gif_picker = "pref.allow_native_giphy_gif_picker"; } public static class User { @@ -340,6 +395,15 @@ private User() { public static final String user_anomaly_event_response_allowlist_changed = "user_anomaly_event_response_allowlist_changed"; public static final String org_owner_created = "org_owner_created"; public static final String slackbot_ai_shareable_prompt_created = "slackbot_ai_shareable_prompt_created"; + public static final String user_merged = "user_merged"; + public static final String slack_ai_calendar_read = "slack_ai_calendar_read"; + public static final String slack_ai_calendar_create = "slack_ai_calendar_create"; + public static final String slack_ai_calendar_update = "slack_ai_calendar_update"; + public static final String slackbot_ai_canvas_approval_bypassed = "slackbot_ai_canvas_approval_bypassed"; + public static final String slack_ai_skill_invoked = "slack_ai_skill_invoked"; + public static final String slack_ai_skill_metadata_updated = "slack_ai_skill_metadata_updated"; + public static final String slack_ai_skill_auto_enabled = "slack_ai_skill_auto_enabled"; + public static final String slack_ai_skill_auto_disabled = "slack_ai_skill_auto_disabled"; } public static class File { @@ -435,6 +499,8 @@ private Channel() { public static final String channel_detail_flag_unassignment = "channel_detail_flag_unassignment"; public static final String channel_detail_flag_moderated = "channel_detail_flag_moderated"; public static final String channel_detail_flag_dismissed = "channel_detail_flag_dismissed"; + public static final String channel_exclude_from_slack_ai_updated = "channel_exclude_from_slack_ai_updated"; + public static final String service_owner_transferred = "service_owner_transferred"; } public static class App { @@ -480,6 +546,16 @@ private App() { public static final String agentforce_agent_actions_updated = "agentforce_agent_actions_updated"; public static final String agentforce_agent_metadata_updated = "agentforce_agent_metadata_updated"; public static final String agentforce_agent_slack_deleted = "agentforce_agent_slack_deleted"; + public static final String child_app_auto_installed = "child_app_auto_installed"; + public static final String child_app_auto_install_denied = "child_app_auto_install_denied"; + public static final String child_app_auto_install_rule_created = "child_app_auto_install_rule_created"; + public static final String child_app_manifest_created = "child_app_manifest_created"; + public static final String child_app_manifest_updated = "child_app_manifest_updated"; + public static final String child_app_manifest_deleted = "child_app_manifest_deleted"; + public static final String child_app_manifest_exported = "child_app_manifest_exported"; + public static final String app_mcp_server_added = "app_mcp_server_added"; + public static final String app_mcp_server_updated = "app_mcp_server_updated"; + public static final String app_mcp_server_removed = "app_mcp_server_removed"; } public static class Message { @@ -597,6 +673,7 @@ private Subteam() { public static final String usergroup_section_updated = "usergroup_section_updated"; public static final String user_add_to_usergroup_failed = "user_add_to_usergroup_failed"; public static final String usergroup_anomaly_event_response_allowlist_changed = "usergroup_anomaly_event_response_allowlist_changed"; + public static final String user_bulk_upload_to_usergroup_started = "user_bulk_upload_to_usergroup_started"; } public static class AccountTypeRole { @@ -629,6 +706,10 @@ private WorkflowV2() { public static final String workflow_trigger_permission_added = "workflow_trigger_permission_added"; public static final String workflow_trigger_permission_removed = "workflow_trigger_permission_removed"; public static final String workflow_trigger_suspicious_keyword = "workflow_trigger_suspicious_keyword"; + public static final String workflow_ai_answer_suspicious_prompt = "workflow_ai_answer_suspicious_prompt"; + public static final String external_auth_oauth2_token_fetched = "external_auth_oauth2_token_fetched"; + public static final String external_auth_oauth2_token_refreshed = "external_auth_oauth2_token_refreshed"; + public static final String external_auth_oauth2_token_deleted = "external_auth_oauth2_token_deleted"; } public static class Canvas { @@ -662,6 +743,9 @@ private Canvas() { public static final String canvas_converted_to_standalone = "canvas_converted_to_standalone"; public static final String canvas_quip_migration_undone = "canvas_quip_migration_undone"; public static final String slack_ai_canvas_content_generated = "slack_ai_canvas_content_generated"; + public static final String canvas_slack_ai_exclusion_enabled = "canvas_slack_ai_exclusion_enabled"; + public static final String canvas_slack_ai_exclusion_disabled = "canvas_slack_ai_exclusion_disabled"; + public static final String canvas_share_limit_reached = "canvas_share_limit_reached"; } public static class Function { @@ -698,6 +782,7 @@ private NativeDlp() { public static final String native_dlp_rule_reactivated = "native_dlp_rule_reactivated"; public static final String native_dlp_rule_edited = "native_dlp_rule_edited"; public static final String native_dlp_rule_action_applied = "native_dlp_rule_action_applied"; + public static final String native_dlp_violation_deleted = "native_dlp_violation_deleted"; } public static class Template { @@ -756,5 +841,39 @@ private List() { public static final String list_restricted_sharing_disabled = "list_restricted_sharing_disabled"; public static final String list_rows_undeleted = "list_rows_undeleted"; public static final String list_default_view_updated = "list_default_view_updated"; + public static final String list_slack_ai_exclusion_enabled = "list_slack_ai_exclusion_enabled"; + public static final String list_slack_ai_exclusion_disabled = "list_slack_ai_exclusion_disabled"; + public static final String list_share_limit_reached = "list_share_limit_reached"; + } + + public static class LegalHold { + private LegalHold() { + } + + public static final String legal_hold_policy_created = "legal_hold_policy_created"; + public static final String legal_hold_policy_updated = "legal_hold_policy_updated"; + public static final String legal_hold_policy_released = "legal_hold_policy_released"; + public static final String legal_hold_policy_reactivated = "legal_hold_policy_reactivated"; + public static final String legal_hold_policy_entities_added = "legal_hold_policy_entities_added"; + public static final String legal_hold_policy_entities_deleted = "legal_hold_policy_entities_deleted"; + public static final String legal_hold_policy_exclusion_added = "legal_hold_policy_exclusion_added"; + public static final String legal_hold_policy_exclusion_deleted = "legal_hold_policy_exclusion_deleted"; + } + + public static class SlackFirstCrm { + private SlackFirstCrm() { + } + + public static final String contacts_import_initiated = "contacts_import_initiated"; + public static final String contacts_import_completed = "contacts_import_completed"; + public static final String contacts_import_failed = "contacts_import_failed"; + public static final String object_import_initiated = "object_import_initiated"; + public static final String object_import_completed = "object_import_completed"; + public static final String object_import_failed = "object_import_failed"; + public static final String field_created = "field_created"; + public static final String field_updated = "field_updated"; + public static final String field_visibility_updated = "field_visibility_updated"; + public static final String license_assigned = "license_assigned"; + public static final String license_removed = "license_removed"; } } diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index d4fb6a70e..a00c34c2d 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -72,6 +72,8 @@ public static class Entity { private InformationBarrier barrier; private WorkflowV2 workflowV2; private SlackList list; + private Object externalAuthOauth2Token; + private Object function; } @Data @@ -222,7 +224,7 @@ public static class WorkflowV2StepConfiguration { private String name; // "Collect info in a form" private String stepFunctionType; // "Custom", "Builtin" private String stepFunctionAppId; // "A05QFAJ8LBA" - private String externalAuthConfiguration; + private java.util.List externalAuthConfiguration; } @Data @@ -250,7 +252,7 @@ public static class Details { private String name; private String botId; private List channels; - private List permissions; + private Object permissions; private String sharedTo; // channel_workspaces_updated private String reason; @SerializedName("is_internal_integration") @@ -367,6 +369,42 @@ public static class Details { private String user; // list_access_added private String fileId; private String triggerId; // workflow_trigger_permission_set, workflow_trigger_permission_added + private Object triggerConfig; + private String permissionType; + private java.util.List channelIds; + private java.util.List userIds; + @SerializedName("is_slack_provided_template") + private Boolean slackProvidedTemplate; + private String templateTitle; + private String threadTs; + private String status; + private String entityTeam; + @SerializedName("is_external_user") + private Boolean externalUser; + private String salesforceOrgId; + private String salesforceEdition; + private Object salesforceOrgConfig; + private String salesforceTenantGuid; + private Object affectedUsers; + private String providerKey; + private String policyName; + private String authenticationMode; + private Object entityIds; + private String prefName; + private String email; + private Object md; + private String md5Hash; + @SerializedName("is_ext_shared") + private Boolean extShared; + private List teamsSharedWith; + private String folderBookmarkId; + @SerializedName("is_allowed") + private Boolean allowed; + private List variableNames; + private List functionsAdded; + private List workflowsAdded; + private List datastoresAdded; + private ConversationPref whoCanDmAnyone; } @Data 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 f088565df..77cb0e883 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 @@ -719,6 +719,9 @@ public static FormBody.Builder toForm(AdminFunctionsPermissionsSetRequest req) { if (req.getUserIds() != null) { setIfNotNull("user_ids", req.getUserIds().stream().collect(joining(",")), form); } + if (req.getPermissions() != null) { + setIfNotNull("permissions", GSON.toJson(req.getPermissions()), form); + } return form; } diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/admin/functions/AdminFunctionsPermissionsSetRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/admin/functions/AdminFunctionsPermissionsSetRequest.java index 770c5115f..c976e91a5 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/request/admin/functions/AdminFunctionsPermissionsSetRequest.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/admin/functions/AdminFunctionsPermissionsSetRequest.java @@ -1,8 +1,10 @@ package com.slack.api.methods.request.admin.functions; import com.slack.api.methods.SlackApiRequest; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; @@ -21,4 +23,17 @@ public class AdminFunctionsPermissionsSetRequest implements SlackApiRequest { private String functionId; private String visibility; // named_entities, everyone, no_one private List userIds; + private List permissions; + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Permission { + private String visibility; + private String permissionType; + private List userIds; + private List teamIds; + private List orgIds; + } } diff --git a/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java b/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java index f7d3db03e..8fa8f83af 100644 --- a/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java +++ b/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java @@ -36,7 +36,9 @@ public void logs() throws Exception { verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getEntity(), "getApp", "getEnterprise", + "getExternalAuthOauth2Token", "getFile", + "getFunction", "getUsergroup", "getChannel", "getMessage", diff --git a/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java b/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java index c04a83c82..d9e2165e2 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java @@ -293,6 +293,18 @@ public void getActions_detectingNewOnes() throws IOException, AuditApiException fail("Unknown action detected - " + action); } } + List legalHoldNames = getAllPublicStaticFieldValues(Actions.LegalHold.class); + for (String action : actions.getLegalHold()) { + if (!legalHoldNames.contains(action)) { + fail("Unknown action detected - " + action); + } + } + List slackFirstCrmNames = getAllPublicStaticFieldValues(Actions.SlackFirstCrm.class); + for (String action : actions.getSlackFirstCrm()) { + if (!slackFirstCrmNames.contains(action)) { + fail("Unknown action detected - " + action); + } + } } @Test @@ -370,6 +382,8 @@ public void getLogs_all_actions() throws Exception { verifyAllActions(orgAdminUserToken, Actions.AppApprovalAutomationRule.class); verifyAllActions(orgAdminUserToken, Actions.SalesElevate.class); verifyAllActions(orgAdminUserToken, Actions.NativeDlp.class); + verifyAllActions(orgAdminUserToken, Actions.LegalHold.class); + verifyAllActions(orgAdminUserToken, Actions.SlackFirstCrm.class); // As all the properties are available in LogsResponse class, // we'll re-generate the sample JSON file. diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/conversations_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/conversations_Test.java index 6886b733d..c3b62493e 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods/conversations_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/conversations_Test.java @@ -228,10 +228,13 @@ public void channelConversation() throws Exception { // Using async client to avoid an exception due to rate limited errors UsersListResponse usersListResponse = slack.methodsAsync().usersList(r -> r.token(botToken)).get(); + // Exclude the userToken's user to avoid cant_kick_self when kicking with userToken + String userTokenUserId = slack.methods().authTest(r -> r.token(userToken)).getUserId(); String invitee_ = null; for (User u : usersListResponse.getMembers()) { if (!"USLACKBOT".equals(u.getId()) && !u.isBot() + && !u.getId().equals(userTokenUserId) && !membersResponse.getMembers().contains(u.getId()) && !u.isRestricted() && !u.isUltraRestricted()) { diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/dnd_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/dnd_Test.java index c511e21c9..fb0dc7b53 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods/dnd_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/dnd_Test.java @@ -52,7 +52,12 @@ public void dnd() throws Exception { { List users = new ArrayList<>(); for (User member : members) { - users.add(member.getId()); + if (!member.isDeleted()) { + users.add(member.getId()); + } + if (users.size() >= 50) { + break; + } } DndTeamInfoResponse response = slack.methods().dndTeamInfo(r -> r.token(botToken).users(users)); assertThat(response.getError(), is(nullValue())); diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/rtm_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/rtm_Test.java index a66609189..0f6ee97d6 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods/rtm_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/rtm_Test.java @@ -305,6 +305,7 @@ public void handle(String message) { } + @Ignore // "method_deprecated" 2025-03-31 https://docs.slack.dev/changelog/2024-09-legacy-custom-bots-classic-apps-deprecation/ @Test public void ping_pong() throws Exception { diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/users_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/users_Test.java index 1aef93f73..2eda46ddd 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods/users_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/users_Test.java @@ -42,6 +42,7 @@ public class users_Test { String userToken = System.getenv(Constants.SLACK_SDK_TEST_USER_TOKEN); String enterpriseGridTeamAdminUserToken = System.getenv( Constants.SLACK_SDK_TEST_GRID_WORKSPACE_ADMIN_USER_TOKEN); + String gridTeamId = System.getenv(Constants.SLACK_SDK_TEST_GRID_TEAM_ID); @BeforeClass public static void setUp() throws Exception { @@ -109,7 +110,7 @@ public void enterpriseGrid() throws Exception { if (enterpriseGridTeamAdminUserToken != null) { // Using async client to avoid an exception due to rate limited errors UsersListResponse users = slack.methodsAsync(enterpriseGridTeamAdminUserToken) - .usersList(r -> r.includeLocale(true).limit(10)).get(); + .usersList(r -> r.teamId(gridTeamId).includeLocale(true).limit(10)).get(); assertThat(users.getError(), is(nullValue())); UsersInfoResponse usersInfo = slack.methods(enterpriseGridTeamAdminUserToken) @@ -330,7 +331,7 @@ public void lookupByEmailSupported_bot() throws Exception { List users = usersListResponse.getMembers(); User randomUserWhoHasEmail = null; for (User user : users) { - if (user.getProfile() != null && user.getProfile().getEmail() != null) { + if (user.getProfile() != null && user.getProfile().getEmail() != null && !user.isDeleted()) { randomUserWhoHasEmail = user; break; } @@ -360,7 +361,7 @@ public void lookupByEmailSupported_user() throws Exception { List users = usersListResponse.getMembers(); User randomUserWhoHasEmail = null; for (User user : users) { - if (user.getProfile() != null && user.getProfile().getEmail() != null) { + if (user.getProfile() != null && user.getProfile().getEmail() != null && !user.isDeleted()) { randomUserWhoHasEmail = user; break; } @@ -416,6 +417,7 @@ public void usersConversations_EnterpriseGrid() throws Exception { while (cursor != "" && pageNum < 10) { UsersConversationsResponse conversations = slack.methods().usersConversations(r -> r .token(enterpriseGridTeamAdminUserToken) + .teamId(gridTeamId) .user(authTestResult.getUserId()) .types(Arrays.asList( ConversationType.PUBLIC_CHANNEL, @@ -465,6 +467,9 @@ public void scanAllUsers() throws Exception { UsersListResponse users = client.usersList(usersReq).get(); assertThat(users.getError(), is(nullValue())); for (User user : users.getMembers()) { + if (user.isDeleted()) { + continue; + } UsersInfoResponse userInfo = client.usersInfo(r -> r.user(user.getId()).includeLocale(true)).get(); assertThat(userInfo.getError(), is(nullValue())); // Requires https://docs.slack.dev/reference/scopes/users.read.email diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java index f22f5937c..3d0cc11a5 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java @@ -244,11 +244,11 @@ public void changeSharedChannels() throws Exception { } static String getOrCreatePrivateChannel() throws Exception { - List privateChannels = slack.methods(teamAdminUserToken).conversationsList(r -> r - .excludeArchived(true).types(Arrays.asList(ConversationType.PRIVATE_CHANNEL)).limit(1)).getChannels(); + List privateChannels = slack.methods(orgAdminUserToken).conversationsList(r -> r + .teamId(teamId).excludeArchived(true).types(Arrays.asList(ConversationType.PRIVATE_CHANNEL)).limit(1)).getChannels(); if (privateChannels.size() == 0 || privateChannels.get(0).isShared()) { String name = "private-test-" + System.currentTimeMillis(); - ConversationsCreateResponse creation = slack.methods(teamAdminUserToken).conversationsCreate(r -> r.name(name).isPrivate(true)); + ConversationsCreateResponse creation = slack.methods(orgAdminUserToken).conversationsCreate(r -> r.name(name).teamId(teamId).isPrivate(true)); return creation.getChannel().getId(); } else { return privateChannels.get(0).getId(); diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_emoji_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_emoji_Test.java index f2481f3c5..c0a5b1f85 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_emoji_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_emoji_Test.java @@ -33,23 +33,24 @@ public static void tearDown() throws InterruptedException { @Test public void emoji() throws Exception { if (orgAdminUserToken != null) { - CompletableFuture list = methodsAsync.adminEmojiList(r -> r.limit(100)); - AdminEmojiListResponse emoji = list.get(); - assertThat(emoji.getEmoji().isEmpty(), is(false)); - - Thread.sleep(3000); + String name = "java-" + System.currentTimeMillis(); + String url = "https://emoji.slack-edge.com/T03E94MJU/java/624937af2b22523e.png"; CompletableFuture creationError = methodsAsync.adminEmojiAdd(r -> r.name("test")); assertThat(creationError.get().getError(), is("invalid_arguments")); Thread.sleep(10000); - String name = "java-" + System.currentTimeMillis(); - String url = "https://emoji.slack-edge.com/T03E94MJU/java/624937af2b22523e.png"; - CompletableFuture creation = methodsAsync.adminEmojiAdd(r -> r.name(name).url(url)); assertThat(creation.get().getError(), is(nullValue())); + Thread.sleep(3000); + + CompletableFuture list = methodsAsync.adminEmojiList(r -> r.limit(100)); + AdminEmojiListResponse emoji = list.get(); + assertThat(emoji.getError(), is(nullValue())); + assertThat(emoji.getEmoji().isEmpty(), is(false)); + CompletableFuture aliasCreationError = methodsAsync.adminEmojiAddAlias(r -> r.name(name)); assertThat(aliasCreationError.get().getError(), is("invalid_arguments")); diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java index 451649643..b1204f936 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java @@ -2,6 +2,7 @@ import com.slack.api.Slack; import com.slack.api.methods.AsyncMethodsClient; +import com.slack.api.methods.request.admin.functions.AdminFunctionsPermissionsSetRequest; import com.slack.api.methods.response.admin.functions.AdminFunctionsListResponse; import com.slack.api.methods.response.admin.functions.AdminFunctionsPermissionsLookupResponse; import com.slack.api.methods.response.admin.functions.AdminFunctionsPermissionsSetResponse; @@ -13,6 +14,7 @@ import org.junit.Test; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -31,6 +33,7 @@ public static void tearDown() throws InterruptedException { } static String orgAdminUserToken = System.getenv(Constants.SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN); + static String gridTeamId = System.getenv(Constants.SLACK_SDK_TEST_GRID_TEAM_ID); static AsyncMethodsClient methodsAsync = slack.methodsAsync(orgAdminUserToken); @Test @@ -39,6 +42,7 @@ public void adminFunctions() throws Exception { final List appIds = Arrays.asList(System.getenv(Constants.SLACK_SDK_TEST_GRID_APP_IDS).split(",")); AdminFunctionsListResponse response = methodsAsync.adminFunctionsList(r -> r .appIds(appIds) + .teamId(gridTeamId) .limit(1000) ).get(); assertThat(response.getError(), is(nullValue())); @@ -51,18 +55,33 @@ public void adminFunctions() throws Exception { String userId = methodsAsync.authTest(r -> r).get().getUserId(); AdminFunctionsPermissionsSetResponse set = methodsAsync.adminFunctionsPermissionsSet(r -> r .functionId(functionIds.get(0)) - .userIds(Arrays.asList(userId)) - .visibility("named_entities") + .permissions(Collections.singletonList( + AdminFunctionsPermissionsSetRequest.Permission.builder() + .visibility("named_entities") + .permissionType("slack_function") + .userIds(Arrays.asList(userId)) + .build() + )) ).get(); assertThat(set.getError(), is(nullValue())); set = methodsAsync.adminFunctionsPermissionsSet(r -> r .functionId(functionIds.get(0)) - .visibility("no_one") + .permissions(Collections.singletonList( + AdminFunctionsPermissionsSetRequest.Permission.builder() + .visibility("no_one") + .permissionType("slack_function") + .build() + )) ).get(); assertThat(set.getError(), is(nullValue())); set = methodsAsync.adminFunctionsPermissionsSet(r -> r .functionId(functionIds.get(0)) - .visibility("everyone") + .permissions(Collections.singletonList( + AdminFunctionsPermissionsSetRequest.Permission.builder() + .visibility("everyone") + .permissionType("slack_function") + .build() + )) ).get(); assertThat(set.getError(), is(nullValue())); @@ -72,6 +91,7 @@ public void adminFunctions() throws Exception { final String _nextCursor = nextCursor; response = methodsAsync.adminFunctionsList(req -> req .appIds(appIds) + .teamId(gridTeamId) .limit(1000) .cursor(_nextCursor) ).get(); diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java index a3b677ae4..afec1a6e5 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java @@ -54,8 +54,9 @@ public void listRoleAssignments() throws Exception { public void addAndRemoveAssignments() throws Exception { if (orgAdminUserToken != null) { String userId = orgAdminMethodsAsync.authTest(r -> r).get().getUserId(); - String channelId = workspaceAdminMethodsAsync.usersConversations(r -> r - .user(userId).excludeArchived(true).limit(1) + String teamId = System.getenv(Constants.SLACK_SDK_TEST_GRID_TEAM_ID); + String channelId = orgAdminMethodsAsync.usersConversations(r -> r + .user(userId).teamId(teamId).excludeArchived(true).limit(1) ).get().getChannels().get(0).getId(); AdminRolesAddAssignmentsResponse addition = orgAdminMethodsAsync.adminRolesAddAssignments(r -> r .roleId("Rl0A") diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java index b502341ea..ff8b80c42 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java @@ -136,7 +136,8 @@ public void teams_settings() throws Exception { AdminTeamsSettingsInfoResponse info = methodsAsync.adminTeamsSettingsInfo(r -> r.teamId(teamId)).get(); assertThat(info.getError(), is(nullValue())); - List channelIds = slack.methods(teamAdminUserToken).conversationsList(r -> r + List channelIds = slack.methods(orgAdminUserToken).conversationsList(r -> r + .teamId(teamId) .excludeArchived(true) .types(Arrays.asList(ConversationType.PUBLIC_CHANNEL)) .limit(2) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java index afb4ae959..397628b38 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java @@ -209,7 +209,7 @@ private String findUserId(List idsToSkip) throws Exception { private List findUserIds(int num, List idsToSkip) throws Exception { List userIds = new ArrayList<>(); - UsersListResponse usersListResponse = slack.methodsAsync(teamAdminUserToken).usersList(req -> req).get(); + UsersListResponse usersListResponse = slack.methodsAsync(orgAdminUserToken).usersList(req -> req.teamId(teamId)).get(); assertThat(usersListResponse.getError(), is(nullValue())); List members = usersListResponse.getMembers(); for (User member : members) { diff --git a/slack-api-client/src/test/java/test_with_remote_apis/scim2/ApiTest.java b/slack-api-client/src/test/java/test_with_remote_apis/scim2/ApiTest.java index d13bdd08c..1116a4f05 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/scim2/ApiTest.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/scim2/ApiTest.java @@ -111,10 +111,10 @@ public void searchUser_dummy() throws IOException { try { slack.scim2("dummy").searchUsers(req -> req.count(1000)); } catch (SCIM2ApiException e) { - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } @@ -123,10 +123,10 @@ public void readUser_dummy() throws IOException { try { slack.scim2("dummy").readUser(req -> req.id("U12345678")); } catch (SCIM2ApiException e) { - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } @@ -348,10 +348,10 @@ public void groups_dummy() throws IOException { try { slack.scim2("dummy").searchGroups(req -> req.count(1000)); } catch (SCIM2ApiException e) { - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } diff --git a/slack-api-client/src/test/java/test_with_remote_apis/scim2/AsyncApiTest.java b/slack-api-client/src/test/java/test_with_remote_apis/scim2/AsyncApiTest.java index c279236f3..d1b175469 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/scim2/AsyncApiTest.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/scim2/AsyncApiTest.java @@ -115,10 +115,10 @@ public void searchUser_dummy() throws IOException, ExecutionException, Interrupt slack.scim2Async("dummy").searchUsers(req -> req.count(1000)).get(); } catch (Exception _e) { SCIM2ApiException e = ((SCIM2ApiCompletionException) _e.getCause()).getScimApiException(); - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } @@ -128,10 +128,10 @@ public void readUser_dummy() { slack.scim2Async("dummy").readUser(req -> req.id("U12345678")).get(); } catch (Exception _e) { SCIM2ApiException e = ((SCIM2ApiCompletionException) _e.getCause()).getScimApiException(); - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } @@ -378,10 +378,10 @@ public void groups_dummy() throws IOException, ExecutionException, InterruptedEx slack.scim2Async("dummy").searchGroups(req -> req.count(1000)).get(); } catch (Exception _e) { SCIM2ApiException e = ((SCIM2ApiCompletionException) _e.getCause()).getScimApiException(); - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } diff --git a/slack-api-model/src/main/java/com/slack/api/model/Message.java b/slack-api-model/src/main/java/com/slack/api/model/Message.java index 60741c1b9..ea991ddb1 100644 --- a/slack-api-model/src/main/java/com/slack/api/model/Message.java +++ b/slack-api-model/src/main/java/com/slack/api/model/Message.java @@ -269,4 +269,16 @@ public static class AssistantAppThread { private AssistantAppThread assistantAppThread; private String streamingState; + + private Language language; + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Language { + private String locale; + @SerializedName("is_reliable") + private boolean reliable; + } } diff --git a/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java b/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java index ff8c0e5e0..ad6406d7d 100644 --- a/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java +++ b/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java @@ -10,6 +10,7 @@ public class AppFunctionPermissions { private Distribution distribution; private AllowedEntities allowedEntities; private AllowedByAdmin allowedByAdmin; + private PrivateChannelAccess privateChannelAccess; @Data public static class Distribution { @@ -31,4 +32,12 @@ public static class AllowedByAdmin { private String type; private List userIds; } + + @Data + public static class PrivateChannelAccess { + private String permission; + private List userIds; + private List teamIds; + private List orgIds; + } }