slack-sdk 3.40.0.dev0__tar.gz → 3.41.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. {slack_sdk-3.40.0.dev0/slack_sdk.egg-info → slack_sdk-3.41.0}/PKG-INFO +1 -1
  2. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/blocks/block_elements.py +1 -5
  3. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/blocks/blocks.py +5 -10
  4. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/messages/chunk.py +2 -2
  5. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/sqlalchemy/__init__.py +11 -0
  6. slack_sdk-3.41.0/slack_sdk/oauth/sqlalchemy_utils/__init__.py +33 -0
  7. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/sqlalchemy/__init__.py +7 -4
  8. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/version.py +1 -1
  9. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/async_chat_stream.py +8 -8
  10. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/async_client.py +14 -1
  11. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/async_slack_response.py +2 -4
  12. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/chat_stream.py +8 -8
  13. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/client.py +14 -1
  14. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/legacy_client.py +13 -0
  15. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/slack_response.py +2 -4
  16. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0/slack_sdk.egg-info}/PKG-INFO +1 -1
  17. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk.egg-info/SOURCES.txt +1 -0
  18. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/LICENSE +0 -0
  19. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/MANIFEST.in +0 -0
  20. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/README.md +0 -0
  21. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/pyproject.toml +0 -0
  22. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/requirements/optional.txt +0 -0
  23. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/setup.cfg +0 -0
  24. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/__init__.py +0 -0
  25. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/deprecation.py +0 -0
  26. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/errors.py +0 -0
  27. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/py.typed +0 -0
  28. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/rtm/__init__.py +0 -0
  29. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/rtm/client.py +0 -0
  30. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/signature/__init__.py +0 -0
  31. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/signature/verifier.py +0 -0
  32. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/version.py +0 -0
  33. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/__init__.py +0 -0
  34. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/async_base_client.py +0 -0
  35. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/async_client.py +0 -0
  36. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/async_internal_utils.py +0 -0
  37. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/async_slack_response.py +0 -0
  38. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/base_client.py +0 -0
  39. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/__init__.py +0 -0
  40. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/actions.py +0 -0
  41. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/attachments.py +0 -0
  42. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/blocks.py +0 -0
  43. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/dialog_elements.py +0 -0
  44. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/dialogs.py +0 -0
  45. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/elements.py +0 -0
  46. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/interactions.py +0 -0
  47. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/messages.py +0 -0
  48. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/objects.py +0 -0
  49. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/views.py +0 -0
  50. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/client.py +0 -0
  51. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/deprecation.py +0 -0
  52. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/internal_utils.py +0 -0
  53. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/slack_response.py +0 -0
  54. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/webhook/__init__.py +0 -0
  55. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/webhook/async_client.py +0 -0
  56. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/webhook/client.py +0 -0
  57. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/webhook/internal_utils.py +0 -0
  58. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/webhook/webhook_response.py +0 -0
  59. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/__init__.py +0 -0
  60. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/aiohttp_version_checker.py +0 -0
  61. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/__init__.py +0 -0
  62. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/async_client.py +0 -0
  63. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/__init__.py +0 -0
  64. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/async_client.py +0 -0
  65. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/client.py +0 -0
  66. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/internal_utils.py +0 -0
  67. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/logs.py +0 -0
  68. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/response.py +0 -0
  69. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/errors/__init__.py +0 -0
  70. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/__init__.py +0 -0
  71. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/async_handler.py +0 -0
  72. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/builtin_async_handlers.py +0 -0
  73. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/builtin_handlers.py +0 -0
  74. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/builtin_interval_calculators.py +0 -0
  75. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/handler.py +0 -0
  76. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/interval_calculator.py +0 -0
  77. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/jitter.py +0 -0
  78. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/request.py +0 -0
  79. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/response.py +0 -0
  80. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/state.py +0 -0
  81. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/__init__.py +0 -0
  82. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/attachments/__init__.py +0 -0
  83. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/basic_objects.py +0 -0
  84. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/blocks/__init__.py +0 -0
  85. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/blocks/basic_components.py +0 -0
  86. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/dialoags.py +0 -0
  87. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/dialogs/__init__.py +0 -0
  88. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/messages/__init__.py +0 -0
  89. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/messages/message.py +0 -0
  90. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/metadata/__init__.py +0 -0
  91. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/views/__init__.py +0 -0
  92. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/__init__.py +0 -0
  93. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/authorize_url_generator/__init__.py +0 -0
  94. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/__init__.py +0 -0
  95. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/amazon_s3/__init__.py +0 -0
  96. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/async_cacheable_installation_store.py +0 -0
  97. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/async_installation_store.py +0 -0
  98. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/cacheable_installation_store.py +0 -0
  99. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/file/__init__.py +0 -0
  100. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/installation_store.py +0 -0
  101. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/internals.py +0 -0
  102. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/models/__init__.py +0 -0
  103. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/models/bot.py +0 -0
  104. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/models/installation.py +0 -0
  105. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/sqlite3/__init__.py +0 -0
  106. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/redirect_uri_page_renderer/__init__.py +0 -0
  107. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/__init__.py +0 -0
  108. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/amazon_s3/__init__.py +0 -0
  109. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/async_state_store.py +0 -0
  110. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/file/__init__.py +0 -0
  111. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/sqlite3/__init__.py +0 -0
  112. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/state_store.py +0 -0
  113. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_utils/__init__.py +0 -0
  114. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/token_rotation/__init__.py +0 -0
  115. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/token_rotation/async_rotator.py +0 -0
  116. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/token_rotation/rotator.py +0 -0
  117. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/proxy_env_variable_loader.py +0 -0
  118. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/py.typed +0 -0
  119. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/rtm/__init__.py +0 -0
  120. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/rtm/v2/__init__.py +0 -0
  121. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/rtm_v2/__init__.py +0 -0
  122. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/__init__.py +0 -0
  123. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/async_client.py +0 -0
  124. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/__init__.py +0 -0
  125. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/async_client.py +0 -0
  126. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/client.py +0 -0
  127. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/default_arg.py +0 -0
  128. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/group.py +0 -0
  129. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/internal_utils.py +0 -0
  130. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/response.py +0 -0
  131. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/types.py +0 -0
  132. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/user.py +0 -0
  133. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/signature/__init__.py +0 -0
  134. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/__init__.py +0 -0
  135. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/aiohttp/__init__.py +0 -0
  136. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/async_client.py +0 -0
  137. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/async_listeners.py +0 -0
  138. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/builtin/__init__.py +0 -0
  139. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/builtin/client.py +0 -0
  140. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/builtin/connection.py +0 -0
  141. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/builtin/frame_header.py +0 -0
  142. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/builtin/internals.py +0 -0
  143. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/client.py +0 -0
  144. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/interval_runner.py +0 -0
  145. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/listeners.py +0 -0
  146. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/logger/__init__.py +0 -0
  147. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/logger/messages.py +0 -0
  148. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/request.py +0 -0
  149. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/response.py +0 -0
  150. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/websocket_client/__init__.py +0 -0
  151. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/websockets/__init__.py +0 -0
  152. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/__init__.py +0 -0
  153. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/async_base_client.py +0 -0
  154. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/async_internal_utils.py +0 -0
  155. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/base_client.py +0 -0
  156. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/deprecation.py +0 -0
  157. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/file_upload_v2_result.py +0 -0
  158. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/internal_utils.py +0 -0
  159. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/legacy_base_client.py +0 -0
  160. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/legacy_slack_response.py +0 -0
  161. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/webhook/__init__.py +0 -0
  162. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/webhook/async_client.py +0 -0
  163. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/webhook/client.py +0 -0
  164. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/webhook/internal_utils.py +0 -0
  165. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/webhook/webhook_response.py +0 -0
  166. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk.egg-info/dependency_links.txt +0 -0
  167. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk.egg-info/requires.txt +0 -0
  168. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk.egg-info/top_level.txt +0 -0
  169. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/tests/test_aiohttp_version_checker.py +0 -0
  170. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/tests/test_asyncio_event_loops.py +0 -0
  171. {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/tests/test_proxy_env_variable_loader.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: slack_sdk
3
- Version: 3.40.0.dev0
3
+ Version: 3.41.0
4
4
  Summary: The Slack API Platform SDK for Python
5
5
  Home-page: https://github.com/slackapi/python-slack-sdk
6
6
  Author: Slack Technologies, LLC
@@ -1668,7 +1668,6 @@ class UrlSourceElement(BlockElement):
1668
1668
  {
1669
1669
  "url",
1670
1670
  "text",
1671
- "icon_url",
1672
1671
  }
1673
1672
  )
1674
1673
 
@@ -1677,23 +1676,20 @@ class UrlSourceElement(BlockElement):
1677
1676
  *,
1678
1677
  url: str,
1679
1678
  text: str,
1680
- icon_url: Optional[str] = None,
1681
1679
  **others: Dict,
1682
1680
  ):
1683
1681
  """
1684
- A URL source element to reference in a task card block.
1682
+ A URL source element that displays a URL source for referencing within a task card block.
1685
1683
  https://docs.slack.dev/reference/block-kit/block-elements/url-source-element
1686
1684
 
1687
1685
  Args:
1688
1686
  url (required): The URL type source.
1689
1687
  text (required): Display text for the URL.
1690
- icon_url: Optional icon URL to display with the source.
1691
1688
  """
1692
1689
  super().__init__(type=self.type)
1693
1690
  show_unknown_key_warning(self, others)
1694
1691
  self.url = url
1695
1692
  self.text = text
1696
- self.icon_url = icon_url
1697
1693
 
1698
1694
 
1699
1695
  # -------------------------------------------------
@@ -812,7 +812,7 @@ class TaskCardBlock(Block):
812
812
  block_id: Optional[str] = None,
813
813
  **others: dict,
814
814
  ):
815
- """A discrete action or tool call.
815
+ """Displays a single task, representing a single action.
816
816
  https://docs.slack.dev/reference/block-kit/blocks/task-card-block/
817
817
 
818
818
  Args:
@@ -824,8 +824,8 @@ class TaskCardBlock(Block):
824
824
  title (required): Title of the task in plain text
825
825
  details: Details of the task in the form of a single "rich_text" entity.
826
826
  output: Output of the task in the form of a single "rich_text" entity.
827
- sources: List of sources used to generate a response
828
- status: The state of a task. Either "pending" or "in_progress" or "complete" or "error".
827
+ sources: Array of URL source elements used to generate a response.
828
+ status: The state of a task. Either "pending", "in_progress", "complete", or "error".
829
829
  """
830
830
  super().__init__(type=self.type, block_id=block_id)
831
831
  show_unknown_key_warning(self, others)
@@ -849,7 +849,6 @@ class PlanBlock(Block):
849
849
  def attributes(self) -> Set[str]: # type: ignore[override]
850
850
  return super().attributes.union(
851
851
  {
852
- "plan_id",
853
852
  "title",
854
853
  "tasks",
855
854
  }
@@ -858,13 +857,12 @@ class PlanBlock(Block):
858
857
  def __init__(
859
858
  self,
860
859
  *,
861
- plan_id: str,
862
860
  title: str,
863
861
  tasks: Optional[Sequence[Union[Dict, TaskCardBlock]]] = None,
864
862
  block_id: Optional[str] = None,
865
863
  **others: dict,
866
864
  ):
867
- """A collection of related tasks.
865
+ """Displays a collection of related tasks.
868
866
  https://docs.slack.dev/reference/block-kit/blocks/plan-block/
869
867
 
870
868
  Args:
@@ -872,14 +870,11 @@ class PlanBlock(Block):
872
870
  Maximum length for this field is 255 characters.
873
871
  block_id should be unique for each message and each iteration of a message.
874
872
  If a message is updated, use a new block_id.
875
- plan_id (required): ID for the plan (May be removed / made optional, feel free to pass in a random UUID
876
- for now)
877
873
  title (required): Title of the plan in plain text
878
- tasks: Details of the task in the form of a single "rich_text" entity.
874
+ tasks: A sequence of task card blocks. Each task represents a single action within the plan.
879
875
  """
880
876
  super().__init__(type=self.type, block_id=block_id)
881
877
  show_unknown_key_warning(self, others)
882
878
 
883
- self.plan_id = plan_id
884
879
  self.title = title
885
880
  self.tasks = tasks
@@ -82,7 +82,7 @@ class PlanUpdateChunk(Chunk):
82
82
  title: str,
83
83
  **others: Dict,
84
84
  ):
85
- """An updated title of plans for task and tool calls.
85
+ """Used for displaying an updated title of a plan.
86
86
 
87
87
  https://docs.slack.dev/messaging/sending-and-scheduling-messages#text-streaming
88
88
  """
@@ -119,7 +119,7 @@ class TaskUpdateChunk(Chunk):
119
119
  sources: Optional[Sequence[Union[Dict, UrlSourceElement]]] = None,
120
120
  **others: Dict,
121
121
  ):
122
- """Used for displaying tool execution progress in a timeline-style UI.
122
+ """Used for displaying task progress in a timeline-style UI.
123
123
 
124
124
  https://docs.slack.dev/messaging/sending-and-scheduling-messages#text-streaming
125
125
  """
@@ -23,6 +23,7 @@ from slack_sdk.oauth.installation_store.models.installation import Installation
23
23
  from slack_sdk.oauth.installation_store.async_installation_store import (
24
24
  AsyncInstallationStore,
25
25
  )
26
+ from slack_sdk.oauth.sqlalchemy_utils import normalize_datetime_for_db
26
27
 
27
28
 
28
29
  class SQLAlchemyInstallationStore(InstallationStore):
@@ -140,6 +141,9 @@ class SQLAlchemyInstallationStore(InstallationStore):
140
141
  with self.engine.begin() as conn:
141
142
  i = installation.to_dict()
142
143
  i["client_id"] = self.client_id
144
+ i["installed_at"] = normalize_datetime_for_db(i.get("installed_at"))
145
+ i["bot_token_expires_at"] = normalize_datetime_for_db(i.get("bot_token_expires_at"))
146
+ i["user_token_expires_at"] = normalize_datetime_for_db(i.get("user_token_expires_at"))
143
147
 
144
148
  i_column = self.installations.c
145
149
  installations_rows = conn.execute(
@@ -171,6 +175,8 @@ class SQLAlchemyInstallationStore(InstallationStore):
171
175
  # bots
172
176
  b = bot.to_dict()
173
177
  b["client_id"] = self.client_id
178
+ b["installed_at"] = normalize_datetime_for_db(b.get("installed_at"))
179
+ b["bot_token_expires_at"] = normalize_datetime_for_db(b.get("bot_token_expires_at"))
174
180
 
175
181
  b_column = self.bots.c
176
182
  bots_rows = conn.execute(
@@ -419,6 +425,9 @@ class AsyncSQLAlchemyInstallationStore(AsyncInstallationStore):
419
425
  async with self.engine.begin() as conn:
420
426
  i = installation.to_dict()
421
427
  i["client_id"] = self.client_id
428
+ i["installed_at"] = normalize_datetime_for_db(i.get("installed_at"))
429
+ i["bot_token_expires_at"] = normalize_datetime_for_db(i.get("bot_token_expires_at"))
430
+ i["user_token_expires_at"] = normalize_datetime_for_db(i.get("user_token_expires_at"))
422
431
 
423
432
  i_column = self.installations.c
424
433
  installations_rows = await conn.execute(
@@ -450,6 +459,8 @@ class AsyncSQLAlchemyInstallationStore(AsyncInstallationStore):
450
459
  # bots
451
460
  b = bot.to_dict()
452
461
  b["client_id"] = self.client_id
462
+ b["installed_at"] = normalize_datetime_for_db(b.get("installed_at"))
463
+ b["bot_token_expires_at"] = normalize_datetime_for_db(b.get("bot_token_expires_at"))
453
464
 
454
465
  b_column = self.bots.c
455
466
  bots_rows = await conn.execute(
@@ -0,0 +1,33 @@
1
+ from datetime import datetime
2
+ from typing import Optional
3
+
4
+
5
+ # TODO: Remove this function in next major release (v4.0.0) after updating all
6
+ # DateTime columns to DateTime(timezone=True). See issue #1832 for context.
7
+ def normalize_datetime_for_db(dt: Optional[datetime]) -> Optional[datetime]:
8
+ """
9
+ Normalize timezone-aware datetime to naive UTC datetime for database storage.
10
+
11
+ Ensures compatibility with existing databases using TIMESTAMP WITHOUT TIME ZONE.
12
+ SQLAlchemy DateTime columns without timezone=True create naive timestamp columns
13
+ in databases like PostgreSQL. This function strips timezone information from
14
+ timezone-aware datetimes (which are already in UTC) to enable safe comparisons.
15
+
16
+ Args:
17
+ dt: A timezone-aware or naive datetime object, or None
18
+
19
+ Returns:
20
+ A naive datetime in UTC, or None if input is None
21
+
22
+ Example:
23
+ >>> from datetime import datetime, timezone
24
+ >>> aware_dt = datetime(2024, 1, 1, 12, 0, 0, tzinfo=timezone.utc)
25
+ >>> naive_dt = normalize_datetime_for_db(aware_dt)
26
+ >>> naive_dt.tzinfo is None
27
+ True
28
+ """
29
+ if dt is None:
30
+ return None
31
+ if dt.tzinfo is not None:
32
+ return dt.replace(tzinfo=None)
33
+ return dt
@@ -10,6 +10,7 @@ import sqlalchemy
10
10
  from sqlalchemy import Table, Column, Integer, String, DateTime, and_, MetaData
11
11
  from sqlalchemy.engine import Engine
12
12
  from sqlalchemy.ext.asyncio import AsyncEngine
13
+ from slack_sdk.oauth.sqlalchemy_utils import normalize_datetime_for_db
13
14
 
14
15
 
15
16
  class SQLAlchemyOAuthStateStore(OAuthStateStore):
@@ -55,7 +56,7 @@ class SQLAlchemyOAuthStateStore(OAuthStateStore):
55
56
 
56
57
  def issue(self, *args, **kwargs) -> str:
57
58
  state: str = str(uuid4())
58
- now = datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc)
59
+ now = normalize_datetime_for_db(datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc))
59
60
  with self.engine.begin() as conn:
60
61
  conn.execute(
61
62
  self.oauth_states.insert(),
@@ -65,9 +66,10 @@ class SQLAlchemyOAuthStateStore(OAuthStateStore):
65
66
 
66
67
  def consume(self, state: str) -> bool:
67
68
  try:
69
+ now = normalize_datetime_for_db(datetime.now(tz=timezone.utc))
68
70
  with self.engine.begin() as conn:
69
71
  c = self.oauth_states.c
70
- query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > datetime.now(tz=timezone.utc)))
72
+ query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > now))
71
73
  result = conn.execute(query)
72
74
  for row in result.mappings():
73
75
  self.logger.debug(f"consume's query result: {row}")
@@ -124,7 +126,7 @@ class AsyncSQLAlchemyOAuthStateStore(AsyncOAuthStateStore):
124
126
 
125
127
  async def async_issue(self, *args, **kwargs) -> str:
126
128
  state: str = str(uuid4())
127
- now = datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc)
129
+ now = normalize_datetime_for_db(datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc))
128
130
  async with self.engine.begin() as conn:
129
131
  await conn.execute(
130
132
  self.oauth_states.insert(),
@@ -134,9 +136,10 @@ class AsyncSQLAlchemyOAuthStateStore(AsyncOAuthStateStore):
134
136
 
135
137
  async def async_consume(self, state: str) -> bool:
136
138
  try:
139
+ now = normalize_datetime_for_db(datetime.now(tz=timezone.utc))
137
140
  async with self.engine.begin() as conn:
138
141
  c = self.oauth_states.c
139
- query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > datetime.now(tz=timezone.utc)))
142
+ query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > now))
140
143
  result = await conn.execute(query)
141
144
  for row in result.mappings():
142
145
  self.logger.debug(f"consume's query result: {row}")
@@ -1,3 +1,3 @@
1
1
  """Check the latest version at https://pypi.org/project/slack-sdk/"""
2
2
 
3
- __version__ = "3.40.0.dev0"
3
+ __version__ = "3.41.0"
@@ -56,7 +56,7 @@ class AsyncChatStream:
56
56
  streaming to channels.
57
57
  recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
58
58
  task_display_mode: Specifies how tasks are displayed in the message. A "timeline" displays individual tasks
59
- interleaved with text and "plan" displays all tasks together.
59
+ with text and "plan" displays all tasks together.
60
60
  buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value
61
61
  decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
62
62
  **kwargs: Additional arguments passed to the underlying API calls.
@@ -90,7 +90,7 @@ class AsyncChatStream:
90
90
  is stopped this method cannot be called.
91
91
 
92
92
  Args:
93
- chunks: An array of streaming chunks that can contain either markdown text or task updates.
93
+ chunks: An array of streaming chunks. Chunks can be markdown text, plan, or task update chunks.
94
94
  markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
95
95
  what will be appended to the message received so far.
96
96
  **kwargs: Additional arguments passed to the underlying API calls.
@@ -146,7 +146,7 @@ class AsyncChatStream:
146
146
 
147
147
  Args:
148
148
  blocks: A list of blocks that will be rendered at the bottom of the finalized message.
149
- chunks: An array of streaming chunks that can contain either markdown text or task updates.
149
+ chunks: An array of streaming chunks. Chunks can be markdown text, plan, or task update chunks.
150
150
  markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
151
151
  what will be appended to the message received so far.
152
152
  metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
@@ -206,17 +206,17 @@ class AsyncChatStream:
206
206
 
207
207
  async def _flush_buffer(self, chunks: Optional[Sequence[Union[Dict, Chunk]]] = None, **kwargs) -> AsyncSlackResponse:
208
208
  """Flush the internal buffer with chunks by making appropriate API calls."""
209
- flushings: List[Union[Dict, Chunk]] = []
209
+ chunks_to_flush: List[Union[Dict, Chunk]] = []
210
210
  if len(self._buffer) != 0:
211
- flushings.append(MarkdownTextChunk(text=self._buffer))
211
+ chunks_to_flush.append(MarkdownTextChunk(text=self._buffer))
212
212
  if chunks is not None:
213
- flushings.extend(chunks)
213
+ chunks_to_flush.extend(chunks)
214
214
  if not self._stream_ts:
215
215
  response = await self._client.chat_startStream(
216
216
  **self._stream_args,
217
217
  token=self._token,
218
218
  **kwargs,
219
- chunks=flushings,
219
+ chunks=chunks_to_flush,
220
220
  )
221
221
  self._stream_ts = response.get("ts")
222
222
  self._state = "in_progress"
@@ -226,7 +226,7 @@ class AsyncChatStream:
226
226
  channel=self._stream_args["channel"],
227
227
  ts=self._stream_ts,
228
228
  **kwargs,
229
- chunks=flushings,
229
+ chunks=chunks_to_flush,
230
230
  )
231
231
  self._buffer = ""
232
232
  return response
@@ -2059,6 +2059,19 @@ class AsyncWebClient(AsyncBaseClient):
2059
2059
  kwargs.update({"app_id": app_id})
2060
2060
  return await self.api_call("apps.manifest.validate", params=kwargs)
2061
2061
 
2062
+ async def apps_user_connection_update(
2063
+ self,
2064
+ *,
2065
+ user_id: str,
2066
+ status: str,
2067
+ **kwargs,
2068
+ ) -> AsyncSlackResponse:
2069
+ """Updates the connection status between a user and an app.
2070
+ https://docs.slack.dev/reference/methods/apps.user.connection.update
2071
+ """
2072
+ kwargs.update({"user_id": user_id, "status": status})
2073
+ return await self.api_call("apps.user.connection.update", params=kwargs)
2074
+
2062
2075
  async def tooling_tokens_rotate(
2063
2076
  self,
2064
2077
  *,
@@ -2974,7 +2987,7 @@ class AsyncWebClient(AsyncBaseClient):
2974
2987
  streaming to channels.
2975
2988
  recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
2976
2989
  task_display_mode: Specifies how tasks are displayed in the message. A "timeline" displays individual tasks
2977
- interleaved with text and "plan" displays all tasks together.
2990
+ with text and "plan" displays all tasks together.
2978
2991
  **kwargs: Additional arguments passed to the underlying API calls.
2979
2992
 
2980
2993
  Returns:
@@ -163,12 +163,10 @@ class AsyncSlackResponse:
163
163
  raise StopAsyncIteration
164
164
 
165
165
  @overload
166
- def get(self, key: str, default: None = None) -> Optional[Any]:
167
- ...
166
+ def get(self, key: str, default: None = None) -> Optional[Any]: ...
168
167
 
169
168
  @overload
170
- def get(self, key: str, default: T) -> T:
171
- ...
169
+ def get(self, key: str, default: T) -> T: ...
172
170
 
173
171
  def get(self, key, default=None):
174
172
  """Retrieves any key from the response data.
@@ -46,7 +46,7 @@ class ChatStream:
46
46
  streaming to channels.
47
47
  recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
48
48
  task_display_mode: Specifies how tasks are displayed in the message. A "timeline" displays individual tasks
49
- interleaved with text and "plan" displays all tasks together.
49
+ with text and "plan" displays all tasks together.
50
50
  buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value
51
51
  decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
52
52
  **kwargs: Additional arguments passed to the underlying API calls.
@@ -80,7 +80,7 @@ class ChatStream:
80
80
  is stopped this method cannot be called.
81
81
 
82
82
  Args:
83
- chunks: An array of streaming chunks that can contain either markdown text or task updates.
83
+ chunks: An array of streaming chunks. Chunks can be markdown text, plan, or task update chunks.
84
84
  markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
85
85
  what will be appended to the message received so far.
86
86
  **kwargs: Additional arguments passed to the underlying API calls.
@@ -136,7 +136,7 @@ class ChatStream:
136
136
 
137
137
  Args:
138
138
  blocks: A list of blocks that will be rendered at the bottom of the finalized message.
139
- chunks: An array of streaming chunks that can contain either markdown text or task updates.
139
+ chunks: An array of streaming chunks. Chunks can be markdown text, plan, or task update chunks.
140
140
  markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
141
141
  what will be appended to the message received so far.
142
142
  metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
@@ -196,17 +196,17 @@ class ChatStream:
196
196
 
197
197
  def _flush_buffer(self, chunks: Optional[Sequence[Union[Dict, Chunk]]] = None, **kwargs) -> SlackResponse:
198
198
  """Flush the internal buffer with chunks by making appropriate API calls."""
199
- flushings: List[Union[Dict, Chunk]] = []
199
+ chunks_to_flush: List[Union[Dict, Chunk]] = []
200
200
  if len(self._buffer) != 0:
201
- flushings.append(MarkdownTextChunk(text=self._buffer))
201
+ chunks_to_flush.append(MarkdownTextChunk(text=self._buffer))
202
202
  if chunks is not None:
203
- flushings.extend(chunks)
203
+ chunks_to_flush.extend(chunks)
204
204
  if not self._stream_ts:
205
205
  response = self._client.chat_startStream(
206
206
  **self._stream_args,
207
207
  token=self._token,
208
208
  **kwargs,
209
- chunks=flushings,
209
+ chunks=chunks_to_flush,
210
210
  )
211
211
  self._stream_ts = response.get("ts")
212
212
  self._state = "in_progress"
@@ -216,7 +216,7 @@ class ChatStream:
216
216
  channel=self._stream_args["channel"],
217
217
  ts=self._stream_ts,
218
218
  **kwargs,
219
- chunks=flushings,
219
+ chunks=chunks_to_flush,
220
220
  )
221
221
  self._buffer = ""
222
222
  return response
@@ -2049,6 +2049,19 @@ class WebClient(BaseClient):
2049
2049
  kwargs.update({"app_id": app_id})
2050
2050
  return self.api_call("apps.manifest.validate", params=kwargs)
2051
2051
 
2052
+ def apps_user_connection_update(
2053
+ self,
2054
+ *,
2055
+ user_id: str,
2056
+ status: str,
2057
+ **kwargs,
2058
+ ) -> SlackResponse:
2059
+ """Updates the connection status between a user and an app.
2060
+ https://docs.slack.dev/reference/methods/apps.user.connection.update
2061
+ """
2062
+ kwargs.update({"user_id": user_id, "status": status})
2063
+ return self.api_call("apps.user.connection.update", params=kwargs)
2064
+
2052
2065
  def tooling_tokens_rotate(
2053
2066
  self,
2054
2067
  *,
@@ -2964,7 +2977,7 @@ class WebClient(BaseClient):
2964
2977
  streaming to channels.
2965
2978
  recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
2966
2979
  task_display_mode: Specifies how tasks are displayed in the message. A "timeline" displays individual tasks
2967
- interleaved with text and "plan" displays all tasks together.
2980
+ with text and "plan" displays all tasks together.
2968
2981
  **kwargs: Additional arguments passed to the underlying API calls.
2969
2982
 
2970
2983
  Returns:
@@ -2060,6 +2060,19 @@ class LegacyWebClient(LegacyBaseClient):
2060
2060
  kwargs.update({"app_id": app_id})
2061
2061
  return self.api_call("apps.manifest.validate", params=kwargs)
2062
2062
 
2063
+ def apps_user_connection_update(
2064
+ self,
2065
+ *,
2066
+ user_id: str,
2067
+ status: str,
2068
+ **kwargs,
2069
+ ) -> Union[Future, SlackResponse]:
2070
+ """Updates the connection status between a user and an app.
2071
+ https://docs.slack.dev/reference/methods/apps.user.connection.update
2072
+ """
2073
+ kwargs.update({"user_id": user_id, "status": status})
2074
+ return self.api_call("apps.user.connection.update", params=kwargs)
2075
+
2063
2076
  def tooling_tokens_rotate(
2064
2077
  self,
2065
2078
  *,
@@ -157,12 +157,10 @@ class SlackResponse:
157
157
  raise StopIteration
158
158
 
159
159
  @overload
160
- def get(self, key: str, default: None = None) -> Optional[Any]:
161
- ...
160
+ def get(self, key: str, default: None = None) -> Optional[Any]: ...
162
161
 
163
162
  @overload
164
- def get(self, key: str, default: T) -> T:
165
- ...
163
+ def get(self, key: str, default: T) -> T: ...
166
164
 
167
165
  def get(self, key, default=None):
168
166
  """Retrieves any key from the response data.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: slack_sdk
3
- Version: 3.40.0.dev0
3
+ Version: 3.41.0
4
4
  Summary: The Slack API Platform SDK for Python
5
5
  Home-page: https://github.com/slackapi/python-slack-sdk
6
6
  Author: Slack Technologies, LLC
@@ -99,6 +99,7 @@ slack_sdk/oauth/installation_store/models/installation.py
99
99
  slack_sdk/oauth/installation_store/sqlalchemy/__init__.py
100
100
  slack_sdk/oauth/installation_store/sqlite3/__init__.py
101
101
  slack_sdk/oauth/redirect_uri_page_renderer/__init__.py
102
+ slack_sdk/oauth/sqlalchemy_utils/__init__.py
102
103
  slack_sdk/oauth/state_store/__init__.py
103
104
  slack_sdk/oauth/state_store/async_state_store.py
104
105
  slack_sdk/oauth/state_store/state_store.py
File without changes
File without changes
File without changes
File without changes